/* ============================================================
   WS Apparition - Mask Reveal
   Effet ligne-par-ligne pour textes + slide-up pour autres elements.
   Active via data-ws-reveal="mask" sur le wrapper du widget/section/colonne.
   ============================================================ */

/* Per-line wrap pose par le JS apres SplitText.
   overflow:hidden ici uniquement (par ligne), pas sur des parents
   structurels -> ne casse pas position:sticky / pin GSAP. */
.ws-rm-line-wrap {
    position: relative;
    display: block;
    overflow: hidden;
    /* Compense la coupure des descendantes (g, p, j, y) sans tronquer. */
    margin-bottom: -0.15em;
    padding-bottom: 0.15em;
}

.ws-rm-line {
    display: block;
    will-change: transform, opacity, filter;
}

/* Etat invisible avant init JS (anti-flash) : seulement si le JS aura
   bien le temps d'attraper l'element. data-ws-reveal-pending est pose
   par le JS lui-meme au tout debut de l'init pour declarer "je vais
   m'occuper de toi". Tant que ce flag n'est pas la, l'element reste
   visible (no-JS safe). */
[data-ws-reveal="mask"][data-ws-rm-pending="1"] .ws-rm-line,
[data-ws-reveal="mask"][data-ws-rm-pending="1"] {
    /* Etat initial pose par gsap.set() au moment du split, donc rien
       a faire ici. Cette regle existe juste pour reserver le selecteur. */
}

/* Respecte prefers-reduced-motion : tout visible, aucune anim */
@media (prefers-reduced-motion: reduce) {
    .ws-rm-line,
    [data-ws-reveal="mask"] {
        transform: none !important;
        opacity: 1 !important;
        filter: none !important;
    }
}
