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.
Files changed (275) hide show
  1. package/.claude/hooks/lib/preferences-parser.cjs +1 -0
  2. package/.claude/hooks/lib/preferences-writer.cjs +1 -0
  3. package/.claude/hooks/post-edit-watch.cjs +1 -0
  4. package/.claude/hooks/session-end-foldin.cjs +1 -0
  5. package/.claude/hooks/session-state-loader.cjs +1 -0
  6. package/.claude/hooks/skill-activation.cjs +1 -0
  7. package/.claude/settings.json +10 -1
  8. package/.github/assets/logo-bg.png +0 -0
  9. package/AGENTS.md +20 -1
  10. package/CHANGELOG.md +482 -0
  11. package/MIGRATION.md +103 -0
  12. package/README.ja.md +56 -19
  13. package/README.ko.md +47 -30
  14. package/README.md +48 -30
  15. package/README.zh-TW.md +59 -22
  16. package/agents/AGENT.md +8 -7
  17. package/agents/omd-codex-image.md +1 -1
  18. package/agents/omd-critic.md +6 -7
  19. package/agents/omd-designer-review.md +1 -1
  20. package/agents/omd-final-qa.md +1 -1
  21. package/agents/omd-humanizer.md +38 -0
  22. package/agents/omd-kr-writer.md +3 -4
  23. package/agents/omd-locale-adapter.md +12 -16
  24. package/agents/omd-master.md +24 -19
  25. package/agents/omd-microcopy.md +1 -1
  26. package/agents/omd-orchestrator.md +7 -8
  27. package/agents/omd-slop-auditor.md +31 -0
  28. package/agents/omd-ux-researcher.md +1 -1
  29. package/data/reference-fingerprints.json +2761 -85
  30. package/dist/bin/oh-my-design.js +16 -8
  31. package/dist/bin/oh-my-design.js.map +1 -1
  32. package/dist/chunk-UJIHCEYF.js +99 -0
  33. package/dist/chunk-UJIHCEYF.js.map +1 -0
  34. package/dist/doctor-LDWSFM3I.js +763 -0
  35. package/dist/doctor-LDWSFM3I.js.map +1 -0
  36. package/dist/install-skills-ZZFNJ2II.js +1120 -0
  37. package/dist/install-skills-ZZFNJ2II.js.map +1 -0
  38. package/docs/CLI_QUICKSTART.md +157 -0
  39. package/package.json +25 -4
  40. package/scripts/postinstall.cjs +5 -4
  41. package/skills/claude-design/SKILL.md +38 -14
  42. package/skills/claude-design/references/claude-design-flow.md +11 -11
  43. package/skills/claude-design/references/codebase-analysis.md +5 -4
  44. package/skills/omd-final-qa/SKILL.md +1 -1
  45. package/skills/omd-harness/SKILL.md +51 -50
  46. package/skills/omd-humanize/SKILL.md +116 -0
  47. package/skills/omd-humanize/agents/openai.yaml +4 -0
  48. package/skills/omd-humanize/references/locale-playbooks.md +102 -0
  49. package/skills/omd-humanize/references/sources.md +11 -0
  50. package/skills/omd-init/SKILL.md +18 -12
  51. package/skills/omd-locale-adapter/SKILL.md +58 -91
  52. package/skills/omd-orchestrator/SKILL.md +11 -5
  53. package/skills/omd-reference-capture/SKILL.md +80 -26
  54. package/skills/omd-reference-capture/scripts/PLAYWRIGHT-LICENSE.txt +202 -0
  55. package/skills/omd-reference-capture/scripts/PLAYWRIGHT-NOTICE.txt +5 -0
  56. package/skills/omd-reference-capture/scripts/THIRD_PARTY_NOTICES.md +3 -0
  57. package/skills/omd-reference-capture/scripts/capture-reference-evidence.mjs +159906 -0
  58. package/skills/omd-slop-audit/SKILL.md +110 -0
  59. package/skills/omd-slop-audit/agents/openai.yaml +4 -0
  60. package/skills/omd-slop-audit/references/pattern-catalog.md +96 -0
  61. package/skills/omd-slop-audit/references/sources.md +24 -0
  62. package/web/references/104/DESIGN.md +354 -0
  63. package/web/references/11st/DESIGN.md +197 -316
  64. package/web/references/29cm/DESIGN.md +297 -393
  65. package/web/references/42dot/DESIGN.md +390 -0
  66. package/web/references/8percent/DESIGN.md +438 -0
  67. package/web/references/ably/DESIGN.md +267 -572
  68. package/web/references/acer/DESIGN.md +329 -0
  69. package/web/references/airbnb/DESIGN.md +219 -557
  70. package/web/references/airbridge/DESIGN.md +451 -0
  71. package/web/references/alipay/DESIGN.md +179 -420
  72. package/web/references/apple/DESIGN.md +224 -498
  73. package/web/references/asleep/DESIGN.md +402 -0
  74. package/web/references/au/DESIGN.md +334 -0
  75. package/web/references/autopedia/DESIGN.md +382 -0
  76. package/web/references/aws-cloudscape/DESIGN.md +241 -0
  77. package/web/references/baemin/DESIGN.md +332 -491
  78. package/web/references/banksalad/DESIGN.md +269 -180
  79. package/web/references/barogo/DESIGN.md +416 -0
  80. package/web/references/beusable/DESIGN.md +464 -0
  81. package/web/references/bigin/DESIGN.md +454 -0
  82. package/web/references/bilibili/DESIGN.md +206 -374
  83. package/web/references/bmw/DESIGN.md +162 -276
  84. package/web/references/brandi/DESIGN.md +184 -325
  85. package/web/references/buzzvil/DESIGN.md +457 -0
  86. package/web/references/cafe24/DESIGN.md +472 -0
  87. package/web/references/catchtable/DESIGN.md +219 -264
  88. package/web/references/cgv/DESIGN.md +317 -0
  89. package/web/references/channeltalk/DESIGN.md +210 -336
  90. package/web/references/china-airlines/DESIGN.md +291 -0
  91. package/web/references/cjonstyle/DESIGN.md +453 -0
  92. package/web/references/class101/DESIGN.md +168 -387
  93. package/web/references/classum/DESIGN.md +228 -203
  94. package/web/references/claude/DESIGN.md +242 -479
  95. package/web/references/clay/DESIGN.md +179 -377
  96. package/web/references/clickhouse/DESIGN.md +254 -343
  97. package/web/references/codeit/DESIGN.md +470 -0
  98. package/web/references/cohere/DESIGN.md +214 -324
  99. package/web/references/coinone/DESIGN.md +199 -179
  100. package/web/references/corca/DESIGN.md +414 -0
  101. package/web/references/coupang/DESIGN.md +205 -475
  102. package/web/references/cursor/DESIGN.md +240 -381
  103. package/web/references/dabang/DESIGN.md +248 -213
  104. package/web/references/dable/DESIGN.md +431 -0
  105. package/web/references/datarize/DESIGN.md +338 -0
  106. package/web/references/dealicious/DESIGN.md +402 -0
  107. package/web/references/drdiary/DESIGN.md +404 -0
  108. package/web/references/elastic/DESIGN.md +238 -0
  109. package/web/references/elevenlabs/DESIGN.md +183 -321
  110. package/web/references/elice/DESIGN.md +445 -0
  111. package/web/references/eslite/DESIGN.md +257 -0
  112. package/web/references/evaair/DESIGN.md +338 -0
  113. package/web/references/expo/DESIGN.md +238 -331
  114. package/web/references/familymart-tw/DESIGN.md +254 -0
  115. package/web/references/ferrari/DESIGN.md +160 -377
  116. package/web/references/figma/DESIGN.md +197 -451
  117. package/web/references/fitpet/DESIGN.md +445 -0
  118. package/web/references/flex/DESIGN.md +170 -253
  119. package/web/references/framer/DESIGN.md +197 -340
  120. package/web/references/freee/DESIGN.md +211 -533
  121. package/web/references/friendliai/DESIGN.md +431 -0
  122. package/web/references/frip/DESIGN.md +440 -0
  123. package/web/references/furiosaai/DESIGN.md +450 -0
  124. package/web/references/gangnamunni/DESIGN.md +154 -591
  125. package/web/references/gaudiolab/DESIGN.md +414 -0
  126. package/web/references/google/DESIGN.md +290 -398
  127. package/web/references/goorm/DESIGN.md +470 -0
  128. package/web/references/greencar/DESIGN.md +420 -0
  129. package/web/references/hackle/DESIGN.md +472 -0
  130. package/web/references/hashicorp/DESIGN.md +273 -318
  131. package/web/references/heydealer/DESIGN.md +429 -0
  132. package/web/references/humanscape/DESIGN.md +433 -0
  133. package/web/references/hwahae/DESIGN.md +453 -0
  134. package/web/references/hyundai/DESIGN.md +158 -368
  135. package/web/references/hyundaicard/DESIGN.md +171 -121
  136. package/web/references/ibm/DESIGN.md +227 -378
  137. package/web/references/idus/DESIGN.md +450 -0
  138. package/web/references/igaworks/DESIGN.md +437 -0
  139. package/web/references/inflearn/DESIGN.md +221 -366
  140. package/web/references/intuit/DESIGN.md +244 -0
  141. package/web/references/jandi/DESIGN.md +191 -291
  142. package/web/references/jobplanet/DESIGN.md +415 -0
  143. package/web/references/kakao/DESIGN.md +287 -475
  144. package/web/references/kakaobank/DESIGN.md +220 -521
  145. package/web/references/kakaogames/DESIGN.md +220 -0
  146. package/web/references/kakaopay/DESIGN.md +207 -526
  147. package/web/references/karrot/DESIGN.md +227 -251
  148. package/web/references/kb-kookmin/DESIGN.md +308 -0
  149. package/web/references/kbank/DESIGN.md +220 -175
  150. package/web/references/kcd/DESIGN.md +432 -0
  151. package/web/references/kmong/DESIGN.md +281 -356
  152. package/web/references/krds/DESIGN.md +245 -19
  153. package/web/references/kream/DESIGN.md +224 -359
  154. package/web/references/kurly/DESIGN.md +211 -533
  155. package/web/references/kyobobook/DESIGN.md +445 -0
  156. package/web/references/lablup/DESIGN.md +474 -0
  157. package/web/references/lamborghini/DESIGN.md +198 -360
  158. package/web/references/lemonbase/DESIGN.md +452 -0
  159. package/web/references/lguplus/DESIGN.md +259 -0
  160. package/web/references/likelion/DESIGN.md +283 -0
  161. package/web/references/line/DESIGN.md +396 -355
  162. package/web/references/linear.app/DESIGN.md +209 -562
  163. package/web/references/lotteon/DESIGN.md +386 -0
  164. package/web/references/lovable/DESIGN.md +255 -349
  165. package/web/references/makinarocks/DESIGN.md +242 -0
  166. package/web/references/maum-ai/DESIGN.md +423 -0
  167. package/web/references/medibloc/DESIGN.md +425 -0
  168. package/web/references/megabox/DESIGN.md +232 -0
  169. package/web/references/mercari/DESIGN.md +217 -434
  170. package/web/references/microsoft/DESIGN.md +234 -388
  171. package/web/references/mildang/DESIGN.md +411 -0
  172. package/web/references/millie/DESIGN.md +183 -504
  173. package/web/references/minimax/DESIGN.md +264 -322
  174. package/web/references/miricanvas/DESIGN.md +182 -355
  175. package/web/references/miro/DESIGN.md +234 -232
  176. package/web/references/mistral.ai/DESIGN.md +231 -314
  177. package/web/references/mixi/DESIGN.md +234 -0
  178. package/web/references/moin/DESIGN.md +445 -0
  179. package/web/references/mongodb/DESIGN.md +219 -316
  180. package/web/references/moreh/DESIGN.md +437 -0
  181. package/web/references/musinsa/DESIGN.md +184 -510
  182. package/web/references/mynavi/DESIGN.md +242 -0
  183. package/web/references/myrealtrip/DESIGN.md +169 -406
  184. package/web/references/naver/DESIGN.md +328 -499
  185. package/web/references/naverwebtoon/DESIGN.md +172 -395
  186. package/web/references/neosapience/DESIGN.md +441 -0
  187. package/web/references/nhn/DESIGN.md +169 -346
  188. package/web/references/nhncloud/DESIGN.md +185 -123
  189. package/web/references/nota/DESIGN.md +451 -0
  190. package/web/references/notion/DESIGN.md +271 -475
  191. package/web/references/nrise/DESIGN.md +417 -0
  192. package/web/references/ohouse/DESIGN.md +210 -549
  193. package/web/references/oliveyoung/DESIGN.md +217 -326
  194. package/web/references/ollama/DESIGN.md +241 -308
  195. package/web/references/onestore/DESIGN.md +248 -0
  196. package/web/references/palantir/DESIGN.md +256 -0
  197. package/web/references/panasonic/DESIGN.md +276 -0
  198. package/web/references/patternfly/DESIGN.md +259 -0
  199. package/web/references/payhere/DESIGN.md +438 -0
  200. package/web/references/pega/DESIGN.md +262 -0
  201. package/web/references/peoplefund/DESIGN.md +431 -0
  202. package/web/references/petfriends/DESIGN.md +428 -0
  203. package/web/references/pinkfong/DESIGN.md +199 -367
  204. package/web/references/pinterest/DESIGN.md +258 -308
  205. package/web/references/portone/DESIGN.md +446 -0
  206. package/web/references/poya/DESIGN.md +286 -0
  207. package/web/references/pozalabs/DESIGN.md +438 -0
  208. package/web/references/protopie/DESIGN.md +419 -0
  209. package/web/references/qraft/DESIGN.md +448 -0
  210. package/web/references/queenit/DESIGN.md +432 -0
  211. package/web/references/quotabook/DESIGN.md +449 -0
  212. package/web/references/rebellions/DESIGN.md +449 -0
  213. package/web/references/recruit/DESIGN.md +247 -0
  214. package/web/references/remember/DESIGN.md +202 -396
  215. package/web/references/resend/DESIGN.md +274 -348
  216. package/web/references/returnzero/DESIGN.md +460 -0
  217. package/web/references/sakura-internet/DESIGN.md +269 -0
  218. package/web/references/samsung/DESIGN.md +157 -359
  219. package/web/references/sandoll/DESIGN.md +445 -0
  220. package/web/references/sanity/DESIGN.md +241 -375
  221. package/web/references/saramin/DESIGN.md +465 -0
  222. package/web/references/scatterlab/DESIGN.md +412 -0
  223. package/web/references/selectstar/DESIGN.md +439 -0
  224. package/web/references/servicenow/DESIGN.md +289 -0
  225. package/web/references/shiftee/DESIGN.md +468 -0
  226. package/web/references/shinhanbank/DESIGN.md +161 -341
  227. package/web/references/shinhancard/DESIGN.md +208 -319
  228. package/web/references/sionic/DESIGN.md +454 -0
  229. package/web/references/sktelecom/DESIGN.md +310 -0
  230. package/web/references/socar/DESIGN.md +125 -32
  231. package/web/references/softbank/DESIGN.md +231 -0
  232. package/web/references/solapi/DESIGN.md +483 -0
  233. package/web/references/sony/DESIGN.md +234 -0
  234. package/web/references/soop/DESIGN.md +261 -0
  235. package/web/references/spacex/DESIGN.md +184 -323
  236. package/web/references/spotify/DESIGN.md +253 -394
  237. package/web/references/squeezebits/DESIGN.md +441 -0
  238. package/web/references/stayfolio/DESIGN.md +422 -0
  239. package/web/references/stripe/DESIGN.md +212 -491
  240. package/web/references/supabase/DESIGN.md +244 -316
  241. package/web/references/supertone/DESIGN.md +413 -0
  242. package/web/references/tabling/DESIGN.md +415 -0
  243. package/web/references/taishinbank/DESIGN.md +243 -0
  244. package/web/references/teamlab/DESIGN.md +240 -0
  245. package/web/references/teamsparta/DESIGN.md +472 -0
  246. package/web/references/tellingme/DESIGN.md +392 -0
  247. package/web/references/tesla/DESIGN.md +244 -427
  248. package/web/references/thsr/DESIGN.md +284 -0
  249. package/web/references/thumbtack/DESIGN.md +302 -0
  250. package/web/references/together.ai/DESIGN.md +257 -304
  251. package/web/references/toss/DESIGN.md +251 -593
  252. package/web/references/toss-securities/DESIGN.md +255 -178
  253. package/web/references/tossbank/DESIGN.md +195 -491
  254. package/web/references/toyota/DESIGN.md +238 -0
  255. package/web/references/tving/DESIGN.md +197 -245
  256. package/web/references/typed/DESIGN.md +413 -0
  257. package/web/references/uber/DESIGN.md +256 -333
  258. package/web/references/udn/DESIGN.md +250 -0
  259. package/web/references/upbit/DESIGN.md +145 -256
  260. package/web/references/upstage/DESIGN.md +211 -204
  261. package/web/references/uswds/DESIGN.md +287 -0
  262. package/web/references/vercel/DESIGN.md +236 -440
  263. package/web/references/vuno/DESIGN.md +413 -0
  264. package/web/references/wanted/DESIGN.md +215 -487
  265. package/web/references/weverse/DESIGN.md +437 -0
  266. package/web/references/wise/DESIGN.md +223 -231
  267. package/web/references/wisetracker/DESIGN.md +462 -0
  268. package/web/references/wooribank/DESIGN.md +245 -0
  269. package/web/references/yanolja/DESIGN.md +250 -419
  270. package/web/references/yeogiotte/DESIGN.md +235 -418
  271. package/web/references/zapier/DESIGN.md +256 -377
  272. package/web/references/zendesk/DESIGN.md +288 -0
  273. package/web/references/zigzag/DESIGN.md +200 -621
  274. package/dist/install-skills-7UUDOLG2.js +0 -734
  275. package/dist/install-skills-7UUDOLG2.js.map +0 -1
