Examples

Example design.md

Notion design.md

https://www.notion.com/
Source site

Productivity & SaaS

Notion

notion.com

Extracted pattern
Workspace system with warm minimalism, serif display moments, and soft document-like surfaces.
Best for
Knowledge bases, docs tools, workspace apps, and editorial product surfaces.
design.md
---
version: alpha
name: Notion
description: "Notion is an all-in-one productivity and AI workspace brand whose marketing surface is a crisp white canvas interrupted by a single, purposeful blue — the kind of blue that says 'start here' without shouting. The hero typographic gesture is a 96 px near-black headline with aggressive -1.5 px tracking, set in a custom-cut humanist sans (NotionInter) that reads equally well at display scale and in 14 px sidebar labels. Decorative character: seven illustrated avatar medallions float above the hero text, communicating 'people and agents working together' through charm rather than data visualisation. The only chromatic accent is a soft periwinkle pill wrapping the animated word 'Think', which pulses inside the headline itself — the brand's signature trick of embedding UI inside copy. Surfaces are pure white and off-white; every edge is a 1 px rgba-black hairline at 10 % opacity, never a solid border; every CTA is an 8 px corner-radius blue rectangle, deliberate contrast to the 9999 px pill-shaped ghost buttons that sit beside it."
colors:
  primary: "#0075de"
  primary-active: "#005bab"
  primary-soft: "#e6f3fe"
  primary-muted: "#f2f9ff"
  on-primary: "#ffffff"
  ink: "#000000f2"
  body: "#000000bf"
  mute: "#78736f"
  mute-light: "#a39e98"
  hairline: "#0000001a"
  hairline-strong: "#dfdcd9"
  canvas: "#ffffff"
  canvas-soft: "#f9f9f8"
  card-accent: "#097fe8"
  link: "#0075de"
  success: "#1aae39"
  error: "#dd5b00"
  teal: "#2a9d99"
  purple: "#7237ae"
  purple-deep: "#391c57"
  pink: "#ff64c8"
  alpha-white-400: "#ffffff4d"
  alpha-black-100: "#0000000d"
typography:
  display-xl:
    fontFamily: NotionInter, Inter, -apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif
    fontSize: 96px
    fontWeight: 600
    lineHeight: 100px
    letterSpacing: -1.5px
  display-lg:
    fontFamily: NotionInter, Inter, -apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif
    fontSize: 54px
    fontWeight: 600
    lineHeight: 56px
    letterSpacing: -1.875px
  display-md:
    fontFamily: NotionInter, Inter, -apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif
    fontSize: 36px
    fontWeight: 600
    lineHeight: 40px
    letterSpacing: -0.8px
  display-sm:
    fontFamily: NotionInter, Inter, -apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif
    fontSize: 24px
    fontWeight: 600
    lineHeight: 28px
    letterSpacing: -0.4px
  body-lg:
    fontFamily: NotionInter, Inter, -apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif
    fontSize: 18px
    fontWeight: 400
    lineHeight: 28px
  body-md:
    fontFamily: NotionInter, Inter, -apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif
    fontSize: 16px
    fontWeight: 400
    lineHeight: 24px
  body-md-strong:
    fontFamily: NotionInter, Inter, -apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif
    fontSize: 16px
    fontWeight: 500
    lineHeight: 24px
  body-sm:
    fontFamily: NotionInter, Inter, -apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif
    fontSize: 14px
    fontWeight: 400
    lineHeight: 20px
  body-sm-strong:
    fontFamily: NotionInter, Inter, -apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif
    fontSize: 14px
    fontWeight: 500
    lineHeight: 20px
  caption:
    fontFamily: NotionInter, Inter, -apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif
    fontSize: 12px
    fontWeight: 400
    lineHeight: 16px
  caption-strong:
    fontFamily: NotionInter, Inter, -apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif
    fontSize: 12px
    fontWeight: 600
    lineHeight: 16px
  label-eyebrow:
    fontFamily: NotionInter, Inter, -apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif
    fontSize: 14px
    fontWeight: 600
    lineHeight: 20px
    letterSpacing: 0px
  button-md:
    fontFamily: NotionInter, Inter, -apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif
    fontSize: 14px
    fontWeight: 500
    lineHeight: 20px
  button-lg:
    fontFamily: NotionInter, Inter, -apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif
    fontSize: 16px
    fontWeight: 500
    lineHeight: 24px
