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