:root {
  --dawn: 0;
  --earth-y: 128;
  --earth-scale: 0.32;
  --ring: 0;
  --display-font: "Balonku", "Baloo 2", cursive;
}

* {
  box-sizing: border-box;
}

html,
body {
  margin: 0;
  min-height: 100%;
}

body {
  font-family: "Nunito", sans-serif;
  color: #fff;
  background: #02030a;
  overflow-x: clip;
}

.password-gate {
  position: fixed;
  inset: 0;
  z-index: 40;
  display: grid;
  place-items: center;
  padding: 1.2rem;
  background: radial-gradient(circle at 50% 20%, rgba(44, 59, 132, 0.95) 0%, rgba(5, 7, 19, 0.98) 75%);
}

.gate-card {
  width: min(520px, 100%);
  border-radius: 22px;
  border: 2px solid rgba(255, 255, 255, 0.35);
  background: rgba(9, 13, 30, 0.82);
  box-shadow: 0 20px 40px rgba(0, 0, 0, 0.35);
  padding: 1.3rem 1.1rem;
}

.gate-form {
  display: flex;
  gap: 0.55rem;
}

.gate-form input {
  flex: 1;
  border: 2px solid rgba(255, 255, 255, 0.35);
  border-radius: 12px;
  padding: 0.72rem 0.8rem;
  font: inherit;
  background: rgba(255, 255, 255, 0.95);
  color: #241c3d;
}

