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
@@ -4,11 +4,11 @@ name: Banksalad
4
4
  country: KR
5
5
  category: fintech
6
6
  homepage: "https://www.banksalad.com"
7
- primary_color: "#04c584"
7
+ primary_color: "#13bd7e"
8
8
  logo:
9
9
  type: favicon
10
10
  slug: "https://www.google.com/s2/favicons?domain=banksalad.com&sz=256"
11
- verified: "2026-05-15"
11
+ verified: "2026-07-12"
12
12
  omd: "0.1"
13
13
  ds:
14
14
  name: Banksalad GitHub
@@ -16,179 +16,241 @@ ds:
16
16
  type: brand
17
17
  description: Banksalad's public GitHub org including styleguide repos and BPL (Banksalad Product Library) reference material.
18
18
  og_image: "https://avatars.githubusercontent.com/u/71009899?s=280&v=4"
19
+ verification_v2:
20
+ schema: 2
21
+ checked: "2026-07-12"
22
+ surfaces:
23
+ - { id: home, kind: marketing-product, url: "https://www.banksalad.com/", inspected: "2026-07-12" }
24
+ - { id: contents, kind: product-directory, url: "https://www.banksalad.com/contents", inspected: "2026-07-12" }
25
+ - { id: loan, kind: product-flow, url: "https://www.banksalad.com/loan/interest-rate-cut", inspected: "2026-07-12" }
26
+ - { id: safety, kind: support-product, url: "https://www.banksalad.com/customer-safety", inspected: "2026-07-12" }
27
+ - { id: card, kind: product-detail, url: "https://www.banksalad.com/product/cards/CARD002319", inspected: "2026-07-12" }
28
+ sources:
29
+ - { id: home-live, kind: product-surface, url: "https://www.banksalad.com/", captured: "2026-07-12" }
30
+ - { id: contents-live, kind: product-surface, url: "https://www.banksalad.com/contents", captured: "2026-07-12" }
31
+ - { id: loan-live, kind: product-surface, url: "https://www.banksalad.com/loan/interest-rate-cut", captured: "2026-07-12" }
32
+ - { id: safety-live, kind: product-surface, url: "https://www.banksalad.com/customer-safety", captured: "2026-07-12" }
33
+ - { id: card-live, kind: product-surface, url: "https://www.banksalad.com/product/cards/CARD002319", captured: "2026-07-12" }
34
+ - { id: bpl-design, kind: official-doc, url: "https://blog.banksalad.com/tech/banksalad-product-language-design/", captured: "2026-07-12" }
35
+ - { id: bpl-engineering, kind: official-doc, url: "https://blog.banksalad.com/tech/banksalad-product-language-ios/", captured: "2026-07-12" }
36
+ conflicts: []
37
+ claims:
38
+ "tokens.colors.primary": &home_evidence { surface_id: home, source_id: home-live, method: live-inspect, captured: "2026-07-12" }
39
+ "tokens.colors.action": &loan_evidence { surface_id: loan, source_id: loan-live, method: live-inspect, captured: "2026-07-12" }
40
+ "tokens.colors.canvas": *home_evidence
41
+ "tokens.colors.foreground": *home_evidence
42
+ "tokens.colors.secondary": *home_evidence
43
+ "tokens.colors.muted": &card_evidence { surface_id: card, source_id: card-live, method: live-inspect, captured: "2026-07-12" }
44
+ "tokens.colors.line": &safety_evidence { surface_id: safety, source_id: safety-live, method: live-inspect, captured: "2026-07-12" }
45
+ "tokens.typography.family.sans": *home_evidence
46
+ "tokens.typography.heading.size": *loan_evidence
47
+ "tokens.typography.heading.weight": *loan_evidence
48
+ "tokens.typography.heading.lineHeight": *loan_evidence
49
+ "tokens.typography.heading.tracking": *loan_evidence
50
+ "tokens.typography.heading.use": *loan_evidence
51
+ "tokens.typography.body.size": *home_evidence
52
+ "tokens.typography.body.weight": *home_evidence
53
+ "tokens.typography.body.lineHeight": *home_evidence
54
+ "tokens.typography.body.use": *home_evidence
55
+ "tokens.typography.label.size": *home_evidence
56
+ "tokens.typography.label.weight": *home_evidence
57
+ "tokens.typography.label.lineHeight": *home_evidence
58
+ "tokens.typography.label.tracking": *home_evidence
59
+ "tokens.typography.label.use": *home_evidence
60
+ "tokens.typography.caption.size": *card_evidence
61
+ "tokens.typography.caption.weight": *card_evidence
62
+ "tokens.typography.caption.lineHeight": *card_evidence
63
+ "tokens.typography.caption.tracking": *card_evidence
64
+ "tokens.typography.caption.use": *card_evidence
65
+ "tokens.spacing.sm": *home_evidence
66
+ "tokens.spacing.md": *home_evidence
67
+ "tokens.spacing.base": *home_evidence
68
+ "tokens.spacing.lg": *safety_evidence
69
+ "tokens.rounded.chip": &contents_evidence { surface_id: contents, source_id: contents-live, method: live-inspect, captured: "2026-07-12" }
70
+ "tokens.rounded.action": *loan_evidence
71
+ "tokens.rounded.card": *safety_evidence
72
+ "tokens.rounded.full": *home_evidence
73
+ "tokens.shadow.flat": *home_evidence
74
+ "tokens.components.primary-action.type": *loan_evidence
75
+ "tokens.components.primary-action.bg": *loan_evidence
76
+ "tokens.components.primary-action.fg": *loan_evidence
77
+ "tokens.components.primary-action.radius": *loan_evidence
78
+ "tokens.components.primary-action.padding": *loan_evidence
79
+ "tokens.components.primary-action.height": *loan_evidence
80
+ "tokens.components.primary-action.font": *loan_evidence
81
+ "tokens.components.primary-action.states": *loan_evidence
82
+ "tokens.components.primary-action.use": *loan_evidence
83
+ "tokens.components.filter-chip.type": *contents_evidence
84
+ "tokens.components.filter-chip.bg": *contents_evidence
85
+ "tokens.components.filter-chip.fg": *contents_evidence
86
+ "tokens.components.filter-chip.radius": *contents_evidence
87
+ "tokens.components.filter-chip.padding": *contents_evidence
88
+ "tokens.components.filter-chip.font": *contents_evidence
89
+ "tokens.components.filter-chip.states": *contents_evidence
90
+ "tokens.components.filter-chip.use": *contents_evidence
91
+ "tokens.components.safety-card.type": *safety_evidence
92
+ "tokens.components.safety-card.bg": *safety_evidence
93
+ "tokens.components.safety-card.border": *safety_evidence
94
+ "tokens.components.safety-card.radius": *safety_evidence
95
+ "tokens.components.safety-card.padding": *safety_evidence
96
+ "tokens.components.safety-card.use": *safety_evidence
97
+ "tokens.components.disclosure-row.type": *card_evidence
98
+ "tokens.components.disclosure-row.bg": *card_evidence
99
+ "tokens.components.disclosure-row.fg": *card_evidence
100
+ "tokens.components.disclosure-row.radius": *card_evidence
101
+ "tokens.components.disclosure-row.padding": *card_evidence
102
+ "tokens.components.disclosure-row.font": *card_evidence
103
+ "tokens.components.disclosure-row.use": *card_evidence
19
104
  tokens:
20
- source: prose-derived
21
- extracted: "2026-06-08"
105
+ source: reconciled
106
+ extracted: "2026-07-12"
107
+ note: "Five current first-party web surfaces. Pretendard is loaded and used; swiper-icons is declared-only. Legacy #04c584, BM JUA, 2px-default components, inputs, charts, and modal claims were not promoted."
22
108
  colors:
23
- primary: "#04c584"
24
- primary-hover: "#10df99"
25
- brand: "#04c584"
109
+ primary: "#13bd7e"
110
+ action: "#06a96c"
26
111
  canvas: "#ffffff"
27
- foreground: "#2b2b2b"
28
- muted: "#7b7b7b"
29
- on-primary: "#ffffff"
30
- surface-alt: "#fbfbfb"
31
- surface-neutral: "#f5f5f5"
32
- body: "#434444"
33
- placeholder: "#999999"
34
- disabled: "#acacac"
35
- hairline: "#e1e1e1"
36
- mint-tint: "#f3fdfa"
37
- error: "#fe493d"
38
- error-soft: "#ff8a84"
39
- warning: "#fd8700"
40
- warning-deep: "#f56200"
41
- info: "#0099ff"
42
- success: "#04c584"
43
- chart-1: "#34464b"
44
- chart-2: "#5c818a"
45
- chart-3: "#1c6c73"
46
- chart-4: "#a7c7cf"
112
+ foreground: "#111111"
113
+ secondary: "#555c68"
114
+ muted: "#9fa4b0"
115
+ line: "#f0f2f5"
47
116
  typography:
48
- family: { sans: "Pretendard", display: "BM JUA" }
49
- hero-display: { size: 52, weight: 700, lineHeight: 1.23, tracking: -1, use: "Largest landing headline; sometimes Jua" }
50
- display-lg: { size: 48, weight: 700, lineHeight: 1.2, tracking: -1, use: "Secondary hero" }
51
- display: { size: 44, weight: 700, lineHeight: 1.25, tracking: -1, use: "Section-opening figures (balances, scores)" }
52
- section-heading: { size: 36, weight: 700, lineHeight: 1.3, tracking: -0.5, use: "Marketing section titles" }
53
- h1: { size: 28, weight: 700, lineHeight: 1.14, use: "In-app section titles" }
54
- h2: { size: 24, weight: 700, lineHeight: 1.17, use: "Card titles, panel headings" }
55
- h3: { size: 20, weight: 700, lineHeight: 1.2, use: "Sub-card headings" }
56
- subhead: { size: 18, weight: 700, lineHeight: 1.3, use: "Featured-button text, key callouts" }
57
- body-lg: { size: 16, weight: 500, lineHeight: 1.5, use: "Standard reading text on data screens" }
58
- body: { size: 14, weight: 500, lineHeight: 1.34, use: "Default body text; 500 not 400" }
59
- body-tight: { size: 13, weight: 500, lineHeight: 1.34, use: "Compact labels" }
60
- caption: { size: 12, weight: 500, lineHeight: 1.34, use: "Metadata, helper text" }
61
- caption-sm: { size: 10, weight: 500, lineHeight: 1, use: "Disclosures, smallest labels" }
62
- button: { size: 16, weight: 700, lineHeight: 1, tracking: -1, use: "All CTAs are 700" }
63
- financial-amount: { size: 24, weight: 700, lineHeight: 1, use: "Comma-grouped, won unit follows in 500" }
64
- spacing: { xs: 4, sm: 8, md: 16, base: 16, lg: 24, xl: 32, xxl: 48, section: 64 }
65
- rounded: { sm: 2, md: 4, lg: 8, full: 9999 }
117
+ family: { sans: "Pretendard" }
118
+ heading: { size: 20, weight: 700, lineHeight: 1.4, tracking: 0, use: "Product and safety section headings" }
119
+ body: { size: 16, weight: 400, lineHeight: 1.5, use: "Shared product body and list content" }
120
+ label: { size: 16, weight: 700, lineHeight: 1.625, tracking: -0.08, use: "Prominent product labels and actions" }
121
+ caption: { size: 14, weight: 500, lineHeight: 1.43, tracking: -0.07, use: "Product metadata and helper text" }
122
+ spacing: { sm: 8, md: 12, base: 16, lg: 24 }
123
+ rounded: { chip: 6, action: 16, card: 24, full: 9999 }
66
124
  shadow:
67
- soft: "rgba(0,0,0,0.08) 0px 1px 1px 0px"
68
- standard: "rgba(0,0,0,0.12) 0px 2px 5px 0px"
69
- elevated: "rgba(0,0,0,0.15) 0px 4px 9px 0px"
70
- modal: "rgba(0,0,0,0.19) 0px 17px 50px 0px"
125
+ flat: "none"
71
126
  components_harvested: true
72
127
  components:
73
- button-primary: { type: button, bg: "#04c584", fg: "#ffffff", radius: "2px", height: "42px", padding: "12px 24px", font: "16px / 700", hover: "bg #10df99 (lightens)", use: "Primary CTA on data/transactional flows" }
74
- button-primary-large: { type: button, bg: "#04c584", fg: "#ffffff", radius: "2px", height: "56px", padding: "16px 32px", font: "18px / 700", hover: "bg #10df99", use: "Hero CTA on landing surfaces" }
75
- button-ghost: { type: button, bg: "#ffffff", fg: "#04c584", border: "1px solid #04c584", radius: "2px", padding: "12px 24px", font: "16px / 700", hover: "bg #f3fdfa mint tint", use: "Secondary action paired with primary" }
76
- button-neutral: { type: button, bg: "#f5f5f5", fg: "#434444", radius: "2px", padding: "12px 24px", font: "16px / 700", hover: "bg #e1e1e1", use: "Cancel / dismiss" }
77
- button-disabled: { type: button, bg: "#e1e1e1", fg: "#acacac", radius: "2px", font: "16px / 700", use: "Disabled state" }
78
- input-text: { type: input, bg: "#ffffff", fg: "#434444", border: "1px solid #e1e1e1", radius: "2px", height: "48px", padding: "0 16px", font: "16px / 500", focus: "border #10df99 + bg #f3fdfa", use: "Default text input" }
79
- input-amount: { type: input, bg: "#ffffff", fg: "#2b2b2b", border: "2px solid #f5f5f5", radius: "2px", height: "56px", padding: "0 16px", font: "22px / 700", focus: "border #10df99 + bg #f3fdfa", use: "Won-amount input, right-aligned, money as heading" }
80
- card-data: { type: card, bg: "#ffffff", border: "1px solid #e1e1e1", radius: "2px", padding: "20px 24px", shadow: "rgba(0,0,0,0.12) 0px 2px 5px 0px", use: "Recommendation/transaction/summary cards" }
81
- card-highlight: { type: card, bg: "#f3fdfa", border: "1px solid #10df99", radius: "2px", padding: "20px 24px", use: "Selected/recommended-pick in comparison lists" }
82
- status-pill: { type: badge, bg: "#f3fdfa", fg: "#04c584", radius: "41px", padding: "4px 10px", font: "12px / 500", use: "Filter chips on recommendation pages" }
83
- badge-warning: { type: badge, bg: "#ffffff", fg: "#f56200", border: "1px solid #fd8700", radius: "2px", padding: "2px 8px", font: "12px / 700", use: "Rate-warning, expiry indicators" }
84
- badge-negative: { type: badge, bg: "#ffffff", fg: "#fe493d", border: "1px solid #fe493d", radius: "2px", padding: "2px 8px", font: "12px / 700", use: "Overdue, declined indicators" }
85
- table-row: { type: listItem, bg: "#ffffff", fg: "#434444", border: "1px solid #e1e1e1 bottom", padding: "12px 16px", font: "14px / 500", use: "Transaction rows; alternates #fbfbfb, amounts right-aligned 14px/700 #2b2b2b positive #fe493d negative" }
128
+ primary-action: { type: button, bg: "#06a96c", fg: "#ffffff", radius: "16px", padding: "16px 20px", height: "56px", font: "16px / 700", states: "default captured; no safe active interaction expansion", use: "Full-width primary action in the public interest-rate flow" }
129
+ filter-chip: { type: button, bg: "rgba(19,189,126,0.15)", fg: "#13bd7e", radius: "6px", padding: "10px 12px", font: "16px / 500", states: "default captured; no safe active interaction expansion", use: "Content-directory category or filter action" }
130
+ safety-card: { type: card, bg: "#ffffff", border: "1px solid #f0f2f5", radius: "24px", padding: "24px", use: "Customer-safety action and guidance card" }
131
+ disclosure-row: { type: listItem, bg: "transparent", fg: "#111111", radius: "0px", padding: "24px 20px", font: "16px / 400", use: "Expandable disclosure row on a public card product detail" }
86
132
  ---