@@ -8,334 +8,289 @@ primary_color: "#ff3d00"
8
8
  logo:
9
9
  type: favicon
10
10
  slug: "https://www.google.com/s2/favicons?domain=catchtable.co.kr&sz=256"
11
- verified: "2026-05-15"
11
+ verified: "2026-07-13"
12
12
  omd: "0.1"
13
+ verification_v2:
14
+ schema: 2
15
+ checked: "2026-07-13"
16
+ surfaces:
17
+ - { id: consumer-home, kind: consumer-product, url: "https://www.catchtable.net/", inspected: "2026-07-13" }
18
+ - { id: merchant-marketing, kind: b2b-marketing, url: "https://biz.catchtable.co.kr/n/main", inspected: "2026-07-13" }
19
+ - { id: careers-marketing, kind: careers-marketing, url: "https://career.catchtable.co.kr/ko/service", inspected: "2026-07-13" }
20
+ sources:
21
+ - { id: consumer-capture, kind: product-surface, url: "https://www.catchtable.net/", captured: "2026-07-13" }
22
+ - { id: merchant-capture, kind: product-surface, url: "https://biz.catchtable.co.kr/n/main", captured: "2026-07-13" }
23
+ - { id: careers-capture, kind: product-surface, url: "https://career.catchtable.co.kr/ko/service", captured: "2026-07-13" }
24
+ - { id: service-context, kind: official-doc, url: "https://career.catchtable.co.kr/ko/service", captured: "2026-07-13" }
25
+ - { id: font-design, kind: official-doc, url: "https://github.com/orioncactus/pretendard/blob/main/packages/pretendard/docs/en/README.md", captured: "2026-07-13" }
26
+ - { id: font-license, kind: license, url: "https://github.com/orioncactus/pretendard/blob/main/LICENSE", captured: "2026-07-13" }
27
+ conflicts: []
28
+ claims:
29
+ "tokens.colors.canvas": &consumer { surface_id: consumer-home, source_id: consumer-capture, method: computed-style, captured: "2026-07-13" }
30
+ "tokens.colors.foreground": *consumer
31
+ "tokens.colors.title": *consumer
32
+ "tokens.colors.muted": *consumer
33
+ "tokens.colors.search-surface": *consumer
34
+ "tokens.colors.control-border": *consumer
35
+ "tokens.colors.brand-orange": &career { surface_id: careers-marketing, source_id: careers-capture, method: computed-style, captured: "2026-07-13" }
36
+ "tokens.colors.on-brand": *career
37
+ "tokens.typography.family.ui": *consumer
38
+ "tokens.typography.consumer-body.size": *consumer
39
+ "tokens.typography.consumer-body.weight": *consumer
40
+ "tokens.typography.consumer-body.lineHeight": *consumer
41
+ "tokens.typography.consumer-body.use": *consumer
42
+ "tokens.typography.consumer-title.size": *consumer
43
+ "tokens.typography.consumer-title.weight": *consumer
44
+ "tokens.typography.consumer-title.lineHeight": *consumer
45
+ "tokens.typography.consumer-title.use": *consumer
46
+ "tokens.typography.search-control.size": *consumer
47
+ "tokens.typography.search-control.weight": *consumer
48
+ "tokens.typography.search-control.lineHeight": *consumer
49
+ "tokens.typography.search-control.use": *consumer
50
+ "tokens.typography.career-display.size": *career
51
+ "tokens.typography.career-display.weight": *career
52
+ "tokens.typography.career-display.lineHeight": *career
53
+ "tokens.typography.career-display.use": *career
54
+ "tokens.spacing.xs": *consumer
55
+ "tokens.spacing.sm": *consumer
56
+ "tokens.spacing.md": *consumer
57
+ "tokens.spacing.lg": *consumer
58
+ "tokens.rounded.square": *consumer
59
+ "tokens.rounded.discovery-tile": *consumer
60
+ "tokens.rounded.control": *consumer
61
+ "tokens.rounded.search": *consumer
62
+ "tokens.rounded.career-action": *career
63
+ "tokens.components.consumer-search.type": *consumer
64
+ "tokens.components.consumer-search.bg": *consumer
65
+ "tokens.components.consumer-search.fg": *consumer
66
+ "tokens.components.consumer-search.radius": *consumer
67
+ "tokens.components.consumer-search.padding": *consumer
68
+ "tokens.components.consumer-search.font": *consumer
69
+ "tokens.components.consumer-search.states": *consumer
70
+ "tokens.components.consumer-search.use": *consumer
71
+ "tokens.components.consumer-filter-control.type": *consumer
72
+ "tokens.components.consumer-filter-control.bg": *consumer
73
+ "tokens.components.consumer-filter-control.fg": *consumer
74
+ "tokens.components.consumer-filter-control.border": *consumer
75
+ "tokens.components.consumer-filter-control.radius": *consumer
76
+ "tokens.components.consumer-filter-control.height": *consumer
77
+ "tokens.components.consumer-filter-control.font": *consumer
78
+ "tokens.components.consumer-filter-control.states": *consumer
79
+ "tokens.components.consumer-filter-control.use": *consumer
80
+ "tokens.components.consumer-discovery-tile.type": *consumer
81
+ "tokens.components.consumer-discovery-tile.radius": *consumer
82
+ "tokens.components.consumer-discovery-tile.padding": *consumer
83
+ "tokens.components.consumer-discovery-tile.font": *consumer
84
+ "tokens.components.consumer-discovery-tile.states": *consumer
85
+ "tokens.components.consumer-discovery-tile.use": *consumer
86
+ "tokens.components.merchant-cta.type": &merchant { surface_id: merchant-marketing, source_id: merchant-capture, method: computed-style, captured: "2026-07-13" }
87
+ "tokens.components.merchant-cta.bg": *merchant
88
+ "tokens.components.merchant-cta.fg": *merchant
89
+ "tokens.components.merchant-cta.radius": *merchant
90
+ "tokens.components.merchant-cta.height": *merchant
91
+ "tokens.components.merchant-cta.font": *merchant
92
+ "tokens.components.merchant-cta.states": *merchant
93
+ "tokens.components.merchant-cta.use": *merchant
94
+ "tokens.components.careers-orange-action.type": *career
95
+ "tokens.components.careers-orange-action.bg": *career
96
+ "tokens.components.careers-orange-action.fg": *career
97
+ "tokens.components.careers-orange-action.radius": *career
98
+ "tokens.components.careers-orange-action.padding": *career
99
+ "tokens.components.careers-orange-action.font": *career
100
+ "tokens.components.careers-orange-action.states": *career
101
+ "tokens.components.careers-orange-action.use": *career
13
102
  tokens:
