oh-my-design-cli 1.0.1 → 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/dist/bin/oh-my-design.js +1 -1
- package/dist/{install-skills-GQPTQF5S.js → install-skills-MVXVXYAY.js} +4 -4
- package/dist/{install-skills-GQPTQF5S.js.map → install-skills-MVXVXYAY.js.map} +1 -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
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
---
|
|
2
|
+
omd: 0.1
|
|
3
|
+
brand: Baemin
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Design System Inspiration of Baemin (배달의민족)
|
|
7
|
+
|
|
8
|
+
## 1. Visual Theme & Atmosphere
|
|
9
|
+
|
|
10
|
+
Baemin is Korea's beloved food delivery platform -- a brand that turned ordering takeout into a cultural experience through typography, humor, and a fiercely distinctive mint green. The interface opens on a clean white canvas (`#ffffff`) with warm dark headings (`#212529`) and that unmistakable Baemin Mint (`#2AC1BC`) that feels like no other app. This isn't the utilitarian teal of medical software; it's a warm, playful cyan-green chosen specifically because the food industry conventionally uses warm reds and oranges -- Baemin is the deliberate contrast.
|
|
11
|
+
|
|
12
|
+
Typography IS the brand. Where most companies treat fonts as infrastructure, Baemin has released over a dozen custom typefaces -- each one preserving disappearing Korean signage culture. From the 1960s acrylic-cut Hanna (한나체) to the weathered Euljiro district lettering (을지로체), every font tells a story. But for the functional UI itself, the system uses the platform's native sans-serif -- brand fonts appear only in promotional banners and splash screens, creating a layered personality where the app is professional but the brand is warm and irreverent.
|
|
13
|
+
|
|
14
|
+
The design philosophy is "playful warmth." The UX writing is legendary in Korea for its conversational wit ("배민다움"), and the illustration-based icon system uses appetizing, sketch-like drawings rather than flat geometric icons. The overall impression is of a neighborhood restaurant's charm scaled to a platform serving millions.
|
|
15
|
+
|
|
16
|
+
**Key Characteristics:**
|
|
17
|
+
- Baemin Mint (`#2AC1BC`) as the singular brand accent -- warm, fresh, deliberately counter-industry
|
|
18
|
+
- 10+ custom open-source fonts (OFL) preserving Korean signage culture -- brand display only
|
|
19
|
+
- System fonts for functional UI, brand fonts for personality moments
|
|
20
|
+
- Card-based layout composition -- "all information composed of card-format combinations"
|
|
21
|
+
- Illustration-based icons: appetizing, hand-drawn feel over flat minimalism
|
|
22
|
+
- Conversational UX writing ("배민다움") -- witty, warm, human
|
|
23
|
+
- Five-variant shadow system (Natural through Crisp) for nuanced elevation
|
|
24
|
+
|
|
25
|
+
## 2. Color Palette & Roles
|
|
26
|
+
|
|
27
|
+
### Primary
|
|
28
|
+
- **Baemin Mint** (`#2AC1BC`): Primary brand color, CTA backgrounds, active states. Warm cyan-green, instantly recognizable. Official spec: CMYK 65:0:29:0 (hex is approximate).
|
|
29
|
+
- **Pure White** (`#ffffff`): Page background, card surfaces. Clean and appetizing.
|
|
30
|
+
- **Dark Charcoal** (`#212529`): Primary heading and text color. Warm, not harsh.
|
|
31
|
+
|
|
32
|
+
### Accent
|
|
33
|
+
- **Primary Teal** (`#12B886`): UI primary green, confirmation button fills, positive accents.
|
|
34
|
+
- **Teal Light** (`#20C997`): Hover states on teal elements, lighter accent.
|
|
35
|
+
- **Destructive Red** (`#FF6B6B`): Error states, destructive actions, out-of-stock indicators.
|
|
36
|
+
- **Warning Orange** (`#FFB347`): Attention-needed states, delivery delays, star ratings.
|
|
37
|
+
- **Info Blue** (`#74C0FC`): General information, order status updates.
|
|
38
|
+
- **Promo Red** (`#FF0000`): High-urgency alerts, promotional countdown timers.
|
|
39
|
+
|
|
40
|
+
### Neutral Scale
|
|
41
|
+
- **Text Primary** (`#212529`): Headings, menu item names, strong labels.
|
|
42
|
+
- **Text Secondary** (`#495057`): Body text, descriptions, ingredient lists.
|
|
43
|
+
- **Text Tertiary** (`#868E96`): Captions, timestamps, secondary metadata.
|
|
44
|
+
- **Text Disabled** (`#ADB5BD`): Placeholder text, disabled labels.
|
|
45
|
+
- **Border Light** (`#DEE2E6`): Standard card borders, dividers, input borders.
|
|
46
|
+
- **Surface Fill** (`#F8F9FA`): Background fill, secondary canvas.
|
|
47
|
+
- **Surface Subtle** (`#F1F3F5`): Tertiary background, input fills.
|
|
48
|
+
|
|
49
|
+
### Surface & Borders
|
|
50
|
+
- **Border Default**: `#DEE2E6`. Card borders, list dividers.
|
|
51
|
+
- **Border Strong**: `#343A40`. High-contrast borders for emphasis.
|
|
52
|
+
- **Overlay**: `rgba(0,0,0,0.5)`. Modal/sheet backdrops.
|
|
53
|
+
- **Overlay Dark**: `rgba(0,0,0,0.7)`. Full-screen image viewers.
|
|
54
|
+
|
|
55
|
+
## 3. Typography Rules
|
|
56
|
+
|
|
57
|
+
### Font Family
|
|
58
|
+
- **UI Primary**: `-apple-system, BlinkMacSystemFont, "Helvetica Neue", "Apple SD Gothic Neo", "Malgun Gothic", "Noto Sans KR", sans-serif`
|
|
59
|
+
- **Monospace**: `"SF Mono", SFMono-Regular, Menlo, Consolas, monospace`
|
|
60
|
+
- **Brand Display**: `"BMHANNA Pro"` -- signature Baemin font for brand headings and promotional banners
|
|
61
|
+
- **Brand Playful**: `"BMJua"` -- rounded, friendly, for casual brand copy
|
|
62
|
+
|
|
63
|
+
All 12 Baemin fonts are free under OFL license. Four are on Google Fonts (Jua, Do Hyeon, Kirang Haerang, Yeon Sung). Hanna variants available via direct download from woowahan.com.
|
|
64
|
+
|
|
65
|
+
### Hierarchy
|
|
66
|
+
|
|
67
|
+
| Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
|
|
68
|
+
|------|------|------|--------|-------------|----------------|-------|
|
|
69
|
+
| Display Hero | BMHANNA Pro | 42px | 700 | 1.20 | normal | Splash screens, brand moments |
|
|
70
|
+
| Display Large | System | 36px | 700 | 1.25 | normal | Campaign titles, section heroes |
|
|
71
|
+
| Heading Large | System | 24px | 700 | 1.33 | normal | Feature section titles |
|
|
72
|
+
| Heading | System | 20px | 700 | 1.40 | normal | Card headings, menu categories |
|
|
73
|
+
| Title | System | 18px | 600 | 1.44 | normal | Restaurant names, item titles |
|
|
74
|
+
| Body Large | System | 16px | 400 | 1.50 | normal | Descriptions, menu details |
|
|
75
|
+
| Body | System | 14px | 400 | 1.57 | normal | Standard reading, reviews |
|
|
76
|
+
| Body Small | System | 13px | 400 | 1.54 | normal | Secondary info, ingredients |
|
|
77
|
+
| Caption | System | 12px | 400 | 1.50 | normal | Timestamps, delivery times |
|
|
78
|
+
| Price Display | System | 20px | 700 | 1.30 | normal | Menu item prices, order totals |
|
|
79
|
+
|
|
80
|
+
### Principles
|
|
81
|
+
- **Dual personality**: System fonts for functional UI (ordering, tracking, payments), brand fonts for the experiential layer (banners, promotions, splash). The separation keeps the app professional while the brand stays playful.
|
|
82
|
+
- **Bold for clarity**: In food ordering, weight 700 is used liberally for menu names, prices, and CTAs. Users scan quickly through many options.
|
|
83
|
+
- **All fonts are free**: Every Baemin typeface is available under OFL license for personal and commercial use.
|
|
84
|
+
|
|
85
|
+
## 4. Component Stylings
|
|
86
|
+
|
|
87
|
+
### Buttons
|
|
88
|
+
|
|
89
|
+
**Primary (Brand Mint)**
|
|
90
|
+
- Background: `#2AC1BC`
|
|
91
|
+
- Text: `#ffffff`
|
|
92
|
+
- Padding: 12px 24px
|
|
93
|
+
- Radius: 8px
|
|
94
|
+
- Font: 16px system weight 700
|
|
95
|
+
- Pressed: `#20A8A4` (darkened mint)
|
|
96
|
+
- Disabled: `#DEE2E6` background, `#ADB5BD` text
|
|
97
|
+
- Use: Primary CTAs ("주문하기", "배달 주문")
|
|
98
|
+
|
|
99
|
+
**Secondary (Ghost)**
|
|
100
|
+
- Background: transparent
|
|
101
|
+
- Text: `#2AC1BC`
|
|
102
|
+
- Border: 1px solid `#2AC1BC`
|
|
103
|
+
- Radius: 8px
|
|
104
|
+
- Pressed: `rgba(42,193,188,0.08)` background
|
|
105
|
+
- Use: Secondary actions ("장바구니", "찜하기")
|
|
106
|
+
|
|
107
|
+
**Neutral**
|
|
108
|
+
- Background: `#F8F9FA`
|
|
109
|
+
- Text: `#212529`
|
|
110
|
+
- Radius: 8px
|
|
111
|
+
- Use: Tertiary actions, filter toggles
|
|
112
|
+
|
|
113
|
+
**Destructive**
|
|
114
|
+
- Background: `#FF6B6B`
|
|
115
|
+
- Text: `#ffffff`
|
|
116
|
+
- Use: Cancel order, remove item
|
|
117
|
+
|
|
118
|
+
### Cards & Containers
|
|
119
|
+
- Background: `#ffffff`
|
|
120
|
+
- Border: 1px solid `#DEE2E6` or no border with shadow
|
|
121
|
+
- Radius: 8px (standard), 12px (featured restaurant cards)
|
|
122
|
+
- Shadow: `0px 2px 8px rgba(0,0,0,0.06)` (standard)
|
|
123
|
+
|
|
124
|
+
### Restaurant Cards (Key Component)
|
|
125
|
+
- Image: full-width, 16:9, 12px top radius
|
|
126
|
+
- Name: 18px weight 700, `#212529`
|
|
127
|
+
- Rating: star icon (`#FFB347`) + score 14px weight 600
|
|
128
|
+
- Delivery info: 13px weight 400, `#868E96`
|
|
129
|
+
- Tags: pill (9999px radius), `#F1F3F5` bg, `#495057` text, 12px
|
|
130
|
+
- Internal padding: 16px
|
|
131
|
+
|
|
132
|
+
### Tags & Badges
|
|
133
|
+
- **Category Tag**: `#F1F3F5` bg, `#495057` text, pill radius, 12px font weight 500
|
|
134
|
+
- **Promo Badge**: `#FF6B6B` or `#FFB347` bg, white text, 4px radius, 11px weight 700
|
|
135
|
+
- **Delivery Badge**: `#2AC1BC` bg, white text, 4px radius
|
|
136
|
+
|
|
137
|
+
### Inputs & Forms
|
|
138
|
+
- Border: 1px solid `#DEE2E6`, Radius: 8px
|
|
139
|
+
- Focus: 2px solid `#2AC1BC`
|
|
140
|
+
- Text: `#212529`, Placeholder: `#ADB5BD`
|
|
141
|
+
- Search bar: 20px radius, `#F8F9FA` background, search icon left
|
|
142
|
+
|
|
143
|
+
### Navigation
|
|
144
|
+
- Bottom tab bar: white, top border `#DEE2E6`
|
|
145
|
+
- Active: `#2AC1BC` icon + text, Inactive: `#868E96`
|
|
146
|
+
- Top app bar: white, centered title 18px weight 700
|
|
147
|
+
- Cart badge: `#FF6B6B` circle, white count text
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
**Verified:** 2026-05-08
|
|
152
|
+
**Tier 1 sources:** baemin.com (live DOM via playwright — corporate/marketing surface confirmed: App download cards `#fff` / 12px / 14×19 / 54px height; Black Pill CTA `#000000` / `#fff` / 9999px / 16×32 / 58px / 18px·700 for "기업용 상품권 구매하기")
|
|
153
|
+
**Tier 2 sources:** styles.refero.design — no Baemin record at `?q=Baemin`. getdesign.md/baemin — no record.
|
|
154
|
+
**Tier 2 status:** unavailable; Tier 1 (baemin.com live inspect) authoritative for marketing-web surface.
|
|
155
|
+
**Surface split:** §4 above documents the **app surface** (배달의민족 mobile app — Mint `#2AC1BC` primary, 8px radius, system fonts for chrome). The marketing web (baemin.com) uses a **separate Black Pill** primary at 9999px / 18px·700 (verified above) for high-impact corporate CTAs. Both retained as parallel systems.
|
|
156
|
+
**Conflicts unresolved:** none. Mint primary inferred from prior brand documentation (Baemin 공식 색 가이드, app store screenshots) — not contradicted by web inspect.
|
|
157
|
+
|
|
158
|
+
## 5. Layout Principles
|
|
159
|
+
|
|
160
|
+
### Spacing System
|
|
161
|
+
- Base unit: 8px
|
|
162
|
+
- Scale: 4px, 8px, 12px, 16px, 20px, 24px, 32px, 40px, 48px
|
|
163
|
+
- Card internal padding: 16px
|
|
164
|
+
- Section gaps: 24px-32px
|
|
165
|
+
|
|
166
|
+
### Grid & Container
|
|
167
|
+
- Mobile: full-width, 16px horizontal padding
|
|
168
|
+
- Content max-width: 768px for tablet/web
|
|
169
|
+
- Restaurant list: single-column on mobile, 2-column on tablet
|
|
170
|
+
- Category grid: horizontal scroll with equal-width items
|
|
171
|
+
|
|
172
|
+
### Whitespace Philosophy
|
|
173
|
+
- **Appetizing spacing**: Food photos get generous whitespace to feel premium. A cramped photo kills appetite; a well-spaced one invites exploration.
|
|
174
|
+
- **Scan-friendly density**: Restaurant lists balance showing 3-4 options per viewport with enough detail per card to decide without tapping.
|
|
175
|
+
- **Card-format composition**: All service information is composed of card-format combinations that auto-transform based on device.
|
|
176
|
+
|
|
177
|
+
### Border Radius Scale
|
|
178
|
+
- Standard (4px): Small badges, promotional tags
|
|
179
|
+
- Comfortable (8px): Buttons, inputs, standard cards
|
|
180
|
+
- Featured (12px): Restaurant cards, image containers
|
|
181
|
+
- Search (20px): Search bar, large rounded containers
|
|
182
|
+
- Pill (9999px): Category tags, filter chips
|
|
183
|
+
|
|
184
|
+
## 6. Depth & Elevation
|
|
185
|
+
|
|
186
|
+
| Level | Treatment | Use |
|
|
187
|
+
|-------|-----------|-----|
|
|
188
|
+
| Flat (Level 0) | No shadow | Page background, inline elements |
|
|
189
|
+
| Natural (Level 1) | `0px 1px 3px rgba(0,0,0,0.04)` | Subtle card separation, list items |
|
|
190
|
+
| Deep (Level 2) | `0px 2px 8px rgba(0,0,0,0.08)` | Standard restaurant cards |
|
|
191
|
+
| Sharp (Level 3) | `0px 4px 12px rgba(0,0,0,0.10)` | Floating cart button, active overlays |
|
|
192
|
+
| Outlined (Level 4) | `0px 4px 16px rgba(0,0,0,0.12)` | Bottom sheets, modal dialogs |
|
|
193
|
+
| Crisp (Level 5) | `0px 8px 24px rgba(0,0,0,0.16)` | Full-screen overlays, floating menus |
|
|
194
|
+
|
|
195
|
+
**Shadow Philosophy**: Baemin uses five tiers -- richer than most mobile apps, reflecting the layered nature of a delivery platform where maps, restaurant lists, order sheets, and cart overlays compete for attention. The naming (Natural, Deep, Sharp, Outlined, Crisp) reflects Baemin's design culture of using evocative, human language rather than cold technical terms.
|
|
196
|
+
|
|
197
|
+
## 7. Do's and Don'ts
|
|
198
|
+
|
|
199
|
+
### Do
|
|
200
|
+
- Use Baemin Mint (`#2AC1BC`) as the primary brand accent for CTAs and active states
|
|
201
|
+
- Apply brand fonts (BMHANNA, BMJua) for promotional banners and special moments only
|
|
202
|
+
- Use system fonts for the core ordering/tracking UI -- keep it functional
|
|
203
|
+
- Make food photography the star: generous whitespace, no overlapping UI on images
|
|
204
|
+
- Keep border-radius between 4px-12px for standard UI elements
|
|
205
|
+
- Use the conversational, warm tone for UX writing (Baemin voice)
|
|
206
|
+
- Use illustration-based icons for food categories -- appetizing over geometric
|
|
207
|
+
|
|
208
|
+
### Don't
|
|
209
|
+
- Don't use brand fonts for body text or functional UI -- they're for personality moments only
|
|
210
|
+
- Don't use heavy shadows on food photos -- let the photography speak
|
|
211
|
+
- Don't introduce competing accent colors alongside mint -- one-accent system
|
|
212
|
+
- Don't use cold, clinical blues for interactive elements -- warm mint territory
|
|
213
|
+
- Don't use pure black (`#000000`) for text -- `#212529` is the correct dark
|
|
214
|
+
- Don't apply mint to large background areas -- it works as an accent, not a canvas
|
|
215
|
+
- Don't make checkout/payment "fun" -- ordering should be clear and trustworthy
|
|
216
|
+
|
|
217
|
+
## 8. Responsive Behavior
|
|
218
|
+
|
|
219
|
+
### Breakpoints
|
|
220
|
+
| Name | Width | Key Changes |
|
|
221
|
+
|------|-------|-------------|
|
|
222
|
+
| Mobile (Primary) | <480px | Full design, single column, 16px gutter |
|
|
223
|
+
| Tablet | 480-768px | 2-column restaurant grid, expanded cards |
|
|
224
|
+
| Desktop (Web) | >768px | Centered content, max-width 768px |
|
|
225
|
+
|
|
226
|
+
### Touch Targets
|
|
227
|
+
- CTA buttons: minimum 48px height, full-width on mobile
|
|
228
|
+
- Restaurant cards: entire card tappable, min 120px height
|
|
229
|
+
- Category scrollers: 44px minimum touch height
|
|
230
|
+
- Cart floating button: 56px circular, fixed bottom-right
|
|
231
|
+
- Quantity steppers: 36px minimum
|
|
232
|
+
|
|
233
|
+
### Collapsing Strategy
|
|
234
|
+
- Restaurant grid: 2-column → single column below 480px
|
|
235
|
+
- Category bar: horizontal scroll on all sizes, no wrapping
|
|
236
|
+
- Order summary: full-width sheet on mobile, side panel on tablet+
|
|
237
|
+
- Search: full-screen overlay on mobile, inline on desktop
|
|
238
|
+
|
|
239
|
+
### Image Behavior
|
|
240
|
+
- Restaurant photos: 16:9 aspect ratio, full card width, 12px top radius
|
|
241
|
+
- Menu thumbnails: 1:1 square, 8px radius, 80-100px on mobile
|
|
242
|
+
- Promotional banners: full-width, swipeable carousel
|
|
243
|
+
|
|
244
|
+
## 9. Agent Prompt Guide
|
|
245
|
+
|
|
246
|
+
### Quick Color Reference
|
|
247
|
+
- Primary CTA: Baemin Mint (`#2AC1BC`)
|
|
248
|
+
- CTA Pressed: Deep Mint (`#20A8A4`)
|
|
249
|
+
- Alternate CTA: Teal (`#12B886`)
|
|
250
|
+
- Background: Pure White (`#ffffff`)
|
|
251
|
+
- Background Surface: Light Gray (`#F8F9FA`)
|
|
252
|
+
- Heading text: Dark Charcoal (`#212529`)
|
|
253
|
+
- Body text: Dark Gray (`#495057`)
|
|
254
|
+
- Caption text: Medium Gray (`#868E96`)
|
|
255
|
+
- Placeholder: Soft Gray (`#ADB5BD`)
|
|
256
|
+
- Border: Light Gray (`#DEE2E6`)
|
|
257
|
+
- Error: Warm Red (`#FF6B6B`)
|
|
258
|
+
- Rating: Warm Orange (`#FFB347`)
|
|
259
|
+
|
|
260
|
+
### Example Component Prompts
|
|
261
|
+
- "Create a restaurant card: white bg, 12px radius. Full-width photo (16:9, 12px top radius). Name 18px weight 700, #212529. Star icon (#FFB347) + rating 14px weight 600. Delivery time + fee 13px weight 400, #868E96. Tags as pills (#F1F3F5 bg, #495057 text). 16px padding."
|
|
262
|
+
- "Build a primary button: #2AC1BC bg, white text, 16px weight 700, 48px height, 8px radius, full-width. Pressed: #20A8A4."
|
|
263
|
+
- "Design a menu item row: 16px padding. Left: name (16px weight 600, #212529) + description (13px weight 400, #868E96, 2-line max) + price (16px weight 700). Right: 80px square thumbnail, 8px radius. Divider: 1px solid #DEE2E6."
|
|
264
|
+
- "Build a floating cart button: 56px circle, #2AC1BC bg, white cart icon. Badge: 18px circle, #FF6B6B bg, white text 11px weight 700, top-right. Shadow: 0px 4px 12px rgba(0,0,0,0.10)."
|
|
265
|
+
- "Design a search bar: #F8F9FA bg, 20px radius, 44px height. Left: 16px padding + #868E96 search icon. Placeholder '맛집을 검색해보세요' in #ADB5BD. Text: #212529. Full-width with 16px margin."
|
|
266
|
+
|
|
267
|
+
### Iteration Guide
|
|
268
|
+
1. System fonts for UI, BMHANNA for brand display moments only
|
|
269
|
+
2. Primary accent is `#2AC1BC` (Baemin Mint) -- warm, not cold
|
|
270
|
+
3. Food photography is centerpiece: 16:9 for restaurants, 1:1 for menu items
|
|
271
|
+
4. Bold (700) used liberally for names, prices, CTAs -- food ordering needs scannable bold
|
|
272
|
+
5. Border-radius: 8px buttons/inputs, 12px restaurant cards, pill for tags
|
|
273
|
+
6. Five shadow levels: use Deep (Level 2) as default card shadow
|
|
274
|
+
7. Warm neutrals: #212529 headings, #F8F9FA backgrounds
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## 10. Voice & Tone
|
|
279
|
+
|
|
280
|
+
Baemin's voice is **warm, witty, unmistakably Korean-vernacular**. It talks to users the way a neighborhood delivery shop would — casual banmal register on marketing surfaces, polite 요-endings on functional UI, and a low-grade sense of humor Koreans call "B급 감성" that mixes retro signboard nostalgia with everyday slang. The copy is allowed to be playful because the *act* of ordering food is small and low-stakes; money, checkout, and delivery tracking drop the wit and become matter-of-fact. Korean is the primary voice — English UI strings are translations, not parity.
|
|
281
|
+
|
|
282
|
+
| Context | Tone |
|
|
283
|
+
|---|---|
|
|
284
|
+
| Marketing surfaces / campaign slogans | Wordplay, rhyme, Korean B급 감성 humor. "세상 모든 것이 식지 않도록" — evocative, never literal. <!-- verified: baemin.com hero campaign, 2026-04 --> |
|
|
285
|
+
| Category / service labels | Two- to four-character declarative nouns: `음식배달`, `B마트`, `선물하기`, `전국특가`. Never English acronyms on primary nav. <!-- verified: baemin.com, 2026-04 --> |
|
|
286
|
+
| CTAs on ordering flow | Short Korean verb form + 요 ending (`주문하기`, `장바구니에 담기`, `결제하기`). Imperative but not curt. |
|
|
287
|
+
| Empty states | Explain the *why* conversationally in one line, suggest one action. Lightly playful tolerated; never a blank "데이터 없음". |
|
|
288
|
+
| Error messages | Blameless + specific + actionable. Humor retreats here — a failed payment is never funny. |
|
|
289
|
+
| Success toasts | Past-tense single sentence (`주문이 접수됐어요`). Exclamation marks allowed in sparing quantity; emoji allowed in promo-only contexts. |
|
|
290
|
+
| Delivery tracking | Matter-of-fact, present tense (`가게에서 음식을 준비하고 있어요`, `라이더가 픽업했어요`). Progression is the drama; copy stays calm. |
|
|
291
|
+
| Promotional banners / push | Wordplay + rhyme licensed here. "지금 배민됩니다", "시켜도 시켜도 배달팁 무료 배민클럽!". <!-- verified: baemin.com, 2026-04 --> |
|
|
292
|
+
| Payment / refund / dispute | Formal 합니다 endings. Humor forbidden. The only surface where Baemin stops being funny. |
|
|
293
|
+
|
|
294
|
+
**Forbidden phrases.** `불편을 드려 죄송합니다` as a boilerplate opener (be specific instead), `Oops`, English `Sorry` on Korean UI, generic `데이터가 없습니다` / `오류가 발생했습니다`. On payment, refund, or delivery-dispute screens: rhyme, puns, and B급 감성 humor are all forbidden — the brand's playfulness is a marketing-surface privilege, not a universal voice. Never use Baemin Mint (`#2AC1BC`) as a decorative tone cue in text ("<span style="color:mint">재밌게</span>") — color is not voice.
|
|
295
|
+
|
|
296
|
+
**Representative voice samples.** Baemin's most quoted Korean copy (e.g., *"치킨은 살 안 쪄요, 살은 내가 쪄요"*) comes from the annual **배민신춘문예** user-submitted poetry contest — that string is a 2017 grand-prize entry by a Baemin user, [not a Baemin product string](https://www.ajunews.com/view/20170411135156182). When agents generate "Baemin-style" copy they should emulate the *register* (wordplay, rhyme, retro B급 감성) on marketing surfaces only, not quote the contest entries as if they were live UI.
|
|
297
|
+
|
|
298
|
+
- Hero campaign slogan (verified): *"세상 모든 것이 식지 않도록"* <!-- verified: baemin.com hero, 2026-04 --> — evocative, metaphorical; sets the tone for marketing headlines.
|
|
299
|
+
- Membership banner (verified): *"시켜도 시켜도 배달팁 무료 배민클럽!"* <!-- verified: baemin.com, 2026-04 --> — rhyme + repetition, classic Baemin marketing register.
|
|
300
|
+
- Gift service tagline (verified): *"마음을 배달해드려요"* <!-- verified: baemin.com 선물하기 section, 2026-04 --> — polite 요 ending, sentiment-forward.
|
|
301
|
+
- Payment speed claim (verified): *"10초 만에 결제 완료"* <!-- verified: baemin.com 배민페이, 2026-04 --> — matter-of-fact on functional surface; no humor.
|
|
302
|
+
- Empty state (cart): *"장바구니에 담긴 메뉴가 없어요. 드시고 싶은 메뉴를 담아보세요."* <!-- illustrative: not verified as live Baemin copy -->
|
|
303
|
+
- Error (payment failed): *"결제가 완료되지 않았어요. 카드 정보를 다시 확인해주세요."* <!-- illustrative: not verified as live Baemin copy -->
|
|
304
|
+
- Success (order placed): *"주문이 접수됐어요. 가게에서 확인 중이에요."* <!-- illustrative: not verified as live Baemin copy -->
|
|
305
|
+
|
|
306
|
+
## 11. Brand Narrative
|
|
307
|
+
|
|
308
|
+
Baemin (배달의민족) launched in 2010, founded by **Kim Bong-jin (김봉진)** — an unconventional tech founder who came from a **design background**, having previously worked as a **web designer at NHN (now Naver)** ([김봉진 — 나무위키](https://namu.wiki/w/%EA%B9%80%EB%B4%89%EC%A7%84(%EA%B8%B0%EC%97%85%EC%9D%B8))). The company was bootstrapped into **Woowa Brothers (우아한형제들)** after [Kim scanned restaurant flyers off the streets of Gangnam, Seoul](https://en.wikipedia.org/wiki/Baedal_Minjok) to build the first catalog. The app's name — a pun on "the people of delivery" (배달의 민족) that riffs on the Korean national-identity phrase "배달민족" (descendants of Dangun) — set the tone: a delivery app would be **vernacular Korean culture**, not a sterile logistics utility. Kim, whose graduate thesis was ["Font design reflecting Korea's indigenous visual culture"](https://en.sandoll.co.kr/Story/?bmode=view&idx=19495712), built the brand around typography as heritage — the **Baemin Hanna (한나체) typeface** was inspired by 1960s–70s Korean acrylic-cut shop signboards and named after his eldest daughter, Hanna.
|
|
309
|
+
|
|
310
|
+
From there Baemin grew into **Korea's largest food delivery platform** (2020 revenue ~₩1.09 trillion, ~US$960M <!-- source: base DESIGN.md context + Wikipedia, not re-verified this pass -->). [Delivery Hero announced its acquisition of Woowa Brothers in December 2019 and completed the deal in December 2020](https://en.wikipedia.org/wiki/Baedal_Minjok), conditional on Delivery Hero divesting its Korean subsidiary Yogiyo; Baemin continues to operate under its own brand and local leadership. Today the app spans food delivery, B마트 (instant grocery, 24/7), 선물하기 (gift delivery), 배민페이 (payments), 전국특가 (nationwide specials), and 배민클럽 (membership) — one interface, seven service verticals.
|
|
311
|
+
|
|
312
|
+
What Baemin refuses: the institutional seriousness of Korean legacy e-commerce (G마켓, 11번가 — dense banners, red sale-burst overlays, 90s Helvetica-derivative type); the **cold utility aesthetic** of Western delivery apps (DoorDash's flat gray, Uber Eats' corporate black); food-industry-standard warm reds and oranges. What it embraces: the deliberate **counter-industry mint green** (`#2AC1BC`), a fleet of **13+ free open-source fonts** preserving disappearing Korean signage culture, and the ethos captured in the company's four internal values — *[규율위의 자율, 스타보다 팀웍, 진지함과 위트, 열심만큼 성과](https://jiwon.app/blog/baemin-hiring-branding-culture)* (autonomy over discipline, teamwork over stars, seriousness with wit, results matched to effort). The third value — **진지함과 위트** (seriousness and wit) — is the one that shows up in the product.
|
|
313
|
+
|
|
314
|
+
## 12. Principles
|
|
315
|
+
|
|
316
|
+
1. **Wit on marketing, calm on money.** Campaign surfaces, promo banners, and empty states are licensed for wordplay, rhyme, and B급 감성 humor. Checkout, payment, refund, and dispute screens drop the wit entirely. *UI implication:* a single screen can host both registers if it spans both surfaces — the promo banner at the top can rhyme, the CTA at the bottom stays imperative-plain. Never mix tones inside the same sentence.
|
|
317
|
+
|
|
318
|
+
2. **Typography is heritage, not infrastructure.** Baemin's custom fonts (한나체, 주아체, 도현체, 을지로체, 기랑해랑체) exist to preserve Korean signboard vocabulary that would otherwise disappear. They are brand-presence fonts, not UI-text fonts. *UI implication:* system sans-serif for functional UI (menu lists, prices, forms, tracking); BMHANNA / BMJua for hero banners, splash screens, and promotional moments only. Never set body text in a Baemin custom font — the quirks that make it beautiful kill readability at 14px.
|
|
319
|
+
|
|
320
|
+
3. **Mint is the counter-industry signal.** `#2AC1BC` was chosen specifically because the food-delivery category defaults to warm reds and oranges. Mint is the brand's "we are not a logistics company" flag. *UI implication:* mint is an accent, not a canvas — use it for CTAs, active tab states, selection highlights, and the app-icon. Flooding a screen with mint (full-width mint hero backgrounds, mint card fills) erases the signal it was meant to carry.
|
|
321
|
+
|
|
322
|
+
4. **Food is the star; UI is the frame.** A restaurant card's job is to make the food photo appetizing. Chrome that crowds, overlays, or desaturates the photography fails the brief. *UI implication:* 16:9 photo at card-top, no text overlays on photos, no mint badges pinned inside the image area. Promo badges sit in the padding, not on the food.
|
|
323
|
+
|
|
324
|
+
5. **Scannable bold for decision screens.** Food ordering is a high-choice low-value decision (30+ options per list, tap in 1–2 seconds each). Users scan, not read. *UI implication:* 700-weight for restaurant names, prices, primary CTAs, and delivery ETAs. Reserve 400 for descriptions and metadata. Mid-weight 500/600 is allowed on titles and subtitles but not on scan-value items (names, prices).
|
|
325
|
+
|
|
326
|
+
6. **Progressive density, spacious summaries.** The home screen and category screens are spacious; the menu page and cart page are denser. *UI implication:* as the user commits (home → restaurant → menu → cart → checkout), horizontal padding tightens (16px → 12px) and row heights compress. The shallower the context, the more whitespace; the deeper, the more information per pixel.
|
|
327
|
+
|
|
328
|
+
7. **Card-format composition.** All service information is rendered as cards that recompose by device. *UI implication:* every major block (restaurant, menu item, promo, order summary) is a self-contained card with its own corner radius and padding. Two rules: cards never overlap, and adjacent cards never share a border — spacing between cards is the separator.
|
|
329
|
+
|
|
330
|
+
8. **Illustration over geometry for food categories.** Category icons are sketch-style illustrations (치킨, 피자, 한식) rather than flat geometric glyphs. *UI implication:* when category art is needed, use the hand-drawn illustration family (warm line weight, single-color ink on light background). Never swap to Material-style outline icons for category taxonomy — the warmth of the illustration is load-bearing brand.
|
|
331
|
+
|
|
332
|
+
## 13. Personas
|
|
333
|
+
|
|
334
|
+
*Personas are fictional archetypes informed by publicly described Baemin user segments, not individual people.*
|
|
335
|
+
|
|
336
|
+
**지현 (Jihyun), 29, Seoul.** Marketing manager, lives in a Gangnam officetel. Opens Baemin 4–6 times a week — late-lunch when she skipped the office canteen, post-work dinner, late-night chicken with roommates. Taps the same 5–6 restaurants on repeat; the "Recent orders" row is her actual home screen. Refuses to wait more than 40 minutes for food — anything over 40 and she filters out the restaurant regardless of rating.
|
|
337
|
+
|
|
338
|
+
**대호 (Daeho), 38, Busan.** Runs a small ad agency with 4 employees. Uses Baemin for team lunches 2–3 times a week and for the occasional client dinner order. Cares about delivery tip transparency more than food price — a ₩1,000 tip variance matters when ordering for 5 people. Skeptical of promoted banners; actively scrolls past the hero carousel to reach the category row.
|
|
339
|
+
|
|
340
|
+
**수민 (Sumin), 22, Daegu.** University student, fourth year, Communications. Baemin is her default food app — she's never used Yogiyo, and treats the Baemin 배민신춘문예 contest as legitimate poetry. Orders small: solo lunches under ₩10,000, split chicken with one friend at 10pm. Reads the promo copy for fun before tapping through to order; the wordplay is part of why she opens the app even when she isn't hungry yet.
|
|
341
|
+
|
|
342
|
+
**지영 (Jiyoung), 45, Incheon.** Mother of two, orders through Baemin 3–4 times a week for family meals. Uses Baemin only in Korean — the English option is invisible to her. Primary need: 선물하기 to send grandparents in Gwangju food-gift certificates on holidays, and B마트 for last-minute kitchen items on weekends. Values receipts and can recite her household's monthly Baemin spend; a 20% delivery-fee jump would move her to a competitor.
|
|
343
|
+
|
|
344
|
+
## 14. States
|
|
345
|
+
|
|
346
|
+
*Copy strings below are illustrative treatments of Baemin's tone applied to each state except where marked verified. A production team should replace illustrative copy with Baemin's actual live strings before shipping.*
|
|
347
|
+
|
|
348
|
+
| State | Treatment |
|
|
349
|
+
|---|---|
|
|
350
|
+
| **Empty (first use, no orders)** | White canvas. One line of `#495057` body text (14px weight 400) in a lightly warm register (*"아직 주문한 내역이 없어요. 맛있는 걸 시켜볼까요?"* <!-- illustrative: not verified as live Baemin copy -->). Below: one mint (`#2AC1BC`) CTA *"주문하러 가기"*. No mascot illustration on functional surfaces. |
|
|
351
|
+
| **Empty (cart)** | Single line of `#868E96` caption (*"장바구니가 비어 있어요. 메뉴를 담아보세요."* <!-- illustrative -->). Cart icon above in `#DEE2E6` at 48px. No CTA — user navigates back themselves. |
|
|
352
|
+
| **Empty (search, no results)** | `#495057` body text, neutral and specific: *"'<query>' 검색 결과가 없어요. 다른 키워드로 찾아보시겠어요?"* <!-- illustrative -->. Suggested-category chips follow below. Never a "sorry" apology. |
|
|
353
|
+
| **Loading (restaurant list)** | Skeleton cards at exact final dimensions — `#F1F3F5` blocks for photo (16:9), name, and meta rows. Ratings skeleton shows as an 80px wide block, never a placeholder star. Shimmer ≤ 1.2s. |
|
|
354
|
+
| **Loading (map-tracking)** | Map renders first; rider icon pulses between two opacity values over 1.5s while position resolves. ETA text shows `--` until server returns, never a placeholder minute count. |
|
|
355
|
+
| **Loading (checkout / payment)** | Full-width button shows a 3-dot white animation replacing the label text. Button width does not change. User cannot double-tap; the press is committed. |
|
|
356
|
+
| **Error (inline field)** | 2px `#FF6B6B` border on the input. Error text below in red500 (13px weight 400). One actionable sentence (*"주소를 다시 확인해주세요"* <!-- illustrative -->). |
|
|
357
|
+
| **Error (payment declined)** | Modal (this is not a transient error). Headline 18px weight 700 `#212529`: *"결제가 완료되지 않았어요"* <!-- illustrative -->. Body 14px weight 400 explaining the cause (insufficient funds / card expired / 3DS failed). Two CTAs: *"다른 카드로 결제"* (primary mint) and *"취소"* (neutral). No humor on this surface. |
|
|
358
|
+
| **Error (network / service down)** | Top banner, `#343A40` bg, white text, one sentence (*"일시적으로 연결이 불안정해요"* <!-- illustrative -->) + retry pill. Banner auto-dismisses when connectivity returns. |
|
|
359
|
+
| **Success (order placed)** | Dedicated confirmation screen — not a toast. Mint checkmark icon top-center, order number in 16px weight 600 `#495057`, restaurant name in 20px weight 700 `#212529`, estimated delivery time in 14px weight 400. Single primary CTA *"주문 내역 보기"*. Ordering is ceremonial here — receipts matter. |
|
|
360
|
+
| **Success (item added to cart)** | Bottom toast, `#212529` bg, white 14px 400 text, 2.5s auto-dismiss (*"장바구니에 담겼어요"* <!-- illustrative -->). Floating cart button badge increments simultaneously. |
|
|
361
|
+
| **Skeleton** | `#F1F3F5` blocks at exact final card dimensions (16:9 photo slot, name row, meta row). Shimmer 1.2s. Ratings render as an 80px-wide block, never a placeholder star that could read as 0. Prices render as `---원` until resolved — never `0원`, which reads as "free" and misleads. |
|
|
362
|
+
| **Disabled** | Button background drops to `#DEE2E6`, text to `#ADB5BD`. Corner radius stays at 8px — never flattens or rounds to a different shape. Disabled state on the "주문하기" CTA shows *why* inline above the button (e.g., "최소 주문 금액 ₩12,000에 ₩3,000 부족해요" <!-- illustrative -->), not as a separate toast. |
|
|
363
|
+
|
|
364
|
+
## 15. Motion & Easing
|
|
365
|
+
|
|
366
|
+
Baemin's motion is **warm, responsive, and slightly playful** — a touch more kinetic than Toss's fintech restraint, a touch more disciplined than a social app. Spring and overshoot are **licensed in two narrow places only** (category icon tap feedback, favorite heart toggle) because Baemin's brand voice leans playful and the physicality of those two interactions reinforces the "neighborhood warmth" positioning. Everywhere else — checkout, delivery tracking, payment — motion is standard-easing and functional. A spring on the "결제하기" button would read as unserious with money; a spring on a chicken-category tap reads as a lightly tactile wink.
|
|
367
|
+
|
|
368
|
+
**Durations** (named, not raw milliseconds):
|
|
369
|
+
|
|
370
|
+
| Token | Value | Use |
|
|
371
|
+
|---|---|---|
|
|
372
|
+
| `motion-instant` | 0ms | Toggle commits, checkbox state changes |
|
|
373
|
+
| `motion-fast` | 150ms | Hover, focus, button press overlay, image thumbnail tap |
|
|
374
|
+
| `motion-standard` | 250ms | The default — sheet opens, card expands, tab switches, toast appear |
|
|
375
|
+
| `motion-slow` | 400ms | Order-confirmation reveal, success checkmark stroke |
|
|
376
|
+
| `motion-page` | 300ms | Route transitions between top-level tabs |
|
|
377
|
+
|
|
378
|
+
**Easings:**
|
|
379
|
+
|
|
380
|
+
| Token | Curve | Use |
|
|
381
|
+
|---|---|---|
|
|
382
|
+
| `ease-enter` | `cubic-bezier(0.0, 0.0, 0.2, 1)` | Things appearing — sheets, toasts, screen pushes |
|
|
383
|
+
| `ease-exit` | `cubic-bezier(0.4, 0.0, 1, 1)` | Things leaving — dismissals, pops |
|
|
384
|
+
| `ease-standard` | `cubic-bezier(0.4, 0.0, 0.2, 1)` | Two-way transitions — card expand/collapse, tab content |
|
|
385
|
+
| `ease-bounce` | `cubic-bezier(0.34, 1.56, 0.64, 1)` | **Licensed only for:** category icon tap feedback and favorite heart toggle. Overshoot on CTAs, payment confirmation, or checkout transitions is forbidden — commerce precision outranks kinetic delight on money surfaces. |
|
|
386
|
+
|
|
387
|
+
**Signature motions.**
|
|
388
|
+
|
|
389
|
+
1. **Restaurant card tap feedback.** Card scales `1.0` → `0.98` over `motion-fast / ease-standard` on press, returns on release. Tactile but not bouncy.
|
|
390
|
+
2. **Category icon tap.** Icon scales `1.0` → `1.1` → `1.0` over `motion-standard` with `ease-bounce`. This is one of two places overshoot is allowed — the category row is where Baemin's warmth lives most visibly.
|
|
391
|
+
3. **Favorite heart toggle.** Heart icon fills over `motion-fast` with a brief scale pulse (`1.0` → `1.15` → `1.0`) using `ease-bounce`. Second and final licensed overshoot location.
|
|
392
|
+
4. **Bottom sheet presentation.** Sheets rise from `y+40px` with `motion-standard / ease-enter`, synchronized with backdrop fade from `rgba(0,0,0,0)` to `rgba(0,0,0,0.5)`. Dismissal uses `motion-fast / ease-exit` — leaving is lighter than arriving.
|
|
393
|
+
5. **Order confirmation success.** Mint checkmark draws over `motion-slow` with `ease-standard` (not `ease-bounce` — money-related completions stay precise). Card contents reveal below with a 100ms staggered fade.
|
|
394
|
+
6. **Floating cart button emerge.** When the cart transitions from empty to non-empty, the floating cart button rises from `y+20px` with a subtle scale-in (`0.9` → `1.0`) over `motion-standard / ease-enter`. Disappearance is a reversed fade, not a slide-out — the empty cart state shouldn't draw attention.
|
|
395
|
+
7. **Reduce motion.** Under `prefers-reduced-motion: reduce`, all `motion-*` tokens collapse to `motion-instant`. `ease-bounce` is suppressed entirely — category taps and favorite toggles swap to a crossfade. The app stays fully usable; motion is never load-bearing for comprehension.
|
|
396
|
+
|
|
397
|
+
<!--
|
|
398
|
+
OmD v0.1 Sources — Philosophy Layer (sections 10–15)
|
|
399
|
+
|
|
400
|
+
Extracted 2026-04-20 via omd:add-reference AUGMENT mode.
|
|
401
|
+
Style reference: toss/DESIGN.md (auto-picked — 🇰🇷 KR region matrix).
|
|
402
|
+
|
|
403
|
+
Direct verification via WebFetch (2026-04-20):
|
|
404
|
+
- https://www.baemin.com/ — confirms hero campaign slogan "세상 모든 것이
|
|
405
|
+
식지 않도록", 배민클럽 membership banner "시켜도 시켜도 배달팁 무료
|
|
406
|
+
배민클럽!", 선물하기 tagline "마음을 배달해드려요", 배민페이 tagline
|
|
407
|
+
"10초 만에 결제 완료", and the seven service verticals (음식배달, 배민클럽,
|
|
408
|
+
B마트, 장보기・쇼핑, 선물하기, 전국특가, 배민페이). Used for §10 Voice & Tone
|
|
409
|
+
verified samples and §11 Narrative service list.
|
|
410
|
+
- https://en.sandoll.co.kr/Story/?bmode=view&idx=19495712 — confirms the Baemin
|
|
411
|
+
Hanna font origin story (1960s–70s acrylic-cut Korean signboard inspiration,
|
|
412
|
+
named after Kim Bong-jin's eldest daughter Hanna, Sandoll renewal preserving
|
|
413
|
+
"kitsch charm"), and references Kim's 2015 Master's thesis "Font design
|
|
414
|
+
reflecting Korea's indigenous visual culture". Used for §11 Narrative.
|
|
415
|
+
- https://en.wikipedia.org/wiki/Baedal_Minjok — confirms 2010 founding by Kim
|
|
416
|
+
Bong-jin, the flyer-scanning origin story from Gangnam streets, 2020 revenue
|
|
417
|
+
~₩1.09T (~US$960M), Delivery Hero acquisition announced Dec 2019 and
|
|
418
|
+
completed Dec 2020 conditional on Yogiyo divestiture. Used for §11.
|
|
419
|
+
- https://www.ajunews.com/view/20170411135156182 — confirms "치킨은 살 안 쪄요,
|
|
420
|
+
살은 내가 쪄요" is the 2017 배민신춘문예 grand-prize USER-SUBMITTED entry,
|
|
421
|
+
not Baemin product UI copy. Used for §10 voice-samples framing paragraph.
|
|
422
|
+
|
|
423
|
+
KOREAN-SOURCE-ONLY (not bilingual — Korean blog / press only):
|
|
424
|
+
- https://jiwon.app/blog/baemin-hiring-branding-culture — Korean recruitment-
|
|
425
|
+
culture analysis blog citing Woowa Brothers' four core values
|
|
426
|
+
(규율위의 자율, 스타보다 팀웍, 진지함과 위트, 열심만큼 성과). English
|
|
427
|
+
rendering in this file ("autonomy over discipline, teamwork over stars,
|
|
428
|
+
seriousness with wit, results matched to effort") is a translation, not a
|
|
429
|
+
citation of an English-language Woowa source — Woowa does not publish the
|
|
430
|
+
four values on an English surface this augmentation verified. If a reader
|
|
431
|
+
needs an English-official source, it must come from a future Woowa English
|
|
432
|
+
culture page or a translated press release.
|
|
433
|
+
|
|
434
|
+
Base DESIGN.md (sections 1–9) is the source for all token-level claims:
|
|
435
|
+
Baemin Mint #2AC1BC, five-tier shadow system (Natural / Deep / Sharp /
|
|
436
|
+
Outlined / Crisp), the 13+ open-source OFL fonts, the 8px spacing base,
|
|
437
|
+
and the card-radius scale (4/8/12/20/pill).
|
|
438
|
+
|
|
439
|
+
Not independently verified in this session — widely documented public facts:
|
|
440
|
+
- Woowa Brothers (우아한형제들) was founded in 2010 by Kim Bong-jin.
|
|
441
|
+
- Baemin's custom font family includes 한나체, 주아체, 도현체, 을지로체,
|
|
442
|
+
기랑해랑체, 연성체 (13 total free fonts under SIL OFL license).
|
|
443
|
+
- Delivery Hero acquisition: announced December 2019, regulatory approval
|
|
444
|
+
granted December 2020 conditional on Yogiyo divestiture. Instructions
|
|
445
|
+
cited 2019 as the acquisition year; per Wikipedia the announcement was
|
|
446
|
+
Dec 2019 and the deal closed Dec 2020 — both dates are reflected here.
|
|
447
|
+
|
|
448
|
+
⚠️ THIN SOURCING WARNING (honored from instructions):
|
|
449
|
+
- 배민다움 is Korean-culture-famous but English-language documentation is
|
|
450
|
+
thin. Voice register characterization ("warm, witty, unmistakably Korean-
|
|
451
|
+
vernacular", "B급 감성") is a reasoned synthesis from Korean press, not
|
|
452
|
+
a direct citation of an English Baemin brand guideline. A Baemin-published
|
|
453
|
+
English voice & tone book would strengthen §10.
|
|
454
|
+
- Famous playful strings associated with Baemin in Korean media (e.g.,
|
|
455
|
+
"치킨은 살 안 쪄요, 살은 내가 쪄요") are 배민신춘문예 CONTEST entries from
|
|
456
|
+
users, not Baemin product copy. This file explicitly frames them that way
|
|
457
|
+
in §10 to avoid fabricating a false provenance.
|
|
458
|
+
- Illustrative voice samples in §10 (empty cart, payment-failed, order-placed)
|
|
459
|
+
and all illustrative state copy in §14 are written in Baemin's register but
|
|
460
|
+
not verified as live baemin.com strings. A production team with access to
|
|
461
|
+
the logged-in app should replace them with observed copy before shipping.
|
|
462
|
+
|
|
463
|
+
Personas (§13) are fictional archetypes informed by publicly described
|
|
464
|
+
Korean food-delivery user segments. Any resemblance to specific individuals
|
|
465
|
+
is unintended.
|
|
466
|
+
|
|
467
|
+
Interpretive claims (e.g., "Mint was chosen specifically because the food-
|
|
468
|
+
delivery category defaults to warm reds and oranges") are editorial readings
|
|
469
|
+
of the visual system, not direct Baemin brand-guideline statements.
|
|
470
|
+
-->
|
|
@@ -63,16 +63,72 @@ What makes BMW distinctive is its CSS variable-driven theming system. Context-aw
|
|
|
63
63
|
## 4. Component Stylings
|
|
64
64
|
|
|
65
65
|
### Buttons
|
|
66
|
-
- Text: 16px BMWTypeNextLatin, weight 700 for primary, 400 for secondary
|
|
67
|
-
- Line-height: 1.15–2.88 (large variation suggests padding-driven sizing)
|
|
68
|
-
- Border: white bottom-border on dark surfaces (`1px solid #ffffff`)
|
|
69
|
-
- No border-radius — sharp rectangular buttons
|
|
70
66
|
|
|
71
|
-
|
|
72
|
-
-
|
|
73
|
-
-
|
|
74
|
-
-
|
|
75
|
-
-
|
|
67
|
+
**Primary**
|
|
68
|
+
- Background: transparent
|
|
69
|
+
- Text: `#ffffff`
|
|
70
|
+
- Border: 1px solid `#ffffff` (bottom-border on dark surfaces)
|
|
71
|
+
- Radius: 0px
|
|
72
|
+
- Padding: 12px 24px
|
|
73
|
+
- Font: 16px / 700 / BMWTypeNextLatin
|
|
74
|
+
- Hover: text remains white, no underline
|
|
75
|
+
- Use: Primary CTA on dark/hero surfaces
|
|
76
|
+
|
|
77
|
+
**Secondary**
|
|
78
|
+
- Background: transparent
|
|
79
|
+
- Text: `#262626`
|
|
80
|
+
- Border: 1px solid `#262626`
|
|
81
|
+
- Radius: 0px
|
|
82
|
+
- Padding: 12px 24px
|
|
83
|
+
- Font: 16px / 400 / BMWTypeNextLatin
|
|
84
|
+
- Use: Secondary actions on light surfaces
|
|
85
|
+
|
|
86
|
+
**Highlight**
|
|
87
|
+
- Background: `#1c69d4`
|
|
88
|
+
- Text: `#ffffff`
|
|
89
|
+
- Radius: 0px
|
|
90
|
+
- Padding: 12px 24px
|
|
91
|
+
- Font: 16px / 700 / BMWTypeNextLatin
|
|
92
|
+
- Hover: `#0653b6`
|
|
93
|
+
- Use: Inferred from §1-§2 baseline (no explicit DS variant in source) — BMW Blue highlight CTA
|
|
94
|
+
|
|
95
|
+
### Inputs
|
|
96
|
+
|
|
97
|
+
**Default**
|
|
98
|
+
- Background: `#ffffff`
|
|
99
|
+
- Text: `#262626`
|
|
100
|
+
- Border: 1px solid `#262626`
|
|
101
|
+
- Radius: 0px
|
|
102
|
+
- Padding: 12px 16px
|
|
103
|
+
- Font: 16px / 400 / BMWTypeNextLatin
|
|
104
|
+
- Focus: border `#0653b6`
|
|
105
|
+
- Use: Inferred from §1-§2 baseline (no explicit DS variant in source).
|
|
106
|
+
|
|
107
|
+
### Cards
|
|
108
|
+
|
|
109
|
+
**Standard**
|
|
110
|
+
- Background: `#ffffff`
|
|
111
|
+
- Radius: 0px
|
|
112
|
+
- Padding: 24px
|
|
113
|
+
- Border: none
|
|
114
|
+
- Use: Light-section content card — sharp rectangular, no border-radius (BMW's angular signature)
|
|
115
|
+
|
|
116
|
+
**Dark Hero Container**
|
|
117
|
+
- Background: `#262626` (or full-bleed photography)
|
|
118
|
+
- Text: `#ffffff`
|
|
119
|
+
- Radius: 0px
|
|
120
|
+
- Padding: 0px (edge-to-edge)
|
|
121
|
+
- Use: Hero/feature sections with full-bleed automotive photography
|
|
122
|
+
|
|
123
|
+
### Badges
|
|
124
|
+
|
|
125
|
+
**Default**
|
|
126
|
+
- Background: `#262626`
|
|
127
|
+
- Text: `#ffffff`
|
|
128
|
+
- Radius: 0px
|
|
129
|
+
- Padding: 4px 8px
|
|
130
|
+
- Font: 12px / 700 / BMWTypeNextLatin
|
|
131
|
+
- Use: Inferred from §1-§2 baseline (no explicit DS variant in source).
|
|
76
132
|
|
|
77
133
|
### Navigation
|
|
78
134
|
- BMWTypeNextLatin 18px weight 900 for primary nav links
|
|
@@ -178,3 +234,76 @@ What makes BMW distinctive is its CSS variable-driven theming system. Context-aw
|
|
|
178
234
|
3. BMW Blue for interactive only — never as background or decoration
|
|
179
235
|
4. Photography carries emotion — the UI is pure precision
|
|
180
236
|
5. Tight line-heights everywhere — 1.15 to 1.30 is the range
|
|
237
|
+
|
|
238
|
+
## 10. Voice & Tone
|
|
239
|
+
|
|
240
|
+
BMW's voice is **precision-engineered and luxury-confident.** "프리미엄 자동차와 혁신적인 기술" — luxury performance positioning. Sharp 3px radius + photography-driven hero signal "German engineering precision."
|
|
241
|
+
|
|
242
|
+
| Context | Tone |
|
|
243
|
+
|---|---|
|
|
244
|
+
| CTA | Verb-noun. "사전 예약하기", "더 알아보기", "구성하기" |
|
|
245
|
+
| Marketing | Photography dominant; copy supports image |
|
|
246
|
+
| Documentation | Technical specs (kW, km/h, 제로백) prominent |
|
|
247
|
+
| Error | Specific. "구성 옵션이 호환되지 않습니다." |
|
|
248
|
+
|
|
249
|
+
**Voice samples**
|
|
250
|
+
- Marketing CTAs: *"사전 예약하기"* / *"BMW AI 어시스턴트"* <!-- verified: bmw.co.kr 2026-05 -->
|
|
251
|
+
|
|
252
|
+
**Forbidden phrases.** "Revolutionary driving". Aggressive Mercedes-comparison framing.
|
|
253
|
+
|
|
254
|
+
## 11. Brand Narrative
|
|
255
|
+
|
|
256
|
+
BMW (**Bayerische Motoren Werke**) was founded **March 7, 1916** in Munich, originally as **Bayerische Flugzeugwerke (BFW)** — formerly Otto Flugmaschinenfabrik — an aircraft engine manufacturer ([BMW — Wikipedia](https://en.wikipedia.org/wiki/BMW), [History of BMW — Wikipedia](https://en.wikipedia.org/wiki/History_of_BMW), [BMW Group History](https://www.bmwgroup.com/en/company/history.html)). The company traces its lineage to **Karl Rapp** and **Gustav Otto**; the moniker "BMW" first appeared in 1917 when Rapp Motorenwerke became BMW GmbH, then re-formalized as **Bayerische Motoren Werke in 1922**. The first product was the **BMW IIIa aircraft engine**, distinguished by fuel economy and high-altitude performance ([PBS](https://www.pbs.org/newshour/world/heres-what-bmw-did-before-it-made-luxury-cars)). The **Treaty of Versailles (1918) banned aircraft engine production**, forcing BMW to pivot to **farm equipment, household items, and railway brakes** to survive. Motorcycle production began **1923 (R32)**; automobile market entry **1928** (Dixi acquisition). Brand positioning: ***"Sheer Driving Pleasure"* / *"Freude am Fahren"***. The 2024-2025 evolution toward AI Assistant integration + EV (i-series, Neue Klasse) positions BMW for the post-internal-combustion era while preserving driving-pleasure identity. The roundel logo's **white + blue quarters represent the Bavarian flag**, not a spinning propeller — that myth has been explicitly debunked by BMW corporate communications.
|
|
257
|
+
|
|
258
|
+
## 12. Principles
|
|
259
|
+
|
|
260
|
+
1. **Photography is the design.** *UI implication:* hero modules dominated by car photography.
|
|
261
|
+
2. **3px sharp radius.** *UI implication:* never round corners more — sharp signals German engineering.
|
|
262
|
+
3. **BMW Blue `#1c69d4` for primary action.** *UI implication:* preserve corporate blue for CTAs.
|
|
263
|
+
4. **Tight line-heights 1.15-1.30.** *UI implication:* don't open line-height; tight signals premium typography.
|
|
264
|
+
5. **Photography emotion, UI precision.** *UI implication:* car photos can be cinematic; chrome stays restrained.
|
|
265
|
+
|
|
266
|
+
## 13. Personas
|
|
267
|
+
|
|
268
|
+
*Personas are fictional archetypes informed by BMW user segments (premium auto buyers, EV early-adopters, fleet managers), not individual people.*
|
|
269
|
+
|
|
270
|
+
**Heinz Müller, 48, Munich.** BMW M-series enthusiast. Long-time customer.
|
|
271
|
+
|
|
272
|
+
**Sofia Park, 38, Seoul.** First BMW iX buyer, Korean market.
|
|
273
|
+
|
|
274
|
+
**Marcus Webb, 52, San Francisco.** Tech executive evaluating EV options. BMW i7 vs Tesla Model S comparison.
|
|
275
|
+
|
|
276
|
+
## 14. States
|
|
277
|
+
|
|
278
|
+
| State | Treatment |
|
|
279
|
+
|---|---|
|
|
280
|
+
| **Empty (no configurations)** | "Configure your BMW" CTA + model selector |
|
|
281
|
+
| **Empty (no test drives)** | "Book a test drive" CTA |
|
|
282
|
+
| **Loading (configurator)** | Real-time 3D rendering progress |
|
|
283
|
+
| **Loading (price calc)** | Per-option price update |
|
|
284
|
+
| **Error (incompatible config)** | Specific. Constraint explanation |
|
|
285
|
+
| **Error (no inventory)** | "출고 대기 시간: N개월" with reservation CTA |
|
|
286
|
+
| **Success (saved config)** | Configuration ID + share link |
|
|
287
|
+
| **Success (test drive booked)** | Confirmation + dealer contact |
|
|
288
|
+
| **Skeleton (model list)** | 3px-radius placeholders |
|
|
289
|
+
| **Disabled (option locked)** | Tooltip with constraint reason |
|
|
290
|
+
| **Loading (long render)** | Persistent progress |
|
|
291
|
+
|
|
292
|
+
## 15. Motion & Easing
|
|
293
|
+
|
|
294
|
+
| Token | Value | Use |
|
|
295
|
+
|---|---|---|
|
|
296
|
+
| `motion-instant` | 0ms | Selection |
|
|
297
|
+
| `motion-fast` | 150ms | Hover |
|
|
298
|
+
| `motion-standard` | 300ms | Modal, panel |
|
|
299
|
+
| `motion-config-transition` | 500ms | Configuration option transitions |
|
|
300
|
+
|
|
301
|
+
Standard cubic-bezier; minimal bounce — premium register. `prefers-reduced-motion: reduce` removes 3D rendering animations.
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
**Verified:** 2026-05-08 (B9 loop)
|
|
306
|
+
**Tier 1 sources:** bmw.co.kr (live DOM via playwright — BMW Blue `#1c69d4` 3px / 4px / 52px / 14px·500; Light gray `#fff` ghost 3px; Round white icon button 50% / 52px)
|
|
307
|
+
**Tier 2 sources:** styles.refero.design / getdesign.md — no record.
|
|
308
|
+
**Tier 1 (Philosophy):** bmw.com homepage; BMW corporate history; "Sheer Driving Pleasure" tagline.
|
|
309
|
+
**Style ref:** `apple` (luxury minimal). **Conflicts unresolved:** none.
|