/* ==========================================================================
   ANIMATIONS & KEYFRAMES
   ========================================================================== */

/* Fade & Slide Animations */
@keyframes fadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}

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

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

/* Floating 3D Object Animation */
@keyframes floatGlass {
    0% {
        transform: translateY(0px) rotateX(15deg) rotateY(-10deg);
    }
    50% {
        transform: translateY(-16px) rotateX(20deg) rotateY(15deg);
    }
    100% {
        transform: translateY(0px) rotateX(15deg) rotateY(-10deg);
    }
}

/* Continuous 3D Paraboloid Slow Rotation */
@keyframes rotateParaboloid {
    0% {
        transform: rotateX(65deg) rotateZ(0deg);
    }
    100% {
        transform: rotateX(65deg) rotateZ(360deg);
    }
}

@keyframes pulseGlowRing {
    0%, 100% {
        box-shadow: 0 0 20px var(--border-glow), inset 0 0 15px rgba(255, 255, 255, 0.2);
        border-color: var(--accent);
    }
    50% {
        box-shadow: 0 0 45px var(--accent-glow), inset 0 0 30px rgba(255, 255, 255, 0.4);
        border-color: var(--primary);
    }
}

/* Shimmer Light Sweep on Glass Cards */
@keyframes glassShimmer {
    0% {
        background-position: -200% 0;
    }
    100% {
        background-position: 200% 0;
    }
}

/* Typing Cursor Blinking */
@keyframes cursorBlink {
    0%, 100% { opacity: 1; }
    50% { opacity: 0; }
}

/* Ripple Button Effect */
@keyframes buttonRipple {
    0% {
        width: 0;
        height: 0;
        opacity: 0.6;
    }
    100% {
        width: 300px;
        height: 300px;
        opacity: 0;
    }
}

/* Ambient Radial Mesh Drift */
@keyframes meshDrift {
    0% {
        transform: translate(0%, 0%) scale(1);
    }
    50% {
        transform: translate(3%, -4%) scale(1.08);
    }
    100% {
        transform: translate(0%, 0%) scale(1);
    }
}

/* Scroll Progress Glow Bar Animation */
@keyframes scrollGlow {
    0% { background-position: 0% 50%; }
    50% { background-position: 100% 50%; }
    100% { background-position: 0% 50%; }
}

/* Utility Animation Classes */
.animate-fadeIn {
    animation: fadeIn 0.8s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}

.animate-slideUp {
    animation: slideUp 0.8s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}

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

/* Scroll Reveal Base States (Always Visible Baseline for Reliability) */
.reveal-on-scroll {
    opacity: 1;
    transform: translateY(0);
    transition: opacity 0.6s cubic-bezier(0.16, 1, 0.3, 1), transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);
    will-change: opacity, transform;
}

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