Skip to content

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.

ElementDefault
Body10pt / 15pt line height
H118pt, weight 500
H212.5pt, weight 550
H310.5pt, weight 550
H4 / H5 / H610pt / 9.5pt / 9pt
Tables and code blocks9pt
Running header and page number8pt

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.

SizeDefaultHeading
xxxs10px
xxs11px
xs12px
s13px
m / default14px
l15pxH6
xl16pxH5
xxl17pxH4
xxxl18pxH3
xxxxl19pxH2
xxxxxl20pxH1

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.

ElementScale stepDefault
codem14px
smalls13px
captionxs12px
footers13px
tablem14px
buttonm14px
embed titlexl16px
embed linkxs12px
cover titlexxxxxl20px
cover subtitlexl16px
cover metas13px
Line heightMultiplier
body1.5
heading1.2
compact1.3
relaxed1.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.

VariableDefaultPurpose
--novem-font-weight400Body text default
--novem-font-weight-heading600Headings (h1–h6)
--novem-font-weight-strong700Bold emphasis (<b>, <strong>)
--novem-font-weight-light300Light 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.

VariableDefaultPurpose
--novem-letter-spacingnormalBody and heading default
--novem-letter-spacing-tight-0.01emLarge display headings, dense numeric tables
--novem-letter-spacing-wide0.05emSmall 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.

VariableDefaultPurpose
--novem-font-features"liga" 1, "kern" 1Default features for body text
--novem-font-features-numeric"tnum" 1, "zero" 1Tabular numerals and slashed zero — applied to tables, axis ticks, KPI numbers
--novem-font-features-display"liga" 1, "dlig" 1Discretionary 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.