oh-my-design-cli 1.0.2 → 1.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 (99) hide show
  1. package/README.md +15 -18
  2. package/data/reference-fingerprints.json +337 -3
  3. package/data/reference-tags.md +15 -1
  4. package/package.json +2 -2
  5. package/skills/omd-init/SKILL.md +1 -1
  6. package/web/AGENTS.md +5 -0
  7. package/{references → web/references}/airbnb/DESIGN.md +158 -19
  8. package/web/references/airtable/DESIGN.md +241 -0
  9. package/{references → web/references}/apple/DESIGN.md +131 -76
  10. package/web/references/baemin/DESIGN.md +470 -0
  11. package/{references → web/references}/bmw/DESIGN.md +138 -9
  12. package/{references → web/references}/cal/DESIGN.md +173 -17
  13. package/{references → web/references}/claude/DESIGN.md +11 -1
  14. package/{references → web/references}/clay/DESIGN.md +75 -0
  15. package/{references → web/references}/clickhouse/DESIGN.md +74 -0
  16. package/{references → web/references}/cohere/DESIGN.md +75 -0
  17. package/web/references/coinbase/DESIGN.md +205 -0
  18. package/{references → web/references}/composio/DESIGN.md +74 -0
  19. package/web/references/coupang/DESIGN.md +487 -0
  20. package/{references → web/references}/cursor/DESIGN.md +74 -0
  21. package/web/references/dcard/DESIGN.md +567 -0
  22. package/{references → web/references}/elevenlabs/DESIGN.md +91 -0
  23. package/{references → web/references}/expo/DESIGN.md +72 -0
  24. package/{references → web/references}/ferrari/DESIGN.md +72 -0
  25. package/{references → web/references}/figma/DESIGN.md +124 -48
  26. package/{references → web/references}/framer/DESIGN.md +143 -16
  27. package/web/references/freee/DESIGN.md +558 -0
  28. package/{references → web/references}/hashicorp/DESIGN.md +72 -0
  29. package/{references → web/references}/ibm/DESIGN.md +68 -0
  30. package/{references → web/references}/intercom/DESIGN.md +73 -0
  31. package/web/references/kakao/DESIGN.md +490 -0
  32. package/web/references/kakaobank/DESIGN.md +533 -0
  33. package/web/references/karrot/DESIGN.md +431 -0
  34. package/web/references/kraken/DESIGN.md +219 -0
  35. package/web/references/krds/DESIGN.md +982 -0
  36. package/web/references/kurly/DESIGN.md +574 -0
  37. package/{references → web/references}/lamborghini/DESIGN.md +74 -0
  38. package/{references → web/references}/line/DESIGN.md +84 -43
  39. package/{references → web/references}/linear.app/DESIGN.md +8 -1
  40. package/{references → web/references}/lovable/DESIGN.md +73 -0
  41. package/web/references/mercari/DESIGN.md +464 -0
  42. package/{references → web/references}/minimax/DESIGN.md +72 -0
  43. package/{references → web/references}/mintlify/DESIGN.md +72 -0
  44. package/web/references/miro/DESIGN.md +252 -0
  45. package/{references → web/references}/mistral.ai/DESIGN.md +72 -0
  46. package/{references → web/references}/mongodb/DESIGN.md +72 -0
  47. package/web/references/musinsa/DESIGN.md +536 -0
  48. package/web/references/naver/DESIGN.md +518 -0
  49. package/{references → web/references}/notion/DESIGN.md +9 -1
  50. package/web/references/nvidia/DESIGN.md +491 -0
  51. package/web/references/ohouse/DESIGN.md +570 -0
  52. package/{references → web/references}/ollama/DESIGN.md +72 -0
  53. package/{references → web/references}/opencode.ai/DESIGN.md +73 -0
  54. package/web/references/pinkoi/DESIGN.md +575 -0
  55. package/{references → web/references}/pinterest/DESIGN.md +73 -0
  56. package/{references → web/references}/posthog/DESIGN.md +172 -18
  57. package/web/references/qanda/DESIGN.md +459 -0
  58. package/{references → web/references}/raycast/DESIGN.md +169 -34
  59. package/{references → web/references}/renault/DESIGN.md +72 -0
  60. package/{references → web/references}/replicate/DESIGN.md +73 -0
  61. package/{references → web/references}/resend/DESIGN.md +73 -0
  62. package/{references → web/references}/revolut/DESIGN.md +74 -0
  63. package/web/references/ridi/DESIGN.md +517 -0
  64. package/{references → web/references}/runwayml/DESIGN.md +152 -24
  65. package/{references → web/references}/sanity/DESIGN.md +72 -0
  66. package/{references → web/references}/sentry/DESIGN.md +73 -0
  67. package/web/references/spacex/DESIGN.md +379 -0
  68. package/web/references/spotify/DESIGN.md +426 -0
  69. package/{references → web/references}/stripe/DESIGN.md +44 -1
  70. package/{references → web/references}/supabase/DESIGN.md +73 -0
  71. package/{references → web/references}/superhuman/DESIGN.md +159 -17
  72. package/{references → web/references}/tesla/DESIGN.md +170 -0
  73. package/{references → web/references}/together.ai/DESIGN.md +73 -0
  74. package/{references → web/references}/toss/DESIGN.md +304 -50
  75. package/{references → web/references}/uber/DESIGN.md +73 -0
  76. package/{references → web/references}/vercel/DESIGN.md +9 -1
  77. package/{references → web/references}/voltagent/DESIGN.md +73 -0
  78. package/{references → web/references}/warp/DESIGN.md +142 -15
  79. package/web/references/webflow/DESIGN.md +253 -0
  80. package/{references → web/references}/wise/DESIGN.md +84 -0
  81. package/{references → web/references}/x.ai/DESIGN.md +85 -0
  82. package/web/references/yanolja/DESIGN.md +448 -0
  83. package/web/references/yeogiotte/DESIGN.md +424 -0
  84. package/{references → web/references}/zapier/DESIGN.md +85 -0
  85. package/references/airtable/DESIGN.md +0 -107
  86. package/references/baemin/DESIGN.md +0 -260
  87. package/references/coinbase/DESIGN.md +0 -129
  88. package/references/dcard/DESIGN.md +0 -302
  89. package/references/freee/DESIGN.md +0 -308
  90. package/references/kakao/DESIGN.md +0 -261
  91. package/references/karrot/DESIGN.md +0 -252
  92. package/references/kraken/DESIGN.md +0 -146
  93. package/references/mercari/DESIGN.md +0 -294
  94. package/references/miro/DESIGN.md +0 -108
  95. package/references/nvidia/DESIGN.md +0 -308
  96. package/references/pinkoi/DESIGN.md +0 -309
  97. package/references/spacex/DESIGN.md +0 -205
  98. package/references/spotify/DESIGN.md +0 -246
  99. package/references/webflow/DESIGN.md +0 -109
