@keyframes shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-10px)}20%,40%,60%,80%{transform:translate(10px)}}@keyframes key-collect{0%{opacity:0;transform:scale(0)rotate(0)}50%{opacity:1;transform:scale(1.5)rotate(180deg)}to{opacity:0;transform:scale(1)rotate(360deg)translateY(-50px)}}@keyframes chest-open{0%{transform-origin:bottom;transform:rotateX(0)}to{transform-origin:bottom;transform:rotateX(-45deg)}}@keyframes glow-pulse{0%,to{filter:drop-shadow(0 0 5px #fbbf2480)}50%{filter:drop-shadow(0 0 20px #fbbf24)}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-20px)}}@keyframes spin-slow{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}@keyframes bounce-in{0%{opacity:0;transform:scale(0)}50%{transform:scale(1.2)}to{opacity:1;transform:scale(1)}}@keyframes particle-burst{0%{opacity:1;transform:translate(0)scale(1)}to{transform:translate(var(--tx),var(--ty))scale(0);opacity:0}}.animate-shake{animation:.5s ease-in-out shake}.animate-key-collect{animation:.8s ease-out forwards key-collect}.animate-chest-open{animation:1s ease-out forwards chest-open}.animate-glow-pulse{animation:2s ease-in-out infinite glow-pulse}.animate-float{animation:3s ease-in-out infinite float}.animate-spin-slow{animation:8s linear infinite spin-slow}.animate-shimmer{background:linear-gradient(90deg,#0000,#ffffff4d,#0000) 0 0/1000px 100%;animation:2s infinite shimmer}.animate-bounce-in{animation:.5s cubic-bezier(.68,-.55,.265,1.55) bounce-in}.particle{pointer-events:none;animation:.8s ease-out forwards particle-burst;position:absolute}
