oh-my-design-cli 1.8.7 → 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 (247) 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 +1995 -38
  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/alipay/DESIGN.md +179 -420
  71. package/web/references/apple/DESIGN.md +224 -498
  72. package/web/references/asleep/DESIGN.md +402 -0
  73. package/web/references/au/DESIGN.md +334 -0
  74. package/web/references/autopedia/DESIGN.md +382 -0
  75. package/web/references/aws-cloudscape/DESIGN.md +241 -0
  76. package/web/references/baemin/DESIGN.md +332 -491
  77. package/web/references/banksalad/DESIGN.md +269 -180
  78. package/web/references/barogo/DESIGN.md +416 -0
  79. package/web/references/beusable/DESIGN.md +464 -0
  80. package/web/references/bilibili/DESIGN.md +206 -374
  81. package/web/references/bmw/DESIGN.md +162 -276
  82. package/web/references/brandi/DESIGN.md +184 -325
  83. package/web/references/catchtable/DESIGN.md +219 -264
  84. package/web/references/cgv/DESIGN.md +317 -0
  85. package/web/references/channeltalk/DESIGN.md +210 -336
  86. package/web/references/china-airlines/DESIGN.md +291 -0
  87. package/web/references/cjonstyle/DESIGN.md +453 -0
  88. package/web/references/class101/DESIGN.md +168 -387
  89. package/web/references/classum/DESIGN.md +228 -203
  90. package/web/references/claude/DESIGN.md +242 -479
  91. package/web/references/clay/DESIGN.md +179 -377
  92. package/web/references/clickhouse/DESIGN.md +254 -343
  93. package/web/references/cohere/DESIGN.md +214 -324
  94. package/web/references/coinone/DESIGN.md +199 -179
  95. package/web/references/corca/DESIGN.md +414 -0
  96. package/web/references/coupang/DESIGN.md +205 -475
  97. package/web/references/cursor/DESIGN.md +240 -381
  98. package/web/references/dabang/DESIGN.md +248 -213
  99. package/web/references/dable/DESIGN.md +431 -0
  100. package/web/references/datarize/DESIGN.md +217 -330
  101. package/web/references/dealicious/DESIGN.md +402 -0
  102. package/web/references/drdiary/DESIGN.md +404 -0
  103. package/web/references/elastic/DESIGN.md +238 -0
  104. package/web/references/elevenlabs/DESIGN.md +183 -321
  105. package/web/references/eslite/DESIGN.md +257 -0
  106. package/web/references/evaair/DESIGN.md +338 -0
  107. package/web/references/expo/DESIGN.md +238 -331
  108. package/web/references/familymart-tw/DESIGN.md +254 -0
  109. package/web/references/ferrari/DESIGN.md +160 -377
  110. package/web/references/figma/DESIGN.md +197 -451
  111. package/web/references/fitpet/DESIGN.md +445 -0
  112. package/web/references/flex/DESIGN.md +170 -253
  113. package/web/references/framer/DESIGN.md +197 -340
  114. package/web/references/freee/DESIGN.md +211 -533
  115. package/web/references/friendliai/DESIGN.md +431 -0
  116. package/web/references/frip/DESIGN.md +440 -0
  117. package/web/references/gangnamunni/DESIGN.md +154 -591
  118. package/web/references/gaudiolab/DESIGN.md +414 -0
  119. package/web/references/google/DESIGN.md +290 -398
  120. package/web/references/hashicorp/DESIGN.md +273 -318
  121. package/web/references/heydealer/DESIGN.md +429 -0
  122. package/web/references/humanscape/DESIGN.md +433 -0
  123. package/web/references/hyundai/DESIGN.md +158 -368
  124. package/web/references/hyundaicard/DESIGN.md +171 -121
  125. package/web/references/ibm/DESIGN.md +227 -378
  126. package/web/references/idus/DESIGN.md +450 -0
  127. package/web/references/igaworks/DESIGN.md +437 -0
  128. package/web/references/inflearn/DESIGN.md +221 -366
  129. package/web/references/intuit/DESIGN.md +244 -0
  130. package/web/references/jandi/DESIGN.md +191 -291
  131. package/web/references/jobplanet/DESIGN.md +415 -0
  132. package/web/references/kakao/DESIGN.md +287 -475
  133. package/web/references/kakaobank/DESIGN.md +220 -521
  134. package/web/references/kakaogames/DESIGN.md +220 -0
  135. package/web/references/kakaopay/DESIGN.md +207 -526
  136. package/web/references/karrot/DESIGN.md +227 -251
  137. package/web/references/kb-kookmin/DESIGN.md +308 -0
  138. package/web/references/kbank/DESIGN.md +220 -175
  139. package/web/references/kmong/DESIGN.md +281 -356
  140. package/web/references/krds/DESIGN.md +245 -19
  141. package/web/references/kream/DESIGN.md +224 -359
  142. package/web/references/kurly/DESIGN.md +211 -533
  143. package/web/references/lamborghini/DESIGN.md +198 -360
  144. package/web/references/lguplus/DESIGN.md +259 -0
  145. package/web/references/likelion/DESIGN.md +283 -0
  146. package/web/references/line/DESIGN.md +396 -355
  147. package/web/references/linear.app/DESIGN.md +209 -562
  148. package/web/references/lotteon/DESIGN.md +386 -0
  149. package/web/references/lovable/DESIGN.md +255 -349
  150. package/web/references/makinarocks/DESIGN.md +149 -349
  151. package/web/references/maum-ai/DESIGN.md +423 -0
  152. package/web/references/medibloc/DESIGN.md +425 -0
  153. package/web/references/megabox/DESIGN.md +232 -0
  154. package/web/references/mercari/DESIGN.md +217 -434
  155. package/web/references/microsoft/DESIGN.md +234 -388
  156. package/web/references/mildang/DESIGN.md +411 -0
  157. package/web/references/millie/DESIGN.md +183 -504
  158. package/web/references/minimax/DESIGN.md +264 -322
  159. package/web/references/miricanvas/DESIGN.md +182 -355
  160. package/web/references/miro/DESIGN.md +234 -232
  161. package/web/references/mistral.ai/DESIGN.md +231 -314
  162. package/web/references/mixi/DESIGN.md +234 -0
  163. package/web/references/moin/DESIGN.md +445 -0
  164. package/web/references/mongodb/DESIGN.md +219 -316
  165. package/web/references/musinsa/DESIGN.md +184 -510
  166. package/web/references/mynavi/DESIGN.md +242 -0
  167. package/web/references/myrealtrip/DESIGN.md +169 -406
  168. package/web/references/naver/DESIGN.md +328 -499
  169. package/web/references/naverwebtoon/DESIGN.md +172 -395
  170. package/web/references/nhn/DESIGN.md +169 -346
  171. package/web/references/nhncloud/DESIGN.md +185 -123
  172. package/web/references/notion/DESIGN.md +271 -475
  173. package/web/references/nrise/DESIGN.md +417 -0
  174. package/web/references/ohouse/DESIGN.md +210 -549
  175. package/web/references/oliveyoung/DESIGN.md +217 -326
  176. package/web/references/ollama/DESIGN.md +241 -308
  177. package/web/references/onestore/DESIGN.md +248 -0
  178. package/web/references/palantir/DESIGN.md +256 -0
  179. package/web/references/panasonic/DESIGN.md +276 -0
  180. package/web/references/patternfly/DESIGN.md +259 -0
  181. package/web/references/payhere/DESIGN.md +438 -0
  182. package/web/references/pega/DESIGN.md +262 -0
  183. package/web/references/peoplefund/DESIGN.md +431 -0
  184. package/web/references/petfriends/DESIGN.md +428 -0
  185. package/web/references/pinkfong/DESIGN.md +199 -367
  186. package/web/references/pinterest/DESIGN.md +258 -308
  187. package/web/references/poya/DESIGN.md +286 -0
  188. package/web/references/pozalabs/DESIGN.md +438 -0
  189. package/web/references/protopie/DESIGN.md +419 -0
  190. package/web/references/qraft/DESIGN.md +448 -0
  191. package/web/references/quotabook/DESIGN.md +449 -0
  192. package/web/references/recruit/DESIGN.md +247 -0
  193. package/web/references/remember/DESIGN.md +202 -396
  194. package/web/references/resend/DESIGN.md +274 -348
  195. package/web/references/sakura-internet/DESIGN.md +269 -0
  196. package/web/references/samsung/DESIGN.md +157 -359
  197. package/web/references/sandoll/DESIGN.md +445 -0
  198. package/web/references/sanity/DESIGN.md +241 -375
  199. package/web/references/scatterlab/DESIGN.md +412 -0
  200. package/web/references/selectstar/DESIGN.md +439 -0
  201. package/web/references/servicenow/DESIGN.md +289 -0
  202. package/web/references/shinhanbank/DESIGN.md +161 -341
  203. package/web/references/shinhancard/DESIGN.md +208 -319
  204. package/web/references/sionic/DESIGN.md +454 -0
  205. package/web/references/sktelecom/DESIGN.md +310 -0
  206. package/web/references/socar/DESIGN.md +125 -32
  207. package/web/references/softbank/DESIGN.md +231 -0
  208. package/web/references/sony/DESIGN.md +234 -0
  209. package/web/references/soop/DESIGN.md +261 -0
  210. package/web/references/spacex/DESIGN.md +184 -323
  211. package/web/references/spotify/DESIGN.md +253 -394
  212. package/web/references/squeezebits/DESIGN.md +441 -0
  213. package/web/references/stayfolio/DESIGN.md +422 -0
  214. package/web/references/stripe/DESIGN.md +212 -491
  215. package/web/references/supabase/DESIGN.md +244 -316
  216. package/web/references/tabling/DESIGN.md +415 -0
  217. package/web/references/taishinbank/DESIGN.md +243 -0
  218. package/web/references/teamlab/DESIGN.md +240 -0
  219. package/web/references/teamsparta/DESIGN.md +472 -0
  220. package/web/references/tellingme/DESIGN.md +392 -0
  221. package/web/references/tesla/DESIGN.md +244 -427
  222. package/web/references/thsr/DESIGN.md +284 -0
  223. package/web/references/thumbtack/DESIGN.md +302 -0
  224. package/web/references/together.ai/DESIGN.md +257 -304
  225. package/web/references/toss/DESIGN.md +251 -593
  226. package/web/references/toss-securities/DESIGN.md +255 -178
  227. package/web/references/tossbank/DESIGN.md +195 -491
  228. package/web/references/toyota/DESIGN.md +238 -0
  229. package/web/references/tving/DESIGN.md +197 -245
  230. package/web/references/typed/DESIGN.md +413 -0
  231. package/web/references/uber/DESIGN.md +256 -333
  232. package/web/references/udn/DESIGN.md +250 -0
  233. package/web/references/upbit/DESIGN.md +145 -256
  234. package/web/references/upstage/DESIGN.md +211 -204
  235. package/web/references/uswds/DESIGN.md +287 -0
  236. package/web/references/vercel/DESIGN.md +236 -440
  237. package/web/references/wanted/DESIGN.md +215 -487
  238. package/web/references/wise/DESIGN.md +223 -231
  239. package/web/references/wisetracker/DESIGN.md +462 -0
  240. package/web/references/wooribank/DESIGN.md +245 -0
  241. package/web/references/yanolja/DESIGN.md +250 -419
  242. package/web/references/yeogiotte/DESIGN.md +235 -418
  243. package/web/references/zapier/DESIGN.md +256 -377
  244. package/web/references/zendesk/DESIGN.md +288 -0
  245. package/web/references/zigzag/DESIGN.md +200 -621
  246. package/dist/install-skills-7UUDOLG2.js +0 -734
  247. package/dist/install-skills-7UUDOLG2.js.map +0 -1
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  id: tossbank
3
3
  name: Toss Bank
