/* Animation Library
 * Transitions, animations, and motion utilities
 * Provides reusable animation patterns and timing functions
 */

/* Keyframe Animations */
@keyframes fadeIn {
    from {
        opacity: 0;
    }
    to {
        opacity: 1;
    }
}

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

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

@keyframes slideInDown {
    from {
        transform: translateY(-20px);
        opacity: 0;
    }
    to {
        transform: translateY(0);
        opacity: 1;
    }
}

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

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

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

/* Animation Classes */
.animate-fadeIn {
    animation: fadeIn var(--transition-base);
}

.animate-fadeOut {
    animation: fadeOut var(--transition-base);
}

.animate-slideInUp {
    animation: slideInUp var(--transition-base);
}

.animate-slideInDown {
    animation: slideInDown var(--transition-base);
}

.animate-scaleIn {
    animation: scaleIn var(--transition-base);
}

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

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

/* Transition Utilities */
.transition-none {
    transition: none;
}

.transition-all {
    transition: var(--transition-base);
}

.transition-colors {
    transition-property: color, background-color, border-color;
    transition-duration: 0.2s;
    transition-timing-function: ease;
}

.transition-transform {
    transition-property: transform;
    transition-duration: 0.2s;
    transition-timing-function: ease;
}

.transition-opacity {
    transition-property: opacity;
    transition-duration: 0.2s;
    transition-timing-function: ease;
}

/* Duration Modifiers */
.duration-fast {
    transition-duration: 0.15s;
}

.duration-slow {
    transition-duration: 0.3s;
}

/* Easing Functions */
.ease-linear {
    transition-timing-function: linear;
}

.ease-in {
    transition-timing-function: ease-in;
}

.ease-out {
    transition-timing-function: ease-out;
}

.ease-in-out {
    transition-timing-function: ease-in-out;
}