Typography
As the primary way to communicate information, we set our text with care. We use typefaces that draw from the rich traditions of editorial typesetting while incorporating modern, flexible features.
Please note: Because of licensing restrictions, we cannot make the files for our typefaces available for direct download. If you need to share our fonts with an authorized vendor or third party, please contact a Design & Product team member.
ProPublica Typefaces
Tiempos
The Tiempos family by Kris Sowersby is a warm editorial serif influenced by Plantin, Galaxie Copernicus, and Times New Roman. We use two variations Tiempos in our work: Tiempos Text and Tiempos Headline.
Tiempos Text: Optimised for body copy, the text version of Tiempos has narrower letterforms with shorter ascenders and descenders — allowing for tight, compact column settings.
Use Tiempos Text for body text, captions, and other editorial text 16px or smaller.
Font Style | CSS Weight | Usage |
---|---|---|
Regular | 400 (regular) | |
Medium | 500 | |
Semibold | 600 | |
Bold | 700 (bold) | For small headlines |
Tiempos Headline: The headline version of Tiempos has sharper letterforms with higher contrast.
Use Tiempos Headline for headlines and editorial text larger than 16px.
Font Style | CSS Weight | Usage |
---|---|---|
Light | 300 | Avoid in favor of heavier weights |
Regular | 400 (regular) | |
Medium | 500 | |
Semibold | 600 | |
Bold | 700 (bold) | For medium headlines |
Black | 900 | For large headlines |
Graphik
The Graphik family by Christian Schwartz is a modern geometric sans-serif influenced by mid-20th century Swiss poster typography.
It is friendly and flexible, with a wide range of weights and widths that allow it to be used across editorial design, user interfaces, and branding.
Use Graphik in presentations, user interfaces, navigation, and as the primary typeface in non-editorial contexts.
Font Style | CSS Weight | Usage |
---|---|---|
Thin | 100 | Avoid in favor of heavier weights |
Semilight | 200 | Avoid in favor of heavier weights |
Light | 300 | Avoid in favor of heavier weights |
Regular | 400 (regular) | For all sizes |
Medium | 500 | |
Semibold | 600 | |
Bold | 700 (bold) | For all sizes |
Black | 800 | |
Super | 900 |
Type Scale
Our type scale is based on a 1.2 multiplier, in order to give us a broad range of sizes to choose from. In CSS, we prefer to use rem
units everywhere.
$int: 1.2;
$scale0: 1rem; // 16px, base size
$scale-1: $scale0 / $int; // 13px
$scale-2: $scale-1 / $int; // 11px
$scale-3: $scale-2 / $int; // 9px
$scale1: $scale0 * $int; // 19px
$scale2: $scale1 * $int; // 23px
$scale3: $scale2 * $int; // 28px
$scale4: $scale3 * $int; // 33px
$scale5: $scale4 * $int; // 40px
$scale6: $scale5 * $int; // 48px
$scale7: $scale6 * $int; // 57px
$scale8: $scale7 * $int; // 69px
:root{
--scale-3: #{$scale-3}; // 9px
--scale-2: #{$scale-2}; // 11px
--scale-1: #{$scale-1}; // 13px
--scale0: #{$scale0}; // 16px, base size
--scale1: #{$scale1}; // 19px
--scale2: #{$scale2}; // 23px
--scale3: #{$scale3}; // 28px
--scale4: #{$scale4}; // 33px
--scale5: #{$scale5}; // 40px
--scale6: #{$scale6}; // 48px
--scale7: #{$scale7}; // 57px
--scale8: #{$scale8}; // 69px
}
Line Height
Line heights are also based on a 1.2 multiplier. --line-height-1
and --line-height-2
are the most frequently used.
$int: 1.2;
$line-height0: $int * $int * $int; // 1.728
$line-height-1: $line-height0 / $int; // 1.44
$line-height-2: $line-height-1 / $int; // 1.2
$line-height-3: $line-height-2 / $int; // 1
:root {
--line-height-3: #{$line-height-3}; // 1
--line-height-2: #{$line-height-2}; // 1.2
--line-height-1: #{$line-height-1}; // 1.44
--line-height0: #{$line-height0}; // 1.728
}
Line Length
Having too short or too long of a line length can impair readability of longform text. We recommend setting paragraphs at 50-70 characters per line. As your line length decreases, the line height should be tightened to avoid excessive space between lines.