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
@@ -9,309 +9,261 @@ primary_color: "#ff153c"
9
9
  logo:
10
10
  type: favicon
11
11
  slug: "https://www.google.com/s2/favicons?domain=tving.com&sz=256"
12
- verified: "2026-05-15"
12
+ verified: "2026-07-13"
13
13
  omd: "0.1"
14
+ verification_v2:
15
+ schema: 2
16
+ checked: "2026-07-13"
17
+ surfaces:
18
+ - { id: home, kind: streaming-home, url: "https://www.tving.com/", inspected: "2026-07-13" }
19
+ - { id: movie, kind: streaming-catalog, url: "https://www.tving.com/movie", inspected: "2026-07-13" }
20
+ - { id: live, kind: streaming-live, url: "https://www.tving.com/live/C00551", inspected: "2026-07-13" }
21
+ sources:
22
+ - { id: home-live, kind: product-surface, url: "https://www.tving.com/", captured: "2026-07-13" }
23
+ - { id: movie-live, kind: product-surface, url: "https://www.tving.com/movie", captured: "2026-07-13" }
24
+ - { id: live-live, kind: product-surface, url: "https://www.tving.com/live/C00551", captured: "2026-07-13" }
25
+ - { id: tving-policy, kind: official-doc, url: "https://www.tving.com/policy/terms?viewType=webview", captured: "2026-07-13" }
26
+ - { id: cj-lineup-2025, kind: official-doc, url: "https://newsroom.cj.net/?p=5803", captured: "2026-07-13" }
27
+ - { id: cj-tving-history, kind: official-doc, url: "https://newsroom.cj.net/cj-enms-tving-and-kts-seezn-announce-merger-to-become-south-koreas-largest-ott-platform/", captured: "2026-07-13" }
28
+ - { id: pretendard-license, kind: license, url: "https://github.com/orioncactus/pretendard/blob/main/LICENSE", captured: "2026-07-13" }
29
+ conflicts: []
30
+ claims:
31
+ "tokens.colors.canvas": &home { surface_id: home, source_id: home-live, method: computed-style, captured: "2026-07-13" }
32
+ "tokens.colors.surface-raised": *home
33
+ "tokens.colors.foreground": *home
34
+ "tokens.colors.foreground-secondary": *home
35
+ "tokens.colors.foreground-muted": *home
36
+ "tokens.colors.hairline": *home
37
+ "tokens.typography.family.ui": *home
38
+ "tokens.typography.compact.size": *home
39
+ "tokens.typography.compact.weight": *home
40
+ "tokens.typography.compact.lineHeight": *home
41
+ "tokens.typography.compact.use": *home
42
+ "tokens.typography.body.size": *home
43
+ "tokens.typography.body.weight": *home
44
+ "tokens.typography.body.lineHeight": *home
45
+ "tokens.typography.body.use": *home
46
+ "tokens.typography.heading.size": *home
47
+ "tokens.typography.heading.weight": *home
48
+ "tokens.typography.heading.lineHeight": *home
49
+ "tokens.typography.heading.use": *home
50
+ "tokens.typography.live-tab.size": &live { surface_id: live, source_id: live-live, method: computed-style, captured: "2026-07-13" }
51
+ "tokens.typography.live-tab.weight": *live
52
+ "tokens.typography.live-tab.lineHeight": *live
53
+ "tokens.typography.live-tab.use": *live
54
+ "tokens.rounded.menu": *home
55
+ "tokens.rounded.live-pill": *live
56
+ "tokens.components.content-menu-trigger.type": *home
57
+ "tokens.components.content-menu-trigger.bg": *home
58
+ "tokens.components.content-menu-trigger.fg": *home
59
+ "tokens.components.content-menu-trigger.border": *home
60
+ "tokens.components.content-menu-trigger.radius": *home
61
+ "tokens.components.content-menu-trigger.padding": *home
62
+ "tokens.components.content-menu-trigger.font": *home
63
+ "tokens.components.content-menu-trigger.states": *home
64
+ "tokens.components.content-menu-trigger.use": *home
65
+ "tokens.components.live-selected-tab.type": *live
66
+ "tokens.components.live-selected-tab.bg": *live
67
+ "tokens.components.live-selected-tab.fg": *live
68
+ "tokens.components.live-selected-tab.border": *live
69
+ "tokens.components.live-selected-tab.radius": *live
70
+ "tokens.components.live-selected-tab.padding": *live
71
+ "tokens.components.live-selected-tab.font": *live
72
+ "tokens.components.live-selected-tab.states": *live
73
+ "tokens.components.live-selected-tab.use": *live
14
74
  tokens:
15
- source: prose-derived
16
- extracted: "2026-06-09"
75
+ source: live-extract
76
+ extracted: "2026-07-13"
17
77
  colors:
18
- primary: "#ff153c"
19
78
  canvas: "#000000"
20
- on-primary: "#ffffff"
21
- surface: "#2e2e2e"
22
- surface-modal: "#111111"
23
- surface-overlay: "#262626"
24
- text-secondary: "#b3b3b3"
25
- text-tertiary: "#a3a3a3"
26
- disabled-bright: "#d9d9d9"
27
- muted: "#6e6e6e"
28
- disabled-deep: "#4f4f4f"
29
- cate-home: "#ff1f45"
30
- cate-live: "#ff584a"
31
- cate-clip: "#fd8163"
32
- cate-vod: "#387dff"
33
- cate-movie: "#7d57fc"
34
- cate-ad: "#fcc800"
79
+ surface-raised: "#2e2e2e"
80
+ foreground: "#ffffff"
81
+ foreground-secondary: "#a3a3a3"
82
+ foreground-muted: "#6e6e6e"
83
+ hairline: "#4f4f4f"
35
84
  typography:
