nemocity / web /index.html
AndresCarreon's picture
NEMOCITY v0 — mock backend, gradio 6.16.0 (pre-SSR)
d72231c verified
Raw
History Blame Contribute Delete
4.29 kB
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<title>NEMOCITY — ask for a building, watch it rise</title>
<meta name="description" content="One tiny persistent city the whole internet builds. Petition city hall — a 9B Nemotron reads it, the deterministic engine zones it, and everyone watches it rise." />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:wght@600;800&family=Schibsted+Grotesk:wght@400;500&family=Spline+Sans+Mono:wght@400;500&display=swap" rel="stylesheet" />
<link rel="stylesheet" href="./style.css" />
<script type="importmap">
{
"imports": {
"three": "./lib/three.module.js",
"three/addons/": "./lib/addons/"
}
}
</script>
</head>
<body>
<canvas id="scene" aria-label="Nemocity — a miniature shared city"></canvas>
<!-- museum placard: wordmark + stat chips -->
<header class="hud placard brand">
<h1 class="brand__mark">NEMOCITY</h1>
<p class="brand__tag">the tiny city the internet builds</p>
<div class="stats">
<span class="chip"><span class="chip__label">pop</span><span class="chip__num odo" id="hud-pop"></span></span>
<span class="chip"><span class="chip__label">bldgs</span><span class="chip__num" id="hud-buildings">0</span></span>
<span class="chip chip--traffic" id="chip-traffic"><span class="chip__label">traffic</span><span class="chip__num" id="hud-traffic">&ndash;</span></span>
<span class="chip"><span class="chip__label">clock</span><span class="chip__num" id="hud-clock">--:--</span></span>
<span class="chip chip--visitors" id="hud-visitors">built by 0 visitors</span>
</div>
</header>
<!-- mode buttons -->
<nav class="hud modes">
<button class="mode-btn" id="btn-walk" type="button" title="walk the streets (F)">walk</button>
<button class="mode-btn" id="btn-photo" type="button" title="hide the HUD for a clean shot (P)">photo</button>
<button class="mode-btn" id="btn-sound" type="button" aria-pressed="false" title="city sound (synthesized, off by default)">sound</button>
<button class="mode-btn" id="btn-heatmap" type="button" aria-pressed="false" title="congestion heatmap">heatmap</button>
</nav>
<!-- traffic alert chip -->
<div class="hud placard traffic-alert" id="traffic-alert" hidden>
<span class="traffic-alert__dot" aria-hidden="true"></span>
<span id="traffic-alert-text">Traffic alert</span>
<button id="btn-fix" type="button">Ask the City Engineer</button>
</div>
<!-- City Hall paperwork drawer: the raw Nemotron plan JSON per petition -->
<aside class="hud paperwork" id="paperwork">
<button class="paperwork__toggle" id="paperwork-toggle" type="button" aria-expanded="false">city hall paperwork</button>
<div class="paperwork__body" id="paperwork-body" role="log"></div>
</aside>
<!-- petition desk -->
<section class="hud petition">
<div class="queue-chip" id="queue-chip" hidden></div>
<div class="lifecycle" id="lifecycle"></div>
<form class="petition__form placard" id="petition-form" autocomplete="off">
<input class="petition__input" id="petition-input" type="text" maxlength="160"
placeholder="ask the city for a building&hellip;" aria-label="petition city hall" />
<button class="petition__send" id="petition-send" type="submit">Build</button>
</form>
<div class="toast" id="toast" hidden></div>
</section>
<!-- news ticker -->
<div class="hud ticker" id="ticker"><div class="ticker__inner" id="ticker-inner"></div></div>
<!-- FPV overlay (integration toggles via the nemocity:fpv event) -->
<div class="fpv-ui" id="fpv-ui" hidden>
<div class="fpv-ui__crosshair" aria-hidden="true"></div>
<div class="fpv-ui__hint">WASD to walk &middot; Shift to run &middot; ESC to exit</div>
</div>
<div class="photo-hint" id="photo-hint" aria-hidden="true">photo mode &mdash; press Esc to return</div>
<div class="status" id="status" role="status"></div>
<script type="module" src="./main.js"></script>
</body>
</html>