/* ============================================================
   Scroll Animations
   ============================================================ */

/* ─── Animate on Scroll Base ─── */
.animate-on-scroll {
    opacity: 0;
    transition: opacity var(--duration-slower) var(--ease-out),
                transform var(--duration-slower) var(--ease-out);
}

.animate-on-scroll.is-visible {
    opacity: 1;
    transform: translate(0, 0) !important;
}

/* ─── Direction Variants ─── */
.fade-up {
    transform: translateY(30px);
}

.fade-down {
    transform: translateY(-30px);
}

.fade-left {
    transform: translateX(30px);
}

.fade-right {
    transform: translateX(-30px);
}

.fade-in {
    transform: translateY(0);
}

.scale-in {
    transform: scale(0.95);
}

.zoom-in {
    transform: scale(0.9);
}

/* ─── Stagger Delays ─── */
.delay-1 { transition-delay: 100ms; }
.delay-2 { transition-delay: 200ms; }
.delay-3 { transition-delay: 300ms; }
.delay-4 { transition-delay: 400ms; }
.delay-5 { transition-delay: 500ms; }
.delay-6 { transition-delay: 600ms; }

/* ─── Keyframe Animations ─── */
@keyframes fadeInUp {
    from {
        opacity: 0;
        transform: translateY(24px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

@keyframes fadeInDown {
    from {
        opacity: 0;
        transform: translateY(-24px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

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

@keyframes slideInRight {
    from {
        opacity: 0;
        transform: translateX(40px);
    }
    to {
        opacity: 1;
        transform: translateX(0);
    }
}

@keyframes slideInLeft {
    from {
        opacity: 0;
        transform: translateX(-40px);
    }
    to {
        opacity: 1;
        transform: translateX(0);
    }
}

@keyframes float {
    0%, 100% {
        transform: translateY(0);
    }
    50% {
        transform: translateY(-8px);
    }
}

@keyframes bounceSubtle {
    0%, 100% {
        transform: translateY(0);
    }
    50% {
        transform: translateY(-4px);
    }
}

@keyframes scaleIn {
    from {
        opacity: 0;
        transform: scale(0.9);
    }
    to {
        opacity: 1;
        transform: scale(1);
    }
}

/* ─── Animation Utility Classes ─── */
.anim-fade-in-up {
    animation: fadeInUp 0.6s var(--ease-out) forwards;
}

.anim-fade-in-down {
    animation: fadeInDown 0.6s var(--ease-out) forwards;
}

.anim-fade-in {
    animation: fadeIn 0.6s var(--ease-out) forwards;
}

.anim-slide-right {
    animation: slideInRight 0.6s var(--ease-out) forwards;
}

.anim-slide-left {
    animation: slideInLeft 0.6s var(--ease-out) forwards;
}

.anim-float {
    animation: float 3s ease-in-out infinite;
}

.anim-bounce {
    animation: bounceSubtle 1.5s ease-in-out infinite;
}

.anim-scale-in {
    animation: scaleIn 0.5s var(--ease-spring) forwards;
}

/* ─── Reduced Motion ─── */
@media (prefers-reduced-motion: reduce) {
    .animate-on-scroll {
        opacity: 1;
        transform: none;
        transition: none;
    }

    .anim-float,
    .anim-bounce {
        animation: none;
    }

    .floating-btn-consult {
        animation: none;
    }
}
