/* ==========================================================================
   MBDC Studio — Animations & motion
   --------------------------------------------------------------------------
   All motion is CSS-only (no libraries) and respects prefers-reduced-motion.
   Initial hidden states are gated behind `.js` so content stays visible if
   scripting is unavailable.
   ========================================================================== */

/* Scroll-triggered reveal — `.is-visible` is toggled by js/interactions.js */
.fade-up {
    transition: opacity 600ms var(--ease-out-quart),
                transform 600ms var(--ease-out-quart);
}
.js .fade-up {
    opacity: 0;
    transform: translateY(24px);
}
.fade-up.is-visible {
    opacity: 1;
    transform: translateY(0);
}

/* Accordion — open state rotates the plus icon into an ✕ */
.accordion-item.open .accordion-icon {
    transform: rotate(45deg);
}

/* Marquee ribbon — seamless loop across two identical groups */
.marquee-track {
    animation: marquee 26s linear infinite;
}
@keyframes marquee {
    from { transform: translateX(0); }
    to   { transform: translateX(-50%); }
}

/* Hero brand seal — slow continuous rotation */
@keyframes seal-spin {
    to { transform: rotate(360deg); }
}

/* --------------------------------------------------------------------------
   Reduced motion — required on every animated element
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
        scroll-behavior: auto !important;
    }

    .fade-up { opacity: 1; transform: none; }
    .hero-rise { opacity: 1; transform: none; }
    .hero-head .line-inner { transform: none; }
    .marquee-track { animation: none; }
    .hero-seal-svg { animation: none; }
}
