Home / Primitives / Button

Button

Triggers an action or navigates to another surface. The most important control in the system — used dozens of times per screen.

Stable .btn 6 variants · 3 sizes

Usage

Buttons label the action with a verb. Primary actions use the brand colour; everything else degrades through a clear hierarchy.

Default usage btn-primary · btn-secondary · btn-ghost

Variants

Six variants ordered by visual weight. Use exactly one primary per screen.

Primary
.btn-primary
Secondary
.btn-secondary
Ghost
.btn-ghost
Quiet
.btn-quiet
Destructive
.btn-destructive
Link
.btn-link

Hierarchy in action

Approval row Primary right, destructive uses ghost-with-warning copy

Sizes

Default is 36px. Small (30px) inside tight toolbars; large (44px) on landing CTAs.

Sizes 30px · 36px · 44px

With icon

Icon left
leading icon
Icon right
trailing icon
Icon only
.btn-icon

States

Hover and focus are handled automatically. Disabled uses 50% opacity and disables pointer events.

Rest
Hover
Focus
Disabled

Anatomy

PropertyValueNotes
height36px30 small · 44 large
padding0 14px0 10px small · 0 18px large
radius--button-radius (8px)Pill variants use --radius-pill
font500 14px / 1 sans13px small · 15px large
transition--dur-fast (120ms)--ease-out · bg · border · color · shadow
focus2px outline + 2px offsetBrand focus ring

Do & don't

Do

Use exactly one primary button per screen. The most important next action.

Don't

Place two primary buttons side-by-side. The user can't tell which is more important.

Do

Label with a verb in sentence case — "Approve entry", "Save draft", "Open invoice".

Don't

Use noun-only labels — "Approval", "Draft", "Invoice" — they read like static text, not actions.

Do

Use destructive variants only when the action is irreversible or affects another user.

Don't

Mark routine actions destructive. Reserve red for actual stakes.

Code

<!-- Primary -->
<button class="btn btn-primary">Record shift output</button>

<!-- With leading icon (uses inline icon helper) -->
<button class="btn btn-secondary">
  <span data-icon="plus"></span>New entry
</button>

<!-- Icon-only (always include aria-label) -->
<button class="btn btn-icon" aria-label="Settings">
  <span data-icon="settings"></span>
</button>

Related

For toggleable filter chips with icons, see Chip & tag. For two related actions, see the Data toolbar pattern.