Wa Brand Design System Deep Dive
1. Brand Overview
WhatsApp ("Wa" here) isn’t just a messaging app — it’s a social utility with a distinct personality. Their design language is rooted in clarity, trust, and low-friction interaction. This is not a glossy, ornamental brand. It’s functional first, emotional second. You can see it in the way they use color: deep greens for trust and familiarity, bright greens for action, and neutral dark grays for the foundation. The vibe is utilitarian but friendly.
The site design (extracted from https://api.whatsapp.com/) reflects a long-lived brand that has evolved without breaking its core visual DNA. Rounded shapes dominate — 50px radii for pills, 50% radii for avatars. Typography is system-safe: Helvetica Neue and -apple-system stacks. They’re not chasing typographic fashion; they’re chasing legibility on every device, everywhere.
The whole thing runs on an 8px-based spacing system (with some 4px and 6px thrown in). It’s consistent enough to feel intentional but flexible enough to handle the quirks of multilingual layouts.
Their component styling is minimal. No shadows — depth comes from borders and color contrast. Links have subtle hover states (underline, color change). Inputs are pill-shaped, white-bordered, and high-contrast against dark backgrounds. Border radii are consistent, making the UI feel cohesive across contexts.
This brand is for billions of users in every market. They optimize for universality: safe fonts, high-contrast colors, touch-friendly targets. The design philosophy is pragmatic: make it work everywhere, make it feel friendly, don’t overcomplicate.
2. Color System
2.1 Primary Colors
The core brand color is #25d366 (rgb(37, 211, 102)) — the bright WhatsApp green. It’s used selectively: CTAs, highlights, hover states for important links. Psychologically, green signals “go” and “safe” — perfect for a messaging app where you want to encourage action without aggression.
Backgrounds lean toward #111b21 — a deep charcoal. Text is almost always white (#ffffff) against dark backgrounds, or dark (#111b21 / #1c1e21 / #1c1e21) against light surfaces. This gives maximum contrast in either mode.
Compared to competitors (Messenger’s blue, Telegram’s light blues), WhatsApp’s green stands out in a sea of social blues. It’s instantly identifiable.
2.2 Complete Palette
| Color Name | Hex | Role | Usage |
|---|---|---|---|
| Deep Charcoal | #111b21 | Primary background, dark UI base | Backgrounds, dark surfaces |
| Pure White | #ffffff | Text on dark, backgrounds | Text, icons, borders |
| WhatsApp Green | #25d366 | Primary action, accent | CTAs, hover states |
| Dark Gray (rgba 0.2 alpha) | rgba(17, 27, 33, 0.2) | Divider lines | Light borders on dark |
| Dark Gray (rgba 0.4 alpha) | rgba(17, 27, 33, 0.4) | Divider lines | Subtle separators |
| Near-black | #1c1e21 | Text on light backgrounds | Links, body text |
| Bright Blue | #027eb5 | Accent links | Links |
| Secondary Blue | #0373e9 | Accent links | Links |
| Green Border | #43cd66 | Accent border | Rare emphasis |
| Dark Green Border | #33463f | Dividers | Section boundaries |
2.3 Color Relationships
Contrast is high almost everywhere. White text (#ffffff) on #111b21 yields a contrast ratio ~13.3:1 — way above WCAG AAA. Green (#25d366) on #111b21 is ~3.4:1 — borderline for AAA but acceptable for large text and UI affordances. This is why they use it mostly for accents, not body text.
Dark mode is the default aesthetic. The palette flips cleanly for light surfaces by swapping text to dark gray (#1c1e21) and keeping accents consistent.
2.4 Usage Guide
Works well:
- #25d366 (accent) on dark backgrounds (#111b21) — eye-catching CTAs.
- White text on dark charcoal for maximum legibility.
Avoid:
- Green on white for body text — contrast is insufficient.
- Mixing multiple blues (#027eb5 and #0373e9) in the same context — they’re used for different link types.
3. Typography
3.1 Font Families
They lean heavily on safe, OS-native stacks:
- Helvetica Neue, Helvetica, Arial — primary for headings and links.
- -apple-system stack — system UI fonts for buttons and some headings.
No Google Fonts, no Adobe Fonts. This ensures performance and cross-platform consistency.
3.2 Type Scale
| Element | Font Family | Size (px/rem) | Weight | Line Height | Spacing |
|---|---|---|---|---|---|
| heading-1 | Helvetica Neue | 24px / 1.50rem | 400 | 1.00 | -0.72px |
| heading-1 | Helvetica | 23px / 1.44rem | 400 | 1.13 | null |
| link | Helvetica Neue | 18px / 1.13rem | 400 | 1.39 | -0.18px |
| heading-1 | Helvetica Neue | 18px / 1.13rem | 400 | 1.39 | -0.18px |
| link | Helvetica Neue | 16px / 1.00rem | 400 | 1.20 | null |
| heading-1 | Helvetica Neue | 16px / 1.00rem | 400 | 1.20 | null |
| heading-1 | -apple-system | 16px / 1.00rem | 500 | 1.20 | null |
| button | -apple-system | 16px / 1.00rem | 400 | 1.38 | -0.16px |
| heading-1 | -apple-system | 16px / 1.00rem | 400 | 1.38 | -0.16px |
| heading-1 | Helvetica Neue | 16px / 1.00rem | 400 | 1.38 | -0.16px |
| link | Helvetica Neue | 16px / 1.00rem | 400 | 1.38 | -0.16px |
| link | Helvetica | 16px / 1.00rem | 400 | 1.63 | null |
| link | Helvetica | 13px / 0.81rem | 600 | 1.46 | 0.26px (uppercase) |
| caption | Helvetica | 12px / 0.75rem | 400 | 1.34 | null |
| link | Helvetica | 12px / 0.75rem | 400 | 1.34 | null |
| link | Helvetica Neue | 12px / 0.75rem | 400 | 1.34 | null |
| caption | Helvetica Neue | 12px / 0.75rem | 400 | 1.30 | -0.36px |
| caption | Helvetica Neue | 12px / 0.75rem | 400 | 1.34 | -0.12px |
| caption | Helvetica Neue | 12px / 0.75rem | 400 | 1.20 | null |
3.3 Hierarchy
They use subtle size changes: 24px for large headings, 18px for sub-headings/links, 16px for body buttons, 13px uppercase for labels, 12px for captions. The hierarchy is functional — enough differentiation without breaking flow. This keeps the interface tight and readable.
4. Spacing & Layout
4.1 Spacing Scale
Base scale: 8px grid, but with some irregulars (4px, 6px, 10px, 15px).
Common values:
| Value | Rem | Count | Use Cases |
|---|---|---|---|
| 1px | 0.06rem | 6 | Hairline borders |
| 4px | 0.25rem | 2 | Tiny gaps |
| 6px | 0.38rem | 2 | Micro padding |
| 10px | 0.63rem | 1 | Tight padding |
| 12px | 0.75rem | 480 | Buttons, small gaps |
| 15px | 0.94rem | 4 | Misc spacing |
| 16px | 1.00rem | 43 | Body padding |
| 18px | 1.13rem | 43 | Medium gaps |
| 20px | 1.25rem | 12 | Section padding |
| 24px | 1.50rem | 16 | Component spacing |
| 32px | 2.00rem | 7 | Large gaps |
| 37px | 2.31rem | 7 | Hero padding |
| 45px | 2.81rem | 6 | Big sections |
| 56px | 3.50rem | 5 | Hero sections |
| 70px | 4.38rem | 1 | Extra-large |
| 80px | 5.00rem | 1 | XL spacing |
| 88px | 5.50rem | 1 | XL spacing |
| 90px | 5.63rem | 2 | XL spacing |
| 96px | 6.00rem | 1 | XL spacing |
| 176px | 11.00rem | 2 | Huge gaps |
4.2 Layout
Breakpoints at: 319px, 400px, 500px, 639px, 640px, 767px, 768px, 770px, 800px, 801px, 1023px, 1024px, 1095px, 1096px, 1200px.
This shows a mobile-first approach with fine-grained breakpoints (even single-pixel variations) — likely to handle specific device quirks.
5. Visual Elements
Border Radius System:
| Radius | Count | Components |
|---|---|---|
| 5px | 2 | Small anchors |
| 25px | 7 | Medium pills |
| 50px | 13 | Links, listboxes |
| 50% | 32 | Avatars, social icons |
They love large radii and full circles. No small rounding except in edge cases.
Shadow System:
None. This is flat design — depth is via color and borders.
Borders:
- 1px solid #ffffff — primary on dark backgrounds.
- 2px solid #ffffff — for select inputs.
- rgba(17,27,33,0.2) — light separators.
- 1px solid #1c1e21 — on light backgrounds.
- Occasional green (#43cd66) borders for emphasis.
6. Components
6.1 Buttons
No standalone button data in extract — they’re using links styled as buttons or select elements with button-like styles.
Example: select-one default:
- background: #111b21
- color: #ffffff
- border: 2px solid #ffffff
- border-radius: 50px (pill)
- padding: 16px 28px
6.2 Links
Several link styles:
- Color: #1c1e21, hover → underline + white.
- Color: #ffffff, font-weight 600, hover → underline.
- Color: #027eb5, hover → underline.
- Color: #111b21, hover → underline + green (#25d366).
- Color: #0373e9, hover → underline + white.
6.3 Forms
Only select-one data:
- Dark background, white text, white border, pill shape.
No focus styles extracted.
6.4 Cards
No explicit card component in extract — likely built from container styles.
7. Design Tokens
:root {
/* Colors */
--color-charcoal: #111b21;
--color-white: #ffffff;
--color-green: #25d366;
--color-dark-gray-20: rgba(17, 27, 33, 0.2);
--color-dark-gray-40: rgba(17, 27, 33, 0.4);
--color-near-black: #1c1e21;
--color-blue-bright: #027eb5;
--color-blue-secondary: #0373e9;
--color-green-border: #43cd66;
--color-dark-green-border: #33463f;
/* Typography */
--font-helvetica-neue: "Helvetica Neue", Helvetica, Arial;
--font-system: -apple-system, system-ui, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open Sans, Helvetica Neue;
--font-helvetica: Helvetica, Arial;
/* Spacing */
--space-1: 1px;
--space-4: 4px;
--space-6: 6px;
--space-10: 10px;
--space-12: 12px;
--space-15: 15px;
--space-16: 16px;
--space-18: 18px;
--space-20: 20px;
--space-24: 24px;
--space-32: 32px;
--space-37: 37px;
--space-45: 45px;
--space-56: 56px;
--space-70: 70px;
--space-80: 80px;
--space-88: 88px;
--space-90: 90px;
--space-96: 96px;
--space-176: 176px;
/* Border Radius */
--radius-sm: 5px;
--radius-md: 25px;
--radius-lg: 50px;
--radius-full: 50%;
/* Borders */
--border-white-1: 1px solid #ffffff;
--border-white-2: 2px solid #ffffff;
--border-dark-gray-20: 1px solid rgba(17, 27, 33, 0.2);
--border-dark-gray-40: 1px solid rgba(17, 27, 33, 0.4);
--border-near-black: 1px solid #1c1e21;
--border-green: 1px solid #43cd66;
}8. AI Coding Assistant Prompt
# Wa Design System Specification
You are a Wa (WhatsApp) design expert. Build UIs matching their visual language exactly.
## Brand Context
Wa's design is functional, friendly, and globally accessible. It uses high-contrast colors, safe system fonts, and rounded shapes for a cohesive feel. No shadows — depth is via borders and color contrast.
## Color Palette
- Charcoal: #111b21 — primary background for dark mode
- Pure White: #ffffff — text on dark, icon color, borders
- WhatsApp Green: #25d366 — primary action accents, hover states
- Dark Gray 20%: rgba(17, 27, 33, 0.2) — subtle dividers
- Dark Gray 40%: rgba(17, 27, 33, 0.4) — separators
- Near Black: #1c1e21 — text on light backgrounds
- Bright Blue: #027eb5 — link color variant
- Secondary Blue: #0373e9 — link color variant
- Green Border: #43cd66 — rare accent border
- Dark Green Border: #33463f — section divider border
## Typography
Fonts:
- Headings, body: "Helvetica Neue", Helvetica, Arial
- Buttons/system UI: -apple-system, system-ui, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open Sans, Helvetica Neue
Sizes:
| Level | Size | Weight | Line Height | Use |
|------------|-------|--------|-------------|-----|
| Heading 1 | 24px | 400 | 1.00 | Page titles |
| Heading 1 | 23px | 400 | 1.13 | Section titles |
| Link/H2 | 18px | 400 | 1.39 | Sub-headings, links |
| Body | 16px | 400 | 1.20-1.38 | Paragraphs, buttons |
| Label | 13px | 600 | 1.46 | Uppercase labels |
| Caption | 12px | 400 | 1.20-1.34 | Meta info |
## Spacing & Grid
Base: 8px grid
Scale: 1px, 4px, 6px, 10px, 12px, 15px, 16px, 18px, 20px, 24px, 32px, 37px, 45px, 56px, 70px, 80px, 88px, 90px, 96px, 176px
## Border Radius
- sm: 5px — small anchors
- md: 25px — medium pills
- lg: 50px — pill buttons, select inputs
- full: 50% — avatars, social icons
## Shadows & Depth
Flat design — use borders and color contrast. No shadows.
## Component Specifications
### Primary Button
```css
.btn-primary {
background: var(--color-charcoal);
color: var(--color-white);
padding: 16px 28px;
border-radius: var(--radius-lg);
border: 2px solid var(--color-white);
font-family: var(--font-system);
font-size: 16px;
line-height: 1.38;
}
.btn-primary:hover {
background: var(--color-green);
}
.btn-primary:focus {
outline: 2px solid var(--color-white);
}
.btn-primary:disabled {
opacity: 0.5;
}
```
### Navigation Link
```css
.nav-link {
color: var(--color-near-black);
text-decoration: none;
font-weight: 400;
}
.nav-link:hover {
text-decoration: underline;
color: var(--color-white);
}
```
### Input Field
```css
.input-select {
background: var(--color-charcoal);
color: var(--color-white);
border: 2px solid var(--color-white);
border-radius: var(--radius-lg);
padding: 16px 28px;
}
```
## Layout & Responsive Rules
- Responsive breakpoints: 319px, 400px, 500px, 639px, 640px, 767px, 768px, 770px, 800px, 801px, 1023px, 1024px, 1095px, 1096px, 1200px
## Interaction Rules
- Transition: 150ms ease for hover/focus changes
- Focus: solid outline matching current text/border color
- Hover: underline for links, color change for buttons
## DO List
- Use only colors from palette
- Maintain 8px-based spacing
- Use large, consistent border radii
- Keep text high-contrast
- Rely on system fonts for performance
## DON'T List
- Add shadows
- Mix sharp and rounded corners
- Invent new colors
- Reduce contrast below WCAG AA
- Use decorative fonts
## Code Examples
Primary Button:
```css
.btn-primary {
background: #111b21;
color: #ffffff;
padding: 16px 28px;
border-radius: 50px;
border: 2px solid #ffffff;
}
.btn-primary:hover { background: #25d366; }
```
Card Container:
```css
.card {
background: #111b21;
border: 1px solid rgba(17, 27, 33, 0.2);
border-radius: 25px;
padding: 24px;
}
```
Form Input:
```css
.input {
background: #111b21;
color: #ffffff;
border: 2px solid #ffffff;
border-radius: 50px;
padding: 16px 28px;
}
```9. Summary
TL;DR: Wa’s design system is dark, flat, and friendly. High-contrast colors, pill-shaped components, and safe system fonts make it universal across devices and cultures. No shadows — borders do the work.
Brand Keywords:
- high-contrast-minimal
- globally-accessible
- rounded-friendly
- flat-functional
- green-accented