oh-my-design-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.ja.md +145 -0
- package/README.ko.md +245 -0
- package/README.md +245 -0
- package/README.zh-TW.md +145 -0
- package/data/reference-tags.md +104 -0
- package/data/synonyms.json +79 -0
- package/data/vocabulary.json +516 -0
- package/dist/bin/oh-my-design.js +858 -0
- package/dist/bin/oh-my-design.js.map +1 -0
- package/dist/chunk-6YNSV3VY.js +35 -0
- package/dist/chunk-6YNSV3VY.js.map +1 -0
- package/dist/chunk-MHFYGZSO.js +337 -0
- package/dist/chunk-MHFYGZSO.js.map +1 -0
- package/dist/chunk-N2JG6N4Q.js +264 -0
- package/dist/chunk-N2JG6N4Q.js.map +1 -0
- package/dist/chunk-OOQQEUGX.js +46 -0
- package/dist/chunk-OOQQEUGX.js.map +1 -0
- package/dist/chunk-OR5DHENY.js +250 -0
- package/dist/chunk-OR5DHENY.js.map +1 -0
- package/dist/customizer-CM76752R.js +8 -0
- package/dist/customizer-CM76752R.js.map +1 -0
- package/dist/index.d.ts +559 -0
- package/dist/index.js +3113 -0
- package/dist/index.js.map +1 -0
- package/dist/init-STACB7E5.js +635 -0
- package/dist/init-STACB7E5.js.map +1 -0
- package/dist/install-skills-CM6VXFZJ.js +152 -0
- package/dist/install-skills-CM6VXFZJ.js.map +1 -0
- package/dist/learn-33LHKEJA.js +140 -0
- package/dist/learn-33LHKEJA.js.map +1 -0
- package/dist/reference-YMNAOXJQ.js +47 -0
- package/dist/reference-YMNAOXJQ.js.map +1 -0
- package/dist/reference-parser-TM3CJPNE.js +10 -0
- package/dist/reference-parser-TM3CJPNE.js.map +1 -0
- package/dist/remember-UAFA5B2O.js +78 -0
- package/dist/remember-UAFA5B2O.js.map +1 -0
- package/dist/sync-P7X4S2DK.js +404 -0
- package/dist/sync-P7X4S2DK.js.map +1 -0
- package/dist/templates/templates/design-md.hbs +44 -0
- package/dist/templates/templates/partials/agent-prompt-guide.hbs +28 -0
- package/dist/templates/templates/partials/color-palette.hbs +49 -0
- package/dist/templates/templates/partials/component-stylings.hbs +28 -0
- package/dist/templates/templates/partials/depth-elevation.hbs +31 -0
- package/dist/templates/templates/partials/dos-donts.hbs +13 -0
- package/dist/templates/templates/partials/layout.hbs +30 -0
- package/dist/templates/templates/partials/responsive.hbs +25 -0
- package/dist/templates/templates/partials/shadcn-tokens.hbs +64 -0
- package/dist/templates/templates/partials/typography.hbs +43 -0
- package/dist/templates/templates/partials/visual-theme.hbs +26 -0
- package/package.json +68 -0
- package/references/Claude-Design-Sys-Prompt.txt +421 -0
- package/references/airbnb/DESIGN.md +427 -0
- package/references/airbnb/README.md +23 -0
- package/references/airbnb/preview-dark.html +234 -0
- package/references/airbnb/preview.html +233 -0
- package/references/airtable/DESIGN.md +107 -0
- package/references/airtable/README.md +23 -0
- package/references/airtable/preview-dark.html +165 -0
- package/references/airtable/preview.html +164 -0
- package/references/apple/DESIGN.md +496 -0
- package/references/apple/README.md +24 -0
- package/references/apple/preview-dark.html +420 -0
- package/references/apple/preview.html +414 -0
- package/references/baemin/DESIGN.md +260 -0
- package/references/baemin/README.md +19 -0
- package/references/bmw/DESIGN.md +180 -0
- package/references/bmw/README.md +23 -0
- package/references/bmw/preview-dark.html +211 -0
- package/references/bmw/preview.html +210 -0
- package/references/cal/DESIGN.md +259 -0
- package/references/cal/README.md +23 -0
- package/references/cal/preview-dark.html +449 -0
- package/references/cal/preview.html +575 -0
- package/references/claude/DESIGN.md +455 -0
- package/references/claude/README.md +24 -0
- package/references/claude/preview-dark.html +803 -0
- package/references/claude/preview.html +826 -0
- package/references/clay/DESIGN.md +304 -0
- package/references/clay/README.md +23 -0
- package/references/clay/preview-dark.html +316 -0
- package/references/clay/preview.html +315 -0
- package/references/clickhouse/DESIGN.md +281 -0
- package/references/clickhouse/README.md +24 -0
- package/references/clickhouse/preview-dark.html +834 -0
- package/references/clickhouse/preview.html +786 -0
- package/references/cohere/DESIGN.md +266 -0
- package/references/cohere/README.md +24 -0
- package/references/cohere/preview-dark.html +803 -0
- package/references/cohere/preview.html +807 -0
- package/references/coinbase/DESIGN.md +129 -0
- package/references/coinbase/README.md +23 -0
- package/references/coinbase/preview-dark.html +164 -0
- package/references/coinbase/preview.html +163 -0
- package/references/composio/DESIGN.md +307 -0
- package/references/composio/README.md +24 -0
- package/references/composio/preview-dark.html +958 -0
- package/references/composio/preview.html +933 -0
- package/references/cursor/DESIGN.md +322 -0
- package/references/cursor/README.md +24 -0
- package/references/cursor/preview-dark.html +393 -0
- package/references/cursor/preview.html +383 -0
- package/references/dcard/DESIGN.md +302 -0
- package/references/dcard/README.md +12 -0
- package/references/dcard/_research/forum-1440px.png +0 -0
- package/references/dcard/_research.md +77 -0
- package/references/elevenlabs/DESIGN.md +265 -0
- package/references/elevenlabs/README.md +23 -0
- package/references/elevenlabs/preview-dark.html +252 -0
- package/references/elevenlabs/preview.html +251 -0
- package/references/expo/DESIGN.md +281 -0
- package/references/expo/README.md +24 -0
- package/references/expo/preview-dark.html +533 -0
- package/references/expo/preview.html +533 -0
- package/references/ferrari/DESIGN.md +314 -0
- package/references/ferrari/README.md +23 -0
- package/references/ferrari/preview-dark.html +1162 -0
- package/references/ferrari/preview.html +1122 -0
- package/references/figma/DESIGN.md +399 -0
- package/references/figma/README.md +24 -0
- package/references/figma/preview-dark.html +822 -0
- package/references/figma/preview.html +832 -0
- package/references/framer/DESIGN.md +246 -0
- package/references/framer/README.md +23 -0
- package/references/framer/preview-dark.html +902 -0
- package/references/framer/preview.html +883 -0
- package/references/freee/DESIGN.md +308 -0
- package/references/freee/README.md +12 -0
- package/references/freee/_research/vibes-storybook-1440px.png +0 -0
- package/references/freee/_research.md +77 -0
- package/references/hashicorp/DESIGN.md +278 -0
- package/references/hashicorp/README.md +24 -0
- package/references/hashicorp/preview-dark.html +1202 -0
- package/references/hashicorp/preview.html +1193 -0
- package/references/ibm/DESIGN.md +332 -0
- package/references/ibm/README.md +24 -0
- package/references/ibm/preview-dark.html +443 -0
- package/references/ibm/preview.html +428 -0
- package/references/intercom/DESIGN.md +146 -0
- package/references/intercom/README.md +23 -0
- package/references/intercom/preview-dark.html +185 -0
- package/references/intercom/preview.html +184 -0
- package/references/kakao/DESIGN.md +261 -0
- package/references/kakao/README.md +18 -0
- package/references/karrot/DESIGN.md +252 -0
- package/references/karrot/README.md +18 -0
- package/references/kraken/DESIGN.md +146 -0
- package/references/kraken/README.md +23 -0
- package/references/kraken/preview-dark.html +169 -0
- package/references/kraken/preview.html +168 -0
- package/references/lamborghini/DESIGN.md +288 -0
- package/references/lamborghini/README.md +23 -0
- package/references/lamborghini/preview-dark.html +303 -0
- package/references/lamborghini/preview.html +381 -0
- package/references/line/DESIGN.md +375 -0
- package/references/line/README.md +12 -0
- package/references/line/_research/home-1440px.png +0 -0
- package/references/line/_research.md +65 -0
- package/references/linear.app/DESIGN.md +526 -0
- package/references/linear.app/README.md +24 -0
- package/references/linear.app/preview-dark.html +383 -0
- package/references/linear.app/preview.html +373 -0
- package/references/lovable/DESIGN.md +298 -0
- package/references/lovable/README.md +24 -0
- package/references/lovable/preview-dark.html +349 -0
- package/references/lovable/preview.html +348 -0
- package/references/mercari/DESIGN.md +294 -0
- package/references/mercari/README.md +12 -0
- package/references/mercari/_research/home-1440px.png +0 -0
- package/references/mercari/_research.md +77 -0
- package/references/minimax/DESIGN.md +257 -0
- package/references/minimax/README.md +24 -0
- package/references/minimax/preview-dark.html +1262 -0
- package/references/minimax/preview.html +1248 -0
- package/references/mintlify/DESIGN.md +341 -0
- package/references/mintlify/README.md +24 -0
- package/references/mintlify/preview-dark.html +409 -0
- package/references/mintlify/preview.html +398 -0
- package/references/miro/DESIGN.md +108 -0
- package/references/miro/README.md +23 -0
- package/references/miro/preview-dark.html +174 -0
- package/references/miro/preview.html +173 -0
- package/references/mistral.ai/DESIGN.md +261 -0
- package/references/mistral.ai/README.md +24 -0
- package/references/mistral.ai/preview-dark.html +806 -0
- package/references/mistral.ai/preview.html +805 -0
- package/references/mongodb/DESIGN.md +266 -0
- package/references/mongodb/README.md +23 -0
- package/references/mongodb/preview-dark.html +260 -0
- package/references/mongodb/preview.html +259 -0
- package/references/notion/DESIGN.md +492 -0
- package/references/notion/README.md +24 -0
- package/references/notion/preview-dark.html +372 -0
- package/references/notion/preview.html +364 -0
- package/references/nvidia/DESIGN.md +308 -0
- package/references/nvidia/README.md +24 -0
- package/references/nvidia/preview-dark.html +374 -0
- package/references/nvidia/preview.html +366 -0
- package/references/ollama/DESIGN.md +267 -0
- package/references/ollama/README.md +24 -0
- package/references/ollama/preview-dark.html +678 -0
- package/references/ollama/preview.html +678 -0
- package/references/opencode.ai/DESIGN.md +295 -0
- package/references/opencode.ai/README.md +24 -0
- package/references/opencode.ai/preview-dark.html +366 -0
- package/references/opencode.ai/preview.html +357 -0
- package/references/pinkoi/DESIGN.md +309 -0
- package/references/pinkoi/README.md +12 -0
- package/references/pinkoi/_research/browse-1440px.png +0 -0
- package/references/pinkoi/_research.md +115 -0
- package/references/pinterest/DESIGN.md +230 -0
- package/references/pinterest/README.md +23 -0
- package/references/pinterest/preview-dark.html +233 -0
- package/references/pinterest/preview.html +232 -0
- package/references/posthog/DESIGN.md +256 -0
- package/references/posthog/README.md +23 -0
- package/references/posthog/preview-dark.html +699 -0
- package/references/posthog/preview.html +749 -0
- package/references/raycast/DESIGN.md +268 -0
- package/references/raycast/README.md +23 -0
- package/references/raycast/preview-dark.html +606 -0
- package/references/raycast/preview.html +688 -0
- package/references/renault/DESIGN.md +311 -0
- package/references/renault/README.md +23 -0
- package/references/renault/preview-dark.html +406 -0
- package/references/renault/preview.html +606 -0
- package/references/replicate/DESIGN.md +261 -0
- package/references/replicate/README.md +24 -0
- package/references/replicate/preview-dark.html +828 -0
- package/references/replicate/preview.html +831 -0
- package/references/resend/DESIGN.md +303 -0
- package/references/resend/README.md +23 -0
- package/references/resend/preview-dark.html +355 -0
- package/references/resend/preview.html +354 -0
- package/references/revolut/DESIGN.md +185 -0
- package/references/revolut/README.md +23 -0
- package/references/revolut/preview-dark.html +234 -0
- package/references/revolut/preview.html +233 -0
- package/references/runwayml/DESIGN.md +244 -0
- package/references/runwayml/README.md +24 -0
- package/references/runwayml/preview-dark.html +664 -0
- package/references/runwayml/preview.html +665 -0
- package/references/sanity/DESIGN.md +357 -0
- package/references/sanity/README.md +24 -0
- package/references/sanity/preview-dark.html +990 -0
- package/references/sanity/preview.html +1135 -0
- package/references/sentry/DESIGN.md +262 -0
- package/references/sentry/README.md +24 -0
- package/references/sentry/preview-dark.html +626 -0
- package/references/sentry/preview.html +951 -0
- package/references/spacex/DESIGN.md +205 -0
- package/references/spacex/README.md +23 -0
- package/references/spacex/preview-dark.html +221 -0
- package/references/spacex/preview.html +220 -0
- package/references/spotify/DESIGN.md +246 -0
- package/references/spotify/README.md +23 -0
- package/references/spotify/preview-dark.html +231 -0
- package/references/spotify/preview.html +230 -0
- package/references/stripe/DESIGN.md +473 -0
- package/references/stripe/README.md +24 -0
- package/references/stripe/preview-dark.html +428 -0
- package/references/stripe/preview.html +419 -0
- package/references/supabase/DESIGN.md +255 -0
- package/references/supabase/README.md +24 -0
- package/references/supabase/preview-dark.html +977 -0
- package/references/supabase/preview.html +955 -0
- package/references/superhuman/DESIGN.md +252 -0
- package/references/superhuman/README.md +23 -0
- package/references/superhuman/preview-dark.html +973 -0
- package/references/superhuman/preview.html +951 -0
- package/references/tesla/DESIGN.md +286 -0
- package/references/tesla/README.md +23 -0
- package/references/tesla/preview-dark.html +947 -0
- package/references/tesla/preview.html +925 -0
- package/references/together.ai/DESIGN.md +263 -0
- package/references/together.ai/README.md +24 -0
- package/references/together.ai/preview-dark.html +892 -0
- package/references/together.ai/preview.html +897 -0
- package/references/toss/DESIGN.md +387 -0
- package/references/toss/README.md +19 -0
- package/references/uber/DESIGN.md +295 -0
- package/references/uber/README.md +24 -0
- package/references/uber/preview-dark.html +1120 -0
- package/references/uber/preview.html +1119 -0
- package/references/vercel/DESIGN.md +456 -0
- package/references/vercel/README.md +24 -0
- package/references/vercel/preview-dark.html +368 -0
- package/references/vercel/preview.html +367 -0
- package/references/voltagent/DESIGN.md +323 -0
- package/references/voltagent/README.md +24 -0
- package/references/voltagent/preview-dark.html +487 -0
- package/references/voltagent/preview.html +766 -0
- package/references/warp/DESIGN.md +253 -0
- package/references/warp/README.md +23 -0
- package/references/warp/preview-dark.html +500 -0
- package/references/warp/preview.html +533 -0
- package/references/webflow/DESIGN.md +109 -0
- package/references/webflow/README.md +23 -0
- package/references/webflow/preview-dark.html +147 -0
- package/references/webflow/preview.html +146 -0
- package/references/wise/DESIGN.md +173 -0
- package/references/wise/README.md +23 -0
- package/references/wise/preview-dark.html +230 -0
- package/references/wise/preview.html +229 -0
- package/references/x.ai/DESIGN.md +267 -0
- package/references/x.ai/README.md +24 -0
- package/references/x.ai/preview-dark.html +356 -0
- package/references/x.ai/preview.html +407 -0
- package/references/zapier/DESIGN.md +328 -0
- package/references/zapier/README.md +24 -0
- package/references/zapier/preview-dark.html +380 -0
- package/references/zapier/preview.html +372 -0
- package/skills/omd-apply/SKILL.md +85 -0
- package/skills/omd-init/SKILL.md +167 -0
- package/skills/omd-learn/SKILL.md +81 -0
- package/skills/omd-remember/SKILL.md +44 -0
- package/skills/omd-sync/SKILL.md +38 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
# Design System Inspiration of Mercari
|
|
2
|
+
|
|
3
|
+
## 1. Visual Theme & Atmosphere
|
|
4
|
+
|
|
5
|
+
Mercari is Japan's largest C2C marketplace (50M+ downloads, 350K daily listings) and its design system is a textbook example of **mature semantic token architecture**. The production site at `jp.mercari.com` exposes **681 CSS custom properties on `:root`**, organized into the well-named `--alias-color-*` namespace: `--alias-color-background-{role}-{state}`, `--alias-color-text-{role}-{state}`, `--alias-color-border-{role}-{state}`, `--alias-color-icon-{role}-{state}`, `--alias-color-overlay-*`. This isn't internal documentation — it's the actual design system surfaced at runtime, ready to read directly from any production page.
|
|
6
|
+
|
|
7
|
+
The brand color is the famous **Mercari Red** (`#ff333f`) — vivid, attention-grabbing, used as the `attention` semantic role for badges, error states, danger actions, and the iconic price-tag aesthetic. Around it sits a balanced palette: accent blue (`#0095ee`), success green (`#0aa466`), decorative yellow (`#ffb818`). Text hierarchy uses dark gray (`#333333` primary, `#666666` secondary) on a pure white surface (`#ffffff`), with a soft secondary background (`#f5f5f5`) for grouped sections.
|
|
8
|
+
|
|
9
|
+
Typography is **system-stack with Japanese-first fallbacks**: `Helvetica Neue, Arial, Hiragino Kaku Gothic ProN Custom, Hiragino Sans Custom, Meiryo Custom, sans-serif`. The "Custom" suffix on the Hiragino/Meiryo fonts indicates Mercari's deployment of optically-tuned variants for their production app — same font families, but adjusted spacing/hinting for marketplace UI. Buttons use **weight 700** for primary CTAs at a tight `4px` radius, while body text holds at weight 400.
|
|
10
|
+
|
|
11
|
+
**Key Characteristics:**
|
|
12
|
+
- **681 semantic CSS custom properties** exposed on `:root` — the public design system surface
|
|
13
|
+
- **Mercari Red** (`#ff333f`) as the `attention` semantic — used for badges, error/danger states, sale prices, the brand mark
|
|
14
|
+
- Japanese-first font stack: `Helvetica Neue → Arial → Hiragino Kaku Gothic ProN Custom → Hiragino Sans Custom → Meiryo Custom`
|
|
15
|
+
- Fixed `4px border-radius` on buttons and cards — sharp, commerce-functional
|
|
16
|
+
- Weight 700 for primary CTAs; weight 400 for body and secondary controls
|
|
17
|
+
- Three-tier color naming: `alias-color-{property}-{role}-{state}` (e.g., `--alias-color-background-attention-default`)
|
|
18
|
+
- 1440px max page width with `--grid-layout-gutter: 24px` and `--grid-layout-page-padding-horizontal: 36px`
|
|
19
|
+
- 4dp spacing micro-scale (`--bnfXaU: 6px`, `--exLgvR: 8px`, `--fwPfWM: 8px`, etc.) with named alias tokens
|
|
20
|
+
- High-density product grid with circular brand thumbnails (`border-radius: 50%`) for category navigation
|
|
21
|
+
- Multi-tier z-index system: dialog 1400, modal 1400, snackbar 1500, tooltip 1600
|
|
22
|
+
|
|
23
|
+
## 2. Color Palette & Roles
|
|
24
|
+
|
|
25
|
+
All values verified live from `:root` CSS custom properties on `jp.mercari.com`.
|
|
26
|
+
|
|
27
|
+
### Brand / Attention (the Mercari Red family)
|
|
28
|
+
- **Mercari Red** (`#ff333f`): `--alias-color-background-attention-default`, `--alias-color-text-attention-default`. The signature brand red. Used for danger actions, sale price emphasis, the brand mark.
|
|
29
|
+
- **Red Highlight** (`#ff6574`): `--alias-color-background-attention-highlight`, `--alias-color-border-attention-highlight`. Lighter variant for hover states.
|
|
30
|
+
- **Red Active** (`#e32b36`): `--alias-color-background-attention-active`, `--alias-color-border-attention-active`. Pressed state.
|
|
31
|
+
- **Red Thin** (`#fdf1f3`): `--alias-color-background-attentionThin-default`. Very light pink for subtle background emphasis (e.g., error message bg).
|
|
32
|
+
- **Red Thin Highlight** (`#ffdcdf`): `--alias-color-background-attentionThin-highlight`.
|
|
33
|
+
|
|
34
|
+
### Accent (Mercari Blue)
|
|
35
|
+
- **Accent Blue** (`#0095ee`): `--alias-color-background-accent-default`, `--alias-color-text-accent-default`, `--alias-color-icon-accent-default`. Links, info badges, accent CTAs.
|
|
36
|
+
- **Accent Blue Highlight** (`#63c5ff`): `--alias-color-background-accent-highlight`.
|
|
37
|
+
- **Accent Blue Active** (`#0073cc`): `--alias-color-background-accent-active`, `--alias-color-text-accent-active`.
|
|
38
|
+
- **Link Default** (`#0073cc`): `--alias-color-text-link-default`, `--alias-color-icon-link-default`.
|
|
39
|
+
- **Link Highlight** (`#30b2ff`): `--alias-color-text-link-highlight`.
|
|
40
|
+
- **Link Active** (`#0056ab`): `--alias-color-text-link-active`.
|
|
41
|
+
- **Accent Thin** (`#e8f8ff`): `--alias-color-background-accentThin-default`. Light blue notification bg.
|
|
42
|
+
|
|
43
|
+
### Success
|
|
44
|
+
- **Success Green** (`#0aa466`): `--alias-color-text-success-default`, `--alias-color-icon-success-default`, `--alias-color-border-success-default`.
|
|
45
|
+
- **Success Highlight** (`#0fbf67`): `--alias-color-text-success-highlight`, `--alias-color-icon-success-highlight`.
|
|
46
|
+
- **Success Active** (`#078962`): `--alias-color-text-success-active`, `--alias-color-icon-success-active`.
|
|
47
|
+
- **Success Thin** (`#e4ffec`): `--alias-color-background-success-default`.
|
|
48
|
+
- **Success Thin Highlight** (`#cdfbd2`): `--alias-color-background-success-highlight`.
|
|
49
|
+
|
|
50
|
+
### Decorative (Yellow)
|
|
51
|
+
- **Decorative Yellow** (`#ffb818`): `--alias-color-icon-decorativeYellow-default`. Reviews, ratings, premium markers.
|
|
52
|
+
- **Decorative Yellow Highlight** (`#ffdc74`): Lighter yellow for hover.
|
|
53
|
+
- **Decorative Yellow Active** (`#db9611`): Darker amber for pressed.
|
|
54
|
+
|
|
55
|
+
### Text (5-tier scale)
|
|
56
|
+
- **Primary** (`#333333`): `--alias-color-text-primary-default`. Default body text and headlines.
|
|
57
|
+
- **Primary Highlight** (`#999999`): `--alias-color-text-primary-highlight`.
|
|
58
|
+
- **Primary Active** (`#222222`): `--alias-color-text-primary-active`.
|
|
59
|
+
- **Secondary** (`#666666`): `--alias-color-text-secondary-default`. Captions, metadata.
|
|
60
|
+
- **Secondary Highlight** (`#999999`): `--alias-color-text-secondary-highlight`.
|
|
61
|
+
- **Secondary Active** (`#4c4c4c`): `--alias-color-text-secondary-active`.
|
|
62
|
+
- **Disabled** (`#cccccc`): `--alias-color-text-disabled-default`.
|
|
63
|
+
- **Placeholder** (`#999999`): `--alias-color-text-placeholder-default`.
|
|
64
|
+
- **Inverse** (`#ffffff`): `--alias-color-text-inverse-default`. White text on dark surfaces.
|
|
65
|
+
|
|
66
|
+
### Background / Surface (5-tier scale)
|
|
67
|
+
- **Primary** (`#ffffff`): `--alias-color-background-primary-default`. Default page bg.
|
|
68
|
+
- **Primary Active** (`#f5f5f5`): `--alias-color-background-primary-active`. Pressed/hover state for white-bg controls.
|
|
69
|
+
- **Primary Highlight** (`#f5f5f5`): `--alias-color-background-primary-highlight`.
|
|
70
|
+
- **Secondary** (`#f5f5f5`): `--alias-color-background-secondary-default`. Grouped section bg.
|
|
71
|
+
- **Secondary Highlight** (`#e5e5e5`): `--alias-color-background-secondary-highlight`.
|
|
72
|
+
- **Tertiary** (`#333333`): `--alias-color-background-tertiary-default`. Dark surfaces (e.g., snackbar contrast).
|
|
73
|
+
- **Disabled** (`#cccccc`): `--alias-color-background-disabled-default`.
|
|
74
|
+
|
|
75
|
+
### Border / Separator
|
|
76
|
+
- **Primary** (`#cccccc`): `--alias-color-border-primary-default`. Standard component border.
|
|
77
|
+
- **Primary Highlight** (`#e5e5e5`): `--alias-color-border-primary-highlight`.
|
|
78
|
+
- **Primary Active** (`#999999`): `--alias-color-border-primary-active`.
|
|
79
|
+
- **Secondary** (`#333333`): `--alias-color-border-secondary-default`. Strong dividers.
|
|
80
|
+
- **Disabled** (`#cccccc`): `--alias-color-border-disabled-default`.
|
|
81
|
+
|
|
82
|
+
### Overlay (modal backdrops)
|
|
83
|
+
- **Weak** (`rgba(34,34,34,0.2)`): `--alias-color-overlay-weak`.
|
|
84
|
+
- **Middle** (`rgba(34,34,34,0.4)`): `--alias-color-overlay-middle`.
|
|
85
|
+
- **Mid Strong** (`rgba(34,34,34,0.6)`): `--alias-color-overlay-midStrong`.
|
|
86
|
+
- **Strong** (`rgba(34,34,34,0.8)`): `--alias-color-overlay-strong`.
|
|
87
|
+
- **Inverse Weak** (`rgba(255,255,255,0.2)`): `--alias-color-overlay-inverseWeak`. White overlay on dark surface.
|
|
88
|
+
|
|
89
|
+
### Icon (separate role from text — important for accessibility)
|
|
90
|
+
- **Primary** (`#333333`): `--alias-color-icon-primary-default`.
|
|
91
|
+
- **Secondary** (`#cccccc`): `--alias-color-icon-secondary-default`.
|
|
92
|
+
- **Tertiary** (`#666666`): `--alias-color-icon-tertiary-default`.
|
|
93
|
+
- **Inverse** (`#ffffff`): `--alias-color-icon-inverse-default`.
|
|
94
|
+
|
|
95
|
+
### System (static)
|
|
96
|
+
- **Static White** (`#ffffff`): `--alias-color-system-staticWhite-default`.
|
|
97
|
+
- **Static Black** (`#000000`): `--alias-color-system-staticBlack-default`.
|
|
98
|
+
- **Static Clear** (`rgba(255,255,255,0)`): `--alias-color-system-staticClear-default`.
|
|
99
|
+
|
|
100
|
+
## 3. Typography Rules
|
|
101
|
+
|
|
102
|
+
### Font Stack (verified live)
|
|
103
|
+
```
|
|
104
|
+
"Helvetica Neue", Arial, "Hiragino Kaku Gothic ProN Custom", "Hiragino Sans Custom", "Meiryo Custom", sans-serif
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
For non-Japanese locales the secondary stack adds Traditional Chinese support:
|
|
108
|
+
```
|
|
109
|
+
Helvetica Neue, Arial, "PingFang TC Custom", "Noto Sans TC Custom", "Microsoft JhengHei", "Hiragino Kaku Gothic ProN Custom", "Hiragino Sans Custom", "Meiryo Custom", sans-serif
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
The "Custom" suffix indicates Mercari runs optically-tuned variants of these system fonts in production — same families, adjusted spacing for marketplace UI density.
|
|
113
|
+
|
|
114
|
+
### Weights
|
|
115
|
+
- **700**: Primary CTAs, prices, badges, "Shop Now" hero CTAs, language toggles.
|
|
116
|
+
- **400**: Default body, login/signup buttons, navigation links, secondary CTAs.
|
|
117
|
+
|
|
118
|
+
Verified: primary attention CTAs (e.g., "コンテンツにスキップ" skip link) use weight 700 with bg `#ff333f` and `4px` radius. Secondary actions (login, signup, language) use weight 400.
|
|
119
|
+
|
|
120
|
+
### Size Scale
|
|
121
|
+
- **Base body**: `15px` (verified `bodySize`)
|
|
122
|
+
- **Heading scale** is application-defined (homepage uses `15-20px` for H1/H2 with weight 700)
|
|
123
|
+
- Mobile sizes step down via `--typography-*-font-size-mobile` tokens
|
|
124
|
+
|
|
125
|
+
### Conventions
|
|
126
|
+
- **No letter-spacing tweaks** — system defaults trusted.
|
|
127
|
+
- **Default line-height ~1.4** (estimated from rendered metrics).
|
|
128
|
+
- **Uppercase reserved for the "MERCARI" wordmark only.**
|
|
129
|
+
|
|
130
|
+
## 4. Component Stylings
|
|
131
|
+
|
|
132
|
+
### Buttons (verified across variants)
|
|
133
|
+
**Primary attention CTA (red)**:
|
|
134
|
+
- bg `#ff333f`, text `#ffffff`, `border-radius: 4px`, `padding: 11px 15px`, `font-weight: 700`
|
|
135
|
+
|
|
136
|
+
**Accent CTA (blue, e.g., "Shop Now")**:
|
|
137
|
+
- bg `#ffffff`, text `#0095ee`, `border-radius: 4px`, `padding: 8px 12px`, `font-weight: 700`
|
|
138
|
+
|
|
139
|
+
**Login / Signup (secondary, neutral)**:
|
|
140
|
+
- bg `#ffffff`, text `#333333`, `border-radius: 4px`, `padding: 8px`, `font-weight: 400`
|
|
141
|
+
|
|
142
|
+
**Icon button**:
|
|
143
|
+
- bg `transparent`, color `#000000` or `#333333`, `border-radius: 4px`, `padding: 4px`, `font-weight: 400`
|
|
144
|
+
|
|
145
|
+
**Language toggle**:
|
|
146
|
+
- bg `transparent`, text `#333333`, `border-radius: 4px`, `padding: 8px 16px`, `font-weight: 700`
|
|
147
|
+
|
|
148
|
+
### Cards (Product Card, Brand Card)
|
|
149
|
+
- White bg (`--alias-color-background-primary-default`)
|
|
150
|
+
- Subtle `1px solid #e0e0e0` border or no border (image-led cards)
|
|
151
|
+
- Brand thumbnails: `border-radius: 50%` (circular) — distinctive Mercari pattern for category navigation
|
|
152
|
+
- Image fills top, title + price below
|
|
153
|
+
- Price emphasis: weight 700, often in `#ff333f` (Mercari Red) for sale prices
|
|
154
|
+
|
|
155
|
+
### Search Input
|
|
156
|
+
- Full-width bar at top of page, `bg: #f5f5f5` (secondary surface), `border-radius: 4px`, dark gray placeholder `#999999`
|
|
157
|
+
- Camera search icon + magnifier icon inside the input on right
|
|
158
|
+
|
|
159
|
+
### Navigation (top header)
|
|
160
|
+
- White sticky bg, height ~50-64px
|
|
161
|
+
- Mercari wordmark + heart logo on left
|
|
162
|
+
- Search bar centered
|
|
163
|
+
- ログイン (Login), 会員登録 (Signup), notification bell, language toggle (日本語) on right
|
|
164
|
+
- Tabs row below: おすすめ, マイリスト, ゲーム, etc. — horizontal scroll on mobile
|
|
165
|
+
|
|
166
|
+
### Chips / Tabs
|
|
167
|
+
- Underline-driven active indicator (red underline `#ff333f` for active tab)
|
|
168
|
+
- Inactive tabs: text `#333333` weight 400
|
|
169
|
+
- Active tab: text `#ff333f` (or `#222222`) weight 700 with `2px` red underline
|
|
170
|
+
|
|
171
|
+
### Snackbar / Toast
|
|
172
|
+
- Dark bg (`--alias-color-background-tertiary-default: #333333`)
|
|
173
|
+
- White text (`--alias-color-text-inverse-default: #ffffff`)
|
|
174
|
+
- Z-index `--mer-z-index-snackbar: 1500`
|
|
175
|
+
|
|
176
|
+
### Modal / Dialog
|
|
177
|
+
- White surface, `border-radius: 8px`
|
|
178
|
+
- Backdrop: `--alias-color-overlay-strong: rgba(34,34,34,0.8)`
|
|
179
|
+
- Z-index `--mer-z-index-modal: 1400`
|
|
180
|
+
|
|
181
|
+
## 5. Layout Principles
|
|
182
|
+
|
|
183
|
+
### Page Structure
|
|
184
|
+
- Max width: `1440px` (`--bqHLTv`, `--gIsGsE`)
|
|
185
|
+
- Grid layout page padding: top `40px` (`--grid-layout-page-padding-top`), bottom `64px` (`--grid-layout-page-padding-bottom`), horizontal `36px` (`--grid-layout-page-padding-horizontal`)
|
|
186
|
+
- Grid gutter: `24px` (`--grid-layout-gutter`)
|
|
187
|
+
- Inner inset: `16px` (`--grid-layout-inset`)
|
|
188
|
+
|
|
189
|
+
### Spacing Tokens (semantic aliases)
|
|
190
|
+
Mercari uses Panda CSS-generated hashed token names alongside semantic aliases. Common values from CSS:
|
|
191
|
+
- `4px`, `6px`, `8px`, `12px`, `16px`, `20px`, `24px`, `28px`, `32px`, `36px`, `40px`, `44px`, `48px`, `56px`, `64px`, `80px`, `96px`, `128px`, `164px`
|
|
192
|
+
|
|
193
|
+
This is a 4dp baseline scale extended with named tokens.
|
|
194
|
+
|
|
195
|
+
### Density
|
|
196
|
+
Mercari is **commerce-density** — tight product grids with minimal card chrome, image-led visual hierarchy. The 6-column product grid on homepage uses `~190-240px` card widths with `12-16px` gutters.
|
|
197
|
+
|
|
198
|
+
## 6. Depth & Elevation
|
|
199
|
+
|
|
200
|
+
Mercari has explicit shadow tokens for floating UI:
|
|
201
|
+
|
|
202
|
+
- **Card lift** (subtle): `0px 2px 4px 0px rgba(0,0,0,.2)` (`--ljPKsT`)
|
|
203
|
+
- **Tooltip / popover**: `0px 4px 8px 0px rgba(0,0,0,.2)` (`--coocrY`)
|
|
204
|
+
- **Modal / dropdown**: `0px 8px 10px 0px rgba(0,0,0,.2)` (`--jcKRRc`)
|
|
205
|
+
- **Strong overlay**: `0px 0px 16px 0px rgba(0,0,0,.2)` (`--gQVqIQ`)
|
|
206
|
+
|
|
207
|
+
### Z-Index Hierarchy (explicit named tokens)
|
|
208
|
+
- Menu: `1100` (`--mer-z-index-menu`)
|
|
209
|
+
- Navigation top: `1200` (`--mer-z-index-navigation-top`)
|
|
210
|
+
- Navigation bottom: `1200` (`--mer-z-index-navigation-bottom`)
|
|
211
|
+
- Autocomplete: `1300` (`--mer-z-index-autocomplete`)
|
|
212
|
+
- Dialog: `1400` (`--mer-z-index-dialog`)
|
|
213
|
+
- Modal: `1400` (`--mer-z-index-modal`)
|
|
214
|
+
- Side sheet: `1400` (`--mer-z-index-side-sheet`)
|
|
215
|
+
- Information popup: `1400` (`--mer-z-index-information-popup`)
|
|
216
|
+
- Action sheet: `1400` (`--mer-z-index-action-sheet`)
|
|
217
|
+
- Snackbar: `1500` (`--mer-z-index-snackbar`)
|
|
218
|
+
- Tooltip: `1600` (`--mer-z-index-tooltip`)
|
|
219
|
+
|
|
220
|
+
### Animation
|
|
221
|
+
- Easing curves: `cubic-bezier(0.65, 0, 0.35, 1)` (sheets), `cubic-bezier(0.33, 1, 0.68, 1)` (snackbars/dialogs)
|
|
222
|
+
- Standard duration: `0.25s`
|
|
223
|
+
- Loading spinner: `1.25s` 8-step rotation
|
|
224
|
+
|
|
225
|
+
## 7. Do's and Don'ts
|
|
226
|
+
|
|
227
|
+
- **DO** use the `--alias-color-*` semantic tokens. The 681 variables cover virtually every UI surface — never hardcode hex values when an alias exists.
|
|
228
|
+
- **DON'T** invent new color values. Mercari's palette is exhaustive; if you can't find an alias, use the closest one.
|
|
229
|
+
- **DO** reserve **Mercari Red** (`#ff333f`) for the `attention` semantic — sale prices, danger actions, the brand mark, error states.
|
|
230
|
+
- **DON'T** use red for general "primary" CTAs that aren't attention-grabbing. Mercari's primary actions are often blue-accent (`#0095ee`) or neutral, not red.
|
|
231
|
+
- **DO** use weight 700 for primary CTAs and prices. Weight 400 for navigation, secondary actions, body.
|
|
232
|
+
- **DON'T** use weight 500 or 600 — they're not part of Mercari's typography rhythm.
|
|
233
|
+
- **DO** keep `border-radius: 4px` on buttons and cards. Mercari's commerce voice is sharp and functional.
|
|
234
|
+
- **DON'T** use pill-shaped or large-radius buttons — that breaks the marketplace density aesthetic.
|
|
235
|
+
- **DO** apply circular thumbnails (`border-radius: 50%`) to brand/category icons in navigation. It's a distinctive Mercari pattern.
|
|
236
|
+
- **DON'T** use shadows on flat product cards — let the white card on `#f5f5f5` secondary bg provide separation.
|
|
237
|
+
- **DO** use the locale-aware font stack with Hiragino/Meiryo "Custom" variants. The optical tuning matters for Japanese readability.
|
|
238
|
+
- **DON'T** load custom web fonts. Mercari's audience is mobile-first across slow connections; system fonts respect that.
|
|
239
|
+
- **DO** use the explicit named z-index tokens (`--mer-z-index-*`) — Mercari's stacking order is deliberate.
|
|
240
|
+
- **DON'T** use arbitrary z-index values like `9999` — that breaks the layered system.
|
|
241
|
+
|
|
242
|
+
## 8. Responsive Behavior
|
|
243
|
+
|
|
244
|
+
### Breakpoints (inferred from `--typography-*-font-size-mobile` tokens and `--vbMobileBoundaryWidth`-style patterns)
|
|
245
|
+
| Width | Behavior |
|
|
246
|
+
|---|---|
|
|
247
|
+
| Desktop `>1440px` | Centered max-width container, full grid |
|
|
248
|
+
| Desktop `1024–1440px` | 6-column product grid, full nav |
|
|
249
|
+
| Tablet `768–1024px` | 4-column product grid, condensed nav |
|
|
250
|
+
| Mobile `<768px` | 2-column grid, hamburger nav, sticky bottom navigation |
|
|
251
|
+
|
|
252
|
+
### Touch & Mobile
|
|
253
|
+
- Mobile bottom navigation: tab bar with icon + label
|
|
254
|
+
- Form heights: small `36px`, medium ~`48px`, large ~`56px` (estimated from spacing tokens)
|
|
255
|
+
- Touch targets: minimum `44px` per Apple HIG conventions
|
|
256
|
+
|
|
257
|
+
### Image Behavior
|
|
258
|
+
- Product images: square aspect ratio, `4px` corner radius (matches button/card scheme)
|
|
259
|
+
- Brand thumbnails: circular (`50%` radius)
|
|
260
|
+
- Lazy-load via Next.js Image equivalent
|
|
261
|
+
- Placeholder skeleton uses `--color-shimmer-bg` / `--color-shimmer-fg` pattern
|
|
262
|
+
|
|
263
|
+
## 9. Agent Prompt Guide
|
|
264
|
+
|
|
265
|
+
### Quick Color Reference
|
|
266
|
+
- **Mercari Red** (attention, sale, brand): `#ff333f` (`--alias-color-background-attention-default`)
|
|
267
|
+
- Accent Blue (links, info): `#0095ee`
|
|
268
|
+
- Success Green: `#0aa466`
|
|
269
|
+
- Decorative Yellow (ratings): `#ffb818`
|
|
270
|
+
- Primary text: `#333333`
|
|
271
|
+
- Secondary text: `#666666`
|
|
272
|
+
- Page bg: `#ffffff`
|
|
273
|
+
- Secondary bg: `#f5f5f5`
|
|
274
|
+
- Border default: `#cccccc`
|
|
275
|
+
- Inverse text: `#ffffff` (on dark surfaces)
|
|
276
|
+
|
|
277
|
+
### Example Component Prompts
|
|
278
|
+
- "Create a Mercari-style attention CTA: bg `#ff333f`, white text, `border-radius: 4px`, `padding: 11px 15px`, `font-weight: 700`. Hover: bg darkens to `#ff6574`. Active: `#e32b36`. Use this for danger actions, sale CTAs, the brand-mark button — never for generic 'primary' actions (those use accent blue)."
|
|
279
|
+
- "Build a Mercari product card: white bg, no border or `1px solid #e0e0e0`, `4px` radius. Image fills top 70% in `4px` rounded square. Title in 14px weight 400 `#333333` (2-line clamp), price below in 16px weight 700 `#333333` for normal price OR `#ff333f` for sale price. Optional sale badge in top-left corner using `#ff333f` bg + white text + 2px radius."
|
|
280
|
+
- "Design a Mercari brand thumbnail (category icon): circular `border-radius: 50%`, ~64-80px diameter, white bg with `1px solid #f5f5f5` border, brand image centered. Below: brand name in 12px weight 400 `#333333`, max 1 line ellipsis."
|
|
281
|
+
- "Create a Mercari search bar: full-width, bg `#f5f5f5` (secondary surface), `border-radius: 4px`, padding 12-16px, placeholder `#999999`. Right side: camera icon + magnifier icon, both `#666666`. On focus: bg shifts to white, border becomes `1px solid #cccccc`."
|
|
282
|
+
- "Build a Mercari snackbar: bg `#333333` (`--alias-color-background-tertiary-default`), white text, `border-radius: 4px`, `padding: 12px 16px`, fixed at bottom with z-index 1500. Slides in via `cubic-bezier(0.33, 1, 0.68, 1)` over `0.25s`. Auto-dismiss after 3-4s."
|
|
283
|
+
|
|
284
|
+
### Iteration Guide
|
|
285
|
+
1. **Always reference `--alias-color-*` tokens, not raw hex**. Mercari's 681 vars are the canonical source.
|
|
286
|
+
2. **Mercari Red (`#ff333f`) is the `attention` role** — destructive, sale-emphasis, brand mark. Not a default primary.
|
|
287
|
+
3. **`border-radius: 4px`** is the workhorse. Cards, buttons, badges. Brand thumbnails get `50%` (circular).
|
|
288
|
+
4. **Weight 700 for prices and primary CTAs**, weight 400 for everything else. No middle weights.
|
|
289
|
+
5. **Use the locale-aware font stack with Hiragino/Meiryo "Custom" variants**. Optical tuning matters.
|
|
290
|
+
6. **Z-index uses named tokens** (`--mer-z-index-*`) — never arbitrary numbers.
|
|
291
|
+
7. **Animation easing `cubic-bezier(0.65, 0, 0.35, 1)` for sheets**, `cubic-bezier(0.33, 1, 0.68, 1)` for snackbars/dialogs. Duration `0.25s`.
|
|
292
|
+
8. **Surface contrast** (`#ffffff` cards on `#f5f5f5` page bg) handles separation — minimal shadow needed on flat layouts.
|
|
293
|
+
9. **Body text `#333333`, secondary `#666666`, tertiary `#999999`** — three-tier text hierarchy across the entire system.
|
|
294
|
+
10. **Page padding 36px horizontal, 40px top, 64px bottom**, with `24px` gutter — the layout grid is explicit.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Mercari Inspired Design System
|
|
2
|
+
|
|
3
|
+
[DESIGN.md](./DESIGN.md) extracted from the public [Mercari](https://jp.mercari.com) production site, which **exposes 681 semantic CSS custom properties on `:root`** (the `--alias-color-*` namespace). Tokens were extracted directly via Playwright MCP at 1440px viewport on 2026-04-17. Mercari Engineering also publishes extensive design system writeups on Medium and their tech blog. See [_research.md](./_research.md) for source detail and confidence per item.
|
|
4
|
+
|
|
5
|
+
## Files
|
|
6
|
+
|
|
7
|
+
| File | Description |
|
|
8
|
+
|------|-------------|
|
|
9
|
+
| `DESIGN.md` | Complete design system documentation (9 sections) |
|
|
10
|
+
| `_research.md` | Sources used, extraction methodology, and confidence per item |
|
|
11
|
+
|
|
12
|
+
Use [DESIGN.md](./DESIGN.md) as a reference for AI agents (Claude, Cursor, Stitch) to generate UI that looks like the Mercari design language — Japan's largest C2C marketplace with Mercari Red (`#ff333f`) as the `attention` semantic, comprehensive `--alias-color-*` token system, Japanese-first font stack with Hiragino "Custom" variants, sharp `4px` button radii, and explicit z-index hierarchy (1100-1600 named layers).
|
|
Binary file
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Research Sources for Mercari
|
|
2
|
+
|
|
3
|
+
추출 일자: 2026-04-17
|
|
4
|
+
스킬: `omd:add-reference` (5-tier methodology)
|
|
5
|
+
입력 URL: `https://jp.mercari.com`
|
|
6
|
+
|
|
7
|
+
## Tier 1 — Official Design System
|
|
8
|
+
|
|
9
|
+
**Status: EFFECTIVELY FOUND via runtime token exposure (681 CSS variables on `:root`)**
|
|
10
|
+
|
|
11
|
+
Mercari does not host a public documentation site comparable to Material Design, but the production app **exposes 681 semantic CSS custom properties on `:root`**, organized into a consistent `--alias-color-{property}-{role}-{state}` namespace. Extracted via `getComputedStyle(document.documentElement)` using Playwright MCP. This is functionally equivalent to a published design tokens file.
|
|
12
|
+
|
|
13
|
+
Token namespaces discovered:
|
|
14
|
+
- `--alias-color-background-{role}-{state}` — surface tokens (primary, secondary, tertiary, attention, attentionThin, accent, accentThin, success, disabled)
|
|
15
|
+
- `--alias-color-text-{role}-{state}` — foreground tokens (primary, secondary, accent, attention, success, disabled, placeholder, link, inverse, hint)
|
|
16
|
+
- `--alias-color-border-{role}-{state}` — divider system
|
|
17
|
+
- `--alias-color-icon-{role}-{state}` — icon foreground
|
|
18
|
+
- `--alias-color-overlay-{strength}` — modal backdrops (weak/middle/midStrong/strong + inverse variants)
|
|
19
|
+
- `--alias-color-system-static{Tone}-default` — fixed white/black/clear (theme-independent)
|
|
20
|
+
- `--mer-z-index-{layer}` — explicit z-index hierarchy (1100-1600)
|
|
21
|
+
- `--grid-layout-*` — page padding, gutter, inset
|
|
22
|
+
- `--component-*` — per-component overrides (button, radio, avatar, skeleton, etc.)
|
|
23
|
+
- `--typography-{role}-{property}` and `--fonts-{role}-{property}` — type scale (mostly hashed token names from Panda CSS, but semantic aliases also present)
|
|
24
|
+
|
|
25
|
+
Additional public sources:
|
|
26
|
+
- [Mercari Engineering blog — design system tag](https://engineering.mercari.com/en/blog/tag/design-system/) — multiple posts on DS architecture
|
|
27
|
+
- [GitHub: mercari/fractal](https://github.com/mercari/fractal) — open-source UI patterns library
|
|
28
|
+
- [Building Mercari's Design System (Medium)](https://medium.com/mercari-engineering/building-mercaris-design-system-b6789043053d)
|
|
29
|
+
- [The Story Behind Mercari Design System Rebuild (2025)](https://engineering.mercari.com/en/blog/entry/20250624-the-story-behind-mercari-design-system-rebuild/)
|
|
30
|
+
|
|
31
|
+
## Tier 2 — Brand / Press Kit
|
|
32
|
+
|
|
33
|
+
Not investigated separately; runtime tokens were sufficient.
|
|
34
|
+
|
|
35
|
+
## Tier 3 — Engineering / Design Blog
|
|
36
|
+
|
|
37
|
+
[engineering.mercari.com/en/blog/tag/design-system](https://engineering.mercari.com/en/blog/tag/design-system/) — extensive English-language coverage of Mercari Design System architecture and rebuild rationale. Pulled context but not specific token values.
|
|
38
|
+
|
|
39
|
+
## Tier 4 — Live Site Recon
|
|
40
|
+
|
|
41
|
+
**Method**: Playwright MCP at viewport 1440×900 on `https://jp.mercari.com/`.
|
|
42
|
+
|
|
43
|
+
### Verified at runtime
|
|
44
|
+
- Body bg: `rgb(255, 255, 255)` = `#ffffff` (matches `--alias-color-background-primary-default`)
|
|
45
|
+
- Body text: `rgb(51, 51, 51)` = `#333333` (matches `--alias-color-text-primary-default`)
|
|
46
|
+
- Body font: `Helvetica Neue, Arial, "Hiragino Kaku Gothic ProN Custom", "Hiragino Sans Custom", "Meiryo Custom", sans-serif`
|
|
47
|
+
- Body size: `15px`
|
|
48
|
+
- 681 `:root` CSS custom properties enumerated
|
|
49
|
+
- Sample buttons confirm:
|
|
50
|
+
- Attention CTA: bg `#ff333f`, white text, `4px` radius, padding `11px 15px`, weight 700
|
|
51
|
+
- Accent CTA (Shop Now): bg `#ffffff`, text `#0095ee`, `4px` radius, weight 700
|
|
52
|
+
- Login/Signup: bg `#ffffff`, text `#333333`, `4px` radius, weight 400
|
|
53
|
+
|
|
54
|
+
Screenshot saved: `_research/home-1440px.png`
|
|
55
|
+
|
|
56
|
+
## Confidence
|
|
57
|
+
|
|
58
|
+
### High Confidence (extracted directly from `:root` CSS variables)
|
|
59
|
+
- All `--alias-color-*` values in §2
|
|
60
|
+
- Z-index hierarchy (`--mer-z-index-*`) in §6
|
|
61
|
+
- Grid layout values (`--grid-layout-*`) in §5
|
|
62
|
+
- Verified live: body bg/text/font, button variants
|
|
63
|
+
|
|
64
|
+
### Medium Confidence
|
|
65
|
+
- Hue family interpretations (e.g., "yellow is for ratings/reviews") — inferred from token names, not verified per-component
|
|
66
|
+
- Animation easing curves — extracted from CSS but specific component bindings not enumerated
|
|
67
|
+
- Spacing scale tokens — extracted as values but specific semantic uses inferred
|
|
68
|
+
|
|
69
|
+
### Inferred (verify before relying on)
|
|
70
|
+
- "Mercari Red is exclusively for attention/danger" — token naming supports this; product-level usage not exhaustively verified
|
|
71
|
+
- Mobile breakpoints — inferred from presence of `--typography-*-font-size-mobile` tokens; exact px values not extracted
|
|
72
|
+
|
|
73
|
+
## Notes
|
|
74
|
+
- Mercari's design system uses **Panda CSS** (the `--made-with-panda: "🐼"` token confirms it). Token names are hashed in production but semantic aliases (`--alias-color-*`) provide a stable layer.
|
|
75
|
+
- The "Custom" suffix on Hiragino/Meiryo fonts indicates Mercari deploys optically-tuned variants — same families, adjusted spacing.
|
|
76
|
+
- Mercari is a textbook example of mature semantic token architecture for a Japanese-market commerce platform; the system is internal but exposed on `:root` for direct consumption.
|
|
77
|
+
- This reference may drift if Mercari ships a token rename. Re-running `omd:add-reference https://jp.mercari.com` periodically captures updates.
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
# Design System Inspiration of MiniMax
|
|
2
|
+
|
|
3
|
+
## 1. Visual Theme & Atmosphere
|
|
4
|
+
|
|
5
|
+
MiniMax's website is a clean, product-showcase platform for a Chinese AI technology company that bridges consumer-friendly appeal with technical credibility. The design language is predominantly white-space-driven with a light, airy feel — pure white backgrounds (`#ffffff`) dominate, letting colorful product cards and AI model illustrations serve as the visual anchors. The overall aesthetic sits at the intersection of Apple's product marketing clarity and a playful, rounded design language that makes AI technology feel approachable.
|
|
6
|
+
|
|
7
|
+
The typography system is notably multi-font: DM Sans serves as the primary UI workhorse, Outfit handles display headings with geometric elegance, Poppins appears for mid-tier headings, and Roboto handles data-heavy contexts. This variety reflects a brand in rapid growth — each font serves a distinct communicative purpose rather than competing for attention. The hero heading at 80px weight 500 in both DM Sans and Outfit with a tight 1.10 line-height creates a bold but not aggressive opening statement.
|
|
8
|
+
|
|
9
|
+
What makes MiniMax distinctive is its pill-button geometry (9999px radius) for navigation and primary actions, combined with softer 8px–24px radiused cards for product showcases. The product cards themselves are richly colorful — vibrant gradients in pink, purple, orange, and blue — creating a "gallery of AI capabilities" feel. Against the white canvas, these colorful cards pop like app icons on a phone home screen, making each AI model/product feel like a self-contained creative tool.
|
|
10
|
+
|
|
11
|
+
**Key Characteristics:**
|
|
12
|
+
- White-dominant layout with colorful product card accents
|
|
13
|
+
- Multi-font system: DM Sans (UI), Outfit (display), Poppins (mid-tier), Roboto (data)
|
|
14
|
+
- Pill buttons (9999px radius) for primary navigation and CTAs
|
|
15
|
+
- Generous rounded cards (20px–24px radius) for product showcases
|
|
16
|
+
- Brand blue spectrum: from `#1456f0` (brand-6) through `#3b82f6` (primary-500) to `#60a5fa` (light)
|
|
17
|
+
- Brand pink (`#ea5ec1`) as secondary accent
|
|
18
|
+
- Near-black text (`#222222`, `#18181b`) on white backgrounds
|
|
19
|
+
- Purple-tinted shadows (`rgba(44, 30, 116, 0.16)`) creating subtle brand-colored depth
|
|
20
|
+
- Dark footer section (`#181e25`) with product/company links
|
|
21
|
+
|
|
22
|
+
## 2. Color Palette & Roles
|
|
23
|
+
|
|
24
|
+
### Brand Primary
|
|
25
|
+
- **Brand Blue** (`#1456f0`): `--brand-6`, primary brand identity color
|
|
26
|
+
- **Sky Blue** (`#3daeff`): `--col-brand00`, lighter brand variant for accents
|
|
27
|
+
- **Brand Pink** (`#ea5ec1`): `--col-brand02`, secondary brand accent
|
|
28
|
+
|
|
29
|
+
### Blue Scale (Primary)
|
|
30
|
+
- **Primary 200** (`#bfdbfe`): `--color-primary-200`, light blue backgrounds
|
|
31
|
+
- **Primary Light** (`#60a5fa`): `--color-primary-light`, active states, highlights
|
|
32
|
+
- **Primary 500** (`#3b82f6`): `--color-primary-500`, standard blue actions
|
|
33
|
+
- **Primary 600** (`#2563eb`): `--color-primary-600`, hover states
|
|
34
|
+
- **Primary 700** (`#1d4ed8`): `--color-primary-700`, pressed/active states
|
|
35
|
+
- **Brand Deep** (`#17437d`): `--brand-3`, deep blue for emphasis
|
|
36
|
+
|
|
37
|
+
### Text Colors
|
|
38
|
+
- **Near Black** (`#222222`): `--col-text00`, primary text
|
|
39
|
+
- **Dark** (`#18181b`): Button text, headings
|
|
40
|
+
- **Charcoal** (`#181e25`): Dark surface text, footer background
|
|
41
|
+
- **Dark Gray** (`#45515e`): `--col-text04`, secondary text
|
|
42
|
+
- **Mid Gray** (`#8e8e93`): Tertiary text, muted labels
|
|
43
|
+
- **Light Gray** (`#5f5f5f`): `--brand-2`, helper text
|
|
44
|
+
|
|
45
|
+
### Surface & Background
|
|
46
|
+
- **Pure White** (`#ffffff`): `--col-bg13`, primary background
|
|
47
|
+
- **Light Gray** (`#f0f0f0`): Secondary button backgrounds
|
|
48
|
+
- **Glass White** (`hsla(0, 0%, 100%, 0.4)`): `--fill-bg-white`, frosted glass overlay
|
|
49
|
+
- **Border Light** (`#f2f3f5`): Subtle section dividers
|
|
50
|
+
- **Border Gray** (`#e5e7eb`): Component borders
|
|
51
|
+
|
|
52
|
+
### Semantic
|
|
53
|
+
- **Success Background** (`#e8ffea`): `--success-bg`, positive state backgrounds
|
|
54
|
+
|
|
55
|
+
### Shadows
|
|
56
|
+
- **Standard** (`rgba(0, 0, 0, 0.08) 0px 4px 6px`): Default card shadow
|
|
57
|
+
- **Soft Glow** (`rgba(0, 0, 0, 0.08) 0px 0px 22.576px`): Ambient soft shadow
|
|
58
|
+
- **Brand Purple** (`rgba(44, 30, 116, 0.16) 0px 0px 15px`): Brand-tinted glow
|
|
59
|
+
- **Brand Purple Offset** (`rgba(44, 30, 116, 0.11) 6.5px 2px 17.5px`): Directional brand glow
|
|
60
|
+
- **Card Elevation** (`rgba(36, 36, 36, 0.08) 0px 12px 16px -4px`): Lifted card shadow
|
|
61
|
+
|
|
62
|
+
## 3. Typography Rules
|
|
63
|
+
|
|
64
|
+
### Font Families
|
|
65
|
+
- **Primary UI**: `DM Sans`, with fallbacks: `Helvetica Neue, Helvetica, Arial`
|
|
66
|
+
- **Display**: `Outfit`, with fallbacks: `Helvetica Neue, Helvetica, Arial`
|
|
67
|
+
- **Mid-tier**: `Poppins`
|
|
68
|
+
- **Data/Technical**: `Roboto`, with fallbacks: `Helvetica Neue, Helvetica, Arial`
|
|
69
|
+
|
|
70
|
+
### Hierarchy
|
|
71
|
+
|
|
72
|
+
| Role | Font | Size | Weight | Line Height | Notes |
|
|
73
|
+
|------|------|------|--------|-------------|-------|
|
|
74
|
+
| Display Hero | DM Sans / Outfit | 80px (5.00rem) | 500 | 1.10 (tight) | Hero headlines |
|
|
75
|
+
| Section Heading | Outfit | 31px (1.94rem) | 600 | 1.50 | Feature section titles |
|
|
76
|
+
| Section Heading Alt | Roboto / DM Sans | 32px (2.00rem) | 600 | 0.88 (tight) | Compact headers |
|
|
77
|
+
| Card Title | Outfit | 28px (1.75rem) | 500–600 | 1.71 (relaxed) | Product card headings |
|
|
78
|
+
| Sub-heading | Poppins | 24px (1.50rem) | 500 | 1.50 | Mid-tier headings |
|
|
79
|
+
| Feature Label | Poppins | 18px (1.13rem) | 500 | 1.50 | Feature names |
|
|
80
|
+
| Body Large | DM Sans | 20px (1.25rem) | 500 | 1.50 | Emphasized body |
|
|
81
|
+
| Body | DM Sans | 16px (1.00rem) | 400–500 | 1.50 | Standard body text |
|
|
82
|
+
| Body Bold | DM Sans | 16px (1.00rem) | 700 | 1.50 | Strong emphasis |
|
|
83
|
+
| Nav/Link | DM Sans | 14px (0.88rem) | 400–500 | 1.50 | Navigation, links |
|
|
84
|
+
| Button Small | DM Sans | 13px (0.81rem) | 600 | 1.50 | Compact buttons |
|
|
85
|
+
| Caption | DM Sans / Poppins | 13px (0.81rem) | 400 | 1.70 (relaxed) | Metadata |
|
|
86
|
+
| Small Label | DM Sans | 12px (0.75rem) | 500–600 | 1.25–1.50 | Tags, badges |
|
|
87
|
+
| Micro | DM Sans / Outfit | 10px (0.63rem) | 400–500 | 1.50–1.80 | Tiny annotations |
|
|
88
|
+
|
|
89
|
+
### Principles
|
|
90
|
+
- **Multi-font purpose**: DM Sans = UI workhorse (body, nav, buttons); Outfit = geometric display (headings, product names); Poppins = friendly mid-tier (sub-headings, features); Roboto = technical/data contexts.
|
|
91
|
+
- **Universal 1.50 line-height**: The overwhelming majority of text uses 1.50 line-height, creating a consistent reading rhythm regardless of font or size. Exceptions: display (1.10 tight) and some captions (1.70 relaxed).
|
|
92
|
+
- **Weight 500 as default emphasis**: Most headings use 500 (medium) rather than bold, creating a modern, approachable tone. 600 for section titles, 700 reserved for strong emphasis.
|
|
93
|
+
- **Compact hierarchy**: The size scale jumps from 80px display straight to 28–32px section, then 16–20px body — a deliberate compression that keeps the visual hierarchy feeling efficient.
|
|
94
|
+
|
|
95
|
+
## 4. Component Stylings
|
|
96
|
+
|
|
97
|
+
### Buttons
|
|
98
|
+
|
|
99
|
+
**Pill Primary Dark**
|
|
100
|
+
- Background: `#181e25`
|
|
101
|
+
- Text: `#ffffff`
|
|
102
|
+
- Padding: 11px 20px
|
|
103
|
+
- Radius: 8px
|
|
104
|
+
- Use: Primary CTA ("Get Started", "Learn More")
|
|
105
|
+
|
|
106
|
+
**Pill Nav**
|
|
107
|
+
- Background: `rgba(0, 0, 0, 0.05)` (subtle tint)
|
|
108
|
+
- Text: `#18181b`
|
|
109
|
+
- Radius: 9999px (full pill)
|
|
110
|
+
- Use: Navigation tabs, filter toggles
|
|
111
|
+
|
|
112
|
+
**Pill White**
|
|
113
|
+
- Background: `#ffffff`
|
|
114
|
+
- Text: `rgba(24, 30, 37, 0.8)`
|
|
115
|
+
- Radius: 9999px
|
|
116
|
+
- Opacity: 0.5 (default state)
|
|
117
|
+
- Use: Secondary nav, inactive tabs
|
|
118
|
+
|
|
119
|
+
**Secondary Light**
|
|
120
|
+
- Background: `#f0f0f0`
|
|
121
|
+
- Text: `#333333`
|
|
122
|
+
- Padding: 11px 20px
|
|
123
|
+
- Radius: 8px
|
|
124
|
+
- Use: Secondary actions
|
|
125
|
+
|
|
126
|
+
### Product Cards
|
|
127
|
+
- Background: Vibrant gradients (pink/purple/orange/blue)
|
|
128
|
+
- Radius: 20px–24px (generous rounding)
|
|
129
|
+
- Shadow: `rgba(44, 30, 116, 0.16) 0px 0px 15px` (brand purple glow)
|
|
130
|
+
- Content: Product name, model version, descriptive text
|
|
131
|
+
- Each card has its own color palette matching the product identity
|
|
132
|
+
|
|
133
|
+
### AI Product Cards (Matrix)
|
|
134
|
+
- Background: white with subtle shadow
|
|
135
|
+
- Radius: 13px–16px
|
|
136
|
+
- Shadow: `rgba(0, 0, 0, 0.08) 0px 4px 6px`
|
|
137
|
+
- Icon/illustration centered above product name
|
|
138
|
+
- Product name in DM Sans 14–16px weight 500
|
|
139
|
+
|
|
140
|
+
### Links
|
|
141
|
+
- **Primary**: `#18181b` or `#181e25`, underline on dark text
|
|
142
|
+
- **Secondary**: `#8e8e93`, muted for less emphasis
|
|
143
|
+
- **On Dark**: `rgba(255, 255, 255, 0.8)` for footer and dark sections
|
|
144
|
+
|
|
145
|
+
### Navigation
|
|
146
|
+
- Clean horizontal nav on white background
|
|
147
|
+
- MiniMax logo left-aligned (red accent in logo)
|
|
148
|
+
- DM Sans 14px weight 500 for nav items
|
|
149
|
+
- Pill-shaped active indicators (9999px radius)
|
|
150
|
+
- "Login" text link, minimal right-side actions
|
|
151
|
+
- Sticky header behavior
|
|
152
|
+
|
|
153
|
+
## 5. Layout Principles
|
|
154
|
+
|
|
155
|
+
### Spacing System
|
|
156
|
+
- Base unit: 8px
|
|
157
|
+
- Scale: 1px, 2px, 4px, 6px, 8px, 10px, 11px, 14px, 16px, 24px, 32px, 40px, 50px, 64px, 80px
|
|
158
|
+
|
|
159
|
+
### Grid & Container
|
|
160
|
+
- Max content width centered on page
|
|
161
|
+
- Product card grids: horizontal scroll or 3–4 column layout
|
|
162
|
+
- Full-width white sections with contained content
|
|
163
|
+
- Dark footer at full-width
|
|
164
|
+
|
|
165
|
+
### Breakpoints
|
|
166
|
+
| Name | Width | Key Changes |
|
|
167
|
+
|------|-------|-------------|
|
|
168
|
+
| Mobile | <768px | Single column, stacked cards |
|
|
169
|
+
| Tablet | 768–1024px | 2-column grids |
|
|
170
|
+
| Desktop | >1024px | Full layout, horizontal card scrolls |
|
|
171
|
+
|
|
172
|
+
### Whitespace Philosophy
|
|
173
|
+
- **Gallery spacing**: Products are presented like gallery items with generous white space between cards, letting each AI model breathe as its own showcase.
|
|
174
|
+
- **Section rhythm**: Large vertical gaps (64px–80px) between major sections create distinct "chapters" of content.
|
|
175
|
+
- **Card breathing**: Product cards use internal padding of 16px–24px with ample whitespace around text.
|
|
176
|
+
|
|
177
|
+
### Border Radius Scale
|
|
178
|
+
- Minimal (4px): Small tags, micro badges
|
|
179
|
+
- Standard (8px): Buttons, small cards
|
|
180
|
+
- Comfortable (11px–13px): Medium cards, panels
|
|
181
|
+
- Generous (16px–20px): Large product cards
|
|
182
|
+
- Large (22px–24px): Hero product cards, major containers
|
|
183
|
+
- Pill (30px–32px): Badge pills, rounded panels
|
|
184
|
+
- Full (9999px): Buttons, nav tabs
|
|
185
|
+
|
|
186
|
+
## 6. Depth & Elevation
|
|
187
|
+
|
|
188
|
+
| Level | Treatment | Use |
|
|
189
|
+
|-------|-----------|-----|
|
|
190
|
+
| Flat (Level 0) | No shadow | White background, text blocks |
|
|
191
|
+
| Subtle (Level 1) | `rgba(0, 0, 0, 0.08) 0px 4px 6px` | Standard cards, containers |
|
|
192
|
+
| Ambient (Level 2) | `rgba(0, 0, 0, 0.08) 0px 0px 22.576px` | Soft glow around elements |
|
|
193
|
+
| Brand Glow (Level 3) | `rgba(44, 30, 116, 0.16) 0px 0px 15px` | Featured product cards |
|
|
194
|
+
| Elevated (Level 4) | `rgba(36, 36, 36, 0.08) 0px 12px 16px -4px` | Lifted cards, hover states |
|
|
195
|
+
|
|
196
|
+
**Shadow Philosophy**: MiniMax uses a distinctive purple-tinted shadow (`rgba(44, 30, 116, ...)`) for featured elements, creating a subtle brand-color glow that connects the shadow system to the blue brand identity. Standard shadows use neutral black but at low opacity (0.08), keeping everything feeling light and airy. The directional shadow variant (6.5px offset) adds dimensional interest to hero product cards.
|
|
197
|
+
|
|
198
|
+
## 7. Do's and Don'ts
|
|
199
|
+
|
|
200
|
+
### Do
|
|
201
|
+
- Use white as the dominant background — let product cards provide the color
|
|
202
|
+
- Apply pill radius (9999px) for navigation tabs and toggle buttons
|
|
203
|
+
- Use generous border radius (20px–24px) for product showcase cards
|
|
204
|
+
- Employ the purple-tinted shadow for featured/hero product cards
|
|
205
|
+
- Keep body text at DM Sans weight 400–500 — heavier weights for buttons only
|
|
206
|
+
- Use Outfit for display headings, DM Sans for everything functional
|
|
207
|
+
- Maintain the universal 1.50 line-height across body text
|
|
208
|
+
- Let colorful product illustrations/gradients serve as the primary visual interest
|
|
209
|
+
|
|
210
|
+
### Don't
|
|
211
|
+
- Don't add colored backgrounds to main content sections — white is structural
|
|
212
|
+
- Don't use sharp corners (0–4px radius) on product cards — the rounded aesthetic is core
|
|
213
|
+
- Don't apply the brand pink (`#ea5ec1`) to text or buttons — it's for logo and decorative accents only
|
|
214
|
+
- Don't mix more than one display font per section (Outfit OR Poppins, not both)
|
|
215
|
+
- Don't use weight 700 for headings — 500–600 is the range, 700 is reserved for strong emphasis in body text
|
|
216
|
+
- Don't darken shadows beyond 0.16 opacity — the light, airy feel requires restraint
|
|
217
|
+
- Don't use Roboto for headings — it's the data/technical context font only
|
|
218
|
+
|
|
219
|
+
## 8. Responsive Behavior
|
|
220
|
+
|
|
221
|
+
### Breakpoints
|
|
222
|
+
| Name | Width | Key Changes |
|
|
223
|
+
|------|-------|-------------|
|
|
224
|
+
| Mobile | <768px | Single column, stacked product cards, hamburger nav |
|
|
225
|
+
| Tablet | 768–1024px | 2-column product grids, condensed spacing |
|
|
226
|
+
| Desktop | >1024px | Full horizontal card layouts, expanded spacing |
|
|
227
|
+
|
|
228
|
+
### Collapsing Strategy
|
|
229
|
+
- Hero: 80px → responsive scaling to ~40px on mobile
|
|
230
|
+
- Product card grid: horizontal scroll → 2-column → single column stacked
|
|
231
|
+
- Navigation: horizontal → hamburger menu
|
|
232
|
+
- Footer: multi-column → stacked sections
|
|
233
|
+
- Spacing: 64–80px gaps → 32–40px on mobile
|
|
234
|
+
|
|
235
|
+
## 9. Agent Prompt Guide
|
|
236
|
+
|
|
237
|
+
### Quick Color Reference
|
|
238
|
+
- Background: `#ffffff` (primary), `#181e25` (dark/footer)
|
|
239
|
+
- Text: `#222222` (primary), `#45515e` (secondary), `#8e8e93` (muted)
|
|
240
|
+
- Brand Blue: `#1456f0` (brand), `#3b82f6` (primary-500), `#2563eb` (hover)
|
|
241
|
+
- Brand Pink: `#ea5ec1` (accent only)
|
|
242
|
+
- Borders: `#e5e7eb`, `#f2f3f5`
|
|
243
|
+
|
|
244
|
+
### Example Component Prompts
|
|
245
|
+
- "Create a hero section on white background. Headline at 80px Outfit weight 500, line-height 1.10, near-black (#222222) text. Sub-text at 16px DM Sans weight 400, line-height 1.50, #45515e. Dark CTA button (#181e25, 8px radius, 11px 20px padding, white text)."
|
|
246
|
+
- "Design a product card grid: white cards with 20px border-radius, shadow rgba(44,30,116,0.16) 0px 0px 15px. Product name at 28px Outfit weight 600. Internal gradient background for the product illustration area."
|
|
247
|
+
- "Build navigation bar: white background, DM Sans 14px weight 500 for links, #18181b text. Pill-shaped active tab (9999px radius, rgba(0,0,0,0.05) background). MiniMax logo left-aligned."
|
|
248
|
+
- "Create an AI product matrix: 4-column grid of cards with 13px radius, subtle shadow rgba(0,0,0,0.08) 0px 4px 6px. Centered icon above product name in DM Sans 16px weight 500."
|
|
249
|
+
- "Design footer on dark (#181e25) background. Product links in DM Sans 14px, rgba(255,255,255,0.8). Multi-column layout."
|
|
250
|
+
|
|
251
|
+
### Iteration Guide
|
|
252
|
+
1. Start with white — color comes from product cards and illustrations only
|
|
253
|
+
2. Pill buttons (9999px) for nav/tabs, standard radius (8px) for CTA buttons
|
|
254
|
+
3. Purple-tinted shadows for featured cards, neutral shadows for everything else
|
|
255
|
+
4. DM Sans handles 70% of text — Outfit is display-only, Poppins is mid-tier only
|
|
256
|
+
5. Keep weights moderate (500–600 for headings) — the brand tone is confident but approachable
|
|
257
|
+
6. Large radius cards (20–24px) for products, smaller radius (8–13px) for UI elements
|