---
name: miro-design-reference
provider: DesignSkill (https://designskill.dev)
reference: miro.com
source_url: https://miro.com/
tool: designskill-extract/3.2.0
extracted_at: 2026-07-27T08:45:25.702Z
mode: full-render
classification: reference_only
---

# Miro — Design Reference (measured)

Measured design tokens extracted from `https://miro.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), 753 observation records.
- Primary action color observed as `#171717` (basis: declared, confidence 0.85).
- Dominant font family: **sans-serif** (×559; secondary Noto Sans ×359).
- Type scale observed at 8 sizes from 12px to 48px.
- Corner radius values in use: 8px, 20px, 24px, 40px….
- Not observed in this extraction: nav, 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}` | `#171717` | declared | 0.85 | ×0 — --sidebar-primary |
| `{color.background}` | `#ffffff` | declared | 0.92 | ×514 — --background |
| `{color.ink}` | `#0a0a0a` | declared | 0.92 | ×0 — --foreground |
| `{color.muted}` | `#f5f5f5` | declared | 0.9 | ×0 — --muted |
| `{color.surface}` | `#ffffff` | declared | 0.9 | ×514 — --card |
| `{color.accent}` | `#f5f5f5` | declared | 0.9 | ×0 — --accent |

### Observed Palette

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

| Hex | Share | Used in | Observed |
|---|---|---|---|
| `#1c1c1e` | 20.5% | background-color, border-color, color, --framer-text-color, custom-property | ×518 (cross-validated, 0.94) |
| `#ffffff` | 20.4% | background-color, border-color, --framer-text-color, color, --border-color | ×514 (cross-validated, 0.94) |
| `#0000ee` | 17.8% | color | ×450 (observed, 0.79) |
| `#000000` | 10.0% | color, background-color, border-color, box-shadow, --foreground | ×252 (cross-validated, 0.93) |
| `#f0f0f0` | 7.0% | background-color, border-color, --border-color, custom-property | ×177 (cross-validated, 0.93) |
| `#555a6a` | 4.2% | color, --framer-text-color, custom-property, lv, border-color | ×106 (cross-validated, 0.92) |
| `#c7cad5` | 1.9% | custom-property, color, border-color | ×48 (cross-validated, 0.91) |
| `#0099ff` | 1.4% | --framer-link-text-color | ×35 (inferred, 0.6) |
| `#3859ff` | 1.2% | transform, custom-property, background-color, color, border-color | ×31 (cross-validated, 0.9) |
| `#000000` | 0.8% | background-color | ×20 (observed, 0.74) |
| `#e5e2ff` | 1.1% | background-color, --tw-color-lilac-light, -webkit-box-shadow | ×28 (cross-validated, 0.9) |
| `#ffe6cd` | 0.8% | background-color, --tw-color-orange-light | ×19 (cross-validated, 0.89) |
| `#e1fbf9` | 0.8% | background-color, --tw-color-moss-light | ×19 (cross-validated, 0.89) |
| `#fffae7` | 0.8% | background-color, --tw-color-yellow-light | ×19 (cross-validated, 0.89) |
| `#121212` | 1.1% | object-fit, lv, color | ×27 (cross-validated, 0.9) |
| `#c3f4d6` | 0.7% | background-color | ×18 (cross-validated, 0.89) |

## Typography

### Font Families

| Family | Observed |
|---|---|
| `sans-serif` | ×559 |
| `Noto Sans` | ×359 |
| `Roobert PRO Medium` | ×262 |
| `&quot` | ×121 |
| `Nanum Pen Script` | ×97 |
| `Roobert PRO` | ×64 |

Use **sans-serif** as the default family — it accounts for the overwhelming majority of observed text nodes.

### Type Scale

| Token | Size | Observed |
|---|---|---|
| `{type.display}` | 48px | ×65 |
| `{type.h1}` | 32px | ×30 |
| `{type.h2}` | 24px | ×81 |
| `{type.h3}` | 20px | ×47 |
| `{type.body-lg}` | 18px | ×123 |
| `{type.body}` | 16px | ×215 |
| `{type.body-sm}` | 14px | ×193 |
| `{type.caption}` | 12px | ×594 |

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

## Spacing

| Value | Observed |
|---|---|
| `4px` | ×324 |
| `12px` | ×241 |
| `16px` | ×222 |
| `8px` | ×200 |
| `24px` | ×193 |
| `10px` | ×166 |
| `6px` | ×154 |
| `20px` | ×138 |
| `7px` | ×94 |
| `32px` | ×90 |
| `28px` | ×72 |
| `48px` | ×67 |

## Shape (Border Radius)

| Value | Observed |
|---|---|
| `8px` | ×243 |
| `20px` | ×98 |
| `24px` | ×46 |
| `40px` | ×46 |
| `16px` | ×34 |
| `12px` | ×24 |
| `4px` | ×2 |
| `6px` | ×2 |

## Elevation

