Typography Tokens
Typography tokens define the base typographic physics and rhythm of the system. These values are the lowest-level building blocks from which semantic text styles (e.g. body, headline, label) are composed. They should be stable, predictable, and platform-agnostic.
We adhere to property names defined in React Native's Text Style Props specifications.
Responsive to Screen Sizes
Typography tokens are provided as responsive by default as adapting to different screen sizes ensures optimal readability and user experience across our products.
We use "mobile-first" approach, meaning that typography styles are defined for the smallest screen size first and then progressively enhanced for larger screens.
In case some property should remain the same across all screen sizes, we skip defining separate tokens or copy same values for larger screens. This approach keeps the door open for future adjustments without enforcing unnecessary differentiation up front.
Naming Convention
<propertyName>.<propertyValue>Default Typography Tokens
The following set of tokens represent the default combinations that should cover most use cases in our design system. No values are strictly enforced here, however, we recommend using these as a starting point for your products.
- Preview
- CSS Custom Properties
- Figma JSON
- React Native
Font Family
| Token name | Value |
|---|---|
fontFamily.headline | Inter |
fontFamily.display | Inter |
fontFamily.body | Inter |
fontFamily.label | Inter |
fontFamily.monospace | monospace |
Font Size
| Token name | default | phone | tablet | desktop |
|---|---|---|---|---|
fontSize.title | 32px | 40px | 48px | 56px |
fontSize.hero | 28px | 32px | 40px | 44px |
fontSize.headline | 24px | 28px | 36px | 40px |
fontSize.subheadline | 22px | 24px | 28px | 32px |
fontSize.lead | 20px | 20px | 22px | 24px |
fontSize.perex | 18px | 18px | 18px | 18px |
fontSize.body | 16px | 16px | 16px | 16px |
fontSize.label | 14px | 14px | 14px | 14px |
fontSize.caption | 12px | 12px | 12px | 12px |
fontSize.footnote | 10px | 10px | 10px | 10px |
Font Style
| Token name | Value |
|---|---|
fontStyle.italic | italic |
fontStyle.normal | normal |
Font Weight
| Token name | Value |
|---|---|
fontWeight.thin | 100 |
fontWeight.extraLight | 200 |
fontWeight.light | 300 |
fontWeight.regular | 400 |
fontWeight.medium | 500 |
fontWeight.semiBold | 600 |
fontWeight.bold | 700 |
fontWeight.extraBold | 800 |
fontWeight.black | 900 |
fontWeight.extraBlack | 950 |
Letter Spacing
| Token name | default | phone | tablet | desktop |
|---|---|---|---|---|
letterSpacing.title | 0.8 | 0.8 | 0.8 | 0.8 |
letterSpacing.hero | 0.6 | 0.6 | 0.6 | 0.6 |
letterSpacing.headline | 0.4 | 0.4 | 0.4 | 0.4 |
letterSpacing.subheadline | 0.3 | 0.3 | 0.3 | 0.3 |
letterSpacing.lead | 0.3 | 0.3 | 0.3 | 0.3 |
letterSpacing.perex | 0.2 | 0.2 | 0.2 | 0.2 |
letterSpacing.body | 0.1 | 0.1 | 0.1 | 0.1 |
letterSpacing.label | 0.1 | 0.1 | 0.1 | 0.1 |
letterSpacing.caption | 0.1 | 0.1 | 0.1 | 0.1 |
letterSpacing.footnote | 0.1 | 0.1 | 0.1 | 0.1 |
Line Height
| Token name | default | phone | tablet | desktop |
|---|---|---|---|---|
lineHeight.title | 36px | 40px | 40px | 56px |
lineHeight.hero | 32px | 32px | 32px | 44px |
lineHeight.headline | 28px | 32px | 32px | 44px |
lineHeight.subheadline | 24px | 28px | 28px | 36px |
lineHeight.lead | 24px | 26px | 26px | 32px |
lineHeight.perex | 24px | 24px | 24px | 24px |
lineHeight.body | 20px | 20px | 20px | 20px |
lineHeight.label | 16px | 16px | 16px | 16px |
lineHeight.caption | 16px | 16px | 16px | 16px |
lineHeight.footnote | 16px | 16px | 16px | 16px |
:root {
--fontFamily--headline: Inter;
--fontFamily--display: Inter;
--fontFamily--body: Inter;
--fontFamily--label: Inter;
--fontFamily--monospace: monospace;
--fontSize--title: 32px;
--fontSize--hero: 28px;
--fontSize--headline: 24px;
--fontSize--subheadline: 22px;
--fontSize--lead: 20px;
--fontSize--perex: 18px;
--fontSize--body: 16px;
--fontSize--label: 14px;
--fontSize--caption: 12px;
--fontSize--footnote: 10px;
--fontStyle--italic: italic;
--fontStyle--normal: normal;
--fontWeight--thin: 100;
--fontWeight--extraLight: 200;
--fontWeight--light: 300;
--fontWeight--regular: 400;
--fontWeight--medium: 500;
--fontWeight--semiBold: 600;
--fontWeight--bold: 700;
--fontWeight--extraBold: 800;
--fontWeight--black: 900;
--fontWeight--extraBlack: 950;
--letterSpacing--title: 0.8;
--letterSpacing--hero: 0.6;
--letterSpacing--headline: 0.4;
--letterSpacing--subheadline: 0.3;
--letterSpacing--lead: 0.3;
--letterSpacing--perex: 0.2;
--letterSpacing--body: 0.1;
--letterSpacing--label: 0.1;
--letterSpacing--caption: 0.1;
--letterSpacing--footnote: 0.1;
--lineHeight--title: 36px;
--lineHeight--hero: 32px;
--lineHeight--headline: 28px;
--lineHeight--subheadline: 24px;
--lineHeight--lead: 24px;
--lineHeight--perex: 24px;
--lineHeight--body: 20px;
--lineHeight--label: 16px;
--lineHeight--caption: 16px;
--lineHeight--footnote: 16px;
}
/**
* Responsive typographic scales:
*/
@media (min-width: 375px) {
--fontSize--title: 40px;
--fontSize--hero: 32px;
--fontSize--headline: 28px;
--fontSize--subheadline: 24px;
--fontSize--lead: 20px;
--fontSize--perex: 18px;
--fontSize--body: 16px;
--fontSize--label: 14px;
--fontSize--caption: 12px;
--fontSize--footnote: 10px;
--letterSpacing--title: 0.8;
--letterSpacing--hero: 0.6;
--letterSpacing--headline: 0.4;
--letterSpacing--subheadline: 0.3;
--letterSpacing--lead: 0.3;
--letterSpacing--perex: 0.2;
--letterSpacing--body: 0.1;
--letterSpacing--label: 0.1;
--letterSpacing--caption: 0.1;
--letterSpacing--footnote: 0.1;
--lineHeight--title: 40px;
--lineHeight--hero: 32px;
--lineHeight--headline: 32px;
--lineHeight--subheadline: 28px;
--lineHeight--lead: 26px;
--lineHeight--perex: 24px;
--lineHeight--body: 20px;
--lineHeight--label: 16px;
--lineHeight--caption: 16px;
--lineHeight--footnote: 16px;
}
@media (min-width: 768px) {
--fontSize--title: 48px;
--fontSize--hero: 40px;
--fontSize--headline: 36px;
--fontSize--subheadline: 28px;
--fontSize--lead: 22px;
--fontSize--perex: 18px;
--fontSize--body: 16px;
--fontSize--label: 14px;
--fontSize--caption: 12px;
--fontSize--footnote: 10px;
--letterSpacing--title: 0.8;
--letterSpacing--hero: 0.6;
--letterSpacing--headline: 0.4;
--letterSpacing--subheadline: 0.3;
--letterSpacing--lead: 0.3;
--letterSpacing--perex: 0.2;
--letterSpacing--body: 0.1;
--letterSpacing--label: 0.1;
--letterSpacing--caption: 0.1;
--letterSpacing--footnote: 0.1;
--lineHeight--title: 40px;
--lineHeight--hero: 32px;
--lineHeight--headline: 32px;
--lineHeight--subheadline: 28px;
--lineHeight--lead: 26px;
--lineHeight--perex: 24px;
--lineHeight--body: 20px;
--lineHeight--label: 16px;
--lineHeight--caption: 16px;
--lineHeight--footnote: 16px;
}
@media (min-width: 1280px) {
--fontSize--title: 56px;
--fontSize--hero: 44px;
--fontSize--headline: 40px;
--fontSize--subheadline: 32px;
--fontSize--lead: 24px;
--fontSize--perex: 18px;
--fontSize--body: 16px;
--fontSize--label: 14px;
--fontSize--caption: 12px;
--fontSize--footnote: 10px;
--letterSpacing--title: 0.8;
--letterSpacing--hero: 0.6;
--letterSpacing--headline: 0.4;
--letterSpacing--subheadline: 0.3;
--letterSpacing--lead: 0.3;
--letterSpacing--perex: 0.2;
--letterSpacing--body: 0.1;
--letterSpacing--label: 0.1;
--letterSpacing--caption: 0.1;
--letterSpacing--footnote: 0.1;
--lineHeight--title: 56px;
--lineHeight--hero: 44px;
--lineHeight--headline: 44px;
--lineHeight--subheadline: 36px;
--lineHeight--lead: 32px;
--lineHeight--perex: 24px;
--lineHeight--body: 20px;
--lineHeight--label: 16px;
--lineHeight--caption: 16px;
--lineHeight--footnote: 16px;
}
{
"Typography": {
"typography/fontFamily/headline": {
"$type": "text",
"$value": {
"default": "Inter",
"phone": "Inter",
"tablet": "Inter",
"desktop": "Inter"
}
},
"typography/fontFamily/display": {
"$type": "text",
"$value": {
"default": "Inter",
"phone": "Inter",
"tablet": "Inter",
"desktop": "Inter"
}
},
"typography/fontFamily/body": {
"$type": "text",
"$value": {
"default": "Inter",
"phone": "Inter",
"tablet": "Inter",
"desktop": "Inter"
}
},
"typography/fontFamily/label": {
"$type": "text",
"$value": {
"default": "Inter",
"phone": "Inter",
"tablet": "Inter",
"desktop": "Inter"
}
},
"typography/fontFamily/monospace": {
"$type": "text",
"$value": {
"default": "monospace",
"phone": "monospace",
"tablet": "monospace",
"desktop": "monospace"
}
},
"typography/fontSize/title": {
"$type": "dimension",
"$value": {
"default": 32,
"phone": 40,
"tablet": 48,
"desktop": 56
}
},
"typography/fontSize/hero": {
"$type": "dimension",
"$value": {
"default": 28,
"phone": 32,
"tablet": 40,
"desktop": 44
}
},
"typography/fontSize/headline": {
"$type": "dimension",
"$value": {
"default": 24,
"phone": 28,
"tablet": 36,
"desktop": 40
}
},
"typography/fontSize/subheadline": {
"$type": "dimension",
"$value": {
"default": 22,
"phone": 24,
"tablet": 28,
"desktop": 32
}
},
"typography/fontSize/lead": {
"$type": "dimension",
"$value": {
"default": 20,
"phone": 20,
"tablet": 22,
"desktop": 24
}
},
"typography/fontSize/perex": {
"$type": "dimension",
"$value": {
"default": 18,
"phone": 18,
"tablet": 18,
"desktop": 18
}
},
"typography/fontSize/body": {
"$type": "dimension",
"$value": {
"default": 16,
"phone": 16,
"tablet": 16,
"desktop": 16
}
},
"typography/fontSize/label": {
"$type": "dimension",
"$value": {
"default": 14,
"phone": 14,
"tablet": 14,
"desktop": 14
}
},
"typography/fontSize/caption": {
"$type": "dimension",
"$value": {
"default": 12,
"phone": 12,
"tablet": 12,
"desktop": 12
}
},
"typography/fontSize/footnote": {
"$type": "dimension",
"$value": {
"default": 10,
"phone": 10,
"tablet": 10,
"desktop": 10
}
},
"typography/fontStyle/italic": {
"$type": "text",
"$value": {
"default": "italic",
"phone": "italic",
"tablet": "italic",
"desktop": "italic"
}
},
"typography/fontStyle/normal": {
"$type": "text",
"$value": {
"default": "normal",
"phone": "normal",
"tablet": "normal",
"desktop": "normal"
}
},
"typography/fontWeight/thin": {
"$type": "dimension",
"$value": {
"default": 100,
"phone": 100,
"tablet": 100,
"desktop": 100
}
},
"typography/fontWeight/extraLight": {
"$type": "dimension",
"$value": {
"default": 200,
"phone": 200,
"tablet": 200,
"desktop": 200
}
},
"typography/fontWeight/light": {
"$type": "dimension",
"$value": {
"default": 300,
"phone": 300,
"tablet": 300,
"desktop": 300
}
},
"typography/fontWeight/regular": {
"$type": "dimension",
"$value": {
"default": 400,
"phone": 400,
"tablet": 400,
"desktop": 400
}
},
"typography/fontWeight/medium": {
"$type": "dimension",
"$value": {
"default": 500,
"phone": 500,
"tablet": 500,
"desktop": 500
}
},
"typography/fontWeight/semiBold": {
"$type": "dimension",
"$value": {
"default": 600,
"phone": 600,
"tablet": 600,
"desktop": 600
}
},
"typography/fontWeight/bold": {
"$type": "dimension",
"$value": {
"default": 700,
"phone": 700,
"tablet": 700,
"desktop": 700
}
},
"typography/fontWeight/extraBold": {
"$type": "dimension",
"$value": {
"default": 800,
"phone": 800,
"tablet": 800,
"desktop": 800
}
},
"typography/fontWeight/black": {
"$type": "dimension",
"$value": {
"default": 900,
"phone": 900,
"tablet": 900,
"desktop": 900
}
},
"typography/fontWeight/extraBlack": {
"$type": "dimension",
"$value": {
"default": 950,
"phone": 950,
"tablet": 950,
"desktop": 950
}
},
"typography/letterSpacing/title": {
"$type": "dimension",
"$value": {
"default": 0.8,
"phone": 0.8,
"tablet": 0.8,
"desktop": 0.8
}
},
"typography/letterSpacing/hero": {
"$type": "dimension",
"$value": {
"default": 0.6,
"phone": 0.6,
"tablet": 0.6,
"desktop": 0.6
}
},
"typography/letterSpacing/headline": {
"$type": "dimension",
"$value": {
"default": 0.4,
"phone": 0.4,
"tablet": 0.4,
"desktop": 0.4
}
},
"typography/letterSpacing/subheadline": {
"$type": "dimension",
"$value": {
"default": 0.3,
"phone": 0.3,
"tablet": 0.3,
"desktop": 0.3
}
},
"typography/letterSpacing/lead": {
"$type": "dimension",
"$value": {
"default": 0.3,
"phone": 0.3,
"tablet": 0.3,
"desktop": 0.3
}
},
"typography/letterSpacing/perex": {
"$type": "dimension",
"$value": {
"default": 0.2,
"phone": 0.2,
"tablet": 0.2,
"desktop": 0.2
}
},
"typography/letterSpacing/body": {
"$type": "dimension",
"$value": {
"default": 0.1,
"phone": 0.1,
"tablet": 0.1,
"desktop": 0.1
}
},
"typography/letterSpacing/label": {
"$type": "dimension",
"$value": {
"default": 0.1,
"phone": 0.1,
"tablet": 0.1,
"desktop": 0.1
}
},
"typography/letterSpacing/caption": {
"$type": "dimension",
"$value": {
"default": 0.1,
"phone": 0.1,
"tablet": 0.1,
"desktop": 0.1
}
},
"typography/letterSpacing/footnote": {
"$type": "dimension",
"$value": {
"default": 0.1,
"phone": 0.1,
"tablet": 0.1,
"desktop": 0.1
}
},
"typography/lineHeight/title": {
"$type": "dimension",
"$value": {
"default": 36,
"phone": 40,
"tablet": 40,
"desktop": 56
}
},
"typography/lineHeight/hero": {
"$type": "dimension",
"$value": {
"default": 32,
"phone": 32,
"tablet": 32,
"desktop": 44
}
},
"typography/lineHeight/headline": {
"$type": "dimension",
"$value": {
"default": 28,
"phone": 32,
"tablet": 32,
"desktop": 44
}
},
"typography/lineHeight/subheadline": {
"$type": "dimension",
"$value": {
"default": 24,
"phone": 28,
"tablet": 28,
"desktop": 36
}
},
"typography/lineHeight/lead": {
"$type": "dimension",
"$value": {
"default": 24,
"phone": 26,
"tablet": 26,
"desktop": 32
}
},
"typography/lineHeight/perex": {
"$type": "dimension",
"$value": {
"default": 24,
"phone": 24,
"tablet": 24,
"desktop": 24
}
},
"typography/lineHeight/body": {
"$type": "dimension",
"$value": {
"default": 20,
"phone": 20,
"tablet": 20,
"desktop": 20
}
},
"typography/lineHeight/label": {
"$type": "dimension",
"$value": {
"default": 16,
"phone": 16,
"tablet": 16,
"desktop": 16
}
},
"typography/lineHeight/caption": {
"$type": "dimension",
"$value": {
"default": 16,
"phone": 16,
"tablet": 16,
"desktop": 16
}
},
"typography/lineHeight/footnote": {
"$type": "dimension",
"$value": {
"default": 16,
"phone": 16,
"tablet": 16,
"desktop": 16
}
}
}
}
TBD
Up Next
Spacing Tokens
Spacing tokens define consistent spacing values used for margins, paddings, and gaps in our components.