claude-code-workflow 7.2.26 → 7.2.28

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 (408) hide show
  1. package/.ccw/specs/architecture-constraints.md +5 -0
  2. package/.claude/skills/_shared/SKILL-DESIGN-SPEC.md +140 -0
  3. package/.claude/skills/investigate/SKILL.md +110 -0
  4. package/.claude/skills/investigate/phases/01-root-cause-investigation.md +132 -0
  5. package/.claude/skills/investigate/phases/02-pattern-analysis.md +126 -0
  6. package/.claude/skills/investigate/phases/03-hypothesis-testing.md +177 -0
  7. package/.claude/skills/investigate/phases/04-implementation.md +139 -0
  8. package/.claude/skills/investigate/phases/05-verification-report.md +153 -0
  9. package/.claude/skills/investigate/specs/debug-report-format.md +226 -0
  10. package/.claude/skills/investigate/specs/iron-law.md +101 -0
  11. package/.claude/skills/security-audit/SKILL.md +125 -0
  12. package/.claude/skills/security-audit/phases/01-supply-chain-scan.md +139 -0
  13. package/.claude/skills/security-audit/phases/02-owasp-review.md +156 -0
  14. package/.claude/skills/security-audit/phases/03-threat-modeling.md +180 -0
  15. package/.claude/skills/security-audit/phases/04-report-tracking.md +177 -0
  16. package/.claude/skills/security-audit/specs/owasp-checklist.md +442 -0
  17. package/.claude/skills/security-audit/specs/scoring-gates.md +141 -0
  18. package/.claude/skills/ship/SKILL.md +105 -0
  19. package/.claude/skills/ship/phases/01-preflight-checks.md +121 -0
  20. package/.claude/skills/ship/phases/02-code-review.md +137 -0
  21. package/.claude/skills/ship/phases/03-version-bump.md +171 -0
  22. package/.claude/skills/ship/phases/04-changelog-commit.md +167 -0
  23. package/.claude/skills/ship/phases/05-pr-creation.md +163 -0
  24. package/.claude/skills/skill-generator/templates/sequential-phase.md +10 -0
  25. package/.claude/skills/skill-generator/templates/skill-md.md +4 -0
  26. package/.claude/skills/team-arch-opt/SKILL.md +1 -1
  27. package/.claude/skills/team-arch-opt/roles/coordinator/commands/monitor.md +3 -1
  28. package/.claude/skills/team-arch-opt/roles/refactorer/role.md +3 -1
  29. package/.claude/skills/team-arch-opt/specs/team-config.json +2 -2
  30. package/.claude/skills/team-coordinate/SKILL.md +4 -3
  31. package/.claude/skills/team-coordinate/roles/coordinator/commands/analyze-task.md +1 -1
  32. package/.claude/skills/team-coordinate/roles/coordinator/commands/dispatch.md +3 -2
  33. package/.claude/skills/team-coordinate/roles/coordinator/commands/monitor.md +3 -2
  34. package/.claude/skills/team-coordinate/roles/coordinator/role.md +16 -15
  35. package/.claude/skills/team-coordinate/specs/pipelines.md +7 -4
  36. package/.claude/skills/team-coordinate/specs/role-spec-template.md +1 -0
  37. package/.claude/skills/team-interactive-craft/SKILL.md +127 -0
  38. package/.claude/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
  39. package/.claude/skills/team-interactive-craft/roles/builder/role.md +216 -0
  40. package/.claude/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
  41. package/.claude/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +192 -0
  42. package/.claude/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +183 -0
  43. package/.claude/skills/team-interactive-craft/roles/coordinator/role.md +166 -0
  44. package/.claude/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
  45. package/.claude/skills/team-interactive-craft/roles/researcher/role.md +131 -0
  46. package/.claude/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
  47. package/.claude/skills/team-interactive-craft/specs/pipelines.md +85 -0
  48. package/.claude/skills/team-interactive-craft/specs/team-config.json +105 -0
  49. package/.claude/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
  50. package/.claude/skills/team-lifecycle-v4/SKILL.md +1 -1
  51. package/.claude/skills/team-lifecycle-v4/roles/coordinator/commands/dispatch.md +14 -2
  52. package/.claude/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +24 -2
  53. package/.claude/skills/team-lifecycle-v4/roles/executor/role.md +3 -1
  54. package/.claude/skills/team-motion-design/SKILL.md +129 -0
  55. package/.claude/skills/team-motion-design/roles/animator/role.md +194 -0
  56. package/.claude/skills/team-motion-design/roles/choreographer/role.md +164 -0
  57. package/.claude/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
  58. package/.claude/skills/team-motion-design/roles/coordinator/commands/dispatch.md +203 -0
  59. package/.claude/skills/team-motion-design/roles/coordinator/commands/monitor.md +184 -0
  60. package/.claude/skills/team-motion-design/roles/coordinator/role.md +167 -0
  61. package/.claude/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
  62. package/.claude/skills/team-motion-design/roles/motion-tester/role.md +175 -0
  63. package/.claude/skills/team-motion-design/specs/gpu-constraints.md +114 -0
  64. package/.claude/skills/team-motion-design/specs/motion-tokens.md +128 -0
  65. package/.claude/skills/team-motion-design/specs/pipelines.md +74 -0
  66. package/.claude/skills/team-motion-design/specs/reduced-motion.md +129 -0
  67. package/.claude/skills/team-motion-design/specs/team-config.json +99 -0
  68. package/.claude/skills/team-perf-opt/SKILL.md +1 -1
  69. package/.claude/skills/team-perf-opt/roles/optimizer/role.md +3 -1
  70. package/.claude/skills/team-perf-opt/specs/team-config.json +2 -2
  71. package/.claude/skills/team-quality-assurance/SKILL.md +1 -1
  72. package/.claude/skills/team-quality-assurance/roles/coordinator/commands/dispatch.md +4 -2
  73. package/.claude/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +4 -2
  74. package/.claude/skills/team-quality-assurance/roles/executor/role.md +3 -1
  75. package/.claude/skills/team-testing/SKILL.md +1 -1
  76. package/.claude/skills/team-testing/roles/coordinator/commands/dispatch.md +5 -2
  77. package/.claude/skills/team-testing/roles/coordinator/commands/monitor.md +4 -2
  78. package/.claude/skills/team-testing/roles/executor/role.md +3 -1
  79. package/.claude/skills/team-ui-polish/SKILL.md +127 -0
  80. package/.claude/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
  81. package/.claude/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +194 -0
  82. package/.claude/skills/team-ui-polish/roles/coordinator/commands/monitor.md +180 -0
  83. package/.claude/skills/team-ui-polish/roles/coordinator/role.md +170 -0
  84. package/.claude/skills/team-ui-polish/roles/diagnostician/role.md +160 -0
  85. package/.claude/skills/team-ui-polish/roles/optimizer/role.md +225 -0
  86. package/.claude/skills/team-ui-polish/roles/scanner/role.md +356 -0
  87. package/.claude/skills/team-ui-polish/roles/verifier/role.md +142 -0
  88. package/.claude/skills/team-ui-polish/specs/anti-patterns.md +141 -0
  89. package/.claude/skills/team-ui-polish/specs/design-standards.md +356 -0
  90. package/.claude/skills/team-ui-polish/specs/fix-strategies.md +235 -0
  91. package/.claude/skills/team-ui-polish/specs/pipelines.md +81 -0
  92. package/.claude/skills/team-ui-polish/specs/scoring-guide.md +162 -0
  93. package/.claude/skills/team-ui-polish/specs/team-config.json +73 -0
  94. package/.claude/skills/team-uidesign/SKILL.md +6 -1
  95. package/.claude/skills/team-uidesign/roles/designer/role.md +28 -4
  96. package/.claude/skills/team-uidesign/roles/implementer/role.md +25 -3
  97. package/.claude/skills/team-uidesign/roles/researcher/role.md +21 -2
  98. package/.claude/skills/team-uidesign/roles/reviewer/role.md +19 -17
  99. package/.claude/skills/team-uidesign/specs/anti-patterns.md +211 -0
  100. package/.claude/skills/team-uidesign/specs/design-standards.md +329 -0
  101. package/.claude/skills/team-uidesign/specs/scoring-guide.md +114 -0
  102. package/.claude/skills/team-uidesign/specs/team-config.json +1 -1
  103. package/.claude/skills/team-uidesign/specs/ux-writing.md +86 -0
  104. package/.claude/skills/team-ux-improve/SKILL.md +3 -0
  105. package/.claude/skills/team-ux-improve/roles/designer/role.md +30 -0
  106. package/.claude/skills/team-ux-improve/roles/diagnoser/role.md +16 -1
  107. package/.claude/skills/team-ux-improve/roles/scanner/role.md +43 -1
  108. package/.claude/skills/team-ux-improve/specs/anti-patterns.md +103 -0
  109. package/.claude/skills/team-ux-improve/specs/design-standards.md +54 -0
  110. package/.claude/skills/team-ux-improve/specs/heuristics.md +88 -0
  111. package/.claude/skills/team-ux-improve/wisdom/anti-patterns/common-ux-pitfalls.md +40 -8
  112. package/.claude/skills/team-ux-improve/wisdom/patterns/state-management.md +32 -12
  113. package/.claude/skills/team-ux-improve/wisdom/patterns/ui-feedback.md +35 -11
  114. package/.claude/skills/team-ux-improve/wisdom/principles/general-ux.md +36 -9
  115. package/.claude/skills/team-visual-a11y/SKILL.md +143 -0
  116. package/.claude/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
  117. package/.claude/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
  118. package/.claude/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +250 -0
  119. package/.claude/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +204 -0
  120. package/.claude/skills/team-visual-a11y/roles/coordinator/role.md +169 -0
  121. package/.claude/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
  122. package/.claude/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
  123. package/.claude/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
  124. package/.claude/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
  125. package/.claude/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
  126. package/.claude/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
  127. package/.claude/skills/team-visual-a11y/specs/pipelines.md +98 -0
  128. package/.claude/skills/team-visual-a11y/specs/team-config.json +109 -0
  129. package/.claude/skills/team-visual-a11y/specs/typography-scale.md +165 -0
  130. package/.claude/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
  131. package/.codex/skills/investigate/agents/investigator.md +392 -0
  132. package/.codex/skills/investigate/orchestrator.md +362 -0
  133. package/.codex/skills/investigate/phases/01-root-cause-investigation.md +212 -0
  134. package/.codex/skills/investigate/phases/02-pattern-analysis.md +181 -0
  135. package/.codex/skills/investigate/phases/03-hypothesis-testing.md +214 -0
  136. package/.codex/skills/investigate/phases/04-implementation.md +195 -0
  137. package/.codex/skills/investigate/phases/05-verification-report.md +240 -0
  138. package/.codex/skills/security-audit/agents/security-auditor.md +341 -0
  139. package/.codex/skills/security-audit/orchestrator.md +384 -0
  140. package/.codex/skills/security-audit/phases/01-supply-chain-scan.md +226 -0
  141. package/.codex/skills/security-audit/phases/02-owasp-review.md +232 -0
  142. package/.codex/skills/security-audit/phases/03-threat-modeling.md +249 -0
  143. package/.codex/skills/security-audit/phases/04-report-tracking.md +300 -0
  144. package/.codex/skills/ship/agents/ship-operator.md +318 -0
  145. package/.codex/skills/ship/orchestrator.md +426 -0
  146. package/.codex/skills/ship/phases/01-preflight-checks.md +198 -0
  147. package/.codex/skills/ship/phases/02-code-review.md +228 -0
  148. package/.codex/skills/ship/phases/03-version-bump.md +259 -0
  149. package/.codex/skills/ship/phases/04-changelog-commit.md +263 -0
  150. package/.codex/skills/ship/phases/05-pr-creation.md +280 -0
  151. package/.codex/skills/team-interactive-craft/SKILL.md +220 -0
  152. package/.codex/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
  153. package/.codex/skills/team-interactive-craft/roles/builder/role.md +216 -0
  154. package/.codex/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
  155. package/.codex/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +162 -0
  156. package/.codex/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +233 -0
  157. package/.codex/skills/team-interactive-craft/roles/coordinator/role.md +209 -0
  158. package/.codex/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
  159. package/.codex/skills/team-interactive-craft/roles/researcher/role.md +131 -0
  160. package/.codex/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
  161. package/.codex/skills/team-interactive-craft/specs/pipelines.md +85 -0
  162. package/.codex/skills/team-interactive-craft/specs/team-config.json +105 -0
  163. package/.codex/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
  164. package/.codex/skills/team-motion-design/SKILL.md +222 -0
  165. package/.codex/skills/team-motion-design/roles/animator/role.md +194 -0
  166. package/.codex/skills/team-motion-design/roles/choreographer/role.md +164 -0
  167. package/.codex/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
  168. package/.codex/skills/team-motion-design/roles/coordinator/commands/dispatch.md +168 -0
  169. package/.codex/skills/team-motion-design/roles/coordinator/commands/monitor.md +242 -0
  170. package/.codex/skills/team-motion-design/roles/coordinator/role.md +210 -0
  171. package/.codex/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
  172. package/.codex/skills/team-motion-design/roles/motion-tester/role.md +175 -0
  173. package/.codex/skills/team-motion-design/specs/gpu-constraints.md +114 -0
  174. package/.codex/skills/team-motion-design/specs/motion-tokens.md +128 -0
  175. package/.codex/skills/team-motion-design/specs/pipelines.md +74 -0
  176. package/.codex/skills/team-motion-design/specs/reduced-motion.md +129 -0
  177. package/.codex/skills/team-motion-design/specs/team-config.json +99 -0
  178. package/.codex/skills/team-ui-polish/SKILL.md +218 -0
  179. package/.codex/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
  180. package/.codex/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +167 -0
  181. package/.codex/skills/team-ui-polish/roles/coordinator/commands/monitor.md +230 -0
  182. package/.codex/skills/team-ui-polish/roles/coordinator/role.md +213 -0
  183. package/.codex/skills/team-ui-polish/roles/diagnostician/role.md +164 -0
  184. package/.codex/skills/team-ui-polish/roles/optimizer/role.md +229 -0
  185. package/.codex/skills/team-ui-polish/roles/scanner/role.md +360 -0
  186. package/.codex/skills/team-ui-polish/roles/verifier/role.md +142 -0
  187. package/.codex/skills/team-ui-polish/specs/anti-patterns.md +141 -0
  188. package/.codex/skills/team-ui-polish/specs/design-standards.md +356 -0
  189. package/.codex/skills/team-ui-polish/specs/fix-strategies.md +235 -0
  190. package/.codex/skills/team-ui-polish/specs/pipelines.md +81 -0
  191. package/.codex/skills/team-ui-polish/specs/scoring-guide.md +162 -0
  192. package/.codex/skills/team-ui-polish/specs/team-config.json +73 -0
  193. package/.codex/skills/team-visual-a11y/SKILL.md +319 -0
  194. package/.codex/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
  195. package/.codex/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
  196. package/.codex/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +188 -0
  197. package/.codex/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +281 -0
  198. package/.codex/skills/team-visual-a11y/roles/coordinator/role.md +213 -0
  199. package/.codex/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
  200. package/.codex/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
  201. package/.codex/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
  202. package/.codex/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
  203. package/.codex/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
  204. package/.codex/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
  205. package/.codex/skills/team-visual-a11y/specs/pipelines.md +98 -0
  206. package/.codex/skills/team-visual-a11y/specs/team-config.json +109 -0
  207. package/.codex/skills/team-visual-a11y/specs/typography-scale.md +165 -0
  208. package/.codex/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
  209. package/README.md +8 -0
  210. package/ccw/dist/core/hooks/hook-templates.d.ts.map +1 -1
  211. package/ccw/dist/core/hooks/hook-templates.js +114 -1
  212. package/ccw/dist/core/hooks/hook-templates.js.map +1 -1
  213. package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
  214. package/ccw/dist/core/routes/cli-routes.js +34 -0
  215. package/ccw/dist/core/routes/cli-routes.js.map +1 -1
  216. package/ccw/dist/core/routes/system-routes.js +2 -2
  217. package/ccw/dist/core/routes/system-routes.js.map +1 -1
  218. package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js → AlertDialog-BjP1ydDR.js} +2 -2
  219. package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js.map → AlertDialog-BjP1ydDR.js.map} +1 -1
  220. package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js → AnalysisPage-CAX3xqMf.js} +2 -2
  221. package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js.map → AnalysisPage-CAX3xqMf.js.map} +1 -1
  222. package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js → ApiSettingsPage-CtWlmztq.js} +2 -2
  223. package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js.map → ApiSettingsPage-CtWlmztq.js.map} +1 -1
  224. package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js → CliModeToggle-hR4a-eLX.js} +2 -2
  225. package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js.map → CliModeToggle-hR4a-eLX.js.map} +1 -1
  226. package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js → CliSessionSharePage-DzNPkFN9.js} +2 -2
  227. package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js.map → CliSessionSharePage-DzNPkFN9.js.map} +1 -1
  228. package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js → CliViewerPage-BPEGN4TT.js} +2 -2
  229. package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js.map → CliViewerPage-BPEGN4TT.js.map} +1 -1
  230. package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js → CodexLensPage-Cf0r2RHY.js} +2 -2
  231. package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js.map → CodexLensPage-Cf0r2RHY.js.map} +1 -1
  232. package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js → Collapsible-DEm1rJ4h.js} +2 -2
  233. package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js.map → Collapsible-DEm1rJ4h.js.map} +1 -1
  234. package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js → CommandsManagerPage-BpeWw8HO.js} +2 -2
  235. package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js.map → CommandsManagerPage-BpeWw8HO.js.map} +1 -1
  236. package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js → DeepWikiPage-BEsmh2vF.js} +2 -2
  237. package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js.map → DeepWikiPage-BEsmh2vF.js.map} +1 -1
  238. package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js → EndpointsPage-B30SFdtU.js} +2 -2
  239. package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js.map → EndpointsPage-B30SFdtU.js.map} +1 -1
  240. package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js → ExplorerPage-BVvMpg1O.js} +2 -2
  241. package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js.map → ExplorerPage-BVvMpg1O.js.map} +1 -1
  242. package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js → FixSessionPage-CL73dHbh.js} +2 -2
  243. package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js.map → FixSessionPage-CL73dHbh.js.map} +1 -1
  244. package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js → FloatingFileBrowser-BL-28lMZ.js} +2 -2
  245. package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js.map → FloatingFileBrowser-BL-28lMZ.js.map} +1 -1
  246. package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js → FloatingPanel-BzZDciHZ.js} +2 -2
  247. package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js.map → FloatingPanel-BzZDciHZ.js.map} +1 -1
  248. package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js → GraphExplorerPage-CDp6-d8P.js} +2 -2
  249. package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js.map → GraphExplorerPage-CDp6-d8P.js.map} +1 -1
  250. package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js → HistoryPage-fZY_7O9n.js} +2 -2
  251. package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js.map → HistoryPage-fZY_7O9n.js.map} +1 -1
  252. package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js → HookManagerPage-4LJeC9bq.js} +2 -2
  253. package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js.map → HookManagerPage-4LJeC9bq.js.map} +1 -1
  254. package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js → InstallationsPage-Bpigrbhw.js} +2 -2
  255. package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js.map → InstallationsPage-Bpigrbhw.js.map} +1 -1
  256. package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js → IssueHubPage-BP0zJc1R.js} +2 -2
  257. package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js.map → IssueHubPage-BP0zJc1R.js.map} +1 -1
  258. package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js → LiteTasksPage-CSt2oVKQ.js} +2 -2
  259. package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js.map → LiteTasksPage-CSt2oVKQ.js.map} +1 -1
  260. package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js → McpManagerPage-B-xaMA0w.js} +2 -2
  261. package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js.map → McpManagerPage-B-xaMA0w.js.map} +1 -1
  262. package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js → MemoryPage-CJqo_7DY.js} +2 -2
  263. package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js.map → MemoryPage-CJqo_7DY.js.map} +1 -1
  264. package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js → NotFoundPage-ibZeQA-Y.js} +2 -2
  265. package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js.map → NotFoundPage-ibZeQA-Y.js.map} +1 -1
  266. package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js → OrchestratorPage-DgJ4ctPQ.js} +2 -2
  267. package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js.map → OrchestratorPage-DgJ4ctPQ.js.map} +1 -1
  268. package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js → ProjectOverviewPage-Cit0Yq0D.js} +2 -2
  269. package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js.map → ProjectOverviewPage-Cit0Yq0D.js.map} +1 -1
  270. package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js → PromptHistoryPage-Ce1HDIK0.js} +2 -2
  271. package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js.map → PromptHistoryPage-Ce1HDIK0.js.map} +1 -1
  272. package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js → ReviewSessionPage-J1KikNrk.js} +2 -2
  273. package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js.map → ReviewSessionPage-J1KikNrk.js.map} +1 -1
  274. package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js → RulesManagerPage-CdBjTmth.js} +2 -2
  275. package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js.map → RulesManagerPage-CdBjTmth.js.map} +1 -1
  276. package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js → SessionDetailPage-B9ZK7LvX.js} +2 -2
  277. package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js.map → SessionDetailPage-B9ZK7LvX.js.map} +1 -1
  278. package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js → SessionsPage-CW_nS5UR.js} +2 -2
  279. package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js.map → SessionsPage-CW_nS5UR.js.map} +1 -1
  280. package/ccw/frontend/dist/assets/{SettingsPage-BPDbXPSM.js → SettingsPage-B2PYzSoO.js} +35 -35
  281. package/ccw/frontend/dist/assets/SettingsPage-B2PYzSoO.js.map +1 -0
  282. package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js → SkillsManagerPage-CTnWrrwp.js} +2 -2
  283. package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js.map → SkillsManagerPage-CTnWrrwp.js.map} +1 -1
  284. package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js → SpecsSettingsPage-DJpi9XQL.js} +2 -2
  285. package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js.map → SpecsSettingsPage-DJpi9XQL.js.map} +1 -1
  286. package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js → Switch-Ac6Ov7uy.js} +2 -2
  287. package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js.map → Switch-Ac6Ov7uy.js.map} +1 -1
  288. package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js → TabsNavigation-DZAAspqR.js} +2 -2
  289. package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js.map → TabsNavigation-DZAAspqR.js.map} +1 -1
  290. package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js → TaskDrawer-BJkwfhIZ.js} +2 -2
  291. package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js.map → TaskDrawer-BJkwfhIZ.js.map} +1 -1
  292. package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js → TeamPage-BJgjxBgb.js} +2 -2
  293. package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js.map → TeamPage-BJgjxBgb.js.map} +1 -1
  294. package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js → TerminalDashboardPage-D1WekoOy.js} +2 -2
  295. package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js.map → TerminalDashboardPage-D1WekoOy.js.map} +1 -1
  296. package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js → archive-DxemgIhF.js} +2 -2
  297. package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js.map → archive-DxemgIhF.js.map} +1 -1
  298. package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js → archive-restore-CjS83f1V.js} +2 -2
  299. package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js.map → archive-restore-CjS83f1V.js.map} +1 -1
  300. package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js → arrow-right-B5PUcn8I.js} +2 -2
  301. package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js.map → arrow-right-B5PUcn8I.js.map} +1 -1
  302. package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js → bookmark-plus-DCc9aPbb.js} +2 -2
  303. package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js.map → bookmark-plus-DCc9aPbb.js.map} +1 -1
  304. package/ccw/frontend/dist/assets/{bot-BLkaQscs.js → bot-DOwFtzak.js} +2 -2
  305. package/ccw/frontend/dist/assets/{bot-BLkaQscs.js.map → bot-DOwFtzak.js.map} +1 -1
  306. package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js → braces-96qH3aFh.js} +2 -2
  307. package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js.map → braces-96qH3aFh.js.map} +1 -1
  308. package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js → circle-stop-CCxSuil1.js} +2 -2
  309. package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js.map → circle-stop-CCxSuil1.js.map} +1 -1
  310. package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js → cpu-CZNSJFdq.js} +2 -2
  311. package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js.map → cpu-CZNSJFdq.js.map} +1 -1
  312. package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js → ellipsis-vertical-h8xtvw2_.js} +2 -2
  313. package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js.map → ellipsis-vertical-h8xtvw2_.js.map} +1 -1
  314. package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js → eye-D3NY0bm6.js} +2 -2
  315. package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js.map → eye-D3NY0bm6.js.map} +1 -1
  316. package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js → eye-off-Cy2vkc8p.js} +2 -2
  317. package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js.map → eye-off-Cy2vkc8p.js.map} +1 -1
  318. package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js → file-json-Bzq3U1Mx.js} +2 -2
  319. package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js.map → file-json-Bzq3U1Mx.js.map} +1 -1
  320. package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js → file-text-DwuwPDPi.js} +2 -2
  321. package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js.map → file-text-DwuwPDPi.js.map} +1 -1
  322. package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js → filter-q9g-bknU.js} +2 -2
  323. package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js.map → filter-q9g-bknU.js.map} +1 -1
  324. package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js → folder-CL6vb42J.js} +2 -2
  325. package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js.map → folder-CL6vb42J.js.map} +1 -1
  326. package/ccw/frontend/dist/assets/{gauge-kazFexTr.js → gauge-BkrcQBly.js} +2 -2
  327. package/ccw/frontend/dist/assets/{gauge-kazFexTr.js.map → gauge-BkrcQBly.js.map} +1 -1
  328. package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js → globe-BQbwyNeV.js} +2 -2
  329. package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js.map → globe-BQbwyNeV.js.map} +1 -1
  330. package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js → grid-3x3-x5_7DrN7.js} +2 -2
  331. package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js.map → grid-3x3-x5_7DrN7.js.map} +1 -1
  332. package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js → hard-drive-DTyWXwzf.js} +2 -2
  333. package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js.map → hard-drive-DTyWXwzf.js.map} +1 -1
  334. package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js → hash-80O0kJO7.js} +2 -2
  335. package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js.map → hash-80O0kJO7.js.map} +1 -1
  336. package/ccw/frontend/dist/assets/{history-ujQnmMC9.js → history-DDlN2Bwa.js} +2 -2
  337. package/ccw/frontend/dist/assets/{history-ujQnmMC9.js.map → history-DDlN2Bwa.js.map} +1 -1
  338. package/ccw/frontend/dist/assets/{index-CxzXz6o1.js → index-B9A3Hnrk.js} +2 -2
  339. package/ccw/frontend/dist/assets/{index-CxzXz6o1.js.map → index-B9A3Hnrk.js.map} +1 -1
  340. package/ccw/frontend/dist/assets/{index-B76AGix5.js → index-Bs80iCX0.js} +2 -2
  341. package/ccw/frontend/dist/assets/{index-B76AGix5.js.map → index-Bs80iCX0.js.map} +1 -1
  342. package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js → index-mbeo62f8.js} +2 -2
  343. package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js.map → index-mbeo62f8.js.map} +1 -1
  344. package/ccw/frontend/dist/assets/{index-Dff4bg3u.js → index-rLgoBCfV.js} +3 -3
  345. package/ccw/frontend/dist/assets/{index-Dff4bg3u.js.map → index-rLgoBCfV.js.map} +1 -1
  346. package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js → layout-grid-C1niOWJx.js} +2 -2
  347. package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js.map → layout-grid-C1niOWJx.js.map} +1 -1
  348. package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js → lightbulb-BTmI7SUg.js} +2 -2
  349. package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js.map → lightbulb-BTmI7SUg.js.map} +1 -1
  350. package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js → link-2-CB9HKeuZ.js} +2 -2
  351. package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js.map → link-2-CB9HKeuZ.js.map} +1 -1
  352. package/ccw/frontend/dist/assets/{link-5yXdZBch.js → link-koEYiemK.js} +2 -2
  353. package/ccw/frontend/dist/assets/{link-5yXdZBch.js.map → link-koEYiemK.js.map} +1 -1
  354. package/ccw/frontend/dist/assets/{list-9lHhC_U_.js → list-v2_GaLdC.js} +2 -2
  355. package/ccw/frontend/dist/assets/{list-9lHhC_U_.js.map → list-v2_GaLdC.js.map} +1 -1
  356. package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js → map-pin-BQNfAqG_.js} +2 -2
  357. package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js.map → map-pin-BQNfAqG_.js.map} +1 -1
  358. package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js → messages-square-Dzq5LGg9.js} +2 -2
  359. package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js.map → messages-square-Dzq5LGg9.js.map} +1 -1
  360. package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js → minimize-2-CtkoJXcz.js} +2 -2
  361. package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js.map → minimize-2-CtkoJXcz.js.map} +1 -1
  362. package/ccw/frontend/dist/assets/{package-BjOw1ldU.js → package-CH3smL37.js} +2 -2
  363. package/ccw/frontend/dist/assets/{package-BjOw1ldU.js.map → package-CH3smL37.js.map} +1 -1
  364. package/ccw/frontend/dist/assets/{plug-9dAARpE1.js → plug-CZ0aL_yF.js} +2 -2
  365. package/ccw/frontend/dist/assets/{plug-9dAARpE1.js.map → plug-CZ0aL_yF.js.map} +1 -1
  366. package/ccw/frontend/dist/assets/{power-K2S39x7f.js → power-F2A_J4l6.js} +2 -2
  367. package/ccw/frontend/dist/assets/{power-K2S39x7f.js.map → power-F2A_J4l6.js.map} +1 -1
  368. package/ccw/frontend/dist/assets/{save-D9-CoT3x.js → save-Byxot0YU.js} +2 -2
  369. package/ccw/frontend/dist/assets/{save-D9-CoT3x.js.map → save-Byxot0YU.js.map} +1 -1
  370. package/ccw/frontend/dist/assets/{send-Bunw9NtC.js → send-JjqhUkpw.js} +2 -2
  371. package/ccw/frontend/dist/assets/{send-Bunw9NtC.js.map → send-JjqhUkpw.js.map} +1 -1
  372. package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js → settings-2--SuN9rAt.js} +2 -2
  373. package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js.map → settings-2--SuN9rAt.js.map} +1 -1
  374. package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js → square-check-big-BbngGB2h.js} +2 -2
  375. package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js.map → square-check-big-BbngGB2h.js.map} +1 -1
  376. package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js → square-pen-CgrHgZSl.js} +2 -2
  377. package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js.map → square-pen-CgrHgZSl.js.map} +1 -1
  378. package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js → star-BU3TQr7Z.js} +2 -2
  379. package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js.map → star-BU3TQr7Z.js.map} +1 -1
  380. package/ccw/frontend/dist/assets/{style-BbREPmRj.js → style-CKs7nnn3.js} +2 -2
  381. package/ccw/frontend/dist/assets/{style-BbREPmRj.js.map → style-CKs7nnn3.js.map} +1 -1
  382. package/ccw/frontend/dist/assets/{target-CElrCVhR.js → target-DW5tsDW6.js} +2 -2
  383. package/ccw/frontend/dist/assets/{target-CElrCVhR.js.map → target-DW5tsDW6.js.map} +1 -1
  384. package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js → test-tube-BHm7w3ON.js} +2 -2
  385. package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js.map → test-tube-BHm7w3ON.js.map} +1 -1
  386. package/ccw/frontend/dist/assets/{upload-BD1F07wG.js → upload-DYR7PWwt.js} +2 -2
  387. package/ccw/frontend/dist/assets/{upload-BD1F07wG.js.map → upload-DYR7PWwt.js.map} +1 -1
  388. package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js → useApiSettings-D0TVgQD_.js} +2 -2
  389. package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js.map → useApiSettings-D0TVgQD_.js.map} +1 -1
  390. package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js → useCli-DfY8mAP8.js} +2 -2
  391. package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js.map → useCli-DfY8mAP8.js.map} +1 -1
  392. package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js → useCommands-CGusDp0F.js} +2 -2
  393. package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js.map → useCommands-CGusDp0F.js.map} +1 -1
  394. package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js → useDebounce-CIwh0fF1.js} +2 -2
  395. package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js.map → useDebounce-CIwh0fF1.js.map} +1 -1
  396. package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js → useFileExplorer-FMyFv39K.js} +2 -2
  397. package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js.map → useFileExplorer-FMyFv39K.js.map} +1 -1
  398. package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js → useLocale-B2qhsoTb.js} +2 -2
  399. package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js.map → useLocale-B2qhsoTb.js.map} +1 -1
  400. package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js → useSkills-cxKXMBm3.js} +3 -3
  401. package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js.map → useSkills-cxKXMBm3.js.map} +1 -1
  402. package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js → useSystemSettings-B-xUT_z-.js} +2 -2
  403. package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js.map → useSystemSettings-B-xUT_z-.js.map} +1 -1
  404. package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js → wand-sparkles-DZV_3lPr.js} +2 -2
  405. package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js.map → wand-sparkles-DZV_3lPr.js.map} +1 -1
  406. package/ccw/frontend/dist/index.html +1 -1
  407. package/package.json +105 -105
  408. package/ccw/frontend/dist/assets/SettingsPage-BPDbXPSM.js.map +0 -1
