Shopify Design System

E-commerce platform · Polar-cold dark theme with neon emerald accents...
Back to Home
01

Visual Theme & Atmosphere

Shopifi runs two parallel design tracks that share typographic DNA and a single button vocabulary, but diverge in canvas polarity. The marketing track lives on {colors.canvas-night} (#000000) — full-bleed cinematic photography of merchants, giant {typography.display-xxl} headlines in Neue Haas Grotesk Display set at weight 330 (a thin, almost editorial cut), and a single CTA: a white-stroked black pill with the form button-outline-on-dark. The pages read like the spread of a high-end print magazine: lots of black, lots of negative space, photography that doesn't compete with text, and one and only one action per band.

The transactional track flips to {colors.canvas-light} and {colors.canvas-cream} (an off-white that's barely warmer than pure white). Pricing tiers, comparison tables, and signup flows sit on this lighter canvas, with the same pill button system but in inverse polarity (a solid black pill with white text, or a {colors.aloe-10} mint pill for the featured / "Start free trial" tier). The accents — {colors.aloe-10} mint and {colors.pistachio-10} pistachio — show up only on the light track, never on the cinematic dark hero pages.

...

Key Characteristics:

  • Two-canvas system: {colors.canvas-night} for cinematic marketing, {colors.canvas-light} / {colors.canvas-cream} for transactional surfaces — never blended.
  • ...

Live Visual Theme Representation:

Visual Theme Example

02

Color Palette & Roles

> Source pages: home (/), /start, /website/builder, /pricing.

Brand & Accent

  • Aloe ({colors.aloe-10}#c1fbd4): The featured-tier and "growth" accent. Used as a pill button background on light surfaces and as a feature-card fill in the pricing comparison band.
  • Pistachio ({colors.pistachio-10}#d4f9e0): Softer than aloe; used as a wide section band fill on the light track to signal a different category of feature without leaving the green family.
  • ...

Surface

  • Canvas Night ({colors.canvas-night}#000000): Pure black hero, cinematic feature pages, footer.
  • Canvas Night Elevated ({colors.canvas-night-elevated}#0a0a0a): Cards on cinematic surfaces, video frames.
  • ...

Shade Ladder

  • Shade-30 ({colors.shade-30}#d4d4d8): Tag / chip background on light, footer hairline on dark.
  • Shade-40 ({colors.shade-40}#a1a1aa): Tertiary text on light, secondary text on dark.
  • ...

Text

  • Ink ({colors.ink}#000000): All text on light canvas.
  • On Primary ({colors.on-primary}#ffffff): All text on dark canvas + filled-pill labels.
primary
#000000
ink
#000000
on-primary
#ffffff
on-dark
#ffffff
canvas-night
#000000
canvas-night-elevated
#0a0a0a
canvas-light
#ffffff
canvas-cream
#fbfbf5
surface-elevated-dark
#1e2c31
shade-30
#d4d4d8
shade-40
#a1a1aa
shade-50
#71717a
shade-60
#52525b
shade-70
#3f3f46
hairline-light
#e4e4e7
hairline-dark
#1e2c31
aloe-10
#c1fbd4
pistachio-10
#d4f9e0
link-cool-1
#9dabad
link-cool-2
#9797a2
link-cool-3
#bdbdca
link-mint
#99b3ad
03

Typography Rules

Font Family

The display tier is Neue Haas Grotesk Display at thin weights (330–500). When unavailable, fall back to Helvetica at light weight, then Arial. The thin-weight cut is the brand — no substitution should default to weight 400+.

The UI tier is Inter Variable at 420–550 — a variable font with sub-weight precision that lets the system span body (420), strong (550), and caption (500) without jumping to heavier tiers. Inter is open-source via Google Fonts.

...

Hierarchy

TokenSizeWeightLine HeightLetter SpacingUse
..................

Principles

  • Display thinness is the brand. Always render display sizes at weight 330 — never 400+. The thinness is a deliberate editorial choice that makes the giant size feel quiet.
  • Display in NHGD, body in Inter. Don't push body roles up to NHGD; don't push display roles down to Inter.
  • ...

Note on Font Substitutes

Dynamic Preview:
display-xxl size: 96px | weight: 330 | height: 1.0 | spacing: 2.4px
The quick brown fox jumps over the lazy dog
display-xl size: 70px | weight: 330 | height: 1.0 | spacing: 0
The quick brown fox jumps over the lazy dog
display-lg size: 55px | weight: 330 | height: 1.16 | spacing: 0
The quick brown fox jumps over the lazy dog
display-md size: 48px | weight: 330 | height: 1.14 | spacing: 0
The quick brown fox jumps over the lazy dog
heading-xl size: 28px | weight: 500 | height: 1.28 | spacing: 0.42px
The quick brown fox jumps over the lazy dog
heading-lg size: 24px | weight: 400 | height: 1.14 | spacing: 0.36px
The quick brown fox jumps over the lazy dog
heading-md size: 20px | weight: 500 | height: 1.4 | spacing: 0.3px
The quick brown fox jumps over the lazy dog
heading-sm size: 18px | weight: 500 | height: 1.25 | spacing: 0.72px
The quick brown fox jumps over the lazy dog
body-lg size: 18px | weight: 550 | height: 1.56 | spacing: 0
The quick brown fox jumps over the lazy dog
body-md size: 16px | weight: 420 | height: 1.5 | spacing: 0
The quick brown fox jumps over the lazy dog
body-strong size: 16px | weight: 550 | height: 1.5 | spacing: 0
The quick brown fox jumps over the lazy dog
caption size: 14px | weight: 500 | height: 1.49 | spacing: 0.28px
The quick brown fox jumps over the lazy dog
micro size: 13px | weight: 500 | height: 1.5 | spacing: -0.13px
The quick brown fox jumps over the lazy dog
eyebrow-cap size: 12px | weight: 400 | height: 1.2 | spacing: 0.72px
The quick brown fox jumps over the lazy dog
code size: 16px | weight: 400 | height: 1.5 | spacing: 0
The quick brown fox jumps over the lazy dog
04

Layout Principles

Spacing System

  • Base unit: 8px (with denser sub-units 1, 2, 3, 4 for fine work).
  • Tokens: {spacing.xxs} 2px · {spacing.xs} 4px · {spacing.sm} 8px · {spacing.md} 12px · {spacing.lg} 16px · {spacing.xl} 24px · {spacing.xxl} 32px · {spacing.huge} 64px.
  • ...

Grid & Container

  • Cinematic hero pages use a wide max-width container (~1440–1600px) with edge-bleeding photography that escapes the container.
  • Pricing collapses through 4-up → 2-up → 1-up tiers based on viewport.
  • ...

Whitespace Philosophy

The cinematic track treats whitespace as the brand's most valuable asset — sections often have 128–192px of vertical air between content blocks, with photography filling the rest. The transactional track tightens to ~48–64px between bands because users are scanning, comparing, and acting. The contrast between the two whitespace philosophies is part of the brand voice.

Grid Layout Wireframe Mockup:

Layout Grid Example

Layout Wireframe blueprint
1
2
3
4
5
6
7
8
9
10
11
12
Gutter spacing: 16px / 24px
Side Margins: 24px (Mobile) / 48px (Desktop)
Max Container Width: 1200px
05

Depth & Elevation

LevelTreatmentUse
.........

Decorative Depth

On the cinematic track, depth comes from photography — full-bleed merchant imagery layered behind cards, with subtle inset top-edge highlights creating the illusion of light hitting a glass surface. On the light track, the layered tiny-shadow stack (Level 3) produces a soft, paper-like halo around pricing cards — depth without harshness.

Elevation Level Showcase:

Elevation Level Example

Flat Surface (Level 0)

Used for background layers, sidebar headers, or baseline borders.

Low Elevation (Level 1 / Card)

Used for floating product elements, cards, and hover states.

High Elevation (Level 2 / Popover & Dropdown)

Used for modals, select menus, code editor tooltips, and overlay headers.

Border Radius & Shape Scale:

radius-sm 4px
radius-md 6px
radius-lg 8px
radius-pill Pill / Tag
06

Component Stylings

Border Radius Scale

TokenValueUse
.........

Photography Geometry

Photography is full-bleed with no border. On cinematic pages it escapes the container entirely; on transactional pages it sits inside {rounded.lg} containers with no shadow. Avatar treatments in customer-logo strips are simple greyscale wordmarks at uniform height (~24–32px), aligned in a single horizontal strip.

Buttons

button-primary-pill — the dominant CTA across the system.

  • Background {colors.primary} (black), text {colors.on-primary}, type {typography.body-md}, padding {spacing.md} {spacing.xl} (12px 24px), rounded {rounded.pill} 9999px.
  • ...
button-outline-on-dark — the cinematic hero CTA.
  • Background {colors.canvas-night} (transparent on the canvas), 2px solid {colors.on-primary} border, text {colors.on-primary}, same pill geometry.
button-outline-on-light — the light-track equivalent.
  • Background {colors.canvas-light}, 1px solid {colors.ink} border, text {colors.ink}, same pill geometry.
button-aloe-pill — the featured CTA on pricing pages.
  • Background {colors.aloe-10}, text {colors.ink}, same pill geometry. Used for the "Start free trial" tier.

Cards & Containers

card-pricing — the standard tier card on the pricing page.

  • Background {colors.canvas-light}, padding {spacing.xxl}, rounded {rounded.lg} 12px, 1px {colors.hairline-light} border. Title in {typography.heading-xl}, price in {typography.display-md}, body in {typography.body-md}, CTA pinned to the bottom as button-primary-pill.
card-pricing-featured — the highlighted pricing tier.
  • Background {colors.aloe-10}, otherwise identical to card-pricing. The mint fill (rather than a brand-color border) is the brand's distinctive featured-tier choice.
card-feature-cinematic — feature card on the cinematic track.
  • Background {colors.canvas-night-elevated}, text {colors.on-primary}, rounded {rounded.lg}, often with a top-edge inset highlight (Level 1 elevation). Holds full-bleed photography or a single large statement.
card-pistachio-band — wide horizontal band card used to highlight a category of features on the light track.
  • Background {colors.pistachio-10}, text {colors.ink}, rounded {rounded.lg} 12px, padding {spacing.xxl}.
card-photo-frame — full-bleed photography container on cinematic pages.
  • Background {colors.canvas-night}, padding 0, rounded {rounded.xl} 20px (often top-only). The photo IS the content; no inner padding, no overlay text inside the card.

Inputs & Forms

text-input — standard text input on light surfaces.

  • Background {colors.canvas-light}, text {colors.ink}, type {typography.body-md}, padding {spacing.sm}+ {spacing.md} (10px 12px), rounded {rounded.md} 8px, 1px {colors.hairline-light} border.

Navigation

nav-bar-light — top nav on light pages.

  • Background {colors.canvas-light}, text {colors.ink}, padding {spacing.lg} {spacing.xl}. Logo wordmark on the left, nav items center, two pill buttons on the right (button-outline-on-light for "Log in", button-primary-pill for "Start free trial").
nav-bar-dark — top nav on cinematic pages.
  • Background {colors.canvas-night}, text {colors.on-primary}, otherwise identical structure. Two pill buttons on the right (button-outline-on-dark for both, with the rightmost subtly more prominent via type weight).

Pills, Tags, and Chips

pill-tag-mint — small tag on light surfaces, signaling a feature category.

  • Background {colors.aloe-10}, text {colors.ink}, type {typography.eyebrow-cap}, padding {spacing.xs} {spacing.md}, rounded {rounded.pill}.
pill-tag-shade — neutral tag on light surfaces.
  • Background {colors.shade-30}, text {colors.ink}, otherwise same shape as pill-tag-mint.

Signature Components

Cinematic Photography Layer — full-bleed merchant photos on the hero. No overlay scrim, no text-on-image; instead, the type sits in clean negative space above or below the photo. The brand treats photography as an editorial spread, not as decoration.

Stacked Tiny Shadows (Level 3 Elevation) — pricing cards on the light track use 4 stacked tiny drop shadows (each 1–8px Y offset, 10% black) to produce a soft, layered paper halo. This is the brand's distinctive depth on light.

link-on-dark — inline link on cinematic pages.

  • Color {colors.on-primary}, no underline by default (links rely on context); for tertiary footer links, color shifts to one of the cool muted tones ({colors.link-cool-1} etc.) with a persistent underline.
footer-dark — full-page-width footer on the cinematic track.
  • Background {colors.canvas-night}, text {colors.on-primary}, type {typography.caption}, padding {spacing.huge} {spacing.xl}. Contains 4–5 columns of muted-tone link groups, social icons, and a small legal row.
footer-light — equivalent on the transactional track.
  • Background {colors.canvas-light}, text {colors.ink}, otherwise same structure.

Interactive Component Demonstrations:

Component Interactive Example

07

Do's and Don'ts

Do

  • Reserve {colors.aloe-10} and {colors.pistachio-10} for the light track only — they don't appear on cinematic black pages.
  • Always use {rounded.pill} for buttons; never {rounded.md} or {rounded.lg}.
  • Render display tiers at weight 330; bumping to 400 or 500 breaks the brand's thin-display signature.
  • Use full-bleed photography on cinematic pages — let it escape the container.
  • Apply font-feature-settings: "ss03" globally; the stylistic set is the brand's typographic signature.
  • Pair black canvas with white type and white-stroked outline pills; pair light canvas with black type and filled-black pills.

Don't

  • Don't introduce a third canvas color — stick to black or light/cream. Greys, beiges, and blues are not in the system.
  • Don't add drop shadows on cinematic dark cards beyond the subtle inset top-highlight; the cinematic track wants flat blackness.
  • Don't shrink display tiers below {typography.display-md} (48px) on hero surfaces; below that they read as section heads, not display.
  • Don't put aloe / pistachio greens behind type — they're surface fills, not text colors.
  • Don't replace the pill shape with a rounded-rectangle button anywhere.
✅ Recommended / Do
  • Reserve {colors.aloe-10} and {colors.pistachio-10} for the light track only — they don't appear on cinematic black pages.
  • Always use {rounded.pill} for buttons; never {rounded.md} or {rounded.lg}.
  • Render display tiers at weight 330; bumping to 400 or 500 breaks the brand's thin-display signature.
  • Use full-bleed photography on cinematic pages — let it escape the container.
  • Apply font-feature-settings: "ss03" globally; the stylistic set is the brand's typographic signature.
  • Pair black canvas with white type and white-stroked outline pills; pair light canvas with black type and filled-black pills.
❌ Discouraged / Don't
  • Don't introduce a third canvas color — stick to black or light/cream. Greys, beiges, and blues are not in the system.
  • Don't add drop shadows on cinematic dark cards beyond the subtle inset top-highlight; the cinematic track wants flat blackness.
  • Don't shrink display tiers below {typography.display-md} (48px) on hero surfaces; below that they read as section heads, not display.
  • Don't put aloe / pistachio greens behind type — they're surface fills, not text colors.
  • Don't replace the pill shape with a rounded-rectangle button anywhere.
08

Responsive Behavior

Breakpoints

NameWidthKey Changes
.........

Touch Targets

  • Pill buttons hit ≥ 44×44px on mobile via 12px vertical padding × 16px line-height. WCAG AAA compliant.
  • Form fields stay at the 44px minimum height across all breakpoints.

Collapsing Strategy

  • Display sizes scale down through the breakpoint stair: 96 → 70 → 55 → 48 → 36px on mobile.
  • Cinematic photography crops aggressively at smaller widths, prioritizing focal subject over edge-bleed.
  • ...

Image Behavior

Photography uses responsive srcset with art-direction crops at major breakpoints. Mobile crops favor close subjects; wide crops favor environmental / storefront context.

Responsive Adaptation Note:

Responsive Behavior Example

Interactive Viewport Simulator
Width: 800px (Desktop Mode) Grid Container
Primary Column

Adjusts layout width

Secondary Column

Folds on viewport change

Sidebar Column

Stacks to bottom on mobile

09

Agent Prompt Guide

1. Focus on ONE component at a time. 2. Reference component names and tokens directly ({colors.aloe-10}, {button-primary-pill}-pressed, {rounded.pill}).

  • ...

Copyable Agent Integration Prompt:

Prompt Guide Copy Box

10

Full System Design Tokens

The parsed design tokens extracted from the core stylesheet of this design system:

Design TokenHex ValueSystem Palette Role
--primary#000000System color representation for primary
--ink#000000System color representation for ink
--on-primary#ffffffSystem color representation for on-primary
--on-dark#ffffffSystem color representation for on-dark
--canvas-night#000000System color representation for canvas-night
--canvas-night-elevated#0a0a0aSystem color representation for canvas-night-elevated
--canvas-light#ffffffSystem color representation for canvas-light
--canvas-cream#fbfbf5System color representation for canvas-cream
--surface-elevated-dark#1e2c31System color representation for surface-elevated-dark
--shade-30#d4d4d8System color representation for shade-30
--shade-40#a1a1aaSystem color representation for shade-40
--shade-50#71717aSystem color representation for shade-50
--shade-60#52525bSystem color representation for shade-60
--shade-70#3f3f46System color representation for shade-70
--hairline-light#e4e4e7System color representation for hairline-light
--hairline-dark#1e2c31System color representation for hairline-dark
--aloe-10#c1fbd4System color representation for aloe-10
--pistachio-10#d4f9e0System color representation for pistachio-10
--link-cool-1#9dabadSystem color representation for link-cool-1
--link-cool-2#9797a2System color representation for link-cool-2
--link-cool-3#bdbdcaSystem color representation for link-cool-3
--link-mint#99b3adSystem color representation for link-mint