Build an original voxel sandbox game for the web, from scratch, in this empty directory.
It is a block-building game: the player walks around a procedurally generated world of cubes, breaks blocks and places new ones. Invent its name, its look and its colour palette. It must be original. Do not use the name, branding, textures, sounds, fonts, logos or any assets of any existing game (for example, never write "Minecraft" or "Mojang" anywhere). Generate every texture, colour and sound in code, or leave sound out.
## Hard constraints
1. Plain static files only: HTML, CSS and JavaScript (ES modules). No build step, no npm, no bundler, no server code. Opening the files from a static web server must be enough.
2. Use three.js only from this pinned URL, through an import map:
```html
```
No other network request is allowed: no other CDN, no web fonts, no images or sounds from the internet. Everything else lives in this directory or is generated in code.
3. Required files:
- `index.html`: the landing page;
- `game.html`: the game itself.
Put any other files you need (JavaScript modules, CSS) in this directory or its subdirectories.
4. Neither page may log an error to the browser console during normal use.
5. Create every WebGL renderer with `preserveDrawingBuffer: true` so that its canvas can be read back with `toDataURL`.
6. When you are done, write `NOTES.md`: the game's name, what works, what doesn't, and how to run it (`python3 -m http.server` in this directory, then open http://localhost:8000/).
7. Keep files small and modular. No file may be longer than about 300 lines. Split the game into separate ES modules, for example: world and terrain generation, player and movement, block interaction, UI and hotbar, effects, save and load, and small utilities. Write or change one module per tool call; never write the whole game in one file or one call. index.html and game.html stay short and import the modules.
8. Check what the pages really look like. After every change to a page or a module, run `look` in this directory. It opens index.html and game.html in a headless browser and reports, in plain text, console errors, blocked requests, a blank canvas, a page wider than a phone, and whether the ground looks see-through from above (missing block faces). It also saves screenshots to /tmp/look/; open them if you can read images. Fix every problem it reports before you move on.
## Working habits
These keep the work moving when your answers are cut short or a command hangs.
- Write at most about 150 lines in one tool call. Build a longer file (a test script too) in parts: create it with the first part, then add the rest in later calls.
- Start a web server in the background on a free port, for example `python3 -m http.server 8123 > /tmp/server.log 2>&1 &`, and note its PID. Stop it with `kill `. Never use `pkill` or `killall`: a name pattern can match and kill your own session. If a command does not return within about a minute, stop it and run it in the background.
- Take the gallery pictures only after the scene has drawn at least one frame and its textures have loaded. Then run `look` and check that no picture is a flat colour.
- Work in this order: the game playable first, then the landing page, then polish. Commit with git after each step that works.
- Before you stop, go through the feature list below once more, item by item, and check each one with `look` and `window.__game`.
## Features and acceptance criteria
Each feature is scored by automated browser tests. The IDs and attributes in `code` below are part of the spec: the tests look for them exactly.
### F1. Landing page (`index.html`)
A polished, modern, marketing-style page for your game. It must look good on a desktop and on a phone.
- A hero section with the game's title in an `