/* ============================================================================ theme.css — the stock theme (PLAN.md §7) THIS FILE IS DELIBERATELY EMPTY OF RULES. It is loaded last on every page, after the site's own stylesheet, so anything it declares wins. The stock site needs to override nothing, so the stock copy overrides nothing — an empty mount and a stock deployment must produce the same pixels, and the simplest way to guarantee that is for the default to say nothing at all. It ships anyway, rather than being absent, for two reasons: the `` in every page's head must resolve to a stylesheet rather than a 404, and this is the file an operator copies out, edits and mounts back. What follows is the whole reference they need. ---------------------------------------------------------------------------- HOW TO RECOLOUR THIS SITE ---------------------------------------------------------------------------- Copy this file into the directory bind-mounted at /app/brand, uncomment the block below, change the values, and restart the container. No rebuild, no image push. Every asset and every field resolves against the mount first and the baked-in defaults second, per file, so overriding theme.css alone leaves the logo, the icons and the text exactly as they are. docker cp :/app/brand-default/theme.css ./brand/theme.css $EDITOR ./brand/theme.css docker compose restart Only custom properties belong here. Every colour, radius, shadow and font in the site is one, defined in a single file, and `scripts/checkTokens.mjs` fails the build if a literal ever appears anywhere else — so there is no corner of the design this file cannot reach. Ordinary CSS rules will work, but they are the thing that breaks on the next release; properties are the supported surface. Names match the product's own `client/src/styles/theme.css` where the concepts line up, so a theme written for a Runic Gateway deployment is legible here and mostly portable. ---------------------------------------------------------------------------- :root { --bg: #0e1318; Page ground --bg-deep: #0b0f14; Header and footer ground --panel-a: #192231; Panel gradient, top --panel-b: #141a21; Panel gradient, bottom --panel-flat: #11161d; Flat panels, code blocks --line: #2a3544; Borders --line-soft: #1d2733; Hairlines and dividers --accent: #7f99bd; Links and interface emphasis --ink: #eef3f8; Brightest text --head: #e6edf6; Headings --text: #c4cdd8; Body copy --muted: #aeb8c4; Secondary copy --dim: #6f7d8e; Captions and metadata --gold: #c8a368; Emphasis, rules, the display face --gold-deep: #946b3c; Gold borders. Too dark for text. --gold-bright: #e4cb90; Highlights on gold --portal: #15b4de; The live-state signal and diagram lines --portal-deep: #0b6398; Glow fills. Too dark for text. --portal-bright: #1bd6f1; --danger: #ff4e43; Errors and destructive actions --mode-live: #5fb98a; Status pill: running --mode-maint: #e6c26a; Status pill: maintenance --display: 'Cinzel Variable', Georgia, serif; --sans: 'Inter Variable', system-ui, sans-serif; --mono: ui-monospace, Consolas, monospace; --radius-pill: 999px; --radius-panel: 12px; --radius-card: 10px; --radius-input: 8px; --measure: 68ch; Reading measure --page-max: 1180px; Content column --gutter: 24px; --header-h: 68px; } The documentation pages carry a light theme as well, because §11 has the docs honour the reader's preference while the marketing pages stay dark. Those values are separate properties, so a light-mode change does not disturb the dark one: :root { --light-bg: #f6f8fb; --light-panel: #ffffff; --light-line: #d6dee9; --light-ink: #16202c; --light-text: #33414f; --light-muted: #5a6875; --light-accent: #3c5f8f; --light-gold: #7a5a24; --light-portal: #0a5f80; } TWO THINGS THIS FILE CANNOT DO ---------------------------------------------------------------------------- The logo is artwork, not a colour. It is raster art shared with the product's own site and the Android launcher icon, so no property recolours it — replace `logo.png` in the mount instead, and the header mark, the favicon, the install icons and every other size follow from that one file. Contrast is not checked for you. The stock palette is held to WCAG AA against the stock ground, and each value's measured ratio is recorded next to it in `src/styles/tokens.css`. Change the ground without changing the ink and that guarantee is gone, silently. ============================================================================ */