feat(01-design-tokens-rams-foundation-01): Telemetry Rams token package — tokens, self-hosted fonts, v4 build

- tokens.css: @theme static with the full verbatim vocabulary from telemetry_rams/DESIGN.md — 55 colors, 10 spacing (8px grid), 4 font-family aliases, 9 zero-radius tokens; typography scale as :root compound vars (--type-*, 13 tokens x font shorthand + tracking companion)
- theme.css: @import tailwindcss + tokens, @source the mockup screens (vocabulary candidates, D-02/D-06) + safelisted font-geist/font-space-grotesk, 7 self-hosted @font-face blocks (Geist 400/500/600/700, Space Grotesk 400/600/700, woff2 from Fontsource, font-display block), Telegram light/dark shell slots (D-04)
- fonts: 7 woff2 files under theme/fonts/ (D-16 — no Google Fonts CDN)
- package-lock.json: pins tailwindcss 4.3.3 + @tailwindcss/cli 4.3.3 + playwright 1.64.1
This commit is contained in:
araharah-executor
2026-10-22 07:37:18 +08:00
parent 8dea270bbe
commit 2b36b37df1
10 changed files with 1464 additions and 0 deletions
+1210
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+96
View File
@@ -0,0 +1,96 @@
/*
* @araharah/theme — entry stylesheet (Tailwind v4, CSS-first)
* ------------------------------------------------------------------
* Build: npm run build → dist/rams.css (D-17: local npm scripts only)
* Tokens: @import-ed from tokens.css — the single source of truth
* for every value (D-01, D-07).
*
* No Google Fonts CDN — Geist + Space Grotesk are self-hosted from
* theme/fonts/ (D-16), fetched from Fontsource static subsets
* (both typefaces are SIL Open Font License 1.1).
*/
@import "tailwindcss";
@import "./tokens.css";
/*
* Class candidates (D-02, D-06): the four mockup screens are the
* read-only vocabulary reference — their markup is scanned so every
* mockup class compiles from this package; the mockup files themselves
* are never edited. Family utilities are safelisted explicitly because
* the mockups address fonts through their inline config instead.
*/
@source "../../stitch_minimalist_route_navigator";
@source inline("font-geist");
@source inline("font-space-grotesk");
/*
* Self-hosted typefaces — font-display: block (no fallback-font flash;
* Rams: surfaces behave like machined housing, nothing flickers).
*/
@font-face {
font-family: "Geist";
font-style: normal;
font-weight: 400;
font-display: block;
src: url("../fonts/geist/Geist-Regular.woff2") format("woff2");
}
@font-face {
font-family: "Geist";
font-style: normal;
font-weight: 500;
font-display: block;
src: url("../fonts/geist/Geist-Medium.woff2") format("woff2");
}
@font-face {
font-family: "Geist";
font-style: normal;
font-weight: 600;
font-display: block;
src: url("../fonts/geist/Geist-SemiBold.woff2") format("woff2");
}
@font-face {
font-family: "Geist";
font-style: normal;
font-weight: 700;
font-display: block;
src: url("../fonts/geist/Geist-Bold.woff2") format("woff2");
}
@font-face {
font-family: "Space Grotesk";
font-style: normal;
font-weight: 400;
font-display: block;
src: url("../fonts/space-grotesk/SpaceGrotesk-Regular.woff2") format("woff2");
}
@font-face {
font-family: "Space Grotesk";
font-style: normal;
font-weight: 600;
font-display: block;
src: url("../fonts/space-grotesk/SpaceGrotesk-SemiBold.woff2") format("woff2");
}
@font-face {
font-family: "Space Grotesk";
font-style: normal;
font-weight: 700;
font-display: block;
src: url("../fonts/space-grotesk/SpaceGrotesk-Bold.woff2") format("woff2");
}
/*
* Telegram light/dark shell slots (D-04) — ONLY shell-level surfaces
* are themeable (background + on-surface text pair). Map cartography
* stays Rams-constant under both Telegram themes; Phase 3 (PX-02)
* maps Telegram's theme params onto these two slots.
*/
:root {
--shell-bg: var(--color-surface);
--shell-on-surface: var(--color-on-surface);
}
@media (prefers-color-scheme: dark) {
:root {
--shell-bg: var(--color-surface-dark);
--shell-on-surface: var(--color-inverse-on-surface);
}
}
+158
View File
@@ -0,0 +1,158 @@
/*
* @araharah/theme — Telemetry Rams design tokens
* ------------------------------------------------------------------
* Single source of truth for every numeric design value in araharah.
* Vocabulary is copied VERBATIM from the frontmatter of
* stitch_minimalist_route_navigator/telemetry_rams/DESIGN.md (D-02:
* mockup markup maps 1:1 — bg-signal-orange, px-margin, gap-space-md…).
*
* Values live ONLY here (D-07). Docs describe principles and point to
* this package; they never restate hex codes, sizes, or spacing.
*
* @theme static — v4 tree-shakes unused theme variables by default;
* `static` forces every token into the compiled output so the package
* is consumable as plain CSS custom properties by any later phase
* (D-01), including the MapLibre basemap derivation (D-09).
*/
@theme static {
/* — Colors: Material-style neutrals + Rams brand (verbatim, 55) — */
--color-surface: #fff8f0;
--color-surface-dim: #e0d9cd;
--color-surface-bright: #fff8f0;
--color-surface-container-lowest: #ffffff;
--color-surface-container-low: #faf3e6;
--color-surface-container: #f5ede0;
--color-surface-container-high: #efe7db;
--color-surface-container-highest: #e9e2d5;
--color-on-surface: #1e1b14;
--color-on-surface-variant: #564335;
--color-inverse-surface: #333028;
--color-inverse-on-surface: #f7f0e3;
--color-outline: #897363;
--color-outline-variant: #dcc1af;
--color-surface-tint: #914c00;
--color-primary: #914c00;
--color-on-primary: #ffffff;
--color-primary-container: #eb8008;
--color-on-primary-container: #522900;
--color-inverse-primary: #ffb77f;
--color-secondary: #5f5e5e;
--color-on-secondary: #ffffff;
--color-secondary-container: #e2dfde;
--color-on-secondary-container: #636262;
--color-tertiary: #676013;
--color-on-tertiary: #ffffff;
--color-tertiary-container: #b7ad59;
--color-on-tertiary-container: #464000;
--color-error: #ba1a1a;
--color-on-error: #ffffff;
--color-error-container: #ffdad6;
--color-on-error-container: #93000a;
--color-primary-fixed: #ffdcc3;
--color-primary-fixed-dim: #ffb77f;
--color-on-primary-fixed: #2f1500;
--color-on-primary-fixed-variant: #6e3900;
--color-secondary-fixed: #e5e2e1;
--color-secondary-fixed-dim: #c8c6c5;
--color-on-secondary-fixed: #1c1b1b;
--color-on-secondary-fixed-variant: #474746;
--color-tertiary-fixed: #f0e58a;
--color-tertiary-fixed-dim: #d3c972;
--color-on-tertiary-fixed: #1f1c00;
--color-on-tertiary-fixed-variant: #4e4800;
--color-background: #fff8f0;
--color-on-background: #1e1b14;
--color-surface-variant: #e9e2d5;
/* Rams brand core (verbatim casing from the design doc) */
--color-signal-orange: #EB8008;
--color-matte-black: #1A1A1A;
--color-soft-beige: #D9D2C6;
--color-functional-red: #ED3F1C;
--color-olive-green: #736B1E;
--color-chassis-subtle: #CCC4B5;
--color-surface-dark: #121212;
--color-pure-white: #FFFFFF;
/* — Spacing: 8px baseline grid (verbatim; never recomputed — D-07) — */
--spacing-gutter: 1rem;
--spacing-gutter-desktop: 1.5rem;
--spacing-margin: 1rem;
--spacing-margin-desktop: 2rem;
--spacing-space-xs: 0.25rem;
--spacing-space-sm: 0.5rem;
--spacing-space-md: 1rem;
--spacing-space-lg: 1.5rem;
--spacing-space-xl: 2rem;
--spacing-space-2xl: 3rem;
/* — Type families: Geist (body) + Space Grotesk (headlines/telemetry).
sans aliases Geist; mono aliases Space Grotesk so the mockups'
font-mono telemetry labels render in a self-hosted Rams grotesk
(D-10, D-16) instead of a system monospace. — */
--font-sans: "Geist", ui-sans-serif, system-ui, sans-serif;
--font-geist: "Geist", ui-sans-serif, system-ui, sans-serif;
--font-space-grotesk: "Space Grotesk", "Geist", ui-sans-serif, system-ui, sans-serif;
--font-mono: "Space Grotesk", "Geist", ui-monospace, monospace;
/* — Radius: absolute zero roundedness (design doc, Shapes). Every
token-driven rounded-* utility compiles to 0. NOTE: v4's
rounded-none/rounded-full are literal built-ins, not var-driven. — */
--radius-DEFAULT: 0px;
--radius-xs: 0px;
--radius-sm: 0px;
--radius-md: 0px;
--radius-lg: 0px;
--radius-xl: 0px;
--radius-2xl: 0px;
--radius-3xl: 0px;
--radius-4xl: 0px;
}
/*
* — Typography scale (verbatim values from the design doc frontmatter) —
* Compound custom properties per type token: consume as
*
* .headline { font: var(--type-headline-md);
* letter-spacing: var(--type-headline-md-tracking); }
*
* font shorthand composes weight + size/line-height + family; the
* -tracking companion carries the letter-spacing (not expressible in
* the font shorthand). Later plans build sheet/specimen classes on
* these vars.
*/
:root {
/* Space Grotesk — display + headlines */
--type-display-lg: 700 48px/52px var(--font-space-grotesk);
--type-display-lg-tracking: -0.04em;
--type-display-lg-mobile: 700 36px/40px var(--font-space-grotesk);
--type-display-lg-mobile-tracking: -0.03em;
--type-headline-lg: 700 32px/38px var(--font-space-grotesk);
--type-headline-lg-tracking: -0.03em;
--type-headline-lg-mobile: 700 24px/30px var(--font-space-grotesk);
--type-headline-lg-mobile-tracking: -0.02em;
--type-headline-md: 600 20px/26px var(--font-space-grotesk);
--type-headline-md-tracking: -0.02em;
--type-headline-sm: 600 16px/22px var(--font-space-grotesk);
--type-headline-sm-tracking: -0.01em;
/* Geist — body */
--type-body-lg: 400 16px/24px var(--font-geist);
--type-body-lg-tracking: -0.01em;
--type-body-md: 400 14px/20px var(--font-geist);
--type-body-md-tracking: 0em;
--type-body-sm: 400 12px/16px var(--font-geist);
--type-body-sm-tracking: 0.01em;
/* Labels (uppercase, expanded tracking per design doc) */
--type-label-lg: 700 14px/18px var(--font-space-grotesk);
--type-label-lg-tracking: 0.06em;
--type-label-md: 600 12px/16px var(--font-geist);
--type-label-md-tracking: 0.04em;
--type-label-sm: 700 10px/12px var(--font-geist);
--type-label-sm-tracking: 0.08em;
/* Telemetry counters */
--type-telemetry-num: 700 28px/32px var(--font-space-grotesk);
--type-telemetry-num-tracking: -0.03em;
}