Foundation
Typography
Fonts
Source Sans Pro (.vads-u-font-family--sans)
Source Sans Pro is an open-source sans serif typeface created for legibility in UI design. With a variety of weights that read easily at all sizes, Source Sans Pro provides clear headers as well as highly-readable body text.
Inspired by twentieth-century American gothic typeface design, its slender but open letters offer a clean and friendly simplicity. Advanced hinting allows Source Sans Pro to render well on Windows systems which run Cleartype, and across browsers and devices. Moreover, it supports a variety of languages and alphabets, including Western and European language, Vietnamese, pinyin Romanization of Chinese, and Navajo.
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9
Bitter (.vads-u-font-family--serif)
People read and interact with text on screens more and more each day. What happens on screen ends up being more important than what comes out of the printer. With the accelerating popularity of electronic books, type designers are working hard to seek out the ideal designs for reading on screen.
Motivated by my love for the pixel I designed Bitter. A “contemporary” slab serif typeface for text, it is specially designed for comfortably reading on any computer or device. The robust design started from the austerity of the pixel grid, based on rational rather than emotional principles. It combines the large x-heights and legibility of the humanistic tradition with subtle characteristics in the characters that inject a certain rhythm to flowing texts.
Bitter has little variation in stroke weight and the Regular is thicker than a normal ‘Regular’ style for print design. This generates an intense color in paragraphs, accentuated by the serifs that are as thick as strokes with square terminals.
Each glyph is carefully designed with an excellent curve quality added to the first stage of the design, that was entirely made in a pixel grid. The typeface is balanced and manually spaced to use very few kerning pairs, especially important for web font use since most browsers do not currently support this feature.
- Sol Matas (Designed for Huerta Tipográfica)
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9
Roboto Mono (.vads-u-font-family--mono)
Roboto Mono is a monospace addition to the Roboto type family. Like the other members of the Roboto family, the fonts are optimized for readability on screens across a wide variety of devices and reading environments.
While the monospace version is related to its variable width cousin, it doesn't hesitate to change forms when so beneficial. For instance, narrow glyphs like 'I', 'l' and 'i' have added serifs for more even texture while wider glyphs are adjusted for weight. Curved caps like 'C' and 'O' take on the straighter sides from Roboto Condensed.
Special consideration is given to code display, with clear distinction between similar characters like 0 (zero) and O (capital O), and between 1 (one), l (lowercase L), and I (capital i). This makes Roboto Mono ideal for displaying code, configuration files, and other technical content.
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 ! @ # $ % ^ & * ( ) - _ = +
{ } [ ] | \ : ; " ' < > , . ? /
Font sizing
Font sizes must use relative units (rem or em), not pixels. While pixels scale with page zoom, they don’t respond to user-set default font sizes in browser settings. Relative units respect these preferences, which is required for WCAG 2.2 AA SC 1.4.4 Resize Text.
When to use rem
Use rem for most font sizes. Rem units are relative to the root element’s font size, so they provide consistent sizing across the page regardless of nesting. This is the right choice for headings, body text, and any text that should maintain a predictable size.
When to use em
Use em for font sizes that should scale relative to their parent element. This can be useful for components that need to scale proportionally where all text should grow or shrink together based on a single parent size setting. We currently prefer rem to em in the codebase.
Spacing and font sizing
For spacing-related values (margins, padding, gaps), use the spacing unit tokens rather than hardcoded values. When custom spacing values are needed, use rem to maintain accessible scaling.
Headings
Headline H1
Headline H2
Headline H3
Headline H4
Headline H5
Headline H6
<h1>Headline H1</h1>
<h2>Headline H2</h2>
<h3>Headline H3</h3>
<h4>Headline H4</h4>
<h5>Headline H5</h5>
<h6>Headline H6</h6>
Headings and accessibility
Always use semantic headings, logically nested in the proper order. Do not use improper nesting to achieve a different font size. In other words, an h1 should never be followed by an h3; it should only be followed by an h2. Use the font-size utility to change the font size of a semantic heading instead.
Do
Use utility classes to change the font size of a semantic heading.
Example
<h1>Main heading</h1>
<p>Some text</p>
<h2 class="vads-u-font-size--h3">Secondary heading</h2>
Don’t
Don’t change heading level in order to use a different font size.
Example
<h1>Main heading</h1>
<p>Some text</p>
<h3>Secondary heading</h3>
Avoid turning headers into links in most contexts
Why avoid headers as links?
- Cognitive load and user expectations. Headings serve as structural elements that help users with assistive technologies understand page organization. When a heading is also a link, it creates dual functionality that can confuse users. Screen reader users may not expect headings to be actionable.
- Challenging keyboard navigation. Keyboard users tab through links as a primary navigation method. Headers that are links can be accidentally activated during normal page exploration.
- Confusing screen reader announcements. Screen readers announce headings and links differently. Combining them results in unclear announcements like “Heading level 2, link, Text,” making it harder to understand the element’s purpose.
- Unnecessary redundancy. The linked text in a heading is often repeated elsewhere on the page, creating distracting duplication.
When it’s appropriate to use links in headers
An exception can be made in the Card component, where:
- Space is limited, and combining the heading and link reduces visual clutter
- The card functions as a single actionable unit (such as linking to a detail page)
- The design makes the linked heading the primary call-to-action in the card, minimizing confusion
When it’s not appropriate
- In normal page content where headings primarily serve as organizational aids
- When multiple links are associated with the heading, making the primary action unclear
- When the link in the heading duplicates another visible link that immediately follows it
Monospace fonts
Use monospace fonts sparingly. Monospace fonts can be difficult to read, especially at small sizes or with poor color contrast. Use monospace fonts for numerical data in tables, code examples, or when precise horizontal alignment is needed. For body text, choose a sans serif typeface.
Do
Use monospace fonts for numerical data in tables, such as percentages, currency, or totals.
Example
| Balance | Interest Rate | Monthly Payment |
|---|---|---|
| $1,234.56 | 3.25% | $156.78 |
| $987.65 | 4.50% | $89.34 |
| $10,000.00 | 2.75% | $1,250.00 |
Don't
Do not use monospace fonts for phone numbers, zip codes, dates, or other data that can’t be added up.
Example
| Service | Phone number | Zip Code |
|---|---|---|
| Health Care | (555) 123-4567 | 12345 |
| Disability Benefits | (800) 827-1000 | 90210 |
| Education Benefits | (888) 442-4551 | 10001 |
Eyebrow
Eyebrow Title Headline H1
<h1>
<span class="vads-c-eyebrow">Eyebrow Title</span>
Headline H1
</h1>
Card with Eyebrow
Disability Benefits Compensation Claim
Your claim for compensation benefits has been received and is being processed.
<va-card>
<h3>
<span class="vads-c-eyebrow">Disability Benefits</span>
Compensation Claim
</h3>
<p>Your claim for compensation benefits has been received and is being processed.</p>
<p><a href="#" class="vads-c-action-link--blue">Review your claim</a></p>
</va-card>
The eyebrow sits above a heading and provides a label for a sequence of pages in a process or for groups of related content, such as multiple cards. The eyebrow component renders its text in uppercase through styling. Authors should still always enter label text in sentence case, not in ALL CAPS. Refer to Capitalization for guidance on when we permit all caps.
When to use
- Use the eyebrow when you implement the Help users to complete a sub task pattern.
- Use the eyebrow to indicate content type or category across related cards or pages.
- Use the eyebrow to provide high-level context that helps users compare or scan multiple cards.
When to use something else
- Use Tag - Status above the header to indicate status.
Note: This component has been tested indirectly with success.
Paragraphs
VA Intro Text has the class 'va-introtext'. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean venenatis laoreet augue scelerisque sollicitudin.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean venenatis laoreet augue scelerisque sollicitudin.
<!-- Intro text -->
<p class="va-introtext">VA Intro Text has the class 'va-introtext'. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean venenatis laoreet augue scelerisque sollicitudin.</p>
<!-- Regular paragraph -->
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean venenatis laoreet augue scelerisque sollicitudin.</p>
- Paragraphs should not exceed vads-size-line-length-5 (72ex) and should use our line-length design tokens when appropriate to further constrain their width. Some elements that are not yet using our line-length design tokens will use 77ch as their max-width which is also acceptable.
Typography tokens
Primitive typography tokens
vads-font-family-mono
'Roboto Mono Web', 'Bitstream Vera Sans Mono', 'Consolas', 'Courier', monospace
Monospace font family, for code and tabular figures.
vads-font-family-sans
'Source Sans Pro Web', 'Source Sans Pro', 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif
Default sans-serif font family for UI and body text.
vads-font-family-serif
Bitter, Georgia, Cambria, 'Times New Roman', Times, serif
Serif font family, for headings and display text.
vads-font-line-height-1
1
Line height for buttons, navigation, and text not meant to wrap.
vads-font-line-height-2
1.15
Line height for headings and short lead text (1-2 sentences).
vads-font-line-height-3
1.35
Line height for short text, captions, and very short or long measures.
vads-font-line-height-4
1.5
Line height for short running text with a short measure.
vads-font-line-height-5
1.62
Line height for extended reading text.
vads-font-line-height-6
1.75
Line height for shorter text and pullquotes set apart from body text.
vads-font-size-2xl
2.5rem (40px)
Font size scale step, 2X-large.
vads-font-size-2xs
0.8125rem (13px)
Font size scale step, 2X-small.
vads-font-size-3xl
3rem (48px)
Font size scale step, 3X-large.
vads-font-size-3xs
0.75rem (12px)
Font size scale step, 3X-small.
vads-font-size-lg
1.25rem (20px)
Font size scale step, large.
vads-font-size-md
1.063rem (17px)
Font size scale step, medium.
vads-font-size-root
1rem (16px)
Root font size that rem units are based on.
vads-font-size-sm
0.938rem (15px)
Font size scale step, small.
vads-font-size-source-sans-normalized
1.06rem (17px)
Do not use. Use vads-font-size-body-default instead.
vads-font-size-xl
2rem (32px)
Font size scale step, X-large.
vads-font-size-xs
0.875rem (14px)
Font size scale step, X-small.
vads-font-style-italic
italic
Italic font style.
vads-font-style-normal
normal
Normal font style.
vads-font-weight-bold
700
Bold font weight.
vads-font-weight-normal
400
Normal font weight.