rounded:
  none: 0px
  xs: 4px
  sm: 6px
  button: 8px
  card: 12px
  lg: 16px
  xl: 24px
  pill: 9999px
  full: 9999px
spacing:
  xxs: 4px
  xs: 6px
  sm: 8px
  md: 12px
  lg: 16px
  xl: 24px
  2xl: 32px
  3xl: 48px
  4xl: 64px
  5xl: 96px
  6xl: 128px
  section: 192px
components:
  nav-bar:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.body-sm}"
    height: 64px
    padding: "{spacing.sm} {spacing.xl}"
    borderBottom: 1px solid {colors.hairline}
  nav-link:
    textColor: "{colors.body}"
    typography: "{typography.body-sm}"
    padding: "{spacing.sm} {spacing.md}"
    rounded: "{rounded.pill}"
  nav-cta-primary:
    backgroundColor: "{colors.primary}"
    textColor: "{colors.on-primary}"
    typography: "{typography.button-lg}"
    rounded: "{rounded.button}"
    padding: "{spacing.xs} {spacing.lg}"
    height: 36px
  nav-cta-login:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.body-sm}"
    rounded: "{rounded.button}"
    padding: "{spacing.sm} {spacing.lg}"
  button-primary:
    backgroundColor: "{colors.primary}"
    textColor: "{colors.on-primary}"
    typography: "{typography.button-lg}"
    rounded: "{rounded.button}"
    padding: "{spacing.xs} {spacing.lg}"
  button-primary-active:
    backgroundColor: "{colors.primary-active}"
    textColor: "{colors.on-primary}"
    typography: "{typography.button-lg}"
    rounded: "{rounded.button}"
    padding: "{spacing.xs} {spacing.lg}"
  button-ghost:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.button-md}"
    rounded: "{rounded.button}"
    padding: "{spacing.sm} {spacing.lg}"
    border: 1px solid {colors.hairline}
  button-ghost-pill:
    backgroundColor: transparent
    textColor: "{colors.ink}"
    typography: "{typography.button-md}"
    rounded: "{rounded.button}"
    padding: "{spacing.sm} {spacing.lg}"
    border: 1px solid {colors.hairline}
  hero-band:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.display-xl}"
    padding: "{spacing.4xl} {spacing.xl}"
  hero-inline-pill:
    backgroundColor: "{colors.primary-muted}"
    textColor: "{colors.primary}"
    typography: "{typography.display-xl}"
    rounded: "{rounded.pill}"
    padding: "{spacing.xs} {spacing.xl}"
  avatar-medallion:
    backgroundColor: "{colors.canvas}"
    borderColor: "{colors.hairline}"
    rounded: "{rounded.full}"
    size: 64px
  card-feature:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.body-md}"
    rounded: "{rounded.card}"
    padding: "{spacing.xl}"
    border: 1px solid {colors.hairline}
  card-soft:
    backgroundColor: "{colors.canvas-soft}"
    textColor: "{colors.ink}"
    typography: "{typography.body-md}"
    rounded: "{rounded.card}"
    padding: "{spacing.xl}"
    border: 1px solid {colors.hairline}
  logo-strip:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.mute}"
    typography: "{typography.body-sm}"
    padding: "{spacing.lg} {spacing.xl}"
  form-input:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    borderColor: "{colors.hairline}"
    typography: "{typography.body-md}"
    rounded: "{rounded.button}"
    padding: "{spacing.xs} {spacing.lg}"
    height: 40px
  badge-soft:
    backgroundColor: "{colors.primary-soft}"
    textColor: "{colors.primary}"
    typography: "{typography.caption-strong}"
    rounded: "{rounded.pill}"
    padding: "{spacing.xxs} {spacing.sm}"
  footer:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.mute}"
    typography: "{typography.body-sm}"
    padding: "{spacing.4xl} {spacing.xl}"
    borderTop: 1px solid {colors.hairline}
  link-inline:
    textColor: "{colors.primary}"
    typography: "{typography.body-md}"
  section-band:
    backgroundColor: "{colors.canvas-soft}"
    textColor: "{colors.ink}"
    typography: "{typography.display-lg}"
    padding: "{spacing.5xl} {spacing.xl}"
  ex-pricing-tier:
    description: Default pricing tier card on canvas with hairline border.
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    borderColor: "{colors.hairline}"
    rounded: "{rounded.card}"
    padding: "{spacing.xl}"
  ex-pricing-tier-featured:
    description: Featured pricing tier — polarity-flipped to primary blue surface with white text.
    backgroundColor: "{colors.primary}"
    textColor: "{colors.on-primary}"
    rounded: "{rounded.card}"
    padding: "{spacing.xl}"
  ex-product-selector:
    description: Feature summary card on canvas-soft — used for AI / Teams / Enterprise tiers.
    backgroundColor: "{colors.canvas-soft}"
    rounded: "{rounded.card}"
    padding: "{spacing.xl}"
  ex-cart-drawer:
    description: Subscription summary panel — line items per add-on.
    backgroundColor: "{colors.canvas}"
    rounded: "{rounded.card}"
    padding: "{spacing.xl}"
    item-divider: "{colors.hairline}"
  ex-app-shell-row:
    description: Sidebar nav row. Active state uses primary blue as left-edge indicator.
    backgroundColor: "{colors.canvas}"
    activeIndicator: "{colors.primary}"
    rounded: "{rounded.sm}"
    padding: "{spacing.xxs} {spacing.sm}"
  ex-data-table-cell:
    description: Table chrome — header uses caption-strong uppercase; body uses body-sm.
    headerBackground: "{colors.canvas-soft}"
    headerTypography: "{typography.caption-strong}"
    bodyTypography: "{typography.body-sm}"
    cellPadding: "{spacing.sm} {spacing.lg}"
    rowBorder: "{colors.hairline}"
  ex-auth-form-card:
    description: Sign-in / sign-up card. Mirrors card-feature chrome with form-input primitives.
    backgroundColor: "{colors.canvas}"
    rounded: "{rounded.card}"
    padding: "{spacing.xl}"
  ex-modal-card:
    description: Modal dialog surface — card-feature chrome with elevated shadow.
    backgroundColor: "{colors.canvas}"
    rounded: "{rounded.card}"
    padding: "{spacing.xl}"
  ex-empty-state-card:
    description: Empty-state frame — generous padding on canvas-soft.
    backgroundColor: "{colors.canvas-soft}"
    rounded: "{rounded.card}"
    padding: "{spacing.3xl}"
    captionTypography: "{typography.body-md}"
  ex-toast:
    description: Toast notification — card-feature chrome, compact padding.
    backgroundColor: "{colors.canvas}"
    rounded: "{rounded.card}"
    padding: "{spacing.sm} {spacing.lg}"
    typography: "{typography.body-sm}"
