@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.animate-fadeIn{animation:.5s ease-out forwards fadeIn}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.animate-pulse{animation:2s cubic-bezier(.4,0,.6,1) infinite pulse}@keyframes bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.animate-bounce{animation:1s ease-in-out infinite bounce}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.animate-slideUp{animation:.3s ease-out forwards slideUp}@keyframes checkmark{0%{stroke-dashoffset:100px}to{stroke-dashoffset:0}}.animate-checkmark{stroke-dasharray:100;animation:.5s ease-out forwards checkmark}.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 0%,#e0e0e0 50%,#f0f0f0 100%) 0 0/1000px 100%;animation:2s infinite shimmer}@keyframes confetti-fall{0%{opacity:1;transform:translateY(-100vh)rotate(0)}to{opacity:0;transform:translateY(100vh)rotate(720deg)}}.confetti{background:#4f46e5;width:10px;height:10px;animation:3s linear forwards confetti-fall;position:fixed}@media (max-width:768px){.animate-fadeIn{animation-duration:.3s}.animate-slideUp{animation-duration:.2s}}