@@ -91,60 +91,312 @@ What defines Toss visually is its OKLCH-based color system, rebuilt from scratch
91
91
 
92
92
  ### Buttons
93
93
 
94
- **Primary (Fill)**
95
- - Background: `#3182f6` (blue500)
94
+ 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).
95
+
96
+ **Fill / Primary**
97
+ - Background: `#3182f6`
98
+ - Text: `#ffffff`
99
+ - Border: none
100
+ - Radius: 16px
101
+ - Padding: 0 20px
102
+ - Font: 17px / 600 / Toss Product Sans
103
+ - Pressed: dim overlay via `--button-pressed-background-color` + `--button-pressed-opacity`
104
+ - Disabled: bg opacity scaled by `--button-disabled-opacity-color`
105
+ - Loading: 3-dot indicator replacing label, button width preserved
106
+ - Use: Primary CTA on light surfaces (송금하기, 확인) — 56px tall
107
+
108
+ **Fill / Dark**
109
+ - Background: `#4e5968`
96
110
  - Text: `#ffffff`
97
- - Radius: `var(--button-border-radius)` (typically 8px-12px)
98
- - Font: 16px weight 600
99
- - Pressed: dimmed overlay (opacity reduction)
100
- - Loading: 3-dot animation replacing text
101
- - Disabled: reduced opacity via `--button-disabled-opacity-color`
102
- - Display modes: `inline` (auto-width), `block` (full-width with line break), `full` (fills parent)
103
- - Sizes: `tiny`, `medium`, `large`, `big` (default)
104
- - Colors: `primary`, `dark`, `danger`, `light`
105
- - Use: Primary CTAs ("송금하기", "확인")
106
-
107
- **Secondary (Weak)**
108
- - Background: `#e8f3ff` (blue50) or `#f2f4f6` (grey100)
109
- - Text: `#3182f6` (blue500) or `#191f28` (grey900)
110
- - Use: Less prominent CTAs, secondary actions
111
-
112
- **Dark**
113
- - Background: `#191f28` (grey900)
111
+ - Border: none
112
+ - Radius: 16px
113
+ - Padding: 0 20px
114
+ - Font: 17px / 600 / Toss Product Sans
115
+ - Use: Strong action where blue would feel too playful (admin/settings CTA)
116
+
117
+ **Fill / Danger**
118
+ - Background: `#f04452`
114
119
  - Text: `#ffffff`