14
- source: prose-derived
15
- extracted: "2026-06-08"
16
- note: "Single-CTA discipline brand orange #FF3D00 is the only primary fill, deployed sparingly; depth from borders + hairline alpha, not shadows"
103
+ source: reconciled
104
+ extracted: "2026-07-13"
105
+ note: "Selector-backed values are limited to the supplied consumer, merchant-marketing, and careers-marketing captures. These domains are not a single inferred product UI."
17
106
  colors:
18
- primary: "#ff3d00"
19
- primary-hover: "#fa8d6b"
20
- brand: "#ff3d00"
21
107
  canvas: "#ffffff"
22
108
  foreground: "#000000"
23
109
  title: "#222222"
24
- body-strong: "#424242"
25
110
  muted: "#666666"
26
- tertiary: "#5f5f5f"
27
- placeholder: "#9e9e9e"
28
- disabled: "#b5b5b5"
29
- icon-default: "#8f8f8f"
30
- icon-subtle: "#aaaaaa"
31
- on-primary: "#ffffff"
32
- surface-subdued: "#f9f9f9"
33
- surface-muted: "#f5f5f5"
34
- surface-cool: "#f2f5f7"
35
- surface-cool-alt: "#f0f4fa"
36
- border-default: "#e4e4e4"
37
- border-cool: "#dce3e8"
38
- info: "#186ade"
39
- success: "#43c478"
40
- success-strong: "#077d55"
41
- error: "#d91f11"
42
- warning: "#f5c518"
43
- premium: "#8f49de"
111
+ search-surface: "#f5f5f5"
112
+ control-border: "#e4e4e4"
113
+ brand-orange: "#ff3d00"
114
+ on-brand: "#ffffff"
44
115
  typography:
