Typography
Mulish on one ladder of sizes, each with one job: how to pick a size, how type behaves on phones, and how it maps to Arch.
One typeface, Mulish, on one short ladder of sizes. Each step has one job, so a screen's hierarchy reads at a glance: a title, the text under it, the details under that. The same ladder works on the web, on phones and in the mobile app; only display headlines grow with the screen.
Mulish
Aa
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789 $ % · → ?!
- Regular 400Body, meta
- Medium 500Field labels
- SemiBold 600Buttons, links, names in rows
- Bold 700Titles, stats, eyebrows
The app loads Mulish once with next/font (weights 400 to 700), which sets --font-mulish; the package's base styles add -0.01em letter spacing and smoothing. No component names a font, and nothing asks for a weight that isn't loaded (800 would be faked).
The ladder
Ten steps from 11 to 48px, each with its line height built in. Write the named size (text-13, text-18): it sets the line height too. Nothing sits between the steps, and nothing goes under 11px except the Badge's 8px label.
Display
28 → 36 → 48 · Bold
Your network, at work
The headline of a public or marketing page. Never inside the app.
text-28 md:text-36 lg:text-48 font-bold tracking-tightPage title
22 / 28 · Bold
Network overview
The page's one h1. Also a dashboard stat, with
tabular-nums.text-22 font-bold tracking-tightTitle
18 / 26 · Bold
Make an intro
Dialogs, sheets, drawers, and a heading over a group of cards.
text-18 font-bold tracking-tightSmall title
16 / 24 · Bold
Recent intros
A card's heading. 14px in a header strip or a small card.
text-16 font-bold tracking-tightBody
14 / 20 · Regular
Leah leads Saltmarsh's climate fund and backs seed-stage grid software.
Reading text: descriptions, dialogs, forms, empty states, and most text on phones.
text-14Label
14 / 20 · SemiBold
Make intro
Buttons and links (SemiBold); names and field labels.
text-14 font-semiboldBody dense
13 / 20 · Regular
Priya Natarajan was introduced to Leah Okonkwo
Rows, tables, feeds and lists, where many items stack.
text-13Meta
12 / 16 · Regular
2 days ago · 4 mutual
Dates, counts, help text, column headers.
text-12Eyebrow
11 / 16 · Bold, caps
Industry
A small label over a value. Rare.
text-11 font-bold uppercase tracking-[0.55px]
Picking a size
Pick by the job, not by how big it should look. Most of these come with the component, so a screen rarely writes a size at all.
| You're setting | Use |
|---|---|
| The headline of a public page | Display |
| The name of the page you're on | Page title (22) |
| A number on a dashboard | Page title size, tabular-nums (StatBox) |
| A dialog, sheet or drawer's title | Title (18), set by the component |
| A heading above a group of cards | Title (18) |
| A card's heading | Small title (16), set by Card |
| A paragraph, a form, a dialog's message | Body (14) |
| A list of people, intros or companies | Body dense (13), names SemiBold |
| When something happened, how many, a hint | Meta (12) |
| A button or a link | Label (14 SemiBold), set by Button |
Web and phones
- The ladder is the same on every screen. A phone doesn't shrink text: 14px body and 12px meta stay readable at arm's length.
- Only Display grows with the screen:
text-28 md:text-36 lg:text-48. App screens never use it. - Text fields are 16px on phones and 14px from 768px up (
text-16 md:text-14), because iPhones zoom into any field set smaller. Input, Textarea, SearchInput and TagInput already do this; a hand-built field must too. - Long titles wrap rather than shrink. Truncate a name in a row; never a page title.
- The mobile app uses the same numbers as React Native
fontSizevalues, with the same line heights: 12/16, 14/20, 16/24, 18/26, 22/28.
Using type
One step apart, not two sizes the same
Recent intros
Priya Natarajan → Leah Okonkwo
2 days ago
Recent intros
Priya Natarajan → Leah Okonkwo
2 days ago
Numbers line up
- $1,250,000
- $84,500
- $312,000
- $9,750
tabular-nums, aligned right, so digits stack.- $1,250,000
- $84,500
- $312,000
- $9,750
Sentence case
- Titles and stats are Bold. Buttons, links and names in rows are SemiBold. Field labels are Medium. Everything else is Regular; Bold for a word of emphasis.
- Text colors come from Color:
--text-primaryfor titles and names,--text-bodyfor reading text,--text-mutedfor meta. - One h1 per page. Heading levels follow the page's outline; the size follows the job. Never skip a level to get a smaller size.
- Truncate names in rows to one line (
truncate, withmin-w-0on the flex child) and clamp card descriptions to two (line-clamp-2). Never truncate an amount or a count. - Reading text that runs across a page stops at about 65 characters a line (
max-w-prose).
Arch in Figma
Arch's text styles in Figma were drawn for the mobile app, a step or two larger than the web. Use the ladder above in code; when you design in Figma, this is the nearest Arch style for each step.
| Step | Size | Nearest Arch style |
|---|---|---|
| Display | 28 → 36 → 48 | Heading 1 (28 B) → Display 2 (48 B) |
| Page title | 22 / 28 | between Heading 2 and Heading 1 |
| Title | 18 / 26 | Heading 2 (18 B) |
| Small title | 16 / 24 | Heading 3 (16 B) |
| Body | 14 / 20 | Body 3 (14 LH20) |
| Label | 14 / 20 | Button (14 SB) |
| Body dense | 13 / 20 | Body 3, 1px smaller |
| Meta | 12 / 16 | Caption (12) |
| Eyebrow | 11 / 16 | Overline (10 B), 1px larger |
Profile pages
Bridge OS's member and contact profile pages (/to/[username], /contact/[refId]) use steps of 4: 12, 16, 20 and 28px. That is a recorded exception for those pages only, and the parts they share with other screens (profile card, intros table, ICP card). Button, Badge and the rest stay on the ladder.
Rules
Sentence case
Buttons, titles, headings, tabs, labels and statuses use sentence case: only the first word and names get a capital. "Make intro", "Intro forwarded", "Stop sharing".
Nothing below 11px
No text is smaller than 11px, except the 8px uppercase Badge sticker. Use the scale: 24, 22, 16, 15, 14, 13 (body), 12, 11.
Numbers line up
Numbers that change or get compared (stats, counts, dates in a column, page numbers) use tabular-nums, so digits keep their width and columns line up.