115
- - Use: Actions on light backgrounds where blue would be too playful
120
+ - Border: none
121
+ - Radius: 16px
122
+ - Padding: 0 20px
123
+ - Font: 17px / 600 / Toss Product Sans
124
+ - Use: Destructive confirmation (계좌 삭제, 거래 취소)
125
+
126
+ **Fill / Light**
127
+ - Background: `#ffffff`
128
+ - Text: `#1b64da`
129
+ - Border: none
130
+ - Radius: 16px
131
+ - Padding: 0 20px
132
+ - Font: 17px / 600 / Toss Product Sans
133
+ - Use: CTA on dark / colored surfaces (sits on non-white bg to be legible)
134
+
135
+ **Weak / Primary**
136
+ - Background: `rgba(100, 168, 255, 0.15)`
137
+ - Text: `#2272eb`
138
+ - Border: none
139
+ - Radius: 16px
140
+ - Padding: 0 20px
141
+ - Font: 17px / 600 / Toss Product Sans
142
+ - Use: Secondary action paired with Fill / Primary on the same screen
143
+
144
+ **Weak / Dark**
145
+ - Background: `rgba(2, 32, 71, 0.05)`
146
+ - Text: `#4e5968`
147
+ - Border: none
148
+ - Radius: 16px
149
+ - Padding: 0 20px
150
+ - Font: 17px / 600 / Toss Product Sans
151
+ - Use: Neutral / cancel-style secondary (취소, 닫기)
152
+
153
+ **Weak / Danger**
154
+ - Background: `rgba(251, 136, 144, 0.15)`
155
+ - Text: `#e42939`
156
+ - Border: none
157
+ - Radius: 16px
158
+ - Padding: 0 20px
159
+ - Font: 17px / 600 / Toss Product Sans
160
+ - Use: Subtle destructive action (archive instead of delete)
161
+
162
+ **Weak / Light**
163
+ - Background: `rgba(255, 255, 255, 0.15)`
164
+ - Text: `#ffffff`
165
+ - Border: none
166
+ - Radius: 16px
167
+ - Padding: 0 20px
168
+ - Font: 17px / 600 / Toss Product Sans
169
+ - Use: Secondary on dark / colored surfaces
170
+
171
+ 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`.
172
+
173
+ ### Inputs
174
+
175
+ 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`.
176
+
177
+ **Box (default)**
178
+ - Background: `rgba(0, 23, 51, 0.02)`
179
+ - Text: `#333d4b`
180
+ - Border: 1px solid `rgba(2, 32, 71, 0.05)`
181
+ - Radius: 14px
182
+ - Padding: 14px 16px
183
+ - Font: 17px / 400 / Toss Product Sans
184
+ - Placeholder: `#b0b8c1`
185
+ - Focus: border `#3182f6`
186
+ - Use: Standard form input — most-used variant
187
+
188
+ **Line**
189
+ - Background: transparent
190
+ - Text: `#333d4b`
191
+ - Border: 1px solid `#e5e8eb` (bottom only)
192
+ - Radius: 0px
193
+ - Padding: 0px 0px 4px
194
+ - Font: 17px / 400 / Toss Product Sans
195
+ - Use: Underline-style input on dense forms
196
+
197
+ **Big**
198
+ - Background: transparent
199
+ - Text: `#333d4b`
200
+ - Border: 1px solid `#e5e8eb` (bottom only)
201
+ - Radius: 0px
202
+ - Padding: 0px 0px 4px
203
+ - Font: 22px / 600 / Toss Product Sans
204
+ - Use: Highlighted single-line input (amount, name)
205
+
206
+ **Hero**
207
+ - Background: transparent
208
+ - Text: `#333d4b`
209
+ - Border: 1px solid `#e5e8eb` (bottom only)
210
+ - Radius: 0px
211
+ - Padding: 0px 0px 4px
212
+ - Font: 30px / 600 / Toss Product Sans
213
+ - Use: Eye-catching hero input — large amount entry, sign-up moment
214
+
215
+ **Error**
216
+ - Background: `rgba(0, 23, 51, 0.02)` (box variant base)
217
+ - Text: `#333d4b`
218
+ - Border: 1px solid `#f04452`
219
+ - Radius: 14px
220
+ - Padding: 14px 16px
221
+ - Font: 17px / 400 / Toss Product Sans
222
+ - Use: `hasError` state — paired with inline help message in `#f04452`
223
+
224
+ `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.
225
+
226
+ ### Cards
227
+
228
+ **Standard**
229
+ - Background: `#ffffff`
230
+ - Border: none
231
+ - Radius: 12px
232
+ - Padding: 20px
233
+ - Shadow: `0px 2px 8px rgba(0,0,0,0.08)`
234
+ - Use: Account, transaction, balance — the workhorse surface
235
+
236
+ **Featured**
237
+ - Background: `#ffffff`
238
+ - Border: none
239
+ - Radius: 16px
240
+ - Padding: 24px
241
+ - Shadow: `0px 2px 8px rgba(0,0,0,0.08)`
242
+ - Use: Hero/promotional cards on the home tab
243
+
244
+ **Compact**
245
+ - Background: `#ffffff`
246
+ - Border: 1px solid `#e5e8eb`
247
+ - Radius: 8px
248
+ - Padding: 12px
249
+ - Shadow: none
250
+ - Use: Inline list items where a softer 1px edge replaces shadow
116
251
 
117
- **Danger**
118
- - Background: `#f04452` (red500)
252
+ ### Badges
253
+
254
+ 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`.
255
+
256
+ **Fill / Blue (medium default)**
257
+ - Background: `#3182f6`
258
+ - Text: `#ffffff`
259
+ - Border: none
260
+ - Radius: 12px
261
+ - Padding: 3px 7px
262
+ - Font: 13px / 700 / Toss Product Sans
263
+ - Use: Primary status / category emphasis ("NEW", "BEST")
264
+
265
+ **Fill / Green**
266
+ - Background: `#22c55e`
119
267
  - Text: `#ffffff`
