/*
 * Fueled.com Clone - Animations
 * =============================
 * Keyframes, transitions, and scroll-triggered animations
 */

/* ==================== KEYFRAME ANIMATIONS ==================== */

/* Fade in up - for hero and section entries */
@keyframes fadeInUp {
    from {
        opacity: 0;
        transform: translateY(30px);
    }

    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* Fade in - general fade */
@keyframes fadeIn {
    from {
        opacity: 0;
    }

    to {
        opacity: 1;
    }
}

/* Slide in from left */
@keyframes slideInLeft {
    from {
        opacity: 0;
        transform: translateX(-50px);
    }

    to {
        opacity: 1;
        transform: translateX(0);
    }
}

/* Slide in from right */
@keyframes slideInRight {
    from {
        opacity: 0;
        transform: translateX(50px);
    }

    to {
        opacity: 1;
        transform: translateX(0);
    }
}

/* Scale up */
@keyframes scaleUp {
    from {
        opacity: 0;
        transform: scale(0.9);
    }

    to {
        opacity: 1;
        transform: scale(1);
    }
}

/* Infinite scroll for logo ticker */
@keyframes scroll {
    from {
        transform: translateX(0);
    }

    to {
        transform: translateX(-50%);
    }
}

/* Pulse for loading states */
@keyframes pulse {

    0%,
    100% {
        opacity: 1;
    }

    50% {
        opacity: 0.5;
    }
}

/* Gradient animation for hero sphere */
@keyframes gradientShift {
    0% {
        background-position: 0% 50%;
    }

    50% {
        background-position: 100% 50%;
    }

    100% {
        background-position: 0% 50%;
    }
}

/* Float animation for decorative elements */
@keyframes float {

    0%,
    100% {
        transform: translateY(0);
    }

    50% {
        transform: translateY(-20px);
    }
}

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

.animate-fade-in-up {
    animation: fadeInUp 0.6s var(--ease-out-expo) forwards;
}

.animate-fade-in {
    animation: fadeIn 0.6s ease forwards;
}

.animate-slide-in-left {
    animation: slideInLeft 0.6s var(--ease-out-expo) forwards;
}

.animate-slide-in-right {
    animation: slideInRight 0.6s var(--ease-out-expo) forwards;
}

.animate-scale-up {
    animation: scaleUp 0.6s var(--ease-out-expo) forwards;
}

/* Staggered delays */
.delay-100 {
    animation-delay: 100ms;
}

.delay-200 {
    animation-delay: 200ms;
}

.delay-300 {
    animation-delay: 300ms;
}

.delay-400 {
    animation-delay: 400ms;
}

.delay-500 {
    animation-delay: 500ms;
}

.delay-600 {
    animation-delay: 600ms;
}

/* ==================== SCROLL ANIMATION SETUP ==================== */

/* Elements waiting to be animated */
[data-animate] {
    opacity: 0;
}

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

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

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

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

/* When element is visible */
[data-animate].is-visible {
    opacity: 1;
    transform: translateY(0) translateX(0) scale(1);
    transition: opacity 0.6s var(--ease-out-expo), transform 0.6s var(--ease-out-expo);
}

/* Staggered children */
[data-animate].is-visible [data-animate-child] {
    opacity: 1;
    transform: translateY(0);
    transition: opacity 0.6s var(--ease-out-expo), transform 0.6s var(--ease-out-expo);
}

[data-animate-child] {
    opacity: 0;
    transform: translateY(20px);
}

[data-animate-child]:nth-child(1) {
    transition-delay: 0ms;
}

[data-animate-child]:nth-child(2) {
    transition-delay: 100ms;
}

[data-animate-child]:nth-child(3) {
    transition-delay: 200ms;
}

[data-animate-child]:nth-child(4) {
    transition-delay: 300ms;
}

[data-animate-child]:nth-child(5) {
    transition-delay: 400ms;
}

[data-animate-child]:nth-child(6) {
    transition-delay: 500ms;
}

/* ==================== HOVER TRANSITIONS ==================== */

/* Card hover lift */
.hover-lift {
    transition: transform var(--transition-slow), box-shadow var(--transition-slow);
}

.hover-lift:hover {
    transform: translateY(-8px);
    box-shadow: var(--shadow-lg);
}

/* Image zoom on hover */
.hover-zoom {
    overflow: hidden;
}

.hover-zoom img {
    transition: transform var(--transition-slower);
}

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

/* Underline animation */
.hover-underline {
    position: relative;
}

.hover-underline::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 0;
    width: 0;
    height: 1px;
    background-color: currentColor;
    transition: width var(--transition-normal);
}

.hover-underline:hover::after {
    width: 100%;
}

/* ==================== LOGO TICKER ==================== */

.logo-ticker {
    overflow: hidden;
    position: relative;
}

.logo-ticker::before,
.logo-ticker::after {
    display: none;
}

.logo-ticker::before {
    left: 0;
    background: linear-gradient(to right, var(--bg-primary), transparent);
}

.logo-ticker::after {
    right: 0;
    background: linear-gradient(to left, var(--bg-primary), transparent);
}

.logo-ticker__track {
    display: flex;
    gap: var(--space-4);
    animation: scroll 320s linear infinite;
    width: max-content;
}

.logo-ticker__track:hover {
    animation-play-state: paused;
}

.logo-ticker__logo {
    height: 75px;
    width: auto;
    opacity: 1;
    filter: brightness(0) invert(1);
    transition: opacity var(--transition-normal);
}

.logo-ticker__logo:hover {
    opacity: 1;
}

/* ==================== HERO SPHERE ==================== */

.hero-sphere {
    position: absolute;
    width: 600px;
    height: 600px;
    border-radius: 50%;
    background: var(--gradient-planetary);
    background-size: 200% 200%;
    animation: gradientShift 10s ease infinite, float 6s ease-in-out infinite;
    filter: blur(60px);
    opacity: 0.5;
    pointer-events: none;
}

/* ==================== REDUCED MOTION ==================== */

@media (prefers-reduced-motion: reduce) {

    [data-animate],
    [data-animate-child],
    .animate-fade-in-up,
    .animate-fade-in,
    .animate-slide-in-left,
    .animate-slide-in-right,
    .animate-scale-up {
        animation: none;
        opacity: 1;
        transform: none;
    }

    .logo-ticker__track {
        animation: none;
    }

    .hero-sphere {
        animation: none;
    }
}