{"project":{"id":"Fv88I9J","userId":"davidyarham@gmail.com","username":null,"userPicture":null,"name":"Bounce","thumbnail":"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","visible":true,"contributors":"","githubRepo":null,"forkedFrom":null,"tags":"","files":{"folder":"","files":[{"name":"index.html","content":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>Untitled</title>\n  <link rel=\"stylesheet\" href=\"style.css\">\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Chakra+Petch:wght@400;600;700&family=Orbitron:wght@700;900&display=swap\" rel=\"stylesheet\">\n<script src=\"https://unpkg.com/lucide@latest\"></script>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n</head>\n<body>\n<div class=\"game\">\n\t<canvas id=\"gameCanvas\"></canvas>\n\t<div class=\"game__ui\">\n\t\t<div class=\"game__score\" id=\"score\">0</div>\n\t\t<div class=\"game__height\" id=\"height\">Height: 0m</div>\n\t</div>\n\t<div class=\"game__overlay\" id=\"startScreen\">\n\t\t<h1 class=\"game__title\">SKY<br>BOUNCE</h1>\n\t\t<p class=\"game__subtitle\">Bounce to the top. Don't fall.</p>\n\t\t<button class=\"game__btn\" id=\"startBtn\">TAP TO PLAY</button>\n\t</div>\n\t<div class=\"game__overlay game__overlay--hidden\" id=\"gameOverScreen\">\n\t\t<h2 class=\"game__over-title\">GAME OVER</h2>\n\t\t<p class=\"game__final-score\" id=\"finalScore\">0m</p>\n\t\t<p class=\"game__best\" id=\"bestScore\">Best: 0m</p>\n\t\t<button class=\"game__btn\" id=\"restartBtn\">PLAY AGAIN</button>\n\t</div>\n\t<div class=\"game__controls\" id=\"controls\">\n\t\t<div class=\"game__control game__control--left\" id=\"leftBtn\">\n\t\t\t<i data-lucide=\"chevron-left\"></i>\n\t\t</div>\n\t\t<div class=\"game__control game__control--right\" id=\"rightBtn\">\n\t\t\t<i data-lucide=\"chevron-right\"></i>\n\t\t</div>\n\t</div>\n</div>\n  <script type=\"module\" src=\"main.js\"></script>\n</body>\n</html>"},{"name":"main.js","content":"// Initialize Lucide icons\nlucide.createIcons();\n\nconst canvas = document.getElementById('gameCanvas');\nconst ctx = canvas.getContext('2d');\n\n// Screens\nconst startScreen = document.getElementById('startScreen');\nconst gameOverScreen = document.getElementById('gameOverScreen');\nconst startBtn = document.getElementById('startBtn');\nconst restartBtn = document.getElementById('restartBtn');\nconst scoreEl = document.getElementById('score');\nconst heightEl = document.getElementById('height');\nconst finalScoreEl = document.getElementById('finalScore');\nconst bestScoreEl = document.getElementById('bestScore');\n\n// Controls\nconst leftBtn = document.getElementById('leftBtn');\nconst rightBtn = document.getElementById('rightBtn');\n\nlet W, H, dpr;\nlet gameRunning = false;\nlet bestHeight = parseInt(localStorage.getItem('skyBounce_best') || '0');\n\nfunction resize() {\n\tconst container = canvas.parentElement;\n\tdpr = window.devicePixelRatio || 1;\n\tW = container.clientWidth;\n\tH = container.clientHeight;\n\tcanvas.width = W * dpr;\n\tcanvas.height = H * dpr;\n\tcanvas.style.width = W + 'px';\n\tcanvas.style.height = H + 'px';\n\tctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n}\nwindow.addEventListener('resize', resize);\nresize();\n\n// Game state\nlet player, platforms, camera, maxHeight, particles, stars;\n\nconst GRAVITY = 0.3;\nconst JUMP_FORCE = -9.5;\nconst MOVE_SPEED = 6;\nconst PLATFORM_COUNT = 15;\n\nclass Star {\n\tconstructor() {\n\t\tthis.x = Math.random() * W;\n\t\tthis.y = Math.random() * H;\n\t\tthis.size = Math.random() * 1.5 + 0.5;\n\t\tthis.alpha = Math.random() * 0.8 + 0.2;\n\t\tthis.speed = Math.random() * 0.5 + 0.1;\n\t\tthis.parallax = Math.random() * 0.3 + 0.1;\n\t}\n}\n\nclass Particle {\n\tconstructor(x, y, color) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.vx = (Math.random() - 0.5) * 6;\n\t\tthis.vy = (Math.random() - 0.5) * 6 - 2;\n\t\tthis.life = 1;\n\t\tthis.decay = Math.random() * 0.03 + 0.02;\n\t\tthis.size = Math.random() * 4 + 2;\n\t\tthis.color = color;\n\t}\n\tupdate() {\n\t\tthis.x += this.vx;\n\t\tthis.y += this.vy;\n\t\tthis.vy += 0.1;\n\t\tthis.life -= this.decay;\n\t}\n\tdraw() {\n\t\tctx.globalAlpha = this.life;\n\t\tctx.fillStyle = this.color;\n\t\tctx.fillRect(this.x, this.y - camera, this.size, this.size);\n\t\tctx.globalAlpha = 1;\n\t}\n}\n\nclass Platform {\n\tconstructor(x, y, w, type) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.w = w;\n\t\tthis.h = 12;\n\t\tthis.type = type || 'normal'; // normal, moving, breakable, boost\n\t\tthis.broken = false;\n\t\tthis.moveDir = 1;\n\t\tthis.moveSpeed = Math.random() * 1.5 + 0.8;\n\t\tthis.originalX = x;\n\t\tthis.glowPhase = Math.random() * Math.PI * 2;\n\t}\n\n\tupdate() {\n\t\tif (this.type === 'moving') {\n\t\t\tthis.x += this.moveSpeed * this.moveDir;\n\t\t\tif (this.x + this.w > W || this.x < 0) {\n\t\t\t\tthis.moveDir *= -1;\n\t\t\t}\n\t\t}\n\t\tthis.glowPhase += 0.04;\n\t}\n\n\tdraw() {\n\t\tif (this.broken) return;\n\t\tconst screenY = this.y - camera;\n\t\tif (screenY > H + 20 || screenY < -20) return;\n\n\t\tconst glow = Math.sin(this.glowPhase) * 0.3 + 0.7;\n\n\t\tif (this.type === 'normal') {\n\t\t\tctx.fillStyle = `rgba(0, 255, 200, ${0.8 * glow})`;\n\t\t\tctx.shadowColor = 'rgba(0, 255, 200, 0.6)';\n\t\t\tctx.shadowBlur = 12;\n\t\t} else if (this.type === 'moving') {\n\t\t\tctx.fillStyle = `rgba(100, 180, 255, ${0.8 * glow})`;\n\t\t\tctx.shadowColor = 'rgba(100, 180, 255, 0.6)';\n\t\t\tctx.shadowBlur = 12;\n\t\t} else if (this.type === 'breakable') {\n\t\t\tctx.fillStyle = `rgba(255, 200, 60, ${0.6 * glow})`;\n\t\t\tctx.shadowColor = 'rgba(255, 200, 60, 0.4)';\n\t\t\tctx.shadowBlur = 8;\n\t\t} else if (this.type === 'boost') {\n\t\t\tctx.fillStyle = `rgba(255, 62, 122, ${0.9 * glow})`;\n\t\t\tctx.shadowColor = 'rgba(255, 62, 122, 0.7)';\n\t\t\tctx.shadowBlur = 16;\n\t\t}\n\n\t\t// Draw platform with rounded ends\n\t\tconst r = this.h / 2;\n\t\tctx.beginPath();\n\t\tctx.roundRect(this.x, screenY, this.w, this.h, r);\n\t\tctx.fill();\n\n\t\tctx.shadowBlur = 0;\n\t}\n}\n\nfunction initGame() {\n\tplayer = {\n\t\tx: W / 2 - 15,\n\t\ty: H - 80,\n\t\tw: 30,\n\t\th: 30,\n\t\tvx: 0,\n\t\tvy: 0,\n\t\tonGround: false,\n\t\tfacing: 1\n\t};\n\n\tcamera = 0;\n\tmaxHeight = 0;\n\tparticles = [];\n\tplatforms = [];\n\n\t// Create stars\n\tstars = [];\n\tfor (let i = 0; i < 60; i++) {\n\t\tstars.push(new Star());\n\t}\n\n\t// Base platform\n\tplatforms.push(new Platform(W / 2 - 60, H - 40, 120, 'normal'));\n\n\t// Generate initial platforms\n\tfor (let i = 1; i < PLATFORM_COUNT; i++) {\n\t\tgeneratePlatform(H - 40 - i * (H / PLATFORM_COUNT));\n\t}\n}\n\nfunction generatePlatform(y) {\n\tconst w = Math.random() * 40 + 60;\n\tconst x = Math.random() * (W - w);\n\tconst heightMeters = Math.abs(y) / 50;\n\n\tlet type = 'normal';\n\tconst rand = Math.random();\n\tif (heightMeters > 20 && rand < 0.15) {\n\t\ttype = 'boost';\n\t} else if (heightMeters > 10 && rand < 0.3) {\n\t\ttype = 'moving';\n\t} else if (heightMeters > 15 && rand < 0.45) {\n\t\ttype = 'breakable';\n\t}\n\n\tplatforms.push(new Platform(x, y, w, type));\n}\n\n// Input handling\nconst keys = {\n\tleft: false,\n\tright: false\n};\n\ndocument.addEventListener('keydown', (e) => {\n\tif (e.key === 'ArrowLeft' || e.key === 'a') keys.left = true;\n\tif (e.key === 'ArrowRight' || e.key === 'd') keys.right = true;\n});\ndocument.addEventListener('keyup', (e) => {\n\tif (e.key === 'ArrowLeft' || e.key === 'a') keys.left = false;\n\tif (e.key === 'ArrowRight' || e.key === 'd') keys.right = false;\n});\n\n// Touch controls\nleftBtn.addEventListener('touchstart', (e) => {\n\te.preventDefault();\n\tkeys.left = true;\n});\nleftBtn.addEventListener('touchend', (e) => {\n\te.preventDefault();\n\tkeys.left = false;\n});\nrightBtn.addEventListener('touchstart', (e) => {\n\te.preventDefault();\n\tkeys.right = true;\n});\nrightBtn.addEventListener('touchend', (e) => {\n\te.preventDefault();\n\tkeys.right = false;\n});\n\nfunction spawnParticles(x, y, color, count) {\n\tfor (let i = 0; i < count; i++) {\n\t\tparticles.push(new Particle(x, y, color));\n\t}\n}\n\nfunction update() {\n\tif (!gameRunning) return;\n\n\t// Player movement\n\tif (keys.left) {\n\t\tplayer.vx = -MOVE_SPEED;\n\t\tplayer.facing = -1;\n\t} else if (keys.right) {\n\t\tplayer.vx = MOVE_SPEED;\n\t\tplayer.facing = 1;\n\t} else {\n\t\tplayer.vx *= 0.85;\n\t}\n\n\t// Apply gravity\n\tplayer.vy += GRAVITY;\n\tplayer.x += player.vx;\n\tplayer.y += player.vy;\n\n\t// Wrap around screen edges\n\tif (player.x + player.w < 0) player.x = W;\n\tif (player.x > W) player.x = -player.w;\n\n\t// Platform collision (only when falling)\n\tif (player.vy > 0) {\n\t\tfor (let p of platforms) {\n\t\t\tif (p.broken) continue;\n\t\t\tif (\n\t\t\t\tplayer.x + player.w > p.x &&\n\t\t\t\tplayer.x < p.x + p.w &&\n\t\t\t\tplayer.y + player.h >= p.y &&\n\t\t\t\tplayer.y + player.h <= p.y + p.h + player.vy + 2\n\t\t\t) {\n\t\t\t\t// Land on platform\n\t\t\t\tif (p.type === 'breakable') {\n\t\t\t\t\tp.broken = true;\n\t\t\t\t\tspawnParticles(p.x + p.w / 2, p.y, 'rgba(255, 200, 60, 0.8)', 8);\n\t\t\t\t\tplayer.vy = JUMP_FORCE * 0.7;\n\t\t\t\t} else if (p.type === 'boost') {\n\t\t\t\t\tplayer.vy = JUMP_FORCE * 1.8;\n\t\t\t\t\tspawnParticles(player.x + player.w / 2, player.y + player.h, '#ff3e7a', 12);\n\t\t\t\t} else {\n\t\t\t\t\tplayer.vy = JUMP_FORCE;\n\t\t\t\t\tspawnParticles(player.x + player.w / 2, player.y + player.h, '#00ffc8', 5);\n\t\t\t\t}\n\t\t\t\tplayer.y = p.y - player.h;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Update camera\n\tconst targetCamera = player.y - H * 0.4;\n\tif (targetCamera < camera) {\n\t\tcamera += (targetCamera - camera) * 0.1;\n\t}\n\n\t// Track max height\n\tconst currentHeight = Math.floor(Math.abs(Math.min(0, player.y)) / 50);\n\tif (currentHeight > maxHeight) {\n\t\tmaxHeight = currentHeight;\n\t}\n\n\t// Generate new platforms above\n\tconst highestPlatform = Math.min(...platforms.map(p => p.y));\n\tif (highestPlatform > camera - H * 0.5) {\n\t\tconst gap = Math.random() * 30 + 50;\n\t\tgeneratePlatform(highestPlatform - gap);\n\t}\n\n\t// Remove platforms far below\n\tplatforms = platforms.filter(p => p.y < camera + H + 100);\n\n\t// Update platforms\n\tplatforms.forEach(p => p.update());\n\n\t// Update particles\n\tparticles.forEach(p => p.update());\n\tparticles = particles.filter(p => p.life > 0);\n\n\t// Game over check\n\tif (player.y - camera > H + 50) {\n\t\tgameOver();\n\t}\n\n\t// Update UI\n\tscoreEl.textContent = maxHeight;\n\theightEl.textContent = `Height: ${maxHeight}m`;\n}\n\nfunction drawPlayer() {\n\tconst sx = player.x;\n\tconst sy = player.y - camera;\n\tconst squish = player.vy > 0 ? 0.9 : (player.vy < -8 ? 1.15 : 1);\n\tconst squishW = player.w * (2 - squish);\n\tconst squishH = player.h * squish;\n\tconst offsetX = (player.w - squishW) / 2;\n\tconst offsetY = player.h - squishH;\n\n\t// Glow\n\tctx.shadowColor = '#ff3e7a';\n\tctx.shadowBlur = 20;\n\n\t// Body\n\tctx.fillStyle = '#ff3e7a';\n\tctx.beginPath();\n\tctx.roundRect(sx + offsetX, sy + offsetY, squishW, squishH, 8);\n\tctx.fill();\n\n\tctx.shadowBlur = 0;\n\n\t// Eyes\n\tconst eyeY = sy + offsetY + squishH * 0.35;\n\tconst eyeSize = 4;\n\tconst eyeSpacing = squishW * 0.2;\n\tconst centerX = sx + player.w / 2;\n\n\tctx.fillStyle = '#fff';\n\tctx.beginPath();\n\tctx.arc(centerX - eyeSpacing, eyeY, eyeSize, 0, Math.PI * 2);\n\tctx.arc(centerX + eyeSpacing, eyeY, eyeSize, 0, Math.PI * 2);\n\tctx.fill();\n\n\t// Pupils (look in movement direction)\n\tconst pupilOffset = player.facing * 1.5;\n\tctx.fillStyle = '#1a1040';\n\tctx.beginPath();\n\tctx.arc(centerX - eyeSpacing + pupilOffset, eyeY, 2, 0, Math.PI * 2);\n\tctx.arc(centerX + eyeSpacing + pupilOffset, eyeY, 2, 0, Math.PI * 2);\n\tctx.fill();\n\n\t// Trail when moving fast\n\tif (Math.abs(player.vy) > 5) {\n\t\tconst trailAlpha = Math.min(Math.abs(player.vy) / 20, 0.4);\n\t\tctx.fillStyle = `rgba(255, 62, 122, ${trailAlpha})`;\n\t\tfor (let i = 1; i <= 3; i++) {\n\t\t\tctx.globalAlpha = trailAlpha / i;\n\t\t\tctx.beginPath();\n\t\t\tctx.roundRect(sx + offsetX, sy + offsetY + i * 8, squishW, squishH, 8);\n\t\t\tctx.fill();\n\t\t}\n\t\tctx.globalAlpha = 1;\n\t}\n}\n\nfunction drawBackground() {\n\t// Stars with parallax\n\tstars.forEach(s => {\n\t\tconst sy = ((s.y - camera * s.parallax) % H + H) % H;\n\t\tctx.fillStyle = `rgba(200, 220, 255, ${s.alpha})`;\n\t\tctx.beginPath();\n\t\tctx.arc(s.x, sy, s.size, 0, Math.PI * 2);\n\t\tctx.fill();\n\t});\n\n\t// Height gradient lines\n\tconst lineSpacing = 200;\n\tconst startLine = Math.floor(camera / lineSpacing) * lineSpacing;\n\tfor (let y = startLine; y < camera + H; y += lineSpacing) {\n\t\tconst sy = y - camera;\n\t\tconst alpha = 0.04;\n\t\tctx.strokeStyle = `rgba(0, 255, 200, ${alpha})`;\n\t\tctx.lineWidth = 1;\n\t\tctx.beginPath();\n\t\tctx.moveTo(0, sy);\n\t\tctx.lineTo(W, sy);\n\t\tctx.stroke();\n\t}\n}\n\nfunction draw() {\n\tctx.clearRect(0, 0, W, H);\n\n\tdrawBackground();\n\n\t// Draw platforms\n\tplatforms.forEach(p => p.draw());\n\n\t// Draw particles\n\tparticles.forEach(p => p.draw());\n\n\t// Draw player\n\tif (gameRunning) {\n\t\tdrawPlayer();\n\t}\n}\n\nfunction gameLoop() {\n\tupdate();\n\tdraw();\n\trequestAnimationFrame(gameLoop);\n}\n\nfunction startGame() {\n\tinitGame();\n\tgameRunning = true;\n\tstartScreen.classList.add('game__overlay--hidden');\n\tgameOverScreen.classList.add('game__overlay--hidden');\n}\n\nfunction gameOver() {\n\tgameRunning = false;\n\tif (maxHeight > bestHeight) {\n\t\tbestHeight = maxHeight;\n\t\tlocalStorage.setItem('skyBounce_best', bestHeight.toString());\n\t}\n\tfinalScoreEl.textContent = maxHeight + 'm';\n\tbestScoreEl.textContent = 'Best: ' + bestHeight + 'm';\n\tgameOverScreen.classList.remove('game__overlay--hidden');\n}\n\nstartBtn.addEventListener('click', startGame);\nrestartBtn.addEventListener('click', startGame);\n\n// Also allow tap on canvas to start\ncanvas.addEventListener('click', () => {\n\tif (!gameRunning && startScreen.classList.contains('game__overlay--hidden') && gameOverScreen.classList.contains('game__overlay--hidden')) {\n\t\tstartGame();\n\t}\n});\n\n// Tilt controls for mobile\nif (window.DeviceOrientationEvent) {\n\twindow.addEventListener('deviceorientation', (e) => {\n\t\tif (!gameRunning) return;\n\t\tif (e.gamma !== null) {\n\t\t\tconst tilt = e.gamma / 30;\n\t\t\tconst clampedTilt = Math.max(-1, Math.min(1, tilt));\n\t\t\tif (Math.abs(clampedTilt) > 0.15) {\n\t\t\t\tif (clampedTilt < 0) {\n\t\t\t\t\tkeys.left = true;\n\t\t\t\t\tkeys.right = false;\n\t\t\t\t} else {\n\t\t\t\t\tkeys.right = true;\n\t\t\t\t\tkeys.left = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n}\n\n// Initialize with a preview draw\ninitGame();\ngameLoop();"},{"name":"style.css","content":"@import url('https://fonts.googleapis.com/css2?family=Chakra+Petch:wght@400;600;700&family=Orbitron:wght@700;900&display=swap');\n\n:root {\n\tcolor-scheme: dark;\n\t--c-bg: #0a0e1a;\n\t--c-accent: #00ffc8;\n\t--c-accent2: #ff3e7a;\n\t--c-platform: #00ffc8;\n\t--c-player: #ff3e7a;\n\t--c-text: #e0e8ff;\n}\n\n* {\n\tbox-sizing: border-box;\n\tmargin: 0;\n\tpadding: 0;\n\t-webkit-tap-highlight-color: transparent;\n\tuser-select: none;\n}\n\nhtml, body {\n\twidth: 100%;\n\theight: 100%;\n\toverflow: hidden;\n\tbackground: var(--c-bg);\n\tfont-family: 'Chakra Petch', sans-serif;\n\ttouch-action: none;\n}\n\n.game {\n\tposition: relative;\n\twidth: 100%;\n\theight: 100dvh;\n\tmax-width: 500px;\n\tmargin: 0 auto;\n\toverflow: hidden;\n\tbackground: linear-gradient(180deg, #0a0e1a 0%, #101833 40%, #1a1040 70%, #0a0e1a 100%);\n}\n\n#gameCanvas {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\tdisplay: block;\n}\n\n.game__ui {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tpadding: 16px 20px;\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tz-index: 10;\n\tpointer-events: none;\n}\n\n.game__score {\n\tfont-family: 'Orbitron', sans-serif;\n\tfont-weight: 900;\n\tfont-size: 2rem;\n\tcolor: var(--c-accent);\n\ttext-shadow: 0 0 20px rgba(0, 255, 200, 0.5);\n}\n\n.game__height {\n\tfont-family: 'Orbitron', sans-serif;\n\tfont-weight: 700;\n\tfont-size: 0.85rem;\n\tcolor: var(--c-text);\n\topacity: 0.7;\n}\n\n.game__overlay {\n\tposition: absolute;\n\tinset: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tjustify-content: center;\n\tz-index: 50;\n\tbackground: rgba(10, 14, 26, 0.92);\n\tbackdrop-filter: blur(10px);\n\ttransition: opacity 0.4s, visibility 0.4s;\n}\n\n.game__overlay--hidden {\n\topacity: 0;\n\tvisibility: hidden;\n\tpointer-events: none;\n}\n\n.game__title {\n\tfont-family: 'Orbitron', sans-serif;\n\tfont-weight: 900;\n\tfont-size: clamp(3rem, 12vw, 5rem);\n\tline-height: 1;\n\ttext-align: center;\n\tcolor: var(--c-accent);\n\ttext-shadow: 0 0 40px rgba(0, 255, 200, 0.4), 0 0 80px rgba(0, 255, 200, 0.15);\n\tletter-spacing: 0.05em;\n\tmargin-bottom: 16px;\n}\n\n.game__subtitle {\n\tcolor: var(--c-text);\n\tfont-size: 1.1rem;\n\topacity: 0.6;\n\tmargin-bottom: 48px;\n\tletter-spacing: 0.1em;\n\ttext-transform: uppercase;\n}\n\n.game__btn {\n\tfont-family: 'Orbitron', sans-serif;\n\tfont-weight: 700;\n\tfont-size: 1rem;\n\tletter-spacing: 0.15em;\n\tpadding: 16px 48px;\n\tborder: 2px solid var(--c-accent);\n\tbackground: transparent;\n\tcolor: var(--c-accent);\n\tcursor: pointer;\n\ttransition: all 0.2s;\n\tposition: relative;\n\toverflow: hidden;\n}\n\n.game__btn::before {\n\tcontent: '';\n\tposition: absolute;\n\tinset: 0;\n\tbackground: var(--c-accent);\n\topacity: 0;\n\ttransition: opacity 0.2s;\n}\n\n.game__btn:hover::before,\n.game__btn:active::before {\n\topacity: 0.15;\n}\n\n.game__over-title {\n\tfont-family: 'Orbitron', sans-serif;\n\tfont-weight: 900;\n\tfont-size: clamp(2rem, 8vw, 3.5rem);\n\tcolor: var(--c-accent2);\n\ttext-shadow: 0 0 40px rgba(255, 62, 122, 0.4);\n\tmargin-bottom: 16px;\n}\n\n.game__final-score {\n\tfont-family: 'Orbitron', sans-serif;\n\tfont-weight: 900;\n\tfont-size: 3rem;\n\tcolor: var(--c-accent);\n\ttext-shadow: 0 0 30px rgba(0, 255, 200, 0.4);\n\tmargin-bottom: 8px;\n}\n\n.game__best {\n\tcolor: var(--c-text);\n\topacity: 0.5;\n\tfont-size: 1rem;\n\tmargin-bottom: 40px;\n}\n\n.game__controls {\n\tposition: absolute;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\tdisplay: flex;\n\tjustify-content: space-between;\n\tz-index: 20;\n\tpadding: 20px;\n\tpointer-events: none;\n}\n\n.game__control {\n\twidth: 80px;\n\theight: 80px;\n\tborder-radius: 50%;\n\tborder: 2px solid rgba(255, 255, 255, 0.15);\n\tbackground: rgba(255, 255, 255, 0.05);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tcolor: rgba(255, 255, 255, 0.4);\n\tpointer-events: all;\n\ttransition: all 0.1s;\n}\n\n.game__control:active {\n\tbackground: rgba(0, 255, 200, 0.15);\n\tborder-color: var(--c-accent);\n\tcolor: var(--c-accent);\n}\n\n.game__control svg {\n\twidth: 36px;\n\theight: 36px;\n}\n\n@media (min-width: 600px) {\n\t.game__controls {\n\t\tdisplay: none;\n\t}\n}"}],"folders":[]},"variants":null,"createdAt":"2026-02-07T12:19:01.963Z","updatedAt":"2026-02-07T12:19:42.009Z"}}