oh-my-design-cli 1.8.6 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/hooks/lib/preferences-parser.cjs +1 -0
- package/.claude/hooks/lib/preferences-writer.cjs +1 -0
- package/.claude/hooks/post-edit-watch.cjs +1 -0
- package/.claude/hooks/session-end-foldin.cjs +1 -0
- package/.claude/hooks/session-state-loader.cjs +1 -0
- package/.claude/hooks/skill-activation.cjs +1 -0
- package/.claude/settings.json +10 -1
- package/.github/assets/logo-bg.png +0 -0
- package/AGENTS.md +20 -1
- package/CHANGELOG.md +482 -0
- package/MIGRATION.md +103 -0
- package/README.ja.md +56 -19
- package/README.ko.md +47 -30
- package/README.md +48 -30
- package/README.zh-TW.md +59 -22
- package/agents/AGENT.md +8 -7
- package/agents/omd-codex-image.md +1 -1
- package/agents/omd-critic.md +6 -7
- package/agents/omd-designer-review.md +1 -1
- package/agents/omd-final-qa.md +1 -1
- package/agents/omd-humanizer.md +38 -0
- package/agents/omd-kr-writer.md +3 -4
- package/agents/omd-locale-adapter.md +12 -16
- package/agents/omd-master.md +24 -19
- package/agents/omd-microcopy.md +1 -1
- package/agents/omd-orchestrator.md +7 -8
- package/agents/omd-slop-auditor.md +31 -0
- package/agents/omd-ux-researcher.md +1 -1
- package/data/reference-fingerprints.json +2761 -85
- package/dist/bin/oh-my-design.js +16 -8
- package/dist/bin/oh-my-design.js.map +1 -1
- package/dist/chunk-UJIHCEYF.js +99 -0
- package/dist/chunk-UJIHCEYF.js.map +1 -0
- package/dist/doctor-LDWSFM3I.js +763 -0
- package/dist/doctor-LDWSFM3I.js.map +1 -0
- package/dist/install-skills-ZZFNJ2II.js +1120 -0
- package/dist/install-skills-ZZFNJ2II.js.map +1 -0
- package/docs/CLI_QUICKSTART.md +157 -0
- package/package.json +25 -4
- package/scripts/postinstall.cjs +5 -4
- package/skills/claude-design/SKILL.md +38 -14
- package/skills/claude-design/references/claude-design-flow.md +11 -11
- package/skills/claude-design/references/codebase-analysis.md +5 -4
- package/skills/omd-final-qa/SKILL.md +1 -1
- package/skills/omd-harness/SKILL.md +51 -50
- package/skills/omd-humanize/SKILL.md +116 -0
- package/skills/omd-humanize/agents/openai.yaml +4 -0
- package/skills/omd-humanize/references/locale-playbooks.md +102 -0
- package/skills/omd-humanize/references/sources.md +11 -0
- package/skills/omd-init/SKILL.md +18 -12
- package/skills/omd-locale-adapter/SKILL.md +58 -91
- package/skills/omd-orchestrator/SKILL.md +11 -5
- package/skills/omd-reference-capture/SKILL.md +80 -26
- package/skills/omd-reference-capture/scripts/PLAYWRIGHT-LICENSE.txt +202 -0
- package/skills/omd-reference-capture/scripts/PLAYWRIGHT-NOTICE.txt +5 -0
- package/skills/omd-reference-capture/scripts/THIRD_PARTY_NOTICES.md +3 -0
- package/skills/omd-reference-capture/scripts/capture-reference-evidence.mjs +159906 -0
- package/skills/omd-slop-audit/SKILL.md +110 -0
- package/skills/omd-slop-audit/agents/openai.yaml +4 -0
- package/skills/omd-slop-audit/references/pattern-catalog.md +96 -0
- package/skills/omd-slop-audit/references/sources.md +24 -0
- package/web/references/104/DESIGN.md +354 -0
- package/web/references/11st/DESIGN.md +197 -316
- package/web/references/29cm/DESIGN.md +297 -393
- package/web/references/42dot/DESIGN.md +390 -0
- package/web/references/8percent/DESIGN.md +438 -0
- package/web/references/ably/DESIGN.md +267 -572
- package/web/references/acer/DESIGN.md +329 -0
- package/web/references/airbnb/DESIGN.md +219 -557
- package/web/references/airbridge/DESIGN.md +451 -0
- package/web/references/alipay/DESIGN.md +179 -420
- package/web/references/apple/DESIGN.md +224 -498
- package/web/references/asleep/DESIGN.md +402 -0
- package/web/references/au/DESIGN.md +334 -0
- package/web/references/autopedia/DESIGN.md +382 -0
- package/web/references/aws-cloudscape/DESIGN.md +241 -0
- package/web/references/baemin/DESIGN.md +332 -491
- package/web/references/banksalad/DESIGN.md +269 -180
- package/web/references/barogo/DESIGN.md +416 -0
- package/web/references/beusable/DESIGN.md +464 -0
- package/web/references/bigin/DESIGN.md +454 -0
- package/web/references/bilibili/DESIGN.md +206 -374
- package/web/references/bmw/DESIGN.md +162 -276
- package/web/references/brandi/DESIGN.md +184 -325
- package/web/references/buzzvil/DESIGN.md +457 -0
- package/web/references/cafe24/DESIGN.md +472 -0
- package/web/references/catchtable/DESIGN.md +219 -264
- package/web/references/cgv/DESIGN.md +317 -0
- package/web/references/channeltalk/DESIGN.md +210 -336
- package/web/references/china-airlines/DESIGN.md +291 -0
- package/web/references/cjonstyle/DESIGN.md +453 -0
- package/web/references/class101/DESIGN.md +168 -387
- package/web/references/classum/DESIGN.md +228 -203
- package/web/references/claude/DESIGN.md +242 -479
- package/web/references/clay/DESIGN.md +179 -377
- package/web/references/clickhouse/DESIGN.md +254 -343
- package/web/references/codeit/DESIGN.md +470 -0
- package/web/references/cohere/DESIGN.md +214 -324
- package/web/references/coinone/DESIGN.md +199 -179
- package/web/references/corca/DESIGN.md +414 -0
- package/web/references/coupang/DESIGN.md +205 -475
- package/web/references/cursor/DESIGN.md +240 -381
- package/web/references/dabang/DESIGN.md +248 -213
- package/web/references/dable/DESIGN.md +431 -0
- package/web/references/datarize/DESIGN.md +338 -0
- package/web/references/dealicious/DESIGN.md +402 -0
- package/web/references/drdiary/DESIGN.md +404 -0
- package/web/references/elastic/DESIGN.md +238 -0
- package/web/references/elevenlabs/DESIGN.md +183 -321
- package/web/references/elice/DESIGN.md +445 -0
- package/web/references/eslite/DESIGN.md +257 -0
- package/web/references/evaair/DESIGN.md +338 -0
- package/web/references/expo/DESIGN.md +238 -331
- package/web/references/familymart-tw/DESIGN.md +254 -0
- package/web/references/ferrari/DESIGN.md +160 -377
- package/web/references/figma/DESIGN.md +197 -451
- package/web/references/fitpet/DESIGN.md +445 -0
- package/web/references/flex/DESIGN.md +170 -253
- package/web/references/framer/DESIGN.md +197 -340
- package/web/references/freee/DESIGN.md +211 -533
- package/web/references/friendliai/DESIGN.md +431 -0
- package/web/references/frip/DESIGN.md +440 -0
- package/web/references/furiosaai/DESIGN.md +450 -0
- package/web/references/gangnamunni/DESIGN.md +154 -591
- package/web/references/gaudiolab/DESIGN.md +414 -0
- package/web/references/google/DESIGN.md +290 -398
- package/web/references/goorm/DESIGN.md +470 -0
- package/web/references/greencar/DESIGN.md +420 -0
- package/web/references/hackle/DESIGN.md +472 -0
- package/web/references/hashicorp/DESIGN.md +273 -318
- package/web/references/heydealer/DESIGN.md +429 -0
- package/web/references/humanscape/DESIGN.md +433 -0
- package/web/references/hwahae/DESIGN.md +453 -0
- package/web/references/hyundai/DESIGN.md +158 -368
- package/web/references/hyundaicard/DESIGN.md +171 -121
- package/web/references/ibm/DESIGN.md +227 -378
- package/web/references/idus/DESIGN.md +450 -0
- package/web/references/igaworks/DESIGN.md +437 -0
- package/web/references/inflearn/DESIGN.md +221 -366
- package/web/references/intuit/DESIGN.md +244 -0
- package/web/references/jandi/DESIGN.md +191 -291
- package/web/references/jobplanet/DESIGN.md +415 -0
- package/web/references/kakao/DESIGN.md +287 -475
- package/web/references/kakaobank/DESIGN.md +220 -521
- package/web/references/kakaogames/DESIGN.md +220 -0
- package/web/references/kakaopay/DESIGN.md +207 -526
- package/web/references/karrot/DESIGN.md +227 -251
- package/web/references/kb-kookmin/DESIGN.md +308 -0
- package/web/references/kbank/DESIGN.md +220 -175
- package/web/references/kcd/DESIGN.md +432 -0
- package/web/references/kmong/DESIGN.md +281 -356
- package/web/references/krds/DESIGN.md +245 -19
- package/web/references/kream/DESIGN.md +224 -359
- package/web/references/kurly/DESIGN.md +211 -533
- package/web/references/kyobobook/DESIGN.md +445 -0
- package/web/references/lablup/DESIGN.md +474 -0
- package/web/references/lamborghini/DESIGN.md +198 -360
- package/web/references/lemonbase/DESIGN.md +452 -0
- package/web/references/lguplus/DESIGN.md +259 -0
- package/web/references/likelion/DESIGN.md +283 -0
- package/web/references/line/DESIGN.md +396 -355
- package/web/references/linear.app/DESIGN.md +209 -562
- package/web/references/lotteon/DESIGN.md +386 -0
- package/web/references/lovable/DESIGN.md +255 -349
- package/web/references/makinarocks/DESIGN.md +242 -0
- package/web/references/maum-ai/DESIGN.md +423 -0
- package/web/references/medibloc/DESIGN.md +425 -0
- package/web/references/megabox/DESIGN.md +232 -0
- package/web/references/mercari/DESIGN.md +217 -434
- package/web/references/microsoft/DESIGN.md +234 -388
- package/web/references/mildang/DESIGN.md +411 -0
- package/web/references/millie/DESIGN.md +183 -504
- package/web/references/minimax/DESIGN.md +264 -322
- package/web/references/miricanvas/DESIGN.md +182 -355
- package/web/references/miro/DESIGN.md +234 -232
- package/web/references/mistral.ai/DESIGN.md +231 -314
- package/web/references/mixi/DESIGN.md +234 -0
- package/web/references/moin/DESIGN.md +445 -0
- package/web/references/mongodb/DESIGN.md +219 -316
- package/web/references/moreh/DESIGN.md +437 -0
- package/web/references/musinsa/DESIGN.md +184 -510
- package/web/references/mynavi/DESIGN.md +242 -0
- package/web/references/myrealtrip/DESIGN.md +169 -406
- package/web/references/naver/DESIGN.md +328 -499
- package/web/references/naverwebtoon/DESIGN.md +172 -395
- package/web/references/neosapience/DESIGN.md +441 -0
- package/web/references/nhn/DESIGN.md +169 -346
- package/web/references/nhncloud/DESIGN.md +185 -123
- package/web/references/nota/DESIGN.md +451 -0
- package/web/references/notion/DESIGN.md +271 -475
- package/web/references/nrise/DESIGN.md +417 -0
- package/web/references/ohouse/DESIGN.md +210 -549
- package/web/references/oliveyoung/DESIGN.md +217 -326
- package/web/references/ollama/DESIGN.md +241 -308
- package/web/references/onestore/DESIGN.md +248 -0
- package/web/references/palantir/DESIGN.md +256 -0
- package/web/references/panasonic/DESIGN.md +276 -0
- package/web/references/patternfly/DESIGN.md +259 -0
- package/web/references/payhere/DESIGN.md +438 -0
- package/web/references/pega/DESIGN.md +262 -0
- package/web/references/peoplefund/DESIGN.md +431 -0
- package/web/references/petfriends/DESIGN.md +428 -0
- package/web/references/pinkfong/DESIGN.md +199 -367
- package/web/references/pinterest/DESIGN.md +258 -308
- package/web/references/portone/DESIGN.md +446 -0
- package/web/references/poya/DESIGN.md +286 -0
- package/web/references/pozalabs/DESIGN.md +438 -0
- package/web/references/protopie/DESIGN.md +419 -0
- package/web/references/qraft/DESIGN.md +448 -0
- package/web/references/queenit/DESIGN.md +432 -0
- package/web/references/quotabook/DESIGN.md +449 -0
- package/web/references/rebellions/DESIGN.md +449 -0
- package/web/references/recruit/DESIGN.md +247 -0
- package/web/references/remember/DESIGN.md +202 -396
- package/web/references/resend/DESIGN.md +274 -348
- package/web/references/returnzero/DESIGN.md +460 -0
- package/web/references/sakura-internet/DESIGN.md +269 -0
- package/web/references/samsung/DESIGN.md +157 -359
- package/web/references/sandoll/DESIGN.md +445 -0
- package/web/references/sanity/DESIGN.md +241 -375
- package/web/references/saramin/DESIGN.md +465 -0
- package/web/references/scatterlab/DESIGN.md +412 -0
- package/web/references/selectstar/DESIGN.md +439 -0
- package/web/references/servicenow/DESIGN.md +289 -0
- package/web/references/shiftee/DESIGN.md +468 -0
- package/web/references/shinhanbank/DESIGN.md +161 -341
- package/web/references/shinhancard/DESIGN.md +208 -319
- package/web/references/sionic/DESIGN.md +454 -0
- package/web/references/sktelecom/DESIGN.md +310 -0
- package/web/references/socar/DESIGN.md +125 -32
- package/web/references/softbank/DESIGN.md +231 -0
- package/web/references/solapi/DESIGN.md +483 -0
- package/web/references/sony/DESIGN.md +234 -0
- package/web/references/soop/DESIGN.md +261 -0
- package/web/references/spacex/DESIGN.md +184 -323
- package/web/references/spotify/DESIGN.md +253 -394
- package/web/references/squeezebits/DESIGN.md +441 -0
- package/web/references/stayfolio/DESIGN.md +422 -0
- package/web/references/stripe/DESIGN.md +212 -491
- package/web/references/supabase/DESIGN.md +244 -316
- package/web/references/supertone/DESIGN.md +413 -0
- package/web/references/tabling/DESIGN.md +415 -0
- package/web/references/taishinbank/DESIGN.md +243 -0
- package/web/references/teamlab/DESIGN.md +240 -0
- package/web/references/teamsparta/DESIGN.md +472 -0
- package/web/references/tellingme/DESIGN.md +392 -0
- package/web/references/tesla/DESIGN.md +244 -427
- package/web/references/thsr/DESIGN.md +284 -0
- package/web/references/thumbtack/DESIGN.md +302 -0
- package/web/references/together.ai/DESIGN.md +257 -304
- package/web/references/toss/DESIGN.md +251 -593
- package/web/references/toss-securities/DESIGN.md +255 -178
- package/web/references/tossbank/DESIGN.md +195 -491
- package/web/references/toyota/DESIGN.md +238 -0
- package/web/references/tving/DESIGN.md +197 -245
- package/web/references/typed/DESIGN.md +413 -0
- package/web/references/uber/DESIGN.md +256 -333
- package/web/references/udn/DESIGN.md +250 -0
- package/web/references/upbit/DESIGN.md +145 -256
- package/web/references/upstage/DESIGN.md +211 -204
- package/web/references/uswds/DESIGN.md +287 -0
- package/web/references/vercel/DESIGN.md +236 -440
- package/web/references/vuno/DESIGN.md +413 -0
- package/web/references/wanted/DESIGN.md +215 -487
- package/web/references/weverse/DESIGN.md +437 -0
- package/web/references/wise/DESIGN.md +223 -231
- package/web/references/wisetracker/DESIGN.md +462 -0
- package/web/references/wooribank/DESIGN.md +245 -0
- package/web/references/yanolja/DESIGN.md +250 -419
- package/web/references/yeogiotte/DESIGN.md +235 -418
- package/web/references/zapier/DESIGN.md +256 -377
- package/web/references/zendesk/DESIGN.md +288 -0
- package/web/references/zigzag/DESIGN.md +200 -621
- package/dist/install-skills-7UUDOLG2.js +0 -734
- package/dist/install-skills-7UUDOLG2.js.map +0 -1
|
@@ -8,568 +8,296 @@ primary_color: "#0066ff"
|
|
|
8
8
|
logo:
|
|
9
9
|
type: favicon
|
|
10
10
|
slug: "https://www.google.com/s2/favicons?domain=wanted.co.kr&sz=256"
|
|
11
|
-
verified: "2026-
|
|
11
|
+
verified: "2026-07-12"
|
|
12
12
|
omd: "0.1"
|
|
13
13
|
ds:
|
|
14
14
|
name: Wanted Montage
|
|
15
15
|
url: "https://montage.wanted.co.kr/"
|
|
16
16
|
type: system
|
|
17
|
-
description: Wanted's
|
|
17
|
+
description: Wanted's official product-experience design system with foundations, cross-platform components, UI kits, utilities, and usage guidance.
|
|
18
|
+
verification_v2:
|
|
19
|
+
schema: 2
|
|
20
|
+
checked: "2026-07-12"
|
|
21
|
+
surfaces:
|
|
22
|
+
- { id: home, kind: product-home, url: "https://www.wanted.co.kr/", inspected: "2026-07-12" }
|
|
23
|
+
- { id: jobs, kind: product-directory, url: "https://www.wanted.co.kr/wdlist/518", inspected: "2026-07-12" }
|
|
24
|
+
- { id: company, kind: product-service, url: "https://www.wanted.co.kr/company", inspected: "2026-07-12" }
|
|
25
|
+
- { id: montage, kind: official-design-system, url: "https://montage.wanted.co.kr/", inspected: "2026-07-12" }
|
|
26
|
+
- { id: foundations, kind: official-design-system, url: "https://montage.wanted.co.kr/docs/foundations", inspected: "2026-07-12" }
|
|
27
|
+
sources:
|
|
28
|
+
- { id: home-live, kind: product-surface, url: "https://www.wanted.co.kr/", captured: "2026-07-12" }
|
|
29
|
+
- { id: jobs-live, kind: product-surface, url: "https://www.wanted.co.kr/wdlist/518", captured: "2026-07-12" }
|
|
30
|
+
- { id: company-live, kind: product-surface, url: "https://www.wanted.co.kr/company", captured: "2026-07-12" }
|
|
31
|
+
- { id: montage-live, kind: official-doc, url: "https://montage.wanted.co.kr/", captured: "2026-07-12" }
|
|
32
|
+
- { id: foundations-live, kind: official-doc, url: "https://montage.wanted.co.kr/docs/foundations", captured: "2026-07-12" }
|
|
33
|
+
- { id: typography-doc, kind: official-doc, url: "https://montage.wanted.co.kr/docs/utilities/web-utilities/typography-style", captured: "2026-07-12" }
|
|
34
|
+
- { id: text-button-doc, kind: official-doc, url: "https://montage.wanted.co.kr/docs/components/actions/text-button/design", captured: "2026-07-12" }
|
|
35
|
+
conflicts: []
|
|
36
|
+
claims:
|
|
37
|
+
"tokens.colors.primary": &home_evidence { surface_id: home, source_id: home-live, method: live-inspect, captured: "2026-07-12" }
|
|
38
|
+
"tokens.colors.canvas": *home_evidence
|
|
39
|
+
"tokens.colors.heading": *home_evidence
|
|
40
|
+
"tokens.colors.body": *home_evidence
|
|
41
|
+
"tokens.colors.secondary": &jobs_evidence { surface_id: jobs, source_id: jobs-live, method: live-inspect, captured: "2026-07-12" }
|
|
42
|
+
"tokens.colors.subtle-surface": *home_evidence
|
|
43
|
+
"tokens.colors.hairline": *jobs_evidence
|
|
44
|
+
"tokens.colors.on-primary": *home_evidence
|
|
45
|
+
"tokens.typography.family.ui": *home_evidence
|
|
46
|
+
"tokens.typography.heading.size": *jobs_evidence
|
|
47
|
+
"tokens.typography.heading.weight": *jobs_evidence
|
|
48
|
+
"tokens.typography.heading.lineHeight": *jobs_evidence
|
|
49
|
+
"tokens.typography.heading.tracking": *jobs_evidence
|
|
50
|
+
"tokens.typography.heading.use": *jobs_evidence
|
|
51
|
+
"tokens.typography.subtitle.size": *jobs_evidence
|
|
52
|
+
"tokens.typography.subtitle.weight": *jobs_evidence
|
|
53
|
+
"tokens.typography.subtitle.lineHeight": *jobs_evidence
|
|
54
|
+
"tokens.typography.subtitle.tracking": *jobs_evidence
|
|
55
|
+
"tokens.typography.subtitle.use": *jobs_evidence
|
|
56
|
+
"tokens.typography.body.size": *home_evidence
|
|
57
|
+
"tokens.typography.body.weight": *home_evidence
|
|
58
|
+
"tokens.typography.body.lineHeight": *home_evidence
|
|
59
|
+
"tokens.typography.body.use": *home_evidence
|
|
60
|
+
"tokens.typography.caption.size": *jobs_evidence
|
|
61
|
+
"tokens.typography.caption.weight": *jobs_evidence
|
|
62
|
+
"tokens.typography.caption.lineHeight": *jobs_evidence
|
|
63
|
+
"tokens.typography.caption.tracking": *jobs_evidence
|
|
64
|
+
"tokens.typography.caption.use": *jobs_evidence
|
|
65
|
+
"tokens.spacing.xs": *jobs_evidence
|
|
66
|
+
"tokens.spacing.sm": *home_evidence
|
|
67
|
+
"tokens.spacing.md": *jobs_evidence
|
|
68
|
+
"tokens.spacing.lg": *home_evidence
|
|
69
|
+
"tokens.spacing.xl": *home_evidence
|
|
70
|
+
"tokens.rounded.control": *home_evidence
|
|
71
|
+
"tokens.rounded.card": *jobs_evidence
|
|
72
|
+
"tokens.rounded.menu": &montage_evidence { surface_id: montage, source_id: montage-live, method: live-inspect, captured: "2026-07-12" }
|
|
73
|
+
"tokens.rounded.full": *home_evidence
|
|
74
|
+
"tokens.shadow.menu": *montage_evidence
|
|
75
|
+
"tokens.components.header-action.type": *home_evidence
|
|
76
|
+
"tokens.components.header-action.bg": *home_evidence
|
|
77
|
+
"tokens.components.header-action.fg": *home_evidence
|
|
78
|
+
"tokens.components.header-action.border": *home_evidence
|
|
79
|
+
"tokens.components.header-action.radius": *home_evidence
|
|
80
|
+
"tokens.components.header-action.padding": *home_evidence
|
|
81
|
+
"tokens.components.header-action.height": *home_evidence
|
|
82
|
+
"tokens.components.header-action.font": *home_evidence
|
|
83
|
+
"tokens.components.header-action.states": *home_evidence
|
|
84
|
+
"tokens.components.header-action.use": *home_evidence
|
|
85
|
+
"tokens.components.filter-button.type": *jobs_evidence
|
|
86
|
+
"tokens.components.filter-button.bg": *jobs_evidence
|
|
87
|
+
"tokens.components.filter-button.fg": *jobs_evidence
|
|
88
|
+
"tokens.components.filter-button.border": *jobs_evidence
|
|
89
|
+
"tokens.components.filter-button.radius": *jobs_evidence
|
|
90
|
+
"tokens.components.filter-button.padding": *jobs_evidence
|
|
91
|
+
"tokens.components.filter-button.height": *jobs_evidence
|
|
92
|
+
"tokens.components.filter-button.font": *jobs_evidence
|
|
93
|
+
"tokens.components.filter-button.states": *jobs_evidence
|
|
94
|
+
"tokens.components.filter-button.use": *jobs_evidence
|
|
95
|
+
"tokens.components.mini-job-card.type": *home_evidence
|
|
96
|
+
"tokens.components.mini-job-card.bg": *home_evidence
|
|
97
|
+
"tokens.components.mini-job-card.radius": *home_evidence
|
|
98
|
+
"tokens.components.mini-job-card.gap": *home_evidence
|
|
99
|
+
"tokens.components.mini-job-card.font": *home_evidence
|
|
100
|
+
"tokens.components.mini-job-card.use": *home_evidence
|
|
101
|
+
"tokens.components.job-card.type": *jobs_evidence
|
|
102
|
+
"tokens.components.job-card.bg": *jobs_evidence
|
|
103
|
+
"tokens.components.job-card.radius": *jobs_evidence
|
|
104
|
+
"tokens.components.job-card.bodyPadding": *jobs_evidence
|
|
105
|
+
"tokens.components.job-card.gap": *jobs_evidence
|
|
106
|
+
"tokens.components.job-card.font": *jobs_evidence
|
|
107
|
+
"tokens.components.job-card.use": *jobs_evidence
|
|
108
|
+
"tokens.components.search-dialog.type": *home_evidence
|
|
109
|
+
"tokens.components.search-dialog.bg": *home_evidence
|
|
110
|
+
"tokens.components.search-dialog.fg": *home_evidence
|
|
111
|
+
"tokens.components.search-dialog.inputFont": *home_evidence
|
|
112
|
+
"tokens.components.search-dialog.states": *home_evidence
|
|
113
|
+
"tokens.components.search-dialog.use": *home_evidence
|
|
114
|
+
"tokens.components.montage-menu.type": *montage_evidence
|
|
115
|
+
"tokens.components.montage-menu.bg": *montage_evidence
|
|
116
|
+
"tokens.components.montage-menu.radius": *montage_evidence
|
|
117
|
+
"tokens.components.montage-menu.gap": *montage_evidence
|
|
118
|
+
"tokens.components.montage-menu.shadow": *montage_evidence
|
|
119
|
+
"tokens.components.montage-menu.states": *montage_evidence
|
|
120
|
+
"tokens.components.montage-menu.use": *montage_evidence
|
|
18
121
|
tokens:
|
|
19
|
-
source:
|
|
20
|
-
extracted: "2026-
|
|
122
|
+
source: reconciled
|
|
123
|
+
extracted: "2026-07-12"
|
|
124
|
+
note: "Six-surface current capture plus official Montage docs. Pretendard Variable is the visible UI family. Wanted Sans Variable and Pretendard JP Variable were declared but had zero visible use in the capture and are not promoted as UI tokens."
|
|
21
125
|
colors:
|
|
22
126
|
primary: "#0066ff"
|
|
23
|
-
brand-black: "#14191e"
|
|
24
|
-
accent-orange: "#ff5c00"
|
|
25
|
-
accent-pink: "#ff8eff"
|
|
26
|
-
accent-sky: "#00adff"
|
|
27
|
-
accent-violet: "#8364ff"
|
|
28
|
-
brand-grey: "#f0f4f8"
|
|
29
127
|
canvas: "#ffffff"
|
|
30
|
-
surface-subtle: "#f7f7f8"
|
|
31
128
|
heading: "#171719"
|
|
32
129
|
body: "#333333"
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
warning: "#ffab00"
|
|
130
|
+
secondary: "#858688"
|
|
131
|
+
subtle-surface: "#f8f8f8"
|
|
132
|
+
hairline: "#e8e9ea"
|
|
133
|
+
on-primary: "#ffffff"
|
|
38
134
|
typography:
|
|
39
|
-
family: {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
caption: { size: 12, weight: 400, lineHeight: 1.5, use: "Metadata, dates, location" }
|
|
47
|
-
micro: { size: 10, weight: 500, lineHeight: 1.4, use: "Footer link strip" }
|
|
48
|
-
spacing: { xs: 4, sm: 8, md: 12, base: 16, lg: 20, xl: 24, xxl: 32, section: 64 }
|
|
49
|
-
rounded: { sm: 6, md: 8, lg: 12, full: 9999 }
|
|
135
|
+
family: { ui: "Pretendard Variable" }
|
|
136
|
+
heading: { size: 22, weight: 600, lineHeight: 1.36, tracking: -0.4268, use: "Current product section headings and Montage headings" }
|
|
137
|
+
subtitle: { size: 16, weight: 600, lineHeight: 1.5, tracking: 0.0912, use: "Job-card position title" }
|
|
138
|
+
body: { size: 14, weight: 400, lineHeight: 1.43, use: "Product lists, cards, actions, and supporting copy" }
|
|
139
|
+
caption: { size: 12, weight: 500, lineHeight: 1.33, tracking: 0.3024, use: "Job-card industry and metadata" }
|
|
140
|
+
spacing: { xs: 4, sm: 8, md: 14, lg: 20, xl: 40 }
|
|
141
|
+
rounded: { control: 8, card: 12, menu: 16, full: 9999 }
|
|
50
142
|
shadow:
|
|
51
|
-
|
|
52
|
-
modal: "0px 8px 24px rgba(0,0,0,0.12)"
|
|
53
|
-
components:
|
|
54
|
-
button-primary: { type: button, bg: "#0066ff", fg: "#ffffff", radius: 8, padding: "7px 14px", font: "14px/400 Pretendard Variable", use: "Sign-up / apply CTA (filled)" }
|
|
55
|
-
button-secondary: { type: button, fg: "#171719", radius: 8, padding: "7px 14px", font: "14px/400 Pretendard Variable", use: "Header nav text button" }
|
|
56
|
-
filter-chip: { type: badge, fg: "#171719", radius: 10, padding: "7px 9px 7px 11px", font: "14px/400 Pretendard Variable", use: "Filter taxonomy chip, hover bg #f7f7f8" }
|
|
57
|
-
jobcard: { type: card, bg: "#ffffff", radius: 12, padding: "12px 16px", use: "Job posting card, no shadow, gutter separation" }
|
|
58
|
-
segmented: { type: tab, bg: "#f7f7f8", radius: 10, padding: "0 4px", font: "14px/400 Pretendard Variable", use: "Sort control track", active: "white segment 8px radius #333333 text" }
|
|
59
|
-
reward-badge: { type: badge, fg: "#ffffff", radius: 2, font: "12px/600 Pretendard Variable", use: "합격보상금 overlay on thumbnail" }
|
|
60
|
-
micro-tag: { type: badge, bg: "#a0a0a0", fg: "#ffffff", radius: 0, padding: "5px 7px", font: "10px/500 Pretendard Variable", use: "Footer legal pill" }
|
|
61
|
-
search-input: { type: input, fg: "#171719", radius: 9999, font: "14px/400 Pretendard Variable", use: "Header search trigger" }
|
|
62
|
-
avatar-pill: { type: avatar, bg: "#171719", radius: 9999, use: "Header user avatar 38x38" }
|
|
143
|
+
menu: "0 2px 4px -2px rgba(23,23,23,0.06), 0 4px 6px -1px rgba(23,23,23,0.06)"
|
|
63
144
|
components_harvested: true
|
|
145
|
+
components:
|
|
146
|
+
header-action: { type: button, bg: "transparent", fg: "#0066ff", border: "1px inset rgba(112,115,124,0.16)", radius: "8px", padding: "7px 14px", height: "32px", font: "14px / 400", states: "default captured; no hover/focus token promoted", use: "Current product header account action" }
|
|
147
|
+
filter-button: { type: button, bg: "transparent", fg: "#171719", border: "1px inset rgba(112,115,124,0.16)", radius: "8px", padding: "7px 11px", height: "36px", font: "14px / 400", states: "default captured; no selected value inferred", use: "All-tags and filter trigger on the job directory" }
|
|
148
|
+
mini-job-card: { type: card, bg: "transparent", radius: "12px image", gap: "14px", font: "16px / 600 title", use: "Horizontal recommended-job card on the current home surface" }
|
|
149
|
+
job-card: { type: card, bg: "transparent", radius: "12px thumbnail", bodyPadding: "0px 6px", gap: "2px", font: "16px / 600 position title", use: "Vertical job result card on the current directory" }
|
|
150
|
+
search-dialog: { type: input, bg: "#ffffff", fg: "#171719", inputFont: "16px / 400 / 24px", states: "dialog-open captured on four product surfaces", use: "Full-screen product search input revealed from the header" }
|
|
151
|
+
montage-menu: { type: dialog, bg: "transparent", radius: "16px", gap: "4px", shadow: "0 2px 4px -2px rgba(23,23,23,0.06), 0 4px 6px -1px rgba(23,23,23,0.06)", states: "dialog-open captured on Montage pages", use: "Compact current Montage navigation/menu overlay" }
|
|
64
152
|
---
|
|
65
153
|
|
|
66
154
|
# Design System Inspiration of Wanted (원티드)
|
|
67
155
|
|
|
68
156
|
## 1. Visual Theme & Atmosphere
|
|
69
157
|
|
|
70
|
-
Wanted
|
|
158
|
+
Wanted is a Korean career platform that connects job discovery, company information, career content, and employer services around the idea that every working person should be able to work more like themselves. Its current product is quieter and denser than a campaign page: white surfaces, `#171719` headings, `#333333` body copy, restrained translucent metadata, and `#0066ff` reserved for recognizable actions. The signature visual unit is not a generic elevated card but a job result composed from a 12px media thumbnail, a compact 16px/600 position title, company and location metadata, and generous grid rhythm.
|
|
71
159
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
The signature surface is the **JobCard** — a 12px-radius white container holding a thumbnail (12/12/0/0 corners), bookmark icon, company name, position title, salary range, and 합격보상금 (referral reward) badge. Cards sit in a 3-column grid on desktop, full-width on mobile, separated by 20–24px gutters. Filter chips above the grid use 9999px pill radii for country/condition/stack toggles, and a 10px-radius segmented control for sort order (최신순/추천순/인기순).
|
|
160
|
+
Montage is Wanted's current official product-experience design system. Its 2026 site frames reusable foundations and components as a way to combine individual parts into a consistent, intuitive service, and publishes cross-platform component guidance rather than only a static brand kit. The live product and Montage capture both visibly used Pretendard Variable. Wanted Sans Variable and Pretendard JP Variable were present as declared downloadable faces but had zero visible computed use in the inspected nodes, so this reference keeps their existence as font evidence without rendering either as the current UI family.
|
|
75
161
|
|
|
76
162
|
**Key Characteristics:**
|
|
77
|
-
-
|
|
78
|
-
-
|
|
79
|
-
-
|
|
80
|
-
-
|
|
81
|
-
-
|
|
82
|
-
- 9999px pill chips for filter taxonomy, 8/10/12px stepped radii for everything else
|
|
83
|
-
- White canvas (`#FFFFFF`) + warm-grey panel (`#F7F7F8`) — no dark mode on web (Montage system supports it)
|
|
163
|
+
- `#0066ff` interactive accent on a white product canvas
|
|
164
|
+
- Loaded Pretendard Variable with 1,575 visible uses across product and Montage
|
|
165
|
+
- 12px image/card geometry, 8px controls, and 16px overlay menus
|
|
166
|
+
- Product search dialog captured through safe interaction on four product routes
|
|
167
|
+
- Current job-card composition documented separately from Montage primitives
|
|
84
168
|
|
|
85
169
|
## 2. Color Palette & Roles
|
|
86
170
|
|
|
87
|
-
|
|
88
|
-
- **
|
|
89
|
-
- **
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
- **
|
|
93
|
-
- **
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
- **Brand Grey** (`#F0F4F8`): Cool-grey marketing canvas, distinct from UI surface grey.
|
|
97
|
-
|
|
98
|
-
### UI Surface & Text
|
|
99
|
-
- **Background** (`#FFFFFF`): Page surface, card surface.
|
|
100
|
-
- **Surface Subtle** (`#F7F7F8`): Segmented-control track, secondary panel background, filter dropdown menu surface.
|
|
101
|
-
- **Heading** (`#171719`): Primary text — H1/H2, position title, company name on JobCard.
|
|
102
|
-
- **Body** (`#333333`): Standard reading text, body paragraphs in job description.
|
|
103
|
-
- **Secondary** (`rgba(55, 56, 60, 0.61)`): Metadata, breadcrumbs, "상품안내" sub-nav links — translucent grey, intentionally non-hex so it adapts to surface.
|
|
104
|
-
- **Disabled** (`rgb(160, 160, 160)`): Pre-disabled link state and inactive controls.
|
|
105
|
-
|
|
106
|
-
### Border & Divider
|
|
107
|
-
- **Border Default** (`rgba(112, 115, 124, 0.16)`): The standard 1px hairline — used on the dropdown toggle (`태그 전체` button) and as the universal card edge when shadow is suppressed. Translucent so it visually softens against any background.
|
|
108
|
-
- **Divider** (`#E5E8EB`): Solid hairline for list separators inside content (job description sections).
|
|
109
|
-
|
|
110
|
-
### Semantic (Inherited from Montage / WDS theme)
|
|
111
|
-
- **Error / Negative** (`#F0483C`): Form validation errors, application-failed states.
|
|
112
|
-
- **Success / Positive** (`#00B97C`): Application success, payment confirmation.
|
|
113
|
-
- **Warning** (`#FFAB00`): "Expiring soon" job badges, attention-needed.
|
|
114
|
-
- **Info** (`#0066FF`): Same as primary — info uses brand blue, not a separate teal.
|
|
171
|
+
- **Primary action** (`#0066ff`): current account/action text across four product surfaces.
|
|
172
|
+
- **Heading** (`#171719`): product headings, position titles, and controls.
|
|
173
|
+
- **Body** (`#333333`): dominant product list and card copy.
|
|
174
|
+
- **Secondary** (`#858688`): the observed 61% metadata color resolved on white.
|
|
175
|
+
- **Canvas** (`#ffffff`): page, dialog, and content surface.
|
|
176
|
+
- **Subtle surface** (`#f8f8f8`): current secondary product background.
|
|
177
|
+
- **Hairline** (`#e8e9ea`): the observed 16% control boundary resolved on white.
|
|
178
|
+
|
|
179
|
+
The old marketing orange, pink, sky, violet, semantic error/success/warning, and `#f7f7f8` claims were not promoted because the current capture did not establish those roles at the same surface boundary.
|
|
115
180
|
|
|
116
181
|
## 3. Typography Rules
|
|
117
182
|
|
|
118
|
-
### Font
|
|
119
|
-
- **Primary (UI)**: `"Pretendard Variable", "Pretendard JP Variable", -apple-system, BlinkMacSystemFont, "Apple SD Gothic Neo", system-ui, sans-serif` — verified live on every text node on wanted.co.kr.
|
|
120
|
-
- **Brand / Display**: `"Wanted Sans", "Wanted Sans Std", "Pretendard Variable", sans-serif` — used in marketing pages, brandcenter, montage docs.
|
|
121
|
-
- **Latin-only fallback**: `"Wanted Sans Std"` — for English-only contexts where Korean glyphs aren't needed.
|
|
183
|
+
### Font evidence boundary
|
|
122
184
|
|
|
123
|
-
|
|
185
|
+
| Evidence class | Resolution |
|
|
186
|
+
|---|---|
|
|
187
|
+
| Official product-use | Montage publishes Wanted's current product typography utilities and scale. |
|
|
188
|
+
| Live surface-use | Pretendard Variable loaded/high with 1,575 visible uses across six captured surfaces. |
|
|
189
|
+
| Official distributed asset | Montage links font resources; asset licensing must be checked per resource before redistribution. |
|
|
190
|
+
| Declared-only | Pretendard JP Variable and Wanted Sans Variable were declared with source files but zero visible use. |
|
|
191
|
+
| Unresolved | Campaign-only use of Wanted Sans and native-app overrides remain unresolved. |
|
|
124
192
|
|
|
125
|
-
###
|
|
193
|
+
### Current observed hierarchy
|
|
126
194
|
|
|
127
|
-
| Role |
|
|
128
|
-
|
|
129
|
-
|
|
|
130
|
-
|
|
|
131
|
-
|
|
|
132
|
-
|
|
|
133
|
-
|
|
|
134
|
-
| Body Small | Pretendard Variable | 13px | 400 | 1.5 | Company name on JobCard |
|
|
135
|
-
| Caption | Pretendard Variable | 12px | 400 | 1.5 | Metadata, dates, location |
|
|
136
|
-
| Micro | Pretendard Variable | 10px | 500 | 1.4 | Footer 사업자정보확인 strip |
|
|
195
|
+
| Role | Size | Weight | Line height | Tracking |
|
|
196
|
+
|---|---:|---:|---:|---:|
|
|
197
|
+
| Section heading | 22px | 600 | 30px | -0.4268px |
|
|
198
|
+
| Job position | 16px | 600 | 24px | 0.0912px |
|
|
199
|
+
| Supporting title | 15px | 600 | 22px | 0.144px |
|
|
200
|
+
| Product body | 14px | 400 | 20px | normal |
|
|
201
|
+
| Metadata | 12px | 500 | 16px | 0.3024px |
|
|
137
202
|
|
|
138
|
-
|
|
139
|
-
- **Two surfaces, two fonts.** Product UI = Pretendard Variable (battle-tested, fast). Marketing/brand = Wanted Sans (proprietary, expressive). Never mix on the same screen.
|
|
140
|
-
- **Three weights, mostly.** 400 (body), 600 (emphasis / subtitle), 700 (heading). 500 only appears on micro-text (footer link strip) and bookmark micro-labels.
|
|
141
|
-
- **Korean is primary.** Wanted Sans was designed Korean-first; Latin glyphs are optically weighted to harmonize with Hangul. Never assume English is the default voice.
|
|
142
|
-
- **Variable fonts everywhere.** Both Pretendard and Wanted Sans ship as variable fonts — interpolate weight at runtime rather than loading discrete weight files.
|
|
203
|
+
Montage's official typography utility documents a broader scale from Display 1 through Caption 2. That published scale is useful system context; the smaller machine token set above contains only roles grounded in this capture.
|
|
143
204
|
|
|
144
205
|
## 4. Component Stylings
|
|
145
206
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
### Buttons
|
|
149
|
-
|
|
150
|
-
**Primary CTA / Brand**
|
|
151
|
-
- Background: transparent (text-only on header) → `#0066FF` (filled on apply / sign-up surfaces)
|
|
152
|
-
- Text: `#0066FF` (text variant) → `#FFFFFF` (filled)
|
|
153
|
-
- Border: none
|
|
154
|
-
- Radius: 8px
|
|
155
|
-
- Padding: 7px 14px
|
|
156
|
-
- Font: 14px / 400 / Pretendard Variable
|
|
157
|
-
- Height: 32px (compact header) / 48–52px (apply CTA)
|
|
158
|
-
- Use: `회원가입/로그인` header button (text variant) and 지원하기 (filled variant on job detail)
|
|
159
|
-
|
|
160
|
-
**Secondary Text Button**
|
|
161
|
-
- Background: transparent
|
|
162
|
-
- Text: `#171719`
|
|
163
|
-
- Border: none
|
|
164
|
-
- Radius: 8px
|
|
165
|
-
- Padding: 7px 14px
|
|
166
|
-
- Font: 14px / 400 / Pretendard Variable
|
|
167
|
-
- Height: 32px
|
|
168
|
-
- Use: `기업 서비스`, header nav links — same geometry as primary text button, neutral color
|
|
169
|
-
|
|
170
|
-
**Filter Chip / Pill (Country, Tag)**
|
|
171
|
-
- Background: transparent (inactive) → `#F7F7F8` (hover/active)
|
|
172
|
-
- Text: `#171719`
|
|
173
|
-
- Border: none
|
|
174
|
-
- Radius: 10px (10px on `한국` filter) / 9999px (pill on round chips)
|
|
175
|
-
- Padding: 7px 9px 7px 11px (asymmetric — slightly tighter on right for chevron icon)
|
|
176
|
-
- Font: 14px / 400 / Pretendard Variable
|
|
177
|
-
- Height: 36px
|
|
178
|
-
- Use: Filter taxonomy chips above job grid (한국 / 채용조건 / 기술스택 / 글로벌)
|
|
179
|
-
|
|
180
|
-
**Tag Dropdown ("태그 전체")**
|
|
181
|
-
- Background: transparent
|
|
182
|
-
- Text: `#171719`
|
|
183
|
-
- Border: none
|
|
184
|
-
- Radius: 8px
|
|
185
|
-
- Padding: 7px 11px
|
|
186
|
-
- Font: 14px / 400 / Pretendard Variable
|
|
187
|
-
- Height: 36px
|
|
188
|
-
- Use: Dropdown trigger for tag taxonomy — paired with 8px outlined icon container (`1px solid rgba(112,115,124,0.16)`)
|
|
189
|
-
|
|
190
|
-
**Filter Category Heading ("개발・개발 전체")**
|
|
191
|
-
- Background: transparent
|
|
192
|
-
- Text: `#171719`
|
|
193
|
-
- Border: none
|
|
194
|
-
- Radius: 6px
|
|
195
|
-
- Padding: 4px 0
|
|
196
|
-
- Font: 16px / 600 / Pretendard Variable
|
|
197
|
-
- Height: 40px
|
|
198
|
-
- Use: Active category label at top of job feed — larger, semibold, with trailing 8px-radius chevron icon button
|
|
199
|
-
|
|
200
|
-
### Cards
|
|
201
|
-
|
|
202
|
-
**JobCard (primary surface)**
|
|
203
|
-
- Background: `#FFFFFF`
|
|
204
|
-
- Border: none
|
|
205
|
-
- Radius: 12px (body) / 12px 12px 0 0 (thumbnail — top corners only)
|
|
206
|
-
- Padding: 0 (thumbnail flush) / 12px 16px (body)
|
|
207
|
-
- Shadow: none on default — relies on grid gutter for separation
|
|
208
|
-
- Thumbnail aspect: 4:3 (≈ 251×167 at default width)
|
|
209
|
-
- Logo crop: 50px square, 9px radius, positioned bottom-left overlapping thumbnail
|
|
210
|
-
- Use: Job posting in feed grid — the signature Wanted surface
|
|
211
|
-
|
|
212
|
-
**AdCard (sponsored / promoted listing)**
|
|
213
|
-
- Background: `#FFFFFF`
|
|
214
|
-
- Border: none
|
|
215
|
-
- Radius: 12px 12px 0 0 (thumbnail) + 12px (full card)
|
|
216
|
-
- Padding: 0
|
|
217
|
-
- Thumbnail height: 114px (4:3 at 252 wide)
|
|
218
|
-
- Use: Promoted job in feed — same geometry as JobCard, distinguished by a `상품안내` micro-link in the corner rather than visual treatment
|
|
219
|
-
|
|
220
|
-
**Reward Badge ("합격보상금 100만원")**
|
|
221
|
-
- Background: transparent overlay on thumbnail
|
|
222
|
-
- Text: `#FFFFFF` on dark thumbnail tint
|
|
223
|
-
- Border: none
|
|
224
|
-
- Radius: inherits thumbnail
|
|
225
|
-
- Font: 12px / 600 / Pretendard Variable
|
|
226
|
-
- Use: Referral-reward callout — Wanted's signature growth lever, surfaced on every eligible JobCard
|
|
227
|
-
|
|
228
|
-
### Inputs
|
|
229
|
-
|
|
230
|
-
**Search Input (header)**
|
|
231
|
-
- Background: `#FFFFFF` inside translucent dark pill wrapper (`#171719`)
|
|
232
|
-
- Wrapper: `38×38px`, 9999px radius, `#171719` background
|
|
233
|
-
- Text: `#171719` placeholder
|
|
234
|
-
- Font: 14px / 400 / Pretendard Variable
|
|
235
|
-
- Use: Header search trigger — icon-only at 38px, expands on focus
|
|
236
|
-
|
|
237
|
-
Detailed input variants (text/number/textarea/search) live in the `@wanteddev/wds` package — observable on Montage docs but not on the public-facing jobs feed surface inspected here.
|
|
238
|
-
|
|
239
|
-
### Segmented Controls / Sort Filter
|
|
240
|
-
|
|
241
|
-
**Container ("최신순 / 추천순 / 인기순")**
|
|
242
|
-
- Background: `#F7F7F8`
|
|
243
|
-
- Border: none
|
|
244
|
-
- Radius: 10px
|
|
245
|
-
- Padding: 0 4px
|
|
246
|
-
- Height: 40px
|
|
247
|
-
- Width: 236px (3-segment auto)
|
|
248
|
-
- Font: 14px / 400 / Pretendard Variable
|
|
249
|
-
|
|
250
|
-
**Active Segment**
|
|
251
|
-
- Background: `#FFFFFF`
|
|
252
|
-
- Text: `#333333`
|
|
253
|
-
- Border: none
|
|
254
|
-
- Radius: 8px
|
|
255
|
-
- Height: 32px (inset 4px on each side from container)
|
|
256
|
-
- Shadow: none — relies on background contrast against container `#F7F7F8`
|
|
257
|
-
- Use: Currently selected sort mode
|
|
258
|
-
|
|
259
|
-
### Icon Buttons
|
|
260
|
-
|
|
261
|
-
**Round Icon (bookmark, close, expand)**
|
|
262
|
-
- Background: transparent (default) → `#FFFFFF` (filled rest state)
|
|
263
|
-
- Text/Icon: `#333333`
|
|
264
|
-
- Border: none
|
|
265
|
-
- Radius: 50%
|
|
266
|
-
- Padding: 8px (30px target) / 11.3px (36px target) / 8px (40px target)
|
|
267
|
-
- Sizes: 30px (compact list), 36px (toolbar), 40px (JobCard bookmark)
|
|
268
|
-
- Use: Bookmark on JobCard, close on modals, expand on accordion sections
|
|
269
|
-
|
|
270
|
-
### Badges
|
|
271
|
-
|
|
272
|
-
**Solid Badge ("FAQ" / brand callout)**
|
|
273
|
-
- Background: `#171719` (or `#0066FF` for brand emphasis)
|
|
274
|
-
- Text: `#FFFFFF`
|
|
275
|
-
- Border: none
|
|
276
|
-
- Radius: 2px
|
|
277
|
-
- Padding: 4px 8px 4px 14px (asymmetric — leaves room for trailing chevron)
|
|
278
|
-
- Font: 15px / 400 / Pretendard Variable
|
|
279
|
-
- Height: 31px
|
|
280
|
-
- Use: Inline brand callouts, footer FAQ chip
|
|
281
|
-
|
|
282
|
-
**Micro Tag ("사업자정보확인" footer)**
|
|
283
|
-
- Background: `#A0A0A0`
|
|
284
|
-
- Text: `#FFFFFF`
|
|
285
|
-
- Border: none
|
|
286
|
-
- Radius: 0px
|
|
287
|
-
- Padding: 5px 7px
|
|
288
|
-
- Font: 10px / 500 / Pretendard Variable
|
|
289
|
-
- Height: 22px
|
|
290
|
-
- Use: Legal / regulatory micro-pill in footer — squared edges signal "official document" tone
|
|
291
|
-
|
|
292
|
-
### Header Avatar / Logo Lockup
|
|
293
|
-
|
|
294
|
-
**Logo / Profile Pill (header right)**
|
|
295
|
-
- Background: `#171719`
|
|
296
|
-
- Border: none
|
|
297
|
-
- Radius: 9999px
|
|
298
|
-
- Size: 38×38px
|
|
299
|
-
- Use: Logged-in user avatar placeholder + brand mark — full-pill, no border
|
|
207
|
+
### Current verified components
|
|
300
208
|
|
|
301
|
-
|
|
209
|
+
#### Header account action
|
|
210
|
+
- Transparent background, `#0066ff` label, 8px radius
|
|
211
|
+
- 1px translucent inset boundary; 7px × 14px padding; 32px height
|
|
212
|
+
|
|
213
|
+
#### Job filter trigger
|
|
214
|
+
- Transparent, `#171719`, 8px radius, 1px translucent inset boundary
|
|
215
|
+
- 7px × 11px padding; 36px height; 14px/400
|
|
302
216
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
-
|
|
306
|
-
- `https://www.wanted.co.kr/brandcenter/` — official brand palette (`#0066FF` PANTONE 2195 C, secondary `#14191E`/`#FF5C00`/`#FF8EFF`/`#00ADFF`/`#8364FF`/`#F0F4F8`)
|
|
307
|
-
- `https://montage.wanted.co.kr/` — Wanted Montage Design System (WDS) docs portal
|
|
308
|
-
- `https://github.com/wanteddev/montage-web` — `@wanteddev/wds` package family (wds-theme, wds-engine, wds-icon, wds-lottie, wds-nextjs)
|
|
309
|
-
- `https://github.com/wanteddev/wanted-sans` — Wanted Sans typeface (7 weights + variable, SIL OFL 1.1)
|
|
217
|
+
#### Mini job card
|
|
218
|
+
- Horizontal 120×90 media with 12px radius and 14px content gap
|
|
219
|
+
- Position title 16px/600/24px
|
|
310
220
|
|
|
311
|
-
|
|
312
|
-
-
|
|
313
|
-
-
|
|
221
|
+
#### Directory job card
|
|
222
|
+
- 308×205 media thumbnail with 12px radius and 8px bottom margin
|
|
223
|
+
- Body uses 0 6px padding and 2px internal gap; position title 16px/600
|
|
314
224
|
|
|
315
|
-
|
|
225
|
+
#### Search dialog
|
|
226
|
+
- White full-screen search surface revealed through the current header
|
|
227
|
+
- Input `#171719`, 16px/400/24px; `dialog-open` observed on four product routes
|
|
316
228
|
|
|
317
|
-
|
|
229
|
+
#### Montage menu
|
|
230
|
+
- 16px radius, 4px gap, subtle two-layer shadow
|
|
231
|
+
- Open overlay captured on both Montage surfaces
|
|
232
|
+
|
|
233
|
+
No filled apply CTA, segmented control, form validation, toast, or native navigation token is promoted without a current matching sample.
|
|
318
234
|
|
|
319
235
|
## 5. Layout Principles
|
|
320
236
|
|
|
321
|
-
|
|
322
|
-
-
|
|
323
|
-
-
|
|
324
|
-
-
|
|
325
|
-
- Filter row padding: 45px 0 20px (large top buffer, smaller bottom)
|
|
326
|
-
- Header height: 56px on desktop, 52px on mobile
|
|
327
|
-
|
|
328
|
-
### Grid & Container
|
|
329
|
-
- Max content width: 1185px (observed on `JobList_JobList__filter` div)
|
|
330
|
-
- Job feed grid: 4 columns at ≥1185px / 3 at ≥768px / 2 at ≥480px / 1 at <480px
|
|
331
|
-
- Card width at 4-col: ~252px (matches `AdCard_AdCard__thumbnail` width)
|
|
332
|
-
- Gutter: 20px horizontal, 24px vertical
|
|
333
|
-
- Page horizontal padding: 0 (cards flush to grid edge) with internal card padding handling visual breathing room
|
|
334
|
-
|
|
335
|
-
### Whitespace Philosophy
|
|
336
|
-
- **Generous filter zone**: 45px above the filter row, 20px below — the filter UI deserves emphasis as the primary navigation pattern.
|
|
337
|
-
- **Tight card interiors**: JobCard body uses 12px 16px padding — denser than Toss (which uses 20px) because cards are smaller and meant to be scanned in a grid, not read in isolation.
|
|
338
|
-
- **Hierarchical density**: Job feed is dense (grid of 12–16 cards visible). Job detail is spacious (single column, ≥24px vertical rhythm between sections).
|
|
339
|
-
|
|
340
|
-
### Border Radius Scale
|
|
341
|
-
- Squared (0–2px): Legal/regulatory micro-pills, official-document callouts
|
|
342
|
-
- Compact (4–6px): Filter category heading, small accents
|
|
343
|
-
- Standard (8px): Buttons, inputs, secondary controls
|
|
344
|
-
- Comfortable (10px): Segmented-control container, filter chips
|
|
345
|
-
- Card (12px): JobCard, AdCard, sheets
|
|
346
|
-
- Pill (9999px): Header avatar, search trigger, country filter (`한국`)
|
|
237
|
+
- Job discovery uses repeatable grid rhythm while the card body itself stays flat.
|
|
238
|
+
- Keep 12px media rounding distinct from 8px product controls and 16px overlays.
|
|
239
|
+
- Dense metadata belongs below a clear 16px/600 position title.
|
|
240
|
+
- Product composition and Montage documentation examples may share foundations but are not interchangeable evidence.
|
|
347
241
|
|
|
348
242
|
## 6. Depth & Elevation
|
|
349
243
|
|
|
350
|
-
|
|
351
|
-
|-------|-----------|-----|
|
|
352
|
-
| Flat (Level 0) | No shadow | Page background, JobCard at rest |
|
|
353
|
-
| Border (Level 1) | `1px solid rgba(112, 115, 124, 0.16)` | Dropdown trigger icon, hairline edges |
|
|
354
|
-
| Hover (Level 2) | Subtle bg shift to `#F7F7F8` | Filter chip hover, segmented-control segment |
|
|
355
|
-
| Floating (Level 3) | `0px 4px 12px rgba(0,0,0,0.08)` | Dropdown menus, popovers, "더보기" overflow |
|
|
356
|
-
| Modal (Level 4) | `0px 8px 24px rgba(0,0,0,0.12)` | Application-form dialogs, full-screen sheets |
|
|
357
|
-
|
|
358
|
-
**Shadow Philosophy.** Wanted prefers background-tint elevation over drop shadows. JobCards float on a white canvas without shadows — separation comes from the 20–24px grid gutter and the warm-grey `#F7F7F8` of the surrounding filter bar. Shadows only appear on floating overlays (dropdowns, modals), and they're single-layer pure black at low opacity — no colored tints, no multi-layer stacks. This matches Toss's restraint principle but is implemented through grid spacing rather than shadow tokens.
|
|
244
|
+
Most current product cards are flat. Controls use an inset 1px translucent boundary, while the captured Montage menu uses a low-opacity two-layer shadow. No generic modal shadow is promoted.
|
|
359
245
|
|
|
360
246
|
## 7. Do's and Don'ts
|
|
361
247
|
|
|
362
248
|
### Do
|
|
363
|
-
-
|
|
364
|
-
-
|
|
365
|
-
-
|
|
366
|
-
- Use `#F7F7F8` for segmented-control tracks and secondary panels — it's the Wanted "surface grey"
|
|
367
|
-
- Display 합격보상금 (referral bonus) prominently on every JobCard that has one — it's a brand differentiator
|
|
368
|
-
- Use translucent secondary text (`rgba(55, 56, 60, 0.61)`) for metadata — it adapts to surface automatically
|
|
249
|
+
- Reserve `#0066ff` for clear actions and selection meaning.
|
|
250
|
+
- Use the verified flat job-card composition for career listings.
|
|
251
|
+
- Keep declared fonts separate from visibly used fonts.
|
|
369
252
|
|
|
370
253
|
### Don't
|
|
371
|
-
-
|
|
372
|
-
-
|
|
373
|
-
-
|
|
374
|
-
- Don't use Wanted Sans on dense UI (job listings, forms) — it's a display face, Pretendard handles density better
|
|
375
|
-
- Don't square the JobCard corners — 12px radius is the brand mark of the surface
|
|
376
|
-
- Don't use 합격보상금 callouts on non-job surfaces — the badge is reserved for job postings with active referral programs
|
|
377
|
-
- Don't put bold (700) weight on body text — reserved for headings and job titles
|
|
254
|
+
- Do not render Wanted Sans as current product UI merely because its files are declared.
|
|
255
|
+
- Do not invent colored semantic states or filled CTAs from an old snapshot.
|
|
256
|
+
- Do not turn every content block into a shadowed 12px card.
|
|
378
257
|
|
|
379
258
|
## 8. Responsive Behavior
|
|
380
259
|
|
|
381
|
-
|
|
382
|
-
| Name | Width | Key Changes |
|
|
383
|
-
|------|-------|-------------|
|
|
384
|
-
| Mobile | <480px | 1-column job feed, full-width cards, hamburger nav |
|
|
385
|
-
| Tablet | 480–768px | 2-column job feed, condensed filter bar (scrolls horizontally) |
|
|
386
|
-
| Desktop | 768–1185px | 3-column job feed, full filter bar visible |
|
|
387
|
-
| Wide | ≥1185px | 4-column job feed, centered content with 1185px max-width |
|
|
388
|
-
|
|
389
|
-
### Touch Targets
|
|
390
|
-
- Filter chips: 36px height — comfortable for thumb-tap, dense enough for desktop
|
|
391
|
-
- Icon buttons: 30 / 36 / 40px stepped — context-dependent (compact / toolbar / card-action)
|
|
392
|
-
- Apply CTA: 48–52px — full-width on mobile, fixed width on desktop
|
|
393
|
-
|
|
394
|
-
### Collapsing Strategy
|
|
395
|
-
- Filter bar: scrolls horizontally on mobile rather than wrapping (preserves the linear chip taxonomy)
|
|
396
|
-
- JobCard thumbnail: maintains 4:3 aspect ratio at all widths
|
|
397
|
-
- Header search: collapses to 38px icon trigger on mobile, expands to inline input on desktop ≥768px
|
|
398
|
-
|
|
399
|
-
### Image Behavior
|
|
400
|
-
- Company logos: 50px square, 9px radius, bottom-left overlap on JobCard thumbnail
|
|
401
|
-
- Job thumbnails: 4:3 aspect, object-fit cover, no skeleton — uses solid `#F0F4F8` background while loading
|
|
402
|
-
- Brand illustrations (marketing pages): full-bleed, responsive, follow Wanted Sans display rhythm
|
|
260
|
+
The inspected product adapts repeated job units and search overlays while retaining the same type and radius hierarchy. Exact breakpoints and native-app navigation behavior were not promoted from these desktop captures.
|
|
403
261
|
|
|
404
262
|
## 9. Agent Prompt Guide
|
|
405
263
|
|
|
406
|
-
|
|
407
|
-
- Primary / Interactive: `#0066FF` (Wanted Blue, PANTONE 2195 C)
|
|
408
|
-
- Heading text: `#171719`
|
|
409
|
-
- Body text: `#333333`
|
|
410
|
-
- Secondary text: `rgba(55, 56, 60, 0.61)`
|
|
411
|
-
- Surface: `#FFFFFF`
|
|
412
|
-
- Surface subtle: `#F7F7F8`
|
|
413
|
-
- Border default: `rgba(112, 115, 124, 0.16)`
|
|
414
|
-
- Brand black (marketing): `#14191E`
|
|
415
|
-
- Marketing accents: `#FF5C00` / `#FF8EFF` / `#00ADFF` / `#8364FF` / `#F0F4F8`
|
|
416
|
-
|
|
417
|
-
### Example Component Prompts
|
|
418
|
-
- "Create a JobCard: white bg, 12px radius, 4:3 thumbnail with top-corners-only radius (12 12 0 0), 50px-square company logo (9px radius) overlapping bottom-left of thumbnail. Below thumbnail: 12 16px padding, position title 16px weight 600 `#171719`, company name 13px weight 400 `#333333`, location + experience caption 12px `rgba(55,56,60,0.61)`, optional 합격보상금 badge as small pill at top-right of thumbnail. Bookmark icon button 40px circle, top-right of card."
|
|
419
|
-
- "Build a sign-up CTA: `#0066FF` background, white text 14px weight 400, 8px radius, 32px height (header) or 48px (apply page), 7px 14px padding. No shadow."
|
|
420
|
-
- "Design a filter chip row: horizontal scroll on mobile. Each chip 36px height, 10px radius, transparent bg with `#171719` text 14px weight 400, 7–11px asymmetric padding. Active chip uses `#F7F7F8` background. Country chip (`한국`) uses 10px radius with trailing chevron."
|
|
421
|
-
- "Create a segmented control for sort (최신순/추천순/인기순): `#F7F7F8` container at 40px height, 10px radius, 0 4px padding. Active segment is white at 32px height with 8px radius. Inactive segments transparent. 14px Pretendard Variable text."
|
|
422
|
-
- "Design a referral-reward badge (합격보상금 100만원): translucent overlay at top-left of JobCard thumbnail, white 12px weight 600 text, no background shape — just text on a subtle dark gradient overlay across the top 30% of the thumbnail for legibility."
|
|
423
|
-
|
|
424
|
-
### Iteration Guide
|
|
425
|
-
1. Always use Pretendard Variable for product UI, Wanted Sans for marketing
|
|
426
|
-
2. The interactive color is `#0066FF` — never a different blue, even if a Material/Tailwind blue looks close
|
|
427
|
-
3. JobCard 12px radius is non-negotiable — that radius is the brand
|
|
428
|
-
4. Borders should be `rgba(112, 115, 124, 0.16)` translucent — not a solid `#E5E8EB`
|
|
429
|
-
5. Use grid gutter (20–24px) for card separation, not shadow
|
|
430
|
-
6. Filter chips are pill-or-10px-radius — never square
|
|
431
|
-
7. Secondary text is translucent (`rgba(55,56,60,0.61)`), not a fixed grey hex
|
|
432
|
-
|
|
433
|
-
---
|
|
264
|
+
> Build a calm Korean career-discovery surface with a white canvas, `#171719` headings, `#333333` body text, `#0066ff` actions, Pretendard Variable, flat job cards, 12px media, and compact 8px filter controls. Include only observed search-dialog state; omit speculative status colors and native patterns.
|
|
434
265
|
|
|
435
266
|
## 10. Voice & Tone
|
|
436
267
|
|
|
437
|
-
Wanted
|
|
438
|
-
|
|
439
|
-
| Context | Tone |
|
|
440
|
-
|---|---|
|
|
441
|
-
| CTAs | Imperative, short Korean verb form (`지원하기`, `회원가입`, `로그인`, `이력서 만들기`) |
|
|
442
|
-
| Job posting headers | Long-form descriptive, not pitch-y — `OO에서 함께 일할 백엔드 엔지니어를 찾습니다` |
|
|
443
|
-
| Salary range | Exact range or "회사 내규에 따름" — never "competitive" / "negotiable" alone |
|
|
444
|
-
| Referral reward (합격보상금) | Concrete amount in 만원 (`100만원`, `200만원`) — never approximate |
|
|
445
|
-
| Empty states | One sentence stating the *why*, one action — `조건에 맞는 채용공고가 없어요` + reset button |
|
|
446
|
-
| Error messages | Blameless, specific, actionable — `잠시 후 다시 시도해주세요` is acceptable; never `오류가 발생했습니다` alone |
|
|
447
|
-
| Onboarding | Second-person, growth-framed — `당신의 다음 커리어를 찾아드릴게요`, not `회원가입을 진행해주세요` |
|
|
448
|
-
| Marketing voice | Confident, possibility-oriented — "일하는 사람들의 모든 가능성" is the master tagline |
|
|
449
|
-
|
|
450
|
-
**Forbidden phrases.** `대박 채용`, `핫한 회사`, `놓치지 마세요` (urgency-as-marketing — Wanted positions itself above shallow recruitment ads), `Oops`, generic `문제가 발생했습니다`, any sentence that hedges salary (`약 X만원`, `최대 X까지`). The brand promise is precision and respect for the candidate's time.
|
|
268
|
+
Wanted's official system language is practical, encouraging, and centered on helping working people become more themselves. Product copy should make the next career action legible without overpromising a match or outcome. Search, filter, and job-detail language should prioritize concrete role, company, location, and process information. Employer-facing or system documentation may be more technical, but should preserve the same directness and respect for the reader's decision. Use direct labels, specific role/company information, and respectful guidance rather than motivational clichés.
|
|
451
269
|
|
|
452
270
|
## 11. Brand Narrative
|
|
453
271
|
|
|
454
|
-
Wanted
|
|
455
|
-
|
|
456
|
-
The product launched as a job-posting platform but evolved into what Wanted Lab now calls an "AI-powered career platform" — **3.6M+ registered professionals**, **35K+ companies**, AI matching trained on 10M+ historical matches, and adjacent products (Wanted Plus for premium career coaching, Wanted Gigs for freelance, Wanted ATS for company recruitment ops). The platform's signature mechanic — surfacing salary ranges on every posting — became a cultural force in Korean tech: by the late 2010s "원티드에 올라온 연봉" was treated as a market-rate reference across the industry.
|
|
457
|
-
|
|
458
|
-
The design system, **Montage** (몽타주), was first released as an open-source design library on **April 1, 2024** (initially as an April Fool's gesture that took on a life of its own) and expanded into a full multi-platform system (`montage-web`, `montage-ios`, `montage-android`) on April 3, 2025. The team built it because internal product complexity — with 70+ components and 20–30 variants each — was outpacing their ability to maintain consistency. The system's central principle, the **"Makers' Principle"** (메이커 원칙), codifies how components should be used: background colors intuitively indicate availability, customization scope is clearly bounded, and the system is "more communicative than restrictive."
|
|
459
|
-
|
|
460
|
-
Wanted's visual rejection is of two opposing job-platform aesthetics: the grey-and-bureaucratic legacy boards (Saramin, JobKorea) with their dense list layouts and institutional typography, and the playful-but-shallow consumer apps (some startup-y competitors with cartoon mascots and gamification). Wanted occupies the middle: confident enough to feel professional, warm enough to feel like a career partner.
|
|
461
|
-
|
|
462
|
-
What Wanted refuses: urgency marketing, salary obfuscation, recruiter spam tone. The brand promise is **respect for the working person's time** — and the design system enforces it by making every job posting structurally identical, every salary range visible, every CTA singular.
|
|
272
|
+
Wanted's service story connects career possibility with a concrete browsing and matching workflow. Montage extends that promise internally: separate foundations and components combine into one coherent product experience, emphasizing extensibility, consistency, and efficiency. The current product therefore feels systematic without looking like a component showcase—blue actions and job information carry the experience while decoration stays secondary. The relationship matters because career decisions require both emotional confidence and reliable comparison. Wanted's public product supplies the browsable opportunities, while Montage documents how repeatable interaction patterns keep that information coherent as teams add new features. Typography stays neutral and highly legible so role and company evidence can lead. Brand color marks actions and ownership without turning every listing into campaign content.
|
|
463
273
|
|
|
464
274
|
## 12. Principles
|
|
465
275
|
|
|
466
|
-
1. **
|
|
467
|
-
2. **
|
|
468
|
-
3. **
|
|
469
|
-
4. **
|
|
470
|
-
5. **Korean-first, English-parity.** Wanted serves a Korean-primary audience with global ambitions. UI strings are written in Korean first; English translations preserve sentence structure, not literal word order.
|
|
471
|
-
6. **Density follows context.** Job feed is dense (4×N grid). Job detail is spacious (single column, large vertical rhythm). The deeper the user goes, the more breathing room they get.
|
|
472
|
-
7. **Gentle but clear.** From the brandcenter: never sacrifice clarity for friendliness, never sacrifice warmth for precision. Both/and, not either/or.
|
|
276
|
+
1. **Help people work more like themselves.** Career choices should remain understandable and user-directed.
|
|
277
|
+
2. **Compose consistency from reusable parts.** Follow Montage's published extensibility, consistency, and efficiency framing.
|
|
278
|
+
3. **Information leads decoration.** Job role, company, and metadata establish hierarchy before campaign color.
|
|
279
|
+
4. **Font truth follows visible use.** A declared asset is not automatically the current UI face.
|
|
473
280
|
|
|
474
281
|
## 13. Personas
|
|
475
282
|
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
283
|
+
Public surfaces establish task contexts, not verified biographical personas:
|
|
284
|
+
- A job seeker comparing role, company, location, and reward information.
|
|
285
|
+
- A working professional using search to narrow a new career direction.
|
|
286
|
+
- An employer or product maker consulting Wanted's company service or Montage guidance.
|
|
479
287
|
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
**박PM (Park, PM), 38, Gangnam.** Product manager at a mid-size SaaS company, hiring side. Uses Wanted ATS to post 2–3 roles per quarter. Pays the success fee (referral bonus) without negotiation because Wanted candidates tend to be pre-filtered for fit. Posts roles with explicit salary bands because he's seen what happens when companies hide them ("우리 회사도 그러면 안 보이게 돼요"). Values Wanted's company-introduction format over short job descriptions.
|
|
483
|
-
|
|
484
|
-
**유진 (Yujin), 24, Busan.** Recent CS grad, first full-time search. Found Wanted through her university career center's blog post. Treats every salary range as ground truth and uses Wanted's 인기순 sort to learn which companies are popular at her experience level. Has applied to 30 roles, gotten 4 interviews. The referral-bonus mechanic confused her at first ("내가 받는 거예요?") but now uses it as a signal — `100만원` bonus = company is serious about filling the role.
|
|
288
|
+
Project-specific names, ages, goals, company sizes, and conversion assumptions are intentionally unspecified and must come from the product brief.
|
|
485
289
|
|
|
486
290
|
## 14. States
|
|
487
291
|
|
|
488
|
-
|
|
489
|
-
|---|---|
|
|
490
|
-
| **Empty (filter zero results)** | Single line of `#333333` body text (`조건에 맞는 채용공고가 없어요`) + secondary line of `rgba(55,56,60,0.61)` caption suggesting filter relaxation + `#0066FF` text button to reset filters. No illustration. |
|
|
491
|
-
| **Empty (no bookmarks yet)** | Single paragraph explaining the *why* (`관심있는 채용공고를 북마크 해보세요`) + CTA to browse feed. Uses the `#F7F7F8` surface for the empty-state card to differentiate from the white feed. |
|
|
492
|
-
| **Loading (first paint)** | Skeleton blocks at `#F7F7F8` matching final JobCard dimensions — 4:3 thumbnail rectangle + 3 horizontal line placeholders for title/company/salary. 12px radius preserved. |
|
|
493
|
-
| **Loading (refresh / pagination)** | Inline spinner at bottom of feed in `#0066FF`. No overlay, no blocking. Existing cards stay rendered. |
|
|
494
|
-
| **Error (form field)** | `#F0483C` 1px border on input + 13px `#F0483C` helper text below. One actionable sentence. |
|
|
495
|
-
| **Error (network failure)** | Centered message with `#171719` heading + `#333333` body, retry button in `#0066FF`. No illustration on inline errors; only on full-page outages. |
|
|
496
|
-
| **Error (full-page server outage)** | White screen, centered Wanted logo at top, single-line message in 16px `#171719` weight 600, retry button in `#0066FF` filled style. |
|
|
497
|
-
| **Success (applied)** | Brief inline flash — bookmark turns `#0066FF`, "지원완료" badge appears in `#00B97C` for 2s, then settles to a persistent "지원함" status pill. No toast — application is a state change, not an event. |
|
|
498
|
-
| **Success (saved / bookmarked)** | Bookmark icon fills `#0066FF`, brief 200ms scale animation (1.0 → 1.15 → 1.0) with `ease-spring` easing. No toast. |
|
|
499
|
-
| **Skeleton** | `#F7F7F8` blocks at exact final dimensions. 1.5s shimmer with 6% white highlight gradient. JobCard skeletons preserve 12px radius and 4:3 thumbnail aspect. |
|
|
500
|
-
| **Disabled** | Button opacity drops to 0.4. Disabled inputs keep their `rgba(112,115,124,0.16)` border (geometry stable). Disabled chips show `#A0A0A0` text on transparent background. |
|
|
501
|
-
| **Hover (chip / button)** | Background transitions to `#F7F7F8` over 150ms with `ease-standard`. Text color unchanged. |
|
|
502
|
-
| **Focus (keyboard)** | 2px outline ring in `#0066FF` with 2px offset. Replaces hover background — focused element doesn't double up bg-change + ring. |
|
|
292
|
+
The current full-screen search dialog and Montage menu open states were captured. Default product buttons and filters were captured without a safe hover/focus expansion. Error, success, loading, empty, disabled, and application-completion states remain absent.
|
|
503
293
|
|
|
504
294
|
## 15. Motion & Easing
|
|
505
295
|
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
| `motion-page` | 350ms | Full-page route transitions |
|
|
515
|
-
|
|
516
|
-
**Easings:**
|
|
517
|
-
|
|
518
|
-
| Token | Curve | Use |
|
|
519
|
-
|---|---|---|
|
|
520
|
-
| `ease-enter` | `cubic-bezier(0.0, 0.0, 0.2, 1)` | Elements appearing — dropdowns, modals, toasts, sheets |
|
|
521
|
-
| `ease-exit` | `cubic-bezier(0.4, 0.0, 1, 1)` | Elements leaving — dismissals, pops, modal close |
|
|
522
|
-
| `ease-standard` | `cubic-bezier(0.4, 0.0, 0.2, 1)` | Two-way transitions — chips, accordions, tab switches |
|
|
523
|
-
| `ease-spring` | `cubic-bezier(0.34, 1.56, 0.64, 1)` | Reserved for bookmark fill animation and apply-success badge. Overshoot only on celebration moments. |
|
|
524
|
-
|
|
525
|
-
**Signature motions.**
|
|
526
|
-
|
|
527
|
-
1. **Bookmark fill.** When a user bookmarks a job, the icon scales 1.0 → 1.15 → 1.0 over `motion-standard` with `ease-spring` while the color transitions from `#333333` to `#0066FF`. This is the one place where overshoot is licensed — bookmarking is a small celebration.
|
|
528
|
-
2. **Filter chip selection.** Active state transitions: background `transparent` → `#F7F7F8` over `motion-fast` with `ease-standard`. Text color stays constant. The change feels deliberate but not flashy.
|
|
529
|
-
3. **JobCard hover (desktop).** Subtle lift — `translateY(0)` → `translateY(-2px)` over `motion-fast` with `ease-standard`. No shadow change, just position. This keeps the flat aesthetic while signaling interactivity.
|
|
530
|
-
4. **Apply success.** "지원완료" badge fades in (`motion-standard` / `ease-enter`) with a brief scale pulse (`motion-fast` overlap, `ease-spring`). Persists for 2s, then settles to a quieter "지원함" status. Never a toast — application is a permanent state change.
|
|
531
|
-
5. **Reduce motion.** `prefers-reduced-motion: reduce` collapses all durations to `motion-instant`. Transitions become state swaps. The product stays fully functional; just less kinetic.
|
|
532
|
-
|
|
533
|
-
<!--
|
|
534
|
-
OmD v0.1 Sources — Philosophy Layer (§10-15)
|
|
535
|
-
|
|
536
|
-
Verified via WebFetch / WebSearch (2026-05-13):
|
|
537
|
-
- https://www.wanted.co.kr/brandcenter/ — primary brand color #0066FF (PANTONE 2195 C),
|
|
538
|
-
secondary palette (#14191E, #FF5C00, #FF8EFF, #00ADFF, #8364FF, #F0F4F8),
|
|
539
|
-
four brand voice values: "부드럽지만 명확하게" / confident growth messaging /
|
|
540
|
-
respectful framing / fact-based communication without embellishment.
|
|
541
|
-
- https://www.wantedlab.com/en/ — Wanted Lab founded 2015, 3.6M+ professionals,
|
|
542
|
-
35K+ companies, AI-Powered HR Tech positioning, "AI Agents trained on 10M+
|
|
543
|
-
matching data" claim, 70% time-to-hire reduction marketing claim.
|
|
544
|
-
- https://blog.wantedlab.com/library/insight/wds — WDS design system launch
|
|
545
|
-
April 1, 2024 (April Fool gesture that took off), expanded April 3, 2025,
|
|
546
|
-
70+ components, "Makers' Principle" referenced, principle of
|
|
547
|
-
"더 나은 협업 방식과 사용자 경험".
|
|
548
|
-
- https://montage.wanted.co.kr/ — Montage system name, "From Separate Core Blocks
|
|
549
|
-
To a Seamless Flow" tagline, Wanted Sans + Pretendard JP typography stack.
|
|
550
|
-
- https://github.com/wanteddev/wanted-sans — Wanted Sans: "A Sans-serif font;
|
|
551
|
-
Geometric with a heart, Humanist with a soul", 7 weights + variable,
|
|
552
|
-
SIL OFL 1.1, supports 97+ languages, Korean-first design.
|
|
553
|
-
- https://github.com/wanteddev/montage-web — @wanteddev/wds package family
|
|
554
|
-
(wds, wds-engine, wds-theme, wds-icon, wds-lottie, wds-nextjs, wds-codemod,
|
|
555
|
-
wds-mcp, eslint-plugin-wds), MIT licensed, 295 releases.
|
|
556
|
-
|
|
557
|
-
Live DOM token observations (playwright getComputedStyle on
|
|
558
|
-
https://www.wanted.co.kr/wdlist/518):
|
|
559
|
-
- Primary CTA color: rgb(0, 102, 255) = #0066FF (confirmed brand alignment)
|
|
560
|
-
- Heading text: rgb(23, 23, 25) = #171719
|
|
561
|
-
- Body text: rgb(51, 51, 51) = #333333
|
|
562
|
-
- Secondary text: rgba(55, 56, 60, 0.61)
|
|
563
|
-
- Border: rgba(112, 115, 124, 0.16)
|
|
564
|
-
- Surface subtle: rgb(247, 247, 248) = #F7F7F8
|
|
565
|
-
- Font stack: "Pretendard Variable", "Pretendard JP Variable", system-ui
|
|
566
|
-
- JobCard radius: 12px; SortFilter container: 10px; segments: 8px
|
|
567
|
-
|
|
568
|
-
Personas (§13) are fictional archetypes informed by Wanted Lab's published
|
|
569
|
-
positioning data (user/company counts, AI matching claim, product surface
|
|
570
|
-
list). Any resemblance to specific individuals is unintended.
|
|
571
|
-
|
|
572
|
-
Interpretive claims (e.g., "the cooler blue positions as growth-blue rather
|
|
573
|
-
than transaction-blue") are editorial readings of the design vs Toss's
|
|
574
|
-
#3182f6, not documented Wanted statements.
|
|
575
|
-
-->
|
|
296
|
+
No reusable duration or easing token was established. Dialog/menu expansion proves state change only; it does not authorize a universal motion curve.
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
**Verified:** 2026-07-12 (omd:migrate)
|
|
301
|
+
**Tier 1 sources:** https://www.wanted.co.kr/ ; https://www.wanted.co.kr/wdlist/518 ; https://www.wanted.co.kr/company ; https://montage.wanted.co.kr/ ; https://montage.wanted.co.kr/docs/foundations ; https://montage.wanted.co.kr/docs/utilities/web-utilities/typography-style ; https://montage.wanted.co.kr/docs/components/actions/text-button/design
|
|
302
|
+
**Tier 2 attempts:** getdesign.md/wanted and styles.refero.design search; unavailable as positive evidence
|
|
303
|
+
**Conflicts unresolved:** none
|