oh-my-design-cli 1.1.0 → 1.2.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.ja.md +7 -7
- package/README.ko.md +7 -7
- package/README.md +7 -7
- package/README.zh-TW.md +7 -7
- package/agents/omd-ux-writer.md +1 -1
- package/data/architecture-proposals/2026-05-13-thin-install-fresh-fetch.md +189 -0
- package/data/reference-audits/2026-05-13-kr10.md +132 -0
- package/data/reference-fingerprints.json +291 -2
- package/package.json +1 -1
- package/skills/omd-apply/SKILL.md +1 -1
- package/skills/omd-harness/SKILL.md +3 -3
- package/skills/omd-init/SKILL.md +1 -1
- package/web/references/29cm/DESIGN.md +445 -0
- package/web/references/ably/DESIGN.md +582 -0
- package/web/references/banksalad/DESIGN.md +606 -0
- package/web/references/gangnamunni/DESIGN.md +605 -0
- package/web/references/kakaopay/DESIGN.md +529 -0
- package/web/references/remember/DESIGN.md +445 -0
- package/web/references/socar/DESIGN.md +370 -0
- package/web/references/wanted/DESIGN.md +515 -0
- package/web/references/zigbang/DESIGN.md +457 -0
- package/web/references/zigzag/DESIGN.md +618 -0
|
@@ -0,0 +1,529 @@
|
|
|
1
|
+
---
|
|
2
|
+
omd: 0.1
|
|
3
|
+
brand: KakaoPay
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Design System Inspiration of KakaoPay
|
|
7
|
+
|
|
8
|
+
## 1. Visual Theme & Atmosphere
|
|
9
|
+
|
|
10
|
+
KakaoPay's design occupies the warm, friendly end of the Korean fintech spectrum — where Toss is bold and assertively spacious, KakaoPay is soft and conversationally legible. The web home opens with a near-white canvas (`#ffffff`) and a near-black-but-warm body color (`rgb(6, 11, 17)` ≈ `#060B11`), framed by a dark nav header and a soft off-white footer (`#F8F9FA`). The Kakao-ecosystem yellow (`#FFEB00`) is present as a brand anchor — but, by explicit accessibility decision, it is *not* the primary CTA color on functional surfaces. KakaoPay's design team has publicly committed to a minimum **3:1 contrast ratio** between graphics and background, which drove the brand to retreat from saturated yellow on UI chrome and toward warmer, softer paired neutrals.
|
|
11
|
+
|
|
12
|
+
The defining typographic choice is **Noto Sans KR** — a deliberately mainstream Korean-first system font choice, set with `system-ui` and `AppleSDGothicNeo` fallbacks. KakaoPay does not deploy a proprietary display face (unlike Toss's "Toss Product Sans" or Stripe's `sohne-var`). The choice is itself the statement: this is a financial app for *everyone in Korea*, including users on older Android devices, screen readers, and low-vision configurations. The body baseline is **14px** — denser than Stripe's 16px web baseline and consistent with Korean web fintech convention. Section headings sit at **22px / weight 500 / line-height 1.45 / letter-spacing `-0.2px`** — a moderate, friendly authority, not display-light (Stripe) and not display-bold (Toss financial amounts). Sub-menu labels run at **14px / weight 300** (inactive) and weight 500 (active group) — the weight differential is how hierarchy gets communicated, not size.
|
|
13
|
+
|
|
14
|
+
What distinguishes KakaoPay visually from its closest neighbors (Toss, Kakao Bank) is the **softness of the geometry**: rounded corners and rounded line work are stated principles, and the brand explicitly rejects sharp/aggressive shapes. Where Stripe runs 4px conservative radii and Toss runs 8–16px utilitarian rounding, KakaoPay's brand philosophy leans into the "둥글고 부드러운" (rounded and soft) idiom. Combined with the warm-neutral background and 3:1-minimum contrast targeting, the impression is of a financial product that has been deliberately de-tensed — engineered to feel low-stakes the moment you open it, even when the underlying action (transferring 5,000,000원) is high-stakes.
|
|
15
|
+
|
|
16
|
+
**Key Characteristics:**
|
|
17
|
+
- Noto Sans KR primary, with `system-ui` / `AppleSDGothicNeo` fallback — Korean-first, accessibility-first
|
|
18
|
+
- 14px web body baseline; 22px / weight 500 / `-0.2px` letter-spacing for section heads
|
|
19
|
+
- Weight 300 / 500 dual-track for hierarchy; bold (700) reserved for emphasis and reverse-on-yellow
|
|
20
|
+
- Kakao Yellow (`#FFEB00`) as ecosystem anchor — used decoratively / on dark brand chrome, not as default CTA
|
|
21
|
+
- Warm soft neutrals (Ivory `#FEFFFA`, Wild Willow `#C5C17A`, Olive `#7F7600`) as the supporting palette
|
|
22
|
+
- Minimum 3:1 contrast on graphics — accessibility is documented and enforced
|
|
23
|
+
- Rounded geometry across all components (cards, buttons, icons, illustrations)
|
|
24
|
+
- Three-tier graphic system: Icon → 2D → 3D, applied by information density
|
|
25
|
+
|
|
26
|
+
## 2. Color Palette & Roles
|
|
27
|
+
|
|
28
|
+
### Primary
|
|
29
|
+
- **Kakao Yellow** (`#FFEB00`): The brand anchor across the Kakao ecosystem. Used for logo, hero brand moments, and yellow-on-dark CTA in promotional surfaces. **Not** the default functional-UI CTA color — accessibility rules prohibit `#FFEB00` text on white and large-area `#FFEB00` for primary buttons without paired dark text.
|
|
30
|
+
- **Deep Ink** (`#060B11`): `rgb(6, 11, 17)` — observed body text color on live `kakaopay.com`. The KakaoPay "near-black": a deep neutral with a faint blue undertone, warmer than pure `#000`.
|
|
31
|
+
- **Pure White** (`#ffffff`): Page background, card surfaces.
|
|
32
|
+
|
|
33
|
+
### Brand Support
|
|
34
|
+
- **Ivory** (`#FEFFFA`): Soft off-white surface tone — alternative to pure white for sections that need warmth.
|
|
35
|
+
- **Wild Willow** (`#C5C17A`): Muted yellow-green secondary — pairs with yellow as a calmer adjacent tone.
|
|
36
|
+
- **Olive** (`#7F7600`): Deep yellow-green — used for text-on-yellow, icon strokes against light yellow backgrounds, achieving the 3:1-minimum contrast against `#FFEB00`.
|
|
37
|
+
|
|
38
|
+
### Surface Neutrals
|
|
39
|
+
- **Surface Footer** (`#F8F9FA`): Observed footer container background — the canonical "secondary surface" tone.
|
|
40
|
+
- **Surface Soft** (`#F2F4F6`): Light grey-blue panel background for cards and grouped content.
|
|
41
|
+
- **Border Default** (`#E5E8EB`): 1px borders on inputs, cards, dividers.
|
|
42
|
+
- **Border Subtle** (`#EEF0F3`): Inner dividers, list separators.
|
|
43
|
+
|
|
44
|
+
### Text Scale
|
|
45
|
+
- **Heading Ink** (`#060B11`): Primary heading and body text on light surfaces.
|
|
46
|
+
- **Heading on Dark** (`#F8F9FA`): Heading text on dark nav / dark brand sections.
|
|
47
|
+
- **Body Slate** (`#374151`): Secondary body / longer-form copy.
|
|
48
|
+
- **Caption Grey** (`#6B7684`): Captions, helper text, timestamps.
|
|
49
|
+
- **Placeholder** (`#B0B8C1`): Form placeholders, muted hint text.
|
|
50
|
+
|
|
51
|
+
### Functional
|
|
52
|
+
- **Success Green** (`#03B26C`): Confirmation states (transaction succeeded, savings goal hit).
|
|
53
|
+
- **Error Red** (`#F04452`): Error states, declines, validation failures.
|
|
54
|
+
- **Warning Amber** (`#FFA94D`): Warning states, deadline reminders. Distinct from brand yellow.
|
|
55
|
+
- **Info Blue** (`#3182F6`): Informational links and tooltips on non-brand surfaces.
|
|
56
|
+
|
|
57
|
+
### Dark Nav / Hero
|
|
58
|
+
- **Header Ink** (`#1A1D24`): Dark nav header background — near-black with warm undertone.
|
|
59
|
+
- **Header Text** (`#FFFFFF`): Top-level nav links on dark header.
|
|
60
|
+
- **Header Muted** (`rgba(255,255,255,0.6)`): Inactive top-level link state.
|
|
61
|
+
|
|
62
|
+
## 3. Typography Rules
|
|
63
|
+
|
|
64
|
+
### Font Family
|
|
65
|
+
- **Primary**: `"Noto Sans KR", system-ui, AppleSDGothicNeo, sans-serif` (observed)
|
|
66
|
+
- **Numerals**: Same family; tabular numerals not enforced via OpenType on web — financial amounts rely on rendering at consistent weight (500/700) and right alignment for column legibility.
|
|
67
|
+
- **No proprietary display face.** Korean-first accessibility is the explicit reason.
|
|
68
|
+
|
|
69
|
+
### Hierarchy
|
|
70
|
+
|
|
71
|
+
| Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
|
|
72
|
+
|------|------|------|--------|-------------|----------------|-------|
|
|
73
|
+
| Display Hero | Noto Sans KR | 40-48px | 700 | 1.20 | -0.4px | Marketing hero; bold to anchor the warm-soft canvas |
|
|
74
|
+
| Display Large | Noto Sans KR | 32px | 700 | 1.25 | -0.3px | Secondary marketing headlines |
|
|
75
|
+
| Section Heading | Noto Sans KR | 22px | 500 | 1.45 (31.9px) | -0.2px | Observed nav megamenu H2 — the workhorse heading |
|
|
76
|
+
| Sub-heading | Noto Sans KR | 18px | 500 | 1.40 | -0.1px | Card titles, group labels |
|
|
77
|
+
| Body Strong | Noto Sans KR | 16px | 500 | 1.50 | normal | Important paragraph copy |
|
|
78
|
+
| Body | Noto Sans KR | 14px | 400 | 1.50 | normal | Observed default — Korean-web fintech baseline |
|
|
79
|
+
| Body Light | Noto Sans KR | 14px | 300 | 1.57 (21.98px) | normal | Observed inactive nav link weight — secondary text |
|
|
80
|
+
| Group Label | Noto Sans KR | 14px | 500 | 1.21 (16.94px) | normal | Observed H3 in megamenu — group-active label |
|
|
81
|
+
| Caption | Noto Sans KR | 13px | 400 | 1.50 | normal | Helper text, metadata |
|
|
82
|
+
| Small | Noto Sans KR | 12px | 400 | 1.40 | normal | Legal, fine print |
|
|
83
|
+
| Financial Amount | Noto Sans KR | 24-30px | 700 | 1.20 | normal | Balance and amount display (in app) |
|
|
84
|
+
|
|
85
|
+
### Principles
|
|
86
|
+
- **Weight differentiates, not size.** The most common KakaoPay pattern is 14px / weight 300 paired with 14px / weight 500 — same size, different hierarchy. Reduces visual noise.
|
|
87
|
+
- **Negative tracking only at display.** Headings ≥22px use `-0.2px` to `-0.4px`; body keeps `letter-spacing: normal`. Korean glyphs are wider than Latin and over-tightening punishes legibility.
|
|
88
|
+
- **Korean is the first audience.** Latin strings are styled to render adequately in Noto Sans KR's Latin glyphs — KakaoPay does not switch to a Latin-optimized fallback mid-sentence.
|
|
89
|
+
- **Two-weight density.** 300 / 500 / 700 are the load-bearing weights; 400 is the neutral default for paragraph copy. Avoid stacking weights mid-paragraph for emphasis.
|
|
90
|
+
- **No display-light.** Unlike Stripe's signature weight-300 headlines, KakaoPay's hero/display sits at 500-700. Light weight at display sizes would read as cold, contradicting the warm-friendly tone.
|
|
91
|
+
|
|
92
|
+
## 4. Component Stylings
|
|
93
|
+
|
|
94
|
+
### Buttons
|
|
95
|
+
|
|
96
|
+
**Primary (Functional UI)**
|
|
97
|
+
- Background: `#060B11` (Deep Ink — preferred default on white surfaces, accessibility-safe)
|
|
98
|
+
- Text: `#FFFFFF`
|
|
99
|
+
- Padding: 14px 20px
|
|
100
|
+
- Radius: 12px (rounded — matches "둥글고 부드러운" principle)
|
|
101
|
+
- Font: 16px / weight 500 / Noto Sans KR
|
|
102
|
+
- Height: 48px (touch-friendly)
|
|
103
|
+
- Hover: opacity 0.9 / no color shift
|
|
104
|
+
- Use: Primary action on light surface where Kakao Yellow would fail contrast ("확인", "다음", "송금하기")
|
|
105
|
+
|
|
106
|
+
**Brand Yellow (Decorative / On Dark)**
|
|
107
|
+
- Background: `#FFEB00`
|
|
108
|
+
- Text: `#060B11` (dark ink — required for 3:1 contrast on yellow)
|
|
109
|
+
- Padding: 14px 20px
|
|
110
|
+
- Radius: 12px
|
|
111
|
+
- Font: 16px / weight 700 / Noto Sans KR
|
|
112
|
+
- Height: 48px
|
|
113
|
+
- Use: Kakao-ecosystem moments (Kakao login, brand promotion, marketing-page hero CTA on dark canvas). **Never** white text on yellow.
|
|
114
|
+
|
|
115
|
+
**Secondary / Outline**
|
|
116
|
+
- Background: `#FFFFFF`
|
|
117
|
+
- Text: `#060B11`
|
|
118
|
+
- Padding: 14px 20px
|
|
119
|
+
- Radius: 12px
|
|
120
|
+
- Border: `1px solid #E5E8EB`
|
|
121
|
+
- Font: 16px / weight 500
|
|
122
|
+
- Use: Secondary action paired with a primary CTA
|
|
123
|
+
|
|
124
|
+
**Tertiary / Soft**
|
|
125
|
+
- Background: `#F2F4F6`
|
|
126
|
+
- Text: `#060B11`
|
|
127
|
+
- Padding: 14px 20px
|
|
128
|
+
- Radius: 12px
|
|
129
|
+
- Border: none
|
|
130
|
+
- Font: 16px / weight 500
|
|
131
|
+
- Use: Low-emphasis action, "더보기", "취소"
|
|
132
|
+
|
|
133
|
+
**Link Inline**
|
|
134
|
+
- Background: transparent
|
|
135
|
+
- Text: `#3182F6`
|
|
136
|
+
- Padding: 0
|
|
137
|
+
- Underline: on hover only
|
|
138
|
+
- Font: 14px / weight 500
|
|
139
|
+
- Use: Inline text link inside paragraph copy
|
|
140
|
+
|
|
141
|
+
### Cards & Containers
|
|
142
|
+
|
|
143
|
+
**Standard Card**
|
|
144
|
+
- Background: `#FFFFFF`
|
|
145
|
+
- Border: `1px solid #EEF0F3`
|
|
146
|
+
- Radius: 16px (rounded-soft)
|
|
147
|
+
- Padding: 20px
|
|
148
|
+
- Shadow: `0px 2px 8px rgba(0, 0, 0, 0.04)` (very subtle — soft elevation, not dramatic)
|
|
149
|
+
- Use: Service tile, summary panel, content block
|
|
150
|
+
|
|
151
|
+
**Soft Card** (grouped content)
|
|
152
|
+
- Background: `#F8F9FA`
|
|
153
|
+
- Border: none
|
|
154
|
+
- Radius: 16px
|
|
155
|
+
- Padding: 20px
|
|
156
|
+
- Shadow: none — elevation conveyed by background contrast only
|
|
157
|
+
- Use: Inset panel, FAQ row, grouped form section
|
|
158
|
+
|
|
159
|
+
**Brand Card** (yellow-on-dark moment)
|
|
160
|
+
- Background: `#1A1D24`
|
|
161
|
+
- Border: none
|
|
162
|
+
- Radius: 20px
|
|
163
|
+
- Padding: 24px
|
|
164
|
+
- Text: `#FFFFFF` with `#FFEB00` accent for the brand-moment headline
|
|
165
|
+
- Use: Hero promotional card, Kakao-ecosystem feature spotlight
|
|
166
|
+
|
|
167
|
+
### Badges / Tags / Pills
|
|
168
|
+
|
|
169
|
+
**Neutral Badge**
|
|
170
|
+
- Background: `#F2F4F6`
|
|
171
|
+
- Text: `#374151`
|
|
172
|
+
- Padding: 4px 10px
|
|
173
|
+
- Radius: 9999px (pill — matches rounded principle)
|
|
174
|
+
- Font: 12px / weight 500
|
|
175
|
+
|
|
176
|
+
**Brand Badge**
|
|
177
|
+
- Background: `#FFFBCC` (yellow-tinted 12% surface)
|
|
178
|
+
- Text: `#7F7600` (Olive — clears 3:1 contrast on the tinted background)
|
|
179
|
+
- Padding: 4px 10px
|
|
180
|
+
- Radius: 9999px
|
|
181
|
+
- Font: 12px / weight 500
|
|
182
|
+
|
|
183
|
+
**Success Badge**
|
|
184
|
+
- Background: `rgba(3, 178, 108, 0.12)`
|
|
185
|
+
- Text: `#03B26C`
|
|
186
|
+
- Padding: 4px 10px
|
|
187
|
+
- Radius: 9999px
|
|
188
|
+
- Font: 12px / weight 500
|
|
189
|
+
|
|
190
|
+
**Error Badge**
|
|
191
|
+
- Background: `rgba(240, 68, 82, 0.10)`
|
|
192
|
+
- Text: `#F04452`
|
|
193
|
+
- Padding: 4px 10px
|
|
194
|
+
- Radius: 9999px
|
|
195
|
+
- Font: 12px / weight 500
|
|
196
|
+
|
|
197
|
+
### Inputs & Forms
|
|
198
|
+
- Background: `#FFFFFF`
|
|
199
|
+
- Border: `1px solid #E5E8EB`
|
|
200
|
+
- Radius: 12px
|
|
201
|
+
- Padding: 14px 16px
|
|
202
|
+
- Height: 52px
|
|
203
|
+
- Focus: `1px solid #060B11` (no yellow ring — contrast safety)
|
|
204
|
+
- Label: 13px / weight 500 / `#6B7684`, sits above field
|
|
205
|
+
- Text: 16px / weight 400 / `#060B11`
|
|
206
|
+
- Placeholder: `#B0B8C1`
|
|
207
|
+
- Error: 1px solid `#F04452` + 13px error helper text in `#F04452` below
|
|
208
|
+
|
|
209
|
+
### Navigation
|
|
210
|
+
|
|
211
|
+
**Web Header (observed)**
|
|
212
|
+
- Background: `#1A1D24` (dark)
|
|
213
|
+
- Height: 84px
|
|
214
|
+
- Text: `#FFFFFF` for top-level links
|
|
215
|
+
- Top-level link: 16px / weight 300 / line-height 84px (centered vertically by line-height)
|
|
216
|
+
- Megamenu H2 group header: 22px / weight 500 / letter-spacing `-0.2px` / color `#F8F9FA`
|
|
217
|
+
- Megamenu H3 sub-group label: 14px / weight 500 / 8px horizontal padding / color `#FFFFFF`
|
|
218
|
+
- Megamenu link (inactive): 14px / weight 300 / `#060B11` on white megamenu drop
|
|
219
|
+
- Logo position: left
|
|
220
|
+
- No CTA in primary nav (KakaoPay app install is bottom-of-page or floating)
|
|
221
|
+
|
|
222
|
+
**Mobile / App Tab Bar**
|
|
223
|
+
- Background: `#FFFFFF`
|
|
224
|
+
- Top border: `1px solid #EEF0F3`
|
|
225
|
+
- Height: 56px (+ safe-area)
|
|
226
|
+
- Tab icon: 24px, weight handled by 3-tier graphic system (Icon variant)
|
|
227
|
+
- Active tab: `#060B11` icon + 11px / weight 500 label `#060B11`
|
|
228
|
+
- Inactive tab: `#B0B8C1` icon + 11px / weight 400 label `#6B7684`
|
|
229
|
+
|
|
230
|
+
### Iconography (3-Tier System)
|
|
231
|
+
- **Icon (UI tier):** 24px solid-fill monoline, `#060B11` on light / `#FFFFFF` on dark. Used for inline actions, tab bar, list rows.
|
|
232
|
+
- **2D Graphic:** Solid-fill illustration ~80–120px, multi-color from the warm-soft palette. Used for empty states and feature cards.
|
|
233
|
+
- **3D Graphic:** Rendered illustration ~160–240px, used for hero / onboarding only. Always paired with a single supporting sentence — never decorative.
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
**Verified:** 2026-05-13 (CREATE — Apple-tier)
|
|
238
|
+
**Tier 1 sources:** `https://www.kakaopay.com/` (live DOM via playwright — body font `Noto Sans KR`, body color `rgb(6,11,17)`, header 84px dark, megamenu H2 22px·500·-0.2px, footer `#F8F9FA`); `https://story.kakaopay.com/225-kakaopay-design/` (official KakaoPay design blog — three pillars, 3:1 contrast commitment, Icon→2D→3D hierarchy); `https://www.kakaocorp.com/page/service/service/KakaoPay` (service taglines and IA); WebSearch corroboration on brand color `#FFEB00` + Wild Willow / Ivory / Olive supporting palette.
|
|
239
|
+
**Tier 2 sources:** `getdesign.md/kakaopay` — verified explicitly empty ("No designs found for 'kakaopay'", 2026-05-13). `styles.refero.design/?q=kakaopay` and `?q=카카오페이` — both verified empty via playwright 2026-05-13.
|
|
240
|
+
**Tier 2b status:** unavailable. Tier 1 (live DOM + official `story.kakaopay.com` design blog + Kakao Corp service page + brand-color aggregator) treated as authoritative per pipeline.
|
|
241
|
+
**Conflicts unresolved:** none. Live DOM (warm-neutral + dark-ink primary, no yellow on functional CTAs) is fully consistent with the blog-stated accessibility policy (3:1 minimum, yellow retreat from primary functional UI). The yellow stays as a brand-anchor / ecosystem cue, not a CTA token.
|
|
242
|
+
**Note on KPDS:** No public KakaoPay Design System docs site discovered. Design knowledge is published as narrative posts on `story.kakaopay.com`, not as a public token registry.
|
|
243
|
+
**`_research.md`:** `web/references/kakaopay/_research.md`
|
|
244
|
+
|
|
245
|
+
## 5. Layout Principles
|
|
246
|
+
|
|
247
|
+
### Spacing System
|
|
248
|
+
- Base unit: 4px
|
|
249
|
+
- Common scale: 4 / 8 / 12 / 16 / 20 / 24 / 32 / 40 / 48 / 64
|
|
250
|
+
- Section v-padding: 64px desktop / 40px mobile
|
|
251
|
+
- Card internal padding: 20px standard, 24px featured
|
|
252
|
+
- Form field stacking: 16px gap between fields, 8px gap between label and field
|
|
253
|
+
|
|
254
|
+
### Grid & Container
|
|
255
|
+
- Web max content width: ~1200px
|
|
256
|
+
- Mobile baseline: 360px (wider than Toss's 375px to accommodate older Android target)
|
|
257
|
+
- Horizontal padding: 20px mobile / 40px tablet / centered on desktop
|
|
258
|
+
- Megamenu drop: full-width, internal column gap 32px
|
|
259
|
+
|
|
260
|
+
### Whitespace Philosophy
|
|
261
|
+
- **Soft density.** KakaoPay sits between Stripe's airy editorial spacing and a typical Korean banking site's information-dense tables. Lists and transaction rows are tight (52–56px rows) but section breaks are generous (64px) — the rhythm tells users *"we're in a list now"* vs *"new topic, breathe"*.
|
|
262
|
+
- **Yellow as punctuation.** Brand yellow is reserved for moments — a hero card, a Kakao login button, an icon highlight. It never tiles. Tiling yellow would fail accessibility and lose its function as an attention anchor.
|
|
263
|
+
- **Rounded everywhere, but not pill-everywhere.** Cards round at 16px, buttons at 12px, badges at 9999px (pill). The rounding scale is itself a hierarchy.
|
|
264
|
+
|
|
265
|
+
### Border Radius Scale
|
|
266
|
+
- Compact (8px): Inputs, small chips, inline elements
|
|
267
|
+
- Standard (12px): Buttons, small cards
|
|
268
|
+
- Comfortable (16px): Standard cards, modal sheets
|
|
269
|
+
- Large (20-24px): Featured brand cards, bottom sheets
|
|
270
|
+
- Pill (9999px): Badges, toggle switches, floating action chips
|
|
271
|
+
|
|
272
|
+
## 6. Depth & Elevation
|
|
273
|
+
|
|
274
|
+
| Level | Treatment | Use |
|
|
275
|
+
|-------|-----------|-----|
|
|
276
|
+
| Flat (Level 0) | No shadow | Page background, inline text, footer panels |
|
|
277
|
+
| Subtle (Level 1) | `0px 1px 2px rgba(0, 0, 0, 0.04)` | Resting card, list separation hint |
|
|
278
|
+
| Soft (Level 2) | `0px 2px 8px rgba(0, 0, 0, 0.04)` | Standard card on white |
|
|
279
|
+
| Lifted (Level 3) | `0px 4px 12px rgba(0, 0, 0, 0.08)` | Dropdown, popover, hover state |
|
|
280
|
+
| Sheet (Level 4) | `0px -4px 16px rgba(0, 0, 0, 0.08)` | Bottom sheet (negative-Y shadow) |
|
|
281
|
+
| Modal (Level 5) | `0px 8px 24px rgba(0, 0, 0, 0.12)` | Centered modal, blocking dialog |
|
|
282
|
+
|
|
283
|
+
**Shadow Philosophy**: KakaoPay's shadows are explicitly *quiet*. Pure-black at very low opacity — softer than Toss (which is already restrained) and dramatically softer than Stripe's blue-tinted multi-layer system. The reasoning is the same as the typography rationale: in a payment app, dramatic depth reads as decoration, and decoration reads as untrustworthy. Elevation is communicated more through background contrast (`#F8F9FA` panel on `#FFFFFF` page) than through shadow weight.
|
|
284
|
+
|
|
285
|
+
### Background Layering
|
|
286
|
+
- Page: `#FFFFFF`
|
|
287
|
+
- Inset section / footer-like surface: `#F8F9FA`
|
|
288
|
+
- Grouped soft card: `#F2F4F6`
|
|
289
|
+
- Dark brand band: `#1A1D24` (white text on top)
|
|
290
|
+
|
|
291
|
+
## 7. Do's and Don'ts
|
|
292
|
+
|
|
293
|
+
### Do
|
|
294
|
+
- Use Noto Sans KR with system fallbacks — Korean-first, accessibility-first
|
|
295
|
+
- Use Deep Ink (`#060B11`) for primary CTA on white surfaces (default), reserve yellow for brand moments on dark canvas
|
|
296
|
+
- Pair Kakao Yellow (`#FFEB00`) only with Deep Ink text or Olive (`#7F7600`) iconography — never white text on yellow
|
|
297
|
+
- Apply rounded geometry: 12px buttons, 16px cards, 9999px badges
|
|
298
|
+
- Use weight (300 / 500) as the primary hierarchy lever — same size, different weight
|
|
299
|
+
- Verify 3:1 minimum contrast on every graphic-on-background pairing
|
|
300
|
+
- Use soft, single-layer shadows (`0px 2px 8px rgba(0,0,0,0.04)`) for cards
|
|
301
|
+
- Layer surfaces using background tones (`#FFFFFF` → `#F8F9FA` → `#F2F4F6`) before reaching for shadow
|
|
302
|
+
- Use the Icon → 2D → 3D graphic hierarchy by surface importance
|
|
303
|
+
|
|
304
|
+
### Don't
|
|
305
|
+
- Don't put white text on `#FFEB00` — fails contrast, breaks the accessibility commitment
|
|
306
|
+
- Don't use Kakao Yellow as the default CTA color on functional UI — it is decorative / ecosystem-anchor, not a primary-action token
|
|
307
|
+
- Don't apply display-light weight (200/300) to headings — KakaoPay's tone is friendly-warm, not editorial-cool
|
|
308
|
+
- Don't tighten Korean text below `-0.2px` — Korean glyphs need the breathing room
|
|
309
|
+
- Don't use sharp 0–4px radii on cards or buttons — contradicts the stated "둥글고 부드러운" principle
|
|
310
|
+
- Don't use multi-layer or colored shadows — KakaoPay's elevation is single-layer soft black
|
|
311
|
+
- Don't mix illustration tiers within one screen — pick Icon *or* 2D *or* 3D per surface, by information density
|
|
312
|
+
- Don't use Kakao Yellow as background for body text — even with Deep Ink, large yellow surfaces fatigue the eye and crowd out information
|
|
313
|
+
|
|
314
|
+
## 8. Responsive Behavior
|
|
315
|
+
|
|
316
|
+
### Breakpoints
|
|
317
|
+
| Name | Width | Key Changes |
|
|
318
|
+
|------|-------|-------------|
|
|
319
|
+
| Mobile (Primary) | <600px | 360px baseline, single column, 20px h-padding |
|
|
320
|
+
| Tablet | 600–960px | 2-column service grid, 32px h-padding |
|
|
321
|
+
| Desktop | 960–1280px | Full layout, megamenu, ~1200px max content width |
|
|
322
|
+
| Large Desktop | >1280px | Centered content, generous outer margin |
|
|
323
|
+
|
|
324
|
+
### Touch Targets
|
|
325
|
+
- Buttons: 48px (standard), 56px (primary mobile CTA)
|
|
326
|
+
- List rows: 56px minimum (52px content + 4px padding)
|
|
327
|
+
- Tab bar items: 56px tall + safe-area
|
|
328
|
+
- Icon buttons: 44×44px tap target even when icon is 24px
|
|
329
|
+
|
|
330
|
+
### Collapsing Strategy
|
|
331
|
+
- Desktop megamenu → mobile drawer (slide-in from right)
|
|
332
|
+
- Three-column service grid → two-column → single column
|
|
333
|
+
- Hero 3D graphic scales down to 2D variant on mobile
|
|
334
|
+
- Bottom sheet replaces centered modal on mobile
|
|
335
|
+
- Sticky bottom CTA bar with safe-area insets on all mobile screens
|
|
336
|
+
|
|
337
|
+
### Image Behavior
|
|
338
|
+
- Service icons render at 24px / 32px / 40px depending on context
|
|
339
|
+
- 2D graphics scale fluidly within a max-width box; never stretch beyond intrinsic resolution
|
|
340
|
+
- 3D graphics are PNG with transparency; replaced with 2D variant below mobile breakpoint
|
|
341
|
+
- Brand logo: 80px wide on desktop, 64px on mobile, never below 48px
|
|
342
|
+
|
|
343
|
+
## 9. Agent Prompt Guide
|
|
344
|
+
|
|
345
|
+
### Quick Color Reference
|
|
346
|
+
- Primary CTA (functional UI): Deep Ink (`#060B11`)
|
|
347
|
+
- Primary CTA (brand moment / Kakao ecosystem): Kakao Yellow (`#FFEB00`) with Deep Ink text
|
|
348
|
+
- Background: Pure White (`#FFFFFF`)
|
|
349
|
+
- Surface Soft: `#F8F9FA`
|
|
350
|
+
- Surface Grouped: `#F2F4F6`
|
|
351
|
+
- Heading: `#060B11`
|
|
352
|
+
- Body: `#374151`
|
|
353
|
+
- Caption: `#6B7684`
|
|
354
|
+
- Border: `#E5E8EB`
|
|
355
|
+
- Success: `#03B26C`
|
|
356
|
+
- Error: `#F04452`
|
|
357
|
+
- Warning: `#FFA94D`
|
|
358
|
+
- Info Link: `#3182F6`
|
|
359
|
+
- Brand Dark: `#1A1D24`
|
|
360
|
+
- Brand Accent (text on yellow): Olive `#7F7600`
|
|
361
|
+
|
|
362
|
+
### Example Component Prompts
|
|
363
|
+
- "Create a hero card: white background, 16px radius, 24px padding, 1px solid #EEF0F3 border. Headline 22px Noto Sans KR weight 500, color #060B11, letter-spacing -0.2px. Subtitle 14px weight 300, color #6B7684. Primary CTA: #060B11 background, white text, 16px weight 500, 12px radius, 14px 20px padding, 48px height."
|
|
364
|
+
- "Build a Kakao-login button: #FFEB00 background, #060B11 text, 16px weight 700, 12px radius, 48px height, 14px 20px padding. Logo glyph on left at 20px, 8px gap to label. Hover: opacity 0.9."
|
|
365
|
+
- "Design a transaction row: 56px height, full-width, 16px h-padding. Left: 32px circle icon. Middle: name 14px weight 500 #060B11 + category 13px weight 300 #6B7684. Right: amount 15px weight 700, #F04452 expense / #03B26C income, right-aligned."
|
|
366
|
+
- "Create an inset section: #F8F9FA background, 16px radius, 20px padding, no shadow. Group label 14px weight 500 #060B11. Body 14px weight 400 #374151 line-height 1.50."
|
|
367
|
+
- "Design a brand-yellow promotional card: #1A1D24 background, 20px radius, 24px padding. Headline 24px weight 700 #FFFFFF with #FFEB00 word accent. Subtitle 14px weight 400 rgba(255,255,255,0.7). CTA: #FFEB00 bg, #060B11 text, weight 700, 12px radius."
|
|
368
|
+
|
|
369
|
+
### Iteration Guide
|
|
370
|
+
1. Always Noto Sans KR with system fallbacks — never substitute a Latin-first display face
|
|
371
|
+
2. Use weight 300 / 500 / 700 as hierarchy; weight 400 only for paragraph body
|
|
372
|
+
3. Primary CTA defaults to Deep Ink (`#060B11`) on white surfaces; yellow only when paired with dark text on dark canvas
|
|
373
|
+
4. Verify every yellow-adjacent pairing clears 3:1 contrast — this is a stated brand commitment
|
|
374
|
+
5. Radius: 8px inputs, 12px buttons, 16px cards, 9999px badges
|
|
375
|
+
6. Shadows are single-layer black at ≤0.08 opacity; never tinted, never multi-layer
|
|
376
|
+
7. Surface hierarchy: `#FFFFFF` → `#F8F9FA` → `#F2F4F6` → `#1A1D24` for dark brand bands
|
|
377
|
+
8. Pick one graphic tier per surface (Icon *or* 2D *or* 3D), do not mix
|
|
378
|
+
9. Korean and Latin in the same line render in Noto Sans KR; do not split families
|
|
379
|
+
|
|
380
|
+
---
|
|
381
|
+
|
|
382
|
+
## 10. Voice & Tone
|
|
383
|
+
|
|
384
|
+
KakaoPay speaks like a knowledgeable friend who happens to live inside KakaoTalk — warm, conversational, slightly informal, never officious. Where Toss reads as "calm fiduciary" and Kakao Bank reads as "young but precise bank," KakaoPay's register is closer to *"the helpful friend who also handles your bills."* The official taglines — *"마음 놓고 금융하다"* and the English *"Effortless finance"* — both carry that low-friction promise: the verb is `금융하다` (to do finance) rendered casually, not `금융 서비스` (financial services) rendered formally. The voice rejects two opposite failure modes: the cold institutional Korean of legacy banks (`고객님께서는`, `~하시기 바랍니다`) and the over-friendly emoji-heavy Korean of casual messengers. KakaoPay sits at the middle: polite `~요` endings, exact numerals, no exclamation points on routine actions.
|
|
385
|
+
|
|
386
|
+
| Context | Tone |
|
|
387
|
+
|---|---|
|
|
388
|
+
| CTAs | Imperative Korean verb form (`송금하기`, `결제하기`, `확인`, `다음`). No "Get started!" |
|
|
389
|
+
| Success messages | Past-tense polite (`송금이 완료되었어요`, `결제가 완료되었어요`). One sentence, no emoji on money. |
|
|
390
|
+
| Error messages | Specific + blameless + actionable. Never `오류가 발생했습니다`. |
|
|
391
|
+
| Onboarding | Conversational `~요` endings, one idea per screen. The friend explaining, not the manual instructing. |
|
|
392
|
+
| Financial amounts | Bare numerals with comma separators + `원`. `1,240,000원`. Never `약` (approximately) on money. |
|
|
393
|
+
| Empty states | Explain the *why* in one warm sentence (`아직 거래내역이 없어요`), offer one action. Never `데이터가 없습니다`. |
|
|
394
|
+
| Legal / disclosure | Korean financial-regulation formal tone — `합니다` endings. The single exception. |
|
|
395
|
+
| Marketing copy | Casual-warm — short sentences, concrete benefits, occasional rhetorical questions. Never superlative. |
|
|
396
|
+
| Push notification | `~요` endings, exact and useful. `오늘 카드값 결제 예정이에요. 잔액을 확인해주세요.` |
|
|
397
|
+
|
|
398
|
+
**Forbidden phrases.** `오류가 발생했습니다` (vague error), `약 ~원` (approximation on money), excessive `~ㅎㅎ`/`~ㅋㅋ` (over-casual on financial context), brand-yellow emoji as ornament, `incredible` / `amazing` superlatives in English strings, `Oops!` in English errors. Toss-style declarative imperatives without `~요` are out of voice — KakaoPay is warmer than Toss by a notch.
|
|
399
|
+
|
|
400
|
+
## 11. Brand Narrative
|
|
401
|
+
|
|
402
|
+
KakaoPay (카카오페이) is operated by **Kakao Pay Corp.**, a subsidiary of **Kakao Corp.** — the company behind KakaoTalk, the messaging app that effectively *is* Korean smartphone communication ([Kakao Corp service page](https://www.kakaocorp.com/page/service/service/KakaoPay)). KakaoPay launched in **2014** as a money-transfer feature inside KakaoTalk, was spun out into Kakao Pay Corp. in 2017, and **listed on KOSPI in November 2021** — at the time, the largest fintech IPO in Korean history. The product's foundational distribution advantage was the same insight that built every Kakao service: *the messenger is already open on every Korean phone — make the financial action happen where the conversation already happens.*
|
|
403
|
+
|
|
404
|
+
Where **Toss** was founded as an explicit rejection of legacy-bank UX (Lee Seung-gun built Viva Republica precisely because Korean banking websites required Active-X plugins and 12-digit account numbers), **KakaoPay** was founded as an extension of an existing trust relationship. Users were already in KakaoTalk; KakaoPay just added "send money in the chat." That genealogical difference shows up in the design system to this day. Toss's restraint is the restraint of an outsider proving that finance can feel light. KakaoPay's warmth is the warmth of an insider product that inherited 50M+ existing relationships from KakaoTalk — its job is to feel like a natural continuation, not a contrarian alternative.
|
|
405
|
+
|
|
406
|
+
As of 2025, KakaoPay reports tens of millions of registered users and offers transfer, in-store and online payment, membership and rewards (카카오페이 머니), bill payment, investing (via Kakao Pay Securities), lending, insurance brokerage, and credit scoring — a super-app footprint comparable to Toss's. The company is publicly listed and has an established **Information Security Management System (ISMS)** certification, a Korean Financial Services Commission license, and ongoing strategic alliances (e.g., the 2025 announcement with HD Hyundai Electric for Kakao Pay Point Integration, surfaced on the Kakao Corp service page).
|
|
407
|
+
|
|
408
|
+
What KakaoPay refuses: the cold institutional Korean of legacy banks, the high-contrast saturation that makes a fintech app "feel young" but punishes low-vision users, sharp aggressive geometry, and emoji-heavy over-friendliness on money-handling screens. What KakaoPay embraces: Korean-first typography (Noto Sans KR over a proprietary Latin face), three-tier graphic hierarchy (Icon → 2D → 3D), warm-soft palette in service of a stated 3:1 minimum contrast policy, and rounded geometry as a brand-level commitment.
|
|
409
|
+
|
|
410
|
+
## 12. Principles
|
|
411
|
+
|
|
412
|
+
1. **Inclusion is the design system.** KakaoPay has stated publicly (`story.kakaopay.com/225-kakaopay-design/`) that "design for everyone" is the brand commitment — not a feature, the brand. The 3:1 minimum contrast on graphics is enforced; legacy yellow palettes that failed it were retired. Accessibility is not a layer applied at the end. It is the constraint that shapes the palette.
|
|
413
|
+
2. **Warmth, not formality.** The voice is `~요` polite-casual, not `~합니다` formal. The geometry is rounded, not orthogonal. The color is warm-soft (Ivory, Wild Willow, Olive) before it is bright. The friendly fintech register is intentional and differentiates KakaoPay from Toss (cool-calm) and Kakao Bank (precise-young).
|
|
414
|
+
3. **Yellow is anchor, not action.** Kakao Yellow `#FFEB00` is the brand's ecosystem signal — it tells users "this is part of Kakao." It is not the default CTA color on functional UI, because saturated yellow on white fails accessibility and because the primary action should be the calmest possible target. Yellow gets a moment; it does not get every button.
|
|
415
|
+
4. **Korean first, Korean always.** Noto Sans KR is the primary face, and Korean glyph metrics drive typographic decisions (no aggressive negative tracking, ample line-height). KakaoPay is not a Latin app that ships a Korean translation; it is a Korean app that renders Latin as a courtesy.
|
|
416
|
+
5. **Hierarchy by weight, not by size.** The 14px / 300 vs 14px / 500 pattern is everywhere in the live DOM. Reducing reliance on size differences keeps the page calm and lets density rise in service screens without screaming.
|
|
417
|
+
6. **Three tiers of graphics, picked by surface.** Icon for UI chrome, 2D for empty states and feature cards, 3D for hero and onboarding only. Mixing tiers on a single surface produces visual noise; picking the right tier is itself a design decision.
|
|
418
|
+
7. **Quiet shadows.** Single-layer pure-black at ≤0.08 opacity. Stacking shadows or tinting them adds decoration without earning trust. Background contrast (`#FFFFFF` → `#F8F9FA`) does the work of "elevation" wherever possible.
|
|
419
|
+
8. **Rounded geometry is a brand commitment.** "둥글고 부드러운 라인" is the stated principle, and it is held consistently from buttons (12px) to cards (16px) to badges (pill). Sharp 0–4px corners read as competitor brand language; KakaoPay does not borrow it.
|
|
420
|
+
9. **Density inside, breathing outside.** Within a list or transaction row, KakaoPay is dense (56px rows, 4px internal gaps). Between sections, KakaoPay breathes (64px). The rhythm itself is a wayfinding signal.
|
|
421
|
+
|
|
422
|
+
## 13. Personas
|
|
423
|
+
|
|
424
|
+
*Personas below are fictional archetypes informed by publicly observable KakaoPay user segments (mass-market Korean smartphone users, KakaoTalk-native communicators, older users brought in through ecosystem familiarity, small-business merchants accepting KakaoPay), not individual people.*
|
|
425
|
+
|
|
426
|
+
**현주 (Hyeonju), 33, Suwon.** Office worker at a mid-size company. Has had KakaoPay installed since 2018 because her university friends used the KakaoTalk chat-room split-bill feature. Sends money 4–6 times a week (lunch, coffee, monthly rent share with roommate). Has never opened a dedicated banking app to do a transfer — KakaoPay opens directly into the chat where the request came from. Expects the app to feel like a continuation of KakaoTalk, not a separate financial product.
|
|
427
|
+
|
|
428
|
+
**진수 아저씨 (Mr. Jinsu), 58, Daejeon.** Runs a 김밥 (kimbap) shop with his wife. His daughter set up KakaoPay for him three years ago specifically so customers could pay by QR code without his shop needing a physical card reader. Uses KakaoPay almost exclusively for receiving payments and checking the daily ledger. Trusts the yellow logo because his customers trust the yellow logo. Would never switch to a payment provider whose brand recognition is lower than Kakao's, regardless of the fees.
|
|
429
|
+
|
|
430
|
+
**서연 (Seoyeon), 24, Seoul.** University student, communications major. Has both KakaoPay and Toss installed. Uses Toss for investing (because the investing UI is denser and more powerful) and KakaoPay for daily transfers (because every chat room split-bill goes through KakaoPay). Does not see this as a contradiction — the two apps occupy different mental categories. Notices when a friend's transfer message arrives in a chat and the "Pay" button is one tap away; if she had to open Toss to respond, she'd take three times longer.
|
|
431
|
+
|
|
432
|
+
**민영 어머니 (Mrs. Minyoung), 67, Busan.** Retired teacher. Her son installed KakaoPay so she could pay her grandchildren's allowance through the chat. She trusts the yellow logo because she has trusted KakaoTalk for a decade. The 3:1 minimum contrast commitment is invisible to her by design — she only notices that the buttons are large enough to read and the icons don't blur into the background. Has never used the investing surface; the app is correctly invisible to her there because the home screen doesn't push it on her.
|
|
433
|
+
|
|
434
|
+
## 14. States
|
|
435
|
+
|
|
436
|
+
| State | Treatment |
|
|
437
|
+
|---|---|
|
|
438
|
+
| **Empty (no transactions yet)** | Centered 2D graphic (~120px) in warm-soft palette. One sentence in `#060B11` 16px weight 500: `아직 거래내역이 없어요.` Sub-line `#6B7684` 14px weight 400: `친구나 가족에게 송금을 시작해보세요.` One secondary outline CTA: `송금하기`. No 3D, no emoji, no exclamation. |
|
|
439
|
+
| **Empty (filter cleared)** | Single-line `#6B7684` 14px caption: `조건에 맞는 결과가 없어요.` No graphic, no button — user adjusts the filter. |
|
|
440
|
+
| **Loading (first paint)** | Skeleton blocks at exact final dimensions in `#F2F4F6`. 1.2s shimmer with 8% white linear-gradient. Financial amounts render as `--` until resolved — never as skeleton widths (a wide skeleton that shrinks looks like a bug). |
|
|
441
|
+
| **Loading (pull-to-refresh)** | Top pull-down spinner using the Kakao Yellow as a wedge in a black circle (the one place yellow shows up at small sizes on white). Previous content stays visible. |
|
|
442
|
+
| **Error (inline field)** | `#F04452` 1px border on field + 13px error helper text below in `#F04452`. One actionable sentence (`계좌번호를 다시 확인해주세요`). Never `오류가 발생했습니다`. |
|
|
443
|
+
| **Error (toast)** | `#1A1D24` background, white 14px weight 500 text, 12px radius, 12px 16px padding. Bottom of screen, 20px inset, safe-area aware. 3s auto-dismiss. One sentence. No emoji. |
|
|
444
|
+
| **Error (blocking screen)** | Reserved for server outage. White screen, centered 2D graphic, single sentence `#060B11` 16px weight 500. Single retry button in Deep Ink. |
|
|
445
|
+
| **Success (routine, inline)** | Brief 300ms flash of `#FFFBCC` (yellow-tinted 12%) behind the updated row, fading to default. For toggles and small confirmations. |
|
|
446
|
+
| **Success (money moved)** | Dedicated confirmation screen — not a toast. `#03B26C` 2D check graphic at top, exact amount in 30px weight 700 below, recipient name and timestamp, single primary CTA `확인`. Like Toss, money-moved is never a toast — but KakaoPay's confirmation is warmer (rounded 2D graphic vs Toss's clinical green checkmark). |
|
|
447
|
+
| **Disabled** | Opacity reduced on both surface and text together. Primary buttons fade to `rgba(6, 11, 17, 0.3)`. No grey-out of borders — disabled inputs keep `#E5E8EB` border so geometry doesn't shift when re-enabled. |
|
|
448
|
+
| **Loading inside pressed button** | Button text replaced by 3-dot white animation (or dark dots if button is yellow). Button width does not change. Press is visually committed; user cannot double-submit. |
|
|
449
|
+
| **Skeleton** | `#F2F4F6` blocks at exact final dimensions, rounded at component radius (12 / 16 / 9999). Never on financial amounts. |
|
|
450
|
+
| **Permission / consent** | Bottom sheet, 20px radius top corners. Title 18px weight 500. Body 14px weight 400 `#374151`. Two CTAs side-by-side: secondary `취소` (`#F2F4F6` bg) + primary `허용` (`#060B11` bg). |
|
|
451
|
+
|
|
452
|
+
## 15. Motion & Easing
|
|
453
|
+
|
|
454
|
+
**Durations** (named, not raw milliseconds):
|
|
455
|
+
|
|
456
|
+
| Token | Value | Use |
|
|
457
|
+
|---|---|---|
|
|
458
|
+
| `motion-instant` | 0ms | Toggle commits, focus rings, selection ticks |
|
|
459
|
+
| `motion-fast` | 150ms | Hover, focus, press overlay, small reveals |
|
|
460
|
+
| `motion-standard` | 250ms | Default — sheet open, card expand, tab switch |
|
|
461
|
+
| `motion-slow` | 400ms | Emphasized — success confirmation, onboarding step advance |
|
|
462
|
+
| `motion-page` | 350ms | Top-level route transitions |
|
|
463
|
+
|
|
464
|
+
**Easings**:
|
|
465
|
+
|
|
466
|
+
| Token | Curve | Use |
|
|
467
|
+
|---|---|---|
|
|
468
|
+
| `ease-enter` | `cubic-bezier(0.0, 0.0, 0.2, 1)` | Arrivals — sheets, toasts, screen pushes |
|
|
469
|
+
| `ease-exit` | `cubic-bezier(0.4, 0.0, 1, 1)` | Dismissals |
|
|
470
|
+
| `ease-standard` | `cubic-bezier(0.4, 0.0, 0.2, 1)` | Two-way transitions — collapsible cards, tab content |
|
|
471
|
+
| `ease-soft` | `cubic-bezier(0.32, 0.72, 0.36, 1)` | KakaoPay signature — slightly slower deceleration, reads as "warm" arrival without overshoot |
|
|
472
|
+
|
|
473
|
+
**Explicitly forbidden.** No spring with positive overshoot on routine UI. No bounce on payment confirmations. Bounce reads as consumer-app delight; this is money. KakaoPay reserves all "delightful" motion for the success-confirmation graphic, where the 2D check illustration may animate its strokes via SVG path-draw — never via positional overshoot.
|
|
474
|
+
|
|
475
|
+
**Signature motions.**
|
|
476
|
+
|
|
477
|
+
1. **Money-moved confirmation.** The 2D check graphic draws over `motion-slow / ease-soft` with stroke-dashoffset animation (0 → full path). The exact amount slides up from `y+12px` with `motion-standard / ease-enter` simultaneously. Cross-fade is never used for money values — a flickering amount looks like an integrity bug.
|
|
478
|
+
2. **Bottom-sheet presentation.** Sheets rise from `y+40px` with `motion-standard / ease-soft` and synchronized backdrop fade `rgba(6,11,17,0) → rgba(6,11,17,0.5)`. Dismissal uses `motion-fast / ease-exit` — leaving is faster than arriving (consistent with Toss; the principle is universal in Korean fintech).
|
|
479
|
+
3. **Inline yellow flash on routine success.** Background `#FFFBCC` for 300ms, fades to default `#FFFFFF` with `ease-standard`. This is the one place Kakao Yellow appears as a transient surface tone on functional UI — it earns its brand moment, then disappears.
|
|
480
|
+
4. **Pull-to-refresh spinner.** The yellow wedge in a black circle rotates at `linear` 1000ms — a steady, non-springy revolution. The black-on-yellow contrast satisfies the 3:1 commitment at small sizes where solid yellow would otherwise fail.
|
|
481
|
+
5. **Reduce motion.** Under `prefers-reduced-motion: reduce`, all `motion-*` tokens collapse to `motion-instant`. The SVG path-draw on the success check becomes an instant full-stroke render. The pull-to-refresh spinner becomes a static yellow-on-black indicator. The app remains fully functional; no kinetic decoration is required to confirm a state.
|
|
482
|
+
|
|
483
|
+
<!--
|
|
484
|
+
OmD v0.1 Sources — Philosophy Layer (sections 10–15)
|
|
485
|
+
|
|
486
|
+
Direct verification via WebFetch and playwright (2026-05-13):
|
|
487
|
+
- https://www.kakaopay.com/ — confirms title/tagline "카카오페이 | 마음 놓고 금융하다",
|
|
488
|
+
Noto Sans KR primary font, dark header / soft footer (#F8F9FA),
|
|
489
|
+
service IA (생활하다 / 관리하다 / 금융하다 / 소식 / ESG), 22px·500·-0.2px
|
|
490
|
+
section heading scale.
|
|
491
|
+
- https://story.kakaopay.com/225-kakaopay-design/ — confirms the three stated
|
|
492
|
+
pillars (단순하고 명확한 디자인 / 따뜻하고 부드러운 컬러 / 둥글고 부드러운 라인),
|
|
493
|
+
the 3:1 minimum contrast policy on graphics, and the Icon → 2D → 3D
|
|
494
|
+
three-tier graphic hierarchy. This is the load-bearing citation for §10–12.
|
|
495
|
+
- https://www.kakaocorp.com/page/service/service/KakaoPay?lang=en —
|
|
496
|
+
confirms the English tagline "Effortless finance", service category
|
|
497
|
+
structure, and Kakao Corp. parent ownership.
|
|
498
|
+
|
|
499
|
+
Brand color #FFEB00 + Wild Willow #C5C17A / Ivory #FEFFFA / Olive #7F7600
|
|
500
|
+
sourced from public brand-color aggregator search (2026-05-13). Kakao Yellow
|
|
501
|
+
is also published as #FEE500 by Kakao Corp. brand resources for the messenger;
|
|
502
|
+
KakaoPay's specific yellow #FFEB00 is documented separately as the payment
|
|
503
|
+
product's signature.
|
|
504
|
+
|
|
505
|
+
Not independently verified via WebFetch — widely documented public facts used:
|
|
506
|
+
- KakaoPay launched 2014 inside KakaoTalk; spun out as Kakao Pay Corp. in 2017
|
|
507
|
+
- KOSPI listing in November 2021
|
|
508
|
+
- Parent company: Kakao Corp.
|
|
509
|
+
|
|
510
|
+
Personas (§13) are fictional archetypes informed by publicly observable
|
|
511
|
+
KakaoPay user segments (KakaoTalk-native users, small-business merchants
|
|
512
|
+
accepting KakaoPay QR, older users brought in via ecosystem familiarity,
|
|
513
|
+
university-aged super-app users). Names are illustrative; they do not refer
|
|
514
|
+
to specific individuals.
|
|
515
|
+
|
|
516
|
+
Interpretive claims (e.g., "KakaoPay's warmth is the warmth of an insider
|
|
517
|
+
product that inherited 50M+ existing relationships from KakaoTalk", "the
|
|
518
|
+
3:1 minimum contrast is the constraint that shapes the palette") are
|
|
519
|
+
editorial readings connecting KakaoPay's stated principles to its design
|
|
520
|
+
system, not direct KakaoPay statements.
|
|
521
|
+
|
|
522
|
+
No public KakaoPay Design System (KPDS) documentation site was discovered
|
|
523
|
+
as of 2026-05-13. Design knowledge is published as narrative on
|
|
524
|
+
story.kakaopay.com, not as a public token registry. Tier 2 cross-checks
|
|
525
|
+
(getdesign.md/kakaopay, styles.refero.design/?q=kakaopay,
|
|
526
|
+
styles.refero.design/?q=카카오페이) all returned empty results — verified
|
|
527
|
+
explicitly. Tier 1 (live DOM + official design blog + Kakao Corp service
|
|
528
|
+
page + brand-color aggregator) is the sole authoritative source per pipeline.
|
|
529
|
+
-->
|