<!--
ROLE: You are a senior product designer + frontend engineer pair.
TASK: Treat the DESIGN.md below as the SINGLE SOURCE OF TRUTH for visual style.
Every component you produce in this codebase must:
  • Reuse the color tokens declared in YAML frontmatter (no ad-hoc hex values)
  • Use the typography scale (display / h1 / h2 / body / label / mono) verbatim
  • Match the radius scale (button / card / pill) to the named tier
  • Honor the elevation table for shadows
  • Respect the motion section (durations, easings, reduced-motion)
  • Pass the contrast pairs in the accessibility section
INPUT: Project files at ${CWD}.
OUTPUT: Code, not paragraphs. Quote the relevant section number when you cite a token (e.g. "per §3 Typography Rules").
PRINCIPLE: A token used once is a one-off; a token used three times is a system. Prefer system fidelity over local cleverness.
-->

---
name: Wayfair
tagline: Near-white canvas, ink-black type, photographic product cards — editorial-light home retail at marketplace scale.
updated_at: 2026-05-28T00:00:00.000Z
published_at: 2026-05-27T23:16:04.502Z
author: webdesignhot
source_url: https://www.wayfair.com
spec: webdesignhot/0.1
quality: curated
featured: false
categories: [retail, marketplace]
tags: [light, retail, marketplace, sans, photographic, editorial, home, e-commerce, structured]
preview_swatch: ['#fafbfc', '#0a0a0a', '#000000']
related: [target, ikea, etsy, amazon]
description: 'Wayfair''s storefront is a study in chromatic restraint at marketplace scale: a near-white canvas (`#fafbfc`) carries an editorial-light grid of photographic product cards, ink-black type (`#0a0a0a`) anchors every label, and a single near-black brand (`#0a0a0a`) handles primary CTAs and the wordmark. Type runs a structured humanist sans — display at 32–80px / 700 with tight tracking, body at 16/400 with 1.55 leading. Cards round at 12px, CTAs round at 8px (square-shoulder, not pills), and the page hands almost all of its visual weight to the **product photography** that does the work of selling a sofa or a rug. Where Amazon clutters with badges and Etsy leans handmade, Wayfair reads as the JCrew catalogue of home goods — calm, organised, and unmistakably middle-market.'


# Canonical 8-role aliases (bg / text / brand / border / accent / muted / surface / danger).
# Maps role names to this entry's actual token names so role-aware
# downstream tools resolve `theme.background` → entry's `bg`, etc.
# Auto-generated by scripts/add-aliases.mjs — do not edit manually;
# regenerate after changing color token names.
aliases:
  background: bg
  foreground: text
  primary: brand
  muted: text-muted
  border: border
  ring: border-strong
colors:
  bg: '#fafbfc'                  # default near-white canvas
  bg-page: '#ffffff'             # alternate true-white page floor
  surface: '#fafbfc'             # product card surface — same as bg, blends edge-to-edge
  surface-soft: '#f4f5f7'        # disabled fields, alt row, subtle band separation
  surface-strong: '#eceef1'      # divider band between sections
  surface-muted: '#f7f8fa'       # search bar fill, filter rail ground
  brand: '#0a0a0a'               # near-black brand — CTA fills and wordmark
  brand-hover: '#000000'         # pure black on hover — the only true black in the system
  brand-active: '#222222'        # pressed state — slightly lifted
  brand-pale: '#e6e6e6'          # disabled CTA tint
  text: '#0a0a0a'                # primary ink — matches brand for tonal unity
  text-strong: '#000000'         # display copy at maximum punch
  text-muted: '#555555'           # secondary metadata, breadcrumbs
  text-soft: '#777777'           # caption text, helper microcopy
  text-on-brand: '#ffffff'       # white text on near-black CTA
  text-on-dark: '#ffffff'        # white text on rare dark surfaces
  heritage-purple: '#7B189F'     # legacy Wayfair purple — appears only in brand seals and the W mark
  link: '#0a0a0a'                # inline links match ink — underlined to disambiguate
  link-hover: '#000000'          # pure black on hover
  border: '#000000'              # full-strength border — used very sparingly on focus
  border-soft: '#e6e8eb'         # default 1px hairline on cards, dividers
  border-strong: '#0a0a0a'       # focus state hairline
  border-input: '#c8ccd0'        # default form-input outline
  border-soft-hover: '#0a0a0a'   # hairline darkens on hover
  rating-fill: '#0a0a0a'         # star rating fill — ink, not yellow
  rating-empty: '#e6e8eb'        # empty star
  save-heart: '#cc1c1c'          # Save heart fill when active — red, Pinterest-influenced
  save-heart-empty: '#0a0a0a'    # empty heart outline — ink
  promo-yellow: '#f5d342'        # "Way Day" promotional yellow — used only twice yearly
  promo-yellow-text: '#0a0a0a'   # ink on promo yellow
  scrim: 'rgba(0,0,0,0.5)'       # modal backdrop
  shadow-card: 'rgba(15,17,21,0.06)'
  shadow-elev: 'rgba(15,17,21,0.12)'
  shadow-hover: 'rgba(15,17,21,0.10)'
  success: '#1a7f3c'             # in-stock confirmation green
  success-soft: '#e8f5ec'        # success banner background
  warning: '#a05a00'             # advisory amber
  warning-soft: '#fdf3e2'
  danger: '#c81e1e'              # validation error red — distinct from save-heart
  danger-soft: '#fbe9e9'
  info: '#0a0a0a'                # informational banners use ink, not blue
  free-shipping: '#1a7f3c'       # "FREE shipping" green text

typography:
  display:
    family: '"Mier B", "Mier", "Inter", system-ui, -apple-system, "Helvetica Neue", Helvetica, Arial, sans-serif'
    weights: [500, 600, 700]
    opentype-features: ['tnum']
  body:
    family: '"Mier B", "Mier", "Inter", system-ui, -apple-system, "Helvetica Neue", Helvetica, Arial, sans-serif'
    weights: [400, 500, 600]
  mono:
    family: 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace'
    weights: [400, 500]
  scale:
    display-hero:    { size: 80, weight: 700, lineHeight: 1.0,  tracking: '-0.03em',  family: display, opentype: ['tnum'] }
    display-lg:      { size: 56, weight: 700, lineHeight: 1.05, tracking: '-0.02em',  family: display }
    h1:              { size: 40, weight: 700, lineHeight: 1.1,  tracking: '-0.018em', family: display }
    h2:              { size: 32, weight: 600, lineHeight: 1.2,  tracking: '-0.012em', family: display }
    h3:              { size: 24, weight: 600, lineHeight: 1.25, tracking: '-0.005em', family: display }
    h4:              { size: 20, weight: 600, lineHeight: 1.3,  tracking: '0',        family: body }
    sub-section:     { size: 18, weight: 600, lineHeight: 1.35, tracking: '0',        family: body }
    product-title:   { size: 16, weight: 500, lineHeight: 1.4,  tracking: '0',        family: body }
    product-title-sm: { size: 14, weight: 500, lineHeight: 1.4,  tracking: '0',        family: body }
    body-lg:         { size: 18, weight: 400, lineHeight: 1.55, tracking: '0',        family: body }
    body:            { size: 16, weight: 400, lineHeight: 1.55, tracking: '0',        family: body }
    body-sm:         { size: 14, weight: 400, lineHeight: 1.5,  tracking: '0',        family: body }
    label:           { size: 13, weight: 500, lineHeight: 1.4,  tracking: '0',        family: body }
    caption:         { size: 12, weight: 500, lineHeight: 1.4,  tracking: '0.02em',   family: body }
    micro:           { size: 11, weight: 500, lineHeight: 1.3,  tracking: '0.04em',   family: body, transform: uppercase }
    price-display:   { size: 32, weight: 700, lineHeight: 1.0,  tracking: '-0.012em', family: body, opentype: ['tnum'] }
    price-product:   { size: 18, weight: 700, lineHeight: 1.0,  tracking: '0',        family: body, opentype: ['tnum'] }
    price-strikethru: { size: 14, weight: 400, lineHeight: 1.0,  tracking: '0',        family: body, opentype: ['tnum'] }
    price-save:      { size: 14, weight: 600, lineHeight: 1.0,  tracking: '0',        family: body, opentype: ['tnum'] }
    button-cta:      { size: 15, weight: 600, lineHeight: 1.0,  tracking: '0',        family: body }
    nav-link:        { size: 14, weight: 500, lineHeight: 1.0,  tracking: '0',        family: body }
    badge:           { size: 11, weight: 600, lineHeight: 1.0,  tracking: '0.04em',   family: body, transform: uppercase }
    filter-label:    { size: 14, weight: 500, lineHeight: 1.4,  tracking: '0',        family: body }
    breadcrumb:      { size: 13, weight: 400, lineHeight: 1.4,  tracking: '0',        family: body }

