/* Révélation au scroll — les enfants directs d'un conteneur [data-reveal] apparaissent
   en cascade quand il entre à l'écran (une seule fois), piloté par reveal.js.
   GPU-light (opacity + transform), respecte prefers-reduced-motion.
   Le masquage initial dépend de la classe html.reveal-on (posée tôt par un snippet
   inline, retirée en fallback si reveal.js ne tourne pas) : sans JS, rien n'est caché. */
html.reveal-on [data-reveal] > * {
  opacity: 0;
  transform: translateY(16px);
  transition: opacity 0.6s ease, transform 0.6s cubic-bezier(0.22, 0.61, 0.36, 1);
}
html.reveal-on [data-reveal].is-revealed > * {
  opacity: 1;
  transform: none;
}
@media (prefers-reduced-motion: reduce) {
  html.reveal-on [data-reveal] > * {
    transition-duration: 0.35s;
    transform: none;
  }
}
