/* Scroll-triggered slide-in animations. Sections fade up + reveal as they
   enter the viewport. Uses IntersectionObserver (see scroll-animations.js).
   Respects `prefers-reduced-motion`: skips animation, content shows instantly. */

@media (prefers-reduced-motion: no-preference) {
  [data-reveal] {
    opacity: 0;
    transform: translateY(24px);
    transition:
      opacity 600ms cubic-bezier(0.22, 0.61, 0.36, 1),
      transform 700ms cubic-bezier(0.22, 0.61, 0.36, 1);
    will-change: opacity, transform;
  }
  [data-reveal="left"]  { transform: translateX(-32px); }
  [data-reveal="right"] { transform: translateX(32px); }
  [data-reveal="zoom"]  { transform: scale(0.97); }

  [data-reveal].is-revealed {
    opacity: 1;
    transform: none;
  }

  /* Stagger children when the parent reveals — kids cascade in. */
  [data-reveal-stagger] > * {
    opacity: 0;
    transform: translateY(20px);
    transition:
      opacity 500ms cubic-bezier(0.22, 0.61, 0.36, 1),
      transform 550ms cubic-bezier(0.22, 0.61, 0.36, 1);
  }
  [data-reveal-stagger].is-revealed > * { opacity: 1; transform: none; }
  [data-reveal-stagger].is-revealed > *:nth-child(1) { transition-delay: 60ms; }
  [data-reveal-stagger].is-revealed > *:nth-child(2) { transition-delay: 120ms; }
  [data-reveal-stagger].is-revealed > *:nth-child(3) { transition-delay: 180ms; }
  [data-reveal-stagger].is-revealed > *:nth-child(4) { transition-delay: 240ms; }
  [data-reveal-stagger].is-revealed > *:nth-child(5) { transition-delay: 300ms; }
  [data-reveal-stagger].is-revealed > *:nth-child(6) { transition-delay: 360ms; }
  [data-reveal-stagger].is-revealed > *:nth-child(7) { transition-delay: 420ms; }
  [data-reveal-stagger].is-revealed > *:nth-child(n+8) { transition-delay: 480ms; }
}