4
+ display_name_kr: 토스뱅크
4
5
  country: KR
5
6
  category: fintech
6
7
  homepage: "https://www.tossbank.com"
@@ -8,569 +9,272 @@ primary_color: "#0064FF"
8
9
  logo:
9
10
  type: favicon
10
11
  slug: "https://www.google.com/s2/favicons?domain=tossbank.com&sz=128"
11
- verified: "2026-05-27"
12
+ verified: "2026-07-13"
12
13
  omd: "0.1"
14
+ ds:
15
+ name: Toss Brand Resource Center
16
+ url: "https://brand.toss.im/"
17
+ type: brand
18
+ description: Official Toss group mark and color guidance; it is not a Toss Bank product-UI token source.
19
+ verification_v2:
20
+ schema: 2
21
+ checked: "2026-07-13"
22
+ surfaces:
23
+ - { id: home, kind: marketing, url: "https://www.tossbank.com/", inspected: "2026-07-12" }
24
+ - { id: product-disclosure, kind: documentation, url: "https://www.tossbank.com/customer/product-disclosure", inspected: "2026-07-12" }
25
+ - { id: protected-products, kind: documentation, url: "https://www.tossbank.com/customer/protected-products", inspected: "2026-07-12" }
26
+ - { id: brand-assets, kind: brand-assets, url: "https://brand.toss.im/", inspected: "2026-07-13" }
27
+ sources:
28
+ - { id: home-live, kind: product-surface, url: "https://www.tossbank.com/", captured: "2026-07-12" }
29
+ - { id: disclosure-live, kind: product-surface, url: "https://www.tossbank.com/customer/product-disclosure", captured: "2026-07-12" }
30
+ - { id: protected-live, kind: product-surface, url: "https://www.tossbank.com/customer/protected-products", captured: "2026-07-12" }
31
+ - { id: brand-resource, kind: brand-asset, url: "https://brand.toss.im/", captured: "2026-07-13" }
32
+ - { id: tps-history, kind: official-doc, url: "https://toss.im/tossfeed/article/beginning-of-tps", captured: "2026-07-13" }
33
+ - { id: tds-design-tool, kind: official-doc, url: "https://developers-apps-in-toss.toss.im/design/prepare/design.html", captured: "2026-07-13" }
34
+ - { id: bank-story, kind: official-doc, url: "https://www.tossbank.com/ten-million", captured: "2026-07-13" }
35
+ conflicts: []
36
+ claims:
37
+ "tokens.colors.brand": &brand { surface_id: brand-assets, source_id: brand-resource, method: official-doc, captured: "2026-07-13" }
38
+ "tokens.colors.brand-gray": *brand
39
+ "tokens.colors.primary": &live { surface_id: home, source_id: home-live, method: live-inspect, captured: "2026-07-12" }
40
+ "tokens.colors.canvas": &docs { surface_id: protected-products, source_id: protected-live, method: live-inspect, captured: "2026-07-12" }
41
+ "tokens.colors.foreground": *live
42
+ "tokens.colors.foreground-strong": *docs
43
+ "tokens.colors.foreground-secondary": *docs
44
+ "tokens.colors.muted": *live
45
+ "tokens.colors.hairline": *live
46
+ "tokens.colors.border": *live
47
+ "tokens.colors.surface-muted": *docs
48
+ "tokens.typography.family.sans": *live
49
+ "tokens.typography.marketing-title.size": *live
50
+ "tokens.typography.marketing-title.weight": *live
51
+ "tokens.typography.marketing-title.lineHeight": *live
52
+ "tokens.typography.marketing-title.use": *live
53
+ "tokens.typography.navigation.size": *live
54
+ "tokens.typography.navigation.weight": *live
55
+ "tokens.typography.navigation.lineHeight": *live
56
+ "tokens.typography.navigation.use": *live
57
+ "tokens.typography.docs-body.size": *docs
58
+ "tokens.typography.docs-body.weight": *docs
59
+ "tokens.typography.docs-body.lineHeight": *docs
60
+ "tokens.typography.docs-body.use": *docs
61
+ "tokens.typography.docs-utility.size": *docs
62
+ "tokens.typography.docs-utility.weight": *docs
63
+ "tokens.typography.docs-utility.lineHeight": *docs
64
+ "tokens.typography.docs-utility.use": *docs
65
+ "tokens.spacing.xs": *live
66
+ "tokens.spacing.sm": *live
67
+ "tokens.spacing.md": *live
68
+ "tokens.spacing.lg": *live
69
+ "tokens.spacing.xl": *live
70
+ "tokens.rounded.none": *live
71
+ "tokens.rounded.compact": *live
72
+ "tokens.rounded.pill": *docs
73
+ "tokens.shadow.none": *live
74
+ "tokens.components.docs-outline-button.type": *docs
75
+ "tokens.components.docs-outline-button.fg": *docs
76
+ "tokens.components.docs-outline-button.radius": *docs
77
+ "tokens.components.docs-outline-button.padding": *docs
78
+ "tokens.components.docs-outline-button.font": *docs
79
+ "tokens.components.docs-outline-button.states": *docs
80
+ "tokens.components.docs-outline-button.use": *docs
81
+ "tokens.components.docs-tab.type": *docs
82
+ "tokens.components.docs-tab.fg": *docs
83
+ "tokens.components.docs-tab.padding": *docs
84
+ "tokens.components.docs-tab.font": *docs
85
+ "tokens.components.docs-tab.states": *docs
86
+ "tokens.components.docs-tab.use": *docs
13
87
  tokens:
14
- source: prose-derived
15
- extracted: "2026-06-09"
88
+ source: reconciled
89
+ extracted: "2026-07-12"
16
90
  colors:
