/* ===========================================================
   WS Booster - Scroll Reveal (effet partage multi-widgets)

   Le mode epingle est gere par ScrollTrigger (pin GSAP) cote JS :
   seul mode compatible ScrollSmoother. Ce CSS ne fait que :
   - donner au conteneur epingle une hauteur plein ecran + centrage
     vertical du contenu ;
   - gerer l'etat cache / revele des items.

   L'etat cache n'est applique que sous .ws-reveal-ready, classe posee
   par ws-scroll-reveal.js quand l'effet tourne. Sans JS / en editeur
   -> items visibles, aucun epinglage (fail-safe).
   =========================================================== */

.ws-reveal-scope { position: relative; }

/* Mode epingle : conteneur plein ecran, contenu centre verticalement.
   ScrollTrigger epingle ce conteneur pendant la revelation. */
.ws-reveal-scope.ws-reveal-pin {
    min-height: 100vh;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

/* Editeur / mobile-off / sans anim : on annule le plein ecran pour que
   le widget s'affiche normalement. */
.ws-reveal-editor.ws-reveal-pin,
body.elementor-editor-active .ws-reveal-pin {
    min-height: 0;
    display: block;
}

/* --- Etat cache / revele des items ---
   Chaque item recoit un index --ws-reveal-i pose par le JS (initOne).
   Le transition-delay est calcule depuis cet index x --ws-reveal-stagger
   -> cascade STAGGERED meme quand tous les items deviennent .is-revealed
   en meme temps (mode cascade : on observe le SCOPE, pas chaque item). */
.ws-reveal-ready .ws-reveal-item {
    opacity: 0;
    transition: opacity var(--ws-reveal-speed, 0.6s) cubic-bezier(0.22, 1, 0.36, 1),
                transform var(--ws-reveal-speed, 0.6s) cubic-bezier(0.22, 1, 0.36, 1);
    transition-delay: calc(var(--ws-reveal-i, 0) * var(--ws-reveal-stagger, 0.15s));
    will-change: opacity, transform;
}
.ws-reveal-ready[data-reveal-type="slide-up"]   .ws-reveal-item { transform: translateY(48px); }
.ws-reveal-ready[data-reveal-type="slide-side"] .ws-reveal-item { transform: translateX(48px); }
.ws-reveal-ready[data-reveal-type="zoom"]       .ws-reveal-item { transform: scale(0.86); }

/* Item revele : meme specificite que les regles de type, place apres
   -> gagne en source order. */
.ws-reveal-ready .ws-reveal-item.is-revealed {
    opacity: 1;
    transform: none;
}