45
- family: { sans: "Pretendard", mono: "" }
46
- section-title: { size: 20, weight: 700, lineHeight: 1.5, use: "음식종류별 BEST, 캐치 매거진, search hero label" }
47
- big-section: { size: 18, weight: 700, lineHeight: 1.5, use: "Larger card titles" }
48
- card-title: { size: 16, weight: 600, lineHeight: 1.5, use: "Restaurant card titles in list / detail" }
49
- body-default: { size: 14, weight: 400, lineHeight: 1.5, use: "Dominant nav labels, list items, body" }
50
- tab-label: { size: 14, weight: 400, lineHeight: 1.5, use: "Bottom-tab labels" }
51
- chip-label: { size: 14, weight: 500, lineHeight: 1.5, use: "Geo chips, filter chips" }
52
- search-input: { size: 13, weight: 500, lineHeight: 1.5, use: "Search placeholder #9e9e9e" }
53
- neighbourhood-chip: { size: 13, weight: 500, lineHeight: 1.5, use: "청담, 압구정·로데오 style" }
54
- caption: { size: 12, weight: 400, lineHeight: 1.5, use: "Timestamps, secondary meta" }
55
- footer-body: { size: 11, weight: 400, lineHeight: 1.5, use: "Regulatory disclosure text" }
56
- policy-link: { size: 11, weight: 500, lineHeight: 1.5, use: "Footer 서비스 이용약관 row" }
57
- micro-meta: { size: 10, weight: 500, lineHeight: 1.5, use: "Slide counter 2 / 25, compact tab" }
58
- spacing: { xs: 4, sm: 8, md: 12, base: 16, lg: 20, xl: 24, xxl: 32, section: 45 }
59
- rounded: { sm: 4, md: 8, lg: 12, full: 999 }
60
- shadow:
61
- xs: "rgba(0,0,0,.12) 0 1px 2px, rgba(0,0,0,.08) 0 0 1px, rgba(0,0,0,.08) 0 0 1px"
62
- sm: "rgba(0,0,0,.12) 0 2px 8px, rgba(0,0,0,.08) 0 1px 4px, rgba(0,0,0,.08) 0 0 1px"
63
- drop: "rgba(0,0,0,.12) 0 2px 12px"
64
- md: "rgba(0,0,0,.12) 0 6px 12px, rgba(0,0,0,.08) 0 4px 8px, rgba(0,0,0,.08) 0 0 4px"
65
- lg: "rgba(0,0,0,.12) 0 16px 20px, rgba(0,0,0,.08) 0 8px 16px, rgba(0,0,0,.08) 0 0 8px"
66
- components_harvested: true
116
+ family: { ui: "Pretendard Std Variable" }
117
+ consumer-body: { size: 16, weight: 400, lineHeight: 1.50, use: "Repeated consumer-home body and button sample" }
118
+ consumer-title: { size: 20, weight: 700, lineHeight: 1.50, use: "Consumer-home section-title sample" }
119
+ search-control: { size: 15, weight: 500, lineHeight: 1.50, use: "Consumer-home search input" }
120
+ career-display: { size: 38, weight: 700, lineHeight: 1.35, use: "Careers-service marketing heading" }
121
+ spacing: { xs: 4, sm: 8, md: 12, lg: 20 }
122
+ rounded: { square: 0, discovery-tile: 6, control: 8, search: 40, career-action: 15 }
67
123
  components:
68
- button-primary: { type: button, bg: "#ff3d00", fg: "#ffffff", radius: "12px", height: "44px", font: "14px / 500", hover: "press #fc9086", use: "Single primary CTA pill — single-CTA discipline, only variant" }
69
- search-input: { type: input, bg: "#f5f5f5", fg: "#000000", radius: "0px", font: "13px / 500", use: "Search field, placeholder #9e9e9e, inline search icon left" }
70
- chip-row: { type: badge, bg: "transparent", fg: "#5f5f5f", font: "14px / 500", use: "Geo/filter chips, no fill or border at rest separation by spacing" }
71
- best-of-pill: { type: card, bg: "#ffffff", radius: "4px", font: "14px / 400", use: "Image-led tile + ink label below, no card chrome (호텔 뷔페, 스시 오마카세)" }
72
- bottom-tab-bar: { type: tab, fg: "#424242", font: "14px / 400", active: "ink darkens to #000000", use: "5 tabs (홈/저장/내 주변/마이다이닝/MY), icon-over-label" }
73
- footer-disclosure: { type: card, bg: "#f9f9f9", fg: "#8f8f8f", font: "11px / 400", use: "Footer block, 11px/500 policy links separated by | pipe" }
124
+ consumer-search: { type: input, bg: "#f5f5f5", fg: "#000000", radius: "40px", padding: "0px 15px 0px 32px", font: "15px / 500 Pretendard Std Variable", states: "default only; no interaction state captured", use: "Consumer-home search input, selector home::[data-omd-capture=0]" }
125
+ consumer-filter-control: { type: button, bg: "#ffffff", fg: "#000000", border: "1px solid #e4e4e4", radius: "8px", height: "32px", font: "16px / 400 Pretendard Std Variable", states: "default only; no interaction state captured", use: "Consumer-home compact filter/control, selector home::[data-omd-capture=1]" }
126
+ consumer-discovery-tile: { type: button, radius: "6px", padding: "8px 12px", font: "16px / 400 Pretendard Std Variable", states: "default only; no interaction state captured", use: "Consumer-home image-led discovery tile, selector home::[data-omd-capture=17]" }
127
+ merchant-cta: { type: button, bg: "#002d4e", fg: "#ffffff", radius: "8px", height: "48px", font: "16px / 700 Pretendard", states: "default only; no interaction state captured", use: "Merchant-marketing CTA link, selector surface-2::[data-omd-capture=20]" }
128
+ careers-orange-action: { type: button, bg: "#ff3d00", fg: "#ffffff", radius: "15px", padding: "10.5px 24px", font: "16px / 400 Pretendard", states: "default only; no interaction state captured", use: "Careers-service marketing action, selector surface-3::[data-omd-capture=14]" }
129
+ components_harvested: true
74
130
  ---
75
131
 
76
132
  # Design System Inspiration of CatchTable (캐치테이블)
77
133
 
78
134
  ## 1. Visual Theme & Atmosphere
79
135
 
