---
name: 29cm-design-reference
provider: DesignSkill (https://designskill.dev)
reference: 29cm.co.kr
source_url: https://www.29cm.co.kr/
tool: designskill-extract/3.2.0
extracted_at: 2026-07-27T09:29:10.159Z
mode: full-render
classification: reference_only
---

# 29CM — Design Reference (measured)

Measured design tokens extracted from `https://www.29cm.co.kr/` 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), 433 observation records.
- Primary action color observed as `#ff4800` (basis: cross-validated, confidence 0.98).
- Dominant font family: **Pretendard Variable** (×2398; secondary ui-monospace ×1).
- Type scale observed at 8 sizes from 10px to 32px.
- Corner radius values in use: 2px, 4px, 6px, 8px….
- Not observed in this extraction: nav, 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}` | `#ff4800` | cross-validated | 0.98 | ×209 |
| `{color.background}` | `#f4f4f4` | cross-validated | 0.95 | ×978 |
| `{color.ink}` | `#000000` | cross-validated | 0.95 | ×1137 |
| `{color.muted}` | `#5d5d5d` | inferred | 0.7 | ×384 |
| `{color.surface}` | `#ffffff` | inferred | 0.7 | ×540 |
| `{color.accent}` | `#00bbff` | inferred | 0.59 | ×11 |

### Observed Palette

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

| Hex | Share | Used in | Observed |
|---|---|---|---|
| `#000000` | 23.3% | background-color, border-color, color, box-shadow, custom-property | ×1137 (cross-validated, 0.95) |
| `#f4f4f4` | 20.1% | background-color, color, border-color, stroke, custom-property | ×978 (cross-validated, 0.95) |
| `#ffffff` | 11.1% | background-color, color, border-color, --tw-ring-offset-color | ×540 (cross-validated, 0.94) |
| `#474747` | 8.2% | color, background-color, border-color, custom-property | ×400 (cross-validated, 0.94) |
| `#5d5d5d` | 7.9% | background-color, color | ×384 (observed, 0.79) |
| `#dddddd` | 5.9% | border-color, background-color, color, scrollbar-color, custom-property | ×286 (cross-validated, 0.93) |
| `#5d5d5d` | 4.9% | color | ×240 (observed, 0.78) |
| `#000000` | 4.8% | border-color | ×236 (observed, 0.78) |
| `#ff4800` | 4.3% | color, background-color, border-color, custom-property | ×209 (cross-validated, 0.93) |
| `#1c1c1c` | 4.0% | color, background-color, custom-property | ×195 (inferred, 0.63) |
| `#5d5d5d` | 1.8% | color, background-color, border-color, fill, custom-property | ×88 (cross-validated, 0.91) |
| `#ffffff` | 0.8% | color, background-color | ×40 (observed, 0.75) |
| `#a0a0a0` | 0.4% | color, background-color, border-color, custom-property | ×17 (cross-validated, 0.89) |
| `#00bbff` | 0.2% | border-color, outline | ×11 (inferred, 0.59) |
| `#c4c4c4` | 0.3% | border-color, background-color, color, custom-property | ×13 (inferred, 0.59) |
| `#ffffff` | 0.2% | border-color, background-color | ×10 (observed, 0.73) |

## Typography

### Font Families

| Family | Observed |
|---|---|
| `Pretendard Variable` | ×2398 |
| `ui-monospace` | ×1 |

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

### Type Scale

| Token | Size | Observed |
|---|---|---|
| `{type.display}` | 32px | ×186 |
| `{type.h1}` | 22px | ×85 |
| `{type.h2}` | 18px | ×194 |
| `{type.h3}` | 16px | ×39 |
| `{type.body-lg}` | 15px | ×88 |
| `{type.body}` | 12px | ×1013 |
| `{type.body-sm}` | 11px | ×243 |
| `{type.caption}` | 10px | ×465 |

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

## Spacing