@@ -0,0 +1,329 @@
1
+ # Impeccable Design Standards
2
+
3
+ Reference spec for all roles. Every design decision must trace back to these standards.
4
+
5
+ ---
6
+
7
+ ## Color (OKLCH)
8
+
9
+ OKLCH for perceptually uniform palettes. All color tokens MUST use OKLCH notation.
10
+
11
+ ### Token Hierarchy
12
+
13
+ primitive -> semantic -> component
14
+
15
+ ```
16
+ /* Primitives */
17
+ --color-primary oklch(0.55 0.2 250)
18
+ --color-primary-light oklch(0.70 0.15 250)
19
+ --color-primary-dark oklch(0.40 0.22 250)
20
+
21
+ /* Tinted neutrals (chroma 0.005-0.01, brand hue) */
22
+ --color-neutral-50 oklch(0.98 0.005 250) /* brand tinted */
23
+ --color-neutral-100 oklch(0.95 0.006 250)
24
+ --color-neutral-200 oklch(0.90 0.007 250)
25
+ --color-neutral-300 oklch(0.82 0.007 250)
26
+ --color-neutral-400 oklch(0.70 0.008 250)
27
+ --color-neutral-500 oklch(0.55 0.008 250)
28
+ --color-neutral-600 oklch(0.45 0.009 250)
29
+ --color-neutral-700 oklch(0.35 0.009 250)
30
+ --color-neutral-800 oklch(0.25 0.010 250)
31
+ --color-neutral-900 oklch(0.15 0.010 250)
32
+ --color-neutral-950 oklch(0.08 0.010 250)
33
+
34
+ /* Semantic */
35
+ --color-success oklch(0.65 0.18 145)
36
+ --color-warning oklch(0.75 0.15 85)
37
+ --color-error oklch(0.55 0.22 25)
38
+ --color-info oklch(0.60 0.18 250)
39
+ ```
40
+
41
+ ### Rules
42
+
43
+ - **60-30-10 rule**: 60% neutral, 30% secondary, 10% accent
44
+ - **Never pure black** (`#000`) or **pure white** (`#fff`) -- use tinted neutrals
45
+ - **Tinted neutrals**: chroma 0.005-0.01, hue matching brand primary
46
+ - **Text on colored backgrounds**: use `color-mix(in oklch, ...)` not gray
47
+
48
+ ### Dark Mode Rules
49
+ - Dark mode is NOT inverted light mode. It requires deliberate design:
50
+ - Use **lighter surfaces** for elevation/depth (not darker)
51
+ - **Reduce font weight** by 1 step (600→500, 500→400) — light text on dark looks heavier
52
+ - **Desaturate accent colors** — saturated colors vibrate on dark backgrounds
53
+ - Surface hierarchy: `oklch(0.15 ...)` base → `oklch(0.20 ...)` raised → `oklch(0.25 ...)` overlay
54
+ - Never: pure black `#000` background (too harsh). Use `oklch(0.10 0.01 <hue>)` minimum
55
+ - Test: all contrast ratios must meet WCAG AA in BOTH themes
56
+
57
+ ### Dangerous Color Combinations
58
+ | Combination | Problem | Fix |
59
+ |-------------|---------|-----|
60
+ | Gray text on colored background | Looks washed out, low contrast | Use shade of bg color or white/dark with transparency |
61
+ | Red + Green (adjacent) | 8% male color blindness | Add icons/patterns, not just color |
62
+ | Yellow text on white | Near-invisible | Use dark amber instead |
63
+ | Thin light text on images | Unpredictable contrast | Add text shadow or semi-transparent overlay |
64
+ | Saturated colors on dark bg | Visual vibration | Desaturate: reduce OKLCH chroma by 0.05-0.10 |
65
+
66
+ - **WCAG AA contrast**:
67
+ - Normal text: 4.5:1
68
+ - Large text (>= 18px bold or >= 24px): 3:1
69
+ - UI components and graphical objects: 3:1
70
+ - Focus indicators: 3:1
71
+
72
+ ---
73
+
74
+ ## Typography
75
+
76
+ ### Font Selection
77
+
78
+ **Avoid** (overused defaults): Inter, Roboto, Open Sans, Lato, Montserrat, Arial
79
+
80
+ **Recommended**: Instrument Sans, Plus Jakarta Sans, DM Sans, Space Grotesk, Fraunces
81
+
82
+ ### Modular Scale
83
+
84
+ Choose one ratio for the project:
85
+
86
+ | Name | Ratio | Use Case |
87
+ |------|-------|----------|
88
+ | Major Second | 1.125 | Dense UI, dashboards |
89
+ | Minor Third | 1.200 | General purpose |
90
+ | Major Third | 1.250 | Marketing, editorial |
91
+ | Perfect Fourth | 1.333 | Bold, expressive |
92
+
93
+ ### Fluid Sizing
94
+
95
+ Use `clamp()` for display and heading sizes:
96
+
97
+ ```css
98
+ --text-sm: clamp(0.8rem, 0.77rem + 0.15vw, 0.875rem);
99
+ --text-base: clamp(0.9rem, 0.85rem + 0.25vw, 1rem);
100
+ --text-lg: clamp(1.05rem, 0.95rem + 0.35vw, 1.125rem);
101
+ --text-xl: clamp(1.25rem, 1.1rem + 0.5vw, 1.5rem);
102
+ --text-2xl: clamp(1.5rem, 1.25rem + 0.75vw, 1.875rem);
103
+ --text-3xl: clamp(1.875rem, 1.5rem + 1.1vw, 2.25rem);
104
+ --text-display: clamp(2.25rem, 1.75rem + 1.5vw, 3rem);
105
+ ```
106
+
107
+ ### Line Height
108
+
109
+ - Body text: 1.5
110
+ - Headings: 1.2
111
+ - Small / caption text: 1.6
112
+
113
+ ### Reading Width
114
+
115
+ `max-width: 65ch` (acceptable range: 45-75ch)
116
+
117
+ ### Font Loading
118
+
119
+ `font-display: swap` with fallback metrics:
120
+
121
+ ```css
122
+ @font-face {
123
+ font-family: 'Plus Jakarta Sans';
124
+ font-display: swap;
125
+ size-adjust: 102%;
126
+ ascent-override: 95%;
127
+ }
128
+ ```
129
+
130
+ ---
131
+
132
+ ## Spacing (4pt Base)
133
+
134
+ ### Scale
135
+
136
+ ```
137
+ 0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 96 px
138
+ ```
139
+
140
+ Map to tokens:
141
+
142
+ ```
143
+ --space-0: 0px;
144
+ --space-1: 4px; /* 0.25rem */
145
+ --space-2: 8px; /* 0.5rem */
146
+ --space-3: 12px; /* 0.75rem */
147
+ --space-4: 16px; /* 1rem */
148
+ --space-5: 20px; /* 1.25rem */
149
+ --space-6: 24px; /* 1.5rem */
150
+ --space-8: 32px; /* 2rem */
151
+ --space-10: 40px; /* 2.5rem */
152
+ --space-12: 48px; /* 3rem */
153
+ --space-16: 64px; /* 4rem */
154
+ --space-24: 96px; /* 6rem */
155
+ ```
156
+
157
+ ### Rhythm
158
+
159
+ | Context | Spacing | Tokens |
160
+ |---------|---------|--------|
161
+ | Tight (within groups) | 4-8px | space-1, space-2 |
162
+ | Comfortable (between items) | 16-24px | space-4 to space-6 |
163
+ | Generous (between sections) | 48-96px | space-12 to space-24 |
164
+
165
+ ### Layout Rules
166
+
167
+ - Use `gap` not `margin` for sibling spacing
168
+ - Cards only for distinct actionable content -- flatten nested cards
169
+ - Container queries for component-level responsive behavior
170
+ - Touch targets: **44x44px minimum**, 8px gap between adjacent targets
171
+
172
+ ---
173
+
174
+ ## Motion
175
+
176
+ ### Animatable Properties (ONLY these)
177
+
178
+ transform, opacity, clip-path, background-color, color, border-color, box-shadow, filter
179
+
180
+ ### NEVER Animate (layout triggers)
181
+
182
+ width, height, top, left, margin, padding
183
+
184
+ ### Easing
185
+
186
+ Default: ease-out-quart `cubic-bezier(0.25, 1, 0.5, 1)`
187
+
188
+ NEVER use: `ease`, `linear`, `bounce`, `elastic`
189
+
190
+ ### Duration Scale
191
+
192
+ | Token | Duration | Use |
193
+ |-------|----------|-----|
194
+ | --duration-instant | 100ms | Toggles, checkboxes |
195
+ | --duration-fast | 150ms | Feedback, micro-interactions |
196
+ | --duration-normal | 250ms | Standard transitions |
197
+ | --duration-slow | 400ms | Panels, drawers |
198
+ | --duration-entrance | 500ms | Page/section entrance |
199
+ | --duration-complex | 800ms | Multi-step orchestration |
200
+
201
+ - Exit duration = 75% of entrance
202
+ - Feedback animations: 100-150ms max
203
+
204
+ ### Stagger
205
+
206
+ - Max 10 items in stagger group
207
+ - Max 500ms total stagger duration
208
+ - Formula: `calc(var(--index) * 50ms)`
209
+
210
+ ### Reduced Motion (REQUIRED)
211
+
212
+ ```css
213
+ @media (prefers-reduced-motion: reduce) {
214
+ *, *::before, *::after {
215
+ animation-duration: 0.01ms !important;
216
+ animation-iteration-count: 1 !important;
217
+ transition-duration: 0.01ms !important;
218
+ scroll-behavior: auto !important;
219
+ }
220
+ }
221
+ ```
222
+
223
+ ### will-change
224
+
225
+ Add via JS on `pointerenter`, remove on `animationend`/`transitionend`. Never set permanently in CSS.
226
+
227
+ ---
228
+
229
+ ## Interaction States (8 Required)
230
+
231
+ Every interactive component MUST define all 8 states:
232
+
233
+ | State | CSS | Visual Treatment |
234
+ |-------|-----|------------------|
235
+ | Default | -- | Base appearance |
236
+ | Hover | `:hover` (wrap in `@media(hover:hover)`) | Subtle bg shift or opacity change |
237
+ | Focus | `:focus-visible` | 2px solid accent, offset 2px |
238
+ | Active | `:active` | `scale(0.97)` or darker background |
239
+ | Disabled | `[disabled], [aria-disabled="true"]` | opacity 0.5, `cursor: not-allowed` |
240
+ | Loading | `[aria-busy="true"]` | Spinner or skeleton placeholder |
241
+ | Error | `[aria-invalid="true"]` | Red border + error message |
242
+ | Success | custom attribute | Green check + success message |
243
+
244
+ ### Focus Ring Spec
245
+
246
+ ```css
247
+ :focus-visible {
248
+ outline: 2px solid var(--color-primary);
249
+ outline-offset: 2px;
250
+ border-radius: inherit;
251
+ }
252
+ ```
253
+
254
+ ---
255
+
256
+ ## Visual Hierarchy
257
+
258
+ ### Squint Test
259
+
260
+ Blur the page -- you should immediately identify the top 2 elements and groupings.
261
+
262
+ ### Tools
263
+
264
+ Size (3:1 ratio between primary and body), weight (max 2 weights per page), color, space, position, contrast.
265
+
266
+ ### CTA Hierarchy
267
+
268
+ - **1 primary CTA per viewport** -- filled button
269
+ - Secondary -- outline button
270
+ - Tertiary -- text link
271
+
272
+ ### Progressive Disclosure
273
+
274
+ Reveal complexity gradually. Default to the simplest view.
275
+
276
+ ---
277
+
278
+ ## Responsive
279
+
280
+ ### Breakpoints (mobile-first)
281
+
282
+ ```
283
+ 640px, 768px, 1024px, 1280px, 1536px
284
+ ```
285
+
286
+ ### Fluid Design
287
+
288
+ Prefer `%`, `vw`, `fr`, `min()`, `max()`, `clamp()` over fixed `px`.
289
+
290
+ ### Mobile Requirements
291
+
292
+ - Minimum 14px text
293
+ - 44px touch targets
294
+ - No horizontal scroll at 320px viewport
295
+ - Adapt layout, don't hide content
296
+
297
+ ---
298
+
299
+ ## Elevation & Z-Index
300
+
301
+ ### Semantic Z-Index Scale
302
+ ```css
303
+ --z-dropdown: 100;
304
+ --z-sticky: 200;
305
+ --z-fixed: 300;
306
+ --z-modal-backdrop: 400;
307
+ --z-modal: 500;
308
+ --z-popover: 600;
309
+ --z-toast: 700;
310
+ --z-tooltip: 800;
311
+ ```
312
+
313
+ - Never use arbitrary z-index values (z-index: 9999)
314
+ - Each level has clear semantic meaning
315
+ - Modal backdrop + modal are separate layers (backdrop catches clicks)
316
+ - Toast above modal (error during modal interaction must be visible)
317
+
318
+ ---
319
+
320
+ ## UX Writing
321
+
322
+ Reference: [specs/ux-writing.md](ux-writing.md) for full guidelines.
323
+
324
+ Key rules for design token and component spec work:
325
+ - Button labels: verb + object ("Save changes" not "Submit")
326
+ - Error messages: what + why + fix
327
+ - Empty states: acknowledge + explain value + action
328
+ - Destructive actions: name the destruction + show count
329
+ - Never "OK/Cancel" — use specific action names
@@ -0,0 +1,114 @@
1
+ # 8-Dimension Quality Scoring Rubric
2
+
3
+ Score each dimension 0-4. Total: 0-32.
4
+
5
+ ## Dimensions
6
+
7
+ ### 1. Anti-AI-Slop (Weight: 10%)
8
+
9
+ | Score | Criteria |
10
+ |-------|----------|
11
+ | 0 | 4+ P1 anti-patterns present |
12
+ | 1 | 2-3 P1 anti-patterns present |
13
+ | 2 | 1 P1 or 3+ P2 anti-patterns present |
14
+ | 3 | 1-2 P2 or 2+ P3 anti-patterns only |
15
+ | 4 | Zero P1/P2 anti-patterns, at most 1 P3 |
16
+
17
+ ### 2. Color Quality (Weight: 15%)
18
+
19
+ | Score | Criteria |
20
+ |-------|----------|
21
+ | 0 | No color system; hex/rgb throughout; pure black/white used |
22
+ | 1 | Some tokens but not OKLCH; no tinted neutrals; contrast failures |
23
+ | 2 | OKLCH used partially; tinted neutrals attempted; most contrast passes |
24
+ | 3 | Full OKLCH; tinted neutrals; 60-30-10 applied; all WCAG AA passes; semantic tokens present |
25
+ | 4 | Score-3 plus: primitive->semantic->component hierarchy; color-mix usage; light/dark themes complete |
26
+
27
+ ### 3. Typography Quality (Weight: 15%)
28
+
29
+ | Score | Criteria |
30
+ |-------|----------|
31
+ | 0 | System/generic font only; no scale; no fluid sizing |
32
+ | 1 | Generic font (Inter/Roboto/etc); basic size scale; no clamp() |
33
+ | 2 | Distinctive font chosen; modular scale present; no fluid sizing |
34
+ | 3 | Distinctive font; modular scale with clamp(); proper line-height; reading width constrained |
35
+ | 4 | Score-3 plus: font-display swap with fallback metrics; caption/body/heading line-heights differentiated |
36
+
37
+ ### 4. Spacing & Layout (Weight: 12.5%)
38
+
39
+ | Score | Criteria |
40
+ |-------|----------|
41
+ | 0 | Arbitrary spacing; no system; nested cards |
42
+ | 1 | Some consistent spacing but not 4pt scale; margin-heavy |
43
+ | 2 | 4pt scale used; mostly gap over margin; some rhythm variation |
44
+ | 3 | Full 4pt scale; gap throughout; rhythm variation (tight/comfortable/generous); touch targets met |
45
+ | 4 | Score-3 plus: container queries used; no nested cards; 8px adjacent target gaps |
46
+
47
+ ### 5. Motion & Animation (Weight: 10%)
48
+
49
+ | Score | Criteria |
50
+ |-------|----------|
51
+ | 0 | Layout property animations; no easing system; no reduced-motion |
52
+ | 1 | Some transform/opacity; default ease/linear; no reduced-motion |
53
+ | 2 | Transform/opacity only; custom easing present; reduced-motion exists but incomplete |
54
+ | 3 | All animations on safe properties; ease-out-quart default; duration tokens; complete reduced-motion |
55
+ | 4 | Score-3 plus: stagger system; will-change managed via JS; exit = 75% entrance |
56
+
57
+ ### 6. Interaction States (Weight: 15%)
58
+
59
+ | Score | Criteria |
60
+ |-------|----------|
61
+ | 0 | Only default state; no hover/focus/disabled |
62
+ | 1 | 2-3 states (e.g., default + hover + disabled) |
63
+ | 2 | 5 states (default/hover/focus/active/disabled) but missing loading/error/success |
64
+ | 3 | All 8 states defined; :focus-visible used; hover in @media(hover:hover) |
65
+ | 4 | Score-3 plus: focus ring spec (2px solid + offset 2px); active scale(0.97); ARIA attributes on all states |
66
+
67
+ ### 7. Visual Hierarchy (Weight: 10%)
68
+
69
+ | Score | Criteria |
70
+ |-------|----------|
71
+ | 0 | Everything same size/weight; no CTA hierarchy; all centered |
72
+ | 1 | Some size variation; multiple primary CTAs per viewport |
73
+ | 2 | Clear heading hierarchy; CTA levels present but inconsistent |
74
+ | 3 | Passes squint test; single primary CTA per viewport; 3:1 size ratio; max 2 weights |
75
+ | 4 | Score-3 plus: progressive disclosure; clear information density gradient |
76
+
77
+ ### 8. Responsive Design (Weight: 12.5%)
78
+
79
+ | Score | Criteria |
80
+ |-------|----------|
81
+ | 0 | Fixed widths; breaks below 768px; content hidden on mobile |
82
+ | 1 | Some media queries; horizontal scroll at 320px; small touch targets |
83
+ | 2 | Mobile-first breakpoints; fluid widths; 14px min text; some issues at 320px |
84
+ | 3 | Full breakpoint coverage; fluid design (clamp/vw/fr); 44px targets; no 320px scroll |
85
+ | 4 | Score-3 plus: container queries; adapt-don't-hide approach; fluid typography |
86
+
87
+ ---
88
+
89
+ ## Rating Bands
90
+
91
+ | Score | Band | Meaning |
92
+ |-------|------|---------|
93
+ | 28-32 | Excellent | Production-ready, Impeccable quality |
94
+ | 22-27 | Good | Minor polish needed, shippable |
95
+ | 16-21 | Acceptable | Needs revision, core structure sound |
96
+ | 10-15 | Poor | Significant rework required |
97
+ | 0-9 | Critical | Fundamental issues, restart design phase |
98
+
99
+ ## Severity Mapping
100
+
101
+ | Severity | Dimension Score | Action |
102
+ |----------|----------------|--------|
103
+ | P0 Blocking | Dimension = 0 | Must fix before any progress |
104
+ | P1 Major | Dimension = 1 | Fix in current iteration |
105
+ | P2 Minor | Dimension = 2 | Fix in next iteration |
106
+ | P3 Polish | Dimension = 3 | Track for future improvement |
107
+
108
+ ## Signal Determination
109
+
110
+ | Condition | Signal | Action |
111
+ |-----------|--------|--------|
112
+ | Score >= 26 AND no P0 (no dim at 0) | `audit_passed` (GC CONVERGED) | Unblock downstream |
113
+ | Score >= 20 AND no P0 | `audit_result` (REVISION NEEDED) | Create fix task |
114
+ | Score < 20 OR any P0 | `fix_required` (CRITICAL) | Urgent fix task |
@@ -23,7 +23,7 @@
23
23
  "reviewer": {
24
24
  "task_prefix": "AUDIT",
25
25
  "additional_prefixes": [],
26
- "responsibility": "Design consistency audit, accessibility compliance, visual review",
26
+ "responsibility": "8-dimension Impeccable-aligned audit (anti-slop, color, typography, spacing, motion, interaction, hierarchy, responsive)",
27
27
  "message_types": ["audit_result", "audit_passed", "fix_required", "error"]
28
28
  },