80
- CatchTable is Korea's premier restaurant-reservation platform a service that lets diners book hotel buffets, sushi omakase, and hanwoo tasting menus with the same calm as flipping through a magazine. The atmosphere on the home surface is **editorial restraint**: a white canvas (`#FFFFFF`), deep black ink (`#000000` for body, `#222222` for titles), zero ambient shadow, and a hard-square chrome that lets food photography do the speaking. Where a delivery app would flood the screen with red CTAs and stamp-shaped discount stickers, CatchTable shows you photographs and titles the brand orange `#FF3D00` appears exactly where you place your finger, and almost nowhere else.
81
-
82
- This isn't accidental minimalism — it's a vanilla-extract token system with **145 `:root` design tokens** discovered live (the namespace is `_11bicz7*`, a hashed identifier, so the system has no semantic names exposed publicly — only values). The token sheet defines a five-tier shadow ladder, a 33-color palette across brand / ink / surface / support-cool / semantic / overlay, a 10-step type scale that all share a **150% line-height contract**, and a radius family that defaults to `0px` on 92% of elements and softens only for rasterised thumbnails (`4px`), interactive controls (`8px`), and the primary CTA pill (`12px`). The discipline is the design.
83
-
84
- Typographically the system is Pretendard-only — no display font, no brand-display moment, no signage-typography flex. Pretendard 400 carries roughly 91% of all rendered text, with 700 reserved for section titles (`음식종류별 BEST`, `캐치 매거진`) and price emphasis. The home flow opens with a search field on `#F5F5F5` fill, a location chip row, a 25-slide Swiper hero, a "어디로 가시나요?" neighbourhood-discovery row, a horizontally scrolling "음식종류별 BEST" pillar, and an editorial "캐치 매거진" magazine module before reaching a five-tab bottom nav (홈 / 저장 / 내 주변 / 마이다이닝 / MY). The overall impression is **taste-maker, not utility** — the brand wants to feel closer to a Michelin guide than to OpenTable.
85
-
86
- **Key Characteristics:**
87
- - Single accent `#FF3D00` (CatchTable Orange) deployed sparingly — single-CTA discipline, not flooded brand color
88
- - Hard-square chrome (`0px` radius on 92% of elements) — sharpness amplifies food photography
89
- - Pretendard-only stack, no display font; 150% line-height applied uniformly to all ~35 typography slots
90
- - White-canvas + black-ink editorial restraint — depth lives in borders and surface tints, not shadows
91
- - Five-tier shadow ladder defined in tokens but rarely fired on the home surface
92
- - Mobile-first WebView shell with `status-bar-top` reservation — desktop is a porthole
93
- - 5-tab bottom nav as the global IA spine; 마이다이닝 is the reservation-history / loyalty hub
94
- - Editorial 캐치 매거진 module signals taste-maker positioning, not transactional booking
95
-
96
- ## 2. Color Palette & Roles
97
-
98
- ### Primary
136
+ CatchTable is a restaurant platform operated by WAD that connects the diner’s choice and reservation journey with merchant-side reservation, waiting, POS, pickup, and ordering operations. Its official careers narrative describes the consumer service as making a choice more certain and enjoyable, while its merchant site frames the other side as an integrated operating solution. The supplied public consumer home is visually quieter than those merchant and employer stories: a white field, black text, compact controls, image-led discovery tiles, and a single loaded `Pretendard Std Variable` family. The official careers surface supplies the current orange `#FF3D00` action treatment, but that marketing expression is kept distinct from the consumer home rather than generalized into a product-wide CTA system.
99
137
 
100
- - **CatchTable Orange** (`#FF3D00`): Brand primary. Used **exclusively** on the primary CTA pill (`12px` radius, `#FFF` text, 14px/500). In a 3000-element scan of the home surface, this color appears just 4 times in text/icon contexts and once as a background fill — scarcity is the discipline.
101
- - **Pure White** (`#FFFFFF`): Page canvas, card surfaces. Clean, photograph-amplifying.
102
- - **Title Black** (`#222222`): Section sub-titles, restaurant names, neighbourhood chip labels.
103
- - **Pure Black** (`#000000`): Body text default, link text, nav labels. Maximum contrast.
138
+ The reference therefore preserves three source domains as three facts: consumer-product discovery, merchant marketing, and careers marketing. It does not claim that a merchant lead form or careers campaign button is a restaurant-booking control.
104
139
 
105
- ### Brand support
140
+ ## 2. Layout & Grid
106
141
 
107
- - **Orange Soft** (`#FA8D6B`): Soft variant for pressed states and warm accents.
108
- - **Orange Pressed** (`#FC9086`): Active-press / hover-state surface.
109
- - **Orange Tint Warm** (`#FDF0EC`): Banner/notice surface fill.
110
- - **Orange Tint Pale** (`#FCF3F2`): Subtle alert surface fill.
142
+ - The captured consumer home is a 1440×900 public route with a 38px search input, compact 32px control, centered 13px discovery labels, a 20px/700 section-title sample, and repeated image-led discovery tiles.
143
+ - Consumer search padding is asymmetric—`0px 15px 0px 32px`—which leaves room for a leading search affordance without asserting an unmeasured icon spec.
144
+ - Consumer discovery tiles are observed at 6px radius with `8px 12px` padding. The capture does not establish a universal card grid, breakpoint, or responsive rule.
145
+ - Merchant and careers surfaces have their own marketing layouts. Their button values are documented only as route-local examples below.
111
146
 
112
- ### Ink ladder (text & icon)
147
+ ## 3. Color & Typography
113
148
 
114
- - **Body Default** (`#000000`): Default body text — used everywhere by default.
115
- - **Title** (`#222222`): Section sub-titles, list-item titles.
116
- - **Body Strong** (`#424242`): Tab-bar labels at rest.
117
- - **Body Muted** (`#666666`): Footer policy links, secondary descriptions.
118
- - **Tertiary** (`#5F5F5F`): Chip-button text (e.g. 현재 위치로).
119
- - **Placeholder** (`#9E9E9E`): Search-input placeholder.
120
- - **Disabled** (`#B5B5B5`): Disabled controls.
121
- - **Icon Default** (`#8F8F8F`): Footer regulatory text, icon default.
122
- - **Icon Subtle** (`#AAAAAA`): Decorative icons.
149
+ ### Color tokens
123
150
 
124
- ### Surface
151
+ - `#FFFFFF` — observed consumer canvas and compact-control background.
152
+ - `#000000` — observed consumer foreground.
153
+ - `#222222` — observed consumer section-title and careers-heading ink.
154
+ - `#666666` — consumer-home muted text sample.
155
+ - `#F5F5F5` — consumer search background.
156
+ - `#E4E4E4` — consumer compact-control border.
157
+ - `#FF3D00` — careers-marketing action background; this is verified public brand expression, not a universal consumer-product status or CTA token.
125
158
 
126
- - **Canvas** (`#FFFFFF`): Page background.
127
- - **Subdued** (`#F9F9F9`): Footer block fill.
128
- - **Muted** (`#F5F5F5`): Search-input fill, chip rest state.
129
- - **Cool** (`#F2F5F7`): Optional cool-tinted surface.
130
- - **Cool Alt** (`#F0F4FA`): Info-tint surface paired with `#186ADE`.
159
+ ### Typography evidence classes
131
160
 
132
- ### Borders
161
+ - **Live consumer computed use:** `Pretendard Std Variable` is loaded/high confidence with 122 observed uses on the consumer home and seven jsDelivr subset source URLs. It is the only UI family promoted in `tokens.typography.family.ui`.
162
+ - **Live marketing computed use:** `Pretendard` is loaded/high confidence with 117 observed uses across the merchant and careers surfaces and source URLs from Lazyrockets plus jsDelivr. It is recorded as source-domain evidence, not added as a second consumer UI-family token.
163
+ - **Surface-local live use:** `NanumSquareRound` is loaded with one observed merchant-surface text use and eighteen source URLs; its low frequency and separate B2B surface keep it out of consumer tokens.
164
+ - **Declared-only assets:** Aggro, Arita-dotum-Medium, Cafe24Oneprettynight, Chosunilbo_myungjo, D2Coding, DungGeunMo, Gmarket Sans, NanumSquare, Inter, KaTeX faces, and other zero-use declarations in the bundle remain declared-only. They are neither rendered as substitutes nor promoted as CatchTable UI roles.
165
+ - **Official font/license boundary:** Pretendard’s upstream project distributes the family under SIL Open Font License 1.1. That license explains the font asset, while computed usage plus FontFaceSet/source corroboration is what establishes the observed public use above.
133
166
 
134
- - **Hairline Alpha** (`#00000014`): Default hairline divider (8% black).
135
- - **Border Default** (`#E4E4E4`): Standard card and input border.
136
- - **Border Cool** (`#DCE3E8`): Cool-themed surface border.
167
+ ## 4. Components
137
168
 
138
- ### Support cool-ink (rare; used in editorial / magazine module)
169
+ ### Consumer search
139
170
 
140
- - **Cool Ink Deep** (`#1C2B36`), **Mid** (`#3E5463`), **Soft** (`#7A909E`), **Light** (`#9FB1BD`).
171
+ **Default**
172
+ - Background: `#F5F5F5`
173
+ - Text: `#000000`
174
+ - Radius: `40px`
175
+ - Padding: `0px 15px 0px 32px`
176
+ - Font: `15px / 500 Pretendard Std Variable`
177
+ - Use: Consumer-home search input; `home::[data-omd-capture="0"]`.
141
178
 
142
- ### Semantic
179
+ ### Consumer filter control
143
180
 