radius:
  micro: 2          # dense table corners, micro-badges
  sm: 4             # deal tags, savings callouts
  md: 8             # buttons, inputs, small chips — Wayfair's default radius
  lg: 12            # product cards, modals, dropdowns
  xl: 16            # featured hero cards
  pill: 9999        # filter chips, "Save" heart hit-area, status pills

spacing:
  base: 4
  scale: [0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96]

layout:
  page-width: 1280
  prose-width: 720
  header-height: 64
  utility-bar-height: 32
  filter-rail-width: 240

components:
  button-primary:
    bg: '#0a0a0a'
    color: '#ffffff'
    radius: 8
    padding: '12px 20px'
    height: 44
    font: button-cta
    use: 'Add to cart, Buy now, Sign in — every primary action. Square-shoulder ink, not a pill.'
  button-primary-hover:
    bg: '#000000'
    color: '#ffffff'
    radius: 8
    use: 'Hover deepens to pure black.'
  button-secondary:
    bg: '#ffffff'
    color: '#0a0a0a'
    border: '1px solid #0a0a0a'
    radius: 8
    padding: '11px 19px'
    height: 44
    use: 'Cancel, View details, secondary checkout actions.'
  button-tertiary-text:
    bg: 'transparent'
    color: '#0a0a0a'
    use: 'Inline text actions, "Show more" — always underlined.'
  button-ghost:
    bg: '#fafbfc'
    color: '#0a0a0a'
    border: '1px solid #e6e8eb'
    radius: 8
    padding: '11px 19px'
    height: 44
    use: 'Neutral secondary actions on white surface — filter pills before activation.'
  filter-chip:
    bg: '#ffffff'
    color: '#0a0a0a'
    border: '1px solid #e6e8eb'
    radius: 9999
    padding: '6px 14px'
    height: 32
    font: filter-label
    use: 'Inactive filter chip in the left rail. Active state flips bg to #0a0a0a, color to white.'
  product-card:
    bg: '#fafbfc'
    color: '#0a0a0a'
    radius: 12
    padding: '0'
    border: 'none'
    use: 'Edge-to-edge image-led product tile. Image fills the upper 80%; label and price sit beneath on the canvas — no internal padding, no border.'
  product-card-frame:
    bg: '#ffffff'
    color: '#0a0a0a'
    radius: 12
    padding: '12px'
    border: '1px solid #e6e8eb'
    use: 'Alternate framed variant used on PDP related-items rail and curated collection pages.'
  promo-card:
    bg: '#fafbfc'
    color: '#0a0a0a'
    radius: 16
    use: 'Photographic promo card — 4:5 lifestyle room shot with overlaid copy and a square-shoulder CTA in the lower-left corner.'
  search-bar:
    bg: '#f7f8fa'
    color: '#0a0a0a'
    radius: 8
    height: 44
    border: '1px solid #e6e8eb'
    focus-ring: '2px solid #0a0a0a'
    use: 'Masthead search — soft-grey fill (not white) to read as a distinct field against the white masthead.'
  text-input:
    bg: '#ffffff'
    color: '#0a0a0a'
    radius: 8
    height: 44
    padding: '12px 14px'
    border: '1px solid #c8ccd0'
    focus: '2px solid #0a0a0a'
    use: 'Form input. Border thickens to 2px ink on focus.'
  star-rating:
    color-fill: '#0a0a0a'
    color-empty: '#e6e8eb'
    use: 'Five-star rating row — ink fill, soft-grey empty. Never yellow.'
  save-heart:
    color-empty: '#0a0a0a'
    color-fill: '#cc1c1c'
    bg: 'rgba(255,255,255,0.92)'
    radius: 9999
    size: 36
    use: 'Anchored top-right of every product card. Empty outline in ink; fills red when saved.'
  deal-tag:
    bg: '#0a0a0a'
    color: '#ffffff'
    radius: 4
    padding: '4px 8px'
    use: 'Solid ink savings tag — "Sale", "-40%", "Open Box".'
  shipping-tag:
    bg: 'transparent'
    color: '#1a7f3c'
    use: 'Inline green text — "FREE shipping" / "FREE 2-day shipping". No surface, no border.'
  badge-bestseller:
    bg: '#0a0a0a'
    color: '#ffffff'
    radius: 9999
    padding: '4px 10px'
    use: 'Status pill anchored top-left of product card — "Bestseller", "New".'
  promo-banner-yellow:
    bg: '#f5d342'
    color: '#0a0a0a'
    radius: 0
    use: 'Site-wide promotional banner — used only during Way Day and Cyber Week.'
  pdp-buy-box:
    bg: '#ffffff'
    color: '#0a0a0a'
    radius: 12
    border: '1px solid #e6e8eb'
    padding: '24px'
    use: 'Sticky right-rail buy box on PDP. Holds price, variant pickers, quantity, Add to Cart CTA.'
  filter-rail:
    bg: '#fafbfc'
    color: '#0a0a0a'
    width: 240
    use: 'Left rail of category pages. Stacked accordion sections (Price, Brand, Material, Color, etc.) with chevron indicators.'
  breadcrumb:
    color: '#555555'
    font: breadcrumb
    use: '`>` separator chain. Last segment in ink.'

motion:
  ease-standard: 'cubic-bezier(0.4, 0, 0.2, 1)'
  ease-emphasized: 'cubic-bezier(0.2, 0, 0, 1)'
  ease-decelerate: 'cubic-bezier(0, 0, 0.2, 1)'
  duration-fast: 150
  duration-standard: 240
  duration-slow: 320
  cta-press: 'CTA bg deepens 0a0a0a → 000000 over 150ms on :hover; lifts to #222 for 100ms on :active'
  card-hover: 'shadow-card crossfades in over 200ms; image scales 1.0 → 1.03 inside the rounded clip over 240ms'
  save-heart-toggle: 'heart fills red with a 1.0 → 1.2 → 1.0 pop over 280ms cubic-bezier(0.34, 1.56, 0.64, 1)'
  filter-chip-toggle: 'background and text colours crossfade over 150ms — no transform'
  drawer-slide: 'Mobile filter drawer slides in from left over 280ms emphasized ease'
  reduced-motion: 'respects prefers-reduced-motion: reduce — image scale, heart pop, drawer slide all suppress to opacity-only.'

breakpoints:
  mobile: 640
  tablet: 1024
  desktop: 1280
  wide: 1536