.gate-form button {
  border: 0;
  border-radius: 12px;
  padding: 0.72rem 1rem;
  font: inherit;
  font-weight: 700;
  background: linear-gradient(120deg, #ff97be, #ffc2d7);
  color: #241c3d;
}

.gate-error {
  min-height: 1.2rem;
  color: #ffbdd5;
  font-size: 0.92rem;
}

body:not(.locked) .password-gate {
  display: none;
}

body.locked .experience {
  visibility: hidden;
  pointer-events: none;
}

.experience {
  position: relative;
}

.viewport {
  position: sticky;
  top: 0;
  height: 100vh;
  overflow: hidden;
  isolation: isolate;
}

.scroll-track {
  height: 1380vh;
}

.bg,
.stars-canvas,
.streaks-canvas,
.fx-canvas,
.copy-layer,
.memories {
  position: absolute;
  inset: 0;
}

.intro-gif {
  position: absolute;
  left: 50%;
  top: 34%;
  width: min(52vw, 420px);
  transform: translate(-50%, -50%);
  z-index: 9;
  pointer-events: none;
  opacity: 1;
  transition: opacity 0.2s linear;
}

.intro-gif .tenor-gif-embed {
  border-radius: 20px;
  overflow: hidden;
  border: 3px solid rgba(255, 255, 255, 0.72);
  box-shadow: 0 18px 38px rgba(4, 7, 20, 0.45);
}

.scene-transition {
  position: absolute;
  inset: 0;
  z-index: 7;
  pointer-events: none;
  opacity: 0;
  background:
    radial-gradient(circle at 50% 50%, rgba(255, 246, 252, 0.36) 0%, rgba(9, 11, 26, 0.84) 54%, rgba(2, 4, 12, 0.95) 100%);
}

.bg-space {
  background: radial-gradient(circle at 50% 10%, #0e1548 0%, #05071b 40%, #010205 100%);
}

.bg-dawn {
  background: linear-gradient(180deg, rgba(125, 109, 226, 0.9) 0%, rgba(255, 175, 203, 0.88) 55%, rgba(255, 232, 246, 0.95) 100%);
  opacity: var(--dawn);
  transition: opacity 0.28s ease-out;
}

.bg-race {
  background:
    radial-gradient(ellipse at 50% 112%, rgba(255, 255, 255, 0.17) 0 14%, transparent 35%),
    linear-gradient(180deg, rgba(20, 23, 56, 0.16) 0%, rgba(20, 23, 56, 0.62) 100%),
    linear-gradient(0deg, #181a26 0 22%, transparent 22%),
    repeating-linear-gradient(
      90deg,
      rgba(255, 255, 255, 0) 0 72px,
      rgba(255, 255, 255, 0.4) 72px 84px,
      rgba(255, 255, 255, 0) 84px 150px
    ),
    repeating-linear-gradient(
      60deg,
      rgba(255, 255, 255, 0.04) 0 10px,
      rgba(0, 0, 0, 0.05) 10px 20px
    );
  opacity: 0;
}

.bg-festival {
  background:
    radial-gradient(circle at 20% 20%, rgba(255, 192, 218, 0.95) 0 20%, transparent 45%),
    radial-gradient(circle at 82% 26%, rgba(178, 224, 255, 0.92) 0 18%, transparent 46%),
    linear-gradient(180deg, rgba(255, 181, 213, 0.88), rgba(255, 230, 242, 0.96));
  opacity: 0;
}

.stars-canvas,
.streaks-canvas {
  pointer-events: none;
}

.streaks-canvas {
  mix-blend-mode: screen;
}

.fx-canvas {
  pointer-events: none;
  z-index: 7;
}

.earth-wrap {
  position: absolute;
  left: 50%;
  top: calc(var(--earth-y) * 1vh);
  transform: translate(-50%, -50%) scale(var(--earth-scale));
  width: clamp(220px, 38vw, 560px);
  aspect-ratio: 1;
  pointer-events: none;
  transition: transform 0.35s cubic-bezier(0.2, 0.7, 0.2, 1);
}

.earth-glow {
  position: absolute;
  inset: -16%;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(114, 183, 255, 0.44) 0%, rgba(114, 183, 255, 0) 70%);
}

.earth {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  border: 4px solid rgba(10, 29, 65, 0.8);
  background: radial-gradient(circle at 30% 24%, #9de0ff 0%, #4ca6ee 44%, #2f6ebf 100%);
  box-shadow: inset -24px -28px 48px rgba(0, 28, 64, 0.5);
}

.continent {
  position: absolute;
  background: #61bd7b;
  border-radius: 48% 52% 44% 56% / 54% 43% 57% 46%;
}

.c1 {
  width: 33%;
  height: 22%;
  top: 31%;
  left: 24%;
  transform: rotate(-14deg);
}

.c2 {
  width: 22%;
  height: 16%;
  top: 58%;
  left: 55%;
  transform: rotate(18deg);
}

.c3 {
  width: 16%;
  height: 12%;
  top: 22%;
  left: 62%;
}

.orbit-ring {
  position: absolute;
  inset: -17%;
  border-radius: 50%;
  border: 2px dashed rgba(255, 246, 253, 0.68);
  opacity: var(--ring);
  filter: drop-shadow(0 0 10px rgba(255, 255, 255, 0.25));
}

.rocket {
  position: absolute;
  width: clamp(140px, 18vw, 220px);
  aspect-ratio: 3 / 2;
  left: -220px;
  top: -220px;
  transform-origin: 50% 50%;
  z-index: 6;
  filter: drop-shadow(0 14px 26px rgba(8, 11, 34, 0.55));
}

.rocket svg {
  width: 100%;
  height: auto;
  overflow: visible;
}

.rocket-svg {
  animation: rocket-bob 1.8s ease-in-out infinite alternate;
}

.rocket-flame-shape {
  transform-origin: 24px 84px;
  animation: flame 0.2s ease-in-out infinite alternate;
}

.bear-eye {
  transform-origin: center;
  animation: blink 4.5s ease-in-out infinite;
}

.copy-layer {
  z-index: 5;
  pointer-events: none;
}

.scene-visual {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 3;
  opacity: 0;
}

.kart {
  transform: translate3d(-120vw, 0, 0);
}

.kart svg {
  position: absolute;
  width: min(40vw, 430px);
  left: 0;
  bottom: 11vh;
}

.kart-b svg {
  width: min(38vw, 360px);
  left: 0;
  right: auto;
  bottom: 12vh;
}

.kart {
  z-index: 4;
}

.kart-b {
  z-index: 3;
}

.festival {
  z-index: 2;
}

.confetti-layer {
  position: absolute;
  inset: 0;
  background:
    radial-gradient(circle at 10% 20%, rgba(255, 133, 181, 0.34) 0 1.6%, transparent 1.7%),
    radial-gradient(circle at 28% 44%, rgba(135, 195, 255, 0.34) 0 1.4%, transparent 1.5%),
    radial-gradient(circle at 42% 16%, rgba(255, 224, 146, 0.34) 0 1.5%, transparent 1.6%),
    radial-gradient(circle at 66% 34%, rgba(255, 141, 194, 0.34) 0 1.6%, transparent 1.7%),
    radial-gradient(circle at 83% 22%, rgba(165, 222, 255, 0.34) 0 1.6%, transparent 1.7%);
  animation: confetti-drift 6s linear infinite;
}

.line {
  position: absolute;
  margin: 0;
  left: 50vw;
  top: calc(var(--y) * 1vh);
  max-width: min(82vw, 52ch);
  font-family: var(--display-font);
  font-size: clamp(1rem, 2.1vw, 1.6rem);
  line-height: 1.5;
  letter-spacing: 0.015em;
  font-weight: 800;
  color: #ffffff;
  text-shadow: 0 4px 22px rgba(0, 0, 0, 0.96), 0 0 10px rgba(10, 12, 30, 0.8);
  background: linear-gradient(90deg, rgba(3, 5, 17, 0.76), rgba(3, 5, 17, 0.48));
  border: 1px solid rgba(255, 255, 255, 0.16);
  padding: 0.3em 0.58em;
  border-radius: 14px;
  text-align: center;
  opacity: 0;
  transform: translate3d(0, 28px, 0) scale(0.98);
  will-change: transform, opacity;
  transition: opacity 0.25s linear;
}

.line.center {
  text-align: center;
}

.line.hero-line {
  font-size: clamp(1.9rem, 6.4vw, 4.8rem);
  letter-spacing: 0.06em;
  text-shadow: 0 8px 30px rgba(0, 0, 0, 0.7), 0 0 16px rgba(255, 214, 235, 0.5);
  animation: title-glow 1.8s ease-in-out infinite alternate;
}

.line:first-child,
.line:last-child {
  font-family: var(--display-font);
  font-size: clamp(1.3rem, 3.2vw, 2.8rem);
}

.ending-line {
  z-index: 8;
}

.final-seq {
  max-width: min(80vw, 46ch);
}

.memories {
  pointer-events: none;
  z-index: 2;
}

.memory {
  position: absolute;
  left: 0;
  top: 0;
  width: clamp(154px, 18vw, 290px);
  aspect-ratio: 3 / 4;
  margin: 0;
  border-radius: 18px;
  overflow: hidden;
  border: 3px solid rgba(255, 255, 255, 0.86);
  box-shadow: 0 20px 34px rgba(5, 8, 24, 0.36);
  transform: translate(-50%, -50%) scale(0.7);
  opacity: 0;
  filter: saturate(0.92) brightness(0.92);
  transition: opacity 0.35s ease;
}

.memory img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.end-gif {
  position: absolute;
  left: 50%;
  top: 50%;
  width: min(48vw, 380px);
  transform: translate(-50%, -50%);
  z-index: 4;
  opacity: 0;
  transition: opacity 0.45s ease;
}

.end-gif .tenor-gif-embed {
  border-radius: 20px;
  overflow: hidden;
  border: 3px solid rgba(255, 255, 255, 0.7);
  box-shadow: 0 18px 38px rgba(16, 12, 38, 0.45);
}

.hud {
  position: absolute;
  left: 1rem;
  right: 1rem;
  top: 1rem;
  display: flex;
  justify-content: space-between;
  align-items: center;
  z-index: 8;
  pointer-events: none;
  font-family: var(--display-font);
  font-size: 0.95rem;
  text-transform: lowercase;
}

.progress {
  width: min(42vw, 260px);
  height: 8px;
  border-radius: 999px;
  border: 2px solid rgba(255, 255, 255, 0.6);
  overflow: hidden;
}

.progress i {
  display: block;
  height: 100%;
  width: 0%;
  background: linear-gradient(90deg, #85bfff, #ff8ebe);
}

@keyframes flame {
  from {
    transform: scaleX(1) scaleY(1);
  }
  to {
    transform: scaleX(0.76) scaleY(1.1);
  }
}

@keyframes rocket-bob {
  from {
    transform: translateY(-1px);
  }
  to {
    transform: translateY(3px);
  }
}

@keyframes blink {
  0%,
  45%,
  50%,
  100% {
    transform: scaleY(1);
  }
  47%,
  48% {
    transform: scaleY(0.1);
  }
}

@keyframes confetti-drift {
  from {
    transform: translateY(-6px);
  }
  to {
    transform: translateY(14px);
  }
}

@keyframes title-glow {
  from {
    text-shadow: 0 8px 30px rgba(0, 0, 0, 0.7), 0 0 10px rgba(255, 214, 235, 0.4);
  }
  to {
    text-shadow: 0 8px 30px rgba(0, 0, 0, 0.7), 0 0 24px rgba(255, 214, 235, 0.85);
  }
}

@media (max-width: 900px) {
  .scroll-track {
    height: 1540vh;
  }

  .line {
    max-width: min(84vw, 46ch);
    left: 50vw;
  }

  .kart svg {
    width: min(52vw, 360px);
  }

  .kart-b svg {
    width: min(46vw, 300px);
    bottom: 10vh;
  }

  .end-gif {
    width: min(66vw, 420px);
  }

  .memory {
    width: clamp(150px, 26vw, 260px);
  }

  .intro-gif {
    width: min(68vw, 420px);
    top: 38%;
  }
}

@media (max-width: 720px) {
  .line {
    left: 50vw;
    top: calc(var(--y) * 1vh);
    max-width: 88vw;
    font-size: clamp(1rem, 4.2vw, 1.32rem);
  }

  .line:first-child,
  .line:last-child {
    font-size: clamp(1.4rem, 8vw, 2.2rem);
  }

  .final-seq {
    max-width: 90vw;
    font-size: clamp(0.98rem, 3.9vw, 1.2rem);
    line-height: 1.42;
  }

  .earth-wrap {
    width: min(68vw, 360px);
  }

  .gate-form {
    flex-direction: column;
  }

  .kart-b svg {
    width: min(56vw, 240px);
    left: 0;
    right: auto;
    bottom: 10vh;
  }

  .end-gif {
    width: 74vw;
    top: 50%;
  }

  .memory {
    width: clamp(142px, 34vw, 230px);
  }

  .intro-gif {
    width: min(82vw, 390px);
    top: 39%;
  }
}

@media (prefers-reduced-motion: reduce) {
  * {
    animation: none !important;
    transition: none !important;
  }
}
