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
In progress
sm
13px
450
Weekly team standup
md
15px
450
Discuss Q3 roadmap priorities and assign owners to each workstream
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(1px, 1em - 12px, 8px), 4px);

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.

Four density tiers:

/* tight — tags, badges, inline labels */
padding: 0lh 0.375lh;

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

/* spacious — buttons, inputs, standard controls */
padding: 0.25lh 0.75lh;

/* extra-spacious — large inputs, prominent actions */
padding: 0.5lh 1.25lh;

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

text-smtext-mdtext-lg
tight
Label
Label
Label
normal
Label
Label
Label
spacious
Label
Label
Label
extra-spacious
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
Assigned to project with label Bug and due next Tuesday
Same size (overflows)15px tag in 15px text25px > 24px
Assigned to project with label Bug and due next Tuesday