Skip to main content

Design System · Playground

Every primitive × variant × state. Not indexed. Development only.

01

Button

Six states. Three sizes. Four variants. Dark overrides.

Variants (md)
Sizes (primary)
States (primary)
Dark (on bg-ink)

02

Chip

Passive chips describe. Interactive chips link — enforces 44px tap.

Passive tones
brandneutralinksuccesswarningdanger
Interactive (min-h-44)

03

Card

Surface primitive. Variants × padding × interactive.

Default

bg-surface border-edge, non-interactive.

Muted

bg-surface-muted — subdued card on white.

Accent

bg-surface-accent border-brand/20.

Dark

bg-ink — inverted card on any surface.

Interactive (to)

Hover lifts, focus rings, no underline.

Interactive (prop)

interactive={true} without href/to.

Paddings
p-4
p-6
p-6 md:p-8

04

Prose

Measure-enforced long-form wrapper. Three sizes.

Small

Small prose. Used for sidebar explanations or footnotes. Max 65ch measure.

Links render in brand. Strong pushes weight without color shift.

Medium (default)

Default body prose. The workhorse. 16px base, 1.625 line-height, 65ch measure.

Two paragraphs here test the inter-paragraph rhythm. Check descenders and ascenders read cleanly.

Large

Large prose. For hero intros and primary content that needs weight. 18px base.

05

SectionHeader

align=center|left, as=h1|h2|h3|h4, dark boolean.

Default — center, h2

Centered heading

The landing-page default. max-w-xl, mx-auto.

align=left, as=h1

Left-aligned H1

For sub-pages where the SectionHeader IS the page title.

Dark

Inverted colors

dark prop flips all tokens for bg-ink sections.

06

Eyebrow

Mono uppercase label. The atom that signals what's about to be said.

tone=accent (default)

Section label

Another label

tone=subtle

When

So I get

dark=true, tone=accent

Section label

as=span (inline)

Text with inline eyebrow inside prose.

07

Rhythm

Vertical stack with a fixed-token gap. Replaces ad-hoc space-y-*.

tight (12px)

Label + value pair

Same idea, close together

Third line, still tight

base (24px)

Sibling block A

Sibling block B

Sibling block C

loose (48px)

Distinct concept A

Distinct concept B

08

Stat

Mono number + label. bare (default) or card variant. Replaces StatCard.

variant=bare (default)

$25.8K

M12 Cumulative

Base case

M4

Break-even

Base case

$800

Monthly Burn

variant=card

$25.8K

M12 Cumulative

Base case

M4

Break-even

$800

Monthly Burn

Fixed costs

dark=true

94%

Uptime

30-day rolling

12ms

p95 latency

align=left

$0

Starting cash

Bootstrapped

09

Divider

Thin rule with optional eyebrow caption. Segments without nesting a Section.

Plain rule

With caption
Labelled section break
dark=true

10

TightFive

Miller minus two enforced. Show 5, fold the rest.

as=col gap=base (7 items — 2 folded)
Wallet
Identity
Reputation
Incentive
Governance
as=grid gap=base
First
Second
Third
Fourth
Fifth
as=row gap=tight
DreamerEngineerCoachBuilderInvestor