← Back to all designs

Nike

A photography-first commerce system built on extreme typographic contrast — towering uppercase Futura display lockups burned into editorial campaign imagery, sitting above a dense, neutral, near-monochrome retail chrome of pill-shaped black CTAs, gray search and tag pills, and tight 8px-grid product cards. The brand's voice is athletic, kinetic, and absolute: pure black, pure white, a single soft

Homepage Example

Welcome to Nike

A modern, elegant design system built for the digital age. Clean lines, thoughtful spacing, and purposeful color choices define every interaction.

Get Started Learn More

Pixel Perfect

Every element is carefully crafted to ensure consistency across all platforms and devices.

Design Tokens

A comprehensive token system that makes scaling and maintaining your design effortless.

Built for Teams

Collaborate seamlessly with designers and developers using a shared design language.

Color Palette (23)

primary#111111
on-primary#ffffff
canvas#ffffff
soft-cloud#f5f5f5
ink#111111
charcoal#39393b
ash#4b4b4d
mute#707072
stone#9e9ea0
hairline#cacacb
hairline-soft#e5e5e5
sale#d30005
sale-deep#780700
success#007d48
success-bright#1eaa52
info#1151ff
info-deep#0034e3
accent-pink#ed1aa0
accent-pink-soft#ffb0dd
accent-purple-soft#beaffd
accent-purple-pale#d6d1ff
accent-teal#0a7281
accent-pink-deep#4c012d

Typography (13)

Nike
display-campaign96px · weight 500
Nike
heading-xl32px · weight 500
Nike
heading-lg24px · weight 500
Nike
heading-md16px · weight 500
Nike
body-md16px · weight 400
Nike
body-strong16px · weight 500
Nike
button-lg24px · weight 500
Nike
button-md16px · weight 500
Nike
button-sm14px · weight 500
Nike
link-md16px · weight 500
Nike
caption-md14px · weight 500
Nike
caption-sm12px · weight 500
Nike
utility-xs9px · weight 500

Components (24)

button-primary
button-primary
button-primary-active
button-primary-active
button-secondary
button-secondary
button-outline-on-image
button-outline-on-image
button-icon-circular
button-icon-circular
search-pill
search-pill
search-pill-focused
search-pill-focused
filter-chip
filter-chip
filter-chip-active
filter-chip-active
badge-promo
badge-promo
badge-sale-text
badge-sale-text
product-card
product-card
product-card-image
product-card-image
swatch-dot
swatch-dot
swatch-dot-active
swatch-dot-active
campaign-tile
campaign-tile
category-icon-card
category-icon-card
member-benefit-card
member-benefit-card
faq-row
faq-row
pdp-disclosure-row
pdp-disclosure-row
utility-bar
utility-bar
primary-nav
primary-nav
filter-sidebar
filter-sidebar
footer
footer

Border Radius

none (0px)
sm (18px)
md (24px)
lg (30px)
full (9999px)

Design Philosophy

Overview

Nike's commerce system is built on a single, almost violently simple idea: photography speaks, the chrome doesn't. Every page reads as an athletic editorial — towering uppercase Futura display lockups (`{typography.display-campaign}`) burned into full-bleed campaign imagery, with everything else (nav, filters, buttons, cards, footer) reduced to neutral typography and pill geometry on `{colors.canvas}` and `{colors.soft-cloud}`. There is no decorative gradient, no soft shadow nostalgia, no accent color used for "tone" — the system saves all chromatic energy for product photography and the small handful of moments that actually need to signal (sale price `{colors.sale}`, success `{colors.success}`, swatch dots).

The result is a layout that feels physical — campaign hero, product grid, sport tile, footer — stacked like a printed catalog rather than animated like a typical SaaS landing page. Density is high but never crowded, because the system relies on three relentless devices: square or near-square 1:1 product imagery on `{colors.soft-cloud}`, pill-shaped black CTAs (`{rounded.full}`) anchoring every actionable surface, and a tight 8px-base spacing scale that keeps cards and filters mathematically aligned across PLP, PDP, and editorial pages.

Across `/men`, the trail-running listing, the Zegama PDP, `/membership`, and Jordan Golf, the same chrome appears in identical proportions — only the photography and copy change. That is the system's signature: maximum editorial expression in the imagery, maximum mechanical restraint everywhere else.

**Key Characteristics:**

Colors

> **Source pages:** `/men` (primary), `/w/mens-acg-trail-running-shoes-…`, `/t/acg-zegama-…`, `/membership`, `/w/jordan-golf-…`. The chrome palette is identical across all five — only photography varies.