17
- primary: "#3182f6"
18
- primary-hover: "#2272eb"
19
- primary-light: "#e8f3ff"
20
91
  brand: "#0064ff"
21
92
  brand-gray: "#202632"
93
+ primary: "#3182f6"
22
94
  canvas: "#ffffff"
23
- surface: "#f2f4f6"
24
- grey-50: "#f9fafb"
25
- heading: "#191f28"
26
- grey-800: "#333d4b"
27
- grey-700: "#4e5968"
28
- body: "#6b7684"
29
- muted: "#8b95a1"
30
- placeholder: "#b0b8c1"
31
- border: "#e5e8eb"
32
- border-strong: "#d1d6db"
33
- on-primary: "#ffffff"
34
- error: "#f04452"
35
- success: "#03b26c"
36
- warning: "#fe9800"
37
- caution: "#ffc342"
95
+ foreground: "#212529"
96
+ foreground-strong: "#191f28"
97
+ foreground-secondary: "#4e5968"
98
+ muted: "#6b7684"
99
+ hairline: "#e5e8eb"
100
+ border: "#d1d6db"
101
+ surface-muted: "#f2f4f6"
38
102
  typography:
39
- family: { sans: "Toss Product Sans", mono: "SF Mono" }
40
- display-hero: { size: 30, weight: 700, lineHeight: 1.33, use: "Onboarding, hero moments" }
41
- display-lg: { size: 26, weight: 700, lineHeight: 1.38, use: "Section headers, key metrics" }
42
- heading-lg: { size: 22, weight: 700, lineHeight: 1.36, use: "Feature titles, modal headers" }
43
- heading: { size: 20, weight: 600, lineHeight: 1.40, use: "Card headings, sub-sections" }
44
- subtitle: { size: 16, weight: 600, lineHeight: 1.50, use: "List headers, nav titles" }
45
- body-lg: { size: 16, weight: 400, lineHeight: 1.50, use: "Descriptions, explanations" }
46
- body: { size: 14, weight: 400, lineHeight: 1.57, use: "Standard reading text" }
47
- caption: { size: 12, weight: 400, lineHeight: 1.50, use: "Timestamps, fine print, rate disclaimers" }
48
- spacing: { xs: 4, sm: 8, md: 12, base: 16, lg: 24, xl: 32, xxl: 48 }
49
- rounded: { sm: 8, md: 12, lg: 16, full: 9999 }
50
- shadow:
51
- standard: "0px 2px 8px rgba(0,0,0,0.08)"
52
- elevated: "0px 4px 12px rgba(0,0,0,0.12)"
53
- sheet: "0px -4px 12px rgba(0,0,0,0.08)"
103
+ family: { sans: "Toss Product Sans" }
104
+ marketing-title: { size: 48, weight: 700, lineHeight: 1.3, use: "One observed marketing-home heading; not an app display scale." }
105
+ navigation: { size: 15, weight: 500, lineHeight: 1.5, use: "Observed public-site navigation control text." }
106
+ docs-body: { size: 16, weight: 400, lineHeight: 1.5, use: "Observed product-disclosure and protected-products content text." }
107
+ docs-utility: { size: 11, weight: 600, lineHeight: 1.6, use: "Observed compact documentation control text." }
108
+ spacing: { xs: 4, sm: 8, md: 12, lg: 16, xl: 32 }
109
+ rounded: { none: 0, compact: 20, pill: 40 }
110
+ shadow: { none: "none" }
54
111
  components_harvested: true
55
112
  components:
56
- button-fill-primary: { type: button, bg: "#3182f6", fg: "#ffffff", radius: 16, padding: "0 20px", font: "17/600", use: "Primary CTA, 56px tall" }
57
- button-fill-dark: { type: button, bg: "#4e5968", fg: "#ffffff", radius: 16, padding: "0 20px", font: "17/600", use: "Strong neutral action" }
58
- button-fill-danger: { type: button, bg: "#f04452", fg: "#ffffff", radius: 16, padding: "0 20px", font: "17/600", use: "Destructive confirmation" }
59
- input-box: { type: input, fg: "#333d4b", radius: 14, padding: "14px 16px", font: "17/400", use: "Standard form input" }
60
- input-error: { type: input, fg: "#333d4b", radius: 14, padding: "14px 16px", font: "17/400", use: "hasError state, 1px border #f04452" }
61
- card-account: { type: card, bg: "#ffffff", radius: 16, padding: "24px", use: "Account/balance hero card" }
62
- card-standard: { type: card, bg: "#ffffff", radius: 12, padding: "20px", use: "Transaction summary, product cards" }
63
- card-compact: { type: listItem, bg: "#ffffff", radius: 8, padding: "12px", use: "Transaction list row, 1px border #e5e8eb" }
64
- badge-blue: { type: badge, bg: "#3182f6", fg: "#ffffff", radius: 12, padding: "3px 7px", font: "13/700", use: "Status emphasis NEW" }
65
- badge-elephant: { type: badge, fg: "#4e5968", radius: 12, padding: "3px 7px", font: "13/700", use: "Neutral metadata badge" }
66
- toast: { type: toast, bg: "#191f28", fg: "#ffffff", radius: 8, padding: "12px 16px", font: "14/500", use: "Transient feedback" }
67
- sheet: { type: dialog, bg: "#ffffff", fg: "#191f28", radius: 16, padding: "24px 20px", use: "Bottom sheet, top corners only" }
68
- segmented: { type: tab, bg: "#f2f4f6", fg: "#8b95a1", radius: 12, padding: "8px 16px", font: "14/600", use: "Segmented switch", active: "bg #ffffff, text #191f28" }
69
- toggle: { type: toggle, bg: "#3182f6", radius: 9999, use: "On #3182f6 / off #d1d6db, white 18px thumb" }
113
+ docs-outline-button: { type: button, fg: "#4e5968", radius: 40, padding: "4px 10px", font: "11/600 Toss Product Sans", states: "Collector labels focus/hover/pressed on the documented control; interactionCount is 0, so no state value is specified.", use: "Observed default documentation-chrome button on the two customer-information routes only." }
114
+ docs-tab: { type: tab, fg: "#212529", padding: "9px 14px", font: "16/400 Toss Product Sans", states: "Selected only (aria-selected=true); no other tab state was captured.", use: "Observed selected documentation tab at product-disclosure only." }
70
115
  ---
71
116
 
72
117
  # Design System Inspiration of Toss Bank (토스뱅크)
73
118
 
74
119
  ## 1. Visual Theme & Atmosphere
75
120
 
