Skip to content
Navigation

Color

Colors are semantic roles, not a palette — you pick by job (primary = main action), not by hue. Every token has a.dark override, so the same class works in both themes (use the toggle, top-right). Each filled role has a paired-foreground for legible text on it.

Actions

primary

The main action of a view — use once per context.

secondary

Lower-emphasis action sitting next to primary.

destructive

Irreversible / destructive actions only (delete, remove).

Brand tiers

Brand is split by contrast contract, not by shade. A fill only needs 3:1, but text needs 4.5:1 — so they must diverge in dark. Don't collapse them into one "brand" color.

brand-fixed

Fixed identity (logo, brand surfaces). Does NOT adapt for contrast.

brand-interactive

Brand-colored FILLS/controls. Adapts in dark (≥3:1 fill contract).

attention

Pull the eye to one spot (highlight, badge).

brand-link — brand color as readable text/link on a surface (≥4.5:1 text contract; lighter than the fill in dark).

Status

success

Confirmed / done.

warning

Caution, non-blocking. Pairs with warning-border.

highlight

Promotional / featured emphasis (hover: highlight-hover).

Neutral surfaces

Elevation is built from these (see Elevation & surfaces).

background

Page base.

card

Raised content surface.

popover

Floating layer (menus, popovers) — highest surface.

muted

Recessed well / secondary text on muted-foreground.

accent

Hover/active wash on interactive rows.

Borders, inputs & focus ring

border

Default hairline between/around surfaces.

input

Form-control borders (slightly stronger than border).

ring

Focus ring — keyboard focus visibility.