design.sys
the system behind this site — real tokens, live parts. mono-first, black-first, phosphor accent.
- stable
- v1.0.0
- next.js + payload + tailwind
- departure mono (ofl)
typography
One family: Departure Mono, a dot-matrix face shipped at a single 400 weight — heavier weights are browser-synthesised. Hierarchy comes from size, case and colour, never from more typefaces. System UI is lowercase; professional content keeps normal case.
| token | value | specimen |
|---|---|---|
| --fs-2xs | 11px | the quick brown fox |
| --fs-xs | 12px · +0.08em | the quick brown fox |
| --fs-sm | 13px | the quick brown fox |
| --fs-base | 15px / 1.7 | the quick brown fox |
| --fs-md | 17px | the quick brown fox |
| --fs-lg | 22px | the quick brown fox |
| --fs-xl | clamp(26px, 3.2vw, 36px) | the quick brown fox |
| --fs-hero | clamp(38px, 6.5vw, 72px) | the quick brown fox |
color
Near-monochrome, black-first. Green is a status colour, not a brand colour: it appears in status dots, contribution cells, focus rings, active nav, prompt glyphs and selection — never in headings, never as decoration.
dark (default)
- --bg#050505
- --surface#0a0a09
- --surface-raised#111110
- --border#1c1c1a
- --border-strong#2c2c28
- --text#e8e6e0
- --muted#96948b
- --faint#5d5c54
- --accent#3fd158 · oklch(0.76 0.20 146)
- --accent-dim#1d7a34
- --danger#f0665a
- --warn#d9a53f
light (intentional, not inverted)
- --bg#f3f1ea
- --surface#ebe8df
- --surface-raised#f9f8f3
- --border#d9d6c9
- --border-strong#b5b2a3
- --text#1a1a14
- --muted#5d5c50
- --faint#8f8d7f
- --accent#157f36
- --accent-dim#8fce9f
- --danger#b3311f
- --warn#8a6414
contribution ramp · --ph-0 … --ph-4
spacing + shape
- base unit4px · scale 4/8/12/16/24/32/48/64/96
- --space-sectionclamp(4.5rem, 9vh, 7rem)
- --container-max84rem (1344px)
- --gutter-w200px section gutter column
- --header-h3.25rem system rail
- borders1px var(--border), no shadows, no glass
- radius0px everywhere · 2px on chips/kbd only
- z-scalesticky 10 · header 40 · drawer 50 · palette 60 · toast 70
The workstation card: 1px frame on --surface with 7px corner ticks drawn by pseudo-elements. Depth comes from surface contrast, never shadows.
motion
Deterministic and small: opacity and short translates, one pass, no scroll-jacking, no smooth-scroll library. Under prefers-reduced-motion everything collapses to its final state; the hero caret blinks six times and stops.
- --t-fast140ms
- --t-med260ms
- --t-reveal400ms
- --t-drawer380ms
- --ease-outcubic-bezier(0.22, 1, 0.36, 1)
- --ease-inoutcubic-bezier(0.65, 0, 0.35, 1)
- --ease-systemcubic-bezier(0.32, 0.72, 0, 1)
buttons + links
Inline links carry a quiet underline that commits to phosphor on hover: an inline link. External links always carry an arrow that shifts 3px: external (opens in a new tab).
inputs
[error] enter a valid email
tables + lists
- first row
- second row
- third row
- bullet-list — 5px phosphor squares, not discs
- generous 14px row padding on registry tables
- column headers: 11px uppercase --muted
chipchip --on#tag⌘K
terminal parts
$the command line — section grammar
output line with a phosphor glyph
success states say so only when true
status dot — the one glow in the system: 7px square, 60% pulse, still under reduced motion.
// .code-frame — filename bar + body
const system = 'dev' as constvoice + tone
- system UI, commands and metadata are lowercase; project titles, organisations and professional prose keep normal case.
- green is a status colour. if a heading is green, it is a bug.
- real data or no data — live numbers are cached and degrade honestly; nothing is fabricated, ever.
- precise, quietly confident, slightly dry. no "passionate developer", no rockstars, no ninjas.