Typography
DraftArch typography is flexible and modular and can be used in various ways. Below are the principles behind how our type system was created and examples of how it can be used.
- Usage
- Tokens
- Status & changelog
Display
Heading
Label
Paragraph
Common alternative names
Type styles, labels, text styles, type, font
Principles
Go big
We prioritize larger font sizes because Arch values legibility and accessibility. We love our type and aren't afraid to let it shine.
Less is more
We optimize for fewer style options, so there's no decision paralysis when choosing the right type of style. We include a simple set of text styles to provide the right balance of control and creative freedom.
Simple semantics
Our semantic groupings give you guidance on how the style can be used while not being overly prescriptive.
Anatomy
Roles
Type styles are defined based on four roles: Display, Heading, Label, and Paragraph.
We build interfaces that work for everyone. 0123456789
The largest text on the screen is reserved for short, important text or numerals.
We build interfaces that work for everyone. 0123456789
Used to break up content into sections and provide a clear hierarchy of information.
We build interfaces that work for everyone. 0123456789
A short phrase or sentence that provides context or information about a specific block of text.
We build interfaces that work for everyone. 0123456789
Longer blocks of text, used for mostly text-based content.
Scale
Modular scale
Much like notes written in this key on a music scale, our type sizes create a visual rhythm and harmony that is as pleasing to the eyes as music is to the ears.
Our scale is modeled after the intervals in a major second musical scale (ratio of 8:9). Songs created with the major second musical scale are upbeat and happy, the feelings we want our design system to evoke. Some common examples are "Happy Birthday" and "Frère Jacques."
Arch UI leverages a modular scale to define a set of harmonious and hierarchical type sizes. It starts with a base font size of 14 and scales by multiplying 1.125 at each interval. We've chosen a key set of sizes from this scale that work well across interfaces.
Line height
Proper line height is achieved by multiplying the type size by 1.45 and rounding to the nearest interval of 4. This ensures all type aligns with our 4 px baseline grid.
We build interfaces that work for everyone
Spacing
Calculate the space below a text box by subtracting the font size from the line height, then round the result to a 4-interval. Add an extra line height for spaces below Paragraphs.
Spacing = (line-height - font-size) rounded to nearest 4
Size
Within our roles, we use four key sizes to ensure a clear typographic scale and rhythm:
We also support additional sizes exclusively for creating more visual emphasis on an interface.
| Size | Paragraph | Label | Heading | Display |
|---|---|---|---|---|
| XSmall | Yes | Yes | Yes | Yes |
| Small | Yes | Yes | Yes | Yes |
| Medium | Yes | Yes | Yes | Yes |
| Large | Yes | Yes | Yes | Yes |
| X Large | No | No | Yes | No |
| XX Large | No | No | Yes | No |
Fonts
The default font family that Arch UI uses is Inter. It comes with three distinct typefaces: Display, Text, and Mono.
They are all used in different sizes and weights throughout our typography tokens.
| Token | Stack |
|---|---|
--typography-family-sans | 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif |
--typography-family-serif | Georgia, Cambria, 'Times New Roman', Times, serif |
--typography-family-mono | ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace |
Looking for our font files? You can download Inter from Google Fonts. The serif and monospace stacks use system fonts that ship with every major operating system.
Inter Mono
We've created a sister version of our main typographic styles, which solely uses Inter Mono. It is designed specifically for money and number-related use cases.
Monospaced vs Regular typefaces
A monospaced font is designed in a way that each character occupies the same amount of space on a horizontal line of text and offers better vertical alignment than proportional numbers.
This makes it perfect for displaying numbers such as the price of a product or a payment balance.
Ramps
The design system currently supports two typographical ramps, standard and monospaced. While both ramps leverage the same core sizes to ensure harmony between the styles when displayed alongside each other, they are not meant to be used interchangeably.
Usage
Clear typographic hierarchy
A clear, logical information architecture enhances the readability and scannability of an interface, which can enable users to find important content more quickly.
Typography is a powerful tool that can be used to create this architecture, by visually emphasizing and drawing attention to specific elements of an interface.
Content hierarchy
Combining the same sizes from each class creates a simple, beautiful hierarchy.
In this example, we're using pairings to combine a heading, label, and paragraph.
Legibility
Balancing data density and legibility
Good paragraph legibility is crucial for users to read and understand the content. When the text is legible, users can quickly scan the content and find the information they need.
You should use Paragraph Medium (16) or Paragraph Large (18) for multi-line text whenever you can.
You unlocked a higher level based on your activity and orders in the past 6 months.
Enjoy your new benefits through April 1, 2026.
Use Paragraph Medium or Large for long-form text.
You unlocked a higher level based on your activity and orders in the past 6 months.
Enjoy your new benefits through April 1, 2026.
Don't use Paragraph X Small for long form text. Use it sparingly for things like disclaimer text.
Do not use Paragraph X Small at 12 for long-form text on small devices.
The smaller size can strain the eyes. Use sparingly at a max of 3 lines for items like legal disclaimers.
Using typography to create emphasis
Page headers/structure
Branded moments
Use the Inter Display font for large titles and heading text. Don't apply the Inter Display font to most other UI text, like labels, paragraphs, and buttons.
Do use the Inter Display font for large titles and heading text.
We build interfaces that work for everyone.
Don't use the Inter Display font for paragraphs.
Component overrides
Default sizes are provided to consolidate the basics of our user interface. When designing default screens, for example, in settings or lists, you should strictly follow the default sizes.
You might use large or small variances whenever you want to create higher contrast.
Use default sizes for all screens that don't require customization.
Don't reinvent the wheel and use design cycles to overly design consolidated UI.
Embedded links in a body of text
Links embedded inside a sentence can be unfriendly to screen readers and localization. It's much better to use a link or button below a paragraph. But if you must, you should use an underline to indicate that the text is tappable.
See also Link versus button.
Avoid using text color alone because an underline is a more visible, accessible option. Links should use label weight inside paragraph weight blocks of text.
Messages sent using the Dashboard are subject to the Privacy Notice, User Generated Content Terms, and Merchant Terms & Conditions.
Using the Mono ramp
Metrics
Use the Mono ramp when designing data-intensive views, tables, and dashboard overviews, where the monospace font has significant benefits in terms of alignment and legibility.
| Region | View options | Completed | Health | C/S | Efficiency |
|---|---|---|---|---|---|
| Total for US & Canada | 377.5K -2.5% | 377.5K -2.5% | 377.5K -2.5% | 377.5K -2.5% | 377.5K -2.5% |
| San Francisco | 377.5K -2.5% | 377.5K -2.5% | 377.5K -2.5% | 377.5K -2.5% | 377.5K -2.5% |
| San Diego | 377.5K -2.5% | 377.5K -2.5% | 377.5K -2.5% | 377.5K -2.5% | 377.5K -2.5% |
| Los Angeles | 377.5K -2.5% | 377.5K -2.5% | 377.5K -2.5% | 377.5K -2.5% | 377.5K -2.5% |
| Portland | 377.5K -2.5% | 377.5K -2.5% | 377.5K -2.5% | 377.5K -2.5% | 377.5K -2.5% |
Use Inter Mono only when displaying a number or amount in isolation. Use the regular Inter font when the value is part of a string.
Do not use Mono for nominal numbers where the number is used to identify something such as a phone number or an address.
Increasing legibility
In some cases, Mono can be used where the legibility of every character is critical.
Use this code when submitting your payment:
Use Inter Mono for codes that need to be read clearly from a distance.
Display
| Scale | Font size | Line height | Weight | Letter spacing | Token prefix |
|---|---|---|---|---|---|
| XSmall | 36 px | 44 px | 700 (bold) | -0.025em | --typography-scale-display-xsmall-* |
| Small | 44 px | 52 px | 700 (bold) | -0.025em | --typography-scale-display-small-* |
| Medium | 52 px | 64 px | 700 (bold) | -0.05em | --typography-scale-display-medium-* |
| Large | 96 px | 112 px | 700 (bold) | -0.05em | --typography-scale-display-large-* |
Each prefix expands to four tokens: font-size, line-height, font-weight, and letter-spacing.
Heading
| Scale | Font size | Line height | Weight | Letter spacing | Token prefix |
|---|---|---|---|---|---|
| XSmall | 20 px | 28 px | 700 (bold) | 0em | --typography-scale-heading-xsmall-* |
| Small | 24 px | 32 px | 700 (bold) | 0em | --typography-scale-heading-small-* |
| Medium | 28 px | 36 px | 700 (bold) | 0em | --typography-scale-heading-medium-* |
| Large | 32 px | 40 px | 700 (bold) | 0em | --typography-scale-heading-large-* |
| XLarge | 36 px | 44 px | 700 (bold) | 0em | --typography-scale-heading-xlarge-* |
| XXLarge | 40 px | 52 px | 700 (bold) | 0em | --typography-scale-heading-xxlarge-* |
Label
| Scale | Font size | Line height | Weight | Letter spacing | Token prefix |
|---|---|---|---|---|---|
| XSmall | 12 px | 16 px | 500 (medium) | 0em | --typography-scale-label-xsmall-* |
| Small | 14 px | 16 px | 500 (medium) | 0em | --typography-scale-label-small-* |
| Medium | 16 px | 20 px | 500 (medium) | 0em | --typography-scale-label-medium-* |
| Large | 18 px | 24 px | 500 (medium) | 0em | --typography-scale-label-large-* |
Paragraph
| Scale | Font size | Line height | Weight | Letter spacing | Token prefix |
|---|---|---|---|---|---|
| XSmall | 12 px | 20 px | 400 (regular) | 0em | --typography-scale-paragraph-xsmall-* |
| Small | 14 px | 20 px | 400 (regular) | 0em | --typography-scale-paragraph-small-* |
| Medium | 16 px | 24 px | 400 (regular) | 0em | --typography-scale-paragraph-medium-* |
| Large | 18 px | 28 px | 400 (regular) | 0em | --typography-scale-paragraph-large-* |
Code
| Scale | Font size | Line height | Weight | Letter spacing | Token prefix |
|---|---|---|---|---|---|
| Small | 12 px | 20 px | 400 (regular) | 0em | --typography-scale-code-sm-* |
| Medium | 14 px | 20 px | 400 (regular) | 0em | --typography-scale-code-md-* |
Code tokens use --typography-family-mono as their font family.
Primitive size tokens
The raw size scale that semantic tokens reference. These should not be used directly in component CSS — always use a semantic scale token instead.
| Token | Value |
|---|---|
--typography-size-11 | 11 px |
--typography-size-12 | 12 px |
--typography-size-13 | 13 px |
--typography-size-14 | 14 px |
--typography-size-15 | 15 px |
--typography-size-16 | 16 px |
--typography-size-18 | 18 px |
--typography-size-20 | 20 px |
--typography-size-24 | 24 px |
--typography-size-28 | 28 px |
--typography-size-32 | 32 px |
--typography-size-36 | 36 px |
--typography-size-40 | 40 px |
--typography-size-44 | 44 px |
--typography-size-48 | 48 px |
--typography-size-52 | 52 px |
--typography-size-56 | 56 px |
--typography-size-64 | 64 px |
--typography-size-96 | 96 px |
Line height tokens
Fixed line-height values (in px) are used by semantic scale tokens. Named multipliers are available for custom compositions.
Fixed values
| Token | Value |
|---|---|
--typography-line-height-16 | 16 px |
--typography-line-height-20 | 20 px |
--typography-line-height-24 | 24 px |
--typography-line-height-28 | 28 px |
--typography-line-height-32 | 32 px |
--typography-line-height-36 | 36 px |
--typography-line-height-40 | 40 px |
--typography-line-height-44 | 44 px |
--typography-line-height-52 | 52 px |
--typography-line-height-64 | 64 px |
--typography-line-height-112 | 112 px |
Named multipliers
| Token | Value | Description |
|---|---|---|
--typography-line-height-none | 1 | No extra leading |
--typography-line-height-tight | 1.2 | Display and heading text |
--typography-line-height-snug | 1.375 | Compact body text |
--typography-line-height-normal | 1.5 | Default body text |
--typography-line-height-relaxed | 1.625 | Spacious body text |
--typography-line-height-loose | 2 | Maximum breathing room |
Letter spacing tokens
| Token | Value | Usage |
|---|---|---|
--typography-letter-spacing-tighter | -0.05em | Display Large, Display Medium |
--typography-letter-spacing-tight | -0.025em | Display Small, Display XSmall |
--typography-letter-spacing-normal | 0em | Headings, Labels, Paragraphs, Code |
--typography-letter-spacing-wide | 0.025em | Uppercase labels, overlines |
--typography-letter-spacing-wider | 0.05em | Wide-set payment codes, allcaps |
Font weight tokens
| Token | Value |
|---|---|
--typography-weight-regular | 400 |
--typography-weight-medium | 500 |
--typography-weight-semibold | 600 |
--typography-weight-bold | 700 |
--typography-weight-extrabold | 800 |
Font family tokens
| Token | Value |
|---|---|
--typography-family-sans | 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif |
--typography-family-serif | Georgia, Cambria, 'Times New Roman', Times, serif |
--typography-family-mono | ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace |
Status & changelog coming soon.