/* ============================================================
   KEYFRAMES
   ============================================================ */

@keyframes heroFadeIn {
  from { opacity: 0; transform: translateY(18px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes heroFloat {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-6px); }
}
@keyframes planetBob {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-4px); }
}
/* GPU-friendly pulse: animates only opacity + transform. No filter. */
@keyframes glowPulse {
  0%, 100% { opacity: 0.25; transform: scale(0.95); }
  50%      { opacity: 0.7;  transform: scale(1.05); }
}
@keyframes ringExpand {
  0%   { transform: scale(1);   opacity: 0.8; }
  100% { transform: scale(2.4); opacity: 0; }
}
@keyframes fillPulse {
  0%   { filter: brightness(1); }
  50%  { filter: brightness(1.7) saturate(1.3); }
  100% { filter: brightness(1); }
}
@keyframes cometTravel {
  0%   { left: 0%;   opacity: 0; }
  15%  { opacity: 1; }
  85%  { opacity: 1; }
  100% { left: 100%; opacity: 0; }
}
@keyframes shimmer {
  0%   { transform: translateX(-100%); }
  100% { transform: translateX(100%); }
}
@keyframes countBump {
  0%   { transform: scale(1);   color: var(--ink-0); }
  45%  { transform: scale(1.08); color: var(--violet-halo);
         text-shadow: 0 0 22px var(--violet-halo), 0 0 45px var(--violet); }
  100% { transform: scale(1);   color: var(--ink-0); }
}
@keyframes fadePulse {
  0%, 100% { opacity: 0.55; transform: translateX(-50%) translateY(0); }
  50%      { opacity: 1;    transform: translateX(-50%) translateY(4px); }
}
@keyframes nebDrift1 {
  0%, 100% { transform: translate(0, 0) scale(1); opacity: 0.4; }
  50%      { transform: translate(6vw, -3vw) scale(1.08); opacity: 0.55; }
}
@keyframes nebDrift2 {
  0%, 100% { transform: translate(0, 0) scale(1); opacity: 0.35; }
  50%      { transform: translate(-5vw, 4vw) scale(1.1); opacity: 0.55; }
}
@keyframes modalFade {
  from { opacity: 0; }
  to   { opacity: 1; }
}
@keyframes modalPop {
  from { opacity: 0; transform: scale(0.92) translateY(12px); }
  to   { opacity: 1; transform: scale(1) translateY(0); }
}

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