Color
primary
#0066cc
primary-focus
#0071e3
primary-on-dark
#2997ff
ink
#1d1d1f
body
#1d1d1f
body-on-dark
#ffffff
body-muted
#cccccc
ink-muted-80
#333333
ink-muted-48
#7a7a7a
divider-soft
#f0f0f0
hairline
#e0e0e0
canvas
#ffffff
canvas-parchment
#f5f5f7
surface-pearl
#fafafc
surface-tile-1
#272729
surface-tile-2
#2a2a2c
surface-tile-3
#252527
surface-black
#000000
surface-chip-translucent
#d2d2d7
on-primary
#ffffff
on-dark
#ffffff
surface-chip-translucent-64
rgba(210, 210, 215, 0.64)
canvas-parchment-frosted
rgba(245, 245, 247, 0.8)
hairline-alpha
rgba(0, 0, 0, 0.08)
Typography
- display
- "SF Pro Display", Inter, system-ui, -apple-system, BlinkMacSystemFont, sans-serif
- text
- "SF Pro Text", Inter, system-ui, -apple-system, BlinkMacSystemFont, sans-serif
Display
hero-display
56px / 1.07 · 600 · -0.28px
hero-display
display-lg
40px / 1.1 · 600 · 0
display-lg
display-md
34px / 1.47 · 600 · -0.374px
display-md
lead
28px / 1.14 · 400 · 0.196px
lead
lead-airy
24px / 1.5 · 300 · 0
lead-airy
tagline
21px / 1.19 · 600 · 0.231px
tagline
Text
body-strong
17px / 1.24 · 600 · -0.374px
body-strong
body
17px / 1.47 · 400 · -0.374px
body
dense-link
17px / 2.41 · 400 · 0
dense-link
caption
14px / 1.43 · 400 · -0.224px
caption
caption-strong
14px / 1.29 · 600 · -0.224px
caption-strong
Controls and legal
button-large
18px / 1 · 300 · 0
button-large
button-utility
14px / 1.29 · 400 · -0.224px
button-utility
fine-print
12px / 1 · 400 · -0.12px
fine-print
micro-legal
10px / 1.3 · 400 · -0.08px
micro-legal
nav-link
12px / 1 · 400 · -0.12px
nav-link
Spacing
space-xxs
4px
space-xs
8px
space-sm
12px
space-md
17px
space-lg
24px
space-xl
32px
space-xxl
48px
space-section
80px
Radius
radius-none
0px
radius-xs
5px
radius-sm
8px
radius-md
11px
radius-lg
18px
radius-pill
9999px
radius-full
9999px
Elevation
shadow-product
3px 5px 30px 0 rgba(0, 0, 0, 0.22)
shadow-hairline-soft
0 0 0 1px rgba(0, 0, 0, 0.08)
Components
Buttons
Buttons are Action Blue pills for every primary action, compact dark rects for utility actions, and a pearl capsule for quiet secondary choices.
- Pair
ads-btn-primary("Buy") withads-btn-secondary("Learn more") when a tile offers two actions. - Keep primary actions on
radius-pill; the pill shape is the action signal. - Use
ads-link-darkfor inline links on dark tiles. - Don't add a shadow, gradient or second accent color to any button.
- Don't use
primary-on-darkon light grounds (3.02:1 oncanvas). - Don't use
ads-btn-darkin content areas; it belongs to nav and utility clusters.
- Pair
ConfiguratorChip
The configurator chip is a pill-shaped option cell on a buy page: a small thumbnail, a label and a price delta, with a blue border when selected.
ads-chip(configurator-option-chip):canvasground,inktext incaption,radius-pill, 12px 16px padding, 1pxhairlineedge..is-selected(configurator-option-chip-selected): 2px solidprimary-focusborder; padding drops by 1px so the chip does not shift.- Lay out four or five per row.
- Show the price delta in
ink-muted-80after the label. - Expose selection through
aria-checkedas well as the border. - Don't fill the selected chip with blue; only the border changes.
- Don't use chips for actions; actions are
ads-btn-primary.
EnvironmentQuoteCard
The environment quote card is an editorial hero: a centered white headline over a dark photographic backdrop, with one primary action below.
ads-quote:surface-tile-1ground,radius-none,space-section(80px) vertical padding.- Headline in
display-lgandon-dark(14.91:1 onsurface-tile-1); action asads-btn-primary. - If a photograph is added, check
on-darkagainst its brightest region under the text. - Keep it to one sentence and one action.
- Don't add a gradient scrim as decoration; if a photo needs one for legibility, say so as an addition.
- Don't draw or approximate the program mark.
FloatingStickyBar
The floating sticky bar pins to the bottom of a buy page while the shopper scrolls, showing the running total and one primary action.
ads-sticky:canvas-parchment-frostedwithbackdrop-frosted, height 64px, padding 12px 32px (space-smbyspace-xl).- Total in
bodywith the amount in weight 600; action asads-btn-primary. - The frost stays readable over dark content: over
surface-tile-1it resolves near #ccccce, whereinkreads at 10.5:1. - Show it only on configurator and buy flows.
- Don't add a top shadow; the frost provides the separation.
- Don't place more than one action in the bar.
Footer
The footer is the one deliberately dense area: columns of links on parchment that expose the whole site map, closed by a legal row.
ads-footer:canvas-parchmentground,ink-muted-80text (11.6:1), 64px vertical padding.- Column headings in
caption-strong; links indense-link(17px with 2.41 line height). - Legal row in
fine-printandink-muted-48. That pair reads at 3.94:1 oncanvas-parchment, below 4.5:1; it is the source's value, kept exact. Useink-muted-80when the legal text must be read. - Keep the 2.41 line height on link columns; it is what makes the dense lists scannable.
- Don't shrink the link size below
dense-linkto fit more columns; wrap columns instead.
Navigation
Navigation is two stacked bars: a 44px black global nav and a 52px frosted parchment sub-nav that carries the product name and a persistent Buy pill.
ads-gnav(global-nav):surface-blackground,on-darktext innav-link(12px), links about 20px apart, utilities aligned right. The brand mark sits at its left edge in production; this system ships no logo, so leave that slot empty or set the brand name in plain type.ads-subnav(sub-nav-frosted):canvas-parchment-frostedwithbackdrop-frosted, a 1pxhairline-alphabottom edge, category name intagline, links inbutton-utility, then anads-btn-primary.- Below 834px (
bp-tablet-landscape) the global nav collapses to a menu button and bag; below 734px the sub-nav keeps only the name and the primary action. - Keep the global nav pure black; it is the one place
surface-blackappears on most pages. - Pin the sub-nav under the global nav and keep its primary action visible.
- Don't add a second color or a shadow to either bar; the frost is the only depth.
- Don't put more than one primary pill in the sub-nav.
ProductTile
Product tiles are full-bleed, square-cornered sections that stack with no gap and alternate light and dark grounds, so the color change separates sections.
- Alternate light and dark; put
ads-tile-parchmentbetween two light tiles andads-tile-dark-2next to anads-tile-dark. - On dark tiles, use
ads-link-darkfor inline links.ads-btn-primarystill works there because its white label reads at 5.57:1, though the blue fill sits at 2.68:1 againstsurface-tile-1. - Keep at least 40px between the render and any text.
- Don't round tiles, add borders between them or put a gradient behind them.
- Don't put the product shadow on the tile itself.
- Alternate light and dark; put
SearchInput
The search input is a 44px pill field with a leading search glyph, matching the pill grammar of the primary action.
ads-search:canvasground, 1pxhairline-alphaborder,radius-pill, 12px 20px padding, height 44px.- Text in
body(17px) andink; placeholder inink-muted-80. - Focus: 2px solid
primary-focusoutline (4.7:1 oncanvas). - The source documents no error or validation state. Do not invent one; if a product needs it, flag it as an addition.
- Keep the field on
canvasorcanvas-parchment. - Don't square the corners or add an inner shadow.
StoreUtilityCard
The store utility card is the white grid cell used in the store and accessories grids: an image, a name, a price and one text link.
ads-card:canvasground, 1pxhairlineborder,radius-lg(18px),space-lg(24px) padding.ads-card-media: 1:1 crop atradius-sm(8px).- Name in
body-strong, price inbody, link asads-linkinprimary. - Grids run 5 columns at desktop, 4 at
bp-content-lock, 3 atbp-small-desktop, 2 atbp-tablet-landscape, 1 atbp-phone, with 20 to 24px gutters (space-lg). - Set cards on
canvas-parchmentso the white card reads as a cell. - Let only the product image carry
shadow-product, and only when it is a cut-out render. - Don't add a shadow, a colored border or a filled button to the card.
- Don't change the radius; 18px is the card grammar.