87
133
 
88
134
  # Design System Inspiration of Banksalad
89
135
 
90
136
  ## 1. Visual Theme & Atmosphere
91
137
 
92
- Banksalad (뱅크샐러드) is the design language of a **trustworthy financial advisor that runs on data, not optimism**. Where Toss flattens money into one cheerful gesture and KakaoPay wraps it in Kakao yellow, Banksalad insists that *more information, clearly presented*, is the actual brand promise. The home page opens on a white canvas (`#ffffff`/`#fbfbfb`) with warm near-black text (`#2b2b2b` for headings, `#434444` for body never pure `#000`), anchored by a saturated mint-green `#04c584` that does all the interactive work. The green is specifically a **salad-leaf green** (the brand name is literally "Bank + Salad" financial data freshly tossed for you), warmer than Spotify's `#1db954` and far brighter than the corporate teal that legacy Korean banks default to.
138
+ Banksalad is a Korean data-driven financial platform that helps people compare products, understand credit and spending, and connect finance with a broader health-asset proposition. Its current public web surfaces feel informational rather than decorative: a white `#ffffff` canvas, dense but readable Pretendard typography, near-black `#111111` content, and green actions that keep comparison and next steps visible. The most repeated current accent is `#13bd7e`, while a consequential full-width loan action uses the deeper `#06a96c`. This reference follows the live product surfaces and the official Banksalad Product Language publications separately, preserving BPL's collaboration philosophy without pretending its 2020 component values are necessarily identical to today's public web implementation.
93
139
 
94
- The single most distinctive geometric choice is the radius scale. The CSS bundle contains **81 occurrences of `border-radius: 2px`** and only 5 of 8px and 3 of 4px. Banksalad is **almost-flat**: 2px is just enough to take the harshness off a corner without softening anything into "app-friendly" plumpness. This is a deliberate rejection of the Toss/Kakao consumer-app idiom (12–16px). It tells the user: this is data, not a toy. The tabular density follows from the same conviction cards pack rows of numbers tightly, and the 700-weight Pretendard digits never apologize for taking up space.
140
+ Current geometry is role-specific rather than governed by one sharp-corner default. The content directory uses a compact 6px green chip, the public loan action uses a 16px radius, customer-safety cards use 24px corners with a `#f0f2f5` border, and a carousel indicator uses a full pill. Plain lists and disclosure rows remain square. The earlier claim that 2px was the dominant current system came from a legacy CSS bundle and is not promoted in this pass.
95
141
 
96
- Typography pairs **Pretendard** (the de-facto Korean modern sans, designed by Kil Hyun-jin, weight-axis variable) with **BM JUA** ("배민 주아체", Battle Grounds Jua — a rounded, friendly Korean display face) as an accent. Pretendard does 99% of the work; Jua appears only for marketing/landing display moments where Banksalad wants to feel warm rather than clinical. The default weight is **700** (160 of 304 weight declarations) Banksalad numbers and headings are confident and chunky, with 500 as the secondary "emphasis on body" weight. Light weights (300) appear ~26 times only for the largest hero numerals where the size carries the authority.
142
+ Typography is consistently Pretendard across the five inspected surfaces. The collector matched loaded Pretendard font faces to 603 visible elements spanning body, headings, buttons, cards, and list items. `swiper-icons` was declared but not used for visible text. BM JUA was not declared or visibly used in this fresh capture, so it is not a current UI or marketing token; its earlier promotion has been removed. The observed hierarchy relies mainly on 16px body and labels, 14px supporting copy, and 18–20px headings with 400/500/700 weights.
97
143
 
98
144
  **Key Characteristics:**
99
- - Pretendard + Apple SD Gothic Neo + Noto Sans KR font stack — Korean-native typography first
100
- - "BM JUA" as accent display font for landing/promotional moments only
101
- - Signature green `#04c584` (mint, salad-leaf) for all interactive moments
102
- - Hover/focus green `#10df99` (one shade brighter) interaction makes things *lighter*, not darker
103
- - 2px radius dominance the brand reads as data-tool, not consumer-app
104
- - Warm near-black `#2b2b2b`/`#434444` for type instead of `#000000`
105
- - Mint focus tint `#f3fdfa` on input backgrounds — the only branded background tint in the system
106
- - 700 weight as default for headings and financial figures; 500 for body emphasis
107
- - Subtle single-layer shadows `0 2px 5px rgba(0,0,0,.12)` — never colored, never theatrical
108
- - Teal-gray data palette (`#34464b`/`#5c818a`/`#1c6c73`/`#a7c7cf`) for chart series — cool, advisor-grade
145
+ - Loaded Pretendard across all five current public web surfaces
146
+ - Current accent `#13bd7e`; deeper action green `#06a96c`
147
+ - White `#ffffff` canvas with `#111111` foreground, `#555c68` secondary text, and `#9fa4b0` muted metadata
148
+ - Role-specific 6px / 16px / 24px / full-pill geometry
149
+ - 8px, 12px, 16px, and 24px as recurring useful spacing values
150
+ - Public product evidence covers buttons, cards, and list/disclosure rows; inputs, charts, dialogs, and authenticated app states remain unpromoted
109
151
 
110
152
  ## 2. Color Palette & Roles
111
153
 
112
154
  ### Primary
113
- - **Salad Green** (`#04c584`): Primary brand color, CTA backgrounds, links, accent rules, financial-status accents. Mint with a touch of grass — readable on white, energetic but not playful.
114
- - **Hover Green** (`#10df99`): Brighter mint applied on hover, focus border, and the resting state of less-prominent CTAs. Banksalad lightens to indicate interaction (opposite of the conventional darken-on-hover pattern).
115
- - **Mint Tint** (`#f3fdfa`): Focus background on inputs, success surface fill. The only branded tint in the system.
155
+ - **Current accent** (`#13bd7e`): repeated green text and border color across home, contents, loan, and card-detail surfaces.
156
+ - **Primary action** (`#06a96c`): full-width loan-flow action background, paired with `#ffffff` text.
157
+ - The previous `#04c584` and `#10df99` values were not observed in the five-surface capture and are not current canonical tokens.
116
158
 
117
159
  ### Heading & Body
118
- - **Heading** (`#2b2b2b`): Warm near-black for headlines, prominent labels, and financial amounts. Never `#000`.
119
- - **Body** (`#434444`): Standard reading text. Filled-input text color.
120
- - **Body Light** (`#7b7b7b`): Captions, secondary descriptions.
121
- - **Placeholder** (`#999999`): Input placeholders, muted metadata.
122
- - **Disabled** (`#acacac` / `#c0c0c0`): Disabled text and icons.
160
+ - **Foreground** (`#111111`): dominant heading, body, and list text across all five surfaces.
161
+ - **Secondary** (`#555c68`): supporting copy on home, contents, and card detail.
162
+ - **Neutral** (`#606874`): explanatory copy in loan and customer-safety contexts.
163
+ - **Muted** (`#9fa4b0`): product metadata and subdued actions on contents and card detail.
123
164
 
