@keyframes confetti-fall{0%{transform:translateY(-100vh) rotate(0deg);opacity:1}to{transform:translateY(100vh) rotate(2turn);opacity:0}}.perspective-1000{perspective:1000px}.backface-hidden{backface-visibility:hidden}.rotate-y-180{transform:rotateY(180deg)}.no-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@keyframes pulse{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}.pulse-animation{animation:pulse .5s ease-in-out}@keyframes progress-fill{0%{width:0}to{width:var(--progress-width)}}.progress-animated{animation:progress-fill .5s ease-out}.card-hover{transition:all .3s ease}.card-hover:hover{transform:translateY(-2px);box-shadow:0 8px 25px rgba(0,0,0,.15)}@keyframes button-press{0%{transform:scale(1)}50%{transform:scale(.95)}to{transform:scale(1)}}.button-press{animation:button-press .1s ease-in-out}@keyframes success-bounce{0%,20%,50%,80%,to{transform:translateY(0)}40%{transform:translateY(-10px)}60%{transform:translateY(-5px)}}.success-bounce{animation:success-bounce .6s ease-in-out}@keyframes error-shake{0%,to{transform:translateX(0)}10%,30%,50%,70%,90%{transform:translateX(-5px)}20%,40%,60%,80%{transform:translateX(5px)}}.error-shake{animation:error-shake .5s ease-in-out}