shadows:
  ambient: 'none — default surfaces stay flat'
  hover-card: 'rgba(15,17,21,0.06) 0 4px 16px'
  elev-rail: 'rgba(15,17,21,0.08) 0 2px 8px'
  modal: 'rgba(15,17,21,0.12) 0 12px 32px'
  ring: '0 0 0 2px #0a0a0a'

accessibility:
  contrast-text-on-bg: 19.4         # #0a0a0a on #fafbfc — AAA
  contrast-text-on-brand: 19.1      # #ffffff on #0a0a0a — AAA
  contrast-muted-on-bg: 7.7         # #555555 on #fafbfc — AAA
  contrast-soft-on-bg: 4.9          # #777777 on #fafbfc — AA
  contrast-success-on-bg: 5.0       # #1a7f3c on #fafbfc — AA
  contrast-danger-on-bg: 5.6        # #c81e1e on #fafbfc — AA
  focus-ring: '2px solid #0a0a0a + 2px outline-offset'
  reduced-motion-honored: true
  touch-target-min: 44
  keyboard-nav: 'Tab moves utility bar → logo → search → category nav → filter rail → product grid → footer; arrow keys inside filter accordions and image carousel.'

dark-mode: null   # Light-only across storefront. Wayfair does not ship a dark variant on web or app.
---

## 1. Visual Theme & Atmosphere

Wayfair's storefront is what happens when an $14B online home retailer decides to read like a catalogue rather than a circular. The page opens on a near-white canvas (`#fafbfc`) — not quite pure white, deliberately one shade off to give the photographic product cards an off-canvas warmth — carries an editorial-light grid of room-and-product imagery, and lets ink-black type (`#0a0a0a`) anchor every label, price, and CTA. There is almost no chrome. The page is the photography, and the chrome is what holds the photography in place.

The brand has spent the last decade walking away from saturated purple and yellow promotional energy toward a calmer, structured aesthetic that more closely resembles JCrew or Crate & Barrel than its early-2010s clearance-bin persona. The current chromatic system is essentially monochromatic: near-white background, ink text, near-black CTA. The historic Wayfair purple (`#7B189F`) survives only in the wordmark seal and on a handful of brand-asset surfaces — it is no longer a UI colour. The promotional yellow (`#f5d342`) appears twice a year for Way Day and Cyber Week, then vanishes.

Type runs a structured humanist sans — production CSS resolves to `Mier B`, a custom commission Wayfair has used for several years, with Inter and the system stack as fallbacks. Display lines render at 32–80px / 700 with tight negative tracking (-0.03em on the largest hero); body text holds at 16/400 with a generous 1.55 leading. The brand position: the typography is precise enough to anchor a furniture catalogue but quiet enough to disappear behind a sofa photograph.

Shape language is **square-shoulder**, not pill. CTAs round at 8px — a deliberate departure from Target's and Walmart's 9999px discipline. Product cards round at 12px and lean edge-to-edge against the canvas — no internal padding, no visible border, just the photo and a label-and-price stack beneath. Filter chips, the one exception, run as 9999px pills in the left rail. The mixed-radius system reads as deliberate: rectangular for commitments (CTAs, cards, the page itself), pill for ephemerals (filters, status, save).

Photography is **the brand**. Every product card is a styled-room or seamless-white product shot, every promo band is a lifestyle image with copy nested in the negative space. Wayfair invests heavily in photographic standards — every supplier's product must be reshot in-house before it lands on the grid, which is part of why the marketplace reads more uniform than Amazon's third-party clutter. The page rewards browsing the way a flipping-through-a-catalogue rewards browsing: every tile is composed, every category page is curated, and the eye never has to compete with badges.

**Key Characteristics:**
- Single brand colour: ink near-black (`#0a0a0a`) for the wordmark, every primary CTA, ratings, and savings tags
- Near-white canvas (`#fafbfc`) — deliberately one shade off pure white to give photography off-canvas warmth
- Heritage purple (`#7B189F`) appears only in brand seals, never in UI — Wayfair walked away from it for a calmer system
- Custom humanist sans (`Mier B` / Inter fallback) at 16/400 body, 32–80px / 700 display
- Square-shoulder 8px CTAs — not pills. Pills reserved for filter chips and status
- Cards round at 12px with no border and no internal padding — image edge-to-edge against canvas
- "Save" heart anchored top-right on every product card — Pinterest-influenced
- Star ratings render in ink on grey — never yellow or gold
- Generous 64–96px vertical section padding — editorial breath
- Promo yellow (`#f5d342`) used only during Way Day and Cyber Week — vanishes the rest of the year

## 2. Color Palette & Roles

### Primary
- **Canvas** (`#fafbfc`): default page floor, every product tile background, every form surface. The deliberate near-white — one shade off pure white — gives photographic product cards an off-canvas warmth.
- **Page Floor** (`#ffffff`): alternate true-white surface for modals, the masthead, and PDP buy-box cards.
- **Ink** (`#0a0a0a`): primary text colour. The brand uses the same hex for text and brand to keep the system tonally unified.
- **Heading Ink** (`#000000`): used on display copy where Wayfair wants maximum chromatic punch — typically hero typography at 56–80px.

### Brand
- **Brand Ink** (`#0a0a0a`): the wordmark, every primary CTA, the rating-star fill, the focus ring — the single brand colour.
- **Brand Hover** (`#000000`): pure black on hover — the only true black in the system.
- **Brand Active** (`#222222`): pressed state, slightly lifted.
- **Brand Pale** (`#e6e6e6`): disabled CTA tint, used sparingly.

### Accent (Restricted)
- **Heritage Purple** (`#7B189F`): the legacy Wayfair purple. Appears in the wordmark seal, brand-asset pages, and a handful of email templates — but is not a UI colour on the current storefront.
- **Promo Yellow** (`#f5d342`): site-wide promotional banner — appears only during Way Day (April) and Cyber Week (November). Used as a full-bleed band, never as a button or label fill.
- **Save Heart Red** (`#cc1c1c`): the only red on the page — appears only when a user saves an item. Pinterest-influenced.

### Interactive
- **Link** (`#0a0a0a`): inline links match ink. Always underlined to disambiguate from running text.
- **Link Hover** (`#000000`): pure black on hover; underline thickens from 1px to 2px.
- **Disabled** (`#c8ccd0`): disabled text and outline.
- **Selected** (`#0a0a0a`): selected radio / checkbox / filter chip — inverts to ink fill with white text.

### Neutral Scale
- **Ink** (`#0a0a0a`) — primary text and brand fill
- **Heading** (`#000000`) — display copy at maximum punch
- **Muted** (`#555555`) — secondary metadata, breadcrumbs, helper text
- **Soft** (`#777777`) — caption text, disabled labels
- **Border Soft** (`#e6e8eb`) — default 1px hairline on cards, inputs, dividers
- **Border Input** (`#c8ccd0`) — default form-input outline before focus
- **Border Strong** (`#0a0a0a`) — focus state and hover hairline
- **Border Full** (`#000000`) — used very sparingly, mostly on focus emphasis

### Surface & Borders
- **Canvas** (`#fafbfc`) — default page and card background
- **Page White** (`#ffffff`) — masthead, modals, PDP buy-box, inputs
- **Surface Soft** (`#f4f5f7`) — disabled fields, alternate row, subtle band separation
- **Surface Muted** (`#f7f8fa`) — search bar fill, filter rail ground
- **Surface Strong** (`#eceef1`) — divider band between major sections

### Shadow Colors
Wayfair stays mostly flat. The hover-card shadow is a cool-tinted near-black at 6% — slightly cooler than a pure-black shadow because the canvas itself carries a faint cool tint.

