Inbox

Design system

66 tokens · 11 type styles · 6 elevations, generated from the Figma file.

Colour

Semantic tokens only. Every one carries a light and a dark value, so a component never needs to know which mode it is in.

text

text/primary
text/secondary
text/placeholder
text/disabled
text/inverse
text/brand
text/on-brand
text/error
text/success
text/warning
text/info

bg

bg/canvas
bg/subtle
bg/raised
bg/sunken
bg/selected
bg/skeleton
bg/placeholder
bg/scrim
bg/brand
bg/brand-tint
bg/brand-hover
bg/brand-pressed
bg/danger
bg/danger-hover
bg/danger-pressed
bg/error-tint
bg/success-tint
bg/warning-tint
bg/info-tint
bg/diff-added
bg/diff-removed

border

border/hairline
border/subtle
border/default
border/active
border/focus
border/error
border/success
border/warning
border/info

status

status/new
status/contact
status/qualified
status/neutral
status/won
status/online

heat

heat/0
heat/1
heat/2
heat/3
heat/4

tag

tag/blue-bg
tag/blue-ink
tag/green-bg
tag/green-ink
tag/purple-bg
tag/purple-ink
tag/amber-bg
tag/amber-ink
tag/cyan-bg
tag/cyan-ink
tag/red-bg
tag/red-ink
tag/neutral-bg
tag/neutral-ink

Type

Inter throughout, with JetBrains Mono reserved for identifiers, timestamps and anything the eye needs to compare column-wise.

displayRenewal quote came in at $290K
headingRenewal quote came in at $290K
subheadingRenewal quote came in at $290K
titleRenewal quote came in at $290K
subtitleRenewal quote came in at $290K
bodyRenewal quote came in at $290K
labelRenewal quote came in at $290K
captionRenewal quote came in at $290K
caption-strongRenewal quote came in at $290K
overlineRenewal quote came in at $290K
monoRenewal quote came in at $290K

Elevation

A card needs exactly one separation mechanism. On bg/canvas that is a hairline outline; on bg/subtle it is tone plus a shadow. Never both.

button
input
raised
overlay
modal
focus

Radius

xs · 4

sm · 6

md · 8

lg · 12

xl · 16

2xl · 20

full · 999

Buttons

Overlays and feedback

Toast reports, Banner persists, Tooltip explains, Modal asks, Insight Card summarises. Each one is a place to put something that must not displace the thing it is about — the reason the swap card no longer turns into its own receipt.

Toast

Stacks bottom-right, capped at three, auto-dismisses. An action gets an Undo rather than a confirmation dialog wherever the work is reversible.

Tooltip

Opens on hover and on focus. It describes the trigger; it never becomes the trigger’s name, so an icon button still needs its own label.

Banner

Two vendors renew this month

Datadog and Segment both fall inside the close window.

Three requests have waited five days or more

SOC 2 evidence accepted

Page-level and persistent — it belongs to the thing it is about. A Toast is the opposite: transient and global. The left edge repeats what the tint says, for anyone who cannot separate the tints.

Insight card

Total spend
$122,000+12.4%
Avg approval time
1.8 days-0.4d
Budget used
64%
64 of 100
Q2 envelope

The sparkline is deliberately unlabelled: it carries shape, not values. If a reader needs the values, this is the wrong component and it wants a chart.

Modal

Escape, the scrim and the close button all dismiss — except on the destructive one, where the scrim is disabled so a stray click cannot answer the question.

Tags

Tag is semantic — good, bad, pending. Category Tag's hue is an identity: it separates one category from its neighbours and means nothing on its own.

neutralinfosuccesswarningdanger
greenpurpleblueredamberneutralcyan

Status and priority

Both encode their value by shape as well as hue, so they survive greyscale. Priority doubles up: filled-bar count and colour.

Todo
In progress
Review
Done
Cancelled
none
low
medium
high
urgent

Fields

A control keeps its border and Shadow/Input. That is not a rule-16 violation — on a field the border is an affordance signalling editability, not a separation mechanism.

We use this to match existing conversations.

Enter a full number including country code.

pick any

pick one

toggle

Segmented

The track is a recess — tone only, never an outline — and the active segment is lifted. An outlined pill inside an outlined track draws the same edge three times and reads as a wireframe.

Data

Delta separates direction from sentiment, because a falling number can be good news — a shorter sales cycle is a win.

+8.4%-0.5%-6.2%0.0%
35%

Avatars

RSAKMDARSAKMDTL+2

Cards

The same component, told what it is sitting on. Getting this wrong is what makes a screen look like a wireframe.

on bg/canvas — outline

Approve the credit top-up

Hairline outline at radius/lg, no shadow.

on bg/subtle — lift

Approve the credit top-up

Shadow at radius/xl, no outline.