/* animations.css - 全局动画效果 */
@keyframes fadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}
@keyframes fadeInUp {
    from { opacity: 0; transform: translateY(20px); }
    to { opacity: 1; transform: translateY(0); }
}
@keyframes slideInRight {
    from { opacity: 0; transform: translateX(30px); }
    to { opacity: 1; transform: translateX(0); }
}
@keyframes scaleIn {
    from { transform: scale(0.8); opacity: 0; }
    to { transform: scale(1); opacity: 1; }
}
@keyframes glowPulse {
    0%, 100% { box-shadow: 0 0 5px rgba(240,192,64,0.3); }
    50% { box-shadow: 0 0 20px rgba(240,192,64,0.6); }
}
@keyframes shimmer {
    0% { background-position: -200% center; }
    100% { background-position: 200% center; }
}
@keyframes float {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-8px); }
}

.animate-fade-in { animation: fadeIn 0.4s ease forwards; }
.animate-fade-in-up { animation: fadeInUp 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
.animate-scale-in { animation: scaleIn 0.4s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
.animate-glow { animation: glowPulse 2s ease infinite; }
.animate-float { animation: float 3s ease infinite; }

/* ── 场景切换过渡遮罩 ── */
.scene-transition-overlay {
    position: fixed; inset: 0; z-index: 8000;
    background: rgba(10,14,23,0.85);
    backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);
    display: flex; align-items: center; justify-content: center;
    opacity: 0; pointer-events: none;
    transition: opacity 0.25s ease;
}
.scene-transition-overlay--active { opacity: 1; pointer-events: auto; }
.scene-transition-overlay--out { opacity: 0; pointer-events: none; }

.scene-transition-spinner {
    width: 28px; height: 28px;
    border: 3px solid rgba(78,168,222,0.15);
    border-top-color: #4ea8de;
    border-radius: 50%;
    animation: scene-spin 0.7s linear infinite;
}
@keyframes scene-spin { to { transform: rotate(360deg); } }
