@keyframes gradientBG{0%{background-position:0% 50%;background:var(--gradient-1)}33%{background-position:100% 50%;background:var(--gradient-2)}66%{background-position:50% 100%;background:var(--gradient-3)}100%{background-position:0% 50%;background:var(--gradient-1)}}body{animation:gradientBG 20s ease infinite}.floating-heart,.floating-coin{position:fixed;font-size:24px;animation:float 6s ease-in-out infinite;opacity:.4;z-index:0;pointer-events:none}.floating-coin{animation:float 5s ease-in-out infinite reverse}@keyframes float{0%,100%{transform:translateY(0) rotate(0deg)}50%{transform:translateY(-30px) rotate(10deg)}}.sparkle{position:absolute;width:4px;height:4px;background:#fff;border-radius:50%;animation:sparkle 1.5s infinite;pointer-events:none}@keyframes sparkle{0%,100%{opacity:0;transform:scale(0)}50%{opacity:1;transform:scale(1)}}.xp-fill::after{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(90deg,transparent,rgb(255 255 255 / .4),transparent);animation:shimmer 2s infinite}@keyframes shimmer{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}.modal{animation:modalFadeIn 0.3s ease}@keyframes modalFadeIn{from{opacity:0;backdrop-filter:blur(0)}to{opacity:1;backdrop-filter:blur(5px)}}.modal-content{animation:modalSlideIn 0.4s cubic-bezier(.68,-.55,.265,1.55)}@keyframes modalSlideIn{from{transform:translateY(-50px) scale(.9);opacity:0}to{transform:translateY(0) scale(1);opacity:1}}.modal-content::before{content:'';position:absolute;top:0;left:0;right:0;height:5px;background:linear-gradient(90deg,var(--primary-pink),var(--gold),var(--primary-pink));background-size:200% 100%;animation:shimmerLine 2s linear infinite}@keyframes shimmerLine{0%{background-position:-200% 0}100%{background-position:200% 0}}.achievement-card.unlocked::before{content:'🏆';position:absolute;top:10px;right:10px;font-size:1.2rem;animation:bounce 2s infinite}@keyframes bounce{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}#bonusAlert{animation:slideDown 0.5s ease forwards,pulse 1s 0.5s infinite alternate}@keyframes slideDown{from{top:-100px;opacity:0}to{top:30px;opacity:1}}@keyframes pulse{from{transform:translateX(-50%) scale(1)}to{transform:translateX(-50%) scale(1.05)}}#gameOver{animation:shake 0.5s}@keyframes shake{0%,100%{transform:translateX(0)}10%,30%,50%,70%,90%{transform:translateX(-5px)}20%,40%,60%,80%{transform:translateX(5px)}}.loading-spinner{animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.btn{position:relative;overflow:hidden}.btn::after{content:'';position:absolute;top:50%;left:50%;width:0;height:0;border-radius:50%;background:rgb(255 255 255 / .3);transform:translate(-50%,-50%);transition:width 0.3s,height 0.3s}.btn:active::after{width:200px;height:200px}@keyframes heartPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.1)}}@keyframes trailFade{from{opacity:.3}to{opacity:0}}canvas{transition:box-shadow 0.3s ease}canvas:active{transform:scale(.99)}.touch-btn{transition:transform 0.1s,box-shadow 0.1s}.reward-card:hover{transform:translateY(-5px) scale(1.02);box-shadow:var(--shadow-heavy)}.achievement-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-heavy)}@keyframes floatUp{0%{transform:translateY(0);opacity:1}100%{transform:translateY(-30px);opacity:0}}@keyframes particleFade{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.5)}}