Six named accent colors. All pages draw from this set exclusively. Background and text use theme-aware CSS variables.
Neutral colors use CSS variables: --bg · --surface · --border · --text · --text-dim · --text-muted.
Light is the default. A toggle in the top-right corner of every page switches between modes and saves the preference to localStorage. Mode is applied before first paint via an inline script in <head> to prevent flash.
html[data-theme="light"] is implicit. Dark mode is html[data-theme="dark"].(function(){var t=localStorage.getItem('theme')||'light';document.documentElement.dataset.theme=t;})()<button id="theme-toggle"> fixed top-right. Shows ☾ in light mode (click → dark), ☀ in dark mode (click → light).--bg:#fafafa · --surface:#fff · --border:#ddd · --border-hover:#999 · --text:#111 · --text-dim:#555 · --text-muted:#777--bg:#000 · --surface:#080808 · --border:#222 · --border-hover:#555 · --text:#eee · --text-dim:#666 · --text-muted:#999Canvas-based game pages (full-screen) are exempt from light mode — the canvas fills the viewport and theming has no visual effect.
games/. Decorative in-balloon letters may scale with balloon radius but never below 12px effective.#ffd700 · letter-spacing 0.22em--text-section (#888) · letter-spacing 0.18em · ALLCAPS--text-muted · letter-spacing 0.04em · sentence caseInline badge sits right of a card title. Progression: ALPHA → BETA → LIVE. DEPRECATED marks retired work.
#777 / border #333.#68ff9a / border 30% opacity.#ffd700 / border 30% opacity.#ff3232 / border 30% opacity.HTML: <span class="badge badge-beta">BETA</span> — inline after card-title text.
Primary navigation unit. Always an <a> tag — the whole surface is clickable.
00 for the primary entry point. Increment by 01. No gaps.card-0 #68ff9a · card-1 #ffd700 · card-2 #ff6699 · card-3 #44ccff. Assign by slot, not by content type.--text-dim at rest, --text on hover. Vertically centered via top:50%.Use when a card has a secondary download or action alongside the primary link. The card takes remaining space; the side link is fixed-width.
<a> inside <a>. The card and side link are siblings inside a .card-row flex container.← cupPCB link in the footer. Styled --text-dim, no underline. Format: <a href="../index.html">← cupPCB</a>· with spaces on either side. Footer text: sym²(x) · permacomputer.cupPCB // SECTION NAME or cupPCB · subsection. Allcaps after the separator.symmetric-embedding-workbench-whitepaper.pdf. Short aliases (e.g. whitepaper.pdf) are symlinks to the canonical slug — never the other way around.games/. Each game is a single self-contained HTML file. Index at games/index.html.pcb/docs/. Source is Markdown; build via make all in that directory.Every public URL lives in sitemap.xml at the root. Update it when adding or removing pages. Priority scale: root 1.0 · primary sections 0.9 · individual pages 0.7–0.8.