@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.animate-fadeIn{animation:fadeIn .5s ease-out forwards}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.animate-bounce{animation:bounce 1s ease-in-out infinite}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.animate-slideUp{animation:slideUp .3s ease-out forwards}@keyframes checkmark{0%{stroke-dashoffset:100}to{stroke-dashoffset:0}}.animate-checkmark{stroke-dasharray:100;animation:checkmark .5s ease-out forwards}.progress-fill-animation{transition:width .5s cubic-bezier(.4,0,.2,1)}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.skeleton-shimmer{background:linear-gradient(90deg,#f0f0f0,#e0e0e0 50%,#f0f0f0);background-size:1000px 100%;animation:shimmer 2s infinite}@keyframes confetti-fall{0%{transform:translateY(-100vh) rotate(0deg);opacity:1}to{transform:translateY(100vh) rotate(2turn);opacity:0}}.confetti{position:fixed;width:10px;height:10px;background:#4F46E5;animation:confetti-fall 3s linear forwards}@media (max-width:768px){.animate-fadeIn{animation-duration:.3s}.animate-slideUp{animation-duration:.2s}}