{"project":{"id":"dnzLHrg","userId":"davidyarham@gmail.com","username":null,"userPicture":null,"name":"BlockCraft","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<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover\" />\n<script src=\"https://unpkg.com/three@0.160.0/build/three.min.js\"></script>\n</head>\n<body>\n<div id=\"game\">\n\t<div id=\"overlay\">\n\t\t<div class=\"overlay__panel\">\n\t\t\t<div class=\"overlay__eyebrow\">Voxel sandbox experience</div>\n\t\t\t<h1>BlockCraft</h1>\n\t\t\t<p class=\"overlay__subtitle\">Sharper visuals, smoother atmosphere, desktop and mobile friendly</p>\n\t\t\t<div class=\"overlay__stats\" aria-hidden=\"true\">\n\t\t\t\t<div class=\"overlay__stat\">\n\t\t\t\t\t<strong>Fast</strong>\n\t\t\t\t\t<span>Performance-first rendering</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"overlay__stat\">\n\t\t\t\t\t<strong>Build</strong>\n\t\t\t\t\t<span>Place and break block worlds</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"overlay__stat\">\n\t\t\t\t\t<strong>Save</strong>\n\t\t\t\t\t<span>Local world persistence</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<ul>\n\t\t\t\t<li>Move: WASD or left joystick</li>\n\t\t\t\t<li>Look: mouse or drag right side</li>\n\t\t\t\t<li>Jump: Space or jump button</li>\n\t\t\t\t<li>Break block: Left click or Break button</li>\n\t\t\t\t<li>Place block: Right click or Place button</li>\n\t\t\t\t<li>Hotbar: 1-6 or tap slots</li>\n\t\t\t\t<li>Save: K</li>\n\t\t\t\t<li>Load: L</li>\n\t\t\t</ul>\n\t\t\t<div class=\"overlay__actions\">\n\t\t\t\t<button id=\"startBtn\">Start Game</button>\n\t\t\t\t<p class=\"overlay__hint\">Best on desktop with mouse lock · mobile uses touch zones</p>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div id=\"hud\" aria-hidden=\"true\">\n\t\t<div id=\"crosshair\"></div>\n\t\t<div id=\"hudTop\">\n\n\t\t\t<div id=\"saveState\">World: unsaved</div>\n\t\t</div>\n\n\t\t<div id=\"mobileTopActions\">\n\t\t\t<button class=\"mobile-btn\" id=\"pauseBtn\" aria-label=\"Pause game\">Pause</button>\n\t\t\t<button class=\"mobile-btn\" id=\"saveBtn\" aria-label=\"Save world\">Save</button>\n\t\t\t<button class=\"mobile-btn\" id=\"loadBtn\" aria-label=\"Load world\">Load</button>\n\t\t</div>\n\n\t\t<div id=\"hotbarWrap\">\n\t\t\t<div id=\"hotbar\">\n\t\t\t\t<button class=\"slot active slot--grass\" data-type=\"grass\" aria-label=\"Grass block\">\n\t\t\t\t\t<span class=\"slotKey\">1</span>\n\t\t\t\t\t<span class=\"slotPreview\" aria-hidden=\"true\"></span>\n\t\t\t\t\t<span class=\"slotLabel\">Grass</span>\n\t\t\t\t</button>\n\t\t\t\t<button class=\"slot slot--dirt\" data-type=\"dirt\" aria-label=\"Dirt block\">\n\t\t\t\t\t<span class=\"slotKey\">2</span>\n\t\t\t\t\t<span class=\"slotPreview\" aria-hidden=\"true\"></span>\n\t\t\t\t\t<span class=\"slotLabel\">Dirt</span>\n\t\t\t\t</button>\n\t\t\t\t<button class=\"slot slot--stone\" data-type=\"stone\" aria-label=\"Stone block\">\n\t\t\t\t\t<span class=\"slotKey\">3</span>\n\t\t\t\t\t<span class=\"slotPreview\" aria-hidden=\"true\"></span>\n\t\t\t\t\t<span class=\"slotLabel\">Stone</span>\n\t\t\t\t</button>\n\t\t\t\t<button class=\"slot slot--wood\" data-type=\"wood\" aria-label=\"Wood block\">\n\t\t\t\t\t<span class=\"slotKey\">4</span>\n\t\t\t\t\t<span class=\"slotPreview\" aria-hidden=\"true\"></span>\n\t\t\t\t\t<span class=\"slotLabel\">Wood</span>\n\t\t\t\t</button>\n\t\t\t\t<button class=\"slot slot--leaves\" data-type=\"leaves\" aria-label=\"Leaves block\">\n\t\t\t\t\t<span class=\"slotKey\">5</span>\n\t\t\t\t\t<span class=\"slotPreview\" aria-hidden=\"true\"></span>\n\t\t\t\t\t<span class=\"slotLabel\">Leaves</span>\n\t\t\t\t</button>\n\t\t\t\t<button class=\"slot slot--water\" data-type=\"water\" aria-label=\"Water block\">\n\t\t\t\t\t<span class=\"slotKey\">6</span>\n\t\t\t\t\t<span class=\"slotPreview\" aria-hidden=\"true\"></span>\n\t\t\t\t\t<span class=\"slotLabel\">Water</span>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div id=\"mobileControls\">\n\t\t\t<div id=\"joystickZone\" aria-label=\"Movement joystick\">\n\t\t\t\t<div id=\"joystickBase\">\n\t\t\t\t\t<div id=\"joystickKnob\"></div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div id=\"mobileActions\">\n\t\t\t\t<div class=\"mobileActions__cluster mobileActions__cluster--top\">\n\t\t\t\t\t<button class=\"mobile-action mobile-action--wide\" id=\"breakBtn\" aria-label=\"Break selected block\">Break</button>\n\t\t\t\t\t<button class=\"mobile-action mobile-action--wide\" id=\"placeBtn\" aria-label=\"Place selected block\">Place</button>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mobileActions__cluster mobileActions__cluster--bottom\">\n\t\t\t\t\t<button class=\"mobile-action\" id=\"jumpBtn\" aria-label=\"Jump\">Jump</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div id=\"lookZone\" aria-hidden=\"true\"></div>\n\t</div>\n</div>\n  <script type=\"module\" src=\"main.js\"></script>\n</body>\n</html>"},{"name":"main.js","content":"const scene = new THREE.Scene();\nscene.background = new THREE.Color(0x8fcfff);\nscene.fog = new THREE.Fog(0x8fcfff, 55, 210);\n\nconst isTouchDevice = matchMedia('(pointer: coarse)').matches || 'ontouchstart' in window || navigator.maxTouchPoints > 0;\ndocument.body.classList.add(isTouchDevice ? 'is-mobile' : 'is-desktop');\n\nconst camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1200);\nconst renderer = new THREE.WebGLRenderer({\n\tantialias: !isTouchDevice,\n\tpowerPreference: 'high-performance'\n});\nrenderer.setSize(window.innerWidth, window.innerHeight);\nrenderer.setPixelRatio(Math.min(window.devicePixelRatio, isTouchDevice ? 1.5 : 1.75));\nrenderer.shadowMap.enabled = false;\nrenderer.shadowMap.type = THREE.PCFSoftShadowMap;\nrenderer.outputColorSpace = THREE.SRGBColorSpace;\nrenderer.toneMapping = THREE.ACESFilmicToneMapping;\nrenderer.toneMappingExposure = 1.12;\ndocument.getElementById('game').prepend(renderer.domElement);\nrenderer.domElement.tabIndex = 0;\nrenderer.domElement.setAttribute('aria-label', 'BlockCraft game canvas');\nrenderer.domElement.style.outline = 'none';\n\nconst overlay = document.getElementById('overlay');\nconst startBtn = document.getElementById('startBtn');\nconst saveStateEl = document.getElementById('saveState');\nconst slots = [...document.querySelectorAll('.slot')];\nconst pauseBtn = document.getElementById('pauseBtn');\nconst saveBtn = document.getElementById('saveBtn');\nconst loadBtn = document.getElementById('loadBtn');\nconst breakBtn = document.getElementById('breakBtn');\nconst placeBtn = document.getElementById('placeBtn');\nconst jumpBtn = document.getElementById('jumpBtn');\nconst joystickZone = document.getElementById('joystickZone');\nconst joystickBase = document.getElementById('joystickBase');\nconst joystickKnob = document.getElementById('joystickKnob');\nconst lookZone = document.getElementById('lookZone');\n\nconst world = new Map();\nconst blockSize = 1;\nconst worldRadius = isTouchDevice ? 24 : 32;\nconst maxHeight = 10;\nconst waterLevel = 4;\nconst playerHeight = 1.7;\nconst playerRadius = 0.35;\nconst gravity = 20;\nconst saveKey = 'blockcraft-save-v5-sandbox';\nconst renderDistance = isTouchDevice ? 24 : 34;\nconst renderDistanceSq = renderDistance * renderDistance;\nlet visibleBlocks = [];\nlet visibilityUpdateTimer = 0;\nlet visibleCollidableBlocks = [];\n\nlet selectedBlockType = 'grass';\nlet gameActive = false;\nlet noclip = false;\nlet highlightMesh = null;\nlet audioStarted = false;\n\nconst raycaster = new THREE.Raycaster();\nconst pointer = new THREE.Vector2(0, 0);\nconst keys = new Set();\nconst collidableTypes = new Set(['grass', 'dirt', 'stone', 'wood', 'leaves', 'sand']);\n\nconst touchState = {\n\tjoystickId: null,\n\tlookId: null,\n\tjoystickVector: {\n\t\tx: 0,\n\t\ty: 0\n\t},\n\tjumpPressed: false,\n\tlookActive: false,\n\tlastLookX: 0,\n\tlastLookY: 0\n};\n\nconst listener = new THREE.AudioListener();\ncamera.add(listener);\nlet audioCtx = null;\nlet ambientGain = null;\n\nconst player = {\n\tposition: new THREE.Vector3(0, 12, 0),\n\tvelocity: new THREE.Vector3(),\n\tdirection: new THREE.Vector3(),\n\tonGround: false,\n\tyaw: 0,\n\tpitch: 0,\n\tspeed: isTouchDevice ? 5.6 : 6.5,\n\tprevYVelocity: 0\n};\n\nfunction setSaveState(text) {\n\tsaveStateEl.textContent = `World: ${text}`;\n}\n\nfunction initAudio() {\n\tif (audioStarted) return;\n\taudioCtx = listener.context;\n\tambientGain = audioCtx.createGain();\n\tambientGain.gain.value = 0.02;\n\tambientGain.connect(audioCtx.destination);\n\n\tconst noiseBuffer = audioCtx.createBuffer(1, audioCtx.sampleRate * 2, audioCtx.sampleRate);\n\tconst data = noiseBuffer.getChannelData(0);\n\tfor (let i = 0; i < data.length; i++) data[i] = (Math.random() * 2 - 1) * 0.35;\n\n\tconst source = audioCtx.createBufferSource();\n\tsource.buffer = noiseBuffer;\n\tsource.loop = true;\n\n\tconst lowpass = audioCtx.createBiquadFilter();\n\tlowpass.type = 'lowpass';\n\tlowpass.frequency.value = 400;\n\n\tsource.connect(lowpass);\n\tlowpass.connect(ambientGain);\n\tsource.start();\n\taudioStarted = true;\n}\n\nfunction playTone(freq = 220, duration = 0.08, type = 'square', volume = 0.03, ramp = 0.01) {\n\tif (!audioCtx) return;\n\tconst now = audioCtx.currentTime;\n\tconst osc = audioCtx.createOscillator();\n\tconst gain = audioCtx.createGain();\n\tosc.type = type;\n\tosc.frequency.setValueAtTime(freq, now);\n\tgain.gain.setValueAtTime(0.0001, now);\n\tgain.gain.exponentialRampToValueAtTime(volume, now + 0.005);\n\tgain.gain.exponentialRampToValueAtTime(0.0001, now + duration + ramp);\n\tosc.connect(gain);\n\tgain.connect(audioCtx.destination);\n\tosc.start(now);\n\tosc.stop(now + duration + ramp + 0.02);\n}\n\nfunction playStepSound() {\n\tplayTone(90 + Math.random() * 20, 0.04, 'triangle', 0.012);\n}\n\nfunction playBreakSound(type) {\n\tconst base = type === 'stone' ? 140 : type === 'wood' ? 180 : type === 'sand' ? 170 : 220;\n\tplayTone(base, 0.05, 'square', 0.02);\n\tplayTone(base * 0.7, 0.06, 'triangle', 0.015);\n}\n\nfunction playPlaceSound(type) {\n\tconst base = type === 'stone' ? 160 : type === 'wood' ? 200 : type === 'sand' ? 190 : 260;\n\tplayTone(base, 0.035, 'sawtooth', 0.016);\n}\n\nfunction playJumpSound() {\n\tplayTone(280, 0.06, 'triangle', 0.02);\n}\n\nslots.forEach((slot, index) => {\n\tslot.setAttribute('tabindex', '-1');\n\tslot.addEventListener('click', () => {\n\t\tselectBlock(slot.dataset.type);\n\t\tfocusGame();\n\t});\n\tslot.dataset.index = String(index + 1);\n});\n\nfunction selectBlock(type) {\n\tselectedBlockType = type;\n\tslots.forEach((slot) => slot.classList.toggle('active', slot.dataset.type === type));\n}\nselectBlock('grass');\nsetSaveState('unsaved');\n\nfunction textureCanvas(colors) {\n\tconst canvas = document.createElement('canvas');\n\tcanvas.width = 64;\n\tcanvas.height = 64;\n\tconst ctx = canvas.getContext('2d');\n\tctx.fillStyle = colors.base;\n\tctx.fillRect(0, 0, 64, 64);\n\tfor (let i = 0; i < 380; i++) {\n\t\tctx.fillStyle = i % 4 === 0 ? colors.dark : colors.light;\n\t\tconst x = Math.random() * 64;\n\t\tconst y = Math.random() * 64;\n\t\tconst s = 1 + Math.random() * 4;\n\t\tctx.fillRect(x, y, s, s);\n\t}\n\tif (colors.lines) {\n\t\tctx.strokeStyle = colors.lines;\n\t\tctx.globalAlpha = 0.2;\n\t\tfor (let i = 0; i < 8; i++) {\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(0, i * 8 + Math.random() * 3);\n\t\t\tctx.lineTo(64, i * 8 + Math.random() * 3);\n\t\t\tctx.stroke();\n\t\t}\n\t\tctx.globalAlpha = 1;\n\t}\n\tconst texture = new THREE.CanvasTexture(canvas);\n\ttexture.magFilter = THREE.NearestFilter;\n\ttexture.minFilter = THREE.NearestFilter;\n\ttexture.wrapS = THREE.RepeatWrapping;\n\ttexture.wrapT = THREE.RepeatWrapping;\n\ttexture.colorSpace = THREE.SRGBColorSpace;\n\treturn texture;\n}\n\nconst grassTop = textureCanvas({\n\tbase: '#6cbe3b',\n\tdark: '#4f8d29',\n\tlight: '#8bd45d'\n});\nconst grassSide = textureCanvas({\n\tbase: '#7a5a3a',\n\tdark: '#5b4128',\n\tlight: '#8a6f4e'\n});\nconst dirtTex = textureCanvas({\n\tbase: '#7a5a3a',\n\tdark: '#5b4128',\n\tlight: '#93724f'\n});\nconst stoneTex = textureCanvas({\n\tbase: '#8c8f98',\n\tdark: '#6b6e75',\n\tlight: '#b4b7bd'\n});\nconst woodTex = textureCanvas({\n\tbase: '#8b5a2b',\n\tdark: '#6d431d',\n\tlight: '#a96f3a',\n\tlines: '#5f3818'\n});\nconst leavesTex = textureCanvas({\n\tbase: '#2f8f3a',\n\tdark: '#236e2c',\n\tlight: '#46b853'\n});\nconst sandTex = textureCanvas({\n\tbase: '#bfa56f',\n\tdark: '#9d8456',\n\tlight: '#dbc48b'\n});\nconst waterTex = textureCanvas({\n\tbase: '#3b78c8',\n\tdark: '#275ba0',\n\tlight: '#5a98eb'\n});\n\nconst materials = {\n\tsand: new THREE.MeshLambertMaterial({\n\t\tmap: sandTex\n\t}),\n\tgrass: [\n\t\tnew THREE.MeshLambertMaterial({\n\t\t\tmap: grassSide\n\t\t}),\n\t\tnew THREE.MeshLambertMaterial({\n\t\t\tmap: grassSide\n\t\t}),\n\t\tnew THREE.MeshLambertMaterial({\n\t\t\tmap: grassTop\n\t\t}),\n\t\tnew THREE.MeshLambertMaterial({\n\t\t\tmap: dirtTex\n\t\t}),\n\t\tnew THREE.MeshLambertMaterial({\n\t\t\tmap: grassSide\n\t\t}),\n\t\tnew THREE.MeshLambertMaterial({\n\t\t\tmap: grassSide\n\t\t})\n\t],\n\tdirt: new THREE.MeshLambertMaterial({\n\t\tmap: dirtTex\n\t}),\n\tstone: new THREE.MeshLambertMaterial({\n\t\tmap: stoneTex\n\t}),\n\twood: new THREE.MeshLambertMaterial({\n\t\tmap: woodTex\n\t}),\n\tleaves: new THREE.MeshLambertMaterial({\n\t\tmap: leavesTex,\n\t\ttransparent: true,\n\t\talphaTest: 0.18\n\t}),\n\twater: new THREE.MeshLambertMaterial({\n\t\tmap: waterTex,\n\t\ttransparent: true,\n\t\topacity: 0.78,\n\t\tdepthWrite: false,\n\t\tcolor: new THREE.Color(0x9ed6ff)\n\t})\n};\n\nconst cubeGeo = new THREE.BoxGeometry(blockSize, blockSize, blockSize);\nconst outlineGeo = new THREE.EdgesGeometry(cubeGeo);\nconst outlineMat = new THREE.LineBasicMaterial({\n\tcolor: 0xffffff\n});\nhighlightMesh = new THREE.LineSegments(outlineGeo, outlineMat);\nhighlightMesh.visible = false;\nscene.add(highlightMesh);\n\nconst skyGeo = new THREE.SphereGeometry(500, isTouchDevice ? 18 : 24, isTouchDevice ? 18 : 24);\nconst skyMat = new THREE.ShaderMaterial({\n\tside: THREE.BackSide,\n\tuniforms: {\n\t\ttopColor: {\n\t\t\tvalue: new THREE.Color(0x74b8ff)\n\t\t},\n\t\tbottomColor: {\n\t\t\tvalue: new THREE.Color(0xeaf8ff)\n\t\t},\n\t\toffset: {\n\t\t\tvalue: 20\n\t\t},\n\t\texponent: {\n\t\t\tvalue: 0.8\n\t\t}\n\t},\n\tvertexShader: `\n\t\tvarying vec3 vWorldPosition;\n\t\tvoid main() {\n\t\t\tvec4 worldPosition = modelMatrix * vec4(position, 1.0);\n\t\t\tvWorldPosition = worldPosition.xyz;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n\t\t}\n\t`,\n\tfragmentShader: `\n\t\tuniform vec3 topColor;\n\t\tuniform vec3 bottomColor;\n\t\tuniform float offset;\n\t\tuniform float exponent;\n\t\tvarying vec3 vWorldPosition;\n\t\tvoid main() {\n\t\t\tfloat h = normalize(vWorldPosition + offset).y;\n\t\t\tfloat mixFactor = max(pow(max(h, 0.0), exponent), 0.0);\n\t\t\tgl_FragColor = vec4(mix(bottomColor, topColor, mixFactor), 1.0);\n\t\t}\n\t`\n});\nconst sky = new THREE.Mesh(skyGeo, skyMat);\nscene.add(sky);\n\nfunction key(x, y, z) {\n\treturn `${x},${y},${z}`;\n}\n\nfunction isCollidableType(type) {\n\treturn collidableTypes.has(type);\n}\n\nfunction hasBlock(x, y, z) {\n\treturn world.has(key(x, y, z));\n}\n\nfunction getBlock(x, y, z) {\n\treturn world.get(key(x, y, z)) || null;\n}\n\nfunction addBlock(x, y, z, type = 'grass') {\n\tconst k = key(x, y, z);\n\tif (world.has(k)) return null;\n\tconst mesh = new THREE.Mesh(cubeGeo, materials[type] || materials.grass);\n\tmesh.position.set(x + 0.5, y + 0.5, z + 0.5);\n\tmesh.receiveShadow = true;\n\tmesh.castShadow = type !== 'water';\n\tmesh.userData = {\n\t\tx,\n\t\ty,\n\t\tz,\n\t\ttype\n\t};\n\tworld.set(k, mesh);\n\tscene.add(mesh);\n\treturn mesh;\n}\n\nfunction removeBlock(x, y, z) {\n\tconst k = key(x, y, z);\n\tconst mesh = world.get(k);\n\tif (!mesh) return;\n\tscene.remove(mesh);\n\tworld.delete(k);\n}\n\nfunction getGroundHeight(x, z) {\n\tconst n1 = Math.sin(x * 0.11) * 2.6;\n\tconst n2 = Math.cos(z * 0.12) * 2.1;\n\tconst n3 = Math.sin((x + z) * 0.05) * 2.8;\n\tconst n4 = Math.cos((x - z) * 0.035) * 3.0;\n\tconst ridge = Math.sin(x * 0.025) * Math.cos(z * 0.025) * 5.0;\n\treturn Math.max(2, Math.floor(maxHeight + n1 + n2 + n3 + n4 + ridge));\n}\n\nconst WORLD_GEN_LOOP_LIMIT = Infinity;\nlet worldGenLoopCount = 0;\n\nfunction maybeAddTree(x, h, z) {\n\tif (h <= waterLevel + 1 || Math.random() > 0.065) return;\n\tconst trunk = 3 + Math.floor(Math.random() * 4);\n\tfor (let i = 0; i < trunk; i++) {\n\t\tif (++worldGenLoopCount > WORLD_GEN_LOOP_LIMIT) return;\n\t\taddBlock(x, h + i, z, 'wood');\n\t}\n\tfor (let lx = -2; lx <= 2; lx++) {\n\t\tif (++worldGenLoopCount > WORLD_GEN_LOOP_LIMIT) return;\n\t\tfor (let lz = -2; lz <= 2; lz++) {\n\t\t\tif (++worldGenLoopCount > WORLD_GEN_LOOP_LIMIT) return;\n\t\t\tfor (let ly = trunk - 1; ly <= trunk + 2; ly++) {\n\t\t\t\tif (++worldGenLoopCount > WORLD_GEN_LOOP_LIMIT) return;\n\t\t\t\tconst dist = Math.abs(lx) + Math.abs(lz) + Math.abs(ly - trunk);\n\t\t\t\tif (dist <= 4 && !hasBlock(x + lx, h + ly, z + lz)) addBlock(x + lx, h + ly, z + lz, 'leaves');\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction buildWorld() {\n\tworldGenLoopCount = 0;\n\tfor (let x = -worldRadius; x <= worldRadius; x++) {\n\t\tif (worldGenLoopCount > WORLD_GEN_LOOP_LIMIT) break;\n\t\tfor (let z = -worldRadius; z <= worldRadius; z++) {\n\t\t\tif (++worldGenLoopCount > WORLD_GEN_LOOP_LIMIT) break;\n\t\t\tconst h = getGroundHeight(x, z);\n\t\t\tfor (let y = 0; y < h; y++) {\n\t\t\t\tif (++worldGenLoopCount > WORLD_GEN_LOOP_LIMIT) break;\n\t\t\t\tif (y === h - 1) addBlock(x, y, z, h <= waterLevel ? 'sand' : 'grass');\n\t\t\t\telse if (y > h - 4) addBlock(x, y, z, 'dirt');\n\t\t\t\telse addBlock(x, y, z, 'stone');\n\t\t\t}\n\t\t\tfor (let y = h; y < waterLevel; y++) {\n\t\t\t\tif (++worldGenLoopCount > WORLD_GEN_LOOP_LIMIT) break;\n\t\t\t\tif (!hasBlock(x, y, z)) addBlock(x, y, z, 'water');\n\t\t\t}\n\t\t\tmaybeAddTree(x, h, z);\n\t\t}\n\t}\n}\n\nfunction updateChunkVisibility(force = false) {\n\tvisibilityUpdateTimer -= force ? 999 : 1 / 60;\n\tif (!force && visibilityUpdateTimer > 0) return;\n\tvisibilityUpdateTimer = isTouchDevice ? 0.25 : 0.2;\n\tvisibleBlocks.length = 0;\n\tvisibleCollidableBlocks.length = 0;\n\tconst px = player.position.x;\n\tconst pz = player.position.z;\n\tfor (const mesh of world.values()) {\n\t\tconst dx = mesh.position.x - px;\n\t\tconst dz = mesh.position.z - pz;\n\t\tmesh.visible = dx * dx + dz * dz < renderDistanceSq;\n\t\tif (mesh.visible) {\n\t\t\tvisibleBlocks.push(mesh);\n\t\t\tif (isCollidableType(mesh.userData.type)) visibleCollidableBlocks.push(mesh);\n\t\t}\n\t}\n}\n\nfunction collidesAt(x, y, z) {\n\tconst minX = Math.floor(x - playerRadius);\n\tconst maxX = Math.floor(x + playerRadius);\n\tconst minY = Math.floor(y - playerHeight);\n\tconst maxY = Math.floor(y - 0.001);\n\tconst minZ = Math.floor(z - playerRadius);\n\tconst maxZ = Math.floor(z + playerRadius);\n\n\tfor (let bx = minX; bx <= maxX; bx++) {\n\t\tfor (let by = minY; by <= maxY; by++) {\n\t\t\tfor (let bz = minZ; bz <= maxZ; bz++) {\n\t\t\t\tconst block = getBlock(bx, by, bz);\n\t\t\t\tif (block && isCollidableType(block.userData.type)) return true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction findSpawn() {\n\tconst h = getGroundHeight(0, 0);\n\tlet spawnY = h + playerHeight + 2.5;\n\tfor (let i = 0; i < 64 && collidesAt(0.5, spawnY, 0.5); i++) spawnY += 1;\n\tplayer.position.set(0.5, spawnY, 0.5);\n}\n\nbuildWorld();\nif (worldGenLoopCount > WORLD_GEN_LOOP_LIMIT) {\n\tconsole.warn('World generation was capped to avoid loop protection.');\n}\nfindSpawn();\nupdateChunkVisibility(true);\n\nconst ambient = new THREE.HemisphereLight(0xeaf7ff, 0x78915a, 1.02);\nscene.add(ambient);\n\nconst sun = new THREE.DirectionalLight(0xfff1cf, 1.22);\nsun.position.set(20, 35, 15);\nsun.castShadow = true;\nsun.shadow.mapSize.width = 512;\nsun.shadow.mapSize.height = 512;\nsun.shadow.camera.near = 1;\nsun.shadow.camera.far = 90;\nsun.shadow.camera.left = -28;\nsun.shadow.camera.right = 28;\nsun.shadow.camera.top = 28;\nsun.shadow.camera.bottom = -28;\nscene.add(sun);\nscene.add(sun.target);\n\nfunction focusGame() {\n\trenderer.domElement.focus();\n\twindow.focus();\n\tgameActive = true;\n\tinitAudio();\n\toverlay.classList.add('hidden');\n}\n\nfunction pauseGame() {\n\tgameActive = false;\n\toverlay.classList.remove('hidden');\n}\n\nfunction lockPointer() {\n\tfocusGame();\n\tif (!isTouchDevice && renderer.domElement.requestPointerLock) renderer.domElement.requestPointerLock();\n}\n\nstartBtn.addEventListener('click', () => {\n\tlockPointer();\n});\n\npauseBtn.addEventListener('click', () => {\n\tpauseGame();\n\tif (document.pointerLockElement === renderer.domElement) document.exitPointerLock();\n});\n\nsaveBtn.addEventListener('click', () => {\n\tfocusGame();\n\tsaveWorld();\n});\n\nloadBtn.addEventListener('click', () => {\n\tfocusGame();\n\tloadWorld();\n});\n\nrenderer.domElement.addEventListener('click', () => {\n\tif (isTouchDevice) return;\n\tfocusGame();\n\tif (document.pointerLockElement !== renderer.domElement) lockPointer();\n});\n\ndocument.addEventListener('pointerlockchange', () => {\n\tif (isTouchDevice) return;\n\tconst locked = document.pointerLockElement === renderer.domElement;\n\toverlay.classList.toggle('hidden', locked || gameActive);\n});\n\ndocument.addEventListener('mousemove', (e) => {\n\tif (document.pointerLockElement !== renderer.domElement) return;\n\tplayer.yaw -= e.movementX * 0.0022;\n\tplayer.pitch -= e.movementY * 0.0022;\n\tplayer.pitch = Math.max(-Math.PI / 2 + 0.01, Math.min(Math.PI / 2 - 0.01, player.pitch));\n});\n\nwindow.addEventListener('keydown', (e) => {\n\tgameActive = true;\n\tkeys.add(e.code);\n\tif (['Space', 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(e.code)) e.preventDefault();\n\tif (e.code === 'KeyN') {\n\t\tnoclip = !noclip;\n\t\tsetSaveState(noclip ? 'noclip on' : 'noclip off');\n\t}\n\tif (/Digit[1-9]/.test(e.code)) {\n\t\tconst index = Number(e.code.replace('Digit', '')) - 1;\n\t\tif (slots[index]) selectBlock(slots[index].dataset.type);\n\t}\n\tif (e.code === 'KeyK') saveWorld();\n\tif (e.code === 'KeyL') loadWorld();\n});\n\nwindow.addEventListener('keyup', (e) => {\n\tkeys.delete(e.code);\n});\n\nwindow.addEventListener('blur', () => {\n\tkeys.clear();\n\ttouchState.joystickVector.x = 0;\n\ttouchState.joystickVector.y = 0;\n\ttouchState.jumpPressed = false;\n\tresetJoystick();\n\tpauseGame();\n});\n\ndocument.addEventListener('contextmenu', (e) => e.preventDefault());\n\nfunction getTargetBlock() {\n\traycaster.setFromCamera(pointer, camera);\n\tconst intersects = raycaster.intersectObjects(visibleCollidableBlocks, false);\n\tif (!intersects.length) return null;\n\tconst block = intersects.find((i) => i.distance <= 8);\n\tif (!block) return null;\n\tconst place = block.point.clone().add(block.face.normal.clone().multiplyScalar(0.5));\n\treturn {\n\t\tblock,\n\t\tplace\n\t};\n}\n\nfunction breakTargetBlock() {\n\tconst hit = getTargetBlock();\n\tif (!hit) return;\n\tconst {\n\t\tx,\n\t\ty,\n\t\tz,\n\t\ttype\n\t} = hit.block.object.userData;\n\tif (type !== 'water') {\n\t\tremoveBlock(x, y, z);\n\t\tplayBreakSound(type);\n\t}\n}\n\nfunction placeTargetBlock() {\n\tconst hit = getTargetBlock();\n\tif (!hit) return;\n\tconst p = hit.place;\n\tconst px = Math.floor(p.x);\n\tconst py = Math.floor(p.y);\n\tconst pz = Math.floor(p.z);\n\tif (hasBlock(px, py, pz)) return;\n\n\tconst feetY = player.position.y - playerHeight;\n\tconst headY = player.position.y;\n\tconst intersectsPlayer =\n\t\tpx + 1 > player.position.x - playerRadius &&\n\t\tpx < player.position.x + playerRadius &&\n\t\tpy + 1 > feetY &&\n\t\tpy < headY &&\n\t\tpz + 1 > player.position.z - playerRadius &&\n\t\tpz < player.position.z + playerRadius;\n\n\tif (!intersectsPlayer) {\n\t\taddBlock(px, py, pz, selectedBlockType);\n\t\tplayPlaceSound(selectedBlockType);\n\t}\n}\n\ndocument.addEventListener('mousedown', (e) => {\n\tif (!gameActive || isTouchDevice) return;\n\tif (e.button === 0) breakTargetBlock();\n\tif (e.button === 2) placeTargetBlock();\n});\n\nbreakBtn.addEventListener('touchstart', (e) => {\n\te.preventDefault();\n\tfocusGame();\n\tbreakTargetBlock();\n}, {\n\tpassive: false\n});\n\nplaceBtn.addEventListener('touchstart', (e) => {\n\te.preventDefault();\n\tfocusGame();\n\tplaceTargetBlock();\n}, {\n\tpassive: false\n});\n\nbreakBtn.addEventListener('click', () => {\n\tfocusGame();\n\tbreakTargetBlock();\n});\n\nplaceBtn.addEventListener('click', () => {\n\tfocusGame();\n\tplaceTargetBlock();\n});\n\njumpBtn.addEventListener('pointerdown', (e) => {\n\te.preventDefault();\n\tfocusGame();\n\ttouchState.jumpPressed = true;\n});\n\nwindow.addEventListener('pointerup', () => {\n\ttouchState.jumpPressed = false;\n});\n\nwindow.addEventListener('pointercancel', () => {\n\ttouchState.jumpPressed = false;\n});\n\nfunction resetJoystick() {\n\ttouchState.joystickVector.x = 0;\n\ttouchState.joystickVector.y = 0;\n\tjoystickKnob.style.transform = 'translate(-50%, -50%)';\n}\n\nfunction updateJoystickFromEvent(e) {\n\tconst rect = joystickBase.getBoundingClientRect();\n\tconst centerX = rect.left + rect.width / 2;\n\tconst centerY = rect.top + rect.height / 2;\n\tconst dx = e.clientX - centerX;\n\tconst dy = e.clientY - centerY;\n\tconst max = rect.width * 0.32;\n\tconst dist = Math.hypot(dx, dy);\n\tconst clamped = Math.min(dist, max);\n\tconst angle = Math.atan2(dy, dx);\n\tconst x = dist > 0 ? Math.cos(angle) * clamped : 0;\n\tconst y = dist > 0 ? Math.sin(angle) * clamped : 0;\n\ttouchState.joystickVector.x = x / max;\n\ttouchState.joystickVector.y = y / max;\n\tjoystickKnob.style.transform = `translate(calc(-50% + ${x}px), calc(-50% + ${y}px))`;\n}\n\njoystickZone.addEventListener('pointerdown', (e) => {\n\tif (!isTouchDevice) return;\n\te.preventDefault();\n\tfocusGame();\n\ttouchState.joystickId = e.pointerId;\n\tjoystickZone.setPointerCapture(e.pointerId);\n\tupdateJoystickFromEvent(e);\n});\n\njoystickZone.addEventListener('pointermove', (e) => {\n\tif (touchState.joystickId !== e.pointerId) return;\n\te.preventDefault();\n\tupdateJoystickFromEvent(e);\n});\n\nfunction endJoystick(e) {\n\tif (touchState.joystickId !== e.pointerId) return;\n\ttouchState.joystickId = null;\n\tresetJoystick();\n}\n\njoystickZone.addEventListener('pointerup', endJoystick);\njoystickZone.addEventListener('pointercancel', endJoystick);\n\nlookZone.addEventListener('pointerdown', (e) => {\n\tif (!isTouchDevice) return;\n\te.preventDefault();\n\tfocusGame();\n\ttouchState.lookId = e.pointerId;\n\ttouchState.lookActive = true;\n\ttouchState.lastLookX = e.clientX;\n\ttouchState.lastLookY = e.clientY;\n\tlookZone.setPointerCapture(e.pointerId);\n});\n\nlookZone.addEventListener('pointermove', (e) => {\n\tif (!isTouchDevice || touchState.lookId !== e.pointerId || !touchState.lookActive) return;\n\te.preventDefault();\n\tconst dx = e.clientX - touchState.lastLookX;\n\tconst dy = e.clientY - touchState.lastLookY;\n\ttouchState.lastLookX = e.clientX;\n\ttouchState.lastLookY = e.clientY;\n\tplayer.yaw -= dx * 0.009;\n\tplayer.pitch -= dy * 0.009;\n\tplayer.pitch = Math.max(-Math.PI / 2 + 0.01, Math.min(Math.PI / 2 - 0.01, player.pitch));\n});\n\nfunction endLook(e) {\n\tif (touchState.lookId !== e.pointerId) return;\n\ttouchState.lookId = null;\n\ttouchState.lookActive = false;\n}\n\nlookZone.addEventListener('pointerup', endLook);\nlookZone.addEventListener('pointercancel', endLook);\n\nlet stepTimer = 0;\nlet jumpLatch = false;\n\nfunction movePlayer(dt) {\n\tlet inputX = 0;\n\tlet inputZ = 0;\n\tif (keys.has('KeyW') || keys.has('ArrowUp')) inputZ += 1;\n\tif (keys.has('KeyS') || keys.has('ArrowDown')) inputZ -= 1;\n\tif (keys.has('KeyA') || keys.has('ArrowLeft')) inputX -= 1;\n\tif (keys.has('KeyD') || keys.has('ArrowRight')) inputX += 1;\n\n\tif (isTouchDevice) {\n\t\tinputX += touchState.joystickVector.x;\n\t\tinputZ += -touchState.joystickVector.y;\n\t}\n\n\tconst forward = new THREE.Vector3(-Math.sin(player.yaw), 0, -Math.cos(player.yaw));\n\tconst right = new THREE.Vector3(-forward.z, 0, forward.x);\n\tplayer.direction.set(0, 0, 0);\n\tplayer.direction.addScaledVector(forward, inputZ);\n\tplayer.direction.addScaledVector(right, inputX);\n\tif (player.direction.lengthSq() > 0) player.direction.normalize();\n\tconst sprinting = keys.has('ShiftLeft') || keys.has('ShiftRight');\n\tconst speed = sprinting ? player.speed * 1.55 : player.speed;\n\tplayer.velocity.x = player.direction.x * speed;\n\tplayer.velocity.z = player.direction.z * speed;\n\n\tconst wantsJump = keys.has('Space') || touchState.jumpPressed;\n\n\tif (noclip) {\n\t\tconst flyY = (wantsJump ? 1 : 0) + ((keys.has('ControlLeft') || keys.has('ControlRight')) ? -1 : 0);\n\t\tplayer.position.x += player.velocity.x * dt;\n\t\tplayer.position.z += player.velocity.z * dt;\n\t\tplayer.position.y += flyY * speed * dt;\n\t\tplayer.velocity.y = 0;\n\t\tplayer.onGround = false;\n\t\treturn;\n\t}\n\n\tplayer.prevYVelocity = player.velocity.y;\n\tplayer.velocity.y -= gravity * dt;\n\tif (wantsJump && player.onGround && !jumpLatch) {\n\t\tplayer.velocity.y = 8.8;\n\t\tplayer.onGround = false;\n\t\tjumpLatch = true;\n\t\tplayJumpSound();\n\t}\n\tif (!wantsJump) jumpLatch = false;\n\n\tconst nextX = player.position.x + player.velocity.x * dt;\n\tif (!collidesAt(nextX, player.position.y, player.position.z)) player.position.x = nextX;\n\n\tconst nextZ = player.position.z + player.velocity.z * dt;\n\tif (!collidesAt(player.position.x, player.position.y, nextZ)) player.position.z = nextZ;\n\n\tconst nextY = player.position.y + player.velocity.y * dt;\n\tif (!collidesAt(player.position.x, nextY, player.position.z)) {\n\t\tplayer.position.y = nextY;\n\t\tplayer.onGround = false;\n\t} else {\n\t\tif (player.velocity.y < 0) player.onGround = true;\n\t\tplayer.velocity.y = 0;\n\t}\n\n\tif (player.onGround && player.direction.lengthSq() > 0.01) {\n\t\tstepTimer -= dt;\n\t\tif (stepTimer <= 0) {\n\t\t\tplayStepSound();\n\t\t\tstepTimer = sprinting ? 0.24 : 0.32;\n\t\t}\n\t} else {\n\t\tstepTimer = 0;\n\t}\n\n\tif (player.position.y < -30) {\n\t\trespawnPlayer();\n\t}\n}\n\nfunction respawnPlayer() {\n\tfindSpawn();\n\tplayer.velocity.set(0, 0, 0);\n\tfor (let i = 0; i < 64 && collidesAt(player.position.x, player.position.y, player.position.z); i++) player.position.y += 1;\n}\n\nfunction updateBlockHighlight() {\n\tconst hit = getTargetBlock();\n\tif (!hit) {\n\t\thighlightMesh.visible = false;\n\t\treturn;\n\t}\n\tconst {\n\t\tx,\n\t\ty,\n\t\tz\n\t} = hit.block.object.userData;\n\thighlightMesh.visible = true;\n\thighlightMesh.position.set(x + 0.5, y + 0.5, z + 0.5);\n}\n\nfunction saveWorld() {\n\ttry {\n\t\tconst blocks = [...world.values()].map((mesh) => mesh.userData);\n\t\tconst data = {\n\t\t\tblocks,\n\t\t\tplayer: {\n\t\t\t\tx: player.position.x,\n\t\t\t\ty: player.position.y,\n\t\t\t\tz: player.position.z,\n\t\t\t\tyaw: player.yaw,\n\t\t\t\tpitch: player.pitch\n\t\t\t},\n\t\t\tselectedBlockType\n\t\t};\n\t\tlocalStorage.setItem(saveKey, JSON.stringify(data));\n\t\tsetSaveState('saved');\n\t} catch {\n\t\tsetSaveState('save failed');\n\t}\n}\n\nfunction clearWorldMeshes() {\n\tfor (const mesh of [...world.values()]) scene.remove(mesh);\n\tworld.clear();\n}\n\nfunction loadWorld() {\n\tconst raw = localStorage.getItem(saveKey);\n\tif (!raw) {\n\t\tsetSaveState('no save');\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst data = JSON.parse(raw);\n\t\tclearWorldMeshes();\n\t\tfor (const b of data.blocks) addBlock(b.x, b.y, b.z, b.type);\n\n\t\tplayer.position.set(data.player.x, data.player.y, data.player.z);\n\t\tplayer.yaw = data.player.yaw || 0;\n\t\tplayer.pitch = data.player.pitch || 0;\n\t\tplayer.velocity.set(0, 0, 0);\n\t\tselectedBlockType = data.selectedBlockType || 'grass';\n\t\tselectBlock(selectedBlockType);\n\t\tupdateChunkVisibility(true);\n\t\tsetSaveState('loaded');\n\t} catch {\n\t\tsetSaveState('load failed');\n\t}\n}\n\nconst clock = new THREE.Clock();\n\nfunction animate() {\n\trequestAnimationFrame(animate);\n\tconst dt = Math.min(clock.getDelta(), 0.05);\n\tconst t = clock.elapsedTime * 0.05;\n\n\tconst daylight = 0.58 + Math.sin(t) * 0.24;\n\tscene.fog.near = 42;\n\tscene.fog.far = 195 + daylight * 30;\n\tsun.position.x = Math.sin(t) * 50;\n\tsun.position.y = 30 + Math.cos(t) * 20;\n\tsun.intensity = 0.82 + Math.max(0, daylight) * 0.62;\n\tambient.intensity = 0.56 + Math.max(0, daylight) * 0.58;\n\tsky.material.uniforms.topColor.value.setHSL(0.58, 0.78, 0.5 + daylight * 0.14);\n\tsky.material.uniforms.bottomColor.value.setHSL(0.56, 0.52, 0.9 - Math.max(0, -daylight) * 0.18);\n\n\tif (gameActive) {\n\t\tmovePlayer(dt);\n\t\tupdateBlockHighlight();\n\t} else {\n\t\thighlightMesh.visible = false;\n\t}\n\n\tupdateChunkVisibility();\n\tcamera.position.copy(player.position);\n\tcamera.rotation.order = 'YXZ';\n\tcamera.rotation.y = player.yaw;\n\tcamera.rotation.x = player.pitch;\n\tsun.target.position.copy(player.position);\n\tsky.position.copy(player.position);\n\n\trenderer.render(scene, camera);\n}\n\nanimate();\n\nfunction resize() {\n\tcamera.aspect = window.innerWidth / window.innerHeight;\n\tcamera.updateProjectionMatrix();\n\trenderer.setSize(window.innerWidth, window.innerHeight);\n}\n\nwindow.addEventListener('resize', resize);\nwindow.addEventListener('orientationchange', () => setTimeout(resize, 120));"},{"name":"style.css","content":":root {\n\tcolor-scheme: dark;\n\tfont-family: Inter, system-ui, sans-serif;\n\t--ui-bg: rgba(12, 16, 24, 0.62);\n\t--ui-border: rgba(255, 255, 255, 0.14);\n\t--ui-border-strong: rgba(255, 255, 255, 0.26);\n\t--ui-text: #f4f7ff;\n\t--ui-muted: rgba(244, 247, 255, 0.78);\n\t--accent: #7cff7c;\n\t--accent-soft: rgba(124, 255, 124, 0.18);\n\t--danger: #ff847c;\n\t--shadow: 0 18px 40px rgba(0, 0, 0, 0.34);\n\t--shadow-soft: 0 10px 24px rgba(0, 0, 0, 0.22);\n\t--overlay-glow: rgba(124, 255, 124, 0.22);\n\t--sky-top: #6fb7ff;\n\t--sky-bottom: #dff4ff;\n}\n\n* {\n\tbox-sizing: border-box;\n\t-webkit-tap-highlight-color: transparent;\n}\n\nhtml,\nbody {\n\tmargin: 0;\n\twidth: 100%;\n\theight: 100%;\n\toverflow: hidden;\n\tbackground: linear-gradient(180deg, var(--sky-top), var(--sky-bottom));\n\ttouch-action: none;\n}\n\nbody {\n\tfont-family: Inter, system-ui, sans-serif;\n\toverscroll-behavior: none;\n\tuser-select: none;\n}\n\ncanvas {\n\tdisplay: block;\n\tposition: absolute;\n\tinset: 0;\n\twidth: 100%;\n\theight: 100%;\n\tz-index: 0;\n}\n\nbutton {\n\tfont: inherit;\n}\n\n#game {\n\tposition: fixed;\n\tinset: 0;\n\toverflow: hidden;\n\tbackground: linear-gradient(180deg, var(--sky-top), var(--sky-bottom));\n}\n\n#overlay {\n\tposition: absolute;\n\tinset: 0;\n\tdisplay: grid;\n\tplace-items: center;\n\tpadding: 1.25rem;\n\tbackground:\n\t\tradial-gradient(circle at 20% 20%, rgba(124, 255, 124, 0.12), transparent 28%),\n\t\tradial-gradient(circle at 80% 18%, rgba(255, 255, 255, 0.08), transparent 26%),\n\t\tlinear-gradient(180deg, rgba(8, 11, 18, 0.3), rgba(8, 11, 18, 0.84));\n\tz-index: 30;\n}\n\n#overlay.hidden {\n\tdisplay: none;\n}\n\n.overlay__panel {\n\tposition: relative;\n\toverflow: hidden;\n\twidth: min(100%, 34rem);\n\tdisplay: grid;\n\tgap: 0.9rem;\n\tpadding: 1.45rem 1.2rem;\n\tborder: 1px solid var(--ui-border);\n\tborder-radius: 1.6rem;\n\tbackground: linear-gradient(180deg, rgba(24, 30, 44, 0.84), rgba(11, 15, 23, 0.88));\n\tbackdrop-filter: blur(14px);\n\tbox-shadow: var(--shadow), 0 0 0 1px rgba(255, 255, 255, 0.05) inset;\n\tcolor: white;\n\ttext-align: center;\n}\n\n.overlay__panel::before {\n\tcontent: \"\";\n\tposition: absolute;\n\tinset: -20% auto auto -10%;\n\twidth: 12rem;\n\theight: 12rem;\n\tborder-radius: 50%;\n\tbackground: radial-gradient(circle, var(--overlay-glow), transparent 70%);\n\tpointer-events: none;\n}\n\n.overlay__panel::after {\n\tcontent: \"\";\n\tposition: absolute;\n\tinset: auto -8% -18% auto;\n\twidth: 13rem;\n\theight: 13rem;\n\tborder-radius: 50%;\n\tbackground: radial-gradient(circle, rgba(94, 164, 255, 0.16), transparent 72%);\n\tpointer-events: none;\n}\n\n.overlay__eyebrow,\n.overlay__stats,\n.overlay__actions,\n#overlay h1,\n.overlay__subtitle,\n#overlay ul {\n\tposition: relative;\n\tz-index: 1;\n}\n\n.overlay__eyebrow {\n\tjustify-self: center;\n\tpadding: 0.38rem 0.7rem;\n\tborder: 1px solid rgba(255, 255, 255, 0.16);\n\tborder-radius: 999px;\n\tbackground: rgba(255, 255, 255, 0.06);\n\tfont-size: 0.76rem;\n\tfont-weight: 700;\n\tletter-spacing: 0.12em;\n\ttext-transform: uppercase;\n\tcolor: rgba(255, 255, 255, 0.88);\n}\n\n#overlay h1 {\n\tmargin: 0;\n\tfont-size: clamp(2.1rem, 6vw, 4.4rem);\n\tline-height: 0.95;\n\tletter-spacing: -0.04em;\n\ttext-shadow: 0 8px 24px rgba(0, 0, 0, 0.35);\n}\n\n.overlay__subtitle {\n\tmargin: 0;\n\tfont-size: 0.98rem;\n\tcolor: var(--ui-muted);\n\tletter-spacing: 0.04em;\n\ttext-transform: uppercase;\n}\n\n.overlay__stats {\n\tdisplay: grid;\n\tgrid-template-columns: repeat(3, minmax(0, 1fr));\n\tgap: 0.65rem;\n}\n\n.overlay__stat {\n\tdisplay: grid;\n\tgap: 0.24rem;\n\tpadding: 0.72rem 0.6rem;\n\tborder: 1px solid rgba(255, 255, 255, 0.1);\n\tborder-radius: 1rem;\n\tbackground: rgba(255, 255, 255, 0.05);\n\tbox-shadow: var(--shadow-soft);\n}\n\n.overlay__stat strong {\n\tfont-size: 0.92rem;\n}\n\n.overlay__stat span {\n\tfont-size: 0.75rem;\n\tcolor: rgba(255, 255, 255, 0.74);\n}\n\n#overlay ul {\n\tmargin: 0;\n\tpadding: 0.85rem 0.9rem;\n\tlist-style: none;\n\tdisplay: grid;\n\tgap: 0.5rem;\n\tborder: 1px solid rgba(255, 255, 255, 0.1);\n\tborder-radius: 1rem;\n\tbackground: rgba(255, 255, 255, 0.04);\n\ttext-align: left;\n\tfont-size: 0.96rem;\n\tcolor: rgba(255, 255, 255, 0.92);\n}\n\n#startBtn,\n.mobile-btn,\n.mobile-action {\n\tappearance: none;\n\tborder: 1px solid var(--ui-border-strong);\n\tcolor: var(--ui-text);\n\tbackground: linear-gradient(180deg, rgba(255, 255, 255, 0.16), rgba(255, 255, 255, 0.06));\n\tbackdrop-filter: blur(10px);\n\tbox-shadow: var(--shadow);\n}\n\n.overlay__actions {\n\tdisplay: grid;\n\tgap: 0.5rem;\n}\n\n#startBtn {\n\tborder-radius: 999px;\n\tpadding: 0.95rem 1.4rem;\n\tfont-weight: 800;\n\tletter-spacing: 0.01em;\n\ttransition: transform 0.18s ease, box-shadow 0.18s ease, filter 0.18s ease;\n\tbackground: linear-gradient(180deg, #9cff84, #62d85b);\n\tcolor: #102010;\n\tborder-color: rgba(255, 255, 255, 0.28);\n\tbox-shadow: 0 14px 28px rgba(80, 180, 70, 0.26), 0 0 0 1px rgba(255, 255, 255, 0.08) inset;\n}\n\n#startBtn:hover,\n#startBtn:focus-visible {\n\ttransform: translateY(-1px);\n\tfilter: brightness(1.04);\n}\n\n.overlay__hint {\n\tmargin: 0;\n\tfont-size: 0.78rem;\n\tcolor: rgba(255, 255, 255, 0.64);\n}\n\n#hud {\n\tposition: absolute;\n\tinset: 0;\n\tpointer-events: none;\n\tz-index: 20;\n}\n\n#game>canvas {\n\tpointer-events: auto;\n}\n\n#crosshair {\n\tposition: absolute;\n\tleft: 50%;\n\ttop: 50%;\n\twidth: 28px;\n\theight: 28px;\n\ttransform: translate(-50%, -50%);\n\tz-index: 12;\n\tfilter: drop-shadow(0 0 8px rgba(0, 0, 0, 0.8));\n}\n\n#crosshair::before,\n#crosshair::after {\n\tcontent: \"\";\n\tposition: absolute;\n\tleft: 50%;\n\ttop: 50%;\n\tbackground: #fff;\n\ttransform: translate(-50%, -50%);\n\tborder-radius: 999px;\n}\n\n#crosshair::before {\n\twidth: 3px;\n\theight: 28px;\n\tbox-shadow: 0 0 0 1px rgba(0, 0, 0, 0.45);\n}\n\n#crosshair::after {\n\twidth: 28px;\n\theight: 3px;\n\tbox-shadow: 0 0 0 1px rgba(0, 0, 0, 0.45);\n}\n\n#hudTop,\n#mobileTopActions {\n\tposition: absolute;\n\ttop: env(safe-area-inset-top, 0);\n\tpadding-top: 0.9rem;\n}\n\n#hudTop {\n\tleft: 1rem;\n\tdisplay: grid;\n\tgap: 0.5rem;\n\tcolor: white;\n\tfont-weight: 700;\n\ttext-shadow: 0 2px 10px rgba(0, 0, 0, 0.8);\n}\n\n#health,\n#saveState {\n\tpadding: 0.5rem 0.78rem;\n\tborder-radius: 0.85rem;\n\tbackground: linear-gradient(180deg, rgba(15, 19, 28, 0.8), rgba(15, 19, 28, 0.58));\n\tborder: 1px solid var(--ui-border);\n\tbackdrop-filter: blur(8px);\n}\n\n#mobileTopActions {\n\tright: 1rem;\n\tdisplay: flex;\n\tgap: 0.55rem;\n\tpointer-events: auto;\n}\n\n.mobile-btn {\n\tpadding: 0.72rem 0.92rem;\n\tborder-radius: 999px;\n\tfont-weight: 700;\n\tmin-width: 4.3rem;\n}\n\n#hotbarWrap {\n\tposition: absolute;\n\tleft: 50%;\n\tbottom: max(1rem, env(safe-area-inset-bottom, 0px));\n\ttransform: translateX(-50%);\n\twidth: min(100vw - 1rem, 42rem);\n\tpointer-events: none;\n}\n\n#hotbar {\n\tdisplay: flex;\n\tgap: 0.55rem;\n\tpadding: 0.7rem;\n\tborder-radius: 1.15rem;\n\tbackground: linear-gradient(180deg, rgba(20, 23, 31, 0.74), rgba(14, 16, 22, 0.58));\n\tbackdrop-filter: blur(10px);\n\tpointer-events: auto;\n\tbox-shadow: 0 14px 38px rgba(0, 0, 0, 0.32);\n\toverflow-x: auto;\n\tscrollbar-width: none;\n}\n\n#hotbar::-webkit-scrollbar {\n\tdisplay: none;\n}\n\n.slot {\n\tappearance: none;\n\tposition: relative;\n\tdisplay: grid;\n\tjustify-items: center;\n\tgap: 0.45rem;\n\tmin-width: 82px;\n\tpadding: 0.55rem 0.5rem 0.65rem;\n\tborder: 2px solid rgba(255, 255, 255, 0.16);\n\tbackground: linear-gradient(180deg, rgba(255, 255, 255, 0.12), rgba(255, 255, 255, 0.06));\n\tcolor: white;\n\tborder-radius: 0.9rem;\n\tfont-weight: 700;\n\tcursor: pointer;\n\ttransition: transform 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;\n}\n\n.slot.active {\n\tborder-color: var(--accent);\n\tbackground: linear-gradient(180deg, rgba(124, 255, 124, 0.18), rgba(255, 255, 255, 0.08));\n\tbox-shadow: 0 0 0 2px rgba(124, 255, 124, 0.18) inset, 0 10px 24px rgba(0, 0, 0, 0.28);\n}\n\n.slotKey {\n\tposition: absolute;\n\ttop: 0.35rem;\n\tleft: 0.4rem;\n\tpadding: 0.12rem 0.34rem;\n\tborder-radius: 999px;\n\tfont-size: 0.72rem;\n\tline-height: 1;\n\tbackground: rgba(0, 0, 0, 0.4);\n\tcolor: rgba(255, 255, 255, 0.92);\n}\n\n.slotPreview {\n\twidth: 42px;\n\theight: 42px;\n\tmargin-top: 0.35rem;\n\tborder-radius: 0.45rem;\n\tborder: 1px solid rgba(255, 255, 255, 0.16);\n\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.18), 0 4px 12px rgba(0, 0, 0, 0.22);\n\tbackground-size: cover;\n\tbackground-position: center;\n}\n\n.slotLabel {\n\tfont-size: 0.8rem;\n\tletter-spacing: 0.02em;\n\tcolor: rgba(255, 255, 255, 0.94);\n}\n\n.slot--grass .slotPreview {\n\tbackground:\n\t\tlinear-gradient(180deg, #78d64d 0 34%, #5baa34 34% 48%, #7a5a3a 48% 100%),\n\t\trepeating-linear-gradient(45deg, rgba(255, 255, 255, 0.08) 0 4px, rgba(0, 0, 0, 0.08) 4px 8px);\n}\n\n.slot--dirt .slotPreview {\n\tbackground:\n\t\tradial-gradient(circle at 25% 30%, #9a7953 0 10%, transparent 11%),\n\t\tradial-gradient(circle at 70% 62%, #5b4128 0 10%, transparent 11%),\n\t\tradial-gradient(circle at 52% 24%, #7f5d3c 0 12%, transparent 13%),\n\t\tlinear-gradient(135deg, #8b6845, #6a4b2f);\n}\n\n.slot--stone .slotPreview {\n\tbackground:\n\t\tradial-gradient(circle at 28% 28%, #c4c7ce 0 9%, transparent 10%),\n\t\tradial-gradient(circle at 64% 64%, #70747d 0 10%, transparent 11%),\n\t\tradial-gradient(circle at 72% 24%, #9ea3ac 0 9%, transparent 10%),\n\t\tlinear-gradient(135deg, #9ba0a8, #6e727a);\n}\n\n.slot--wood .slotPreview {\n\tbackground:\n\t\trepeating-linear-gradient(0deg, rgba(91, 54, 20, 0.45) 0 3px, rgba(169, 111, 58, 0.18) 3px 6px),\n\t\tlinear-gradient(135deg, #b17337, #7a4d24);\n}\n\n.slot--leaves .slotPreview {\n\tbackground:\n\t\tradial-gradient(circle at 28% 30%, #6fe27d 0 10%, transparent 11%),\n\t\tradial-gradient(circle at 68% 38%, #2f8f3a 0 13%, transparent 14%),\n\t\tradial-gradient(circle at 52% 72%, #46b853 0 12%, transparent 13%),\n\t\tlinear-gradient(135deg, #3ea548, #226b2b);\n}\n\n.slot--water .slotPreview {\n\tbackground:\n\t\tlinear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0.05)),\n\t\trepeating-linear-gradient(135deg, rgba(255, 255, 255, 0.14) 0 5px, rgba(255, 255, 255, 0.02) 5px 10px),\n\t\tlinear-gradient(135deg, #5ea4ff, #2f63c8);\n}\n\n#mobileControls {\n\tposition: absolute;\n\tleft: 0;\n\tright: 0;\n\tbottom: calc(6.7rem + env(safe-area-inset-bottom, 0px));\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: flex-end;\n\tpadding: 0 1rem;\n\tpointer-events: none;\n\tz-index: 21;\n}\n\n#joystickZone,\n#mobileActions {\n\tpointer-events: auto;\n}\n\n#joystickZone {\n\twidth: min(40vw, 170px);\n\theight: min(40vw, 170px);\n\tdisplay: grid;\n\tplace-items: center;\n}\n\n#joystickBase {\n\tposition: relative;\n\twidth: min(34vw, 138px);\n\theight: min(34vw, 138px);\n\tborder-radius: 50%;\n\tbackground: radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.1), rgba(15, 18, 28, 0.38));\n\tborder: 1px solid rgba(255, 255, 255, 0.14);\n\tbackdrop-filter: blur(10px);\n\tbox-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.04), var(--shadow);\n}\n\n#joystickKnob {\n\tposition: absolute;\n\tleft: 50%;\n\ttop: 50%;\n\twidth: min(15vw, 62px);\n\theight: min(15vw, 62px);\n\tborder-radius: 50%;\n\ttransform: translate(-50%, -50%);\n\tbackground: radial-gradient(circle at 35% 30%, rgba(255, 255, 255, 0.28), rgba(255, 255, 255, 0.08));\n\tborder: 1px solid rgba(255, 255, 255, 0.2);\n\tbox-shadow: 0 10px 24px rgba(0, 0, 0, 0.32);\n}\n\n#mobileActions {\n\tdisplay: grid;\n\tgap: 0.8rem;\n\tjustify-items: end;\n}\n\n.mobileActions__cluster {\n\tdisplay: flex;\n\tgap: 0.75rem;\n}\n\n.mobile-action {\n\tmin-width: 4.8rem;\n\tmin-height: 4.8rem;\n\tpadding: 0.9rem;\n\tborder-radius: 1.2rem;\n\tfont-weight: 800;\n\tpointer-events: auto;\n}\n\n.mobile-action--wide {\n\tmin-width: 5.6rem;\n}\n\n#lookZone {\n\tposition: absolute;\n\tright: 0;\n\ttop: 0;\n\twidth: 52vw;\n\theight: calc(100% - 7.2rem - env(safe-area-inset-bottom, 0px));\n\tpointer-events: auto;\n\tbackground: transparent;\n\tz-index: 19;\n}\n\nbody:not(.is-mobile) #mobileControls,\nbody:not(.is-mobile) #mobileTopActions,\nbody:not(.is-mobile) #lookZone {\n\tdisplay: none;\n}\n\n.is-mobile #crosshair {\n\topacity: 0.92;\n}\n\n@media (max-width: 900px) {\n\t#hudTop {\n\t\tleft: 0.7rem;\n\t\tpadding-top: 0.7rem;\n\t}\n\n\t#mobileTopActions {\n\t\tright: 0.7rem;\n\t\tpadding-top: 0.7rem;\n\t}\n\n\t#health,\n\t#saveState {\n\t\tfont-size: 0.88rem;\n\t\tpadding: 0.46rem 0.66rem;\n\t}\n\n\t.mobile-btn {\n\t\tpadding: 0.68rem 0.84rem;\n\t\tfont-size: 0.88rem;\n\t}\n\n\t#hotbarWrap {\n\t\twidth: calc(100vw - 0.8rem);\n\t\tbottom: max(0.4rem, env(safe-area-inset-bottom, 0px));\n\t}\n\n\t#hotbar {\n\t\tgap: 0.42rem;\n\t\tpadding: 0.5rem;\n\t\tborder-radius: 1rem;\n\t}\n\n\t.slot {\n\t\tmin-width: 68px;\n\t\tpadding: 0.44rem 0.38rem 0.54rem;\n\t}\n\n\t.slotPreview {\n\t\twidth: 34px;\n\t\theight: 34px;\n\t}\n\n\t.slotLabel {\n\t\tfont-size: 0.7rem;\n\t}\n\n\t.slotKey {\n\t\tfont-size: 0.65rem;\n\t}\n\n\t#mobileControls {\n\t\tpadding: 0 0.7rem;\n\t\tbottom: calc(5.9rem + env(safe-area-inset-bottom, 0px));\n\t}\n\n\t.mobile-action {\n\t\tmin-width: 4.2rem;\n\t\tmin-height: 4.2rem;\n\t\tborder-radius: 1rem;\n\t\tfont-size: 0.9rem;\n\t}\n}\n\n@media (max-width: 560px) {\n\t.overlay__panel {\n\t\tpadding: 1.1rem 0.95rem;\n\t\tgap: 0.75rem;\n\t}\n\n\t.overlay__stats {\n\t\tgrid-template-columns: 1fr;\n\t}\n\n\t#overlay ul {\n\t\tfont-size: 0.88rem;\n\t}\n\n\t#crosshair {\n\t\twidth: 22px;\n\t\theight: 22px;\n\t}\n\n\t#crosshair::before {\n\t\theight: 22px;\n\t}\n\n\t#crosshair::after {\n\t\twidth: 22px;\n\t}\n}"}],"folders":[]},"variants":null,"createdAt":"2026-03-06T17:23:50.314Z","updatedAt":"2026-03-06T23:28:38.700Z"}}