Overview
Linear's marketing canvas is the deepest dark surface in this collection — {colors.canvas} is #010102, essentially pure black with a faint blue tint. On top sits a four-step surface ladder ({colors.surface-1} through {colors.surface-4}) for cards, panels, and lifted tiles, with hairline borders running from {colors.hairline} (#23252a) up through {colors.hairline-strong} and {colors.hairline-tertiary}. Light gray text ({colors.ink} #f7f8f8) carries the body and headlines.
The single chromatic accent is Linear lavender-blue {colors.primary} (#5e6ad2) — used on the brand mark, focus rings, and the primary CTA button. A lighter hover state ({colors.primary-hover} #828fff) and a focus-tinted variant ({colors.primary-focus} #5e69d1) extend the same hue. Linear avoids saturated greens, oranges, reds, etc. on the marketing canvas — the only semantic color is {colors.semantic-success} (#27a644) for status pills and the rare success indicator.
Display type runs Linear's custom sans (with SF Pro Display fallback) at weight 500–700 with negative letter-spacing scaling from -3.0px at 80px down to 0 at body. The body family is Linear's text cut, and a Linear Mono is reserved for code snippets in product screenshots.
The page rhythm is dense product screenshots — Linear's marketing leads with high-fidelity captures of the product UI (issue list, project view, dashboard) framed in {colors.surface-1} panels with {rounded.xl} 16px corners. The chrome is intentionally minimal so the app screenshots can do the heavy lifting.
Key Characteristics:
- Dark-canvas marketing system —
{colors.canvas} (#010102) is the deepest dark in this collection.
- Lavender-blue brand accent (
{colors.primary} #5e6ad2) — used scarcely on brand mark, focus, and the primary CTA.
- Four-step surface ladder (canvas → surface-1 → surface-2 → surface-3 → surface-4) carries hierarchy without shadow.
- Display tracking pulls aggressively negative (-3.0px at 80px); body holds at -0.05px.
- Cards use
{rounded.lg} 12px corners with 1px hairline borders — never pill, rarely 16px.
- Product UI screenshots dominate the page. The marketing chrome is a dark frame for the app.
- No second chromatic color. No atmospheric gradients. No spotlight cards.
Colors
Source pages: linear.app (home), /intake, /pricing, /contact/sales, /build.
Brand & Accent
- Lavender-Blue ({colors.primary}): The signature Linear accent — primary CTA, brand mark, link emphasis.
- Lavender Hover ({colors.primary-hover}): Lighter lavender (#828fff) — hovered state of the primary CTA.
- Lavender Focus ({colors.primary-focus}): Focus-ring tint (#5e69d1) — focused inputs, focused buttons.
- Brand Secure ({colors.brand-secure}): Muted lavender-gray (#7a7fad) — used in "Linear Security" surfaces.
Surface
- Canvas ({colors.canvas}): Default page background — #010102, near-pure black with a faint blue tint.
- Surface 1 ({colors.surface-1}): One step above canvas — feature cards, pricing cards, product screenshot panels.
- Surface 2 ({colors.surface-2}): Two steps above — featured pricing card, hovered cards.
- Surface 3 ({colors.surface-3}): Three steps above — line-tertiary backgrounds, sub-nav.
- Surface 4 ({colors.surface-4}): Four steps above — bg-level-3, deepest lifted surface.
- Hairline ({colors.hairline}): 1px borders on cards and dividers.
- Hairline Strong ({colors.hairline-strong}): Stronger 1px borders — input focus rings.
- Hairline Tertiary ({colors.hairline-tertiary}): Tertiary borders for nested surfaces.
- Inverse Canvas ({colors.inverse-canvas}): Pure white — surface of the inverse pill CTA on a small set of section openers.
- Inverse Surface 1 ({colors.inverse-surface-1}): One step above inverse canvas.
- Inverse Surface 2 ({colors.inverse-surface-2}): Two steps above inverse canvas.
Text
- Ink ({colors.ink}): All headlines and emphasized body type — light gray #f7f8f8.
- Ink Muted ({colors.ink-muted}): Secondary type at #d0d6e0 — meta info on hero panels.
- Ink Subtle ({colors.ink-subtle}): Tertiary type at #8a8f98 — deselected pricing tabs, footer columns.
- Ink Tertiary ({colors.ink-tertiary}): Quaternary at #62666d — disabled, footnotes.
Semantic
- Success Green ({colors.semantic-success}): Status pills, success indicators. The only semantic color on marketing.
- Overlay ({colors.semantic-overlay}): Pure black overlay scrim for modals.
Typography
Font Family
- Linear Display — Linear's custom display sans; fallback
SF Pro Display, -apple-system, system-ui, Segoe UI, Roboto. Carries display-xl through subhead.
- Linear Text — Linear's custom text sans (a slightly different cut tuned for body sizes); same fallback stack. Carries body sizes, button labels, captions.
- Linear Mono — Linear's custom mono; fallback
ui-monospace, SF Mono, Menlo. Used for code snippets in product screenshots and for status / ID tokens.
The marketing surface treats Display and Text as one continuous voice; the family change is silent.
Hierarchy
| Token |
Size |
Weight |
Line Height |
Letter Spacing |
Use |
{typography.display-xl} |
80px |
600 |
1.05 |
-3.0px |
Largest hero headline |
{typography.display-lg} |
56px |
600 |
1.10 |
-1.8px |
Section opener headlines |
{typography.display-md} |
40px |
600 |
1.15 |
-1.0px |
Sub-section headlines |
{typography.headline} |
28px |
600 |
1.20 |
-0.6px |
Pricing tier titles, CTA banner heading |
{typography.card-title} |
22px |
500 |
1.25 |
-0.4px |
Feature card title |
{typography.subhead} |
20px |
400 |
1.40 |
-0.2px |
Lead body, intro paragraphs |
{typography.body-lg} |
18px |
400 |
1.50 |
-0.1px |
Hero subhead, lead paragraphs |
{typography.body} |
16px |
400 |
1.50 |
-0.05px |
Default body |
{typography.body-sm} |
14px |
400 |
1.50 |
0 |
Card body, footer columns |
{typography.caption} |
12px |
400 |
1.40 |
0 |
Captions, meta, status |
{typography.button} |
14px |
500 |
1.20 |
0 |
All button labels |
{typography.eyebrow} |
13px |
500 |
1.30 |
0.4px |
Section eyebrow (slight positive tracking) |
{typography.mono} |
13px |
400 |
1.50 |
0 |
Linear Mono for code in product screenshots |
Principles
- Aggressive negative tracking on display (-3.0px at 80px ≈ 4% of size).
- Single voice from display to body. Display-xl at 600 → body at 400 — same family, narrower weights.
- Eyebrow uses positive tracking (+0.4px) — contrast against the negative-tracked display marks the eyebrow as taxonomy.
- Mono only in code contexts. Linear Mono lives inside product screenshots — not on marketing chrome.
Note on Font Substitutes
Linear's custom typeface isn't publicly distributed; the documented fallback SF Pro Display, -apple-system, system-ui is the recommended substitute on macOS. For cross-platform implementation, Inter at weight 500 / 600 / 700 is the closest free substitute. Geist Sans is also viable. For mono, JetBrains Mono or Geist Mono at weight 400 closely approximates Linear Mono.
Layout
Spacing System
- Base unit: 4px.
- Tokens (front matter):
{spacing.xxs} 4px · {spacing.xs} 8px · {spacing.sm} 12px · {spacing.md} 16px · {spacing.lg} 24px · {spacing.xl} 32px · {spacing.xxl} 48px · {spacing.section} 96px.
- Card interior padding:
{spacing.lg} 24px on feature/pricing cards; {spacing.xl} 32px on testimonial cards; {spacing.xxl} 48px on CTA banners.
- Pill button padding: 8px vertical · 14px horizontal — Linear's compact button spec.
- Form input padding: 8px vertical · 12px horizontal.
Grid & Container
- Max content width sits around 1280px.
- Card grids are 3-up at desktop, 2-up at tablet, 1-up at mobile.
- Pricing tier grid is 3-up; comparison strip below shows checkmarks per tier.
- Product screenshot panels span full content width — they're the protagonist.
Whitespace Philosophy
The dark canvas IS the whitespace. Sections separate by lift onto surface-1 panels, not by gaps in white. Within a panel, generous {spacing.lg} 24px gaps between content blocks; {spacing.section} 96px between sections.
Elevation & Depth
| Level |
Treatment |
Use |
| 0 (flat) |
No shadow, no border |
Default for body type, hero text, footer |
| 1 (charcoal lift) |
{colors.surface-1} background on canvas, 1px {colors.hairline} |
Default cards, product panels |
| 2 (surface-2 lift) |
{colors.surface-2} background, 1px {colors.hairline-strong} |
Featured pricing card, hovered cards |
| 3 (surface-3 lift) |
{colors.surface-3} background |
Sub-nav, dropdown menus |
| 4 (focus ring) |
2px {colors.primary-focus} outline at 50% opacity |
Focused input, focused button |
Linear's depth is carried by surface ladder + hairline borders. The brand resists drop shadows on dark almost entirely.
Decorative Depth
- Product UI screenshots dominate as decorative depth.
- No atmospheric gradients, no spotlight cards.
- Subtle white edge highlight on the top edge of lifted panels — gives the dark surface a faint "pixel rendered" feel.
Shapes
Border Radius Scale
| Token |
Value |
Use |
{rounded.xs} |
4px |
Small chips, status badges |
{rounded.sm} |
6px |
Inline tags |
{rounded.md} |
8px |
All buttons, form inputs |
{rounded.lg} |
12px |
Pricing cards, feature cards, testimonial cards |
{rounded.xl} |
16px |
Product screenshot panels |
{rounded.xxl} |
24px |
Oversized CTA banners (rare) |
{rounded.pill} |
9999px |
Pricing tab toggles, status pills |
{rounded.full} |
9999px |
Avatar circles |
Photography & Illustration Geometry
- Product UI screenshots dominate; they sit in
{rounded.xl} 16px tiles with {spacing.lg} 24px outer padding.
- Customer logo tiles render at small sizes (~24px logo height) on
{colors.canvas} with no border.
- Avatar circles in testimonial cards use
{rounded.full} at 32–40px sizes.
Components
Buttons
button-primary — Lavender CTA. The default primary CTA across all pages.
- Background
{colors.primary}, text {colors.on-primary}, type {typography.button}, padding 8px 14px, rounded {rounded.md}.
- Pressed state lives in
button-primary-pressed (background shifts to {colors.primary-focus}).
- Hover state lives in
button-primary-hover (background shifts to {colors.primary-hover} lighter lavender).
button-secondary — Charcoal button. Used for secondary CTAs ("Sign in", "Read changelog").
- Background
{colors.surface-1}, text {colors.ink}, type {typography.button}, padding 8px 14px, rounded {rounded.md}. 1px {colors.hairline} border.
button-tertiary — Plain text button.
- Background
{colors.canvas}, text {colors.ink}, type {typography.button}, rounded {rounded.md}, padding 8px 14px.
button-inverse — White-on-dark inverse CTA.
- Background
{colors.inverse-canvas}, text {colors.inverse-ink}, type {typography.button}, rounded {rounded.md}, padding 8px 14px.
Pricing Tabs
pricing-tab-default + pricing-tab-selected — Pill-toggle on /pricing.
- Default:
{colors.canvas} background, {colors.ink-subtle} text, rounded {rounded.pill}, padding 6px 14px.
- Selected:
{colors.surface-2} background, {colors.ink} text — selected = surface lift.
Cards & Containers
pricing-card — Each tier on /pricing.
- Background
{colors.surface-1}, text {colors.ink}, type {typography.body}, rounded {rounded.lg}, padding 24px. 1px {colors.hairline} border.
pricing-card-featured — Recommended tier — surface lift to surface-2.
- Background
{colors.surface-2}, otherwise identical structure.
feature-card — Generic feature highlight tile.
- Background
{colors.surface-1}, text {colors.ink}, type {typography.body}, rounded {rounded.lg}, padding 24px.
product-screenshot-card — The dominant card type — frames a high-fidelity Linear app UI screenshot.
- Background
{colors.surface-1}, text {colors.ink}, type {typography.body}, rounded {rounded.xl}, padding 24px.
testimonial-card — Customer quote with avatar + name + role.
- Background
{colors.surface-1}, text {colors.ink}, type {typography.body-lg}, rounded {rounded.lg}, padding 32px.
customer-logo-tile — Small tile in the customer marquee.
- Background
{colors.canvas}, text {colors.ink-subtle}, type {typography.caption}, rounded {rounded.xs}, padding 16px.
cta-banner — Closing CTA panel near page bottom.
- Background
{colors.surface-1}, text {colors.ink}, type {typography.headline}, rounded {rounded.lg}, padding 48px.
Inputs & Forms
text-input + text-input-focused — Form fields on /contact/sales and signup overlays.
- Background
{colors.surface-1}, text {colors.ink}, type {typography.body}, rounded {rounded.md}, padding 8px 12px.
- Focused state retains the same surface; the focus ring is a 2px
{colors.primary-focus} outline at 50% opacity.
Status & Build Page
changelog-row — Each row in /build (changelog page) listing version, date, and changes.
- Background
{colors.canvas}, text {colors.ink}, type {typography.body}, rounded {rounded.xs}, padding 24px 0. 1px {colors.hairline} bottom rule.
status-badge — Small status pill.
- Background
{colors.surface-2}, text {colors.ink-muted}, type {typography.caption}, rounded {rounded.pill}, padding 2px 8px.
Navigation
top-nav — Sticky dark bar with the Linear wordmark left, primary nav links centered, and a button-secondary ("Sign in") + button-primary ("Get started") pair right.
- Background
{colors.canvas}, text {colors.ink}, type {typography.body-sm}, height 56px.
Footer
footer — Dense link grid on {colors.canvas} with the Linear wordmark left.
- Background
{colors.canvas}, text {colors.ink-subtle}, type {typography.caption}, padding 64px 32px.
Do's and Don'ts
Do
- Reserve
{colors.canvas} (#010102) as the system's anchor surface — the faint blue tint is intentional.
- Use
{colors.primary} lavender ONLY for: brand mark, primary CTA, focus ring, link emphasis.
- Use the four-step surface ladder for hierarchy. Avoid skipping levels.
- Pair display weight 600 with body weight 400 — Linear resists 700+ display weights.
- Apply negative letter-spacing aggressively on display.
- Use product UI screenshots as the protagonist of every section.
- Compose CTAs as
{rounded.md} 8px corners.
Don't
- Don't ship a light-mode marketing page.
- Don't use lavender as a section background or card fill.
- Don't introduce a second chromatic accent (orange, pink, green for marketing).
- Don't add atmospheric gradients or spotlight cards.
- Don't pill-round CTAs.
- Don't use
#000000 true black as the canvas.
- Don't combine multiple bright accents in product screenshot mockups.
Responsive Behavior
Breakpoints
| Name |
Width |
Key Changes |
| Desktop-XL |
1440px |
Default desktop layout |
| Desktop |
1280px |
Card grid 3-up maintained |
| Tablet |
1024px |
Card grid 3-up → 2-up |
| Mobile-Lg |
768px |
Pricing comparison becomes accordion; nav hamburger |
| Mobile |
480px |
Single-column; display-xl scales 80px → ~36px |
Touch Targets
- CTAs hold ≥40px tap height across viewports.
- Pricing tab pills hold ≥36px tap height; touch viewports grow to ≥44px.
- Form inputs hold ≥44px tap target on touch.
Collapsing Strategy
- Top nav: links collapse to hamburger below 768px.
- Card grids: 3-up → 2-up at 1024px → 1-up below 768px.
- Pricing comparison: per-tier accordion below 768px.
- Display type:
{typography.display-xl} 80px scales toward {typography.display-md} 40px on mobile.
Image Behavior
- Product UI screenshots maintain aspect ratio and never crop.
- Customer logos in the marquee may collapse from 6-up to 3-up below 768px.
Iteration Guide
- Focus on ONE component at a time and reference it by its
components: token name.
- When introducing a section, decide first which surface lift it lives on.
- Default body to
{typography.body} at weight 400.
- Run
npx @google/design.md lint DESIGN.md after edits.
- Add new variants as separate component entries.
- Treat lavender as scarce: brand mark, primary CTA, focus, link emphasis.
- Lead every section with a product UI screenshot.
Known Gaps
- The four-step surface ladder values are extracted directly from Linear's
--color-bg-level-3, --color-line-tint, etc. CSS variables; they are Linear's canonical surface spec.
- Form-field error and validation styling is not visible on the inspected pages.
- Light mode is not documented because the marketing site does not ship a light theme.
- Linear's actual product UI uses a richer color-tag palette (red, orange, yellow, green, blue, purple) for issue priorities and project labels — those colors live in the in-product surfaces shown in mockups.
- The custom display, text, and mono families are proprietary; an open-source substitute is acceptable.
1---2name: linear-design-analysis3description: Documents Linear's dark-canvas marketing design system with near-black backgrounds, lavender-blue accent, four-step surface hierarchy, aggressive negative tracking on display type, and product UI screenshots as the primary visual rhythm.4---56## Overview78Linear's marketing canvas is the deepest dark surface in this collection — `{colors.canvas}` is #010102, essentially pure black with a faint blue tint. On top sits a four-step surface ladder (`{colors.surface-1}` through `{colors.surface-4}`) for cards, panels, and lifted tiles, with hairline borders running from `{colors.hairline}` (#23252a) up through `{colors.hairline-strong}` and `{colors.hairline-tertiary}`. Light gray text (`{colors.ink}` #f7f8f8) carries the body and headlines.910The single chromatic accent is **Linear lavender-blue** `{colors.primary}` (#5e6ad2) — used on the brand mark, focus rings, and the primary CTA button. A lighter hover state (`{colors.primary-hover}` #828fff) and a focus-tinted variant (`{colors.primary-focus}` #5e69d1) extend the same hue. Linear avoids saturated greens, oranges, reds, etc. on the marketing canvas — the only semantic color is `{colors.semantic-success}` (#27a644) for status pills and the rare success indicator.1112Display type runs Linear's custom sans (with `SF Pro Display` fallback) at weight 500–700 with negative letter-spacing scaling from -3.0px at 80px down to 0 at body. The body family is Linear's text cut, and a Linear Mono is reserved for code snippets in product screenshots.1314The page rhythm is **dense product screenshots** — Linear's marketing leads with high-fidelity captures of the product UI (issue list, project view, dashboard) framed in `{colors.surface-1}` panels with `{rounded.xl}` 16px corners. The chrome is intentionally minimal so the app screenshots can do the heavy lifting.1516**Key Characteristics:**17- **Dark-canvas marketing system** — `{colors.canvas}` (#010102) is the deepest dark in this collection.18- **Lavender-blue brand accent** (`{colors.primary}` #5e6ad2) — used scarcely on brand mark, focus, and the primary CTA.19- Four-step surface ladder (canvas → surface-1 → surface-2 → surface-3 → surface-4) carries hierarchy without shadow.20- Display tracking pulls aggressively negative (-3.0px at 80px); body holds at -0.05px.21- Cards use `{rounded.lg}` 12px corners with 1px hairline borders — never pill, rarely 16px.22- **Product UI screenshots** dominate the page. The marketing chrome is a dark frame for the app.23- No second chromatic color. No atmospheric gradients. No spotlight cards.2425## Colors2627> Source pages: linear.app (home), /intake, /pricing, /contact/sales, /build.2829### Brand & Accent30- **Lavender-Blue** ({colors.primary}): The signature Linear accent — primary CTA, brand mark, link emphasis.31- **Lavender Hover** ({colors.primary-hover}): Lighter lavender (#828fff) — hovered state of the primary CTA.32- **Lavender Focus** ({colors.primary-focus}): Focus-ring tint (#5e69d1) — focused inputs, focused buttons.33- **Brand Secure** ({colors.brand-secure}): Muted lavender-gray (#7a7fad) — used in "Linear Security" surfaces.3435### Surface36- **Canvas** ({colors.canvas}): Default page background — #010102, near-pure black with a faint blue tint.37- **Surface 1** ({colors.surface-1}): One step above canvas — feature cards, pricing cards, product screenshot panels.38- **Surface 2** ({colors.surface-2}): Two steps above — featured pricing card, hovered cards.39- **Surface 3** ({colors.surface-3}): Three steps above — line-tertiary backgrounds, sub-nav.40- **Surface 4** ({colors.surface-4}): Four steps above — bg-level-3, deepest lifted surface.41- **Hairline** ({colors.hairline}): 1px borders on cards and dividers.42- **Hairline Strong** ({colors.hairline-strong}): Stronger 1px borders — input focus rings.43- **Hairline Tertiary** ({colors.hairline-tertiary}): Tertiary borders for nested surfaces.44- **Inverse Canvas** ({colors.inverse-canvas}): Pure white — surface of the inverse pill CTA on a small set of section openers.45- **Inverse Surface 1** ({colors.inverse-surface-1}): One step above inverse canvas.46- **Inverse Surface 2** ({colors.inverse-surface-2}): Two steps above inverse canvas.4748### Text49- **Ink** ({colors.ink}): All headlines and emphasized body type — light gray #f7f8f8.50- **Ink Muted** ({colors.ink-muted}): Secondary type at #d0d6e0 — meta info on hero panels.51- **Ink Subtle** ({colors.ink-subtle}): Tertiary type at #8a8f98 — deselected pricing tabs, footer columns.52- **Ink Tertiary** ({colors.ink-tertiary}): Quaternary at #62666d — disabled, footnotes.5354### Semantic55- **Success Green** ({colors.semantic-success}): Status pills, success indicators. The only semantic color on marketing.56- **Overlay** ({colors.semantic-overlay}): Pure black overlay scrim for modals.5758## Typography5960### Font Family6162- **Linear Display** — Linear's custom display sans; fallback `SF Pro Display, -apple-system, system-ui, Segoe UI, Roboto`. Carries display-xl through subhead.63- **Linear Text** — Linear's custom text sans (a slightly different cut tuned for body sizes); same fallback stack. Carries body sizes, button labels, captions.64- **Linear Mono** — Linear's custom mono; fallback `ui-monospace, SF Mono, Menlo`. Used for code snippets in product screenshots and for status / ID tokens.6566The marketing surface treats Display and Text as one continuous voice; the family change is silent.6768### Hierarchy6970| Token | Size | Weight | Line Height | Letter Spacing | Use |71|---|---|---|---|---|---|72| `{typography.display-xl}` | 80px | 600 | 1.05 | -3.0px | Largest hero headline |73| `{typography.display-lg}` | 56px | 600 | 1.10 | -1.8px | Section opener headlines |74| `{typography.display-md}` | 40px | 600 | 1.15 | -1.0px | Sub-section headlines |75| `{typography.headline}` | 28px | 600 | 1.20 | -0.6px | Pricing tier titles, CTA banner heading |76| `{typography.card-title}` | 22px | 500 | 1.25 | -0.4px | Feature card title |77| `{typography.subhead}` | 20px | 400 | 1.40 | -0.2px | Lead body, intro paragraphs |78| `{typography.body-lg}` | 18px | 400 | 1.50 | -0.1px | Hero subhead, lead paragraphs |79| `{typography.body}` | 16px | 400 | 1.50 | -0.05px | Default body |80| `{typography.body-sm}` | 14px | 400 | 1.50 | 0 | Card body, footer columns |81| `{typography.caption}` | 12px | 400 | 1.40 | 0 | Captions, meta, status |82| `{typography.button}` | 14px | 500 | 1.20 | 0 | All button labels |83| `{typography.eyebrow}` | 13px | 500 | 1.30 | 0.4px | Section eyebrow (slight positive tracking) |84| `{typography.mono}` | 13px | 400 | 1.50 | 0 | Linear Mono for code in product screenshots |8586### Principles8788- **Aggressive negative tracking on display** (-3.0px at 80px ≈ 4% of size).89- **Single voice from display to body.** Display-xl at 600 → body at 400 — same family, narrower weights.90- **Eyebrow uses positive tracking** (+0.4px) — contrast against the negative-tracked display marks the eyebrow as taxonomy.91- **Mono only in code contexts.** Linear Mono lives inside product screenshots — not on marketing chrome.9293### Note on Font Substitutes9495Linear's custom typeface isn't publicly distributed; the documented fallback `SF Pro Display, -apple-system, system-ui` is the recommended substitute on macOS. For cross-platform implementation, **Inter** at weight 500 / 600 / 700 is the closest free substitute. **Geist Sans** is also viable. For mono, **JetBrains Mono** or **Geist Mono** at weight 400 closely approximates Linear Mono.9697## Layout9899### Spacing System100101- **Base unit**: 4px.102- **Tokens (front matter)**: `{spacing.xxs}` 4px · `{spacing.xs}` 8px · `{spacing.sm}` 12px · `{spacing.md}` 16px · `{spacing.lg}` 24px · `{spacing.xl}` 32px · `{spacing.xxl}` 48px · `{spacing.section}` 96px.103- Card interior padding: `{spacing.lg}` 24px on feature/pricing cards; `{spacing.xl}` 32px on testimonial cards; `{spacing.xxl}` 48px on CTA banners.104- Pill button padding: 8px vertical · 14px horizontal — Linear's compact button spec.105- Form input padding: 8px vertical · 12px horizontal.106107### Grid & Container108109- Max content width sits around 1280px.110- Card grids are 3-up at desktop, 2-up at tablet, 1-up at mobile.111- Pricing tier grid is 3-up; comparison strip below shows checkmarks per tier.112- Product screenshot panels span full content width — they're the protagonist.113114### Whitespace Philosophy115116The dark canvas IS the whitespace. Sections separate by lift onto surface-1 panels, not by gaps in white. Within a panel, generous `{spacing.lg}` 24px gaps between content blocks; `{spacing.section}` 96px between sections.117118## Elevation & Depth119120| Level | Treatment | Use |121|---|---|---|122| 0 (flat) | No shadow, no border | Default for body type, hero text, footer |123| 1 (charcoal lift) | `{colors.surface-1}` background on canvas, 1px `{colors.hairline}` | Default cards, product panels |124| 2 (surface-2 lift) | `{colors.surface-2}` background, 1px `{colors.hairline-strong}` | Featured pricing card, hovered cards |125| 3 (surface-3 lift) | `{colors.surface-3}` background | Sub-nav, dropdown menus |126| 4 (focus ring) | 2px `{colors.primary-focus}` outline at 50% opacity | Focused input, focused button |127128Linear's depth is carried by surface ladder + hairline borders. The brand resists drop shadows on dark almost entirely.129130### Decorative Depth131132- **Product UI screenshots** dominate as decorative depth.133- **No atmospheric gradients, no spotlight cards.**134- **Subtle white edge highlight** on the top edge of lifted panels — gives the dark surface a faint "pixel rendered" feel.135136## Shapes137138### Border Radius Scale139140| Token | Value | Use |141|---|---|---|142| `{rounded.xs}` | 4px | Small chips, status badges |143| `{rounded.sm}` | 6px | Inline tags |144| `{rounded.md}` | 8px | All buttons, form inputs |145| `{rounded.lg}` | 12px | Pricing cards, feature cards, testimonial cards |146| `{rounded.xl}` | 16px | Product screenshot panels |147| `{rounded.xxl}` | 24px | Oversized CTA banners (rare) |148| `{rounded.pill}` | 9999px | Pricing tab toggles, status pills |149| `{rounded.full}` | 9999px | Avatar circles |150151### Photography & Illustration Geometry152153- Product UI screenshots dominate; they sit in `{rounded.xl}` 16px tiles with `{spacing.lg}` 24px outer padding.154- Customer logo tiles render at small sizes (~24px logo height) on `{colors.canvas}` with no border.155- Avatar circles in testimonial cards use `{rounded.full}` at 32–40px sizes.156157## Components158159### Buttons160161**`button-primary`** — Lavender CTA. The default primary CTA across all pages.162- Background `{colors.primary}`, text `{colors.on-primary}`, type `{typography.button}`, padding 8px 14px, rounded `{rounded.md}`.163- Pressed state lives in `button-primary-pressed` (background shifts to `{colors.primary-focus}`).164- Hover state lives in `button-primary-hover` (background shifts to `{colors.primary-hover}` lighter lavender).165166**`button-secondary`** — Charcoal button. Used for secondary CTAs ("Sign in", "Read changelog").167- Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.button}`, padding 8px 14px, rounded `{rounded.md}`. 1px `{colors.hairline}` border.168169**`button-tertiary`** — Plain text button.170- Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.button}`, rounded `{rounded.md}`, padding 8px 14px.171172**`button-inverse`** — White-on-dark inverse CTA.173- Background `{colors.inverse-canvas}`, text `{colors.inverse-ink}`, type `{typography.button}`, rounded `{rounded.md}`, padding 8px 14px.174175### Pricing Tabs176177**`pricing-tab-default`** + **`pricing-tab-selected`** — Pill-toggle on `/pricing`.178- Default: `{colors.canvas}` background, `{colors.ink-subtle}` text, rounded `{rounded.pill}`, padding 6px 14px.179- Selected: `{colors.surface-2}` background, `{colors.ink}` text — selected = surface lift.180181### Cards & Containers182183**`pricing-card`** — Each tier on `/pricing`.184- Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.lg}`, padding 24px. 1px `{colors.hairline}` border.185186**`pricing-card-featured`** — Recommended tier — surface lift to surface-2.187- Background `{colors.surface-2}`, otherwise identical structure.188189**`feature-card`** — Generic feature highlight tile.190- Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.lg}`, padding 24px.191192**`product-screenshot-card`** — The dominant card type — frames a high-fidelity Linear app UI screenshot.193- Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.xl}`, padding 24px.194195**`testimonial-card`** — Customer quote with avatar + name + role.196- Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body-lg}`, rounded `{rounded.lg}`, padding 32px.197198**`customer-logo-tile`** — Small tile in the customer marquee.199- Background `{colors.canvas}`, text `{colors.ink-subtle}`, type `{typography.caption}`, rounded `{rounded.xs}`, padding 16px.200201**`cta-banner`** — Closing CTA panel near page bottom.202- Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.headline}`, rounded `{rounded.lg}`, padding 48px.203204### Inputs & Forms205206**`text-input`** + **`text-input-focused`** — Form fields on `/contact/sales` and signup overlays.207- Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.md}`, padding 8px 12px.208- Focused state retains the same surface; the focus ring is a 2px `{colors.primary-focus}` outline at 50% opacity.209210### Status & Build Page211212**`changelog-row`** — Each row in `/build` (changelog page) listing version, date, and changes.213- Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.xs}`, padding 24px 0. 1px `{colors.hairline}` bottom rule.214215**`status-badge`** — Small status pill.216- Background `{colors.surface-2}`, text `{colors.ink-muted}`, type `{typography.caption}`, rounded `{rounded.pill}`, padding 2px 8px.217218### Navigation219220**`top-nav`** — Sticky dark bar with the Linear wordmark left, primary nav links centered, and a `button-secondary` ("Sign in") + `button-primary` ("Get started") pair right.221- Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body-sm}`, height 56px.222223### Footer224225**`footer`** — Dense link grid on `{colors.canvas}` with the Linear wordmark left.226- Background `{colors.canvas}`, text `{colors.ink-subtle}`, type `{typography.caption}`, padding 64px 32px.227228## Do's and Don'ts229230### Do231232- Reserve `{colors.canvas}` (#010102) as the system's anchor surface — the faint blue tint is intentional.233- Use `{colors.primary}` lavender ONLY for: brand mark, primary CTA, focus ring, link emphasis.234- Use the four-step surface ladder for hierarchy. Avoid skipping levels.235- Pair display weight 600 with body weight 400 — Linear resists 700+ display weights.236- Apply negative letter-spacing aggressively on display.237- Use product UI screenshots as the protagonist of every section.238- Compose CTAs as `{rounded.md}` 8px corners.239240### Don't241242- Don't ship a light-mode marketing page.243- Don't use lavender as a section background or card fill.244- Don't introduce a second chromatic accent (orange, pink, green for marketing).245- Don't add atmospheric gradients or spotlight cards.246- Don't pill-round CTAs.247- Don't use `#000000` true black as the canvas.248- Don't combine multiple bright accents in product screenshot mockups.249250## Responsive Behavior251252### Breakpoints253254| Name | Width | Key Changes |255|---|---|---|256| Desktop-XL | 1440px | Default desktop layout |257| Desktop | 1280px | Card grid 3-up maintained |258| Tablet | 1024px | Card grid 3-up → 2-up |259| Mobile-Lg | 768px | Pricing comparison becomes accordion; nav hamburger |260| Mobile | 480px | Single-column; display-xl scales 80px → ~36px |261262### Touch Targets263264- CTAs hold ≥40px tap height across viewports.265- Pricing tab pills hold ≥36px tap height; touch viewports grow to ≥44px.266- Form inputs hold ≥44px tap target on touch.267268### Collapsing Strategy269270- **Top nav**: links collapse to hamburger below 768px.271- **Card grids**: 3-up → 2-up at 1024px → 1-up below 768px.272- **Pricing comparison**: per-tier accordion below 768px.273- **Display type**: `{typography.display-xl}` 80px scales toward `{typography.display-md}` 40px on mobile.274275### Image Behavior276277- Product UI screenshots maintain aspect ratio and never crop.278- Customer logos in the marquee may collapse from 6-up to 3-up below 768px.279280## Iteration Guide2812821. Focus on ONE component at a time and reference it by its `components:` token name.2832. When introducing a section, decide first which surface lift it lives on.2843. Default body to `{typography.body}` at weight 400.2854. Run `npx @google/design.md lint DESIGN.md` after edits.2865. Add new variants as separate component entries.2876. Treat lavender as scarce: brand mark, primary CTA, focus, link emphasis.2887. Lead every section with a product UI screenshot.289290## Known Gaps291292- The four-step surface ladder values are extracted directly from Linear's `--color-bg-level-3`, `--color-line-tint`, etc. CSS variables; they are Linear's canonical surface spec.293- Form-field error and validation styling is not visible on the inspected pages.294- Light mode is not documented because the marketing site does not ship a light theme.295- Linear's actual product UI uses a richer color-tag palette (red, orange, yellow, green, blue, purple) for issue priorities and project labels — those colors live in the in-product surfaces shown in mockups.296- The custom display, text, and mono families are proprietary; an open-source substitute is acceptable.