/* ==========================================================
   BIRTHDAY SURPRISE — ANIMATION KEYFRAMES
   ========================================================== */

@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }

@keyframes heartbeat {
  0%, 100% { transform: rotate(45deg) scale(1); }
  25% { transform: rotate(45deg) scale(1.12); }
  40% { transform: rotate(45deg) scale(0.98); }
  55% { transform: rotate(45deg) scale(1.08); }
}

@keyframes eq {
  0%, 100% { transform: scaleY(0.4); }
  50% { transform: scaleY(1); }
}

@keyframes numberPop {
  0% { transform: translateY(-10px); opacity: 0.3; filter: blur(4px); }
  60% { transform: translateY(2px); opacity: 1; filter: blur(0); }
  100% { transform: translateY(0); }
}

@keyframes letterIn {
  0% { opacity: 0; filter: blur(8px); transform: translateY(16px); }
  60% { opacity: 1; filter: blur(1px); }
  100% { opacity: 1; filter: blur(0); transform: translateY(0); }
}

@keyframes pulseGlow {
  0%, 100% { opacity: 0.6; transform: scale(1); }
  50% { opacity: 1; transform: scale(1.08); }
}

@keyframes flicker {
  0% { transform: scaleY(1) translateX(0); }
  50% { transform: scaleY(1.08) translateX(1px) rotate(2deg); }
  100% { transform: scaleY(0.95) translateX(-1px) rotate(-2deg); }
}

@keyframes sparkleFloat {
  0%, 100% { transform: translateY(0) scale(1); opacity: 0.4; }
  50% { transform: translateY(-14px) scale(1.4); opacity: 1; }
}

@keyframes floatUp {
  0% { transform: translate(0, 0) rotate(-3deg); opacity: 0; }
  8% { opacity: 1; }
  50% { transform: translate(var(--drift), -55vh) rotate(3deg); }
  92% { opacity: 1; }
  100% { transform: translate(calc(var(--drift) * 1.6), -125vh) rotate(-3deg); opacity: 0; }
}

@keyframes blink {
  0%, 49% { opacity: 1; }
  50%, 100% { opacity: 0; }
}

@keyframes shimmer {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

@keyframes heartBurst {
  0% { transform: translate(0, 0) scale(0.6); opacity: 1; }
  100% { transform: translate(var(--dx), -90px) scale(1.3); opacity: 0; }
}

@keyframes auroraDrift {
  0%, 100% { transform: translateX(-4%) scale(1); }
  50% { transform: translateX(4%) scale(1.06); }
}

/* ---------- Respect reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
  .balloon { animation-duration: 8s !important; }
}
