cdragon 0.1.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 (91) hide show
  1. package/README.md +110 -0
  2. package/bin/cdragon.js +170 -0
  3. package/package.json +31 -0
  4. package/skills/agent-browser/SKILL.md +50 -0
  5. package/skills/grill-me/SKILL.md +7 -0
  6. package/skills/herdr-agent/SKILL.md +142 -0
  7. package/skills/herdr-cli/SKILL.md +388 -0
  8. package/skills/herdr-cli/scripts/herdr-agent-run-and-wait +203 -0
  9. package/skills/herdr-cli/scripts/herdr-agent-wait-complete +168 -0
  10. package/skills/notion-presentation/SKILL.md +170 -0
  11. package/skills/notion-presentation/references/example-redis-deck.md +97 -0
  12. package/skills/setup-matt-pocock-skills/SKILL.md +127 -0
  13. package/skills/setup-matt-pocock-skills/domain.md +51 -0
  14. package/skills/setup-matt-pocock-skills/issue-tracker-github.md +34 -0
  15. package/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +35 -0
  16. package/skills/setup-matt-pocock-skills/issue-tracker-local.md +19 -0
  17. package/skills/setup-matt-pocock-skills/triage-labels.md +15 -0
  18. package/skills/tdd/SKILL.md +108 -0
  19. package/skills/tdd/mocking.md +59 -0
  20. package/skills/tdd/refactoring.md +10 -0
  21. package/skills/tdd/tests.md +61 -0
  22. package/skills/to-html/SKILL.md +83 -0
  23. package/skills/to-html/designs/INDEX.md +74 -0
  24. package/skills/to-html/designs/airbnb.DESIGN.md +581 -0
  25. package/skills/to-html/designs/airtable.DESIGN.md +275 -0
  26. package/skills/to-html/designs/alipay.DESIGN.md +456 -0
  27. package/skills/to-html/designs/apple.DESIGN.md +566 -0
  28. package/skills/to-html/designs/banksalad.DESIGN.md +621 -0
  29. package/skills/to-html/designs/channeltalk.DESIGN.md +374 -0
  30. package/skills/to-html/designs/clay.DESIGN.md +398 -0
  31. package/skills/to-html/designs/clickhouse.DESIGN.md +374 -0
  32. package/skills/to-html/designs/cohere.DESIGN.md +361 -0
  33. package/skills/to-html/designs/coinone.DESIGN.md +218 -0
  34. package/skills/to-html/designs/coupang.DESIGN.md +502 -0
  35. package/skills/to-html/designs/cursor.DESIGN.md +416 -0
  36. package/skills/to-html/designs/elevenlabs.DESIGN.md +376 -0
  37. package/skills/to-html/designs/expo.DESIGN.md +373 -0
  38. package/skills/to-html/designs/figma.DESIGN.md +490 -0
  39. package/skills/to-html/designs/framer.DESIGN.md +393 -0
  40. package/skills/to-html/designs/freee.DESIGN.md +572 -0
  41. package/skills/to-html/designs/gangnamunni.DESIGN.md +621 -0
  42. package/skills/to-html/designs/gmarket.DESIGN.md +483 -0
  43. package/skills/to-html/designs/gogolook.DESIGN.md +131 -0
  44. package/skills/to-html/designs/hahow.DESIGN.md +158 -0
  45. package/skills/to-html/designs/hashicorp.DESIGN.md +369 -0
  46. package/skills/to-html/designs/hyundaicard.DESIGN.md +177 -0
  47. package/skills/to-html/designs/ibm.DESIGN.md +420 -0
  48. package/skills/to-html/designs/kakaobank.DESIGN.md +548 -0
  49. package/skills/to-html/designs/kakaopay.DESIGN.md +544 -0
  50. package/skills/to-html/designs/karrot.DESIGN.md +445 -0
  51. package/skills/to-html/designs/kdan.DESIGN.md +160 -0
  52. package/skills/to-html/designs/krds.DESIGN.md +997 -0
  53. package/skills/to-html/designs/line.DESIGN.md +431 -0
  54. package/skills/to-html/designs/linear.app.DESIGN.md +548 -0
  55. package/skills/to-html/designs/miro.DESIGN.md +272 -0
  56. package/skills/to-html/designs/mistral.ai.DESIGN.md +353 -0
  57. package/skills/to-html/designs/money-forward.DESIGN.md +401 -0
  58. package/skills/to-html/designs/mongodb.DESIGN.md +357 -0
  59. package/skills/to-html/designs/naver.DESIGN.md +533 -0
  60. package/skills/to-html/designs/nhncloud.DESIGN.md +174 -0
  61. package/skills/to-html/designs/opencode.ai.DESIGN.md +388 -0
  62. package/skills/to-html/designs/pinterest.DESIGN.md +322 -0
  63. package/skills/to-html/designs/posthog.DESIGN.md +430 -0
  64. package/skills/to-html/designs/raycast.DESIGN.md +422 -0
  65. package/skills/to-html/designs/remember.DESIGN.md +460 -0
  66. package/skills/to-html/designs/resend.DESIGN.md +396 -0
  67. package/skills/to-html/designs/sanity.DESIGN.md +449 -0
  68. package/skills/to-html/designs/sendbird.DESIGN.md +285 -0
  69. package/skills/to-html/designs/smarthr.DESIGN.md +404 -0
  70. package/skills/to-html/designs/socar.DESIGN.md +403 -0
  71. package/skills/to-html/designs/spotify.DESIGN.md +265 -0
  72. package/skills/to-html/designs/supabase.DESIGN.md +348 -0
  73. package/skills/to-html/designs/superhuman.DESIGN.md +414 -0
  74. package/skills/to-html/designs/together.ai.DESIGN.md +356 -0
  75. package/skills/to-html/designs/toss.DESIGN.md +655 -0
  76. package/skills/to-html/designs/uber.DESIGN.md +387 -0
  77. package/skills/to-html/designs/upstage.DESIGN.md +232 -0
  78. package/skills/to-html/designs/velog.DESIGN.md +168 -0
  79. package/skills/to-html/designs/vercel.DESIGN.md +479 -0
  80. package/skills/to-html/designs/wanted.DESIGN.md +529 -0
  81. package/skills/to-html/designs/wise.DESIGN.md +276 -0
  82. package/skills/to-html/designs/yanolja.DESIGN.md +463 -0
  83. package/skills/to-html/designs/yeogiotte.DESIGN.md +459 -0
  84. package/skills/to-html/designs/zapier.DESIGN.md +433 -0
  85. package/skills/to-html/designs/zigzag.DESIGN.md +633 -0
  86. package/skills/to-issues/SKILL.md +84 -0
  87. package/skills/to-prd/SKILL.md +75 -0
  88. package/src/colors.js +15 -0
  89. package/src/link.js +47 -0
  90. package/src/prompt.js +137 -0
  91. package/src/skills.js +75 -0
