:root {
  --pink: oklch(72% 0.22 350);
  --orange: oklch(78% 0.17 55);
  --yellow: oklch(90% 0.16 95);
  --green: oklch(80% 0.2 145);
  --blue: oklch(72% 0.16 240);
  --purple: oklch(65% 0.22 300);
  --ink: oklch(25% 0.08 300);
}

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

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

body {
  font-family: "Baloo 2", "Comic Sans MS", "Marker Felt", ui-rounded, system-ui, sans-serif;
  color: var(--ink);
  background: linear-gradient(
    130deg,
    oklch(90% 0.09 350),
    oklch(93% 0.08 55),
    oklch(95% 0.09 95),
    oklch(92% 0.09 145),
    oklch(91% 0.08 240),
    oklch(90% 0.09 300),
    oklch(90% 0.09 350)
  );
  background-size: 400% 400%;
  animation: bg-drift 18s ease infinite;
  overflow-x: hidden;
}

@keyframes bg-drift {
  0% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}

#confetti {
  position: fixed;
  inset: 0;
  width: 100vw;
  height: 100vh;
  pointer-events: none;
  z-index: 10;
}

main {
  position: relative;
  z-index: 2;
  max-width: 60rem;
  margin: 0 auto;
  padding: clamp(1.5rem, 5vw, 4rem) 1.25rem 4rem;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1.5rem;
  text-align: center;
}

.title {
  font-size: clamp(2.8rem, 10vw, 6.5rem);
  line-height: 1.05;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 0 1.5rem;
}

.title .word {
  display: inline-flex;
}

.title span span {
  display: inline-block;
  animation: bounce-in 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) backwards,
    wiggle 3s ease-in-out infinite;
}

.title .word span:nth-child(1) { color: var(--pink); animation-delay: 0.05s, 1s; }
.title .word span:nth-child(2) { color: var(--orange); animation-delay: 0.12s, 1.15s; }
.title .word span:nth-child(3) { color: var(--yellow); animation-delay: 0.19s, 1.3s; }
.title .word span:nth-child(4) { color: var(--green); animation-delay: 0.26s, 1.45s; }
.title .word span:nth-child(5) { color: var(--blue); animation-delay: 0.33s, 1.6s; }
.title .word span:nth-child(6) { color: var(--purple); animation-delay: 0.4s, 1.75s; }
.title .word span:nth-child(7) { color: var(--pink); animation-delay: 0.47s, 1.9s; }

.title .name span {
  text-shadow: 0.06em 0.06em 0 oklch(100% 0 0 / 0.6);
}

@keyframes bounce-in {
  from {
    opacity: 0;
    transform: translateY(-2em) scale(0.3) rotate(-15deg);
  }
  to {
    opacity: 1;
    transform: translateY(0) scale(1) rotate(0deg);
  }
}

@keyframes wiggle {
  0%, 100% { transform: translateY(0) rotate(0deg); }
  25% { transform: translateY(-0.08em) rotate(3deg); }
  75% { transform: translateY(0.04em) rotate(-3deg); }
}

.subtitle {
  font-size: clamp(1.2rem, 3.5vw, 1.8rem);
  font-weight: 700;
  color: var(--ink);
  animation: bounce-in 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) 0.6s backwards;
}

.video-frame {
  position: relative;
  width: min(100%, 42rem);
  padding: 0.6rem;
  border-radius: 1.8rem;
  background: conic-gradient(
    from var(--spin, 0deg),
    var(--pink),
    var(--orange),
    var(--yellow),
    var(--green),
    var(--blue),
    var(--purple),
    var(--pink)
  );
  animation: frame-spin 6s linear infinite, bounce-in 0.7s cubic-bezier(0.34, 1.56, 0.64, 1) 0.8s backwards;
  box-shadow: 0 1.2rem 3rem oklch(40% 0.15 300 / 0.25);
}

@property --spin {
  syntax: "<angle>";
  inherits: false;
  initial-value: 0deg;
}

@keyframes frame-spin {
  to { --spin: 360deg; }
}

.video-frame video {
  display: block;
  width: 100%;
  border-radius: 1.3rem;
  background: var(--ink);
}

