@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes slide-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes slide-down{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}@keyframes slide-left{0%{opacity:0;transform:translateX(20px)}to{opacity:1;transform:translateX(0)}}@keyframes slide-right{0%{opacity:0;transform:translateX(-20px)}to{opacity:1;transform:translateX(0)}}@keyframes scale-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes pulse-glow{0%,to{box-shadow:0 0 20px rgba(99,68,247,.2)}50%{box-shadow:0 0 40px rgba(99,68,247,.4)}}@keyframes data-pulse{0%,to{opacity:.3}50%{opacity:.8}}@keyframes progress-fill{0%{width:0}to{width:var(--progress-width,100%)}}@keyframes skeleton-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes rotate-slow{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes bounce-subtle{0%,to{transform:translateY(0)}50%{transform:translateY(-4px)}}.animate-fade-in{animation:fade-in .4s ease-out}.animate-slide-up{animation:slide-up .5s ease-out}.animate-slide-down{animation:slide-down .5s ease-out}.animate-slide-left{animation:slide-left .5s ease-out}.animate-slide-right{animation:slide-right .5s ease-out}.animate-scale-in{animation:scale-in .3s ease-out}.animate-pulse-glow{animation:pulse-glow 3s ease-in-out infinite}.animate-data-pulse{animation:data-pulse 2s ease-in-out infinite}.animate-rotate-slow{animation:rotate-slow 20s linear infinite}.animate-bounce-subtle{animation:bounce-subtle 2s ease-in-out infinite}.skeleton{background:linear-gradient(90deg,rgba(255,255,255,.04),rgba(255,255,255,.08) 50%,rgba(255,255,255,.04));background-size:200% 100%;animation:skeleton-shimmer 1.5s ease-in-out infinite;border-radius:8px}