@keyframes shimmer{0%{transform:translateX(-100%)}to{transform:translateX(100%)}}@keyframes breathing{0%,to{transform:scale(1)}50%{transform:scale(var(--breathing-scale,1.05))}}@keyframes ripple{0%{width:0;height:0;opacity:.5;transform:translate(-50%,-50%)}to{width:200px;height:200px;opacity:0;transform:translate(-50%,-50%)}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(calc(-1 * var(--float-distance, 10px)))}}@keyframes shake{0%,to{transform:translateX(0)}10%,30%,50%,70%,90%{transform:translateX(-5px)}20%,40%,60%,80%{transform:translateX(5px)}}@keyframes shake-light{0%,to{transform:translateX(0)}10%,30%,50%,70%,90%{transform:translateX(-2px)}20%,40%,60%,80%{transform:translateX(2px)}}@keyframes shake-strong{0%,to{transform:translateX(0)}10%,30%,50%,70%,90%{transform:translateX(-10px)}20%,40%,60%,80%{transform:translateX(10px)}}@keyframes progress-stripe{0%{background-position:0 0}to{background-position:2rem 0}}@keyframes typing{0%,60%,to{transform:translateY(0);opacity:.4}30%{transform:translateY(-8px);opacity:1}}.animate-shimmer{animation:shimmer 2s infinite}.animate-breathing{animation:breathing 3s ease-in-out infinite}.animate-ripple{animation:ripple .6s ease-out forwards}.animate-float{animation:float 3s ease-in-out infinite}.animate-shake{animation:shake .5s ease-in-out}.animate-shake-light{animation:shake-light .5s ease-in-out}.animate-shake-strong{animation:shake-strong .5s ease-in-out}.animate-progress-stripe{animation:progress-stripe 1s linear infinite}.animate-typing{animation:typing 1.4s infinite}