# Build a game for nevergonna.s25.nanosrv.top

You are being asked to build one complete, self-contained browser game and publish it. Read this whole file first, then build it in one pass. Do not stop to ask questions - every decision you need is below.

## The brief

| field | value |
|---|---|
| Title | **YOUR GAME** |
| Folder / URL slug | `your-game` |
| Theme colour | `#7c5cff` |
| Concept | A fake leaked build of a famous unreleased game. Pick one and commit to the joke. |

Use the theme colour as the dominant accent in the game's own art, so the game and its storefront card look like the same product.

## The host contract

Your game runs inside a page that owns the loading screen, the GAME OVER screen and what happens next. You talk to it through a global called `NG`, already loaded for you.

| call | when |
|---|---|
| `NG.ready({controls: [['\u2190 \u2192','move']]})` | once, as soon as you can render. The loader shows PLAY. |
| `NG.onStart(fn)` | `fn` runs when the player presses PLAY. Start your loop there, not before. |
| `NG.score(n)` | whenever the score changes. Drives score triggers and the site leaderboard. |
| `NG.lose({score: n})` | the instant the run ends. Then STOP your loop and leave the last frame up. |
| `NG.win({score: n})` | only if winning is genuinely possible. |

Also available, all optional: `NG.progress(loaded,total)`, `NG.onPause(fn)`,
`NG.onResume(fn)`, `NG.fit(canvas,w,h)`, `NG.keys()`, `NG.loop(update,render,hz)`,
`NG.beep({freq,to,dur,type,vol})`, `NG.noise({dur,freq,vol})`,
`NG.clamp/lerp/rand`.


## Hard requirements

- **Vanilla JavaScript and Canvas 2D.** No libraries, no build step, no
  imports, no bundler, no network requests, no external assets. Draw
  everything procedurally; synthesise all sound with the Web Audio API. The
  page runs in a sandboxed iframe with a strict CSP, so anything fetched from
  another origin is blocked and will simply not appear.
- **One folder**, exactly this shape:

  ```
  <slug>/
    index.html    canvas + <script src="/static/js/ng-sdk.js"> then game.js
    game.js       the whole game
  ```

  `index.html` must load the SDK **before** your script:

  ```html
  <!doctype html>
  <meta charset="utf-8">
  <title>YOUR TITLE</title>
  <style>html,body{margin:0;height:100%;background:#05060c;overflow:hidden}
         canvas{display:block}</style>
  <canvas id="c"></canvas>
  <script src="/static/js/ng-sdk.js"></script>
  <script src="./game.js"></script>
  ```

- **Fixed internal resolution** (960x600 works well), scaled to fit with
  `devicePixelRatio` handling. Letterbox, never stretch.
- **Fixed-timestep update loop** decoupled from rendering, so the game plays
  identically at 60 Hz and 144 Hz. `NG.loop(update, render, 60)` does this.
- **Looks good.** Parallax, particles, screen shake, glow, easing. Aim for
  "polished arcade", not programmer art.
- **Keyboard controls**, listed in your `NG.ready()` call so the site can show
  them on the PLAY screen.
- Audio must not start until the player presses a key - browsers block it
  otherwise, and the SDK already handles the unlock for you.

## The rig

This is a satire site. Every game is rigged, and the rig is the joke.

Play **fair for the first ten to twelve seconds** so it feels like a real
build. Then escalate until it is unwinnable. The escalation must look like a
**bug in a leaked build** - a spawn rate that runs away, physics that stops
being reasonable, a difficulty curve that was clearly never tuned - and never
like the game cheating the player. They should lose in about 30 seconds and
immediately want another go.

## What NOT to build

- **Do not implement the ending.** No "game over" screen, no redirect, no
  video, no countdown. Call `NG.lose()` and stop. The host page owns everything
  after that, and it is configured server-side.
- Do not ask for a name, a password, an email, or anything else.
- Do not use `localStorage`, cookies, or `fetch`.
- No copyrighted assets, no real logos, no ripped sprites. Everything is drawn
  in code. The parody is the point; infringement is not.


## Endings you do not have to build

For information only - the host does all of this:

- When you call `NG.lose()`, the player gets a **GAME OVER** panel with a randomly chosen insult and a CONTINUE button.
- Independently, this game is set to fake a **crash after roughly 13 seconds** of play, with a RESTART button. That will usually fire before the player loses, and that is intended. Build the game as though it will run to a natural loss anyway.
- Both buttons lead to the same place, which is configured server-side and is none of your game's business.

## Publishing it

Sign in at https://nevergonna.s25.nanosrv.top/account, then either upload the zipped folder there, or generate a personalised version of this file at https://nevergonna.s25.nanosrv.top/create that carries a token and lets your agent publish for you without leaving the terminal.

## Deliverable

Write both files in full. No placeholders, no TODOs, no "rest of the implementation here". The game must run when opened, and the run must end on its own.
