oh-my-design-cli 1.6.1 → 1.6.3

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 (40) hide show
  1. package/README.ko.md +14 -0
  2. package/README.md +16 -0
  3. package/data/reference-fingerprints.json +979 -402
  4. package/dist/bin/oh-my-design.js +5 -3
  5. package/dist/bin/oh-my-design.js.map +1 -1
  6. package/dist/{install-skills-UKEVE3KT.js → install-skills-52LCRBZZ.js} +125 -40
  7. package/dist/install-skills-52LCRBZZ.js.map +1 -0
  8. package/package.json +2 -1
  9. package/skills/claude-design/SKILL.md +385 -0
  10. package/skills/claude-design/references/claude-design-flow.md +425 -0
  11. package/skills/claude-design/references/codebase-analysis.md +373 -0
  12. package/skills/claude-design/scripts/analyze_codebase.py +1369 -0
  13. package/skills/claude-design/scripts/clickable_link.sh +48 -0
  14. package/skills/claude-design/scripts/collect_source.py +178 -0
  15. package/skills/claude-design/scripts/drive_claude_design.cjs +378 -0
  16. package/skills/claude-design/scripts/gather_references.py +437 -0
  17. package/web/references/bunjang/DESIGN.md +1 -1
  18. package/web/references/classting/DESIGN.md +251 -0
  19. package/web/references/coinone/DESIGN.md +218 -0
  20. package/web/references/devsisters/DESIGN.md +253 -0
  21. package/web/references/drnow/DESIGN.md +331 -0
  22. package/web/references/flo/DESIGN.md +306 -0
  23. package/web/references/fugle/DESIGN.md +250 -0
  24. package/web/references/gogolook/DESIGN.md +5 -0
  25. package/web/references/grip/DESIGN.md +250 -0
  26. package/web/references/hogangnono/DESIGN.md +308 -0
  27. package/web/references/hyundaicard/DESIGN.md +5 -0
  28. package/web/references/jkopay/DESIGN.md +249 -0
  29. package/web/references/jobkorea/DESIGN.md +310 -0
  30. package/web/references/krafton/DESIGN.md +230 -0
  31. package/web/references/laftel/DESIGN.md +253 -0
  32. package/web/references/lezhin/DESIGN.md +301 -0
  33. package/web/references/momoshop/DESIGN.md +279 -0
  34. package/web/references/mustit/DESIGN.md +282 -0
  35. package/web/references/payco/DESIGN.md +227 -0
  36. package/web/references/piccollage/DESIGN.md +277 -0
  37. package/web/references/riiid/DESIGN.md +228 -0
  38. package/web/references/trenbe/DESIGN.md +252 -0
  39. package/web/references/voicetube/DESIGN.md +227 -0
  40. package/dist/install-skills-UKEVE3KT.js.map +0 -1