144
- - **Info** (`#186ADE`) / **Info Soft** (`#75B1FF`) / **Info Tint** (`#F0F4FA`)
145
- - **Success** (`#43C478`) / **Success Strong** (`#077D55`) / **Success Tint** (`#EBF7ED`)
146
- - **Danger** (`#D91F11`): Distinct from brand orange — semantic red is darker, redder. Don't confuse.
147
- - **Warning** (`#F5C518`)
148
- - **Premium Purple** (`#8F49DE`): Reserved for premium-tier badges (e.g. members-only restaurants).
181
+ **Default**
182
+ - Background: `#FFFFFF`
183
+ - Text: `#000000`
184
+ - Border: `1px solid #E4E4E4`
185
+ - Radius: `8px`
186
+ - Height: `32px`
187
+ - Font: `16px / 400 Pretendard Std Variable`
188
+ - Use: Consumer-home compact control; `home::[data-omd-capture="1"]`.
149
189
 
150
- ### Overlay
190
+ ### Consumer discovery tile
151
191
 
152
- - **Counter Dim** (`rgba(20,24,29,0.74)`): Swiper slide-counter pill.
153
- - **Scrim 70/60** (`rgba(0,0,0,0.7)`, `rgba(0,0,0,0.6)`): Modal/sheet backdrops.
192
+ **Default**
193
+ - Radius: `6px`
194
+ - Padding: `8px 12px`
195
+ - Font: `16px / 400 Pretendard Std Variable`
196
+ - Use: Image-led consumer-home discovery tile; `home::[data-omd-capture="17"]`.
154
197
 
155
- ## 3. Typography Rules
198
+ ### Merchant marketing CTA
156
199
 
157
- ### Font Family
200
+ **Default**
201
+ - Background: `#002D4E`
202
+ - Text: `#FFFFFF`
203
+ - Radius: `8px`
204
+ - Height: `48px`
205
+ - Font: `16px / 700 Pretendard`
206
+ - Use: Merchant-marketing CTA link; `surface-2::[data-omd-capture="20"]`.
158
207
 
159
- - **Primary**: `Pretendard, -apple-system, system-ui, Roboto, "Helvetica Neue", "Segoe UI", "Apple SD Gothic Neo", "Noto Sans KR", sans-serif`
160
- - **No brand display font.** No headline accent. Pretendard alone carries the entire system. This is a deliberate restraint — the photography is the brand.
208
+ ### Careers orange action
161
209
 
162
- ### Hierarchy
210
+ **Default**
211
+ - Background: `#FF3D00`
212
+ - Text: `#FFFFFF`
213
+ - Radius: `15px`
214
+ - Padding: `10.5px 24px`
215
+ - Font: `16px / 400 Pretendard`
216
+ - Use: Careers-service marketing action; `surface-3::[data-omd-capture="14"]`.
163
217
 
164
- | Role | Size | Weight | Line Height | Notes |
165
- |------|------|--------|-------------|-------|
166
- | Section Title | 20px | 700 | 150% | `음식종류별 BEST`, `캐치 매거진`, search hero label `어디로 가시나요?` |
167
- | Big Section | 18px | 700 | 150% | Larger card titles |
168
- | Card Title | 16px | 600 | 150% | Restaurant card titles in list / detail surfaces |
169
- | Body Default | 14px | 400 | 150% | **Dominant** — 900 of 1149 sampled elements; nav labels, list items, body |
170
- | Tab Label | 14px | 400 | 150% | Bottom-tab labels |
171
- | Chip Label | 14px | 500 | 150% | Geo chips, filter chips |
172
- | Search Input | 13px | 500 | 150% | Placeholder color `#9E9E9E` |
173
- | Neighbourhood Chip | 13px | 500 | 150% | `청담`, `압구정·로데오` style |
174
- | Caption | 12px | 400 | 150% | Timestamps, secondary meta |
175
- | Footer Body | 11px | 400 | 150% | Regulatory disclosure text |
176
- | Policy Link | 11px | 500 | 150% | Footer `서비스 이용약관` row |
177
- | Micro Meta | 10px | 500 | 150% | Slide counter `2 / 25`, bottom-tab compact mode |
218
+ The supplied bundle reports zero interaction records. No hover, pressed, focus, disabled, menu, dialog, validation, or responsive variants are claimed; the `surface-2` static pseudo-state samples are not promoted because the bundle has no corresponding interaction provenance.
178
219
 
179
- ### Principles
180
-
181
- - **150% line-height is a system-wide contract.** Every typography token across ~35 distinct slots ships `line-height: 150%`. Don't break this — vertical rhythm depends on it.
182
- - **400 dominates, 700 punctuates.** Weight distribution observed: 400 = 91%, 500 = 5%, 700 = 2%, 450 = 2%, 600 = <1%. The "weight rhythm" is binary — body or title, almost nothing in between.
183
- - **No tracking adjustments observed** — `letter-spacing: normal` is universal.
184
- - **Micro text below WCAG body floor**: 10–11px appears on slide counters and legal disclosures. For ports to Latin-script translations, elevate these to ≥12px.
185
-
186
- ## 4. Radius & Shape
187
-
188
- The geometry is **hard-square by default**:
220
+ ---
189
221
 
190
- | Use | Radius | Frequency |
191
- |---|---|---|
192
- | Default chrome (canvas, sections, list rows, dividers, search input) | `0px` | 1063 of 1149 sampled elements (92%) |
193
- | Photo thumbnail (rasterised, inside Swiper) | `4px` (also `4.05px` legacy) | 40 |
194
- | Interactive control (button, card pill, filter pill) | `8px` | 29 |
195
- | Avatar / circular icon | `50%` | 13 |
196
- | **Primary CTA pill** | `12px` | 3 |
197
- | Pill-full (rare, special-case) | `999px` | 1 |
222
+ **Verified:** 2026-07-13
223
+ **Tier 1 sources:** `https://www.catchtable.net/` (consumer product surface), `https://biz.catchtable.co.kr/n/main` (merchant marketing), `https://career.catchtable.co.kr/ko/service` (careers marketing and official service context), `https://github.com/orioncactus/pretendard/blob/main/packages/pretendard/docs/en/README.md` (upstream font distribution/design boundary), and `https://github.com/orioncactus/pretendard/blob/main/LICENSE` (upstream font licence boundary)
224
+ **Tier 2 sources:** `https://getdesign.md/catchtable` (attempted; built-in web open safe-open failure/no usable record), `https://styles.refero.design/?q=catchtable` (attempted; built-in web open safe-open failure/no usable record), web search for both names (no CatchTable record returned)
225
+ **Conflicts unresolved:** none
198
226
 
199
- The visual signature is the **absence** of softening on the chrome. Sharp corners frame food photography the way a magazine frames a photograph. When porting: do **not** apply a global `border-radius: 8px` reset you will lose the brand entirely.
227
+ Legacy claims about a 145-token semantic sheet, a universal 150% type contract, a five-tier shadow ladder, restaurant-booking CTA styling, bottom-navigation states, Swiper states, and a universal hard-square geometry were removed: the supplied 2026 capture does not substantiate them.
200
228
 
201
229
  ## 5. Elevation
202
230
 
203
- Five-tier shadow ladder defined in `:root`, but used sparingly on the home surface (only 2 distinct shadows fired across 3000+ elements observed). Depth is mostly carried by **borders + surface tints**.
204
-
205
- | Tier | Token | Recipe |
206
- |---|---|---|
207
- | xs | `--shadow-xs` | `0 1px 2px rgba(0,0,0,.12), 0 0 1px rgba(0,0,0,.08), 0 0 1px rgba(0,0,0,.08)` |
208
- | sm | `--shadow-sm` | `0 2px 8px rgba(0,0,0,.12), 0 1px 4px rgba(0,0,0,.08), 0 0 1px rgba(0,0,0,.08)` |
209
- | drop | `--shadow-drop` | `0 2px 12px rgba(0,0,0,.12)` |
210
- | md | `--shadow-md` | `0 6px 12px rgba(0,0,0,.12), 0 4px 8px rgba(0,0,0,.08), 0 0 4px rgba(0,0,0,.08)` |
211
- | lg / modal | `--shadow-lg` | `0 16px 20px rgba(0,0,0,.12), 0 8px 16px rgba(0,0,0,.08), 0 0 8px rgba(0,0,0,.08)` |
212
-
213
- Reserve elevation for: floating action buttons over photography, bottom sheets, sticky search bars on scroll, modal surfaces. Don't fire on cards-at-rest — borders or hairline alpha (`#00000014`) handle separation.
214
-
215
- ## 6. Spacing & Layout
231
+ The selector-backed consumer controls documented above have `box-shadow: none`. The merchant CTA has a route-local shadow, but no repeatable elevation scale is established across the three domains, so no shadow token is promoted.
216
232
 