---
## Overview

Notion's marketing surface is among the most restrained in the productivity software category — and it earns that restraint. The page is a pure white field with a single chromatic voice: a precise royal blue (`{colors.primary}` `#0075de`) that carries every conversion action from the nav CTA to the hero button. Nothing else competes with it. The muted gray palette (`{colors.mute}`, `{colors.mute-light}`) handles supporting text and decorative chrome; the hairline border (`{colors.hairline}`, 10% black alpha) handles every card edge and input stroke without ever reading as a heavy line. The brand's restraint is structural, not accidental.

Typography does most of the expressive work. NotionInter — a custom-tuned variant of Inter — runs the entire system at one face, two weights (400 / 500 / 600), and a display scale that opens at 96 px with -1.5 px tracking. The hero headline is enormous and almost architectural at that size, then immediately drops to a 16 px / 400-weight lead sentence below. The contrast between those two sizes IS the brand's editorial gesture. Negative letter-spacing is mandatory at display sizes; body text tracks neutral. Headlines are sentence-case with period punctuation, matching the brand's calm, direct tone.

The hero's signature moment is the inline animated pill — a soft periwinkle capsule (`{colors.primary-muted}` background, `{colors.primary}` text, `{rounded.pill}` shape) that wraps the rotating word "Think" inside the display-xl headline itself. This is the brand's only decorative trick at hero scale: no full-bleed gradient, no hero illustration, no video — just seven hand-drawn avatar medallions floating above the text and a single embedded UI element inside the copy. The restraint is deliberate and immediately legible as "Notion."

