Overview
Shopify's branding employs a dark, immersive design language built on deep coal-black and teal-green surfaces, contrasted with high-luminance white text and vivid mint/avocado accents. The system uses a curated typographic stack — NeueHaasGrotesk for the body system, Inter-Variable for UI, and IBMPlexMono for data — reinforcing a precise, technical credibility. Motion, layering, and scroll-state-driven transitions signal a sophisticated, performance-oriented product.
Signature traits: dark-first coal and deep-green palette, ultra-light display type weight (330), pill-shaped CTA buttons, scroll-state-aware sticky header transitions, multi-font typographic hierarchy, radial gradient depth effects.
Colors
| Role | Token | Hex | Usage |
|------|-------|-----|-------|
| Background | --color-background | #02090a | Page backgrounds, section dark bg |
| Surface | --color-surface | #061a1c | Card panels, deep-green overlays |
| Text Primary | --color-text-primary | #ffffff | Headings, body copy on dark |
| Text Secondary | --color-text-secondary | #71717a | Captions, disabled states, placeholders |
| Border | --color-border | #1a292c | Dividers, header borders, card edges |
| Accent | --color-accent | #36f4a4 | Avocado CTAs, highlights, active indicators |
Typography
| Role | Family | Size | Weight | Line Height | Letter Spacing | Usage | |------|--------|------|--------|-------------|----------------|-------| | Display | NeueHaasGrotesk, Helvetica, Arial, sans-serif | 3.5rem | 330 | 3.78rem | -0.01em | Hero headlines | | Heading | NeueHaasGrotesk, Helvetica, Arial, sans-serif | 2.75rem | 330 | 2.97rem | -0.005em | Section titles (t1) | | Body | Inter-Variable, Helvetica, Arial, sans-serif | 1rem | 420 | 1.4rem | -0.006em | Paragraph text | | Caption | Inter-Variable, Helvetica, Arial, sans-serif | 0.875rem | 420 | 1.1375rem | 0 | Labels, metadata, body-sm | | Mono | IBMPlexMono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace | 0.875rem | 400 | 1.25rem | 0 | Code, data, technical labels |
Layout
| Token | Value | Context | |-------|-------|---------| | Spacing XS | 0.25rem | Inline gaps, tight icon spacing | | Spacing SM | 0.5rem | Component internal padding | | Spacing MD | 1rem | Base margin, standard component gaps | | Spacing LG | 1.5rem | Card padding, between-element gaps | | Spacing XL | 2rem | Section internal spacing | | Spacing 2XL | 2.5rem | Between sections, major vertical rhythm | | Spacing 3XL | 4rem | Large section separators | | Spacing 4XL | 5rem | Hero vertical padding | | Spacing 5XL | 8rem | Maximum section breathing room | | Header Height | 4.5rem | Global sticky header height | | Max Width SM | 640px | Mobile breakpoint | | Max Width MD | 900px | Tablet breakpoint | | Max Width LG | 1200px | Desktop breakpoint | | Max Width XL | 1600px | Wide desktop, content container cap | | Margin (mobile) | 1rem | Page-edge margin | | Margin (tablet) | 1.875rem → 3.125rem | Responsive page-edge margin | | Margin (desktop) | 5.625rem | Large screen page-edge margin |
Responsive strategy: Five defined breakpoints — xs (340px), sm (640px), md (900px), lg (1200px), xl (1600px). Layout margin scales from 1rem on mobile to 5.625rem on large desktop. Container collapses to auto-width with margin insets below 1600px, then centres with fixed max-width. Grid uses 12-column system collapsing to 1–4 columns on mobile. Header navigation switches between mobile (checkbox-driven overlay) and desktop (inline) at 1200px.
Elevation & Depth
| Level | CSS Value | Usage |
|-------|-----------|-------|
| sm | 0 4px 8px #18181b0a, 0 0 2px #18181b40 | Cards, tooltips (light mode) |
| md | 0 8px 48px #06060814, 0 4px 8px #18181b0a, 0 0 2px #18181b40 | Dropdowns, popovers (light mode shadow-1) |
| lg | 0 8px 48px #18181b3d, 0 4px 8px #18181b29, 0 0 2px #ffffff85 | Modals, overlays (dark mode shadow-1) |
Shapes
| Token | Value | Applied To | |-------|-------|-----------| | none | 0px | Raw panels, flush section edges | | sm | 0.375rem | Small UI elements, tags | | md | 0.5rem | Input fields, small cards | | lg | 0.75rem | Standard cards, modals | | xl | 1rem | Large cards, bottom sheets | | 2xl | 1rem | Prominent card corners (radius-2xl = 1rem) | | 4xl | 2rem | Hero cards, large feature panels | | full | 9999px (3.40282e38px) | Pill buttons, badges, avatars |
Components
Buttons: Two variants — primary (filled, uses --color-theme-bg-cta) and secondary (transparent with border, uses --color-theme-border-cta). Both use border-radius: var(--radius-theme-full) (pill shape). Font weight 550, size 1rem (sm) or 1.125rem (lg on md+ screens). Padding: 0.5rem vertical / 1.25rem horizontal (sm), 0.75rem / 1.5rem (lg). Light mode primary is black-on-white; dark mode primary is black-on-white inverted (white button, black text).
Header: Sticky, scroll-state-aware using @container bk-header scroll-state(stuck:top). Transitions opacity and delay on scroll attachment. Supports data-color-mode for light/dark theming. Height fixed at 4.5rem. Mobile nav uses hidden checkbox peer pattern for overlay toggle with overflow:hidden on body when open.
Cards: Use perspective(50px) 3D transforms with translateZ for depth carousel effects. Transitions on transform (0.7s ease-in-out) and opacity (0.2s). .card-hero resets to identity transform; flanking cards receive lateral and depth offsets.
Rich Text: Structured typographic hierarchy from t1–t8. First and last children strip margins. Strong elements use weight 550. Links receive text-decoration-skip-ink: none and underline, removed on hover/active. Arrow animation pseudo-element using SVG mask, translating on hover.
Flags Carousel: Horizontal scroll with alpha mask gradient fade at edges (mask-image: linear-gradient(90deg, transparent, black, transparent)). Flag items scale 1.25 on hover at md+ with will-change: transform.
Do's and Don'ts
| Do ✓ | Don't ✗ |
|------|---------|
| Use coal black (#02090a) or deep green (#061a1c) as primary backgrounds | Use white or light grey as default page backgrounds in dark contexts |
| Use pill (full-radius) buttons for all primary and secondary CTAs | Use square-cornered or small-radius buttons as primary actions |
| Apply ultra-light weight (330) for display and large heading type | Use heavy or bold weights for hero-scale headlines |
| Use Inter-Variable for UI copy and NeueHaasGrotesk for editorial body | Mix font families arbitrarily outside the defined typographic stack |
| Use spacing tokens (xs/sm/md/lg/xl/2xl) for all layout decisions | Use arbitrary pixel values for spacing outside the defined scale |
| Leverage radial gradients with deep teal origins for section depth | Use flat solid backgrounds where gradient depth is expected |
Agent Prompt Guide
You are working within the Shopify: The All design system. Key constraints:
- —Colors: background #02090a (coal black), surface #061a1c (deep green), text #ffffff, secondary text #71717a, border #1a292c, accent #36f4a4 (avocado)
- —Typography: NeueHaasGrotesk for editorial/display (weights 330–600), Inter-Variable for UI body (weights 400–550), IBMPlexMono for code/data
- —Display type uses ultra-light weight 330 at 3.5rem / -0.01em tracking
- —Body text: 1rem / 420 weight / -0.006em tracking
- —Spacing: use only xs(0.25rem) sm(0.5rem) md(1rem) lg(1.5rem) xl(2rem) 2xl(2.5rem) tokens
- —Radius: full (9999px) for all buttons and pills; lg (0.75rem) for cards; md (0.5rem) for inputs
- —Buttons: always pill-shaped, primary = filled CTA color, secondary = transparent + border
- —Dark mode is the default; light mode inverts bg/text tokens via data-color-mode attribute
- —Depth: use radial gradients with teal/green origins (#157076, #1c4e50) for section backgrounds
- —Never use arbitrary colors, font sizes, or spacing values outside the defined system tokens