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

@keyframes blink {
    0%, 50%, 100% { opacity: 1; }
    25%, 75% { opacity: 0; }
}

@keyframes dance {
    0% { left: -100px; transform: rotate(0deg); }
    25% { transform: rotate(-10deg); }
    50% { transform: rotate(10deg); }
    75% { transform: rotate(-10deg); }
    100% { left: 110%; transform: rotate(360deg); }
}

/* Shake animation */
@keyframes shake {
    0%, 100% { transform: translateX(0); }
    10%, 30%, 50%, 70%, 90% { transform: translateX(-5px); }
    20%, 40%, 60%, 80% { transform: translateX(5px); }
}

/* Constant jitter animation for popups */
@keyframes windowJitter {
    0% { transform: translate(-50%, -50%) translate(0, 0); }
    10% { transform: translate(-50%, -50%) translate(-1px, 1px); }
    20% { transform: translate(-50%, -50%) translate(1px, -1px); }
    30% { transform: translate(-50%, -50%) translate(-1px, 0); }
    40% { transform: translate(-50%, -50%) translate(1px, 1px); }
    50% { transform: translate(-50%, -50%) translate(0, -1px); }
    60% { transform: translate(-50%, -50%) translate(-1px, 1px); }
    70% { transform: translate(-50%, -50%) translate(1px, 0); }
    80% { transform: translate(-50%, -50%) translate(-1px, -1px); }
    90% { transform: translate(-50%, -50%) translate(1px, 1px); }
    100% { transform: translate(-50%, -50%) translate(0, 0); }
}

@keyframes buttonJitter {
    0% { transform: translate(0, 0); }
    25% { transform: translate(-1px, 0); }
    50% { transform: translate(1px, 0); }
    75% { transform: translate(0, -1px); }
    100% { transform: translate(0, 1px); }
}

/* Alternate jitter pattern */
@keyframes windowJitter2 {
    0%, 100% { transform: translate(-50%, -50%) rotate(0deg); }
    25% { transform: translate(-50%, -50%) rotate(-0.5deg); }
    75% { transform: translate(-50%, -50%) rotate(0.5deg); }
}

/* Typing indicator */
@keyframes typing {
    0% { content: '.'; }
    33% { content: '..'; }
    66% { content: '...'; }
}

/* Cat bounce animation when landing */
@keyframes catBounce {
    0% { transform: scaleY(1); }
    30% { transform: scaleY(0.8) scaleX(1.1); }
    60% { transform: scaleY(1.1) scaleX(0.9); }
    100% { transform: scaleY(1) scaleX(1); }
}

/* Cursor hit feedback */
@keyframes cursor-hit-shake {
    0%, 100% { transform: translate(0, 0); }
    25% { transform: translate(-3px, -3px); }
    50% { transform: translate(3px, 3px); }
    75% { transform: translate(-3px, 3px); }
}

/* Progress bar stripes */
@keyframes progress-stripes {
    0% { background-position: 0 0; }
    100% { background-position: 20px 20px; }
}

/* Animate countdown numbers on update */
@keyframes numberFlip {
    0% { transform: rotateX(0); }
    50% { transform: rotateX(90deg); }
    100% { transform: rotateX(0); }
}

/* Slow rotation for OpenAI logo */
@keyframes slowRotate {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}

/* Celebration animations */
@keyframes confettiFall {
    0% {
        transform: translateY(0) rotate(0deg);
        opacity: 1;
    }
    100% {
        transform: translateY(100vh) rotate(720deg);
        opacity: 0;
    }
}

@keyframes fireworkParticle {
    0% {
        transform: translate(0, 0);
        opacity: 1;
    }
    100% {
        transform: translate(var(--dx), calc(var(--dy) + 100px));
        opacity: 0;
    }
}

@keyframes celebration-flash {
    0%, 100% {
        background: #000;
        box-shadow: inset 0 0 10px rgba(0,255,0,0.2);
    }
    25% {
        background: #001100;
        box-shadow: inset 0 0 30px rgba(0,255,0,0.8);
    }
    50% {
        background: #002200;
        box-shadow: inset 0 0 50px rgba(0,255,0,1);
    }
    75% {
        background: #001100;
        box-shadow: inset 0 0 30px rgba(0,255,0,0.8);
    }
}

@keyframes celebration-dance {
    0%, 100% { transform: rotate(0deg) scale(1); }
    25% { transform: rotate(-5deg) scale(1.05); }
    50% { transform: rotate(5deg) scale(1.05); }
    75% { transform: rotate(-3deg) scale(1.03); }
}

/* Scam button animations */
@keyframes scamPulse {
    0% {
        box-shadow:
            0 0 20px rgba(255, 0, 0, 0.8),
            inset 0 0 20px rgba(255, 255, 0, 0.5),
            0 5px 10px rgba(0, 0, 0, 0.5);
    }
    100% {
        box-shadow:
            0 0 40px rgba(255, 0, 0, 1),
            inset 0 0 30px rgba(255, 255, 0, 0.8),
            0 8px 15px rgba(0, 0, 0, 0.7);
    }
}

@keyframes scamGlow {
    0%, 100% {
        background: linear-gradient(to bottom, #FFFF00 0%, #FFD700 50%, #FFA500 100%);
    }
    50% {
        background: linear-gradient(to bottom, #FFFF66 0%, #FFEB3B 50%, #FFB300 100%);
    }
}

@keyframes scamBlink {
    0%, 50%, 100% { opacity: 1; }
    25%, 75% { opacity: 0.3; }
}

@keyframes scamBounce {
    0% { transform: translateY(0); }
    100% { transform: translateY(-2px); }
}

@keyframes scamShake {
    0%, 100% { transform: translateX(0) scale(1.05); }
    25% { transform: translateX(-2px) scale(1.05); }
    75% { transform: translateX(2px) scale(1.05); }
}
