.ripple{position:relative;overflow:hidden}.ripple::after{content:"";position:absolute;left:50%;top:50%;width:100%;aspect-ratio:1 / 1;background:rgba(0,0,0,0.1);border-radius:50%;transform:translate(-50%, -50%) scale(0);animation:ripple 1s ease-out infinite}@keyframes ripple{0%{transform:translate(-50%, -50%) scale(0);opacity:1}100%{transform:translate(-50%, -50%) scale(2);opacity:0}}.shine{position:relative;overflow:hidden}.shine::before{content:"";position:absolute;top:0;left:-75%;width:50%;height:100%;filter:blur(4px);background:linear-gradient(120deg, transparent, rgba(255,255,255,0.4), transparent);animation:shine 1s infinite}@keyframes shine{100%{left:125%}}.pulse{animation:pulse 1.2s infinite}@keyframes pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.08)}}.shake{animation:shake 0.4s infinite}@keyframes shake{0%,100%{transform:translateX(0)}20%{transform:translateX(-4px)}40%{transform:translateX(4px)}60%{transform:translateX(-4px)}80%{transform:translateX(4px)}}
