/* ============ Révélation au scroll (style lightingdev.group) ============
 * L'état masqué ne s'applique que tant que .sfel-in est absente : une fois
 * révélé, l'élément revient à ses styles naturels (aucun conflit possible
 * avec Elementor). Classe posée par JS : sans JS, rien n'est masqué.
 */
body:not(.elementor-editor-active) .sfel-reveal {
    transition:
        opacity .85s cubic-bezier(.22, .61, .36, 1),
        transform .85s cubic-bezier(.22, .61, .36, 1),
        filter .85s cubic-bezier(.22, .61, .36, 1);
    will-change: opacity, transform, filter;
}
body:not(.elementor-editor-active) .sfel-reveal:not(.sfel-in) {
    opacity: 0 !important;
    transform: translateY(26px) !important;
    filter: blur(10px) !important;
}
@media (prefers-reduced-motion: reduce) {
    .sfel-reveal, .sfel-reveal:not(.sfel-in) {
        opacity: 1 !important; transform: none !important; filter: none !important; transition: none !important;
    }
}

/* Mobile : animation allégée (le blur animé est coûteux en GPU → saccades) */
@media (max-width: 767px) {
    body:not(.elementor-editor-active) .sfel-reveal {
        transition:
            opacity .5s cubic-bezier(.22, .61, .36, 1),
            transform .5s cubic-bezier(.22, .61, .36, 1);
        will-change: opacity, transform;
    }
    body:not(.elementor-editor-active) .sfel-reveal:not(.sfel-in) {
        transform: translateY(16px) !important;
        filter: none !important;
    }
}