/* ==========================================================================
   Shared reveal system + reduced motion
   LineReveal: [data-reveal="lines"] with .line > .line__inner children
   FadeRise:   [data-reveal="rise"]
   Mask:       [data-reveal="mask"] (clip-path inset)
   ========================================================================== */

.js [data-reveal="lines"] .line__inner {
  transform: translateY(105%);
  opacity: .15;
  transition:
    transform var(--dur-line) var(--ease-reveal),
    opacity var(--dur-line) var(--ease-reveal);
}
.js [data-reveal="lines"].is-revealed .line__inner {
  transform: translateY(0);
  opacity: 1;
}
[data-reveal="lines"] .line:nth-child(2) .line__inner { transition-delay: calc(var(--stagger-line) * 1); }
[data-reveal="lines"] .line:nth-child(3) .line__inner { transition-delay: calc(var(--stagger-line) * 2); }
[data-reveal="lines"] .line:nth-child(4) .line__inner { transition-delay: calc(var(--stagger-line) * 3); }
[data-reveal="lines"] .line:nth-child(5) .line__inner { transition-delay: calc(var(--stagger-line) * 4); }

.js [data-reveal="rise"] {
  opacity: 0;
  transform: translateY(18px);
  transition:
    opacity var(--dur-rise) var(--ease-reveal),
    transform var(--dur-rise) var(--ease-reveal);
  transition-delay: var(--reveal-delay, 0ms);
}
.js [data-reveal="rise"].is-revealed {
  opacity: 1;
  transform: translateY(0);
}

.js [data-reveal="mask"] {
  clip-path: inset(0 0 100% 0);
  transition: clip-path var(--dur-mask) var(--ease-reveal);
}
.js [data-reveal="mask"].is-revealed {
  clip-path: inset(0 0 0 0);
}

/* Stagger helper for sibling groups */
[data-reveal-group] > [data-reveal]:nth-child(2) { --reveal-delay: 90ms; }
[data-reveal-group] > [data-reveal]:nth-child(3) { --reveal-delay: 180ms; }
[data-reveal-group] > [data-reveal]:nth-child(4) { --reveal-delay: 270ms; }
[data-reveal-group] > [data-reveal]:nth-child(5) { --reveal-delay: 360ms; }
[data-reveal-group] > [data-reveal]:nth-child(6) { --reveal-delay: 450ms; }

/* ---- Reduced motion ---------------------------------------------------- */

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

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

  .js [data-reveal="lines"] .line__inner,
  .js [data-reveal="rise"],
  .js [data-reveal="mask"] {
    transform: none;
    clip-path: none;
    opacity: 0;
    transition: opacity 200ms linear;
  }
  .js [data-reveal].is-revealed,
  .js [data-reveal="lines"].is-revealed .line__inner { opacity: 1; }

  .js .hero [data-enter],
  .js .hero__title .line__inner { opacity: 1; transform: none; }

  .hero__endpoint::before { animation: none; }
  .hero__terrain { display: none; }
  .header.is-stuck { animation: none; }
}