124
165
  ### Surface & Border
125
- - **Page** (`#ffffff`): Default canvas.
126
- - **Surface Light** (`#fbfbfb`): Soft surface alternation, panel fills.
127
- - **Surface Neutral** (`#f5f5f5`): Dividers, separator backgrounds, content shelf fills (most-used neutral after green).
128
- - **Border Input** (`#e1e1e1`): Default input border, divider line.
129
- - **Surface Mint** (`#f3fdfa`): Success-state surface fill.
130
-
131
- ### Data / Chart Palette (teal-slate family)
132
- - **Deep Slate** (`#0b0c0c`): Maximum-depth axis labels.
133
- - **Teal-Slate 900** (`#333a44`): Primary chart series.
134
- - **Teal-Slate 800** (`#34464b`): Secondary chart series, table headers.
135
- - **Teal-Slate 700** (`#436068`): Tertiary chart.
136
- - **Teal 600** (`#1c6c73`): Highlighted data point.
137
- - **Teal-Gray 500** (`#5c818a`): Subdued data, legend.
138
- - **Teal 400** (`#318b93`): Mid-range fills.
139
- - **Pale Teal** (`#a7c7cf`): Background fills for chart bands.
140
-
141
- The teal-slate family is intentionally **cooler than the brand green**, so that chart series read as neutral data rather than as branded surfaces. Banksalad's green is for interaction; teal-slate is for information.
142
-
143
- ### Semantic
144
- - **Error Red** (`#fe493d`): Strong error states, blocking validation.
145
- - **Error Soft** (`#ff8a84`): Light error tint, secondary error indicators.
146
- - **Warning Orange** (`#fd8700`): Warning emphasis (rate spikes, expiry).
147
- - **Warning Deep** (`#f56200`): Highest-severity warning.
148
- - **Warning Light** (`#ff9900`): Soft warning highlights.
149
- - **Info Blue** (`#0099ff`): External links, info notices (used sparingly — green is the default link color).
150
- - **Success Green** (`#04c584` / `#10df99` / `#13bd7e`): Success uses brand green; there is no separate success hue.
166
+ - **Canvas** (`#ffffff`): default current page and card surface.
167
+ - **Line** (`#f0f2f5`): observed 1px customer-safety card border.
168
+ - **Transparent**: most navigation, list, disclosure, and utility controls stay unfilled.
169
+
170
+ ### Unresolved color groups
171
+
172
+ No current public chart, authenticated dashboard, input validation, warning, error, or success-state palette was safely captured. Those legacy groups are omitted rather than mapped to plausible greens, reds, or teals.
151
173
 
152
174
  ## 3. Typography Rules
153
175
 
176
+ ### Font evidence boundary
177
+
178
+ | Evidence class | Resolution |
179
+ |---|---|
180
+ | Official product-use | BPL publications establish an official product-language system, but do not publish a current universal font token in the inspected text. |
181
+ | Live surface-use | Five public web surfaces loaded and visibly used Pretendard on 603 elements. |
182
+ | Official distributed asset | No Banksalad-exclusive UI font asset is promoted in this reference. |
183
+ | Declared-only | `swiper-icons` was declared with zero visible text usage. |
184
+ | Unresolved | Native-app-only typography remains unresolved without an inspectable current surface. |
185
+
186
+ Specimen availability requires a loadable font source and is separate from family truth.
187
+
154
188
  ### Font Family
155
189
  - **Primary**: `Pretendard, -apple-system, BlinkMacSystemFont, system-ui, "Segoe UI", Roboto, "Apple SD Gothic Neo", "Noto Sans KR", "Malgun Gothic", sans-serif`
156
- - **Display Accent**: `"BM JUA", sans-serif` — reserved for marketing-landing headlines where a warm, rounded Korean voice is wanted (rare; default to Pretendard)
157
- - Variable-axis Pretendard supplies 300/400/500/700/800/900 weights as needed; subset woff2 files for ExtraBold (800), Bold (700), Medium (500), Regular (400) are preloaded on the home page
190
+ - Loaded sources were observed for Pretendard Regular, Medium, SemiBold, Bold, and ExtraBold subsets.
191
+ - BM JUA was not declared, loaded, or visibly used in this fresh capture and is omitted.
158
192
 
159
193
  ### Hierarchy
160
194
 
161
195
  | Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
162
196
  |---|---|---|---|---|---|---|
163
- | Hero Display | Pretendard | 52px | 700 | 64px (1.23) | -1px | Largest landing headline; sometimes Jua for marketing warmth |
164
- | Display Large | Pretendard | 48px | 700 | 1.2 | -1px | Secondary hero |
165
- | Display | Pretendard | 38–44px | 700 | 1.25 | -1px | Section-opening figures (balances, scores) |
166
- | Section Heading | Pretendard | 32–36px | 700 | 1.3 | -0.5px | Marketing section titles |
167
- | Heading 1 | Pretendard | 28px | 700 | 32px | normal | In-app section titles |
168
- | Heading 2 | Pretendard | 22–24px | 700 | 28px | normal | Card titles, panel headings |
169
- | Heading 3 | Pretendard | 20px | 700 | 24px | normal | Sub-card headings |
170
- | Subhead | Pretendard | 18px | 700 | 1.3 | normal | Featured-button text, key callouts |
171
- | Body Large | Pretendard | 16px | 500 | 1.5 | normal | Standard reading text on data screens (700 for emphasis) |
172
- | Body | Pretendard | 14px | 500 | 1.34 | normal | Default body text; 500 weight, not 400 |
173
- | Body Tight | Pretendard | 13px | 500 | 1.34 | normal | Compact labels |
174
- | Caption | Pretendard | 12px | 500 | 1.34 | normal | Metadata, helper text |
175
- | Caption Small | Pretendard | 10px | 500 | 1 | normal | Disclosures, smallest labels |
176
- | Button | Pretendard | 16–18px | 700 | tight | -1px on display CTAs | All CTAs are 700 |
177
- | Financial Amount | Pretendard | 20–36px | 700 | 1 | normal | Always 700, comma-grouped, won unit follows in 500 |
197
+ | Product Heading | Pretendard | 20px | 700 | 28px | normal | Repeated section and card heading |
198
+ | Supporting Heading | Pretendard | 18px | 700 | 26px | -0.09px | Compact product heading |
199
+ | Body | Pretendard | 16px | 400 | 24px | normal | Shared product body and list copy |
200
+ | Prominent Label | Pretendard | 16px | 700 | 26px | -0.08px | Action and emphasized product label |
201
+ | Metadata | Pretendard | 14px | 500 | 20px | -0.07px | Supporting product information |
202
+ | Caption | Pretendard | 12px | 500–700 | 18px | -0.06px | Dense metadata where observed |
178
203
 
179
204
  ### Principles
