/* ==========================================================================
   Animations: initial states for GSAP reveals + reduced-motion rules
   Content is only hidden when JS runs; a timed fallback (head.php) and the
   reduced-motion query always make it visible again.
   ========================================================================== */

.js [data-reveal],
.js [data-stagger] > * {
    opacity: 0;
}

.js [data-split] {
    visibility: hidden;
}

.reveal-all [data-reveal],
.reveal-all [data-stagger] > * {
    opacity: 1 !important;
    transform: none !important;
}

.reveal-all [data-split] {
    visibility: visible !important;
}

/* Split heading words (created by animations.js) */
.split-word {
    display: inline-block;
    overflow: hidden;
    vertical-align: top;
    padding: 0 0.06em 0.12em;
    margin: 0 -0.06em -0.12em;
}

.split-word__inner {
    display: inline-block;
    will-change: transform;
}

/* GSAP drives the transform of magnetic buttons */
.btn.is-magnetic {
    transition-property: background-color, border-color, color, box-shadow;
}

.btn.is-magnetic:hover {
    transform: none;
}

@media (prefers-reduced-motion: reduce) {
    .js [data-reveal],
    .js [data-stagger] > * {
        opacity: 1;
    }

    .js [data-split] {
        visibility: visible;
    }

    *,
    *::before,
    *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
        scroll-behavior: auto !important;
    }

    .btn:hover,
    .support-card:hover,
    .service-card:hover,
    .fab:hover {
        transform: none;
    }
}
