Daybridge Design System
Foundations

Typography

Type scale, weights, line heights, and the safe zone

Font family

Daybridge uses Inter Variable as its primary typeface on the web. On iOS and Android, we use the platform system fonts (SF Pro and Roboto respectively).

"InterVariable", "SF Pro Display", -apple-system, BlinkMacSystemFont,
"Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans",
"Helvetica Neue", sans-serif

Text rendering

-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;

Type scale

The standard UI size is 13px on desktop and 15px on mobile. The scale uses eight steps:

Name
Size
Base weight
Sample
2xs
11px
450
Updated 3 min ago
xs
12px
450
All day · London
sm
13px
450
Weekly team standup
md
15px
450
Discuss Q3 roadmap priorities and review the marketing launch timeline
lg
18px
500
Upcoming events
xl
24px
500
Calendar settings
2xl
32px
600
Good morning
3xl
44px
600
Welcome to Daybridge

Line height

Each font size has two line-height values depending on context. Both are derived from the font size using CSS round() and clamp(), producing values snapped to a 4px grid.

Component line-height

For single-line UI elements — sidebar items, buttons, table cells, labels. Tight, just enough to contain the glyphs. This is the global default.

line-height: round(up, 1em + clamp(2px, 1em - 12px, 8px), 2px);

Reading line-height

For multi-line content — event descriptions, editor text, modal body copy. Generous, optimised for comfortable reading.

line-height: round(up, 1em + clamp(4px, 1em - 8px, 12px), 4px);
sm (13px)
Component
Calendar events are displayed with their title, time, and location. When an event spans multiple lines, the line height determines readability.
Sidebar items, table cells, single-line UI
Reading
Calendar events are displayed with their title, time, and location. When an event spans multiple lines, the line height determines readability.
Descriptions, multi-line content
md (15px)
Component
Calendar events are displayed with their title, time, and location. When an event spans multiple lines, the line height determines readability.
Modal labels, form fields
Reading
Calendar events are displayed with their title, time, and location. When an event spans multiple lines, the line height determines readability.
Editor body, long-form text

Padding around text

When text appears inside a boxed element — a button, tag, badge, or input — the component line-height defines a safe zone around the glyphs. Padding extends outward from this using the lh unit, which resolves to the element's computed line-height. This means padding scales automatically with text size — no per-size values needed.

Five density tiers, named with t-shirt sizes to match the radius and shadow scales:

/* xs — tags, badges, inline labels */
padding: 0.075lh 0.375lh;

/* sm — small buttons, chips, dense controls */
padding: 0.125lh 0.5lh;

/* md — buttons, standard controls */
padding: 0.25lh 0.625lh;

/* lg — prominent actions, large buttons */
padding: 0.4lh 0.875lh;

/* xl — text inputs, search fields */
padding: 0.625lh 0.875lh;

Both axes use lh (line-height-relative) so all padding scales proportionally with text size.

text-smtext-mdtext-lg
xs
Label
Label
Label
sm
Label
Label
Label
md
Label
Label
Label
lg
Label
Label
Label
xl
Label
Label
Label

Setting element heights directly should be avoided. Instead, height is determined by the safe zone:

element height = line-height + (2 × vertical padding) + border

Inline congruence

When a badge or tag appears inline with text, its total height must fit within the surrounding text's reading line-height. Otherwise it pushes adjacent lines apart.

Rule: use one step down from the surrounding text size.

One step down (correct)13px tag in 15px text20px ≤ 24px
Meeting tagged Work scheduled for next Tuesday
Same size (overflows)15px tag in 15px text25px > 24px
Meeting tagged Work scheduled for next Tuesday

Text colors

Three semantic color tokens control text contrast. Each maps to a luminance shade, and the resolved color depends on the color mode applied to the element — neutral text is gray, brand text takes the brand hue, and so on. See the colors guide for how semantic colors work.

LightDark
ShadeAlphaShadeAlpha
Text
high-contrast151
white1
medium-contrast111
71
low-contrast101
81

Examples

background · light
Event detailshigh-contrast
Team standup with design and engineering — recurring weeklymedium-contrast
Tomorrow · 10:00 AM · 30 minlow-contrast
background · dark
Event detailshigh-contrast
Team standup with design and engineering — recurring weeklymedium-contrast
Tomorrow · 10:00 AM · 30 minlow-contrast
surface · light
Event detailshigh-contrast
Team standup with design and engineering — recurring weeklymedium-contrast
Tomorrow · 10:00 AM · 30 minlow-contrast
surface · dark
Event detailshigh-contrast
Team standup with design and engineering — recurring weeklymedium-contrast
Tomorrow · 10:00 AM · 30 minlow-contrast
elevated · light
Event detailshigh-contrast
Team standup with design and engineering — recurring weeklymedium-contrast
Tomorrow · 10:00 AM · 30 minlow-contrast
elevated · dark
Event detailshigh-contrast
Team standup with design and engineering — recurring weeklymedium-contrast
Tomorrow · 10:00 AM · 30 minlow-contrast