PBS Brand Design System Deep Dive
1. Brand Overview
PBS (Public Broadcasting Service) isn't chasing the latest startup aesthetic. This is a brand with decades of cultural weight. Its website has one job: deliver accessible, trustworthy, educational content to a mass audience. The design language leans toward clarity and trustworthy neutrality, with small injections of vibrant energy for calls-to-action.
The vibe? Measured, civic, slightly academic, but not stiff. You can see it in the typography—it’s custom “PBS Sans” everywhere, humanist shapes and clean fallbacks (Helvetica Neue, Helvetica, Arial) to ensure consistent rendering. This betrays the broadcast heritage—clarity over flourish.
They’ve avoided heavy gradients and kept shadows out entirely; it’s flat design plus subtle layering through borders and background colors. Accessibility seems top of mind: colors are chosen for high contrast, font sizes trend larger than typical news sites, and buttons have thick outlines on focus states.
PBS clearly thinks about multi-device use. The site’s spacing scale is cleanly built around an 8px grid (with a few 4px and 1px units sneaking in). Breakpoints range from very narrow mobile (379px) to giant desktop (1920px), which tells you they care about the full spectrum—from library public terminals to home theater screens.
This is for an audience that spans generations. The design system keeps complexity low for developers, high clarity for viewers. I’d call the philosophy: "Serious content delivery, softened with friendly design cues."
2. Color System
PBS’s color use is functional but with deliberate personality. One strong blue defines primary actions, neutrals for text and surfaces, a warm orange accent, and a couple of highlight colors tucked into CSS variables.
2.1 Primary Colors
The hero here is #2638c4—a deep, confident blue. It’s used for main interactive elements (newsletter submit, arrow buttons). Psychologically, it's authoritative, reliable, and distinctly PBS vs NPR’s warm neutrals or BBC’s red. It works because it contrasts perfectly on light and dark backgrounds without feeling aggressive.
2.2 Complete Palette
| Color Name/Source | Hex | Role | Usage |
|---|---|---|---|
| Light Gray | #eef0f5 | Neutral background | Navigation buttons, footer links |
| White | #ffffff | Text / background | Buttons, inputs, page backgrounds |
| Black | #000000 | Text / icons | Search submit, hamburger lines |
| Soft Black (30% opacity) | #101010 | Overlay | Transparent UI layers |
| Deep Navy | #000525 | Accent background | Sections, dark areas |
| Primary Blue | #2638c4 | Primary CTA | Buttons, nav highlight |
| Mid Gray | #94a1b2 | Secondary text | Hover states for links |
| Accent Orange | #fe704e | Highlight accent | Alerts, emphasis |
| Slight Gray | #eef0f3 | Hover bg | Hover/focus background color |
| Bright Blue (hover) | #486cd8 | Hover outline | Focus outlines |
| Cool Gray | #c0c8d2 | Hover/focus | States, surface emphasis |
| Pale Gray | #c8cfd8 | Hover/focus | Input backgrounds |
| Soft Cool Gray | #c5ccd5 | Hover/focus | Border colors |
| True Blue | #005fcc | Focus state | Inputs and button focus borders |
| Focus Teal (var) | #46d4cd | Focus state special | Inputs focus outlines |
| Icon Active Yellow (var) | #ffcf00 | Icon active indicator | Interactive icons |
| Dark Light Background (var) | #1e2030 | Background | Dark mode or dark surfaces |
2.3 Color Relationships
Contrast: Blue (#2638c4) on white (18+ contrast ratio, AAA). White text on blue also passes AAA. Grays are tuned to ensure mid-gray hover states still contrast against dark backgrounds.
Dark mode potential: --dark-light-background-color (#1e2030) suggests some components have alternate background logic. This is a deep charcoal that works with all neutrals and the primary blue.
Accessibility: Near-universal compliance with WCAG AA in interactive cases. The only caution is #94a1b2 on light gray backgrounds—it’s comfortable but sits near the 4.5:1 threshold.
2.4 Usage Guide
Do:
- Use
#2638c4for primary CTAs with white text. - Pair
#fe704eaccents with neutrals to draw quick attention. - On dark backgrounds, use
#ffffffor#eef0f5for text. #46d4cdfor focus outlines—clear visual indicator.
Avoid:
- Combining
#94a1b2with#eef0f5for core text—it’s fine for hover icons, not for body copy. - Overusing
#fe704e—it’s an accent, and too much feels alarmist. - Mixing opaque and semi-transparent blacks in overlays—they have specific contexts.
3. Typography
3.1 Font Families
Single family: PBS Sans (custom), fallbacks Helvetica Neue, Helvetica, Arial. No Google or Adobe references—this is self-hosted. Variable fonts not detected.
PBS Sans's geometry is clean and approachable, mimicking broadcast titling clarity without losing friendliness.
3.2 Type Scale
Here’s the full extracted usage:
| Context | Font | Size | Weight | Line Height | Transform |
|---|---|---|---|---|---|
| heading-1 | PBS Sans | 22px | 700 | 1.25 | — |
| heading-1 | PBS Sans | 20px | 700 | 1.25 | — |
| link | PBS Sans | 18px | 400 | 1.33 | — |
| button | PBS Sans | 18px | 400 | 1.15 | — |
| link | PBS Sans | 16px | 700 | 1.33 | — |
| link | PBS Sans | 16px | 400 | 1.33 | — |
| heading-1 | PBS Sans | 16px | 400 | 1.50 | — |
| button | PBS Sans | 16px | 700 | 1.00 | — |
| button | PBS Sans | 16px | 400 | 1.15 | — |
| heading-1 | PBS Sans | 16px | 700 | 1.50 | — |
| heading-1 | PBS Sans | 16px | 700 | 1.33 | uppercase |
| button | PBS Sans | 14px | 400 | 1.15 | — |
| link | PBS Sans | 14px | 400 | 1.33 | — |
| caption | PBS Sans | 14px | 400 | 1.50 | — |
| button | PBS Sans | 14px | 700 | 1.00 | — |
| button | PBS Sans | 12px | 700 | 1.00 | — |
| button | PBS Sans | 12px | 400 | 1.33 | — |
| caption | PBS Sans | 12px | 400 | 1.50 | — |
| link | PBS Sans | 12px | 700 | 1.50 | — |
| caption | PBS Sans | 12px | 700 | 1.00 | uppercase |
| link | PBS Sans | 12px | 400 | 1.50 | — |
| caption | PBS Sans | 12px | 700 | 1.50 | — |
| caption | PBS Sans | 11px | 700 | 1.50 | uppercase |
| caption | PBS Sans | 10px | 400 | 1.33 | — |
| button | PBS Sans | 10px | 400 | 1.15 | — |
| link | PBS Sans | 10px | 400 | 1.33 | — |
| caption | PBS Sans | 10px | 700 | 1.50 | uppercase |
3.3 Hierarchy
Headings are surprisingly small compared to body/link sizes—max at 22px. This is content density-driven: let the media content dominate visual hierarchy. Buttons range 10–18px, always bold for primaries, lighter weight for secondary/ghost styles.
Uppercase is used sparingly—only in heading-1 in one instance, and captions at small sizes to create section labels or meta info.
4. Spacing & Layout
4.1 Spacing Scale
PBS runs on an 8px base grid but keeps 4px and 1px for micro gaps.
Common values:
- 1px: hairline borders, micro offsets
- 4px: tight spacing
- 8px: dominant unit (87 uses)
- 10px, 12px, 16px, 20px for varied component padding
- 28px, 32px, 36px, 40px, 44px for sectional spacing
- Large: 60px, 64px, 72px, 80px for hero content
- 200px (!) — appears in large layout offsets
4.2 Layout
Breakpoints tell the story: multiple inflection points from 379px (tiny mobile) up to 1920px (large desktop). This is not a simplistic mobile/tablet/desktop split—it’s fine-tuned for in-between states (718px, 875px, 1100px).
5. Visual Elements
Border Radius
Variety here is huge:
- None:
0pxin some combo edges - Tiny: 2px, 3px
- Small: 4px, 5px, 6px, 7.2px, 8px
- Pills:
9999px(11 uses — pill buttons) - Clamp:
clamp(4px, 4%, 9px)on links — responsive rounding - Full circles: 50% for icons, arrows
Corners are used intentionally—rounded buttons for friendliness, sharper for input-edge combos.
Shadows
None. They’ve gone full flat. Depth is via borders and color blocking.
Borders
Combination examples:
- 7px left solid #eef0f5 — navigation active state
- 2px solid white — ghost buttons
- 1px solid white — inputs
- 1px left solid #eef0f5 — divider links
- 8px top solid #2638c4 — nav bars
6. Components
6.1 Buttons
White Ghost Button:
- Default: Transparent bg, white text,
8px 24pxpadding,9999pxradius, 2px solid white. - Hover: Color change to var(--hover-color),
rgba(15, 30, 140, 0.7)bg. - Active: Color var(--link-active-color), no shadow.
- Focus: Outline
rgb(72, 108, 216)3px solid, bg var(--selected-channel-button-background-color).
Arrow Nav Button:
- Default:
rgba(38, 56, 196, 0.7)bg, colorrgba(16, 16, 16, 0.3), no padding, 50% radius. - Hover: Same hover as ghost, plus opacity 0.9.
- Motion:
transform: matrix(1,0,0,1,0,-17)— offset for arrow pointing.
Newsletter Submit Button:
- Default: Solid #2638c4, white text,
10px 24pxpadding, radius0px 5px 5px 0px. - States match ghost button hover/focus rules.
6.2 Links
Two patterns:
- Light gray (#eef0f5) — hover to mid-gray (#94a1b2)
- White — hover to mid-gray (#94a1b2) No underlines, inline color shifts only.
6.3 Forms
Search input:
- Transparent bg,
rgb(238, 240, 245)text, 1px solid white border, radius 7.2px, thick padding:16px 60px 16px 16px. - Focus: 1px solid
--focus-color(#46d4cd).
Email input:
- Semi-transparent white bg (
rgba(255, 255, 255, 0.2)), text #eef0f5. - Radius
5px 0 0 5px, padding 8px. - Focus: same teal outline.
7. Design Tokens
:root {
/* Colors */
--color-light-gray: #eef0f5;
--color-white: #ffffff;
--color-black: #000000;
--color-soft-black: #101010;
--color-deep-navy: #000525;
--color-primary-blue: #2638c4;
--color-mid-gray: #94a1b2;
--color-accent-orange: #fe704e;
--color-slight-gray: #eef0f3;
--color-hover-blue: #486cd8;
--color-cool-gray: #c0c8d2;
--color-pale-gray: #c8cfd8;
--color-soft-cool-gray: #c5ccd5;
--color-true-blue: #005fcc;
--focus-color: #46d4cd;
--icon-active-color: #ffcf00;
--dark-light-background-color: #1e2030;
/* Typography */
--font-family-pbs: "PBS Sans", "Helvetica Neue", Helvetica, Arial;
/* Spacing */
--space-1: 1px;
--space-4: 4px;
--space-8: 8px;
--space-10: 10px;
--space-12: 12px;
--space-16: 16px;
--space-20: 20px;
--space-28: 28px;
--space-32: 32px;
--space-36: 36px;
--space-40: 40px;
--space-44: 44px;
--space-60: 60px;
--space-64: 64px;
--space-72: 72px;
--space-80: 80px;
--space-200: 200px;
/* Border Radius */
--radius-none: 0;
--radius-2: 2px;
--radius-3: 3px;
--radius-4: 4px;
--radius-5: 5px;
--radius-6: 6px;
--radius-7-2: 7.2px;
--radius-8: 8px;
--radius-pill: 9999px;
--radius-clamp: clamp(4px, 4%, 9px);
--radius-circle: 50%;
/* Borders */
--border-1-white: 1px solid #ffffff;
--border-2-white: 2px solid #ffffff;
--border-7-left-gray: 7px solid #eef0f5;
--border-1-left-gray: 1px solid #eef0f5;
--border-8-top-blue: 8px solid #2638c4;
}8. AI Coding Assistant Prompt
# PBS Design System Specification
You are a PBS design expert. Build UIs matching their visual language exactly.
## Brand Context
PBS values trust, clarity, and accessibility. The design is straightforward, flat, and broadcast-appropriate, with controlled splashes of color for interactive moments. Every choice supports readability and cross-generational usability.
## Color Palette
- Light Gray: #eef0f5 — Backgrounds for navigation buttons, footer links.
- White: #ffffff — Text, backgrounds, ghost button borders.
- Black: #000000 — Primary text and icon lines.
- Soft Black: #101010 — Transparent overlays.
- Deep Navy: #000525 — Section backgrounds.
- Primary Blue: #2638c4 — CTAs, main buttons, nav highlights.
- Mid Gray: #94a1b2 — Hover states for links/icons, secondary text.
- Accent Orange: #fe704e — Alerts, emphasis highlights.
- Slight Gray: #eef0f3 — Hover/focus backgrounds.
- Hover Blue: #486cd8 — Focus outlines, hover states.
- Cool Gray: #c0c8d2 — Hover/focus.
- Pale Gray: #c8cfd8 — Input backgrounds.
- Soft Cool Gray: #c5ccd5 — Borders.
- True Blue: #005fcc — Focus border color.
- Focus Teal: #46d4cd — Input focus outlines.
- Icon Active Yellow: #ffcf00 — Active icon indicators.
- Dark Light Background: #1e2030 — Dark backgrounds.
## Typography
Font family: "PBS Sans", "Helvetica Neue", Helvetica, Arial (self-hosted).
| Level | Size | Weight | Line Height | Use For |
|-------|------|--------|-------------|---------|
| H1 | 22px | 700 | 1.25 | Page titles |
| H1-alt | 20px | 700 | 1.25 | Section titles |
| Link-lg | 18px | 400 | 1.33 | Navigation links |
| Button-lg | 18px | 400 | 1.15 | Ghost/secondary buttons |
| Link-md-bold | 16px | 700 | 1.33 | Main links |
| Link-md | 16px | 400 | 1.33 | Secondary links |
| Button-md-bold | 16px | 700 | 1.00 | Primary buttons |
| Button-md | 16px | 400 | 1.15 | Secondary actions |
| Caption-sm | 14px | 400 | 1.50 | Supporting text |
| Button-sm-bold | 14px | 700 | 1.00 | Small buttons |
| Misc-xs-bold | 12px | 700 | 1.00–1.50 | Meta labels |
| Misc-xs | 12px | 400 | 1.50 | Small body text |
| Caption-xs-upper | 11px | 700 | 1.50 | Uppercase captions |
| Micro | 10px | 400 | 1.33 | UI crumbs |
| Micro-bold-upper | 10px | 700 | 1.50 | Tiny labels |
## Spacing & Grid
Base: 8px grid. Values: 1px, 4px, 8px, 10px, 12px, 16px, 20px, 28px, 32px, 36px, 40px, 44px, 60px, 64px, 72px, 80px, 200px.
Map:
- Small gaps/icons: 4px–8px
- Button padding: 8px–24px
- Card padding: 32px
- Section gaps: 40+ px
- Hero banners: 72–80px
## Border Radius
- none: 0 — hard edges
- xs: 2–3px — tiny elements
- sm: 4–6px — inputs, cards
- special: 7.2px — search input
- md: 8px — images
- pill: 9999px — ghost buttons
- clamp: clamp(4px,4%,9px) — responsive links
- circle: 50% — avatars, arrows
## Shadows & Depth
Flat design. Zero shadows. Use borders and color contrasts.
## Components
### Primary Button (.btn-primary)
Default:
```css
background: #2638c4;
color: #ffffff;
padding: 10px 24px;
border-radius: 0px 5px 5px 0px;
border: none;
font-weight: 700;
font-size: 16px;
```
Hover: `background: rgba(15,30,140,0.7); color: var(--hover-color);`
Focus: `outline: 3px solid #486cd8; color: var(--link-active-color);`
Active: `color: var(--link-active-color);`
Disabled: `opacity: 0.5; cursor: not-allowed;`
### Ghost Button (.btn-ghost)
Default: transparent bg, white text, pill radius (9999px), `8px 24px` padding, white border 2px.
### Input Field (.input)
Search:
```css
background: transparent;
color: #eef0f5;
border: 1px solid #ffffff;
border-radius: 7.2px;
padding: 16px 60px 16px 16px;
```
Focus: `outline: 1px solid #46d4cd;`
### Navigation Link (.nav-link)
Default: color #eef0f5 or #ffffff, no underline.
Hover: color #94a1b2.
## Layout & Responsive Rules
Max content width: flexible. Breakpoints: 379, 380, 420, 480, 600, 718, 768–769, 875, 1024, 1100, 1140, 1200, 1280, 1439, 1440, 1500, 1700, 1920.
## Interaction Rules
- Transition: 150ms ease for hover/focus states.
- Focus indicators: always outlined in visible contrast.
- No motion beyond subtle color fades.
## DO List
- Use only palette colors.
- Stick to multiples of 8px for spacing.
- Keep shadows out; use borders for separation.
- Maintain consistent corner radii based on type.
- Bold weights for primary CTA text.
## DON'T List
- Invent new colors.
- Mix sharp and rounded corners in the same component.
- Use light gray for body text.
- Overuse accent orange.
## Code Examples
Primary Button:
```css
.btn-primary {
background: #2638c4;
color: #ffffff;
padding: 10px 24px;
border-radius: 0px 5px 5px 0px;
font-weight: 700;
font-size: 16px;
border: none;
transition: background 150ms ease;
}
.btn-primary:hover { background: rgba(15,30,140,0.7); color: var(--hover-color); }
.btn-primary:focus { outline: 3px solid #486cd8; }
```
Ghost Button:
```css
.btn-ghost {
background: transparent;
color: #ffffff;
padding: 8px 24px;
border-radius: 9999px;
border: 2px solid #ffffff;
}
.btn-ghost:hover { background: rgba(15,30,140,0.7); color: var(--hover-color); }
```
Search Input:
```css
.search-input {
background: transparent;
border: 1px solid #ffffff;
border-radius: 7.2px;
padding: 16px 60px 16px 16px;
color: #eef0f5;
}
.search-input:focus { outline: 1px solid #46d4cd; }
```9. Summary
TL;DR — PBS’s design system is a disciplined, flat, accessible grid built on PBS Sans, primary blue CTAs, neutral surfaces, and zero shadows. Buttons are either solid blue or ghost white, and forms use clear outlines for focus. It’s civic clarity dressed in friendly polish.
Brand Keywords: civic-clarity, flat-accessible, broadcast-friendly, trust-focused