/* ==========================================================================
   Motion — keyframes + reveal system
   ========================================================================== */

@keyframes marquee {
  to { transform: translateX(-100%); }
}

@keyframes ping {
  0% { transform: scale(0.6); opacity: 1; }
  100% { transform: scale(2.4); opacity: 0; }
}

@keyframes draw {
  to { stroke-dashoffset: 0; }
}

@keyframes check-redraw {
  0% { stroke-dashoffset: 22; }
  100% { stroke-dashoffset: 0; }
}

@keyframes aurora-drift {
  0% { transform: translate3d(0, 0, 0) scale(1); }
  100% { transform: translate3d(4%, 3%, 0) scale(1.08); }
}

@keyframes grain {
  0% { transform: translate(0, 0); }
  20% { transform: translate(-5%, 3%); }
  40% { transform: translate(3%, -6%); }
  60% { transform: translate(-7%, 2%); }
  80% { transform: translate(5%, 5%); }
  100% { transform: translate(0, 0); }
}

@keyframes ring-out {
  0% { transform: translate(-50%, -50%) scale(0.2); opacity: 0; }
  15% { opacity: 1; }
  100% { transform: translate(-50%, -50%) scale(3.4); opacity: 0; }
}

@keyframes float-y {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-10px); }
}

@keyframes scan {
  0% { transform: translateY(-100%); }
  100% { transform: translateY(100%); }
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

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

@keyframes stamp {
  0% { transform: scale(2.2) rotate(-14deg); opacity: 0; }
  60% { transform: scale(0.94) rotate(-8deg); opacity: 1; }
  100% { transform: scale(1) rotate(-8deg); opacity: 1; }
}

@keyframes blink {
  50% { opacity: 0; }
}

/* ---------- Reveal on scroll ---------- */
.js [data-reveal] {
  opacity: 0;
  transform: translate3d(0, 36px, 0);
  transition:
    opacity 1s var(--ease-out),
    transform 1s var(--ease-out);
  transition-delay: calc(var(--d, 0) * 1ms);
}

.js [data-reveal='fade'] {
  transform: none;
}

.js [data-reveal='scale'] {
  transform: scale(0.94);
}

.js [data-reveal='left'] {
  transform: translate3d(-40px, 0, 0);
}

.js [data-reveal='flip'] {
  transform: perspective(900px) rotateX(-28deg) translate3d(0, 50px, 0);
  transform-origin: 50% 0%;
}

.js [data-reveal].is-in {
  opacity: 1;
  transform: none;
}

/* Split-line headline reveal: JS wraps words in .w > span */
.split .w {
  display: inline-block;
  overflow: hidden;
  vertical-align: top;
  padding-bottom: 0.08em;
  margin-bottom: -0.08em;
}

.split .w > span {
  display: inline-block;
  transform: translate3d(0, 105%, 0);
  transition: transform 1.1s var(--ease-out);
  transition-delay: calc(var(--i, 0) * 45ms + var(--d, 0) * 1ms);
}

.split.is-in .w > span {
  transform: none;
}

/* Scroll-lit text: words brighten as --lit passes them */
.lit-text .lw {
  color: var(--text-mute);
  opacity: 0.35;
  transition: opacity 0.35s linear, color 0.35s linear;
}

.lit-text .lw.on {
  opacity: 1;
  color: var(--text);
}

.lit-text .lw.on.accent {
  color: var(--cyan);
}

/* ---------- 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;
  }

  .js [data-reveal],
  .split .w > span {
    opacity: 1;
    transform: none;
  }

  .lit-text .lw {
    opacity: 1;
    color: var(--text);
  }

  .marquee-track {
    animation: none;
  }

  .grain,
  .cursor-glow,
  .cursor-ring,
  .cursor-dot,
  .hero-net {
    display: none;
  }
}
