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,302 @@
|
|
|
1
|
+
# Design System Inspiration of Dcard
|
|
2
|
+
|
|
3
|
+
## 1. Visual Theme & Atmosphere
|
|
4
|
+
|
|
5
|
+
Dcard is Taiwan's largest anonymous social platform — and its design system is an exemplar of **Material Design adapted for East-Asian forum culture**. The page chrome is wrapped in a deep teal-navy (`#00324e`) header bar that frames a **clean light-gray content surface** (`#f2f2f2`), inside which posts sit on **pure white cards** (`#ffffff`). This editorial framing — dark exterior, clean interior — distinguishes Dcard from the all-light Western social platforms (Reddit, Facebook) and the all-dark gamer-chic alternatives. It feels closer to a curated digital magazine than an open feed.
|
|
6
|
+
|
|
7
|
+
Typography is **Roboto-led** with comprehensive Traditional Chinese fallbacks (`Roboto, "Helvetica Neue", Helvetica, Arial, "PingFang TC", 黑體-繁, "Heiti TC", 蘋果儷中黑, "Apple LiGothic Medium", 微軟正黑體, "Microsoft JhengHei"`). Headlines use **weight 500 (medium)**, not 700 — a Material Design convention that creates hierarchy through subtle weight shifts and color (`rgba(0,0,0,0.85)` for primary text). The typography scale is exhaustive: 4 headline tiers (32/28/24/20px), title (18px/600), 2 subtitles (16/14px/500), 2 body sizes (16/14px/400), and 2 caption sizes (12/10px/500).
|
|
8
|
+
|
|
9
|
+
What truly distinguishes Dcard is the **breadth of its semantic token system**. The site exposes 200+ CSS custom properties on `:root`, organized into clear namespaces: `--color-dcard-*` for brand, `--color-state-*` for status, `--color-text-*` for foreground, `--color-bg-*` for surfaces, `--color-gender-*` for forum-specific identity colors (a unique reflection of Dcard's gender-tagged posting culture), `--shadow-level-1` through `--shadow-level-5` for elevation, `--vars-*` for layout sizing, and `--animations-*` for motion. This isn't an internal-only design system — it's a public, semantically-named token layer that any agent can read directly from the live site.
|
|
10
|
+
|
|
11
|
+
**Key Characteristics:**
|
|
12
|
+
- Roboto-led typography stack with full Traditional Chinese (`PingFang TC`, `Heiti TC`, `微軟正黑體`) fallbacks
|
|
13
|
+
- **Weight 500 (medium)** as the headline default — Material Design convention, not bold-700
|
|
14
|
+
- 200+ semantic CSS custom properties exposed on `:root` (effectively a public design system)
|
|
15
|
+
- Deep teal-navy header (`#00324e`) framing a light-gray content area (`#f2f2f2`) with white post cards
|
|
16
|
+
- Blue-monochrome brand palette: primary `#3397cf`, secondary `#006aa6`, tertiary `#00324e`
|
|
17
|
+
- 5-level Material elevation shadow system (`--shadow-level-1` to `--shadow-level-5`)
|
|
18
|
+
- Material Design easing curve: `cubic-bezier(.4, 0, .2, 1)` with `.15s` short / `.3s` medium durations
|
|
19
|
+
- Unique **gender-coded color tokens** (`--color-gender-female: #cb3a6b`, `--color-gender-male: #1c7fac`) reflecting forum culture
|
|
20
|
+
- **Gold premium accent** (`#ffc51b`) reserved for subscription/premium features
|
|
21
|
+
- **Topic purple** (`#bf8ff0`) for cross-cutting interest groups
|
|
22
|
+
- 8px border-radius is the default (buttons, cards, chips); `--vars-max-page-width: 1280px` with 728px main content + 300px aside
|
|
23
|
+
|
|
24
|
+
## 2. Color Palette & Roles
|
|
25
|
+
|
|
26
|
+
Dcard exposes its color system via CSS custom properties on `:root`. All values below are extracted directly.
|
|
27
|
+
|
|
28
|
+
### Brand
|
|
29
|
+
- **Dcard Primary** (`#3397cf`): `--color-dcard-primary`. Main brand blue. Used for primary CTAs (Download App), brand icons, link accents.
|
|
30
|
+
- **Dcard Primary Hover** (`#5ab0db`): `--color-dcard-primary-hover`. Lighter blue for hover states.
|
|
31
|
+
- **Dcard Secondary** (`#006aa6`): `--color-dcard-secondary`. Deeper supporting blue, used in search submit buttons and active states.
|
|
32
|
+
- **Dcard Tertiary** (`#00324e`): `--color-dcard-tertiary`. The signature deep teal-navy. Used as the page header bg, sidebar hover bg (`--color-bg-sidebar-hover: #032133`), and brand chrome.
|
|
33
|
+
- **Dcard Hint** (`#e7f3f9`): `--color-dcard-hint`. Very light blue tint for hover backgrounds and subtle highlights.
|
|
34
|
+
- **Dcard Premium** (`#ffc51b`): `--color-dcard-premium`. Gold for premium subscribers and paid features.
|
|
35
|
+
- **Dcard Premium Hover** (`#ffd558`): `--color-dcard-premium-hover`.
|
|
36
|
+
|
|
37
|
+
### State (Status)
|
|
38
|
+
- **Success** (`#49bd69`): `--color-state-success`. Hover `#6fc985`, active `#339653`.
|
|
39
|
+
- **Danger** (`#ea5c5c`): `--color-state-danger`. Hover `#f78c88`, active `#c44347`.
|
|
40
|
+
- **Reminder / Warning** (`#f0a955`): `--color-state-reminder`. Hover `#f0b941`, active `#da9246`.
|
|
41
|
+
|
|
42
|
+
### Backgrounds (Surfaces)
|
|
43
|
+
- **Bg Base 1** (`#f2f2f2`): `--color-bg-base-1`. Default page content background — the gray frame inside the navy header.
|
|
44
|
+
- **Bg Base 2** (`#ffffff`): `--color-bg-base-2`. Card surface, post background.
|
|
45
|
+
- **Bg Base 3** (`#ffffff`): `--color-bg-base-3`. Same as base 2; reserved for layered cards.
|
|
46
|
+
- **Bg Light** (`#ffffff`): `--color-bg-light`. Pure white, modal/dropdown surfaces.
|
|
47
|
+
- **Bg Dark** (`#000000`): `--color-bg-dark`. Reserved for inverted contexts.
|
|
48
|
+
- **Bg Container** (`#0000000d`): `--color-bg-container`. Black 5% — chip backgrounds on light surfaces.
|
|
49
|
+
- **Bg Special** (`#f0b941`): `--color-bg-special`. Same as reminder hover — used for promotional/sponsored chips.
|
|
50
|
+
- **Bg Topic** (`#bf8ff0`): `--color-bg-topic`. Lavender-purple for topic tags (cross-cutting interest groups).
|
|
51
|
+
- **Bg Snackbar** (`#2c2c2c`): `--color-bg-snackbar`. Dark gray for toast notifications.
|
|
52
|
+
- **Bg Sidebar Hover** (`#032133`): `--color-bg-sidebar-hover`. Slightly darker than tertiary for sidebar item hover.
|
|
53
|
+
- **Bg Chip on Dark** (`#ffffff14`): `--color-bg-chip-on-dark`. White 8% for chips on the navy header.
|
|
54
|
+
- **Bg Spotlight** (`#00000059`): `--color-bg-spotlight`. Black 35% — modal backdrop.
|
|
55
|
+
- **Bg Sign-up Overlay** (`#000000b3`): `--color-bg-sign-up-overlay`. Black 70% — full-page CTA overlay.
|
|
56
|
+
- **Bg Btn Disabled** (`#e0e0e0`): `--color-bg-btn-disabled`.
|
|
57
|
+
- **Shimmer Bg / Fg** (`#f2f2f2` / `#fafafa`): Loading skeleton colors.
|
|
58
|
+
|
|
59
|
+
### Text (Foreground)
|
|
60
|
+
- **Text Primary** (`#000000d9`): `--color-text-primary`. Black at 85% opacity. Used for headings, post titles, primary body text.
|
|
61
|
+
- **Text Secondary** (`#00000080`): `--color-text-secondary`. Black at 50%. Captions, timestamps, metadata.
|
|
62
|
+
- **Text Hint** (`#00000059`): `--color-text-hint`. Black at 35%. Placeholder hints.
|
|
63
|
+
- **Text Disabled** (`#0003`): `--color-text-disabled`. Black at 20%.
|
|
64
|
+
- **Text Light Primary** (`#ffffff`): `--color-text-light-primary`. White text on the navy header.
|
|
65
|
+
- **Text Light Secondary** (`#ffffff8c`): `--color-text-light-secondary`. White at 55% on dark surfaces.
|
|
66
|
+
- **Text Light Hint** (`#fff6`): `--color-text-light-hint`. White at 40%.
|
|
67
|
+
- **Text Dark Primary / Secondary**: Same as primary / secondary, semantic aliases.
|
|
68
|
+
- **Text Default Hovered** (`#00000059`): `--color-text-default-hovered`.
|
|
69
|
+
|
|
70
|
+
### Borders & Separators
|
|
71
|
+
- **Border** (`#cacaca`): `--color-border`. Standard component border (inputs, dividers).
|
|
72
|
+
- **Border Disabled** (`#e0e0e0`): `--color-border-disabled`.
|
|
73
|
+
- **Separator** (`#0000001a`): `--color-separator`. Black 10% — row dividers on light surfaces.
|
|
74
|
+
- **Separator on Dark** (`#ffffffb3`): `--color-separator-on-dark`. White 70% — separators on the navy header.
|
|
75
|
+
|
|
76
|
+
### Gender-Coded (Unique to Dcard)
|
|
77
|
+
A reflection of Dcard's posting culture, where many forums (女孩 / 男生 / 心情) display gender-tagged author chips:
|
|
78
|
+
- **Female** (`#cb3a6b`): `--color-gender-female`. Light variant `#f48fb1`.
|
|
79
|
+
- **Male** (`#1c7fac`): `--color-gender-male`. Light variant `#81d4fa`.
|
|
80
|
+
- **Other** (`#2c2c2c`): `--color-gender-other`. Light variant `#e0e0e0`.
|
|
81
|
+
|
|
82
|
+
### Icon & Misc
|
|
83
|
+
- **Icon Button** (`#000000b3`): `--color-icon-button`. Black 70% — default icon color on light surfaces.
|
|
84
|
+
- **Crop Mask** (`#000000b3`): `--color-crop-mask`. Modal/crop UI backdrop.
|
|
85
|
+
- **Brand Sponsor Hovered** (`#fcd46d`): `--color-brand-sponsor-hovered`. Sponsored content highlight.
|
|
86
|
+
|
|
87
|
+
## 3. Typography Rules
|
|
88
|
+
|
|
89
|
+
### Font Stack
|
|
90
|
+
```
|
|
91
|
+
Roboto, "Helvetica Neue", Helvetica, Arial, "PingFang TC", 黑體-繁, "Heiti TC", 蘋果儷中黑, "Apple LiGothic Medium", 微軟正黑體, "Microsoft JhengHei", sans-serif
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Roboto leads (Material Design convention), with full Traditional Chinese fallbacks for native rendering on TW/HK Chrome environments.
|
|
95
|
+
|
|
96
|
+
### Type Scale (verified from `:root` CSS custom properties)
|
|
97
|
+
|
|
98
|
+
| Role | Token | Size | Weight | Line Height |
|
|
99
|
+
|---|---|---|---|---|
|
|
100
|
+
| Headline 1 | `--typography-headline-1-font-size` | `32px` (mobile `30px`) | `500` | `42px` (mobile `40px`) |
|
|
101
|
+
| Headline 2 | `--typography-headline-2-font-size` | `28px` (mobile `24px`) | `500` | `40px` (mobile `33px`) |
|
|
102
|
+
| Headline 3 | `--typography-headline-3-font-size` | `24px` (mobile `20px`) | `500` | `28px` |
|
|
103
|
+
| Headline 4 | `--fonts-headline-4-font-size` | `20px` | `500` | `28px` |
|
|
104
|
+
| Title | `--typography-title-font-size` | `18px` | `600` | `25px` |
|
|
105
|
+
| Subtitle 1 | `--typography-subtitle-1-font-size` | `16px` | `500` | `22px` |
|
|
106
|
+
| Subtitle 2 | `--typography-subtitle-2-font-size` | `14px` | `500` | `20px` |
|
|
107
|
+
| Body 1 | `--typography-body-1-font-size` | `16px` | `400` | `22px` |
|
|
108
|
+
| Body 1 (lh-28 variant) | `--typography-body-1-lh-28-font-size` | `16px` | `400` | `28px` (article reading) |
|
|
109
|
+
| Body 2 | `--typography-body-2-font-size` | `14px` | `400` | `20px` |
|
|
110
|
+
| Caption | `--typography-caption-font-size` | `12px` | `500` | `17px` |
|
|
111
|
+
| Caption 2 | `--typography-caption-2-font-size` | `10px` | `500` | `16px` |
|
|
112
|
+
|
|
113
|
+
### Conventions
|
|
114
|
+
- **Weight 500 (medium)** is the headline default — never weight 700/800 like commerce or news sites. Material Design heritage.
|
|
115
|
+
- **Title is the only weight-600 tier** — used sparingly for section headers in modals and editors.
|
|
116
|
+
- **Body uses weight 400** — captions and small labels jump to weight 500 to remain readable at small sizes.
|
|
117
|
+
- **Mobile sizes step down by ~20%** for headlines but stay identical for body and below.
|
|
118
|
+
- **Line-heights are generous** (1.3–1.4× ratio for body, ~1.4× for headlines) — supports CJK glyph density.
|
|
119
|
+
|
|
120
|
+
## 4. Component Stylings
|
|
121
|
+
|
|
122
|
+
### Buttons
|
|
123
|
+
**Default radius**: `8px` (verified across multiple button variants on the site).
|
|
124
|
+
|
|
125
|
+
| Variant | Bg | Text | Notable |
|
|
126
|
+
|---|---|---|---|
|
|
127
|
+
| Primary CTA (Download App) | `#3397cf` (`--color-dcard-primary`) | `#ffffff` | Weight 500, 14px |
|
|
128
|
+
| Secondary CTA (search submit) | `#006aa6` (`--color-dcard-secondary`) | `#ffffff` | Often joined to input → `border-radius: 0px 4px 4px 0px` |
|
|
129
|
+
| Counter / Action (584, 179 likes) | transparent | `rgba(0,0,0,0.5)` | 8px radius, 14px weight 500 |
|
|
130
|
+
| Disabled | `#e0e0e0` (`--color-bg-btn-disabled`) | secondary text | |
|
|
131
|
+
|
|
132
|
+
Padding patterns: `1px 14px` (small), `8px 20px` (medium for search submit).
|
|
133
|
+
|
|
134
|
+
### Cards (Post Entry)
|
|
135
|
+
- White bg (`#ffffff` = `--color-bg-base-2`)
|
|
136
|
+
- Sit on the gray content background (`#f2f2f2`) → contrast handles separation, no border needed
|
|
137
|
+
- `--vars-min-post-list-section-width: 728px` defines the main feed width
|
|
138
|
+
- `--vars-post-entry-padding: 20px` for inner spacing
|
|
139
|
+
- `--vars-post-entry-thumbnail-size: 84px` for inline thumbnails
|
|
140
|
+
- Cross-post variants use `--vars-post-entry-cross-post-thumbnail-size: 66px`
|
|
141
|
+
- Forum cards have explicit dimensions: `--vars-forum-card-width: 146px`, `--vars-forum-card-height: 110px`
|
|
142
|
+
|
|
143
|
+
### Header / Navigation
|
|
144
|
+
- **Header**: `--vars-header-height: 48px`, `--vars-header-padding: 20px`, bg `#00324e` (tertiary), white text
|
|
145
|
+
- **Logo + Search + Sign In/Up + Download App**: horizontal layout
|
|
146
|
+
- **Search input**: White bg, pill-leaning corners (left 0px, right 8px when joined with submit)
|
|
147
|
+
- **Left Sider** (forum nav): `--vars-my-page-sider-width: 208px`, light bg, icon + text rows
|
|
148
|
+
- **Right Aside** (widgets/ads): `--vars-forum-aside-section-width: 300px`, `--vars-forum-aside-section-gap: 10px`
|
|
149
|
+
|
|
150
|
+
### Tabs (All / Following)
|
|
151
|
+
- Underline-driven indicator
|
|
152
|
+
- Active tab: text color `--color-text-primary` (`#000000d9`)
|
|
153
|
+
- Inactive: `--color-text-secondary` (`#00000080`)
|
|
154
|
+
- Tab header height: `--vars-tabview-header-height: 48px`
|
|
155
|
+
|
|
156
|
+
### Chips / Topics
|
|
157
|
+
- Topic chips: bg `#bf8ff0` (`--color-bg-topic`), white text — lavender accent
|
|
158
|
+
- Sponsor/special chips: bg `#f0b941` (`--color-bg-special`)
|
|
159
|
+
- On-dark chips: bg `#ffffff14` (`--color-bg-chip-on-dark`)
|
|
160
|
+
- Topic spacing: `--vars-topic-gap: 8px`
|
|
161
|
+
- Topic list height: `--vars-topic-list-height: 60px`
|
|
162
|
+
|
|
163
|
+
### Snackbar / Toast
|
|
164
|
+
- Bg `#2c2c2c` (`--color-bg-snackbar`)
|
|
165
|
+
- White text (`--color-text-light-primary`)
|
|
166
|
+
- Bottom positioning: `--vars-toast-bottom: 0px`, `--vars-toast-width: 250px`
|
|
167
|
+
- With bottom bar: `--vars-snackbar-bottom-with-bottom-bar: 16px`
|
|
168
|
+
|
|
169
|
+
### Modals
|
|
170
|
+
- Post modal: `--vars-post-modal-width: 728px`
|
|
171
|
+
- Comment modal: `--vars-comment-modal-width: 720px`
|
|
172
|
+
- Backdrop: `--color-bg-spotlight` (`#00000059`) or `--color-mask` (`#0006`)
|
|
173
|
+
|
|
174
|
+
### Sign-Up Overlay
|
|
175
|
+
- Full-page bg: `--color-bg-sign-up-overlay` (`#000000b3`, black 70%)
|
|
176
|
+
- Triggers after scroll/engagement to encourage account creation
|
|
177
|
+
|
|
178
|
+
## 5. Layout Principles
|
|
179
|
+
|
|
180
|
+
### Page Structure
|
|
181
|
+
- **Max page width**: `--vars-max-page-width: 1280px`
|
|
182
|
+
- **Three-column layout**:
|
|
183
|
+
- Left sider (forum nav): `208px` (`--vars-my-page-sider-width`)
|
|
184
|
+
- Main content (post list): `728px` (`--vars-min-post-list-section-width`)
|
|
185
|
+
- Right aside (widgets/ads): `300px` (`--vars-forum-aside-section-width`)
|
|
186
|
+
- Sections gap: `--vars-forum-sections-gap: 12px`
|
|
187
|
+
|
|
188
|
+
### Spacing
|
|
189
|
+
- **Header padding**: `20px`
|
|
190
|
+
- **Post entry padding**: `20px`
|
|
191
|
+
- **Post view padding**: `20px` vertical, `24px` horizontal
|
|
192
|
+
- **Post list section padding**: `20px` vertical, `24px` horizontal
|
|
193
|
+
- **Columns item horizontal**: `24px`
|
|
194
|
+
- Content title height: `60px` (`--vars-my-page-content-title-height`)
|
|
195
|
+
|
|
196
|
+
### Density
|
|
197
|
+
Dcard is **medium-density**. Posts are visually distinct (white card on gray bg), but the 728px main column packs efficiently — title + preview + thumbnail + actions in a single horizontal row at desktop sizes. Not as dense as Pinkoi commerce, not as airy as Medium articles.
|
|
198
|
+
|
|
199
|
+
## 6. Depth & Elevation
|
|
200
|
+
|
|
201
|
+
Dcard uses a **Material Design-style 5-level shadow system**, all keyed off black with low alpha for soft, neutral elevation.
|
|
202
|
+
|
|
203
|
+
| Level | Token | Value | Use |
|
|
204
|
+
|---|---|---|---|
|
|
205
|
+
| 1 | `--shadow-level-1` | `0px 1px 6px -2px #00000052` | Subtle lift (chips, hover cards) |
|
|
206
|
+
| 2 | `--shadow-level-2` | `0px 2px 8px -1px #0003` | Default card, dropdown |
|
|
207
|
+
| 3 | `--shadow-level-3` | `0px 3px 12px #0000002e` | Elevated card, popover |
|
|
208
|
+
| 4 | `--shadow-level-4` | `0px 4px 16px #00000029` | Modal, sticky bar |
|
|
209
|
+
| 5 | `--shadow-level-5` | `0px 6px 24px #0000001f` | Highest elevation: dialogs, full-screen overlays |
|
|
210
|
+
|
|
211
|
+
Note: Most post cards on the feed sit **flat without shadow** — the content area (`#f2f2f2`) provides separation against white cards via contrast. Shadows are reserved for genuinely floating elements.
|
|
212
|
+
|
|
213
|
+
### Z-Index
|
|
214
|
+
- Header is sticky and sits above content
|
|
215
|
+
- Modals use `--color-bg-spotlight` backdrop
|
|
216
|
+
- Sign-up overlay (`--color-bg-sign-up-overlay`) sits above all chrome
|
|
217
|
+
- Toast/snackbar at the highest level
|
|
218
|
+
|
|
219
|
+
### Animation
|
|
220
|
+
- Easing: `--animations-bezier: cubic-bezier(.4, 0, .2, 1)` — Material Design standard easing curve
|
|
221
|
+
- Short duration: `--animations-short-duration: .15s` (hover, press)
|
|
222
|
+
- Medium duration: `--animations-medium-duration: .3s` (page transitions, accordions)
|
|
223
|
+
|
|
224
|
+
## 7. Do's and Don'ts
|
|
225
|
+
|
|
226
|
+
- **DO** use weight 500 (medium) for headlines. Dcard never goes weight 700 — Material Design convention.
|
|
227
|
+
- **DON'T** use weight 700 except in legacy or one-off display contexts.
|
|
228
|
+
- **DO** use the semantic color token namespace: `--color-dcard-*` for brand, `--color-state-*` for status, `--color-text-*` for foreground, `--color-bg-*` for surfaces.
|
|
229
|
+
- **DON'T** introduce ad-hoc hex values. Dcard's 200+ tokens cover virtually every UI surface.
|
|
230
|
+
- **DO** wrap the page in the deep navy header (`#00324e`) and place content on the gray base (`#f2f2f2`) with white cards. The chrome/content contrast is the brand signature.
|
|
231
|
+
- **DON'T** use white-on-white nesting — the `#f2f2f2` content layer is what separates white cards visually.
|
|
232
|
+
- **DO** use `8px border-radius` as the default for buttons, cards, and chips.
|
|
233
|
+
- **DON'T** use 4px or sharp corners — Dcard's softer 8px radius is the brand's tactile signature.
|
|
234
|
+
- **DO** use `--shadow-level-2` (`0px 2px 8px -1px #0003`) for default cards that need elevation. Use higher levels only for genuinely floating UI.
|
|
235
|
+
- **DON'T** apply heavy shadows to feed posts — let the gray/white contrast separate them.
|
|
236
|
+
- **DO** use the gender colors (`--color-gender-female`, `--color-gender-male`, `--color-gender-other`) for author chips on gender-tagged posts. This is a culturally significant part of Dcard's UX.
|
|
237
|
+
- **DON'T** use gender colors for non-author contexts — it conflates identity with status.
|
|
238
|
+
- **DO** reserve gold (`#ffc51b`, `--color-dcard-premium`) for premium/subscription features only.
|
|
239
|
+
- **DON'T** use premium gold for warnings or general highlights — it weakens the subscription signal.
|
|
240
|
+
- **DO** use Material easing `cubic-bezier(.4, 0, .2, 1)` with `.15s` for hover/press and `.3s` for page transitions.
|
|
241
|
+
- **DON'T** use bouncy/elastic easing — Dcard's motion is restrained and platform-native.
|
|
242
|
+
|
|
243
|
+
## 8. Responsive Behavior
|
|
244
|
+
|
|
245
|
+
### Breakpoints (inferred from mobile-specific tokens)
|
|
246
|
+
Dcard provides explicit mobile typography sizes via `--typography-*-font-size-mobile` tokens, indicating a clear breakpoint at the tablet/mobile boundary (typically 768px in Material conventions).
|
|
247
|
+
|
|
248
|
+
| Width | Behavior |
|
|
249
|
+
|---|---|
|
|
250
|
+
| Desktop `>1280px` | Centered max-width container, three-column layout (208 / 728 / 300) |
|
|
251
|
+
| Desktop `1024–1280px` | Three-column compresses, asides may collapse |
|
|
252
|
+
| Tablet `768–1024px` | Right aside hidden, two-column (sider + main) |
|
|
253
|
+
| Mobile `<768px` | Single column. Headlines step down: H1 32px → 30px, H2 28px → 24px, H3 24px → 20px |
|
|
254
|
+
|
|
255
|
+
### Touch & Mobile
|
|
256
|
+
- Bottom navigation height token: `--vars-bottom-navigation-height: 0px` on web (used in app webviews)
|
|
257
|
+
- Safe area inset: `--safe-area-inset-bottom: 0px` (notch handling)
|
|
258
|
+
- Forum hero image: `--vars-forum-hero-image-height: 243px`
|
|
259
|
+
|
|
260
|
+
### Media Caps
|
|
261
|
+
- `--vars-max-post-media-vh: 60vh` — embedded videos/images cap at 60% viewport height
|
|
262
|
+
- Cover image: `width: 100%`, `object-fit: cover`, `height: 100%` (`--mixins-cover-image-*`)
|
|
263
|
+
|
|
264
|
+
### Text Truncation
|
|
265
|
+
- Single-line ellipsis: `--mixins-ellipsis-overflow: hidden; --mixins-ellipsis-text-overflow: ellipsis; --mixins-ellipsis-white-space: nowrap`
|
|
266
|
+
- Multi-line clamp: `--mixins-multi-ellipsis-display: -webkit-box`, `--mixins-multi-ellipsis--webkit-box-orient: vertical`, `--mixins-multi-ellipsis--webkit-line-clamp: 1`
|
|
267
|
+
- Line-clamp value can be customized per component
|
|
268
|
+
|
|
269
|
+
## 9. Agent Prompt Guide
|
|
270
|
+
|
|
271
|
+
### Quick Color Reference
|
|
272
|
+
- Primary CTA: `--color-dcard-primary` (`#3397cf`); hover `#5ab0db`
|
|
273
|
+
- Secondary CTA: `--color-dcard-secondary` (`#006aa6`)
|
|
274
|
+
- Page chrome (header bg): `--color-dcard-tertiary` (`#00324e`)
|
|
275
|
+
- Page content bg: `--color-bg-base-1` (`#f2f2f2`)
|
|
276
|
+
- Card / surface: `--color-bg-base-2` (`#ffffff`)
|
|
277
|
+
- Primary text: `--color-text-primary` (`#000000d9`, black 85%)
|
|
278
|
+
- Secondary text: `--color-text-secondary` (`#00000080`, black 50%)
|
|
279
|
+
- Border: `--color-border` (`#cacaca`)
|
|
280
|
+
- Separator: `--color-separator` (`#0000001a`, black 10%)
|
|
281
|
+
- Premium: `--color-dcard-premium` (`#ffc51b`) — subscription only
|
|
282
|
+
- Topic accent: `--color-bg-topic` (`#bf8ff0`)
|
|
283
|
+
- Success / Danger / Reminder: `#49bd69` / `#ea5c5c` / `#f0a955`
|
|
284
|
+
|
|
285
|
+
### Example Component Prompts
|
|
286
|
+
- "Create a Dcard-style post card: white bg (`#ffffff`), no border, no radius (sits on gray `#f2f2f2` page bg). Inner padding 20px. Layout: avatar (40px circle) + forum name (12px weight 500 colored per forum) + timestamp (12px weight 500 `#00000080`) on top row, post title H4 size (20px weight 500 `#000000d9`) on second row, body preview (14px weight 400 `#00000080` 2-line clamp), inline thumbnail (84px), action buttons (heart/comment/save/share) at bottom."
|
|
287
|
+
- "Build a Dcard primary button: bg `#3397cf`, white text, 8px border-radius, 14px weight 500, padding `8px 20px`. Hover: bg `#5ab0db`. Active: darken further. No shadow. Transition: `background .15s cubic-bezier(.4, 0, .2, 1)`."
|
|
288
|
+
- "Design the Dcard header: full-width sticky bar, height 48px, bg `#00324e` (tertiary navy), white logo on left (28px height), search input center (white bg, 8px radius left side, joined search submit `#006aa6` on right with `0px 8px 8px 0px` radius), Sign in/Sign up text link + Download App button (`#3397cf` bg, white text, 8px radius) on right."
|
|
289
|
+
- "Create a topic chip: bg `#bf8ff0` (lavender purple), white text, 12px weight 500, 8px radius, padding `4px 10px`. Use only for cross-cutting topics (e.g., '#study tips', '#dating advice')."
|
|
290
|
+
- "Build a sign-up overlay CTA: full-page absolute overlay with `#000000b3` (black 70%) bg, centered content card (white, 8px radius, `0px 6px 24px #0000001f` shadow level 5), heading 'From school to work, find your resonance on Dcard.' (24px weight 500 `#000000d9`), subhead 14px weight 400 `#00000080`, two buttons: Sign in (white border ghost) + Sign up (`#3397cf` filled). Triggers after 2 scroll lengths."
|
|
291
|
+
|
|
292
|
+
### Iteration Guide
|
|
293
|
+
1. **Always reference CSS variables, not hex values** — Dcard's design system is its `:root` token layer. `--color-dcard-primary` is more durable than `#3397cf`.
|
|
294
|
+
2. **Default headline weight is 500, never 700**. Dcard is Material Design-aligned.
|
|
295
|
+
3. **`8px` radius everywhere** (buttons, cards, chips). Don't use 4px or pill shapes.
|
|
296
|
+
4. **Wrap page in `#00324e` chrome + content on `#f2f2f2` + white cards** — this is the visual signature.
|
|
297
|
+
5. **Five shadow levels exist (`--shadow-level-1` to `-5`)** — use level 2 for cards by default, escalate only for floating UI.
|
|
298
|
+
6. **Roboto first, then Traditional Chinese fallbacks** — never hardcode `font-family` without including the TC stack.
|
|
299
|
+
7. **Material easing `cubic-bezier(.4, 0, .2, 1)`** with `.15s` (hover/press) or `.3s` (transitions). Don't use bounce.
|
|
300
|
+
8. **Gender colors (`--color-gender-*`) only for author chips** on gender-tagged forums (女孩/男生/感情). Never repurpose.
|
|
301
|
+
9. **Premium gold (`#ffc51b`) only for subscription/premium UI**. It's a finite signal.
|
|
302
|
+
10. **Three-column layout 208 / 728 / 300** at desktop. Right aside drops first on tablet, sider drops on mobile.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Dcard Inspired Design System
|
|
2
|
+
|
|
3
|
+
[DESIGN.md](./DESIGN.md) extracted from the public [Dcard](https://www.dcard.tw) website. Dcard does not publish a documentation site, but it **exposes 200+ semantic CSS custom properties on `:root`** that effectively constitute its public design system. Tokens were extracted directly via Playwright MCP at 1440px viewport on 2026-04-17. 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 Dcard design language — Taiwan's largest forum platform with Material Design heritage, Roboto-led typography (weight 500 headlines), deep teal-navy chrome (`#00324e`) framing white cards on gray content, blue-monochrome brand palette, 5-level Material shadow system, and unique gender-coded author chip colors reflecting forum culture.
|
|
Binary file
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Research Sources for Dcard
|
|
2
|
+
|
|
3
|
+
추출 일자: 2026-04-17
|
|
4
|
+
스킬: `omd:add-reference` (5-tier methodology)
|
|
5
|
+
입력 URL: `https://www.dcard.tw`
|
|
6
|
+
|
|
7
|
+
## Tier 1 — Official Design System
|
|
8
|
+
|
|
9
|
+
**Status: EFFECTIVELY FOUND via runtime token exposure**
|
|
10
|
+
|
|
11
|
+
Dcard does not publish a documentation site (e.g., `dcard.design`), but the production app **exposes 200+ semantic CSS custom properties on `:root`** that constitute the actual design system in machine-readable form. Extracted via `getComputedStyle(document.documentElement)` using Playwright MCP. This is functionally equivalent to a public design tokens file.
|
|
12
|
+
|
|
13
|
+
Token namespaces discovered:
|
|
14
|
+
- `--color-dcard-*` — brand palette (primary/secondary/tertiary/premium/hint)
|
|
15
|
+
- `--color-state-*` — success/danger/reminder + hover/active states
|
|
16
|
+
- `--color-bg-*` — surface tokens (base 1-3, light/dark, special, topic, snackbar, etc.)
|
|
17
|
+
- `--color-text-*` — primary/secondary/hint/disabled + light variants for dark surfaces
|
|
18
|
+
- `--color-gender-*` — female/male/other + light variants (forum culture-specific)
|
|
19
|
+
- `--color-border`, `--color-separator` — divider system
|
|
20
|
+
- `--shadow-level-1` through `--shadow-level-5` — Material elevation
|
|
21
|
+
- `--typography-*` and `--fonts-*` — full type scale (4 headlines, title, 2 subtitles, 2 body, 2 caption) including mobile variants
|
|
22
|
+
- `--vars-*` — layout sizing (header, sider, post list, modals, etc.)
|
|
23
|
+
- `--animations-bezier`, `--animations-short-duration`, `--animations-medium-duration` — motion system
|
|
24
|
+
- `--mixins-*` — text-overflow / cover-image / scroll-bar mixin tokens
|
|
25
|
+
|
|
26
|
+
## Tier 2 — Brand / Press Kit
|
|
27
|
+
|
|
28
|
+
Not investigated separately — the runtime token exposure made it unnecessary. If needed, `dcard.tw/about` could be checked for additional brand voice / logo guidelines.
|
|
29
|
+
|
|
30
|
+
## Tier 3 — Engineering / Design Blog
|
|
31
|
+
|
|
32
|
+
`medium.com/dcardlab` exists with categories Web/Mobile/Data/Products/People/Career. No DS-specific articles surfaced in initial WebSearch, but the tech blog could contain design rationale articles for future supplementation.
|
|
33
|
+
|
|
34
|
+
## Tier 4 — Live Site Recon
|
|
35
|
+
|
|
36
|
+
**Method**: Playwright MCP (`@playwright/mcp@latest`, project-scoped via `.mcp.json`) at viewport 1440×900 on `https://www.dcard.tw/f` (forum index). Cloudflare bot challenge passed automatically by the embedded Chromium.
|
|
37
|
+
|
|
38
|
+
### Extraction steps
|
|
39
|
+
1. `browser_navigate` → `https://www.dcard.tw`
|
|
40
|
+
2. `browser_evaluate` to enumerate `:root` CSS custom properties → 200+ tokens captured
|
|
41
|
+
3. `browser_evaluate` for body, headings (H1×0, H2×21, H3×0), button samples (105 buttons), nav links, articles
|
|
42
|
+
4. `browser_take_screenshot` (viewport, 1440×900) → `_research/forum-1440px.png`
|
|
43
|
+
|
|
44
|
+
### Verified at runtime
|
|
45
|
+
- Body bg: `rgb(0, 50, 78)` = `#00324e` (matches `--color-dcard-tertiary`)
|
|
46
|
+
- Body font: `Roboto, "Helvetica Neue", Helvetica, Arial, "PingFang TC", 黑體-繁, "Heiti TC", 蘋果儷中黑, "Apple LiGothic Medium", 微軟正黑體, "Microsoft JhengHei", sans-serif`
|
|
47
|
+
- H2 (post titles): weight 500, 16px, color `rgba(0,0,0,0.85)` — confirms Material-aligned medium-weight hierarchy
|
|
48
|
+
- Sample buttons: `--color-dcard-primary` (`#3397cf`) for Download App, `--color-dcard-secondary` (`#006aa6`) for search submit, both 8px radius
|
|
49
|
+
- Main content area: bg `rgb(242,242,242)` = `#f2f2f2` (`--color-bg-base-1`), 728px wide
|
|
50
|
+
- Right aside: 300px wide
|
|
51
|
+
- Console: 13 errors, 110 warnings (typical for production SPA, non-blocking)
|
|
52
|
+
|
|
53
|
+
## Confidence
|
|
54
|
+
|
|
55
|
+
### High Confidence (extracted directly from `:root` CSS variables — Dcard's actual semantic tokens)
|
|
56
|
+
- Entire color palette (brand, state, bg, text, border, separator, gender, premium, topic, etc.) in §2
|
|
57
|
+
- Full type scale (4 headline tiers, title, 2 subtitle, 2 body, 2 caption) with sizes/weights/line-heights in §3
|
|
58
|
+
- Shadow system (5 levels) in §6
|
|
59
|
+
- Animation easing + durations in §6
|
|
60
|
+
- Layout sizing (header height, max page width, sider/main/aside widths, modal widths, etc.) in §5
|
|
61
|
+
|
|
62
|
+
### Medium Confidence (verified via runtime DOM but not from named tokens)
|
|
63
|
+
- Default 8px border-radius (verified across multiple buttons but not explicitly tokenized)
|
|
64
|
+
- Forum hierarchy (sider 208px / main 728px / aside 300px) confirmed via direct width measurement
|
|
65
|
+
- Material Design alignment claim (Roboto + weight 500 + cubic-bezier easing all align)
|
|
66
|
+
|
|
67
|
+
### Inferred (educated reading from observed UX)
|
|
68
|
+
- "Gender colors are for author chips only" — based on forum naming convention (女孩/男生/感情) and color names; not directly observed in posts during recon
|
|
69
|
+
- "Premium gold reserved for subscription features" — based on `--color-dcard-premium` token name; specific product surfaces not exhaustively checked
|
|
70
|
+
- Mobile breakpoint at 768px — inferred from presence of `--typography-*-font-size-mobile` tokens; exact breakpoint values not extracted
|
|
71
|
+
|
|
72
|
+
## Notes
|
|
73
|
+
- Dcard exposes its design system **at runtime via `:root` CSS variables** — this is rare and developer-friendly. Treat the variable names as the canonical reference (more stable than hex values across releases).
|
|
74
|
+
- Roboto-led typography stack with comprehensive Traditional Chinese fallbacks reflects Dcard's Taiwan-first user base.
|
|
75
|
+
- Playwright MCP successfully bypassed Cloudflare bot protection that had blocked `curl` and `WebFetch` attempts.
|
|
76
|
+
- Class names in DOM use a hashed convention (`d_a5_175izsd`, `d_h_j`, etc.) — likely vanilla-extract or similar zero-runtime CSS-in-JS. Don't rely on class selectors; use the `:root` tokens instead.
|
|
77
|
+
- This reference may drift if Dcard ships a token rename. Re-running `omd:add-reference https://www.dcard.tw` periodically captures any updates.
|