oh-my-design-cli 1.8.2 → 1.8.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/README.ja.md +5 -5
  2. package/README.ko.md +7 -7
  3. package/README.md +7 -7
  4. package/README.zh-TW.md +5 -5
  5. package/agents/omd-master.md +1 -1
  6. package/data/reference-fingerprints.json +1696 -17
  7. package/package.json +3 -1
  8. package/skills/omd-feel/SKILL.md +152 -0
  9. package/skills/omd-feel/provenance.md +233 -0
  10. package/skills/omd-feel/reference.md +254 -0
  11. package/skills/omd-harness/SKILL.md +1 -1
  12. package/skills/omd-init/SKILL.md +1 -1
  13. package/skills/omd-reference-capture/SKILL.md +1 -1
  14. package/web/references/591/DESIGN.md +460 -0
  15. package/web/references/airbridge/DESIGN.md +451 -0
  16. package/web/references/asana/DESIGN.md +485 -0
  17. package/web/references/asos/DESIGN.md +475 -0
  18. package/web/references/bahamut/DESIGN.md +416 -0
  19. package/web/references/bbc/DESIGN.md +439 -0
  20. package/web/references/bigin/DESIGN.md +454 -0
  21. package/web/references/buzzvil/DESIGN.md +457 -0
  22. package/web/references/cafe24/DESIGN.md +472 -0
  23. package/web/references/chunghwa/DESIGN.md +419 -0
  24. package/web/references/codeit/DESIGN.md +470 -0
  25. package/web/references/databricks/DESIGN.md +467 -0
  26. package/web/references/datarize/DESIGN.md +451 -0
  27. package/web/references/deliveroo/DESIGN.md +458 -0
  28. package/web/references/doordash/DESIGN.md +429 -0
  29. package/web/references/easywallet/DESIGN.md +449 -0
  30. package/web/references/elice/DESIGN.md +445 -0
  31. package/web/references/esunbank/DESIGN.md +445 -0
  32. package/web/references/farfetch/DESIGN.md +436 -0
  33. package/web/references/fubon/DESIGN.md +438 -0
  34. package/web/references/furiosaai/DESIGN.md +450 -0
  35. package/web/references/goorm/DESIGN.md +470 -0
  36. package/web/references/govuk/DESIGN.md +450 -0
  37. package/web/references/greencar/DESIGN.md +420 -0
  38. package/web/references/hackle/DESIGN.md +472 -0
  39. package/web/references/hana/DESIGN.md +439 -0
  40. package/web/references/hubspot/DESIGN.md +485 -0
  41. package/web/references/hwahae/DESIGN.md +453 -0
  42. package/web/references/hyundai/DESIGN.md +468 -0
  43. package/web/references/icook/DESIGN.md +432 -0
  44. package/web/references/instacart/DESIGN.md +439 -0
  45. package/web/references/ipassmoney/DESIGN.md +407 -0
  46. package/web/references/kakaopage/DESIGN.md +439 -0
  47. package/web/references/kbpay/DESIGN.md +442 -0
  48. package/web/references/kcd/DESIGN.md +432 -0
  49. package/web/references/kia/DESIGN.md +411 -0
  50. package/web/references/kyobobook/DESIGN.md +445 -0
  51. package/web/references/lablup/DESIGN.md +474 -0
  52. package/web/references/lemonbase/DESIGN.md +452 -0
  53. package/web/references/liner/DESIGN.md +465 -0
  54. package/web/references/makinarocks/DESIGN.md +442 -0
  55. package/web/references/monzo/DESIGN.md +461 -0
  56. package/web/references/moreh/DESIGN.md +437 -0
  57. package/web/references/naverpay/DESIGN.md +478 -0
  58. package/web/references/neosapience/DESIGN.md +441 -0
  59. package/web/references/nota/DESIGN.md +451 -0
  60. package/web/references/octopusenergy/DESIGN.md +436 -0
  61. package/web/references/openpoint/DESIGN.md +431 -0
  62. package/web/references/paypal/DESIGN.md +459 -0
  63. package/web/references/portone/DESIGN.md +446 -0
  64. package/web/references/queenit/DESIGN.md +432 -0
  65. package/web/references/rebellions/DESIGN.md +449 -0
  66. package/web/references/reddit/DESIGN.md +537 -0
  67. package/web/references/returnzero/DESIGN.md +460 -0
  68. package/web/references/samsung/DESIGN.md +465 -0
  69. package/web/references/saramin/DESIGN.md +465 -0
  70. package/web/references/shiftee/DESIGN.md +468 -0
  71. package/web/references/shinhanbank/DESIGN.md +429 -0
  72. package/web/references/skyscanner/DESIGN.md +563 -0
  73. package/web/references/snapchat/DESIGN.md +460 -0
  74. package/web/references/solapi/DESIGN.md +483 -0
  75. package/web/references/squarespace/DESIGN.md +454 -0
  76. package/web/references/ssg/DESIGN.md +439 -0
  77. package/web/references/starling/DESIGN.md +404 -0
  78. package/web/references/supertone/DESIGN.md +413 -0
  79. package/web/references/taiwanmobile/DESIGN.md +445 -0
  80. package/web/references/trainline/DESIGN.md +454 -0
  81. package/web/references/vuno/DESIGN.md +413 -0
  82. package/web/references/weverse/DESIGN.md +437 -0
  83. package/web/references/zoom/DESIGN.md +457 -0
