/* =========================================================
   WALKING PROOF — animations.css
   keyframes + reveal utilities + reduced-motion fallbacks
   ========================================================= */

/* ---------- Keyframes ---------- */
@keyframes helix-spin {
  from { transform: rotateY(0deg); }
  to   { transform: rotateY(360deg); }
}

@keyframes pulse-dot {
  0%, 100% { transform: scale(1); opacity: 1; }
  50%      { transform: scale(1.4); opacity: 0.6; }
}

@keyframes stars-drift {
  from { transform: translateY(0); }
  to   { transform: translateY(-40px); }
}

@keyframes door-flicker {
  0%, 100% { opacity: 0.95; }
  20%      { opacity: 0.78; }
  40%      { opacity: 1;    }
  62%      { opacity: 0.85; }
  78%      { opacity: 0.92; }
}

@keyframes scroll-cue {
  0%   { transform: translateY(0); }
  100% { transform: translateY(120px); }
}

@keyframes glow-breathe {
  0%, 100% { opacity: 0.55; transform: scale(1); }
  50%      { opacity: 0.85; transform: scale(1.05); }
}

@keyframes marquee-scroll {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}

@keyframes wave-bar {
  0%, 100% { transform: scaleY(0.25); }
  50%      { transform: scaleY(1); }
}

/* ---------- Reveal utilities (used by JS ScrollTrigger) ---------- */
[data-reveal] {
  opacity: 0;
  transform: translateY(28px);
  transition:
    opacity .9s var(--ease-out-expo),
    transform .9s var(--ease-out-expo);
  will-change: opacity, transform;
}
[data-reveal].is-in {
  opacity: 1;
  transform: translateY(0);
}

/* Hero pieces start hidden, JS staggers them */
.hero__title .char {
  transition: none; /* GSAP handles this */
}

/* ---------- 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;
  }
  .helix { animation: none; }
  .hero__stars { animation: none; }
  .doorway, .contact__door { animation: none; }
  .marquee__track { animation: none; transform: none; }
  .waveform rect { animation: none !important; }

  [data-reveal] { opacity: 1; transform: none; }
  .hero__eyebrow,
  .hero__tagline,
  .hero__meta { opacity: 1; transform: none; }
  .hero__title .char { opacity: 1; transform: none; }
}
