Files
KDCDesignSystem/foundations/typography
Paul Roberts 6593bdf689 feat: design system v1.0.0 — reconcile tokens from cross-repo audit
Extracted real production usage from 8 KDC repos and consolidated the
consensus (kdcsurveyadd / kdcvault / kdc_void_planner) into the canonical
design.md + tokens.

Highlights:
- brand.ink #000000 -> #1A1530 (purple-tinted, matches real usage)
- brand.canvas #F5F4F0 -> #F7F4ED (warm)
- neutral ramp rebuilt around ink (purple-tinted, not cold slate)
- semantic palette retuned for warm canvas + soft tints
- elevation shadows retinted with brand-ink rgb
- new accent.gold (product) and accent.mint (marketing) tokens
- real themes/light, themes/dark, themes/high-contrast
- fleshed out every component + foundation README
- docs/consolidation-2026-05.md captures the full audit + drift inventory

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 17:51:39 +00:00
..

Foundations · Typography

KDS uses two brand typefaces.

Family Use Weights
Opificio Wordmark and display moments only. Bold (700) — canonical. Rounded and Regular cuts available for editorial.
Manrope (variable) All UI typography — headings, body, labels, captions. 200 ExtraLight, 300 Light, 400 Regular, 500 Medium, 600 SemiBold, 700 Bold, 800 ExtraBold
Roboto Mono (non-brand) Code, tabular figures, identifiers. 400, 500

Manrope is loaded as a variable font via @fontsource-variable/manrope (product apps) or next/font/google (Next.js apps). Use the Variable build wherever possible — it lets us interpolate weight without shipping multiple files.

Wordmark lockup

kode in Opificio Bold (72pt) above design consultants in Manrope ExtraLight (20pt, +4% letter-spacing).

Type scale (UI)

Token Family Size Weight Line height Use
display Opificio 72px 700 80px Hero / wordmark only
wordmarkSecondary Manrope 20px 200 28px Wordmark second line
headingXL Manrope 32px 700 40px Page hero
headingL Manrope 24px 600 32px Section heading
headingM Manrope 20px 600 28px Subsection / card title
headingS Manrope 16px 600 24px Group label
bodyL Manrope 18px 400 28px Lead paragraph
bodyM (default) Manrope 16px 400 24px Body copy
bodyS Manrope 14px 400 20px Secondary / helper
caption Manrope 12px 500 16px Labels, badges, meta
mono Roboto Mono 14px 400 20px Code, identifiers

OpenType features

Product apps enable font-feature-settings: "ss01", "cv11" on Manrope. These swap the default a and adjust the 1 / l for clearer numeric reading on the warm canvas. Keep them on by default — they are part of the brand voice.

For numerics use font-variant-numeric: tabular-nums (utility class .tnum) so columns don't jitter.

Display weight

.font-display class is Manrope 800 with letter-spacing: -0.02em. Use for hero headlines where Opificio would be too much.

Web font delivery

  • Self-host Manrope from /assets/fonts/manrope/ and preload 400 + 600 in the document head.
  • Opificio is licensed; self-host from /assets/fonts/opificio/. Don't expose source files publicly.
  • Fallback stack: 'Manrope', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif.

Do / Don't

  • Default body to bodyM with line-height: 1.5 for readability.
  • Use Opificio for the wordmark and nowhere else.
  • Don't mix Manrope with Geist / Inter / Outfit. The legacy apps that do so are drift to be migrated.
  • Don't justify text. Don't underline anything that isn't a link.