120
- - Use: Destructive actions, alert confirmations
121
-
122
- ### Cards & Containers
123
- - Background: `#ffffff` (layeredBackground)
124
- - Border: 1px solid `#e5e8eb` (grey200) or no border
125
- - Radius: 12px (standard), 16px (featured), 8px (compact)
126
- - Shadow: `0px 2px 8px rgba(0,0,0,0.08)` -- single-layer, minimal
127
- - Financial cards: prominent number display with amount in 700 weight, currency label in 400
128
-
129
- ### Inputs & Forms
130
- - Background: `#f2f4f6` (grey100) for contained variant
131
- - Border: 1px solid `#e5e8eb`, focus: 2px solid `#3182f6`
268
+ - Border: none
269
+ - Radius: 12px
270
+ - Padding: 3px 7px
271
+ - Font: 13px / 700 / Toss Product Sans
272
+ - Use: Success / completion state (입금 완료, 송금 성공)
273
+
274
+ **Fill / Red**
275
+ - Background: `#ef4444`
276
+ - Text: `#ffffff`
277
+ - Border: none
278
+ - Radius: 12px
279
+ - Padding: 3px 7px
280
+ - Font: 13px / 700 / Toss Product Sans
281
+ - Use: Negative / blocking state (실패, 차단)
282
+
283
+ **Fill / Yellow**
284
+ - Background: `#eab308`
285
+ - Text: `#ffffff`
286
+ - Border: none
287
+ - Radius: 12px
288
+ - Padding: 3px 7px
289
+ - Font: 13px / 700 / Toss Product Sans
290
+ - Use: Caution / pending (검토 중, 보류)
291
+
292
+ **Weak / Blue**
293
+ - Background: `rgba(100, 168, 255, 0.15)`
294
+ - Text: `#2272eb`
295
+ - Border: none
296
+ - Radius: 12px
297
+ - Padding: 3px 7px
298
+ - Font: 13px / 700 / Toss Product Sans
299
+ - Use: Subtle informational badge
300
+
301
+ **Weak / Green**
302
+ - Background: `rgba(34, 197, 94, 0.15)`
303
+ - Text: `#16a34a`
304
+ - Border: none
305
+ - Radius: 12px
306
+ - Padding: 3px 7px
307
+ - Font: 13px / 700 / Toss Product Sans
308
+ - Use: Subtle success state
309
+
310
+ **Weak / Red**
311
+ - Background: `rgba(239, 68, 68, 0.15)`
312
+ - Text: `#dc2626`
313
+ - Border: none
314
+ - Radius: 12px
315
+ - Padding: 3px 7px
316
+ - Font: 13px / 700 / Toss Product Sans
317
+ - Use: Subtle negative state
318
+
319
+ **Weak / Elephant**
320
+ - Background: `rgba(2, 32, 71, 0.05)`
321
+ - Text: `#4e5968`
322
+ - Border: none
323
+ - Radius: 12px
324
+ - Padding: 3px 7px
325
+ - Font: 13px / 700 / Toss Product Sans
326
+ - Use: Neutral metadata badge
327
+
328
+ 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.
329
+
330
+ ### Tabs
331
+
332
+ **Bottom Tab (Active)**
333
+ - Background: `#ffffff`
334
+ - Text: `#191f28`
335
+ - Border: 1px solid `#e5e8eb` (top border only)
336
+ - Active: `#3182f6` (icon and label)
337
+ - Disabled: `#b0b8c1` (icon) + `#8b95a1` (label)
338
+ - Font: 11px / 500 / Toss Product Sans
339
+ - Use: Bottom navigation bar — fixed white background, no shadow
340
+
341
+ **Segmented**
342
+ - Background: `#f2f4f6`
343
+ - Text: `#8b95a1`
344
+ - Border: none
345
+ - Radius: 12px
346
+ - Padding: 8px 16px
347
+ - Active: `#ffffff` background + `#191f28` text + `0px 2px 4px rgba(0,0,0,0.06)` shadow
348
+ - Font: 14px / 600 / Toss Product Sans
349
+ - Use: Section switching within a screen (월/주/일 전환)
350
+
351
+ ### Toasts
352
+
353
+ **Default**
354
+ - Background: `#191f28`
355
+ - Text: `#ffffff`
356
+ - Border: none
132
357
  - Radius: 8px
