원티드
원티드는 한국 디자인-엔지니어링 씬에서 정밀 스케일 토큰 시스템 + 자체 브랜드 서체 + 시그너처 그라디언트 로고의 조합으로 알려진다. Figma 공개 미러("Wanted Design System (Community)")는 14-step gray + 19-step cool-neutral + 11-step hue ramp의 dual-neutral 구조를 ship하며, `Wanted Sans` (Wanted + 산돌 공동 제작 오픈소스 OFL 서체)를 display 표면에서 사용한다. 시스템의 가장 인지 가능한 마크는 blue → magenta → orange 3-stop 그라디언트로 그려진 심볼이며, 이 그라디언트는 심볼·아바타·잡카드 썸네일 placeholder에만 적용되고 CTA·헤더·풀-블리드 표면에는 적용되지 않는다. 2025년 핸드오프 번들은 이 토큰 시스템 위에 `components.css` production 스타일시트로 23개 컴포넌트 그룹(버튼·폼·선택·칩/배지·아바타·툴팁·로딩·세그먼트/탭·페이지네이션·리스트셀·카드·디바이더·알림/토스트·모달/시트/메뉴·아코디언·테이블·브레드크럼·빈 상태)을 함께 ship하며, `components.html` 갤러리에서 light/dark 토글로 라이브 확인된다.
Design Tokens
Brand
blue-800
oklch(0.563 0.232 257)
core Wanted Blue (#0066FF), 단일 primary
Brand gradient
gradient-stop-2
oklch(0.708 0.273 354)
magenta (#FF53C0) — 핸드오프 README가 명시하는 mid-stop
Semantic signal
red-200
oklch(0.901 0.044 22)
green-100
oklch(0.968 0.052 154)
--bg-success-subtle (#D9FFE6)
orange-600
oklch(0.733 0.179 56)
coral-600
oklch(0.665 0.218 38)
brand gradient end-stop
pink-600
oklch(0.673 0.279 339)
brand gradient mid (atomic value; README magenta는 약간 다름)
Extended atomic ramps
lime-600
oklch(0.758 0.213 131)
≈ #58CF04
cyan-600
oklch(0.722 0.115 215)
≈ #00BDDE
sky-600
oklch(0.687 0.166 245)
≈ #00AEFF
violet-600
oklch(0.514 0.263 282)
≈ #6541F2
purple-600
oklch(0.659 0.265 309)
≈ #CB59FF
49 more colorsShow less
Brand
blue-700
oklch(0.607 0.225 257)
hover step
blue-850
oklch(0.529 0.220 258)
blue-900
oklch(0.484 0.205 258)
blue-100
oklch(0.954 0.022 250)
--bg-brand-subtle
blue-50
oklch(0.985 0.012 247)
blue-975
oklch(0.149 0.069 257)
dark theme --bg-brand-subtle
Brand gradient
gradient-stop-1
oklch(0.563 0.232 257)
blue-800 (#0066FF)
gradient-stop-3
oklch(0.665 0.218 38)
coral-600 (#FF5E00)
Gray
gray-50
oklch(0.971 0 0)
gray-100
oklch(0.881 0 0)
gray-150
oklch(0.808 0 0)
gray-200
oklch(0.747 0 0)
gray-300
oklch(0.681 0 0)
gray-400
oklch(0.629 0 0)
gray-500
oklch(0.555 0 0)
gray-600
oklch(0.471 0 0)
gray-700
oklch(0.382 0 0)
gray-800
oklch(0.286 0 0)
gray-850
oklch(0.258 0 0)
gray-900
oklch(0.184 0 0)
gray-950
oklch(0.155 0 0)
gray-1000
oklch(0.110 0 0)
Neutral
neutral-50
oklch(0.972 0.002 286)
neutral-75
oklch(0.961 0.002 286)
neutral-100
oklch(0.929 0.003 286)
neutral-150
oklch(0.896 0.005 270)
neutral-200
oklch(0.876 0.006 269)
neutral-300
oklch(0.792 0.009 272)
neutral-400
oklch(0.728 0.013 273)
neutral-500
oklch(0.659 0.015 273)
neutral-600
oklch(0.601 0.015 273)
neutral-700
oklch(0.521 0.018 273)
text-secondary 앵커
neutral-750
oklch(0.438 0.018 273)
neutral-800
oklch(0.357 0.013 274)
neutral-825
oklch(0.298 0.010 273)
alpha-text 베이스 (light)
neutral-850
oklch(0.281 0.011 273)
neutral-875
oklch(0.259 0.010 273)
body text 앵커
neutral-900
oklch(0.237 0.008 273)
neutral-925
oklch(0.196 0.008 273)
neutral-950
oklch(0.166 0.005 271)
neutral-960
oklch(0.148 0.004 277)
다크 캔버스
neutral-970
oklch(0.135 0.002 286)
neutral-980
oklch(0.108 0.002 286)
Semantic signal
red-700
oklch(0.546 0.220 27)
--fg-danger
red-600
oklch(0.643 0.231 27)
red-100
oklch(0.951 0.018 18)
--bg-danger-subtle (#FEECEC)
green-600
oklch(0.673 0.211 144)
--fg-success
orange-700
oklch(0.625 0.148 56)
--fg-warning
orange-100
oklch(0.967 0.030 81)
--bg-warning-subtle (#FEF4E6)
한글 Ag 다람쥐 0123
한글 Ag 다람쥐 0123
한글 Ag 다람쥐 0123
한글 Ag 다람쥐 0123
한글 Ag 다람쥐 0123
한글 Ag 다람쥐 0123
한글 Ag 다람쥐 0123
한글 Ag 다람쥐 0123
한글 Ag 다람쥐 0123
한글 Ag 다람쥐 0123
한글 Ag 다람쥐 0123
한글 Ag 다람쥐 0123
한글 Ag 다람쥐 0123
한글 Ag 다람쥐 0123
한글 Ag 다람쥐 0123
한글 Ag 다람쥐 0123
한글 Ag 다람쥐 0123
한글 Ag 다람쥐 0123
한글 Ag 다람쥐 0123
radius-2
2px
radius-4
4px
radius-8
8px
radius-12
12px
radius-16
16px
radius-20
20px
radius-24
24px
radius-32
32px
radius-full
9999px
---
name: 원티드
slug: wanted
category: career
last_updated: "2026-05-31"
created_at: "2026-05-12"
sources:
- https://www.wanted.co.kr
- https://wanted-sans.github.io
- https://github.com/orioncactus/pretendard
- https://github.com/wanteddev/wanted-icons
related_services: []
lang: ko
logo: https://getdesign.kr/logos/wanted.png
---
# 원티드 (Wanted) — design.md
> 원티드랩이 운영하는 한국 1위 채용·커리어 플랫폼. `wanted.co.kr` 잡 마켓플레이스, 채용담당자용 Wanted Talent 대시보드, 프리미엄 커리어 코칭 구독 Wanted Plus, 후보자/리크루터용 iOS/Android 앱을 단일 디자인 시스템 위에 얹는다. 본 문서는 Wanted Design System 핸드오프 번들(`wanted-design-system/` 익스포트 — `README.md`, `colors_and_type.css`, `components.css`(23개 컴포넌트 그룹), `components.html` 라이브 갤러리, 40개 preview 카드, `ui_kits/wanted-web/` 마켓플레이스 재구성)을 1차 출처로 합성한 결과이며, 공개된 wanted.co.kr 마케팅 surface, Wanted Sans 오픈소스 레포(wanteddev/wanted-sans), Pretendard JP, wanted-icons 패키지를 보조 출처로 사용했다. 색·스페이싱·라운드·엘리베이션·컴포넌트의 정량값은 공개된 디자인 토큰 문서가 없어 이 번들에서 재구성한 것으로, 공개 출처로 교차검증되지 않으며(재구성 — 공개 소스 없음), 타이포 메트릭만 Wanted Sans·Pretendard 공개 레포로 일부 뒷받침된다 [src:2][src:3].
## Brand & Style
원티드는 한국 디자인-엔지니어링 씬에서 **정밀 스케일 토큰 시스템 + 자체 브랜드 서체 + 시그너처 그라디언트 로고**의 조합으로 알려진다. Figma 공개 미러("Wanted Design System (Community)")는 14-step gray + 19-step cool-neutral + 11-step hue ramp의 dual-neutral 구조를 ship하며, `Wanted Sans` (Wanted + 산돌 공동 제작 오픈소스 OFL 서체)를 display 표면에서 사용한다 [src:2]. 시스템의 가장 인지 가능한 마크는 **blue → magenta → orange** 3-stop 그라디언트로 그려진 심볼이며, 이 그라디언트는 심볼·아바타·잡카드 썸네일 placeholder에만 적용되고 CTA·헤더·풀-블리드 표면에는 적용되지 않는다. 2025년 핸드오프 번들은 이 토큰 시스템 위에 `components.css` production 스타일시트로 23개 컴포넌트 그룹(버튼·폼·선택·칩/배지·아바타·툴팁·로딩·세그먼트/탭·페이지네이션·리스트셀·카드·디바이더·알림/토스트·모달/시트/메뉴·아코디언·테이블·브레드크럼·빈 상태)을 함께 ship하며, `components.html` 갤러리에서 light/dark 토글로 라이브 확인된다.
전체 무드는 **clean, generous, neutral-anchored** — Toss·Naver와 결이 가깝고 splashy한 서양 채용 브랜드와는 거리가 있다. 색은 절제되어 사용되고 타이포가 위계의 대부분을 짊어진다. 표면은 흰 캔버스(light) 또는 `oklch(0.148 0.004 277)` 다크 캔버스(dark)로 평면화되며, 텍스처·노이즈·전면 사진은 chrome에 사용되지 않는다. 카드는 기본적으로 그림자 없이 1px `border-subtle` 헤어라인이 구조를 짊어지고, 그림자는 popover·dropdown·modal 같은 elevated surface에서만 등장한다.
대상 사용자는 후보자(구직자)와 리크루터 양쪽이며, 시스템은 마케팅 사이트·잡 마켓플레이스·리크루터 대시보드·네이티브 앱을 동일한 디자인 시스템으로 횡단한다. 본 문서는 잡 마켓플레이스(`wanted.co.kr` candidate-side) surface를 1차 관찰 대상으로 한다 — SSOT 번들의 `ui_kits/wanted-web/`이 이 surface를 1:1 재구성하기 때문이다.
Voice는 **친근한 2인칭 + 부드러운 존댓말**로 요약된다. 사무어조와 격식 호칭은 회피되고, 종결어미는 격식 `-습니다`보다 따뜻한 `-요`/`-어요`/`-아요`를 표준으로 한다 — "이력서를 등록해 보세요", "받은 제안이 없어요", "지원이 완료되었어요" 같은 톤이 시스템 카피의 시그너처다. 버튼은 동사 — "지원하기", "저장하기", "시작하기", "둘러보기" — 가 라벨 형태이며 명사·디렉티브("여기를 눌러주세요")는 표준이 아니다. 본 catalog 메타 문서는 한국어 평서체(`-다`)로 기술하며, 원티드의 존댓말 정책은 product surface 카피에 한해 적용되는 규칙임을 분리해 둔다.
## Colors
원본 hex는 SSOT 번들 `colors_and_type.css`에 정의되어 있으며, 본 문서는 OKLCH로 변환해 표기한다. 시스템의 구조적 특징은 두 가지다 — (1) **dual neutral ramp** (`gray-*` 14-step 단순 흑백 톤 + `neutral-*` 19-step cool blue-tinted 톤이 별도 운영됨), (2) **alpha multiplier로 텍스트 위계를 합성** (별도 gray hex를 정의하는 대신 `neutral-825`/`neutral-875` 위에 13단계 알파를 곱해 라이트/다크 양쪽에서 일관된 "soft black/white" 톤을 만든다).
### Brand
```yaml
blue-800: oklch(0.563 0.232 257) # core Wanted Blue (#0066FF), 단일 primary
blue-700: oklch(0.607 0.225 257) # hover step
blue-850: oklch(0.529 0.220 258)
blue-900: oklch(0.484 0.205 258)
blue-100: oklch(0.954 0.022 250) # --bg-brand-subtle
blue-50: oklch(0.985 0.012 247)
blue-975: oklch(0.149 0.069 257) # dark theme --bg-brand-subtle
```
브랜드 primary는 `{colors.blue-800}` 단일 — 버튼, 링크, 포커스 링, 핵심 데이터에 사용된다. CTA 표면 외에는 배경으로 사용하지 않는다 — 채도 강조가 아니라 단일 strong stop 정책이다.
### Brand gradient (심볼 전용)
```yaml
gradient-stop-1: oklch(0.563 0.232 257) # blue-800 (#0066FF)
gradient-stop-2: oklch(0.708 0.273 354) # magenta (#FF53C0) — 핸드오프 README가 명시하는 mid-stop
gradient-stop-3: oklch(0.665 0.218 38) # coral-600 (#FF5E00)
```
심볼 마크 자체 + 일부 아바타 circle + 일부 잡카드 썸네일 placeholder에만 적용된다. 마케팅 hero용 변형은 `0E1F3F → blue-800 → magenta`로 깊은 navy를 추가해 `linear-gradient(120deg, ...)`로 그려지지만, 카탈로그 토큰으로 노출된 것은 아니다.
### Gray (14-step, single tint — 채도 0)
```yaml
gray-50: oklch(0.971 0 0)
gray-100: oklch(0.881 0 0)
gray-150: oklch(0.808 0 0)
gray-200: oklch(0.747 0 0)
gray-300: oklch(0.681 0 0)
gray-400: oklch(0.629 0 0)
gray-500: oklch(0.555 0 0)
gray-600: oklch(0.471 0 0)
gray-700: oklch(0.382 0 0)
gray-800: oklch(0.286 0 0)
gray-850: oklch(0.258 0 0)
gray-900: oklch(0.184 0 0)
gray-950: oklch(0.155 0 0)
gray-1000: oklch(0.110 0 0)
```
`gray-*` 패밀리는 채도 0의 단순 흑백 톤이며, 시스템 토큰의 baseline이 아니라 utility용이다. UI 표면 색은 거의 항상 `neutral-*` 패밀리에서 호출된다.
### Neutral (19-step, cool blue-tinted — 워크호스 패밀리)
```yaml
neutral-50: oklch(0.972 0.002 286)
neutral-75: oklch(0.961 0.002 286)
neutral-100: oklch(0.929 0.003 286)
neutral-150: oklch(0.896 0.005 270)
neutral-200: oklch(0.876 0.006 269)
neutral-300: oklch(0.792 0.009 272)
neutral-400: oklch(0.728 0.013 273)
neutral-500: oklch(0.659 0.015 273)
neutral-600: oklch(0.601 0.015 273)
neutral-700: oklch(0.521 0.018 273) # text-secondary 앵커
neutral-750: oklch(0.438 0.018 273)
neutral-800: oklch(0.357 0.013 274)
neutral-825: oklch(0.298 0.010 273) # alpha-text 베이스 (light)
neutral-850: oklch(0.281 0.011 273)
neutral-875: oklch(0.259 0.010 273) # body text 앵커
neutral-900: oklch(0.237 0.008 273)
neutral-925: oklch(0.196 0.008 273)
neutral-950: oklch(0.166 0.005 271)
neutral-960: oklch(0.148 0.004 277) # 다크 캔버스
neutral-970: oklch(0.135 0.002 286)
neutral-980: oklch(0.108 0.002 286)
```
`neutral-700` (`oklch(0.521 0.018 273)`)이 `border-subtle`/`border-default`/`border-strong`의 알파 베이스이며, `neutral-825` (`oklch(0.298 0.010 273)`)가 `fg-secondary`/`fg-tertiary`/`fg-disabled`의 알파 베이스, `neutral-875` (`oklch(0.259 0.010 273)`)가 `fg-default`(body)의 알파 베이스다. text와 border가 서로 다른 neutral 단계에서 알파를 곱하는 구조이므로, 토큰 정의 시 두 베이스를 혼동하지 않도록 분리해야 한다.
### Semantic signal (red / green / orange)
```yaml
red-700: oklch(0.546 0.220 27) # --fg-danger
red-600: oklch(0.643 0.231 27)
red-100: oklch(0.951 0.018 18) # --bg-danger-subtle (#FEECEC)
red-200: oklch(0.901 0.044 22)
green-600: oklch(0.673 0.211 144) # --fg-success
green-100: oklch(0.968 0.052 154) # --bg-success-subtle (#D9FFE6)
orange-700: oklch(0.625 0.148 56) # --fg-warning
orange-600: oklch(0.733 0.179 56)
orange-100: oklch(0.967 0.030 81) # --bg-warning-subtle (#FEF4E6)
coral-600: oklch(0.665 0.218 38) # brand gradient end-stop
pink-600: oklch(0.673 0.279 339) # brand gradient mid (atomic value; README magenta는 약간 다름)
```
### Extended atomic ramps (lime / cyan / sky / violet / purple / pink — accent 전용)
원자 팔레트는 코어 신호색 외에도 6개 hue를 11-step ramp로 ship한다 — 각 hue의 600 앵커만 옮기면:
```yaml
lime-600: oklch(0.758 0.213 131) # ≈ #58CF04
cyan-600: oklch(0.722 0.115 215) # ≈ #00BDDE
sky-600: oklch(0.687 0.166 245) # ≈ #00AEFF
violet-600: oklch(0.514 0.263 282) # ≈ #6541F2
purple-600: oklch(0.659 0.265 309) # ≈ #CB59FF
pink-600: oklch(0.673 0.279 339) # ≈ #F553DA (atomic; gradient mid는 #FF53C0)
```
이들은 제품 작업색이 아니라 hover·select 강조, 일러스트·차트 accent용이다 — product surface는 여전히 시맨틱 alias만 호출하고, atomic ramp 직접 참조는 새 alias를 정의할 때로 제한한다. 각 ramp의 11단계 전체와 코어 외 색은 SSOT `colors_and_type.css`를 참조한다. (OKLCH는 sRGB → OKLab 변환 근사값이며 ±0.002 오차가 있을 수 있다.)
### Alpha 스케일 — 텍스트 oncoloring
```yaml
alpha-5: 0.05
alpha-8: 0.08
alpha-12: 0.12
alpha-16: 0.16
alpha-22: 0.22
alpha-28: 0.28
alpha-35: 0.35
alpha-43: 0.43
alpha-52: 0.52
alpha-61: 0.61
alpha-74: 0.74
alpha-88: 0.88
alpha-97: 0.97
```
13단계 알파 ladder. Light 테마는 `oklch(0.259 0.010 273)` (= neutral-875) 위에, dark 테마는 `oklch(1 0 0)` 위에 동일한 스케일을 곱한다 — 한 베이스에서 13단계 강도를 만들어내는 구조다.
### Semantic alias — Light
```yaml
# Background
bg-canvas: oklch(1 0 0)
bg-surface: oklch(1 0 0)
bg-subtle: oklch(0.972 0.002 286) # neutral-50, page bg
bg-muted: oklch(0.961 0.002 286) # neutral-75, hover fill
bg-elevated: oklch(1 0 0) # dialog/popover
bg-inverse: oklch(0.148 0.004 277) # neutral-960
bg-brand: oklch(0.563 0.232 257) # blue-800
bg-brand-subtle: oklch(0.954 0.022 250) # blue-100
bg-danger-subtle: oklch(0.951 0.018 18)
bg-success-subtle: oklch(0.968 0.052 154)
bg-warning-subtle: oklch(0.967 0.030 81)
# Foreground (alpha multiplier on neutral-825 / neutral-875)
fg-strong: oklch(0.148 0.004 277) # @ alpha 1 (= neutral-960)
fg-default: oklch(0.259 0.010 273 / 0.88) # body
fg-secondary: oklch(0.298 0.010 273 / 0.61) # labels, captions
fg-tertiary: oklch(0.298 0.010 273 / 0.43) # placeholder
fg-disabled: oklch(0.298 0.010 273 / 0.28)
fg-on-brand: oklch(1 0 0)
fg-brand: oklch(0.563 0.232 257)
fg-link: oklch(0.563 0.232 257)
fg-danger: oklch(0.546 0.220 27)
fg-success: oklch(0.673 0.211 144)
fg-warning: oklch(0.625 0.148 56)
# Borders
border-subtle: oklch(0.521 0.018 273 / 0.08)
border-default: oklch(0.521 0.018 273 / 0.22)
border-strong: oklch(0.521 0.018 273 / 0.35)
border-inverse: oklch(1 0 0 / 0.16)
border-brand: oklch(0.563 0.232 257)
```
### Semantic alias — Dark
```yaml
# Background
bg-canvas: oklch(0.148 0.004 277) # neutral-960
bg-surface: oklch(0.166 0.005 271) # neutral-950
bg-subtle: oklch(0.135 0.002 286) # neutral-970
bg-muted: oklch(0.196 0.008 273) # neutral-925
bg-elevated: oklch(0.237 0.008 273) # neutral-900
bg-inverse: oklch(1 0 0)
bg-brand-subtle: oklch(0.149 0.069 257) # blue-975
bg-danger-subtle: oklch(0.298 0.10 22 / 0.32) # synthesized for dark contrast
bg-success-subtle: oklch(0.298 0.10 144 / 0.28) # synthesized
bg-warning-subtle: oklch(0.298 0.10 56 / 0.32) # synthesized
# Foreground (alpha on white in dark theme)
fg-strong: oklch(1 0 0)
fg-default: oklch(1 0 0 / 0.88)
fg-secondary: oklch(1 0 0 / 0.61)
fg-tertiary: oklch(1 0 0 / 0.43)
fg-disabled: oklch(1 0 0 / 0.28)
fg-on-brand: oklch(1 0 0)
fg-brand: oklch(0.715 0.155 255) # blue-400 (brightened from blue-800; synthesized)
fg-danger: oklch(0.715 0.220 27) # synthesized (red @ ↑ lightness)
fg-success: oklch(0.760 0.180 144) # synthesized (green @ ↑ lightness)
fg-warning: oklch(0.778 0.158 64) # synthesized (orange @ ↑ lightness)
# Borders
border-subtle: oklch(1 0 0 / 0.08)
border-default: oklch(1 0 0 / 0.22)
border-strong: oklch(1 0 0 / 0.35)
```
다크 모드는 light 모드의 alpha multiplier 구조를 그대로 유지한다 — text 알파 베이스가 `neutral-825`/`neutral-875` → `oklch(1 0 0)`(흰색)로 뒤집힐 뿐이다. SSOT가 surface한 토큰은 위 표의 핵심 alias(background canvas/surface/subtle/muted/elevated/inverse/brand-subtle, foreground strong/default/secondary/tertiary/disabled/on-brand, border subtle/default/strong)이며, `bg-danger/success/warning-subtle`과 `fg-brand/danger/success/warning`은 본 카탈로그의 preview 구현을 위해 dark 환경에서 적정 대비를 갖도록 **합성(synthesized)**한 값이다 — light 모드 같은 시맨틱 alias가 dark에서 보이지 않으면 product surface 구현이 막히기 때문에, SSOT 빈자리를 명시적 synthesized 값으로 메웠다. 시맨틱 alias의 의미(fg-default = 본문, fg-secondary = label/caption, fg-tertiary = placeholder, fg-disabled = disabled)는 양 테마에서 동일하다.
## Typography
본문/UI 디폴트 서체는 **Pretendard JP** — 한국어 우선 variable 서체로 CJK + Latin 메트릭이 모두 우수하다 [src:3]. Display 표면(대형 헤드라인, 마케팅 커버)에는 **Wanted Sans** (Wanted + 산돌 공동 제작 오픈소스 OFL 서체)가 사용된다 [src:2].
```yaml
font-sans: >
"Pretendard JP", "Pretendard Variable", Pretendard,
-apple-system, BlinkMacSystemFont, system-ui,
"Apple SD Gothic Neo", "Noto Sans KR", "Malgun Gothic",
"Helvetica Neue", Arial, sans-serif
font-display: >
"Wanted Sans Variable", "Wanted Sans", "Pretendard JP",
"Pretendard Variable", system-ui, sans-serif
font-display-src: https://cdn.jsdelivr.net/npm/wanted-sans@1.0.3/fonts/webfonts/variable/split/WantedSansVariable.css
font-mono: >
"SF Mono", ui-monospace, "JetBrains Mono",
Menlo, Consolas, "Courier New", monospace
```
`body` font-feature-settings는 `"ss20"`, `"calt"`, `"kern"`이 기본 활성화되며, `-webkit-font-smoothing: antialiased`도 함께 적용된다.
### Type ramp (7 hierarchy × 18 named styles — `colors_and_type.css` 정의 그대로)
```yaml
# Display (3)
display1: { size: 56, line-height: 1.286, tracking: -0.0319em, weight: 700 }
display2: { size: 40, line-height: 1.300, tracking: -0.0282em, weight: 700 }
display3: { size: 36, line-height: 1.334, tracking: -0.0270em, weight: 700 }
# Title (3)
title1: { size: 32, line-height: 1.375, tracking: -0.0253em, weight: 700 }
title2: { size: 28, line-height: 1.358, tracking: -0.0236em, weight: 700 }
title3: { size: 24, line-height: 1.334, tracking: -0.0230em, weight: 700 }
# Heading (2)
heading1: { size: 22, line-height: 1.364, tracking: -0.0194em, weight: 700 }
heading2: { size: 20, line-height: 1.400, tracking: -0.0120em, weight: 700 }
# Headline (2)
headline1: { size: 18, line-height: 1.445, tracking: -0.0020em, weight: 600 }
headline2: { size: 17, line-height: 1.412, tracking: 0, weight: 600 }
# Body (2 × default/read)
body1: { size: 16, line-height: 1.500, tracking: 0.0057em, weight: 500 }
body1-read: { size: 16, line-height: 1.625, tracking: 0.0057em, weight: 500 }
body2: { size: 15, line-height: 1.467, tracking: 0.0096em, weight: 500 }
body2-read: { size: 15, line-height: 1.600, tracking: 0.0096em, weight: 500 }
# Label (2)
label1: { size: 14, line-height: 1.429, tracking: 0.0145em, weight: 500 }
label1-read: { size: 14, line-height: 1.571, tracking: 0.0145em, weight: 500 }
label2: { size: 13, line-height: 1.385, tracking: 0.0194em, weight: 500 }
# Caption (2)
caption1: { size: 12, line-height: 1.334, tracking: 0.0252em, weight: 500 }
caption2: { size: 11, line-height: 1.273, tracking: 0.0311em, weight: 500 }
```
총 18 styles. 시스템의 두 가지 시그너처 — **(1) 17px 이상 모든 스타일에 네거티브 트래킹** (Display 1이 -3.19%로 가장 타이트, Heading 2가 -1.20%으로 가장 느슨), **(2) Body 이하는 0~positive 트래킹** (Body 1이 +0.57%, Caption 2가 +3.11%) — 캡션 크기에서 가독성을 보존하려는 의도다.
### Two reading densities
`body1`/`body2`/`label1`은 각각 **default**(1.5/1.467/1.429)와 **read**(1.625/1.600/1.571) 두 line-height를 갖는다. 산문 단락(잡 디테일 본문, 마케팅 long-form)은 `{typography.body1-read}`를 사용하고, UI 표면(카드 본문, 라벨)은 기본 `body1`을 사용한다.
### HTML 디폴트 매핑
```yaml
h1 → title1 (32 / 700, tracking -0.0253em)
h2 → title2 (28 / 700, tracking -0.0236em)
h3 → title3 (24 / 700, tracking -0.0230em)
h4 → heading1 (22 / 700, tracking -0.0194em)
h5 → heading2 (20 / 700, tracking -0.0120em)
p → body1-read (16 / 500, line-height 1.625)
small → caption1 (color: fg-secondary)
code, pre → font-mono, 14px
```
unstyled HTML이 그대로 reasonable한 디폴트를 갖도록 매핑되어 있다.
### Wanted Sans
Wanted Sans는 오픈소스 (OFL 1.1) variable 서체로, 100~900 weight를 단일 파일로 ship한다 [src:2]. 한글 자형은 산돌과 공동 작업으로 그려졌으며, Pretendard 패밀리와 메트릭 호환성을 유지한다. **display 표면 전용**으로 권장되며, 본문 UI는 Pretendard JP가 표준이다 [src:2]. 번들의 `colors_and_type.css`는 두 서체를 모두 CDN으로 import한다 — Pretendard JP는 jsDelivr에서 dynamic-subset 변형, Wanted Sans는 webfontkit variable 변형.
## Spacing
베이스 단위는 **4px**이며, 토큰 사다리는 0~128px 13단계로 정의된다:
```yaml
space-0: 0
space-2: 2
space-4: 4
space-8: 8
space-12: 12
space-16: 16
space-20: 20
space-24: 24
space-32: 32
space-40: 40
space-48: 48
space-64: 64
space-96: 96
space-128: 128
```
비-4의 배수(6, 10, 14, 18, 22)는 토큰에 존재하지 않는다 — discrete steps만 운영된다. 단 일부 컴포넌트는 SSOT preview에 명시된 ladder 외 값을 컴포넌트 로컬 padding으로 그대로 가져간다 (예: `{component.job-card}` body padding `14 16 16`, `{component.input}` 좌우 padding `14` — 모두 `colors_and_type.css` + components-* preview에서 verbatim). radius의 sm/lg 버튼 로컬값과 동일한 패턴이며, 새 컴포넌트를 추가할 때만 ladder 값을 사용하면 된다.
### Grid
| Surface | Columns | Gutter | Max content width |
| --- | --- | --- | --- |
| Mobile | 4 | 16 | — |
| Tablet | 8 | 24 | — |
| Desktop (marketing) | 12 | 24 | ~1080 |
| Desktop (dashboards) | 12 | 24 | ~1280 |
마케팅 표면은 보다 좁은 max-width(~1080)를 가지며, 대시보드는 ~1280으로 확장된다. `ui_kits/wanted-web/`는 1200을 잡고 desktop marketplace의 표준값으로 운영한다.
### Vertical rhythm
마케팅 섹션 사이 **64–96px** 수직 간격이 표준 — 카드와 섹션은 generous한 vertical rhythm을 갖는다. `{component.job-card}` 그리드는 24px × 16px (row × col) gap으로 운영된다.
## Rounded
라운드 토큰은 2~32px 8단계 + `full` 한 단계로 정의된다:
```yaml
radius-2: 2 # 미세 토큰
radius-4: 4 # checkbox
radius-8: 8 # 컴포넌트 디폴트 (버튼 md/lg, 카드, 입력)
radius-12: 12 # 카드, 디테일 로고 타일, 버튼 xl
radius-16: 16 # hero banner
radius-20: 20
radius-24: 24
radius-32: 32
radius-full: 9999 # pills (chip, filter-pill, toggle, avatar, icon button, search)
```
**대부분의 컴포넌트는 `{rounded.radius-8}` 또는 `{rounded.radius-12}`를 사용한다**. Pills은 `{rounded.radius-full}`. 시스템은 **6px도 10px도 갖지 않는다** — 사다리는 discrete steps만 운영되며, "약간 둥근" 같은 임의값은 도입되지 않는다.
버튼 라운드는 사이즈와 페어로 운영된다 — xs·sm `{rounded.radius-8}`, md 10, lg `{rounded.radius-12}`, xl 14. (md의 10·xl의 14는 토큰 ladder 밖 컴포넌트 로컬값이며, 신 번들이 종전 sm6/md8/lg10/xl12를 이 값으로 교체했다 — `components.css` 관찰값.)
## Elevation & Depth
원티드는 평면이 기본이며 그림자는 elevated surface(popover, dropdown, modal, toast)에서만 등장한다. 카드 자체는 1px `{colors.border-subtle}` 헤어라인이 구조를 짊어진다 — 그림자가 카드 위계를 만들지 않는다.
```yaml
shadow-1: >
0 1px 2px oklch(0.155 0 0 / 0.06),
0 1px 3px oklch(0 0 0 / 0.05)
# 잡카드 로고 타일, 토글 노브
shadow-2: >
0 2px 6px oklch(0.155 0 0 / 0.07),
0 1px 2px oklch(0 0 0 / 0.06)
# 디테일 로고 타일
shadow-3: >
0 6px 16px oklch(0 0 0 / 0.08),
0 2px 4px oklch(0.155 0 0 / 0.06)
# 일반 elevated surface
shadow-4: >
0 12px 32px oklch(0 0 0 / 0.12),
0 4px 8px oklch(0.155 0 0 / 0.07)
# 큰 elevated, 모달
shadow-pop: >
0 8px 24px oklch(0 0 0 / 0.12)
# popover, dropdown, modal
```
그림자 색은 `oklch(0.155 0 0)` 또는 순수 검정(`oklch(0 0 0)`) 베이스의 ~5–12% 알파로 통일된다. 두 톤이 함께 쌓이는 패턴(soft-tint + true-black)이 표준이며, navy-tinted 그림자(Toss 류)는 사용되지 않는다 — 단순 검정 + 흰 캔버스의 대비가 시그너처다.
### Motion
```yaml
hover-transition: 100~150ms ease # 빠르고 절제
press-overshoot: 없음
focus-ring: 2px blue-800 + 2px transparent offset
page-transition: ~200ms fade-in only
```
spring·bounce·parallax는 시스템 전반에서 사용되지 않는다. Hover는 darken(버튼) 또는 lighten(링크)이며, lift·scale은 잡 카드(translateY(-2px), 0.12s ease) 외에는 거의 등장하지 않는다.
## Shapes
기하학은 **discrete radii + 평면 표면 + 헤어라인 보더**로 요약된다. 평면 흰 캔버스(또는 다크 캔버스) 위에 8~16px 라운드 카드/버튼을 얹고, chip·avatar·icon button·search·toggle에는 `{rounded.radius-full}`를 적용한다. **장식은 절제되고 색·타이포 위계가 카드 구조를 짊어진다**.
기본 보더는 **1px `{colors.border-subtle}` 헤어라인**이며 (rgba ~8%), 폼 입력·secondary 버튼은 1px `{colors.border-default}` (rgba ~22%)로 한 단계 강해진다. 포커스 상태는 1px `{colors.blue-800}` 보더 + 3px rgba blue glow(`oklch(0.563 0.232 257 / 0.16)` 부근)로 표현된다. 2px 장식용 보더, 컬러 left-rail accent 카드, color-shifted variant rim은 시스템 전반에서 사용되지 않는다.
배경은 평면 색이 기본이며, 그라디언트는 (1) **심볼 마크 자체** (3-stop blue → magenta → coral), (2) **아바타 circle** 의 같은 3-stop, (3) **잡카드 썸네일 placeholder** (같은 3-stop 또는 다크 변형 `oklch(0.166 0.005 271) → oklch(0.357 0.013 274)`), (4) **마케팅 hero banner** (`120deg`, navy `oklch(0.183 0.044 256)` → `{colors.blue-800}` → magenta `oklch(0.708 0.273 354)`) — 이렇게 네 가지 문서화된 자리에만 등장한다. CTA·헤더·풀-블리드 본문 표면에는 그라디언트를 적용하지 않는다.
**Iconography (wanted-icons 시스템)** [src:4] — 자체 아이콘 셋. **24×24 그리드**, **2px stroke**, **rounded line caps + joins**. 16/20/24/32 사이즈. outline-first 정책이며, filled 변형은 selected/active 탭 상태와 16px 미니 사이즈에만 사용된다. 기하는 원·둥근 사각형·single-curve arc로 구성되고, tapered stroke·아이콘 내부 gradient·아이콘 컬러는 금지된다 — 모든 아이콘은 monochrome이며 `currentColor`를 상속한다. SSOT 번들은 production용 wanted-icons npm 패키지의 stand-in으로 Lucide CDN을 link하며, Lucide의 24×24 + 2px outline + rounded caps 시스템이 Wanted와 거의 1:1로 일치한다 [src:4].
**No emoji policy** — 원티드는 코어 제품 UI에서 이모지를 사용하지 않는다. 빈 상태·성과·상태 pill에서도 monochrome SVG 또는 평면 일러스트 자산으로 대체한다. CTA의 "→" 같은 화살표도 unicode가 아니라 SVG로 그려진다.
## Components
원티드 컴포넌트는 두 레이어로 나뉜다 — **(1) 마켓플레이스 컴포지트**(`ui_kits/wanted-web/`의 `Header.jsx`·`Filters.jsx`·`JobCard.jsx`·`JobDetail.jsx`·`JobGrid.jsx`·`Footer.jsx`에서 관찰한 `wanted.co.kr` 고유 조립물 — header·nav·search·job-card·job-detail-hero·hero-banner·filter-bar)와 **(2) `components.css` 컴포넌트 라이브러리**(Figma `/2-Element`·`/3-Component` 페이지를 production CSS로 옮긴 23개 그룹 — button·icon-button·field/select·checkbox/radio/switch·chip·badge/tag·avatar·tooltip·spinner/skeleton/progress·segmented/tabs·pagination·list-cell·card·divider·alert/toast·modal/sheet/menu·accordion·table·stepper·breadcrumb·empty)다. 아래 명세는 두 레이어를 합친 것이며, 토큰값(`{spacing.*}`, `{rounded.*}`, `{colors.*}`, `{typography.*}`)이 모두 surface되어 있으므로 prose에서 `{group.name}` 형태로 호출한다.
### button
원티드 Button은 **xs/sm/md/lg/xl** 5단으로 운영되며 height·radius·font·padding이 사이즈와 함께 변한다. weight는 전 사이즈 700, letter-spacing 0.006em, 포커스는 `0 0 0 3px oklch(0.563 0.232 257 / 0.28)` 링이다:
| 사이즈 | height | radius | font | padding |
|---|---|---|---|---|
| xs | 28 | `{rounded.radius-8}` | 13 | 0 10 |
| sm | 32 | `{rounded.radius-8}` | 14 | 0 14 |
| md | 40 | 10 (컴포넌트 로컬) | 15 | 0 20 |
| lg | 48 | `{rounded.radius-12}` | 16 | 0 28 |
| xl | 56 | 14 (컴포넌트 로컬) | 17 | 0 32 |
신 번들이 종전 sm6/md8/lg10/xl12 라운드를 위 값으로 교체했다 — md의 10·xl의 14는 토큰 ladder(`{rounded.*}`) 밖 컴포넌트 로컬값이다. 변형 명칭은 번들에서 **solid·outlined·text·assistive·assistive-text·danger**이며, 본 문서의 기존 명칭과 다음처럼 대응한다 — solid=button-primary, outlined=button-secondary, text=button-ghost, assistive=button-tertiary, danger 동일, 그리고 신규 button-assistive-text.
```tsx
<button class="wb wb--solid wb--lg">지원하기</button>
<button class="wb wb--text wb--md">더보기</button>
```
### button-primary
solid 변형 — `{colors.bg-brand}` (`oklch(0.563 0.232 257)`) 배경 + `{colors.fg-on-brand}` (흰 텍스트). 화면당 가장 중요한 단일 액션에 사용. Hover 시 `{colors.blue-900}` (`oklch(0.484 0.205 258)`), active 시 blue-925 (`oklch(0.392 0.156 264)`)로 단계적으로 darken한다.
### button-secondary
outlined 변형 — `{colors.bg-surface}` 배경 + 1px 헤어라인 보더(`{colors.border-subtle}`~`{colors.border-default}` 사이, 관찰 alpha 0.16) + `{colors.fg-brand}` 텍스트. 같은 화면의 보조 액션. Hover 시 `{colors.blue-50}` (`oklch(0.985 0.012 247)`) 배경 채움.
### button-tertiary
assistive 변형 — `{colors.neutral-700}` 10% 배경(`oklch(0.521 0.018 273 / 0.10)`) + `{colors.fg-default}` 텍스트, 보더 없음. 중성 fill로 secondary보다 약한 위계의 보조 액션에 사용된다. Hover 시 동일 베이스 alpha 0.16으로 강해진다.
### button-ghost
text 변형 — 투명 배경 + `{colors.fg-brand}` 텍스트, 보더 없음. Hover 시 `{colors.blue-50}` (`oklch(0.985 0.012 247)`) 배경 채움. 텍스트 링크에 가까운 약한 위계.
### button-assistive-text
신규 중성 텍스트 버튼 — 투명 배경 + `{colors.fg-secondary}` 텍스트, 보더 없음. Hover 시 `{colors.bg-muted}` (`oklch(0.961 0.002 286)`) 배경 채움. 강조가 필요 없는 inline 액션("취소", "닫기")에 사용된다.
### button-danger
`{colors.red-700}` (`oklch(0.546 0.220 27)`) 배경 + 흰 텍스트. 파괴적 액션 전용. Hover 시 red-800 (`oklch(0.452 0.188 28)`)로 darken.
### button-disabled
`{colors.neutral-700}` 10% 배경(`oklch(0.521 0.018 273 / 0.10)`) + `{colors.fg-disabled}` (alpha 0.28 텍스트). 부분 회색 처리 없이 컴포넌트 전체에 적용되며 cursor는 not-allowed다. (outlined/text 변형의 disabled는 보더만 유지하고 배경은 `{colors.bg-surface}`로 둔다.)
### input / form field
```yaml
height: 48
border: 1px {colors.border-default}
radius: {rounded.radius-12}
padding: 0 16
font: 16/500 {colors.fg-strong}
bg: {colors.bg-surface}
placeholder-color: {colors.fg-tertiary}
sm-variant: { height: 40, radius: 10, font: 15 }
textarea: { min-height: 96, padding: 12 16, line-height: 1.6, resize: vertical }
```
Hover 시 보더가 `{colors.border-strong}`로 강해지고, Focus 상태는 1px `{colors.blue-800}` 보더 + `0 0 0 3px oklch(0.563 0.232 257 / 0.16)` glow다. Error(`is-error`) 상태는 1px `{colors.red-700}` 보더(포커스 시 `oklch(0.546 0.220 27 / 0.16)` glow) + 아래쪽 `{colors.fg-danger}` 색 13px helper text. Disabled는 `{colors.neutral-75}` 배경 + `{colors.fg-disabled}` 텍스트다. 필드 그룹은 **label(14/500) → affix 아이콘(좌/우 18px, 본문 padding 44로 회피) → helper(13, `{colors.fg-secondary}`) + char-count(우측 정렬, `{typography}` mono 13)** 슬롯을 공유하며, select는 동일 박스에 우측 chevron(2px 보더 회전)을 얹는다.
```tsx
<label class="wfield">
<span class="wfield-label">이메일</span>
<input class="winput" placeholder="email@wanted.co.kr" />
<span class="wfield-help">회사 이메일 권장</span>
</label>
```
### checkbox
20×20 정사각, 1.5px `{colors.border-strong}` 보더, 6px 라운드(컴포넌트 로컬, `{rounded.radius-4}`보다 한 단계 큼). Checked 상태는 `{colors.bg-brand}` 채움 + 흰 체크 SVG(stroke 2.6), border도 brand 색으로 전환되며, focus-visible 시 `oklch(0.563 0.232 257 / 0.2)` 링이 둘러진다. disabled는 `{colors.neutral-75}` 배경이고, negative(에러) 상태는 보더를 `{colors.red-700}`로 둔다.
### toggle
번들에서 **switch**로 명명 — 44×26 pill (`{rounded.radius-full}`). Off는 `{colors.neutral-200}` (`oklch(0.876 0.006 269)`), On은 `{colors.bg-brand}`. 내부 노브는 20×20 흰 원, `{elevation.shadow-1}` 미세 그림자, left 3 → left 21 전환이 0.15s ease다. sm 변형은 36×22(노브 16)다.
### chip (category selector)
```yaml
height: 34 # 8 padding-y + 13/500 font
radius: {rounded.radius-full}
padding: 8 14
font: 13/500
```
| 상태 | bg | fg | border |
| --- | --- | --- | --- |
| resting | `{colors.bg-surface}` | `{colors.fg-default}` | 1px `{colors.border-default}` |
| hover | `{colors.bg-muted}` | `{colors.fg-default}` | 1px `{colors.border-default}` |
| active (selected) | `{colors.fg-strong}` | white | `{colors.fg-strong}`, font-weight: 600 |
| brand | `{colors.bg-brand-subtle}` | `{colors.fg-brand}` | transparent, font-weight: 600 |
칩 active는 **invert-fill 패턴** — 채도 강조가 아니라 검정 배경 + 흰 텍스트로 명도 강조한다.
### filter-pill
filter bar 안쪽 작은 칩 변형. resting은 chip과 동일하지만 padding이 `6 12`로 줄고, brand variant가 더 빈번하게 사용된다 (선택된 필터 노출용).
### badge
6px 라운드(컴포넌트 로컬, `{rounded.radius-4}`보다 한 단계 큼), padding `5 8`, font 12/600 — chip보다 작고 정보 밀도 높은 표면에 쓴다. 변형은 시맨틱 색에 매핑된 washed 배경으로 운영된다 — **brand**(`{colors.bg-brand-subtle}` + `{colors.fg-brand}`), **solid**(`{colors.bg-brand}` + 흰 텍스트), **danger/success/warning**(`{colors.bg-danger-subtle}`/`{colors.bg-success-subtle}`/`{colors.bg-warning-subtle}` + 각 시맨틱 fg의 짙은 단계), **neutral**(`{colors.neutral-100}` + `{colors.fg-default}`). `dot` 변형은 앞에 6px currentColor 원을 붙이고, `count` 변형은 18×18 pill(`{rounded.radius-full}`)에 `{colors.red-700}` 배경 + 흰 11px 숫자를 얹는 알림 카운트다.
### header
```yaml
height: 60
bg: {colors.bg-surface}
border-bottom: 1px {colors.border-subtle}
position: sticky
z-index: 50
inner:
max-width: 1200
padding: 0 24
gap: 28
```
좌측: `{component.logo}` + nav links + Pro 분리 표시 (`margin-left: 8, padding-left: 16, border-left: 1px border-subtle`). 우측: `{component.search}` + icon buttons + avatar.
### nav-link
`14/600` (`-0.01em` letter-spacing), `{colors.fg-default}`. **Active 상태는 `{colors.fg-strong}` 색 + 하단 2px solid `{colors.fg-strong}` underline** (bottom: -22px 위치로 헤더 baseline에서 떨어진다). hover state는 별도 fill 없이 색만 약간 강해진다.
### search (header)
```yaml
height: 38
width: 240
bg: {colors.bg-subtle} # neutral-50
radius: {rounded.radius-full}
padding: 0 14
gap: 6
font: 14/500
icon-color: {colors.fg-tertiary}
```
inline pill 형태 — bordered text field가 아니라 채워진 pill이다.
### icon-button (header right)
```yaml
size: 36
radius: {rounded.radius-full}
bg: transparent
fg: {colors.fg-default}
hover-bg: {colors.bg-muted}
notification-dot:
size: 6
bg: {colors.red-700}
position: top: 8, right: 9
```
알림 도트는 상단 우측에 6px 빨간 원으로 표시된다. 범용 `.wib` 아이콘 버튼은 sm 32 / md 40 / lg 48(원형, hover `{colors.bg-muted}`, active alpha 0.16) 3사이즈와 `--filled`(`{colors.bg-brand}` + 흰 아이콘) 변형으로 ship되며, 헤더의 36px는 그 중간 인스턴스다.
### avatar
```yaml
size: 32
radius: {rounded.radius-full}
bg: 'linear-gradient(135deg, oklch(0.563 0.232 257) 0%, oklch(0.708 0.273 354) 50%, oklch(0.665 0.218 38) 100%)'
fg: oklch(1 0 0)
font: 12/700
```
브랜드 그라디언트가 적용되는 컴포넌트 — 심볼·잡카드 placeholder 외에 그라디언트가 정식 등장하는 컴포넌트는 avatar 하나다.
### job-card
원티드의 **시그너처 컴포넌트**. 잡 마켓플레이스 그리드의 단위.
```yaml
card:
bg: {colors.bg-surface}
radius: {rounded.radius-8}
overflow: hidden
hover: 'translateY(-2px), 0.12s ease'
thumb:
aspect-ratio: 16/12 # grid; preview 카드는 16/9
radius: {rounded.radius-8}
default-bg: brand gradient (blue-800 → magenta → coral-600)
variant-dark: 'linear-gradient(135deg, neutral-950, neutral-800)'
variant-light: {colors.bg-brand-subtle}
overlays:
deadline-pill:
position: top-left (10, 10)
bg: oklch(0 0 0 / 0.55)
fg: oklch(1 0 0)
font: 11/600
padding: 5 8
radius: 6
examples: 'D-3', '마감임박', 'NEW'
save-button:
position: top-right (8, 8)
size: 28 or 32
radius: {rounded.radius-full}
bg: oklch(1 0 0 / 0.92)
fg: {colors.fg-default}
icon: bookmark (14px stroke)
company-logo-tile:
position: bottom-left (10, 10)
size: 36
radius: {rounded.radius-8}
bg: oklch(1 0 0)
shadow: {elevation.shadow-1}
font: 14/700
body:
padding: '12 4 0' (grid) | '14 16 16' (preview)
gap: 4-6
company: { font: '12-13/500', color: fg-secondary, pattern: '{company} · {region}' }
title: { font: '15/600', tracking: -0.01em, color: fg-strong }
meta: { font: '12/500', color: fg-tertiary, pattern: '{경력} · {계약형태}' }
payout: { font: '13/600', color: fg-brand, pattern: '채용보상금 {₩,###}원' }
```
**채용보상금** 표시가 카드 우측 하단 `{colors.fg-brand}` 색으로 항상 노출되는 것이 Wanted 잡카드의 정체성이다 — 다른 채용 사이트와 구분되는 시그너처다.
```tsx
<JobCard
thumb="brand-gradient"
deadline="D-3"
company="원티드랩 · 서울 강남"
title="시니어 프론트엔드 개발자"
meta="경력 5-10년 · 정규직"
payout={1500000}
/>
```
### job-detail-hero
잡 디테일 화면의 hero — aspect 16/8, `{rounded.radius-12}`, 좌측 하단에 56×56 회사 로고 타일(`{rounded.radius-12}`, `{elevation.shadow-2}`)이 anchored된다. 본문 영역은 max-width 920px, `0 24 120` padding으로 운영된다.
### hero-banner (마케팅)
```yaml
max-width: 1200
margin: 32 auto 24
height: 280
radius: {rounded.radius-16}
background: 'linear-gradient(120deg, oklch(0.183 0.044 256) 0%, oklch(0.563 0.232 257) 60%, oklch(0.708 0.273 354) 100%)'
padding: 36 40
fg: oklch(1 0 0)
content-align: flex-end (bottom-left)
```
- eyebrow: 13/600, tracking 0.04em, opacity 0.85
- title: 36/700/1.25, tracking -0.025em, max-width 580
- sub: 16/500/1.5, opacity 0.85, max-width 520
- cta: 흰 pill, fg-strong 텍스트, padding `12 22`, font 14/600
마케팅 hero는 **풀-블리드 그라디언트 + bottom-left 카피 + 흰색 pill CTA**의 패턴이 표준이다. 그라디언트 stop은 심볼 마크와 다르다 — navy를 prepend해 깊이를 만든다.
### filter-bar
```yaml
container:
max-width: 1200
padding: 0 24
top-border: 1px {colors.border-subtle}
vertical-padding: '12 0 16'
filter-pill (default):
border: 1px {colors.border-default}
bg: {colors.bg-surface}
radius: {rounded.radius-full}
padding: '6 12'
font: 13/500
filter-pill (brand-active):
bg: {colors.bg-brand-subtle}
border: transparent
fg: {colors.fg-brand}
font-weight: 600
sort:
position: right-aligned (margin-left: auto)
item-font: 13/500
resting-fg: {colors.fg-secondary}
active-fg: {colors.fg-strong}, font-weight: 600
divider: 1×10 {colors.border-default}
```
active filter는 brand-subtle 배경 + brand 텍스트로 표시되며, sort는 오른쪽 정렬 + bold-fg 강조로 위계를 만든다.
### toast
`{colors.bg-inverse}` 계열의 다크 surface(`{colors.neutral-925}` `oklch(0.196 0.008 273)`) + 흰 라벨, padding `12 18`, `{rounded.radius-8}`~`{rounded.radius-12}`(관찰 10), `{elevation.shadow-3}`. 선두 아이콘은 성공 시 밝은 green(다크 surface 대비용 상향 명도), danger 시 밝은 red이며, 우측 action 텍스트는 blue-400(`oklch(0.715 0.155 255)`) weight 700이다. 자동 dismiss 시간은 보통 4–5초.
```tsx
<div class="wtoast"><svg class="wtoast-ic">…</svg> 지원이 완료되었어요</div>
```
### alert (inline)
padding `14 16`, `{rounded.radius-12}`, 좌측 18px 아이콘 + title(14/600) + msg(13/500) 슬롯. 인라인 알림이며 toast와 달리 dismiss 없이 페이지 흐름에 남는다. 변형은 **info**(`{colors.bg-brand-subtle}` 배경), **danger**(`{colors.bg-danger-subtle}`), **success**(`{colors.bg-success-subtle}`), **warning**(`{colors.bg-warning-subtle}`)이며, 텍스트는 각 시맨틱 hue의 짙은 단계를 써 subtle 배경 위 대비를 확보한다.
### empty-state
```yaml
padding: 56 24
align: center
icon-wrap: 56px 원형, bg {colors.bg-subtle}, color {colors.fg-tertiary}
icon: 26px monochrome SVG (no emoji)
title: 700 18/1.4 {colors.fg-strong}
msg: 500 14/1.5 {colors.fg-secondary}
cta: {component.button} (margin-top 18)
```
아이콘은 56px 원형 surface 안에 monochrome SVG로 놓이고, 그 아래 title·msg·선택적 CTA 버튼이 중앙 정렬된다. 빈 상태 카피 패턴: "아직 받은 제안이 없어요" (alpha 88% body 톤, 제품 보이스 `-어요` 종결).
### icon
wanted-icons system [src:4] — 24×24 그리드, 2px stroke, rounded line caps + joins, monochrome, `currentColor` 상속. outline-first; filled 변형은 active 탭과 16px 사이즈에 한정. 16/20/24/32 사이즈.
### logo
브랜드 마크는 두 형태 — **symbol** (3-stop 그라디언트가 적용된 둥근 사각형/마름모 형태)과 **logotype** (`Wanted` 워드마크). SSOT 번들 `assets/logos/`에 `wanted-symbol-fill.png`, `wanted-symbol-mask.svg`, `wanted-logotype.svg`로 ship되며, mask SVG는 `currentColor` 적용이 가능해 단색 표면 위에서 톤을 맞추는 용도다.
---
위 마켓플레이스 컴포지트에 더해, 번들 `components.css`는 다음 표준 컴포넌트 그룹을 개별 스펙으로 노출한다 — 모두 동일 토큰(`{colors.*}`·`{rounded.*}`·`{typography.*}`) 위에서 light/dark 양 테마에 적응한다.
### radio
`{component.checkbox}`와 같은 20px 컨트롤이지만 원형이다 — 1.5px `{colors.border-strong}` 보더, checked 시 보더가 2px `{colors.blue-800}`로 바뀌고 안쪽 10px `{colors.bg-brand}` 점이 scale-in된다. focus-visible 링·disabled 처리는 checkbox와 동일하다.
### tag
해시 토픽 표기용 pill — height 30, padding `0 12`, `{rounded.radius-full}`, `{colors.bg-subtle}` 배경 + `{colors.fg-default}` 13/500. `#성장가능성`·`#스타트업`처럼 `#` 접두 단어로 쓰며, 상태 강조가 있는 인터랙티브 `{component.chip}`과 달리 정적 라벨이다.
### avatar-group
`{component.avatar}`를 겹쳐 쌓는 컨테이너 — 각 아바타에 2px `{colors.bg-surface}` 링을 두르고 -8px margin으로 겹친다. 지원자·참여자 집합을 압축 표시할 때 쓴다.
### tooltip
다크 말풍선 — `{colors.neutral-925}` 배경 + 흰 13/1.4 텍스트, `{rounded.radius-8}`, padding `8 12`, `{elevation.shadow-3}`, 하단 중앙 5px 화살표. hover 시 opacity로 등장하며 기본 위치는 트리거 위쪽이다.
### spinner
24px 원형 로더 — 3px `{colors.neutral-700}` 20% 트랙 + `{colors.blue-800}` top border가 0.7s linear로 회전한다. sm 16(2px)·lg 32(4px) 사이즈가 있고, 컬러 surface 위에서는 흰색 변형을 쓴다.
### skeleton
로딩 placeholder — `{colors.neutral-100}`↔`{colors.neutral-75}` 사이를 오가는 shimmer 그라디언트가 1.4s ease로 흐른다. 기본 `{rounded.radius-8}`, `--text`(height 14, r7)·`--circle`(원형) 변형으로 블록·텍스트 줄·아바타 자리를 채운다.
### progress
6px 트랙(`{colors.neutral-100}`, `{rounded.radius-full}`) + `{colors.bg-brand}` 바. width 트랜지션으로 진행률을 표시하며, `--indeterminate` 변형은 40% 바가 1.2s로 흐르는 무한 로딩이다.
### segmented
inset 트랙형 토글 그룹 — `{colors.neutral-75}` 트랙(10 라운드, padding 3) 안에서 active 아이템만 `{colors.bg-surface}` + `{elevation.shadow-1}`로 떠오른다. 라벨은 `{colors.fg-secondary}`→active 시 `{colors.fg-strong}` 14/600. 소수(2~4) 상호배타 뷰 전환에 쓴다.
### tabs
하단 보더(`{colors.border-subtle}`) 위 underline 탭 — 각 탭 padding `12 16`, `{colors.fg-secondary}` 15/500, hover 시 `{colors.fg-default}`. active는 `{colors.fg-strong}` 600 + 하단 2px `{colors.fg-strong}` underline로, `{component.nav-link}`의 강조 패턴을 컨텐츠 탭에 재사용한다.
### pagination
36px 단위 페이지 아이템(min-width 36, `{rounded.radius-8}`) — resting `{colors.fg-secondary}`, hover `{colors.bg-muted}`, active는 `{colors.fg-strong}` 채움 + 흰 텍스트(`{component.chip}`과 공유하는 invert-fill 강조)다. 양끝 chevron 버튼은 disabled 시 `{colors.fg-disabled}`.
### list-cell
리소스 행 — leading(아이콘/아바타) · body(title 15/600 `{colors.fg-strong}` + sub 13 `{colors.fg-secondary}`) · trailing(value/chevron, `{colors.fg-tertiary}`) 3슬롯, padding `14 16`. `--card`는 14 라운드 + 1px `{colors.border-subtle}`, `--button`은 hover 시 `{colors.bg-subtle}`로 눌리는 인터랙티브 행이다.
### card
범용 카드 — `{colors.bg-surface}` + 1px `{colors.border-subtle}`, `{rounded.radius-16}`. 기본은 그림자 없이 헤어라인이 구조를 잡고(시스템 정책), `--shadow` 변형만 보더를 빼고 `{elevation.shadow-2}`를 얹는다. 내부 padding 20, title 18/700 `{colors.fg-strong}` + sub 14/500 `{colors.fg-secondary}`. 잡 마켓플레이스 전용 조립물 `{component.job-card}`와 달리 범용 컨테이너다.
### divider
구분선 — 기본 1px `{colors.border-subtle}` 수평선. `--strong`은 `{colors.border-default}`, `--thick`은 8px `{colors.bg-subtle}` 블록 구분(섹션 분리), `-v`는 1px 수직 구분선이다.
### modal
중앙 모달 — `oklch(0 0 0 / 0.5)` scrim 위에 `{colors.bg-elevated}` 카드(`{rounded.radius-20}`, max-width 400, `{elevation.shadow-4}`). title 20/700 + msg 15/1.6 중앙 정렬, 하단 액션 행은 `{component.button}`을 flex로 균등 분할한다. 열림 시 translateY+scale 트랜지션(0.18s)이다.
### bottom-sheet
모바일 바텀 시트 — 모달과 같은 scrim에 하단 정렬, 상단만 `{rounded.radius-24}` 둥근 surface(max-width 480). 상단 중앙 40×4 grip 핸들, 열림 시 아래에서 slide-up하는 모달 변형이다.
### dropdown-menu
드롭다운 메뉴 — `{colors.bg-elevated}` + `{rounded.radius-12}` + `{elevation.shadow-pop}` + 1px `{colors.border-subtle}`, padding 6, min-width 180. 항목은 padding `10 12` `{rounded.radius-8}` `{colors.fg-default}`, hover 시 `{colors.bg-muted}`, 파괴적 항목은 `{colors.red-700}`. 1px `{colors.border-subtle}` separator로 그룹을 나눈다.
### accordion
아코디언 — 각 항목은 하단 `{colors.border-subtle}` 보더, head는 padding `18 4` 16/600 `{colors.fg-strong}` + 우측 chevron(열림 시 180° 회전). body는 max-height 트랜지션(0.25s)으로 펼쳐지며 내부 텍스트는 15/1.7이다.
### table
데이터 테이블 — th는 좌측 정렬 13/600 `{colors.fg-secondary}` + 하단 1px `{colors.border-default}`, td는 14/500 `{colors.fg-default}` + 1px `{colors.border-subtle}` 행 구분. row hover 시 `{colors.bg-subtle}`, 숫자 열은 우측 정렬 + tabular-nums다.
### stepper
수량 입력 stepper — 1px `{colors.border-default}` 10 라운드 테두리 안에 ± 40px 버튼 + 중앙 값(너비 44, 15/600 `{colors.fg-strong}`). 버튼 hover `{colors.bg-muted}`, 한계 도달 시 `{colors.fg-disabled}`.
### breadcrumb
경로 표시 — 링크는 `{colors.fg-secondary}`(hover `{colors.fg-default}`), 구분자는 14px chevron `{colors.fg-tertiary}`, 현재 위치는 `{colors.fg-strong}` 600. 전체 14/500이다.
## Do's and Don'ts
**Do**
- product-facing 색은 시맨틱 alias(`{colors.bg-brand}`, `{colors.fg-strong}`, `{colors.fg-default}`, `{colors.fg-secondary}`, `{colors.border-subtle}`)로 호출하고, atomic ramp(`{colors.blue-800}`, `{colors.neutral-700}`)는 새 alias를 만들 때만 직접 참조한다.
- 화면당 단일 강조색 정책을 유지한다 — primary CTA는 `{colors.bg-brand}` 하나로 통일하고, 보조 액션은 button-secondary/tertiary/ghost로 분리한다.
- 텍스트 위계는 **alpha multiplier 시스템**으로 표현한다 — primary `alpha-88`, secondary `alpha-61`, tertiary `alpha-43`, disabled `alpha-28`. 별도 gray hex로 만들지 않는다.
- 카드는 1px `{colors.border-subtle}` 헤어라인으로 구조를 만든다 — 그림자를 카드에 적용하지 않는다. 그림자는 popover/dropdown/modal/toast에만 사용한다.
- 라운드는 **`{rounded.radius-8}` 또는 `{rounded.radius-12}`를 디폴트**로, pills는 `{rounded.radius-full}`로 사용한다. "약간 둥근" 같은 임의값은 도입하지 않는다.
- 버튼 라운드는 사이즈와 페어로 운영한다 — xs·sm `{rounded.radius-8}`, md 10, lg `{rounded.radius-12}`, xl 14.
- 본문은 `{typography.body1}` (16/500/1.5 line-height)을 기본으로, 산문 단락은 `{typography.body1-read}` (1.625 line-height)을 사용한다.
- 17px 이상 모든 헤딩에 네거티브 트래킹을 유지한다 (`-0.0319em` ~ `-0.0120em`) — display 1이 가장 타이트하다.
- product 카피는 **친근한 존댓말**(`-요`/`-어요`/`-아요`)로 작성한다 — "지원이 완료되었어요", "받은 제안이 없어요", "잠시 후 다시 시도해 주세요" 같은 톤 시그너처를 따른다.
- 버튼 라벨은 **동사 형태**로 작성한다 — "지원하기", "저장하기", "시작하기", "둘러보기"가 표준이다.
- 잡카드 우측 하단에는 **채용보상금**을 `{colors.fg-brand}` 색으로 항상 노출한다 — Wanted를 다른 잡 사이트와 구분짓는 시그너처다.
- 태그 칩은 `#` + 단어 형태로 표기한다 — `#성장가능성`, `#스타트업`.
- 아이콘은 `currentColor`를 상속하게 둔다 — 외부 컬러 직접 주입 금지 [src:4].
- 포커스 링은 항상 visible 상태로 유지한다 — 2px `{colors.blue-800}` ring + 2px transparent offset이 표준이다.
**Don't**
- **이모지를 product UI에 inline으로 사용하지 않는다** — 빈 상태·성공·상태 pill에서도 monochrome SVG 또는 평면 일러스트 자산으로 대체한다. CTA의 "→" 같은 화살표도 unicode가 아니라 SVG로 그린다.
- **그라디언트를 chrome에 사용하지 않는다** — 그라디언트는 (1) 심볼 마크, (2) 아바타 circle, (3) 잡카드 썸네일 placeholder, (4) 마케팅 hero banner — 네 가지 문서화된 자리에만 사용한다. CTA·헤더·풀-블리드 본문 표면에는 적용하지 않는다.
- 격식체(`-습니다`/`-십시오`)나 단정형 `-다`를 product 카피에 사용하지 않는다 — `-요`/`-어요`가 표준이다.
- ALL-CAPS, Title Case In Buttons를 사용하지 않는다 — 영어는 항상 sentence case다.
- UI 라벨이나 리스트 아이템 끝에 마침표를 찍지 않는다.
- 마케팅 과장 ("혁신적", "차세대", "최고의") 이나 챗봇 톤 ("~해보세요!", "여기를 눌러주세요")을 product 카피에 사용하지 않는다.
- 카드에 그림자를 적용하지 않는다 — 1px `{colors.border-subtle}` 헤어라인이 표준이다.
- 6px·10px·14px·18px·22px 같은 비-4의 배수 spacing/radius를 도입하지 않는다 — `{spacing.*}`와 `{rounded.*}` 사다리만 사용한다.
- 텍스처·노이즈·grain을 표면에 사용하지 않는다 — 모든 표면은 평면 색이다.
- glassy 효과(blur backdrop, translucent toolbar)를 사용하지 않는다 — Wanted 시스템은 평면 색 + 헤어라인 보더로 깊이를 만든다.
- 2px 장식용 보더, 컬러 left-rail accent 카드, color-shifted variant rim을 사용하지 않는다 — 기본은 1px `{colors.border-subtle}` / `{colors.border-default}` 헤어라인이다.
- spring·bounce·parallax·page slide 모션을 사용하지 않는다 — hover transition은 100–150ms ease, page transition은 ~200ms fade-in only가 표준이다.
- 아이콘 내부에 그라디언트·컬러를 적용하지 않는다 — 모든 아이콘은 monochrome이며 `currentColor`를 상속한다 [src:4].
- gray-* 패밀리를 UI 표면 색으로 직접 사용하지 않는다 — UI 표면은 neutral-* 패밀리(cool blue-tinted)를 사용하고, gray-*는 utility용이다.
- 원티드의 채용 도메인(잡카드 우측 하단 채용보상금 표시·지원/이력서 흐름, 리크루터↔후보자 매칭, `#성장가능성` 같은 해시태그 태그칩 패턴)을 성격이 다른 제품에 그대로 이식하지 않는다 — 차용할 것은 시각 언어(gray/neutral 이중 중성 체계·1px border-subtle 위주의 그림자 회피·17px+ 헤드라인 음수 트래킹·이산 라운드 ladder·넉넉한 수직 리듬)이지 원티드의 채용 서비스 개념이 아니다 [src:2].
## Responsive Behavior
원티드 시스템은 mobile-first 표준 패턴을 유지한다 — 모바일·태블릿·데스크톱 표면을 같은 시스템 위에서 운영하지만, 마케팅 표면은 max-width ~1080px, 대시보드는 ~1280px로 운영한다.
### Breakpoints
| Name | Width | Columns | Gutter | Key Changes |
|---|---|---|---|---|
| Mobile | ≤ 640 | 4 | 16 | `{component.job-card}` 그리드를 1–2 컬럼으로 collapse, header 검색은 inline icon button으로 축약 |
| Tablet | 641–1023 | 8 | 24 | 잡 그리드 2–3 컬럼, hero banner full-bleed 유지 |
| Desktop (marketing) | 1024–1279 | 12 | 24 | max-content-width ~1080; hero `{component.hero-banner}` 가 standard |
| Desktop (dashboard) | ≥ 1280 | 12 | 24 | max-content-width ~1280; 잡 그리드는 `{component.job-card}` 4 컬럼 |
### Touch Targets
모든 인터랙티브 표면은 최소 44×44px hit area를 보장한다. `{component.input}`는 44px height로 시스템 디폴트와 일치한다. `{component.button}`의 sm(32)·md(40) 사이즈는 padding을 포함해 hit area를 보장한다. `{component.chip}` (34) · `{component.icon-button}` (36)도 동일한 정책이다.
### Collapsing Strategy
- **Job grid**: desktop 4 cols → tablet 2–3 cols → mobile 1–2 cols. card aspect는 그대로 유지된다.
- **Header**: desktop의 nav links + search + icon buttons + avatar 풀 행 → tablet에서 일부 nav를 hamburger로 collapse → mobile은 hamburger + 로고 + 1–2 icon button.
- **Hero**: full-bleed gradient banner는 모든 breakpoint에서 유지되나, height가 모바일에서 축소된다 (관찰: desktop 280 → mobile ~200).
- **Filter bar**: filter pills는 wrap, sort는 mobile에서 우측 정렬 유지하되 라벨이 축약될 수 있다.
### Image Behavior
마케팅 사진은 full-bleed로 표면에 사용되며, 카드의 썸네일은 16/12 (그리드) 또는 16/9 (상세) aspect로 잘려 표시된다. 일러스트는 빈 상태·온보딩에서만 등장 — 평면, 기하학적, primary blue + neutral.
## Known Gaps
- **OKLCH 변환 정확도** — 원본 `colors_and_type.css`는 hex (또는 일부 rgba) 토큰만 ship하며, 시스템 내장 OKLCH 표기는 surface되지 않는다. 본 문서의 OKLCH 값은 sRGB → OKLab 표준 변환이며, 실제 design tool/브라우저의 색재현에 따라 ±0.002 lightness/chroma 오차가 있을 수 있다. 특히 이번 갱신에서 새로 추가한 확장 ramp(lime/cyan/sky/violet/purple/pink) 600 앵커와 button-primary/danger의 active darken 단계(blue-925·red-800)는 근사 변환값이다.
- **그라디언트 mid-stop 미세 차이** — 브랜드 그라디언트의 mid-stop은 README와 atomic 팔레트에서 약간 다른 값으로 surface된다. README/avatar gradient는 `#FF53C0`(magenta-shifted), atomic pink-600은 `#F553DA` — UI kit `styles.css`에서 실제 사용되는 hex는 `#FF53C0`이며 본 문서는 이를 우선한다.
- **공식 motion 토큰** — duration·easing의 시스템 토큰은 명시되지 않았으며, hover transition은 100–150ms ease, page transition은 ~200ms fade-in이라는 정책만 README에 prose로 surface된다. 본 문서의 Motion 표는 SSOT의 정책 prose에서 추출한 권장값이며, 명시 토큰은 아니다.
- **다크 모드 alias 완전성** — SSOT의 dark theme 토큰은 background(canvas, surface, subtle, muted, elevated, inverse, brand-subtle)·foreground(strong, default, secondary, tertiary, disabled, on-brand)·border(subtle, default, strong)까지 surface되어 있다. `bg-danger-subtle`/`bg-success-subtle`/`bg-warning-subtle`와 `fg-brand`/`fg-danger`/`fg-success`/`fg-warning`의 다크 alias는 SSOT가 surface하지 않았으며, 본 카탈로그의 preview 구현을 위해 위 `### Semantic alias — Dark` 블록에 적정 대비값으로 **합성(synthesized)**하여 수록했다 — 다운스트림이 동일 패턴(blue-400 brightened for fg-brand, semantic hue @ ↑ lightness for fg-*, low-alpha colored fill for bg-*-subtle)으로 host 토큰을 ship할 수 있게 한다.
- **wanted-icons 토큰 인벤토리** — wanted-icons는 자체 npm 패키지로 ship되며 Figma `/Icon` 페이지에 ~340개 아이콘이 정의된다 [src:4]. SSOT 번들은 production용 wanted-icons의 stand-in으로 Lucide CDN을 link하므로, 본 catalog가 적용되는 host는 production에서 `wanted-icons` 패키지로 교체해야 한다. 개별 아이콘의 토큰 명세(이름 매핑, 16px filled 변형 ID)는 본 문서 범위 외다.
## References
1. https://www.wanted.co.kr — 원티드 공식 마케팅 + 잡 마켓플레이스. 슬로건·카피·비주얼 톤 참조.
2. https://wanted-sans.github.io — Wanted Sans 오픈소스 typeface (OFL). Wanted + 산돌 공동 제작.
3. https://github.com/orioncactus/pretendard — Pretendard JP variable typeface. 본 시스템의 베이스 UI face.
4. https://github.com/wanteddev/wanted-icons — Wanted 자체 아이콘 셋 npm 패키지. 24×24 그리드, 2px stroke, monochrome.
