---
name: shopify-design-reference
provider: DesignSkill (https://designskill.dev)
reference: shopify.com
source_url: https://www.shopify.com/
tool: designskill-extract/3.2.0
extracted_at: 2026-07-27T07:56:08.049Z
mode: full-render
classification: reference_only
---

# Shopify — Design Reference (measured)

Measured design tokens extracted from `https://www.shopify.com/` by designskill-extract/3.2.0.
Every value below was observed in the live page (×N = observation count). Values not listed were **not observed** — do not invent them.
This document is `reference_only`: an analysis of a third-party site, not a license to its brand assets.

## Overview

- Extraction mode: **full-render** (viewports 390/768/1440px × light/dark), 1 page(s), 737 observation records.
- Primary action color observed as `#061a1c` (basis: cross-validated, confidence 0.97).
- Dominant font family: **NeueHaasGrotesk** (×681; secondary Inter-Variable ×601).
- Type scale observed at 8 sizes from 12px to 60px.
- Corner radius values in use: 12px, 4px, 5px, 20px….
- Not observed in this extraction: forms, badges, elevation.

## Colors

### Role Tokens

Semantic roles inferred from observed usage. `basis` tells how the role was established (declared CSS var > cross-validated > inferred).

| Token | Value | Basis | Confidence | Observed |
|---|---|---|---|---|
| `{color.primary}` | `#061a1c` | cross-validated | 0.97 | ×240 |
| `{color.background}` | `#000000` | cross-validated | 0.94 | ×591 |
| `{color.ink}` | `#ffffff` | cross-validated | 0.95 | ×779 |
| `{color.muted}` | `#71717a` | inferred | 0.7 | ×31 |
| `{color.surface}` | `#000a1e` | inferred | 0.7 | ×65 |
| `{color.accent}` | `#36f4a4` | inferred | 0.65 | ×86 |

### Observed Palette

Full measured palette ordered by usage share. `Used in` lists the CSS properties the color appeared on.

| Hex | Share | Used in | Observed |
|---|---|---|---|
| `#ffffff` | 31.2% | background-color, color, border-color, --tw-ring-color | ×779 (cross-validated, 0.95) |
| `#000000` | 23.7% | background-color, border-color, color, --tw-shadow, --color-theme-bg-header | ×591 (cross-validated, 0.94) |
| `#a1a1aa` | 8.8% | color, background-color, border-color, --color-link-dark-active | ×219 (cross-validated, 0.93) |
| `#061a1c` | 9.6% | background-color, color, --tw-shadow, border-color, --tw-ring-color | ×240 (cross-validated, 0.93) |
| `#36f4a4` | 3.4% | color, background-color, border-color, --tw-shadow | ×86 (cross-validated, 0.91) |
| `#9797a2` | 2.8% | color, --color-link-dark | ×71 (cross-validated, 0.91) |
| `#9dabad` | 5.0% | color | ×126 (observed, 0.77) |
| `#000a1e` | 2.6% | background-color, --tw-gradient-from | ×65 (cross-validated, 0.91) |
| `#e4e4e7` | 2.2% | border-color, -border, color | ×56 (cross-validated, 0.91) |
| `#f4f4f5` | 1.7% | background-color, border-color, --tw-ring-color | ×43 (cross-validated, 0.9) |
| `#ffffff` | 1.3% | border-color, background-color | ×32 (observed, 0.75) |
| `#71717a` | 1.2% | color, background-color, border-color, --tw-ring-color | ×31 (cross-validated, 0.9) |
| `#1e2c31` | 1.3% | border-color, background-color | ×32 (cross-validated, 0.9) |
| `#bdbdca` | 1.2% | color | ×30 (observed, 0.75) |
| `#11352d` | 1.4% | background-color, border-color, --tw-shadow | ×36 (cross-validated, 0.9) |
| `#d4d4d8` | 0.5% | background-color, border-color, --tw-ring-color | ×12 (inferred, 0.59) |

## Typography

### Font Families

| Family | Observed |
|---|---|
| `NeueHaasGrotesk` | ×681 |
| `Inter-Variable` | ×601 |
| `ui-monospace` | ×12 |
| `ShopifySans` | ×6 |
| `Noto Sans JP` | ×6 |
| `IBMPlexMono` | ×4 |

Use **NeueHaasGrotesk** as the default family — it accounts for the overwhelming majority of observed text nodes.

### Type Scale

| Token | Size | Observed |
|---|---|---|
| `{type.display}` | 60px | ×24 |
| `{type.h1}` | 40px | ×48 |
| `{type.h2}` | 24px | ×38 |
| `{type.h3}` | 20px | ×70 |
| `{type.body-lg}` | 18px | ×81 |
| `{type.body}` | 16px | ×418 |
| `{type.body-sm}` | 14px | ×379 |
| `{type.caption}` | 12px | ×139 |

The most frequently observed size is **16px** (×418) — treat it as the default body size.

## Spacing

| Value | Observed |
|---|---|
| `8px` | ×410 |
| `10px` | ×336 |
| `16px` | ×207 |
| `24px` | ×204 |
| `40px` | ×171 |
| `4px` | ×164 |
| `12px` | ×139 |
| `32px` | ×124 |
| `64px` | ×82 |
| `80px` | ×48 |
| `2px` | ×44 |
| `14px` | ×30 |

## Shape (Border Radius)

| Value | Observed |
|---|---|
| `12px` | ×151 |
| `4px` | ×83 |
| `5px` | ×54 |
| `20px` | ×36 |
| `16px` | ×32 |
| `8px` | ×17 |
| `32px` | ×13 |
| `6px` | ×12 |

## Motion

| Duration | Observed |
|---|---|
| `0.15s` | ×103 |
| `0.3s` | ×95 |
| `0.5s` | ×12 |
| `0.7s` | ×12 |
| `0.45s` | ×10 |

## Components

Measured computed styles of representative components (desktop viewport).

| Component | Measured spec | Samples |
|---|---|---|
| button.primary | bg `#ffffff` · text `#000000` · radius `999px` · padding `8px 20px` · font `16px/550` | ×4 |
| button.outline | text `#ffffff` · border `2px solid rgb(255, 255, 255)` · radius `999px` · padding `8px 13px` · font `16px` | ×3 |
| card | radius `20px` · border `1px solid rgba(255, 255, 255, 0.1)` · padding `13px` | ×2 |
| nav | height `72px` · position `sticky` · link `#ffffff` | — |

### Hero Gradient (observed)

```css
background-image: linear-gradient(in oklab, rgb(44, 0, 127) 42.49%, rgb(0, 10, 29) 100%);
```

## Accessibility (WCAG Contrast)

| FG | BG | Ratio | AA | Source |
|---|---|---|---|---|
| `#ffffff` | `#02090a` | 20.08 | pass | observed ×162 |
| `#a1a1aa` | `#000000` | 8.19 | pass | observed ×78 |
| `#000000` | `#ffffff` | 21 | pass | observed ×48 |
| `#ffffff` | `#041e18` | 17.44 | pass | observed ×39 |
| `#9dabad` | `#061a1c` | 7.56 | pass | observed ×33 |
| `#99b3ad` | `#041e18` | 7.81 | pass | observed ×30 |
| `#36f4a4` | `#02090a` | 13.99 | pass | observed ×27 |
| `#9797a2` | `#02090a` | 6.94 | pass | observed ×24 |
| `#ffffff` | `#000000` | 21 | pass | observed ×20 |
| `#ffffff` | `#ffffff` | 1 | fail | observed ×18 |
| `#000000` | `#f4f4f5` | 19.11 | pass | observed ×18 |
| `#a1a1aa` | `#02090a` | 7.83 | pass | observed ×17 |
| `#ffffff` | `#000000` | 21 | pass | ink_on_background |
| `#ffffff` | `#061a1c` | 17.91 | pass | white_on_primary |
| `#71717a` | `#000000` | 4.35 | fail | muted_on_background |

2 measured pair(s) fail AA — if you reuse those pairs, adjust lightness until the ratio reaches 4.5:1.

## Usage Rules

### Do
- Use `{color.primary}` (`#061a1c`) for primary actions only — that is where it was observed.
- Default text pairing: `{color.ink}` (`#ffffff`) on `{color.background}` (`#000000`).
- Set all text in `NeueHaasGrotesk` (fallbacks only for glyph coverage).
- Pick corner radii from the measured set (12px, 4px, 5px, 20px) — no intermediate values were observed.
- Cite this file's token names (`{color.*}`, `{type.*}`) when generating UI so output stays traceable to observations.

### Don't
- Don't invent colors, sizes, shadows, or spacing not listed above — absence means *not observed*, and this document records observations only.
- Don't assume the missing blocks (forms, badges, elevation) don't exist on the site — they were simply not captured in this run.
- Don't copy brand assets (logo, wordmark, imagery, copy) — `reference_only` covers measured style values, not brand identity.

## Provenance

- Source: https://www.shopify.com/ (1 page(s))
- Tool: designskill-extract/3.2.0 · extracted 2026-07-27T07:56:08.049Z
- Mode: full-render — 풀렌더 모드 — 3뷰포트 × 라이트/다크 computed style + 상태 관측.
- Blocks observed: 00, 01, 02, 03, 04, 05, 07, 09, 10, 12 · missing: forms, badges, elevation
- Degraded stages (extraction failure ≠ design change — exclude from diffs): state-observation
- Warning: primary 불일치: static=#02f0ff vs render=#061a1c — render 채택

---

<sub>Generated & served by [DesignSkill](https://designskill.dev)</sub>
