/**
 * Animations
 * 
 * Sistema de animaciones reutilizables
 * Controladas por observers.js
 * 
 * @package Orvit-Cosmos
 */

/* ============================================
   BASE ANIMATION STATE
============================================ */

[data-animate] {
    opacity: 0;
}

[data-animate].in-view {
    opacity: 1;
}

/* ============================================
   FADE ANIMATIONS
============================================ */

[data-animate="fade-up"] {
    transform: translateY(60px);
}

[data-animate="fade-up"].in-view {
    transform: translateY(0);
    transition: opacity 0.8s var(--ease-out),
                transform 0.8s var(--ease-out);
}

[data-animate="fade-down"] {
    transform: translateY(-60px);
}

[data-animate="fade-down"].in-view {
    transform: translateY(0);
    transition: opacity 0.8s var(--ease-out),
                transform 0.8s var(--ease-out);
}

[data-animate="fade-left"] {
    transform: translateX(60px);
}

[data-animate="fade-left"].in-view {
    transform: translateX(0);
    transition: opacity 0.8s var(--ease-out),
                transform 0.8s var(--ease-out);
}

[data-animate="fade-right"] {
    transform: translateX(-60px);
}

[data-animate="fade-right"].in-view {
    transform: translateX(0);
    transition: opacity 0.8s var(--ease-out),
                transform 0.8s var(--ease-out);
}

[data-animate="fade"] {
    opacity: 0;
}

[data-animate="fade"].in-view {
    opacity: 1;
    transition: opacity 0.8s var(--ease-out);
}

/* ============================================
   SCALE ANIMATIONS
============================================ */

[data-animate="scale"] {
    transform: scale(0.8);
}

[data-animate="scale"].in-view {
    transform: scale(1);
    transition: opacity 0.8s var(--ease-out),
                transform 0.8s var(--ease-out);
}

[data-animate="scale-up"] {
    transform: scale(1.2);
}

[data-animate="scale-up"].in-view {
    transform: scale(1);
    transition: opacity 0.8s var(--ease-out),
                transform 0.8s var(--ease-out);
}

/* ============================================
   ROTATE ANIMATIONS
============================================ */

[data-animate="rotate"] {
    transform: rotate(-10deg);
}

[data-animate="rotate"].in-view {
    transform: rotate(0);
    transition: opacity 0.8s var(--ease-out),
                transform 0.8s var(--ease-out);
}

/* ============================================
   STAGGER (para múltiples elementos)
============================================ */

[data-animate-delay="0.1"] { transition-delay: 0.1s; }
[data-animate-delay="0.2"] { transition-delay: 0.2s; }
[data-animate-delay="0.3"] { transition-delay: 0.3s; }
[data-animate-delay="0.4"] { transition-delay: 0.4s; }
[data-animate-delay="0.5"] { transition-delay: 0.5s; }
[data-animate-delay="0.6"] { transition-delay: 0.6s; }
[data-animate-delay="0.7"] { transition-delay: 0.7s; }
[data-animate-delay="0.8"] { transition-delay: 0.8s; }

/* ============================================
   HOVER EFFECTS
============================================ */

.hover-lift {
    transition: transform var(--duration-base) var(--ease-out);
}

.hover-lift:hover {
    transform: translateY(-5px);
}

.hover-scale {
    transition: transform var(--duration-base) var(--ease-out);
}

.hover-scale:hover {
    transform: scale(1.05);
}

.hover-glow {
    transition: box-shadow var(--duration-base) var(--ease-out);
}

.hover-glow:hover {
    box-shadow: 0 0 30px rgba(99, 102, 241, 0.3);
}

/* ============================================
   LOADING STATES
============================================ */

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

.loading-pulse {
    animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}

@keyframes spin {
    from {
        transform: rotate(0deg);
    }
    to {
        transform: rotate(360deg);
    }
}

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

/* ============================================
   GRADIENT ANIMATIONS
============================================ */

@keyframes gradient-shift {
    0% {
        background-position: 0% 50%;
    }
    50% {
        background-position: 100% 50%;
    }
    100% {
        background-position: 0% 50%;
    }
}

.animated-gradient {
    background: linear-gradient(
        270deg,
        var(--color-primary),
        var(--color-secondary),
        var(--color-primary)
    );
    background-size: 200% 200%;
    animation: gradient-shift 8s ease infinite;
}