---
name: linear-design-reference
provider: DesignSkill (https://designskill.dev)
reference: linear.app
source_url: https://linear.app/
tool: designskill-extract/3.2.0
extracted_at: 2026-07-27T07:47:21.294Z
mode: full-render
classification: reference_only
---

# Linear — Design Reference (measured)

Measured design tokens extracted from `https://linear.app/` by designskill-extract/3.2.0.
Every value below was observed in the live page (×N = observation count). Values not listed were **not observed** — do not invent them.
This document is `reference_only`: an analysis of a third-party site, not a license to its brand assets.

## Overview

- Extraction mode: **full-render** (viewports 390/768/1440px × light/dark), 1 page(s), 870 observation records.
- Primary action color observed as `#e4f222` (basis: cross-validated, confidence 0.94).
- Dominant font family: **Inter Variable** (×1754; secondary Berkeley Mono ×268).
- Type scale observed at 8 sizes from 10px to 24px.
- Corner radius values in use: 6px, 2px, 4px, 12px….

## Colors

### Role Tokens

Semantic roles inferred from observed usage. `basis` tells how the role was established (declared CSS var > cross-validated > inferred).

| Token | Value | Basis | Confidence | Observed |
|---|---|---|---|---|
| `{color.primary}` | `#e4f222` | cross-validated | 0.94 | ×8 |
| `{color.background}` | `#ffffff` | declared | 0.92 | ×520 — --kbd-bg |
| `{color.ink}` | `#08090a` | cross-validated | 0.93 | ×341 |
| `{color.muted}` | `#8a8f98` | inferred | 0.7 | ×575 |
| `{color.surface}` | `#f7f8f8` | inferred | 0.7 | ×219 |
| `{color.accent}` | `#0f3338` | inferred | 0.65 | ×5 |

### Observed Palette

Full measured palette ordered by usage share. `Used in` lists the CSS properties the color appeared on.

| Hex | Share | Used in | Observed |
|---|---|---|---|
| `#8a8f98` | 18.0% | color, margin-left | ×575 (cross-validated, 0.94) |
| `#ffffff` | 16.3% | border-color, background-color | ×520 (observed, 0.79) |
| `#62666d` | 15.0% | color, background-color | ×481 (observed, 0.79) |
| `#d0d6e0` | 14.8% | color, --token-punctuation | ×475 (cross-validated, 0.94) |
| `#08090a` | 10.7% | background-color, box-shadow, color, border-color, -webkit-mask-image | ×341 (cross-validated, 0.93) |
| `#f7f8f8` | 6.9% | color, border-color, background-color, --carousel-gap | ×219 (cross-validated, 0.93) |
| `#f79ce0` | 2.2% | --token-keyword, color | ×69 (cross-validated, 0.91) |
| `#f7bf8b` | 1.4% | --token-variable, color | ×45 (cross-validated, 0.91) |
| `#e2e4e7` | 2.1% | --token-text, color, background-color, border-color | ×67 (cross-validated, 0.91) |
| `#23252a` | 2.2% | border-color, background-color, fill-opacity | ×69 (cross-validated, 0.91) |
| `#00ff05` | 1.2% | background-color | ×38 (observed, 0.75) |
| `#8fa6ff` | 1.0% | --token-constant, color | ×33 (cross-validated, 0.9) |
| `#6366f1` | 0.8% | gap, background-color | ×25 (cross-validated, 0.9) |
| `#ffdf9f` | 0.7% | --token-string, color | ×21 (cross-validated, 0.89) |
| `#83dcdc` | 0.7% | --token-entity, color | ×21 (cross-validated, 0.89) |
| `#eb5757` | 0.6% | gap, background-color, color, --diff-old-color | ×20 (cross-validated, 0.89) |

## Typography

### Font Families

| Family | Observed |
|---|---|
| `Inter Variable` | ×1754 |
| `Berkeley Mono` | ×268 |

Use **Inter Variable** as the default family — it accounts for the overwhelming majority of observed text nodes.

### Type Scale

| Token | Size | Observed |
|---|---|---|
| `{type.display}` | 24px | ×36 |
| `{type.h1}` | 16px | ×53 |
| `{type.h2}` | 15px | ×287 |
| `{type.h3}` | 14px | ×343 |
| `{type.body-lg}` | 13px | ×506 |
| `{type.body}` | 12px | ×565 |
| `{type.body-sm}` | 11px | ×35 |
| `{type.caption}` | 10px | ×148 |

The most frequently observed size is **12px** (×565) — treat it as the default body size.

## Spacing

| Value | Observed |
|---|---|
| `8px` | ×631 |
| `12px` | ×260 |
| `4px` | ×147 |
| `24px` | ×113 |
| `22px` | ×84 |
| `3px` | ×80 |
| `2px` | ×79 |
| `16px` | ×71 |
| `48px` | ×60 |
| `20px` | ×48 |
| `28px` | ×48 |
| `6px` | ×44 |

## Shape (Border Radius)

| Value | Observed |
|---|---|
| `6px` | ×217 |
| `2px` | ×186 |
| `4px` | ×146 |
| `12px` | ×102 |
| `8px` | ×66 |
| `22px` | ×20 |
| `16px` | ×18 |
| `7px` | ×12 |

## Elevation

| Shadow | Observed |
|---|---|
| `rgba(0, 0, 0, 0.03) 0px 1.2px 0px 0px` | ×124 |
| `rgba(0, 0, 0, 0.4) 0px 2px 4px 0px` | ×64 |
| `rgba(0, 0, 0, 0.2) 0px 0px 12px 0px inset` | ×24 |
| `rgb(35, 37, 42) 0px 0px 0px 1px inset` | ×20 |
| `rgba(0, 0, 0, 0.2) 0px 0px 0px 1px` | ×18 |
| `rgba(8, 9, 10, 0.6) 0px 4px 32px 0px` | ×8 |

## Motion

| Duration | Observed |
|---|---|
| `0.16s` | ×196 |
| `0.1s` | ×42 |
| `0.2s` | ×2 |
| `160ms` | ×2 |
| `.22s` | ×2 |

## Components

Measured computed styles of representative components (desktop viewport).

| Component | Measured spec | Samples |
|---|---|---|
| button.primary | bg `#e5e5e6` · text `#08090a` · radius `999px` · padding `0px 12px` · font `13px/510` · shadow `rgba(0, 0, 0, 0.01) 0px 5px 2px 0px, rgba(0, 0, 0, 0.04) 0px 3px 2px 0px, rgba(0, 0, 0, 0.07) 0px 1px 1px 0px` | ×2 |
| form.input | bg `#ffffff` · text `#d0d6e0` · border `1px solid rgba(255, 255, 255, 0.08)` · radius `6px` · padding `12px 14px` · height `68` | ×5 |
| card | bg `#ffffff` · radius `6px` · border `1px solid rgba(255, 255, 255, 0.08)` · shadow `rgba(0, 0, 0, 0.2) 0px 0px 0px 1px` · padding `12px 20px 16px 15px` | ×2 |
| badge | text `#8a8f98` · radius `999px` · font `13px/400` · padding `0px 12px` | ×8 |
| nav | height `73px` · position `fixed` · link `#f7f8f8` · backdrop `blur(20px)` | — |

### Hero Gradient (observed)

```css
background-image: radial-gradient(52.53% 57.5% at 50% 100%, rgba(8, 9, 10, 0) 0%, rgba(8, 9, 10, 0.5) 100%), linear-gradient(rgb(8, 9, 10) 10%, rgb(208, 214, 224) 100%);
```

### Interaction States (observed)

| State | Property | From | To |
|---|---|---|---|
| hover | background-color | `rgba(0, 0, 0, 0)` | `rgba(255, 255, 255, 0.08)` |
| hover | color | `rgb(138, 143, 152)` | `rgb(247, 248, 248)` |
| hover | border-color | `rgb(138, 143, 152)` | `rgb(247, 248, 248)` |
| focus | background-color | `rgba(0, 0, 0, 0)` | `rgba(255, 255, 255, 0.08)` |
| focus | color | `rgb(138, 143, 152)` | `rgb(247, 248, 248)` |
| focus | border-color | `rgb(138, 143, 152)` | `rgb(247, 248, 248)` |

## Accessibility (WCAG Contrast)

| FG | BG | Ratio | AA | Source |
|---|---|---|---|---|
| `#8a8f98` | `#08090a` | 6.13 | pass | observed ×226 |
| `#62666d` | `#0f1011` | 3.3 | fail | observed ×127 |
| `#d0d6e0` | `#08090a` | 13.64 | pass | observed ×89 |
| `#62666d` | `#121314` | 3.22 | fail | observed ×69 |
| `#f7f8f8` | `#08090a` | 18.73 | pass | observed ×64 |
| `#d0d6e0` | `#0f1011` | 13.04 | pass | observed ×58 |
| `#d0d6e0` | `#121314` | 12.73 | pass | observed ×48 |
| `#62666d` | `#08090a` | 3.45 | fail | observed ×37 |
| `#d0d6e0` | `#090a0b` | 13.56 | pass | observed ×36 |
| `#8a8f98` | `#0f1011` | 5.86 | pass | observed ×34 |
| `#f79ce0` | `#0f1011` | 9.78 | pass | observed ×34 |
| `#f7f8f8` | `#0f1011` | 17.9 | pass | observed ×30 |
| `#08090a` | `#ffffff` | 19.93 | pass | ink_on_background |
| `#ffffff` | `#e4f222` | 1.23 | fail | white_on_primary |
| `#8a8f98` | `#ffffff` | 3.25 | fail | muted_on_background |

5 measured pair(s) fail AA — if you reuse those pairs, adjust lightness until the ratio reaches 4.5:1.

## Usage Rules

### Do
- Use `{color.primary}` (`#e4f222`) for primary actions only — that is where it was observed.
- Default text pairing: `{color.ink}` (`#08090a`) on `{color.background}` (`#ffffff`).
- Set all text in `Inter Variable` (fallbacks only for glyph coverage).
- Pick corner radii from the measured set (6px, 2px, 4px, 12px) — no intermediate values were observed.
- Cite this file's token names (`{color.*}`, `{type.*}`) when generating UI so output stays traceable to observations.

### Don't
- Don't invent colors, sizes, shadows, or spacing not listed above — absence means *not observed*, and this document records observations only.
- Don't copy brand assets (logo, wordmark, imagery, copy) — `reference_only` covers measured style values, not brand identity.

## Provenance

- Source: https://linear.app/ (1 page(s))
- Tool: designskill-extract/3.2.0 · extracted 2026-07-27T07:47:21.294Z
- Mode: full-render — 풀렌더 모드 — 3뷰포트 × 라이트/다크 computed style + 상태 관측.
- Blocks observed: 00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12 · missing: none
- Warning: primary 불일치: static=#02b8cc vs render=#e4f222 — render 채택

---

<sub>Generated & served by [DesignSkill](https://designskill.dev)</sub>