- `rgba(15,17,21,0.06) 0 4px 16px` — product-card hover lift
- `rgba(15,17,21,0.08) 0 2px 8px` — mega-menu and dropdown lift
- `rgba(15,17,21,0.12) 0 12px 32px` — modal drop

### Semantic
- **Success Green** (`#1a7f3c`): in-stock confirmation, "Order placed", "FREE shipping" inline text
- **Success Soft** (`#e8f5ec`): success banner background
- **Warning Amber** (`#a05a00`): advisory banners ("Low stock", "Limited time")
- **Warning Soft** (`#fdf3e2`): warning banner background
- **Danger Red** (`#c81e1e`): validation errors — distinct from the Save-heart red so error doesn't read as a saved-item state
- **Danger Soft** (`#fbe9e9`): error banner background
- **Info** (`#0a0a0a`): informational banners use ink, not blue — the brand has no info-blue role

## 3. Typography Rules

### Font Family

**Primary**: `Mier B` — Wayfair's commissioned humanist sans, used for both display and body. Fallback chain: `"Mier B", "Mier", "Inter", system-ui, -apple-system, "Helvetica Neue", Helvetica, Arial, sans-serif`. The Inter substitution is intentional — Inter renders close enough to Mier that the brand accepts it as a public-substitution fallback, and the system stack catches the remaining edge cases.

**Mono**: `ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace` — used only in order numbers, tracking codes, and developer-surface debugging. Not part of the consumer brand chrome.

**OpenType features**: `tnum` is enabled on price displays, savings tags, ratings, and shipping countdown timers so column alignment stays clean across the dense grid. No `ss01` / `ss02` stylistic-set discipline.

### Hierarchy

| Role | Font | Size | Weight | Line Height | Letter Spacing | OT Features | Notes |
|------|------|------|--------|-------------|----------------|-------------|-------|
| display-hero | Mier B | 80 | 700 | 1.0 | -0.03em | tnum | Way Day hero, marketing landing pages |
| display-lg | Mier B | 56 | 700 | 1.05 | -0.02em | — | Category landing hero ("Living Room", "Outdoor") |
| h1 | Mier B | 40 | 700 | 1.1 | -0.018em | — | PDP product title, page H1 |
| h2 | Mier B | 32 | 600 | 1.2 | -0.012em | — | Section heads on home and category ("Trending", "New arrivals") |
| h3 | Mier B | 24 | 600 | 1.25 | -0.005em | — | Sub-section heads on PDP, filter rail headers |
| h4 | Mier B | 20 | 600 | 1.3 | 0 | — | Card group titles, modal headings |
| sub-section | Mier B | 18 | 600 | 1.35 | 0 | — | "Frequently bought together", "Customer photos" |
| product-title | Mier B | 16 | 500 | 1.4 | 0 | — | Grid product card title (clamps to 2 lines) |
| product-title-sm | Mier B | 14 | 500 | 1.4 | 0 | — | Compact card variant on related-items rail |
| body-lg | Mier B | 18 | 400 | 1.55 | 0 | — | PDP description copy, long-form content |
| body | Mier B | 16 | 400 | 1.55 | 0 | — | Default body — reviews, descriptions |
| body-sm | Mier B | 14 | 400 | 1.5 | 0 | — | Secondary metadata, "Sold by Wayfair" |
| label | Mier B | 13 | 500 | 1.4 | 0 | — | Form labels, filter labels |
| caption | Mier B | 12 | 500 | 1.4 | 0.02em | — | Footer micro-text, image captions |
| micro | Mier B | 11 | 500 | 1.3 | 0.04em | uppercase | Legal, footer disclosures, smallest labels |
| price-display | Mier B | 32 | 700 | 1.0 | -0.012em | tnum | PDP main price ("$429") |
| price-product | Mier B | 18 | 700 | 1.0 | 0 | tnum | Grid tile current price |
| price-strikethru | Mier B | 14 | 400 | 1.0 | 0 | tnum | Original price strikethrough |
| price-save | Mier B | 14 | 600 | 1.0 | 0 | tnum | "$70 off" red savings line |
| button-cta | Mier B | 15 | 600 | 1.0 | 0 | — | Primary CTA labels — semibold for confidence |
| nav-link | Mier B | 14 | 500 | 1.0 | 0 | — | Masthead category labels |
| badge | Mier B | 11 | 600 | 1.0 | 0.04em | uppercase | "BESTSELLER", "NEW", "OPEN BOX" |
| filter-label | Mier B | 14 | 500 | 1.4 | 0 | — | Filter chip and rail labels |
| breadcrumb | Mier B | 13 | 400 | 1.4 | 0 | — | "Furniture > Living Room > Sofas" |

### Principles

