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-serifText 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:
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);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-sm | text-md | text-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) + borderInline 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.