Typography
Rules of typesetting throughout the system.
Font Families
Ambient uses two custom variable fonts designed for optimal readability across interfaces.
Booton
The primary typeface for all UI text. Booton is a humanist sans-serif with excellent legibility at small sizes and a warm, approachable character.
The quick brown fox jumps over the lazy dog.
font-family: var(--font-booton), system-ui, sans-serif;ABC Otto
A display typeface with distinctive character, used sparingly for branded moments and decorative headings.
The quick brown fox jumps over the lazy dog.
Reserve Otto for marketing pages, hero sections, and brand expressions.
font-family: var(--font-otto);Type Scale
A harmonious set of font sizes that maintain visual hierarchy across the interface.
Font weights
Booton is a variable font supporting weights from 100 to 900. The system uses three semantic weights.
Line Height
Two line height values cover most typographic needs.
Letter Spacing
Numbers
Booton's proportional digits vary in width by up to ~25% (1 is much narrower than 0), so columns of numbers only align with tabular figures. But Booton's tnum feature also widens the comma, period, and space to a full figure slot — a bare tabular-nums makes any value with a thousands separator, decimal, unit, or currency symbol render with gappy punctuation ($3,200, 8 yr).
So use TabularNum from @smartacteam/ambient-web/tabular-num for any rendered number — it applies tabular widths to the digit runs only, leaving punctuation at its natural width. A bare tabular-nums class is a lint error.
That holds even for a value that has no punctuation today. An integer becomes a grouped one the moment the data grows past 999, or a formatter gains a unit — and that change happens far from the class that decides how it renders. TabularNum on a plain integer renders identically to tabular-nums, so the uniform rule costs nothing and removes the question.
import { TabularNum } from "@smartacteam/ambient-web/tabular-num";
<TabularNum>{value.toLocaleString()}</TabularNum>;Usage guidelines
Hierarchy
- Use
2xl–xlsizes for page titles and section headings - Use
lg–mdfor subheadings and lead paragraphs - Use
smfor body text, form labels, and UI controls - Use
xsfor captions, helper text, and metadata
Accessibility
- Maintain a minimum font size of 12px (
xs) for legibility - Ensure sufficient color contrast (
4.5:1for body text,3:1for large text) - Avoid using font weight alone to convey meaning
Responsive considerations
- Base font size is
16px(1rem) by default - Type scales proportionally with user browser settings
- Consider reducing heading sizes on mobile viewports