/* animations.css — Geofixe
 * Animations complémentaires centralisées
 * Utilise uniquement transform/opacity pour rester sur le GPU compositor thread
 */

/* Entrée fade depuis le bas */
@keyframes fadeInUp {
    from {
        opacity: 0;
        transform: translateY(24px) translateZ(0);
    }
    to {
        opacity: 1;
        transform: translateY(0) translateZ(0);
    }
}

/* Entrée fade depuis le haut */
@keyframes slideInDown {
    from {
        opacity: 0;
        transform: translateY(-24px) translateZ(0);
    }
    to {
        opacity: 1;
        transform: translateY(0) translateZ(0);
    }
}

/* Entrée en scale */
@keyframes scaleIn {
    from {
        opacity: 0;
        transform: scale(0.92) translateZ(0);
    }
    to {
        opacity: 1;
        transform: scale(1) translateZ(0);
    }
}

/* Fade simple */
@keyframes fadeIn {
    from { opacity: 0; }
    to   { opacity: 1; }
}

/* Pulse de lueur (box-shadow uniquement) */
@keyframes glowPulse {
    0%, 100% { box-shadow: 0 0 0 0 rgba(162, 56, 255, 0.35); }
    50%       { box-shadow: 0 0 0 8px rgba(162, 56, 255, 0); }
}

/* Shimmer sur gradient */
@keyframes shimmer {
    0%   { background-position: -200% center; }
    100% { background-position:  200% center; }
}

/* Utilitaire : applique une animation d'entrée une fois visible */
[data-animate="fadeInUp"] {
    opacity: 0;
    transform: translateY(24px) translateZ(0);
    transition: opacity 0.5s ease, transform 0.5s ease;
}

[data-animate="fadeInUp"].animate {
    opacity: 1;
    transform: translateY(0) translateZ(0);
}

[data-animate="scaleIn"] {
    opacity: 0;
    transform: scale(0.92) translateZ(0);
    transition: opacity 0.5s ease, transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
}

[data-animate="scaleIn"].animate {
    opacity: 1;
    transform: scale(1) translateZ(0);
}