Brand & Accent

Surface

Text

Semantic

Category Accents (sport / collection chips)

These appear sparingly — almost exclusively as small chip backgrounds, swatch dots, or category illustrations in editorial tiles. They are never used as text or primary CTA color.

Typography

Font Family

When substituting on systems without proprietary Nike fonts: pair **Inter** (Display 700 for body chrome, Display 500 for buttons) with **Bebas Neue** or **Anton** at 96px/0.9 line-height for the campaign headline tier. Tighten letter-spacing slightly (-0.5%) on the substitute to approximate Futura ND's optical weight.

Hierarchy

| Token | Size | Weight | Line Height | Letter Spacing | Use |

|---|---|---|---|---|---|

| `{typography.display-campaign}` | 96px | 500 | 0.9 | 0 | Editorial campaign headline burned into hero photography (uppercase) |

| `{typography.heading-xl}` | 32px | 500 | 1.2 | 0 | Section headers — "FEATURED FOOTWEAR", "LATEST IN CLOTHING", PDP product title block |

| `{typography.heading-lg}` | 24px | 500 | 1.2 | 0 | Subsection / member-benefit card title, large CTA label, PDP price |

| `{typography.heading-md}` | 16px | 500 | 1.75 | 0 | Card title, FAQ row label, filter group header |

| `{typography.body-md}` | 16px | 400 | 1.5 | 0 | Body copy, search-pill placeholder, product description |

| `{typography.body-strong}` | 16px | 500 | 1.5 | 0 | Product card name, filter row label, primary nav link |

| `{typography.button-lg}` | 24px | 500 | 1.2 | 0 | Pressed-letter campaign CTA inside hero blocks |

| `{typography.button-md}` | 16px | 500 | 1.5 | 0 | Standard pill CTAs across the system |

| `{typography.button-sm}` | 14px | 500 | 1.5 | 0 | Compact pill CTA, badge label, geo-selector button |

| `{typography.link-md}` | 16px | 500 | 1.75 | 0 | Underlined inline link, "View Product Details" |

| `{typography.caption-md}` | 14px | 500 | 1.5 | 0 | Product subtitle ("Men's Trail Running Shoes"), filter count, footer link |

| `{typography.caption-sm}` | 12px | 500 | 1.5 | 0 | Filter chip label, badge text, color count |

| `{typography.utility-xs}` | 9px | 500 | 1.75 | 0 | Legal copyright / fine-print row at the very bottom |

Principles

The system runs on extreme typographic contrast: a single 96px uppercase display tier reserved for editorial campaign moments, and a quiet 12–16px Helvetica Now Text/Medium tier carrying everything else. There is almost no middle ground — the jump from `{typography.heading-xl}` (32px) directly to `{typography.body-strong}` (16px) is intentional and creates the "billboard above, catalog below" effect across every page. Letter-spacing is left at 0 (Futura ND and Helvetica Now are both cut for tight optical fit at scale).

Note on Font Substitutes

The closest open-source path to Nike's display tier is **Bebas Neue** (free, geometric condensed) at 96px / 0.9 / uppercase / 500. For UI text, **Inter** is the safest substitute — match weights 400/500 and the system reads almost identically at button and caption sizes.

Layout

Spacing System

Grid & Container

Whitespace Philosophy

Whitespace is a tool for separation, not for breath. Sections butt directly against each other vertically with `{spacing.section}` rhythm, and product photos tile edge-to-edge inside their grid — there is no padding wrapped around the product image itself. The "air" comes from the `{colors.soft-cloud}` background of the photograph, not from layout margin. Headlines do not have decorative whitespace above them; they sit immediately under the section divider line.

Elevation & Depth

| Level | Treatment | Use |

|---|---|---|

| 0 — Flat | No shadow, no border | Default for cards, buttons, sections — the dominant treatment |

| 1 — Hairline divider | 1px solid `{colors.hairline}` | Filter row separators, footer column borders, PDP disclosure-row separators |

| 2 — Inset bottom-line | `box-shadow: inset 0 -1px 0 {colors.hairline-soft}` | Sticky utility/sub-nav bar bottom edge, tab strip underline |

The system has no drop-shadow elevation in its retail chrome at all. Cards do not lift on the page. The only depth cue is the 1px inset hairline on sticky strips and the contrast between full-bleed photography and `{colors.soft-cloud}` product backdrops.

Decorative Depth

Depth in Nike's system comes entirely from photography, not from CSS effects:

Shapes

Border Radius Scale

| Token | Value | Use |

|---|---|---|

