@keyframes wiggle{0%,to{transform:rotate(0deg)}15%{transform:rotate(-12deg)}30%{transform:rotate(10deg)}45%{transform:rotate(-8deg)}60%{transform:rotate(6deg)}75%{transform:rotate(-3deg)}90%{transform:rotate(2deg)}}.animate-wiggle{animation:wiggle .6s ease-in-out}@keyframes rainbow-shift{0%{filter:hue-rotate(0deg)}50%{filter:hue-rotate(180deg)}to{filter:hue-rotate(1turn)}}.rainbow-wave{animation:rainbow-shift 2s ease-in-out infinite}@keyframes shv-slide-in{0%{opacity:0;transform:translateX(-8px)}to{opacity:1;transform:translateX(0)}}.shv-row{animation:shv-slide-in .35s cubic-bezier(.25,1,.5,1) both}@keyframes shv-fade-up{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.shv-fade-up{animation:shv-fade-up .4s ease-out both}@keyframes shv-selected-pulse{0%,to{box-shadow:0 0 0 0 transparent}50%{box-shadow:inset 0 0 0 1px hsl(var(--foreground)/.08)}}.shv-selected{animation:shv-selected-pulse 2s ease-in-out .5s infinite}@keyframes shv-resume-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}.shv-resume{animation:shv-resume-in .3s cubic-bezier(.34,1.56,.64,1) .4s both}@keyframes shv-fill{0%{width:0}to{width:var(--progress,50%)}}.shv-progress{animation:shv-fill .8s cubic-bezier(.25,1,.5,1) both}@keyframes shv-typing-blink{0%,to{opacity:1}50%{opacity:.3}}.shv-typing{animation:shv-typing-blink .8s ease-in-out infinite}@keyframes shv-pulse-dot{0%,to{opacity:.6;transform:scale(1)}50%{opacity:1;transform:scale(1.3)}}.shv-pulse-dot{animation:shv-pulse-dot 2s ease-in-out infinite}@keyframes shv-check-pop{0%{opacity:0;transform:scale(0)}to{opacity:1;transform:scale(1)}}.shv-check{animation:shv-check-pop .3s cubic-bezier(.34,1.56,.64,1) both}@keyframes shv-char-reveal{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:translateY(0)}}.shv-type-char{animation:shv-char-reveal .15s ease-out both}