/* ============================================
   NovelCraft - 高性能动画 (GPU 加速)
   ============================================ */

@keyframes fadeIn { from { opacity:0; } to { opacity:1; } }
@keyframes fadeInUp { from { opacity:0; transform:translateY(20px); } to { opacity:1; transform:translateY(0); } }
@keyframes messageIn { from { opacity:0; transform:translateY(12px) scale(0.96); } to { opacity:1; transform:translateY(0) scale(1); } }
@keyframes slideDown { from { opacity:0; transform:translateY(-8px); } to { opacity:1; transform:translateY(0); } }
@keyframes typingBounce { 0%,60%,100% { transform:translateY(0); opacity:0.4; } 30% { transform:translateY(-6px); opacity:1; } }
@keyframes floatBounce { 0%,100% { transform:translateY(0); } 50% { transform:translateY(-8px); } }
@keyframes toastIn { from { opacity:0; transform:translateY(-20px) scale(0.9); } to { opacity:1; transform:translateY(0) scale(1); } }
@keyframes toastOut { from { opacity:1; transform:translateY(0) scale(1); } to { opacity:0; transform:translateY(-16px) scale(0.9); } }
@keyframes shimmer { 0% { background-position:-200% 0; } 100% { background-position:200% 0; } }
@keyframes spin { from { transform:rotate(0deg); } to { transform:rotate(360deg); } }
@keyframes pulseScale { 0%,100% { transform:scale(1); } 50% { transform:scale(1.06); } }
@keyframes slideInRight { from { opacity:0; transform:translateX(20px); } to { opacity:1; transform:translateX(0); } }
@keyframes popIn { from { opacity:0; transform:scale(0.8); } to { opacity:1; transform:scale(1); } }

.app-shell { animation:fadeIn var(--duration-slow) var(--ease-smooth); }

.sidebar.open .sidebar-inner > * {
    animation:fadeInUp var(--duration-normal) var(--ease-ios) both;
    will-change: transform, opacity;
}
.sidebar.open .sidebar-inner > *:nth-child(1) { animation-delay:0ms; }
.sidebar.open .sidebar-inner > *:nth-child(2) { animation-delay:50ms; }
.sidebar.open .sidebar-inner > *:nth-child(3) { animation-delay:100ms; }
.sidebar.open .sidebar-inner > *:nth-child(4) { animation-delay:150ms; }
.sidebar.open .sidebar-inner > *:nth-child(5) { animation-delay:200ms; }

.input-field-wrapper::before {
    content:''; position:absolute; inset:-1px;
    border-radius:calc(var(--radius-lg) + 1px);
    background:var(--accent-gradient);
    opacity:0; z-index:-1; transition:opacity var(--duration-normal);
    will-change: opacity;
}
.input-field-wrapper:focus-within::before { opacity:0.2; }

#search-toggle.active { color:var(--accent); background:var(--accent-light); }
#search-toggle.active i { animation:spin 3s linear infinite; }

@media (prefers-reduced-motion:reduce) {
    *,*::before,*::after { animation-duration:0.01ms !important; transition-duration:0.01ms !important; }
}