| `{rounded.none}` | 0px | Cards, campaign tiles, product imagery, navigation, footer — every container in the system |

| `{rounded.sm}` | 18px | Avatar / icon container in member-benefit lockups |

| `{rounded.md}` | 24px | Search pill, search submit, filter input |

| `{rounded.lg}` | 30px | Every CTA pill — primary, secondary, on-image, filter chip, geo-selector, "Notify Me" |

| `{rounded.full}` | 9999px | Color swatch dots and circular icon buttons (back, share, favorite, carousel paddle) |

Photography Geometry

Components

> **No hover states documented** per system policy. Each spec covers Default and Active/Pressed only; variants live as separate `components:` entries in the front matter.

Buttons

**`button-primary`** — the universal Nike CTA

**`button-secondary`** — soft alternative on light surfaces

**`button-outline-on-image`** — overlay CTA on photography

**`button-icon-circular`** — chrome icon controls

**`filter-chip`** + **`filter-chip-active`**

Inputs & Forms

**`search-pill`** + **`search-pill-focused`**

Cards & Containers

**`product-card`**

**`campaign-tile`** — the brand's signature editorial unit

**`category-icon-card`**

**`member-benefit-card`**

**`swatch-dot`** + **`swatch-dot-active`**

**`badge-promo`**

**`badge-sale-text`**

Navigation

**`utility-bar`** — top utility strip

**`primary-nav`** — main navigation

**Sub-nav strip** (PLP) — appears under primary nav with breadcrumb + sort + hide-filters controls.

**Top Nav (Mobile)**

Signature Components

**`pdp-disclosure-row`** — PDP information accordion rows

**`faq-row`** — `/membership` FAQ accordion

**`filter-sidebar`** — PLP left rail

**`footer`**

Do's and Don'ts

Do

Don't

Responsive Behavior

Breakpoints

| Name | Width | Key Changes |

|---|---|---|

| ultrawide | 1920px+ | Content max-width holds at ~1440px; outer gutters grow to ~80px on each side |

| desktop-large | 1440px | Default desktop layout — 3-up product grid, 4-up clothing strip, full primary nav |

| desktop | 1200px | Same as large with slightly narrower outer gutters |

| desktop-small | 1024px | Filter sidebar starts compressing; sport rail shows ~3 visible tiles |

| tablet | 1023–961px | 3-up PLP collapses to 2-up; "Hide Filters" becomes a default toggle |

| tablet-narrow | 960–640px | Primary nav center cluster collapses to a hamburger drawer; search pill becomes icon-only |

| mobile-landscape | 639–600px | 2-up PLP collapses to 1-up; product cards become full-width with image and metadata stacking |

| mobile | 599–320px | Single-column everything; campaign tiles render at full screen width with shorter Futura sizes (~64px) |

Touch Targets

All interactive elements meet WCAG AAA (44×44px minimum). Pills (`{component.button-primary}`, `{component.button-secondary}`) sit at 48px height with 32px horizontal padding. Icon-circular buttons (`{component.button-icon-circular}`) sit at 40px — Nike's PDP carousel paddle and wishlist heart sit just under AAA but above AA at 40×40, with hit-target padding extending the tappable area to 48px+. Filter-chip pills are 40px height with 16px padding.

Collapsing Strategy

Image Behavior

Iteration Guide

1. Focus on ONE component at a time. Pull its YAML entry from the front matter and verify every property resolves.

2. Reference component names and tokens directly (`{colors.ink}`, `{component.button-primary-active}`, `{rounded.lg}`) — do not paraphrase color names or radii in prose.

3. Run `npx @google/design.md lint DESIGN.md` after edits — `broken-ref`, `contrast-ratio`, and `orphaned-tokens` warnings flag issues automatically.

4. Add new variants as separate component entries (`-active`, `-disabled`, `-focused`) — do not bury them inside prose. Nike's pressed state (`scale(0.5) opacity 0.5`) is intentional and must be its own entry, not a hover stand-in.

5. Default body to `{typography.body-md}`; reach for `{typography.body-strong}` for product names and primary nav links; reserve `{typography.display-campaign}` strictly for hero campaign lockups.

6. Keep `{colors.ink}` scarce per viewport — if more than one solid-black pill or block appears in the same fold, neutralize one to `{component.button-secondary}` or `{component.button-outline-on-image}`.

7. When introducing a new component, ask whether it can be expressed with the existing pill + flat-card + photography-on-`{colors.soft-cloud}` vocabulary before adding new tokens. The system's strength is that it almost never needs new ones.

Known Gaps