GOV.UK Brand Design System Deep-Dive
1. Brand Overview
GOV.UK is the UK government’s digital service front door. This isn’t a commercial brand trying to sell you something — it’s an interface for public services, legislation, and official information. That changes the design priorities dramatically. The goal here isn’t “delight” or “brand storytelling,” it’s trust, clarity, and accessibility.
The vibe: authoritative but approachable. Everything feels stripped back to essentials. There’s no ornamental fluff, no gradients, no unnecessary motion. Colors are restrained, typography is utilitarian, and spacing is functional. It’s all about getting you to the right service or document as quickly as possible without cognitive noise.
GOV.UK’s design philosophy is rooted in the Government Digital Service (GDS) Design Principles: start with user needs, do less, design for accessibility, and make things open. The visual language reflects that — high contrast, large hit areas, predictable states, and clear typographic hierarchy.
This is for everyone. That means wide accessibility compliance, readable at all zoom levels, and tested across screen readers. The brand design system also serves thousands of separate government services that plug into GOV.UK’s frontend. That’s why there’s a rigid token system and consistent component library — if you break consistency, you break trust.
One noticeable choice: zero border radius across the board. No rounded corners. It’s sharp, grid-aligned, and almost print-like. This works because it reinforces a feeling of seriousness and stability. Rounded corners would push it toward “friendly app,” which isn’t the right tone for official government content.
They nailed clarity. The typography (GDS Transport) is designed for legibility at distance — it’s literally based on the UK road signage typeface — so the entire site has this “public infrastructure” feel. Links are underlined by default and buttons have strong color contrast.
This design system is functional minimalism with a public-service backbone. If you’re designing within it, you’re not here to be clever — you’re here to make things obvious.
2. Color System
2.1 Primary Colors
The standout primary is #1d70b8 — a deep, accessible blue used for links and other interactive elements. It’s saturated enough to stand out but not neon. The psychology here is trust and authority — blue is the classic “safe” choice for government and corporate communication. It’s a bit warmer than royal blue, giving it approachability while staying serious.
Black (#000000) and near-black (#0b0c0c) are the primary text colors. The near-black is used for body copy to reduce glare compared to pure black, but pure black is used in certain UI elements for maximum contrast.
White (#ffffff) is the base for button text, backgrounds, and various components. It’s paired with the blues and blacks to maintain legibility.
2.2 Complete Palette
| Color Name | Hex | Role | Usage |
|---|---|---|---|
| Black | #000000 | Text/UI | High-contrast text, borders, some icons |
| Near Black | #0b0c0c | Text | Body copy, labels |
| Primary Blue | #1d70b8 | Interactive/links | Links, section headers |
| White | #ffffff | Background/text | Button text, backgrounds |
| Light Grey | #b1b4b6 | Dividers | Borders, separators |
| Dark Green | #005a30 | Functional state | Hover/focus state in buttons |
| Yellow | #ffdd00 | Focus indicator/accent | Focus outlines |
| Dark Navy | #003078 | Hover/focus state | Hover link states |
| Near White (opaque) | #ffffff | Hover state text | Link hover |
| Semantic Secondary | #f3f2f1 | Background | Section backgrounds |
| Light Blue BG | #d2e2f1 | Secondary button background | Secondary buttons |
| Red | #d4351c | Error indicator | Validation/error borders |
| Medium Blue Border | #8eb8dc | Divider accent | Section borders |
2.3 Color Relationships
Contrast is high across the board. Primary blue (#1d70b8) on white passes WCAG AA easily for normal text. Black and near-black on white are well above AAA requirements. The yellow focus outline (#ffdd00) on grey or black is immediately visible — you won’t miss it.
There’s no dark mode here. It’s a fixed light theme. The palette is small, deliberate, and functional.
2.4 Usage Guide
- Primary blue + white: Use for links and primary actions. Works well for text links, not for large background areas — it’s too strong for a full page fill.
- Near-black + semantic secondary background: Default reading mode.
- Yellow focus outline: Reserved for accessibility focus states. Don’t use it for decorative purposes — it signals interaction focus.
- Light blue background (#d2e2f1): Secondary button fill.
- Avoid mixing red (#d4351c) with blue in the same component — they’re both strong and clash visually.
- Never use custom tints — stick to the exact hex values.
3. Typography
3.1 Font Families
The entire system uses GDS Transport, a custom font based on UK road signage, with Arial as fallback. No Google Fonts or Adobe Fonts here — it’s a government-owned asset. This is a deliberate accessibility move: predictable rendering, wide OS support, and no dependency on third-party font hosting.
3.2 Type Scale
| Element | Font | Size | Weight | Line Height |
|---|---|---|---|---|
| Heading-1 | GDS Transport | 64px (4.00rem) | 700 | 1.20 |
| Heading-1 | GDS Transport | 36px (2.25rem) | 700 | 1.11 |
| Link | GDS Transport | 30px (1.88rem) | 400 | 1.00 |
| Heading-1 | GDS Transport | 28.5px (1.78rem) | 700 | 1.32 |
| Heading-1 | GDS Transport | 24px (1.50rem) | 700 | 1.25 |
| Heading-1 | GDS Transport | 19px (1.19rem) | 400 | 1.32 |
| Link | GDS Transport | 19px (1.19rem) | 400 | 1.32 |
| Button | GDS Transport | 19px (1.19rem) | 400 | 1.00 |
| Button | GDS Transport | 19px (1.19rem) | 700 | 1.05 |
| Heading-1 | GDS Transport | 19px (1.19rem) | 700 | 1.05 |
| Link | GDS Transport | 19px (1.19rem) | 700 | 1.30 |
| Heading-1 | GDS Transport | 18.72px (1.17rem) | 700 | — |
| Link | GDS Transport | 16px (1.00rem) | 400 | 1.25 |
| Heading-1 | GDS Transport | 16px (1.00rem) | 700 | — |
| Button | GDS Transport | 16px (1.00rem) | 700 | — |
| Link | GDS Transport | 16px (1.00rem) | 700 | — |
| Heading-1 | GDS Transport | 16px (1.00rem) | 400 | — |
| Button | GDS Transport | 16px (1.00rem) | 400 | 1.25 |
| Button | Arial | 13.3333px (0.83rem) | 400 | — |
3.3 Hierarchy
They use large heading sizes for top-level pages (64px), then drop quickly to medium sizes (36px, 28.5px) for sections. This gives a clear visual break between page title and content. Body and link text sits around 16–19px — readable without zoom, even for older users. Line heights are tight in headings to keep them compact, looser in body copy for readability.
4. Spacing & Layout
4.1 Spacing Scale
Base scale is 8px — everything is a multiple or half-multiple.
| Value | Rem | Count | Numeric Value |
|---|---|---|---|
| 1px | 0.06rem | 2 | 1 |
| 4px | 0.25rem | 22 | 4 |
| 5px | 0.31rem | 69 | 5 |
| 6px | 0.38rem | 4 | 6 |
| 7px | 0.44rem | 9 | 7 |
| 7.5px | 0.47rem | 4 | 7.5 |
| 8px | 0.50rem | 9 | 8 |
| 10px | 0.63rem | 26 | 10 |
| 12px | 0.75rem | 1 | 12 |
| 15px | 0.94rem | 35 | 15 |
| 16px | 1.00rem | 1 | 16 |
| 17px | 1.06rem | 3 | 17 |
| 19px | 1.19rem | 20 | 19 |
| 20px | 1.25rem | 78 | 20 |
| 25px | 1.56rem | 4 | 25 |
| 30px | 1.88rem | 25 | 30 |
| 32px | 2.00rem | 7 | 32 |
| 40px | 2.50rem | 6 | 40 |
| 50px | 3.13rem | 3 | 50 |
| 60px | 3.75rem | 14 | 60 |
4.2 Layout
Breakpoints at 1020px and 1281px — fairly wide, indicating desktop-first with progressive shrink. Likely a max content width around the largest breakpoint minus margins. Mobile layouts collapse the grid but maintain the 8px spacing structure.
5. Visual Elements
- Border radius: None. Literally
0pxeverywhere. This is part of the brand. - Shadow system: Minimal. Three shadows:
rgb(0, 45, 24) 0px 2px 0px 0px— used on primary buttons.rgb(11, 12, 12) 0px 3px 0px 0px— used on secondary/outline buttons.rgb(146, 145, 145) 0px 2px 0px 0px— rare, low confidence.
- Borders & dividers: 1px solid light grey (#b1b4b6) for separators. Strong black (#0b0c0c) for buttons and form outlines. Occasional colored borders for states (blue, red).
6. Components
6.1 Buttons
Primary (gem-c-button govuk-button)
- Default: bg
#00703c(rgb(0, 112, 60)), text white, padding8px 10px 7px, border2px solid transparent, shadow dark green, no radius. - Hover: bg
#f3f2f1, text#003078, shadow black. - Active: bg white, text near-black, shadow dark green.
- Focus: bg
#f3f2f1, text near-black, border1px solid #ffdd00, shadow yellow + black.
Search Input (gem-c-search-with-autocomplete__input)
- Default: bg white, text black, padding
6px, border0px solid near-black. - Hover: shadow light grey ring, dashed outline.
- Focus: inset shadow, yellow outline.
Secondary (gem-c-search__submit)
- Default: bg
#d2e2f1, text primary blue, padding0px, border none. - Hover: bg
#f3f2f1, text#003078, shadow black. - Active: bg white, text near-black, shadow dark green.
- Focus: same as primary focus.
Outline (govuk-button gem-c-feedback__prompt-link)
- Default: transparent bg, text near-black, border
1px solid near-black, shadow black. - Hover: bg
#f3f2f1, text#003078. - Active: bg yellow, text near-black, shadow black.
- Focus: same as primary focus.
6.2 Links
- Primary link: color
#1d70b8, underline 1px. Hover: text#ffffff(near-white), no underline. - Dark link: color near-black, underline. Hover: text near-white.
- Inverse link: color white, no underline. Hover: underline 3px.
6.3 Forms
Search input is the main form field. Focus states are very visible — thick yellow outline. No border radius.
6.4 Cards
Borders: 1px solid light grey (#b1b4b6) top border. No radius. Padding from spacing scale. No shadow — depth via borders.
7. Design Tokens (CSS Custom Properties)
:root {
/* Colors */
--color-black: #000000;
--color-near-black: #0b0c0c;
--color-primary-blue: #1d70b8;
--color-white: #ffffff;
--color-light-grey: #b1b4b6;
--color-dark-green: #005a30;
--color-yellow: #ffdd00;
--color-dark-navy: #003078;
--color-semantic-secondary: #f3f2f1;
--color-light-blue-bg: #d2e2f1;
--color-red: #d4351c;
--color-medium-blue-border: #8eb8dc;
/* Typography */
--font-gds-transport: "GDS Transport", arial;
--font-size-h1-lg: 4rem;
--font-size-h1-md: 2.25rem;
--font-size-link-lg: 1.88rem;
--font-size-h1-sm: 1.78rem;
--font-size-h1-xs: 1.5rem;
--font-size-body-lg: 1.19rem;
--font-size-body-sm: 1rem;
--font-size-button-sm: 0.83rem;
--line-height-tight: 1.05;
--line-height-normal: 1.25;
--line-height-loose: 1.32;
/* Spacing */
--space-1: 1px;
--space-4: 4px;
--space-5: 5px;
--space-6: 6px;
--space-7: 7px;
--space-7_5: 7.5px;
--space-8: 8px;
--space-10: 10px;
--space-12: 12px;
--space-15: 15px;
--space-16: 16px;
--space-17: 17px;
--space-19: 19px;
--space-20: 20px;
--space-25: 25px;
--space-30: 30px;
--space-32: 32px;
--space-40: 40px;
--space-50: 50px;
--space-60: 60px;
/* Border Radius */
--radius-none: 0px;
/* Shadows */
--shadow-green: rgb(0, 45, 24) 0px 2px 0px 0px;
--shadow-black: rgb(11, 12, 12) 0px 3px 0px 0px;
--shadow-grey: rgb(146, 145, 145) 0px 2px 0px 0px;
}8. AI Coding Assistant Prompt
# GOV.UK Design System Specification
You are a GOV.UK design expert. Build UIs matching their visual language exactly.
## Brand Context
GOV.UK is the UK government’s official digital service platform. The design prioritizes clarity, trust, and accessibility over decoration. Everything is functional, grid-aligned, with sharp corners and high-contrast colors.
## Color Palette
- Black: #000000 — High-contrast text, icons
- Near Black: #0b0c0c — Body text, labels
- Primary Blue: #1d70b8 — Links, primary actions
- White: #ffffff — Backgrounds, button text
- Light Grey: #b1b4b6 — Dividers, borders
- Dark Green: #005a30 — Primary button shadows
- Yellow: #ffdd00 — Focus outlines
- Dark Navy: #003078 — Hover link states
- Semantic Secondary: #f3f2f1 — Section backgrounds
- Light Blue BG: #d2e2f1 — Secondary button background
- Red: #d4351c — Error states
- Medium Blue Border: #8eb8dc — Section borders
## Typography
Font family: "GDS Transport", arial
| Level | Size | Weight | Line Height | Use For |
|-------|------|--------|-------------|---------|
| H1-lg | 64px | 700 | 1.20 | Page title |
| H1-md | 36px | 700 | 1.11 | Section headings |
| Link-lg | 30px | 400 | 1.00 | Large nav links |
| H1-sm | 28.5px | 700 | 1.32 | Subheadings |
| H1-xs | 24px | 700 | 1.25 | Minor headings |
| Body-lg | 19px | 400 | 1.32 | Paragraph text |
| Link-md | 19px | 400 | 1.32 | Inline links |
| Button-md | 19px | 400 | 1.00 | Default buttons |
| Button-bold | 19px | 700 | 1.05 | Bold buttons |
| Body-sm | 16px | 400 | 1.25 | Small text |
| Button-sm | 13.3333px | 400 | — | Small controls |
## Spacing & Grid
Base: 8px
Scale: 1px, 4px, 5px, 6px, 7px, 7.5px, 8px, 10px, 12px, 15px, 16px, 17px, 19px, 20px, 25px, 30px, 32px, 40px, 50px, 60px
## Border Radius
- none: 0px — All components
## Shadows & Depth
- Primary button shadow: rgb(0, 45, 24) 0px 2px 0px
- Outline button shadow: rgb(11, 12, 12) 0px 3px 0px
- Minimal use — no decorative shadows
## Component Specifications
### Primary Button
Default: bg #00703c, color #ffffff, padding 8px 10px 7px, border 2px solid transparent, shadow var(--shadow-green)
Hover: bg #f3f2f1, color #003078, shadow var(--shadow-black)
Active: bg #ffffff, color #0b0c0c, shadow var(--shadow-green)
Focus: bg #f3f2f1, color #0b0c0c, border 1px solid #ffdd00, shadow #ffdd00 and #0b0c0c
### Secondary Button
Default: bg #d2e2f1, color #1d70b8, padding 0px, border none
Hover: bg #f3f2f1, color #003078
Active: bg #ffffff, color #0b0c0c
Focus: same as primary focus
### Outline Button
Default: transparent bg, color #0b0c0c, border 1px solid #0b0c0c, shadow var(--shadow-black)
Hover: bg #f3f2f1, color #003078
Active: bg #ffdd00, color #0b0c0c, shadow var(--shadow-black)
Focus: same as primary focus
### Navigation Links
Primary: color #1d70b8, underline 1px; hover color #ffffff, no underline
Dark: color #0b0c0c, underline; hover color #ffffff
Inverse: color #ffffff, no underline; hover underline 3px
### Input Fields
Search input default: bg white, color black, padding 6px, border 0px solid #0b0c0c
Focus: inset shadow, outline #ffdd00 solid 3px
### Cards
Border-top: 1px solid #b1b4b6, no radius, padding from spacing scale
## Layout & Responsive Rules
Breakpoints: 1020px, 1281px
Maintain 8px grid spacing across all devices
## Interaction Rules
- Transition timing: 150ms ease for color/state changes
- Focus indicators: Always yellow outline
- No animation beyond state change
## DO List
- Use ONLY colors from palette
- Maintain 8px grid
- Keep corners sharp (0px radius)
- Use GDS Transport for all text
- Always show focus outline
- Keep link underlines unless inverse
## DON'T List
- Don't add new colors
- Don't round corners
- Don't remove focus outlines
- Don't use shadows for decoration
- Don't reduce text sizes below 16px for body
## Code Examples
```css
.btn-primary {
background: #00703c;
color: #ffffff;
padding: 8px 10px 7px;
border-radius: 0;
border: 2px solid transparent;
box-shadow: rgb(0, 45, 24) 0px 2px 0px;
font-family: "GDS Transport", arial;
font-size: 19px;
font-weight: 400;
transition: background 150ms ease;
}
.btn-primary:hover {
background: #f3f2f1;
color: #003078;
box-shadow: rgb(11, 12, 12) 0px 3px 0px;
}
.btn-primary:focus {
outline: 3px solid #ffdd00;
outline-offset: 0;
}
```
```css
.card {
background: #ffffff;
border-top: 1px solid #b1b4b6;
padding: 20px;
border-radius: 0;
}
```
```css
.input-search {
background: #ffffff;
color: #000000;
padding: 6px;
border: 0px solid #0b0c0c;
border-radius: 0;
}
.input-search:focus {
outline: 3px solid #ffdd00;
box-shadow: inset 0 0 0 4px;
}
```9. Summary
TL;DR: GOV.UK’s design system is functional minimalism for public service. High contrast, sharp corners, predictable states. Every token is deliberate. If you stick to the palette, spacing, and typography, you can’t go wrong.
Brand Keywords:
- public-service-minimalism
- sharp-corner-authority
- accessibility-first
- functional-grid