217
- Observed spacing scale (px): **4 / 8 / 12 / 16 / 20 / 24 / 32 / 45 / 60**.
233
+ ## 6. Spacing & Shape
218
234
 
219
- - **Mobile-first**: WebView shell with `status-bar-top` and `status-bar-padding-top` classes the design target is the in-app surface, not desktop.
220
- - **Section paddings**: `pb-45` and `mb-16` legacy utility classes — 45px bottom-of-section, 16px between modules.
221
- - **Horizontal scrolling lists** dominate discovery — `음식종류별 BEST` is a swipe-row of best-of pills, not a vertical grid.
222
- - **Bottom tab bar** owns the lowest 56–60px of the viewport.
235
+ The repeated small values in the supplied bundle support a conservative `4 / 8 / 12 / 20px` observed spacing set. Radius is deliberately source-specific: the consumer home includes square chrome, 6px discovery tiles, an 8px compact control, and a 40px search field; the careers action is 15px. These observations are not a global radius prescription.
223
236
 
224
- ## 7. Iconography & Photography
237
+ ## 7. Iconography & Imagery
225
238
 
226
- - **Photography-first**. The home flow is dominated by 4:3 and landscape food photography. Tile thumbnails carry a subtle `4px` radius the only soft-corner surface in the system.
227
- - **Icons are line-style**, rendered as inline SVG; default stroke color `#8F8F8F` (icon-default), darkening to `#000` on active states.
228
- - **No illustration system observed** on the home surface. Magazine articles inside 캐치 매거진 carry editorial photography rather than custom illustration.
239
+ The consumer home is image-led: repeated discovery tiles use a simple control shell around imagery and text. The capture exposes ordinary controls but no named icon library, stroke treatment, image ratio, or reusable media-card contract. Those details remain unclaimed.
229
240
 
230
- ## 8. Component Patterns
231
-
232
- - **Primary CTA pill**: `#FF3D00` fill, `#FFF` text, 14px/500 Pretendard, `12px` radius, ~44px tall — only one variant observed. Single-color, single-shape, single-CTA discipline.
233
- - **Search input**: `#F5F5F5` fill, sharp `0px` corners, 13px/500 placeholder `#9E9E9E`, inline search icon left.
234
- - **Chip / pill row**: 13–14px/500 ink, no fill at rest, no border at rest — separation by spacing alone (chips at `청담`, `압구정·로데오`, etc.).
235
- - **Geo-toggle button** (현재 위치로): 14px/500, ink `#5F5F5F`, leading geo icon — text-style action button.
236
- - **Best-of horizontal pill** (호텔 뷔페, 스시 오마카세): Image-led tile + 14px/400 ink label below — no card chrome, just photo + name.
237
- - **Bottom tab bar**: 5 tabs (홈 / 저장 / 내 주변 / 마이다이닝 / MY), icon-over-label, 14px/400 ink default; active state inferred (not captured live this pass — flagged).
238
- - **Swiper hero**: 25-slide carousel with counter pill (`2 / 25 / 전체`) on `rgba(20,24,29,0.74)` overlay.
239
- - **Footer disclosure block**: `#F9F9F9` surface, 14px/400 corporate info, 11px/500 policy links separated by `|` pipe glyphs, 11px/400 regulatory disclaimer.
240
-
241
- ## 9. Accessibility & Locale
242
-
243
- - **WCAG contrast** — `#000` on `#FFF` body is 21:1 (max); `#222`/`#FFF` titles are 16.1:1; `#FF3D00`/`#FFF` CTA pill is **3.7:1** — **fails AA for normal text but passes AA for large text (18pt+/14pt bold equivalent)**. Since the CTA pill ships 14px/500 (below the bold threshold), this sits at the **borderline AA fail** for body. The system as shipped accepts the trade-off; ports must either bold the CTA label or darken the orange to `#E63600` (≈4.6:1) for strict AA.
244
- - **Micro text below body floor**: 10–11px slide counters and footer disclaimers are below WCAG body recommendations. Ports to Latin scripts (where stroke widths increase) should elevate to ≥12px.
245
- - **No landmark elements observed in initial capture** — `<main>` is present but no `<aside>` / explicit `role` annotations on the bottom tab bar. A11y debt; flag for ports.
246
- - **Locale convention**: Korean restaurant-reservation flows assume KR mobile carriers, KakaoTalk-style identity, and 24h reservation windows. The 마이다이닝 (My Dining) IA spine is loyalty-flavoured, not transaction-flavoured — ports should consider whether the destination market expects a "Reservations" history rather than a "Dining" hub.
247
-
248
- ## 10. Voice & Microcopy
249
-
250
- **Voice shape** (analyst characterisation — not verbatim CatchTable copy): **curatorial-warm, gerund-light, second-person-implied**. The on-surface copy treats the user as a diner choosing a story, not a customer completing a transaction.
251
-
252
- Don'ts:
253
- - Don't write "Book now." The brand's invitation is softer.
254
- - Don't write "X% off" stickers across photography. The system is photograph-respectful.
255
- - Don't write urgency timers. Magazine, not flash sale.
256
-
257
- Voice samples (fresh OmD-original characterisations, **not** lifted from CatchTable copy — three options to triangulate the shape):
258
-
259
- 1. *"오늘의 자리, 천천히 골라보세요."* — invitation framing, soft imperative.
260
- 2. *"이번 주말, 어디서 드실래요?"* — question framing, peer-to-peer warmth.
261
- 3. *"미식의 시작, 한 자리에서."* — slogan-shape, factual + warm.
262
-
263
- **IP guardrail**: The title-tag phrase "즐거운 미식 생활의 시작" is quoted **once** in §11 as a factual brand-narrative reference and is **not** adopted as headline copy in any sample above. The gerund-lite, curatorial register is documented as a *shape*, not reproduced.
264
-
265
- ## 11. Brand Narrative (factual provenance)
241
+ ### Do
266
242
 
267
- CatchTable is operated by **주식회사 와드** (WAD Inc.), founded by **용태순** (Yong Tae-soon, current 대표/CEO). Headquartered in **Bundang, Gyeonggi-do** (corporate disclosure observed on the home footer, 2026-05-15). The service positions itself as a premium-leaning restaurant-reservation platform with editorial inflection the 캐치 매거진 module on the home surface signals that the brand treats discovery as guidebook-style curation, not a transactional booking listing. Title-tag positioning observed on the home surface: "캐치테이블 | 즐거운 미식 생활의 시작" (factual evidence of curatorial-warm positioning, **not** adopted as design copy).
243
+ - Keep restaurant imagery and discovery content tied to the consumer surface where they were observed.
244
+ - Preserve the separation between diner discovery imagery and merchant lead-generation content.
268
245
 
269
- **FILL IN** (verification deferred — Crunchbase / DART access needed): founding year, total funding raised, employee headcount, investor list, monthly active users, reservation volume. These are reported in Korean trade press but were not verified at OmD attribution fidelity in this pass.
246
+ ### Don't
270
247
 
271
- ## 12. Personas (illustrative for portable design briefs only)
248
+ - Invent a named icon library, stroke specification, or image ratio that the evidence does not establish.
249
+ - Recast merchant marketing imagery as an observed consumer reservation component.
272
250
 
273
- > Personas are illustrative sketches derived from observable IA decisions (e.g. 마이다이닝 hub, 호텔 뷔페 / 스시 오마카세 / 한우 오마카세 best-of pillars). They are **not** based on internal CatchTable research and should be treated as analyst-inferred FILL-IN placeholders.
251
+ ## 8. Accessibility
274
252
 
275
- - **The Anniversary Planner** 30s couple in Seoul; books quarterly for birthdays / anniversaries; values curation over price; uses 저장 (Save) before deciding.
276
- - **The Omakase Regular** 40s professional; books monthly; uses 마이다이닝 as a memory aid (where did I go, what did I eat); cares about repeat-discount tiers.
277
- - **The Out-of-Town Visitor** late 20s traveller in town for 2 days; uses 주변 + 캐치 매거진 to discover; books 24–48h ahead; one-shot user (low return).
253
+ - The consumer search has black text on `#F5F5F5`; the compact control has black text on white with a `#E4E4E4` border.
254
+ - The careers orange action is `#FFFFFF` on `#FF3D00`; it is a marketing observation, not an accessibility approval for all consumer actions.
255
+ - No keyboard or focus-visible state was captured. Any implementation needs its own accessible focus treatment rather than inferring one from the recorded radii.
256
+ - Declared-only fonts must not be presented as loaded CatchTable faces.
278
257
 
