New York Times Design System Deep-Dive
1. Brand Overview
The New York Times website is a masterclass in editorial design translated into digital form. This is not a flashy tech brand trying to wow you with gradients and animations. This is a century-old institution with a visual language steeped in print traditions — serif headlines, restrained color, and strict typographic hierarchy.
The vibe is serious, authoritative, and meticulously structured. Every decision is in service of legibility and editorial clarity. You can feel the weight of the brand's history in the typography choices: nyt-cheltenham, nyt-karnak, Times — fonts that scream newspaper heritage. The sans-serif nyt-franklin steps in for utility roles: captions, labels, UI components.
The audience is broad — from casual readers skimming headlines to deeply engaged subscribers. The design system needs to accommodate breaking news urgency, long-form investigative pieces, and interactive visual journalism, all without losing cohesion. That’s why the palette is muted, the spacing grid is disciplined, and decorative elements are minimal.
The philosophy here is: content first. The UI is there to serve the story. Headlines dominate. Images are framed, not flooded. Colors are functional, not ornamental — blues for links, reds/oranges for signals, greys for structure. Even the buttons are understated; hover states rely more on subtle color shifts than dramatic effects.
The Times isn’t chasing design trends. It’s enforcing its own visual grammar, honed over decades. This works because it builds trust: you know you’re looking at The New York Times, whether it’s on a phone at 6am or a desktop at midnight.
2. Color System
2.1 Primary Colors
The primary brand color for interactive elements is #326891 (--g-color-anchor). It’s a muted, deep blue — not the electric blue of tech brands, but a sober, credible hue. This color shows up in links, anchors, and certain CTAs. It’s calm, avoids the “clickbait” vibe, and aligns with the brand’s journalistic integrity.
They also have strong functional reds (--color-signal-negative hsla(354.29,98.83%,33.34%,1)) and oranges (--color-signal-developing hsla(20.19,91.67%,47.06%,1)) for alert signals. These aren’t used for decoration — they’re reserved for breaking news, warnings, or developing stories.
Greys dominate the palette: from near-black #121212 to light greys like #ebebeb. This keeps the canvas neutral, letting photos and illustrations provide color diversity.
Competitor comparison: Compared to BBC’s bright red primary, NYT’s palette is far more restrained. It’s closer to The Guardian’s deep blues, but with less saturation and more greyscale flexibility.
2.2 Complete Palette
| Color Name | Hex | Role | Usage |
|---|---|---|---|
| Body Text | #121212 | --g-body-color | Main content text |
| Anchor Blue | #326891 | --g-color-anchor | Links, CTAs |
| Content Quintary | #8b8b8b | --color-content-quintary | Tertiary text |
| Overlay Black | #000000 | --color-overlay-black | Overlays |
| Signal Breaking | #d0151d | --color-signal-breaking | Breaking news |
| Signal Negative | #aa0a14 | --color-signal-negative | Negative alerts |
| Background Quaternary | #c7c7c7 | --color-background-quaternary | UI backgrounds |
| Signal Developing | #f26a1d | --color-signal-developing | Developing news |
| Signal Highlight | #faf8e4 | --color-signal-highlight | Highlight backgrounds |
| Content Tertiary | #5a5a5a | --color-content-tertiary | Secondary text |
| Content Inverse Primary | #ffffff | --color-content-inversePrimary | Text on dark backgrounds |
| Stroke Quaternary | #dfdfdf | --color-stroke-quaternary | Dividers |
| Loading Background | #ebebeb | --g-color-loading-background | Loading skeletons |
| Content Primary | #121212 | --color-content-primary | Primary text |
| Background Overlay | rgba(31,31,31,0.58) | --color-background-overlay | Modal overlays |
| Background Secondary | #f8f8f8 | --color-background-secondary | Section backgrounds |
| Signal Accent | #2f6fc7 | --color-signal-accent | Accent highlights |
| Signal Positive | #227b4f | --color-signal-positive | Success states |
| Signal Editorial | #4d728f | --color-signal-editorial | Editorial highlights |
| Background Inverse Secondary | #363636 | --color-background-inverseSecondary | Dark UI surfaces |
| Content Quaternary | #727272 | --color-content-quaternary | Muted text |
Also from palette detection:
- Neutral greys:
#5a5a5a,#363636,#ebebeb,#727272,#f8f8f8,#272727 - Rare deep navy:
#001833(hover/focus states)
2.3 Color Relationships
Contrast is strong between text (#121212) and backgrounds (#ffffff or #f8f8f8). Links (#326891) on white easily pass WCAG AA for normal text. Signal colors (reds, oranges) are vivid against neutral backgrounds, ensuring alerts are noticeable.
Dark mode elements exist (--color-background-inverseSecondary #363636) with inverse text (#ffffff). Overlay black is full #000000 opacity for immersive modals.
2.4 Usage Guide
- Pair #121212 text with #f8f8f8 or white backgrounds for maximum readability.
- Use #326891 only for interactive elements — never as a decorative tint.
- Reserve reds/oranges for alerts and signals; don’t dilute their urgency.
- Greys (#727272, #5a5a5a) are for secondary or muted text — avoid using them for clickable items unless explicitly styled.
- Dark navy #001833 is rare — keep for focus rings or subtle hover states.
3. Typography
3.1 Font Families
Four custom NYT families dominate:
- nyt-cheltenham (serif): Headlines, links, some body. Fallbacks: cheltenham-fallback-georgia, cheltenham-fallback-noto, georgia, times new roman, times.
- nyt-karnak (serif): Secondary headlines. Fallbacks: georgia, times new roman, times.
- nyt-franklin (sans-serif): UI elements, captions, buttons. Fallbacks: helvetica, arial.
- nyt-imperial (serif): Captions with multilingual support. Fallbacks include Songti SC, simsun.
No Google or Adobe fonts — all custom.
3.2 Type Scale
| Element | Font | Size | Weight | Line Height |
|---|---|---|---|---|
| heading-1 | nyt-cheltenham | 28px | 300 | 1.15 |
| heading-1 | nyt-cheltenham | 24px | 300 | 1.15 |
| heading-1 | nyt-cheltenham | 22px | 700 | 1.15 |
| heading-1 | nyt-karnak | 20px | 400 | 1.20 |
| heading-1 | nyt-cheltenham-text-cond | 20px | 700 | 1.15 |
| link | nyt-cheltenham | 18px | 400 | 1.20 |
| heading-1 | nyt-cheltenham | 18px | 700 | 1.20 |
| link | Times | 16px | 400 | 1.00 |
| heading-1 | Times | 16px | 400 | 1.00 |
| heading-1 | nyt-cheltenham | 16px | 700 | 1.20 |
| button | nyt-franklin | 16px | 400 | — |
| heading-1 | nyt-cheltenham | 16px | 400 | 1.25 |
| link | nyt-cheltenham | 16px | 400 | 1.25 |
| button | Times | 16px | 400 | 1.00 |
| heading-1 | nyt-karnak | 16px | 700 | 1.15 |
| caption | nyt-franklin | 14px | 400 | 1.43 |
| link | nyt-franklin | 14px | 400 | 1.43 |
| link | nyt-franklin | 14px | 500 | 1.00 |
| button | nyt-franklin | 14px | 400 | — |
| caption | nyt-imperial | 14px | 400 | 1.36 |
| caption | nyt-franklin | 14px | 700 | 1.30 |
| caption | nyt-franklin | 14px | 700 | 1.21 |
| link | nyt-franklin | 14px | 700 | 1.00 |
| caption | nyt-cheltenham-small | 14px | 400 | 1.25 |
| link/caption | nyt-franklin | 13px | 500 | 1.38 |
| link | nyt-franklin | 13px | 700 | 1.38 |
| caption | nyt-franklin | 13px | 400 | 1.15 |
| caption | nyt-franklin | 12px | 500 | 1.30 |
| link/caption | nyt-franklin | 11px | 700 | 1.00 |
| button | nyt-franklin | 11px | 700 | 1.00 |
| link | nyt-franklin | 11px | 600 | 1.00 |
| link | nyt-franklin | 11px | 500 | 1.00 |
| caption | nyt-franklin | 11px | 700 | 1.00 |
| caption | nyt-franklin | 11px | 500 | 1.82 |
| link | nyt-franklin | 11px | 500 | 1.64 |
| caption | nyt-cheltenham-small | 11px | 700 | 1.35 |
| caption | Times | 11px | 400 | 1.00 |
| link | nyt-franklin | 11px | 400 | 1.00 |
| caption | nyt-franklin | 11px | 400 | 1.00 |
| caption/link | nyt-franklin | 10px | 400 | 1.00 |
| caption | nyt-franklin | 10px | 500 | 1.25 |
| caption | nyt-franklin | 10px | 600 | 1.25 |
| caption | nyt-franklin | 10px | 400 | 1.25 |
| caption | nyt-franklin | 10px | 400 | 1.00 |
| caption | nyt-franklin | 8.96px | 400 | 1.20 |
| caption | nyt-franklin | 8.96px | 500 | 1.56 |
3.3 Hierarchy
Large serif headlines grab attention; smaller sans-serif captions and labels keep UI clean. The scale is tight — jumps of 2-4px between levels — which maintains visual rhythm and avoids jarring shifts. Line heights are generous for captions, tighter for headlines.
4. Spacing & Layout
4.1 Spacing Scale
Base scale: 8px. Values are multiples or fractions (2px, 3px, 4px).
| Value | Count | Usage |
|---|---|---|
| 2px | 5 | Hairline gaps |
| 3px | 101 | Icon spacing |
| 4px | 142 | Tight padding |
| 6px | 8 | Small gaps |
| 7px | 13 | Icon+text |
| 8px | 55 | Button padding |
| 10px | 160 | Compact UI padding |
| 11px | 46 | Labels |
| 12px | 421 | Default padding |
| 15px | 4 | Odd cases |
| 16px | 169 | Content spacing |
| 20px | 86 | Section padding |
| 24px | 69 | Larger gaps |
| 30px | 40 | Container padding |
| 40px | 28 | Large section gaps |
| 90.3px | 12 | Hero banners |
| 103px | 6 | Special layouts |
| 213.39px | 5 | Large vertical spacing |
| 347.91px | 12 | Major whitespace blocks |
4.2 Layout
Breakpoints from 320px to 1920px — extremely granular, allowing fine-tuned responsive adjustments. Likely a fluid grid with dozens of media queries for editorial layouts.
5. Visual Elements
- Border Radius: 0px default, 3px for small UI, 4px for some containers, 50% for circular buttons/avatars.
- Shadows: Minimal — only two values:
rgba(0,0,0,0.1) 0px 10px 10px- Rare:
rgba(0,0,0,0.28) 0px 0px 5px 1px
- Borders: Common 1px solid dividers in light greys (#ebebeb, #dfdfdf). Buttons sometimes get darker borders (#424242).
6. Components
6.1 Buttons
Variant 1 (.css-19wyrnd)
- Default: bg #fff, text #000, no radius, no border.
- Hover: text var(--tpl-color-content-primary, #121212), subtle box-shadow from tokens.
- Active: removes shadow.
Variant 2 (.kyt-ULlAU) — circular
- Default: bg rgba(18,18,18,0.6), border 1px solid #424242, radius 50%.
- Hover: border 2px solid rgba(255,255,255,0.32).
- Active: bg rgba(90,90,90,0.6).
- Focus: outline #346eb7 solid 2px.
Variant 3 (.kyt-+KMUM.kyt-gO4MU) — circular outline
- Default: transparent bg, border 1px solid #c7c7c7, radius 50%.
- Hover: no bg change, text var(--tpl-color-content-primary).
- Active: no shadow.
6.2 Links
4 styles:
- Black (#000), weight 700 — hover to grey (#727272).
- Dark grey (#121212), weight 600 — hover to grey.
- Grey (#5a5a5a), weight 500 — hover to grey.
- Mid grey (#666666), weight 400 — hover to grey.
No underlines, hover color shift only.
6.3 Forms
No input styles extracted — likely minimal, border-based.
6.4 Cards
No explicit card component, but shadows (#000, 0.1 opacity) suggest lightweight elevation for certain elements.
7. Design Tokens
:root {
/* Colors */
--g-body-color: #121212;
--g-color-anchor: #326891;
--color-content-quintary: hsla(0,0%,54.51%,1);
--color-overlay-black: hsla(0,0%,0%,1);
--color-signal-breaking: hsla(352.72,98.1%,41.18%,1);
--color-signal-negative: hsla(354.29,98.83%,33.34%,1);
--color-background-quaternary: hsla(0,0%,78.04%,1);
--color-signal-developing: hsla(20.19,91.67%,47.06%,1);
--color-signal-highlight: hsla(54.67,95.75%,90.79%,1);
--color-content-tertiary: hsla(0,0%,35.3%,1);
--color-content-inversePrimary: hsla(0,0%,100%,1);
--color-stroke-quaternary: hsla(0,0%,87.46%,1);
--g-color-loading-background: hsla(0,0%,92.16%,1);
--color-content-primary: hsla(0,0%,7.06%,1);
--color-background-overlay: hsla(0,0%,7.06%,0.58);
--color-background-secondary: hsla(0,0%,97.26%,1);
--color-signal-accent: hsla(215.28,72.23%,50.59%,1);
--color-signal-positive: hsla(126.98,53.09%,31.77%,1);
--color-signal-editorial: hsla(205.9,48.72%,38.24%,1);
--color-background-inverseSecondary: hsla(0,0%,21.18%,1);
--color-content-quaternary: hsla(0,0%,44.71%,1);
/* Spacing */
--space-2: 2px;
--space-3: 3px;
--space-4: 4px;
--space-6: 6px;
--space-7: 7px;
--space-8: 8px;
--space-10: 10px;
--space-11: 11px;
--space-12: 12px;
--space-15: 15px;
--space-16: 16px;
--space-20: 20px;
--space-24: 24px;
--space-30: 30px;
--space-40: 40px;
/* Border Radius */
--radius-sm: 3px;
--radius-md: 4px;
--radius-full: 50%;
/* Shadows */
--shadow-md: rgba(0, 0, 0, 0.1) 0px 10px 10px 0px;
--shadow-sm: rgba(0, 0, 0, 0.28) 0px 0px 5px 1px;
}8. AI Coding Assistant Prompt
# New York Times Design System Specification
You are a New York Times design expert. Build UIs matching their visual language exactly.
## Brand Context
The NYT design language is rooted in print traditions: serif headlines, restrained color, disciplined spacing. It prioritizes clarity, trust, and editorial hierarchy.
## Color Palette
- Body Text: #121212 — Main content text
- Anchor Blue: #326891 — Links, CTAs
- Content Quintary: #8b8b8b — Tertiary text
- Overlay Black: #000000 — Overlays
- Signal Breaking: #d0151d — Breaking news alerts
- Signal Negative: #aa0a14 — Negative alerts
- Background Quaternary: #c7c7c7 — UI backgrounds
- Signal Developing: #f26a1d — Developing news
- Signal Highlight: #faf8e4 — Highlight backgrounds
- Content Tertiary: #5a5a5a — Secondary text
- Content Inverse Primary: #ffffff — Text on dark backgrounds
- Stroke Quaternary: #dfdfdf — Dividers
- Loading Background: #ebebeb — Loading skeletons
- Background Secondary: #f8f8f8 — Section backgrounds
- Signal Accent: #2f6fc7 — Accent highlights
- Signal Positive: #227b4f — Success states
- Signal Editorial: #4d728f — Editorial highlights
- Background Inverse Secondary: #363636 — Dark UI surfaces
- Content Quaternary: #727272 — Muted text
## Typography
- Headings: "nyt-cheltenham", cheltenham-fallback-georgia, cheltenham-fallback-noto, georgia, times new roman, times
- Secondary Headings: "nyt-karnak", georgia, times new roman, times
- UI & Captions: "nyt-franklin", helvetica, arial
- Captions (serif): "nyt-imperial", georgia, times new roman, times, Songti SC, simsun
| Level | Size | Weight | Line Height | Use For |
|-------|------|--------|-------------|---------|
| H1 | 28px | 300 | 1.15 | Main headlines |
| H2 | 24px | 300 | 1.15 | Section headlines |
| H3 | 22px | 700 | 1.15 | Sub-headlines |
| ... (full table from section 3.2) ...
## Spacing & Grid
Base: 8px
Scale: 2px, 3px, 4px, 6px, 7px, 8px, 10px, 11px, 12px, 15px, 16px, 20px, 24px, 30px, 40px
## Border Radius
- none: 0 — default
- sm: 3px — small UI
- md: 4px — containers
- full: 50% — circular buttons, avatars
## Shadows & Depth
- md: rgba(0,0,0,0.1) 0px 10px 10px
- sm: rgba(0,0,0,0.28) 0px 0px 5px 1px
## Components
### Primary Button
```css
.btn-primary {
background: #fff;
color: #000;
padding: 0;
border-radius: 0;
border: none;
font-weight: 400;
font-size: 14px;
}
.btn-primary:hover {
color: #121212;
box-shadow: 0 0 0 var(--button-shadowSpread) hsla(var(--button-strokeHover),var(--button-opacityHover));
}
.btn-primary:active {
box-shadow: none;
}Circular Button
.btn-circle {
background: rgba(18,18,18,0.6);
border: 1px solid #424242;
border-radius: 50%;
font-size: 16px;
}
.btn-circle:hover {
border: 2px solid rgba(255,255,255,0.32);
}
.btn-circle:focus {
outline: 2px solid #346eb7;
}Link
.link-strong {
color: #000;
font-weight: 700;
text-decoration: none;
}
.link-strong:hover {
color: #727272;
}Layout & Responsive Rules
- Max width: fluid up to 1920px
- Breakpoints: multiple from 320px to 1920px
- Mobile padding: 12px
- Desktop padding: 20px
Interaction Rules
- Hover: subtle color shift
- Focus: visible outline for circular buttons
- Transitions: ~150ms ease
DO
- Use only palette colors
- Maintain 8px grid
- Use serif for headlines, sans for UI
- Keep hover states subtle
- Reserve red/orange for alerts
DON'T
- Add custom shadows
- Mix serif and sans inconsistently
- Use underlines for links
- Use bright saturated colors
Code Examples
(see above CSS snippets)
---
## 9. Summary
**TL;DR** — NYT’s design language is print heritage translated into digital: muted palette, strong typographic hierarchy, disciplined spacing. Buttons and links are understated, colors are functional, and content is king.
**Brand Keywords**:
- heritage-editorial
- muted-functional
- typography-driven
- disciplined-grid
- trust-centric