/* --- GC Ads Animations --- */
/* Performance: only transform + opacity */

/* Scroll reveal (JS adds .revealed) */
.reveal {
    opacity: 0;
    transform: translateY(30px);
    transition: opacity 0.6s var(--ease-out), transform 0.6s var(--ease-out);
}
.reveal.revealed {
    opacity: 1;
    transform: translateY(0);
}

/* Staggered children */
.reveal-stagger > * {
    opacity: 0;
    transform: translateY(20px);
    transition: opacity 0.5s var(--ease-out), transform 0.5s var(--ease-out);
}
.reveal-stagger.revealed > *:nth-child(1) { transition-delay: 0ms; }
.reveal-stagger.revealed > *:nth-child(2) { transition-delay: 80ms; }
.reveal-stagger.revealed > *:nth-child(3) { transition-delay: 160ms; }
.reveal-stagger.revealed > *:nth-child(4) { transition-delay: 240ms; }
.reveal-stagger.revealed > *:nth-child(5) { transition-delay: 320ms; }
.reveal-stagger.revealed > *:nth-child(6) { transition-delay: 400ms; }
.reveal-stagger.revealed > * {
    opacity: 1;
    transform: translateY(0);
}

/* Reveal from left */
.reveal-left {
    opacity: 0;
    transform: translateX(-30px);
    transition: opacity 0.6s var(--ease-out), transform 0.6s var(--ease-out);
}
.reveal-left.revealed { opacity: 1; transform: translateX(0); }

/* Reveal from right */
.reveal-right {
    opacity: 0;
    transform: translateX(30px);
    transition: opacity 0.6s var(--ease-out), transform 0.6s var(--ease-out);
}
.reveal-right.revealed { opacity: 1; transform: translateX(0); }

/* Scale reveal */
.reveal-scale {
    opacity: 0;
    transform: scale(0.95);
    transition: opacity 0.6s var(--ease-out), transform 0.6s var(--ease-out);
}
.reveal-scale.revealed { opacity: 1; transform: scale(1); }

/* Hover lift (for cards) */
.hover-lift { transition: transform var(--duration-normal) var(--ease-out), box-shadow var(--duration-normal) var(--ease-out); }
.hover-lift:hover {
    transform: translateY(-4px);
    box-shadow: var(--shadow-lg);
}

/* Pulse (for live indicators) */
@keyframes pulse {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.5; }
}
.pulse { animation: pulse 2s ease-in-out infinite; }

/* Spin (for loaders) */
@keyframes spin {
    to { transform: rotate(360deg); }
}
.spinner {
    width: 24px;
    height: 24px;
    border: 2px solid var(--c-border);
    border-top-color: var(--c-navy);
    border-radius: 50%;
    animation: spin 0.6s linear infinite;
}

/* Chart bar grow */
@keyframes grow-up {
    from { transform: scaleY(0); }
    to { transform: scaleY(1); }
}
.chart-bar-animate {
    transform-origin: bottom;
    animation: grow-up 0.8s var(--ease-out) forwards;
}

/* Fade in */
@keyframes fade-in {
    from { opacity: 0; }
    to { opacity: 1; }
}
.fade-in { animation: fade-in var(--duration-normal) var(--ease-out); }

/* Counter animation helper (JS drives the value) */
.counter-animate {
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
}
