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,309 @@
1
+ # Design System Inspiration of Pinkoi
2
+
3
+ ## 1. Visual Theme & Atmosphere
4
+
5
+ Pinkoi is Asia's cross-border design marketplace, and its system reflects exactly that — a busy, multi-cultural commerce surface that prioritizes density, legibility, and conversion over minimalist whitespace. The page opens on a near-white canvas (`#f7f7f8` for grouped sections, `#ffffff` for primary surfaces) with dark slate text (`#39393e`) and a confident **teal-navy primary** (`#10567b`) that anchors actions like Login and primary CTAs. This isn't a "designer-chic" pastel palette as the brand name might suggest — the actual product surface is engineered for high-density browsing across Taiwan, Japan, Hong Kong, mainland China, and Thailand.
6
+
7
+ Typography is **bold-heavy**, with weight 700 dominating across headlines, badges, and key CTAs (37 occurrences in core CSS vs. 16 of weight 400). There is no custom brand typeface; instead, Pinkoi runs a sophisticated locale-aware system stack — `Helvetica Neue, Helvetica, Arial` followed by `PingFang TC, Heiti TC, Microsoft JhengHei` for Traditional Chinese, `PingFang SC, Heiti SC, Microsoft YaHei` for Simplified, `ヒラギノ角ゴ Pro W3, Meiryo` for Japanese, and `Thonburi, Noto Sans Thai` for Thai. Every character renders in the user's native font infrastructure. This is design-as-localization, not design-as-decoration.
8
+
9
+ What gives Pinkoi its quietly distinctive feel is its **flat semantic button system** with seven named variants. Every button — `--primary`, `--secondary`, `--purchase`, `--danger`, `--green`, `--login`, plus `*-plain` ghost variants — uses the same recipe: `background: <color>; border: 1px solid <same-color>; color: #fff;`. The matched border-and-background gives buttons a crisp "solid block" appearance without any shadow, while the explicit `1px` border ensures visual integrity even on high-DPI displays where pure-fill buttons can look fuzzy. Coral (`#f16c5d`) is reserved for the `--purchase` variant alone — the highest-conversion moment on every product page.
10
+
11
+ **Key Characteristics:**
12
+ - Locale-aware system font stacks — no custom typeface, but explicit per-language fallbacks (TC/SC/JP/TH)
13
+ - Weight 700 dominant for headlines, CTAs, and emphasis (verified in CSS: 37x vs. 16x weight 400)
14
+ - Conservative `border-radius` — `4px` is the workhorse on buttons and cards, `2px` on badges, `50%` on avatars
15
+ - **Flat button system** — every variant uses `border: 1px solid <bg-color>`, giving a crisp solid-block look without shadow
16
+ - 7-tier semantic button variants (`primary`, `secondary`, `danger`, `purchase`, `green`, `login`, `*-plain`) with full hover/active state matrices
17
+ - Cool teal-navy (`#10567b`) as primary action color — overrides the warm "Pinkoi" naming
18
+ - Coral (`#f16c5d`) reserved exclusively for the `--purchase` variant — the highest-conversion CTA
19
+ - Skeuomorphic colored shadows reserved for **legacy specialty controls** only (`.m-button-{pink,gray,green,unfav}` — favorite hearts, follow-shop buttons), never on the primary `.m-br-button` system
20
+ - High-density grid: 6-column product layout (`16.66%` each) with `12px` total horizontal margin per card
21
+ - 12-step neutral gray scale from `#f7f7f8` → `#202026` for surfaces, borders, and text hierarchy
22
+
23
+ ## 2. Color Palette & Roles
24
+
25
+ ### Primary
26
+ - **Mid Teal** (`#10567b`): `--primary` and `--login` button **base** background. The default brand action color.
27
+ - **Deep Teal** (`#064162`): `--primary` and `--login` **hover** state. Darker for visual press feedback.
28
+ - **Darkest Navy** (`#003354`): `--primary` and `--login` **active/pressed** state. The deepest brand blue.
29
+ - **Bright Teal** (`#2e90b7`): Link color, `--*-plain` visited state, secondary brand accent (used 22x in core CSS).
30
+ - **Pure White** (`#ffffff`): Card surfaces, modal backgrounds, button text on filled buttons, `--secondary` button background.
31
+
32
+ ### Surface & Background
33
+ - **Surface Soft** (`#f7f7f8`): Default page background tint, `--secondary` button hover, grouped section background (20x in core).
34
+ - **Surface Hover** (`#eeeeef`): `--secondary` button active state, slightly heavier muted surface.
35
+ - **Border Light** (`#e5e5e6`): Default thin dividers between rows.
36
+ - **Border Mid** (`#d3d3d5`): Standard component border (cards, inputs, button outlines for non-filled variants — used 32x in core).
37
+
38
+ ### Neutral Scale (Text & Iconography)
39
+ - **Text Primary** (`#39393e`): Default body and heading color (41 uses in CSS — the dominant text color).
40
+ - **Text Secondary** (`#515156`): Slightly lighter for secondary headings and labels (10x).
41
+ - **Text Muted** (`#66666a`): Captions, timestamps, descriptive text (26x).
42
+ - **Text Subtle** (`#7c7c80`): Disabled-looking tertiary text.
43
+ - **Text Faint** (`#929295`): Hints, placeholder, very low-emphasis labels.
44
+ - **Text Disabled** (`#a8a8ab`): Disabled states, line-through original prices (`.oprice`), `--secondary` button border.
45
+ - **Text Ghost** (`#bfbfc1`): Decorative or low-priority dividers, alternative line-through price color.
46
+ - **Text Black** (`#202026`): Reserved for maximum-emphasis moments (overlays, modal titles).
47
+
48
+ ### Purchase (CTA-exclusive)
49
+ - **Coral Base** (`#f16c5d`): `--purchase` button **base** background. Used **only** on the most important conversion moment per page (Add to Cart, Buy Now).
50
+ - **Coral Hover** (`#e56051`): `--purchase` hover state. Confirmed CSS-exclusive: appears in only 2 places — the `--purchase` button and one decorative bold text rule.
51
+ - **Coral Active** (`#da5648`): `--purchase` pressed state.
52
+
53
+ ### Error / Danger
54
+ - **Error Red** (`#e63349`): The system's error/danger color (25 uses in core CSS). Used as: `--danger` button base, form validation error label/border/icon, required-field asterisk (`.s-required:after`), warning info text (`.g-info.g-warn b`), `--danger-plain` text hover. **Not** a promotional sale color — it's the validation/destructive red.
55
+ - **Error Red Hover** (`#d72136`): `--danger` button hover.
56
+ - **Error Red Active** (`#c41428`): `--danger` button pressed.
57
+ - **Pink Visited** (`#f86173`): `--danger-plain` visited link state.
58
+
59
+ ### Success
60
+ - **Success Green Base** (`#2cac97`): `--green` button base background. Teal-leaning green, not pure forest.
61
+ - **Success Green Hover** (`#289c8a`): `--green` hover and active state.
62
+
63
+ ### Decorative / Legacy
64
+ - **Brand Pink** (`#c83166`): Used inside the legacy skeuomorphic shadow recipe for pink-themed buttons (`.m-button-pink`). Also appears as accent in promotional decoration.
65
+ - **Hot Pink** (`#ff6299`): `.m-button-pink:hover` background — legacy favorite/heart button.
66
+ - **Lime Green** (`#7ec527` / `#65a40e` / `#4d9200`): `.m-button-green` legacy palette — applies to specialty controls only.
67
+
68
+ ### Shadow Tints (Layered Shadow Components)
69
+ - **Shadow Soft** (`rgba(32,32,38,.12)`): The default soft drop shadow base.
70
+ - **Shadow Edge** (`rgba(32,32,38,.2)`): Used in `0 1px 1px 0 rgba(32,32,38,.2)` for subtle row dividers and `.card-discount-badge`.
71
+ - **Shadow Modal** (`rgba(32,32,38,.4)`): Stronger overlay shadow for modals and popovers.
72
+ - **Shadow Tooltip** (`hsla(240,2%,41%,.8)`): Tooltip outer glow.
73
+
74
+ ## 3. Typography Rules
75
+
76
+ ### Font Stack (Locale-Aware)
77
+ Pinkoi runs **per-language font stacks**. Always lead with `Helvetica Neue, Helvetica, Arial`, then append the user's locale stack:
78
+
79
+ | Locale | Font Stack |
80
+ |---|---|
81
+ | Default (en) | `Helvetica Neue, Helvetica, Arial, Verdana, sans-serif` |
82
+ | Traditional Chinese | `Helvetica Neue, Helvetica, Arial, PingFang TC, Heiti TC, Microsoft JhengHei, sans-serif` |
83
+ | Simplified Chinese | `Helvetica Neue, Helvetica, Arial, PingFang SC, Heiti SC, Microsoft YaHei, sans-serif` |
84
+ | Japanese | `Helvetica Neue, Helvetica, Arial, ヒラギノ角ゴ Pro W3, Hiragino Kaku Gothic Pro, メイリオ, Meiryo, PingFang TC, sans-serif` |
85
+ | Thai | `Helvetica Neue, Helvetica, Arial, Thonburi, Noto Sans Thai, Droid Sans Thai, sans-serif` |
86
+
87
+ ### Weights
88
+ - **700**: Headings (H1–H4 verified weight 700 on `/browse`), prices, discount badge children, emphasis spans. Bold-heavy is the brand's typographic posture **for hierarchy and emphasis**.
89
+ - **500**: Secondary emphasis — subheads, semi-bold UI labels.
90
+ - **400**: Body text, long-form descriptions, **button text** (verified: `.m-br-button .text` renders at weight 400 on product pages — buttons rely on color and border for prominence, not weight), card badges (`s-card-badge`).
91
+ - **600**: Reserved for narrow contexts; rarely used (only 2 occurrences in core CSS).
92
+
93
+ > **Note on buttons**: Despite the bold-heavy headline posture, button labels themselves are weight 400. Visual prominence comes from the colored bg + matched border (e.g., coral `#f16c5d` for purchase) — not from text weight.
94
+
95
+ ### Size Scale (px)
96
+ | Use | Size |
97
+ |---|---|
98
+ | Captions, timestamps | `9–11px` |
99
+ | Badge text, small labels, breadcrumbs | `12px` |
100
+ | Inline metadata, secondary text | `13px` |
101
+ | **Body, button text default, breadcrumbs `g-breadcrumb`** | `14px` |
102
+ | Subheadings, stronger labels | `15–16px` |
103
+ | Card titles, mid headings | `18–20px` |
104
+ | Section headings | `21–22px` |
105
+
106
+ The scale stays compact — there is no extreme-large display type. Hero headlines on landing surfaces use 22px or scale up via percentage (`100%`, `2.2em`) rather than fixed large pixels.
107
+
108
+ ### Hierarchy is Weight-Driven, Not Size-Driven (verified via Playwright on `/browse`)
109
+ Pinkoi's heading hierarchy is unusual: most `<h1>`, `<h2>`, `<h3>` render at **14–16px** — close to body size. The visual hierarchy comes from **weight 700** combined with **color shifts** (e.g., `#39393e` for primary headings, `#66666a` for secondary, `#2cac97` for special emphasis like "Flagship Shops"). This is the opposite of the SaaS convention of using 32–48px headlines. It reflects Pinkoi's commerce-density priority: every pixel of vertical space saved means more browsable inventory above the fold.
110
+
111
+ ### Special Conventions
112
+ - **No letter-spacing customization** in the modern core CSS — system defaults are trusted (legacy `.g-breadcrumb` uses `letter-spacing: 1px`; `.g-breadcrumb-v2` removes it).
113
+ - **`font-style: italic`** is reserved for testimonials and quoted content.
114
+ - **`text-decoration: none`** on `:hover` for `.m-br-button` — buttons never look like links.
115
+ - **`text-decoration: line-through`** for `.oprice` (original price before discount), in muted gray (`#a8a8ab` or `#bfbfc1`).
116
+ - **Numerals are not tabularized** by default — Pinkoi's product prices flow with prose.
117
+
118
+ ## 4. Component Stylings
119
+
120
+ ### Buttons (`.m-br-button`)
121
+ Base: `border-radius: 4px`, `transition: border .1s, color .1s, background .1s`, `outline: 0`, `cursor: pointer`, `text-align: center`, default text size `14px`. Icon `margin-right: 6px`. **Every filled variant uses `border: 1px solid <same-as-bg>` for a crisp solid block.**
122
+
123
+ Verified state matrices from production CSS:
124
+
125
+ | Variant | Base | Hover | Active | Use Case |
126
+ |---|---|---|---|---|
127
+ | `--primary` | bg `#10567b`, border `#10567b`, text `#fff` | bg/border `#064162` | bg/border `#003354` | Primary CTAs |
128
+ | `--login` | bg `#10567b`, border `#10567b`, text `#fff` | bg/border `#064162` | (matches primary) | Auth flows |
129
+ | `--secondary` | bg `#fff`, border `1px solid #a8a8ab`, text `#39393e` | bg `#f7f7f8` | bg `#eeeeef` | Cancel, dismiss, neutral CTAs |
130
+ | `--purchase` | bg `#f16c5d`, border `#f16c5d`, text `#fff` | bg/border `#e56051` | bg/border `#da5648` | Add to Cart, Buy Now (coral, exclusive) |
131
+ | `--danger` | bg `#e63349`, border `#e63349`, text `#fff` | bg/border `#d72136` | bg/border `#c41428` | Destructive actions |
132
+ | `--green` | bg `#2cac97`, border `#2cac97`, text `#fff` | bg/border `#289c8a` | bg/border `#289c8a` | Confirmations, follow |
133
+ | `--*-plain` | transparent, text-only color | text color hover only | bg `#f7f7f8` | Ghost variants |
134
+
135
+ Buttons sit horizontally with `+ .m-br-button { margin-left: 10px }` for chained CTAs.
136
+
137
+ ### Cards (`.m-card-product`)
138
+ - `box-sizing: border-box`, `display: inline-block`, `vertical-align: top`
139
+ - `max-width: 190px`, width `calc(16.66667% - 12px)` → 6-column responsive grid
140
+ - Horizontal margins: `0 6px` per card → `12px` total gap
141
+ - Container `.m-card-container { margin: 0 -6px }` to negate edge gaps
142
+ - Cards rely on the product image as the primary visual; chrome around them is minimal
143
+
144
+ ### Card Badges (`.s-card-badge`)
145
+ - `border-radius: 2px` (smaller than buttons — sits inside a busy product card)
146
+ - `font-size: 12px`, `font-weight: 400`
147
+ - `padding: 1px 4px` (very tight)
148
+ - `display: inline`, `position: relative`, `top: -1px` for optical alignment
149
+
150
+ ### Discount Badges (`.card-discount-badge`)
151
+ - `border-radius: 2px 0 2px 0` — **asymmetric** corners create a folded-ribbon effect (top-right and bottom-left squared)
152
+ - `box-shadow: 1px 1px 2px 0 rgba(32,32,38,.2)` — subtle lift to separate from product image
153
+ - `position: absolute; top: 0; left: 0` — anchored to product image corner
154
+ - Numeric content uses `font-weight: 700` (`.g-item-badge-discount span`)
155
+ - Companion `.oprice` shows the original price line-through in muted gray (`#a8a8ab` / `#bfbfc1`)
156
+
157
+ ### Navigation
158
+ - Sticky horizontal header on desktop with category dropdowns
159
+ - Default text color `#39393e`, link/active state `#2e90b7`
160
+ - Logo references `pinkoi_logo_2019.svg` — circular arcs + acute angles per brand identity refresh
161
+ - Navigation links remain weight 400 (lighter than headlines) for scannability
162
+
163
+ ### Inputs
164
+ - Border-color follows the neutral scale (`#d3d3d5` default, `#bfbfc1` on focus, `#e63349` on error)
165
+ - Error state uses `box-shadow: inset 0 0 0 1px #e63349` for emphasized error borders
166
+ - Border-radius `4px` to match buttons
167
+ - Padding patterns from CSS: common `5px 10px`, `8px 12px`, `9px 14px` depending on size
168
+ - Required-field asterisk: `.s-required:after { color: #e63349; content: "*"; margin-left: 4px }`
169
+ - No floating-label or pill-shaped inputs — bordered rectangle is the convention
170
+
171
+ ### Tables
172
+ - Used sparingly; commerce content is card-grid first
173
+ - When used, row dividers via `0 1px 1px 0 rgba(32,32,38,.2)` shadow or `1px solid #e5e5e6` border
174
+
175
+ ## 5. Layout Principles
176
+
177
+ ### Spacing Scale
178
+ Pinkoi works in a **5–10px micro-scale** for component padding and a coarser **24px+ rhythm** for section spacing:
179
+
180
+ | Common Padding Values | Use |
181
+ |---|---|
182
+ | `0` (15 uses) | Reset, tight columns |
183
+ | `2px`, `3px` | Badge insets, icon padding |
184
+ | `5px 10px` | Default tight button/cell |
185
+ | `4px 10px`, `6px 10px`, `8px 12px`, `9px 14px` | Button size variants S → M → L |
186
+ | `14px 0`, `64px 0` | Vertical section rhythm |
187
+
188
+ ### Grid
189
+ - 6-column product grid is the dominant pattern (`16.66667%` per card)
190
+ - Container max-widths via media queries — content centers on wider viewports
191
+ - Negative margins on container (`margin: 0 -6px`) to pull edge cards flush
192
+
193
+ ### Density
194
+ Pinkoi is a **high-density** system. Whitespace is rationed; products, prices, badges, and CTAs are stacked tightly to maximize browsable inventory. Don't space components like a SaaS dashboard.
195
+
196
+ ## 6. Depth & Elevation
197
+
198
+ Pinkoi has a **two-track shadow philosophy**: the modern button/card system stays mostly flat, while a small set of legacy specialty controls retain a skeuomorphic colored-underglow recipe.
199
+
200
+ ### Modern Surface Shadows (the default)
201
+ - **Card discount badge** — `1px 1px 2px 0 rgba(32,32,38,.2)` (subtle lift over product image)
202
+ - **Outline focus** — `box-shadow: 0 0 0 1px #d3d3d5` (border-as-shadow, often on focused inputs)
203
+ - **Inline error** — `box-shadow: inset 0 0 0 1px #e63349` (red inset for invalid form fields)
204
+ - **Single-pixel solid bottom** — `0 1px #515156` ("button depth"), `0 1px #d3d3d5` (subtle bottom edge)
205
+ - **Tooltip glow** — `0 0 2px hsla(240,2%,41%,.8)`
206
+ - **Modal/dialog** — `0 0 4px rgba(32,32,38,.4)`
207
+ - **Row divider** — `0 1px 1px 0 rgba(32,32,38,.2)`
208
+
209
+ The primary `.m-br-button` system has **no shadow at all** — its visual weight comes from the matched bg+border combo, not elevation.
210
+
211
+ ### Legacy Skeuomorphic Shadows (specialty controls only)
212
+ A small set of older button classes — `.m-button-pink`, `.m-button-gray`, `.m-button-green`, `.m-button-unfav` — apply a layered colored shadow on `:hover`. These are typically used for favorite/follow-shop heart buttons, not primary CTAs.
213
+
214
+ Pattern: `0 .2em .2em -.1em <BRAND_MID>, 0 .3em <BRAND_DARK>, 0 .5em .5em -.1em rgba(32,32,38,.12)`
215
+
216
+ | Class | Hover bg | Mid shadow | Dark shadow |
217
+ |---|---|---|---|
218
+ | `.m-button-pink` | `#ff6299` | `#c83166` | `#a32252` |
219
+ | `.m-button-green` | `#7ec527` | `#65a40e` | `#4d9200` |
220
+ | `.m-button-gray` | `#8e9a9f` | `#66666a` | `#535c5f` |
221
+ | `.m-button-unfav` | (transparent) | `#d3d3d5` | `#d3d3d5` |
222
+
223
+ Treat this as a **legacy accent**, not a system-wide pattern. Don't generalize it to the main button system.
224
+
225
+ ### Z-Index Hierarchy
226
+ - Sticky header sits above content
227
+ - Dropdown menus above sticky header
228
+ - Modal overlay above all chrome
229
+ - Toast notifications above modals
230
+
231
+ ## 7. Do's and Don'ts
232
+
233
+ - **DO** use weight 700 for headlines, CTAs, prices, and badges. Bold is the brand's voice.
234
+ - **DON'T** apply weight 300 — Pinkoi never goes "airy thin." Headlines are confident and dense.
235
+ - **DO** reserve coral (`#f16c5d` / `#e56051` on hover) for the single most important purchase moment per page.
236
+ - **DON'T** use coral for navigation, generic CTAs, or info accents — it dilutes the conversion signal.
237
+ - **DO** use the locale-aware font stack with the user's language fallback as the second priority.
238
+ - **DON'T** load custom web fonts — system fonts respect each market's reading habits and reduce LCP across slow APAC connections.
239
+ - **DO** keep the modern button system flat — `border: 1px solid <same-as-bg>` and no shadow. Visual weight comes from color, not elevation.
240
+ - **DON'T** apply skeuomorphic shadows to primary CTAs — that recipe is reserved for legacy specialty controls (favorite, follow-shop buttons).
241
+ - **DO** keep border-radius in the `2px–8px` range (badges 2px, buttons/cards 4px, occasional 6–8px on featured surfaces).
242
+ - **DON'T** use pill-shaped or fully rounded buttons — they break the high-density commerce aesthetic.
243
+ - **DO** pack product cards tightly with `12px` total gutters and 6-column grids on desktop.
244
+ - **DON'T** overspace on landing pages — Pinkoi users browse a lot of inventory at once.
245
+ - **DO** treat `#e63349` (and its hover/active siblings) as the **error/destructive red** — use it for form validation, danger buttons, required-field asterisks, and warnings.
246
+ - **DON'T** confuse the error red with a sale-price color — discount badges use the asymmetric-corner ribbon style, not red text.
247
+
248
+ ## 8. Responsive Behavior
249
+
250
+ ### Breakpoints
251
+ | Name | Range | Key Changes |
252
+ |---|---|---|
253
+ | Mobile | `<767px` | 2-column product grid, stacked nav, full-width CTAs |
254
+ | Mobile (alt) | `<768px` | Some surfaces use 768px as the cutoff |
255
+ | Tablet | `768px–1037px` | 3–4 column product grid, condensed nav |
256
+ | Desktop | `1037px–1200px` | 5–6 column product grid, full nav |
257
+ | Wide | `>1200px` | 6-column grid with side margins |
258
+ | Extra Wide | `>1248px` | Centered max-width container |
259
+
260
+ ### Touch Targets
261
+ - Buttons use `5px 10px` to `9px 14px` padding scale — adequate but compact
262
+ - Card tap targets cover the entire `.m-card-product` area
263
+ - Mobile nav typically expands to a full-screen drawer
264
+
265
+ ### Collapsing Strategy
266
+ - 6-column product grid → 4 → 3 → 2 columns on shrinking width
267
+ - Horizontal sticky nav → hamburger drawer below 768px
268
+ - Multi-column footer → stacked sections below 768px
269
+ - Filter sidebar → bottom sheet on mobile
270
+ - Inline price + action → stacked below thumbnail on mobile
271
+
272
+ ### Image Behavior
273
+ - Product images dominate cards — minimum 190px square
274
+ - Hover states may swap to alternate angle on desktop only (no hover on mobile)
275
+ - WebP/lazy-load standard practice (CDN: `cdn02.pinkoi.com`)
276
+ - Card aspect ratio preserved across breakpoints
277
+
278
+ ## 9. Agent Prompt Guide
279
+
280
+ ### Quick Color Reference
281
+ - Primary CTA bg: Mid Teal (`#10567b`); hover `#064162`; active `#003354`
282
+ - Purchase CTA bg: Coral (`#f16c5d`); hover `#e56051`; active `#da5648` — **buy actions only**
283
+ - Danger/Error: Red (`#e63349`); hover `#d72136`; active `#c41428` — destructive AND form validation
284
+ - Success: Teal Green (`#2cac97`); hover `#289c8a`
285
+ - Secondary button: white bg, `1px solid #a8a8ab` border, `#39393e` text
286
+ - Default text: Slate Dark (`#39393e`)
287
+ - Muted text: Slate Mid (`#66666a`)
288
+ - Link / mid-brand: Bright Teal (`#2e90b7`)
289
+ - Border default: Light Gray (`#d3d3d5`)
290
+ - Surface tint: Cool White (`#f7f7f8`)
291
+
292
+ ### Example Component Prompts
293
+ - "Create a Pinkoi-style product card: white background, 1px solid #d3d3d5 border, 4px radius, max-width 190px. Image fills the top 75% of the card. Below: title in 14px weight 700 #39393e (2-line clamp), price in 16px weight 700 #39393e, optional discount badge with `border-radius: 2px 0 2px 0` (asymmetric ribbon corners), `1px 1px 2px 0 rgba(32,32,38,.2)` shadow, absolute top-left."
294
+ - "Build a Pinkoi primary button: 4px radius, 14px text weight 400, white text, #10567b background, `1px solid #10567b` border, 8px 12px padding. Hover: bg + border to #064162. Active: bg + border to #003354. No shadow — the matched bg+border combo gives the solid-block feel. Transition: `border .1s, color .1s, background .1s`. Note: button labels are weight 400, not 700 — visual weight comes from color + border, not text weight."
295
+ - "Design a 'Add to Cart' purchase button: 4px radius, 14px weight 400 white text, #f16c5d background, `1px solid #f16c5d` border, 9px 14px padding. Hover: #e56051. Active: #da5648. This button must be the most visually weighted element on the product page — coral is finite and reserved for this moment only. Verified live: `.m-br-button--purchase` on product detail page exactly matches these values."
296
+ - "Create a Pinkoi navigation header: white sticky bar, 14px weight 400 #39393e nav links with #2e90b7 hover, dropdown menus with 4px radius and `0 0 4px rgba(32,32,38,.4)` shadow. Logo (`pinkoi_logo_2019.svg`) on the left, search input center (border #d3d3d5, 4px radius), Login button (`--login` variant: #10567b bg + matched border + white text) on the right."
297
+ - "Build a form input with error state: 1px solid #d3d3d5 border default, 4px radius, 8px 12px padding. On error, set border to #e63349 and add `box-shadow: inset 0 0 0 1px #e63349` for a doubled-up red border effect. Helper text below in #e63349 weight 400 12px. Required-field labels get an asterisk via `.s-required:after { color: #e63349; content: '*'; margin-left: 4px }`."
298
+
299
+ ### Iteration Guide
300
+ 1. **Use weight 700 for headings, prices, and emphasis spans** — but **button labels stay at weight 400**. Visual weight on buttons comes from color + matched border, not text weight.
301
+ 2. **Use the locale-aware font stack** — never hardcode a single font family. Lead with `Helvetica Neue, Helvetica, Arial`, append the user's language fallback.
302
+ 3. **`border-radius: 4px`** is the workhorse. `2px` for badges. Discount badges use asymmetric `2px 0 2px 0`. Never go above `10px` except on rare hero overlays.
303
+ 4. **Filled buttons get `border: 1px solid <same-as-bg>`** — this matched border gives the crisp solid look. Never add a shadow to the modern button system.
304
+ 5. **Reserve coral (`#f16c5d`) exclusively for the `--purchase` variant**. Using it elsewhere weakens conversion.
305
+ 6. **Treat `#e63349` as the error red across ALL contexts** — `--danger` button, form validation borders, required-field asterisks, warning text. It's not a sale-price color.
306
+ 7. **High-density spacing** — micro-padding (`5px 10px` to `9px 14px`) on controls, generous (`24px+`, `64px 0`) only between full sections.
307
+ 8. **6-column product grid** is the desktop default. Cards are `calc(16.66667% - 12px)` wide with `0 6px` horizontal margins.
308
+ 9. **Use `#39393e` for body text**, never pure black. The slightly warm dark-gray reads better against the soft `#f7f7f8` surface tint.
309
+ 10. **Skeuomorphic colored shadows are LEGACY** — only apply them to favorite/follow-shop accent buttons (`.m-button-{pink,gray,green,unfav}`), never to the main `.m-br-button` system.
@@ -0,0 +1,12 @@
1
+ # Pinkoi Inspired Design System
2
+
3
+ [DESIGN.md](./DESIGN.md) extracted from the public [Pinkoi](https://en.pinkoi.com) website. Pinkoi does not publish an official design system or brand kit, so this reference is **reverse-engineered from the live production CSS** as of 2026-04-17. Colors, fonts, button variants, and shadow recipes are extracted directly from Pinkoi's CSS bundles served via `cdn02.pinkoi.com`. 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 Pinkoi design language — Asia's cross-border design marketplace with bold-700 typography, locale-aware font stacks, conservative 4px radii, and the signature skeuomorphic colored button shadows.
@@ -0,0 +1,115 @@
1
+ # Research Sources for Pinkoi
2
+
3
+ 추출 일자: 2026-04-17
4
+ 스킬: `omd:add-reference` (5-tier methodology)
5
+ 입력 URL: `https://en.pinkoi.com`
6
+
7
+ ## Tier 1 — Official Design System
8
+
9
+ **Status: NOT FOUND**
10
+
11
+ Checked patterns (HEAD requests + content verification):
12
+ - `https://pinkoi.design` — DNS not resolving
13
+ - `https://design.pinkoi.com` — DNS not resolving
14
+ - `https://pinkoi.com/design`, `/design-system`, `/styleguide`, `/brand` — All return 200 due to SPA catch-all routing, but content is the homepage (no DS docs)
15
+ - `https://en.pinkoi.com/about/brand` — redirects to /about, brand storytelling page only
16
+
17
+ GitHub search: no official `pinkoi/*` org. All repos are third-party scrapers, clones, or unrelated. No public design tokens repository.
18
+
19
+ WebSearch (`"Pinkoi" "design system" site:pinkoi.com`): no DS documentation surfaces.
20
+
21
+ ## Tier 2 — Brand / Press Kit
22
+
23
+ **Status: NOT FOUND**
24
+
25
+ `/about` page contains company storytelling, mission ("Design the way you are"), milestones (founded Taipei 2011, expanded to JP/HK/Bangkok). No color codes, font specs, logo guidelines, or token files.
26
+
27
+ ## Tier 3 — Engineering / Design Blog
28
+
29
+ **Status: REFERENCED for context, no DS-specific articles**
30
+
31
+ - `medium.com/pinkoi-engineering` — publication exists, but archive listing (verified via WebFetch) shows no design-system, design-tokens, Storybook, or component-library articles. Topics covered: Pinzap e-commerce, design patterns (software), Android, Jetpack Compose, Python CSV, Socket.IO, team efficiency.
32
+ - General references to internal DS work appeared in tech career talks, but no public token publication.
33
+
34
+ ## Tier 4 — Live Site Recon
35
+
36
+ **Status: PRIMARY SOURCE for this reference (Tier 1-3 yielded nothing tokenizable)**
37
+
38
+ Pages inspected:
39
+ - `https://en.pinkoi.com` (English homepage)
40
+
41
+ CSS bundles fetched directly from CDN (`cdn02.pinkoi.com/media/dist/`):
42
+ - `core-53a12ed32ae4ca90fb40.css` (193 KB) — primary tokens, button system, components
43
+ - `utilities-393a3cafa4749e418720.css` (13 KB) — utility classes
44
+ - `react-common-modules-51d0e94fa5fc0b1616a1.css` (6 KB) — shared React components
45
+ - `postinit-04a59acb1b98b69099c4.css` (64 KB) — late-loaded styles
46
+
47
+ Extraction method: `curl` + `grep` for `font-family`, hex colors, `border-radius`, `box-shadow`, `font-size`, `font-weight`, `padding`, media queries, button class definitions.
48
+
49
+ ### Extracted Artifacts (high confidence)
50
+ - **Color palette** — hex frequency analysis across 4 CSS bundles (top 30 captured), full neutral scale derived
51
+ - **Semantic button variants** — `.m-br-button--{primary,secondary,danger,purchase,green,login,*-plain}` confirmed with full state matrices (hover/active/visited)
52
+ - **Skeuomorphic button shadow recipe** — directly extracted from production CSS
53
+ - **Locale font stacks** — 5 distinct stacks confirmed (default, TC, SC, JP, TH)
54
+ - **Border-radius scale** — frequency: 4px (21x), 2px (18x), 50% (15x), 5px (11x), 3-10px (rare)
55
+ - **Font-weight distribution** — 700 (37x), 400 (16x), 500 (12x), 600 (2x) → bold-heavy verdict
56
+ - **Card grid system** — `.m-card-product` class confirms 6-column layout (`calc(16.66667% - 12px)`)
57
+ - **Breakpoints** — 767/768, 1037, 1200, 1248 (from media queries)
58
+
59
+ ## Confidence
60
+
61
+ ### High Confidence (extracted from production CSS, exact values)
62
+ - All hex colors in §2 Color Palette
63
+ - Button variants and state matrices in §4
64
+ - Skeuomorphic shadow recipes in §6
65
+ - Locale font stacks in §3
66
+ - Border-radius and font-weight scales
67
+ - Breakpoints in §8
68
+
69
+ ### Medium Confidence (inferred from extracted patterns + general e-commerce conventions)
70
+ - Z-index hierarchy in §6 (logical inference, not directly extracted)
71
+ - "Coral reserved for purchase" rule in §7 (inferred from semantic variant naming `--purchase`, not stated by Pinkoi)
72
+ - Image hover/swap behavior in §8 (typical e-commerce pattern, not verified)
73
+ - Touch target sizing — extracted padding values, but no explicit accessibility guideline confirmed
74
+
75
+ ### Low / Inferred (verify if used in production)
76
+ - "Bold-heavy is the brand's voice" framing in §1 — derived from CSS frequency, not from official brand voice docs
77
+ - Promotional red (`#e63349`) vs danger red (`#d72136`) distinction — both exist in CSS but the "sale tag" use case is inferred
78
+
79
+ ## Notes
80
+ - Pinkoi's design system is **internal-only**, with no public documentation. This reference is reverse-engineered from the live English site as of 2026-04-17.
81
+ - Site serves locale-specific subdomains (`en.`, `jp.`, `tw.`, `hk.`, `th.`). CSS bundles are shared across locales — extracted tokens apply universally.
82
+ - No dark mode detected in core CSS bundles.
83
+ - Brand identity refresh dated 2019 (logo file `pinkoi_logo_2019.svg`) — current system reflects post-refresh design language.
84
+ - This reference may drift if Pinkoi ships a CSS rewrite. Recommend re-running `omd:add-reference https://en.pinkoi.com` annually.
85
+
86
+ ## Playwright MCP Verification (2026-04-17, after Self-Review)
87
+
88
+ After fixing the 3 errors via Self-Review (using only static CSS extraction), Playwright MCP was installed and used to verify computed styles on the live site at 1440px viewport. **All major claims confirmed:**
89
+
90
+ - Body: `rgb(255,255,255)` bg, `rgb(57,57,62)` text (`#39393e`), Helvetica Neue stack ✓
91
+ - Headings: H1/H2/H3 all weight 700 ✓
92
+ - Heading colors: H1 `#39393e`, secondary H2 `#66666a`, accent H2 `#2cac97` ✓ — confirms semantic color usage
93
+ - `--purchase` button base bg: `rgb(241,108,93)` = `#f16c5d` ✓ (matches corrected value)
94
+ - `.m-card-product` confirmed exists; cards have transparent bg, no border, no radius, no shadow ✓
95
+ - Nav links: 13px weight 400 `#39393e` ✓
96
+ - Link color: `rgb(46,144,183)` = `#2e90b7` ✓
97
+
98
+ **Additional insight discovered via Playwright (added to §3):**
99
+ Pinkoi's heading hierarchy is **weight-driven, not size-driven**. Most headings render at 14–16px (same as body) and rely on weight 700 + color shifts for hierarchy. This is the opposite of SaaS convention (32–48px headlines). Reflects commerce-density priority.
100
+
101
+ Screenshot saved: `_research/browse-1440px.png` (full-page at 1440px on `/browse`).
102
+
103
+ ## Self-Review Corrections (2026-04-17, post-initial-draft)
104
+
105
+ The first DESIGN.md draft contained 3 substantive errors caught during browser-verification self-review. All fixed in the current file:
106
+
107
+ 1. **Button base/hover/active colors were swapped.** Initial draft listed hover values as the "primary" base color. Correct mapping (verified from full CSS rules):
108
+ - `--primary` base `#10567b`, hover `#064162`, active `#003354`
109
+ - `--purchase` base `#f16c5d`, hover `#e56051`, active `#da5648`
110
+ - `--green` base `#2cac97`, hover `#289c8a`
111
+ - `--danger` base `#e63349`, hover `#d72136`, active `#c41428`
112
+
113
+ 2. **Skeuomorphic shadows misattributed to the primary button system.** They actually appear only on legacy `.m-button-{pink,gray,green,unfav}` classes (favorite hearts, follow-shop type CTAs). The modern `.m-br-button--*` system is **flat with `1px solid <same-as-bg>` borders** and no shadow. §1, §6, §7, §9 rewritten accordingly.
114
+
115
+ 3. **`#e63349` was framed as "promotional sale red".** It is actually the **error/danger red** — used in form validation (label, textarea border, input icon, error note), required-field asterisk (`.s-required:after`), `--danger` button base, `.g-info.g-warn` text, and Weibo button bg. There is no separate "sale color" in the CSS — discount badges (`.card-discount-badge`) use shape (asymmetric `border-radius: 2px 0 2px 0`) and shadow, not a dedicated red.