Files
sow-nodebb-theme/scss/westgate/_tokens.scss
T
archvillainetteandClaude Opus 5 ea36116e62 prototype(#53): palette candidates as runtime token swaps
Throwaway. Tokenises the theme's literal colours so candidate palettes can be
swapped in the browser, adds three candidates (Plum Noir one-metal, two-metal
pewter, two-metal plus a champagne inset), a WCAG checker, a seeder and the
screenshots they are judged on.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 16:31:41 +02:00

170 lines
5.6 KiB
SCSS

@font-face {
font-family: "Cinzel";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("./plugins/nodebb-theme-westgate/fonts/cinzel/cinzel-latin-400-normal.woff2") format("woff2");
}
@font-face {
font-family: "Cinzel";
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("./plugins/nodebb-theme-westgate/fonts/cinzel/cinzel-latin-500-normal.woff2") format("woff2");
}
@font-face {
font-family: "Cinzel";
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("./plugins/nodebb-theme-westgate/fonts/cinzel/cinzel-latin-600-normal.woff2") format("woff2");
}
@font-face {
font-family: "Cinzel";
font-style: normal;
font-weight: 700;
font-display: swap;
src: url("./plugins/nodebb-theme-westgate/fonts/cinzel/cinzel-latin-700-normal.woff2") format("woff2");
}
@font-face {
font-family: "Jost";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("./plugins/nodebb-theme-westgate/fonts/jost/jost-latin-400-normal.woff2") format("woff2");
}
@font-face {
font-family: "Jost";
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("./plugins/nodebb-theme-westgate/fonts/jost/jost-latin-600-normal.woff2") format("woff2");
}
@font-face {
font-family: "Jost";
font-style: italic;
font-weight: 400;
font-display: swap;
src: url("./plugins/nodebb-theme-westgate/fonts/jost/jost-latin-400-italic.woff2") format("woff2");
}
@font-face {
font-family: "IBM Plex Mono";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("./plugins/nodebb-theme-westgate/fonts/ibm-plex-mono/ibm-plex-mono-latin-400-normal.woff2") format("woff2");
}
@font-face {
font-family: "IBM Plex Mono";
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("./plugins/nodebb-theme-westgate/fonts/ibm-plex-mono/ibm-plex-mono-latin-500-normal.woff2") format("woff2");
}
:root {
--wg-space-2xs: 0.25rem;
--wg-space-xs: 0.5rem;
--wg-space-sm: 0.75rem;
--wg-space-md: 1rem;
--wg-space-lg: 1.5rem;
--wg-space-xl: 2rem;
--wg-ledger-line: 1.78rem;
--wg-page-width: 1420px;
--wg-font-display: "Cinzel", Georgia, "Times New Roman", serif;
--wg-font-text: "Jost", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
--wg-font-ui: "Jost", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
--wg-font-code: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
--wg-bg: #0f0d12;
--wg-bg-deep: #09080b;
--wg-panel: #18141d;
--wg-panel-2: #110f15;
--wg-panel-3: #201924;
--wg-plum: #2a1222;
--wg-plum-soft: #3a1830;
--wg-gold: #c2a35a;
--wg-gold-soft: #a8893f;
--wg-gold-lit: #e0c878;
--wg-gold-hi: #fff4dd;
--wg-gold-plate: #5a4a1a;
--wg-gold-plate-hover: #6a5720;
--wg-gold-plate-mid: #53431a;
--wg-gold-plate-deep: #473914;
--wg-red: #8e3438;
/* prototype (#53): rgb triples so alpha uses swap with the palette candidate */
--wg-gold-rgb: 194, 163, 90;
--wg-ledger-ink-rgb: 216, 194, 138;
--wg-bg-deep-rgb: 9, 8, 11;
--wg-bg-deepest-rgb: 8, 7, 10;
--wg-plum-rgb: 42, 18, 34;
--wg-red-rgb: 142, 52, 56;
--wg-stamp-rgb: 168, 74, 78;
--wg-status-online: #7fb86a;
--wg-status-away: #d9b44a;
--wg-status-dnd: #c55a5f;
--wg-status-offline: #b7b0a6;
--wg-status-ring: rgba(var(--wg-bg-deep-rgb), 0.9);
--wg-text: #e6e0d6;
--wg-text-soft: #b9b2a6;
--wg-text-muted: #9a9086;
--wg-border: rgba(var(--wg-gold-rgb), 0.14);
--wg-border-soft: rgba(var(--wg-gold-rgb), 0.08);
--wg-focus: rgba(var(--wg-gold-rgb), 0.28);
--wg-focus-ring: #c2a35a;
--wg-ledger-panel: rgba(21, 17, 26, 0.97);
--wg-ledger-ruling: rgba(var(--wg-gold-rgb), 0.055);
--wg-ledger-rule-strong: rgba(var(--wg-gold-rgb), 0.16);
--wg-ledger-border: rgba(var(--wg-gold-rgb), 0.18);
--wg-ledger-ink: #d8c28a;
--wg-ledger-ink-muted: #a99d8f;
--wg-ledger-stamp: #a84a4e;
--wg-ledger-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.024), inset 0 -1px 0 rgba(0, 0, 0, 0.42), 0 8px 18px rgba(0, 0, 0, 0.2);
--wg-etched-highlight: rgba(246, 223, 163, 0.34);
--wg-etched-shadow: rgba(23, 12, 16, 0.82);
--wg-velvet-panel: rgba(24, 20, 29, 0.97);
--wg-velvet-panel-hover: rgba(31, 26, 38, 0.98);
--wg-velvet-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.025), inset 0 0 34px rgba(96, 32, 68, 0.11), 0 10px 26px rgba(0, 0, 0, 0.24);
--wg-control-bg: linear-gradient(to bottom, rgba(var(--wg-gold-rgb), 0.15), rgba(var(--wg-gold-rgb), 0.05));
}
::selection {
background: rgba(var(--wg-gold-rgb), 0.32);
color: #fff4dd;
}
/* Harmony base-theme font correction.
Harmony generates @font-face for Inter/Poppins at our asset path and points
$font-family-sans-serif -> "Inter" and $font-family-secondary -> "Poppins"
in its own overrides.scss. We ship Jost + Cinzel, not those families, and do
not declare @fontsource/inter|poppins as deps -- so any element that resolves
to Inter/Poppins 404s in production on /assets/plugins/nodebb-theme-westgate/
inter/... (it only happens to resolve in dev via npm hoisting). Our BS-variable
override already keeps the current cascade on Jost, but that hinges on subtle
import order; pin the handful of Harmony rules that read those SCSS variables
directly (.ff-sans, .ff-secondary, the breadcrumb divider) to our own fonts so
nothing can request Inter/Poppins even if a Harmony bump flips the order. The
now-pointless inter/poppins staticDirs are removed from plugin.json alongside. */
.ff-sans {
font-family: var(--wg-font-ui) !important;
}
.ff-secondary {
font-family: var(--wg-font-display);
}
.breadcrumb .breadcrumb-item {
font-family: var(--wg-font-display);
}
.breadcrumb .breadcrumb-item::before {
font-family: var(--wg-font-ui);
}