36
- family: { sans: "Pretendard", mono: "Pretendard" }
37
- hero: { size: 43, weight: 700, use: "Hero headline, onboarding h2" }
38
- cta: { size: 19, weight: 700, use: "Primary CTA label" }
39
- secondary-nav: { size: 16, weight: 400, use: "Secondary nav" }
40
- footer: { size: 16, weight: 400, use: "Footer link" }
41
- nav-cta: { size: 14, weight: 700, use: "Nav CTA 티빙 시작하기" }
42
- body: { size: 12, weight: 400, use: "Body baseline" }
43
- spacing: { xs: 4, sm: 8, md: 12, base: 16, lg: 24, xl: 32, xxl: 48 }
44
- rounded: { sm: 3, md: 8, lg: 16, full: 9999 }
45
- shadow:
46
- none: "none"
85
+ family: { ui: "Pretendard" }
86
+ compact: { size: 13.2, weight: 400, lineHeight: 1.5, use: "Observed opened-menu text on home and movie surfaces." }
87
+ body: { size: 16.5, weight: 400, lineHeight: 1.15, use: "Observed product-surface body and utility text." }
88
+ heading: { size: 22.0044, weight: 700, lineHeight: 1.5, use: "Observed product-surface heading text." }
89
+ live-tab: { size: 14.2956, weight: 400, lineHeight: 1.15, use: "Observed unselected live-route tab text." }
90
+ rounded: { menu: 4.95, live-pill: 109.996 }
47
91
  components_harvested: true
48
92
  components:
49
- button-cta-hero: { type: button, bg: "#ff153c", fg: "#ffffff", radius: 12, font: "19/700", use: "Primary hero CTA" }
50
- button-cta-nav: { type: button, bg: "#ff153c", fg: "#ffffff", radius: 8, font: "14/700", use: "Header inline CTA 티빙 시작하기" }
51
- card-poster: { type: card, radius: 16, use: "Poster card, top-corners-only radius, art bleeds bottom edge" }
52
- chip-meta: { type: badge, radius: 3, use: "Fine chip / tag / meta-label" }
53
- avatar: { type: avatar, radius: 9999, use: "Avatar / circular icon" }
93
+ content-menu-trigger: { type: button, bg: "#000000", fg: "#a3a3a3", border: "#a3a3a3", radius: 4.95, padding: "0px 16.5px", font: "13.2/400 Pretendard", states: "expanded, menu-open", use: "Observed home and movie content-menu trigger only." }
94
+ live-selected-tab: { type: tab, bg: "rgba(255, 255, 255, 0.2)", fg: "#ffffff", border: "#ffffff", radius: 109.996, padding: "8.8044px 13.2px", font: "14.2956/700 Pretendard", states: "selected", use: "Observed selected tab on the supplied live route only." }
54
95
  ---
55
96
 
56
97
  # Design System Inspiration of TVING (티빙)
57
98
 
58
99
  ## 1. Visual Theme & Atmosphere
59
100
 