| Shadow | Observed |
|---|---|
| `#000000` | ×81 |
| `none"
style="--border-bottom-width:1px` | ×18 |
| `rgb(122, 144, 254) 0px 1px 1px 0px inset` | ×16 |
| `rgba(0, 0, 0, 0.18) 0px 0.602187px 0.602187px -1.25px, rgba(0, 0, 0, 0.16) 0px 2.28853px 2.28853px -2.5px, rgba(0, 0, 0, 0.06) 0px 10px 10px -3.75px` | ×12 |
| `0 0 0 4px #d9e0ff` | ×6 |
| `none"
style="border-bottom-left-radius:8px` | ×6 |

## Motion

| Duration | Observed |
|---|---|
| `0.2s` | ×42 |
| `0.15s` | ×26 |
| `0.25s` | ×24 |
| `250ms` | ×18 |
| `0.1s` | ×6 |

## Components

Measured computed styles of representative components (desktop viewport).

| Component | Measured spec | Samples |
|---|---|---|
| button.primary | bg `#3859ff` · text `#ffffff` · radius `8px` · padding `8px 12px` · font `16px/600` | ×2 |
| button.outline | text `#1c1c1e` · border `1px solid rgb(199, 202, 213)` · radius `8px` · padding `8px 12px` · font `16px` | ×3 |
| form.input | bg `#ffffff` · text `#1c1c1e` · border `1px solid rgb(233, 234, 239)` · radius `8px` · padding `16px` · height `48` | ×1 |

### Hero Gradient (observed)

```css
background-image: radial-gradient(circle, rgb(194, 200, 255) 0%, rgb(194, 200, 255) 22%, rgba(0, 0, 0, 0) 60%), radial-gradient(circle at 41.1699% 76.5712%, rgb(209, 176, 255) 0%, rgb(209, 176, 255) 22%, rgba(0, 0, 0, 0) 60%), radial-gradient(circle at 31.40;
```

### Interaction States (observed)

| State | Property | From | To |
|---|---|---|---|
| hover | background-color | `rgba(0, 0, 0, 0)` | `rgb(244, 244, 241)` |
| hover | background-color | `rgba(0, 0, 0, 0)` | `rgb(244, 244, 241)` |
| focus | background-color | `rgba(0, 0, 0, 0)` | `rgb(244, 244, 241)` |
| focus | box-shadow | `none` | `rgb(56, 89, 255) 0px 0px 0px 1px, rgb(233, 234, 239) 0px 0px 0px 2px, rgb(56, 89, 255) 0px 0px 0px 5px, rgb(233, 234, 239) 0px 0px 0px 9px` |
| focus | background-color | `rgba(0, 0, 0, 0)` | `rgb(244, 244, 241)` |

## Accessibility (WCAG Contrast)

| FG | BG | Ratio | AA | Source |
|---|---|---|---|---|
| `#0000ee` | `#ffffff` | 9.4 | pass | observed ×225 |
| `#ffffff` | `#1c1c1e` | 17.01 | pass | observed ×102 |
| `#1c1c1e` | `#ffffff` | 17.01 | pass | observed ×70 |
| `#000000` | `#ffffff` | 21 | pass | observed ×51 |
| `#1c1c1e` | `#f0f0f0` | 14.93 | pass | observed ×30 |
| `#555a6a` | `#f0f0f0` | 6.03 | pass | observed ×22 |
| `#ffffff` | `#f0f0f0` | 1.14 | fail | observed ×18 |
| `#555a6a` | `#ffffff` | 6.87 | pass | observed ×15 |
| `#c7cad5` | `#1c1c1e` | 10.4 | pass | observed ×15 |
| `#ffffff` | `#3859ff` | 5.2 | pass | observed ×10 |
| `#1c1c1e` | `#fde050` | 12.93 | pass | observed ×6 |
| `#1c1c1e` | `#fafafc` | 16.32 | pass | observed ×5 |
| `#0a0a0a` | `#ffffff` | 19.8 | pass | ink_on_background |
| `#ffffff` | `#171717` | 17.93 | pass | white_on_primary |
| `#f5f5f5` | `#ffffff` | 1.09 | fail | muted_on_background |

2 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}` (`#171717`) for primary actions only — that is where it was observed.
- Default text pairing: `{color.ink}` (`#0a0a0a`) on `{color.background}` (`#ffffff`).
- Set all text in `sans-serif` (fallbacks only for glyph coverage).
- Pick corner radii from the measured set (8px, 20px, 24px, 40px) — 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 (nav, 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://miro.com/ (1 page(s))
- Tool: designskill-extract/3.2.0 · extracted 2026-07-27T08:45:25.702Z
- Mode: full-render — 풀렌더 모드 — 3뷰포트 × 라이트/다크 computed style + 상태 관측.
- Blocks observed: 01, 02, 03, 04, 05, 06, 09, 10, 11, 12 · missing: nav, cards, badges
- Degraded stages (extraction failure ≠ design change — exclude from diffs): state-observation
- Warning: primary 불일치: static=#0099ff vs render=#171717 — render 채택

---

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