29
29
  "implementer": {
@@ -0,0 +1,86 @@
1
+ # UX Writing Standards
2
+
3
+ Guidelines for all text content in UI components. From Impeccable's UX writing reference.
4
+
5
+ ---
6
+
7
+ ## Button Labels
8
+
9
+ - **NEVER**: "OK", "Submit", "Yes", "No", "Cancel" (generic)
10
+ - **ALWAYS**: verb + object — "Save changes", "Create account", "Delete message"
11
+ - Destructive actions: name the destruction + show count — "Delete 5 items" not "Delete selected"
12
+ - Primary CTA: specific benefit — "Start free trial" not "Get started"
13
+
14
+ ## Error Messages
15
+
16
+ Formula: (1) What happened + (2) Why + (3) How to fix
17
+
18
+ | Type | Template |
19
+ |------|----------|
20
+ | Format | "{Field} must be {format}. Example: {example}" |
21
+ | Required | "{Field} is required to {reason}" |
22
+ | Permission | "You don't have access to {resource}. Contact {who} for access" |
23
+ | Network | "Couldn't reach the server. Check your connection and try again" |
24
+ | Server | "Something went wrong on our end. Try again in a few minutes" |
25
+
26
+ - Never blame user: "Please enter..." not "You entered..."
27
+ - Never use codes alone: "Error 404" → "Page not found"
28
+ - Be specific: "Password must be 8+ characters with a number" not "Invalid password"
29
+
30
+ ## Empty States
31
+
32
+ Three components: (1) Acknowledge + (2) Explain value + (3) Provide action
33
+
34
+ | Context | Example |
35
+ |---------|---------|
36
+ | First use | "No projects yet. Create your first project to get started. [Create project]" |
37
+ | Search | "No results for '{query}'. Try a different search term or [browse all]" |
38
+ | Filtered | "No items match these filters. [Clear filters]" |
39
+ | Error | "Couldn't load items. [Try again]" |
40
+
41
+ ## Loading States
42
+
43
+ - Be specific: "Saving your draft..." not "Loading..."
44
+ - Multi-step: show progress — "Uploading (2 of 5 files)..."
45
+ - Duration hint: "This usually takes about 30 seconds"
46
+
47
+ ## Confirmation Dialogs
48
+
49
+ - Use sparingly — prefer undo over confirm
50
+ - Title: what will happen — "Delete this project?"
51
+ - Body: consequences — "This will permanently delete 12 files. This can't be undone."
52
+ - Buttons: specific — "Delete project" / "Keep project" (not OK/Cancel)
53
+
54
+ ## Voice & Tone
55
+
56
+ - **Voice**: consistent brand personality (professional/friendly/technical — choose one)
57
+ - **Tone**: adapts to moment — cheerful for success, empathetic for errors, neutral for routine
58
+ - Keep consistent: same word for same concept everywhere (delete/remove/trash → pick one)
59
+
60
+ ## Form Instructions
61
+
62
+ - Show format with placeholder: `placeholder="john@example.com"`
63
+ - Explain non-obvious fields with helper text below label
64
+ - Mark optional fields (not required ones) — most fields should be required
65
+ - Group related fields with clear section headers
66
+
67
+ ## Translation Planning
68
+
69
+ | Language | Length vs English |
70
+ |----------|------------------|
71
+ | German | +30% |
72
+ | French | +20% |
73
+ | Finnish | +30-40% |
74
+ | Chinese | -30% |
75
+ | Japanese | -10-20% |
76
+
77
+ - Design for longest language (German)
78
+ - Never truncate translated text — allow wrapping
79
+ - Avoid idioms and cultural references in source text
80
+
81
+ ## Redundant Copy Detection
82
+
83
+ - Don't repeat visible information (heading ≠ first paragraph)
84
+ - Labels describe the field, not restate the value
85
+ - Tooltips add information, not repeat the label
86
+ - If heading says it all, skip the intro paragraph
@@ -98,6 +98,9 @@ Execute built-in Phase 1 (task discovery) -> role Phase 2-4 -> built-in Phase 5
98
98
  ## Specs Reference
99
99
 
100
100
  - [specs/pipelines.md](specs/pipelines.md) — Pipeline definitions and task registry
101
+ - [specs/design-standards.md](specs/design-standards.md) — Impeccable visual design standards
102
+ - [specs/anti-patterns.md](specs/anti-patterns.md) — AI slop detection catalog (20 items)
103
+ - [specs/heuristics.md](specs/heuristics.md) — Nielsen's 10 usability heuristics evaluation framework
101
104
 
102
105
  ## Session Directory
103
106
 
@@ -101,6 +101,36 @@ const handleSubmit = async () => {
101
101
  | Text input for folder path | Add directory picker: `<input type="file" webkitdirectory />` |
102
102
  | No validation | Add validation rules and error messages |
103
103
 
104
+ ### Visual Design Solutions
105
+
106
+ Reference `specs/design-standards.md` for target standards.
107
+
108
+ | Issue | Solution Design |
109
+ |-------|-----------------|
110
+ | Pure black/white | Define OKLCH neutral scale tinted toward brand hue (chroma 0.005-0.01) |
111
+ | Generic fonts | Select from: Instrument Sans, Plus Jakarta Sans, DM Sans, Space Grotesk, Fraunces |
112
+ | No modular scale | Choose ratio (1.200 or 1.250), derive all sizes from base 16px |
113
+ | Missing fluid sizing | Apply clamp() to display sizes (xl+): `clamp(1.25rem, 1.1rem + 0.5vw, 1.5rem)` |
114
+ | All buttons primary | Define: primary (filled), secondary (outline/ghost), tertiary (text link) |
115
+ | Monotonous spacing | Apply 4pt scale with rhythm: tight (4-8px), comfortable (16-24px), generous (48-96px) |
116
+ | Nested cards | Flatten: remove inner card, use spacing + subtle border-bottom divider |
117
+ | Layout animations | Replace with transform: translateX/Y/scale + opacity transitions |
118
+ | No reduced-motion | Add global `@media (prefers-reduced-motion: reduce)` reset |
119
+ | Missing focus-visible | Add `:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px }` |
120
+ | Bounce easing | Replace with ease-out-quart: `cubic-bezier(0.25, 1, 0.5, 1)` |
121
+ | Missing interaction states | Define all 8 states per component with CSS selectors and ARIA attributes |
122
+
123
+ ### UX Writing Solutions
124
+
125
+ | Issue | Solution |
126
+ |-------|----------|
127
+ | Generic button labels | Replace with verb+object: "Save changes", "Create project", "Delete 3 items" |
128
+ | Error without guidance | Apply formula: what happened + why + how to fix. Template per error type |
129
+ | Empty state without action | Three parts: acknowledge → explain value → provide action button |
130
+ | Loading text generic | Be specific: "Saving your draft..." not "Loading..." Show progress for multi-step |
131
+ | Confirmation too generic | Title: what will happen. Body: consequences. Buttons: specific actions (not OK/Cancel) |
132
+ | Redundant copy | Remove intro paragraph if heading is self-explanatory. Labels ≠ values |
133
+
104
134
  ## Phase 4: Design Document Generation
105
135
 
106
136
  1. Generate implementation guide for each issue and write to `<session>/artifacts/design-guide.md`
@@ -69,6 +69,20 @@ For each issue from scan report:
69
69
  | No error handling | Missing catch block | Add try/catch with error state |
70
70
  | Race condition | Multiple concurrent requests | Add request cancellation or debounce |
71
71
 
72
+ ### Visual Design Diagnosis
73
+
74
+ | Pattern | Root Cause | Fix Strategy |
75
+ |---------|------------|--------------|
76
+ | Pure black/white colors | No intentional color system | Introduce OKLCH palette with tinted neutrals |
77
+ | Generic font usage | Default font selection | Replace with distinctive alternatives from recommended list |
78
+ | Missing interaction states | Incomplete component design | Add all 8 states per Impeccable spec |
79
+ | Layout animations | Wrong animation properties | Switch to transform + opacity, add will-change via JS |
80
+ | No reduced-motion | Accessibility oversight | Add @media (prefers-reduced-motion: reduce) global query |
81
+ | All buttons primary | No hierarchy design | Establish primary/secondary/tertiary button system |
82
+ | Monotonous spacing | No spacing system | Implement 4pt scale with rhythm variation |
83
+ | Nested cards | Over-containment | Flatten to spacing + dividers |
84
+ | Missing focus-visible | Outdated focus handling | Replace :focus with :focus-visible, add ring spec |
85
+
72
86
  ## Phase 4: Diagnosis Report
73
87
 
74
88
  1. Generate root cause analysis for each issue and write to `<session>/artifacts/diagnosis.md`
@@ -87,7 +101,8 @@ If new root cause patterns discovered:
87
101
  pattern_types: {
88
102
  state_management: <count>,
89
103
  event_binding: <count>,
90
- async_handling: <count>
104
+ async_handling: <count>,
105
+ visual_design: <count>
91
106
  }
92
107
  })
