/* ==========================================================================
   Motion layer — classes only, no layout. Applied by motion.js via GSAP.
   Never sets opacity:0 on LCP elements (hero h1 / hero media) at rest;
   initial hidden states are set by GSAP (matchMedia-gated) not by CSS,
   so content is visible immediately if JS fails to load.
   ========================================================================== */

[data-reveal]{ will-change:transform, opacity; }

.split-line{ overflow:hidden; display:block; }

/* Card / row entrance targets get a transform-only nudge via JS transforms,
   defined here just for smoothing */
.feature-row, .svc-card, .t-card, .process-step, .offer-card{
  will-change:transform, opacity;
}

/* Magnetic CTA hover target */
.magnetic{ display:inline-flex; }

/* Lenis smooth-scroll requirement */
html.lenis, html.lenis body{ height:auto; }
.lenis.lenis-smooth{ scroll-behavior:auto !important; }
.lenis.lenis-smooth [data-lenis-prevent]{ overscroll-behavior:contain; }
.lenis.lenis-stopped{ overflow:hidden; }
