@keyframes shake{0%,to{transform:translateX(0)}10%,30%,50%,70%,90%{transform:translateX(-3px)}20%,40%,60%,80%{transform:translateX(3px)}}.animate-shake{animation:shake .5s ease-in-out}@keyframes bounce{0%,to{transform:translateY(-25%);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:translateY(0);animation-timing-function:cubic-bezier(0,0,.2,1)}}.animate-bounce{animation:bounce 1s infinite}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.error-field{animation:shake .5s ease-in-out}input:focus,select:focus,textarea:focus{transition:all .2s ease-in-out}form.loading{position:relative}form.loading:after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(255,255,255,.7);z-index:10;pointer-events:none}button{transition:all .2s ease-in-out}button:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 10px 20px rgba(0,0,0,.1)}button:active:not(:disabled){transform:translateY(0)}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.success-screen{animation:fadeInUp .5s ease-out}@media (max-width:640px){form{padding:0}button{font-size:16px}}:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}@media print{form{display:none}}