60
- TVING is Korea's CJ ENM-backed streaming platform, and its product surface reads like a cinema-darkened auditorium tuned for Korean primetime the canvas is a near-absolute black (`#000000` locked at the document root), text floats in pure white (`#FFFFFF`) with a four-step gray scale beneath it (`#B3B3B3` → `#A3A3A3` → `#6E6E6E` → `#4F4F4F`), and the single chromatic interruption is a saturated red the brand encodes on `:root` as `--tving: 350 100% 54.12%` runtime hex `#FF153C`. This is not a sentimental crimson. It is a hot, almost neon scarlet, applied with monastic discipline: across 3,000 sampled nodes, only twelve carry that red as a background every one of them a CTA, a brand mark, or a live-status indicator. The platform's geometric signature is a top-corners-only card radius (`16.5292px 16.5292px 0 0`), engineered so poster art bleeds to the bottom edge of each tile — an OTT idiom shared with Disney+ and Wavve but tuned here to a 1.033rem radius that reads slightly tighter than industry default.
101
+ TVING is CJ ENM's Korean streaming platform, serving series, movies, live channels, and sports. The three supplied public product routes use a cinema-dark field: black canvas, white and cool-gray text, a restrained raised surface, and a light hairline rather than a marketing-page palette. The product evidence is deliberately narrower than TVING's wider public narrative. CJ's 2025 lineup describes a program spanning varied original genres, signature franchises, and year-round live sports, while its earlier company reporting places TVING's independent expansion after its 2020 separation from CJ ENM and subsequent partnerships. Those are first-party context sources, not UI-token sources. [CJ ENM: TVING and Seezn](https://newsroom.cj.net/cj-enms-tving-and-kts-seezn-announce-merger-to-become-south-koreas-largest-ott-platform/) · [TVING 2025 lineup](https://newsroom.cj.net/?p=5803)
61
102
 
62
- What distinguishes TVING from its Korean OTT peers is the **category-color taxonomy hardcoded into the design system itself**. Six content categories — home (`#FF1F45`), live (`#FF584A`), clip (`#FD8163`), VOD (`#387DFF`), movie (`#7D57FC`), and ad (`#FCC800`) — are not merely page accents but first-class `:root` CSS custom properties (`--color-cate-home`, `--color-cate-live`, etc.). Category color IS product taxonomy: when a user navigates between live KBO baseball, VOD drama, and clip browse, the chrome itself shifts hue. Reinforcing this, the system carries **dedicated live-streaming geometry tokens** `--kbo-player-height`, `--sports-player-width`, `--live-tab-player-companion-banner-height` — meaning live sports is not a feature retrofitted onto a VOD player but a co-equal surface paradigm. Pretendard is the exclusive typeface (100% of samples; Apple SD Gothic Neo only as system fallback), weight discipline is binary (400 body / 700 heading and CTA — no 500/600 intermediates observed), and depth is constructed through layered dark surfaces (`#000` → `#2E2E2E` → `rgba(15,15,15,0.74)` overlay) rather than box-shadows, which return `0 0 #0000` on every sampled production element.
103
+ The captured home and movie routes share an opened content-menu treatment; the supplied live route adds a selected white-tint pill tab. This makes the reliable visual signature a high-contrast viewing shell with route-local navigation states, not the prior reference's inferred universal poster, CTA, category-color, or motion system.
63
104
 
64
105
  **Key Characteristics:**
65
- - Locked dark canvas (`#000000` at `html`) — no light-mode token observed; the platform is dark-mode-only by design.
66
- - Single brand red (`#FF153C`) reserved for CTAs and brand marks; observed on 4 of 12 dominant background colors, runtime alpha-variants `rgb(255,21,60)` / `rgb(254,21,60)` / `rgb(255,31,69)` all collapse to one canonical token.
67
- - **Six-category color taxonomy as `:root` primitives** — home/live/clip/VOD/movie/ad each own a CSS custom property; rare case where color IS product information architecture.
68
- - Top-corners-only card radius (`16.5292px 16.5292px 0 0`) for poster bleed — observed 20× on home surface alone.
69
- - Pretendard exclusive (SIL OFL 1.1), weight binary (400 / 700).
70
- - Box-shadow zero across product chrome — depth via surface contrast, not elevation.
71
- - Dedicated live-streaming geometry tokens (`--kbo-player-*`, `--sports-player-*`) elevate live as a peer surface to VOD.
72
- - Tailwind utility layer (`--tw-*`) + Emotion CSS-in-JS (`css-*` hashes) + shadcn-pattern semantic roles (`--card`, `--popover`, `--muted`) coexist — pragmatic framework stack, not opinionated DS purism.
73
106
 
74
- ## 2. Color Palette & Roles
75
-
76
- ### Brand
77
- - **TVING Red** (`#FF153C`, canonical `--tving: 350 100% 54.12%` HSL) — primary CTA backgrounds, brand mark, live-status accents. Runtime alpha-variants observed (`#FE153C`, `#FF1F45`) collapse to one logical token.
78
- - **Pure Black** (`#000000`) locked canvas at `html` and `body`. No theme alternate observed.
79
- - **Pure White** (`#FFFFFF`) — primary text on canvas; 519 occurrences in 3,000-node sample (dominant text color).
80
-
81
- ### Surface ladder (dark)
82
- - `#000000` — canvas / page background (12 occurrences as bg)
83
- - `#2E2E2E` — elevated card / chip surface (10 occurrences as bg)
84
- - `#111111` / `#262626` — modal / overlay surface
85
- - `rgba(15,15,15,0.74)` — bottom-sheet / scrim overlay
86
- - `rgba(0,0,0,0.5)` — image-overlay scrim
87
- - `rgba(255,255,255,0.1)` / `rgba(255,255,255,0.4)` — hover/active glass tint on poster cards
88
-
89
- ### Text scale (grayscale)
90
- - `#FFFFFF` — primary text, headlines (519×)
91
- - `#B3B3B3` — secondary body (169×)
92
- - `#A3A3A3` — tertiary metadata (24×)
93
- - `#D9D9D9` — disabled-bright (6×)
94
- - `#6E6E6E` — muted hint (52×)
95
- - `#4F4F4F` — disabled-deep (1×)
107
+ - Black `#000000` canvas with white primary text and gray secondary hierarchy.
108
+ - `#2e2e2e` is a repeated raised-surface value on the home and movie capture.
109
+ - `#4f4f4f` is the repeated high-confidence hairline/border value on home and movie.
110
+ - Product chrome uses a loaded, TVING-hosted Pretendard webfont; declared legacy faces are not promoted.
111
+ - The only reusable state claims are an expanded/menu-open content selector and a selected live tab, each with route and selector provenance.
96
112
 
97
- ### Category taxonomy (first-class `:root` tokens)
98
- - `--color-cate-home`: `#FF1F45` (home shelf)
99
- - `--color-cate-live`: `#FF584A` (live streaming)
100
- - `--color-cate-clip`: `#FD8163` (short-form clips)
101
- - `--color-cate-vod`: `#387DFF` (on-demand)
102
- - `--color-cate-movie`: `#7D57FC` (films)
103
- - `--color-cate-ad`: `#FCC800` (sponsored / ad indicator)
104
-
105
- ### Border
106
- - `hsl(0,0%,31%)` (`--border`) — hairline divider; rendered at 1px on dark surface, near-invisible until hover.
107
-
108
- ## 3. Typography
113
+ ## 2. Color Palette & Roles
109
114
 
110
- Pretendard exclusive. No display accent face. No serif. Weight binary.
115
+ ### Observed live product surface
111
116
 
112
- | Role | Family | Size (observed) | Weight |
113
- |---|---|---|---|
114
- | Hero headline (h2 onboarding) | Pretendard | 43.4px | 700 |
115
- | Body baseline | Pretendard | 12.4px | 400 |
116
- | Primary CTA label | Pretendard | 18.6px | 700 |
117
- | Nav CTA ('티빙 시작하기') | Pretendard | 14px | 700 |
118
- | Footer link | Pretendard | 15.5px | 400 / 700 mixed |
119
- | Secondary nav | Pretendard | 16px | 400 |
117
+ - **Canvas** (`#000000`) repeated background on home, movie, and live captures.
118
+ - **Raised surface** (`#2e2e2e`) — repeated home/movie background value, including an opened-menu option.
119
+ - **Foreground** (`#ffffff`) repeated primary text on all three captured routes.
120
+ - **Secondary foreground** (`#a3a3a3`) repeated menu and supporting text color across all routes.
121
+ - **Muted foreground** (`#6e6e6e`) repeated subdued text color across all routes.
122
+ - **Hairline** (`#4f4f4f`) repeated border value on home and movie routes.
120
123
 
121
- **Stack:** `Pretendard, -apple-system, "system-ui", Roboto, "Segoe UI", Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif`
124
+ ### Boundary
122
125
 
123
- CDN: `https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css` (SIL OFL 1.1).
126
+ The catalog-level `primary_color` remains `#ff153c`, but the supplied 2026 product capture does not provide computed selector evidence for a red CTA, a universal red accent, or the earlier six-color category taxonomy. They are not retained as live UI tokens. Corporate/editorial imagery and TVING's legal or subscription pages are separate source domains and do not fill that gap.
124
127
 
125
- ## 4. Shape & Radius
128
+ ## 3. Typography Rules
126
129
 
127
- Base token `--radius: 0.5rem` (8px), but runtime values cluster at three points:
130
+ ### Evidence classes
128
131
 
129
- | Radius | Frequency | Role |
132
+ | Class | Evidence | Resolution |
130
133
  |---|---|---|
131
- | `16.5292px` (top-corners only) | 41× (20× as top-only) | Poster card top image bleeds bottom edge |
132
- | `12.4px` | | Primary hero CTA |
133
- | `8px` | observed | Header inline CTA |
134
- | `3px` (and top-only) | 13× (10× top-only) | Fine chip / tag / meta-label |
135
- | `50%` | 4× | Avatar / circular icon |
136
- | `9999px` | 1× | Pill (rare) |
137
-
138
- The signature is **top-corners-only on poster cards** bottom edge sits flush against metadata so poster art reads as bleed, not framed.
134
+ | Live computed product use | `Pretendard` is computed on 335 visible elements across body, button, heading, menu, tab, and text roles. The collector classifies it `loaded` with high confidence and records 27 TVING-hosted WOFF/WOFF2 source URLs. | Verified live UI family and the sole `tokens.typography.family.ui` family. |
135
+ | Official distributed asset and licence | Pretendard's upstream project distributes the font under SIL Open Font License 1.1. [Upstream licence](https://github.com/orioncactus/pretendard/blob/main/LICENSE) | Licence context only; it does not by itself prove TVING deployment. |
136
+ | Declared-only assets | Campton, Campton Black/Extra/Book, Noto Sans KR, OmniGothic/OmniGothics, Pretendard Fallback, and swiper-icons have declarations and, where listed, source URLs, but zero visible uses in this capture. | Declared-only; not a UI-family token and not a substitute. |
137
+ | System fallback | `-apple-system`, `system-ui`, Roboto, Segoe UI, and other fallbacks appear after Pretendard in computed stacks. | Fallback-only, not a TVING font claim. |
138
+
139
+ ### Observed hierarchy
140
+
141
+ | Role | Size | Weight | Line height | Surface boundary |
142
+ |---|---:|---:|---:|---|
143
+ | Compact opened-menu text | 13.2px | 400 | 19.8px | Home and movie opened-menu evidence |
144
+ | Product body/utility text | 16.5px | 400 | 18.975px | Public product routes |
145
+ | Product heading text | 22.0044px | 700 | 33.0066px | Public product routes |
146
+ | Unselected live tab | 14.2956px | 400 | 16.4399px | Supplied live route |
147
+
148
+ ## 4. Component Stylings
149
+
150
+ ### Content selector
151
+
152
+ **Opened trigger — expanded/menu-open**
153
+ - Background: #000000
154
+ - Text: #a3a3a3
155
+ - Border: #a3a3a3
156
+ - Radius: 4.95px
157
+ - Padding: 0px 16.5px
158
+ - Font: 13.2px / 400 / Pretendard
159
+ - States: expanded, menu-open
160
+ - Use: `home::[data-omd-capture="19"]` and the corresponding movie selector; observed 20px rendered height only while the menu is open.
161
+
162
+ ### Live navigation
163
+
164
+ **Selected tab — selected**
165
+ - Background: rgba(255, 255, 255, 0.2)
166
+ - Text: #ffffff
167
+ - Border: #ffffff
168
+ - Radius: 109.996px
169
+ - Padding: 8.8044px 13.2px
170
+ - Font: 14.2956px / 700 / Pretendard
171
+ - States: selected
172
+ - Use: `surface-3::[data-omd-capture="61"]` on `https://www.tving.com/live/C00551`; observed 34px rendered height only.
173
+
174
+ No default CTA, poster card, dialog, hover, focus, pressed, error, disabled, or responsive variant is specified: the supplied evidence does not provide the required selector and state provenance.
139
175
 
140
- ## 5. Spacing & Layout
141
-
142
- Layout primitives carried as CSS custom properties on `:root`:
143
-
144
- | Token | Value | Role |
145
- |---|---|---|
146
- | `--gnb-height` | `70px` | Global nav bar (authenticated) |
147
- | `--header-height` | `4rem` (64px) | Marketing / onboarding header |
148
- | `--bottom-tab-height` | `4.167rem` (≈66.7px) | Mobile bottom tab bar |
149
- | `--safe-area-inset-{top,bottom,left,right}` | dynamic | iOS PWA safe areas |
150
- | `--content-inset-{top,bottom,right}` | `0px` (default) | Dynamic content insets when player docked |
151
- | `--live-tab-player-height-desktop` | `calc((100vw - 40rem) * 0.5625)` | 16:9 docked player |
152
- | `--kbo-player-width` | `calc(100vw - 31.25rem)` | KBO baseball player width (subtracts 500px sidebar) |
153
- | `--sports-player-height` | `calc((100vw - 31.25rem) * 0.5625)` | Sports player 16:9 |
176
+ ---
177
+ **Verified:** 2026-07-13
178
+ **Tier 1 sources:** https://www.tving.com/; https://www.tving.com/movie; https://www.tving.com/live/C00551; https://www.tving.com/policy/terms?viewType=webview; https://newsroom.cj.net/cj-enms-tving-and-kts-seezn-announce-merger-to-become-south-koreas-largest-ott-platform/; https://newsroom.cj.net/?p=5803; https://github.com/orioncactus/pretendard/blob/main/LICENSE
179
+ **Tier 2 sources:** https://getdesign.md/tving (no usable indexed record returned); https://styles.refero.design/?q=tving (no usable style record returned)
180
+ **Conflicts unresolved:** none
154
181
 
155
- Page viewport: `1280×713` (desktop test). Onboarding scroll height `4,440px` (~6.22 viewports).
182
+ The supplied capture corroborates only the values and states above. Legacy red CTA, category-color, poster-card, avatar, sports-geometry, motion, and inferred-product claims are intentionally omitted rather than reconstructed from CSS declarations, corporate material, or an adjacent route.
156
183
 
157
- ## 6. Elevation & Depth
184
+ ## 5. Layout Principles
158
185
 
159
- **Box-shadow returns `0 0 #0000` on every sampled product element.** Depth is constructed via surface contrast:
186
+ The three supplied product routes establish route scope, not a full layout system. Home and movie share compact menu controls; the live route supplies a 34px tab treatment. No mobile viewport, grid, card aspect ratio, sticky header, player geometry, or breakpoint is retained because the collector evidence does not provide reliable cross-viewport provenance.
160
187
 
161
- 1. Canvas `#000000`
162
- 2. Elevated `#2E2E2E` (+46 luminance)
163
- 3. Modal/overlay `rgba(15,15,15,0.74)`
164
- 4. Glass tint `rgba(255,255,255,0.1)` on hover
188
+ ## 6. Depth & Elevation
165
189
 
166
- The `--tw-shadow` and `--tw-drop-shadow` Tailwind tokens exist but render as zero design discipline, not framework limitation.
190
+ The opened content menu is the only measured elevated layer: it uses `#212121`, a 1px `#4f4f4f` border, 4.95px radius, and two low-opacity black shadow layers. This route-local opened state does not authorize a global shadow scale. The normal controls retained in §4 report no shadow.
167
191
 
168
- ## 7. Iconography & Imagery
192
+ ## 7. Do's and Don'ts
169
193
 
170
- Not directly inspected this pass (authenticated browse gated). System signals:
171
- - Avatar / circular icons use `50%` radius (4 observed).
172
- - Live indicators presumed to use `--color-cate-live` (`#FF584A`) as fill.
173
- - Poster art is the dominant visual asset on browse surfaces; placeholder ratio inferred at 2:3 portrait (industry standard, confirmed by top-corners-only card geometry).
194
+ ### Do
174
195
 
175
- ## 8. Motion
196
+ - Keep the verified product shell black with white/gray text when recreating these captured routes.
197
+ - Use Pretendard only with its recorded TVING-hosted loaded-font evidence and preserve the system stack as fallback.
198
+ - Preserve the expanded/menu-open and selected states with their route and selector boundaries.
199
+ - Treat CJ's editorial and policy material as narrative or legal context, not as product CSS authority.
176
200
 
177
- Not captured live (no interactions triggered during static-state inspect). System carries Swiper carousel (`--swiper-theme-color: #007AFF`) and SweetAlert2 (`--swal2-width: 30rem`) as vendor primitives. Tailwind transform tokens (`--tw-translate-{x,y}`, `--tw-rotate`, `--tw-scale-{x,y}`) are reset to default — motion is applied per-component, not from `:root`.
201
+ ### Don't
178
202
 
179
- Flagged for UPDATE pass: hover transitions on poster cards, player chrome fade timing, modal entrance curves.
203
+ - Do not introduce a red CTA, red brand accent, six-category palette, poster-card geometry, or sports-player layout from the previous snapshot.
204
+ - Do not promote Campton, Noto Sans KR, OmniGothic, or another declared-only face into TVING UI typography.
205
+ - Do not add hover, focus, pressed, disabled, error, dialog, or responsive variants without a new observed state and selector.
206
+ - Do not use marketing, subscription, legal, or newsroom chrome as though it were the captured streaming product surface.
180
207
 
181
- ## 9. Component Patterns & States
208
+ ## 8. Responsive Behavior
182
209
 
183
- ### Primary CTA (`프로모션 보기`, `티빙 시작하기`)
184
- - Background: `#FF153C` (canonical brand red)
185
- - Color: `#FFFFFF`
186
- - Radius: `12.4px` (hero) / `8px` (header inline)
187
- - Padding: `19.6292px 62px` (hero) — generous horizontal, allowing 4-syllable Korean CTAs without wrap
188
- - Font: Pretendard 18.6px / 700 (hero), 14px / 700 (header)
189
- - Height: 62px (hero), 32px (header)
190
- - Border: none
210
+ No mobile or alternate viewport was supplied. Touch targets, breakpoint changes, menu placement, shelf grids, and player behavior remain unverified.
191
211
 
192
- ### Secondary / nav links
193
- - Color: `#A3A3A3` default, `#FFFFFF` active
194
- - Size: 15.5px / 400 (passive), 700 (current)
195
- - No background, no border
212
+ ## 9. Agent Prompt Guide
196
213
 
197
- ### Footer
198
- - Background: `#000000` (continuous with canvas)
199
- - Links: `#A3A3A3` 15.5px; `개인정보처리방침` rendered at weight 700 (legal-emphasis convention)
214
+ ### Verified prompt boundary
200
215
 
201
- ### Live status
202
- - Presumed to use `#FF584A` (`--color-cate-live`) with circular pulse indicator (live token system suggests dedicated chrome).
216
+ “Create only the captured TVING product chrome: a black streaming shell with white, `#a3a3a3`, and `#6e6e6e` text; an expanded black content selector with a 4.95px corner; and the selected live tab with a 20% white fill and 109.996px pill radius. Use loaded Pretendard. Do not add red CTAs, poster cards, category colors, player geometry, or unobserved interaction states.”
203
217
 
204
218
  ## 10. Voice & Tone
205
219
 
206
- TVING's product voice observed from button labels, footer copy register, and onboarding headline structure is **concise, action-oriented, casual-polite Korean (`-요/-세요`)**. No exclamation marks observed on CTAs. No marketing superlatives within product chrome. The onboarding headline `지금 시작해보세요` is grammatically a polite imperative without emphasis invitation, not exhortation.
207
-
208
- The voice register sits between Netflix Korea's neutral-formal and Wavve's slightly more casual approach. Footer items use legal-register nouns (`이용약관`, `법적고지`) without softening.
209
-
210
- **Voice samples (OmD-original analyst characterizations — NOT verbatim from TVING):**
211
- - Action: "지금 보세요" / "이어서 보기" / "시청 계속하기"
212
- - Status: "라이브 진행 중" / "오늘 공개" / "에피소드 12까지"
213
- - Empty / error: "잠시 후 다시 시도해주세요" / "지금은 시청할 수 없어요"
220
+ Official TVING product policy pages use compact legal-navigation labels such as `TVING 이용약관`, `유료이용약관`, `법적고지`, and `개인정보처리방침`. CJ's 2025 editorial framing names an “infinite spectrum,” “signature content,” and “immersive sports.” These are source-specific language samples: neither source establishes a general in-product microcopy system. [TVING policies](https://www.tving.com/policy/terms?viewType=webview) · [TVING 2025 lineup](https://newsroom.cj.net/?p=5803)
214
221
 
215
- IP guardrail: TVING's actual marketing taglines (`스트리밍의 모든 것`, etc.) are NOT reproduced in this DESIGN.md. Voice samples above are fresh illustrative reconstructions in the observed register.
222
+ | Do | Don't |
223
+ |---|---|
224
+ | Keep policy language exact and clearly legal in context. | Turn policy labels into invented playback, error, or account microcopy. |
225
+ | Preserve editorial themes as editorial context. | Treat marketing/editorial phrasing as a product UI token. |
226
+ | State the source domain beside a voice claim. | Attribute an unobserved CTA or empty-state sentence to TVING. |
216
227
 
217
- ## 11. Brand Narrative (Reported Facts Only)
228
+ **Source samples.**
218
229
 
219
- TVING is operated by **TVING Inc.**, a subsidiary of **CJ ENM** (Korea's largest media conglomerate). Originally launched in 2010 as a CJ Hellovision live-TV streaming service, the platform was relaunched in 2020 as a standalone OTT after CJ ENM spun off TVING as an independent company in partnership with JTBC Studios. The platform's competitive thesis is **K-content provenance** — CJ ENM and JTBC together produce a large share of Korea's tvN, JTBC, and CJ-affiliated drama and entertainment IP, giving TVING first-window exclusivity on a substantial portion of Korean primetime programming. In 2022, TVING absorbed Paramount+ Korean operations under a content partnership.
230
+ - `TVING 이용약관` official policy navigation. <!-- verified: tving.com/policy/terms 2026-07-13 -->
231
+ - `signature content` — official CJ 2025 lineup theme. <!-- verified: newsroom.cj.net/?p=5803 2026-07-13 -->
232
+ - `immersive sports` — official CJ 2025 lineup theme. <!-- verified: newsroom.cj.net/?p=5803 2026-07-13 -->
220
233
 
221
- Headquarters: Seoul, South Korea. Service domain: `www.tving.com`. The 🐴 horse emoji prefixing the browser tab title is a 2024-2025 brand-personality device tied to TVING's marketing campaigns.
234
+ ## 11. Brand Narrative
222
235
 
223
- **[FILL IN]**: Exact subscriber count, current CEO, latest funding round are not verified at OmD attribution fidelity in this pass flagged for UPDATE if needed.
236
+ CJ ENM's official account says TVING separated from CJ ENM in October 2020, then strengthened its platform position through a JTBC partnership and investment from Naver before its merger with KT's Seezn. That history establishes TVING as a Korean streaming platform built through content and platform partnerships; it does not establish a timeless UI system. [CJ ENM merger announcement](https://newsroom.cj.net/cj-enms-tving-and-kts-seezn-announce-merger-to-become-south-koreas-largest-ott-platform/)
224
237
 
225
- ## 12. Personas (Inferred, Public-Surveys-Only)
238
+ The current public editorial record emphasizes a varied original-content slate and live sports coverage. CJ's 2025 announcement describes genre breadth, signature franchises, and year-round sports programming; a later CJ announcement frames international distribution as part of TVING's expansion. These facts explain the service's content scope and current direction, while the tokens in this reference remain tied only to the three captured Korean web routes. [TVING 2025 lineup](https://newsroom.cj.net/?p=5803) · [TVING global expansion](https://newsroom.cj.net/tving-partners-with-disney-japan-to-accelerate-global-expansion/)
226
239
 
227
- **[FILL IN]** — Personas below are **inferred from public market positioning** (CJ ENM K-content focus, live-sports investment, mobile-first chrome), not from TVING-published user research:
240
+ ## 12. Principles
228
241
 
229
- 1. **K-drama primetime viewer (25-44, urban, mobile)** watches tvN / JTBC originals same-night-as-broadcast; values episode-tracking continuity and download-for-commute.
230
- 2. **Live sports follower (KBO baseball, 30-55, dual-screen)** uses TVING during commute and at home for live KBO games (TVING holds KBO streaming rights); dedicated `--kbo-player-*` tokens confirm this user is a first-class design target.
231
- 3. **Variety-show casual (teens-20s, social)** clips surface (`--color-cate-clip`) suggests short-form viewing pattern for variety highlights, shared into chat apps.
242
+ 1. **Keep content domains distinct.** TVING's official lineup differentiates original genres, signature programs, and sports. *UI implication:* do not collapse different route contexts into an invented universal component system.
243
+ 2. **Use contrast for viewing-first chrome.** The captured routes use black, white, and measured gray values. *UI implication:* preserve text hierarchy before adding decorative color.
244
+ 3. **Require state provenance.** The capture supplies menu-open and selected examples only. *UI implication:* make a state reusable only when its route, selector, and computed values are recorded.
232
245
 
233
- Authentic persona work would require access to TVING's internal research or commissioned surveys — explicitly out of scope here.
246
+ ## 13. Personas
234
247
 
235
- ## 13. Anti-Patterns & Don'ts
248
+ *No first-party TVING persona research or demographic segmentation was collected for this reference. Do not fabricate customer archetypes, motivations, or survey findings.*
236
249
 
237
- **Do NOT, when porting this design language to your own product:**
250
+ - [FILL IN: user-provided primary viewer segment and viewing context]
251
+ - [FILL IN: user-provided live or on-demand task]
252
+ - [FILL IN: user-provided accessibility or device requirement]
238
253
 
239
- 1. **Don't replicate the locked dark canvas if your content is not video.** TVING's `#000` works because poster art and video frames provide all the visual energy. A dark-mode SaaS dashboard or marketplace inherits the gloom without inheriting the cinema.
240
- 2. **Don't claim a six-category taxonomy without earning it.** The `--color-cate-*` system works because TVING genuinely has six content surface paradigms (live sports, live TV, VOD drama, VOD movie, clips, ads). Adopting six taxonomy hues for a product with three actual surfaces produces visual noise.
241
- 3. **Don't replicate `#FF153C` verbatim.** It is a CJ ENM brand color in spirit; shift via `delta_set` if you want a "TVING-like" warm scarlet — try `#E0142E` to `#FF2A4D` range with WCAG-checked contrast on dark surface.
242
- 4. **Don't skip Pretendard for "system font."** TVING's typography reads tight and modern because Pretendard's optical sizing differs from Apple SD Gothic Neo at the 12-18px display range. System fallback degrades the character meaningfully.
243
- 5. **Don't apply top-corners-only radius to non-poster cards.** That geometry is meaningful only when the bottom edge is an image bleed; on a text card it reads as a CSS mistake.
244
- 6. **Don't import the live-streaming geometry tokens as-is.** `--kbo-player-width: calc(100vw - 31.25rem)` is calibrated to TVING's specific sidebar — meaningless context elsewhere.
254
+ ## 14. States
245
255
 
246
- ## 14. Implementation Notes
256
+ Only an opened content menu and a selected live tab were captured. The following product states require direct product-surface observation before specification:
247
257
 
248
- - **Stack**: Next.js (inferred from chunked CSS class hashes) + Emotion CSS-in-JS + Tailwind utility layer + shadcn/ui-pattern semantic role tokens.
249
- - **Token strategy**: HSL components in CSS vars (`350 100% 54.12%`) so `hsl(var(--tving) / 0.5)` produces alpha variants without separate tokens — a shadcn idiom.
250
- - **Live geometry**: All live-streaming player dimensions are `calc()` expressions against `100vw` minus a fixed sidebar — meaning the player resizes responsively to viewport while sidebar stays pinned.
251
- - **iOS PWA**: `--safe-area-inset-*` plumbed throughout TVING ships as a native-feeling PWA on iOS in addition to native apps.
252
- - **Vendor coexistence**: SweetAlert2 (modal), Swiper (carousel), and the bundled shadcn-pattern primitives all run side-by-side. Pragmatic, not opinionated.
258
+ | Category | Evidence status |
259
+ |---|---|
260
+ | Empty | [FILL IN: no observed state] |
261
+ | Loading | [FILL IN: no observed state] |
262
+ | Error | [FILL IN: no observed state] |
263
+ | Success | [FILL IN: no observed state] |
264
+ | Skeleton | [FILL IN: no observed state] |
265
+ | Disabled | [FILL IN: no observed state] |
253
266
 
254
- ## 15. Verification
267
+ ## 15. Motion & Easing
255
268
 
256
- | § | Source | Date | Confidence |
257
- |---|---|---|---|
258
- | 1, 2, 3, 4, 5, 6, 9 | Live CDP capture via browser-harness :9222 — 13 raw_samples, 114 :root CSS custom properties, 3000-node frequency analysis | 2026-05-15 | High |
259
- | 7, 8 | Token-level signals only (interactions not triggered in static inspect) | 2026-05-15 | Medium (flagged for UPDATE) |
260
- | 10 | Observed button labels + footer copy register; voice samples are OmD-original analyst reconstructions | 2026-05-15 | Medium (no verbatim adoption) |
261
- | 11 | Public corporate narrative (CJ ENM / TVING Inc. press history) | 2026-05-15 | Medium (subscriber/CEO marked FILL IN) |
262
- | 12 | **Inferred only** — no TVING-published persona research consulted | 2026-05-15 | Low (explicitly flagged) |
263
- | 13 | OmD-original analytical guidance | 2026-05-15 | High (analyst opinion) |
264
-
265
- ### Tier 1 — Official Design System
266
- **Result: negative (documented).**
267
-
268
- Probed all canonical subdomain patterns:
269
- - `design.tving.com` → DNS 000
270
- - `brand.tving.com` → DNS 000
271
- - `tech.tving.com` → DNS 000
272
- - `tving.com/design` → 404
273
- - GitHub `tving` org → 1 repo (`tving.github.io`, empty)
274
- - CJ ENM corporate channels — no public TVING-branded DS portal
275
-
276
- The production CSS `:root` token set (114 custom properties) extracted via live CDP capture is the closest authoritative public artifact and is treated here as the de-facto source of truth.
277
-
278
- ### Tier 2 — Third-party indexes
279
- - `getdesign.md/q/tving` → 404
280
- - `styles.refero.design/?q=tving` → 200 with no result cards
281
-
282
- Consistent with the systemic Korean-coverage gap.
283
-
284
- ### IP Guardrails
285
- - Brand assets (logo, name, `#FF153C`) referenced for analysis only — not redistributed.
286
- - §10 Voice samples are **fresh OmD-original analyst reconstructions** in the observed register — no verbatim TVING marketing copy or taglines reproduced.
287
- - §11 narrative is sourced from publicly reported facts (CJ ENM corporate history); subscriber/CEO/funding marked **[FILL IN]** where attribution fidelity is insufficient.
288
- - §12 personas are explicitly inferred from market positioning; authentic persona work would require TVING-internal research.
289
- - Content thumbnails (poster art, hero stills, episode metadata) NOT captured into product DOM or this DESIGN.md. Reference screenshot kept under fair-use commentary.
290
-
291
- ### Flagged for UPDATE pass
292
- - Authenticated browse / VOD detail / live KBO player surfaces — gated, not inspected.
293
- - Motion timing (poster card hover, player chrome fade, modal entrance) — requires interaction triggers.
294
- - Exact live category-color usage on chrome — `--color-cate-*` system observed in tokens but per-surface application not visually verified.
295
- - TVING subscriber count, current CEO, latest funding, founding-year specifics for §11.
296
-
297
- ---
298
-
299
- *Captured via `omd:add-reference` (CREATE mode) on 2026-05-15. See `assets/_reference/` for tokens.json, structure.json, fonts.json, .live-inspect-proof.json, screenshots/, LICENSE-NOTE.md, attribution.md.*
300
-
301
- ## 16. Do's and Don'ts
302
-
303
- ### Do
304
- - Lock the canvas to pure black (#000000) at the document root and build depth through surface contrast (#000 → #2E2E2E → rgba(15,15,15,0.74)) since box-shadow renders 0 0 #0000 across all product chrome
305
- - Reserve the brand red #FF153C strictly for CTAs, brand marks, and live-status accents — keeping it to a handful of background nodes the way the doc samples only twelve red backgrounds across 3,000 nodes
306
- - Drive content-area-aware chrome from the six --color-cate-* tokens (home #FF1F45, live #FF584A, clip #FD8163, VOD #387DFF, movie #7D57FC, ad #FCC800) so color carries product taxonomy
307
- - Apply the top-corners-only radius (16.5292px 16.5292px 0 0) to poster cards so the image bleeds flush to the bottom metadata edge
308
- - Set Pretendard as the exclusive typeface and hold weights to the binary 400 body / 700 heading-and-CTA scale, with no 500/600 intermediates
309
- - Build primary CTAs as #FF153C background, #FFFFFF label, Pretendard 18.6px/700 with generous 19.6292px 62px padding so 4-syllable Korean labels never wrap
310
-
311
- ### Don't
312
- - Spread #FF153C across large background areas or decorative fills — it is a CTA, brand-mark, and live-status accent only, never an ambient surface color
313
- - Apply the locked dark canvas to non-video products, since #000 earns its energy from poster art and video frames a SaaS dashboard or marketplace cannot supply
314
- - Adopt the six --color-cate-* taxonomy hues for a product with fewer than six genuine content surface paradigms, which only produces visual noise
315
- - Reproduce #FF153C verbatim as it is a CJ ENM brand color — shift it within the #E0142E–#FF2A4D range with WCAG contrast checks on dark surface if you want a TVING-like scarlet
316
- - Substitute a system font for Pretendard, whose optical sizing differs meaningfully from Apple SD Gothic Neo at the 12–18px display range
317
- - Apply the top-corners-only radius to text cards or import the live geometry tokens (e.g. --kbo-player-width: calc(100vw - 31.25rem)) as-is, since both are calibrated to TVING's poster bleed and specific sidebar
269
+ No timing, easing, transition, or playback-control animation was captured. The opened-menu and selected-tab observations establish static states only. [FILL IN: product-specific motion evidence]