279
- ## 13. Anti-Patterns
258
+ ## 9. Content & Voice
280
259
 
281
- Things CatchTable's design **avoids** and which a port must avoid to keep the inspiration:
260
+ Official careers copy frames the consumer experience around making a dining choice with more confidence and enjoyment, and the merchant experience around connecting reservation, waiting, POS, and store operations. Use that clarity—choice for diners, operational continuity for merchants—without copying slogans or turning a careers narrative into consumer-product microcopy.
282
261
 
283
- - ❌ Flooding the surface with brand orange. Orange is a single-CTA color, not a section-fill color.
284
- - ❌ Softening every corner. 92% of chrome is `0px` radius — sharpness is the brand.
285
- - ❌ Adding a display / brand-typography font. Pretendard alone is the entire system.
286
- - ❌ Firing shadows on cards at rest. Depth = borders + hairline alpha.
287
- - ❌ "Book now" urgency rhetoric or countdown timers. Voice is curatorial, not transactional.
288
- - ❌ Discount stickers stamped on food photography. Photography is sovereign.
289
- - ❌ Breaking the 150% line-height contract. Every text slot ships 150% — don't compress.
290
- - ❌ Treating desktop as the primary canvas. Design ships to mobile WebView; desktop is a porthole.
262
+ ## 10. Voice & Tone
291
263
 
292
- ## 14. Motion (partially captured flagged)
264
+ **Voice adjectives:** clear · food-centered · operationally concrete
293
265
 
294
- Motion tokens were **not** captured in this CDP pass — only entry-fade on Swiper transitions was visibly inferred. The home Swiper uses a default Swiper.js horizontal slide (cubic-ease, ~300ms). Detailed motion tokens (durations, easings, FAB rise, sheet present, tab-switch) require a follow-up UPDATE pass with interaction-triggered capture. **Flagged**.
266
+ | Do | Don't |
267
+ |---|---|
268
+ | Describe a diner choice or a concrete restaurant operation. | Invent urgency, discounts, or reservation states that were not captured. |
269
+ | Keep consumer and merchant messages audience-specific. | Treat a merchant lead-generation CTA as a diner-booking control. |
270
+ | Use calm, direct Korean service language. | Reproduce official slogans as generated product copy. |
295
271
 
296
- ## 15. Footer / Verification
272
+ ## 11. Brand Narrative
297
273
 
298
- - **DS surfaces probed and result**:
299
- - `design.catchtable.co.kr` → DNS no-resolve (000)
300
- - `tech.catchtable.co.kr` → DNS no-resolve (000)
301
- - `www.catchtable.co.kr/brand` → 302 redirect (no brand portal)
302
- - `github.com/catchtable` → 200 but only 3 public repos (`prerender-java`, `claude-hud`, `brand-review-tool`); **no design-system / Storybook / tokens repo**
303
- - `getdesign.md/catchtable` → "No designs found for 'catchtable'"
304
- - `styles.refero.design/?q=catchtable` → no result cards
305
- - **Result**: **Tier 1 official DS = authoritative NEGATIVE.** The system lives in production code as a vanilla-extract token sheet — captured here directly via CDP (145 `:root` vars on `app.catchtable.co.kr/`).
274
+ CatchTable’s official careers page describes a service present around meaningful meals and store opening/growth moments. It identifies the consumer side as CatchTable (B2C), where reservations and waiting support the dining journey, and the merchant side as CatchTable Business (B2B), combining reservation, waiting, and POS operations. The same page reports a current ambition to grow into a food-service super-platform. WAD’s official service terms identify the operating company as 주식회사 와드.
306
275
 
307
- - **Live capture method**: Chrome DevTools Protocol over `localhost:9222`, `websocket-client` with `suppress_origin=True`, `Runtime.evaluate` against `document.documentElement` for full `:root` custom-property enumeration plus a 3000-element `getComputedStyle` frequency analysis. Browser: Chrome/148.0.7778.97. Captured `2026-05-15T07:10Z`.
276
+ ## 12. Principles
308
277
 
309
- - **Surfaces inspected**: `https://app.catchtable.co.kr/` (35 element samples, 145 `:root` vars, 3000-element frequency table) + `https://app.catchtable.co.kr/ct/shop/list?categoryName=서울` (4 element samples degraded desktop shell, used to confirm primary CTA spec).
278
+ 1. **Keep the two-sided service legible.** Consumer discovery and merchant operations are related but not the same UI surface.
279
+ 2. **Promote only observed public styles.** A selector-backed product token does not authorize a plausible restaurant-detail or reservation-flow variant.
280
+ 3. **Let food discovery carry the consumer surface.** The captured consumer home uses image-led tiles and compact controls rather than a generalized sales dashboard.
281
+ 4. **Treat orange by source domain.** `#FF3D00` is verified on the careers marketing action; do not automatically use it as a universal consumer semantic color.
310
282
 
311
- - **Proof artefacts**:
312
- - `assets/_reference/.live-inspect-proof.json` — 10 raw_samples (≥5 floor), full frequency proof, 33-color token map, 5-tier shadow ladder.
313
- - `assets/_reference/.live-inspect-raw.json` — provenance manifest.
314
- - `assets/_reference/tokens.json` — normalised colour / typography / radius / elevation / spacing.
315
- - `assets/_reference/fonts.json` — Pretendard stack + weight-role map.
316
- - `assets/_reference/structure.json` — IA + heading outline + tone-observed.
317
- - `_research.md` — 5-tier source map + IP guardrails + flags.
283
+ ## 13. Personas
318
284
 
319
- - **IP guardrails**: Brand assets (logo, name, primary `#FF3D00`) referenced for inspiration only. Title-tag positioning phrase quoted **once** as §11 narrative evidence; **not** reproduced as design copy. §10 voice samples are fresh OmD analyst paraphrases. Token values reproduced as factual CSS-custom-property values under analytical fair-use.
285
+ The official service description names two stakeholder groups; this reference keeps them as groups rather than inventing demographic personas:
320
286
 
321
- - **Confidence**: **High** for tokens, type, radius, elevation, colour, IA spine, footer disclosure. **Medium** for personas (analyst-inferred from IA, not from internal research). **Low / Flagged** for motion (not captured), restaurant-detail page, list page, sell/reservation flow, MY tab — all require an UPDATE pass via mobile-emulated CDP.
287
+ - **Diners:** use the consumer service to discover restaurants, make reservations, and use waiting-related experiences.
288
+ - **Restaurant operators:** use merchant-side reservation, waiting, POS, pickup, order, and management functions.
322
289
 
323
- - **Verification date**: 2026-05-15.
290
+ ## 14. States
324
291
 
325
- ## 16. Do's and Don'ts
292
+ Only default static component samples are documented. The raw bundle contains zero interaction records, so loading, error, success, focus, hover, pressed, disabled, menu-open, dialog-open, and responsive states are intentionally omitted.
326
293
 
327
- ### Do
328
- - Reserve CatchTable Orange (#FF3D00) for the single primary CTA pill only, where it appears in just 4 text/icon contexts across a 3000-element scan
329
- - Keep chrome hard-square at 0px radius (92% of elements), softening only to 4px for photo thumbnails, 8px for interactive controls, and 12px for the primary CTA pill
330
- - Set Pretendard as the sole typeface across the entire system with no display or headline font, letting food photography be the brand moment
331
- - Apply line-height: 150% to every typography slot, from the 20px/700 Section Title down to the 10px/500 Micro Meta, as a system-wide contract
332
- - Carry separation with borders and hairline alpha (#00000014) on cards at rest, reserving the five-tier shadow ladder for FABs, bottom sheets, sticky search bars, and modals
333
- - Keep body weight at Pretendard 400 (91% of text) and punctuate only with 700 for section titles and price emphasis
294
+ ## 15. Motion
334
295
 
335
- ### Don't
336
- - Flood sections or large backgrounds with brand orange #FF3D00 — it is a single-CTA color, not a section-fill color
337
- - Apply a global border-radius reset like 8px to the chrome — it erases the hard-square 0px signature that frames the photography
338
- - Add a display or brand-typography font alongside Pretendard, which alone carries 91% of all rendered text
339
- - Fire shadows on cards at rest — depth is meant to come from borders and hairline alpha, not the shadow ladder
340
- - Stamp discount stickers, X% off badges, or countdown timers over food photography, which the system treats as sovereign
341
- - Confuse semantic Danger red #D91F11 with brand orange #FF3D00, or compress the 150% line-height contract
296
+ No duration, easing, transition, carousel, or scroll state is recorded in the supplied evidence. Motion is intentionally undocumented.