/* LEAVAH PARIS — Animations */

/* Fade-in on scroll (IntersectionObserver) */
/* opacity:0 uniquement sur les éléments marqués .anim-ready par JS (hors viewport) */
.fade-in.anim-ready {
    opacity: 0;
    transform: translateY(30px);
    transition: opacity 0.7s ease, transform 0.7s ease;
}
.fade-in.anim-ready.visible,
.fade-in.visible {
    opacity: 1;
    transform: translateY(0);
}

/* Keyframes */
@keyframes fadeInDown {
    from { opacity: 0; transform: translateY(-30px); }
    to   { opacity: 1; transform: translateY(0); }
}

@keyframes fadeInUp {
    from { opacity: 0; transform: translateY(30px); }
    to   { opacity: 1; transform: translateY(0); }
}

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

@keyframes shimmer {
    0%   { background-position: -200% center; }
    100% { background-position: 200% center; }
}

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

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

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

@keyframes pulse {
    0%, 100% { opacity: 1; }
    50%       { opacity: 0.5; }
}

/* Utility classes */
.animate-fade-in-down  { animation: fadeInDown 0.6s ease both; }
.animate-fade-in-up    { animation: fadeInUp 0.6s ease both; }
.animate-fade-in       { animation: fadeIn 0.4s ease both; }
.animate-scale-in      { animation: scaleIn 0.3s ease both; }
.animate-slide-in-right { animation: slideInRight 0.4s ease both; }