93
108
  ```
@@ -63,6 +63,48 @@ Scan strategy:
63
63
  | Input without validation | Form input without validation rules | Low |
64
64
  | Missing file selector | Text input for file/folder path without picker | Medium |
65
65
 
66
+ ### Visual Design Scanning
67
+
68
+ In addition to interaction issues, scan for visual design quality problems.
69
+ Reference `specs/design-standards.md` and `specs/anti-patterns.md`.
70
+
71
+ | Category | Detection Pattern | Severity |
72
+ |----------|-------------------|----------|
73
+ | AI color palette | Cyan (#00d4ff, #06b6d4), purple-blue gradients on dark | High |
74
+ | Pure black/white | #000, #fff, rgb(0,0,0), rgb(255,255,255) as primary colors | High |
75
+ | Generic font | Inter, Roboto, Open Sans, Arial as primary font-family | Medium |
76
+ | All buttons primary | Every button has same fill treatment, no hierarchy | High |
77
+ | Nested cards | border/shadow inside border/shadow containers | Medium |
78
+ | No focus-visible | Using :focus or outline:none without :focus-visible | High |
79
+ | Layout animations | Animating width/height/margin/padding | Medium |
80
+ | No reduced-motion | Missing @media(prefers-reduced-motion) | Medium |
81
+ | Bounce easing | cubic-bezier with negative values, spring/bounce | Medium |
82
+ | Monotonous spacing | >70% same padding/margin value | Low |
83
+ | Missing 8 states | Interactive elements with <5 defined states | Medium |
84
+ | Glassmorphism overuse | backdrop-filter:blur on >2 components | Medium |
85
+ | Generic button labels | "OK", "Submit", "Yes/No", "Cancel" without specific verb+object | Medium |
86
+ | Error messages without fix guidance | Error shows "Something went wrong" with no next step | High |
87
+ | Empty states without action | Data list shows "No data" without create/import action | Medium |
88
+ | Redundant copy | Heading text repeated in first paragraph (>50% word overlap) | Low |
89
+
90
+ ### Heuristic UX Scanning
91
+
92
+ Apply Nielsen's 10 usability heuristics as a structured scan checklist.
93
+ Reference: `specs/heuristics.md`
94
+
95
+ | Heuristic | What to Check | Severity |
96
+ |-----------|---------------|----------|
97
+ | Visibility of system status | Loading indicators, progress bars, state feedback, timestamps | High |
98
+ | Match between system and real world | Jargon-free labels, familiar metaphors, logical ordering | Medium |
99
+ | User control and freedom | Undo/redo, back navigation, cancel actions, escape from modals | High |
100
+ | Consistency and standards | Same terms/icons for same actions, platform conventions | Medium |
101
+ | Error prevention | Confirmation for destructive actions, input validation, disable invalid options | High |
102
+ | Recognition over recall | Visible options, recent items, search suggestions, breadcrumbs | Medium |
103
+ | Flexibility and efficiency | Keyboard shortcuts, power-user features, bulk actions | Low |
104
+ | Aesthetic and minimalist design | Information density, noise reduction, visual hierarchy | Medium |
105
+ | Help users recover from errors | Error messages with fix guidance (what+why+fix), retry options | High |
106
+ | Help and documentation | Tooltips, onboarding, contextual help, empty states with guidance | Low |
107
+
66
108
  For each component file:
67
109
  1. Read file content
68
110
  2. Scan for interaction patterns using Grep
@@ -73,7 +115,7 @@ For each component file:
73
115
  ## Phase 4: Issue Report Generation
74
116
 
75
117
  1. Classify issues by severity (High/Medium/Low)
76
- 2. Group by category (unresponsive, missing feedback, state issues, input UX)
118
+ 2. Group by category (unresponsive, missing feedback, state issues, input UX, visual design)
77
119
  3. Generate structured report and write to `<session>/artifacts/scan-report.md`
78
120
  4. Share state via team_msg:
79
121
  ```