76
- Toss Bank is the licensed internet-only bank inside the Toss universe the moment the calm, blue-accented Toss design language stops being a money-transfer convenience and becomes an actual chartered bank holding your deposits. Where the parent Toss app feels like a friend who happens to handle money, Toss Bank carries a slightly heavier responsibility: this is a *bank*, regulated, FSS-supervised, holding real balances and issuing real cards. The design resolves that tension by doubling down on the same calm-confident minimalism rather than reaching for institutional gravitas. The canvas is clean white (`#ffffff`), headings are a warm near-black charcoal (`#191f28`), and a single confident blue does all the interactive work. The atmosphere is "trustworthy because it's clear, not because it's stern."
121
+ Toss Bank is a Korean bank whose public site presents banking products, customer information, and a campaign asking people to describe banking experiences worth changing. The public home uses short, benefit-led Korean headlines for accounts, savings, loans, foreign exchange, cards, and always-available support; the campaign’s central line is “은행을 바꾸는 은행.” That combination gives the public-facing work a direct, conversational register rather than the ceremonial tone associated with conventional bank marketing. The live capture nevertheless contains three different source domains: the home is a marketing surface, while product disclosure and protected-products are documentation chrome. They share a loaded typeface and familiar blue/gray values, but neither route is evidence for the authenticated Toss Bank app or for financial-flow components. [Toss Bank home](https://www.tossbank.com/) · [campaign](https://www.tossbank.com/ten-million)
77
122
 
78
- The brand color is the official Toss blue `#0064FF` (Pantone 2175 C) the same cerulean that anchors the entire Viva Republica family. On marketing and brand surfaces it appears as that saturated `#0064FF`; in the running product UI, interactive elements lean on the slightly softer, more legible `#3182f6` (blue500) inherited from the shared Toss design language. This brand-vs-UI blue split is deliberate and load-bearing: `#0064FF` is the logo and the promise, `#3182f6` is the tappable surface. The optimism of the color is the entire thesis — money at a bank can feel light, not bureaucratic.
79
-
80
- Typography is **Toss Product Sans**, the custom typeface developed with Sandoll and Leedotype for financial contexts, where numerals and Latin characters are optically balanced against Korean hangul and financial symbols (`%`, comma separators, `±`) are tuned for small-size legibility. Toss Bank leans hard on tabular (fixed-width) numerals — a bank is, at its core, a column of numbers, and those numbers must never jitter.
123
+ The group’s official resource center identifies Toss Blue `#0064FF` and Toss Gray `#202632`, and includes a Toss Bank affiliate logo. Those are brand-asset facts. The supplied live capture separately shows `#3182f6` in public-site text and borders; it is retained as an observed public-surface value, not silently equated with the official logo color. The resulting reference is intentionally narrow: clear typography, sparse borders, and public information controls are verified; account, transfer, card, status, and authenticated-app patterns are not.
81
124
 
82
125
  **Key Characteristics:**
83
- - Toss brand blue `#0064FF` (Pantone 2175 C) for logo/marketing; UI blue `#3182f6` for interactive surfaces
84
- - Clean white canvas (`#ffffff`) with warm charcoal text (`#191f28`) — trust through clarity, not weight
85
- - Toss Product Sans with Korean-Latin optical balancing and tabular numerals for balances and rates
86
- - Minimal, single-layer black shadows — visual noise reads as a credibility tax in banking
87
- - "이자 every day" product story: interest accruing daily is a recurring hero motif
88
- - 375px mobile-first baseline; spacious summary screens, dense detail screens
89
- - Blue is interaction, never decoration — illustrations and ornaments stay neutral
90
126
 
91
- ## 2. Color Palette & Roles
127
+ - Official Toss brand blue `#0064FF` and gray `#202632` for group identity assets
128
+ - Loaded Toss Product Sans across the captured public home and customer-information routes
129
+ - `#3182f6` observed in public-site control text/borders, alongside neutral documentation colors
130
+ - Marketing, documentation chrome, and unobserved authenticated banking flows kept separate
131
+ - Only selector-backed public controls are described; app-style cards, forms, and transaction states are omitted
92
132
 
93
- Toss Bank reuses the shared Toss design-language palette. Brand-tier `#0064FF` is verified from the official Toss brand resource center (brand.toss.im, Pantone 2175 C); UI-tier blues follow the documented Toss Product/TDS scale.
133
+ ## 2. Color Palette & Roles
94
134
 
95
- ### Brand (Logo / Marketing)
96
- - **Toss Brand Blue** (`#0064FF`): Pantone 2175 C. Logo lockup, marketing hero blocks, app icon. The promise color.
97
- - **Brand Gray** (`#202632`): Secondary brand color (Pantone 433 C). Corporate, legal, and footer contexts.
135
+ ### Official brand assets
98
136
 
99
- ### Primary (UI Interactive)
100
- - **Toss Blue** (`#3182f6`): `blue500`. Primary interactive color — CTAs, links, active states, selection. The workhorse of every tappable element in-product.
101
- - **Blue Hover** (`#2272eb`): `blue600`. Hover / pressed state for blue500 elements.
102
- - **Blue Light** (`#e8f3ff`): `blue50`. Informational backgrounds, subtle blue-tinted surfaces, "이자 받기" highlight blocks.
137
+ - **Toss Blue** (`#0064ff`): official Toss brand color, specified by the group resource center for brand use.
138
+ - **Toss Gray** (`#202632`): official Toss brand gray, also specified by the group resource center.
103
139
 
104
- ### Surfaces
105
- - **Pure White** (`#ffffff`): Page background, card surfaces.
106
- - **Grey 50** (`#f9fafb`): Lightest gray surface, section backgrounds.
107
- - **Grey 100** (`#f2f4f6`): Secondary background, card fills, disabled surfaces, skeleton blocks.
140
+ ### Observed public surfaces
108
141
 
109
- ### Text
110
- - **Dark Charcoal** (`#191f28`): `grey900`. Primary headings, balances, strongest text. Warm near-black.
111
- - **Grey 800** (`#333d4b`): Strong labels, navigation text.
112
- - **Grey 700** (`#4e5968`): Emphasized body text, sub-headings.
113
- - **Grey 600** (`#6b7684`): Body text, descriptions, metadata.
114
- - **Grey 500** (`#8b95a1`): Caption text, secondary labels.
115
- - **Grey 400** (`#b0b8c1`): Placeholder text, disabled icon fills.
142
+ - **Public control blue** (`#3182f6`): repeated public-site text and border value on all three captured routes.
143
+ - **Canvas** (`#ffffff`): observed documentation-route background.
144
+ - **Foreground** (`#212529`): repeated public text value across the capture.
145
+ - **Strong foreground** (`#191f28`): observed on both documentation routes.
146
+ - **Secondary foreground** (`#4e5968`) and **muted text** (`#6b7684`): observed documentation and public-site text values.
147
+ - **Border** (`#d1d6db`) and **hairline** (`#e5e8eb`): observed public-route border values.
148
+ - **Muted surface** (`#f2f4f6`): observed background on the protected-products route.
116
149
 
117
- ### Borders
118
- - **Border Default** (`#e5e8eb`): grey200. Standard card borders, dividers, input outlines.
119
- - **Border Strong** (`#d1d6db`): grey300. Emphasized borders, active input outlines.
150
+ ### Boundary
120
151
 
121
- ### Semantic
122
- - **Error Red** (`#f04452`): `red500`. Errors, destructive actions, negative balance/expense indicators.
123
- - **Success Green** (`#03b26c`): `green500`. Positive indicators, interest earned, confirmations.
124
- - **Warning Orange** (`#fe9800`): `orange500`. Pending states, attention-needed.
125
- - **Caution Yellow** (`#ffc342`): `yellow500`. Soft warnings, highlight moments.
152
+ No captured evidence establishes semantic success/error colors, a universal CTA fill, or a Toss Bank app color system. Brand-asset colors are not promoted to product controls, and the observed public control blue is not presented as a replacement for the official brand color.
126
153
 
127
154
  ## 3. Typography Rules
128
155
 
129
- ### Font Family
130
- - **Primary**: `"Toss Product Sans", "Tossface", "SF Pro KR", "SF Pro Display", -apple-system, BlinkMacSystemFont, "Apple SD Gothic Neo", Roboto, "Noto Sans KR", sans-serif`
131
- - **Monospace**: `"SF Mono", SFMono-Regular, Menlo, Consolas, monospace`
132
- - **Emoji**: `Tossface` Toss's custom emoji font, decorative only, never on balance-handling screens
133
-
134
- ### Hierarchy
135
-
136
- | Role | Font | Size | Weight | Line Height | Notes |
137
- |------|------|------|--------|-------------|-------|
138
- | Display Hero | Toss Product Sans | 30px | 700 | 40px (1.33) | Onboarding, hero moments |
139
- | Display Large | Toss Product Sans | 26px | 700 | 36px (1.38) | Section headers, key metrics |
140
- | Heading Large | Toss Product Sans | 22px | 700 | 30px (1.36) | Feature titles, modal headers |
141
- | Heading | Toss Product Sans | 20px | 600 | 28px (1.40) | Card headings, sub-sections |
142
- | Subtitle | Toss Product Sans | 16px | 600 | 24px (1.50) | List headers, nav titles |
143
- | Body Large | Toss Product Sans | 16px | 400 | 24px (1.50) | Descriptions, explanations |
144
- | Body | Toss Product Sans | 14px | 400 | 22px (1.57) | Standard reading text |
145
- | Caption | Toss Product Sans | 12px | 400 | 18px (1.50) | Timestamps, fine print, rate disclaimers |
146
- | Balance Display | Toss Product Sans | 30px+ | 700 | tight | Account balance — tabular numerals |
147
-
148
- ### Principles
149
- - **Three weights from eight**: ships 300–950, UI uses 400 (body), 600 (emphasis), 700 (balances + headings).
150
- - **Tabular numerals for money**: balances, interest rates, transaction amounts all use fixed-width digits so columns never shift.
151
- - **Korean-Latin optical balance**: hangul and Latin/numerals independently weighted so mixed text reads harmoniously.
152
- - **Rate legibility**: `%` and decimal points (interest is sold in 0.1% increments) get enhanced small-size clarity.
156
+ ### Evidence classes
157
+
158
+ - **Live computed surface-use:** **Toss Product Sans** is the computed family on 672 captured elements across the home and both customer-information routes. The collector reports a matching loaded FontFaceSet entry with 1,536 static.toss.im font-source URLs, so it is the verified public-web family for this reference.
159
+ - **Official product-use and history:** Toss says it developed Toss Product Sans as a product typeface for financial, mobile, and digital contexts, initially with Sandoll and later with Leedotype. This explains the typeface’s financial-context intent but does not establish unobserved Toss Bank app sizes or components. [Official typeface history](https://toss.im/tossfeed/article/beginning-of-tps)
160
+ - **Official distributed asset / license boundary:** Apps in Toss documentation says the Figma kit uses SF Pro because Toss Product Sans is difficult to distribute as a separate asset, while Toss apps apply Toss Product Sans automatically. The reviewed material does not grant an independent font-file license for this reference. [TDS design-tool guidance](https://developers-apps-in-toss.toss.im/design/prepare/design.html)
161
+ - **Declared/system families:** Tossface, SF Pro, Apple SD Gothic Neo, Roboto, Noto Sans, and emoji families occur in the computed fallback declaration. They have no loaded-font match in the supplied evidence and are not promoted to Toss Bank UI tokens.
162
+
163
+ ### Observed hierarchy
164
+
165
+ | Role | Size | Weight | Line height | Source boundary |
166
+ |------|------|--------|-------------|-----------------|
167
+ | Marketing title | 48px | 700 | 62.4px | One home marketing heading |
168
+ | Public navigation | 15px | 500 | 22.5px | Home navigation controls |
169
+ | Documentation body | 16px | 400 | 24px | Product-disclosure and protected-products routes |
170
+ | Documentation utility | 11px | 600 | 17.6px | Compact documentation control |
171
+
172
+ Do not substitute SF Pro, Pretendard, Inter, or a system font and label it Toss Product Sans. Conversely, the non-loadable fallback declaration remains useful compatibility context but is not treated as a product font source.
153
173
 
154
174
  ## 4. Component Stylings
155
175
 
156
- ### Buttons
157
-
158
- Toss Bank reuses the TDS `<Button>` system variant × color × size, default `xlarge` (56px). Geometry follows the shared Toss Product Sans / TDS Mobile scale.
159
-
160
- **Fill / Primary**
161
- - Background: `#3182f6`
162
- - Text: `#ffffff`
163
- - Border: none
164
- - Radius: 16px
165
- - Padding: 0 20px
166
- - Font: 17px / 600 / Toss Product Sans
167
- - Pressed: dim overlay via `--button-pressed-opacity`
168
- - Disabled: bg opacity scaled by `--button-disabled-opacity-color`
169
- - Use: Primary CTA (계좌 만들기, 이자 받기, 송금하기) — 56px tall
170
-
171
- **Fill / Dark**
172
- - Background: `#4e5968`
173
- - Text: `#ffffff`
174
- - Border: none
175
- - Radius: 16px
176
- - Padding: 0 20px
177
- - Font: 17px / 600 / Toss Product Sans
178
- - Use: Strong neutral action (설정 저장, 본인인증 진행)
179
-
180
- **Fill / Danger**
181
- - Background: `#f04452`
182
- - Text: `#ffffff`
183
- - Border: none
184
- - Radius: 16px
185
- - Padding: 0 20px
186
- - Font: 17px / 600 / Toss Product Sans
187
- - Use: Destructive confirmation (계좌 해지, 카드 분실신고)
188
-
189
- **Weak / Primary**
190
- - Background: `rgba(100, 168, 255, 0.15)`
191
- - Text: `#2272eb`
192
- - Border: none
193
- - Radius: 16px
194
- - Padding: 0 20px
195
- - Font: 17px / 600 / Toss Product Sans
196
- - Use: Secondary action paired with Fill / Primary on the same screen
197
-
198
- **Weak / Dark**
199
- - Background: `rgba(2, 32, 71, 0.05)`
200
- - Text: `#4e5968`
201
- - Border: none
202
- - Radius: 16px
203
- - Padding: 0 20px
204
- - Font: 17px / 600 / Toss Product Sans
205
- - Use: Cancel / neutral secondary (취소, 닫기, 나중에 하기)
206
-
207
- Size scale (height · font · radius): `small` 32px · 13px/600 · 8px; `medium` 38px · 15px/600 · 10px; `large` 48px · 17px/600 · 14px; `xlarge` (default) 56px · 17px/600 · 16px. Display modes: `inline`, `block`, `full`.
208
-
209
- ### Inputs
210
-
211
- Toss Bank reuses TDS `<TextField>` (`box` default, plus `line` / `big` / `hero`). `SecureKeypad` (randomised-position PIN) and `SplitTextField` (OTP / 인증번호) are first-class for the banking flows.
212
-
213
- **Box (default)**
214
- - Background: `rgba(0, 23, 51, 0.02)`
215
- - Text: `#333d4b`
216
- - Border: 1px solid `rgba(2, 32, 71, 0.05)`
217
- - Radius: 14px
218
- - Padding: 14px 16px
219
- - Font: 17px / 400 / Toss Product Sans
220
- - Placeholder: `#b0b8c1`
221
- - Focus: border `#3182f6`
222
- - Use: Standard form input — account name, memo
223
-
224
- **Hero (amount entry)**
225
- - Background: transparent
226
- - Text: `#333d4b`
227
- - Border: 1px solid `#e5e8eb` (bottom only)
228
- - Radius: 0px
229
- - Padding: 0px 0px 4px
230
- - Font: 30px / 600 / Toss Product Sans
231
- - Use: Large transfer/deposit amount entry — tabular numerals
232
-
233
- **Error**
234
- - Background: `rgba(0, 23, 51, 0.02)`
235
- - Text: `#333d4b`
236
- - Border: 1px solid `#f04452`
237
- - Radius: 14px
238
- - Padding: 14px 16px
239
- - Font: 17px / 400 / Toss Product Sans
240
- - Use: `hasError` state — paired with inline help in `#f04452`
241
-
242
- ### Cards
243
-
244
- **Account / Balance Card**
245
- - Background: `#ffffff`
246
- - Border: none
247
- - Radius: 16px
248
- - Padding: 24px
249
- - Shadow: `0px 2px 8px rgba(0,0,0,0.08)`
250
- - Use: The hero surface — account name, balance (30px/700, tabular), "이자 매일 받기" affordance
251
-
252
- **Standard Card**
253
- - Background: `#ffffff`
254
- - Border: none
255
- - Radius: 12px
256
- - Padding: 20px
257
- - Shadow: `0px 2px 8px rgba(0,0,0,0.08)`
258
- - Use: Transaction summary, product cards
259
-
260
- **Compact (list row)**
261
- - Background: `#ffffff`
262
- - Border: 1px solid `#e5e8eb`
263
- - Radius: 8px
264
- - Padding: 12px
265
- - Shadow: none
266
- - Use: Transaction list rows where a soft 1px edge replaces shadow
267
-
268
- ### Badges
269
-
270
- **Fill / Blue**
271
- - Background: `#3182f6`
272
- - Text: `#ffffff`
273
- - Border: none
274
- - Radius: 12px
275
- - Padding: 3px 7px
276
- - Font: 13px / 700 / Toss Product Sans
277
- - Use: Status emphasis ("NEW", "한도 상향")
278
-
279
- **Weak / Green**
280
- - Background: `rgba(34, 197, 94, 0.15)`
281
- - Text: `#16a34a`
282
- - Border: none
283
- - Radius: 12px
284
- - Padding: 3px 7px
285
- - Font: 13px / 700 / Toss Product Sans
286
- - Use: Interest-earned / completed state (입금 완료)
287
-
288
- **Weak / Elephant**
289
- - Background: `rgba(2, 32, 71, 0.05)`
290
- - Text: `#4e5968`
291
- - Border: none
292
- - Radius: 12px
293
- - Padding: 3px 7px
294
- - Font: 13px / 700 / Toss Product Sans
295
- - Use: Neutral metadata badge (적금, 입출금)
296
-
297
- ### Tabs
298
-
299
- **Bottom Tab (Active)**
300
- - Background: `#ffffff`
301
- - Text: `#191f28`
302
- - Border: 1px solid `#e5e8eb` (top border only)
303
- - Active: `#3182f6` icon + label
304
- - Font: 11px / 500 / Toss Product Sans
305
- - Use: Bottom navigation — fixed white, no shadow
306
-
307
- **Segmented**
308
- - Background: `#f2f4f6`
309
- - Text: `#8b95a1`
310
- - Border: none
311
- - Radius: 12px
312
- - Padding: 8px 16px
313
- - Active: `#ffffff` bg + `#191f28` text + `0px 2px 4px rgba(0,0,0,0.06)` shadow
314
- - Font: 14px / 600 / Toss Product Sans
315
- - Use: 입금/출금 내역 switching, 월/주 전환
316
-
317
- ### Toasts
318
-
319
- **Default**
320
- - Background: `#191f28`
321
- - Text: `#ffffff`
322
- - Border: none
323
- - Radius: 8px
324
- - Padding: 12px 16px
325
- - Shadow: `0px 4px 12px rgba(0,0,0,0.12)`
326
- - Font: 14px / 500 / Toss Product Sans
327
- - Use: Transient feedback ("복사되었어요"). Money-moved success is a dedicated screen, never a toast.
328
-
329
- ### Dialogs
330
-
331
- **Bottom Sheet**
332
- - Background: `#ffffff`
333
- - Text: `#191f28`
334
- - Border: none
335
- - Radius: 16px (top corners only)
336
- - Padding: 24px 20px
337
- - Shadow: `0px -4px 12px rgba(0,0,0,0.08)`
338
- - Use: Selection, picker, secondary form (account picker, 송금 확인)
339
-
340
- ### Toggles
341
-
342
- **Default**
343
- - Background: `#3182f6` (on) / `#d1d6db` (off)
344
- - Border: none
345
- - Radius: 9999px
346
- - Thumb: `#ffffff` 18px circle, `0px 1px 2px rgba(0,0,0,0.1)` shadow
347
- - Use: 매일 이자 받기 자동화, 알림 설정
176
+ ### Public marketing home
177
+
178
+ **Pill actionobserved default**
179
+ - Background: #fdfdfe
180
+ - Text: #212529
181
+ - Radius: 100px
182
+ - Padding: 18px 32px
183
+ - Font: 16px / 400 / Toss Product Sans
184
+ - Use: `home::[data-omd-capture="28"]`, a single public-home action with a 63px rendered height. It is marketing evidence only.
185
+
186
+ ### Customer-information documentation chrome
187
+
188
+ **Outline button observed default**
189
+ - Text: #4e5968
190
+ - Border: 1px solid #4e5968
191
+ - Radius: 40px
192
+ - Padding: 4px 10px
193
+ - Font: 11px / 600 / Toss Product Sans
194
+ - Use: `surface-2::[data-omd-capture="10"]`, also repeated on `surface-3`; 28px rendered height.
195
+
196
+ **Documentation tab observed selected**
197
+ - Text: #212529
198
+ - Padding: 9px 14px
199
+ - Font: 16px / 400 / Toss Product Sans
200
+ - Use: `surface-2::[data-omd-capture="29"]`, `role="tab"` and `aria-selected="true"`; 40px rendered height.
201
+
202
+ The raw artifact labels some public buttons with focus/hover/pressed state markers but contains no interaction snapshots (`interactionCount: 0`). No state styling is therefore specified. No authenticated-app button, account card, input, badge, toast, sheet, toggle, error, success, or mobile navigation variant had selector and surface provenance in this update.
348
203
 
349
204
  ---
205
+ **Verified:** 2026-07-13
206
+ **Tier 1 sources:** https://www.tossbank.com/; https://www.tossbank.com/customer/product-disclosure; https://www.tossbank.com/customer/protected-products; https://brand.toss.im/; https://toss.im/tossfeed/article/beginning-of-tps; https://developers-apps-in-toss.toss.im/design/prepare/design.html; https://www.tossbank.com/ten-million
207
+ **Tier 2 sources:** https://getdesign.md/tossbank (attempted; no usable record returned); https://styles.refero.design/?q=tossbank (attempted; no usable record returned)
208
+ **Conflicts unresolved:** none
350
209
 
351
- **Verified:** 2026-05-27
352
- **Tier 1 sources:** tossbank.com (live WebFetch — confirmed clean white canvas, minimal text-link CTAs `자세히 보기`, benefit-driven Korean copy `이자 2배 쌓여요`, "Forbes 국내 은행 1위" positioning); brand.toss.im (Toss brand resource center — `#0064FF` Pantone 2175 C confirmed). Component geometry inherited from the documented TDS Mobile / Toss Product Sans design language (shared across the Viva Republica family).
353
- **Tier 2 sources:** getdesign.md/tossbank — not checked. styles.refero.design — not checked.
354
- **Conflicts unresolved:** Brand blue `#0064FF` (logo/marketing, verified) vs. UI blue `#3182f6` (in-product interactive, inherited from shared Toss design language) — treated as distinct surfaces per Toss brand-vs-UI-blue precedent.
210
+ The previous reference inferred a mobile-bank application system from shared TDS patterns. This update retains only source-backed public values and components, while preserving separately confirmed Toss brand and typeface context.
355
211
 
356
212
  ## 5. Layout Principles
357
213
 
358
- ### Spacing System
359
- - Base unit: 8px
360
- - Common values: 4, 8, 12, 16, 20, 24, 32, 40, 48
361
- - Horizontal padding: 20px (slightly wider than typical 16px)
362
- - Financial data grids: tighter 4px internal spacing
363
-
364
- ### Grid & Container
365
- - Design baseline: 375px mobile width
366
- - Content: full-width with 20px horizontal padding
367
- - Single-column, mobile-first — no explicit multi-column grid
368
- - Transaction lists: full-width rows, amounts right-aligned
369
-
370
- ### Whitespace Philosophy
371
- - **Breathing room for money.** A balance at 30px with 32px margins communicates security through spaciousness.
372
- - **Progressive density.** Summary screens are spacious; detail / transaction screens are dense.
373
- - **Grouped by function.** Deposit / transfer / card actions separated by 24px+; related data within a group uses 8–12px gaps.
374
-
375
- ### Border Radius Scale
376
- - Compact (8px): inputs, small buttons, compact cards
377
- - Comfortable (12px): standard cards, dialog corners
378
- - Large (16px): account cards, buttons, bottom-sheet top corners
379
- - Pill (9999px): toggles, chips
214
+ The supplied desktop capture exposes public marketing and documentation layouts, not an authenticated banking-screen grid. Observed spacing values cluster at 4, 8, 12, 16, and 32px; documentation controls use compact padding while the home pill action uses 18px 32px. A 375px baseline, transaction alignment rules, safe-area behavior, and an app layout grid were not captured and are omitted.
380
215
 
381
216
  ## 6. Depth & Elevation
382
217
 
383
- | Level | Treatment | Use |
384
- |-------|-----------|-----|
385
- | Flat (0) | No shadow | Page background, inline elements |
386
- | Subtle (1) | `0px 1px 3px rgba(0,0,0,0.06)` | List item separation |
387
- | Standard (2) | `0px 2px 8px rgba(0,0,0,0.08)` | Cards, account/balance panels |
388
- | Elevated (3) | `0px 4px 12px rgba(0,0,0,0.12)` | Dropdowns, floating buttons |
389
- | Modal (4) | `0px 8px 24px rgba(0,0,0,0.16)` | Bottom sheets, dialogs |
390
-
391
- **Shadow philosophy.** Single-layer, pure black, low opacity. No colored shadows. In a chartered bank's UI, visual noise undermines trust — elevation is communicated through subtle opacity, not drama. Restraint *is* the brand statement.
218
+ The representative public controls have `box-shadow: none`. No evidence in this run supports a card, sheet, modal, floating-action, or elevation scale. Use flat public-surface controls only where their documented source domain applies; do not infer banking-product depth rules.
392
219
 
393
220
  ## 7. Do's and Don'ts
394
221
 
395
222
  ### Do
396
- - Use UI blue `#3182f6` for every interactive element; reserve `#0064FF` for logo/marketing
397
- - Use tabular numerals for all balances, rates, and transaction amounts
398
- - Use 700 weight for balances and headings, 400 for body, 600 for emphasis
399
- - Show interest earned / income in green (`#03b26c`), expenses in red (`#f04452`)
400
- - Use blue50 (`#e8f3ff`) for "이자 받기" and informational highlight blocks
401
- - Keep money-moved confirmation as a dedicated screen, never a toast
402
223
 
403
- ### Don't
404
- - Don't confuse brand blue `#0064FF` with UI blue `#3182f6`
405
- - Don't use heavy or colored shadows depth comes from layering, not drama
406
- - Don't use bold (700) for body text reserved for headings and amounts
407
- - Don't approximate money (`약 120만원`) on primary surfaces — exact numerals only
408
- - Don't decorate financial data displays — clarity is the aesthetic
409
- - Don't introduce a second saturated accent hue; blue is the sole interactive color
224
+ - Keep official brand assets (`#0064ff`, `#202632`) distinct from live public-interface observations.
225
+ - Use Toss Product Sans only when the deployment can load the verified family or is explicitly within its official platform boundary.
226
+ - Preserve the marketing-home and customer-information source domains on documented controls.
227
+ - Treat the selected documentation tab as a selected documentation state, not a general app tab pattern.
410
228
 
411
- ## 8. Responsive Behavior
412
-
413
- ### Breakpoints
414
- | Name | Width | Key Changes |
415
- |------|-------|-------------|
416
- | Mobile (Primary) | <480px | Full fidelity, 375px baseline |
417
- | Tablet | 480–768px | Expanded cards, optional side margins |
418
- | Desktop (Web) | >768px | Centered column, max-width ~480px for mobile-web parity |
229
+ ### Don't
419
230
 
420
- ### Touch Targets
421
- - Buttons: xlarge ~56px, large ~48px, medium ~38px
422
- - List rows: minimum 52px height for financial actions
423
- - SecureKeypad: large 56–64px targets
231
+ - Do not turn the observed `#3182f6` text/border value into a universal filled banking CTA.
232
+ - Do not reuse the public pill action as a transfer, account-opening, or confirmation component.
233
+ - Do not invent hover, pressed, focus, error, disabled, success, or responsive variants from this artifact.
234
+ - Do not substitute a system font and call it Toss Product Sans.
424
235
 
425
- ### Collapsing Strategy
426
- - Desktop web mirrors mobile in a centered column
427
- - Bottom sheet → centered modal on larger screens
428
- - Sticky bottom CTA bar with safe-area insets
236
+ ## 8. Responsive Behavior
429
237
 
430
- ### Image Behavior
431
- - Card art / product imagery: consistent sizing within context
432
- - Charts (interest history): full-width, responsive, aspect-ratio preserved
238
+ Only a 1440×900 collector viewport was supplied. No mobile viewport, breakpoint, responsive layout change, touch-target policy, or safe-area behavior was observed. Re-verification needs public mobile captures before this reference can describe responsive rules.
433
239
 
434
240
  ## 9. Agent Prompt Guide
435
241
 
436
- ### Quick Color Reference
437
- - Primary CTA: UI Blue `#3182f6` (hover `#2272eb`)
438
- - Brand / logo only: `#0064FF`
439
- - Background: White `#ffffff`; surface `#f2f4f6`
440
- - Heading: Charcoal `#191f28`; body `#6b7684`; caption `#8b95a1`
441
- - Placeholder: `#b0b8c1`; border `#e5e8eb`
442
- - Success/interest: Green `#03b26c`; error/expense: Red `#f04452`
443
-
444
- ### Example Component Prompts
445
- - "Create a Toss Bank account card: white bg, 16px radius, 24px padding, shadow 0px 2px 8px rgba(0,0,0,0.08). Account name 14px/400 #8b95a1, balance 30px/700 #191f28 tabular numerals + '원' 20px/400. A blue50 (#e8f3ff) pill below reading '이자 받기' in #2272eb."
446
- - "Build a send-money button: #3182f6 bg, white 17px/600 text, 56px tall, 16px radius, full-width. Pressed: dim overlay. Disabled: opacity drop."
447
- - "Design a transaction row: full-width, 16px h-padding, 52px min-height. Left: 32px circle icon + counterparty (14px/600 #191f28) + category (12px/400 #8b95a1). Right: amount 14px/600, #f04452 expense / #03b26c income, tabular."
448
- - "Create a SecureKeypad-style PIN entry: randomised digit grid, 6 dots above, each key 56px, 14px digit #191f28."
449
-
450
- ### Iteration Guide
451
- 1. Full Toss Product Sans stack with Korean fallbacks
452
- 2. Interactive = `#3182f6`; brand `#0064FF` is logo/marketing only
453
- 3. Money = 700 weight, tabular numerals, right-aligned in lists
454
- 4. Radius: 8px inputs, 12px cards, 16px account cards/sheets, pill toggles
455
- 5. Single-layer pure-black shadows, no tints
456
- 6. Mobile-first 375px, 20px h-padding
457
-
458
- ---
242
+ For a public Toss Bank marketing or customer-information concept, use the verified source boundary: official group blue `#0064ff` for brand context; observed public control blue `#3182f6` only as a text/border observation; neutral text and hairlines; and Toss Product Sans only when it can actually load. Do not generate an account dashboard, money transfer flow, banking status state, or universal TDS component from this reference—the current evidence does not establish them.
459
243
 
460
244
  ## 10. Voice & Tone
461
245
 
462
- Toss Bank speaks like Toss — calm, unhurried, zero jargon but with one extra ounce of fiduciary care, because it actually holds your deposits. The default register is soft-polite `해요체` (`이자가 매일 쌓여요`, `계좌가 만들어졌어요`), the friendly-but-respectful Korean ending, never the cold `~습니다` corporate voice except in regulated disclosure. Korean is the unquestioned primary voice; English appears only in product names. Sentences end in periods; buttons do not. No emoji on money-handling screens.
463
-
464
- | Context | Tone |
465
- |---|---|
466
- | CTAs | Imperative short Korean verb (`계좌 만들기`, `이자 받기`, `송금하기`, `확인`). |
467
- | Success toasts | Past-tense single sentence, soft ending (`송금이 완료되었어요`). No emoji. |
468
- | Interest moments | Warm, concrete (`오늘 이자 23원이 쌓였어요`). Exact numerals, never rounded. |
469
- | Error messages | Specific + blameless + actionable. Never `문제가 발생했습니다`. |
470
- | Onboarding | Second-person, one idea per screen, no bullet lists. |
471
- | Balances | Bare numerals with comma separators + 원. `1,240,000원`, never `₩1.24M`. |
472
- | Legal / disclosure | Formal `합니다` register — the single exception. FSS-required rate and risk copy. |
246
+ The official home uses concise, benefit-led Korean phrasing such as “하루만 넣어도 이자가 쌓이는” and “쉽고 간편하게 시작해요.” The campaign directly asks for “바꾸고 싶은 불편한 은행 경험,” then says the bank will use those opinions to make a better bank. This supports a clear, constructive public voice; legal and disclosure wording remains a separate regulated content domain. [Home](https://www.tossbank.com/) · [campaign](https://www.tossbank.com/ten-million)
473
247
 
474
- **Forbidden phrases.** `불편을 드려 죄송합니다`, `Oops`, `죄송하지만`, `약 ~원` (approximation on money), rounded currency (`약 120만원`) on primary surfaces, English-first strings on Korean surfaces.
248
+ | Context | Observed direction |
249
+ |---------|--------------------|
250
+ | Product marketing | Short benefit plus a plain-language explanation |
251
+ | Participation campaign | Ask directly for a concrete inconvenient experience |
252
+ | Documentation | Keep product information distinct from promotional claims |
475
253
 
476
- **Voice samples.**
477
- - `이자 2배 쌓여요` — benefit-led product copy. <!-- verified: tossbank.com via WebFetch 2026-05-27 -->
478
- - `포브스 선정 국내 은행 1위` — trust/credential positioning. <!-- verified: tossbank.com via WebFetch 2026-05-27 -->
479
- - `오늘 이자 23원이 쌓였어요` — illustrative daily-interest moment. <!-- illustrative: follows Toss Bank's documented daily-interest product; not verified verbatim -->
480
- - `계좌가 만들어졌어요` — illustrative account-created confirmation. <!-- illustrative: not verified as live copy -->
254
+ Voice samples are quoted/paraphrased from the cited public pages, not a specification for unobserved in-app copy.
481
255
 
482
256
  ## 11. Brand Narrative
483
257
 
484
- Toss Bank (토스뱅크) is the internet-only bank of **Viva Republica** (비바리퍼블리카), the company behind Toss, founded by **Lee Seung-gun (이승건)**. It received its banking license and launched in **October 2021** as Korea's third internet-only bank, after Kakao Bank and K Bank. Where the Toss app had spent years making money *move* easily, Toss Bank set out to make a chartered bank *feel* easy — challenging the legacy KB / Shinhan / Woori / Hana incumbents not on rates alone but on the entire experience of holding an account.
258
+ Toss Bank frames itself publicly as a bank that changes banking: its home lists everyday bank products and services, while its campaign says it is still changing banks and invites people to name the experiences they want improved. The bank’s site also identifies a 24-hour customer center, placing accessibility of assistance alongside its product navigation. [Toss Bank home](https://www.tossbank.com/) · [campaign](https://www.tossbank.com/ten-million)
485
259
 
486
- The signature product story is **daily interest** `이자 매일 받기` where interest accrues and can be claimed each day rather than at term's end. It is a financial-product feature, but it's also a design thesis: it turns a passive, invisible bank balance into something you check, tap, and feel good about every morning. The blue `#0064FF` optimism carries straight through: a bank does not have to feel like filing taxes.
487
-
488
- What Toss Bank refuses: the institutional-indigo seriousness of legacy banking (Active-X plug-ins, 12-digit account numbers, forms that look like government paperwork), and equally the cartoonish playfulness of some consumer fintech. It occupies the same narrow middle as Toss — calm but optimistic, regulated but light. Every ornamental move costs clarity, and clarity is the trust.
260
+ Within the wider Toss identity, the official resource center supplies the group’s blue and gray brand assets and an affiliate-logo listing for Toss Bank. This is the right evidence for group identity and logo treatment, not for app-screen behavior or financial-product UI tokens. [Brand Resource Center](https://brand.toss.im/)
489
261
 
490
262
  ## 12. Principles
491
263
 
492
- 1. **Clarity is the trust signal.** A bank earns confidence by being legible, not stern. *UI implication:* white canvas, single-layer shadows, one interactive hue. If a screen looks "serious" through visual weight, simplify it instead.
493
- 2. **Numbers are typography.** Balances, rates, and amounts use 700 weight and tabular numerals with display-heading care. *UI implication:* never let a balance jitter between values or inherit body weight; right-align amounts in lists.
494
- 3. **Blue is interaction, not decoration.** UI `#3182f6` appears only where the user can tap. *UI implication:* illustrations, borders, and headers stay neutral; brand `#0064FF` is logo/marketing only.
495
- 4. **Exactness over approximation.** Money is never `약` (about). *UI implication:* show exact won amounts with comma separators; rounding is forbidden on primary surfaces.
496
- 5. **One action per screen.** Two primary buttons means two screens. *UI implication:* secondary actions are fine; two primaries are never.
497
- 6. **Daily delight, regulated honesty.** The daily-interest warmth lives beside FSS-required disclosure in formal `합니다`. *UI implication:* keep the two registers visually separate — warm `해요체` for product, formal for legal.
264
+ 1. **Make the promised outcome easy to scan.** The home groups products by account, savings, loans, foreign exchange, cards, and help. *UI implication:* public information should use clear categorization before decorative treatment.
265
+ 2. **Ask for a concrete banking problem.** The campaign explicitly requests an inconvenient bank experience. *UI implication:* feedback prompts should ask for one specific experience and clearly say how the response will be used.
266
+ 3. **Separate brand assets from product evidence.** Official group color rules and live public CSS answer different questions. *UI implication:* never convert a logo color or shared design-kit convention into an unobserved banking-flow token.
498
267
 
499
268
  ## 13. Personas
500
269
 
501
- *Personas are fictional archetypes informed by publicly described Korean internet-bank user segments, not individual people.*
502
-
503
- **현우 (Hyun-woo), 31, Seoul.** Product designer at a startup. Moved his salary account to Toss Bank for the daily interest and checks the `이자 받기` tap each morning like a tiny game. Expects the balance to paint in under 1s and the app to never make him feel like he's at a bank counter.
504
-
505
- **김여사 (Mrs. Kim), 58, Daejeon.** Runs a small flower shop. Her son set up Toss Bank for her. Uses it to receive customer transfers and pay suppliers. Trusts it because the numbers are big, clear, and exact — and because it never shows her anything that looks like a confusing form.
270
+ The public campaign names customers with roles including self-employed people, office workers, university students, and families. These are examples presented by Toss Bank, not a validated user-research segmentation model. [Campaign](https://www.tossbank.com/ten-million)
506
271
 
507
- **서연 (Seo-yeon), 24, Gwangju.** First job, first real savings. Opened her account entirely on her phone in minutes. Treats the daily-interest screen as a habit and tells friends "it actually feels good to check your bank app," which she'd never say about a legacy bank.
272
+ **Public-source audience cues:** people managing everyday accounts, people considering loans or foreign exchange, card users, and people who want to report a frustrating banking experience. No invented personal profiles are included because the current evidence does not support them.
508
273
 
509
274
  ## 14. States
510
275
 
511
- | State | Treatment |
512
- |---|---|
513
- | **Empty (no transactions)** | Single `grey700` line explaining why (`아직 거래내역이 없어요`) + one secondary action (blue50 bg, blue500 text). Never an illustration, never `데이터가 없습니다`. |
514
- | **Empty (filter cleared)** | Single `grey500` caption (`조건에 맞는 내역이 없어요`). No button. |
515
- | **Loading (first paint)** | Skeleton blocks at `#f2f4f6` matching final layout. Balances render as `--`, never as skeleton blocks. |
516
- | **Loading (refresh)** | Top pull-down spinner in blue500. No overlay; previous values stay visible. |
517
- | **Error (inline field)** | `#f04452` 2px border + red500 13px error text below. One actionable sentence (`계좌번호를 다시 확인해주세요`). |
518
- | **Error (toast)** | `#191f28` bg, white 14px/400, 3s auto-dismiss, one sentence, bottom 20px inset. |
519
- | **Error (screen-blocking)** | Server outage only. White screen, centered `grey900` 16px/600 line + retry in blue500. No illustration. |
520
- | **Success (money moved)** | Dedicated screen, not a toast. `#03b26c` checkmark top-center, exact amount 30px/700, recipient + timestamp, single `확인`. |
521
- | **Success (interest claimed)** | Brief blue50 flash behind the balance + `오늘 이자 N원이 쌓였어요` toast. |
522
- | **Skeleton** | `#f2f4f6` blocks at exact final dimensions, ~1.2s shimmer with 8% white highlight, component-radius rounding. Never on balances (show `--`). |
523
- | **Disabled** | Button opacity drops per `--button-disabled-opacity-color`; input borders stay `grey200` so geometry is stable. |
276
+ The supplied artifact records one selected documentation tab (`aria-selected="true"`). It contains no captured interaction snapshots and no selector-backed empty, loading, error, success, disabled, toast, or skeleton state. Those state specifications are intentionally absent rather than inferred from generic banking conventions.
524
277
 
525
278
  ## 15. Motion & Easing
526
279
 
527
- Toss Bank's motion is calm and precise money should never appear to flicker or bounce.
528
-
529
- **Durations:**
530
-
531
- | Token | Value | Use |
532
- |---|---|---|
533
- | `motion-instant` | 0ms | Toggle flips, checkbox states |
534
- | `motion-fast` | 150ms | Hover, focus, button press overlay |
535
- | `motion-standard` | 250ms | Default — sheet open, card expand, tab switch |
536
- | `motion-slow` | 400ms | Emphasized — success checkmark, onboarding advance |
537
- | `motion-page` | 350ms | Full-screen route transitions |
538
-
539
- **Easings:**
540
-
541
- | Token | Curve | Use |
542
- |---|---|---|
543
- | `ease-enter` | `cubic-bezier(0.0, 0.0, 0.2, 1)` | Sheets, toasts, screen pushes appearing |
544
- | `ease-exit` | `cubic-bezier(0.4, 0.0, 1, 1)` | Dismissals, pops |
545
- | `ease-standard` | `cubic-bezier(0.4, 0.0, 0.2, 1)` | Two-way transitions |
546
- | `ease-spring` | `cubic-bezier(0.34, 1.56, 0.64, 1)` | Reserved — money-moved / interest-claimed checkmark only |
547
-
548
- **Signature motions.**
549
- 1. **Balance update.** The old number slides up 20px and fades (`motion-fast / ease-exit`); the new number slides in from below (`motion-standard / ease-enter`). Never cross-fade money — flicker reads as a bug.
550
- 2. **Daily-interest claim.** Tapping `이자 받기` triggers a brief blue50 flash behind the balance and a small spring-eased number tick-up — the one routine place a touch of delight is licensed.
551
- 3. **Success checkmark.** Money-moved confirmation draws the checkmark over `motion-slow` with `ease-spring`. The only standard spring outside interest.
552
- 4. **Reduce motion.** Under `prefers-reduced-motion: reduce`, all tokens collapse to instant; cross-fades replace slides. No exceptions.
553
-
554
- <!--
555
- OmD v0.1 Sources — Philosophy Layer (sections 10–15)
556
-
557
- Tier 1 (UI tokens, §1–9): tossbank.com live WebFetch 2026-05-27 (clean white
558
- canvas, minimal text-link CTAs, benefit Korean copy `이자 2배 쌓여요`, Forbes
559
- top-bank positioning). Brand blue `#0064FF` Pantone 2175 C confirmed via
560
- brand.toss.im. Component geometry inherited from the shared documented TDS
561
- Mobile / Toss Product Sans design language used across the Viva Republica
562
- family; not independently re-inspected on tossbank.com surfaces.
563
-
564
- Tier 2 (founding/narrative): Toss Bank launched Oct 2021 as Korea's third
565
- internet-only bank under Viva Republica (이승건). Daily-interest (`이자 매일
566
- 받기`) is its signature documented product. Legacy-bank context (KB/Shinhan/
567
- Woori/Hana) is general industry knowledge.
568
-
569
- Voice samples: `이자 2배 쌓여요`, `포브스 선정 국내 은행 1위` verified live.
570
- `오늘 이자 23원이 쌓였어요`, `계좌가 만들어졌어요`, `송금이 완료되었어요`
571
- are ILLUSTRATIVE patterns following Toss Bank's `해요체` register and daily-
572
- interest product; not confirmed verbatim.
573
-
574
- Personas (§13) are fictional archetypes. Any resemblance to specific users is
575
- unintended.
576
- -->
280
+ No transition duration, easing curve, reduced-motion behavior, or animated state was captured on the supplied routes. Motion tokens are intentionally absent.