| Value | Observed |
|---|---|
| `2px` | ×1352 |
| `14px` | ×484 |
| `10px` | ×437 |
| `12px` | ×393 |
| `8px` | ×330 |
| `4px` | ×276 |
| `3px` | ×236 |
| `32px` | ×177 |
| `20px` | ×61 |
| `6px` | ×57 |
| `16px` | ×39 |
| `24px` | ×26 |

## Shape (Border Radius)

| Value | Observed |
|---|---|
| `2px` | ×506 |
| `4px` | ×479 |
| `6px` | ×192 |
| `8px` | ×4 |
| `1px` | ×1 |

## Elevation

| Shadow | Observed |
|---|---|
| `#000000` | ×18 |
| `var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)` | ×8 |
| `2px -1px 6px 0 rgba(0,0,0,.4)` | ×1 |
| `1px 2px 4.5px 0 rgba(0,0,0,.4)` | ×1 |

## Motion

| Duration | Observed |
|---|---|
| `0.15s` | ×140 |
| `.15s` | ×10 |
| `0.3s` | ×2 |
| `1s` | ×2 |
| `.2s` | ×2 |

## Components

Measured computed styles of representative components (desktop viewport).

| Component | Measured spec | Samples |
|---|---|---|
| button.primary | bg `#ffffff` · text `#000000` · radius `4px` · padding `16px 16px 16px 20px` · font `14px/700` | ×1 |

### Hero Gradient (observed)

```css
background-image: linear-gradient(rgba(255, 255, 255, 0), rgb(255, 255, 255) 92.5%);
```

### Interaction States (observed)

| State | Property | From | To |
|---|---|---|---|
| focus | outline-color | `rgb(0, 0, 0)` | `rgb(0, 95, 204)` |
| focus | outline-width | `3px` | `1px` |
| focus | outline-color | `rgb(0, 0, 0)` | `rgb(0, 95, 204)` |

## Accessibility (WCAG Contrast)

| FG | BG | Ratio | AA | Source |
|---|---|---|---|---|
| `#000000` | `#000000` | 1 | fail | observed ×463 |
| `#474747` | `#000000` | 2.26 | fail | observed ×190 |
| `#ffffff` | `#f4f4f4` | 1.1 | fail | observed ×186 |
| `#5d5d5d` | `#000000` | 3.19 | fail | observed ×133 |
| `#ff4800` | `#000000` | 6.18 | pass | observed ×96 |
| `#ffffff` | `#000000` | 21 | pass | observed ×54 |
| `#000000` | `#ffffff` | 21 | pass | observed ×25 |
| `#ffffff` | `#ff4800` | 3.4 | fail | observed ×1 |
| `#5d5d5d` | `#f4f4f4` | 5.99 | pass | observed ×1 |
| `#a0a0a0` | `#000000` | 8.03 | pass | observed ×1 |
| `#ffffff` | `#a0a0a0` | 2.61 | fail | observed ×1 |
| `#000000` | `#f4f4f4` | 19.09 | pass | ink_on_background |
| `#ffffff` | `#ff4800` | 3.4 | fail | white_on_primary |
| `#5d5d5d` | `#f4f4f4` | 5.99 | pass | muted_on_background |

7 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}` (`#ff4800`) for primary actions only — that is where it was observed.
- Default text pairing: `{color.ink}` (`#000000`) on `{color.background}` (`#f4f4f4`).
- Set all text in `Pretendard Variable` (fallbacks only for glyph coverage).
- Pick corner radii from the measured set (2px, 4px, 6px, 8px) — 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, 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.
- Treat `{color.accent}` with caution — confidence below 0.6.

## Provenance

- Source: https://www.29cm.co.kr/ (1 page(s))
- Tool: designskill-extract/3.2.0 · extracted 2026-07-27T09:29:10.159Z
- Mode: full-render — 풀렌더 모드 — 3뷰포트 × 라이트/다크 computed style + 상태 관측.
- Blocks observed: 01, 02, 03, 04, 05, 09, 10, 11, 12 · missing: nav, forms, cards, badges

---

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