@@ -0,0 +1,655 @@
1
+ ---
2
+ id: toss
3
+ name: Toss
4
+ country: KR
5
+ category: fintech
6
+ homepage: "https://toss.im"
7
+ primary_color: "#0064ff"
8
+ logo:
9
+ type: favicon
10
+ slug: "https://static.toss.im/icons/png/4x/icon-toss-logo.png"
11
+ verified: "2026-05-15"
12
+ omd: "0.1"
13
+ ds:
14
+ name: TDS
15
+ url: "https://tossmini-docs.toss.im/tds-mobile/"
16
+ type: system
17
+ description: Toss's mobile design system — 40+ components, tokens, and hooks.
18
+ ---
19
+
20
+ # Design System Inspiration of Toss (토스)
21
+
22
+ ## 1. Visual Theme & Atmosphere
23
+
24
+ Toss is Korea's fintech super-app that redefined what a financial interface could feel like -- calm, confident, and deceptively simple. The page opens on a clean white canvas (`#ffffff`) with deep charcoal headings (`#191f28`) and a signature blue (`#3182f6`) that functions as the universal interactive accent. This isn't the cold, institutional blue of legacy banking; it's a bright, optimistic cerulean that says "your money is in good hands, and we'll make it easy."
25
+
26
+ The custom **Toss Product Sans** typeface is the quiet hero. Developed with Korean type foundries Sandoll and Leedotype, it was purpose-built for financial contexts: numerals and Latin characters are optically weighted to match Korean hangul proportions, and financial symbols (%, commas, ±) are given enhanced legibility. The font ships in 8 weights (300-950) but the UI exercises restraint, primarily using 400, 600, and 700. The system supports both variable-width numerals for display and fixed-width (tabular) numerals for data tables -- context determines mode.
27
+
28
+ What defines Toss visually is its OKLCH-based color system, rebuilt from scratch for perceptual uniformity. Colors at the same scale level appear equally bright regardless of hue, enabling consistent semantic coloring where blue-500, red-500, and green-500 carry identical visual weight without manual tuning.
29
+
30
+ **Key Characteristics:**
31
+ - Toss Blue (`#3182f6`) as the primary interactive color -- bright, optimistic, trustworthy
32
+ - Toss Product Sans with Korean-Latin optical balancing and tabular numeral support
33
+ - OKLCH color space for perceptual uniformity across all hue scales
34
+ - 10-step grey scale (grey50-grey900) with warm undertones
35
+ - Three-tier token architecture: primitive → semantic → component
36
+ - Minimal shadow system -- trust comes from clarity, not depth
37
+ - Mobile-first at 375px design baseline with accessibility scaling up to 310%
38
+
39
+ ## 2. Color Palette & Roles
40
+
41
+ ### Primary
42
+ - **Toss Blue** (`#3182f6`): `blue500`. Primary interactive color -- CTAs, links, active states, selection highlights. The workhorse of every tappable element.
43
+ - **Blue Hover** (`#2272eb`): `blue600`. Hover/pressed state for blue500 elements.
44
+ - **Blue Light** (`#e8f3ff`): `blue50`. Informational backgrounds, subtle blue-tinted surfaces.
45
+ - **Pure White** (`#ffffff`): `background`, `layeredBackground`. Page background, card surfaces.
46
+ - **Dark Charcoal** (`#191f28`): `grey900`. Primary heading color, strongest text. Warm near-black with subtle blue undertone.
47
+
48
+ ### Brand (Logo/Marketing Only)
49
+ - **Brand Blue** (`#0064FF`): Official Toss brand color (Pantone 2175 C). Logo and marketing materials only -- distinct from UI blue500.
50
+ - **Brand Gray** (`#202632`): Official secondary brand color (Pantone 433 C). Corporate contexts.
51
+
52
+ ### Semantic
53
+ - **Error Red** (`#f04452`): `red500`. Error states, destructive actions, negative financial indicators.
54
+ - **Success Green** (`#03b26c`): `green500`. Positive financial indicators, confirmations.
55
+ - **Warning Orange** (`#fe9800`): `orange500`. Pending states, attention-needed indicators.
56
+ - **Caution Yellow** (`#ffc342`): `yellow500`. Soft warnings, highlight moments.
57
+ - **Info Teal** (`#18a5a5`): `teal500`. Informational accent, alternative categorization.
58
+ - **Premium Purple** (`#a234c7`): `purple500`. Premium features, special offers.
59
+
60
+ ### Neutral Scale
61
+ - **Grey 50** (`#f9fafb`): Lightest gray, `greyBackground` surface.
62
+ - **Grey 100** (`#f2f4f6`): Secondary background, card fills, disabled surfaces.
63
+ - **Grey 200** (`#e5e8eb`): Default border color, dividers, input backgrounds.
64
+ - **Grey 400** (`#b0b8c1`): Placeholder text, disabled icon fills.
65
+ - **Grey 500** (`#8b95a1`): Caption text, secondary labels.
66
+ - **Grey 600** (`#6b7684`): Body text, descriptions, metadata.
67
+ - **Grey 700** (`#4e5968`): Emphasized body text, sub-headings.
68
+ - **Grey 800** (`#333d4b`): Strong labels, navigation text.
69
+
70
+ ### Surface & Borders
71
+ - **Border Default**: `#e5e8eb` (grey200). Standard card borders, input borders, dividers.
72
+ - **Border Strong**: `#d1d6db` (grey300). Emphasized borders, active input outlines.
73
+ - **Background Float**: `#ffffff`. `floatBackground`. Floating elements -- tooltips, dropdowns.
74
+ - **Overlay Scrim**: `rgba(2,9,19,0.5)` to `rgba(2,9,19,0.91)`. `greyOpacity` scale. Blue-tinted dark overlays.
75
+
76
+ ## 3. Typography Rules
77
+
78
+ ### Font Family
79
+ - **Primary**: `"Toss Product Sans", "Tossface", "SF Pro KR", "SF Pro Display", -apple-system, BlinkMacSystemFont, "Basier Square", "Apple SD Gothic Neo", Roboto, "Noto Sans KR", sans-serif`
80
+ - **Monospace**: `"SF Mono", SFMono-Regular, Menlo, Consolas, monospace`
81
+ - **Emoji**: `Tossface` -- Toss's custom emoji font (3500+ emojis, open-source on GitHub)
82
+
83
+ ### Hierarchy
84
+
85
+ | Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
86
+ |------|------|------|--------|-------------|----------------|-------|
87
+ | Display Hero | Toss Product Sans | 30px | 700 | 40px (1.33) | normal | Splash screens, hero moments |
88
+ | Display Large | Toss Product Sans | 26px | 700 | 36px (1.38) | normal | Section headers, key metrics |
89
+ | Heading Large | Toss Product Sans | 22px | 700 | 30px (1.36) | normal | Feature titles, modal headers |
90
+ | Heading | Toss Product Sans | 20px | 600 | 28px (1.40) | normal | Card headings, sub-sections |
91
+ | Subtitle | Toss Product Sans | 16px | 600 | 24px (1.50) | normal | Navigation titles, list headers |
92
+ | Body Large | Toss Product Sans | 16px | 400 | 24px (1.50) | normal | Descriptions, explanations |
93
+ | Body | Toss Product Sans | 14px | 400 | 22px (1.57) | normal | Standard reading text |
94
+ | Body Small | Toss Product Sans | 13px | 400 | 20px (1.54) | normal | Secondary information |
95
+ | Caption | Toss Product Sans | 12px | 400 | 18px (1.50) | normal | Timestamps, fine print |
96
+ | Number Display | Toss Product Sans | 30px+ | 700 | tight | normal | Financial amounts -- tabular nums |
97
+
98
+ ### Principles
99
+ - **Eight weights, three used**: Ships 300-950, but UI uses 400 (body), 600 (emphasis), 700 (headings). Restraint over variety.
100
+ - **Dual numeral modes**: Variable-width for display, fixed-width (tabular) for financial tables and stock tickers. Context determines mode.
101
+ - **Korean-Latin optical balance**: Korean characters and Latin/numerals are independently weighted so mixed text looks harmonious without manual kerning.
102
+ - **Financial symbol optimization**: %, comma separators, ±, currency symbols, and directional arrows given enhanced legibility at small sizes.
103
+
104
+ ## 4. Component Stylings
105
+
106
+ ### Buttons
107
+
108
+ Toss `<Button>` is a 2-axis component: **variant** × **color** × size. Default size is `xlarge` (the values below); see the size-scale paragraph at the end for `small`/`medium`/`large`. Verified against `tossmini-docs.toss.im/tds-mobile/components/button` (TDS Mobile, public docs).
109
+
110
+ **Fill / Primary**
111
+ - Background: `#3182f6`
112
+ - Text: `#ffffff`
113
+ - Border: none
114
+ - Radius: 16px
115
+ - Padding: 0 20px
116
+ - Font: 17px / 600 / Toss Product Sans
117
+ - Pressed: dim overlay via `--button-pressed-background-color` + `--button-pressed-opacity`
118
+ - Disabled: bg opacity scaled by `--button-disabled-opacity-color`
119
+ - Loading: 3-dot indicator replacing label, button width preserved
120
+ - Use: Primary CTA on light surfaces (송금하기, 확인) — 56px tall
121
+
122
+ **Fill / Dark**
123
+ - Background: `#4e5968`
124
+ - Text: `#ffffff`
125
+ - Border: none
126
+ - Radius: 16px
127
+ - Padding: 0 20px
128
+ - Font: 17px / 600 / Toss Product Sans
129
+ - Use: Strong action where blue would feel too playful (admin/settings CTA)
130
+
131
+ **Fill / Danger**
132
+ - Background: `#f04452`
133
+ - Text: `#ffffff`
134
+ - Border: none
135
+ - Radius: 16px
136
+ - Padding: 0 20px
137
+ - Font: 17px / 600 / Toss Product Sans
138
+ - Use: Destructive confirmation (계좌 삭제, 거래 취소)
139
+
140
+ **Fill / Light**
141
+ - Background: `#ffffff`
142
+ - Text: `#1b64da`
143
+ - Border: none
144
+ - Radius: 16px
145
+ - Padding: 0 20px
146
+ - Font: 17px / 600 / Toss Product Sans
147
+ - Use: CTA on dark / colored surfaces (sits on non-white bg to be legible)
148
+
149
+ **Weak / Primary**
150
+ - Background: `rgba(100, 168, 255, 0.15)`
151
+ - Text: `#2272eb`
152
+ - Border: none
153
+ - Radius: 16px
154
+ - Padding: 0 20px
155
+ - Font: 17px / 600 / Toss Product Sans
156
+ - Use: Secondary action paired with Fill / Primary on the same screen
157
+
158
+ **Weak / Dark**
159
+ - Background: `rgba(2, 32, 71, 0.05)`
160
+ - Text: `#4e5968`
161
+ - Border: none
162
+ - Radius: 16px
163
+ - Padding: 0 20px
164
+ - Font: 17px / 600 / Toss Product Sans
165
+ - Use: Neutral / cancel-style secondary (취소, 닫기)
166
+
167
+ **Weak / Danger**
168
+ - Background: `rgba(251, 136, 144, 0.15)`
169
+ - Text: `#e42939`
170
+ - Border: none
171
+ - Radius: 16px
172
+ - Padding: 0 20px
173
+ - Font: 17px / 600 / Toss Product Sans
174
+ - Use: Subtle destructive action (archive instead of delete)
175
+
176
+ **Weak / Light**
177
+ - Background: `rgba(255, 255, 255, 0.15)`
178
+ - Text: `#ffffff`
179
+ - Border: none
180
+ - Radius: 16px
181
+ - Padding: 0 20px
182
+ - Font: 17px / 600 / Toss Product Sans
183
+ - Use: Secondary on dark / colored surfaces
184
+
185
+ Display modes — `inline` (auto-width), `block` (full-width with line break), `full` (fills parent). 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. CSS-var customization: `--button-color`, `--button-background-color`, `--button-pressed-background-color`, `--button-pressed-opacity`, `--button-disabled-opacity-color`, `--button-loader-color`, `--button-loading-background-color`, `--button-gradient-color`.
186
+
187
+ ### Inputs
188
+
189
+ Toss `<TextField>` has 4 variants: `box` (default), `line`, `big`, `hero`. `hasError` toggles error state. Verified at `tossmini-docs.toss.im/tds-mobile/components/TextField/text-field`.
190
+
191
+ **Box (default)**
192
+ - Background: `rgba(0, 23, 51, 0.02)`
193
+ - Text: `#333d4b`
194
+ - Border: 1px solid `rgba(2, 32, 71, 0.05)`
195
+ - Radius: 14px
196
+ - Padding: 14px 16px
197
+ - Font: 17px / 400 / Toss Product Sans
198
+ - Placeholder: `#b0b8c1`
199
+ - Focus: border `#3182f6`
200
+ - Use: Standard form input — most-used variant
201
+
202
+ **Line**
203
+ - Background: transparent
204
+ - Text: `#333d4b`
205
+ - Border: 1px solid `#e5e8eb` (bottom only)
206
+ - Radius: 0px
207
+ - Padding: 0px 0px 4px
208
+ - Font: 17px / 400 / Toss Product Sans
209
+ - Use: Underline-style input on dense forms
210
+
211
+ **Big**
212
+ - Background: transparent
213
+ - Text: `#333d4b`
214
+ - Border: 1px solid `#e5e8eb` (bottom only)
215
+ - Radius: 0px
216
+ - Padding: 0px 0px 4px
217
+ - Font: 22px / 600 / Toss Product Sans
218
+ - Use: Highlighted single-line input (amount, name)
219
+
220
+ **Hero**
221
+ - Background: transparent
222
+ - Text: `#333d4b`
223
+ - Border: 1px solid `#e5e8eb` (bottom only)
224
+ - Radius: 0px
225
+ - Padding: 0px 0px 4px
226
+ - Font: 30px / 600 / Toss Product Sans
227
+ - Use: Eye-catching hero input — large amount entry, sign-up moment
228
+
229
+ **Error**
230
+ - Background: `rgba(0, 23, 51, 0.02)` (box variant base)
231
+ - Text: `#333d4b`
232
+ - Border: 1px solid `#f04452`
233
+ - Radius: 14px
234
+ - Padding: 14px 16px
235
+ - Font: 17px / 400 / Toss Product Sans
236
+ - Use: `hasError` state — paired with inline help message in `#f04452`
237
+
238
+ `SplitTextField` (OTP), `SecureKeypad` (financial PIN with randomised digit positions), and `TextArea` are documented separately under TDS but reuse the same focus ring and base radii.
239
+
240
+ ### Cards
241
+
242
+ **Standard**
243
+ - Background: `#ffffff`
244
+ - Border: none
245
+ - Radius: 12px
246
+ - Padding: 20px
247
+ - Shadow: `0px 2px 8px rgba(0,0,0,0.08)`
248
+ - Use: Account, transaction, balance — the workhorse surface
249
+
250
+ **Featured**
251
+ - Background: `#ffffff`
252
+ - Border: none
253
+ - Radius: 16px
254
+ - Padding: 24px
255
+ - Shadow: `0px 2px 8px rgba(0,0,0,0.08)`
256
+ - Use: Hero/promotional cards on the home tab
257
+
258
+ **Compact**
259
+ - Background: `#ffffff`
260
+ - Border: 1px solid `#e5e8eb`
261
+ - Radius: 8px
262
+ - Padding: 12px
263
+ - Shadow: none
264
+ - Use: Inline list items where a softer 1px edge replaces shadow
265
+
266
+ ### Badges
267
+
268
+ Toss `<Badge>` is a 3-axis component: **variant** × **color** × **size**. Variants `fill | weak`. Colors `blue | teal | green | red | yellow | elephant`. Sizes `xsmall | small | medium | large` (each shifts radius/font/padding). Verified at `tossmini-docs.toss.im/tds-mobile/components/badge`.
269
+
270
+ **Fill / Blue (medium default)**
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: Primary status / category emphasis ("NEW", "BEST")
278
+
279
+ **Fill / Green**
280
+ - Background: `#22c55e`
281
+ - Text: `#ffffff`
282
+ - Border: none
283
+ - Radius: 12px
284
+ - Padding: 3px 7px
285
+ - Font: 13px / 700 / Toss Product Sans
286
+ - Use: Success / completion state (입금 완료, 송금 성공)
287
+
288
+ **Fill / Red**
289
+ - Background: `#ef4444`
290
+ - Text: `#ffffff`
291
+ - Border: none
292
+ - Radius: 12px
293
+ - Padding: 3px 7px
294
+ - Font: 13px / 700 / Toss Product Sans
295
+ - Use: Negative / blocking state (실패, 차단)
296
+
297
+ **Fill / Yellow**
298
+ - Background: `#eab308`
299
+ - Text: `#ffffff`
300
+ - Border: none
301
+ - Radius: 12px
302
+ - Padding: 3px 7px
303
+ - Font: 13px / 700 / Toss Product Sans
304
+ - Use: Caution / pending (검토 중, 보류)
305
+
306
+ **Weak / Blue**
307
+ - Background: `rgba(100, 168, 255, 0.15)`
308
+ - Text: `#2272eb`
309
+ - Border: none
310
+ - Radius: 12px
311
+ - Padding: 3px 7px
312
+ - Font: 13px / 700 / Toss Product Sans
313
+ - Use: Subtle informational badge
314
+
315
+ **Weak / Green**
316
+ - Background: `rgba(34, 197, 94, 0.15)`
317
+ - Text: `#16a34a`
318
+ - Border: none
319
+ - Radius: 12px
320
+ - Padding: 3px 7px
321
+ - Font: 13px / 700 / Toss Product Sans
322
+ - Use: Subtle success state
323
+
324
+ **Weak / Red**
325
+ - Background: `rgba(239, 68, 68, 0.15)`
326
+ - Text: `#dc2626`
327
+ - Border: none
328
+ - Radius: 12px
329
+ - Padding: 3px 7px
330
+ - Font: 13px / 700 / Toss Product Sans
331
+ - Use: Subtle negative state
332
+
333
+ **Weak / Elephant**
334
+ - Background: `rgba(2, 32, 71, 0.05)`
335
+ - Text: `#4e5968`
336
+ - Border: none
337
+ - Radius: 12px
338
+ - Padding: 3px 7px
339
+ - Font: 13px / 700 / Toss Product Sans
340
+ - Use: Neutral metadata badge
341
+
342
+ Size scale (height · font · radius · padding): `xsmall` 21px · 10px / 600 · 9px · 3px 7px; `small` 24px · 12px / 700 · 11px · 3px 7px; `medium` 26px · 13px / 700 · 12px · 3px 7px; `large` 29px · 14px / 700 · 13px · 4px 8px. Color also supports `teal` and full mapping for each color name; values above show the most-used 4 fills + 4 weaks at medium size.
343
+
344
+ ### Tabs
345
+
346
+ **Bottom Tab (Active)**
347
+ - Background: `#ffffff`
348
+ - Text: `#191f28`
349
+ - Border: 1px solid `#e5e8eb` (top border only)
350
+ - Active: `#3182f6` (icon and label)
351
+ - Disabled: `#b0b8c1` (icon) + `#8b95a1` (label)
352
+ - Font: 11px / 500 / Toss Product Sans
353
+ - Use: Bottom navigation bar — fixed white background, no shadow
354
+
355
+ **Segmented**
356
+ - Background: `#f2f4f6`
357
+ - Text: `#8b95a1`
358
+ - Border: none
359
+ - Radius: 12px
360
+ - Padding: 8px 16px
361
+ - Active: `#ffffff` background + `#191f28` text + `0px 2px 4px rgba(0,0,0,0.06)` shadow
362
+ - Font: 14px / 600 / Toss Product Sans
363
+ - Use: Section switching within a screen (월/주/일 전환)
364
+
365
+ ### Toasts
366
+
367
+ **Default**
368
+ - Background: `#191f28`
369
+ - Text: `#ffffff`
370
+ - Border: none
371
+ - Radius: 8px
372
+ - Padding: 12px 16px
373
+ - Shadow: `0px 4px 12px rgba(0,0,0,0.12)`
374
+ - Font: 14px / 500 / Toss Product Sans
375
+ - Use: Auto-dismissing transient notification ("복사되었습니다"). Money-moved success is a dedicated screen, never a toast.
376
+
377
+ ### Dialogs
378
+
379
+ **Centered Modal**
380
+ - Background: `#ffffff`
381
+ - Text: `#191f28`
382
+ - Border: none
383
+ - Radius: 16px
384
+ - Padding: 24px
385
+ - Shadow: `0px 4px 12px rgba(0,0,0,0.12)`
386
+ - Use: AlertDialog / ConfirmDialog for confirmation prompts
387
+
388
+ **Bottom Sheet**
389
+ - Background: `#ffffff`
390
+ - Text: `#191f28`
391
+ - Border: none
392
+ - Radius: 16px (top corners only)
393
+ - Padding: 24px 20px
394
+ - Shadow: `0px -4px 12px rgba(0,0,0,0.08)`
395
+ - Use: Bottom-attached overlay for selection, picker, secondary form (managed via `overlay-kit`)
396
+
397
+ ### Toggles
398
+
399
+ **Default**
400
+ - Background: `#3182f6` (on) / `#d1d6db` (off)
401
+ - Border: none
402
+ - Radius: 9999px
403
+ - Thumb: `#ffffff` 18px circle with `0px 1px 2px rgba(0,0,0,0.1)` shadow
404
+ - Use: Boolean settings (알림 켜기, 자동 송금)
405
+
406
+ ---
407
+
408
+ **Verified:** 2026-05-08 (full-depth, A1 loop)
409
+ **Tier 1 sources:** tossmini-docs.toss.im/tds-mobile (TDS Mobile spec docs — Button/TextField/Badge), toss.im (live DOM via playwright — `.p-button` web variants `#3182f6` / 7px radius / 15px / 600, distinct from TDS Mobile geometry; nav links `#4e5968` 8px transparent; App Store/Play CTA `rgba(0,12,30,0.8)` / 7px / 17px·600)
410
+ **Tier 2 sources:** getdesign.md/toss — no record. styles.refero.design — no record (?q=Toss returns 0 hits).
411
+ **Tier 2b status:** unavailable; Tier 1 (TDS Mobile docs + live web inspect) treated as authoritative per pipeline.
412
+ **Surface split:** §4 above documents the **TDS Mobile (app)** system. The marketing web (toss.im) uses a **distinct `.p-button` system** — Primary `#3182f6` / 7px / 15px·600 / 11×16 / 40px height; Secondary Light Blue `#e8f3ff` bg / `#1b64da` text / 7px (parallel geometry). Both retained as parallel systems.
413
+ **Conflicts unresolved:** none. TDS Mobile geometry (16px radius, 17px·600) and web `.p-button` (7px, 15px·600) coexist on different surfaces and were not in conflict.
414
+
415
+ ## 5. Layout Principles
416
+
417
+ ### Spacing System
418
+ - Base unit: 8px
419
+ - Common values: 4px, 8px, 12px, 16px, 20px, 24px, 32px, 40px, 48px
420
+ - Horizontal padding: 20px (slightly wider than typical 16px)
421
+ - Financial data grids: tighter 4px internal spacing
422
+
423
+ ### Grid & Container
424
+ - Design baseline: 375px mobile width
425
+ - Content: full-width with 20px horizontal padding
426
+ - No explicit multi-column grid -- single-column, mobile-first
427
+ - Transaction lists: full-width rows with consistent left-align for amounts
428
+
429
+ ### Whitespace Philosophy
430
+ - **Breathing room for money**: Financial numbers get extra surrounding space. A balance at 30px with 32px margins communicates security through spaciousness.
431
+ - **Progressive density**: Summary screens are spacious; detail/transaction screens are denser. The deeper you go, the more information-dense.
432
+ - **Grouped by function**: Send/receive/invest actions separated by 24px+ gaps; related data within a group uses 8-12px gaps.
433
+
434
+ ### Border Radius Scale
435
+ - Compact (4px): Small badges, inline elements
436
+ - Standard (8px): Inputs, small buttons, compact cards
437
+ - Comfortable (12px): Standard cards, dialog corners
438
+ - Large (16px): Featured cards, bottom sheet top corners
439
+ - Pill (9999px): Toggle switches, floating chips
440
+
441
+ ## 6. Depth & Elevation
442
+
443
+ | Level | Treatment | Use |
444
+ |-------|-----------|-----|
445
+ | Flat (Level 0) | No shadow | Page background, inline elements |
446
+ | Subtle (Level 1) | `0px 1px 3px rgba(0,0,0,0.06)` | Slight lift, list item separation |
447
+ | Standard (Level 2) | `0px 2px 8px rgba(0,0,0,0.08)` | Cards, content panels |
448
+ | Elevated (Level 3) | `0px 4px 12px rgba(0,0,0,0.12)` | Dropdowns, popovers, floating buttons |
449
+ | Modal (Level 4) | `0px 8px 24px rgba(0,0,0,0.16)` | Bottom sheets, dialogs, modals |
450
+
451
+ **Shadow Philosophy**: Toss keeps shadows minimal and neutral. In a financial app, visual noise undermines trust -- elevation is communicated through subtle opacity differences rather than dramatic depth. Pure black with low opacity creates clinical precision matching the fintech context. Where Stripe uses brand-colored shadows, Toss uses restraint as its brand statement.
452
+
453
+ ### Blur Effects
454
+ - Menu components use backdrop blur for lightweight floating panels
455
+ - Navigation bar applies subtle blur on scroll for the sticky header
456
+
457
+ ## 7. Do's and Don'ts
458
+
459
+ ### Do
460
+ - Use Toss Blue (`#3182f6`) for all interactive elements -- links, buttons, toggles, selections
461
+ - Apply the full font stack with Korean fallbacks including Tossface emoji
462
+ - Use tabular (fixed-width) numerals for financial data and transaction amounts
463
+ - Use 700 weight for financial amounts and headings, 400 for body, 600 for emphasis
464
+ - Keep border-radius between 8px-16px for most elements
465
+ - Show positive changes in green (`#03b26c`), negative in red (`#f04452`)
466
+ - Use blue50 (`#e8f3ff`) for subtle informational backgrounds
467
+
468
+ ### Don't
469
+ - Don't confuse Brand Blue (`#0064FF`) with UI Blue (`#3182f6`) -- brand is for marketing/logo only
470
+ - Don't use heavy shadows -- rely on background color layering, not depth
471
+ - Don't use bold (700) for body text -- reserved for headings and financial amounts
472
+ - Don't mix variable-width and tabular numerals in the same data context
473
+ - Don't use warm accent colors (orange, pink) for primary actions -- blue is the sole interactive hue
474
+ - Don't use border-radius > 16px except for pills/toggles
475
+ - Don't add decorative elements to financial data displays -- clarity is the aesthetic
476
+
477
+ ## 8. Responsive Behavior
478
+
479
+ ### Breakpoints
480
+ | Name | Width | Key Changes |
481
+ |------|-------|-------------|
482
+ | Mobile (Primary) | <480px | Full design fidelity, 375px baseline |
483
+ | Tablet | 480-768px | Expanded cards, optional side margins |
484
+ | Desktop (Web) | >768px | Centered column, max-width ~480px for mobile-web parity |
485
+
486
+ ### Touch Targets
487
+ - Buttons: xlarge (~56px), large (~48px), medium (~40px), small (~36px)
488
+ - List items: minimum 52px row height for financial actions
489
+ - Keypad buttons: large targets (56-64px) for secure input
490
+
491
+ ### Collapsing Strategy
492
+ - Desktop web mirrors mobile layout in a centered column
493
+ - Bottom sheet → modal dialog on larger screens
494
+ - Sticky bottom CTA bar with safe area insets on all devices
495
+ - Horizontal scrolling card carousels for product discovery
496
+
497
+ ### Image Behavior
498
+ - Bank/service logos: 24-40px with consistent sizing within context
499
+ - Tossface emojis: inline at text size, display size for decorative use
500
+ - Charts/graphs: full-width, responsive, maintain aspect ratio
501
+
502
+ ## 9. Agent Prompt Guide
503
+
504
+ ### Quick Color Reference
505
+ - Primary CTA: Toss Blue (`#3182f6`)
506
+ - CTA Hover: Blue 600 (`#2272eb`)
507
+ - Background: Pure White (`#ffffff`)
508
+ - Background Surface: Light Gray (`#f2f4f6`)
509
+ - Heading text: Dark Charcoal (`#191f28`)
510
+ - Body text: Medium Gray (`#6b7684`)
511
+ - Caption text: Gray (`#8b95a1`)
512
+ - Placeholder: Soft Gray (`#b0b8c1`)
513
+ - Border: Gray 200 (`#e5e8eb`)
514
+ - Success/Positive: Green (`#03b26c`)
515
+ - Error/Negative: Red (`#f04452`)
516
+ - Warning: Orange (`#fe9800`)
517
+
518
+ ### Example Component Prompts
519
+ - "Create a balance card: white bg, 12px radius, 20px padding. Balance label 14px weight 400, #8b95a1. Amount 30px weight 700, #191f28, tabular numerals. Currency '원' 20px weight 400. Shadow 0px 2px 8px rgba(0,0,0,0.08)."
520
+ - "Build a send-money button: #3182f6 bg, white text, 16px weight 600, min-height 56px, 12px radius, full-width. Pressed: overlay dim. Loading: 3-dot white animation."
521
+ - "Design a transaction row: full-width, 16px h-padding, 52px min-height. Left: 32px circle icon + name (14px weight 600, #191f28) + category (13px weight 400, #8b95a1). Right: amount (14px weight 600, #f04452 expense / #03b26c income)."
522
+ - "Create an OTP input: 6 boxes, each 48px wide, 56px tall, 8px radius, 1px border #e5e8eb. Active: 2px border #3182f6. Digit: 24px weight 700, centered, #191f28."
523
+ - "Design a bottom tab bar: white bg, top border 1px #e5e8eb. 4 tabs evenly spaced. Active: #3182f6 icon + #191f28 label 11px weight 500. Inactive: #b0b8c1 icon + #8b95a1 label. Tab height 56px with safe area."
524
+
525
+ ### Iteration Guide
526
+ 1. Always use the full Toss Product Sans font stack with Korean fallbacks
527
+ 2. Primary interactive color is `#3182f6` (blue500) -- never `#0064FF` (brand blue)
528
+ 3. Financial numbers: 700 weight, tabular numerals, right-aligned in lists
529
+ 4. Grey scale has warm undertones: grey900 `#191f28`, grey50 `#f9fafb`
530
+ 5. Border-radius: 8px inputs, 12px cards, 16px sheets, pill for toggles
531
+ 6. Shadows are single-layer, pure black opacity, no colored tints
532
+ 7. Mobile-first: design at 375px, 20px horizontal padding
533
+
534
+ ---
535
+
536
+ ## 10. Voice & Tone
537
+
538
+ Toss speaks like a friend who happens to be a fiduciary: calm, unhurried, zero jargon, positive statements without hedging. Balance is stated, not "approximately" anything. Korean is the primary voice — English UI strings are secondary translations, not parity. Sentences end in periods; buttons do not. No emoji in financial contexts. Tossface exists as brand decoration but is disallowed on money-handling screens.
539
+
540
+ | Context | Tone |
541
+ |---|---|
542
+ | CTAs | Imperative, short Korean verb form (`송금하기`, `확인`, `가입하기`) |
543
+ | Success toasts | Past-tense single sentence (`송금이 완료되었어요`). No emoji. |
544
+ | Error messages | Specific + blameless + actionable. Never `문제가 발생했습니다`. |
545
+ | Onboarding screens | Second-person, one idea per screen, no bullet lists. |
546
+ | Financial amounts | Bare numerals with comma separators, then currency unit. `1,240,000원`, never `₩1.24M`. |
547
+ | Empty states | Explain the *why* in one line, offer one action. Never `데이터가 없습니다`. |
548
+ | Legal / disclosure | Korean financial-regulation tone — formal `합니다` endings. Single exception to the casual voice. |
549
+
550
+ **Forbidden phrases.** `불편을 드려 죄송합니다`, `Oops`, `죄송하지만`, `약 ~원` (approximation on money), any sentence starting with `I'm sorry` in English strings. Rounded currency amounts (`약 120만원`) are forbidden on primary surfaces; exact numerals only.
551
+
552
+ ## 11. Brand Narrative
553
+
554
+ Toss is the consumer brand of **Viva Republica** (비바리퍼블리카), founded by **Lee Seung-gun (이승건)** — a former dentist who [left a Samsung-owned hospital](https://en.wikipedia.org/wiki/Lee_Seung-gun) to build it ([Wikipedia: Viva Republica](https://en.wikipedia.org/wiki/Viva_Republica), [Fortune Asia, 2025](https://fortune.com/asia/2025/04/23/toss-founder-lee-seunggun-south-korea-viva-republica/)). Lee tried **eight failed ventures** before Toss; the Toss money-transfer product launched in 2014 ([Caproasia, 2025](https://www.caproasia.com/2025/07/26/south-korea-financial-app-toss-plans-united-states-ipo-in-2026)) into a Korean banking market dominated by legacy institutions — KB, Shinhan, Woori, Hana — each with institutional-indigo websites, 12-digit account numbers, Active-X plug-ins, and the presumption that handling money had to feel like filing taxes. The founding rejection was of that entire aesthetic vocabulary. The specific cerulean `#3182f6` was chosen because it was **not** the indigo of any incumbent bank. The optimism of the color was the whole thesis: money could feel light.
555
+
556
+ Toss reached **20M+ users by 2021** (Wikipedia) and operates as a financial super-app spanning lending, payments, brokerage, insurance, and credit scoring. As of 2025, the company plans a **US IPO in 2026 at ~$15B valuation**, raising $2.5B (Caproasia, July 2025), with investors including Altos Ventures, Goodwater Capital, HongShan Capital, PayPal, GIC, and Korea Development Bank.
557
+
558
+ Toss is not a neo-bank. It's a super-app: one interface holds transfers, investments, credit scoring, insurance, brokerage, and lending. The design's job is to flatten that complexity into **one gesture per screen**. That requires extreme restraint — shadows are single-layer black, palette is blue-and-neutral, type is one family in three weights. Every ornamental move costs clarity, and clarity is the entire brand promise.
559
+
560
+ What Toss refuses: the institutional seriousness of legacy finance, the playfulness of consumer apps (no bright pink, no illustrations of cartoon piggy banks), the data-viz density of Bloomberg-style terminals. Toss occupies a narrow middle — calm but optimistic, dense with functionality but spacious in presentation.
561
+
562
+ ## 12. Principles
563
+
564
+ 1. **Breathing room for money.** Financial amounts get ≥1.5× the surrounding spacing of normal text. A balance at 30px with 32px margins is correct; the same balance at 16px margins looks cheap and therefore untrustworthy.
565
+ 2. **Progressive density.** Summary screens are spacious; detail and transaction screens are dense. The deeper the user navigates, the more information per pixel — they've committed to the context and want facts.
566
+ 3. **One action per screen.** If a screen has two primary buttons, it is two screens. Secondary actions are acceptable; two primaries are never acceptable.
567
+ 4. **Blue is interaction, not decoration.** `#3182f6` appears only where the user can tap. It never decorates. Illustrations, ornaments, borders, and headers never use blue500 unless they are interactive surfaces.
568
+ 5. **Restraint communicates trust.** Shadows are single-layer, pure black, low opacity. No colored shadows, no multi-layer elevation stacks. In finance, visual noise is credibility tax.
569
+ 6. **Korean and Latin are co-equal.** Never assume one is primary. Typography stacks, optical weights, and tabular numerals all assume both scripts render simultaneously in the same line.
570
+ 7. **Numbers are typography.** Financial amounts use 700 weight and tabular numerals with the same care as display headings. Amounts never inherit body-text weight.
571
+ 8. **Negative space is a brand asset.** If reducing padding would fit more on screen, the answer is another screen, not tighter packing.
572
+
573
+ ## 13. Personas
574
+
575
+ *Personas below are fictional archetypes informed by publicly described Korean fintech user segments, not individual people.*
576
+
577
+ **정민 (Jeongmin), 28, Seoul.** Software engineer at a mid-size startup. Opens Toss 2–3 times a day — morning subway, post-lunch balance check, evening transfer to a flatmate. Expects the app to open directly to the account screen and paint in under 1s. If she has to tap twice to see her money, she's already irritated. Uses both Korean and English on-device; reads financial English natively but prefers Korean UI for speed.
578
+
579
+ **이선생님 (Mr. Lee), 54, Busan.** Runs a three-person machining shop. His daughter set up Toss for him two years ago. Primary use: transferring to suppliers and receiving invoice payments. Needs one-tap repeat transfer — he has about 12 regular counterparties. Distrusts anything that looks like an advertisement. Would uninstall the app before tapping a promoted banner. Reads Korean only; English strings on product surfaces are invisible to him. Values receipts and transaction history — never deletes them.
580
+
581
+ **예은 (Yeeun), 21, Daegu.** University student, third year, Economics. Toss is her primary banking app — she opened her first account through it, and has never touched a legacy bank's web interface except under duress. Expects Toss Blue to be "banking blue." If another financial app uses cerulean, she assumes it's imitating Toss. Sends ₩5,000–₩30,000 amounts constantly (splitting bills, paying back friends). Treats the app like a messaging app with money attached.
582
+
583
+ ## 14. States
584
+
585
+ | State | Treatment |
586
+ |---|---|
587
+ | **Empty (first use)** | Single paragraph of `grey700` body text explaining *why* the screen is empty (`아직 거래내역이 없어요`), plus one suggested action as a secondary button (blue50 bg, blue500 text). Never an illustration. Never `데이터가 없습니다`. |
588
+ | **Empty (filter cleared)** | Single line of `grey500` caption (`조건에 맞는 결과가 없어요`). No button — user resets the filter themselves. |
589
+ | **Loading (first paint)** | Skeleton blocks matching the final layout's structure at `#f2f4f6` (grey100). Financial amounts render as `--` until resolved; they never appear as skeleton blocks (would look like they have a placeholder value). |
590
+ | **Loading (refresh)** | Top bar pull-down spinner in blue500. No overlay, no blocking. Content stays visible with its previous values. |
591
+ | **Error (inline field)** | `#f04452` (red500) 2px border on the input, error text below in red500 13px. One actionable sentence (`계좌번호를 다시 확인해주세요`). |
592
+ | **Error (toast)** | `#191f28` background, white 14px 400 text, 3s auto-dismiss. One sentence. No icons. Bottom of screen with 20px inset. |
593
+ | **Error (screen-blocking)** | Reserved for server outage. White screen, centered single-line message in `grey900` 16px weight 600, retry button in blue500 below. No illustration. |
594
+ | **Success (inline flash)** | Brief flash of `#e8f3ff` (blue50) background behind the updated element, 300ms fade to default. For routine actions like toggling a setting. |
595
+ | **Success (money moved)** | Dedicated confirmation screen — not a toast. `#03b26c` (green500) checkmark top-center, exact amount in 30px weight 700 below, recipient name, timestamp. Single button: `확인`. This weight is intentional; money moving is never a toast. |
596
+ | **Skeleton** | `#f2f4f6` blocks at exact final dimensions. 1.2s shimmer as `linear-gradient` with 8% white highlight. Rounded at component radius (8px/12px/16px per component). Never used on financial amounts — those show `--`. |
597
+ | **Disabled** | Button opacity drops per `--button-disabled-opacity-color`. No grey-out of input borders — disabled inputs keep `grey200` border, so the geometry is stable if re-enabled. |
598
+ | **Loading inside pressed button** | Text is replaced by the 3-dot white animation. Width of the button does not change. Press is visually committed; user cannot double-submit. |
599
+
600
+ ## 15. Motion & Easing
601
+
602
+ **Durations** (named, not raw milliseconds):
603
+
604
+ | Token | Value | Use |
605
+ |---|---|---|
606
+ | `motion-instant` | 0ms | Toggle flips, checkbox state changes |
607
+ | `motion-fast` | 150ms | Hover, focus, small reveals, button press overlay |
608
+ | `motion-standard` | 250ms | The default — sheet opens, card expands, tab switches |
609
+ | `motion-slow` | 400ms | Emphasized transitions — success checkmarks, onboarding step advances |
610
+ | `motion-page` | 350ms | Full-screen transitions between top-level routes |
611
+
612
+ **Easings:**
613
+
614
+ | Token | Curve | Use |
615
+ |---|---|---|
616
+ | `ease-enter` | `cubic-bezier(0.0, 0.0, 0.2, 1)` | Things appearing — sheets, toasts, screen pushes |
617
+ | `ease-exit` | `cubic-bezier(0.4, 0.0, 1, 1)` | Things leaving — dismissals, pops |
618
+ | `ease-standard` | `cubic-bezier(0.4, 0.0, 0.2, 1)` | Two-way transitions — collapsible cards, tab content |
619
+ | `ease-spring` | `cubic-bezier(0.34, 1.56, 0.64, 1)` | Reserved. Only for money-moved success checkmark. Nowhere else — overshoot on routine UI would feel unserious. |
620
+
621
+ **Signature motions.**
622
+
623
+ 1. **Money-moves.** When a balance updates, the old number slides up 20px and fades out (`motion-fast / ease-exit`), the new number slides in from below 20px (`motion-standard / ease-enter`). Never cross-fade money — a financial amount flickering between values looks like a bug.
624
+ 2. **Bottom-sheet presentation.** Sheets rise from `y+40px` with `motion-standard / ease-enter` and a synchronized backdrop fade from `rgba(2,9,19,0)` to `rgba(2,9,19,0.5)`. Dismissal uses `motion-fast / ease-exit` — leaving feels lighter than entering.
625
+ 3. **Success checkmark.** On money-moved confirmation, the checkmark draws over `motion-slow` with `ease-spring`. This is the one place spring easing is licensed. Everywhere else, standard easing.
626
+ 4. **Reduce motion.** If `prefers-reduced-motion: reduce`, all `motion-*` tokens collapse to `motion-instant`. No exceptions. Crossfades replace slides. The app stays usable; just less kinetic.
627
+
628
+ <!--
629
+ OmD v0.1 Sources — Philosophy Layer (sections 10–15)
630
+
631
+ Direct verification via WebFetch (2026-04-19):
632
+ - https://toss.im/ — confirms Viva Republica (비바리퍼블리카) as operating company,
633
+ unified-finance super-app positioning ("내 모든 금융 내역을 한눈에 조회하고 한 곳에서 관리하세요"),
634
+ and mission framing "모두의 금융에 자유를" (financial freedom for everyone).
635
+ - https://slash.page/ — confirms Toss maintains a public open-source engineering
636
+ presence ("Copyright © 2024 Viva Republica - Toss Frontend Chapter"), with
637
+ packages including overlay-kit, suspensive, use-funnel — demonstrating the
638
+ design/engineering self-documentation culture referenced in §12 Principles.
639
+
640
+ Base DESIGN.md (sections 1–9) is the source for token-level claims including
641
+ Toss Blue #3182f6, Toss Product Sans, the OKLCH-based palette, and shadow tokens.
642
+
643
+ Not independently verified via WebFetch — widely documented public facts used:
644
+ - Toss (Viva Republica) was founded in 2013; the money-transfer app launched in 2015.
645
+ - Korean legacy-bank institutional palette context (KB, Shinhan, Woori, Hana) is
646
+ general industry knowledge, not a sourced Toss statement.
647
+
648
+ Personas (§13) are fictional archetypes informed by publicly described Korean
649
+ fintech user segments. Any resemblance to specific individuals is unintended.
650
+
651
+ Interpretive claims (e.g., "the specific cerulean was chosen because it was
652
+ not the indigo of any incumbent bank") are editorial readings of the design,
653
+ not documented Toss statements.
654
+ -->
655
+