@@ -0,0 +1,439 @@
1
+ ---
2
+ id: kakaopage
3
+ name: KakaoPage
4
+ display_name_kr: 카카오페이지
5
+ country: KR
6
+ category: consumer-tech
7
+ homepage: "https://page.kakao.com"
8
+ primary_color: "#ffd618"
9
+ logo:
10
+ type: favicon
11
+ slug: "https://www.google.com/s2/favicons?domain=page.kakao.com&sz=128"
12
+ verified: "2026-06-22"
13
+ added: "2026-06-22"
14
+ omd: "0.1"
15
+ tokens:
16
+ source: live-extract
17
+ extracted: "2026-06-22"
18
+ note: "primary = live content CTA yellow (#ffd618); canvas = white; ink = pure black (#000000) for all text; surface = #eeeeee for content cards; error/best-badge = #ff3042."
19
+ colors:
20
+ primary: "#ffd618"
21
+ ink: "#000000"
22
+ ink-dark: "#222222"
23
+ canvas: "#ffffff"
24
+ surface: "#eeeeee"
25
+ muted: "#666666"
26
+ tertiary: "#999999"
27
+ on-primary: "#222222"
28
+ error: "#ff3042"
29
+ on-error: "#ffffff"
30
+ typography:
31
+ family: { display: "Pretendard Variable", body: "Pretendard" }
32
+ content-title: { size: 21, weight: 700, lineHeight: 1.24, use: "Content item title (e.g. webtoon/novel title)" }
33
+ body: { size: 16, weight: 400, lineHeight: 1.40, use: "Default body text, tab labels" }
34
+ tab-active: { size: 16, weight: 700, lineHeight: 1.38, use: "Active category tab text" }
35
+ list-item: { size: 14, weight: 400, lineHeight: 1.43, use: "Episode list rows, secondary info" }
36
+ sub-label: { size: 13, weight: 400, lineHeight: 1.38, use: "Tab sub-labels, inactive section tabs" }
37
+ caption: { size: 12, weight: 400, lineHeight: 1.33, use: "Genre tags, author names, metadata" }
38
+ cta-label: { size: 12, weight: 700, lineHeight: 1.33, use: "Primary CTA button label" }
39
+ date: { size: 11, weight: 400, lineHeight: 1.45, use: "Episode date metadata" }
40
+ badge: { size: 11, weight: 700, lineHeight: 1.45, use: "BEST badge, rank overlay" }
41
+ spacing: { xs: 3, sm: 7, md: 14, base: 16, lg: 20, xl: 32, section: 48 }
42
+ rounded: { xs: 2, sm: 5, md: 8, lg: 12, pill: 16, full: 100 }
43
+ shadow:
44
+ none: "none"
45
+ components:
46
+ button-primary: { type: button, bg: "#ffd618", fg: "#222222", radius: "8px", height: "56px", font: "12px / 700 Pretendard", use: "Primary CTA — '첫 화 보기' / '이어보기'" }
47
+ button-back: { type: button, bg: "#000000", fg: "#ffffff", radius: "100px", height: "54px", padding: "0px 20px", font: "16px / 700 Pretendard", use: "Error/empty-state 'Go Home' full pill" }
48
+ tab-active-pill: { type: tab, bg: "#000000", fg: "#ffffff", radius: "16px", height: "32px", padding: "7px 14px", font: "13px / 700 Pretendard", active: "black pill #000000 / white text #ffffff", use: "Active content-category tab (홈/정보/소식)" }
49
+ tab-nav-pill: { type: tab, bg: "#000000", fg: "#ffffff", radius: "100px", height: "36px", padding: "0px 14px", font: "16px / 400 Pretendard", active: "black pill #000000 / white text #ffffff", use: "Active main section tab (지금핫한/실시간 랭킹)" }
50
+ card-content: { type: card, bg: "#eeeeee", radius: "12px", use: "Content discovery card (thumbnail + metadata overlay)" }
51
+ card-skeleton: { type: card, bg: "#eeeeee", radius: "8px", use: "Lazy-load skeleton placeholder for content thumbnails (live: translucent rgba(153,153,153,0.15) over white ≈ #eeeeee)" }
52
+ badge-best: { type: badge, bg: "#ff3042", fg: "#ffffff", radius: "5px", padding: "0px 3px", font: "11px / 700 Pretendard", use: "Top-ranking badge on episode rows" }
53
+ badge-coin: { type: badge, bg: "#ffd618", fg: "#000000", radius: "2px", padding: "3px 8px", font: "16px / 400 Pretendard", use: "'충전' (coin recharge) label badge" }
54
+ badge-free: { type: badge, bg: "#000000", fg: "#ffffff", radius: "2px", padding: "0px 4px", font: "10px / 700 Pretendard", use: "'무료' (free episode) overlay on rank counter" }
55
+ comment-chip: { type: badge, bg: "rgba(0,0,0,0.05)", fg: "#000000", radius: "8px", height: "28px", font: "16px / 400 Pretendard", use: "Comment count / interaction chip on episode rows" }
56
+ search-input: { type: input, fg: "#000000", font: "13px Pretendard", use: "Search bar — placeholder '제목, 작가를 입력하세요.'" }
57
+ components_harvested: true
58
+ ---
59
+
60
+ # Design System Inspiration of KakaoPage
61
+
62
+ ## 1. Visual Theme & Atmosphere
63
+
64
+ 카카오페이지 (KakaoPage) is Kakao Entertainment's flagship webtoon and web-novel platform, and its interface is built around one governing tension: immersive visual content deserves a near-invisible UI frame. The canvas is pure white (`#ffffff`) with pure black (`#000000`) text — no off-whites, no warm navies, no grey tints on the base layer. Color is used surgically: a single vivid brand yellow (`#ffd618`) for the primary call-to-action, a confident red (`#ff3042`) for best-rank badges, and nothing else.
65
+
66
+ This constraint-first palette makes the content thumbnails — illustrated cover art, dramatic character spreads — the undisputed heroes of every screen. The platform hosts hundreds of webtoon and web-novel IPs, each with its own rich visual identity, and the system never competes with them. The navigation chrome is monochrome; the active selection state uses a black pill rather than a colored accent; the cards are light grey (`#eeeeee`) placeholders that vanish once the cover image loads.
67
+
68
+ The result is a look that reads as **dark-adjacent without being dark**: all surfaces are white, but the dominant typographic color is black-on-white, and the interactive vocabulary (black pills, black/yellow CTAs) anchors the experience in a high-contrast editorial register. The yellow `#ffd618` — close to Kakao's brand golden-yellow across its ecosystem — appears exactly once per content detail page, on the primary "Start Reading" button, making it unmistakable.
69
+
70
+ **Key Characteristics:**
71
+ - Pure-black/pure-white palette — content cover art is the only color
72
+ - Brand yellow (`#ffd618`) reserved exclusively for the primary "Start Reading" CTA
73
+ - Active selection state uses a black pill with white text, not a colored accent
74
+ - Pretendard Variable for all text — the Korean web standard, optimized for hangul at small sizes
75
+ - Light grey (`#eeeeee`) card surface and `rgba(153,153,153,0.15)` skeleton placeholders
76
+ - High-contrast editorial density: small type (11–14px), generous imagery
77
+ - `#ff3042` hot-red for BEST rank badges — the only accent besides yellow
78
+
79
+ ## 2. Color Palette & Roles
80
+
81
+ ### Primary Action
82
+ - **KakaoPage Yellow** (`#ffd618`): The single primary action color. Used for the "첫 화 보기" (Start Reading) and "이어보기" (Continue) CTA buttons and for the coin-recharge label badge. Unmistakably derived from Kakao's brand golden-yellow, adapted for content-platform assertiveness.
83
+
84
+ ### Ink & Canvas
85
+ - **Ink Black** (`#000000`): Primary text color for all headings, body copy, nav labels, and interactive elements. Also used as the active pill background (reversing to white text). A true zero — no near-black offset.
86
+ - **Dark Label** (`#222222`): Button label text on yellow CTA. Near-black with just enough warmth to avoid pure-black on yellow harshness.
87
+ - **Canvas White** (`#ffffff`): Page background and navigation header. The absolute base layer.
88
+
89
+ ### Surface & Skeleton
90
+ - **Surface Grey** (`#eeeeee`): Content card background; the resting state of a thumbnail card before the image loads. Also used as section-tab bar background, episode list row backgrounds.
91
+ - **Skeleton Ghost** (`rgba(153,153,153,0.15)`): Lazy-load skeleton placeholder at exactly the cover thumbnail's aspect ratio. Flat, no shimmer — consistent with the no-decoration ethos.
92
+
93
+ ### Text Hierarchy
94
+ - **Muted Grey** (`#666666`): Secondary text — author names, date metadata at 11px, secondary captions.
95
+ - **Tertiary Grey** (`#999999`): Lowest-emphasis labels, placeholder behavior.
96
+
97
+ ### Status
98
+ - **Hot Red** (`#ff3042`): "BEST" rank badge on top-performing episodes. High-contrast, attention-forcing — the only warm saturated accent alongside yellow.
99
+ - **On-error White** (`#ffffff`): Text on the red badge.
100
+
101
+ ## 3. Typography Rules
102
+
103
+ ### Font Family
104
+ - **Primary**: `Pretendard Variable` with fallback to `Pretendard` — the Korean web standard. Chosen for its multi-weight variable axis and exceptional hangul legibility at display and small sizes alike.
105
+ - **Fallbacks**: `-apple-system`, `system-ui`, `Segoe UI`, `Noto Sans KR`, `Malgun Gothic`
106
+
107
+ ### Hierarchy
108
+
109
+ | Role | Size | Weight | Line Height | Color | Use |
110
+ |------|------|--------|-------------|-------|-----|
111
+ | Content Title | 21px | 700 | 26px (1.24) | `#000000` | Webtoon / novel item title |
112
+ | Body / Tab | 16px | 400 | 22.4px (1.40) | `#000000` | Default body, nav tab labels |
113
+ | Tab Active | 16px | 700 | 22px (1.38) | `#000000` | Active main tab emphasis |
114
+ | List Row | 14px | 400 | 20px (1.43) | `#000000` | Episode list rows, secondary info |
115
+ | Section Tab | 13px | 400 | 18px (1.38) | `#000000` | Inactive section tab (홈/정보/소식) |
116
+ | Caption | 12px | 400 | 16px (1.33) | `#000000` | Genre tags, author, metadata |
117
+ | CTA Label | 12px | 700 | 16px | `#222222` | "첫 화 보기" button label |
118
+ | Date / Meta | 11px | 400 | 16px (1.45) | `#666666` | Episode publish date |
119
+ | BEST Badge | 11px | 700 | 16px | `#ffffff` | BEST rank badge |
120
+
121
+ ### Principles
122
+ - **Content-first sizing**: all chrome text runs at 11–16px; large type belongs to the content artwork, not the interface.
123
+ - **Weight as the only signal**: active states use bold (700) on the same text — no color change, no underline. The system trusts weight contrast over hue.
124
+ - **Pretendard for everything**: a single typeface across all weights and roles. No display/body split.
125
+ - **Line-height discipline**: tight at display (1.24 for titles), standard at body (1.40–1.43), compact for badge/caption (1.33).
126
+
127
+ ## 4. Component Stylings
128
+
129
+ ### Buttons
130
+
131
+ **Primary CTA (첫 화 보기 / 이어보기)**
132
+ - Background: `#ffd618`
133
+ - Text: `#222222`
134
+ - Radius: 8px
135
+ - Height: 56px
136
+ - Font: 12px / 700 / Pretendard
137
+ - Use: "Start Reading" / "Continue Reading" — the platform's singular primary action per content detail page
138
+
139
+ **Back/Error CTA**
140
+ - Background: `#000000`
141
+ - Text: `#ffffff`
142
+ - Radius: 100px
143
+ - Height: 54px
144
+ - Padding: 0px 20px
145
+ - Font: 16px / 700 / Pretendard
146
+ - Use: Error state "홈으로 가기" (Go Home) full-pill button
147
+
148
+ ### Tabs
149
+
150
+ **Active Section Tab (Pill)**
151
+ - Background: `#000000`
152
+ - Text: `#ffffff`
153
+ - Radius: 16px
154
+ - Height: 32px
155
+ - Padding: 7px 14px
156
+ - Font: 13px / 700 / Pretendard
157
+ - Use: Active content sub-category tab (홈/정보/소식 on detail page)
158
+
159
+ **Active Main Nav Tab (Pill)**
160
+ - Background: `#000000`
161
+ - Text: `#ffffff`
162
+ - Radius: 100px
163
+ - Height: 36px
164
+ - Padding: 0px 14px
165
+ - Font: 16px / 400 / Pretendard
166
+ - Use: Active main recommendation tab (지금핫한/실시간 랭킹 etc.)
167
+
168
+ ### Cards & Containers
169
+
170
+ **Content Card**
171
+ - Background: `#eeeeee`
172
+ - Radius: 12px
173
+ - Use: Base layer for content cover art; grey shows before the image loads; cover fills the card once loaded
174
+
175
+ **Skeleton Card**
176
+ - Background: `rgba(153,153,153,0.15)`
177
+ - Radius: 8px
178
+ - Use: Lazy-load placeholder rendered at thumbnail dimensions during content fetch; flat, no pulse shimmer
179
+
180
+ ### Badges
181
+
182
+ **BEST Rank Badge**
183
+ - Background: `#ff3042`
184
+ - Text: `#ffffff`
185
+ - Radius: 5px
186
+ - Padding: 0px 3px
187
+ - Font: 11px / 700 / Pretendard
188
+ - Use: "BEST" overlay on top-ranked episode rows in comment/reply sections
189
+
190
+ **Coin Recharge Badge**
191
+ - Background: `#ffd618`
192
+ - Text: `#000000`
193
+ - Radius: 2px
194
+ - Padding: 3px 8px
195
+ - Font: 16px / 400 / Pretendard
196
+ - Use: "충전" (coin recharge) shortcut label in the nav header
197
+
198
+ **Free Episode Badge**
199
+ - Background: `#000000`
200
+ - Text: `#ffffff`
201
+ - Radius: 2px
202
+ - Padding: 0px 4px
203
+ - Font: 10px / 700 / Pretendard
204
+ - Use: "무료" (free) count overlay on rank indicators
205
+
206
+ ### Inputs
207
+
208
+ **Search Bar**
209
+ - Background: transparent
210
+ - Text: `#000000`
211
+ - Border: none (borderless, integrated into nav header)
212
+ - Font: 13px / Pretendard
213
+ - Placeholder: "제목, 작가를 입력하세요." (`#999999`)
214
+ - Height: 18px (inline; nav-embedded)
215
+ - Use: Title / author search
216
+
217
+ ---
218
+
219
+ **Verified:** 2026-06-22 (omd:add-reference CREATE — Tier 1 live inspect)
220
+ **Tier 1 sources:** https://page.kakao.com/, https://page.kakao.com/content/57668776
221
+ **Tier 2 sources:** getdesign.md/kakaopage — not found; styles.refero.design/?q=kakaopage — not found
222
+ **Conflicts unresolved:** none
223
+
224
+ ## 5. Layout Principles
225
+
226
+ ### Spacing System
227
+ - Base unit: ~4px
228
+ - Scale: 3px, 7px, 14px, 16px, 20px, 32px, 48px
229
+ - Navigation header: 96px total height (top-nav 40px + sub-category tabs 56px)
230
+ - Content card thumbnail: 152×274px aspect ratio (confirmed from skeleton dimensions, portrait orientation)
231
+
232
+ ### Grid & Container
233
+ - Max content width: 1200px centered
234
+ - Content catalog: fluid card grid — multiple columns, portrait-orientation thumbnails
235
+ - Category sub-tabs: horizontal scroll strip at 56px height, full-width
236
+ - Episode list: full-width stacked rows at 84px height with title/date/badge
237
+
238
+ ### Whitespace Philosophy
239
+ - **Content fills, chrome recedes**: minimal padding around content cards; cover art occupies as much visual real estate as possible.
240
+ - **List density over breathing room**: episode rows run at 84px with compressed typography; this is a catalog-browsing surface that values information density.
241
+ - **Zero decoration**: no gradients, no textures, no shadows between elements — only solid fills and transparent backgrounds.
242
+
243
+ ### Border Radius Scale
244
+ - Tiny (2px): coin/free badges — near-square for a label feel
245
+ - Small (5px): BEST rank badges
246
+ - Medium (8px): primary CTA button, skeleton placeholders
247
+ - Large (12px): content cards, recommendation carousels
248
+ - Pill (16px): section sub-tab pills
249
+ - Full (100px): main navigation active tab pills, error CTA
250
+
251
+ ## 6. Depth & Elevation
252
+
253
+ | Level | Treatment | Use |
254
+ |-------|-----------|-----|
255
+ | Flat (0) | No shadow | Page background, all card surfaces |
256
+ | Ghost (1) | `rgba(0,0,0,0.05)` background | Comment count chips, interaction counters |
257
+ | Dimmed (2) | `rgba(0,0,0,0.4)` overlay | Content carousel pager indicator |
258
+
259
+ **Shadow Philosophy**: KakaoPage uses no box shadows anywhere in the inspected surfaces. The system is rigorously flat — separation is achieved by the content artwork itself (which carries its own visual weight), by the `#eeeeee` surface color on cards, and by structural containment (tabs, headers). This reflects both a performance-conscious (mobile-heavy audience) and content-first design philosophy: shadows compete with the content's own visual complexity.
260
+
261
+ ## 7. Do's and Don'ts
262
+
263
+ ### Do
264
+ - Use `#ffd618` yellow exclusively for the primary "Start Reading" CTA — it should appear once per content detail page
265
+ - Use the black pill with white text for all active selection states — tabs, active categories
266
+ - Keep all UI text in Pretendard; lean on weight (400/700) to create hierarchy
267
+ - Use pure black `#000000` for all primary text — no navy, no near-black variants
268
+ - Use `#eeeeee` as the neutral card surface — it harmonizes with any cover art color
269
+ - Reserve `#ff3042` for rank/status signals only (BEST, etc.)
270
+ - Design for portrait-oriented thumbnail grids — content is always taller than wide
271
+
272
+ ### Don't
273
+ - Introduce additional accent colors — yellow and red are the complete palette of saturated hues
274
+ - Use shadows for elevation — this system is entirely flat
275
+ - Place colored overlays on cover art — the artwork owns its space
276
+ - Use any sans-serif typeface other than Pretendard; it's the brand's Korean system font
277
+ - Use large type sizes for UI labels — chrome text stays at 11–16px; display sizes belong to content titles
278
+ - Use the black pill shape for non-interactive decorative elements — it signals "currently selected/active"
279
+ - Deviate from `#ffd618` toward any other yellow — this specific value ties back to Kakao's brand identity
280
+
281
+ ## 8. Responsive Behavior
282
+
283
+ ### Breakpoints
284
+ | Name | Width | Key Changes |
285
+ |------|-------|-------------|
286
+ | Mobile | <768px | Single-column content grid, condensed nav |
287
+ | Tablet | 768-1024px | 2-3 column grid, sub-tabs scroll horizontally |
288
+ | Desktop | 1024-1200px | Full multi-column grid, all tabs visible |
289
+
290
+ ### Touch Targets
291
+ - Primary CTA: 56px height — generous tap target
292
+ - Section tabs: 32px pill — adequate for touch
293
+ - Nav pills: 36px — comfortable
294
+ - Episode rows: 84px — easy to tap the correct row
295
+
296
+ ### Collapsing Strategy
297
+ - Content grid compresses from multi-column to 2-column to single-column on mobile
298
+ - Category sub-tabs scroll horizontally (scrollable overflow) on narrow viewports
299
+ - Navigation header condenses but maintains the yellow coin badge and search icon
300
+
301
+ ## 9. Agent Prompt Guide
302
+
303
+ ### Quick Color Reference
304
+ - Primary CTA: KakaoPage Yellow (`#ffd618`)
305
+ - Primary text / active pill: Ink Black (`#000000`)
306
+ - CTA label text: Dark Label (`#222222`)
307
+ - Page background: Canvas White (`#ffffff`)
308
+ - Card surface: Surface Grey (`#eeeeee`)
309
+ - Secondary text: Muted Grey (`#666666`)
310
+ - Rank badge: Hot Red (`#ff3042`)
311
+
312
+ ### Example Component Prompts
313
+ - "Create a content detail page header. White background. Title in 21px Pretendard weight 700 #000000. Below: two CTAs side by side — primary 'Start Reading' at #ffd618 / #222222 / 8px radius / 56px height. Secondary 'Subscribe' as black outline pill."
314
+ - "Design an episode list row: #eeeeee background, 84px height. Title 14px Pretendard 400 #000000. Date 11px 400 #666666. BEST badge #ff3042 / white / 5px radius / 11px bold, top-right of thumbnail."
315
+ - "Build category nav tabs: horizontal scrolling strip. Inactive: transparent bg, #000000 text, 16px Pretendard 400. Active: black pill #000000 / white text / 100px radius / 36px height."
316
+ - "Create skeleton loading state: series of portrait cards at 152×274px, bg rgba(153,153,153,0.15), radius 8px. Flat — no pulse animation."
317
+
318
+ ### Iteration Guide
319
+ 1. Yellow `#ffd618` = one CTA per page — don't repeat
320
+ 2. All hierarchy via weight 400/700 in Pretendard, not color or size variation
321
+ 3. Active selection = black pill; do not use colored indicators
322
+ 4. Cards = `#eeeeee` base; the art takes over once loaded
323
+ 5. No shadows anywhere — separate by containment and flat fills
324
+ 6. Red `#ff3042` only for rank/urgency signals
325
+ 7. Content art owns the color; UI defers to black/white/yellow
326
+
327
+ ---
328
+
329
+ ## 10. Voice & Tone
330
+
331
+ KakaoPage's voice is **immersive, fan-fluent, and quietly epic** — a platform that takes its IP catalog as seriously as the readers who love it. The interface copy is sparse to the point of near-invisibility: navigation labels are single-word nouns (추천, 웹툰, 웹소설, 책), CTAs are concrete action verbs (첫 화 보기, 이어보기), and status labels are abbreviations (무료, BEST). The brand never editorializes about the content — it steps aside and lets "지금핫한" (Hot Right Now) speak for itself.
332
+
333
+ | Context | Tone |
334
+ |---|---|
335
+ | Main navigation tabs | Minimal noun labels — 추천, 웹툰, 웹소설, 책, 요일연재 |
336
+ | Sub-category tabs | Populist discovery framing — 지금핫한, 실시간 랭킹, 완결추천 |
337
+ | Primary CTA | Direct action — 첫 화 보기, 이어보기 |
338
+ | Rank signals | Prestige shorthand — BEST |
339
+ | Free access | Clear benefit statement — 무료, 기다리면 무료 |
340
+ | Error/empty states | Calm redirect — 홈으로 가기 |
341
+
342
+ **Voice samples (verified live 2026-06-22):**
343
+ - "기다리면 무료 웹툰" — section header (access model explained in four words). *(verified live 2026-06-22)*
344
+ - "지금핫한" — primary recommendation tab (portmanteau energy, platform-native shorthand). *(verified live 2026-06-22)*
345
+ - "오리지널 독점 웹툰, 웹소설 부터 책 까지 한 곳에서 즐기세요. 인기 콘텐츠가 기다리면 무료!" — meta description (complete brand promise in two sentences). *(verified live 2026-06-22)*
346
+
347
+ **Forbidden register**: genre-describing spoilers in UI chrome, overly promotional adjectives on titles, urgency dark patterns ("마지막 기회!" for paid content), English loanwords where Korean serves better.
348
+
349
+ ## 11. Brand Narrative
350
+
351
+ 카카오페이지 (KakaoPage) launched in 2013 as Kakao's digital content marketplace for Korea's mobile-first era, initially selling novels and comics in small paid installments. It pioneered the "기다리면 무료" (Wait for Free) model — readers who wait a set interval can access episodes without purchase — which became the structural engine that built one of Korea's largest paid-content audiences. The model proved that patience, not piracy, was the viable alternative to payment: it created massive top-of-funnel reader acquisition while monetizing through impatience.
352
+
353
+ Over the decade, KakaoPage evolved from a marketplace into Kakao Entertainment's IP pipeline. Platform-native webtoons and web novels — many originating on Kakao's own creator tools — became the source material for K-drama adaptations, animated series, and global distribution through Tapas (English-language) and Piccoma (Japan). The design system reflects this vertical integration: the platform positions itself not as a mere reader app but as the origin point of Korean popular culture.
354
+
355
+ The 2021 merger between Kakao M and Kakao Page to form Kakao Entertainment consolidated the media-tech stack. Today KakaoPage is the web/desktop face of a content empire that spans webtoon creation, talent management, drama production, and international licensing. The design — clean, content-first, IP-respectful — is engineered to serve hundreds of distinct visual identities without diluting any of them.
356
+
357
+ ## 12. Principles
358
+
359
+ 1. **Content is the design.** The platform's visual identity defers entirely to the IP it hosts. *UI implication:* monochrome chrome (black/white/grey) so that cover art at any color temperature feels at home. Never introduce competing accent colors.
360
+ 2. **Wait or pay — the system is transparent.** The 기다리면 무료 model means readers always know when free access opens. *UI implication:* "무료" labels are permanent, prominent, and never buried; the time cost is disclosed at the episode row.
361
+ 3. **One action per surface.** Each content detail page has a single yellow CTA — not a CTA hierarchy, not three equal buttons. *UI implication:* one `#ffd618` button per screen; secondary actions use neutral/ghost styling.
362
+ 4. **Rank signals create urgency, not noise.** BEST badges appear only where they reflect genuine ranking data. *UI implication:* hot red `#ff3042` appears on the BEST badge alone; it's never reused for promotions or marketing.
363
+ 5. **Mobile density is a feature.** The target audience reads on smartphones; compressed episode rows and small badge text are intentional. *UI implication:* 11–14px episode metadata; portrait-oriented thumbnails optimized for vertical scroll rather than widescreen browsing.
364
+
365
+ ## 13. Personas
366
+
367
+ *Personas below are fictional archetypes informed by publicly observable KakaoPage user segments (Korean webtoon and web-novel readers), not individual people.*
368
+
369
+ **이하나, 22, 서울.** A university student who discovered KakaoPage through a webtoon-to-drama adaptation. She uses 기다리면 무료 to catch up on ongoing series and pays for impatient access on her three to five top titles. She values the BEST ranking to discover which episodes other readers found significant.
370
+
371
+ **박민준, 31, 부산.** A commuter who reads web novels on the subway. He has 12 series in his 보관함 (library), half of which are waiting for free episodes. He appreciates the episode row format — quick scan, tap, read — and finds the sparse UI lets him focus on the story.
372
+
373
+ **김서연, 38, 대전.** A working parent who started reading KakaoPage after her daughter recommended a romance webtoon. She buys coins for titles she loves, uses the recommend tab to find new content, and would not use the platform if it felt visually overwhelming. The clean white interface signals trustworthiness.
374
+
375
+ ## 14. States
376
+
377
+ | State | Treatment |
378
+ |---|---|
379
+ | **Empty (library, nothing saved)** | White canvas, black body text explaining the empty state, single yellow CTA to the recommendation feed. No illustration. |
380
+ | **Empty (no search results)** | Muted grey `#999999` message: no titles matched. Suggestion to try shorter keywords. |
381
+ | **Loading (catalog)** | Grid of `rgba(153,153,153,0.15)` skeleton cards at thumbnail dimensions, 8px radius. Flat — no pulse. Episode rows under headings hold their grey background while content loads. |
382
+ | **Loading (content detail)** | Header area: `#eeeeee` block at cover art dimensions. Episode list rows: same grey, no skeleton text. |
383
+ | **Error (content not found)** | White canvas, brief black message in 16px Pretendard 400, one black full-pill button "홈으로 가기" (bg `#000000`, text `#ffffff`, radius 100px, height 54px). |
384
+ | **Error (network failure)** | Inline message below the failed section; retry link in plain black text. No modal. |
385
+ | **Success (episode unlocked)** | The episode begins immediately. No celebration screen — immersion over acknowledgment. |
386
+ | **Skeleton (card)** | `rgba(153,153,153,0.15)` at exact cover art aspect ratio (portrait). Remains until image fully loaded. |
387
+ | **Disabled (locked episode, not free yet)** | Row remains visible, date and title shown normally. No greying-out — the wait time is the only signal that it's not yet accessible. |
388
+ | **Free-unlocked (episode)** | "무료" badge in black/white over the rank counter overlay. Quiet — not a celebratory state, just a status flag. |
389
+
390
+ ## 15. Motion & Easing
391
+
392
+ **Durations:**
393
+
394
+ | Token | Value | Use |
395
+ |---|---|---|
396
+ | `motion-instant` | 0ms | Skeleton → content swap (abrupt is intentional — no fade-in on cover art) |
397
+ | `motion-fast` | 100ms | Tab active-pill slide, badge appear |
398
+ | `motion-standard` | 200ms | Navigation scroll offset adjust |
399
+ | `motion-page` | 250ms | Route transition (slide or fade) |
400
+
401
+ **Easings:**
402
+
403
+ | Token | Curve | Use |
404
+ |---|---|---|
405
+ | `ease-enter` | `cubic-bezier(0.0, 0.0, 0.2, 1)` | Content entering viewport (decelerate into place) |
406
+ | `ease-exit` | `cubic-bezier(0.4, 0.0, 1, 1)` | Overlays / drawers leaving |
407
+ | `ease-standard` | `cubic-bezier(0.4, 0.0, 0.2, 1)` | Default UI state changes |
408
+
409
+ **Motion rules**: The platform's primary motion vocabulary is **minimal and structural** — transitions mark navigation changes, not content moments. Cover art never animates into view (the skeleton-to-image swap is instant, not faded); adding a fade would create visual noise across dozens of simultaneously loading thumbnails. The active tab pill snaps or slides, not bounces — a reading-focused audience expects the UI to get out of the way. Under `prefers-reduced-motion: reduce`, all transitions collapse to instant; the reading flow is unaffected.
410
+
411
+ <!--
412
+ OmD v0.1 Sources — Philosophy Layer (sections 10–15)
413
+
414
+ Tier 1 live inspect (2026-06-22) via playwright getComputedStyle on:
415
+ - https://page.kakao.com/ (homepage)
416
+ - https://page.kakao.com/content/57668776 (content detail page — web novel "마법학교 마법사로 살아가는 법")
417
+
418
+ Key observations used:
419
+ - body: Pretendard Variable, 16px, rgb(0,0,0), bg rgb(255,255,255)
420
+ - nav header: bg rgb(255,255,255), h 96px, 16px Pretendard
421
+ - primary CTA "첫 화 보기": bg rgb(255,214,24) = #ffd618; color rgb(34,34,34); radius 8px; h 56px
422
+ - coin badge "충전": bg rgb(255,214,24); radius 2px; padding 3px 8px
423
+ - BEST badge: bg rgb(255,48,66) = #ff3042; white text; radius 5px; 11px/700
424
+ - active section tab pill: bg rgb(0,0,0); white text; radius 16px; h 32px; padding 7px 14px
425
+ - active main nav tab pill: bg rgb(0,0,0); white text; radius 100px; h 36px
426
+ - content card: bg rgb(238,238,238) = #eeeeee; radius 12px
427
+ - skeleton card: bg rgba(153,153,153,0.15); radius 8px
428
+ - comment chip: bg rgba(0,0,0,0.05); radius 8px; h 28px
429
+ - error/back CTA: bg rgb(0,0,0); white text; radius 100px; h 54px; 16px/700
430
+ - typography: 21px/700 (content title), 16px/400 (body), 16px/700 (tab active), 14px/400 (list), 13px/400 (sub-tabs), 12px/400 (caption), 12px/700 (CTA label), 11px/400/#666666 (date), 11px/700 (BEST badge)
431
+ - body bgFreq: rgba(153,153,153,0.15)×131, rgb(255,255,255)×19, rgb(0,0,0)×5, rgb(238,238,238)×2, rgb(255,214,24)×1
432
+
433
+ Brand narrative: KakaoPage (카카오페이지) launched 2013; 기다리면 무료 model; Kakao Entertainment merger 2021.
434
+ These are widely documented public facts. Specific founding details are general public knowledge.
435
+
436
+ Voice samples (§10) verified live on page.kakao.com homepage on 2026-06-22 (meta description, section headers, tab labels).
437
+
438
+ Personas (§13) are fictional archetypes. Names are illustrative and do not refer to real people.
439
+ -->