/* BASE ANIMATIONS & TRANSITIONS */

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

@keyframes mist-drift {
    0% { transform: translateX(0) scale(1); opacity: 0.3; }
    50% { transform: translateX(-5%) scale(1.05); opacity: 0.5; }
    100% { transform: translateX(0) scale(1); opacity: 0.3; }
}

@keyframes pulse-glow {
    0% { box-shadow: 0 0 20px rgba(31, 122, 92, 0.2); }
    50% { box-shadow: 0 0 40px rgba(47, 170, 109, 0.4); }
    100% { box-shadow: 0 0 20px rgba(31, 122, 92, 0.2); }
}

@keyframes fade-in-up {
    0% { opacity: 0; transform: translateY(30px); }
    100% { opacity: 1; transform: translateY(0); }
}

@keyframes particle-rise {
    0% { opacity: 0; transform: translateY(0) scale(0.5); }
    10% { opacity: 0.8; }
    90% { opacity: 0.8; }
    100% { opacity: 0; transform: translateY(-100vh) scale(1.2); }
}

/* UTILITY CLASSES FOR JS INTERSECTION OBSERVER */
.animate-on-scroll {
    opacity: 0;
    transform: translateY(30px);
    transition: opacity 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94), transform 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}

.animate-on-scroll.is-visible {
    opacity: 1;
    transform: translateY(0);
}

.delay-1 { transition-delay: 0.1s; }
.delay-2 { transition-delay: 0.2s; }
.delay-3 { transition-delay: 0.3s; }
.delay-4 { transition-delay: 0.4s; }

/* AMBIENT EFFECTS */
.ambient-glow {
    animation: pulse-glow 6s infinite ease-in-out;
}

.floating-element {
    animation: float 6s infinite ease-in-out;
}