@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,208 @@
1
+ <!-- hand-written -->
2
+ ---
3
+ title: Mascot design (characters and brand creatures)
4
+ applies_to: [mascot, character, brand, korean]
5
+ version: 1.0.0
6
+ last_updated: 2026-05
7
+ stability: stable
8
+ ---
9
+
10
+ # Mascot design
11
+
12
+ A mascot is a recurring character that **embodies the brand**. Done right (Kakao Friends, Duolingo's owl, Mailchimp's Freddie, Mint's piggy), the mascot becomes more recognizable than the wordmark.
13
+
14
+ Done wrong, mascots feel childish, off-brand, or worse — distracting.
15
+
16
+ This file covers when mascots fit, how to design them, and how to maintain them across surfaces.
17
+
18
+ ## When mascots fit
19
+
20
+ | Brand context | Mascot fit |
21
+ | --- | --- |
22
+ | Consumer fintech (Toss, Kakao) | Strong fit |
23
+ | Consumer wellness / education | Strong fit |
24
+ | Children's apps | Strong fit (almost required) |
25
+ | Fun / casual SaaS (Mailchimp, Slack-adjacent) | Good fit |
26
+ | Enterprise B2B | Risky — usually feels off-brand |
27
+ | Healthcare / financial services (B2B) | Bad fit — unprofessional |
28
+ | Government / civic | Bad fit |
29
+ | Luxury / premium consumer | Bad fit |
30
+
31
+ The mascot must match brand voice. Toss's gentle "money characters" wouldn't work for Linear; Linear's geometric severity wouldn't work for Toss.
32
+
33
+ ## What makes a good mascot
34
+
35
+ ### 1. Distinctive silhouette
36
+
37
+ You should recognize the mascot from a black silhouette alone. Test:
38
+ - Print the mascot in solid black at 24px.
39
+ - Show it to someone unfamiliar.
40
+ - They should be able to say "that's a [thing]."
41
+
42
+ If they can't — silhouette isn't strong enough.
43
+
44
+ ### 2. Simple geometry
45
+
46
+ Mascots that scale to icon size and stay recognizable:
47
+ - 5-10 primary shapes
48
+ - 1-2 distinctive features (Duolingo owl: round body + green; Mint: piggy + green; Kakao Ryan: round + ear-less + impassive face)
49
+ - Avoid: thin lines that disappear at small sizes; complex patterns that pixelate
50
+
51
+ ### 3. Consistent personality
52
+
53
+ Mascots have a personality that comes through across poses:
54
+ - Duolingo owl: cheerful but passive-aggressive (especially recent versions)
55
+ - Kakao Ryan: stoic, expressionless, reactive
56
+ - Mint piggy: friendly, neutral
57
+ - Toss money: gentle, calm
58
+
59
+ Define personality in 3-5 adjectives before the mascot is drawn. Otherwise, illustrators / animators interpret differently.
60
+
61
+ ### 4. Adaptable to expressions
62
+
63
+ The mascot needs to express:
64
+ - Happiness / success
65
+ - Sadness / disappointment
66
+ - Surprise / excitement
67
+ - Concern / warning
68
+ - Neutral / waiting
69
+
70
+ Without each of these, the mascot can't appear in all the contexts a UI needs.
71
+
72
+ ### 5. Scalable across formats
73
+
74
+ The mascot must work as:
75
+ - 24-48px icon (app icon, tiny inline)
76
+ - 100-200px spot illustration (empty / success / error states)
77
+ - 400-1200px hero illustration
78
+ - Animated (Lottie / Rive)
79
+ - 3D / printed / sticker (merchandise)
80
+
81
+ Test all sizes in the design phase.
82
+
83
+ ## Korean mascot economy
84
+
85
+ Korea has a well-developed mascot culture:
86
+
87
+ | Brand | Mascot | Style |
88
+ | --- | --- | --- |
89
+ | **Kakao** | Kakao Friends (라이언/어피치/무지/콘/네오/제이지/튜브/프로도) | Round, soft, expressive |
90
+ | **Toss** | Money characters / generic round friends | Soft, calm, minimal |
91
+ | **Naver** | NaverPay characters, LINE Friends | Range — minimal to playful |
92
+ | **GS25** | 무무씨 | Friendly, retail-coded |
93
+ | **Coupang** | Rocket / Pang | Energy, speed |
94
+ | **TmoneyGO** | T-money character | Transit-coded |
95
+ | **Pang Pang** (KEB Hana) | Bear character | Bank-warmth |
96
+
97
+ Common traits in Korean mascots:
98
+ - Round, plump silhouette (cute / 귀여움 / kawaii-adjacent)
99
+ - Few facial features (Kakao Ryan style — no mouth)
100
+ - Minimal expression range (subtlety > exaggeration)
101
+ - Coordinated with brand color (Kakao yellow, Naver green)
102
+
103
+ Korean B2C without a mascot reads as either premium-minimal (Toss-tier) or under-branded.
104
+
105
+ ## Designing a mascot
106
+
107
+ ### Brief
108
+
109
+ Before drawing:
110
+ 1. **What is it?** (animal, abstract creature, object personified)
111
+ 2. **Why this?** (relevance to brand — Mint = piggy bank; Duolingo = wise owl; Kakao Ryan = was originally a lion concept stripped of mane)
112
+ 3. **Voice / personality** (3-5 adjectives)
113
+ 4. **Required expressions** (joy, sad, surprise, neutral — which 5-7?)
114
+ 5. **Required poses** (standing, waving, holding, falling, working — which 8-10?)
115
+ 6. **Color** (1 primary, max 1 accent)
116
+ 7. **Where will it appear?** (icon? hero? loading screen? animation?)
117
+
118
+ ### Design phase
119
+
120
+ 1. **20+ thumbnails** — sketches at 1cm size. Pick top 3.
121
+ 2. **Refinement** — tighten silhouette. Test against silhouette test.
122
+ 3. **Expression sheet** — same character, 5-7 expressions. Confirm consistency.
123
+ 4. **Pose sheet** — same character, 8-10 poses.
124
+ 5. **Style guide** — proportions, colors, line weight, off-limit modifications.
125
+
126
+ ### Style guide must include
127
+
128
+ - **Construction grid** — proportions in head-units (head : body ratio).
129
+ - **Allowed views** (front, 3/4, side — all? just one?)
130
+ - **Forbidden modifications** (don't recolor, don't skew, don't add accessories without approval).
131
+ - **Minimum size** — below this, simplify or use icon variant instead.
132
+ - **Spacing rules** — clear space around mascot when adjacent to other elements.
133
+
134
+ ## Animation considerations
135
+
136
+ Mascots are heavily animated. Key animations:
137
+
138
+ | Animation | Use |
139
+ | --- | --- |
140
+ | **Idle** (subtle breathing / blinking) | Loading screens, ambient |
141
+ | **Reaction** (success cheer, error sad) | Confirmation moments |
142
+ | **Walk / move** | Onboarding, transitions |
143
+ | **Talk / mouth movement** | Voice / chat moments |
144
+
145
+ For animation: use Lottie or Rive (see [`motion/motion-tools.md`](../motion/motion-tools.md)). Designer creates in After Effects (Lottie) or rive.app (Rive); engineer drops in.
146
+
147
+ Reduced-motion: show static frame (hero pose). Don't auto-loop on every screen — battery drain.
148
+
149
+ ## Mascot governance
150
+
151
+ Mascots drift faster than other system elements. Without governance:
152
+ - Different illustrators draw the mascot slightly differently.
153
+ - Marketing redraws for one campaign and the redraw enters the system.
154
+ - 18 months later, you have 3 versions of the mascot.
155
+
156
+ Required governance:
157
+ - **One owner** (illustrator or design lead).
158
+ - **Version-controlled source files** (Figma library, Adobe Illustrator masters in repo).
159
+ - **Mandatory review** for every new mascot illustration.
160
+ - **Asset library** — engineers can't ship a mascot illustration not in the library.
161
+ - **Refresh cadence** — every 18-24 months, full audit + retouch.
162
+
163
+ ## Cultural sensitivity
164
+
165
+ Mascots represent the brand internationally if the brand goes global:
166
+
167
+ - **Animal symbolism varies**: owl (wise in West / unlucky in some Asian contexts); pig (lucky in China / negative in Muslim-majority markets); white tiger (revered in Korea).
168
+ - **Skin tone for human characters**: design with a range.
169
+ - **Gender**: avoid heavily gender-coded mascots if global.
170
+ - **Religious symbols**: avoid (crosses, lotus, etc.) unless intentional.
171
+
172
+ Korean brand entering global market: many Korean mascots translate well (Kakao Friends are popular in Asia / Southeast Asia), but Western markets may need positioning work.
173
+
174
+ ## Mascot vs illustrator's brand
175
+
176
+ A common mistake: the mascot's style becomes the illustrator's style, and as soon as the illustrator leaves, the brand's mascot drifts.
177
+
178
+ Mitigation:
179
+ - Document the mascot completely (no implicit knowledge in one person's head).
180
+ - Treat the mascot as brand asset, not illustrator asset.
181
+ - Source files belong to the company, not the freelancer.
182
+
183
+ ## When mascots become liabilities
184
+
185
+ Mascots can outlive their welcome:
186
+ - Mascot dates (1990s-style mascots aged badly into 2010s).
187
+ - Mascot misaligns with brand evolution (childish mascot when brand goes premium).
188
+ - Mascot becomes meme target (in unflattering ways).
189
+
190
+ Plan for mascot retirement / redesign every 5-10 years. Sudden retirement causes user backlash (Mailchimp's Freddie redesign, Twitter logo replacement); plan transitions.
191
+
192
+ ## Don't
193
+
194
+ - Don't add a mascot just to have one. The brand must need it.
195
+ - Don't have multiple mascots that compete. Pick one primary; supporting cast is OK.
196
+ - Don't put the mascot in every screen — overuse kills the magic.
197
+ - Don't let the mascot drift across artists without governance.
198
+ - Don't use the mascot in serious / sensitive contexts (errors involving money loss, account security failures). Drop the mascot for these moments.
199
+ - Don't design the mascot before the brand voice is set.
200
+
201
+ ## Cross-reference
202
+
203
+ - [`knowledge/illustration/illustration-systems.md`](illustration-systems.md) — system foundation
204
+ - [`knowledge/illustration/spot-illustrations.md`](spot-illustrations.md) — mascot in spot illustrations
205
+ - [`knowledge/illustration/hero-illustrations.md`](hero-illustrations.md) — mascot in heroes
206
+ - [`knowledge/patterns/brand-identity.md`](../patterns/brand-identity.md) — brand foundation
207
+ - [`knowledge/motion/motion-tools.md`](../motion/motion-tools.md) — animating mascots (Lottie / Rive)
208
+ - [`knowledge/i18n/korean-app-store-visual.md`](../i18n/korean-app-store-visual.md) — Korean market visual conventions
@@ -0,0 +1,246 @@
1
+ <!-- hand-written -->
2
+ ---
3
+ title: Spot illustrations (empty / success / error / onboarding)
4
+ applies_to: [illustration, empty-state, error-state, onboarding]
5
+ version: 1.0.0
6
+ last_updated: 2026-05
7
+ stability: stable
8
+ ---
9
+
10
+ # Spot illustrations
11
+
12
+ Spot illustrations are **purposeful, small** illustrations that appear at moments where the UI needs emotional clarity. Empty states, success confirmations, error pages, onboarding screens, paywall moments.
13
+
14
+ This is the most common illustration use case. Get it right and the system works; get it wrong and every screen feels different.
15
+
16
+ ## What "spot" means
17
+
18
+ - 80–240px square (display size).
19
+ - One subject, one idea.
20
+ - Conveys a single emotion or state.
21
+ - Decorative or supplementary — never the only conveyance of meaning.
22
+
23
+ Bigger than an icon (24–48px), smaller than a hero (400px+).
24
+
25
+ ## Five canonical spot moments
26
+
27
+ ### 1. Empty state — "no data yet"
28
+
29
+ | Sub-context | Illustration suggestion |
30
+ | --- | --- |
31
+ | First-run empty (user has no data ever) | Encouraging, action-prompting (open box, blank canvas, sprout) |
32
+ | Filtered empty (user filtered to nothing) | Magnifying glass, "no match" character |
33
+ | Search empty (query returned nothing) | Same as filtered |
34
+ | Failure empty (data load failed) | Use error state, not empty |
35
+
36
+ **Voice**: encouraging, not pitying. "탐색 시작하기" not "데이터가 없습니다".
37
+
38
+ Cite [`examples/component-empty-state.md`](../../examples/component-empty-state.md).
39
+
40
+ ### 2. Success state
41
+
42
+ | Sub-context | Illustration suggestion |
43
+ | --- | --- |
44
+ | Payment success | Checkmark + confetti / receipt motif (use motion sparingly) |
45
+ | Submission success | Letter sent, paper plane |
46
+ | Account created | Welcome, sprout, key |
47
+ | Goal completed | Trophy, milestone marker |
48
+
49
+ **Voice**: warm, not over-the-top. Don't celebrate routine actions ("Logged in!" doesn't need a fireworks illustration).
50
+
51
+ For Korean fintech 결제 완료: gentle checkmark + brand color, no confetti.
52
+
53
+ ### 3. Error state
54
+
55
+ | Sub-context | Illustration suggestion |
56
+ | --- | --- |
57
+ | 404 not found | Lost character, broken link, signpost |
58
+ | 500 server error | Tools / wrench / "we're fixing it" |
59
+ | Permission denied | Locked door, "no entry" |
60
+ | Rate limited / quota | Hourglass, "slow down" |
61
+ | Generic failure | Cloud with X, simple sad-face symbol |
62
+
63
+ **Voice**: humble, helpful. Take responsibility. "잠시 후 다시 시도해 주세요" is better than "Something went wrong."
64
+
65
+ Avoid:
66
+ - Cartoon mascots crying (childish).
67
+ - Skull / death / ominous imagery (alarming).
68
+ - Robots / 1990s clip-art (dated).
69
+
70
+ ### 4. Onboarding step
71
+
72
+ | Sub-context | Illustration suggestion |
73
+ | --- | --- |
74
+ | Welcome | Wave / handshake / sunrise |
75
+ | Setup step 1 | Door opening, key, blank canvas |
76
+ | Permission request | Specific to permission (camera = lens, location = pin, notification = bell) |
77
+ | Final / "you're ready" | Rocket, ribbon, completed checklist |
78
+
79
+ **Voice**: encouraging, low-friction. Each illustration unique to its step (no repetition of one mascot pose).
80
+
81
+ ### 5. Permissions / privacy explainer
82
+
83
+ | Sub-context | Illustration suggestion |
84
+ | --- | --- |
85
+ | Notification permission | Bell with notification dot |
86
+ | Location permission | Pin on map |
87
+ | Camera / mic | Lens / microphone outline |
88
+ | Contacts | People silhouettes |
89
+ | Biometric (Face ID, fingerprint) | Face outline / fingerprint |
90
+
91
+ **Voice**: trust-building. Show what's being asked for visually so the user understands.
92
+
93
+ ## Composition rules
94
+
95
+ ### Single subject
96
+
97
+ One main element. Not five things in one illustration.
98
+
99
+ ```
100
+ ✓ Empty state: one open box.
101
+ ✗ Empty state: open box, sad face, magnifier, "no data" text in illustration, arrows pointing.
102
+ ```
103
+
104
+ ### Use white space (or background)
105
+
106
+ Spot illustrations breathe. Don't fill the bounding box edge-to-edge — leave 10-20% padding inside the canvas.
107
+
108
+ ### Centered or off-center consistently
109
+
110
+ Pick a rule: all spot illustrations centered, OR all left-anchored, OR all bottom-anchored. Mixing positions across the system reads as inconsistent.
111
+
112
+ ### Color anchoring
113
+
114
+ One **dominant** color (usually `--color-brand-default` or `--color-brand-light`).
115
+ One **secondary** color (usually `--color-fg-muted` or `--color-bg-secondary`).
116
+ That's it. No additional colors.
117
+
118
+ Exception: skin tones in character illustrations require a third token (see [`mascot-design.md`](mascot-design.md)).
119
+
120
+ ### Stroke vs fill
121
+
122
+ Match the system's chosen style — see [`illustration-systems.md`](illustration-systems.md) "Defining your style".
123
+
124
+ ## Sizing rules
125
+
126
+ | Context | Size |
127
+ | --- | --- |
128
+ | Mobile empty state | 120–160px |
129
+ | Desktop empty state | 160–240px |
130
+ | Inline (within a card / tile) | 80–120px |
131
+ | Onboarding screen (modal) | 200–280px |
132
+ | Onboarding screen (full-bleed) | 240–320px |
133
+ | Toast / inline notification | None — use icon, not illustration |
134
+
135
+ Don't go larger than 320px for spot illustrations. That's hero territory.
136
+
137
+ ## Layout patterns
138
+
139
+ ### Empty state layout
140
+
141
+ ```
142
+ [illustration 120-200px]
143
+ ↑ centered
144
+ [Headline — 18-22px, semibold]
145
+ [Description — 14-16px, regular, max 2 lines]
146
+ ↓ optional
147
+ [Primary CTA]
148
+ [Secondary link]
149
+ ```
150
+
151
+ Total vertical: ~280-360px. Centered in available space.
152
+
153
+ ### Error state layout (full-page 404)
154
+
155
+ ```
156
+ [Illustration 200-280px]
157
+
158
+ 404
159
+ [Headline]
160
+ [Description with link back]
161
+ [Search OR Home CTA]
162
+ ```
163
+
164
+ ### Onboarding step layout
165
+
166
+ ```
167
+ [Illustration 240-320px]
168
+ [Headline]
169
+ [Description]
170
+ ────
171
+ [Step indicator 1/3]
172
+ [Skip] [Next →]
173
+ ```
174
+
175
+ ## Production checklist
176
+
177
+ For each spot illustration:
178
+
179
+ - [ ] Renders correctly at 1×, 2×, 3× (test on retina + non-retina)
180
+ - [ ] Has a light AND dark mode variant (or uses theme tokens)
181
+ - [ ] Optimized SVG (no inline styles, no metadata, see [`svg-optimization.md`](svg-optimization.md))
182
+ - [ ] Accessible: `<img alt="">` if decorative, `<img alt="...">` if conveying state
183
+ - [ ] File size < 30kB SVG (most should be < 10kB)
184
+ - [ ] Named per convention: `illo-{state}-{specific}.svg` (e.g., `illo-empty-search.svg`)
185
+ - [ ] Exported at native size + 2x bitmap fallback for non-SVG contexts (email, etc.)
186
+
187
+ ## Accessibility
188
+
189
+ Spot illustrations are usually decorative — the surrounding text already conveys meaning. In that case:
190
+
191
+ ```html
192
+ <img src="empty-search.svg" alt="" aria-hidden="true" />
193
+ <h2>찾으시는 결과가 없어요</h2>
194
+ ```
195
+
196
+ Don't add redundant alt text ("a person looking through a magnifying glass at empty space"). The text already says what's happening.
197
+
198
+ If the illustration **is** the only conveyance (e.g., a status badge), then alt text is required:
199
+
200
+ ```html
201
+ <img src="payment-success.svg" alt="결제가 완료되었습니다" />
202
+ ```
203
+
204
+ For animated illustrations (Lottie / SVG SMIL): respect `prefers-reduced-motion` — show the static frame. See [`motion/motion-tools.md`](../motion/motion-tools.md).
205
+
206
+ ## Theming
207
+
208
+ SVG illustrations should theme via `currentColor` and CSS variables:
209
+
210
+ ```svg
211
+ <svg viewBox="0 0 240 240" xmlns="http://www.w3.org/2000/svg">
212
+ <circle cx="120" cy="120" r="100" fill="var(--color-brand-light, #E0F2FF)" />
213
+ <path d="..." stroke="currentColor" stroke-width="2" fill="none" />
214
+ </svg>
215
+ ```
216
+
217
+ ```css
218
+ .empty-state-illustration {
219
+ color: var(--color-brand-default);
220
+ }
221
+
222
+ @media (prefers-color-scheme: dark) {
223
+ /* CSS variable cascade handles it; no per-illustration override needed */
224
+ }
225
+ ```
226
+
227
+ Avoid baking brand color into the SVG as a literal hex. The whole point of a system is one source of truth.
228
+
229
+ ## Don't
230
+
231
+ - Don't use one mascot for all 50 spot illustrations — boring, repetitive.
232
+ - Don't use 5 different mascots — fragmenting.
233
+ - Don't make empty-state illustrations bigger than the headline. The headline is the message.
234
+ - Don't draw something that contradicts the message ("error" with a happy character).
235
+ - Don't over-celebrate routine success ("You added 1 item to cart!" with confetti = annoying).
236
+ - Don't hardcode brand color in the SVG file. Use `currentColor` or CSS variables.
237
+ - Don't ship the same illustration for "no data" and "no search results" — different moments need different cues.
238
+
239
+ ## Cross-reference
240
+
241
+ - [`knowledge/illustration/illustration-systems.md`](illustration-systems.md) — system foundation
242
+ - [`knowledge/illustration/hero-illustrations.md`](hero-illustrations.md) — large brand-led
243
+ - [`knowledge/illustration/mascot-design.md`](mascot-design.md) — when characters are central
244
+ - [`knowledge/illustration/svg-optimization.md`](svg-optimization.md) — file optimization
245
+ - [`examples/component-empty-state.md`](../../examples/component-empty-state.md) — empty state component
246
+ - [`knowledge/motion/motion-tools.md`](../motion/motion-tools.md) — Lottie for animated spots