Jump to…

Component sheet

Every token and control, rendered from the same stylesheet the product uses. Read the rationale.

Colour tokens

Neutrals

--bgpage ground
--surfacepanels, cards, bars
--surface-raisedcontrols on a surface
--borderhairlines
--border-strongcontrol edges
--textbody
--text-dimsecondary
--text-fainttertiary, metadata

Accents

--identitychange ids, stacks, revisions
--actionlinks, the one primary move
--identity-washstacked rows, selected revisions

State

--openopen
--mergedmerged
--abandonedabandoned
--conflictconflicted
--dangerdestructive or broken

Every token has a light-theme counterpart. Switching the theme re-renders this page from the same variables, so a swatch that looks wrong here is wrong in the product.

Typography

44 / 48 · 600Display
24 / 32 · 600Page title
20 / 28 · 600Section title
16 / 24 · 400Lead paragraph
14 / 21 · 400Body and row titles
12.5 / 18 · 400Metadata, secondary
11 · monokntqzsqtwrln +18 −4
11 · condensedEYEBROW LABEL

Change states

openpushed and reviewable
conflictedmid-thought, still reviewable
mergedlanded on a bookmark
abandonedclosed without landing
draftthe author's own flag; never inferred from a push

Conflicted is not a fifth state — it is something an open change can be. That is why it renders as one pill rather than two, and why it is magenta rather than red: a conflict is a state, not a failure.

Keycaps

⌘Kjkytesc?

Only ⌘K is bound. The rest are drawn but not wired — a keycap that does nothing is a promise the product has not kept, so they appear here and nowhere else.

Diff rows

@@ hunk header — surface-raised, no rule
137+ addition — add-bg with a 2px add rule
136- deletion — del-bg with a 2px del rule
149 context — transparent, body colour

Stat lines

Open changes128
Conflicted3
Median time to first review42m

The leader is a flexing border rather than a run of periods, so both ends sit on the same baseline whatever their lengths are.

Buttons

PrimaryDefaultDangerQuiet dangerDisabled

Primary is filled `--action` and there is at most one on a screen. A second primary button means the page has not decided what it is for. Everything else is the transparent default, which reaches for the accent only on hover.

Segmented control

Two links, not a scripted toggle — each half is a real URL, so the control works without JavaScript and either view can be linked to.

Chips and badges

kmnwolvtqrszgitprivatedraft
openmergedabandonedconflicted

A state is never colour alone — every badge carries its own name as text, so it survives a monochrome display and a colour-blind reader.

Form controls

A hint sits under the control it explains.

Banners

Empty state

No changes yet

Push one with jj git push.

New repository

Comparison list

  • the old waythe new way