@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,229 @@
1
+ # `Accordion` (Collapse) — spec
2
+
3
+ > Citing Ant Design `Collapse`, MUI `Accordion`, shadcn-ui `accordion`
4
+
5
+ ## Purpose
6
+
7
+ A vertically stacked set of expandable sections. User clicks a header to reveal/hide the body. Optimized for content that's organized into named sections but doesn't all need to be visible at once.
8
+
9
+ ## When Accordion vs Tabs vs always-visible
10
+
11
+ | Use Accordion | Use Tabs | Always visible |
12
+ | --- | --- | --- |
13
+ | Content sections that don't need parallel comparison | Sections that user switches between | Critical info that must always be visible |
14
+ | FAQ, settings groups, expandable details | Profile / Activity / Settings (mutually exclusive views) | Hero, primary data |
15
+
16
+ Don't use accordion for navigation between distinct screens — that's tabs or pages.
17
+
18
+ ## Anatomy
19
+
20
+ ```
21
+ ┌──────────────────────────────────────────────────┐
22
+ │ ▾ Section 1 title │ ← Header (button)
23
+ ├──────────────────────────────────────────────────┤
24
+ │ Section 1 content... │ ← Body (revealed when expanded)
25
+ │ │
26
+ └──────────────────────────────────────────────────┘
27
+ ┌──────────────────────────────────────────────────┐
28
+ │ ▸ Section 2 title │ ← Collapsed
29
+ └──────────────────────────────────────────────────┘
30
+ ```
31
+
32
+ | Slot | Required | Notes |
33
+ | --- | --- | --- |
34
+ | Trigger (header) | yes | Clickable; title + chevron. |
35
+ | Body | yes | Hidden when collapsed. |
36
+ | Chevron | yes (visual) | Rotates 90° on expand. |
37
+ | Icon (leading) | optional | Per-section icon. |
38
+ | Description (in header) | optional | Subtitle on header. |
39
+
40
+ ## API
41
+
42
+ ```tsx
43
+ <Accordion type="single" defaultValue="section-1" collapsible>
44
+ <Accordion.Item value="section-1">
45
+ <Accordion.Trigger>Section 1 title</Accordion.Trigger>
46
+ <Accordion.Content>
47
+ Body content for section 1.
48
+ </Accordion.Content>
49
+ </Accordion.Item>
50
+ <Accordion.Item value="section-2">
51
+ <Accordion.Trigger>Section 2 title</Accordion.Trigger>
52
+ <Accordion.Content>
53
+ Body content for section 2.
54
+ </Accordion.Content>
55
+ </Accordion.Item>
56
+ </Accordion>
57
+ ```
58
+
59
+ | Prop (root) | Type | Default | Description |
60
+ | --- | --- | --- | --- |
61
+ | `type` | `"single" \| "multiple"` | `"single"` | Single: only one section open at a time. Multiple: any combination. |
62
+ | `value` / `defaultValue` | `string` (single) / `string[]` (multiple) | — | Open section(s) |
63
+ | `onValueChange` | `(value) => void` | — | |
64
+ | `collapsible` | `boolean` | `true` | When `single`: allow closing the open section (vs. always one open) |
65
+ | `disabled` | `boolean` | `false` | Disables all sections |
66
+
67
+ | Prop (Item) | Type | Description |
68
+ | --- | --- | --- |
69
+ | `value` | `string` | Required. Unique key. |
70
+ | `disabled` | `boolean` | Disables this section |
71
+
72
+ ## Variants
73
+
74
+ | Variant | Use |
75
+ | --- | --- |
76
+ | `bordered` (default) | 1px border around each item |
77
+ | `borderless` | No borders, hairline divider between items only |
78
+ | `card` | Each item is a card with shadow + radius |
79
+ | `flush` | Edge-to-edge, no border, divider between items (mobile-friendly) |
80
+
81
+ For settings-list patterns: `flush` is most common.
82
+
83
+ ## States
84
+
85
+ | State | Trigger | Body | Chevron |
86
+ | --- | --- | --- | --- |
87
+ | Collapsed | resting | hidden, height 0 | →/▸ |
88
+ | Expanding | click on trigger | animating to natural height (200ms) | rotating |
89
+ | Expanded | settled | natural height | ↓/▾ |
90
+ | Collapsing | click on open trigger | animating to 0 (200ms) | rotating |
91
+ | Disabled | `disabled={true}` | hidden | muted |
92
+ | Hover | mouse-over header | bg slightly darker | — |
93
+ | Focus-visible | keyboard tab | 2px ring on header | — |
94
+
95
+ ### Animating height
96
+
97
+ Use `grid-template-rows: 0fr → 1fr` (CSS-only, modern):
98
+
99
+ ```css
100
+ .accordion-content {
101
+ display: grid;
102
+ grid-template-rows: 0fr;
103
+ transition: grid-template-rows 200ms ease-out;
104
+ }
105
+ .accordion-content[data-state="open"] {
106
+ grid-template-rows: 1fr;
107
+ }
108
+ .accordion-content > * {
109
+ overflow: hidden;
110
+ }
111
+ ```
112
+
113
+ Or animate `max-height` (but it's CSS-hostile for variable content).
114
+
115
+ Radix's accordion uses CSS variables `--radix-collapsible-content-height` for the natural height — paste-ready.
116
+
117
+ ## Sizes
118
+
119
+ | Size | Header height | Font | Padding |
120
+ | --- | --- | --- | --- |
121
+ | `sm` | 40px | 14px | 12px |
122
+ | `md` (default) | 48px | 15px | 16px |
123
+ | `lg` | 56px | 16px | 20px |
124
+
125
+ For mobile-touch: `md` minimum.
126
+
127
+ ## Tokens consumed
128
+
129
+ ```
130
+ --color-bg-default
131
+ --color-bg-subtle (header hover, body bg in some variants)
132
+ --color-bg-elevated (card variant)
133
+ --color-text-primary
134
+ --color-text-secondary
135
+ --color-border-default
136
+ --color-focus-ring
137
+ --space-md, --space-base
138
+ --radius-md
139
+ --motion-default (200ms expand/collapse)
140
+ --easing-in-out
141
+ --shadow-card (card variant)
142
+ ```
143
+
144
+ ## Accessibility — WAI-ARIA Disclosure / Accordion pattern
145
+
146
+ - Each header is a `<button>` with `aria-expanded="true|false"`.
147
+ - Header has `aria-controls={bodyId}` linking to the body element.
148
+ - Body has `id={bodyId}`, `role="region"`, `aria-labelledby={headerId}`.
149
+ - For `type="single"`: this is the canonical Disclosure pattern.
150
+ - For `type="multiple"`: same pattern, just multiple `aria-expanded="true"` allowed.
151
+
152
+ ### Keyboard
153
+
154
+ | Key | Behavior |
155
+ | --- | --- |
156
+ | `Tab` | Move focus through headers (skip hidden body) |
157
+ | `Enter` / `Space` | Toggle the focused section |
158
+ | `↑` / `↓` | Move focus between accordion headers (Radix convention; some implementations use Tab only) |
159
+ | `Home` / `End` | First / last header |
160
+
161
+ ### Reduced motion
162
+
163
+ Disable height transition. Toggle is instant (no 200ms).
164
+
165
+ ## Code example
166
+
167
+ ```tsx
168
+ // FAQ pattern
169
+ <Accordion type="single" collapsible>
170
+ <Accordion.Item value="how-to-cancel">
171
+ <Accordion.Trigger>구독을 어떻게 해지하나요?</Accordion.Trigger>
172
+ <Accordion.Content>
173
+ 설정 → 구독 관리 → 해지하기에서 언제든 해지할 수 있습니다.
174
+ </Accordion.Content>
175
+ </Accordion.Item>
176
+ <Accordion.Item value="refund">
177
+ <Accordion.Trigger>환불은 어떻게 받나요?</Accordion.Trigger>
178
+ <Accordion.Content>
179
+ 디지털 콘텐츠 7일 이내 환불 가능합니다. 고객센터로 문의해 주세요.
180
+ </Accordion.Content>
181
+ </Accordion.Item>
182
+ </Accordion>
183
+
184
+ // Settings sections (multiple)
185
+ <Accordion type="multiple" defaultValue={["account", "notifications"]}>
186
+ <Accordion.Item value="account">
187
+ <Accordion.Trigger>계정</Accordion.Trigger>
188
+ <Accordion.Content>...</Accordion.Content>
189
+ </Accordion.Item>
190
+ <Accordion.Item value="notifications">
191
+ <Accordion.Trigger>알림</Accordion.Trigger>
192
+ <Accordion.Content>...</Accordion.Content>
193
+ </Accordion.Item>
194
+ <Accordion.Item value="security">
195
+ <Accordion.Trigger>보안</Accordion.Trigger>
196
+ <Accordion.Content>...</Accordion.Content>
197
+ </Accordion.Item>
198
+ </Accordion>
199
+ ```
200
+
201
+ ## Edge cases
202
+
203
+ - **Long body content scrolls into view as it expands**: scrolling the new content into view on expand is helpful for long sections — but only if it's currently below the fold.
204
+ - **Animating height with content that loads async**: as content arrives, the body re-animates if user is watching. Consider rendering all content (display:none) if heights need to be exact.
205
+ - **Nested accordions**: avoid. Re-design the hierarchy.
206
+ - **Accordion inside a modal**: works, but ensure the modal's max-height accommodates the expanded content.
207
+ - **One section open by default**: `defaultValue="..."` for type="single". Useful for FAQ where the most-asked question is open.
208
+ - **Close-all when scrolling**: anti-pattern. User-driven open/close should persist.
209
+
210
+ ## Don't
211
+
212
+ - Don't use Accordion for primary navigation.
213
+ - Don't put critical CTAs only inside accordions — users won't expand to find them.
214
+ - Don't auto-collapse a section while user is reading.
215
+ - Don't show > 8 accordion items at once. Use sections + headings or a different layout.
216
+ - Don't render accordion bodies as `display: none` if they have form state — state is lost. Use `hidden` attribute or keep mounted with `aria-hidden` + visibility.
217
+ - Don't combine controlled + uncontrolled modes — pick one.
218
+
219
+ ## References
220
+
221
+ - Ant Design: [`refs/ant-design/components/collapse/`](../refs/ant-design/components/collapse/) — `Collapse` + `Collapse.Panel`. `accordion` prop forces single. Has nice `expandIcon` customization.
222
+ - MUI: [`refs/mui/packages/mui-material/src/Accordion/`](../refs/mui/packages/mui-material/src/Accordion/) — `Accordion`, `AccordionSummary`, `AccordionDetails`, `AccordionActions`. Solid composition.
223
+ - shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/accordion.tsx`](../refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/accordion.tsx) — Radix Accordion primitive. Cleanest a11y. **Default for new projects.**
224
+
225
+ ## Cross-reference
226
+
227
+ - [examples/component-tabs.md](component-tabs.md) — alternative for non-stackable view-switching
228
+ - [WAI-ARIA Accordion Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/accordion/)
229
+ - [WAI-ARIA Disclosure Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/disclosure/)
@@ -0,0 +1,284 @@
1
+ # `AccountCard` (custom — Korean banking / fintech) — spec
2
+
3
+ > Custom component pattern. Korean banking apps universally render bank accounts as branded cards. KakaoBank, Toss, traditional bank apps all converge on this design.
4
+
5
+ ## Purpose
6
+
7
+ Displays a bank account as a card: bank logo + nickname + masked account number + balance. Tappable to open transaction history.
8
+
9
+ ## Anatomy
10
+
11
+ ```
12
+ ┌─────────────────────────────────────────────────┐
13
+ │ [bank logo] 국민 입출금 │ ← bank brand + nickname
14
+ │ 123-45-6789-012 │ ← masked account number
15
+ │ │
16
+ │ ₩2,847,500 │ ← balance (prominent)
17
+ │ │
18
+ │ [송금] [QR 결제] [입금] │ ← optional quick actions
19
+ └─────────────────────────────────────────────────┘
20
+ ```
21
+
22
+ | Slot | Required | Notes |
23
+ | --- | --- | --- |
24
+ | Bank logo | yes | Official asset; provides instant recognition |
25
+ | Nickname | yes | User-editable label (default: "통장 이름") |
26
+ | Account number | yes | Masked except last 4 digits |
27
+ | Balance | yes | Display tier, tabular numerals, prominent |
28
+ | Quick actions | optional | 송금 / 결제 / 입금 |
29
+ | Trailing chevron | optional | If tappable to navigate |
30
+ | Status badge | optional | "정지", "주거래" |
31
+
32
+ ## API
33
+
34
+ ```tsx
35
+ <AccountCard
36
+ bank="KB국민은행"
37
+ bankLogo="/banks/kb.png"
38
+ nickname="국민 입출금"
39
+ accountNumber="123-45-6789-012"
40
+ balance={2847500}
41
+ variant="hero"
42
+ onClick={() => navigate(`/accounts/${id}`)}
43
+ actions={[
44
+ { label: "송금", onClick: openTransfer },
45
+ { label: "QR 결제", onClick: openQrPay },
46
+ { label: "입금", onClick: openDeposit },
47
+ ]}
48
+ />
49
+ ```
50
+
51
+ | Prop | Type | Default | Description |
52
+ | --- | --- | --- | --- |
53
+ | `bank` | `string` | — | Bank name (Korean) |
54
+ | `bankLogo` | `string \| ReactNode` | — | Logo asset |
55
+ | `bankColor` | `string` | derived from bank | Brand color for accent |
56
+ | `nickname` | `string` | — | User-editable label |
57
+ | `accountNumber` | `string` | — | Full or masked |
58
+ | `mask` | `boolean` | `true` | Auto-mask account number |
59
+ | `balance` | `number` | — | In smallest unit (won) |
60
+ | `currency` | `"KRW" \| ...` | `"KRW"` | |
61
+ | `variant` | `"compact" \| "default" \| "hero"` | `"default"` | |
62
+ | `actions` | `Action[]` | — | Quick actions row |
63
+ | `onClick` | `() => void` | — | Tap to drill in |
64
+ | `status` | `"active" \| "frozen" \| "primary"` | `"active"` | Optional badge |
65
+ | `loading` | `boolean` | `false` | Skeleton state |
66
+
67
+ ## Variants
68
+
69
+ ### Compact
70
+
71
+ For a list of accounts (account selector):
72
+ ```
73
+ ┌──────────────────────────────────────┐
74
+ │ [logo] 국민 입출금 ₩2,847,500│
75
+ │ ****-012 │
76
+ └──────────────────────────────────────┘
77
+ ```
78
+
79
+ Single row, minimal padding.
80
+
81
+ ### Default
82
+
83
+ Standard card with balance prominent and actions:
84
+ ```
85
+ ┌─────────────────────────────────────┐
86
+ │ [logo] 국민 입출금 │
87
+ │ ****-012 │
88
+ │ │
89
+ │ ₩2,847,500 │
90
+ │ │
91
+ │ [송금] [결제] │
92
+ └─────────────────────────────────────┘
93
+ ```
94
+
95
+ ### Hero
96
+
97
+ For the home screen / primary account:
98
+ ```
99
+ ┌─────────────────────────────────────────────┐
100
+ │ 국민 입출금 │
101
+ │ ****-012 │
102
+ │ │
103
+ │ ₩2,847,500 │ ← extra large
104
+ │ ↑ 12,500원 이번 달 │
105
+ │ │
106
+ │ [송금] [QR 결제] [입금] │
107
+ └─────────────────────────────────────────────┘
108
+ ```
109
+
110
+ Larger amount, optional delta indicator, and full quick actions.
111
+
112
+ ## Account number masking
113
+
114
+ | Format | Display | Use |
115
+ | --- | --- | --- |
116
+ | Full | `123-45-6789-012` | Detail screen with extra security |
117
+ | Last 4 only | `****-012` | List view, default |
118
+ | Hidden | `****-****` | When user has masking turned on |
119
+
120
+ The `mask` prop controls which. Mid-text mask uses asterisks per Korean banking convention (not bullets).
121
+
122
+ ## Bank brand integration
123
+
124
+ Korean banks have official logos + brand colors. Don't restyle — use vendor assets:
125
+
126
+ | Bank | Brand color |
127
+ | --- | --- |
128
+ | KakaoBank | Yellow `#FFEB00` |
129
+ | KB국민은행 | Yellow + black |
130
+ | 신한은행 | Blue `#0046ff` |
131
+ | 우리은행 | Blue (different shade) |
132
+ | 하나은행 | Green |
133
+ | NH농협 | Green |
134
+ | Toss | Blue `#3182F6` |
135
+ | Naver Bank | Green |
136
+
137
+ Use brand color for:
138
+ - Card border accent
139
+ - Bank logo bg
140
+ - Subtle background tint (low-saturation)
141
+
142
+ Don't use for:
143
+ - Balance text (always neutral or money-positive/negative)
144
+ - Action button bg
145
+
146
+ ## Sizes / variants → tokens
147
+
148
+ | Variant | Card padding | Balance font | Balance weight |
149
+ | --- | --- | --- | --- |
150
+ | `compact` | 12px | 16px | 600 |
151
+ | `default` | 16px | 24px | 600 |
152
+ | `hero` | 24px | 36px | 700 |
153
+
154
+ ## States
155
+
156
+ | State | Visual |
157
+ | --- | --- |
158
+ | Default | Resting |
159
+ | Hover (interactive) | Subtle bg shift |
160
+ | Pressed | Slight scale 0.98 (mobile feedback) |
161
+ | Focus-visible | 2px ring |
162
+ | Loading | Skeleton: logo + text bars + balance bar |
163
+ | Frozen / 정지 | Gray bg + "정지" badge |
164
+ | Primary / 주거래 | "주거래" badge with star icon |
165
+
166
+ ## Tokens consumed
167
+
168
+ ```
169
+ --color-bg-default
170
+ --color-bg-elevated (card surface)
171
+ --color-bg-subtle (hover)
172
+ --color-text-primary (balance, nickname)
173
+ --color-text-secondary (account number, bank name)
174
+ --color-money-positive (delta indicator if positive)
175
+ --color-money-negative
176
+ --color-money-neutral
177
+ --color-primary-default (action button bg if appropriate)
178
+ --color-warning ("정지" status)
179
+ --color-success ("주거래" badge)
180
+ --color-border-default
181
+ --color-focus-ring
182
+ --space-sm, --space-md, --space-lg
183
+ --radius-lg (card corners)
184
+ --shadow-card (subtle elevation)
185
+ --font-feature-amount: 'tnum' 1
186
+ --font-size-sm, --font-size-base, --font-size-2xl
187
+ ```
188
+
189
+ ## Accessibility
190
+
191
+ - Render as `<button>` if interactive, `<article>` if static.
192
+ - Bank logo: `<img alt="KB국민은행 로고">`.
193
+ - Account number: render with semantic markup so screen readers don't read each digit ("일이삼"); use `aria-label`:
194
+ ```html
195
+ <span aria-label="계좌번호 마지막 네 자리, 영영일이">****-012</span>
196
+ ```
197
+ - Balance: also include aria-label that's friendlier than the raw digits:
198
+ ```html
199
+ <span aria-label="잔액 290만 원">₩2,847,500</span>
200
+ ```
201
+ - Action buttons: standard accessibility.
202
+
203
+ ## Code example
204
+
205
+ ```tsx
206
+ function AccountsScreen() {
207
+ const accounts = useAccounts();
208
+
209
+ return (
210
+ <Page>
211
+ <PageHeader>내 계좌</PageHeader>
212
+
213
+ {/* Hero variant for primary */}
214
+ {accounts.primary && (
215
+ <AccountCard
216
+ variant="hero"
217
+ {...accounts.primary}
218
+ actions={[
219
+ { label: "송금", onClick: () => openTransfer(accounts.primary.id) },
220
+ { label: "QR 결제", onClick: () => openQrPay(accounts.primary.id) },
221
+ { label: "입금", onClick: () => openDeposit(accounts.primary.id) },
222
+ ]}
223
+ />
224
+ )}
225
+
226
+ {/* Compact for list */}
227
+ <Section title="다른 계좌">
228
+ {accounts.others.map(account => (
229
+ <AccountCard
230
+ key={account.id}
231
+ variant="compact"
232
+ {...account}
233
+ onClick={() => navigate(`/accounts/${account.id}`)}
234
+ />
235
+ ))}
236
+ </Section>
237
+ </Page>
238
+ );
239
+ }
240
+ ```
241
+
242
+ ## Edge cases
243
+
244
+ - **Negative balance** (overdraft): show with `--color-money-negative` + small "-" prefix or "(₩50,000)" parens. Clarify with subtitle "마이너스 통장".
245
+ - **Foreign currency account**: switch currency symbol; consider showing KRW conversion below.
246
+ - **Hidden balance** (user turned on privacy mode): show `***` instead of digits, with toggle.
247
+ - **Stale balance** (last sync > 1hr): show timestamp, prompt to refresh.
248
+ - **Loading**: skeleton matching the card shape — don't blank out.
249
+ - **Network error fetching balance**: show "잔액 불러오기 실패" with retry.
250
+ - **Empty bank logo**: render bank initial in a colored circle (use bankColor).
251
+
252
+ ## Don't
253
+
254
+ - Don't show full account number by default. Mask except last 4.
255
+ - Don't omit bank logo — brand recognition is the entire point of the card.
256
+ - Don't restyle bank logos / brand colors.
257
+ - Don't use `--color-error` for negative balance — use `--color-money-negative`.
258
+ - Don't omit tabular numerals — balance won't align.
259
+ - Don't auto-refresh balance every second; respect bank API rate limits.
260
+ - Don't make actions invisible without tap. Show visible buttons.
261
+
262
+ ## Korean considerations
263
+
264
+ - Account nickname is **user-editable** — letting users rename "통장이름" is a key Korean banking app feature.
265
+ - "주거래" (primary account) is a Korean banking concept; mark with badge.
266
+ - "송금 / 입금 / QR 결제 / 자동이체" are the canonical action labels.
267
+ - For business accounts (사업자 계좌): subtitle may include 사업자등록번호.
268
+ - For 외화 계좌 (foreign currency): clearly show currency symbol + KRW equivalent.
269
+
270
+ ## API rationale
271
+
272
+ - **`balance: number`**: source of truth. Formatting via tabular numeric output.
273
+ - **`bankLogo` accepts both string (URL) and ReactNode**: flexibility for asset pipelines.
274
+ - **Three variants** capture the most common usage shapes; more is over-flexibility.
275
+ - **Quick actions as array**: each card might have different actions based on account type.
276
+
277
+ ## Cross-reference
278
+
279
+ - [`knowledge/patterns/money-and-amount.md`](../knowledge/patterns/money-and-amount.md) — currency display, money color
280
+ - [`knowledge/i18n/korean-payments.md`](../knowledge/i18n/korean-payments.md) — Korean banking conventions
281
+ - [`knowledge/i18n/korean-product-conventions.md`](../knowledge/i18n/korean-product-conventions.md) — broader KR app conventions
282
+ - [`examples/component-card.md`](component-card.md) — base card pattern
283
+ - [`examples/component-statistic.md`](component-statistic.md) — balance display style
284
+ - [`examples/component-transaction-list-item.md`](component-transaction-list-item.md) — drill-in target