/* ============================================
   ConclaveHub Games - Animations
   ============================================ */

/* === Float Up (Particles, Score Pop) === */
@keyframes floatUp {
    0% {
        transform: translateY(0) scale(1);
        opacity: 1;
    }

    100% {
        transform: translateY(-60px) scale(0.8);
        opacity: 0;
    }
}

.anim-float-up {
    animation: floatUp 0.8s ease-out forwards;
}

/* === Bounce In === */
@keyframes bounceIn {
    0% {
        transform: scale(0.8);
        opacity: 0;
    }

    50% {
        transform: scale(1.05);
        opacity: 1;
    }

    100% {
        transform: scale(1);
        opacity: 1;
    }
}

.anim-bounce-in {
    animation: bounceIn 0.3s ease-out;
}

/* === Pulse Glow === */
@keyframes pulseGlow {

    0%,
    100% {
        box-shadow: 0 0 20px rgba(139, 92, 246, 0.3);
    }

    50% {
        box-shadow: 0 0 40px rgba(139, 92, 246, 0.5);
    }
}

.anim-pulse-glow {
    animation: pulseGlow 2s ease-in-out infinite;
}

/* === Spin === */
@keyframes spin {
    from {
        transform: rotate(0deg);
    }

    to {
        transform: rotate(360deg);
    }
}

.anim-spin-slow {
    animation: spin 3s linear infinite;
}

.anim-spin-fast {
    animation: spin 0.5s linear infinite;
}

/* === Shake === */
@keyframes shake {

    0%,
    100% {
        transform: translateX(0);
    }

    25% {
        transform: translateX(-5px);
    }

    75% {
        transform: translateX(5px);
    }
}

.anim-shake {
    animation: shake 0.3s ease-in-out;
}

/* === Fade In/Out === */
@keyframes fadeIn {
    from {
        opacity: 0;
    }

    to {
        opacity: 1;
    }
}

@keyframes fadeOut {
    from {
        opacity: 1;
    }

    to {
        opacity: 0;
    }
}

.anim-fade-in {
    animation: fadeIn 0.3s ease-out;
}

.anim-fade-out {
    animation: fadeOut 0.3s ease-out forwards;
}

/* === Slide Up === */
@keyframes slideUp {
    from {
        transform: translateY(20px);
        opacity: 0;
    }

    to {
        transform: translateY(0);
        opacity: 1;
    }
}

.anim-slide-up {
    animation: slideUp 0.4s ease-out;
}

/* === Scale Pop === */
@keyframes scalePop {
    0% {
        transform: scale(1);
    }

    50% {
        transform: scale(1.2);
    }

    100% {
        transform: scale(1);
    }
}

.anim-pop {
    animation: scalePop 0.2s ease-out;
}

/* === Gradient Flow === */
@keyframes gradientFlow {
    0% {
        background-position: 0% 50%;
    }

    50% {
        background-position: 100% 50%;
    }

    100% {
        background-position: 0% 50%;
    }
}

.anim-gradient-flow {
    background-size: 200% 200%;
    animation: gradientFlow 3s ease infinite;
}

/* === Particle Float === */
.game-particle {
    position: absolute;
    pointer-events: none;
    font-weight: 700;
    font-family: 'JetBrains Mono', monospace;
    color: var(--game-accent-emerald);
    z-index: var(--game-z-toast);
    animation: floatUp 0.8s ease-out forwards;
}

/* === Button Press Effect === */
.game-btn-press:active {
    transform: scale(0.95);
    transition: transform 0.05s;
}

/* === Coin Collect === */
@keyframes coinCollect {
    0% {
        transform: scale(1) rotate(0deg);
        opacity: 1;
    }

    50% {
        transform: scale(1.5) rotate(180deg);
        opacity: 0.8;
    }

    100% {
        transform: scale(0) rotate(360deg);
        opacity: 0;
    }
}

.anim-coin-collect {
    animation: coinCollect 0.4s ease-out forwards;
}

/* === Explosion === */
@keyframes explode {
    0% {
        transform: scale(0);
        opacity: 1;
    }

    50% {
        transform: scale(1.5);
        opacity: 0.7;
    }

    100% {
        transform: scale(2);
        opacity: 0;
    }
}

.anim-explode {
    animation: explode 0.3s ease-out forwards;
}