180
- - **700 is the default for everything that matters.** Headings, CTAs, and financial amounts. 500 is for body text. 400 is rare. There is no "400 headline" in Banksalad.
181
- - **Pretendard everywhere.** Banksalad does not mix sans families. Jua is a *single* exception, only for warm marketing display.
182
- - **Korean and Latin are co-equal.** Pretendard's optical metrics align Korean (한글) and Latin in the same line; never assume English is primary.
183
- - **Tight letter-spacing at display.** Hero headlines and 18px+ CTAs use `-1px` tracking to compress for density.
184
- - **Numerals as headings.** Financial amounts at 20–36px / 700 are treated as headings, not body — they get the same hierarchical weight as page titles.
185
- - **Lightweight body is forbidden.** 300 only appears on display sizes where the size itself carries hierarchy (52px hero numerals); never on body text.
205
+ - **Pretendard is the only current visible text family.** Do not substitute an unobserved accent face.
206
+ - **400 carries reading; 700 carries decisions.** Current body/list copy is commonly 400, while headings and the primary loan action are 700.
207
+ - **Tracking is subtle at product sizes.** Current 14–18px roles use approximately -0.06px to -0.09px; no -1px display token is promoted.
208
+ - **Surface evidence stays local.** Authenticated app typography and native-only financial amount roles remain unresolved.
186
209
 
187
210
  ## 4. Component Stylings
188
211
 
189
- ### Buttons
212
+ ### Current verified components
213
+
214
+ **Primary Loan Action**
215
+ - Background: `#06a96c`
216
+ - Text: `#ffffff`
217
+ - Radius: 16px
218
+ - Padding: 16px 20px
219
+ - Height: 56px
220
+ - Font: 16px / 700 / Pretendard
221
+ - States: default captured; no safe active interaction expansion
222
+ - Use: Full-width primary action in the public interest-rate flow
223
+
224
+ **Content Filter Chip**
225
+ - Background: `rgba(19, 189, 126, 0.15)`
226
+ - Text: `#13bd7e`
227
+ - Radius: 6px
228
+ - Padding: 10px 12px
229
+ - Font: 16px / 500 / Pretendard
230
+ - States: default captured; no safe active interaction expansion
231
+ - Use: Category and filter action on the public contents directory
232
+
233
+ **Customer Safety Card**
234
+ - Background: `#ffffff`
235
+ - Border: 1px solid `#f0f2f5`
236
+ - Radius: 24px
237
+ - Padding: 24px
238
+ - Use: Customer-safety action and guidance card
239
+
240
+ **Product Disclosure Row**
241
+ - Background: transparent
242
+ - Text: `#111111`
243
+ - Radius: 0px
244
+ - Padding: 24px 20px
245
+ - Font: 16px / 400 / Pretendard
246
+ - Use: Expandable disclosure row on the public card-product detail
190
247
 
191
- **Primary CTA (Salad Green)**
248
+ <details>
249
+ <summary>Superseded 2026-05 legacy snapshot — retained for audit history, not canonical</summary>
250
+
251
+ ### Legacy Buttons
252
+
253
+ #### Primary CTA (Salad Green)
192
254
  - Background: `#04c584`
193
255
  - Text: `#ffffff`
194
256
  - Border: none
@@ -199,7 +261,7 @@ The teal-slate family is intentionally **cooler than the brand green**, so that
199
261
  - Hover: background `#10df99` (lightens — opposite of convention)
200
262
  - Use: Primary CTA on data tables, recommendation rows, transactional flows ("내 카드 추천 받기", "신청하기")
201
263
 
202
- **Primary CTA — Large Display**
264
+ #### Primary CTA — Large Display
203
265
  - Background: `#04c584`
204
266
  - Text: `#ffffff`
205
267
  - Border: none
@@ -211,7 +273,7 @@ The teal-slate family is intentionally **cooler than the brand green**, so that
211
273
  - Hover: `#10df99`
212
274
  - Use: Hero CTA on landing surfaces ("앱 다운로드", "지금 시작하기")
213
275
 
214
- **Primary CTA — Hover-Inverted (Retry)**
276
+ #### Primary CTA — Hover-Inverted (Retry)
215
277
  - Background: `#10df99` (default lighter)
216
278
  - Text: `#ffffff`
217
279
  - Border: none
@@ -221,7 +283,7 @@ The teal-slate family is intentionally **cooler than the brand green**, so that
221
283
  - Hover: background `#04c584` (darkens — the one place Banksalad uses the darken pattern)
222
284
  - Use: Secondary retry / "다시 시도" actions where the resting state is a softer mint
223
285
 
224
- **Ghost / Outlined**
286
+ #### Ghost / Outlined
225
287
  - Background: `#ffffff`
226
288
  - Text: `#04c584`
227
289
  - Border: 1px solid `#04c584`
@@ -231,7 +293,7 @@ The teal-slate family is intentionally **cooler than the brand green**, so that
231
293
  - Hover: background `#f3fdfa` (mint tint)
232
294
  - Use: Secondary actions paired with a Primary CTA
233
295
 
234
- **Neutral / Cancel**
296
+ #### Neutral / Cancel
235
297
  - Background: `#f5f5f5`
236
298
  - Text: `#434444`
237
299
  - Border: none
@@ -241,7 +303,7 @@ The teal-slate family is intentionally **cooler than the brand green**, so that
241
303
  - Hover: background `#e1e1e1`
242
304
  - Use: Cancel / "취소" / dismiss actions
243
305
 
244
- **Disabled**
306
+ #### Disabled
245
307
  - Background: `#e1e1e1`
246
308
  - Text: `#acacac`
247
309
  - Border: none
@@ -249,7 +311,7 @@ The teal-slate family is intentionally **cooler than the brand green**, so that
249
311
  - Font: 16px / 700 / Pretendard
250
312
  - Use: Disabled state (form incomplete, retry cooling down)
251
313
 
252
- **Link Button (Inline Text Link)**
314
+ #### Link Button (Inline Text Link)
253
315
  - Background: transparent
254
316
  - Text: `#04c584`
255
317
  - Border: none
@@ -260,7 +322,7 @@ The teal-slate family is intentionally **cooler than the brand green**, so that
260
322
 
261
323
  ### Cards & Containers
262
324
 
263
- **Data Card (Default)**
325
+ #### Data Card (Default)
264
326
  - Background: `#ffffff`
265
327
  - Border: 1px solid `#e1e1e1` (some surfaces use no border + shadow only)
266
328
  - Radius: 2px
@@ -268,7 +330,7 @@ The teal-slate family is intentionally **cooler than the brand green**, so that
268
330
  - Shadow: `0 2px 5px rgba(0, 0, 0, 0.12)`
269
331
  - Use: Recommendation rows, transaction cards, account summary blocks
270
332
 
271
- **Card — Soft Variant**
333
+ #### Card — Soft Variant
272
334
  - Background: `#fbfbfb`
273
335
  - Border: none
274
336
  - Radius: 8px
@@ -276,7 +338,7 @@ The teal-slate family is intentionally **cooler than the brand green**, so that
276
338
  - Shadow: `0 2px 8px rgba(0, 0, 0, 0.1)`
277
339
  - Use: Marketing/landing feature cards (the rare 8px-radius case)
278
340
 
279
- **Card — Highlight (Selected)**
341
+ #### Card — Highlight (Selected)
280
342
  - Background: `#f3fdfa`
281
343
  - Border: 1px solid `#10df99`
282
344
  - Radius: 2px
@@ -285,7 +347,7 @@ The teal-slate family is intentionally **cooler than the brand green**, so that
285
347
 
286
348
  ### Inputs & Forms
287
349
 
288
- **Text Input (Default)**
350
+ #### Text Input (Default)
289
351
  - Background: `#ffffff`
290
352
  - Text: `#999999` (placeholder) / `#434444` (filled)
291
353
  - Border: 1px solid `#e1e1e1`
@@ -294,14 +356,14 @@ The teal-slate family is intentionally **cooler than the brand green**, so that
294
356
  - Height: 48px
295
357
  - Font: 16px / 500 / Pretendard
296
358
 
