Overview

Design system

Quiet surfaces, fitted controls and clear documents. A shared visual language for Master websites.

The brand guide defines the identity. This handbook is the interface it runs on: Moonstone in light mode and Obsidian in dark, one material ladder, one elevation order and one way to frame an example.

A small document workspace

A small project vocabulary

<article class="p-card r-card b(1) b-solid b-line-divider bg-surface-raised fg-text-body">  <p class="m(0) font-mono text-xs fg-brand">FIELD NOTES / 024</p>  <h2 class="mt-sm mb-xs text-xl font-medium fg-text-strong">Room for the details</h2>  <p class="m(0) text-sm">Color, spacing and radius come from three shared project tokens.</p></article>
Generated CSS
@layer theme {  :root,  :host {    --color-zinc-30: oklch(78% .0025 265);    --color-zinc-70: oklch(39.8% .0028 265);    --color-zinc-90: oklch(24.6% .0022 265);    --color-zinc-100: oklch(15% .0016 265);    --color-blue-30: oklch(72.87% .1468 249.3);    --color-blue-60: oklch(51.83% .2687 266.1)  }  :root,  :host {    --color-surface-raised: light-dark(var(--color-white), var(--color-zinc-90));    --color-line-divider: light-dark(oklch(0% 0 none / .12), oklch(100% 0 none / .12));    --color-text-body: light-dark(var(--color-zinc-70), var(--color-zinc-30));    --color-text-strong: light-dark(var(--color-zinc-100), var(--color-white));    --color-text-link: light-dark(var(--color-blue-60), var(--color-blue-30))  }  :root,  :host {    --color-white: oklch(100% 0 none)  }  :root,  :host {    --font-family-mono: var(--font-mono, ui-monospace), SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;    --font-weight-medium: 500;    --font-size-xs: .75rem;    --font-size-sm: .875rem;    --font-size-xl: 1.25rem;    --text-xs: var(--font-size-xs);    --text-xs--line-height: 1.5;    --text-xs--letter-spacing: 0;    --text-sm: var(--font-size-sm);    --text-sm--line-height: 1.5;    --text-sm--letter-spacing: 0;    --text-xl: var(--font-size-xl);    --text-xl--line-height: 1.4;    --text-xl--letter-spacing: -.01em;    --spacing-xs: .5rem;    --spacing-sm: .75rem  }  :root,  :host {    --color-brand: var(--color-text-link);    --spacing-card: 1.5rem;    --radius-card: .75rem  }}@layer utilities {  .text-sm {    font-size: var(--text-sm);    line-height: var(--text-sm--line-height, normal);    letter-spacing: var(--text-sm--letter-spacing, normal)  }  .text-xl {    font-size: var(--text-xl);    line-height: var(--text-xl--line-height, normal);    letter-spacing: var(--text-xl--letter-spacing, normal)  }  .text-xs {    font-size: var(--text-xs);    line-height: var(--text-xs--line-height, normal);    letter-spacing: var(--text-xs--letter-spacing, normal)  }  .bg-surface-raised {    background-color: var(--color-surface-raised)  }  .b-line-divider {    border-color: var(--color-line-divider)  }  .r-card {    border-radius: var(--radius-card)  }  .b-solid {    border-style: solid  }  .b\(1\) {    border-width: calc(1 * 1px)  }  .fg-brand {    color: var(--color-brand)  }  .fg-text-body {    color: var(--color-text-body)  }  .fg-text-strong {    color: var(--color-text-strong)  }  .font-mono {    font-family: var(--font-family-mono)  }  .font-medium {    font-weight: var(--font-weight-medium)  }  .m\(0\) {    margin: calc(0 * 1px)  }  .mb-xs {    margin-bottom: var(--spacing-xs)  }  .mt-sm {    margin-top: var(--spacing-sm)  }  .p-card {    padding: var(--spacing-card)  }}
The responsive preview and its source use the same project token definitions.
--color-brand
var(--color-text-link)
--spacing-card
1.5rem
--radius-card
.75rem

#Layers and materials

Every surface is a step on one ladder: the canvas holds a tray, a tray holds a lit stage, and sheets rise from it. A well sits below its surroundings. The interface stays monochrome; hue appears only in named teaching specimens and status.

Canvas--ui-surface-canvas
Tray--ui-surface-tray
Stage--ui-surface-stage
Sheet--ui-surface-sheet
Well--ui-surface-well
Float--ui-surface-float

Elevation

sink < flat < rise-1 < rise-1h < rise-2 < rise-3 < overlay

sink
flat
rise-1
rise-1h
rise-2
rise-3
overlay
Every layer doubles offset and blur while its spread pulls in. Hover lifts half a pixel to rise-1h; pressing sinks into the well.

Concentric radii

3 · 4 · 6 · 8 · 10 · 14, nested by a 4px inset

Tray 14 → sheet 10
3
4
6
8
A tray of 14 holds a stage, code window or sheet of 10 at a 4px inset; a menu of 8 holds items of 4.

#Controls that fit

Controls share one material and one state order. A raised face lifts half a pixel on hover and sinks into a well when pressed. Selected segments rise inside their sunken track, and focus is always a visible ink ring.

Buttons

Default, primary and quiet; hover lifts, pressing sinks

hover
pressed
focus
data-size="sm"
The static hover and pressed specimens use data-state; real buttons use native :hover, :active and :focus-visible.

Choices and fields

Selected segments rise inside a sunken track; fields float back to the sheet on focus

Copy with an honest result

The status beside the action reports the real clipboard result, including denial.

#A clear reading rhythm

One example is one tray: its head names it, the stage shows it, the code window holds the source with a closed Generated CSS disclosure, and a caption says what to notice. Tables and indexes own their frames.

Values, together

Token / classRole
--color-brand
var(--color-text-link)
An existing semantic color
--spacing-card
1.5rem
Shared card padding
--radius-card
.75rem
Shared card corners
Names, values and supporting details share a start.

Teaching color is always named

Context
Subject
Comparison
  • Context
  • Subject
  • Comparison
SupportedStatic
Hue appears only inside specimens. A legend or label names each tone.

#Complete component reference

Each page shows a component's live states, where the site uses it and its markup interface. The authoring handbook covers layout contracts and the complete recipe collections.

01

Surfaces and frames 6

02

Specimens and annotations 11

03

Controls 3

04

Documents and evidence 17

Build an example with the shared components, or inspect all working recipes.