Vendored brand faces#
These woff2 files back the --k-font-display, --k-font-ui and --k-font-mono tokens.
They are self-hosted so a consumer with default-src 'self' — the right posture for a tool
that handles someone's documents — still renders the brand typography, and so no Kontour
surface makes a third-party request at render time.
tokens/fonts.css is generated from these files by scripts/vendor-fonts.mjs. Run that
script to refresh a family, weight, or upstream release; do not hand-edit fonts.css.
What ships, and why#
| Family | Token | Files | License |
|---|---|---|---|
| Fraunces | --k-font-display |
fraunces-{latin,latin-ext}.woff2 |
OFL 1.1 |
| Hanken Grotesk | --k-font-ui |
hanken-grotesk-{latin,latin-ext}.woff2 |
OFL 1.1 |
| IBM Plex Mono | --k-font-mono |
ibm-plex-mono-{400,500,600}-{latin1,latin2}.woff2 |
OFL 1.1 |
Fraunces and Hanken Grotesk are variable fonts, shipped as one file per unicode subset
covering the full 100 900 weight axis. Google serves the identical file for every weight
of a variable family, so vendoring the individual weights the tokens use would have shipped
the same bytes four and five times over — 496 KB instead of 124 KB for Fraunces alone.
Fraunces keeps its opsz axis variable so optical sizing still works at display sizes.
IBM Plex Mono has no variable release, so it ships as three static weights — 400, 500 and
600, the weights tokens.css and react/styles.css ask for.
Coverage is latin + latin-ext for every family (IBM's Latin1 + Latin2 subsets are the
equivalent split). Characters outside those ranges fall through to the fallback stacks
declared in tokens.css.
Provenance#
- Fraunces, Hanken Grotesk — the woff2 subsets Google Fonts serves, fetched from
fonts.gstatic.comwith theirunicode-rangedeclarations taken verbatim from the Google Fonts CSS. Neither family declares a Reserved Font Name, so the subsetting Google applies carries no naming restriction. - IBM Plex Mono — IBM's own published
@ibm/plex-monowoff2 artifacts, unmodified. IBM Plex reserves the font name "Plex", and OFL clause 5 restricts that name on modified versions; taking IBM's own build rather than a re-subset copy keeps the family name unambiguously licensed.