Buttons
Base class
All buttons share .btn as a base class. Add a modifier to set the visual style.
.btn { font-family: 'Geist Mono', monospace; font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; border: 2px solid currentColor; border-radius: 0; padding: 13px 26px;}Variants
Primary
The main call-to-action. Blue fill, darkens on hover.
btn--primary
<button class="btn btn--primary">Explore Archive</button> Outline
Bordered, transparent background. Fills blue on hover.
btn--outline
<button class="btn btn--outline">View Journal</button> Ghost
No border, no fill. Text only — colour shifts to blue on hover. For low-priority actions.
btn--ghost
<button class="btn btn--ghost">Read more →</button> Action
Vermilion fill. For primary CTAs, confirmations, and download triggers.
btn--action
<button class="btn btn--action">Download PDF</button> Small
A .btn--sm modifier reduces padding and font size. Combine with any style variant.
btn--sm (combined with --outline)
<button class="btn btn--outline btn--sm">Filter</button>
<button class="btn btn--primary btn--sm">Apply</button> All variants together
All button variants
<button class="btn btn--primary">Primary</button>
<button class="btn btn--outline">Outline</button>
<button class="btn btn--ghost">Ghost</button>
<button class="btn btn--action">Action</button>
<button class="btn btn--outline btn--sm">Small</button> As anchor tags
Buttons can be <a> elements — the class applies identically:
btn on anchor
<a href="#" class="btn btn--primary">Go to docs</a>
<a href="#" class="btn btn--outline">View source</a> Usage rules
- One primary button per view. Don’t stack multiple
.btn--primaryelements. - Action (vermilion) is intentional. Reserve for irreversible or significant actions.
- Ghost buttons need context. Use only when the surrounding layout makes the action obvious.
- Uppercase is mandatory. Never override
text-transform: uppercaseon.btn. - No icon-only buttons. If using an icon, always include a visible label.