SurveyStream · Type system v1.0.0
Two readers who want opposite things. The aggregator stares at a metric table for an hour and needs figures that never shift and a zero that can never be an O. The taker wants a form that feels short and a payout that feels like it arrived. One scale, one family set, two numeral behaviours.
01 — Font pairing
Every candidate below was downloaded and its GSUB feature
table parsed directly. x-height is read from OS/2 and divided by
unitsPerEm. Nothing here is from a specimen page or memory.
| Face | Role | x-height | tnum | zero | case | Variable axes | Verdict |
|---|
Display · wordmark
Archivo
The only display candidate with a width axis. The
wordmark widens to wdth 112 for presence without a heavier
weight that would close the counters and fight the loop mark. Carries
zero, case, lnum, onum.
UI · body
Inter
Highest x-height measured at 0.546 em, and the only candidate with an optical-size axis — so a 13px caption and a 40px title get different letterforms, not one scaled outline. Richest feature set of anything tested.
Mono · telemetry
JetBrains
x-height 0.550 — within 0.6% of Menlo, the closest
fallback match of any mono tested, so the column barely moves on font swap. Slashed
zero and case both present.
tnum. Widely assumed to. It
ships lnum onum zero ss01–03 and no tabular figures at all — so a
currency column would shift as digits change. Disqualifying for a payouts product.tnum. Same failure.zero. Tallest x-height measured
(0.600) and an attractive width axis, but with no disambiguated zero it cannot carry
an ID or a hash. Fine for tracked uppercase labels; not for data.zero, no case, no calt.Premium alternative
The argument isn't that Söhne is prettier. It's that one foundry means one license negotiation, one set of vertical metrics, and one figure width shared across all three faces — so a number in a mono telemetry column optically aligns with the same number in body copy. No cross-foundry pairing gives you that for free, and for a product whose core screen is a table of numbers, that alignment is the whole game.
Swap in GT Walsheim for display if the wordmark needs more overt geometry, accepting the cross-foundry metric cost.
Verify before purchase.
These binaries are paywalled — I could not parse them. Confirm
tnum, zero, case and figure-width behaviour on
the foundry's trial fonts. Don't take the feature list on trust, including from me.
Alternate display face
Gabarito
More distinctive curves, and measurably
weaker equipment: x-height drops to 0.488, weights start at 400, and
it has no zero and no case — so it cannot
set an all-caps label or a disambiguated numeral. A brand call, not a technical one.
02 — Scale
Leading snapped to a 4px grid. Tracking is systematic rather than
eyeballed: —, tightening monotonically as size grows.
Each specimen below is rendered at its real computed size.
At 1.250 the mid-range opens too far for a dashboard — a 25px card
title and a 31px subsection heading inside a dense metric panel read as marketing,
not instrumentation. The minor third keeps title at 23px
and h3 at 28px: clearly above 16px body without shouting.
Marketing drama is recovered by one off-scale step, not by stretching the whole
product's scale to reach it.
A geometric scale from 16px yields only three sizes at or
below 20px — 13, 16, 19. A dense aggregator table needs a fourth. Rather
than pretend the ratio covers it:
body-dense at 14px/20px for data tables, and
display-xl at 64px for marketing only. Both are flagged
$offScale: true in the token file so a linter can enforce where they
appear.
03 — Numerals
Three contexts, three different settings, and two of them are opposites. Toggle each demo — the failures are much more convincing seen than described.
| Survey batch | Payout |
|---|---|
| Consumer panel · wave 4 | $1,284.50 |
| B2B decision-makers | $903.00 |
| Longitudinal health | $11,070.25 |
| Screener reject credit | −$118.00 |
| Referral bonus | $40.00 |
—
.00. $40 next to
$39.50 breaks the decimal column.tnum
governs figures, not punctuation, so a hyphen stays narrow even in a tabular font.Inside money a slashed zero reads as a correction mark or a struck figure. $1,024.00 looks annotated, not authoritative. The slash belongs to identifiers, not to value. This is the exact inverse of the telemetry rule below, and the inversion is deliberate.
Proportional, no reserved width
Watch the bar's left edge. The label changes width as digits change, so the track shifts sideways while it fills. This is the single most common progress-bar defect, and it's a typography bug, not a layout one.
Tabular + min-width: 4ch
The label is already as wide as 100% when it reads
7%, so nothing moves. Zero decimals — a completion bar is a glance
target, not a measurement.
respondent_id 0OB3D0-4c9f-40Oa-b8e1-0O7d2f
batch_hash sha256:0d0OO93f8b1c0e5a0O2d4f6b8a0c1e3d
ingested_at 2026-08-26T13:04:22Z
latency_p99 148.03 ms · 0 dropped · status != 200
In 0OB3D0 the distinction between zero and capital O
is the payload. Toggle it off above and read the respondent ID again.
tnum, and that's not an omissionA monospace face is fixed-advance by construction — every glyph
already occupies one cell, so tnum has nothing to do. That's why
none of the six monos tested carries the feature. Asking for
tnum on a mono is a no-op that signals the author didn't know why they
were asking. What you do need is calt: 0 — JetBrains Mono's contextual
alternates fuse != into a ligature, and an ID needs the literal
sequence.
04 — The wordmark
It splits the name into its two halves — the same two-audience idea the mark encodes. Lose it and the brand reads as one undifferentiated word.
Correct · Archivo 700 · wdth 112 · tracking −0.04em
SurveyStream
Tracking is tighter than the scale's −0.034em at this size. The capital S in the middle opens an optical gap the systematic rule can't know about — this is a deliberate manual override, and the only one in the system.
In a tracked uppercase eyebrow or a table header, the brand name stays sentence case as a deliberate exception. Enforce it rather than trusting authors:
.ss-brand { text-transform: none !important;
hyphens: none; white-space: nowrap; }
Example — eyebrow with the exception applied
POWERED BY SurveyStream · Q3 PANEL
surveystream.com, @surveystream. Never in prose.05 — Fallbacks
A fallback with a different x-height makes the page reflow when the webfont
lands. The fix is size-adjust, and the correct value is a ratio of measured
x-heights — both sides read out of the actual binaries.
Switch between the first two — the block barely moves. Switch to the third and the line breaks change, which is exactly the layout shift your users see on a cold load. This demo relies on a local Helvetica or Arial, so the effect is strongest on macOS and Windows and may not render on Linux.
opsz 14) for print
body. The display cut is built for backlit screens and looks cramped in ink.