@@ -0,0 +1,301 @@
1
+ ---
2
+ id: lezhin
3
+ name: "Lezhin Comics"
4
+ country: KR
5
+ category: consumer-tech
6
+ homepage: "https://www.lezhin.com"
7
+ primary_color: "#eb0014"
8
+ logo:
9
+ type: favicon
10
+ slug: "https://www.google.com/s2/favicons?domain=lezhin.com&sz=256"
11
+ verified: "2026-06-03"
12
+ omd: "0.1"
13
+ ---
14
+
15
+ # Lezhin Comics
16
+
17
+ Korea's first premium webtoon platform — bold, content-first, and unapologetically direct.
18
+
19
+ ## 1. Visual Theme & Atmosphere
20
+
21
+ Lezhin Comics presents a dark, immersive canvas that keeps the spotlight firmly on cover art and episode thumbnails. The interface uses a deep near-black base (`#111115`) punctuated by a single vivid crimson (`#eb0014`) that signals every interactive action — from primary buttons to the switch-selected state and the badge on adult content. Grey neutrals (`#e9e9ec` border-muted through `#09090b` ink-black) form a tight tonal ladder, producing clean hierarchy without decorative flourish. Content grids are tight and image-led; typography is set in Pretendard for sharp legibility in Korean and Latin. The overall atmosphere is premium but unadorned — a platform confident that its 8,000+ titles speak louder than chrome.
22
+
23
+ ## 2. Color Palette & Roles
24
+
25
+ - **Brand Red:** `#eb0014` — primary CTA buttons, state-switch-selected, state-form-bg-selected, badge
26
+ - **Red Hover:** `#ff5254` — primary button hover state
27
+ - **Red Focus/Dark:** `#c40017` — badge background, button focus/active state
28
+ - **Ink Black:** `#111115` — inverted background, text-default, icon-default
29
+ - **Deep Dark:** `#09090b` — dark-strong surface
30
+ - **Dark Charcoal:** `#222225` — secondary button background, border-default
31
+ - **Soft Black:** `#36363a` — text-soft, icon-soft
32
+ - **Mid Grey:** `#6f6f77` — text-subtle, icon-subtle
33
+ - **Muted Grey:** `#a1a1a9` — text-muted, icon-muted, placeholder
34
+ - **Border Muted:** `#e9e9ec` — card borders, dividers
35
+ - **Surface Muted:** `#f4f4f5` — background muted, disabled button, skeleton base
36
+ - **White:** `#ffffff` — default background (light), text-inverted
37
+
38
+ ## 3. Typography Rules
39
+
40
+ - **Primary typeface:** Pretendard Variable → Pretendard → -apple-system → Noto Sans KR → Malgun Gothic → sans-serif
41
+ - **Scale:** 10 / 12 / 13 / 14 / 15 / 16 / 17 / 18 / 20 / 24 / 28 / 32 / 36 / 40 / 56 / 80px (mapped via `--size-3xs` through `--size-10xl`)
42
+ - **Body default:** 16px / weight 400 (regular)
43
+ - **Caption / metadata:** 12–13px / weight 400
44
+ - **Label / UI text:** 14px / weight 500 (medium) or 600 (semibold)
45
+ - **Button labels:** 14px (small/medium) or 16px (large) / weight 600
46
+ - **Section headers:** 18–24px / weight 700
47
+ - **Font weights available:** 400 (regular), 500 (medium), 600 (semibold), 700 (bold)
48
+ - **Line height:** 1.5 for body; 1.35–1.4 for compact UI labels; `line-height: 100%` for buttons
49
+ - **Letter spacing:** −0.28px to −0.36px for tighter display text in Korean
50
+
51
+ ## 4. Component Stylings
52
+
53
+ ### Buttons
54
+
55
+ **Primary (lzButtonPrimary / lzBtn--filled_red)**
56
+ - Background: `#eb0014`
57
+ - Text: `#ffffff`
58
+ - Border: none
59
+ - Radius: 4px
60
+ - Height: 48px
61
+ - Padding: 0 12px
62
+ - Font: 14px / 600
63
+
64
+ **Primary Large**
65
+ - Background: `#eb0014`
66
+ - Text: `#ffffff`
67
+ - Border: none
68
+ - Radius: 4px
69
+ - Height: 56px
70
+ - Padding: 0 16px
71
+ - Font: 16px / 600
72
+
73
+ **Secondary (lzButtonSecondary / lzBtn--filled_bw)**
74
+ - Background: `#222225`
75
+ - Text: `#ffffff`
76
+ - Border: none
77
+ - Radius: 4px
78
+ - Height: 48px
79
+ - Padding: 0 12px
80
+ - Font: 14px / 600
81
+
82
+ **Tertiary (lzButtonTertiary / lzBtn--filled_grey)**
83
+ - Background: `#f4f4f5`
84
+ - Text: `#36363a`
85
+ - Border: none
86
+ - Radius: 4px
87
+ - Height: 48px
88
+ - Padding: 0 12px
89
+ - Font: 14px / 600
90
+
91
+ **Outlined (lzBtn--outlined)**
92
+ - Background: transparent
93
+ - Text: `#36363a`
94
+ - Border: 1px solid `#a1a1a9`
95
+ - Radius: 4px
96
+ - Height: 40px
97
+ - Padding: 0 20px
98
+ - Font: 14px / 600
99
+
100
+ ### Cards
101
+
102
+ **Comic Thumbnail Card (lzCard)**
103
+ - Background: `#f4f4f5`
104
+ - Border: 1px solid `rgba(17,17,21,0.1)`
105
+ - Radius: 4px
106
+ - Aspect ratio: 2/3 (portrait)
107
+
108
+ **Circle Thumb Card (lzCardCircleThumb)**
109
+ - Radius: 9999px
110
+ - Border: tracked ring at 3px stroke
111
+
112
+ ### Chips (lzChip)
113
+
114
+ **Default Chip**
115
+ - Background: transparent
116
+ - Text: `#6f6f77`
117
+ - Border: 1px solid `#e9e9ec`
118
+ - Radius: 999px
119
+ - Padding: 0 12px
120
+ - Height: 32px
121
+
122
+ **Selected Chip**
123
+ - Background: `rgba(255,82,84,0.15)`
124
+ - Text: `#c40017`
125
+ - Border: 1px solid transparent
126
+ - Radius: 999px
127
+
128
+ ### Tabs (lzTab)
129
+
130
+ **Default Tab**
131
+ - Background: `rgba(17,17,21,0.04)`
132
+ - Text: `#111115`
133
+ - Border: 1px solid `rgba(17,17,21,0.04)`
134
+ - Radius: 4px
135
+ - Padding: 0 12px
136
+ - Height: 36px
137
+
138
+ **Selected Tab**
139
+ - Background: `rgba(17,17,21,0.95)`
140
+ - Text: `#ffffff`
141
+ - Radius: 4px
142
+
143
+ ### Dropdown / Select (lzSelectPaper)
144
+
145
+ **Dropdown Container**
146
+ - Background: `#ffffff`
147
+ - Border: 1px solid `#f4f4f5`
148
+ - Radius: 4px
149
+ - Padding: 12px 0
150
+
151
+ ---
152
+ **Verified:** 2026-06-03
153
+ **Tier 1 sources:** https://www.lezhin.com (homepage HTML + 5 CSS bundles: 035ea059869bfd89.css, 9161416b11db8c9e.css, 06e1ad77298be69d.css, 0427f27bd4442fbd.css, 895581ecc829564e.css), https://about.lezhin.com/en (corporate brand/about page)
154
+ **Tier 2 sources:** getdesign.md/lezhin — NOT LISTED (no data). refero — not checked (KR brand, typically no result).
155
+ **Conflicts unresolved:** none
156
+
157
+ ## 5. Layout Principles
158
+
159
+ Lezhin uses a fluid column-grid whose gutter and column count adapt per viewport: 7 columns on desktop (≥ 961px), 4 columns on tablet (640–960px), 3–4 columns on mobile (≤ 639px). Card widths are computed via `calc((100% - (col-1) × gap) / col)` with 4px or 8px gutters on dense grids and 12–16px gutters on sparser layouts. The horizontal page max-widths are 1036px at 961–1280px breakpoint and 1212px at 1281px+. Horizontal scroll snap is used for compact-carousel sections (snap-scroll list) on mobile. All interactive regions maintain at minimum 36px touch targets.
160
+
161
+ ## 6. Depth & Elevation
162
+
163
+ Elevation is expressed through the shadow token ladder:
164
+
165
+ - **Level 1 – Subtle:** `rgba(17,17,21,0.06)` — hero banner ambient, near-flat cards
166
+ - **Level 2 – Soft:** `rgba(17,17,21,0.08)` — dropdown menus (lzSelectPaper: `0 2px 12px 0 rgba(17,17,21,.08)`)
167
+ - **Level 3 – Medium:** `rgba(17,17,21,0.25)` — drawers, floating elements
168
+ - **Level 4 – Strong:** `rgba(17,17,21,0.30)` — modals
169
+ - **Level 5 – Bold:** `rgba(17,17,21,0.50)` — overlay scrim base
170
+ - **Thumbnail shadow:** `rgba(17,17,21,0.20)` inset on cover art
171
+ - **Dark overlay (full scrim):** `rgba(17,17,21,0.85)` — background-overlay-bold
172
+
173
+ Dark mode uses the same numeric scale but on the dark surface (`#111115`), so card depth reads via subtle border differences (`--border-muted: #222225`) rather than box-shadow contrast.
174
+
175
+ ## 7. Do's and Don'ts
176
+
177
+ ### Do
178
+ - Use `#eb0014` exclusively for the single highest-priority CTA per screen
179
+ - Apply Pretendard (or Noto Sans KR fallback) — never substitute decorative display fonts
180
+ - Follow the exact button-height ladder: 28px (xs) / 40px (sm) / 48px (md) / 56px (lg)
181
+ - Use the pill chip (`border-radius: 999px`) for filterable genre or tag selectors
182
+ - Maintain 4px radius on cards and rectanglular buttons for the characteristic sharp-yet-soft look
183
+ - Use the skeleton shimmer (`lzSkeleton` — 1.8s ease-in-out infinite) during async content loads
184
+ - Reserve the AI gradient (`#4CECBE → #00BFE2 → #007EE0`) only for AI-feature UI accents
185
+
186
+ ### Don't
187
+ - Don't use red for destructive warnings — Lezhin's red is a brand/action signal, not a danger signal
188
+ - Don't mix primary and secondary CTAs at equal visual weight on the same card or row
189
+ - Don't apply `border-radius` larger than 12px on rectangular interactive components (chips and avatars are exempt)
190
+ - Don't place light-mode text (`#111115`) directly on the dark surface (`#111115`) — toggle to inverted tokens
191
+ - Don't hard-code pixel color values — always reference the semantic CSS variable so dark-mode tokens apply correctly
192
+ - Don't add decorative illustration or icon embellishments inside buttons
193
+
194
+ ## 8. Responsive Behavior
195
+
196
+ Lezhin uses three primary breakpoints:
197
+
198
+ - **Mobile** `max-width: 960px` — single-column flow, horizontal-scroll carousels, paddings collapse to 8–16px, card grids shift to 3–4 columns
199
+ - **Tablet** `min-width: 640px and max-width: 960px` — 4–6 column grids, moderate gutters (12–16px), nav bar adjusts to compact mode
200
+ - **Desktop** `min-width: 961px` — 7-column grids, 24–32px gutters, full GNB nav, fixed sidebar elements appear
201
+
202
+ Additional breakpoints handle edge cases: `max-width: 639px` (small mobile, 3-col grids), `max-width: 320px` (reduced padding to 8px), `min-width: 1281px` (max-width: 1212px container). Components observe `prefers-color-scheme: dark` via 53 scoped media queries, switching semantic tokens to their dark-palette counterparts without changing the component markup.
203
+
204
+ ## 9. Agent Prompt Guide
205
+
206
+ When building Lezhin-styled UI:
207
+
208
+ - **Color:** Treat `#eb0014` as the single brand accent; use it on the primary button and selected-state only. All other UI operates on the grey ladder (#111115 → #e9e9ec → #ffffff).
209
+ - **Typography:** Set the font stack to `Pretendard Variable, Pretendard, -apple-system, Noto Sans KR, sans-serif`. Use 14px/600 for buttons, 16px/400 for body copy, 12px/400 for metadata.
210
+ - **Radius:** Default to 4px on buttons and cards. Use 999px for pills (chips, avatars). Avoid values above 12px on rectangular elements.
211
+ - **Spacing:** Prefer 4/8/12/16/20/24px spacing increments. Card gutters are 4px (dense) or 8–12px (standard).
212
+ - **Dark mode:** Swap `--bg-default` to `#111115`, `--text-default` to `#ffffff`, border tokens adjust automatically when referencing CSS variables.
213
+ - **Animation:** Transitions are `0.2s ease-in-out` for background-color and borders; `0.25s linear` for transforms. Skeleton is `1.8s ease-in-out infinite`.
214
+ - **States:** Disabled buttons carry `rgba(255,82,84,0.2)` background. Focus states use `#9e0018` for primary.
215
+
216
+ ## 10. Voice & Tone
217
+
218
+ **Brand voice:** Direct, confident, candid
219
+
220
+ The Lezhin voice is **솔직한** (honest/frank) — it does not hedge or oversell. Copy leans toward short declarative punches rather than elaborate prose. It speaks to adult readers who know what they want and appreciate the platform getting out of the way.
221
+
222
+ | Do | Don't |
223
+ |----|-------|
224
+ | Use short, punchy sentences | Use vague or corporate euphemisms |
225
+ | Be direct about content types | Sanitize mature topics with excessive euphemism |
226
+ | Address readers as adults who make their own choices | Be paternalistic or add unsolicited warnings |
227
+ | Use Korean naturally (informal register is fine) | Over-translate Korean idioms into stiff English equivalents |
228
+ | Let the content title and art do the heavy lifting | Over-describe what readers can see for themselves |
229
+
230
+ **Voice samples (illustrative):**
231
+ - *Illustrative:* "솔직한 재미 대폭발 — 당신이 찾던 진짜 웹툰." (Honest fun explosion — the real webtoon you've been looking for.)
232
+ - *Illustrative:* "매일 업데이트. 오늘 뭐 읽을까?" (Updated every day. What are you reading today?)
233
+ - *Illustrative:* "재미있는 만화를, 쉽게 결제해서, 편하게 보게 하자." (Let's make great comics easy to buy and comfortable to read.)
234
+
235
+ ## 11. Brand Narrative
236
+
237
+ Lezhin Entertainment was founded in April 2012 by Han Hee-sung (the blogger known as "lezhin") and developer Kwon Jung-hyuk, launching its Android app on June 7, 2013. The company was acquired by Seoul-listed KidariStudio in December 2020. The platform was built on a simple conviction: great comics deserve frictionless commerce. By introducing a coin-based micro-payment system at a time when most Korean webtoon platforms relied on ad revenue, Lezhin created South Korea's first premium webtoon marketplace — positioning itself as the platform for creators who wanted to earn and readers who wanted more.
238
+
239
+ The company's governing mission is that "stories can make the world a better place." Lezhin Entertainment operates as a global content company, running the Lezhin Comics platform across Korea, the United States, and Japan. Its catalogue spans over 8,000 titles, and beyond reading, Lezhin Studio adapts webtoon IPs into films, dramas, and games while the Lezhin Shop brings physical merchandise to fans who want to hold their favourite stories in their hands.
240
+
241
+ The brand's tagline — "솔직한 재미 대폭발" (honest fun explosion) — encapsulates the operating philosophy: candid about content, direct about pricing, and unapologetically focused on reader satisfaction. Lezhin's four stated values — duty and self-reliance, mutual respect, customer satisfaction, and innovation — underpin both its creator relationships and its product decisions, from daily episode release schedules to the coin economy.
242
+
243
+ ## 12. Principles
244
+
245
+ 1. **Reader first, always.** Every service decision begins with the question of how readers discover and enjoy content. *UI implication:* Thumbnail art is the dominant visual element; interface chrome is minimal so it never competes with the cover image.
246
+
247
+ 2. **Honest commerce.** Lezhin pioneered transparent paid webtoons. The pricing model is explicit — coins, costs, and episode counts are surfaced without dark patterns. *UI implication:* Coin balances and episode prices are always visible in context before purchase; no hidden upsells.
248
+
249
+ 3. **Candid about content.** The platform serves adult audiences without euphemism. *UI implication:* Genre and content-type badges (including adult tags) are shown directly on thumbnail cards rather than hidden behind additional taps.
250
+
251
+ 4. **Data and intuition in balance.** The founding team values "2% crazy" creative instinct alongside clear analytical thinking. *UI implication:* The platform ships experimental features (AI search, Snack short-drama) as clearly-labelled distinct experiences rather than silently folding them into the main flow.
252
+
253
+ 5. **Global through localisation.** Lezhin operates dedicated services for KR, US, and JP markets with locale-specific content curation rather than a one-size-fits-all approach. *UI implication:* Typography stacks, locale date formats, and content catalogues adapt per region rather than defaulting to a single language baseline.
254
+
255
+ ## 13. Personas
256
+
257
+ *Illustrative — for design scenario use only:*
258
+
259
+ **The Weekend Binge Reader** — A Korean professional in their late 20s who subscribes to Lezhin Premium. They open the app on Friday night, scan the "New Updates" carousel, and burn through three episodes of their favourite romance series back-to-back. They top up coins proactively rather than per-episode. For them, friction = bad; they want zero loading states and instant next-episode transitions.
260
+
261
+ *Illustrative — for design scenario use only:*
262
+
263
+ **The Genre Explorer** — A 32-year-old who discovered Lezhin through a recommendation for a specific genre (BL, thriller, or isekai). They use the tag-filter chip system heavily and bookmark titles for later. They read on both mobile and desktop and expect the reading experience to be consistent across devices.
264
+
265
+ *Illustrative — for design scenario use only:*
266
+
267
+ **The Loyal Creator Fan** — A college student who follows a specific artist and gets notified for every update. They comment frequently using the page-stamp system and engage with the creator's social feeds. Price sensitivity is moderate; they will spend coins on a title they love but are cautious about new unfamiliar series.
268
+
269
+ *Illustrative — for design scenario use only:*
270
+
271
+ **The International Reader** — An English-speaking reader in the US or Japan accessing Lezhin via lezhinus.com or the JP equivalent. They tend toward licensed titles with professional translation. They are brand-new to the coin system and need clear onboarding. The UI's Korean-first defaults (label copy, currency display) can create friction if not properly localised.
272
+
273
+ ## 14. States
274
+
275
+ - **Empty (no content):** Shows the `lzEmpty` component with an illustrated book image (96×140px from `ccdn.lezhin.com/files/assets/img/empty-book-lt.png`); title in `#36363a` at 18px / weight 500; subtitle in `#6f6f77` at default size / weight 400
276
+ - **Loading (skeleton):** `lzSkeleton` — background `#f4f4f5`; shimmer overlay `hsla(0,0%,100%,0.6)` animated via `linear-gradient(120deg, transparent 35%, shimmer 50%, transparent 65%)` at 1.8s ease-in-out infinite; dark-mode variant uses `#3a3b3d` base and `hsla(0,0%,100%,0.08)` shimmer
277
+ - **Error (network/500):** `lzError` component centered at max-width 640px; title `#111115` at 34px / weight 500 (desktop) or 24px (mobile); error illustration displayed at `width: auto; height: 180px`; home button uses primary red CTA
278
+ - **Error (expired/access denied):** Same `lzError` structure; uses specific expired-state illustration (132px wide); body text in `#6f6f77` at 14px; action CTA in red primary button
279
+ - **Success:** State-form-bg-selected `#eb0014` applied to radio/checkbox fill; switch tracks when selected use `#eb0014`; snackbar uses dark `#2f353e` background with `#ffffff` text and blue-tinted link `#2992d6`
280
+ - **Skeleton (card-specific):** Comic card background holds `#f4f4f5` while image lazy-loads; once loaded, image covers the background fully with `object-fit: cover`
281
+ - **Disabled:** Primary button background `rgba(255,82,84,0.2)` with `#ffffff` text; tertiary button background `#fafafa` with `#dadadd` text; pointer-events none applied via attribute `[disabled]`
282
+
283
+ ## 15. Motion & Easing
284
+
285
+ **Duration scale:**
286
+ - **Fast (micro-interactions):** 125ms — sort-arrow expand/collapse
287
+ - **Standard:** 200ms — button background/border transitions, tab color, opacity fades (snackbar)
288
+ - **Deliberate:** 250ms — slide-in/slide-out transforms (drawer, sheet transitions), switch track background, skeleton reveal height
289
+
290
+ **Easing:**
291
+ - `ease-in-out` — background-color and border transitions on buttons and tabs
292
+ - `linear` — switch thumb position and track color
293
+ - `ease-in-out` — skeleton shimmer sweep (1.8s)
294
+
295
+ **Rules:**
296
+ - Button hover/focus: 200ms ease-in-out on `background-color` and `border`
297
+ - Drawer / bottom-sheet: `transform 250ms ease-in-out, opacity 250ms ease-in-out` — enters from below or from the left
298
+ - Snackbar: `opacity 200ms` fade-in / fade-out; no transform movement
299
+ - Skeleton: `translateX(-100% → 100%)` over 1.8s ease-in-out infinite; never use shorter durations as it feels cheap against dense content grids
300
+ - Switch: `250ms linear` for track background, `250ms linear` for circle position — simultaneous, never staggered
301
+ - AI gradient divider (search bar): `translateX` at 3s ease-in-out infinite — slower to feel ambient, not urgent
@@ -0,0 +1,279 @@
1
+ ---
2
+ id: momoshop
3
+ name: "momo購物網"
4
+ country: TW
5
+ category: ecommerce
6
+ homepage: "https://www.momoshop.com.tw"
7
+ primary_color: "#D62872"
8
+ logo:
9
+ type: favicon
10
+ slug: "https://www.google.com/s2/favicons?domain=momoshop.com.tw&sz=256"
11
+ verified: "2026-06-03"
12
+ omd: "0.1"
13
+ ---
14
+
15
+ # momo購物網
16
+
17
+ Taiwan's largest television and digital shopping platform, operated by Fubon Media Technology (富邦媒體科技), combining TV commerce heritage with a modern mobile-first marketplace offering millions of products across beauty, fashion, electronics, and daily essentials.
18
+
19
+ ## 1. Visual Theme & Atmosphere
20
+
21
+ momo's digital product design radiates warm, confident energy rooted in its signature magenta-pink — a hue that traces back to its television shopping roots and reads instantly as "deal in progress." The overall atmosphere is dense but purposeful: a grid-forward layout packed with product imagery, price badges, and countdown timers communicates urgency and abundance simultaneously. Backgrounds stay cool-neutral (#F2F2F2 page canvas, #FAFAFA card surfaces) so that the hot pink accent and vivid product photography always pop. The typography follows a practical hierarchy — Microsoft JhengHei UI and PingFang TC for body readability in Traditional Chinese, with Century Gothic / Oxygen reserved exclusively for price numerals, which are the true focal stars on every product tile. Depth is achieved through subtle card shadows (0 1px 3px rgba(0,0,0,.1)) rather than heavy borders, keeping the eye moving across the catalogue grid rather than stopping at structural chrome.
22
+
23
+ ## 2. Color Palette & Roles
24
+
25
+ - **Momo Pink (Primary):** `#D62872` — header background, primary CTA buttons, active nav indicators, brand logos, price accent, search-suggest titles
26
+ - **Momo Pink Dark (Hover/Active):** `#D9006C` — hover state of primary buttons, selected tab underlines
27
+ - **Shopping Cart Badge Pink:** `#E5047E` — notification badge background on cart icon
28
+ - **Momo Blue (Link/Secondary Action):** `#027BFF` — hyperlinks, filter chips, restriction-text color, secondary interactive elements
29
+ - **Sale Red (Price Alert):** `#DD2222` — discount labels, urgent sale badges, delete-confirm actions
30
+ - **Alert Red (Delete):** `#EA3323` — destructive actions (delete-all browse-history button)
31
+ - **Orange Gradient (Rank Badge):** `#FFAA3B` to `#FF9203` — top-ranked product number badges (linear-gradient)
32
+ - **Page Background:** `#F2F2F2` — global page canvas and footer zone
33
+ - **Card Surface:** `#FAFAFA` — product card and panel backgrounds
34
+ - **Search Chip Background:** `#F2F2F2` — recent-search pill chips
35
+ - **Text Primary:** `#404040` / `#454545` — body text, product titles
36
+ - **Text Secondary:** `#727272` / `#999999` — captions, metadata, placeholder text
37
+ - **Border Default:** `#EDEDED` — dividers, card borders
38
+ - **Border Medium:** `#B3B3B3` — input outlines, rules buttons
39
+
40
+ ## 3. Typography Rules
41
+
42
+ - **Primary typeface:** `"Microsoft JhengHei UI", "SF Pro TC", "SF Pro Text", "PingFang TC", Helvetica, Arial, sans-serif` — used for all body, navigation, product titles, and UI labels (defined in `--primary-font-family` CSS variable)
43
+ - **Price typeface:** `"Oxygen", "Century Gothic", sans-serif` — used exclusively for price numerals (defined in `--price-font-family` CSS variable)
44
+ - **Base size:** 15px — search suggest titles (`font: 700 17px/24px var(--main-font)`), product list items 15px, captions 13px, badges 12px–11px
45
+ - **Weight scale:** 400 regular body, 700 bold for section headings, product names, price labels, search-trend titles
46
+ - **Line-height:** 1.5 base (defined on `:root`); 20px for 15px UI text; 18px for 13px caption text; 24px for 17px headings
47
+ - **Minimum size:** 11px (heat/rank metadata labels); no text below 11px in the search surface
48
+
49
+ ## 4. Component Stylings
50
+
51
+ ### Header Navigation
52
+
53
+ **Primary Header Bar**
54
+ - Background: `#D62872`
55
+ - Text: `#FFFFFF`
56
+ - Height: 44px
57
+ - Font: 26px / 700
58
+
59
+ **Cart Badge**
60
+ - Background: `#E5047E`
61
+ - Text: `#FFFFFF`
62
+ - Radius: 8px
63
+ - Width: 17px
64
+ - Height: 17px
65
+ - Font: 12px / 400
66
+
67
+ ### Search Bar
68
+
69
+ **Search Input (Desktop)**
70
+ - Background: `#FFFFFF`
71
+ - Border: 1px solid `#B3B3B3`
72
+ - Height: 36px
73
+ - Padding: 8px 8px 8px 10px
74
+ - Radius: 4px
75
+ - Font: 15px / 400
76
+
77
+ **Search Chip Tag (Recent/Suggest)**
78
+ - Background: `#F2F2F2`
79
+ - Text: `#404040`
80
+ - Height: 32px
81
+ - Radius: 16px
82
+ - Padding: 6px 8px
83
+ - Font: 13px / 400
84
+
85
+ ### Buttons
86
+
87
+ **Primary CTA Button (Error-page / Home)**
88
+ - Background: `#D62872`
89
+ - Text: `#FFFFFF`
90
+ - Height: 38px
91
+ - Radius: 4px
92
+ - Font: 16px / 700
93
+
94
+ **Destructive Button (Delete All)**
95
+ - Background: `#EA3323`
96
+ - Text: `#FFFFFF`
97
+ - Height: 44px
98
+ - Radius: 22px
99
+ - Width: 118px
100
+ - Font: 17px / 400
101
+
102
+ **Secondary Rules Button**
103
+ - Background: `#FFFFFF`
104
+ - Text: `#999999`
105
+ - Border: 1px solid `#B3B3B3`
106
+ - Radius: 13px
107
+ - Padding: 3px 5px 3px 8px
108
+ - Font: 13px / 400
109
+
110
+ ### Trend / Product Cards
111
+
112
+ **Search Trend Card**
113
+ - Border: 1px solid `#FBE9F1`
114
+ - Radius: 15px
115
+ - Background: linear-gradient(180deg, `#FFF5F9`, `#F9F9F9`)
116
+
117
+ **Trend Item (Top 3 highlight)**
118
+ - Background: linear-gradient(90deg, `#FFE4F0`, `#FCF6F9`)
119
+ - Radius: 8px
120
+ - Padding: 6px 8px
121
+
122
+ **Trend Item (Standard)**
123
+ - Background: linear-gradient(90deg, `#F3F3F3`, `#FEF5F9`)
124
+ - Radius: 8px
125
+ - Padding: 6px 8px
126
+
127
+ ### Rank Badge
128
+
129
+ **Rank Number (Top Orange)**
130
+ - Background: linear-gradient(0.34deg, `#FFAA3B` 0.29%, `#FF9203` 99.69%)
131
+ - Text: `#FFFFFF`
132
+ - Radius: 4px
133
+ - Width: 25px
134
+ - Height: 25px
135
+ - Font: 15px / 400
136
+
137
+ ### Tooltip / Dialog
138
+
139
+ **Search Dialog Tooltip**
140
+ - Background: `rgba(0,0,0,.8)`
141
+ - Text: `#FFFFFF`
142
+ - Radius: 8px
143
+ - Padding: 12px
144
+ - Font: 15px / 700 (title), 13px / 400 (body)
145
+
146
+ ---
147
+ **Verified:** 2026-06-03
148
+ **Tier 1 sources:** https://www.momoshop.com.tw/brand (HTML + inline CSS), https://www.momoshop.com.tw/about (HTML + inline CSS), https://image.momoshop.com.tw/ecm/font/theme-main.css (CSS custom properties), https://www.momoshop.com.tw/search/_next/static/css/93e50030b97ac6a5.css (Tailwind utility bundle), https://www.momoshop.com.tw/search/_next/static/css/a40c6c07c5abf802.css (component CSS)
149
+ **Tier 2 sources:** getdesign.md/momoshop — NOT LISTED ("No designs found for 'momoshop'"). refero ?q=momo — no result (TW brand, not indexed).
150
+ **Conflicts unresolved:** none
151
+
152
+ ## 5. Layout Principles
153
+
154
+ - Fluid grid with horizontal product card lanes; mobile collapses to 2-column, desktop expands to 4–6 columns
155
+ - Header fixed at 44px height; body starts immediately beneath with no gutter
156
+ - Page canvas background always `#F2F2F2`; white (#FFFFFF) card surfaces float above canvas with 1px subtle shadow
157
+ - Search and filter controls anchored to a 36px tall persistent bar below the 44px header on mobile
158
+ - Categories use icon-label vertical stack in horizontal scrollable row; no wrapping
159
+ - Countdown timers, sale badges, and rank numbers overlay the top-left corner of product thumbnails
160
+ - Footer zone uses `#EEEEEE` background with `#484848` text at 13px for legal and service links
161
+
162
+ ## 6. Depth & Elevation
163
+
164
+ - **Level 0 — Canvas:** `#F2F2F2` background, no shadow
165
+ - **Level 1 — Cards:** `#FFFFFF` / `#FAFAFA` surface, box-shadow `0 1px 2px 0 rgba(0,0,0,.05)`
166
+ - **Level 2 — Dropdowns/Panels:** box-shadow `0 1px 3px rgba(0,0,0,.1)`, z-index ~10
167
+ - **Level 3 — Modals/Side Drawers:** box-shadow `0 4px 6px -1px rgba(0,0,0,.1)`, z-index 1000
168
+ - **Level 4 — Toast/Tooltip overlays:** `rgba(0,0,0,.8)` background, z-index 1000+
169
+ - **Level 5 — Login modal overlay:** `rgba(0,0,0,.5)` scrim + container z-index 999999
170
+
171
+ ## 7. Do's and Don'ts
172
+
173
+ ### Do
174
+ - Use `#D62872` for all primary interactive elements — buttons, active states, brand signifiers
175
+ - Pair hot-pink backgrounds with pure white (`#FFFFFF`) text for maximum legibility
176
+ - Reserve `#DD2222` exclusively for price/discount signals and destructive confirmation actions
177
+ - Use pill chips (border-radius: 16px) for search tags and filter selections — keeps them distinct from rectangular buttons
178
+ - Apply the 44px touch-target minimum for all mobile interactive rows (header elements, list items)
179
+ - Use the Oxygen / Century Gothic price font for all numeric price displays to maintain the premium-meets-value visual signal
180
+ - Keep card backgrounds white or near-white (#FAFAFA) so product photography remains the visual hero
181
+
182
+ ### Don't
183
+ - Do not use `#D62872` for error states — use `#DD2222` or `#EA3323` to avoid confusion with brand CTA
184
+ - Do not mix the price font (Oxygen/Century Gothic) into body copy — it is reserved solely for numerals
185
+ - Do not place text smaller than 11px (absolute minimum is the rank/heat metadata size)
186
+ - Do not use shadows heavier than `0 10px 15px -3px rgba(0,0,0,.1)` inside product cards — heavy shadows compete with product images
187
+ - Do not apply border-radius greater than 22px on action buttons — pill shapes above that threshold break the functional/brand balance
188
+ - Do not leave the page canvas as pure white — the `#F2F2F2` canvas is essential for making white card surfaces appear elevated
189
+
190
+ ## 8. Responsive Behavior
191
+
192
+ - **Mobile (≤768px):** Single or 2-column product grid; header collapses to 44px icon-bar; search triggers full-screen overlay (100vh); category icons in horizontal scroll lane; bottom navigation bar fixed at ~44px
193
+ - **Tablet (768–1024px):** 3-column product grid; inline search bar at 36px height; category row with text labels visible
194
+ - **Desktop (≥1024px):** 4–6 column grid; full header with logo + search bar (440px wide) + nav links; browsing-history side drawer (137px) docks to right edge; hover states active (`hover:text-[#D62872]`, `group-hover:bg-[#D62872]`)
195
+ - Touch targets: minimum 44px height across all mobile interactive elements (header buttons, list rows, bottom bar)
196
+ - Images: all set `h-auto` to maintain aspect ratio across breakpoints; product thumbnails use fixed-ratio containers
197
+
198
+ ## 9. Agent Prompt Guide
199
+
200
+ To replicate momo's visual language in a UI component or prototype:
201
+
202
+ - Set global background to `#F2F2F2`; use `#FFFFFF` card surfaces with `box-shadow: 0 1px 3px rgba(0,0,0,.1)`
203
+ - Primary brand color: `#D62872`; hover/pressed: `#D9006C`; never tint or desaturate it
204
+ - Font stack: `"Microsoft JhengHei UI", "PingFang TC", Helvetica, Arial, sans-serif`; price numerals: `"Oxygen", "Century Gothic", sans-serif` in bold
205
+ - Header: 44px tall, `#D62872` fill, white text/icons
206
+ - CTA buttons: `height 38–44px`, `border-radius 4–8px`, `background #D62872`, `color #FFFFFF`, `font-weight 700`
207
+ - Search chips: `height 32px`, `border-radius 16px`, `background #F2F2F2`, `color #404040`
208
+ - Rank badges top 1-3: orange gradient `#FFAA3B → #FF9203`, white text, `border-radius 4px`, `25×25px`
209
+ - Price/discount labels: `#DD2222`, bold, Oxygen/Century Gothic numerals
210
+ - Error/delete actions: `#EA3323`
211
+ - Dividers: 1px solid `#EDEDED`; placeholder text: `#999999`
212
+
213
+ ## 10. Voice & Tone
214
+
215
+ momo's copy is **direct, warm, and deal-forward**. Every word either confirms a saving or removes friction from the purchase decision. The register is colloquial Mandarin Chinese with light excitement — not corporate, never cold.
216
+
217
+ **3 adjectives:** Energetic, trustworthy, deal-focused.
218
+
219
+ | Do | Don't |
220
+ |----|-------|
221
+ | Lead with the saving: "限時下殺" (time-limited flash sale) | Use vague superlatives without anchoring to a number |
222
+ | Use short active sentences: "立刻搶購" (grab it now) | Write multi-clause sentences that bury the price |
223
+ | Address the user directly: "你找到更多更多" | Use passive or impersonal framing |
224
+ | Emphasize concrete logistics: "24H快速到貨" | Promise without specifying the timeframe |
225
+ | Blend trust signals naturally: "十天猶豫期" | Relegate return policies to fine-print footnotes |
226
+
227
+ **Voice samples (illustrative):**
228
+ - *Illustrative:* "讓你找到更多更多 — 數十萬件商品,24小時快速到貨,讓購物更輕鬆。"
229
+ - *Illustrative:* "今日限時下殺!錯過等一年,快搶!"
230
+ - *Illustrative:* "新會員首購禮金,馬上領,立刻用,不花冤枉錢。"
231
+
232
+ ## 11. Brand Narrative
233
+
234
+ momo購物網 was established by Fubon Media Technology Co., Ltd. (富邦媒體科技股份有限公司), a joint venture under Fubon Financial Holdings and Taiwan Mobile (台灣大哥大). What began as a television shopping channel evolved into Taiwan's largest integrated shopping platform, extending the immediacy and excitement of live TV commerce into an always-on digital experience. The company's Apple App ID (861796017) and the long-running tagline "讓你找到更多更多" — "helping you find more and more" — encapsulate the brand's core promise: an endlessly expanding catalogue that surfaces exactly what each shopper needs.
235
+
236
+ The platform distinguishes itself through operational excellence: 24-hour rapid delivery, convenience-store pickup, a 10-day no-questions return window, and 16 payment methods that meet users wherever they bank. This operational depth is the bedrock of the brand's trust — not aesthetic polish, but a demonstrated commitment to removing every barrier between desire and delivery. With over 730,000 App Store reviews averaging 4.9 stars, momo's reputation rests on the reliability of that promise.
237
+
238
+ Today momo positions itself beyond pure retail, hosting flagship brand stores (Apple, Dyson, MUJI, Estée Lauder), travel and dining e-tickets, insurance products, and a points-based affiliate program. The brand's visual identity — that unmistakable magenta-pink — functions as a permanent signal of value in motion, readable at a glance across television, mobile, and web surfaces.
239
+
240
+ ## 12. Principles
241
+
242
+ 1. **Value Visibility First.** Price, discount depth, and delivery speed are the headline. No UI element should compete with or obscure these signals. *UI implication:* Price numerals use a dedicated typeface (Oxygen/Century Gothic), appear in `#DD2222` for discounts, and occupy the most prominent position on every product tile.
243
+
244
+ 2. **Friction Removal at Every Step.** From 16 payment methods to convenience-store pickup, the brand obsesses over eliminating barriers. *UI implication:* Search must offer instant suggestions, filter chips must be one-tap, and cart actions must never require a page reload on mobile.
245
+
246
+ 3. **Warm Urgency Without Panic.** Countdown timers and "flash sale" badges create excitement without manufactured anxiety. The brand's magenta is energetic, not alarming. *UI implication:* Use `#D62872` for urgency signals, never pure red; reserve `#DD2222` only for confirmed discounts and destructive confirmations.
247
+
248
+ 4. **Trust Through Transparency.** Anti-fraud notices, return policy emphasis, and clear logistics specs reflect a brand that treats trust as a product feature. *UI implication:* Trust badges and policy links must appear at checkout-adjacent surfaces, styled with equal visual weight to promotional copy.
249
+
250
+ 5. **Consistent Brand Recognition Across Surfaces.** The brand spans TV, web, iOS, and Android. The magenta header and pink accent must be identical across all surfaces. *UI implication:* `#D62872` is non-negotiable — no tints, no gradients on the primary header; gradient use is limited to decorative accents (rank badges, trending cards).
251
+
252
+ ## 13. Personas
253
+
254
+ *Illustrative Busy Mom (Lin, 38, Taichung):* She shops on her phone between school pickups. She filters by fastest delivery and uses the convenience-store pickup for anything she needs to control the schedule of. She trusts momo because the 10-day return window means she can buy without overthinking. Her price sensitivity is moderate — she watches flash-sales but always checks reviews.
255
+
256
+ *Illustrative College Student (Jerry, 21, Taipei):* He discovered momo through an app-exclusive discount alert. He primarily buys electronics, headphones, and K-beauty skincare. He uses the image-search feature and relies on the official brand flagship stores (Apple, Dyson) as trust signals. He pays via Apple Pay.
257
+
258
+ *Illustrative Home Manager (Mrs. Chen, 55, Kaohsiung):* She came from the TV shopping channel and feels comfortable with momo's familiar visual rhythm — lots of products, clear prices, reassuring customer service. She calls the hotline when uncertain, values the anti-fraud messaging, and prefers credit card installment payments.
259
+
260
+ *Illustrative Deal Seeker (Tom, 29, Hsinchu):* He opens the momo app daily to check the 5-fold group-buy and daily flash sale sections. He is motivated entirely by price and delivery speed. He has accumulated significant loyalty points and routes almost all household purchases through momo.
261
+
262
+ ## 14. States
263
+
264
+ - **Empty (No results):** Full-page illustration with brand-pink accent, short encouragement copy ("找不到?試試其他關鍵字"), and a secondary suggestion chip row in `#F2F2F2` pills
265
+ - **Loading (Skeleton):** `border-radius: 4px` grey `#EDEDED` shimmer blocks replacing product thumbnails and title text; column layout preserved to prevent reflow
266
+ - **Error (Network failure):** Centered error message with `#D62872` home-return button (`height 38px`, `border-radius 4px`), redirecting to `Main.jsp`
267
+ - **Error (Destructive confirm):** Alert dialog with `#EDEDED` divider, cancel left, confirm-delete right in `#DD2726` (red) — `font: 17px Helvetica`
268
+ - **Success (Order placed):** Toast or overlay with `#D62872` accent color, brief confirmation copy, auto-dismisses after ~2s
269
+ - **Skeleton (Browse history panel):** Side drawer (`width 137px`) shows `#FAFAFA` card placeholders; spinner absent; position is preserved
270
+ - **Disabled (OOS product):** CTA button muted to `#B3B3B3` fill with `#FFFFFF` text; price label remains visible; "補貨通知" (restock alert) secondary link in `#027BFF`
271
+ - **Hover (Desktop link/card):** Text and borders shift to `#D62872` via `.hover:text-[#D62872]` and `.group-hover:bg-[#D62872]` utility classes; transition implicit (no explicit duration in source)
272
+
273
+ ## 15. Motion & Easing
274
+
275
+ - **Short interactions (badge, tooltip appear):** ~150ms
276
+ - **Panel / overlay transitions (login modal, browsing history drawer):** `transition: opacity .3s, background-color .3s` — confirmed from `browsing-history` CSS
277
+ - **Search overlay:** `height: 0` → `auto` (no explicit duration; instant DOM swap via `.show` class toggle)
278
+ - **Easing:** Default browser easing (no custom cubic-bezier defined in inspected source); overlays use linear or ease for opacity fades
279
+ - **Rules:** Motion is functional, not decorative. No parallax, no scroll animations. Transitions serve only to soften state changes (modal appear/disappear, drawer open/close). Product grid items do not animate on scroll.