@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes fadeUp { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeDown { from { opacity: 0; transform: translateY(-5px); } to { opacity: 1; transform: translateY(0); } } @keyframes scaleIn { from { opacity: 0; transform: scale(0.97); } to { opacity: 1; transform: scale(1); } } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.35; } } @keyframes shimmer { from { background-position: -200% 0; } to { background-position: 200% 0; } } .anim-fade-in { animation: fadeIn 0.14s ease both; } .anim-fade-up { animation: fadeUp 0.18s ease both; } .anim-fade-down { animation: fadeDown 0.18s ease both; } .anim-scale-in { animation: scaleIn 0.14s ease both; } .anim-pulse { animation: pulse 1.6s ease infinite; } .anim-spin { animation: spin 0.7s linear infinite; } .skeleton { background: linear-gradient(90deg, var(--bg-raised) 25%, var(--bg-overlay) 50%, var(--bg-raised) 75%); background-size: 200% 100%; animation: shimmer 1.4s ease infinite; border-radius: var(--radius-sm); }