297
- **Text Input — Focus**
359
+ #### Text Input — Focus
298
360
  - Background: `#f3fdfa`
299
361
  - Text: `#434444`
300
362
  - Border: 1px solid `#10df99`
301
363
  - Radius: 2px
302
364
  - Use: Active typing state — the mint tint is the only branded background fill in the system
303
365
 
304
- **Text Input — Error**
366
+ #### Text Input — Error
305
367
  - Background: `#ffffff`
306
368
  - Text: `#434444`
307
369
  - Border: 1px solid `#fe493d`
@@ -309,7 +371,7 @@ The teal-slate family is intentionally **cooler than the brand green**, so that
309
371
  - Error message below: 12px / 500 / `#fe493d`
310
372
  - Use: Validation failure state
311
373
 
312
- **Amount Input (Financial)**
374
+ #### Amount Input (Financial)
313
375
  - Background: `#ffffff`
314
376
  - Text: `#2b2b2b`
315
377
  - Border: 2px solid `#f5f5f5`
@@ -321,7 +383,7 @@ The teal-slate family is intentionally **cooler than the brand green**, so that
321
383
 
322
384
  ### Badges & Tags
323
385
 
324
- **Status Pill (Brand)**
386
+ #### Status Pill (Brand)
325
387
  - Background: `#f3fdfa`
326
388
  - Text: `#04c584`
327
389
  - Border: none
@@ -330,7 +392,7 @@ The teal-slate family is intentionally **cooler than the brand green**, so that
330
392
  - Font: 12px / 500 / Pretendard
331
393
  - Use: Filter chips ("연회비 없음", "주유 할인") on card-recommendation pages
332
394
 
333
- **Status Badge (Warning)**
395
+ #### Status Badge (Warning)
334
396
  - Background: `#ffffff`
335
397
  - Text: `#f56200`
336
398
  - Border: 1px solid `#fd8700`
@@ -339,7 +401,7 @@ The teal-slate family is intentionally **cooler than the brand green**, so that
339
401
  - Font: 12px / 700 / Pretendard
340
402
  - Use: Rate-warning, expiry, attention-needed indicators
341
403
 
342
- **Status Badge (Negative)**
404
+ #### Status Badge (Negative)
343
405
  - Background: `#ffffff`
344
406
  - Text: `#fe493d`
345
407
  - Border: 1px solid `#fe493d`
@@ -350,7 +412,7 @@ The teal-slate family is intentionally **cooler than the brand green**, so that
350
412
 
351
413
  ### Tables (Financial Data)
352
414
 
353
- **Table Header Row**
415
+ #### Table Header Row
354
416
  - Background: `#f5f5f5`
355
417
  - Text: `#7b7b7b`
356
418
  - Border-bottom: 1px solid `#e1e1e1`
@@ -358,7 +420,7 @@ The teal-slate family is intentionally **cooler than the brand green**, so that
358
420
  - Font: 13px / 700 / Pretendard / uppercase letter-spacing 0.05em
359
421
  - Use: Column headers on transaction lists, fee schedules
360
422
 
361
- **Table Body Row**
423
+ #### Table Body Row
362
424
  - Background: `#ffffff` (alternates with `#fbfbfb` on dense tables)
363
425
  - Text: `#434444`
364
426
  - Border-bottom: 1px solid `#e1e1e1`
@@ -369,7 +431,7 @@ The teal-slate family is intentionally **cooler than the brand green**, so that
369
431
 
370
432
  ### Charts & Data Viz
371
433
 
372
- **Chart Series Tokens**
434
+ #### Chart Series Tokens
373
435
  - Series 1: `#34464b` (primary)
374
436
  - Series 2: `#5c818a` (secondary)
375
437
  - Series 3: `#1c6c73` (tertiary)
@@ -378,7 +440,7 @@ The teal-slate family is intentionally **cooler than the brand green**, so that
378
440
  - Negative: `#fe493d`
379
441
  - Positive trend: `#04c584`
380
442
 
381
- **Axis & Gridlines**
443
+ #### Axis & Gridlines
382
444
  - Axis label: 10–12px / 500 / `#7b7b7b`
383
445
  - Gridline: 1px dashed `#e1e1e1`
384
446
  - Background: `#ffffff` or `#fbfbfb`
@@ -404,11 +466,16 @@ The teal-slate family is intentionally **cooler than the brand green**, so that
404
466
 
405
467
  ---
406
468
 
