Skip to content

Style guide

Design tokens and shared primitives. Switch themes with the toggle — every token below is semantic, so both themes come from one set of utilities.

Semantic colour

What components actually reference. These resolve differently per theme; nothing in a component should ever name a hex value.

Background
bg-background
Foreground
text-foreground
Surface
bg-surface
Border
border-border-subtle
Muted
text-muted

Jewel accents

Emerald is the primary interactive colour — it ties to the logo's bird and leaves. Ruby is held back for rare emphasis; sapphire and amethyst are section accents.

Emerald
bg-emerald
primary / interactive
Sapphire
bg-sapphire
section accent
Amethyst
bg-amethyst
section accent
Ruby
bg-ruby
rare emphasis only

Type scale

One typeface throughout. Hierarchy is carried by weight and size alone.

text-display · 700

Hummingbird

text-title · 700

Teaching a model to see

text-heading · 600

The boring frames mattered

text-deck

Standfirst copy that introduces an article, set slightly larger than body and in the muted tone.

base · body

Body copy at its real reading size. The first useful thing I learned was that the model did not care about my photography — it cared about consistency: the same feeder, the same angle, the same harsh afternoon light.

text-sm · meta

2 August 2026 · Artificial Intelligence

Buttons

Primary, secondary, ghost — three sizes each.

primary
secondary
ghost

Tags

Category and topic labels, tinted from the accent tokens.

emeraldsapphireamethystrubyneutral
Artificial IntelligencePhotographyQuiltingHome Automation

Section header

This component, rendering itself. Supports an optional action link.

All items

With an action

The action link sits on the baseline of the title on wide screens and wraps beneath on narrow ones.

View all

Focus states

Tab through this page. Every interactive element takes a 2px emerald ring, offset so it never crowds the element.

Then me