@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}@keyframes wave{0%,to{transform:scaleY(1)}50%{transform:scaleY(.3)}}@keyframes fadeInOut{0%,to{opacity:.3}50%{opacity:1}}@keyframes slideIn{0%{transform:translate(-100%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes slideOut{0%{transform:translate(0);opacity:1}to{transform:translate(100%);opacity:0}}.animate-spin-custom{animation:spin 1s linear infinite}.animate-pulse-custom{animation:pulse 1.5s ease-in-out infinite}.animate-bounce-custom{animation:bounce .6s ease-in-out infinite}.animate-wave-custom{animation:wave 1s ease-in-out infinite}.animate-fade-in-out{animation:fadeInOut 2s ease-in-out infinite}.animate-slide-in{animation:slideIn .5s ease-out}.animate-slide-out{animation:slideOut .5s ease-in}@keyframes gradient-shift{0%{background-position:0% 50%}50%{background-position:100% 50%}to{background-position:0% 50%}}.animate-gradient{background:linear-gradient(-45deg,#3b82f6,#1d4ed8,#1e40af,#1e3a8a);background-size:400% 400%;animation:gradient-shift 3s ease infinite}@keyframes glow{0%,to{box-shadow:0 0 5px #3b82f680}50%{box-shadow:0 0 20px #3b82f6cc,0 0 30px #3b82f699}}.animate-glow{animation:glow 2s ease-in-out infinite}@keyframes morph{0%,to{border-radius:50%}25%{border-radius:25% 75% 75% 25%}50%{border-radius:75% 25% 25% 75%}75%{border-radius:25% 75%}}.animate-morph{animation:morph 2s ease-in-out infinite}@media (max-width: 640px){.loader-container{padding:1rem}.loader-text{font-size:.875rem}}@media (prefers-reduced-motion: reduce){.animate-spin-custom,.animate-pulse-custom,.animate-bounce-custom,.animate-wave-custom,.animate-fade-in-out,.animate-gradient,.animate-glow,.animate-morph{animation:none}}
