/* Shared keyframes, scroll reveals and reduced-motion overrides. */
@keyframes word-in { to { opacity: 1; filter: blur(0); transform: none; } }
@keyframes fade-up { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
@keyframes holo-shift { from { background-position: 0% 50%; } to { background-position: 100% 50%; } }
@keyframes lane-slide { to { transform: translateX(-50%); } }

.reveal {
  opacity: 0;
  transform: translateY(18px);
  transition: opacity 700ms ease, transform 900ms var(--ease);
}

.reveal.is-in { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }

  *, *::before, *::after {
    animation-duration: 1ms !important;
    animation-delay: 0ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 1ms !important;
  }

  .lane, .marquee-track { animation: none !important; }
  .playhead { display: none; }
}
