/* ===== Animation Keyframes ===== */
@keyframes gradientShift {
    0% { background-position: 0% 50%; }
    50% { background-position: 100% 50%; }
    100% { background-position: 0% 50%; }
}

@keyframes raysPulse {
    0%, 100% { opacity: 0.35; }
    50% { opacity: 0.6; }
}

@keyframes floatUp {
    0% { transform: translateY(0) translateX(0); opacity: 0; }
    10% { opacity: 0.9; }
    90% { opacity: 0.6; }
    100% { transform: translateY(-110vh) translateX(var(--drift, 20px)); opacity: 0; }
}

@keyframes pulseGlow {
    0%, 100% { box-shadow: 0 0 0 0 rgba(201, 168, 76, 0.5); }
    50% { box-shadow: 0 0 0 10px rgba(201, 168, 76, 0); }
}

@keyframes fadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}

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

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

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

@keyframes slideInLeft {
    from { transform: translateX(-100%); }
    to { transform: translateX(0); }
}

@keyframes pulse {
    0%, 100% { transform: scale(1); }
    50% { transform: scale(1.05); }
}

@keyframes glow {
    0%, 100% { text-shadow: 0 0 8px rgba(201, 168, 76, 0.5); }
    50% { text-shadow: 0 0 20px rgba(201, 168, 76, 0.9); }
}

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

@keyframes shimmer {
    0% { background-position: -200% 0; }
    100% { background-position: 200% 0; }
}

@keyframes confettiFall {
    0% { transform: translateY(-20px) rotate(0deg); opacity: 1; }
    100% { transform: translateY(100vh) rotate(720deg); opacity: 0; }
}

@keyframes typingDot {
    0%, 60%, 100% { opacity: 0.3; transform: translateY(0); }
    30% { opacity: 1; transform: translateY(-4px); }
}

@keyframes flip {
    0% { transform: rotateY(0); }
    50% { transform: rotateY(90deg); }
    100% { transform: rotateY(0); }
}

@keyframes spin {
    to { transform: rotate(360deg); }
}

@keyframes progressFill {
    from { stroke-dashoffset: var(--circumference); }
    to { stroke-dashoffset: var(--offset); }
}

/* ===== Animation utility classes ===== */
.fade-in { animation: fadeIn 0.6s ease both; }
.fade-in-up { animation: fadeInUp 0.7s ease both; }
.slide-up { animation: slideUp 0.5s ease both; }
.slide-down { animation: slideDown 0.4s ease both; }
.float-anim { animation: float 4s ease-in-out infinite; }
.pulse-anim { animation: pulse 2s ease-in-out infinite; }
.glow-text { animation: glow 2.5s ease-in-out infinite; }

.delay-1 { animation-delay: 0.1s; }
.delay-2 { animation-delay: 0.2s; }
.delay-3 { animation-delay: 0.3s; }
.delay-4 { animation-delay: 0.4s; }

.spinner {
    width: 44px; height: 44px;
    border: 4px solid var(--glass-border);
    border-top-color: var(--gold);
    border-radius: 50%;
    animation: spin 0.9s linear infinite;
    margin: 0 auto;
}

.shimmer-bg {
    background: linear-gradient(90deg, var(--glass-bg) 25%, var(--glass-border) 50%, var(--glass-bg) 75%);
    background-size: 200% 100%;
    animation: shimmer 1.5s infinite;
}

.typing-dots span {
    display: inline-block;
    width: 8px; height: 8px;
    border-radius: 50%;
    background: var(--gold);
    margin: 0 3px;
    animation: typingDot 1.4s infinite ease-in-out;
}
.typing-dots span:nth-child(2) { animation-delay: 0.2s; }
.typing-dots span:nth-child(3) { animation-delay: 0.4s; }

.confetti-piece {
    position: fixed;
    top: -20px;
    width: 10px; height: 10px;
    z-index: 9999;
    animation: confettiFall 3s linear forwards;
    pointer-events: none;
}