.hurra-btn {
  font: inherit;
  font-size: clamp(1.3rem, 4vw, 1.8rem);
  font-weight: 800;
  color: oklch(100% 0 0);
  background: linear-gradient(135deg, var(--pink), var(--purple));
  border: none;
  border-radius: 999px;
  padding: 0.8em 1.8em;
  cursor: pointer;
  box-shadow: 0 0.5rem 1.5rem oklch(65% 0.22 330 / 0.45);
  transition: transform 0.15s ease, box-shadow 0.15s ease;
  animation: bounce-in 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) 1s backwards;
}

.hurra-btn:hover {
  transform: scale(1.08) rotate(-2deg);
}

.hurra-btn:active {
  transform: scale(0.95);
}

.hurra-line {
  font-size: 1.1rem;
  font-weight: 600;
  opacity: 0.75;
}

.hurra-count {
  display: inline-block;
  min-width: 1.5em;
  font-size: 1.4em;
  font-weight: 800;
  color: var(--purple);
}

.popup-overlay {
  position: fixed;
  inset: 0;
  z-index: 20;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1.25rem;
  background: oklch(25% 0.08 300 / 0.45);
  backdrop-filter: blur(4px);
}

.popup-overlay[hidden] {
  display: none;
}

.popup {
  max-width: 26rem;
  width: 100%;
  padding: 2.2rem 2rem;
  border-radius: 1.8rem;
  border: 0.4rem solid transparent;
  background:
    linear-gradient(oklch(99% 0.01 95), oklch(99% 0.01 95)) padding-box,
    linear-gradient(135deg, var(--pink), var(--orange), var(--yellow), var(--green), var(--blue), var(--purple)) border-box;
  box-shadow: 0 1.5rem 4rem oklch(30% 0.1 300 / 0.4);
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1rem;
  animation: pop-in 0.45s cubic-bezier(0.34, 1.56, 0.64, 1);
}

@keyframes pop-in {
  from {
    opacity: 0;
    transform: scale(0.5) rotate(-4deg);
  }
  to {
    opacity: 1;
    transform: scale(1) rotate(0deg);
  }
}

.popup-emoji {
  font-size: 3rem;
  line-height: 1;
}

.popup-text {
  font-size: clamp(1.3rem, 4vw, 1.6rem);
  font-weight: 800;
  background: linear-gradient(90deg, var(--pink), var(--purple), var(--blue));
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}

.popup-from {
  font-size: 1.15rem;
  font-weight: 700;
  color: var(--ink);
}

.popup-close {
  font: inherit;
  font-size: 1.1rem;
  font-weight: 800;
  color: oklch(100% 0 0);
  background: linear-gradient(135deg, var(--blue), var(--green));
  border: none;
  border-radius: 999px;
  padding: 0.6em 1.8em;
  cursor: pointer;
  box-shadow: 0 0.4rem 1rem oklch(60% 0.15 230 / 0.4);
  transition: transform 0.15s ease;
}

.popup-close:hover {
  transform: scale(1.06);
}

.balloons {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 1;
  overflow: hidden;
}

.balloon {
  position: absolute;
  bottom: -15vh;
  font-size: clamp(2rem, 6vw, 4rem);
  animation: float-up linear infinite;
}

.balloon.b1 { left: 6%; animation-duration: 11s; animation-delay: 0s; }
.balloon.b2 { left: 22%; animation-duration: 14s; animation-delay: 3s; }
.balloon.b3 { left: 42%; animation-duration: 12s; animation-delay: 6s; }
.balloon.b4 { left: 60%; animation-duration: 15s; animation-delay: 1.5s; }
.balloon.b5 { left: 78%; animation-duration: 13s; animation-delay: 4.5s; }
.balloon.b6 { left: 90%; animation-duration: 16s; animation-delay: 7.5s; }

@keyframes float-up {
  0% {
    transform: translateY(0) rotate(-6deg);
  }
  50% {
    transform: translateY(-60vh) rotate(6deg);
  }
  100% {
    transform: translateY(-130vh) rotate(-6deg);
  }
}

@media (prefers-reduced-motion: reduce) {
  body,
  .title span span,
  .subtitle,
  .video-frame,
  .hurra-btn,
  .balloon {
    animation: none;
  }
}