- **Mier B is the system**, but Inter is a perfectly acceptable open-source substitute. The brand position: a structured humanist sans with a slightly warmer x-height than Helvetica, neutral enough to disappear behind the photography.
- **Negative tracking on display.** Hero copy at 80px runs at -0.03em; the 40px H1 at -0.018em. Tighter than most consumer retail — Wayfair leans into editorial-magazine discipline rather than friendly-airy display.
- **Body at 16/400 with 1.55 leading.** The leading is generous (compared to Target's 1.5) because product descriptions and reviews are read in dense blocks — the extra breath keeps the wall of text from collapsing.
- **Semibold (600) buttons, not bold (700).** Wayfair's CTAs run at 15/600 rather than 16/700 — a slightly quieter, more editorial register that distinguishes the brand from Target's louder 16/700 pills.
- **Tabular numerals on every price.** `tnum` is enabled on every price token, savings tag, rating, and shipping countdown.
- **No italic, no oblique.** Mier B oblique exists in the font family but never appears on the storefront. The brand reads as commercial-neutral, not editorial-literary.
- **Underlined links by default.** Because inline links match ink (`#0a0a0a` on `#fafbfc`), the only way to disambiguate them from running text is the underline. Underline is always 1px solid; thickens to 2px on hover.
- **Uppercase reserved for badges and micro-labels.** Body and headings never go uppercase — uppercase reads as utility, not voice.

## 4. Component Stylings

### Buttons

**`button-primary`** — the canonical Wayfair CTA. Near-black ink (`#0a0a0a`) fill, white text in 15/600, 8px radius (square-shoulder, not pill), 12×20px padding, 44px height. Hover deepens to pure black `#000000`. Active lifts to `#222222` for 100ms then settles.

**`button-secondary`** — white fill, 1px ink outline, ink text in 15/600. Same 8px radius, 44px height. Used for "View details", "Cancel", "Save for later" — actions where the brand wants the user to choose without pressure.

**`button-tertiary-text`** — plain ink text, no surface, always underlined. Used for "Show more reviews", "See all 47 questions", "Compare items".

**`button-ghost`** — canvas fill (`#fafbfc`), 1px `#e6e8eb` hairline, ink text. Used for filter chips before activation and neutral secondary actions where the ink CTA would be too brand-loud.

**`filter-chip`** — 9999px pill at 32px height, 6×14px padding, 14/500 ink label, 1px soft-grey hairline. The one place pills survive in the system. Active state inverts: ink fill, white text, no border.

### Cards

**`product-card`** — the edge-to-edge image-led product tile that defines the Wayfair grid. Canvas surface (`#fafbfc`), 12px radius, **no internal padding and no border**. Stack: 4:5 or 1:1 thumbnail with `object-fit: cover` (lifestyle product shot — styled in-room more often than seamless white), product title in 16/500 ink clamped to 2 lines, optional brand line in 13/400 muted, star row + review count in 13/400 with ink fill, current price in 18/700 with `tnum`, optional strikethrough original price in 14/400 muted, optional red "$70 off" save line, "FREE shipping" inline green text. The Save heart sits anchored top-right, the Bestseller badge anchored top-left.

**`product-card-frame`** — alternate framed variant used on the PDP related-items rail and curated collection pages. White surface, 12px radius, 1px `#e6e8eb` border, 12px internal padding. Reads as more "merchandised" than the edge-to-edge default.

**`promo-card`** — full-bleed photographic card. 4:5 or 4:3 lifestyle room shot with overlaid copy in 24–32/600 ink and a square-shoulder ink CTA in the lower-left corner. 16px radius. No scrim, no overlay tint — Wayfair's photographers compose specifically for the negative-space copy treatment.

**`pdp-buy-box`** — sticky right-rail card on PDP. White surface, 12px radius, 1px `#e6e8eb` border, 24px padding, optional hover-card shadow when scrolling locks it. Stack: large `price-display` (32/700) with optional strikethrough, "$70 off" red save line, variant pickers (color swatch row, size dropdown, material radio group), quantity stepper, full-width ink Add to Cart CTA, outline "Save for Later" ghost, "Free shipping & free returns" inline green line, delivery-by date estimate.

**`hero-photographic`** — full-bleed hero band with photographic background, 16:9 or 21:9 at desktop, copy and a square-shoulder CTA overlaid in the lower-third or lower-left corner. No scrim — the photographer composes the empty third for the overlay.

### Badges, Tags, Pills

**`badge-bestseller`** — solid ink (`#0a0a0a`) pill at 9999px radius, white text in 11/600 uppercase, 4×10px padding. Anchored top-left of qualifying product cards. "BESTSELLER", "NEW", "TRENDING".

**`deal-tag`** — solid ink fill, white text in 11/600 uppercase, 4px radius, 4×8px padding. "SALE", "-40%", "OPEN BOX". Used inline beneath the price.

**`shipping-tag`** — inline green (`#1a7f3c`) text in 14/500. No surface, no border — sits beneath the price line. "FREE shipping" / "FREE 2-day shipping" / "Get it by Thu, May 28".

**`status-pill`** — soft-surface pill (`#f4f5f7` fill, ink text) at 9999px radius, 12/500 caption. "In stock", "Low stock", "Backorder — ships May 30".

**`save-heart`** — 36×36 circular hit-area anchored top-right of every product card. Semi-transparent white background (`rgba(255,255,255,0.92)`), 9999px radius, ink outline heart when empty, fills red (`#cc1c1c`) with a 1.0 → 1.2 → 1.0 pop when toggled.

### Inputs / Forms

**`text-input`** — white surface, 1px `#c8ccd0` hairline, 8px radius, 44px height, 12×14px padding. Stacked label above in 13/500 ink. On focus the border thickens to 2px `#0a0a0a` ink and offsets 1px.

**`search-bar`** — masthead search field with a deliberate soft-grey fill (`#f7f8fa`) — not white — so it reads as a distinct field against the white masthead. 8px radius, 44px height, 1px `#e6e8eb` hairline. Magnifier icon on the left edge in ink. Placeholder in muted grey ("Find anything home..."). On focus a 2px ink ring fades in and the fill brightens to pure white.

**`select`** — same look as `text-input` with a chevron indicator on the right edge.

**`checkbox` / `radio`** — 18×18 square (checkbox) or circle (radio), 1px `#c8ccd0` hairline. Active state fills ink with a white checkmark or dot.

**`color-swatch`** — 32×32 circular swatch with 1px `#e6e8eb` hairline. Selected state gets a 2px ink ring with 2px outline-offset.

### Navigation

**`masthead`** — full-width white bar with a thin 1px `#e6e8eb` bottom hairline, 64px height. Wordmark flush left in ink (with the heritage purple appearing only inside the W mark glyph). Search bar centred (~600px wide on desktop). Account / Help / Lists / Cart utilities flush right with thin 14/500 ink labels.

**`utility-bar`** — slim 32px top bar in `#f7f8fa` fill, holding "Free shipping over $35", store locator link, "Help & FAQs" — used to surface evergreen value propositions above the masthead.

**`category-nav`** — full-width band beneath the masthead, white fill, 1px `#e6e8eb` bottom hairline. Department links — "Furniture", "Outdoor", "Decor & Pillows", "Rugs", "Bedding & Bath", "Storage & Organization", "Home Improvement" — in 14/500 ink, with `:hover` triggering the mega-menu flyout.

**`mega-menu-flyout`** — opens from category-nav on hover (with intent delay); white surface, 12px radius, 1px `#e6e8eb` hairline, `rgba(15,17,21,0.08) 0 2px 8px` shadow. Three- or four-column nav of sub-category trees with 14/500 ink labels. Often includes a right-rail "Featured" promotional tile.

**`filter-rail`** — left rail on category pages, 240px wide, canvas ground. Stacked accordion sections (Price, Brand, Material, Color, Size, Customer Rating, Shipping Speed, etc.) with chevron indicators. Each section expands to either a checkbox list or a chip cluster. "Show all" link appears when a list exceeds 6 items.

**`breadcrumb`** — `Furniture > Living Room > Sofas > Sectional Sofas` in 13/400 muted (`#555555`) with `>` separators. Last segment renders in ink.

### Star Rating

**`star-rating`** — 5-icon row, fill `#0a0a0a` for filled, `#e6e8eb` for empty. Half-stars rendered with clipped half-fill. Followed by review count in 13/400 with an underlined ink link: "4.5 (1,247)".

### Modals & Toasts

**`modal`** — centred dialog over a 50%-opacity ink scrim. White surface, 12px radius (matches cards), 1px `#e6e8eb` border, modal shadow. Close X anchored top-right in 16/500 ink.

**`toast`** — bottom-centre notifications. Ink fill (`#0a0a0a`), white text in 14/500, 8px radius, 12×16px padding. Save and cart actions trigger a 3-second toast.

**`drawer`** — mobile filter and cart drawer slides from left (filter) or right (cart). White surface, no radius (edge-to-edge), 280–360px wide depending on context.

## 5. Layout Principles

### Spacing System

- Base unit: **4px**
- Scale: `0 · 4 · 8 · 12 · 16 · 20 · 24 · 32 · 40 · 48 · 64 · 80 · 96`
- Section padding (vertical): **64–96px** between major bands at desktop — Wayfair leans into editorial breath
- Card internal padding: **0px** for the canonical edge-to-edge product card (label sits beneath the image on the canvas); **12px** for framed variant; **24px** for PDP buy box; **40–64px** for promo card overlay copy
- Gutters: **16–20px** between product tiles in grid view; **80–96px** between major page bands; **8px** between adjacent CTAs in the buy-box stack

### Grid & Container

- Max content width: **1280px** centred (narrower than Target's 1408px — Wayfair runs a tighter editorial column)
- Homepage: 3-column promo card grid at desktop with featured cards spanning 2 columns; hero band full-bleed
- Category pages: **240px left filter rail + 4-column product grid** at desktop, dropping to 5-column at the 1536px wide breakpoint
- PDP: 2-column with image gallery left (~58%), buy box right (~38%) with a 4% gutter; specs, reviews, related-items stack full-width below
- Footer: 5-column link list at desktop with newsletter signup band above and a slim copyright + payment-icons row below

### Whitespace Philosophy

Wayfair gives every section significant breathing room — 80–96px between major bands at desktop. The page reads as **editorial catalogue**, closer to a printed Crate & Barrel mailer than a discount-retail circular. Inside each band, the grid is dense by retail standards — 4 product tiles per row at desktop — but the tiles themselves carry no border and no internal padding, so the photography breathes against the canvas instead of being boxed in.

### Section Cadence

A typical category page reads top-to-bottom: utility bar → masthead → category-nav → breadcrumb → page H1 + result count → sort/view-toggle row → two-column (filter rail + product grid) → footer. Homepage adds a hero band, a "Shop by category" tile grid, a "Trending now" product carousel, a Way-Day promo band (when active), an editorial "Inspired by your style" lifestyle band, and a "Recently viewed" rail.

The brand alternates between **canvas bands** (default body, product grids, filter rails) and **photographic bands** (lifestyle hero, room-inspiration tiles, promo cards). The page never uses a coloured ground — all colour comes from the photography itself. The only ever-coloured surface is the promo-yellow band that appears during Way Day.

## 6. Shapes & Radius Scale

| Tier | Value | Use |
|------|-------|-----|
| Micro | 2px | Dense table corners, tight micro-badges |
| Small | 4px | Deal tags, savings callouts, helper boxes |
| Standard | 8px | Buttons, inputs, small chips — Wayfair's default radius |
| Comfortable | 12px | Product cards, modals, dropdowns, mega-menu — the "card" radius |
| Featured | 16px | Hero promo cards, larger feature cards |
| Pill | 9999px | Filter chips, save-heart hit area, status pills, bestseller badges |

The **square-shoulder 8px CTA** is the signature Wayfair shape — a deliberate departure from the pill discipline of Target, Walmart, and Amazon. Pills survive only on filters, status, and the save heart. Cards round consistently at 12px; there are no compound radii or asymmetric rounding. The 16px featured radius appears only on full-bleed promo cards and lifestyle tiles.

## 7. Depth & Elevation

| Level | Treatment | Use |
|-------|-----------|-----|
| 0 — Flat | no shadow | Body, masthead, footer, filter rail, all editorial bands (~92% of surfaces) |
| 1 — Hover Card | `rgba(15,17,21,0.06) 0 4px 16px` | Product tiles on hover, framed card variant |
| 2 — Dropdown | `rgba(15,17,21,0.08) 0 2px 8px` | Mega-menu, account dropdown, sort dropdown |
| 3 — Modal | `rgba(15,17,21,0.12) 0 12px 32px` | Centred dialogs, sticky drawer entry |
| 4 — Scrim | `rgba(0,0,0,0.5)` | Modal and drawer backdrop |

### Shadow Philosophy

Wayfair stays mostly flat. The hover-card lift is a single-layer drop at 6% black, slightly cool-tinted (`rgba(15,17,21,...)` rather than `rgba(0,0,0,...)`) to harmonise with the canvas's faint cool cast. Depth comes from **photographic contrast** inside the product imagery and **soft-grey surface separation** (`#fafbfc` canvas vs `#f7f8fa` search bar vs `#ffffff` modal) rather than from layered shadows. The brand position: stacked shadows distract from photography.

## 8. Interaction & Motion

### Easing
- **Standard**: `cubic-bezier(0.4, 0, 0.2, 1)` — default for hover, focus, colour swaps
- **Emphasized**: `cubic-bezier(0.2, 0, 0, 1)` — modal entry, mega-menu flyout, drawer slide
- **Decelerate**: `cubic-bezier(0, 0, 0.2, 1)` — toast entry, image crossfade
- **Spring (save heart)**: `cubic-bezier(0.34, 1.56, 0.64, 1)` — the one spring in the system, used only for the save-heart pop

### Durations
| Bucket | Value | Use |
|--------|-------|-----|
| Fast | 150ms | Hover colour swap, focus ring fade-in, filter-chip toggle |
| Standard | 240ms | Card hover lift + image scale, modal enter |
| Slow | 320ms | Hero carousel slide, drawer slide, page transitions |
| Spring | 280ms | Save-heart pop |

### Per-Component Recipes

- **CTA hover**: background transitions from `#0a0a0a` to `#000000` over 150ms. No transform.
- **CTA press**: lifts to `#222222` for 100ms on `:active`, then settles.
- **Product card hover**: shadow (`rgba(15,17,21,0.06) 0 4px 16px`) crossfades in over 200ms and the inner image scales 1.0 → 1.03 inside its 12px rounded clip over 240ms — the "this tile is alive" cue.
- **Save-heart toggle**: heart fills red and pops 1.0 → 1.2 → 1.0 over 280ms with the spring easing — the only animated celebration in the system.
- **Filter-chip toggle**: background and text colours crossfade over 150ms (white → ink fill, ink → white text). No transform.
- **Search-bar focus**: 2px ink ring fades in over 200ms; fill brightens from `#f7f8fa` to `#ffffff` simultaneously.
- **Mega-menu flyout**: 240ms ease-out fade + 4px slide-down from the category-nav with a 100ms intent delay.
- **Hero carousel**: auto-advance every 7s with 320ms ease-out slide, pause-on-hover.
- **Modal enter**: scrim fades in over 200ms, then dialog translates from `translateY(8px) opacity(0)` to `0/1` over 240ms emphasized.
- **Mobile filter drawer**: slides in from left over 280ms emphasized easing with scrim crossfade.
- **Toast enter**: slides up 16px from below with opacity fade over 200ms decelerate; auto-dismisses after 3000ms.

### Page Transitions

Page-to-page navigation uses no transition — Wayfair prioritises perceived speed, especially on the heavy category-to-PDP path. The browser back/forward animations remain native.

### Reduced Motion

Respects `prefers-reduced-motion: reduce`. Image scale on card hover suppresses (only shadow remains). Save-heart pop degrades to a static colour swap. Hero carousel auto-advance pauses. Drawer slide and modal slide both degrade to opacity-only crossfade. Filter-chip toggles, focus ring fade, and colour transitions remain because they communicate state rather than decoration.

## 9. Accessibility & A11y

### Contrast Pairs

| Pair | Ratio | Level |
|------|-------|-------|
| #0a0a0a ink on #fafbfc canvas | 19.4 | AAA |
| #ffffff on #0a0a0a CTA | 19.1 | AAA |
| #555555 muted on #fafbfc | 7.7 | AAA |
| #777777 soft on #fafbfc | 4.9 | AA |
| #0a0a0a on #f7f8fa search-bar fill | 18.6 | AAA |
| #1a7f3c success on #fafbfc | 5.0 | AA |
| #c81e1e danger on #fafbfc | 5.6 | AA |
| #0a0a0a on #f5d342 promo yellow | 16.4 | AAA |
| #ffffff on #cc1c1c save heart | 4.7 | AA large |

### Focus Indicators

Focus ring is **2px solid `#0a0a0a`** (ink) with 2px outline-offset. Every focusable element gains the ink ring on `:focus-visible`. The ring uses the same hex as the brand and the body text — chromatically unified rather than a separate accent. On the white-on-canvas page, an ink ring at 19:1 contrast is unmistakable.

### ARIA Patterns

- **Search bar**: `role="search"`. Input has `aria-label="Find anything home"`.
- **Product card**: entire tile wrapped in `<a>` with verbose `aria-label` — "Tribesigns 3-piece sectional sofa, charcoal, 4.5 stars, 1,247 reviews, $429, was $499, free shipping".
- **Save heart**: `<button>` with `aria-label="Save to my favorites"` toggling to `aria-pressed="true"` and `aria-label="Saved — remove from my favorites"`.
- **Star rating**: text-equivalent (`aria-label="4.5 out of 5 stars, 1,247 reviews"`).
- **Filter chip**: `role="checkbox"` with `aria-checked` state.
- **Filter accordion**: each section is a `<button aria-expanded>` controlling a `<div role="region">`.
- **Mega-menu flyout**: `role="menu"` with `role="menuitem"`; arrow keys navigate, Escape closes.
- **PDP variant pickers**: color swatches are `role="radio"` inside a `role="radiogroup" aria-label="Color"`.
- **Cart toast**: `role="status"` with `aria-live="polite"`.

### Keyboard Navigation

- Utility bar → logo → search → category nav → breadcrumb → filter rail → product grid → footer
- Inside filter rail: Tab moves between accordion buttons; Enter/Space toggles; arrow keys navigate within an open accordion
- Inside the product grid: Tab moves tile-by-tile in document order; Enter activates the tile link
- PDP: Tab through gallery → variant pickers → quantity → Add to Cart → Save → reviews
- Mega-menu: hover-or-Enter opens; arrow keys navigate; Esc closes; Tab moves to the next category

### Screen Reader Hints

Verbose `aria-label` on all icon-only buttons. The cart icon reads "Cart, 3 items". The hamburger reads "Open menu". The save-heart toggles between "Save" and "Saved" semantically. The compare-add toggle reads "Add to compare — 2 of 4 selected".

### Reduced Motion

All transitions degrade to opacity-only. Card image scale and save-heart pop suppress. Hero carousel auto-advance pauses. Drawer and modal slides degrade to crossfade.

## 10. Responsive Behavior

### Breakpoints

| Name | Width | Key Changes |
|------|-------|-------------|
| Mobile | <640px | Masthead collapses to logo + cart + hamburger; search moves to its own row beneath; product grid 2-up; filter rail becomes a slide-in drawer triggered by a sticky bottom "Filters" button; PDP buy-box stacks beneath gallery |
| Tablet | 640–1024px | Full masthead with search; product grid 3-up; filter rail collapses to a horizontal scroll of top filters with a "More filters" drawer |
| Desktop | 1024–1280px | Filter rail expands to 240px left rail; product grid 4-up; mega-menu hover-active |
| Wide | 1280–1536px | Content caps at 1280px; product grid 5-up at the widest variant |

### Touch Targets

- Primary CTAs: 44px height — meets AA, comfortable for thumb tap
- Search bar: 44px height with 44×44 magnifier hit area
- Save heart: 36×36 visual with 44×44 hit area extending beyond the visible circle
- Filter chip: 32px visual with 44px vertical hit area (the rest is padding)
- Product tile: entire tile is tappable (no nested links inside the tile body)
- Quantity stepper: 36×36 buttons — borderline AA, compensated by 8px inner padding

### Collapsing Strategy

- Utility bar: hides at <1024px
- Masthead: utilities (account, help, lists) collapse into hamburger first; only logo + cart + hamburger remain at <640px
- Search bar: jumps from inline to its own row beneath the masthead at <1024px
- Category nav: collapses into the hamburger drawer at <1024px
- Filter rail: full left rail → horizontal scroll of top filters → "Filters" drawer button at progressively smaller breakpoints
- Product grid: column count drops 5 → 4 → 3 → 2; gutters compress from 20px to 16px to 12px
- PDP: 2-column splits to single-column stack at <1024px; buy-box becomes a sticky bottom bar with collapsed price + Add to Cart

### Image Behavior

Product thumbnails use `aspect-ratio: 4/5` or `1/1` with `object-fit: cover` — Wayfair prefers `cover` because lifestyle photography is composed full-frame. PDP gallery uses pinch-to-zoom on mobile and a magnifier-on-hover at desktop, with 6–12 product images plus 360° spin views on furniture categories.

### Container Queries

Used inside the PDP buy-box: when the right rail narrows below ~340px, variant-picker chips wrap into a vertical stack, and the Add-to-Cart label drops the secondary line ("Free shipping & returns") into a separate row beneath the button.

## 11. Content & Voice

### Tone

Helpful, aspirational, practical — the brand voice is "the friend with great taste who knows you have a budget." Wayfair's positioning anchor — *"A zillion things home"* — captures the breadth ambition. Headlines lean encouraging without being precious: "You've got this", "Designed for real life", "Make every room feel like home". The voice avoids both luxury-magazine reverence and discount-retail pressure.

### Microcopy Patterns

- **Button verbs**: "Add to Cart", "Buy It Now", "Save for Later", "Compare", "View All" — direct and outcome-named
- **Search placeholder**: "Find anything home..." — names the category and the breadth in five words
- **Error message recipe**: `[What went wrong] + [How to fix]` — e.g., "We couldn't find that ZIP code. Try again with a 5-digit US ZIP."
- **Success confirmations**: "Added to cart", "Saved!", "Order placed" — short, outcome-named
- **Field labels**: short and practical — "ZIP code", "Email", "Promo code"
- **Stock urgency**: "Only 3 left in stock" — names the count without panic
- **Shipping ETA**: "Get it by Thu, May 28" — names the specific weekday and date

### Empty States

**Empty cart**: "Your cart is empty. Let's find something you'll love." with a CTA back to the homepage.

**Empty favorites**: "Save items by tapping the heart. They'll show up here for later." — instructive + names the gesture.

**Empty search**: "No results for [query]. Try different keywords or browse by category." — names cause + alternative.

**Empty filter result**: "No items match all your filters. Try removing a filter or two." — names the cause directly.

**Empty orders**: "You haven't placed any orders yet. Start exploring." — friendly, no shame.

### CTA Verb Conventions

- Primary: **"Add to Cart"** (default), **"Buy It Now"** (express checkout), **"Sign In"**, **"Continue"**
- Save: **"Save for Later"** (in cart), the heart icon for the wishlist gesture (Wayfair calls the saved list "My Favorites")
- Tertiary: **"View Details"**, **"See All Reviews"**, **"Compare"**, **"Show More"**
- Membership: **"Join Wayfair Rewards"** — names the program explicitly
- Avoided: "Submit", "Click here", "Buy now" alone (Wayfair prefers "Add to Cart" → checkout for considered purchases; "Buy It Now" reserved for express-checkout consumables)

## 12. Dark Mode & Theming

**Light-only across storefront.** Wayfair.com is light-only on both web and the mobile app. The brand position: the entire chromatic system depends on the near-white canvas as a stage for photographic product imagery, and product photos are colour-graded for warm-white viewing. A dark variant would require re-grading the entire product catalogue, which the brand has chosen not to do.

The faintly-darker `#f7f8fa` and `#f4f5f7` surfaces (search bar, alt rows, filter rail) are the closest the brand comes to surface variation — they read as subtle paper variation, not as dark mode.

## 13. Lineage & Influences

Wayfair's visual lineage runs through three traditions: **mid-century furniture-catalogue editorial** (Crate & Barrel, West Elm, Pottery Barn — the printed-catalogue aesthetic of styled rooms, generous white space, photographic discipline, and ink-on-cream typography); **IKEA's grid-based product encyclopedia** (the relentless 4-up grid, the photographic uniformity across thousands of SKUs, the practical-not-precious tone); and **Pinterest's save-and-curate gesture** (the heart icon, the "My Favorites" board, the implicit assumption that home shopping is collected before it is purchased).

The brand has spent the last decade walking away from its early-2010s purple-and-yellow promotional energy toward this calmer, structured aesthetic. The 2018 visual refresh that introduced the `Mier B` custom sans and standardised the near-white canvas was the inflection point — before then Wayfair read as a louder, more discount-flavoured marketplace; after, it reads as the JCrew or Crate & Barrel of online home goods.

What Wayfair rejects: dense badge clutter (the Amazon problem), saturated promotional colour as a daily UI surface (its own former self), handmade-craft aesthetics (the Etsy lane), luxury-magazine reverence (the RH or 1stDibs lane), and dark mode. The brand position is **calm, structured middle-market discovery** — practical enough to sell a $99 rug, polished enough to sell a $2,400 sectional, never apologising for either price point.

**Influences:**
- Target — peer big-box retailer with parallel chromatic restraint and photographic discipline, [target.com](https://www.target.com)
- IKEA — grid-based product encyclopedia and photographic uniformity, [ikea.com](https://www.ikea.com)
- Crate & Barrel — mid-century catalogue editorial and styled-room photography, [crateandbarrel.com](https://www.crateandbarrel.com)
- West Elm — millennial-modern home retail tone and lifestyle-led product imagery, [westelm.com](https://www.westelm.com)
- Pinterest — the save-heart gesture and curated-board behaviour, [pinterest.com](https://www.pinterest.com)
- Etsy — long-tail marketplace structure and discovery patterns, [etsy.com](https://www.etsy.com)

## 14. Do's and Don'ts

**Do**
- Anchor the brand on ink near-black (`#0a0a0a`) for the wordmark, every primary CTA, ratings, and savings tags
- Use the near-white canvas (`#fafbfc`) deliberately — one shade off pure white gives photography off-canvas warmth
- Round CTAs at 8px (square-shoulder, not pill) — pills are reserved for filters, status, and save
- Round product cards at 12px with **no border and no internal padding** — image edge-to-edge against canvas
- Anchor the Save heart top-right on every product card, with a Bestseller badge anchored top-left when relevant
- Render star ratings in ink on grey — never yellow or gold
- Use `Mier B` (Inter is an acceptable substitute) at semibold (600) for buttons, not bold (700)
- Lean into 64–96px vertical section padding — editorial breath
- Use `object-fit: cover` on product thumbnails (lifestyle styled-room photography, not white seamless)
- Underline every inline link — because links match ink, the underline is the only way to disambiguate
- Use tabular numerals (`tnum`) on every price, savings tag, and rating
- Render "FREE shipping" as inline green text — no surface, no border

**Don't**
- Don't render CTAs as 9999px pills — Wayfair is square-shoulder. Pills belong to filters and status, not commitments
- Don't surface the heritage purple (`#7B189F`) in UI — it survives only in the wordmark seal
- Don't use the promo yellow (`#f5d342`) outside Way Day or Cyber Week — saturated colour as everyday surface breaks the brand
- Don't add visible borders to default product cards — the canonical card is edge-to-edge image-against-canvas
- Don't use yellow or gold for star ratings — ink on grey, always
- Don't use the save-heart red (`#cc1c1c`) for anything else — it is reserved for the saved-item state
- Don't pad the canonical product card internally — the label sits on the canvas beneath the image, not inside a frame
- Don't add multi-layer atmospheric shadows — Wayfair is single-layer flat
- Don't substitute a different serif for Mier B — the brand reads structured-humanist-sans, not editorial-serif
- Don't use exclamation marks gratuitously — the voice is helpful, not giddy
- Don't centre the page above 1280px — the editorial column stays narrower than mass-market peers
- Don't tighten section padding below 64px — the breath is part of the brand

## 15. Agent Prompt Guide

### Quick Color Reference

```
Canvas:         #fafbfc
Page White:     #ffffff
Ink:            #0a0a0a
Brand Hover:    #000000
Muted:          #555555
Soft:           #777777
Border Soft:    #e6e8eb
Search Fill:    #f7f8fa
Success Green:  #1a7f3c
Save Red:       #cc1c1c
Promo Yellow:   #f5d342  (Way Day only)
```

### Example Component Prompts

- "Create a Wayfair-style Add to Cart button: a 44px-tall square-shoulder rectangle (8px radius — not a pill) with ink-black (`#0a0a0a`) fill, white text in Mier B 15/600, 12×20px padding. Hover deepens to pure black `#000000`."
- "Build a Wayfair masthead: full-width white bar with a 1px `#e6e8eb` bottom hairline, 64px tall. Wordmark flush left in `#0a0a0a` (with the heritage purple `#7B189F` inside the W glyph only). Search bar centred (~600px wide, 44px tall, 8px radius, soft-grey `#f7f8fa` fill with a 1px hairline border, magnifier icon on the left edge, placeholder 'Find anything home...'). Account / Help / Lists / Cart utilities flush right in Mier B 14/500 ink. Add a 32px utility bar above with 'Free shipping over $35' in soft-grey ground."
- "Design a Wayfair product card: edge-to-edge image-led tile with no border and no internal padding. 4:5 aspect lifestyle product photo at 12px radius. Beneath the image (on the canvas, not inside a frame): product title in Mier B 16/500 ink clamped to 2 lines, optional brand line in 13/400 muted, 5-star row (ink fill, `#e6e8eb` empty) + review count in 13/400 with an underlined ink link, current price in 18/700 with `tnum`, optional strikethrough original price in 14/400 muted, optional red `$70 off` save line, 'FREE shipping' inline green text. Anchor a 36×36 circular Save heart top-right (semi-transparent white background, ink outline empty, fills red `#cc1c1c` with a 1.0 → 1.2 → 1.0 pop). Anchor an optional 'BESTSELLER' ink pill badge top-left."
- "Build a Wayfair category page hero: full-bleed 1280px-wide lifestyle room shot (e.g., a sunlit living room with a sectional and a brass floor lamp). Copy in Mier B 56/700 with -0.02em tracking sits in the lower-left third — 'Outdoor, redefined' — followed by an 8px square-shoulder ink CTA: 'Shop Outdoor'. No scrim, no overlay tint — the photographer composed the empty third for the overlay."
- "Design a Wayfair filter rail: 240px wide left rail on canvas ground. Stacked accordion sections (Price, Brand, Material, Color, Customer Rating, Shipping Speed) with chevron indicators. Each section header in Mier B 14/500 ink. Expanded content shows either a checkbox list (1px `#c8ccd0` outline, ink-fill when checked) or a chip cluster (32px-tall pills, 9999px radius, white fill with 1px `#e6e8eb` hairline, ink-fill with white text when active). 'Show all' link in 13/500 underlined ink when a list exceeds 6 items."
- "Create a Wayfair PDP buy-box: white surface, 12px radius, 1px `#e6e8eb` border, 24px padding, sticky to the right rail. Stack: large `price-display` (32/700 with `tnum` — `$429`). Strikethrough `$499` in 14/400 muted. Red `$70 off` save line in 14/600. Color swatch row (32×32 circles with 1px hairline, 2px ink ring when selected). Size dropdown. Material radio group. Quantity stepper (36×36 buttons). Full-width ink Add to Cart CTA (44px, 8px radius, white text 15/600). Outline 'Save for Later' ghost beneath. 'Free shipping & free returns' inline green line. 'Get it by Thu, May 28' delivery estimate in 14/400 muted."

### Iteration Guide

1. **Square-shoulder, not pill.** If your CTA is rounding at 9999px, you're building Target or Walmart. Wayfair commits at 8px.
2. **Edge-to-edge cards.** If your product card has a visible border or internal padding around the image, you're building the framed variant. The canonical card is image-against-canvas with the label on the canvas beneath.
3. **Ink rating stars, never yellow.** Yellow stars read as Amazon. Wayfair stars are `#0a0a0a` on `#e6e8eb` — quiet and editorial.
4. **Save heart, top-right.** Every product card. Empty ink outline; fills red when saved. The pop animation is the only celebratory motion in the system.
5. **64–96px vertical padding.** If your sections feel cramped, they are. Wayfair trusts breath the way a printed catalogue trusts margins.
6. **Tabular numerals on every price.** `$429` and `$1,249` align right-edge in the grid; if your prices wobble, you forgot `font-feature-settings: 'tnum'`.
7. **Underline every link.** Because inline links match ink (`#0a0a0a` on `#fafbfc`), the underline is the only way to disambiguate from running text.
8. **Photography is the colour.** If your category page feels weak, the answer is better room-and-product photography, not a louder layout or a saturated accent.
