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.
Files changed (317) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +145 -0
  3. package/README.ko.md +245 -0
  4. package/README.md +245 -0
  5. package/README.zh-TW.md +145 -0
  6. package/data/reference-tags.md +104 -0
  7. package/data/synonyms.json +79 -0
  8. package/data/vocabulary.json +516 -0
  9. package/dist/bin/oh-my-design.js +858 -0
  10. package/dist/bin/oh-my-design.js.map +1 -0
  11. package/dist/chunk-6YNSV3VY.js +35 -0
  12. package/dist/chunk-6YNSV3VY.js.map +1 -0
  13. package/dist/chunk-MHFYGZSO.js +337 -0
  14. package/dist/chunk-MHFYGZSO.js.map +1 -0
  15. package/dist/chunk-N2JG6N4Q.js +264 -0
  16. package/dist/chunk-N2JG6N4Q.js.map +1 -0
  17. package/dist/chunk-OOQQEUGX.js +46 -0
  18. package/dist/chunk-OOQQEUGX.js.map +1 -0
  19. package/dist/chunk-OR5DHENY.js +250 -0
  20. package/dist/chunk-OR5DHENY.js.map +1 -0
  21. package/dist/customizer-CM76752R.js +8 -0
  22. package/dist/customizer-CM76752R.js.map +1 -0
  23. package/dist/index.d.ts +559 -0
  24. package/dist/index.js +3113 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/init-STACB7E5.js +635 -0
  27. package/dist/init-STACB7E5.js.map +1 -0
  28. package/dist/install-skills-CM6VXFZJ.js +152 -0
  29. package/dist/install-skills-CM6VXFZJ.js.map +1 -0
  30. package/dist/learn-33LHKEJA.js +140 -0
  31. package/dist/learn-33LHKEJA.js.map +1 -0
  32. package/dist/reference-YMNAOXJQ.js +47 -0
  33. package/dist/reference-YMNAOXJQ.js.map +1 -0
  34. package/dist/reference-parser-TM3CJPNE.js +10 -0
  35. package/dist/reference-parser-TM3CJPNE.js.map +1 -0
  36. package/dist/remember-UAFA5B2O.js +78 -0
  37. package/dist/remember-UAFA5B2O.js.map +1 -0
  38. package/dist/sync-P7X4S2DK.js +404 -0
  39. package/dist/sync-P7X4S2DK.js.map +1 -0
  40. package/dist/templates/templates/design-md.hbs +44 -0
  41. package/dist/templates/templates/partials/agent-prompt-guide.hbs +28 -0
  42. package/dist/templates/templates/partials/color-palette.hbs +49 -0
  43. package/dist/templates/templates/partials/component-stylings.hbs +28 -0
  44. package/dist/templates/templates/partials/depth-elevation.hbs +31 -0
  45. package/dist/templates/templates/partials/dos-donts.hbs +13 -0
  46. package/dist/templates/templates/partials/layout.hbs +30 -0
  47. package/dist/templates/templates/partials/responsive.hbs +25 -0
  48. package/dist/templates/templates/partials/shadcn-tokens.hbs +64 -0
  49. package/dist/templates/templates/partials/typography.hbs +43 -0
  50. package/dist/templates/templates/partials/visual-theme.hbs +26 -0
  51. package/package.json +68 -0
  52. package/references/Claude-Design-Sys-Prompt.txt +421 -0
  53. package/references/airbnb/DESIGN.md +427 -0
  54. package/references/airbnb/README.md +23 -0
  55. package/references/airbnb/preview-dark.html +234 -0
  56. package/references/airbnb/preview.html +233 -0
  57. package/references/airtable/DESIGN.md +107 -0
  58. package/references/airtable/README.md +23 -0
  59. package/references/airtable/preview-dark.html +165 -0
  60. package/references/airtable/preview.html +164 -0
  61. package/references/apple/DESIGN.md +496 -0
  62. package/references/apple/README.md +24 -0
  63. package/references/apple/preview-dark.html +420 -0
  64. package/references/apple/preview.html +414 -0
  65. package/references/baemin/DESIGN.md +260 -0
  66. package/references/baemin/README.md +19 -0
  67. package/references/bmw/DESIGN.md +180 -0
  68. package/references/bmw/README.md +23 -0
  69. package/references/bmw/preview-dark.html +211 -0
  70. package/references/bmw/preview.html +210 -0
  71. package/references/cal/DESIGN.md +259 -0
  72. package/references/cal/README.md +23 -0
  73. package/references/cal/preview-dark.html +449 -0
  74. package/references/cal/preview.html +575 -0
  75. package/references/claude/DESIGN.md +455 -0
  76. package/references/claude/README.md +24 -0
  77. package/references/claude/preview-dark.html +803 -0
  78. package/references/claude/preview.html +826 -0
  79. package/references/clay/DESIGN.md +304 -0
  80. package/references/clay/README.md +23 -0
  81. package/references/clay/preview-dark.html +316 -0
  82. package/references/clay/preview.html +315 -0
  83. package/references/clickhouse/DESIGN.md +281 -0
  84. package/references/clickhouse/README.md +24 -0
  85. package/references/clickhouse/preview-dark.html +834 -0
  86. package/references/clickhouse/preview.html +786 -0
  87. package/references/cohere/DESIGN.md +266 -0
  88. package/references/cohere/README.md +24 -0
  89. package/references/cohere/preview-dark.html +803 -0
  90. package/references/cohere/preview.html +807 -0
  91. package/references/coinbase/DESIGN.md +129 -0
  92. package/references/coinbase/README.md +23 -0
  93. package/references/coinbase/preview-dark.html +164 -0
  94. package/references/coinbase/preview.html +163 -0
  95. package/references/composio/DESIGN.md +307 -0
  96. package/references/composio/README.md +24 -0
  97. package/references/composio/preview-dark.html +958 -0
  98. package/references/composio/preview.html +933 -0
  99. package/references/cursor/DESIGN.md +322 -0
  100. package/references/cursor/README.md +24 -0
  101. package/references/cursor/preview-dark.html +393 -0
  102. package/references/cursor/preview.html +383 -0
  103. package/references/dcard/DESIGN.md +302 -0
  104. package/references/dcard/README.md +12 -0
  105. package/references/dcard/_research/forum-1440px.png +0 -0
  106. package/references/dcard/_research.md +77 -0
  107. package/references/elevenlabs/DESIGN.md +265 -0
  108. package/references/elevenlabs/README.md +23 -0
  109. package/references/elevenlabs/preview-dark.html +252 -0
  110. package/references/elevenlabs/preview.html +251 -0
  111. package/references/expo/DESIGN.md +281 -0
  112. package/references/expo/README.md +24 -0
  113. package/references/expo/preview-dark.html +533 -0
  114. package/references/expo/preview.html +533 -0
  115. package/references/ferrari/DESIGN.md +314 -0
  116. package/references/ferrari/README.md +23 -0
  117. package/references/ferrari/preview-dark.html +1162 -0
  118. package/references/ferrari/preview.html +1122 -0
  119. package/references/figma/DESIGN.md +399 -0
  120. package/references/figma/README.md +24 -0
  121. package/references/figma/preview-dark.html +822 -0
  122. package/references/figma/preview.html +832 -0
  123. package/references/framer/DESIGN.md +246 -0
  124. package/references/framer/README.md +23 -0
  125. package/references/framer/preview-dark.html +902 -0
  126. package/references/framer/preview.html +883 -0
  127. package/references/freee/DESIGN.md +308 -0
  128. package/references/freee/README.md +12 -0
  129. package/references/freee/_research/vibes-storybook-1440px.png +0 -0
  130. package/references/freee/_research.md +77 -0
  131. package/references/hashicorp/DESIGN.md +278 -0
  132. package/references/hashicorp/README.md +24 -0
  133. package/references/hashicorp/preview-dark.html +1202 -0
  134. package/references/hashicorp/preview.html +1193 -0
  135. package/references/ibm/DESIGN.md +332 -0
  136. package/references/ibm/README.md +24 -0
  137. package/references/ibm/preview-dark.html +443 -0
  138. package/references/ibm/preview.html +428 -0
  139. package/references/intercom/DESIGN.md +146 -0
  140. package/references/intercom/README.md +23 -0
  141. package/references/intercom/preview-dark.html +185 -0
  142. package/references/intercom/preview.html +184 -0
  143. package/references/kakao/DESIGN.md +261 -0
  144. package/references/kakao/README.md +18 -0
  145. package/references/karrot/DESIGN.md +252 -0
  146. package/references/karrot/README.md +18 -0
  147. package/references/kraken/DESIGN.md +146 -0
  148. package/references/kraken/README.md +23 -0
  149. package/references/kraken/preview-dark.html +169 -0
  150. package/references/kraken/preview.html +168 -0
  151. package/references/lamborghini/DESIGN.md +288 -0
  152. package/references/lamborghini/README.md +23 -0
  153. package/references/lamborghini/preview-dark.html +303 -0
  154. package/references/lamborghini/preview.html +381 -0
  155. package/references/line/DESIGN.md +375 -0
  156. package/references/line/README.md +12 -0
  157. package/references/line/_research/home-1440px.png +0 -0
  158. package/references/line/_research.md +65 -0
  159. package/references/linear.app/DESIGN.md +526 -0
  160. package/references/linear.app/README.md +24 -0
  161. package/references/linear.app/preview-dark.html +383 -0
  162. package/references/linear.app/preview.html +373 -0
  163. package/references/lovable/DESIGN.md +298 -0
  164. package/references/lovable/README.md +24 -0
  165. package/references/lovable/preview-dark.html +349 -0
  166. package/references/lovable/preview.html +348 -0
  167. package/references/mercari/DESIGN.md +294 -0
  168. package/references/mercari/README.md +12 -0
  169. package/references/mercari/_research/home-1440px.png +0 -0
  170. package/references/mercari/_research.md +77 -0
  171. package/references/minimax/DESIGN.md +257 -0
  172. package/references/minimax/README.md +24 -0
  173. package/references/minimax/preview-dark.html +1262 -0
  174. package/references/minimax/preview.html +1248 -0
  175. package/references/mintlify/DESIGN.md +341 -0
  176. package/references/mintlify/README.md +24 -0
  177. package/references/mintlify/preview-dark.html +409 -0
  178. package/references/mintlify/preview.html +398 -0
  179. package/references/miro/DESIGN.md +108 -0
  180. package/references/miro/README.md +23 -0
  181. package/references/miro/preview-dark.html +174 -0
  182. package/references/miro/preview.html +173 -0
  183. package/references/mistral.ai/DESIGN.md +261 -0
  184. package/references/mistral.ai/README.md +24 -0
  185. package/references/mistral.ai/preview-dark.html +806 -0
  186. package/references/mistral.ai/preview.html +805 -0
  187. package/references/mongodb/DESIGN.md +266 -0
  188. package/references/mongodb/README.md +23 -0
  189. package/references/mongodb/preview-dark.html +260 -0
  190. package/references/mongodb/preview.html +259 -0
  191. package/references/notion/DESIGN.md +492 -0
  192. package/references/notion/README.md +24 -0
  193. package/references/notion/preview-dark.html +372 -0
  194. package/references/notion/preview.html +364 -0
  195. package/references/nvidia/DESIGN.md +308 -0
  196. package/references/nvidia/README.md +24 -0
  197. package/references/nvidia/preview-dark.html +374 -0
  198. package/references/nvidia/preview.html +366 -0
  199. package/references/ollama/DESIGN.md +267 -0
  200. package/references/ollama/README.md +24 -0
  201. package/references/ollama/preview-dark.html +678 -0
  202. package/references/ollama/preview.html +678 -0
  203. package/references/opencode.ai/DESIGN.md +295 -0
  204. package/references/opencode.ai/README.md +24 -0
  205. package/references/opencode.ai/preview-dark.html +366 -0
  206. package/references/opencode.ai/preview.html +357 -0
  207. package/references/pinkoi/DESIGN.md +309 -0
  208. package/references/pinkoi/README.md +12 -0
  209. package/references/pinkoi/_research/browse-1440px.png +0 -0
  210. package/references/pinkoi/_research.md +115 -0
  211. package/references/pinterest/DESIGN.md +230 -0
  212. package/references/pinterest/README.md +23 -0
  213. package/references/pinterest/preview-dark.html +233 -0
  214. package/references/pinterest/preview.html +232 -0
  215. package/references/posthog/DESIGN.md +256 -0
  216. package/references/posthog/README.md +23 -0
  217. package/references/posthog/preview-dark.html +699 -0
  218. package/references/posthog/preview.html +749 -0
  219. package/references/raycast/DESIGN.md +268 -0
  220. package/references/raycast/README.md +23 -0
  221. package/references/raycast/preview-dark.html +606 -0
  222. package/references/raycast/preview.html +688 -0
  223. package/references/renault/DESIGN.md +311 -0
  224. package/references/renault/README.md +23 -0
  225. package/references/renault/preview-dark.html +406 -0
  226. package/references/renault/preview.html +606 -0
  227. package/references/replicate/DESIGN.md +261 -0
  228. package/references/replicate/README.md +24 -0
  229. package/references/replicate/preview-dark.html +828 -0
  230. package/references/replicate/preview.html +831 -0
  231. package/references/resend/DESIGN.md +303 -0
  232. package/references/resend/README.md +23 -0
  233. package/references/resend/preview-dark.html +355 -0
  234. package/references/resend/preview.html +354 -0
  235. package/references/revolut/DESIGN.md +185 -0
  236. package/references/revolut/README.md +23 -0
  237. package/references/revolut/preview-dark.html +234 -0
  238. package/references/revolut/preview.html +233 -0
  239. package/references/runwayml/DESIGN.md +244 -0
  240. package/references/runwayml/README.md +24 -0
  241. package/references/runwayml/preview-dark.html +664 -0
  242. package/references/runwayml/preview.html +665 -0
  243. package/references/sanity/DESIGN.md +357 -0
  244. package/references/sanity/README.md +24 -0
  245. package/references/sanity/preview-dark.html +990 -0
  246. package/references/sanity/preview.html +1135 -0
  247. package/references/sentry/DESIGN.md +262 -0
  248. package/references/sentry/README.md +24 -0
  249. package/references/sentry/preview-dark.html +626 -0
  250. package/references/sentry/preview.html +951 -0
  251. package/references/spacex/DESIGN.md +205 -0
  252. package/references/spacex/README.md +23 -0
  253. package/references/spacex/preview-dark.html +221 -0
  254. package/references/spacex/preview.html +220 -0
  255. package/references/spotify/DESIGN.md +246 -0
  256. package/references/spotify/README.md +23 -0
  257. package/references/spotify/preview-dark.html +231 -0
  258. package/references/spotify/preview.html +230 -0
  259. package/references/stripe/DESIGN.md +473 -0
  260. package/references/stripe/README.md +24 -0
  261. package/references/stripe/preview-dark.html +428 -0
  262. package/references/stripe/preview.html +419 -0
  263. package/references/supabase/DESIGN.md +255 -0
  264. package/references/supabase/README.md +24 -0
  265. package/references/supabase/preview-dark.html +977 -0
  266. package/references/supabase/preview.html +955 -0
  267. package/references/superhuman/DESIGN.md +252 -0
  268. package/references/superhuman/README.md +23 -0
  269. package/references/superhuman/preview-dark.html +973 -0
  270. package/references/superhuman/preview.html +951 -0
  271. package/references/tesla/DESIGN.md +286 -0
  272. package/references/tesla/README.md +23 -0
  273. package/references/tesla/preview-dark.html +947 -0
  274. package/references/tesla/preview.html +925 -0
  275. package/references/together.ai/DESIGN.md +263 -0
  276. package/references/together.ai/README.md +24 -0
  277. package/references/together.ai/preview-dark.html +892 -0
  278. package/references/together.ai/preview.html +897 -0
  279. package/references/toss/DESIGN.md +387 -0
  280. package/references/toss/README.md +19 -0
  281. package/references/uber/DESIGN.md +295 -0
  282. package/references/uber/README.md +24 -0
  283. package/references/uber/preview-dark.html +1120 -0
  284. package/references/uber/preview.html +1119 -0
  285. package/references/vercel/DESIGN.md +456 -0
  286. package/references/vercel/README.md +24 -0
  287. package/references/vercel/preview-dark.html +368 -0
  288. package/references/vercel/preview.html +367 -0
  289. package/references/voltagent/DESIGN.md +323 -0
  290. package/references/voltagent/README.md +24 -0
  291. package/references/voltagent/preview-dark.html +487 -0
  292. package/references/voltagent/preview.html +766 -0
  293. package/references/warp/DESIGN.md +253 -0
  294. package/references/warp/README.md +23 -0
  295. package/references/warp/preview-dark.html +500 -0
  296. package/references/warp/preview.html +533 -0
  297. package/references/webflow/DESIGN.md +109 -0
  298. package/references/webflow/README.md +23 -0
  299. package/references/webflow/preview-dark.html +147 -0
  300. package/references/webflow/preview.html +146 -0
  301. package/references/wise/DESIGN.md +173 -0
  302. package/references/wise/README.md +23 -0
  303. package/references/wise/preview-dark.html +230 -0
  304. package/references/wise/preview.html +229 -0
  305. package/references/x.ai/DESIGN.md +267 -0
  306. package/references/x.ai/README.md +24 -0
  307. package/references/x.ai/preview-dark.html +356 -0
  308. package/references/x.ai/preview.html +407 -0
  309. package/references/zapier/DESIGN.md +328 -0
  310. package/references/zapier/README.md +24 -0
  311. package/references/zapier/preview-dark.html +380 -0
  312. package/references/zapier/preview.html +372 -0
  313. package/skills/omd-apply/SKILL.md +85 -0
  314. package/skills/omd-init/SKILL.md +167 -0
  315. package/skills/omd-learn/SKILL.md +81 -0
  316. package/skills/omd-remember/SKILL.md +44 -0
  317. 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.
@@ -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.