/**
 * anim-scroll.css : scroll reveal (zéro dépendance).
 * Classes : .reveal-up (translateY 24px -> 0), .reveal-fade (opacity),
 * .reveal-up-child (enfants directs en cascade), .reveal-visible (état final).
 * Stagger : --reveal-delay (ex. style="--reveal-delay:120ms").
 * Seuls opacity + transform sont animés : aucun impact sur le CLS.
 * Désactivé si l'utilisateur demande prefers-reduced-motion: reduce.
 */
@media (prefers-reduced-motion: no-preference) {
  .reveal-up,
  .reveal-fade,
  .reveal-up-child > * {
    opacity: 0;
    transition: opacity 500ms cubic-bezier(0.22, 1, 0.36, 1),
      transform 500ms cubic-bezier(0.22, 1, 0.36, 1);
    transition-delay: var(--reveal-delay, 0ms);
    will-change: opacity, transform;
  }
  .reveal-up,
  .reveal-up-child > * {
    transform: translateY(24px);
  }
  .reveal-visible,
  .reveal-visible > *,
  .reveal-up-child.reveal-visible > *,
  /* FIX 2026-11-02 : quand la section parente est reveal-visible,
     cascade aussi vers toutes les grilles .reveal-up-child à l'intérieur,
     même si elles ne sont pas enfants directs (ex. ul.grid dans container-opnow). */
  .reveal-visible .reveal-up-child > * {
    opacity: 1;
    transform: none;
  }
  /* Cascade automatique sur les enfants directs */
  .reveal-up-child > :nth-child(1) { --reveal-delay: 0ms; }
  .reveal-up-child > :nth-child(2) { --reveal-delay: 60ms; }
  .reveal-up-child > :nth-child(3) { --reveal-delay: 120ms; }
  .reveal-up-child > :nth-child(n+4) { --reveal-delay: 180ms; }
  /* Le conteneur .reveal-up-child reste visible : seuls ses enfants s'animent */
  .reveal-up.reveal-up-child { opacity: 1; transform: none; }
}
