Tokens
Every value below is read from packages/ui/src/tokens/tokens.css. Components reach them through the typed vars object, never by name.
Colour
Semantic roles, not a palette. Each token has a light and a dark value through light-dark(), so a theme is only a color-scheme.
Neutral scale
Blue-grey at hue 255, chroma under 0.012. Components never use the steps directly.
Surfaces
Ink
Lines
Accent
patch violet (hue 285
Status
solid (dots, icons, emphasised text), tint (washes), ink (text on tint
Focus ring
box-shadow
Type
IBM Plex Sans for everything, Plex Mono only for identifiers people type into other programs. 14px is the content size; larger sizes are for headings.
Space
4px base. 6 inside a text group, 16 between controls, 24 between blocks, 32 between page sections.
| Token | Value | Size |
|---|---|---|
| --sb-space-0_5 | 2px | |
| --sb-space-1 | 4px | |
| --sb-space-1_5 | 6px | |
| --sb-space-2 | 8px | |
| --sb-space-3 | 12px | |
| --sb-space-4 | 16px | |
| --sb-space-5 | 20px | |
| --sb-space-6 | 24px | |
| --sb-space-8 | 32px | |
| --sb-space-10 | 40px | |
| --sb-space-12 | 48px | |
| --sb-space-16 | 64px |
Radius
Small radii on controls, larger on layers. A nested radius is the outer radius minus the padding.
Elevation
A 1px ring plus a drop shadow, never a border and a shadow together. Dark drops are heavier so layers still separate.
| Token | Value |
|---|---|
| --sb-drop-1 | light-dark(oklch(0 0 0 / 0.05), oklch(0 0 0 / 0.35)) |
| --sb-drop-2 | light-dark(oklch(0 0 0 / 0.08), oklch(0 0 0 / 0.45)) |
| --sb-drop-3 | light-dark(oklch(0 0 0 / 0.18), oklch(0 0 0 / 0.55)) |
| --sb-elevation-0 | 0 0 0 1px var(--sb-line) |
| --sb-elevation-1 | 0 0 0 1px var(--sb-line), 0 1px 2px var(--sb-drop-1) |
| --sb-elevation-2 | 0 0 0 1px var(--sb-line), 0 4px 12px -2px var(--sb-drop-2), 0 2px 4px var(--sb-drop-1) |
| --sb-elevation-3 | 0 0 0 1px var(--sb-line), 0 16px 40px -8px var(--sb-drop-3) |
Motion
Hover is instant. Motion answers an action: opening, closing, confirming. Everything is zeroed under prefers-reduced-motion. Hover or focus a row to run it.
| Token | Value |
|---|---|
| --sb-ease-out | cubic-bezier(0.2, 0.8, 0.2, 1) |
| --sb-ease-in-out | cubic-bezier(0.6, 0, 0.3, 1) |
| --sb-duration-fast | 120ms |
| --sb-duration-base | 180ms |
| --sb-duration-slow | 240ms |
Density
Control and row heights. [data-density="compact"] on any element shrinks them for its subtree.
| Token | Value |
|---|---|
| --sb-control-sm | 28px |
| --sb-control-md | 32px |
| --sb-control-lg | 36px |
| --sb-row | 44px |
| --sb-row-compact | 36px |