Typography in Nubisco is built on three layers: a raw scale of discrete sizes, a set of semantic tokens for line-height and letter-spacing, and type sets — pre-configured roles that bundle everything together into a named identity like body-md or heading-03. Components always use type sets, never raw scale values directly.
Typefaces
Nubisco ships with two typefaces, both served via the font plugin.
Plus Jakarta Sans — sans-serif
The primary typeface for all UI text. It is a geometric sans-serif with strong legibility at small sizes and enough personality to work at display scale. Used for labels, body copy, headings, and display type.
Fira Code — monospace
Used exclusively for code, JSON viewers, technical values, and keyboard shortcuts. Its ligatures are enabled by default.
The scale
The font-size scale is a curated set of values from 8px to 76px. Values are named by their pixel equivalent and exposed as CSS custom properties on :root.
How CSS variables are generated
All typographic values are derived from SCSS maps in src/styles/variables/_type.scss and emitted as CSS custom properties on :root by _theme.scss. Three categories:
| Prefix | Example | Source map |
|---|---|---|
--nb-font-size-{N} | --nb-font-size-14 | $fontSizes |
--nb-font-weight-{name} | --nb-font-weight-semibold | $fontWeight |
--nb-font-family-{name} | --nb-font-family-mono | $fontFamilies |
--nb-line-height-{name} | --nb-line-height-normal | $lineHeights |
--nb-letter-spacing-{name} | --nb-letter-spacing-tight | $letterSpacing |
--nb-type-{set}-{prop} | --nb-type-body-md-size | $typeSets |