/* 
 * v2_executive_theme - Animations
 * Editorial: Subtle, fast, purposeful. No dramatic theatre.
 * Fade only — slide is restrained (8px, not 14-20px).
 */

@keyframes fadeIn {
    from { opacity: 0; }
    to   { opacity: 1; }
}

@keyframes slideUpFade {
    from {
        opacity: 0;
        transform: translateY(8px);  /* Editorial: barely perceptible lift */
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

.animate-fade-in {
    animation: fadeIn 0.45s ease-out forwards;
}

.animate-slide-up {
    /* Ease-out: enters quickly, settles softly */
    animation: slideUpFade 0.45s ease-out forwards;
}

/* Wait in invisible state before IntersectionObserver fires */
.anim-target {
    opacity: 0;
}
