/* ══════════════════════════════════════════════════════════
   Fortune Wheel — CSS Animations & Transitions
   ══════════════════════════════════════════════════════════ */

/* ── Fade & Slide Animations ───────────────────────────── */
@keyframes fadeSlideUp {
    from {
        opacity: 0;
        transform: translateY(16px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

@keyframes fadeSlideDown {
    from {
        opacity: 0;
        transform: translateY(-16px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

@keyframes fadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}

@keyframes fadeOut {
    from { opacity: 1; }
    to { opacity: 0; }
}

@keyframes scaleIn {
    from {
        opacity: 0;
        transform: scale(0.85);
    }
    to {
        opacity: 1;
        transform: scale(1);
    }
}


/* ── Bounce ────────────────────────────────────────────── */
@keyframes bounce-in {
    0% {
        opacity: 0;
        transform: scale(0.3);
    }
    50% {
        opacity: 1;
        transform: scale(1.1);
    }
    70% {
        transform: scale(0.9);
    }
    100% {
        transform: scale(1);
    }
}

@keyframes bounce-subtle {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-6px); }
}


/* ── Toast Animations ──────────────────────────────────── */
@keyframes toast-in {
    from {
        opacity: 0;
        transform: translateX(100%) scale(0.9);
    }
    to {
        opacity: 1;
        transform: translateX(0) scale(1);
    }
}

@keyframes toast-out {
    from {
        opacity: 1;
        transform: translateX(0) scale(1);
    }
    to {
        opacity: 0;
        transform: translateX(100%) scale(0.9);
    }
}


/* ── Confetti ──────────────────────────────────────────── */
@keyframes confetti-fall {
    0% {
        transform: translateY(-100%) rotate(0deg);
        opacity: 1;
    }
    100% {
        transform: translateY(600px) rotate(720deg);
        opacity: 0;
    }
}

.confetti-piece {
    position: absolute;
    width: 8px;
    height: 8px;
    border-radius: 2px;
    animation: confetti-fall linear forwards;
    top: -10px;
}


/* ── Shimmer Effect ────────────────────────────────────── */
@keyframes shimmer {
    0% {
        background-position: -200% 0;
    }
    100% {
        background-position: 200% 0;
    }
}

.shimmer {
    background: linear-gradient(
        90deg,
        transparent 0%,
        rgba(255, 255, 255, 0.08) 50%,
        transparent 100%
    );
    background-size: 200% 100%;
    animation: shimmer 2s infinite;
}


/* ── Screen Transitions ────────────────────────────────── */
.screen--entering {
    animation: fadeSlideUp 0.4s ease forwards;
}

.screen--leaving {
    animation: fadeOut 0.3s ease forwards;
}


/* ── Hover Micro-animations ────────────────────────────── */
.rule-card {
    transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.rule-card:hover .rule-card__icon {
    animation: bounce-subtle 0.5s ease;
}


/* ── Shake (for errors) ────────────────────────────────── */
@keyframes shake {
    0%, 100% { transform: translateX(0); }
    10%, 30%, 50%, 70%, 90% { transform: translateX(-4px); }
    20%, 40%, 60%, 80% { transform: translateX(4px); }
}

.shake {
    animation: shake 0.5s ease;
}


/* ── Prize Reveal ──────────────────────────────────────── */
@keyframes prize-reveal {
    0% {
        opacity: 0;
        transform: scale(0.5) rotateY(180deg);
    }
    60% {
        transform: scale(1.05) rotateY(0deg);
    }
    100% {
        opacity: 1;
        transform: scale(1) rotateY(0deg);
    }
}

.modal__prize--reveal {
    animation: prize-reveal 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
}
