@design-ai/cli 4.55.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 (529) hide show
  1. package/.claude-plugin/plugin.json +164 -0
  2. package/AGENTS.ko.md +126 -0
  3. package/AGENTS.md +182 -0
  4. package/CHANGELOG.md +6883 -0
  5. package/CLAUDE.md +39 -0
  6. package/LICENSE +21 -0
  7. package/README.ko.md +245 -0
  8. package/README.md +277 -0
  9. package/agents/README.md +14 -0
  10. package/agents/a11y-reviewer.md +121 -0
  11. package/agents/component-architect.md +57 -0
  12. package/agents/design-critic.md +46 -0
  13. package/agents/token-extractor.md +63 -0
  14. package/cli/bin/design-ai-mcp.mjs +6 -0
  15. package/cli/bin/design-ai.mjs +40 -0
  16. package/cli/commands/audit.mjs +111 -0
  17. package/cli/commands/check.mjs +226 -0
  18. package/cli/commands/doctor.mjs +141 -0
  19. package/cli/commands/examples.mjs +58 -0
  20. package/cli/commands/help.mjs +271 -0
  21. package/cli/commands/install.mjs +161 -0
  22. package/cli/commands/learn.mjs +1871 -0
  23. package/cli/commands/list.mjs +143 -0
  24. package/cli/commands/mcp.mjs +27 -0
  25. package/cli/commands/pack.mjs +211 -0
  26. package/cli/commands/prompt.mjs +199 -0
  27. package/cli/commands/route.mjs +247 -0
  28. package/cli/commands/search.mjs +60 -0
  29. package/cli/commands/show.mjs +52 -0
  30. package/cli/commands/site.mjs +558 -0
  31. package/cli/commands/status.mjs +161 -0
  32. package/cli/commands/uninstall.mjs +119 -0
  33. package/cli/commands/update.mjs +184 -0
  34. package/cli/commands/version.mjs +94 -0
  35. package/cli/commands/workspace.mjs +176 -0
  36. package/cli/lib/brief.mjs +52 -0
  37. package/cli/lib/check.mjs +642 -0
  38. package/cli/lib/dispatch.mjs +109 -0
  39. package/cli/lib/doctor.mjs +505 -0
  40. package/cli/lib/examples.mjs +258 -0
  41. package/cli/lib/exec.mjs +63 -0
  42. package/cli/lib/help-flags.mjs +5 -0
  43. package/cli/lib/learn.mjs +3694 -0
  44. package/cli/lib/log.mjs +47 -0
  45. package/cli/lib/mcp-server.mjs +426 -0
  46. package/cli/lib/output.mjs +101 -0
  47. package/cli/lib/pack.mjs +599 -0
  48. package/cli/lib/paths.mjs +63 -0
  49. package/cli/lib/prompt.mjs +603 -0
  50. package/cli/lib/route.mjs +740 -0
  51. package/cli/lib/search.mjs +158 -0
  52. package/cli/lib/show.mjs +161 -0
  53. package/cli/lib/signals.mjs +2337 -0
  54. package/cli/lib/site.mjs +6617 -0
  55. package/cli/lib/skill-proposals.mjs +2046 -0
  56. package/cli/lib/suggest.mjs +66 -0
  57. package/cli/lib/workspace.mjs +1056 -0
  58. package/commands/README.md +25 -0
  59. package/commands/component-spec.md +34 -0
  60. package/commands/conversational.md +44 -0
  61. package/commands/design-from-brief.md +141 -0
  62. package/commands/design-review.md +62 -0
  63. package/commands/document-from-brief.md +47 -0
  64. package/commands/extract-tokens.md +38 -0
  65. package/commands/game-ui.md +40 -0
  66. package/commands/illustration.md +37 -0
  67. package/commands/iterate.md +167 -0
  68. package/commands/motion-design.md +54 -0
  69. package/commands/palette-from-brand.md +50 -0
  70. package/commands/print.md +49 -0
  71. package/commands/slide-deck.md +46 -0
  72. package/commands/spatial.md +47 -0
  73. package/commands/stability-review.md +74 -0
  74. package/commands/video.md +42 -0
  75. package/commands/website-improvement.md +77 -0
  76. package/docs/AGENT-DEVELOPMENT.md +658 -0
  77. package/docs/AI-LEARNING.md +429 -0
  78. package/docs/AIDER-INTEGRATION.md +224 -0
  79. package/docs/ARCHITECTURE.ko.md +183 -0
  80. package/docs/ARCHITECTURE.md +105 -0
  81. package/docs/CODEX-INTEGRATION.md +311 -0
  82. package/docs/COMPANY-WEBSITE-DOGFOOD.ko.md +144 -0
  83. package/docs/COMPANY-WEBSITE-DOGFOOD.md +150 -0
  84. package/docs/COMPANY-WEBSITE-INTAKE-TEMPLATE.ko.md +153 -0
  85. package/docs/COMPANY-WEBSITE-INTAKE-TEMPLATE.md +154 -0
  86. package/docs/CONTRIBUTING.ko.md +203 -0
  87. package/docs/CONTRIBUTING.md +242 -0
  88. package/docs/CURSOR-INTEGRATION.md +220 -0
  89. package/docs/DISTRIBUTION.ko.md +248 -0
  90. package/docs/DISTRIBUTION.md +253 -0
  91. package/docs/DOGFOOD-FINDINGS.md +180 -0
  92. package/docs/DOGFOOD-V4-FINDINGS.md +139 -0
  93. package/docs/DOGFOOD-V4-MKDOCS-FINDINGS.md +233 -0
  94. package/docs/DOGFOOD-V4-NPM-FINDINGS.md +157 -0
  95. package/docs/DOGFOOD-V4-VSCODE-FINDINGS.md +135 -0
  96. package/docs/FIGMA-INTEGRATION.md +222 -0
  97. package/docs/MCP-INTEGRATION.md +243 -0
  98. package/docs/MIGRATION-v4.md +121 -0
  99. package/docs/PLUGIN-PACKAGING.md +240 -0
  100. package/docs/PRODUCT-READINESS.md +66 -0
  101. package/docs/QUICKSTART.ko.md +178 -0
  102. package/docs/QUICKSTART.md +179 -0
  103. package/docs/RELEASE-CHECKLIST.md +292 -0
  104. package/docs/ROADMAP.md +19495 -0
  105. package/docs/SESSION-LOG.md +940 -0
  106. package/docs/TOKEN-SYNC.md +237 -0
  107. package/docs/USING.ko.md +206 -0
  108. package/docs/USING.md +218 -0
  109. package/docs/WEBSITE-IMPROVEMENT.ko.md +75 -0
  110. package/docs/WEBSITE-IMPROVEMENT.md +89 -0
  111. package/docs/announcements/README.md +56 -0
  112. package/docs/announcements/dev-to-korea.md +206 -0
  113. package/docs/announcements/hashnode-post.ko.md +232 -0
  114. package/docs/announcements/okky-post.ko.md +158 -0
  115. package/docs/announcements/press-kit.md +101 -0
  116. package/docs/announcements/reddit-r-korea.md +196 -0
  117. package/docs/announcements/show-hn.md +114 -0
  118. package/docs/announcements/twitter-thread.md +255 -0
  119. package/docs/external-status.md +34 -0
  120. package/docs/integrations/aider-walkthrough.ko.md +275 -0
  121. package/docs/integrations/aider-walkthrough.md +274 -0
  122. package/docs/integrations/codex-walkthrough.ko.md +297 -0
  123. package/docs/integrations/codex-walkthrough.md +297 -0
  124. package/docs/integrations/cursor-walkthrough.ko.md +281 -0
  125. package/docs/integrations/cursor-walkthrough.md +284 -0
  126. package/docs/integrations/design-ai-mcp-server.md +169 -0
  127. package/docs/integrations/figma-mcp.md +149 -0
  128. package/docs/integrations/github-mcp.md +178 -0
  129. package/docs/integrations/linear-mcp.md +215 -0
  130. package/docs/integrations/notion-mcp.md +174 -0
  131. package/docs/integrations/sdk-walkthrough.ko.md +375 -0
  132. package/docs/integrations/sdk-walkthrough.md +375 -0
  133. package/docs/integrations/slack-mcp.md +208 -0
  134. package/docs/integrations/vscode-walkthrough.ko.md +202 -0
  135. package/docs/integrations/vscode-walkthrough.md +205 -0
  136. package/docs/requirements.txt +16 -0
  137. package/docs/site-overrides/extra.css +83 -0
  138. package/docs/site-overrides/favicon.svg +4 -0
  139. package/docs/site-overrides/logo.svg +10 -0
  140. package/docs/site-overrides/main.html +18 -0
  141. package/docs/website-console/app.js +2540 -0
  142. package/docs/website-console/index.html +24 -0
  143. package/docs/website-console/styles.css +975 -0
  144. package/examples/README.md +252 -0
  145. package/examples/cases/dogfood-v4-korean-hr-onboarding.md +356 -0
  146. package/examples/component-accordion-actions.md +153 -0
  147. package/examples/component-accordion-details.md +147 -0
  148. package/examples/component-accordion-summary.md +180 -0
  149. package/examples/component-accordion.md +229 -0
  150. package/examples/component-account-card.md +284 -0
  151. package/examples/component-address-input.md +260 -0
  152. package/examples/component-affix.md +190 -0
  153. package/examples/component-alert-dialog.md +210 -0
  154. package/examples/component-alert-title.md +77 -0
  155. package/examples/component-alert.md +192 -0
  156. package/examples/component-amount-input.md +278 -0
  157. package/examples/component-anchor.md +198 -0
  158. package/examples/component-app-bar.md +249 -0
  159. package/examples/component-aspect-ratio.md +156 -0
  160. package/examples/component-auto-complete.md +199 -0
  161. package/examples/component-avatar-group.md +170 -0
  162. package/examples/component-avatar.md +191 -0
  163. package/examples/component-back-top.md +123 -0
  164. package/examples/component-backdrop.md +148 -0
  165. package/examples/component-badge.md +181 -0
  166. package/examples/component-banner.md +237 -0
  167. package/examples/component-biometric-gate.md +281 -0
  168. package/examples/component-blockquote.md +153 -0
  169. package/examples/component-border-beam.md +207 -0
  170. package/examples/component-bottom-navigation.md +226 -0
  171. package/examples/component-box.md +112 -0
  172. package/examples/component-breadcrumb.md +222 -0
  173. package/examples/component-button-base.md +190 -0
  174. package/examples/component-button-group.md +117 -0
  175. package/examples/component-button.md +213 -0
  176. package/examples/component-calendar.md +280 -0
  177. package/examples/component-callout.md +131 -0
  178. package/examples/component-card-actions.md +101 -0
  179. package/examples/component-card-content.md +90 -0
  180. package/examples/component-card-header.md +122 -0
  181. package/examples/component-card-media.md +79 -0
  182. package/examples/component-card.md +233 -0
  183. package/examples/component-carousel.md +266 -0
  184. package/examples/component-cascader.md +135 -0
  185. package/examples/component-category-picker.md +271 -0
  186. package/examples/component-chart.md +237 -0
  187. package/examples/component-chat-interface.md +399 -0
  188. package/examples/component-checkbox.md +149 -0
  189. package/examples/component-click-away-listener.md +87 -0
  190. package/examples/component-code.md +213 -0
  191. package/examples/component-collapsible.md +219 -0
  192. package/examples/component-color-picker.md +110 -0
  193. package/examples/component-combobox.md +267 -0
  194. package/examples/component-command.md +299 -0
  195. package/examples/component-config-provider.md +190 -0
  196. package/examples/component-context-menu.md +179 -0
  197. package/examples/component-css-baseline.md +148 -0
  198. package/examples/component-date-picker.md +249 -0
  199. package/examples/component-descriptions.md +242 -0
  200. package/examples/component-dialog-actions.md +111 -0
  201. package/examples/component-dialog-content-text.md +76 -0
  202. package/examples/component-dialog-content.md +105 -0
  203. package/examples/component-dialog-title.md +104 -0
  204. package/examples/component-dialog.md +176 -0
  205. package/examples/component-divider.md +182 -0
  206. package/examples/component-doc-page.md +217 -0
  207. package/examples/component-drawer.md +257 -0
  208. package/examples/component-dropdown.md +220 -0
  209. package/examples/component-email-layout.md +253 -0
  210. package/examples/component-empty-state.md +269 -0
  211. package/examples/component-empty.md +172 -0
  212. package/examples/component-fade.md +87 -0
  213. package/examples/component-feature-grid.md +201 -0
  214. package/examples/component-field.md +266 -0
  215. package/examples/component-filled-input.md +114 -0
  216. package/examples/component-flex.md +117 -0
  217. package/examples/component-float-button.md +214 -0
  218. package/examples/component-form-control-label.md +134 -0
  219. package/examples/component-form-control.md +113 -0
  220. package/examples/component-form-controls.md +251 -0
  221. package/examples/component-form-group.md +86 -0
  222. package/examples/component-form-helper-text.md +95 -0
  223. package/examples/component-form-label.md +98 -0
  224. package/examples/component-form.md +291 -0
  225. package/examples/component-game-hud.md +362 -0
  226. package/examples/component-game-menu.md +327 -0
  227. package/examples/component-grid.md +140 -0
  228. package/examples/component-grow.md +79 -0
  229. package/examples/component-hero-block.md +252 -0
  230. package/examples/component-hover-card.md +211 -0
  231. package/examples/component-icon-button.md +142 -0
  232. package/examples/component-icon.md +102 -0
  233. package/examples/component-illustration.md +280 -0
  234. package/examples/component-image-list.md +107 -0
  235. package/examples/component-image.md +282 -0
  236. package/examples/component-input-adornment.md +101 -0
  237. package/examples/component-input-base.md +134 -0
  238. package/examples/component-input-number.md +141 -0
  239. package/examples/component-input-otp.md +271 -0
  240. package/examples/component-input.md +213 -0
  241. package/examples/component-item.md +243 -0
  242. package/examples/component-kbd.md +197 -0
  243. package/examples/component-krw-amount.md +219 -0
  244. package/examples/component-label.md +118 -0
  245. package/examples/component-layout.md +217 -0
  246. package/examples/component-link.md +223 -0
  247. package/examples/component-list-item-avatar.md +72 -0
  248. package/examples/component-list-item-button.md +139 -0
  249. package/examples/component-list-item-icon.md +82 -0
  250. package/examples/component-list-item-text.md +98 -0
  251. package/examples/component-list-item.md +116 -0
  252. package/examples/component-list-subheader.md +70 -0
  253. package/examples/component-list.md +198 -0
  254. package/examples/component-loading-button.md +125 -0
  255. package/examples/component-loading-sequence.md +254 -0
  256. package/examples/component-lottie-player.md +279 -0
  257. package/examples/component-masonry.md +191 -0
  258. package/examples/component-mentions.md +189 -0
  259. package/examples/component-menu-item.md +102 -0
  260. package/examples/component-menu-list.md +98 -0
  261. package/examples/component-menu.md +139 -0
  262. package/examples/component-menubar.md +259 -0
  263. package/examples/component-message.md +162 -0
  264. package/examples/component-mobile-stepper.md +155 -0
  265. package/examples/component-modal.md +220 -0
  266. package/examples/component-navigation-menu.md +295 -0
  267. package/examples/component-notification.md +166 -0
  268. package/examples/component-otp-countdown.md +245 -0
  269. package/examples/component-outlined-input.md +145 -0
  270. package/examples/component-page-transition.md +281 -0
  271. package/examples/component-pagination.md +226 -0
  272. package/examples/component-paper.md +199 -0
  273. package/examples/component-pass-auth.md +265 -0
  274. package/examples/component-payment-brand-button.md +253 -0
  275. package/examples/component-payment-method-selector.md +272 -0
  276. package/examples/component-payment-receipt.md +277 -0
  277. package/examples/component-popconfirm.md +144 -0
  278. package/examples/component-popover.md +239 -0
  279. package/examples/component-popper.md +129 -0
  280. package/examples/component-pricing-cards.md +247 -0
  281. package/examples/component-progress.md +195 -0
  282. package/examples/component-qr-code.md +201 -0
  283. package/examples/component-radio.md +167 -0
  284. package/examples/component-rate.md +202 -0
  285. package/examples/component-resizable.md +163 -0
  286. package/examples/component-result.md +270 -0
  287. package/examples/component-scroll-area.md +199 -0
  288. package/examples/component-scroll-reveal.md +320 -0
  289. package/examples/component-segmented.md +178 -0
  290. package/examples/component-select.md +258 -0
  291. package/examples/component-separator.md +177 -0
  292. package/examples/component-sheet.md +277 -0
  293. package/examples/component-sidebar.md +257 -0
  294. package/examples/component-skeleton.md +178 -0
  295. package/examples/component-slide.md +89 -0
  296. package/examples/component-slider.md +208 -0
  297. package/examples/component-snackbar-content.md +92 -0
  298. package/examples/component-snackbar.md +121 -0
  299. package/examples/component-sonner.md +165 -0
  300. package/examples/component-space.md +125 -0
  301. package/examples/component-spatial-locomotion.md +373 -0
  302. package/examples/component-spatial-panel.md +330 -0
  303. package/examples/component-speed-dial-action.md +78 -0
  304. package/examples/component-speed-dial.md +177 -0
  305. package/examples/component-spin.md +173 -0
  306. package/examples/component-spinner.md +204 -0
  307. package/examples/component-splitter.md +210 -0
  308. package/examples/component-stack.md +130 -0
  309. package/examples/component-statistic.md +282 -0
  310. package/examples/component-step-button.md +157 -0
  311. package/examples/component-step-connector.md +157 -0
  312. package/examples/component-step-content.md +121 -0
  313. package/examples/component-step-icon.md +115 -0
  314. package/examples/component-step-label.md +101 -0
  315. package/examples/component-step.md +84 -0
  316. package/examples/component-steps.md +264 -0
  317. package/examples/component-stock-chart.md +251 -0
  318. package/examples/component-swipeable-drawer.md +149 -0
  319. package/examples/component-switch.md +99 -0
  320. package/examples/component-tab-scroll-button.md +180 -0
  321. package/examples/component-tab.md +120 -0
  322. package/examples/component-table-body.md +82 -0
  323. package/examples/component-table-cell.md +118 -0
  324. package/examples/component-table-container.md +75 -0
  325. package/examples/component-table-footer.md +72 -0
  326. package/examples/component-table-head.md +78 -0
  327. package/examples/component-table-pagination.md +137 -0
  328. package/examples/component-table-row.md +113 -0
  329. package/examples/component-table-sort-label.md +109 -0
  330. package/examples/component-table.md +202 -0
  331. package/examples/component-tabs.md +184 -0
  332. package/examples/component-tag-badge.md +309 -0
  333. package/examples/component-tag.md +102 -0
  334. package/examples/component-testimonial-carousel.md +218 -0
  335. package/examples/component-textarea-autosize.md +114 -0
  336. package/examples/component-textarea.md +173 -0
  337. package/examples/component-time-picker.md +205 -0
  338. package/examples/component-timeline.md +170 -0
  339. package/examples/component-toast.md +224 -0
  340. package/examples/component-toggle-button.md +129 -0
  341. package/examples/component-toggle.md +220 -0
  342. package/examples/component-toolbar.md +104 -0
  343. package/examples/component-tooltip.md +178 -0
  344. package/examples/component-tour.md +176 -0
  345. package/examples/component-transaction-list-item.md +243 -0
  346. package/examples/component-transfer.md +156 -0
  347. package/examples/component-tree-select.md +202 -0
  348. package/examples/component-tree.md +297 -0
  349. package/examples/component-typography.md +215 -0
  350. package/examples/component-upload.md +295 -0
  351. package/examples/component-video-hero.md +409 -0
  352. package/examples/component-video-player.md +340 -0
  353. package/examples/component-voice-input.md +408 -0
  354. package/examples/component-watermark.md +217 -0
  355. package/examples/component-zoom.md +92 -0
  356. package/examples/doc-explanation-example.md +196 -0
  357. package/examples/doc-how-to-example.md +205 -0
  358. package/examples/doc-tutorial-example.md +162 -0
  359. package/examples/dogfood-korean-fintech-system.md +433 -0
  360. package/examples/email-transactional-example.md +259 -0
  361. package/examples/palette-saas-violet.md +235 -0
  362. package/examples/print-business-card-spec.md +205 -0
  363. package/examples/print-packaging-spec.md +285 -0
  364. package/examples/report-example.md +228 -0
  365. package/examples/slide-deck-example.md +237 -0
  366. package/examples/website-improvement-report.md +128 -0
  367. package/examples/website-improvement-workspace.json +126 -0
  368. package/install.sh +189 -0
  369. package/knowledge/COVERAGE.md +740 -0
  370. package/knowledge/PRINCIPLES.md +108 -0
  371. package/knowledge/a11y/contrast.md +70 -0
  372. package/knowledge/a11y/keyboard-and-focus.md +108 -0
  373. package/knowledge/colors/color-theory.md +90 -0
  374. package/knowledge/colors/mui-palette-structure.md +105 -0
  375. package/knowledge/colors/palettes-by-product-type.md +876 -0
  376. package/knowledge/components/INDEX.md +231 -0
  377. package/knowledge/components/index.json +1470 -0
  378. package/knowledge/components/shadcn-registry.md +159 -0
  379. package/knowledge/conversational/ai-chat-interfaces.md +323 -0
  380. package/knowledge/conversational/chatbot-design.md +312 -0
  381. package/knowledge/conversational/conversational-ui-fundamentals.md +299 -0
  382. package/knowledge/conversational/korean-voice-conventions.md +281 -0
  383. package/knowledge/conversational/voice-ui-patterns.md +297 -0
  384. package/knowledge/design-tokens/ant-design.md +124 -0
  385. package/knowledge/design-tokens/material-3.md +235 -0
  386. package/knowledge/design-tokens/polaris-and-carbon.md +231 -0
  387. package/knowledge/design-tokens/tailwind-v4.md +284 -0
  388. package/knowledge/game-ui/game-accessibility.md +317 -0
  389. package/knowledge/game-ui/game-ui-fundamentals.md +281 -0
  390. package/knowledge/game-ui/hud-design.md +324 -0
  391. package/knowledge/game-ui/korean-gaming-conventions.md +312 -0
  392. package/knowledge/game-ui/menu-systems.md +388 -0
  393. package/knowledge/i18n/korean-app-store-visual.md +223 -0
  394. package/knowledge/i18n/korean-document-style.md +301 -0
  395. package/knowledge/i18n/korean-payments.md +211 -0
  396. package/knowledge/i18n/korean-product-conventions.md +96 -0
  397. package/knowledge/i18n/korean-publishing.md +139 -0
  398. package/knowledge/i18n/korean-typography.md +123 -0
  399. package/knowledge/icons/curated-sets.md +225 -0
  400. package/knowledge/illustration/hero-illustrations.md +234 -0
  401. package/knowledge/illustration/illustration-systems.md +221 -0
  402. package/knowledge/illustration/mascot-design.md +208 -0
  403. package/knowledge/illustration/spot-illustrations.md +246 -0
  404. package/knowledge/illustration/svg-optimization.md +308 -0
  405. package/knowledge/layout/spacing-and-grid.md +119 -0
  406. package/knowledge/motion/app-loading-sequences.md +277 -0
  407. package/knowledge/motion/choreography-depth.md +297 -0
  408. package/knowledge/motion/marketing-motion.md +223 -0
  409. package/knowledge/motion/micro-interactions.md +266 -0
  410. package/knowledge/motion/motion-tools.md +281 -0
  411. package/knowledge/motion/principles.md +126 -0
  412. package/knowledge/patterns/auth-flow-design.md +316 -0
  413. package/knowledge/patterns/b2b-onboarding-flows.md +182 -0
  414. package/knowledge/patterns/brand-identity.md +238 -0
  415. package/knowledge/patterns/brand-references.md +97 -0
  416. package/knowledge/patterns/chart-color-encoding.md +269 -0
  417. package/knowledge/patterns/chart-types.md +344 -0
  418. package/knowledge/patterns/dashboard-composition.md +299 -0
  419. package/knowledge/patterns/design-system-qa.md +356 -0
  420. package/knowledge/patterns/document-typography.md +248 -0
  421. package/knowledge/patterns/email-design.md +338 -0
  422. package/knowledge/patterns/empty-states.md +263 -0
  423. package/knowledge/patterns/error-states.md +318 -0
  424. package/knowledge/patterns/form-design.md +237 -0
  425. package/knowledge/patterns/information-architecture.md +341 -0
  426. package/knowledge/patterns/landing-hero-design.md +283 -0
  427. package/knowledge/patterns/landing-page-patterns.md +681 -0
  428. package/knowledge/patterns/list-and-feed.md +371 -0
  429. package/knowledge/patterns/mobile-navigation.md +278 -0
  430. package/knowledge/patterns/money-and-amount.md +301 -0
  431. package/knowledge/patterns/onboarding.md +300 -0
  432. package/knowledge/patterns/pricing-page-design.md +261 -0
  433. package/knowledge/patterns/realtime-data.md +280 -0
  434. package/knowledge/patterns/report-design.md +330 -0
  435. package/knowledge/patterns/search-ux.md +373 -0
  436. package/knowledge/patterns/settings-page.md +325 -0
  437. package/knowledge/patterns/slide-deck-design.md +316 -0
  438. package/knowledge/patterns/styles-catalog.md +2599 -0
  439. package/knowledge/patterns/technical-writing.md +306 -0
  440. package/knowledge/patterns/ui-reasoning.md +1853 -0
  441. package/knowledge/patterns/ux-guidelines.md +1454 -0
  442. package/knowledge/platforms/react-native.md +395 -0
  443. package/knowledge/print/brochures-and-flyers.md +276 -0
  444. package/knowledge/print/korean-print-conventions.md +284 -0
  445. package/knowledge/print/packaging.md +321 -0
  446. package/knowledge/print/print-fundamentals.md +238 -0
  447. package/knowledge/print/signage-and-posters.md +235 -0
  448. package/knowledge/print/stationery.md +262 -0
  449. package/knowledge/spatial/ar-patterns.md +253 -0
  450. package/knowledge/spatial/comfort-and-accessibility.md +245 -0
  451. package/knowledge/spatial/spatial-design-fundamentals.md +346 -0
  452. package/knowledge/spatial/spatial-ui-elements.md +343 -0
  453. package/knowledge/spatial/vr-patterns.md +302 -0
  454. package/knowledge/typography/font-pairings.md +332 -0
  455. package/knowledge/typography/mui-type-scale.md +57 -0
  456. package/knowledge/typography/type-scale-fundamentals.md +105 -0
  457. package/knowledge/video/in-product-video.md +277 -0
  458. package/knowledge/video/korean-video-conventions.md +247 -0
  459. package/knowledge/video/marketing-video.md +258 -0
  460. package/knowledge/video/social-and-short-form.md +257 -0
  461. package/knowledge/video/video-fundamentals.md +296 -0
  462. package/package.json +106 -0
  463. package/skills/README.md +39 -0
  464. package/skills/color-palette/PLAYBOOK.md +175 -0
  465. package/skills/color-palette/SKILL.md +6 -0
  466. package/skills/color-palette/TEMPLATE.md +103 -0
  467. package/skills/component-spec-writer/PLAYBOOK.md +169 -0
  468. package/skills/component-spec-writer/SKILL.md +6 -0
  469. package/skills/component-spec-writer/TEMPLATE.md +115 -0
  470. package/skills/conversational-ui-designer/PLAYBOOK.md +231 -0
  471. package/skills/conversational-ui-designer/SKILL.md +6 -0
  472. package/skills/design-broadcast/PLAYBOOK.md +146 -0
  473. package/skills/design-broadcast/SKILL.md +6 -0
  474. package/skills/design-critique/PLAYBOOK.md +137 -0
  475. package/skills/design-critique/SKILL.md +6 -0
  476. package/skills/design-pr-review/PLAYBOOK.md +171 -0
  477. package/skills/design-pr-review/SKILL.md +6 -0
  478. package/skills/design-system-builder/PLAYBOOK.md +218 -0
  479. package/skills/design-system-builder/SKILL.md +6 -0
  480. package/skills/design-system-qa/PLAYBOOK.md +163 -0
  481. package/skills/design-system-qa/SKILL.md +6 -0
  482. package/skills/document-author/PLAYBOOK.md +167 -0
  483. package/skills/document-author/SKILL.md +6 -0
  484. package/skills/figma-token-sync/PLAYBOOK.md +149 -0
  485. package/skills/figma-token-sync/SKILL.md +6 -0
  486. package/skills/game-ui-designer/PLAYBOOK.md +209 -0
  487. package/skills/game-ui-designer/SKILL.md +6 -0
  488. package/skills/handoff-spec/PLAYBOOK.md +170 -0
  489. package/skills/handoff-spec/SKILL.md +6 -0
  490. package/skills/illustration-designer/PLAYBOOK.md +166 -0
  491. package/skills/illustration-designer/SKILL.md +6 -0
  492. package/skills/motion-designer/PLAYBOOK.md +223 -0
  493. package/skills/motion-designer/SKILL.md +6 -0
  494. package/skills/print-designer/PLAYBOOK.md +209 -0
  495. package/skills/print-designer/SKILL.md +6 -0
  496. package/skills/slide-deck-author/PLAYBOOK.md +198 -0
  497. package/skills/slide-deck-author/SKILL.md +6 -0
  498. package/skills/spatial-designer/PLAYBOOK.md +238 -0
  499. package/skills/spatial-designer/SKILL.md +6 -0
  500. package/skills/ux-audit/PLAYBOOK.md +142 -0
  501. package/skills/ux-audit/SKILL.md +6 -0
  502. package/skills/video-designer/PLAYBOOK.md +240 -0
  503. package/skills/video-designer/SKILL.md +6 -0
  504. package/skills/website-improvement/PLAYBOOK.md +118 -0
  505. package/skills/website-improvement/SKILL.md +6 -0
  506. package/skills/website-improvement/TEMPLATE.md +103 -0
  507. package/tools/audit/changelog-generate.py +176 -0
  508. package/tools/audit/check-coverage.py +483 -0
  509. package/tools/audit/doctor_assertions.py +256 -0
  510. package/tools/audit/example-qa.py +108 -0
  511. package/tools/audit/frontmatter-check.py +199 -0
  512. package/tools/audit/integration-check.py +95 -0
  513. package/tools/audit/korean-copy-check.py +161 -0
  514. package/tools/audit/link-check.py +146 -0
  515. package/tools/audit/local-ci.py +558 -0
  516. package/tools/audit/package-contents.py +723 -0
  517. package/tools/audit/package-smoke.py +22443 -0
  518. package/tools/audit/raw-hex-check.py +252 -0
  519. package/tools/audit/registry-smoke.py +8188 -0
  520. package/tools/audit/release-metadata.py +9832 -0
  521. package/tools/audit/run-all.py +351 -0
  522. package/tools/audit/smoke_assertions.py +12742 -0
  523. package/tools/audit/stability-review.py +332 -0
  524. package/tools/audit/stale-check.py +156 -0
  525. package/tools/migrations/add-version-frontmatter.py +132 -0
  526. package/tools/migrations/bump-last-updated.py +131 -0
  527. package/tools/migrations/promote-stability.py +172 -0
  528. package/tools/preview/README.md +58 -0
  529. package/tools/preview/render-tokens.py +454 -0