Surfaces cycle between `{colors.canvas}` white and `{colors.canvas-soft}` near-white (#f9f9f8) in alternating bands. Cards live on both surfaces and are always differentiated by a 1 px rgba hairline border — never a filled shadow. The only elevation cue is the card border itself. Button geometry splits into two precise shapes: `{rounded.button}` 8 px corner radius for every primary CTA (blue fill, white text), and `{rounded.pill}` 9999 px for every ghost / secondary action. These two shapes coexist in the same button row and are never swapped.

## Colors

### Brand & Primary
- **Primary Blue** (`{colors.primary}` — `#0075de`): The single conversion color. Appears on the "Get Notion free" nav CTA, the hero button, and all primary interactive elements. Never diluted to a tint for hero decorative use.
- **Primary Active** (`{colors.primary-active}` — `#005bab`): The pressed / focused state for primary buttons. Visible as `--color-button-primary-background-active` and `--color-blue-700` in the token set.
- **Primary Soft** (`{colors.primary-soft}` — `#e6f3fe`): A light sky-blue fill used for soft badge backgrounds, informational callout surfaces, and the hero inline-pill background.
- **Primary Muted** (`{colors.primary-muted}` — `#f2f9ff`): The palest blue surface — the near-white tint used for the hero animated-word pill and hover states on info banners.
- **Card Accent** (`{colors.card-accent}` — `#097fe8`): A slightly brighter mid-blue used as a decorative left-edge accent bar on feature cards and illustrated card headers.

### Surface
- **Canvas** (`{colors.canvas}` — `#ffffff`): Pure white — the primary card, modal, and nav surface.
- **Canvas Soft** (`{colors.canvas-soft}` — `#f9f9f8`): The near-white page-body background and alternating-band fill. Warm 98% white that reads as off-white next to pure canvas cards.
- **Hairline** (`{colors.hairline}` — `#0000001a`): 10% alpha black — every card border, input stroke, and table row divider. The brand never uses a solid gray border; every edge is this translucent ring.
- **Hairline Strong** (`{colors.hairline-strong}` — `#dfdcd9`): The named gray-300 token — used for slightly more visible dividers and focus-ring surfaces.
- **Alpha Black 100** (`{colors.alpha-black-100}` — `#0000000d`): A near-invisible 5% fill used for hover state backgrounds on ghost buttons and subtle interactive zones.

### Text
- **Ink** (`{colors.ink}` — `#000000f2`): 95% alpha black — every headline, primary body paragraph, and nav label on light surfaces.
- **Body** (`{colors.body}` — `#000000bf`): 75% alpha black — secondary body text, nav dropdown links, card supporting copy.
- **Mute** (`{colors.mute}` — `#78736f`): The gray-500 tone — logo strip labels, footer column body, de-emphasised captions.
- **Mute Light** (`{colors.mute-light}` — `#a39e98`): The gray-400 tone — placeholder text, fine print, lowest-priority labels.
- **On Primary** (`{colors.on-primary}` — `#ffffff`): All text on `{colors.primary}` surfaces — button labels, featured card text.

### Semantic
- **Success** (`{colors.success}` — `#1aae39`): Green-500 — status indicators, confirmation states.
- **Error** (`{colors.error}` — `#dd5b00`): Orange-600 — warning and error states.
- **Teal** (`{colors.teal}` — `#2a9d99`): A secondary accent visible in feature-area illustrations and icon highlights.
- **Purple** (`{colors.purple}` — `#7237ae`): A tertiary accent used in AI-feature callouts and avatar illustration details.
- **Purple Deep** (`{colors.purple-deep}` — `#391c57`): The deeper purple tone for dark-mode feature surfaces.
- **Pink** (`{colors.pink}` — `#ff64c8`): Pink-500 — occasional accent in AI-persona illustrated circles.

## Typography

### Font Family
The entire system runs on a single face: **NotionInter**, a custom-tuned build of Inter optimized for Notion's product and marketing surfaces. No second face is introduced — no mono, no serif, no display alternate. The brand's typographic voice comes entirely from size contrast and weight contrast within one humanist sans.

Open-source substitute: *Inter* (400 / 500 / 600) at matching sizes is effectively identical; `font-feature-settings: "ss01"` enables the circular punctuation that matches NotionInter's character.

### Hierarchy

| Token | Size | Weight | Line Height | Letter Spacing | Use |
|---|---|---|---|---|---|
| `{typography.display-xl}` | 96px | 600 | 100px | -1.5px | Hero headline ("Where teams and agents Think together.") — the brand's architectural opening gesture. |
| `{typography.display-lg}` | 54px | 600 | 56px | -1.875px | Section headlines — the tightest tracked size in the scale. |
| `{typography.display-md}` | 36px | 600 | 40px | -0.8px | Mid-section headlines and feature-card cluster titles. |
| `{typography.display-sm}` | 24px | 600 | 28px | -0.4px | Card-level headlines and pricing-tier names. |
| `{typography.body-lg}` | 18px | 400 | 28px | 0 | Hero lead paragraph directly below the display-xl headline. |
| `{typography.body-md}` | 16px | 400 | 24px | 0 | Default body text, card descriptions, feature copy. |
| `{typography.body-md-strong}` | 16px | 500 | 24px | 0 | Bolded inline body, CTA label at marketing scale. |
| `{typography.body-sm}` | 14px | 400 | 20px | 0 | Nav links, secondary card copy, footer body. |
| `{typography.body-sm-strong}` | 14px | 500 | 20px | 0 | Nav dropdown headers, table-row emphasis. |
| `{typography.label-eyebrow}` | 14px | 600 | 20px | 0 | Section eyebrow labels above display-lg headlines. |
| `{typography.caption}` | 12px | 400 | 16px | 0 | Footer fine print, badge secondary labels. |
| `{typography.caption-strong}` | 12px | 600 | 16px | 0 | Badge labels, table column headers. |
| `{typography.button-md}` | 14px | 500 | 20px | 0 | Ghost pill button labels, nav-scale actions. |
| `{typography.button-lg}` | 16px | 500 | 24px | 0 | Primary CTA button labels at marketing scale. |

### Principles
- **Negative tracking is mandatory at display scale.** The 96 px hero headline tracks at -1.5 px; the 54 px section headline tracks at -1.875 px — tighter relative to size. Default tracking breaks the brand voice immediately.
- **Sentence-case headlines, period-terminated.** "Where teams and agents Think together." — the period is deliberate, part of the calm declarative tone.
- **One face, all roles.** NotionInter carries every surface. There is no mono face for technical contexts, no serif for editorial warmth — the brand's calm comes from typographic uniformity.
- **Weight 600 is the ceiling.** Headlines never appear at 700 or 800. The display sizes read massive because of size contrast, not weight contrast.
- **Size as the only dimension.** Colour is not used to create typographic hierarchy — only size, weight, and the alpha-black opacity steps (`{colors.ink}` vs `{colors.body}` vs `{colors.mute}`) differentiate levels.

## Layout

### Spacing System
- **Base unit**: 4 px. Every measured value on the page is a multiple of 4 (or the occasional 6 px micro-gap between inline badge elements).
- **Tokens**: `{spacing.xxs}` 4 px · `{spacing.xs}` 6 px · `{spacing.sm}` 8 px · `{spacing.md}` 12 px · `{spacing.lg}` 16 px · `{spacing.xl}` 24 px · `{spacing.2xl}` 32 px · `{spacing.3xl}` 48 px · `{spacing.4xl}` 64 px · `{spacing.5xl}` 96 px · `{spacing.6xl}` 128 px · `{spacing.section}` 192 px.
- **Section padding**: marketing bands use `{spacing.4xl}` to `{spacing.5xl}` top/bottom. The hero band is the most generous at near-section scale to give the display-xl headline vertical breathing room.
- **Card interior padding**: all feature and content cards use `{spacing.xl}` 24 px interior padding — the brand's consistent interior unit.
- **Button padding**: primary CTA buttons use `6px 15px` (mapped to `{spacing.xs}` vertical, `{spacing.lg}` horizontal). Ghost pill buttons use `8px 16px` (mapped to `{spacing.sm}` vertical, `{spacing.lg}` horizontal).
- **Inline gap**: button pairs in the hero (primary + ghost) use `{spacing.sm}` 8 px gap. Nav item gaps are `{spacing.md}` 12 px.

### Grid & Container
- **Max width**: approximately 1280 px; content centres with `{spacing.xl}` 24 px horizontal gutters on desktop scaling to `{spacing.lg}` 16 px on mobile.
- **Column patterns**:
  - Hero: single centred column, headline + sub-copy + button pair, avatar row floats above.
  - Feature card grid: 3-up at desktop, 1-up at mobile.
  - Logo strip: single fluid row of customer logos at consistent height, centred.
  - Pricing tier grid: 3-up at desktop, vertical stack at mobile.

### Whitespace Philosophy
The brand earns its calm through generous band-to-band spacing and tight interior packing. Display-xl headlines sit with large vertical margins above and below; the lead sentence beneath is tight to the headline (`{spacing.xl}` gap), then a wider gap before the CTA row. Cards pack tightly — `{spacing.xl}` interior padding, `{spacing.xl}` gap between cards in the grid. The page reads as orderly and unhurried, never cramped, never loosely assembled.

## Elevation & Depth

| Level | Treatment | Use |
|---|---|---|
| Level 0 — Flat | No shadow, no border. | Full-bleed hero and section bands. |
| Level 1 — Hairline Ring | `1px solid rgba(0,0,0,0.10)` border only. | Default card chrome — the brand's universal card cue. No drop-shadow. |
| Level 2 — Hairline + Soft Fill | `1px solid rgba(0,0,0,0.10)` border on `{colors.canvas-soft}` surface. | Inset or nested card panels, form surfaces inside cards. |
| Level 3 — Overlay | `1px solid {colors.hairline}` border + `box-shadow: 0 4px 16px rgba(0,0,0,0.08)`. | Dropdown menus, nav mega-menu panels, tooltip surfaces. |
| Level 4 — Modal | `1px solid {colors.hairline}` + `box-shadow: 0 8px 32px rgba(0,0,0,0.12)`. | Modal / dialog overlays. |

Notion's elevation system is among the flattest in the productivity software category. Cards are differentiated from their background by hairline border alone — never by drop-shadow on the default marketing surface. This reflects the product's own UI philosophy: Notion pages are flat documents; elevation is functional, not decorative.

### Decorative Depth
- **Avatar medallion stack**: seven circular illustrated avatars arranged in a horizontal overlapping row above the hero headline — each a `{rounded.full}` circle with a `{colors.hairline}` border ring. The overlap creates implied depth without any shadow.
- **Inline hero pill**: the animated word-switcher pill inside the headline (periwinkle fill, `{rounded.pill}`) is the only intra-text UI element — it reads as slightly elevated inside the copy stream because of its background fill, but carries no shadow.
- **Band alternation**: switching surfaces from `{colors.canvas}` to `{colors.canvas-soft}` every two sections is the brand's primary depth and rhythm cue — not shadows.

## Shapes

### Border Radius Scale

| Token | Value | Use |
|---|---|---|
| `{rounded.none}` | 0px | Full-bleed hero / footer bands, image flush-edge moments. |
| `{rounded.xs}` | 4px | Tightest badge / chip shape — rarely used. |
| `{rounded.sm}` | 6px | Small interactive targets, tag chips. |
| `{rounded.button}` | 8px | **The primary CTA shape.** Every "Get Notion free" button, every blue primary action. Deliberately rectangular compared to ghost pills. |
| `{rounded.card}` | 12px | Feature cards, pricing cards, content panels, form containers. |
| `{rounded.lg}` | 16px | Larger content panels, image-cap cards. |
| `{rounded.xl}` | 24px | Largest card chrome, modal dialog corners. |
| `{rounded.pill}` | 9999px | Ghost / secondary buttons ("Request a demo"), nav links on hover, badge pills, the hero inline animated word. The brand's "soft" shape vocabulary. |
| `{rounded.full}` | 9999px | Avatar medallions, icon-button circular containers. |

### Key Shape Tension
The brand deliberately operates two button shapes simultaneously: the 8 px rectangular primary CTA beside the 9999 px pill ghost CTA. This tension — hard corner vs. full pill — is intentional and distinctive. Flattening both to the same radius breaks the visual grammar.

## Components

### Navigation

**`nav-bar`** — The sticky top navigation, white surface with a bottom hairline.
- Height 64 px, background `{colors.canvas}`, padding `{spacing.sm} {spacing.xl}`. Layout: Notion mark logo left, dropdown link row centre-left, "Request a demo" ghost + "Get Notion free" blue CTA + "Log in" text right.

**`nav-link`** — Navigation dropdown trigger links ("Product", "AI", "Solutions" etc.).
- Text `{colors.body}`, typography `{typography.body-sm}`, pill-shaped hover state at `{rounded.pill}`, padding `{spacing.sm} {spacing.md}`.

**`nav-cta-primary`** — The blue "Get Notion free" button in the nav.
- Background `{colors.primary}`, text `{colors.on-primary}`, typography `{typography.button-lg}`, radius `{rounded.button}` 8 px (the brand's measured CTA radius), padding `{spacing.xs} {spacing.lg}`, height 36 px.

**`nav-cta-login`** — The "Log in" text button.
- Transparent background, text `{colors.ink}`, typography `{typography.body-sm}`, `{rounded.pill}`.

### Buttons

**`button-primary`** — The canonical marketing CTA.
- Background `{colors.primary}`, text `{colors.on-primary}`, typography `{typography.button-lg}`, radius `{rounded.button}` 8 px. Appears at hero scale and inside section bands.

**`button-primary-active`** — Pressed / focused state of the primary CTA.
- Background `{colors.primary-active}` (`#005bab`), otherwise identical to `button-primary`.

**`button-ghost`** — The secondary marketing action.
- Background `{colors.canvas}`, text `{colors.ink}`, typography `{typography.button-md}`, radius `{rounded.pill}` 9999 px, 1 px solid `{colors.hairline}` border. Pairs beside `button-primary` in every hero CTA row.

**`button-ghost-pill`** — A borderless pill ghost for in-section lighter actions.
- Transparent background, text `{colors.ink}`, typography `{typography.button-md}`, radius `{rounded.pill}`, hairline border.

### Cards & Containers

**`card-feature`** — The canonical feature / content card.
- Background `{colors.canvas}`, text `{colors.ink}`, padding `{spacing.xl}` 24 px, radius `{rounded.card}` 12 px, `1px solid {colors.hairline}` border. No drop-shadow on the marketing surface.

**`card-soft`** — The inset / nested card on canvas-soft sections.
- Background `{colors.canvas-soft}`, same border and radius as `card-feature`.

**`hero-inline-pill`** — The animated word-switcher embedded inside the hero headline.
- Background `{colors.primary-muted}`, text `{colors.primary}`, typography `{typography.display-xl}`, radius `{rounded.pill}`. This is a UI element living inside display copy — unique to Notion's hero pattern.

**`avatar-medallion`** — The circular illustrated character avatar used in the hero row.
- Background `{colors.canvas}`, `{rounded.full}`, 1 px `{colors.hairline}` border ring, 64 px diameter. Arranged in an overlapping horizontal sequence above the headline.

**`badge-soft`** — Small metadata badge / status pill.
- Background `{colors.primary-soft}`, text `{colors.primary}`, typography `{typography.caption-strong}`, radius `{rounded.pill}`, padding `{spacing.xxs} {spacing.sm}`.

### Inputs & Forms

**`form-input`** — Text input at standard height.
- Background `{colors.canvas}`, text `{colors.ink}`, 1 px solid `{colors.hairline}` border, typography `{typography.body-md}`, radius `{rounded.button}` 8 px, padding `{spacing.xs} {spacing.lg}`, height 40 px.

### Layout Bands

**`hero-band`** — The white hero section with avatar row + display headline + lead + CTA pair.
- Background `{colors.canvas}`, text `{colors.ink}`, padding `{spacing.4xl} {spacing.xl}`. Headlines at `{typography.display-xl}`, lead at `{typography.body-lg}`.

**`section-band`** — A standard alternating marketing section.
- Background `{colors.canvas-soft}`, text `{colors.ink}`, padding `{spacing.5xl} {spacing.xl}`. Section headline at `{typography.display-lg}`, supporting body at `{typography.body-md}`.

**`logo-strip`** — The customer-logo wrapping row (OpenAI, Figma, Ramp, Cursor, Vercel, Nvidia, Volvo, L'Oréal, Discord).
- Background `{colors.canvas}`, text `{colors.mute}`, padding `{spacing.lg} {spacing.xl}`. Logos rendered as monochrome marks at consistent height, dot-separated.

**`footer`** — The bottom multi-column navigation.
- Background `{colors.canvas}`, text `{colors.mute}`, typography `{typography.body-sm}`, padding `{spacing.4xl} {spacing.xl}`, `1px solid {colors.hairline}` top border.

**`link-inline`** — Inline body-copy links.
- Text `{colors.primary}`, typography `{typography.body-md}`.

## Do's and Don'ts

### Do
- Use `{rounded.button}` 8 px for every primary blue CTA and `{rounded.pill}` for every ghost / secondary button. The two-shape system is the brand's most visible grammar rule.
- Set hero headlines in `{typography.display-xl}` 96 px / 600 weight with -1.5 px tracking. The large-to-small contrast between headline and lead paragraph IS the brand's editorial voice.
- Keep the primary blue (`{colors.primary}` `#0075de`) as the singular conversion color. It appears on exactly one element per view — the primary CTA. Do not apply it to decorative elements or backgrounds except the `primary-soft` / `primary-muted` tints.
- Use `1px solid rgba(0,0,0,0.10)` hairline borders to differentiate cards from their background surface. Never substitute a gray hex border; the alpha transparency is how the border adapts across light and dark contexts.
- Alternate sections between `{colors.canvas}` and `{colors.canvas-soft}` surfaces to create band rhythm without introducing additional colors.
- Sentence-case every headline, period-terminated. Notion speaks declaratively and calmly.
- Use the avatar medallion row (`{rounded.full}` circle, hairline border) as the hero's decorative element — it is the brand's illustrated signature at marketing scale.

### Don't
- Don't round primary CTA buttons to pill shape. The 8 px rectangular button is non-negotiable; rounding to 9999 px erases the primary/secondary button distinction.
- Don't introduce drop-shadows on feature cards. Hairline border only — this is fundamental to the brand's flat, document-like surface philosophy.
- Don't introduce a second typeface. NotionInter is the entire typographic system; adding a mono or display alternate breaks the brand's calm uniformity.
- Don't render headlines in all-caps or apply positive letter-spacing at display size. Negative tracking at display scale is the voice.
- Don't use the blue primary (`{colors.primary}`) for decorative fills, background bands, or illustration details. It belongs exclusively to interactive conversion targets.
- Don't set body or secondary text in weight 600. Weight 600 is the display ceiling; body-md-strong tops at 500.
- Don't omit the period at the end of display headlines. "Where teams and agents Think together." — the punctuation is editorial, not optional.
Preview from tokens
AI-enriched
This independent example is based on publicly observable design signals from notion.com. Brand marks are shown only to identify the source site. No affiliation, sponsorship, or endorsement is implied.