Typography
MaV supports three interchangeable UI font families — Plus Jakarta Sans, Inter, and Poppins. One is active at a time via --font-active. All --font-display and --font-body tokens reference it automatically.
Font Families
Choose the active family above. Each card shows the typeface in its own rendering — independent of the active selection — so you can compare personality before switching.
abcdefghijklmnopqrstuvwxyz
0123456789 !@#$%&
abcdefghijklmnopqrstuvwxyz
0123456789 !@#$%&
abcdefghijklmnopqrstuvwxyz
0123456789 !@#$%&
Font Weights
All three families ship the same five weights. Samples render in the currently active family.
Heading Scale
Bold weight (700) at all heading sizes. Letter-spacing tightens at display sizes.
Body Scale
Three weight stacks per size: Regular (400), Medium (500), Bold (700).
Monospace
JetBrains Mono is used for all code snippets, token names, numeric data, and OTP slots. It is not swappable — it is a fixed system choice independent of the UI font.
abcdefghijklmnopqrstuvwxyz
0123456789 !@#$%& const fn = () => {}
CSS Custom Properties
All typography references should go through --font-display or --font-body — never hardcode a family name in component CSS.
| Token | Value | Layer | Purpose | Preview |
|---|---|---|---|---|
| --font-jakarta | 'Plus Jakarta Sans', sans-serif | Layer 0 | Primitive — Jakarta stack | Aa Bb Cc |
| --font-inter | 'Inter', sans-serif | Layer 0 | Primitive — Inter stack | Aa Bb Cc |
| --font-poppins | 'Poppins', sans-serif | Layer 0 | Primitive — Poppins stack | Aa Bb Cc |
| --font-active | 'Plus Jakarta Sans', sans-serif | Layer 1 | Active selection — override to switch all UI | Aa Bb Cc |
| --font-display | var(--font-active) | Layer 2 | Semantic — headings, display text | Display |
| --font-body | var(--font-active) | Layer 2 | Semantic — body copy, labels | Body copy |
| --font-mono | 'JetBrains Mono', monospace | Layer 0 | Fixed — code, tokens, OTP digits | const x = 1 |
| --core/font-weight/Regular | 400 | Layer 0 | Body text | Regular |
| --core/font-weight/Medium | 500 | Layer 0 | Labels, buttons | Medium |
| --core/font-weight/Semi Bold | 600 | Layer 0 | Section labels, nav items | Semi Bold |
| --core/font-weight/Bold | 700 | Layer 0 | Headings, emphasis | Bold |
useFonts() inside the component — never at module level. Scale values with fontPixel() for density-independent rendering. The --font-active token corresponds to the fontFamily key in your RN theme object.