Typography
Novem typography is controlled by a single set of variables that cover font families, weights, sizes, line heights and the numeric features that matter for tables and charts. Markdown can target individual steps by name.
AI-assisted, human-approvednovem uses AI to review and keep our documentation up to date.
Novem typography is the same regardless of light or dark mode, which is why the tables on this page show a single default rather than a Light and Dark column. The primitives are organised into seven groups: font families, the size scale, heading sizes, weights, line heights, letter spacing, and numeric features. Together they cover everything the platform renders — body text in documents and mails, axis and tooltip text in charts, table headers and cells, callouts and code samples.
Default document typography
The built-in novem document theme uses Geist for body text and headings,
and Geist Mono for code. Both fonts ship with the renderer, including PDF
exports. The same typography applies in light and dark mode.
PDF exports embed the document fonts. PowerPoint exports use Arial for prose and Consolas for code, with the document's measured line breaks preserved, so the default deck does not depend on installing Geist.
| Element | Default |
|---|---|
| Body | 10pt / 15pt line height |
| H1 | 18pt, weight 500 |
| H2 | 12.5pt, weight 550 |
| H3 | 10.5pt, weight 550 |
| H4 / H5 / H6 | 10pt / 9.5pt / 9pt |
| Tables and code blocks | 9pt |
| Running header and page number | 8pt |
These are document theme overrides of the role variables, such as
--novem-font-size and --novem-font-size-h1. Explicit Markdown sizes
such as sz: m still use the shared pixel scale below. Sent emails and
custom document themes retain the shared defaults unless they override them.
Shared families, sizes and headings
The shared type scale starts at 14px (m), with 1 CSS pixel per step.
Sizes use CSS pixels: 14px is 10.5pt. The browser or mail client chooses its
preferred sans-serif font for body text and sans-serif for headings;
code uses monospace.
| Size | Default | Heading |
|---|---|---|
xxxs | 10px | |
xxs | 11px | |
xs | 12px | |
s | 13px | |
m / default | 14px | |
l | 15px | H6 |
xl | 16px | H5 |
xxl | 17px | H4 |
xxxl | 18px | H3 |
xxxxl | 19px | H2 |
xxxxxl | 20px | H1 |
Markdown sz supports xxxs through xxxl. The additional theme steps
xxxxl and xxxxxl supply H2 and H1. Each size is exposed as
--novem-font-size-{size}; the default and heading variables alias these
steps, so document themes can override them together or individually.
| Element | Scale step | Default |
|---|---|---|
| code | m | 14px |
| small | s | 13px |
| caption | xs | 12px |
| footer | s | 13px |
| table | m | 14px |
| button | m | 14px |
| embed title | xl | 16px |
| embed link | xs | 12px |
| cover title | xxxxxl | 20px |
| cover subtitle | xl | 16px |
| cover meta | s | 13px |
| Line height | Multiplier |
|---|---|
| body | 1.5 |
| heading | 1.2 |
| compact | 1.3 |
| relaxed | 1.8 |
Bulleted and numbered lists use 1em of left padding (14px at the default size).
The indentation follows the list's font size; wrapped lines align with the item text.
Nested lists add the same indentation at each level. Document themes can adjust
this with --novem-list-indent.
Embedded visualization captions sit 2px below the visualization.
Document themes can adjust this gap with --novem-embed-caption-gap.
KPI sizing is independent of the body scale. Inline code inherits its surrounding text size. Body text, captions and code use the body line height. Headings use the heading line height; compact tables use the compact line height.
Font families are exposed as --novem-font-body, --novem-font-heading,
and --novem-font-mono. Document themes
can override these variables; sent e-mails receive the shared defaults as
inline styles because mail clients do not reliably support CSS variables.
Weights
The platform exposes the four most common weights as named variables. A theme can also use other weights supported by the selected font.
| Variable | Default | Purpose |
|---|---|---|
--novem-font-weight | 400 | Body text default |
--novem-font-weight-heading | 600 | Headings (h1–h6) |
--novem-font-weight-strong | 700 | Bold emphasis (<b>, <strong>) |
--novem-font-weight-light | 300 | Light treatments — cover subtitles, eyebrow text |
Letter spacing
Letter spacing — also known as tracking — defaults to the font's natural metrics. Two named overrides cover the most common cases where you'd want to deviate.
| Variable | Default | Purpose |
|---|---|---|
--novem-letter-spacing | normal | Body and heading default |
--novem-letter-spacing-tight | -0.01em | Large display headings, dense numeric tables |
--novem-letter-spacing-wide | 0.05em | Small caps, eyebrow labels, axis tick text |
Numeric features
Tables and charts that align columns of numbers benefit from tabular
numerals (every digit takes the same width) and a slashed zero (so a
0 doesn't get confused with an O). Novem exposes these through
font-feature-settings strings so that a theme can tune the typographic
features its font supports.
| Variable | Default | Purpose |
|---|---|---|
--novem-font-features | "liga" 1, "kern" 1 | Default features for body text |
--novem-font-features-numeric | "tnum" 1, "zero" 1 | Tabular numerals and slashed zero — applied to tables, axis ticks, KPI numbers |
--novem-font-features-display | "liga" 1, "dlig" 1 | Discretionary ligatures for cover and hero text |
Markdown integration
The size scale is also exposed in markdown through the sz paragraph
config, so authors can change the size of an individual paragraph
without dropping into CSS.
{{ para sz: l }}
This paragraph uses the large size.
{{ /para }}
Valid sz values are xxxs, xxs, xs, s, m, l, xl, xxl,
and xxxl. Override a step in your org theme and
every paragraph that targets that step shifts with it.