407
- **Verified:** 2026-05-13 (omd:add-reference CREATE mode)
408
- **Tier 1 sources:** banksalad.com home (live HTML — Pretendard + Jua preload, 16px-radius sign-in pill via playwright DOM); webview-cdn.banksalad.com/.../v2.5c10981711a65fe446400c6ecec36a221b1c3e9e.bundle.css (865 KB CSS bundle — 81× `border-radius: 2px`, primary CTA `#04c584` rule, input focus `#10df99`/`#f3fdfa`, full color-frequency map); blog.banksalad.com/tech/banksalad-product-language-ios/ (BPL principle quote); github.com/banksalad (styleguide org confirmed).
409
- **Tier 2 sources:** getdesign.md/banksalad — **no record** ("No designs found for 'banksalad'"). styles.refero.design/?q=banksalad — **no record** (search returns no banksalad cards). Tier 2 unavailable; Tier 1 treated as authoritative.
410
- **Conflicts unresolved:** none. (Single playwright DOM observation of 16px-radius on the sign-in header pill is documented as an exception in §4 Navigation rather than treated as a token-system conflict — the bundle's overwhelming 81× 2px frequency is the system default.)
411
- **Earlier gap:** none — this is CREATE.
469
+ </details>
470
+
471
+ ---
472
+
473
+ **Verified:** 2026-07-12 (omd:migrate)
474
+ **Tier 1 sources:** https://www.banksalad.com/ ; https://www.banksalad.com/contents ; https://www.banksalad.com/loan/interest-rate-cut ; https://www.banksalad.com/customer-safety ; https://www.banksalad.com/product/cards/CARD002319 ; https://blog.banksalad.com/tech/banksalad-product-language-design/ ; https://blog.banksalad.com/tech/banksalad-product-language-ios/
475
+ **Tier 2 sources:** https://getdesign.md/banksalad (no brand record found in exact search); https://styles.refero.design/?q=banksalad (attempted; browser-harness unavailable and indexed search returned no brand result)
476
+ **Tier 2 status:** unavailable
477
+ **Conflicts unresolved:** none
478
+ **Earlier mistakes reverted:** `#04c584` canonical primary, `#10df99` hover, BM JUA current usage, 2px default radius, and uncaptured input/chart/modal/state claims
412
479
 
413
480
  ## 5. Layout Principles
414
481
 
@@ -546,7 +613,10 @@ Banksalad's 2px is a typographic-engineering commitment: pixel rounding sharp en
546
613
 
547
614
  ## 10. Voice & Tone
548
615
 
549
- Banksalad speaks like a **trustworthy financial advisor who happens to read the regulations carefully** calm, factual, slightly older-feeling than Toss, never the "friend with money" voice that consumer-app fintech defaults to. Where Toss says *"송금 완료"*, Banksalad says *"내 신용점수가 5점 올랐어요. 이번 달 카드 결제 이력이 안정적이었기 때문이에요."* The voice explains *why* the number changed, not just that it changed. Korean is the primary register; English UI strings are translations, not parity.
616
+ Current public copy is direct, explanatory, and comparison-oriented. The home page connects financial and health assets; the contents directory names products, benefits, and comparison tasks explicitly; customer-safety copy gives the risk and the next action. This supports a factual Korean product voice, but it does not establish the invented notification, validation, or authenticated-app copy previously included here.
617
+
618
+ <details>
619
+ <summary>Superseded voice hypotheses — not current official guidance</summary>
550
620
 
551
621
  | Context | Tone |
552
622
  |---|---|
@@ -560,43 +630,53 @@ Banksalad speaks like a **trustworthy financial advisor who happens to read the
560
630
  | Legal / disclosure | Formal `~합니다` endings. Pinned at the bottom of recommendation cards. Treated as part of the product, not a footer afterthought. |
561
631
  | Health-asset (DNA, screening) | Same calm advisor voice as finance. No marketing exuberance about "discovering your DNA". Just `이번 검사로 18가지 항목을 확인할 수 있어요`. |
562
632
 
563
- **Forbidden phrases.** `오류가 발생했습니다`, `Oops`, `간단하게`, `최고의 ~`, `놓치지 마세요`, exclamation marks on routine CTAs, emoji on financial surfaces, approximations on money (`약 ~원`), `놀라운 절약` / "amazing savings" / superlative-driven recommendations. Banksalad's voice is the opposite of clickbait — the user came here to think about money, and the product should respect the seriousness of that intent.
633
+ </details>
634
+
635
+ The table above is a historical hypothesis and is not promoted as an official writing standard. Current verified samples are:
636
+
637
+ - “금융을 넘어 건강 자산까지” — current home positioning. <!-- verified: https://www.banksalad.com/ -->
638
+ - “신용대출, 햇살론, 직장인 대출까지 한 번에 비교하세요” — comparison copy. <!-- verified: https://www.banksalad.com/contents -->
639
+ - “내 대출금리 조회” — concrete product action. <!-- verified: https://www.banksalad.com/contents -->
640
+ - “명의 도용 의심 도용사고·보이스피싱 신고 및 행동 요령을 확인하세요” — risk plus next action. <!-- verified: https://www.banksalad.com/customer-safety -->
641
+
642
+ No complete official voice-and-tone manual was found. Push notifications, authenticated errors, sentence-ending rules, and prohibited phrase lists remain unresolved.
564
643
 
565
644
  ## 11. Brand Narrative
566
645
 
567
- Banksalad is the consumer brand of **Rainist (레이니스트)**, founded in **2012 by Kim Tae-hoon (김태훈)** a Sogang University graduate who started the company inside the Smilegate game-studio incubator and whose **founding team manually classified 16 hours a day of Korean financial-product data to build the first comparison database** ([Hankyung 2019-03-12](https://www.hankyung.com/article/2019031275551)). The founding rejection was specific: every legacy Korean financial portal in 2012 (Bankrate-style aggregators, bank-run comparison pages) presented credit cards and loans in alphabetical lists optimized for the issuer, not the user. Kim Tae-hoon's stated thesis was *"정보 비대칭성을 해소해 누구나 똑똑해지는 세상을 만들겠다"* "resolve information asymmetry so anyone can become smart [about their own money]" (founder interviews, Korean press 2018–2019). The product's design language follows directly from that thesis: **more facts, clearly tiered, with the reason next to every recommendation.**
646
+ Banksalad's current first-party web presence presents a data-based financial platform spanning product comparison, credit and loan guidance, financial content, customer safety, and a wider health-asset direction. The current home page describes a large comparison inventory and a recommendation engine designed to help people choose favorable products. This reference uses those live statements as the present product narrative and does not rely on third-party founder mythology, funding figures, or fabricated competitive comparisons.
568
647
 
569
- Banksalad's monthly active users tripled to **1.5M in early 2019** ([Korea Herald 2019-02-22](http://www.koreaherald.com/view.php?ud=20190222000548)). The company raised a **₩45B ($37M USD) Series C at a ₩300B ($247M) valuation in 2019** ([Korea Herald 2019-08-28](https://www.koreaherald.com/article/2087712)) and has raised **$169.96M cumulatively** to date (PitchBook). Today the product spans credit-card recommendation, personal loans, mortgages, deposits/savings, and uniquely **a free DNA-based health-screening service** that extends the "manage your assets" framing from financial assets to health assets. The home-page tagline as of 2026-05-13 reads *"뱅크샐러드 \| 금융을 넘어 건강 자산까지"* ("Banksalad from finance to health assets"), making that extension the brand's current positioning.
648
+ The official BPL publications explain how this product is made. Banksalad describes Product Language as broader than a visual design system: designers and platform engineers share names, abstraction boundaries, component structures, implementation guidance, and examples. BPL emerged alongside a major service redesign, moved collaborative design work to Figma, established ground rules, and maintained versioned libraries and sample applications so platform differences could be reviewed rather than hidden.
570
649
 
571
- The design system is internally called **BPL — Banksalad Product Language**, documented on the official tech blog ([blog.banksalad.com/tech/banksalad-product-language-ios](https://blog.banksalad.com/tech/banksalad-product-language-ios/)). BPL's most-quoted principle is *"Communication cost is most expensive. Code and Show first, argue after that."* BPL is implemented on iOS with LayoutDrivenUI + RxSwift, on Android in Kotlin, on Web through the CSS bundle this DESIGN.md was extracted from. The system explicitly avoids premature component abstraction similar components stay independent, matching how designers structure their Figma libraries. The mint-green (`#04c584`), the 2px radius, the Pretendard 700 default, the teal-slate chart palette — all are BPL primitives.
650
+ BPL's implementation article states Communication cost is most expensive. Code and Show first, argue after that.” It describes working prototypes, component examples, snapshot testing, and an integral sample app as ways to align design and implementation. These are verified process principles. They do not prove that the colors, radius, or typography observed in 2020 remain current tokens, which is why the current five-surface measurements are reconciled independently.
572
651
 
573
- What Banksalad refuses: the cheerful consumer-app voice of Toss and KakaoPay (banksalad explains; it does not delight), the institutional-indigo of legacy Korean banks (which is why it picked green, not blue), the playful illustration of Kakao-family products (Banksalad does not use mascot characters), and the data-density of Bloomberg-terminal aesthetics (the tables are dense but the type is human-readable). Banksalad sits in a narrow middle: serious enough to be an advisor, modern enough to be the app a 26-year-old opens between subway stops.
652
+ The current design identity therefore has two evidence layers: an official history of cross-functional product-language practice, and a present web implementation built from white surfaces, Pretendard, green actions, explicit comparison copy, and role-specific geometry. Neither layer is used as a substitute for inaccessible native-app evidence.
574
653
 
575
654
  ## 12. Principles
576
655
 
577
- 1. **Show the number, then show the reason.** Every recommended card, loan, or asset comes with a one-sentence justification next to the figure. A ranked list without reasons is a violation of the brand. UI implication: every recommendation card must have a "justification line" slot in its component contract.
578
- 2. **Density is trust.** Where consumer-app fintech treats whitespace as luxury, Banksalad treats density as competence. A user who can see four comparison rows at once is being respected as a researcher. UI implication: card padding 20–24px, not 32px+. Tables ship as tables, not as stacked single-rows.
579
- 3. **Green is interaction, not decoration.** `#04c584` only appears where the user can act (CTA, link, focus, selection) or where the user's own data is shown ("your value" on a chart, "your score"). Never on a decorative gradient, never as a page-section background. UI implication: never use brand green as a fill that does not change on hover.
580
- 4. **2px is a philosophical commitment.** The sharp corner reads as data-tool; Toss/Kakao's 12–16px reads as consumer-toy. Banksalad chooses to look engineered. UI implication: do not import any consumer-app card with rounded corners as-is; re-corner to 2px.
581
- 5. **Numerals are headings.** Financial amounts at 20px+ are styled with the same hierarchical weight (700) as page titles. Money is information of the highest priority it gets the typographic treatment of a heading, never of body. UI implication: amounts use heading-class typography tokens.
582
- 6. **The reason for the recommendation is part of the product.** Disclaimers, comparison criteria, and rate sources are not legal footers — they are pinned inside the recommendation card, in the same visual frame as the recommendation itself. UI implication: every recommendation component reserves a `disclosure` slot that is always rendered, not collapsed-by-default.
583
- 7. **Korean and Latin numerals must align.** Pretendard's optical alignment between 한글 and Latin numerals is non-negotiable — a column of `1,240,000원` and `$1,240` should read as one column, not two scripts arguing. UI implication: never substitute a Latin-only font for numeric display; Pretendard handles both.
584
- 8. **Charts use teal-slate, not brand green, for the field.** Reserving green for the user's own value makes the user's position immediately legible against neutral series. UI implication: chart `seriesColors` defaults to `[#34464b, #5c818a, #1c6c73, #a7c7cf]`; user's series defaults to `#04c584`.
585
- 9. **Approximations are a betrayal.** `약 ~원` on a primary money surface tells the user the product does not actually know the number. Banksalad's brand promise is information clarity; rounded figures are forbidden where the precise figure exists. UI implication: financial-amount components do not accept a `round: true` flag.
656
+ 1. **Share one product language.** BPL exists so design and platform teams name and structure the same UI concepts consistently. *UI implication:* component names and anatomy should map across design and implementation rather than being reinvented per platform.
657
+ 2. **Code and show before abstract debate.** The official BPL article uses working prototypes to expose where teams agree or disagree. *UI implication:* validate a component in a representative screen before promoting a generalized rule.
658
+ 3. **Keep design and implementation structures aligned.** BPL describes matching Figma layout structure closely enough that a design change produces a corresponding implementation change. *UI implication:* avoid premature abstraction that obscures the authored component anatomy.
659
+ 4. **Version the shared language.** The official design article describes fixed platform versions, update tracking, and component-list tooling. *UI implication:* reference claims need dates and surface provenance; old BPL values cannot silently become current web tokens.
660
+ 5. **Test components alone and in realistic composition.** BPL used component examples, snapshot tests, and an integral sample app. *UI implication:* validate both the isolated spec and the assembled product flow.
586
661
 
587
662
  ## 13. Personas
588
663
 
589
- *Personas below are fictional archetypes informed by publicly observable Banksalad user segments (Korean millennials managing credit-card portfolios, freelancers comparing loan products, mid-life users tracking health-and-finance side by side), not individual people.*
664
+ Banksalad does not publish validated demographic personas in the sources used for this pass. The current public surfaces support task contexts instead:
590
665
 
591
- **박지혜 (Park Ji-hye), 31, Seoul.** Senior designer at a Seoul-based scaleup. Opens Banksalad once a week to scan her credit-card spend-by-category report. Switches cards every 18 months based on whichever one Banksalad's recommendation engine surfaces with the best annual-savings figure for her actual usage pattern — *not* the one with the flashiest sign-up bonus. Reads the one-sentence justification under every recommendation before tapping; would close the app permanently if it ever shipped a "best card 🔥" list without reasons.
666
+ - A person comparing cards, loans, deposits, or insurance and reading product conditions.
667
+ - A person checking whether an interest-rate reduction request may be available.
668
+ - A card-detail visitor reading benefits, disclosures, and product metadata.
669
+ - A customer looking for fraud, identity-theft, voice-phishing, or mistaken-transfer guidance.
670
+ - A reader using the financial contents directory to understand a decision before entering a product flow.
592
671
 
593
- **김상민 (Mr. Kim), 47, Daegu.** Self-employed, runs a small import business. Uses Banksalad primarily for comparing business-friendly credit cards and tracking interest-rate movements on his three commercial loans. Trusts the product because the rate comparison shows the source date and the underlying assumption (`연 환산 기준`). Pays attention to the disclosure text inside each recommendation card — would lose trust immediately if a recommendation appeared without its rate basis.
672
+ These are observable jobs, not invented people. Names, ages, quotes, income, behavior frequency, and authenticated-app habits require separate user research.
594
673
 
595
- **이수연 (Lee Su-yeon), 28, Seongnam.** UX researcher. Uses Banksalad for two unrelated reasons: monthly spend analysis, and the free DNA-based health screening. Finds the same voice across both surfaces (calm, factual, advisor-tone) reassuring — it makes the health-screening feel like an extension of "manage your assets" rather than a sudden pivot. Compares Banksalad's spend analysis to Toss's and prefers Banksalad's because *"Toss는 다 정리되어 있고 깔끔한데, 뱅크샐러드는 왜 그런지를 알려줘요"* (illustrative paraphrase) — Toss tidies, Banksalad explains.
674
+ ## 14. States
596
675
 
597
- **조현우 (Cho Hyun-woo), 39, Busan.** Mid-career operations manager. Reviews Banksalad's monthly credit-report widget has been watching his credit score climb from 820 to 868 over 14 months. Doesn't tap CTAs; uses Banksalad strictly as a dashboard. Trusts the green `#04c584` "your score" indicator on the score-trend chart because it always shows him *his* position against the teal-slate distribution of the population — the green-vs-teal distinction tells him at a glance which data is about him.
676
+ The collector recorded default render states only and performed zero safe interaction expansions. No canonical empty, loading, error, success, disabled, hover, focus, or pressed treatment is promoted. The loan accordion was captured in its rendered state, but this does not establish a complete product-state system.
598
677
 
599
- ## 14. States
678
+ <details>
679
+ <summary>Superseded synthetic state proposals — not verified product facts</summary>
600
680
 
601
681
  | State | Treatment |
602
682
  |---|---|
@@ -614,8 +694,15 @@ What Banksalad refuses: the cheerful consumer-app voice of Toss and KakaoPay (ba
614
694
  | **Disabled** | Background `#e1e1e1`, text `#acacac`, 2px radius preserved. Cursor `not-allowed`. The geometry stays identical to the enabled state so re-enabling does not shift layout. |
615
695
  | **Pressed (button)** | Inset shadow `inset 0 1px 1px rgba(0,0,0,.12)` + background shifts by ~5% darker for the press duration. Returns instantly on release (no spring). |
616
696
 
697
+ </details>
698
+
617
699
  ## 15. Motion & Easing
618
700
 
701
+ One current public accordion panel exposed a `350ms` height/opacity transition using `cubic-bezier(0.25, 0.1, 0.25, 1)`. No broader duration scale, spring policy, chart animation, score count-up, or reduced-motion implementation was verified in this capture.
702
+
703
+ <details>
704
+ <summary>Superseded synthetic motion proposals — not verified product facts</summary>
705
+
619
706
  **Durations:**
620
707
 
621
708
  | Token | Value | Use |
@@ -644,6 +731,8 @@ What Banksalad refuses: the cheerful consumer-app voice of Toss and KakaoPay (ba
644
731
  3. **Recommendation card reveal.** When a fresh recommendation set loads, cards fade in with `motion-standard / ease-enter` from `opacity: 0; translateY(4px)`. Translate is intentionally small (4px, not 20px) — the cards arrive, they do not fly in.
645
732
  4. **Reduce motion.** Under `prefers-reduced-motion: reduce`, all `motion-*` tokens collapse to `motion-instant`. Score count-ups become instant value swaps. Chart draw-ins render their final state immediately. Banksalad remains fully usable; nothing in the product is information-dependent on motion.
646
733
 
734
+ </details>
735
+
647
736
  <!--
648
737
  OmD v0.1 Sources — Philosophy Layer (sections 10–15)
649
738