// neonForge design brief

QB #565 -- style guide and layout proposal // goulard3120 // 2026-05-07

1. current state audit

audited all 14 pages in /home/ubuntu/neonforge/pages/. findings:

what works

issues found

nav inconsistency

nav HTML is duplicated in every page file -- different pages have different link sets. home.html has 9 links, fischer.html has 6, statusboard.html has 6. new pages like dolphin.html and keymap.html are missing from most navs. this is the #1 pain point.

font size drift

body font-size varies: gallery.html uses 18px, most others use 16px. operator preference is 18px (per memory: "operator prefers 18px default font size in fischer3120.styles.1").

no shared CSS

every page redefines its own styles inline. common patterns (cards, footers, status badges, nav) are copy-pasted with minor drift. no CSS file or design tokens shared across pages.

nav should be server-injected

per neonForge README: "nav is defined ONCE in server.py NAV_HTML, injected at render time." but current pages all carry their own nav HTML. the server wrapping only applies to content-only pages (those without DOCTYPE). legacy full-HTML pages bypass it.

new pages not registered

pages like afterhours.html, ecoute2-audit.html, ecoute2-mockups.html, ecoute2Mobile.html, processFlow.html, terminal.html exist but are not in the server's valid[] list. they 404 when accessed via ?p= routing.

no agents page link

the /agents dynamic page (renders agent cards from JSON) is not linked in nav anywhere.

2. style guide -- fischer3120.styles.1

color palette

bg
#0a0a0a
surface
#111111
border
#333333
primary
#00ff41
accent
#ff6600
muted
#888888
dim
#555555
error
#ff4444

typography

elementcurrentproposed
font familyCourier New, monospacekeep
body size16px (some pages 18px)18px everywhere
line height1.7keep
h1 / page title22px orange24px orange
h2 / section16-18px orange, border-bottom20px orange, 2px border
body text#888 or #00ff41#888 body, #00ff41 data
footer#333, 11pxkeep

component patterns

componentspec
cardbg: #111, border: 2px solid #333, radius: 6px, padding: 14px. title: #ff6600 bold. body: #888.
nav linkpadding: 6px 10px, border: 1px solid #333, radius: 4px, font: 13px mono. hover: border #ff6600. active: bg #ff6600, text #0a0a0a.
status badgeinline-block, padding: 2px 8px, font: 11px uppercase, border-radius: 3px. live: green border+text. pending: orange. offline: red.
section headercolor: #ff6600, font-size: 18px bold, border-bottom: 2px solid #333, padding-bottom: 8px.
footermargin-top: 18px, text-align: center, color: #333, 11px, border-top: 1px solid #222, padding-top: 10px. format: "neonForge // {agent} // {date}"
info notebg: #111, border-left: 4px solid #ff6600, padding: 14px. strong text: #ff6600. body: #888.

layout rules

3. proposed fixes

phase 1: centralize nav (server-side)

update NAV_HTML in server.py with the complete link set. strip nav HTML from all existing pages. convert legacy full-HTML pages to content-only format so the server wraps them uniformly. this is the highest-impact change.

phase 2: register all pages

add missing pages to the valid[] list in server.py: dolphin, afterhours, ecoute2-audit, ecoute2-mockups, ecoute2Mobile, processFlow, terminal, agents (dynamic). total: 20 pages.

phase 3: normalize font sizes

set body font-size to 18px in the server's MOBILE_HEAD shell. remove per-page font-size overrides. operator preference is 18px.

phase 4: shared CSS file

extract common styles (cards, badges, footers, sections, notes) into /static/fischer.css. server injects the link tag in MOBILE_HEAD. pages only define page-specific styles.

phase 5: page-by-page cleanup

strip each page to content-only. remove duplicated nav, DOCTYPE, html/head tags. let server wrapping handle the shell. normalize card styles, section headers, footers to match style guide.

4. page inventory

pagein valid[]in navhas own navcontent-only
homeyesyesyes (legacy)no
galleryyesyesyes (legacy)no
criticalpathyesyesyes (legacy)no
statusboardyesyesyes (legacy)no
fischeryesyesyes (legacy)no
brickyesyesyes (legacy)no
keymapyesyesyes (legacy)no
devicepreviewyesyesyes (legacy)no
migrationyesyesyes (legacy)no
dolphinyesnonoyes
afterhoursnonoyesno
ecoute2-audityesno??
processFlownono??
terminalnono??
agents (dynamic)nonon/an/a

5. execution estimate

phasescoperisk
1. centralize navserver.py edit + strip 14 pagesmedium -- must not break existing pages
2. register pagesserver.py valid[] updatelow
3. normalize fontsMOBILE_HEAD editlow
4. shared CSSnew file + server editlow
5. page cleanup14 pages to content-onlymedium -- page-specific styles may break

neonForge design brief // goulard3120 // QB #565 // 2026-05-07
awaiting operator review. reply with "execute" to begin implementation.