Design system

Display

Components that show information rather than take input: labels, status, metrics and notes.

Identity and labels

Colour is kept for small things: badges, status dots and icons.

Why

Of 1,248 visible elements on a live Linear screen only 10.3% carried any chroma, and 89% of those were ≤20px. Colour lives in icons, status dots and small badges — that is the whole list.

APG312DefaultFilledBrand⌘KR

Status

Every status has a word as well as a colour.

Why

Every status carries a word as well as a colour, so it survives greyscale, forced-colors, and the ~8% of men with a colour vision deficiency.

Not startedIn progressDoneAt riskFailed

Persistence

Shows whether an edit has saved. “Saved” fades after a few seconds.

Why

idle renders an empty live region rather than nothing — a region has to exist before its content changes, or it is not announced. `saved` fades after ~3s, because a permanent “Saved” is indistinguishable from a stuck one.

Saving…SavedCouldn't saveSyncedOfflineLoading

Connection

A banner for a problem that won't clear by itself. It stays until the connection is back.

Why

A banner, not a toast — a toast implies the condition passes on its own, and this one does not. It is sticky at the top of the scroll container and stays until the connection returns. Rendered here with `offline` forced; left to itself it follows the browser, which reports whether a network interface exists rather than whether Lenz can be reached.

You're offline. Changes will sync when the connection returns.
Can't reach Lenz. Your changes aren't being saved.

Metrics

A ring for progress inside a row, a gauge for a larger figure.

Why

Ring is glyph-sized, for a row; Gauge is the same idea at 37px. Both draw their arc from --pct in the stylesheet, so the component passes a number and never geometry. Values and deltas use tabular numerals so a changing number does not shift the row beside it.

Open24+3 this week
Done1,240+112
At risk6−2

Navigation and progress

Upload
x

Notes

Info, warning and error, each readable on its own tint.

Why

All three semantic variants clear AA on their own tint (4.69–5.09:1), which hand-picked alert colours usually do not.

A neutral, informational message.
Something needs attention soon.

Surfaces and loading

Card
Surface