133
- - Text: `#191f28`, Placeholder: `#b0b8c1` (grey400)
134
- - Error border: `#f04452` (red500)
135
- - Special: SplitTextField for OTP, SecureKeypad for financial input
136
-
137
- ### Navigation
138
- - Bottom tab bar: white background, top border `#e5e8eb`
139
- - Active: `#3182f6` icon + `#191f28` text, Inactive: `#b0b8c1` icon + `#8b95a1` text
140
- - Top app bar: white, sticky, optional backdrop blur
141
- - Segmented control for section switching
142
-
143
- ### Overlays
144
- - Bottom Sheet: `#ffffff`, 16px top radius, managed via `overlay-kit`
145
- - Dialog: centered modal, AlertDialog and ConfirmDialog variants
146
- - Toast: floating notification, subtle shadow, auto-dismiss
147
- - Tooltip: `#191f28` background, white text, arrow pointer
358
+ - Padding: 12px 16px
359
+ - Shadow: `0px 4px 12px rgba(0,0,0,0.12)`
360
+ - Font: 14px / 500 / Toss Product Sans
361
+ - Use: Auto-dismissing transient notification ("복사되었습니다"). Money-moved success is a dedicated screen, never a toast.
362
+
363
+ ### Dialogs
364
+
365
+ **Centered Modal**
366
+ - Background: `#ffffff`
367
+ - Text: `#191f28`
368
+ - Border: none
369
+ - Radius: 16px
370
+ - Padding: 24px
371
+ - Shadow: `0px 4px 12px rgba(0,0,0,0.12)`
372
+ - Use: AlertDialog / ConfirmDialog for confirmation prompts
373
+
374
+ **Bottom Sheet**
375
+ - Background: `#ffffff`
376
+ - Text: `#191f28`
377
+ - Border: none
378
+ - Radius: 16px (top corners only)
379
+ - Padding: 24px 20px
380
+ - Shadow: `0px -4px 12px rgba(0,0,0,0.08)`
381
+ - Use: Bottom-attached overlay for selection, picker, secondary form (managed via `overlay-kit`)
382
+
383
+ ### Toggles
384
+
385
+ **Default**
386
+ - Background: `#3182f6` (on) / `#d1d6db` (off)
387
+ - Border: none
388
+ - Radius: 9999px
389
+ - Thumb: `#ffffff` 18px circle with `0px 1px 2px rgba(0,0,0,0.1)` shadow
390
+ - Use: Boolean settings (알림 켜기, 자동 송금)
391
+
392
+ ---
393
+
394
+ **Verified:** 2026-05-08 (full-depth, A1 loop)
395
+ **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)
396
+ **Tier 2 sources:** getdesign.md/toss — no record. styles.refero.design — no record (?q=Toss returns 0 hits).
397
+ **Tier 2b status:** unavailable; Tier 1 (TDS Mobile docs + live web inspect) treated as authoritative per pipeline.
398
+ **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.
399
+ **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.
148
400
 
149
401
  ## 5. Layout Principles
150
402
 
@@ -285,7 +537,9 @@ Toss speaks like a friend who happens to be a fiduciary: calm, unhurried, zero j
285
537
 
286
538
  ## 11. Brand Narrative
287
539
 
288
- Toss launched in 2015 as a single-feature money-transfer app in 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.
540
+ 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.
541
+
542
+ 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.
289
543
 
290
544
  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.
291
545
 
@@ -293,3 +293,76 @@ What makes Uber's design truly distinctive is its use of full-bleed photography
293
293
  6. Keep layouts compact and information-dense -- Uber is efficient, not airy
294
294
  7. Illustrations should be warm and human -- describe "stylized people in warm tones" not abstract shapes
295
295
  8. Pair black CTAs with white secondaries for balanced dual-action layouts
