---
name: asana-design-reference
provider: DesignSkill (https://designskill.dev)
reference: asana.com
source_url: https://asana.com/
tool: designskill-extract/3.2.0
extracted_at: 2026-07-27T09:09:02.453Z
mode: full-render
classification: reference_only
---

# Asana — Design Reference (measured)

Measured design tokens extracted from `https://asana.com/` 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), 580 observation records.
- Primary action color observed as `#f06a6a` (basis: inferred, confidence 0.8).
- Dominant font family: **TWK Lausanne** (×1342; secondary Hiragino Kaku Gothic ProN ×84).
- Type scale observed at 8 sizes from 11px to 24px.
- Corner radius values in use: 8px, 16px, 100px, 20px….
- Not observed in this extraction: forms, cards, badges.

## 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}` | `#f06a6a` | inferred | 0.8 | ×27 |
| `{color.background}` | `#ffffff` | cross-validated | 0.95 | ×1033 |
| `{color.ink}` | `#0d0d0d` | cross-validated | 0.95 | ×709 |
| `{color.muted}` | `#6e6e6e` | inferred | 0.7 | ×146 |
| `{color.surface}` | `#f3f3f3` | inferred | 0.7 | ×633 |
| `{color.accent}` | `#222b37` | inferred | 0.62 | ×158 |

### Observed Palette

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

| Hex | Share | Used in | Observed |
|---|---|---|---|
| `#ffffff` | 30.5% | background-color, color, border-color, fill, custom-property | ×1033 (cross-validated, 0.95) |
| `#0d0d0d` | 20.9% | color, --glow-white, background-color, border-color, fill | ×709 (cross-validated, 0.95) |
| `#f3f3f3` | 18.7% | background-color, border-color, color, custom-property, --darkmode-icon | ×633 (cross-validated, 0.94) |
| `#3d3d3d` | 8.2% | color, background-color | ×278 (cross-validated, 0.93) |
| `#e7e7e7` | 5.3% | background-color, border-color, color, fill, custom-property | ×178 (cross-validated, 0.93) |
| `#6e6e6e` | 4.3% | border-color, color, background-color, fill, custom-property | ×146 (cross-validated, 0.92) |
| `#222b37` | 4.7% | color, background-color, border-color, box-shadow, custom-property | ×158 (inferred, 0.62) |
| `#f06a6a` | 0.8% | background-color, border-color, color, --darkmode-button-primary-hover | ×27 (inferred, 0.6) |
| `#796eff` | 0.8% | background-color, color, border-color, stroke, custom-property | ×27 (inferred, 0.6) |
| `#cd4848` | 0.6% | color, border-color, background-color, fill | ×20 (inferred, 0.59) |
| `#d5dce0` | 0.7% | border-color, color, background-color, custom-property, --darkmode-border-weak | ×22 (cross-validated, 0.9) |
| `#000000` | 0.5% | color, border-color, box-shadow | ×18 (inferred, 0.59) |
| `#635ac7` | 0.5% | border-color, background-color, color, custom-property | ×16 (inferred, 0.59) |
| `#b7bfc6` | 0.4% | color, border-color, background-color, fill, custom-property | ×15 (inferred, 0.59) |
| `#848f99` | 0.4% | color, border-color, custom-property | ×13 (inferred, 0.59) |
| `#9ca6af` | 0.3% | color, border-color, custom-property | ×9 (inferred, 0.58) |

## Typography

### Font Families

| Family | Observed |
|---|---|
| `TWK Lausanne` | ×1342 |
| `Hiragino Kaku Gothic ProN` | ×84 |
| `haptik` | ×2 |
| `proxima-nova` | ×2 |
| `asanaIcons` | ×2 |
| `monospace` | ×2 |

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

### Type Scale

| Token | Size | Observed |
|---|---|---|
| `{type.display}` | 24px | ×40 |
| `{type.h1}` | 20px | ×132 |
| `{type.h2}` | 16px | ×298 |
| `{type.h3}` | 15px | ×89 |
| `{type.body-lg}` | 14px | ×174 |
| `{type.body}` | 13px | ×162 |
| `{type.body-sm}` | 12px | ×358 |
| `{type.caption}` | 11px | ×110 |

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

## Spacing

