/**
 * _animations.css
 * Consolidated animations for Mimuss
 * This file contains all @keyframes definitions to avoid duplication
 */

/* ===========================================
   SKELETON LOADING ANIMATIONS
   =========================================== */

/**
 * Skeleton pulse animation
 * Used for loading placeholders
 * Previously duplicated in 3 skeleton components
 */
@keyframes skeleton-pulse {
    0% {
        background-position: 200% 0;
    }
    100% {
        background-position: -200% 0;
    }
}

/* Alternative skeleton shimmer */
@keyframes skeleton-shimmer {
    0% {
        transform: translateX(-100%);
    }
    100% {
        transform: translateX(100%);
    }
}

/* ===========================================
   MATERIAL UI ANIMATIONS
   =========================================== */

/**
 * MUI Auto-fill cancel animation
 * Used by Material UI form components
 * Previously duplicated 40+ times across files
 */
@keyframes mui-auto-fill {
    0% {
        display: block;
    }
}

@keyframes mui-auto-fill-cancel {
    0% {
        display: block;
    }
}

/* ===========================================
   SWIPER / CAROUSEL ANIMATIONS
   =========================================== */

/**
 * Swiper preloader spin
 * Used for carousel loading states
 */
@keyframes swiper-preloader-spin {
    0% {
        transform: rotate(0deg);
    }
    100% {
        transform: rotate(360deg);
    }
}

/* ===========================================
   GENERAL UI ANIMATIONS
   =========================================== */

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

/**
 * Fade in with upward movement
 * Used for elements appearing from below
 */
@keyframes fadeInUp {
    from {
        opacity: 0;
        transform: translateY(20px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/**
 * Fade in with downward movement
 */
@keyframes fadeInDown {
    from {
        opacity: 0;
        transform: translateY(-20px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/**
 * Floating animation
 * Used for subtle movement effects
 */
@keyframes float {
    0%,
    100% {
        transform: translateY(0);
    }
    50% {
        transform: translateY(-10px);
    }
}

/**
 * Marquee animation
 * Used for horizontal scrolling text/content
 */
@keyframes marquee {
    0% {
        transform: translateX(0);
    }
    100% {
        transform: translateX(-50%);
    }
}

/**
 * Pulse animation
 * Used for attention-grabbing elements
 */
@keyframes pulse {
    0%,
    100% {
        opacity: 1;
    }
    50% {
        opacity: 0.5;
    }
}

/**
 * Spin animation
 * Used for loading spinners
 */
@keyframes spin {
    0% {
        transform: rotate(0deg);
    }
    100% {
        transform: rotate(360deg);
    }
}

/**
 * Bounce animation
 */
@keyframes bounce {
    0%,
    100% {
        transform: translateY(0);
    }
    50% {
        transform: translateY(-25%);
    }
}

/**
 * Scale in animation
 */
@keyframes scaleIn {
    from {
        opacity: 0;
        transform: scale(0.9);
    }
    to {
        opacity: 1;
        transform: scale(1);
    }
}

/**
 * Slide in from right
 */
@keyframes slideInRight {
    from {
        opacity: 0;
        transform: translateX(100%);
    }
    to {
        opacity: 1;
        transform: translateX(0);
    }
}

/**
 * Slide in from left
 */
@keyframes slideInLeft {
    from {
        opacity: 0;
        transform: translateX(-100%);
    }
    to {
        opacity: 1;
        transform: translateX(0);
    }
}

/* ===========================================
   ANIMATION UTILITY CLASSES
   =========================================== */

.animate-fadeIn {
    animation: fadeIn 0.3s ease-out;
}

.animate-fadeInUp {
    animation: fadeInUp 0.3s ease-out;
}

.animate-fadeInDown {
    animation: fadeInDown 0.3s ease-out;
}

.animate-pulse {
    animation: pulse 2s ease-in-out infinite;
}

.animate-spin {
    animation: spin 1s linear infinite;
}

.animate-bounce {
    animation: bounce 1s ease infinite;
}

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