@@ -0,0 +1,108 @@
1
+ <!-- hand-written -->
2
+ ---
3
+ title: Design-AI principles — agent priming cheat sheet
4
+ applies_to: [all]
5
+ purpose: Single-page reference. Read at the start of every design task. Every rule cites a deeper knowledge file.
6
+ version: 1.0.0
7
+ last_updated: 2026-05
8
+ stability: stable
9
+ ---
10
+
11
+ # Design-AI principles
12
+
13
+ The 30 load-bearing rules across this knowledge base. Read this first; it primes you for any design task. Every line links to the deeper file with reasoning + edge cases.
14
+
15
+ ## Color
16
+
17
+ 1. **Contrast: 4.5:1 body, 3:1 UI/large text.** Cite [`a11y/contrast.md`](a11y/contrast.md). Always state the ratio explicitly when introducing a color pair.
18
+ 2. **Tokens by role, not by hex.** `--color-primary-default` not `--blue-600`. Cite [`colors/color-theory.md`](colors/color-theory.md).
19
+ 3. **Dark mode is recomputed, not inverted.** Increase chroma 10–20% for low-light; reset semantic anchors. Cite [`colors/color-theory.md`](colors/color-theory.md).
20
+ 4. **Money colors are a separate axis** from primary/error. `--color-money-positive` / `--color-money-negative` / `--color-money-neutral`. Cite [`patterns/money-and-amount.md`](patterns/money-and-amount.md).
21
+ 5. **Korean stock convention is INVERTED**: red=up, blue=down. Cite [`patterns/money-and-amount.md`](patterns/money-and-amount.md).
22
+ 6. **Color + icon redundancy.** Never encode meaning by color alone — pair with icon, label, or pattern. Cite [`a11y/contrast.md`](a11y/contrast.md).
23
+
24
+ ## Typography
25
+
26
+ 7. **Korean +10% line-height** vs Latin defaults. Body 1.5 → 1.6. Cite [`i18n/korean-typography.md`](i18n/korean-typography.md).
27
+ 8. **Korean body emphasis = weight 600** (not 500). Hangul reads thinner at the same numeric weight. Cite [`i18n/korean-typography.md`](i18n/korean-typography.md).
28
+ 9. **Tabular numerals for amounts.** `font-feature-settings: 'tnum' 1`. Cite [`patterns/money-and-amount.md`](patterns/money-and-amount.md).
29
+ 10. **Pretendard for Korean primary.** Pairs Hangul + Latin in matched proportions. Cite [`i18n/korean-typography.md`](i18n/korean-typography.md).
30
+ 11. **Type scale: base 14 product UI / 18+ marketing.** Ratio 1.25 (major third) is the safe default. Cite [`typography/type-scale-fundamentals.md`](typography/type-scale-fundamentals.md).
31
+
32
+ ## Spacing & layout
33
+
34
+ 12. **4-base spacing scale.** `4, 8, 12, 16, 20, 24, 32, 40, 48, 64`. No arbitrary values. Cite [`layout/spacing-and-grid.md`](layout/spacing-and-grid.md).
35
+ 13. **12-col grid, 24px gutter.** Standard for product UIs. Container queries for component-internal layout. Cite [`layout/spacing-and-grid.md`](layout/spacing-and-grid.md).
36
+ 14. **Korean consumer mobile is denser** than Western defaults. Reduce padding ~15–25% from MUI/Material defaults. Cite [`i18n/korean-product-conventions.md`](i18n/korean-product-conventions.md).
37
+
38
+ ## Motion
39
+
40
+ 15. **Three duration tiers**: 150ms (micro) / 250ms (component) / 400ms (hero only). Cite [`motion/principles.md`](motion/principles.md).
41
+ 16. **`ease-out` for entrances, `ease-in` for exits, `ease-in-out` for position changes.** Cite [`motion/principles.md`](motion/principles.md).
42
+ 17. **Respect `prefers-reduced-motion`.** Drop fade/scale/parallax; keep state changes. Cite [`motion/principles.md`](motion/principles.md).
43
+
44
+ ## Accessibility
45
+
46
+ 18. **Every interactive element keyboard-reachable** with visible focus indicator (≥ 2px, 3:1 contrast). Cite [`a11y/keyboard-and-focus.md`](a11y/keyboard-and-focus.md).
47
+ 19. **Touch targets ≥ 44×44 mobile / ≥ 24×24 web AA.** Use `hitSlop` to extend without growing visual. Cite [`a11y/keyboard-and-focus.md`](a11y/keyboard-and-focus.md).
48
+ 20. **Modal: focus trap on open, restore focus on close, Escape closes.** Cite WAI-ARIA Dialog Pattern + [`examples/component-modal.md`](../examples/component-modal.md).
49
+ 21. **Form errors via `aria-invalid` + `aria-describedby`** pointing at the error text. Cite [`patterns/form-design.md`](patterns/form-design.md).
50
+ 22. **Disabled state requires `aria-disabled`** in addition to native `disabled`. Cite [`a11y/keyboard-and-focus.md`](a11y/keyboard-and-focus.md).
51
+
52
+ ## Forms
53
+
54
+ 23. **Single column, labels above, validate on blur.** Cite [`patterns/form-design.md`](patterns/form-design.md).
55
+ 24. **Mark optional with `(optional)`, not required with `*`.** Required is the default; mark exceptions. Cite [`patterns/form-design.md`](patterns/form-design.md).
56
+ 25. **Korean: separate marketing-consent checkbox** from required-terms. Pre-checked is illegal. Cite [`i18n/korean-product-conventions.md`](i18n/korean-product-conventions.md).
57
+ 26. **Phone-first auth + KakaoTalk login** for Korean consumer apps. Cite [`i18n/korean-product-conventions.md`](i18n/korean-product-conventions.md).
58
+ 27. **Daum Postcode API for any Korean address field.** Never free-form. Cite [`i18n/korean-product-conventions.md`](i18n/korean-product-conventions.md).
59
+
60
+ ## Lists & navigation
61
+
62
+ 28. **Virtualize lists > 50 items** (FlatList on RN, react-virtual on web). Skeleton on first load only. Cite [`patterns/list-and-feed.md`](patterns/list-and-feed.md).
63
+ 29. **Bottom-tab-bar for Korean consumer mobile** (3–5 tabs, always with Korean labels). Cite [`patterns/mobile-navigation.md`](patterns/mobile-navigation.md).
64
+
65
+ ## Components
66
+
67
+ 30. **When specing a component, cite all 3 references** (Ant Design, MUI, shadcn-ui) and explain API choices ("API choices made" section). Don't invent — adapt. Cite [`skills/component-spec-writer/PLAYBOOK.md`](../skills/component-spec-writer/PLAYBOOK.md).
68
+
69
+ ## Data visualization
70
+
71
+ 31. **Pick palette type by data shape**: sequential (low→high), diverging (positive↔negative), categorical (distinct). Cite [`patterns/chart-color-encoding.md`](patterns/chart-color-encoding.md).
72
+ 32. **≤ 8 categorical colors.** More than 8 = user can't track. Cite [`patterns/chart-color-encoding.md`](patterns/chart-color-encoding.md).
73
+ 33. **Dashboard order: KPI row → primary chart → secondary 2-up → detail table.** Cite [`patterns/dashboard-composition.md`](patterns/dashboard-composition.md).
74
+ 34. **"Last updated" indicator on every live dashboard.** Cite [`patterns/realtime-data.md`](patterns/realtime-data.md).
75
+ 35. **Don't blast updates** — throttle to ≤10/sec per element, batch high-frequency. Respect `prefers-reduced-motion`. Cite [`patterns/realtime-data.md`](patterns/realtime-data.md).
76
+
77
+ ## Documentation & long-form
78
+
79
+ 36. **Documents follow Diátaxis types**: tutorial / how-to / reference / explanation. Each has a different template + voice. Don't mix in one doc. Cite [`patterns/information-architecture.md`](patterns/information-architecture.md).
80
+ 37. **Body 18px on docs, not 14px.** Long-form reading needs bigger text than UI. Cite [`patterns/document-typography.md`](patterns/document-typography.md).
81
+ 38. **Lead with the answer (TL;DR pyramid).** Especially in reports. Senior reader stops at the first paragraph; structure for that. Cite [`patterns/report-design.md`](patterns/report-design.md).
82
+ 39. **Active voice, second person, imperative for instructions.** Cite [`patterns/technical-writing.md`](patterns/technical-writing.md).
83
+ 40. **Slide title = the message, not the topic.** "Revenue tripled in Q4" beats "Revenue". Cite [`patterns/slide-deck-design.md`](patterns/slide-deck-design.md).
84
+ 41. **Korean documents: pick honorific level (~합니다 vs ~해요) and stay consistent.** Cite [`i18n/korean-document-style.md`](i18n/korean-document-style.md).
85
+
86
+ ## Output discipline
87
+
88
+ When producing any design artifact:
89
+
90
+ - **Cite knowledge files** for every claim category. No silent assertions.
91
+ - **Contrast matrix** for any color-related output.
92
+ - **Tokens by name in semantic layer**, hex only in primitive layer.
93
+ - **Light + dark** when both requested. Recomputed.
94
+ - **Don't section** with at least 2 specific misuses.
95
+ - **Korean considerations** if `language` includes `ko`.
96
+
97
+ ## When in doubt
98
+
99
+ - Default to **boring, defensible, cited** over **clever, novel, justified-by-vibe**.
100
+ - If the upstream design systems all do X, do X unless you have a specific reason.
101
+ - If you're unsure, ask one clarifying question. Don't guess.
102
+ - Open the relevant `knowledge/<category>/<file>.md` rather than reasoning from training data.
103
+
104
+ ## How this file is used
105
+
106
+ - **Loaded at session start** by the agent (alongside `AGENTS.md` / `CLAUDE.md`).
107
+ - **Re-read before declaring an artifact complete** — verification phase reference.
108
+ - **Cited in artifacts** as `PRINCIPLES.md` for the broad rules; specific files for details.
@@ -0,0 +1,70 @@
1
+ <!-- hand-written -->
2
+ ---
3
+ title: Contrast — WCAG 2.1 / 2.2 reference
4
+ applies_to: [web, mobile, all-ui]
5
+ version: 1.0.0
6
+ last_updated: 2026-05
7
+ stability: stable
8
+ ---
9
+
10
+ # Contrast
11
+
12
+ WCAG 2.1 / 2.2 contrast requirements. Cite this file when justifying any color decision involving text or interactive UI.
13
+
14
+ ## Required ratios
15
+
16
+ | Content | AA (legal floor) | AAA (target for product UI) |
17
+ | --- | --- | --- |
18
+ | Body text (< 18pt regular / < 14pt bold) | **4.5:1** | 7:1 |
19
+ | Large text (≥ 18pt regular / ≥ 14pt bold) | **3:1** | 4.5:1 |
20
+ | UI components (buttons, form borders, focus indicators, icons that convey meaning) | **3:1** | — |
21
+ | Graphical objects that convey information | **3:1** | — |
22
+ | Decorative content, logos | exempt | exempt |
23
+
24
+ > "Large text" = ≥ 24px regular or ≥ 18.66px bold. Pixel sizes assume default browser root.
25
+
26
+ ## Quick failure modes
27
+
28
+ - **Placeholder gray**: `#9CA3AF` on `#FFFFFF` is 2.88:1 — fails AA at any size. Use `#6B7280` (4.83:1) or darker.
29
+ - **Disabled text "disabled-by-design"**: WCAG explicitly **exempts disabled controls**. But if "disabled" is your primary state (e.g., greyed-out menu item), users perceive it as live and you must clear AA.
30
+ - **Brand color on white**: Many brand reds and greens fail AA for body. Reserve them for large text, icons (3:1 only), or accents on darker backgrounds.
31
+ - **Focus indicators**: WCAG 2.4.11 (AA in WCAG 2.2) requires the focus ring itself to clear **3:1 against adjacent colors AND ≥ 2px thickness**. A subtle outline-blue on a light blue button often fails.
32
+ - **Hover-only states**: hover is not a contrast requirement, but the **default state** must clear contrast on its own. Don't rely on hover to fix a non-compliant resting state.
33
+
34
+ ## Computing contrast (WCAG)
35
+
36
+ The relative luminance of an sRGB component `c ∈ [0, 1]` is:
37
+
38
+ ```
39
+ c' = c/12.92 if c ≤ 0.03928
40
+ c' = ((c + 0.055)/1.055)^2.4 otherwise
41
+
42
+ L = 0.2126 R' + 0.7152 G' + 0.0722 B'
43
+ ```
44
+
45
+ Contrast ratio of two luminances:
46
+
47
+ ```
48
+ ratio = (L_lighter + 0.05) / (L_darker + 0.05)
49
+ ```
50
+
51
+ Range: 1 (identical) to 21 (black on white).
52
+
53
+ ## APCA (forthcoming)
54
+
55
+ WCAG 3 will replace the WCAG 2 ratio with APCA (Accessible Perceptual Contrast Algorithm). Different scale (`Lc`), different polarity rules (dark-on-light vs light-on-dark are not symmetric). Don't migrate yet — APCA is not yet a normative web standard. Track: <https://www.myndex.com/APCA/>.
56
+
57
+ ## Tools
58
+
59
+ | Tool | When |
60
+ | --- | --- |
61
+ | Browser DevTools color picker | Quick spot check (every browser shows AA/AAA badges). |
62
+ | `color-contrast` CLI npm package | Automated CI check. |
63
+ | WebAIM Contrast Checker | Authoritative web reference. |
64
+ | Stark (Figma plugin) | Designing in Figma. |
65
+
66
+ ## What this rule does NOT cover
67
+
68
+ - **Color blindness simulation** — pass contrast does not guarantee discriminability. Test with deuteranopia/protanopia simulators if color encodes meaning (status, charts).
69
+ - **Text on imagery / video** — use a scrim (overlay 40–60% black) and verify against the **darkest** patch of the image you allow.
70
+ - **Dark mode contrast inversion** — recompute every token. Light-mode AA does not imply dark-mode AA.
@@ -0,0 +1,108 @@
1
+ <!-- hand-written -->
2
+ ---
3
+ title: Keyboard and focus — WCAG operable
4
+ applies_to: [web, all-ui]
5
+ version: 1.0.0
6
+ last_updated: 2026-05
7
+ stability: stable
8
+ ---
9
+
10
+ # Keyboard and focus
11
+
12
+ Every interactive element on screen must be operable by keyboard alone, with a visible focus indicator at every step. This is non-negotiable for AA compliance and for ~7% of users.
13
+
14
+ ## Tab order rules
15
+
16
+ - Logical reading order. Tab follows the visual reading order — top-to-bottom, left-to-right (or RTL equivalent).
17
+ - Skipping with `tabindex="-1"`: removes the element from the tab order but keeps it focusable programmatically. Use for items focused by code (e.g., modal title focused on open).
18
+ - **Never** use `tabindex` ≥ 1. It overrides natural order and creates inconsistencies.
19
+ - Hidden/disabled elements: `display:none`, `visibility:hidden`, `disabled` — auto-removed.
20
+ - Decorative interactive-looking divs: must have `role` and `tabindex="0"` to be reachable, OR not be interactive.
21
+
22
+ ## Focus indicators
23
+
24
+ Required by WCAG 2.4.11 (AA in 2.2).
25
+
26
+ | Property | Minimum |
27
+ | --- | --- |
28
+ | Thickness | 2 CSS px outline OR equivalent area |
29
+ | Contrast | 3:1 against adjacent colors (the element's normal color AND its background) |
30
+ | Coverage | Encloses the element fully OR fills it with a 3:1+ contrast change |
31
+
32
+ ```css
33
+ /* Good — works on light and dark backgrounds */
34
+ button:focus-visible {
35
+ outline: 2px solid currentColor;
36
+ outline-offset: 2px;
37
+ }
38
+
39
+ /* Better for design systems — token-driven */
40
+ button:focus-visible {
41
+ outline: 2px solid var(--color-focus-ring);
42
+ outline-offset: 2px;
43
+ }
44
+
45
+ /* DO NOT do this */
46
+ *:focus { outline: none; } /* removes a11y, fails 2.4.7 */
47
+ ```
48
+
49
+ `:focus-visible` (modern browsers) keeps focus rings on keyboard nav but hides them for mouse clicks — users who don't want them are not disturbed, keyboard users are protected.
50
+
51
+ ## Required keyboard interactions per pattern
52
+
53
+ | Component | Keys |
54
+ | --- | --- |
55
+ | Button | `Enter`, `Space` activate. |
56
+ | Link | `Enter` activates. (Not space — that scrolls.) |
57
+ | Menu / Dropdown | `↑/↓` move, `Enter` activate, `Escape` close, `Home/End` first/last. |
58
+ | Tabs | `←/→` move (`↑/↓` if vertical), `Home/End` first/last, `Enter/Space` activate (or auto-activate for some patterns). |
59
+ | Combobox | `↓` open, `↑/↓` navigate options, `Enter` select, `Escape` close, type-ahead supported. |
60
+ | Modal / Dialog | Open: focus moves into dialog. `Escape` closes. Focus is **trapped** until close. On close: focus returns to the trigger. |
61
+ | Slider | `←/↓` decrement, `→/↑` increment, `Home` min, `End` max, `PageUp/Down` larger step. |
62
+ | Tree | `↑/↓` move, `←` collapse / move to parent, `→` expand / move to first child, `Enter` activate. |
63
+ | Toggle / Switch | `Space` toggles. (Not Enter unless `<button>`-typed.) |
64
+ | Date picker | Within calendar grid: arrow keys move days, `PageUp/Down` months, `Shift+PgUp/Dn` years. |
65
+
66
+ Source: [W3C ARIA Authoring Practices Guide](https://www.w3.org/WAI/ARIA/apg/) — the canonical reference for keyboard patterns.
67
+
68
+ ## Focus management on route change (SPA)
69
+
70
+ When a client-side route changes:
71
+ - Move focus to the new page's `<h1>` (or main landmark).
72
+ - Update document title (so screen reader announces the new context).
73
+ - Without this, screen reader users hear nothing — the route change is invisible.
74
+
75
+ ```ts
76
+ // On route change
77
+ useEffect(() => {
78
+ document.title = newTitle;
79
+ document.querySelector('h1')?.focus();
80
+ }, [route]);
81
+ ```
82
+
83
+ ## Touch target sizing
84
+
85
+ WCAG 2.5.5 (Level AAA) and 2.5.8 (Level AA in 2.2) require:
86
+
87
+ | Standard | Minimum |
88
+ | --- | --- |
89
+ | WCAG 2.2 AA (Target Size — Minimum) | **24×24 CSS px** |
90
+ | WCAG 2.1 AAA (Target Size) | **44×44 CSS px** |
91
+ | iOS HIG | 44×44 pt |
92
+ | Material guidelines | 48×48 dp |
93
+
94
+ For consumer mobile UIs, **target 44×44 minimum**. Smaller is allowed only when:
95
+ - Equivalent target available elsewhere on the page, OR
96
+ - Inline within a sentence (e.g., link in body text).
97
+
98
+ Spacing matters too: a 24×24 button surrounded by enough space to count as a 44×44 hit area is better than a tightly-packed grid of 32×32 buttons.
99
+
100
+ ## Common failures to flag in review
101
+
102
+ - `<div onClick>` with no `role` and no tab support.
103
+ - Placeholder used as label (`<input placeholder="Email">` with no `<label>`).
104
+ - Modal that steals focus on open but doesn't return it on close.
105
+ - `Escape` on dropdown closes the page modal too (event bubbling).
106
+ - Custom select with no type-ahead.
107
+ - Focus ring removed globally with `outline: none`.
108
+ - Carousel that auto-advances and traps focus.
@@ -0,0 +1,90 @@
1
+ <!-- hand-written -->
2
+ ---
3
+ title: Color theory for product UI
4
+ applies_to: [design-system, brand, all-ui]
5
+ version: 1.0.0
6
+ last_updated: 2026-05
7
+ stability: stable
8
+ ---
9
+
10
+ # Color theory for product UI
11
+
12
+ Practical color reasoning for product designers. Skip if you've designed three real systems already; otherwise this is the floor.
13
+
14
+ ## Color spaces
15
+
16
+ | Space | When to use |
17
+ | --- | --- |
18
+ | **HEX / RGB** | Final output, code-side. Not for reasoning about hue/luminance. |
19
+ | **HSL** | Quick mental model — hue spin, lightness ramps. Falls apart for perceptually uniform ramps (e.g., yellow at L=50% reads brighter than blue at L=50%). |
20
+ | **OKLCH** | Modern default for design tokens. Perceptually uniform, predictable lightness ramps, stable hue under chroma changes. Tailwind v4 defaults to OKLCH. Browser-supported in 2023+. |
21
+ | **HCT (Material 3)** | Same family as OKLCH but tuned for Material's tone mapping. Use if you build on Material 3. |
22
+
23
+ **Rule of thumb**: design and store tokens in **OKLCH or HCT**, output in HEX/RGB for code. Don't author tokens in HSL — your "L=50%" yellow will read 1.5× brighter than your "L=50%" blue.
24
+
25
+ ## Building a palette — the steps
26
+
27
+ 1. **Pick the brand primary** (1 hex).
28
+ 2. **Generate the ramp**: 10–11 stops from `50` (lightest) to `950` (darkest). Use OKLCH lightness step ≈ 8–10% per stop. Keep chroma constant where possible — falling chroma at the dark end avoids muddy darks.
29
+ 3. **Pick semantic anchors** in the ramp:
30
+ - `primary-default` = step 500 or 600 (pick the one that hits 4.5:1 on white).
31
+ - `primary-hover` = +1 step darker.
32
+ - `primary-active` = +2 steps darker.
33
+ - `primary-subtle-bg` = step 50 or 100.
34
+ 4. **Generate accent / supporting hues** by holding `L` and `C` constant in OKLCH and rotating `H`. This produces palette members that feel like siblings.
35
+ 5. **Pick neutrals** — usually a hue-cooled gray (slight blue tint matching the primary). Pure `#808080` reads cold and dead.
36
+ 6. **Pick semantic non-brand**: `success` (green-600), `warning` (amber-500), `error` (red-600), `info` (often = primary).
37
+ 7. **Dark mode**: Don't just invert. Recompute. Increase chroma by 10–20% (low-light eye is less saturated), keep semantic ranks the same (success-600 stays success-600), but sample from a cooler/darker baseline.
38
+
39
+ ## Anchor lightness for AA on white
40
+
41
+ For white backgrounds, the primary text/CTA color must clear ratio:
42
+
43
+ | Hue family | OKLCH `L` for ≈ 4.5:1 on white |
44
+ | --- | --- |
45
+ | Blue | ~50% |
46
+ | Red | ~52% |
47
+ | Green (cool, like emerald) | ~46% |
48
+ | Yellow / Amber | ~36–40% (yellows go nearly to black before they clear AA) |
49
+ | Purple | ~50% |
50
+ | Gray | ~45% |
51
+
52
+ These are starting estimates — always verify with a contrast checker.
53
+
54
+ ## Color roles (semantic naming)
55
+
56
+ Use **role-based names**, not hue-based:
57
+
58
+ ```
59
+ ✗ blue-600
60
+ ✓ color-primary-default
61
+
62
+ ✗ gray-900
63
+ ✓ color-text-primary
64
+
65
+ ✗ red-500
66
+ ✓ color-feedback-error
67
+ ```
68
+
69
+ Ramps stay hue-named (`blue-50` … `blue-950`); the **alias layer** above ramps is role-named. This is the same model as Ant Design, Tailwind, Material 3, and Polaris.
70
+
71
+ ## Anti-patterns
72
+
73
+ - **Too many primaries**: a "primary" and a "primary-2" both used for CTAs. Pick one. The second goes into the secondary slot or gets cut.
74
+ - **Pure black for text**: `#000000` is harsh. Most systems use `#1F1F1F` or `#111827` (Tailwind's gray-900).
75
+ - **Pure white for backgrounds with content**: causes glare; use `#FAFAFA` or `#F9FAFB` for subdued backgrounds.
76
+ - **Color encoding meaning without redundancy**: green for "online" / red for "offline" with no icon or label fails for color-blind users. WCAG 1.4.1.
77
+ - **Inverted dark mode**: light mode swapped doesn't work. White becomes pure black, contrast hurts the eye, and brand hues lose punch.
78
+
79
+ ## Tools
80
+
81
+ - **OKLCH picker**: <https://oklch.com> — design ramps in OKLCH, copy as CSS.
82
+ - **Material Theme Builder**: <https://material-foundation.github.io/material-theme-builder/> — HCT-based, useful even for non-Material projects.
83
+ - **Adobe Leonardo**: <https://leonardocolor.io> — generates ramps with target contrast ratios as the constraint.
84
+ - **Tailwind v4 OKLCH variables**: defined as `oklch(l c h)` in CSS — paste from designer to dev cleanly.
85
+
86
+ ## Cross-reference
87
+
88
+ - [knowledge/colors/palettes-by-product-type.md](palettes-by-product-type.md) — battle-tested palette starting points
89
+ - [knowledge/colors/mui-palette-structure.md](mui-palette-structure.md) — MUI's role/state model
90
+ - [knowledge/a11y/contrast.md](../a11y/contrast.md) — WCAG ratios
@@ -0,0 +1,105 @@
1
+ ---
2
+ title: MUI palette structure
3
+ source: refs/mui/packages/mui-material/src/styles/createPalette.js
4
+ upstream: https://github.com/mui/material-ui/blob/master/packages/mui-material/src/styles/createPalette.js
5
+ extracted_at: 2026-05-19
6
+ applies_to: [react, mui, material-design]
7
+ version: 1.0.0
8
+ last_updated: 2026-05
9
+ stability: stable
10
+ ---
11
+
12
+ # MUI palette structure
13
+
14
+ MUI splits palette into two layers:
15
+
16
+ 1. **Color objects** — `main`, `light`, `dark`, `contrastText` per role.
17
+ 2. **Roles** — `primary`, `secondary`, `error`, `warning`, `info`, `success`, plus surface/text scales.
18
+
19
+ ```ts
20
+ type ColorPartial = {
21
+ main: string;
22
+ light?: string; // auto-derived if missing (lighten by 0.2)
23
+ dark?: string; // auto-derived if missing (darken by 0.3)
24
+ contrastText?: string; // auto-derived for accessible 3:1 against main
25
+ };
26
+
27
+ type Palette = {
28
+ mode: 'light' | 'dark';
29
+ primary: ColorPartial;
30
+ secondary: ColorPartial;
31
+ error: ColorPartial;
32
+ warning: ColorPartial;
33
+ info: ColorPartial;
34
+ success: ColorPartial;
35
+ // Surface
36
+ background: { default: string; paper: string };
37
+ // Text — semantic, not raw
38
+ text: {
39
+ primary: string; // High-emphasis (87% opacity in light)
40
+ secondary: string; // Medium (60%)
41
+ disabled: string; // Low (38%)
42
+ };
43
+ // Other
44
+ divider: string;
45
+ action: {
46
+ active: string;
47
+ hover: string;
48
+ selected: string;
49
+ disabled: string;
50
+ focus: string;
51
+ };
52
+ };
53
+ ```
54
+
55
+ ## Light mode defaults
56
+
57
+ | Role | Token | Hex |
58
+ | --- | --- | --- |
59
+ | primary | `primary.main` | `#1976d2` |
60
+ | secondary | `secondary.main` | `#9c27b0` |
61
+ | error | `error.main` | `#d32f2f` |
62
+ | warning | `warning.main` | `#ed6c02` |
63
+ | info | `info.main` | `#0288d1` |
64
+ | success | `success.main` | `#2e7d32` |
65
+ | background | `background.default` | `#fff` |
66
+ | background | `background.paper` | `#fff` |
67
+ | text | `text.primary` | `rgba(0,0,0,0.87)` |
68
+ | text | `text.secondary` | `rgba(0,0,0,0.6)` |
69
+ | text | `text.disabled` | `rgba(0,0,0,0.38)` |
70
+ | divider | `divider` | `rgba(0,0,0,0.12)` |
71
+
72
+ ## Dark mode defaults
73
+
74
+ | Role | Token | Hex |
75
+ | --- | --- | --- |
76
+ | primary | `primary.main` | `#90caf9` |
77
+ | secondary | `secondary.main` | `#ce93d8` |
78
+ | error | `error.main` | `#f44336` |
79
+ | warning | `warning.main` | `#ffa726` |
80
+ | info | `info.main` | `#29b6f6` |
81
+ | success | `success.main` | `#66bb6a` |
82
+ | background | `background.default` | `#121212` |
83
+ | background | `background.paper` | `#121212` |
84
+ | text | `text.primary` | `#fff` |
85
+ | text | `text.secondary` | `rgba(255,255,255,0.7)` |
86
+ | text | `text.disabled` | `rgba(255,255,255,0.5)` |
87
+ | divider | `divider` | `rgba(255,255,255,0.12)` |
88
+
89
+ ## Action overlay opacities
90
+
91
+ Action states are **overlays** on top of the role color, not separate tokens. Light/dark vary:
92
+
93
+ | State | Light opacity | Dark opacity |
94
+ | --- | --- | --- |
95
+ | `hover` | 0.04 | 0.08 |
96
+ | `selected` | 0.08 | 0.16 |
97
+ | `focus` | 0.12 | 0.12 |
98
+ | `disabled` | 0.26 | 0.3 |
99
+
100
+ ## Designer notes
101
+
102
+ - The **opacity-based text scale** (87/60/38) is Material 1's hierarchy. Modern Material 3 uses HCT-based on-surface variants with hard hex values. Use opacity for muted text in legacy systems, hex tokens in new systems.
103
+ - `contrastText` is auto-computed against `main`. If you override `main`, leave `contrastText` blank — let MUI compute it. If you fix `contrastText` manually, **verify ≥ 4.5:1**.
104
+ - `background.default` and `background.paper` are intentionally identical in dark mode (`#121212`). Material 3 separates them via elevation overlays. If you want depth in dark mode, set `background.paper` to `#1e1e1e` or use `Paper` `elevation` props.
105
+ - Don't add custom roles (e.g., `tertiary`) without also defining `light/dark/contrastText` — the theme provider will throw.