EtherBrandGuidelinesFoundationsComponentsOverviewColorLayoutTypographyElevationMotionIconography
Foundations

Typography

Newsreader for display. Geist for UI. Geist Mono for IDs and queries. Body never below 16. Caption 12 never as the only text on a control. Sentence case labels, never all-caps.

The voice is in Tone of voice. This page is the scale.

Roles

Compact is the 0–1279 instrument. Wide is 1280+. Only display, title, and metrics step. Body stays 16.

RoleFaceCompactWideLine-heightTrackingUse
DisplayNewsreader32/4040/481.2−0.015emEmpty headlines, brand moments
TitleNewsreader24/3228/361.25−0.015emSection theses
HeadingGeist 60018/2820/281.4−0.011emPanel titles, in-page headings
BodyGeist 40016/2416/241.5−0.011emReading. Does not shrink.
Body-smGeist14/2014/201.45−0.011emTables, dense chrome
CaptionGeist12/1812/181.5+0.01emMetadata. Never the only text on a control.
LabelGeist 50012/1612/161.35−0.011emControl labels, sentence case
MetricGeist 500 tabular28/3632/401.2−0.02emThe number an operator came for
Metric-lgGeist 500 tabular40/4848/561.15−0.02emHero metric
MonoGeist Mono13/2013/201.50IDs, queries, tokens
Mono payloadGeist Mono12/1812/181.50Payloads, raw lines

Sizes are font-size / line-height in px. Geist UI tracking is −0.011em unless noted.

Responsiveness

Only display, title, and metrics step down on compact viewports. Body stays 16.

Shrinking body to fit more dashboard makes it unreadable. Density changes padding, not the floor. See Layout.

Grid relation

16/24 body is the 4px grid (24px = 6 units). Icon 24 pairs with body. 16-box icons pair only with caption.

Metrics are unconstrained in measure. Prose is not.

Readability

Performance

font-display: swap. UI is Geist, so Newsreader never blocks the instrument.

Fallbacks: ui-sans-serif, system-ui for Geist; Georgia, ui-serif for Newsreader.

System-only is rejected: we need tabular numerals and the brand voice. Subset if self-hosting later.

Guidelines

DoDon't
One display role per view.Newsreader on tables, buttons, or metrics.
Step through the scale. Heading then title, not display then caption.Skip sizes to make a panel feel “more branded.”
Body in Geist. IDs in mono.Body in mono. A paragraph is not a payload.
True weight (400 / 500 / 600).Fake bold (synthetic, text-stroke, or a heavier fallback).

Specimen

Every role, live. Display, title, and metrics step at 1280px. Body stays 16.

Display · Newsreader 32/40 → 40/48

A dashboard is an instrument.

Title · Newsreader 24/32 → 28/36

Signal over chrome

Heading · Geist 600 18/28 → 20/28

Compose, don't template

Body · Geist 400 16/24 — does not shrink

Operators scan. Chrome that competes with data is a defect.

Body-sm · Geist 14/20

Compact / standard / roomy. Sparse is useless; crushed is unreadable.

Caption · Geist 12/18

Updated 12:04 · range 24h

Label · Geist 500 12/16 · sentence case

Refresh interval

Metric · Geist 500 tabular 28/36 → 32/40

1,284

Metric-lg · Geist 500 tabular 40/48 → 48/56

99.95

Mono · Geist Mono 13/20

svc.metrics.ingest

Mono payload · Geist Mono 12/18

POST /v1/query

Related