@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes success-ripple{0%{transform:scale(.8);opacity:0}40%{transform:scale(1.05);opacity:1}60%{transform:scale(.98)}to{transform:scale(1)}}@keyframes success-ring{0%{opacity:.4;transform:scale(.8)}to{opacity:0;transform:scale(1.8)}}@keyframes error-x{0%{transform:scale(.3);opacity:0}50%{transform:scale(1.2);opacity:.8}to{transform:scale(1);opacity:1}}.animate-spin{animation:spin 1.2s linear infinite;transform-origin:center;display:inline-block}.animate-success{animation:success-ripple .8s cubic-bezier(.22,.61,.36,1) forwards;border-radius:50%}.animate-error{animation:error-x .3s cubic-bezier(.175,.885,.32,1.275) forwards}