/* ============================================
   Reveal + parallaxe (brief §14) — transform + opacity.
   Déclenché une seule fois au premier passage dans le viewport (iaf-reveal.js).
   ============================================ */

:root {
  --iaf-reveal-distance: 32px;
  --iaf-reveal-depth: 18px;
  --iaf-reveal-dur-in-1: 0.42s;
  --iaf-reveal-dur-in-2: 0.48s;
  --iaf-reveal-delay-2: 0.04s;
  --iaf-reveal-dur-out: 0.2s;
  --iaf-reveal-ease-in: cubic-bezier(0.22, 0.61, 0.36, 1);
  --iaf-reveal-ease-out: cubic-bezier(0.4, 0, 0.2, 1);
  --iaf-reveal-stagger-step: 55ms;
}

/* État initial avant le premier reveal */
.iaf-reveal {
  opacity: 0;
  transform: translate3d(0, var(--iaf-reveal-distance), 0);
  will-change: transform, opacity;
  transition:
    opacity var(--iaf-reveal-dur-out) var(--iaf-reveal-ease-out),
    transform var(--iaf-reveal-dur-out) var(--iaf-reveal-ease-out);
}

.iaf-reveal .iaf-reveal__parallax {
  transform: translate3d(0, var(--iaf-reveal-depth), 0);
  will-change: transform;
  transition:
    transform var(--iaf-reveal-dur-out) var(--iaf-reveal-ease-out);
}

.iaf-reveal.is-revealed {
  opacity: 1;
  transform: translate3d(0, 0, 0);
  will-change: auto;
  transition:
    opacity var(--iaf-reveal-dur-in-1) var(--iaf-reveal-ease-in),
    transform var(--iaf-reveal-dur-in-1) var(--iaf-reveal-ease-in);
}

.iaf-reveal.is-revealed .iaf-reveal__parallax {
  transform: translate3d(0, 0, 0);
  will-change: auto;
  transition:
    transform var(--iaf-reveal-dur-in-2) var(--iaf-reveal-ease-in) var(--iaf-reveal-delay-2);
}

/* --- iaf_listing : conteneur visible, cellules (titre + items) en cascade --- */

.iaf-reveal.iaf-reveal--stagger,
.iaf-reveal.iaf-reveal--stagger:not(.is-revealed) {
  opacity: 1;
  transform: none;
  transition: none;
  will-change: auto;
}

.iaf-reveal--stagger .iaf-reveal__cell {
  opacity: 0;
  transform: translate3d(0, var(--iaf-reveal-depth), 0);
  will-change: transform, opacity;
  transition:
    opacity var(--iaf-reveal-dur-out) var(--iaf-reveal-ease-out),
    transform var(--iaf-reveal-dur-out) var(--iaf-reveal-ease-out);
  transition-delay: 0ms;
}

.iaf-reveal--stagger.is-revealed .iaf-reveal__cell {
  opacity: 1;
  transform: translate3d(0, 0, 0);
  will-change: auto;
  transition:
    opacity var(--iaf-reveal-dur-in-1) var(--iaf-reveal-ease-in),
    transform var(--iaf-reveal-dur-in-2) var(--iaf-reveal-ease-in);
  transition-delay: calc(var(--iaf-stagger) * var(--iaf-reveal-stagger-step));
}

/* Sticky-safe : pas de transform (ancêtre ou élément) → position:sticky conservé */
.iaf-reveal--stagger .iaf-reveal__cell--opacity-only,
.iaf-reveal--stagger.is-revealed .iaf-reveal__cell--opacity-only {
  transform: none;
  will-change: opacity;
}

.iaf-reveal--stagger.is-revealed .iaf-reveal__cell--opacity-only {
  will-change: auto;
  transition:
    opacity var(--iaf-reveal-dur-in-1) var(--iaf-reveal-ease-in);
  transition-delay: calc(var(--iaf-stagger) * var(--iaf-reveal-stagger-step));
}

@media (prefers-reduced-motion: reduce) {
  .iaf-reveal,
  .iaf-reveal__parallax,
  .iaf-reveal__cell {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
    transition-delay: 0ms !important;
    will-change: auto !important;
  }
}