296
+
297
+ ## 10. Voice & Tone
298
+
299
+ Uber's voice is **mobility-platform-direct and dual-audience-aware.** Two parallel audiences — riders ("차량 서비스") and drivers ("운전") — with distinct CTAs. Pure black `#000` primary CTA + 999px pill nav signals "modern mobility company."
300
+
301
+ | Context | Tone |
302
+ |---|---|
303
+ | CTA | Verb. "Sign up to ride", "Sign up to drive", "Get started" |
304
+ | Marketing | Dual-audience. Rider page ≠ Driver page |
305
+ | Documentation | Sparse — consumer product |
306
+ | Error | Polite. "Pickup location unavailable. Try a different address." |
307
+
308
+ **Voice samples**
309
+ - Marketing nav (KR): *"차량 서비스"* / *"운전"* <!-- verified: uber.com/kr/ko 2026-05 -->
310
+
311
+ **Forbidden phrases.** "Revolutionary mobility". Aggressive Lyft-comparison framing.
312
+
313
+ ## 11. Brand Narrative
314
+
315
+ Uber was founded **2009** in San Francisco — originally as **UberCab** — by **Garrett Camp** (Canadian entrepreneur, **co-founder of StumbleUpon**) and **Travis Kalanick** ([Travis Kalanick — Wikipedia](https://en.wikipedia.org/wiki/Travis_Kalanick), [Garrett Camp — Wikipedia](https://en.wikipedia.org/wiki/Garrett_Camp)). **Camp had become frustrated with SF taxis and expensive black-car services**, conceived a smartphone-app to hail luxury vehicles directly; discussed with Kalanick who joined as "mega advisor." Neither founder wanted to run the company directly; **Ryan Graves brought on as launch CEO** for **10 months** before being replaced by **Kalanick** (Camp + Graves transferred a large portion of shares to Kalanick on transition). Pioneered ride-hailing → expanded to **Eats / Freight / Delivery**. **2018 rebrand by Wolff Olins** + Uber in-house team — 10 months development, introduced bespoke **Uber Move** typeface + monochrome black-on-white identity + bespoke **Safety Blue** accent ([Design Week — Uber rebrand 2018](https://www.designweek.co.uk/issues/17-23-september-2018/uber-rebrand-looks-to-reflect-how-the-taxi-app-is-changing/), [Dezeen — Uber brings back the U](https://www.dezeen.com/2018/09/14/uber-rebrand-wolff-olins-black-white-wordmark-logo-typography/), [Wolff Olins — Views](https://www.wolffolins.com/views/the-medias-take-on-ubers-new-brand)). **NYSE IPO May 10 2019** under ticker **UBER** at **$45/share** raising **$8.1B** at **~$75B valuation** — biggest IPO of 2019, top-10 ever; closed first day at **$41.57 = biggest first-day dollar loss in U.S. IPO history** ([Uber IR — IPO pricing](https://investor.uber.com/news-events/news/press-release-details/2019/Uber-Announces-Pricing-of-Initial-Public-Offering/default.aspx), [Bloomberg — Uber drops after $8.1B IPO](https://www.bloomberg.com/news/articles/2019-05-10/uber-drops-after-raising-8-1-billion-in-biggest-ipo-of-2019)). The brand evolution post-2017 shifted from aggressive growth-at-all-costs to "platform for mobility" with operational + safety focus — **Dara Khosrowshahi** (current CEO, ex-Expedia) succeeded Kalanick **August 2017**.
316
+
317
+ ## 12. Principles
318
+
319
+ 1. **Dual-audience.** Riders and drivers are first-class. *UI implication:* segment nav clearly separated.
320
+ 2. **Pure black `#000` primary.** *UI implication:* preserve achromatic primary; don't introduce brand color.
321
+ 3. **999px pill nav.** *UI implication:* nav buttons fully pill on white.
322
+ 4. **Black + white dual-action.** *UI implication:* paired CTAs use black/white for balance.
323
+ 5. **Warm illustrations.** *UI implication:* never abstract shapes; warm humans.
324
+
325
+ ## 13. Personas
326
+
327
+ *Personas are fictional archetypes informed by Uber user segments (urban riders, drivers, business travelers), not individual people.*
328
+
329
+ **Sofia Park, 31, Seoul.** Daily Uber rider. Cares about ETA accuracy + driver rating.
330
+
331
+ **Marcus Webb, 38, San Francisco.** Business traveler. Uber for client meetings + airport transfers.
332
+
333
+ **Henrik Nielsen, 45, Copenhagen.** Part-time Uber driver. Cares about earnings transparency + cancellation fees.
334
+
335
+ ## 14. States
336
+
337
+ | State | Treatment |
338
+ |---|---|
339
+ | **Empty (no rides)** | "Request your first ride" CTA |
340
+ | **Empty (no driver activity)** | "Go online" CTA for drivers |
341
+ | **Loading (matching)** | Real-time map with car icon |
342
+ | **Loading (price)** | Surge indicator if active |
343
+ | **Error (no drivers)** | "No drivers nearby. Try Uber Comfort instead." |
344
+ | **Error (payment)** | "Payment failed. Try a different method." |
345
+ | **Success (booked)** | Driver info + ETA + map |
346
+ | **Success (rated)** | Subtle confirmation |
347
+ | **Skeleton (ride history)** | Black/white placeholders |
348
+ | **Disabled (account verification)** | Verify link |
349
+ | **Loading (long match)** | Persistent progress with cancel option |
350
+
351
+ ## 15. Motion & Easing
352
+
353
+ | Token | Value | Use |
354
+ |---|---|---|
355
+ | `motion-instant` | 0ms | Selection |
356
+ | `motion-fast` | 150ms | Hover |
357
+ | `motion-standard` | 250ms | Modal, panel |
358
+ | `motion-map-tracking` | continuous | Real-time map updates |
359
+
360
+ Standard cubic-bezier; no bounce — operational register. `prefers-reduced-motion: reduce` removes map auto-pan.
361
+
362
+ ---
363
+
364
+ **Verified:** 2026-05-08 (omd:migrate run 60 — Apple-tier)
365
+ **Tier 1 sources:** uber.com/kr/ko home + /about (live DOM via playwright — **all-pill 999px chrome with three-fill canvas-awareness**: Header `#000` Black + `#fff` text 999px / 36-38px / 10×12 / 14px·500; Header Inverse `#fff` + `#000` text (Sign-up); Hero `#addec9` **Uber Mint Green** + `#000` text 999px / 48px / 14×16 / 16px·500 soft-pastel signature).
366
+ **Tier 2 sources:** styles.refero.design / getdesign.md — no record.
367
+ **Tier 2 (Philosophy/founders/rebrand/IPO):** Wikipedia (Travis Kalanick, Garrett Camp), Britannica, Design Week / Dezeen / Wolff Olins Views (2018 rebrand), Uber IR (IPO pricing), Bloomberg (2019-05-10 first-day loss), CNBC.
368
+ **Style ref:** `apple` (luxury minimal). **Conflicts unresolved:** none. **Earlier addition:** Inverse White Sign-up + Mint Green `#addec9` hero accent + 48px hero tier missed by prior pass.
@@ -183,6 +183,14 @@ What distinguishes Vercel from other monochrome design systems is its shadow-as-
183
183
  - Description below in gray body text
184
184
  - Shadow-bordered card container
185
185
 
186
+ ---
187
+
188
+ **Verified:** 2026-05-08
189
+ **Tier 1 sources:** vercel.com (live DOM via playwright — nav pill `9999px` / 0×12 / 32px / 13px·400 `#8a8f98`; Sign up CTA `#e5e5e6` / `#08090a` / 9999px / 32px / 13px·510; Skip-to-content button `#fff` / `#0072f5` / 6px)
190
+ **Tier 2 sources:** styles.refero.design — no Vercel record at `?q=Vercel`. getdesign.md/vercel — directory only.
191
+ **Tier 2 status:** unavailable; Tier 1 (vercel.com live inspect) authoritative.
192
+ **Conflicts unresolved:** none. Vercel uses tight 32px-height nav pills (9999px) and Geist Sans throughout — confirmed.
193
+
186
194
  ## 5. Layout Principles
187
195
 
188
196
  ### Spacing System
@@ -335,7 +343,7 @@ Vercel's voice is engineer-terse, confident, and quietly clever. Headlines are s
335
343
 
336
344
  ## 11. Brand Narrative
337
345
 
338
- Vercel was founded in 2015 by Guillermo Rauch and originally called **ZEIT**; the company renamed to Vercel in April 2020, the same moment it raised its Series A to build the cloud infrastructure underneath Next.js, the open-source React framework it had shepherded since 2016. Vercel's founding thesis is that frontend developers should not have to think about infrastructure: the framework and the deployment target should be one cognitive object, not two.
346
+ Vercel was founded in **2015** in San Francisco as **ZEIT** by **Guillermo Rauch** (CEO), **Tony Kovanen** (ex-CTO), and **Naoyuki Kanezawa** ([Vercel — Wikipedia](https://en.wikipedia.org/wiki/Vercel), [History of Vercel 2015–2020](https://medium.com/history-of-vercel/history-of-vercel-2015-2020-6-7-zeit-and-next-js-dc480a88e0b8)). Rauch's prior OSS — **Socket.IO** (real-time events) and **Mongoose** — preceded the company and built his developer-first reputation ([rauchg.com/about](https://rauchg.com/about)). **Next.js was released in October 2016**, just one year after founding, and quickly became the platform's flagship product. The company **renamed ZEIT Vercel in April 2020**, retaining the triangular logo. Vercel raised **$250M in May 2024 at $3.25B valuation** ([BrandHistories](https://brandhistories.com/vercel/company-history)) and remains private as of 2026 with no announced IPO. Vercel's founding thesis is that frontend developers should not have to think about infrastructure: the framework and the deployment target should be one cognitive object, not two.
339
347
 
340
348
  The visual language — white canvas, near-black text (`#171717`), Geist Sans with aggressive negative letter-spacing, shadow-as-border throughout — is a design statement that mirrors the product thesis. It is **minimalism as engineering principle**, not minimalism as style choice. Every element on a Vercel marketing page has been through the same "does this justify its bytes?" discipline that a well-written Next.js component goes through. The Vercel Design team puts this explicitly: *"We design systems and systemize designs. Imbuing our work with care and craft as stewards of the Vercel Brand and Geist Design System."*
341
349
 
@@ -321,3 +321,76 @@ When refining existing screens generated with this design system:
321
321
  5. For glow effects, specify "Emerald Signal Green (#00d992) as a drop-shadow with 2–8px blur radius"
322
322
  6. Always specify which font — system-ui for headings, Inter for body/UI, SFMono-Regular for code
323
323
  7. Keep animations slow and subtle — marquee scrolls at 25–80s, glow pulses gently
324
+
325
+ ## 10. Voice & Tone
326
+
327
+ VoltAgent's voice is **TypeScript-AI-framework and developer-honest.** "Open Source TypeScript AI Agent Framework" — capability-driven, OSS-positioned. Marketing emphasizes the developer-tools-team behind getdesign.md / DESIGN.md ecosystem.
328
+
329
+ | Context | Tone |
330
+ |---|---|
331
+ | CTA | Verb. "Get Started", "Try VoltOps", "View on GitHub" |
332
+ | Marketing | Code-first. Real TypeScript snippets in marketing |
333
+ | Documentation | Type-aware, framework-deep |
334
+ | Error | Stack-trace-friendly |
335
+
336
+ **Voice samples**
337
+ - Marketing CTA: *"Get Started"* / *"Try VoltOps"* <!-- verified: voltagent.dev homepage 2026-05 -->
338
+
339
+ **Forbidden phrases.** "Revolutionary AI framework". Generic LangChain-comparison framing.
340
+
341
+ ## 11. Brand Narrative
342
+
343
+ VoltAgent is the **open-source TypeScript AI agent framework** — a 2024-launched project providing memory, RAG, guardrails, tools, MCP, voice, and workflow primitives in one type-safe package, with **n8n-style observability** as the differentiator ([VoltAgent — voltagent.dev](https://voltagent.dev/), [GitHub: VoltAgent/voltagent](https://github.com/VoltAgent/voltagent), [Product Hunt — VoltAgent OSS AI Agent Framework](https://www.producthunt.com/products/voltagent-opensource-ai-agent-framework)). **MIT-licensed**. Founder: **Omer Aplak** (referenced across VoltAgent's GitHub org and community). **GitHub: ~8.7K stars** (live header confirms "Thank you! 8.7K" badge 2026-05). **Business model**: open-core — core framework always remains OSS; advanced enterprise features on the **observability side (VoltOps)** are monetized. The team also maintains the **getdesign.md ecosystem** (collection of DESIGN.md files for AI agents to reference — also referenced throughout this oh-my-design migration project). **Integrations confirmed**: Qdrant (vector DB), Hugging Face (`huggingface.co/voltagent`). Position: developer-first, type-safe, OSS-default.
344
+
345
+ ## 12. Principles
346
+
347
+ 1. **TypeScript-first.** *UI implication:* every code snippet shows .ts not .py.
348
+ 2. **Open source heritage.** *UI implication:* GitHub link prominent on landing.
349
+ 3. **Slow subtle animations.** Marquee 25-80s. *UI implication:* avoid fast/aggressive motion.
350
+ 4. **Three fonts.** system-ui / Inter / SFMono-Regular. *UI implication:* don't substitute.
351
+ 5. **Glow pulses gently.** *UI implication:* preserve subtle glow accent on hero.
352
+
353
+ ## 13. Personas
354
+
355
+ *Personas are fictional archetypes informed by VoltAgent user segments (TS-first developers, AI agent builders, indie SaaS), not individual people.*
356
+
357
+ **Sofia Russo, 30, Milan.** Indie SaaS founder. VoltAgent for typed agent infrastructure.
358
+
359
+ **Marcus Chen, 35, San Francisco.** Senior TypeScript engineer. Migrated from LangChain JS for type safety.
360
+
361
+ **Priya Krishnan, 27, Bengaluru.** AI engineer at startup. VoltOps for agent observability.
362
+
363
+ ## 14. States
364
+
365
+ | State | Treatment |
366
+ |---|---|
367
+ | **Empty (no agents)** | "Create first agent" CTA |
368
+ | **Empty (no projects)** | "Try VoltOps" link |
369
+ | **Loading (agent run)** | Per-step trace visible |
370
+ | **Loading (compile)** | TypeScript checking indicator |
371
+ | **Error (type)** | Inline TS error with line:column |
372
+ | **Error (runtime)** | Stack trace visible |
373
+ | **Success (agent ran)** | Result + trace expanded |
374
+ | **Success (deployed)** | Endpoint visible |
375
+ | **Skeleton (agent list)** | 6px placeholders |
376
+ | **Disabled (no plan)** | Upgrade link |
377
+ | **Loading (long task)** | Persistent progress |
378
+
379
+ ## 15. Motion & Easing
380
+
381
+ | Token | Value | Use |
382
+ |---|---|---|
383
+ | `motion-instant` | 0ms | Selection |
384
+ | `motion-fast` | 150ms | Hover |
385
+ | `motion-marquee` | 25-80s | Background marquee |
386
+ | `motion-glow` | 3000ms | Gentle glow pulse |
387
+
388
+ Standard cubic-bezier; no bounce. **Slow subtle motion is the register.** `prefers-reduced-motion: reduce` removes marquee + glow.
389
+
390
+ ---
391
+
392
+ **Verified:** 2026-05-08 (omd:migrate run 61 — Apple-tier)
393
+ **Tier 1 sources:** voltagent.dev home + /docs (live DOM via playwright — Hero Primary `transparent` ghost + `#eeeeee` Off-White text 6px / 54px / 12×16 / 18px·**700**; Header Compact ghost 6px / 34px / 14px·500; **Brand accent `#2fd6a1` Voltage Green** (active states); Search variant `#00d992` Voltage Green Lighter; **Active Tab `#101010` Charcoal + Voltage Green text 0px** (terminal/IDE aesthetic); GitHub Star badge 9999px).
394
+ **Tier 2 sources:** styles.refero.design / getdesign.md — directory-only (note: VoltAgent maintains the getdesign.md ecosystem).
395
+ **Tier 2 (Philosophy):** voltagent.dev homepage, GitHub VoltAgent/voltagent (README/CONSOLE.md, MIT-license), Product Hunt, Medium (Gowtham), Qdrant integration, Hugging Face.
396
+ **Style ref:** `stripe`. **Conflicts unresolved:** none. **Earlier addition:** Voltage Green `#2fd6a1` brand accent + sharp-tab `#101010` Charcoal active state + search-variant lighter green `#00d992` + Star badge full-pill missed by prior pass.