---
version: alpha
name: Sonos
description: Light design system extracted from www.sonos.com (DOM-true values, Emblematic extractor 0.2.0, 2026-11-12).
colors:
  background: "#FFFFFF"
  on-surface: "#000000"
  on-surface-variant: "#2E2E2E"
  color-4: "#4CA16F"
  greymediumlight: "#BFBFBF"
  greylightest: "#F5F5F5"
typography:
  display-lg:
    fontFamily: Aktiv Grotesk
    fontSize: 96px
    fontWeight: 500
    lineHeight: 1.2
  headline-md:
    fontFamily: Aktiv Grotesk
    fontSize: 42px
    fontWeight: 500
    lineHeight: 1
  title-md:
    fontFamily: Aktiv Grotesk
    fontSize: 64px
    fontWeight: 500
    lineHeight: 1.2
  body-md:
    fontFamily: Aktiv Grotesk
    fontSize: 21px
    fontWeight: 400
    lineHeight: 1.3
  body-sm:
    fontFamily: Aktiv Grotesk
    fontSize: 18px
    fontWeight: 400
    lineHeight: 1.4
  label-md:
    fontFamily: Aktiv Grotesk
    fontSize: 16px
    fontWeight: 400
rounded:
  sm: 10px
  md: 20px
  lg: 51px
  full: 9999px
spacing:
  xxs: 4px
  xs: 6px
  sm: 8px
  md: 12px
  lg: 16px
  xl: 20px
  2xl: 24px
  3xl: 48px
  4xl: 53.5px
  5xl: 56px
  6xl: 80px
  7xl: 106.5px
  8xl: 112px
  base: 8px
  container: 1227px
components:
  button-secondary:
    textColor: "{colors.on-surface}"
    rounded: "{rounded.full}"
    padding: 16px
    height: 59.4px
    typography: "{typography.label-md}"
  card:
    rounded: "{rounded.md}"
    padding: 0px
  input:
    rounded: 0px
    padding: 0px
    height: 30px
---

# Sonos

> Extracted from [https://www.sonos.com/en-gb/home](https://www.sonos.com/en-gb/home) on 2026-11-12 by Emblematic. Every value below was read from the rendered DOM (computed styles, `document.fonts`, and the fonts Chrome actually used to paint text), not estimated from pixels. When the YAML front matter and this prose disagree, the YAML wins. Copy values from this file exactly; don't transcribe them from memory. Don't copy logos, imagery, illustrations or marketing copy.

## Overview

Sonos uses a light canvas (#FFFFFF) with a monochrome palette. Type is set in **Aktiv Grotesk** (display + body), with 21px body text. Layout: 1227px container, top-sticky+transparent navigation, 12 sections. Built with next.js, tailwind, google-tag-manager, vercel.

## Colors

Area-weighted from painted backgrounds, text and borders on the 1440px light capture. Roles are inferred from usage (largest background, most text, interactive fills). Every hex is an exact computed value; a role marked *unverified* is a best guess that has not passed review, so its canonical token (e.g. `primary`) is left out of the front matter.

| Token | Hex | OKLCH | Role | Share of paint | CSS variable |
|---|---|---|---|---|---|
| `background` | `#FFFFFF` | 1 0 0 | bg | 50.3% | `--color-base` |
| `on-surface` | `#000000` | 0 0 0 | text | 25.3% | `--color-main` |
| `on-surface-variant` | `#2E2E2E` | 0.301 0 0 | muted | 18.6% | `--color-grayDarkest` |
| `color-4` | `#4CA16F` | 0.642 0.112 155.6 | other | 3.9% | — |
| `greymediumlight` | `#BFBFBF` | 0.805 0 0 | other | 1.0% | `--color-greyMediumLight` |
| `greylightest` | `#F5F5F5` | 0.97 0 0 | other | 0.77% | `--color-greyLightest` |

Declared brand/accent tokens: `--color-accentRed` = `#DE8579` (declared, not painted on this page), `--color-accentGold` = `#C59C6E` (declared, not painted on this page).

Contrast: text on background 21:1, muted text 13.58:1.

Gradients in use: `linear-gradient(270deg, rgb(255, 255, 255) 0px, rgba(255, 255, 255, 0))`; `linear-gradient(90deg, rgb(255, 255, 255) 0px, rgba(255, 255, 255, 0))`.

The site does not change under `prefers-color-scheme: dark`.

## Typography

| Family | Role | Weights | Share of text | Source |
|---|---|---|---|---|
| **Aktiv Grotesk** (CSS: `aktiv-grotesk`) | display, body | 400, 500, 700 | 100.0% | webfont |

Scale (px): 14, 16, 18, 21, 40, 42, 48, 64, 72, 96. Effective ratio ≈ 1.288 (close to a major third). Body 21px at line-height 1.3; display 96px with tracking 0em. Headings are sentence case. On a 390px viewport the body is 16px and display 54px.

## Layout

Spacing follows a 8px base unit; the most used steps are 4, 6, 8, 12, 16, 20, 24, 48, 53.5, 56, 80, 106.5, 112px. Sections open with about 134px of space before their first line of text. Content sits in a 1227px container on a 6-column grid. Text density 0.096 (text area / page area).

Section order (desktop). Kinds below the review threshold are shown as *section*:

1. **nav** (112px, bg #FFFFFF)
2. **hero** — “Get your head in the holidays” (675px, bg #FFFFFF)
3. **section** (478px, bg #FFFFFF)
4. **section** (712px, bg #4CA16F)
5. **section** — “Hear how sound should sound” (2420px, bg #FFFFFF)
6. **logos** — “Play your way” (2495px, bg #FFFFFF)
7. **testimonials** — “The whole-home sound system” (1666px, bg #FFFFFF)
8. **testimonials** — “Stream everything you love” (1557px, bg #000000)
9. **testimonials** — “Control it all like magic” (900px, bg #000000)
10. **testimonials** — “Start your system” (779px, bg #FFFFFF)
11. **newsletter** — “Never miss a beat or an offer” (354px, bg #2E2E2E)
12. **footer** (714px, bg #2E2E2E)

## Elevation & Depth

Style: subtle. Most used shadows:

- `rgba(0, 0, 0, 0.627) 0px 0px 3px 0px inset, rgb(0, 0, 0) 0px 0px 3px 0px`

## Shapes

Dominant corner radius is a full pill; radii in use: 10px, 20px, 51px, pill. Borders: regular (2px).

## Components

- **button-secondary**: textColor `#000000`, rounded `9999px`, padding `16px 48px`, height `59.4px`, fontFamily `Aktiv Grotesk`, fontSize `18px`, fontWeight `500`, border `2px solid #000000` (e.g. “Build your system”)
- **card**: rounded `20px`, padding `0px`, border `1px solid #E0E0E0`
- **input**: rounded `0px`, height `30px`, padding `0px 0px`, border `1px solid #BFBFBF`

## Do's and Don'ts

- Do keep the palette monochrome; there is no chromatic brand accent on the page.
- Do set body copy in Aktiv Grotesk at 21px / 1.3.
- Don't introduce font weights beyond 400, 500, 700.
- Do keep corners at pill for most controls, and use the larger radii only for cards and media.
- Do snap spacing to multiples of 8px.
- Don't copy this site's logos, illustrations, photography or copy; use the system, not the brand assets.

## Provenance

Spec v2, extractor 0.2.0. Render quality: **ok**. Vision pass: not run. Fields below confidence 0.7 are hedged or left out above: `components`, `layout.columns`, `layout.hero`, `layout.section_count`, `sections[].kind`, `space.section_padding_px`. Full per-field provenance is in `spec.json`.
