/* ================================
   Animation Keyframes & Classes
   ================================ */

/* ===== Keyframes ===== */

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

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

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

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

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

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

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

@keyframes glow {
    0%, 100% {
        box-shadow: 0 0 20px var(--primary-glow);
    }
    50% {
        box-shadow: 0 0 40px var(--primary-glow), 0 0 60px var(--primary-glow);
    }
}

@keyframes float {
    0%, 100% {
        transform: translateY(0);
    }
    50% {
        transform: translateY(-10px);
    }
}

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

@keyframes borderGlow {
    0%, 100% {
        border-color: var(--border-subtle);
    }
    50% {
        border-color: var(--primary);
    }
}

/* ===== Animation Utilities ===== */

/* Initial state for GSAP scroll animations */
.gsap-fade-up {
    opacity: 0;
    transform: translateY(40px);
}

.gsap-fade-in {
    opacity: 0;
}

.gsap-scale-in {
    opacity: 0;
    transform: scale(0.9);
}

/* CSS-only scroll animations (fallback) */
.animate-on-scroll {
    opacity: 0;
    transform: translateY(30px);
    transition: opacity var(--duration-slow) var(--ease-out),
                transform var(--duration-slow) var(--ease-out);
}

.animate-on-scroll.is-visible {
    opacity: 1;
    transform: translateY(0);
}

/* Stagger delays */
.delay-1 { transition-delay: 0.1s; }
.delay-2 { transition-delay: 0.2s; }
.delay-3 { transition-delay: 0.3s; }
.delay-4 { transition-delay: 0.4s; }
.delay-5 { transition-delay: 0.5s; }

/* ===== Hero Animations ===== */

.hero-title {
    animation: fadeInUp 1s var(--ease-out) 0.2s both;
}

.hero-subtitle {
    animation: fadeInUp 1s var(--ease-out) 0.4s both;
}

.hero-cta {
    animation: fadeInUp 1s var(--ease-out) 0.6s both;
}

/* ===== Hover Animations ===== */

/* Glow button effect */
.btn-glow {
    position: relative;
    transition: all var(--duration-base) var(--ease-out);
}

.btn-glow::before {
    content: '';
    position: absolute;
    inset: -2px;
    background: linear-gradient(135deg, var(--primary), var(--accent));
    border-radius: inherit;
    opacity: 0;
    z-index: -1;
    transition: opacity var(--duration-base) var(--ease-out);
    filter: blur(12px);
}

.btn-glow:hover::before {
    opacity: 0.6;
}

.btn-glow:hover {
    transform: translateY(-2px);
}

/* Card 3D tilt effect - controlled via JS */
.card-3d {
    transition: transform var(--duration-base) var(--ease-out);
    transform-style: preserve-3d;
}

/* Border glow on hover */
.border-glow-hover {
    position: relative;
    transition: border-color var(--duration-base) var(--ease-out);
}

.border-glow-hover::after {
    content: '';
    position: absolute;
    inset: 0;
    border-radius: inherit;
    padding: 1px;
    background: linear-gradient(135deg, var(--primary), var(--accent));
    -webkit-mask:
        linear-gradient(#fff 0 0) content-box,
        linear-gradient(#fff 0 0);
    -webkit-mask-composite: xor;
    mask-composite: exclude;
    opacity: 0;
    transition: opacity var(--duration-base) var(--ease-out);
}

.border-glow-hover:hover::after {
    opacity: 1;
}

/* ===== Loading States ===== */

.skeleton {
    background: linear-gradient(
        90deg,
        var(--bg-card) 25%,
        var(--bg-card-hover) 50%,
        var(--bg-card) 75%
    );
    background-size: 200% 100%;
    animation: shimmer 1.5s infinite;
}

/* ===== Text Animations ===== */

.text-gradient {
    background: linear-gradient(135deg, var(--primary), var(--accent));
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
}

.text-glow {
    text-shadow: 0 0 20px var(--primary-glow);
}
