/**
 * CADMasters Digital Platform — Global Animation System
 * Design tokens are injected via /theme.css from Theme Manager.
 */

.cm-animation-speed-fast {
    --cm-animation-duration: var(--animation-duration-fast);
}

.cm-animation-speed-normal {
    --cm-animation-duration: var(--animation-duration-normal);
}

.cm-animation-speed-slow {
    --cm-animation-duration: var(--animation-duration-slow);
}

/* ── Fade reveal (viewport entry) ──────────────────────────────────────── */

.animate-fade,
.cm-reveal:not(.cm-reveal--visible):not(.aos-animate) {
    opacity: 0;
    transform: translateY(var(--animation-reveal-offset));
    transition:
        opacity var(--cm-animation-duration, var(--animation-duration-normal)) var(--animation-easing),
        transform var(--cm-animation-duration, var(--animation-duration-normal)) var(--animation-easing);
    will-change: opacity, transform;
}

.animate-fade.active,
.animate-fade.cm-reveal--visible,
.cm-reveal--visible,
.cm-reveal.aos-animate {
    opacity: 1;
    transform: translateY(0);
}

/* Animation style variants */
.cm-animation-fade .cm-reveal:not(.cm-reveal--visible):not(.aos-animate),
.cm-animation-fade .animate-fade:not(.active) {
    transform: translateY(var(--animation-reveal-offset));
}

.cm-animation-slide .cm-reveal:not(.cm-reveal--visible):not(.aos-animate) {
    transform: translateX(-32px);
}

.cm-animation-zoom .cm-reveal:not(.cm-reveal--visible):not(.aos-animate) {
    transform: scale(0.94);
}

.cm-animations-disabled .cm-reveal,
.cm-animations-disabled .animate-fade,
.cm-animations-disabled .cm-stagger-item {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
    transition-delay: 0s !important;
}

/* Stagger delays */
.cm-stagger-item:nth-child(1) { transition-delay: 0.05s; }
.cm-stagger-item:nth-child(2) { transition-delay: 0.12s; }
.cm-stagger-item:nth-child(3) { transition-delay: 0.19s; }
.cm-stagger-item:nth-child(4) { transition-delay: 0.26s; }
.cm-stagger-item:nth-child(5) { transition-delay: 0.33s; }
.cm-stagger-item:nth-child(6) { transition-delay: 0.4s; }

/* ── Page transitions ──────────────────────────────────────────────────── */

.cm-page-transitions.cm-page-enter .cm-main,
.cm-engineering-ui.cm-page-transitions .cm-main {
    opacity: 0;
    transform: translateY(12px);
    transition:
        opacity var(--animation-duration-normal) var(--animation-easing),
        transform var(--animation-duration-normal) var(--animation-easing);
}

.cm-page-transitions.cm-page-ready .cm-main,
.cm-engineering-ui.cm-page-transitions.cm-page-ready .cm-main {
    opacity: 1;
    transform: none;
}

/* ── Back to top ───────────────────────────────────────────────────────── */

.cm-back-to-top,
.back-to-top {
    position: fixed;
    right: var(--back-to-top-offset);
    bottom: var(--back-to-top-offset);
    z-index: 1040;
    width: 2.75rem;
    height: 2.75rem;
    border: none;
    border-radius: 999px;
    background: var(--btn-primary-bg, var(--theme-primary, #0b3d91));
    color: var(--btn-primary-text, #fff);
    box-shadow: var(--card-shadow, 0 4px 20px rgba(0, 0, 0, 0.08));
    opacity: 0;
    visibility: hidden;
    transform: translateY(12px);
    transition:
        opacity var(--animation-duration-fast) var(--animation-easing),
        transform var(--animation-duration-fast) var(--animation-easing),
        visibility var(--animation-duration-fast) var(--animation-easing),
        background-color var(--animation-duration-fast) var(--animation-easing);
    cursor: pointer;
}

.cm-back-to-top--visible,
.back-to-top--visible {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
}

.cm-back-to-top:hover,
.back-to-top:hover {
    background: color-mix(in srgb, var(--btn-primary-bg, var(--theme-primary)) 88%, #000);
}

.cm-back-to-top-enabled .cm-back-to-top {
    display: inline-flex;
    align-items: center;
    justify-content: center;
}

/* ── Button interaction (subtle elevation) ─────────────────────────────── */

.cm-animations-enabled .btn-primary:hover,
.cm-animations-enabled .btn-cta:hover,
.cm-animations-enabled .btn-secondary:hover {
    transform: translateY(-1px);
}

.cm-animations-enabled .btn-primary:active,
.cm-animations-enabled .btn-cta:active {
    transform: translateY(0);
}

/* Card hover lift handled in cards.css */

/* ── AOS integration ─────────────────────────────────────────────────── */

.cm-animations-enabled [data-aos] {
    will-change: opacity, transform;
}

.cm-animations-disabled [data-aos] {
    opacity: 1 !important;
    transform: none !important;
}

/* ── Reduced motion ────────────────────────────────────────────────────── */

@media (prefers-reduced-motion: reduce) {
    .cm-site .cm-reveal,
    .cm-site .animate-fade,
    .cm-site [data-aos],
    .cm-site .cm-main,
    .cm-site .cm-card,
    .cm-site .cm-back-to-top,
    .cm-site .btn-primary,
    .cm-site .btn-cta {
        animation: none !important;
        transition: none !important;
        transform: none !important;
        opacity: 1 !important;
    }

    .cm-site .cm-page-transitions .cm-main {
        opacity: 1 !important;
    }
}
