---
version: alpha
name: Nike-design-analysis
description: |
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 surface gray, and a deliberately small set of semantic accents (sale red, success green, restrained category tints) — every chromatic moment is reserved for editorial photography or pricing signal, never decorative chrome.
colors:
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:
display-campaign:
fontFamily: Nike Futura ND
fontSize: 96px
fontWeight: 500
lineHeight: 0.9
letterSpacing: 0
textTransform: uppercase
heading-xl:
fontFamily: Helvetica Now Display Medium
fontSize: 32px
fontWeight: 500
lineHeight: 1.2
letterSpacing: 0
heading-lg:
fontFamily: Helvetica Now Display Medium
fontSize: 24px
fontWeight: 500
lineHeight: 1.2
letterSpacing: 0
heading-md:
fontFamily: Helvetica Now Display Medium
fontSize: 16px
fontWeight: 500
lineHeight: 1.75
letterSpacing: 0
body-md:
fontFamily: Helvetica Now Text
fontSize: 16px
fontWeight: 400
lineHeight: 1.5
letterSpacing: 0
body-strong:
fontFamily: Helvetica Now Text Medium
fontSize: 16px
fontWeight: 500
lineHeight: 1.5
letterSpacing: 0
button-lg:
fontFamily: Helvetica Now Display Medium
fontSize: 24px
fontWeight: 500
lineHeight: 1.2
letterSpacing: 0
button-md:
fontFamily: Helvetica Now Text Medium
fontSize: 16px
fontWeight: 500
lineHeight: 1.5
letterSpacing: 0
button-sm:
fontFamily: Helvetica Now Text Medium
fontSize: 14px
fontWeight: 500
lineHeight: 1.5
letterSpacing: 0
link-md:
fontFamily: Helvetica Now Text
fontSize: 16px
fontWeight: 500
lineHeight: 1.75
letterSpacing: 0
textDecoration: underline
caption-md:
fontFamily: Helvetica Now Text Medium
fontSize: 14px
fontWeight: 500
lineHeight: 1.5
letterSpacing: 0
caption-sm:
fontFamily: Helvetica Now Text Medium
fontSize: 12px
fontWeight: 500
lineHeight: 1.5
letterSpacing: 0
utility-xs:
fontFamily: Helvetica Neue
fontSize: 9px
fontWeight: 500
lineHeight: 1.75
letterSpacing: 0
rounded:
none: 0px
sm: 18px
md: 24px
lg: 30px
full: 9999px
spacing:
xxs: 2px
xs: 4px
sm: 8px
md: 12px
lg: 18px
xl: 24px
xxl: 30px
section: 48px
components:
button-primary:
backgroundColor: "{colors.ink}"
textColor: "{colors.on-primary}"
typography: "{typography.button-md}"
rounded: "{rounded.full}"
padding: 16px 32px
height: 48px
button-primary-active:
backgroundColor: "{colors.ink}"
textColor: "{colors.on-primary}"
typography: "{typography.button-md}"
rounded: "{rounded.full}"
button-secondary:
backgroundColor: "{colors.soft-cloud}"
textColor: "{colors.ink}"
typography: "{typography.button-md}"
rounded: "{rounded.full}"
padding: 16px 32px
height: 48px
button-outline-on-image:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
typography: "{typography.button-md}"
rounded: "{rounded.full}"
padding: 12px 24px
button-icon-circular:
backgroundColor: "{colors.soft-cloud}"
textColor: "{colors.ink}"
rounded: "{rounded.full}"
size: 40px
search-pill:
backgroundColor: "{colors.soft-cloud}"
textColor: "{colors.ink}"
typography: "{typography.body-md}"
rounded: "{rounded.md}"
padding: 8px 16px
height: 40px
search-pill-focused:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
rounded: "{rounded.md}"
filter-chip:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
typography: "{typography.button-md}"
rounded: "{rounded.full}"
padding: 8px 16px
filter-chip-active:
backgroundColor: "{colors.ink}"
textColor: "{colors.on-primary}"
typography: "{typography.button-md}"
rounded: "{rounded.full}"
badge-promo:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
typography: "{typography.caption-sm}"
rounded: "{rounded.full}"
padding: 4px 12px
badge-sale-text:
textColor: "{colors.sale}"
typography: "{typography.caption-md}"
product-card:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
typography: "{typography.body-strong}"
rounded: "{rounded.none}"
padding: 0px
product-card-image:
backgroundColor: "{colors.soft-cloud}"
rounded: "{rounded.none}"
swatch-dot:
backgroundColor: "{colors.ink}"
rounded: "{rounded.full}"
size: 12px
swatch-dot-active:
backgroundColor: "{colors.ink}"
rounded: "{rounded.full}"
size: 12px
campaign-tile:
backgroundColor: "{colors.ink}"
textColor: "{colors.on-primary}"
typography: "{typography.display-campaign}"
rounded: "{rounded.none}"
category-icon-card:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
typography: "{typography.caption-md}"
rounded: "{rounded.none}"
member-benefit-card:
backgroundColor: "{colors.ink}"
textColor: "{colors.on-primary}"
typography: "{typography.heading-lg}"
rounded: "{rounded.none}"
faq-row:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
typography: "{typography.heading-md}"
rounded: "{rounded.none}"
padding: 24px 0px
pdp-disclosure-row:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
typography: "{typography.body-strong}"
rounded: "{rounded.none}"
padding: 24px 0px
utility-bar:
backgroundColor: "{colors.soft-cloud}"
textColor: "{colors.ink}"
typography: "{typography.caption-sm}"
rounded: "{rounded.none}"
height: 36px
primary-nav:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
typography: "{typography.body-strong}"
rounded: "{rounded.none}"
height: 56px
filter-sidebar:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
typography: "{typography.body-strong}"
rounded: "{rounded.none}"
footer:
backgroundColor: "{colors.canvas}"
textColor: "{colors.mute}"
typography: "{typography.caption-md}"
rounded: "{rounded.none}"
---
Overview
Section 01Nike'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
Section 02> **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
Section 03Surface
Section 04Text
Section 05Semantic
Section 06Category Accents (sport / collection chips)
Section 07These 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
Section 08Font Family
Section 09When 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
Section 010| 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
Section 011The 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
Section 012The 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
Section 013Spacing System
Section 014Grid & Container
Section 015Whitespace Philosophy
Section 016Whitespace 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
Section 017| 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
Section 018Depth in Nike's system comes entirely from photography, not from CSS effects:
Shapes
Section 019Border Radius Scale
Section 020| 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
Section 021Components
Section 022> **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
Section 023**`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
Section 024**`search-pill`** + **`search-pill-focused`**
Cards & Containers
Section 025**`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
Section 026**`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
Section 027**`pdp-disclosure-row`** — PDP information accordion rows
**`faq-row`** — `/membership` FAQ accordion
**`filter-sidebar`** — PLP left rail
**`footer`**
Do's and Don'ts
Section 028Do
Section 029Don't
Section 030Responsive Behavior
Section 031Breakpoints
Section 032| 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
Section 033All 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
Section 034Image Behavior
Section 035Iteration Guide
Section 0361. 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.