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.
- package/README.md +15 -18
- package/data/reference-fingerprints.json +337 -3
- package/data/reference-tags.md +15 -1
- package/package.json +2 -2
- package/skills/omd-init/SKILL.md +1 -1
- package/web/AGENTS.md +5 -0
- package/{references → web/references}/airbnb/DESIGN.md +158 -19
- package/web/references/airtable/DESIGN.md +241 -0
- package/{references → web/references}/apple/DESIGN.md +131 -76
- package/web/references/baemin/DESIGN.md +470 -0
- package/{references → web/references}/bmw/DESIGN.md +138 -9
- package/{references → web/references}/cal/DESIGN.md +173 -17
- package/{references → web/references}/claude/DESIGN.md +11 -1
- package/{references → web/references}/clay/DESIGN.md +75 -0
- package/{references → web/references}/clickhouse/DESIGN.md +74 -0
- package/{references → web/references}/cohere/DESIGN.md +75 -0
- package/web/references/coinbase/DESIGN.md +205 -0
- package/{references → web/references}/composio/DESIGN.md +74 -0
- package/web/references/coupang/DESIGN.md +487 -0
- package/{references → web/references}/cursor/DESIGN.md +74 -0
- package/web/references/dcard/DESIGN.md +567 -0
- package/{references → web/references}/elevenlabs/DESIGN.md +91 -0
- package/{references → web/references}/expo/DESIGN.md +72 -0
- package/{references → web/references}/ferrari/DESIGN.md +72 -0
- package/{references → web/references}/figma/DESIGN.md +124 -48
- package/{references → web/references}/framer/DESIGN.md +143 -16
- package/web/references/freee/DESIGN.md +558 -0
- package/{references → web/references}/hashicorp/DESIGN.md +72 -0
- package/{references → web/references}/ibm/DESIGN.md +68 -0
- package/{references → web/references}/intercom/DESIGN.md +73 -0
- package/web/references/kakao/DESIGN.md +490 -0
- package/web/references/kakaobank/DESIGN.md +533 -0
- package/web/references/karrot/DESIGN.md +431 -0
- package/web/references/kraken/DESIGN.md +219 -0
- package/web/references/krds/DESIGN.md +982 -0
- package/web/references/kurly/DESIGN.md +574 -0
- package/{references → web/references}/lamborghini/DESIGN.md +74 -0
- package/{references → web/references}/line/DESIGN.md +84 -43
- package/{references → web/references}/linear.app/DESIGN.md +8 -1
- package/{references → web/references}/lovable/DESIGN.md +73 -0
- package/web/references/mercari/DESIGN.md +464 -0
- package/{references → web/references}/minimax/DESIGN.md +72 -0
- package/{references → web/references}/mintlify/DESIGN.md +72 -0
- package/web/references/miro/DESIGN.md +252 -0
- package/{references → web/references}/mistral.ai/DESIGN.md +72 -0
- package/{references → web/references}/mongodb/DESIGN.md +72 -0
- package/web/references/musinsa/DESIGN.md +536 -0
- package/web/references/naver/DESIGN.md +518 -0
- package/{references → web/references}/notion/DESIGN.md +9 -1
- package/web/references/nvidia/DESIGN.md +491 -0
- package/web/references/ohouse/DESIGN.md +570 -0
- package/{references → web/references}/ollama/DESIGN.md +72 -0
- package/{references → web/references}/opencode.ai/DESIGN.md +73 -0
- package/web/references/pinkoi/DESIGN.md +575 -0
- package/{references → web/references}/pinterest/DESIGN.md +73 -0
- package/{references → web/references}/posthog/DESIGN.md +172 -18
- package/web/references/qanda/DESIGN.md +459 -0
- package/{references → web/references}/raycast/DESIGN.md +169 -34
- package/{references → web/references}/renault/DESIGN.md +72 -0
- package/{references → web/references}/replicate/DESIGN.md +73 -0
- package/{references → web/references}/resend/DESIGN.md +73 -0
- package/{references → web/references}/revolut/DESIGN.md +74 -0
- package/web/references/ridi/DESIGN.md +517 -0
- package/{references → web/references}/runwayml/DESIGN.md +152 -24
- package/{references → web/references}/sanity/DESIGN.md +72 -0
- package/{references → web/references}/sentry/DESIGN.md +73 -0
- package/web/references/spacex/DESIGN.md +379 -0
- package/web/references/spotify/DESIGN.md +426 -0
- package/{references → web/references}/stripe/DESIGN.md +44 -1
- package/{references → web/references}/supabase/DESIGN.md +73 -0
- package/{references → web/references}/superhuman/DESIGN.md +159 -17
- package/{references → web/references}/tesla/DESIGN.md +170 -0
- package/{references → web/references}/together.ai/DESIGN.md +73 -0
- package/{references → web/references}/toss/DESIGN.md +304 -50
- package/{references → web/references}/uber/DESIGN.md +73 -0
- package/{references → web/references}/vercel/DESIGN.md +9 -1
- package/{references → web/references}/voltagent/DESIGN.md +73 -0
- package/{references → web/references}/warp/DESIGN.md +142 -15
- package/web/references/webflow/DESIGN.md +253 -0
- package/{references → web/references}/wise/DESIGN.md +84 -0
- package/{references → web/references}/x.ai/DESIGN.md +85 -0
- package/web/references/yanolja/DESIGN.md +448 -0
- package/web/references/yeogiotte/DESIGN.md +424 -0
- package/{references → web/references}/zapier/DESIGN.md +85 -0
- package/references/airtable/DESIGN.md +0 -107
- package/references/baemin/DESIGN.md +0 -260
- package/references/coinbase/DESIGN.md +0 -129
- package/references/dcard/DESIGN.md +0 -302
- package/references/freee/DESIGN.md +0 -308
- package/references/kakao/DESIGN.md +0 -261
- package/references/karrot/DESIGN.md +0 -252
- package/references/kraken/DESIGN.md +0 -146
- package/references/mercari/DESIGN.md +0 -294
- package/references/miro/DESIGN.md +0 -108
- package/references/nvidia/DESIGN.md +0 -308
- package/references/pinkoi/DESIGN.md +0 -309
- package/references/spacex/DESIGN.md +0 -205
- package/references/spotify/DESIGN.md +0 -246
- 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
|
-
**
|
|
95
|
-
|
|
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
|
-
-
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
101
|
-
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
-
|
|
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
|
-
-
|
|
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
|
-
|
|
118
|
-
|
|
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
|
-
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
-
|
|
124
|
-
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
-
|
|
131
|
-
-
|
|
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
|
-
-
|
|
134
|
-
-
|
|
135
|
-
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
-
|
|
145
|
-
-
|
|
146
|
-
-
|
|
147
|
-
-
|
|
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
|
|
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
|
|
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.
|