Typography¶
The Carbon Connect type system uses three typefaces, each serving a distinct purpose. Together they create a visual hierarchy that is clear, professional, and accessible.
Typefaces¶
Inter -- Primary Interface Font¶
| Property | Value |
|---|---|
| Classification | Sans-serif, humanist |
| Use | All user interface elements, body text, navigation, buttons, forms, labels |
| Weights available | Regular (400), Medium (500), Semibold (600), Bold (700) |
| Source | Google Fonts (open source, SIL OFL) |
Inter is designed specifically for screen readability. Its large x-height, open letterforms, and tabular number support make it ideal for data-heavy interfaces like the Carbon Connect dashboard.
Why Inter:
- Optimized for UI contexts at small and medium sizes
- Excellent tabular figures for aligning numbers in tables and dashboards
- Clear letter distinction (no ambiguity between I/l/1 or O/0)
- Extensive language support covering all EU member states
Source Serif Pro -- Editorial Font¶
| Property | Value |
|---|---|
| Classification | Serif, transitional |
| Use | Long-form content, blog posts, reports, marketing headlines, printed materials |
| Weights available | Regular (400), Semibold (600), Bold (700) |
| Source | Google Fonts (open source, SIL OFL) |
Source Serif Pro adds warmth and authority to editorial content. It pairs naturally with Inter, sharing similar proportions while providing clear typographic contrast.
Why Source Serif Pro:
- Professional, authoritative appearance for thought leadership content
- Excellent readability at long-form text sizes
- Harmonizes with Inter without clashing
- Strong language support for multilingual content
JetBrains Mono -- Code Font¶
| Property | Value |
|---|---|
| Classification | Monospace |
| Use | Code blocks, API references, technical documentation, terminal output |
| Weights available | Regular (400), Medium (500), Bold (700) |
| Source | Google Fonts (open source, SIL OFL) |
JetBrains Mono provides clear code rendering with increased letter height and distinctive character forms that reduce ambiguity.
Why JetBrains Mono:
- Purpose-built for code readability
- Ligature support for common programming constructs
- Clear distinction between similar characters (0/O, 1/l/I)
- Consistent width for aligned code formatting
Type Scale¶
The type scale follows a modular progression that ensures clear hierarchy at every level.
Headings¶
| Level | Size | Line Height | Weight | Font | Usage |
|---|---|---|---|---|---|
| Display | 48px / 3rem | 1.1 | Bold (700) | Inter | Hero sections, landing pages |
| H1 | 36px / 2.25rem | 1.2 | Bold (700) | Inter | Page titles |
| H2 | 30px / 1.875rem | 1.25 | Semibold (600) | Inter | Section headings |
| H3 | 24px / 1.5rem | 1.3 | Semibold (600) | Inter | Subsection headings |
| H4 | 20px / 1.25rem | 1.35 | Medium (500) | Inter | Card titles, group labels |
| H5 | 18px / 1.125rem | 1.4 | Medium (500) | Inter | Small section titles |
| H6 | 16px / 1rem | 1.4 | Semibold (600) | Inter | Label headings, overlines |
Body Text¶
| Style | Size | Line Height | Weight | Font | Usage |
|---|---|---|---|---|---|
| Body Large | 18px / 1.125rem | 1.6 | Regular (400) | Inter | Lead paragraphs, featured text |
| Body | 16px / 1rem | 1.6 | Regular (400) | Inter | Default body text |
| Body Small | 14px / 0.875rem | 1.5 | Regular (400) | Inter | Secondary text, descriptions |
| Caption | 12px / 0.75rem | 1.4 | Regular (400) | Inter | Labels, metadata, timestamps |
Editorial Text¶
| Style | Size | Line Height | Weight | Font | Usage |
|---|---|---|---|---|---|
| Editorial Heading | 36px / 2.25rem | 1.2 | Bold (700) | Source Serif Pro | Blog post titles, report titles |
| Editorial Subheading | 24px / 1.5rem | 1.3 | Semibold (600) | Source Serif Pro | Article section headings |
| Editorial Body | 18px / 1.125rem | 1.7 | Regular (400) | Source Serif Pro | Long-form article text |
Code Text¶
| Style | Size | Line Height | Weight | Font | Usage |
|---|---|---|---|---|---|
| Code Block | 14px / 0.875rem | 1.6 | Regular (400) | JetBrains Mono | Multi-line code samples |
| Code Inline | 14px / 0.875rem | inherit | Regular (400) | JetBrains Mono | Inline code references |
| Code Small | 12px / 0.75rem | 1.5 | Regular (400) | JetBrains Mono | Terminal output, logs |
Usage Guidelines¶
Weight Usage¶
| Weight | When to Use |
|---|---|
| Regular (400) | Body text, descriptions, paragraphs -- the default for readable content |
| Medium (500) | Navigation items, table headers, form labels -- slightly more emphasis than regular |
| Semibold (600) | Section headings (H2-H3), button text, important labels -- clear emphasis without heaviness |
| Bold (700) | Page titles (H1), display text, strong emphasis -- maximum visual weight |
Alignment¶
| Context | Alignment |
|---|---|
| Body text | Left-aligned (never justified -- justified text creates uneven spacing) |
| Headings | Left-aligned |
| Table headers | Left-aligned (text columns) or right-aligned (numeric columns) |
| Button labels | Center-aligned |
| Navigation | Left-aligned or center-aligned depending on layout |
Line Length¶
For optimal readability, constrain line length:
| Context | Maximum Width | Characters |
|---|---|---|
| Body text | 680px | 65-75 characters |
| Editorial content | 720px | 70-80 characters |
| UI text (cards, panels) | Width of container | 40-60 characters preferred |
Why Line Length Matters
Lines that are too long force the eye to travel too far to find the next line, reducing reading speed and comprehension. Lines that are too short break up the flow of text. The 65-75 character range is widely regarded as optimal for body text.
Spacing¶
| Element | Margin/Spacing Rule |
|---|---|
| Between H1 and first paragraph | 16px (1rem) |
| Between H2 and content above | 48px (3rem) |
| Between H3 and content above | 32px (2rem) |
| Between paragraphs | 16px (1rem) |
| Between list items | 8px (0.5rem) |
Responsive Scaling¶
On smaller screens, the type scale adjusts to maintain readability without overwhelming limited space:
| Element | Desktop | Tablet (768px) | Mobile (480px) |
|---|---|---|---|
| Display | 48px | 40px | 32px |
| H1 | 36px | 30px | 26px |
| H2 | 30px | 26px | 22px |
| H3 | 24px | 22px | 20px |
| Body | 16px | 16px | 16px |
| Body Small | 14px | 14px | 14px |
| Caption | 12px | 12px | 12px |
Minimum Size
Never use text smaller than 12px (0.75rem) for any content. At smaller sizes, text becomes difficult to read for many users and fails accessibility requirements.
Font Loading¶
Web Implementation¶
/* Primary font - Inter */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
/* Editorial font - Source Serif Pro */
@import url('https://fonts.googleapis.com/css2?family=Source+Serif+Pro:wght@400;600;700&display=swap');
/* Code font - JetBrains Mono */
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&display=swap');
CSS Custom Properties¶
:root {
--font-primary: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--font-editorial: 'Source Serif Pro', 'Georgia', 'Times New Roman', serif;
--font-code: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;
}
Fallback Strategy¶
Each typeface has a carefully chosen fallback chain:
| Primary | Fallback 1 | Fallback 2 | Generic |
|---|---|---|---|
| Inter | -apple-system | Segoe UI | sans-serif |
| Source Serif Pro | Georgia | Times New Roman | serif |
| JetBrains Mono | Fira Code | Consolas | monospace |
Using display=swap ensures text is immediately visible using fallback fonts while custom fonts load asynchronously.