| Value | Observed |
|---|---|
| `16px` | ×1175 |
| `32px` | ×737 |
| `24px` | ×606 |
| `8px` | ×471 |
| `48px` | ×448 |
| `12px` | ×440 |
| `80px` | ×418 |
| `4px` | ×410 |
| `160px` | ×335 |
| `64px` | ×330 |
| `128px` | ×290 |
| `96px` | ×288 |

## Shape (Border Radius)

| Value | Observed |
|---|---|
| `8px` | ×616 |
| `16px` | ×153 |
| `100px` | ×150 |
| `20px` | ×136 |
| `4px` | ×108 |
| `3px` | ×42 |
| `64px` | ×30 |
| `10px` | ×24 |

## Elevation

| Shadow | Observed |
|---|---|
| `#243242` | ×42 |
| `#222b37` | ×13 |
| `0 20px 30px 0 rgba(36, 50, 66, 0.14)` | ×12 |
| `#000000` | ×9 |
| `0 3px 5px 0 rgba(36, 50, 66, 0.1)` | ×6 |
| `0 2px 8px 0 rgba(0, 0, 0, 0.15)` | ×5 |

## Motion

| Duration | Observed |
|---|---|
| `0.3s` | ×112 |
| `0.2s` | ×79 |
| `0.15s` | ×48 |
| `300ms` | ×14 |
| `225ms` | ×10 |

## Components

Measured computed styles of representative components (desktop viewport).

| Component | Measured spec | Samples |
|---|---|---|
| button.primary | bg `#0d0d0d` · text `#ffffff` · radius `100px` · padding `0px 16px` · font `14px/500` | ×17 |
| nav | height `68px` · position `sticky` · link `#0d0e10` | — |

### Hero Gradient (observed)

```css
background-image: linear-gradient(90deg, rgb(255, 69, 62) 0%, rgb(244, 129, 244) 50%, rgb(255, 69, 62) 100%);
```

## Accessibility (WCAG Contrast)

| FG | BG | Ratio | AA | Source |
|---|---|---|---|---|
| `#f3f3f3` | `#0d0d0d` | 17.52 | pass | observed ×192 |
| `#0d0d0d` | `#ffffff` | 19.44 | pass | observed ×101 |
| `#ffffff` | `#0d0d0d` | 19.44 | pass | observed ×78 |
| `#0d0d0d` | `#f3f3f3` | 17.52 | pass | observed ×57 |
| `#ffffff` | `#3d3d3d` | 10.86 | pass | observed ×57 |
| `#e7e7e7` | `#3d3d3d` | 8.78 | pass | observed ×45 |
| `#6e6e6e` | `#ffffff` | 5.1 | pass | observed ×42 |
| `#3d3d3d` | `#ffffff` | 10.86 | pass | observed ×21 |
| `#0d0d0d` | `#fafafa` | 18.62 | pass | observed ×12 |
| `#3d3d3d` | `#f3f3f3` | 9.79 | pass | observed ×4 |
| `#0d0e10` | `#ffffff` | 19.31 | pass | observed ×3 |
| `#3e3e3e` | `#ffffff` | 10.7 | pass | observed ×3 |
| `#0d0d0d` | `#ffffff` | 19.44 | pass | ink_on_background |
| `#ffffff` | `#f06a6a` | 3.01 | fail | white_on_primary |
| `#6e6e6e` | `#ffffff` | 5.1 | pass | muted_on_background |

1 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}` (`#f06a6a`) for primary actions only — that is where it was observed.
- Default text pairing: `{color.ink}` (`#0d0d0d`) on `{color.background}` (`#ffffff`).
- Set all text in `TWK Lausanne` (fallbacks only for glyph coverage).
- Pick corner radii from the measured set (8px, 16px, 100px, 20px) — 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 assume the missing blocks (forms, cards, badges) don't exist on the site — they were simply not captured in this run.
- Don't copy brand assets (logo, wordmark, imagery, copy) — `reference_only` covers measured style values, not brand identity.

## Provenance

- Source: https://asana.com/ (1 page(s))
- Tool: designskill-extract/3.2.0 · extracted 2026-07-27T09:09:02.453Z
- Mode: full-render — 풀렌더 모드 — 3뷰포트 × 라이트/다크 computed style + 상태 관측.
- Blocks observed: 00, 01, 02, 03, 04, 05, 09, 10, 11, 12 · missing: forms, cards, badges
- Degraded stages (extraction failure ≠ design change — exclude from diffs): state-observation
- Warning: primary 불일치: static=#243242 vs render=#f06a6a — render 채택

---

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