.vibrate{animation:shake .3s cubic-bezier(.36,.07,.19,.97) both}@keyframes shake{0%{transform:translate(0) rotate(0deg)}20%{transform:translate(-4px) rotate(-1deg)}40%{transform:translate(4px) rotate(1deg)}60%{transform:translate(-3px) rotate(-.5deg)}80%{transform:translate(3px) rotate(.5deg)}to{transform:translate(0) rotate(0deg)}}.block-shake{animation:blockWobble .3s ease-in-out}@keyframes blockWobble{0%{transform:translateX(0) rotate(0deg)}25%{transform:translateX(-3px) rotate(-2deg)}75%{transform:translateX(3px) rotate(2deg)}to{transform:translateX(0) rotate(0deg)}}.game-container{position:relative;display:inline-block}.miss-flash{animation:redFlash .3s ease-out}@keyframes redFlash{0%{box-shadow:0 0 0 0 rgba(255,0,0,0)}50%{box-shadow:0 0 20px 10px rgba(255,0,0,.5)}to{box-shadow:0 0 0 0 rgba(255,0,0,0)}}.grid-bg{position:absolute;inset:0;z-index:0;pointer-events:none;background-image:linear-gradient(rgba(255,255,255,.06) 1px,transparent 0),linear-gradient(90deg,rgba(255,255,255,.06) 1px,transparent 0);background-size:40px 40px;mask-image:radial-gradient(circle at center,black 60%,transparent 100%)}.spinner{border:4px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;width:40px;height:40px;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}