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.
- package/.ccw/specs/architecture-constraints.md +5 -0
- package/.claude/skills/_shared/SKILL-DESIGN-SPEC.md +140 -0
- package/.claude/skills/investigate/SKILL.md +110 -0
- package/.claude/skills/investigate/phases/01-root-cause-investigation.md +132 -0
- package/.claude/skills/investigate/phases/02-pattern-analysis.md +126 -0
- package/.claude/skills/investigate/phases/03-hypothesis-testing.md +177 -0
- package/.claude/skills/investigate/phases/04-implementation.md +139 -0
- package/.claude/skills/investigate/phases/05-verification-report.md +153 -0
- package/.claude/skills/investigate/specs/debug-report-format.md +226 -0
- package/.claude/skills/investigate/specs/iron-law.md +101 -0
- package/.claude/skills/security-audit/SKILL.md +125 -0
- package/.claude/skills/security-audit/phases/01-supply-chain-scan.md +139 -0
- package/.claude/skills/security-audit/phases/02-owasp-review.md +156 -0
- package/.claude/skills/security-audit/phases/03-threat-modeling.md +180 -0
- package/.claude/skills/security-audit/phases/04-report-tracking.md +177 -0
- package/.claude/skills/security-audit/specs/owasp-checklist.md +442 -0
- package/.claude/skills/security-audit/specs/scoring-gates.md +141 -0
- package/.claude/skills/ship/SKILL.md +105 -0
- package/.claude/skills/ship/phases/01-preflight-checks.md +121 -0
- package/.claude/skills/ship/phases/02-code-review.md +137 -0
- package/.claude/skills/ship/phases/03-version-bump.md +171 -0
- package/.claude/skills/ship/phases/04-changelog-commit.md +167 -0
- package/.claude/skills/ship/phases/05-pr-creation.md +163 -0
- package/.claude/skills/skill-generator/templates/sequential-phase.md +10 -0
- package/.claude/skills/skill-generator/templates/skill-md.md +4 -0
- package/.claude/skills/team-arch-opt/SKILL.md +1 -1
- package/.claude/skills/team-arch-opt/roles/coordinator/commands/monitor.md +3 -1
- package/.claude/skills/team-arch-opt/roles/refactorer/role.md +3 -1
- package/.claude/skills/team-arch-opt/specs/team-config.json +2 -2
- package/.claude/skills/team-coordinate/SKILL.md +4 -3
- package/.claude/skills/team-coordinate/roles/coordinator/commands/analyze-task.md +1 -1
- package/.claude/skills/team-coordinate/roles/coordinator/commands/dispatch.md +3 -2
- package/.claude/skills/team-coordinate/roles/coordinator/commands/monitor.md +3 -2
- package/.claude/skills/team-coordinate/roles/coordinator/role.md +16 -15
- package/.claude/skills/team-coordinate/specs/pipelines.md +7 -4
- package/.claude/skills/team-coordinate/specs/role-spec-template.md +1 -0
- package/.claude/skills/team-interactive-craft/SKILL.md +127 -0
- package/.claude/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
- package/.claude/skills/team-interactive-craft/roles/builder/role.md +216 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +192 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +183 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/role.md +166 -0
- package/.claude/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
- package/.claude/skills/team-interactive-craft/roles/researcher/role.md +131 -0
- package/.claude/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
- package/.claude/skills/team-interactive-craft/specs/pipelines.md +85 -0
- package/.claude/skills/team-interactive-craft/specs/team-config.json +105 -0
- package/.claude/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
- package/.claude/skills/team-lifecycle-v4/SKILL.md +1 -1
- package/.claude/skills/team-lifecycle-v4/roles/coordinator/commands/dispatch.md +14 -2
- package/.claude/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +24 -2
- package/.claude/skills/team-lifecycle-v4/roles/executor/role.md +3 -1
- package/.claude/skills/team-motion-design/SKILL.md +129 -0
- package/.claude/skills/team-motion-design/roles/animator/role.md +194 -0
- package/.claude/skills/team-motion-design/roles/choreographer/role.md +164 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/dispatch.md +203 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/monitor.md +184 -0
- package/.claude/skills/team-motion-design/roles/coordinator/role.md +167 -0
- package/.claude/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
- package/.claude/skills/team-motion-design/roles/motion-tester/role.md +175 -0
- package/.claude/skills/team-motion-design/specs/gpu-constraints.md +114 -0
- package/.claude/skills/team-motion-design/specs/motion-tokens.md +128 -0
- package/.claude/skills/team-motion-design/specs/pipelines.md +74 -0
- package/.claude/skills/team-motion-design/specs/reduced-motion.md +129 -0
- package/.claude/skills/team-motion-design/specs/team-config.json +99 -0
- package/.claude/skills/team-perf-opt/SKILL.md +1 -1
- package/.claude/skills/team-perf-opt/roles/optimizer/role.md +3 -1
- package/.claude/skills/team-perf-opt/specs/team-config.json +2 -2
- package/.claude/skills/team-quality-assurance/SKILL.md +1 -1
- package/.claude/skills/team-quality-assurance/roles/coordinator/commands/dispatch.md +4 -2
- package/.claude/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +4 -2
- package/.claude/skills/team-quality-assurance/roles/executor/role.md +3 -1
- package/.claude/skills/team-testing/SKILL.md +1 -1
- package/.claude/skills/team-testing/roles/coordinator/commands/dispatch.md +5 -2
- package/.claude/skills/team-testing/roles/coordinator/commands/monitor.md +4 -2
- package/.claude/skills/team-testing/roles/executor/role.md +3 -1
- package/.claude/skills/team-ui-polish/SKILL.md +127 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +194 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/monitor.md +180 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/role.md +170 -0
- package/.claude/skills/team-ui-polish/roles/diagnostician/role.md +160 -0
- package/.claude/skills/team-ui-polish/roles/optimizer/role.md +225 -0
- package/.claude/skills/team-ui-polish/roles/scanner/role.md +356 -0
- package/.claude/skills/team-ui-polish/roles/verifier/role.md +142 -0
- package/.claude/skills/team-ui-polish/specs/anti-patterns.md +141 -0
- package/.claude/skills/team-ui-polish/specs/design-standards.md +356 -0
- package/.claude/skills/team-ui-polish/specs/fix-strategies.md +235 -0
- package/.claude/skills/team-ui-polish/specs/pipelines.md +81 -0
- package/.claude/skills/team-ui-polish/specs/scoring-guide.md +162 -0
- package/.claude/skills/team-ui-polish/specs/team-config.json +73 -0
- package/.claude/skills/team-uidesign/SKILL.md +6 -1
- package/.claude/skills/team-uidesign/roles/designer/role.md +28 -4
- package/.claude/skills/team-uidesign/roles/implementer/role.md +25 -3
- package/.claude/skills/team-uidesign/roles/researcher/role.md +21 -2
- package/.claude/skills/team-uidesign/roles/reviewer/role.md +19 -17
- package/.claude/skills/team-uidesign/specs/anti-patterns.md +211 -0
- package/.claude/skills/team-uidesign/specs/design-standards.md +329 -0
- package/.claude/skills/team-uidesign/specs/scoring-guide.md +114 -0
- package/.claude/skills/team-uidesign/specs/team-config.json +1 -1
- package/.claude/skills/team-uidesign/specs/ux-writing.md +86 -0
- package/.claude/skills/team-ux-improve/SKILL.md +3 -0
- package/.claude/skills/team-ux-improve/roles/designer/role.md +30 -0
- package/.claude/skills/team-ux-improve/roles/diagnoser/role.md +16 -1
- package/.claude/skills/team-ux-improve/roles/scanner/role.md +43 -1
- package/.claude/skills/team-ux-improve/specs/anti-patterns.md +103 -0
- package/.claude/skills/team-ux-improve/specs/design-standards.md +54 -0
- package/.claude/skills/team-ux-improve/specs/heuristics.md +88 -0
- package/.claude/skills/team-ux-improve/wisdom/anti-patterns/common-ux-pitfalls.md +40 -8
- package/.claude/skills/team-ux-improve/wisdom/patterns/state-management.md +32 -12
- package/.claude/skills/team-ux-improve/wisdom/patterns/ui-feedback.md +35 -11
- package/.claude/skills/team-ux-improve/wisdom/principles/general-ux.md +36 -9
- package/.claude/skills/team-visual-a11y/SKILL.md +143 -0
- package/.claude/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +250 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +204 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/role.md +169 -0
- package/.claude/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
- package/.claude/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
- package/.claude/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
- package/.claude/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
- package/.claude/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
- package/.claude/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
- package/.claude/skills/team-visual-a11y/specs/pipelines.md +98 -0
- package/.claude/skills/team-visual-a11y/specs/team-config.json +109 -0
- package/.claude/skills/team-visual-a11y/specs/typography-scale.md +165 -0
- package/.claude/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
- package/.codex/skills/investigate/agents/investigator.md +392 -0
- package/.codex/skills/investigate/orchestrator.md +362 -0
- package/.codex/skills/investigate/phases/01-root-cause-investigation.md +212 -0
- package/.codex/skills/investigate/phases/02-pattern-analysis.md +181 -0
- package/.codex/skills/investigate/phases/03-hypothesis-testing.md +214 -0
- package/.codex/skills/investigate/phases/04-implementation.md +195 -0
- package/.codex/skills/investigate/phases/05-verification-report.md +240 -0
- package/.codex/skills/security-audit/agents/security-auditor.md +341 -0
- package/.codex/skills/security-audit/orchestrator.md +384 -0
- package/.codex/skills/security-audit/phases/01-supply-chain-scan.md +226 -0
- package/.codex/skills/security-audit/phases/02-owasp-review.md +232 -0
- package/.codex/skills/security-audit/phases/03-threat-modeling.md +249 -0
- package/.codex/skills/security-audit/phases/04-report-tracking.md +300 -0
- package/.codex/skills/ship/agents/ship-operator.md +318 -0
- package/.codex/skills/ship/orchestrator.md +426 -0
- package/.codex/skills/ship/phases/01-preflight-checks.md +198 -0
- package/.codex/skills/ship/phases/02-code-review.md +228 -0
- package/.codex/skills/ship/phases/03-version-bump.md +259 -0
- package/.codex/skills/ship/phases/04-changelog-commit.md +263 -0
- package/.codex/skills/ship/phases/05-pr-creation.md +280 -0
- package/.codex/skills/team-interactive-craft/SKILL.md +220 -0
- package/.codex/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
- package/.codex/skills/team-interactive-craft/roles/builder/role.md +216 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +162 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +233 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/role.md +209 -0
- package/.codex/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
- package/.codex/skills/team-interactive-craft/roles/researcher/role.md +131 -0
- package/.codex/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
- package/.codex/skills/team-interactive-craft/specs/pipelines.md +85 -0
- package/.codex/skills/team-interactive-craft/specs/team-config.json +105 -0
- package/.codex/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
- package/.codex/skills/team-motion-design/SKILL.md +222 -0
- package/.codex/skills/team-motion-design/roles/animator/role.md +194 -0
- package/.codex/skills/team-motion-design/roles/choreographer/role.md +164 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/dispatch.md +168 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/monitor.md +242 -0
- package/.codex/skills/team-motion-design/roles/coordinator/role.md +210 -0
- package/.codex/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
- package/.codex/skills/team-motion-design/roles/motion-tester/role.md +175 -0
- package/.codex/skills/team-motion-design/specs/gpu-constraints.md +114 -0
- package/.codex/skills/team-motion-design/specs/motion-tokens.md +128 -0
- package/.codex/skills/team-motion-design/specs/pipelines.md +74 -0
- package/.codex/skills/team-motion-design/specs/reduced-motion.md +129 -0
- package/.codex/skills/team-motion-design/specs/team-config.json +99 -0
- package/.codex/skills/team-ui-polish/SKILL.md +218 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +167 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/monitor.md +230 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/role.md +213 -0
- package/.codex/skills/team-ui-polish/roles/diagnostician/role.md +164 -0
- package/.codex/skills/team-ui-polish/roles/optimizer/role.md +229 -0
- package/.codex/skills/team-ui-polish/roles/scanner/role.md +360 -0
- package/.codex/skills/team-ui-polish/roles/verifier/role.md +142 -0
- package/.codex/skills/team-ui-polish/specs/anti-patterns.md +141 -0
- package/.codex/skills/team-ui-polish/specs/design-standards.md +356 -0
- package/.codex/skills/team-ui-polish/specs/fix-strategies.md +235 -0
- package/.codex/skills/team-ui-polish/specs/pipelines.md +81 -0
- package/.codex/skills/team-ui-polish/specs/scoring-guide.md +162 -0
- package/.codex/skills/team-ui-polish/specs/team-config.json +73 -0
- package/.codex/skills/team-visual-a11y/SKILL.md +319 -0
- package/.codex/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +188 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +281 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/role.md +213 -0
- package/.codex/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
- package/.codex/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
- package/.codex/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
- package/.codex/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
- package/.codex/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
- package/.codex/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
- package/.codex/skills/team-visual-a11y/specs/pipelines.md +98 -0
- package/.codex/skills/team-visual-a11y/specs/team-config.json +109 -0
- package/.codex/skills/team-visual-a11y/specs/typography-scale.md +165 -0
- package/.codex/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
- package/README.md +8 -0
- package/ccw/dist/core/hooks/hook-templates.d.ts.map +1 -1
- package/ccw/dist/core/hooks/hook-templates.js +114 -1
- package/ccw/dist/core/hooks/hook-templates.js.map +1 -1
- package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/cli-routes.js +34 -0
- package/ccw/dist/core/routes/cli-routes.js.map +1 -1
- package/ccw/dist/core/routes/system-routes.js +2 -2
- package/ccw/dist/core/routes/system-routes.js.map +1 -1
- package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js → AlertDialog-BjP1ydDR.js} +2 -2
- package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js.map → AlertDialog-BjP1ydDR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js → AnalysisPage-CAX3xqMf.js} +2 -2
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js.map → AnalysisPage-CAX3xqMf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js → ApiSettingsPage-CtWlmztq.js} +2 -2
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js.map → ApiSettingsPage-CtWlmztq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js → CliModeToggle-hR4a-eLX.js} +2 -2
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js.map → CliModeToggle-hR4a-eLX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js → CliSessionSharePage-DzNPkFN9.js} +2 -2
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js.map → CliSessionSharePage-DzNPkFN9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js → CliViewerPage-BPEGN4TT.js} +2 -2
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js.map → CliViewerPage-BPEGN4TT.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js → CodexLensPage-Cf0r2RHY.js} +2 -2
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js.map → CodexLensPage-Cf0r2RHY.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js → Collapsible-DEm1rJ4h.js} +2 -2
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js.map → Collapsible-DEm1rJ4h.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js → CommandsManagerPage-BpeWw8HO.js} +2 -2
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js.map → CommandsManagerPage-BpeWw8HO.js.map} +1 -1
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js → DeepWikiPage-BEsmh2vF.js} +2 -2
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js.map → DeepWikiPage-BEsmh2vF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js → EndpointsPage-B30SFdtU.js} +2 -2
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js.map → EndpointsPage-B30SFdtU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js → ExplorerPage-BVvMpg1O.js} +2 -2
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js.map → ExplorerPage-BVvMpg1O.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js → FixSessionPage-CL73dHbh.js} +2 -2
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js.map → FixSessionPage-CL73dHbh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js → FloatingFileBrowser-BL-28lMZ.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js.map → FloatingFileBrowser-BL-28lMZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js → FloatingPanel-BzZDciHZ.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js.map → FloatingPanel-BzZDciHZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js → GraphExplorerPage-CDp6-d8P.js} +2 -2
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js.map → GraphExplorerPage-CDp6-d8P.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js → HistoryPage-fZY_7O9n.js} +2 -2
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js.map → HistoryPage-fZY_7O9n.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js → HookManagerPage-4LJeC9bq.js} +2 -2
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js.map → HookManagerPage-4LJeC9bq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js → InstallationsPage-Bpigrbhw.js} +2 -2
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js.map → InstallationsPage-Bpigrbhw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js → IssueHubPage-BP0zJc1R.js} +2 -2
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js.map → IssueHubPage-BP0zJc1R.js.map} +1 -1
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js → LiteTasksPage-CSt2oVKQ.js} +2 -2
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js.map → LiteTasksPage-CSt2oVKQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js → McpManagerPage-B-xaMA0w.js} +2 -2
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js.map → McpManagerPage-B-xaMA0w.js.map} +1 -1
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js → MemoryPage-CJqo_7DY.js} +2 -2
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js.map → MemoryPage-CJqo_7DY.js.map} +1 -1
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js → NotFoundPage-ibZeQA-Y.js} +2 -2
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js.map → NotFoundPage-ibZeQA-Y.js.map} +1 -1
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js → OrchestratorPage-DgJ4ctPQ.js} +2 -2
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js.map → OrchestratorPage-DgJ4ctPQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js → ProjectOverviewPage-Cit0Yq0D.js} +2 -2
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js.map → ProjectOverviewPage-Cit0Yq0D.js.map} +1 -1
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js → PromptHistoryPage-Ce1HDIK0.js} +2 -2
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js.map → PromptHistoryPage-Ce1HDIK0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js → ReviewSessionPage-J1KikNrk.js} +2 -2
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js.map → ReviewSessionPage-J1KikNrk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js → RulesManagerPage-CdBjTmth.js} +2 -2
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js.map → RulesManagerPage-CdBjTmth.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js → SessionDetailPage-B9ZK7LvX.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js.map → SessionDetailPage-B9ZK7LvX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js → SessionsPage-CW_nS5UR.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js.map → SessionsPage-CW_nS5UR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SettingsPage-BPDbXPSM.js → SettingsPage-B2PYzSoO.js} +35 -35
- package/ccw/frontend/dist/assets/SettingsPage-B2PYzSoO.js.map +1 -0
- package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js → SkillsManagerPage-CTnWrrwp.js} +2 -2
- package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js.map → SkillsManagerPage-CTnWrrwp.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js → SpecsSettingsPage-DJpi9XQL.js} +2 -2
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js.map → SpecsSettingsPage-DJpi9XQL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js → Switch-Ac6Ov7uy.js} +2 -2
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js.map → Switch-Ac6Ov7uy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js → TabsNavigation-DZAAspqR.js} +2 -2
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js.map → TabsNavigation-DZAAspqR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js → TaskDrawer-BJkwfhIZ.js} +2 -2
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js.map → TaskDrawer-BJkwfhIZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js → TeamPage-BJgjxBgb.js} +2 -2
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js.map → TeamPage-BJgjxBgb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js → TerminalDashboardPage-D1WekoOy.js} +2 -2
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js.map → TerminalDashboardPage-D1WekoOy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js → archive-DxemgIhF.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js.map → archive-DxemgIhF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js → archive-restore-CjS83f1V.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js.map → archive-restore-CjS83f1V.js.map} +1 -1
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js → arrow-right-B5PUcn8I.js} +2 -2
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js.map → arrow-right-B5PUcn8I.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js → bookmark-plus-DCc9aPbb.js} +2 -2
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js.map → bookmark-plus-DCc9aPbb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js → bot-DOwFtzak.js} +2 -2
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js.map → bot-DOwFtzak.js.map} +1 -1
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js → braces-96qH3aFh.js} +2 -2
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js.map → braces-96qH3aFh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js → circle-stop-CCxSuil1.js} +2 -2
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js.map → circle-stop-CCxSuil1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js → cpu-CZNSJFdq.js} +2 -2
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js.map → cpu-CZNSJFdq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js → ellipsis-vertical-h8xtvw2_.js} +2 -2
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js.map → ellipsis-vertical-h8xtvw2_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js → eye-D3NY0bm6.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js.map → eye-D3NY0bm6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js → eye-off-Cy2vkc8p.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js.map → eye-off-Cy2vkc8p.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js → file-json-Bzq3U1Mx.js} +2 -2
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js.map → file-json-Bzq3U1Mx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js → file-text-DwuwPDPi.js} +2 -2
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js.map → file-text-DwuwPDPi.js.map} +1 -1
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js → filter-q9g-bknU.js} +2 -2
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js.map → filter-q9g-bknU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js → folder-CL6vb42J.js} +2 -2
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js.map → folder-CL6vb42J.js.map} +1 -1
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js → gauge-BkrcQBly.js} +2 -2
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js.map → gauge-BkrcQBly.js.map} +1 -1
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js → globe-BQbwyNeV.js} +2 -2
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js.map → globe-BQbwyNeV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js → grid-3x3-x5_7DrN7.js} +2 -2
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js.map → grid-3x3-x5_7DrN7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js → hard-drive-DTyWXwzf.js} +2 -2
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js.map → hard-drive-DTyWXwzf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js → hash-80O0kJO7.js} +2 -2
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js.map → hash-80O0kJO7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js → history-DDlN2Bwa.js} +2 -2
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js.map → history-DDlN2Bwa.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js → index-B9A3Hnrk.js} +2 -2
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js.map → index-B9A3Hnrk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-B76AGix5.js → index-Bs80iCX0.js} +2 -2
- package/ccw/frontend/dist/assets/{index-B76AGix5.js.map → index-Bs80iCX0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js → index-mbeo62f8.js} +2 -2
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js.map → index-mbeo62f8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js → index-rLgoBCfV.js} +3 -3
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js.map → index-rLgoBCfV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js → layout-grid-C1niOWJx.js} +2 -2
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js.map → layout-grid-C1niOWJx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js → lightbulb-BTmI7SUg.js} +2 -2
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js.map → lightbulb-BTmI7SUg.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js → link-2-CB9HKeuZ.js} +2 -2
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js.map → link-2-CB9HKeuZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js → link-koEYiemK.js} +2 -2
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js.map → link-koEYiemK.js.map} +1 -1
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js → list-v2_GaLdC.js} +2 -2
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js.map → list-v2_GaLdC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js → map-pin-BQNfAqG_.js} +2 -2
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js.map → map-pin-BQNfAqG_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js → messages-square-Dzq5LGg9.js} +2 -2
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js.map → messages-square-Dzq5LGg9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js → minimize-2-CtkoJXcz.js} +2 -2
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js.map → minimize-2-CtkoJXcz.js.map} +1 -1
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js → package-CH3smL37.js} +2 -2
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js.map → package-CH3smL37.js.map} +1 -1
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js → plug-CZ0aL_yF.js} +2 -2
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js.map → plug-CZ0aL_yF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js → power-F2A_J4l6.js} +2 -2
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js.map → power-F2A_J4l6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js → save-Byxot0YU.js} +2 -2
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js.map → save-Byxot0YU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js → send-JjqhUkpw.js} +2 -2
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js.map → send-JjqhUkpw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js → settings-2--SuN9rAt.js} +2 -2
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js.map → settings-2--SuN9rAt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js → square-check-big-BbngGB2h.js} +2 -2
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js.map → square-check-big-BbngGB2h.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js → square-pen-CgrHgZSl.js} +2 -2
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js.map → square-pen-CgrHgZSl.js.map} +1 -1
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js → star-BU3TQr7Z.js} +2 -2
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js.map → star-BU3TQr7Z.js.map} +1 -1
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js → style-CKs7nnn3.js} +2 -2
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js.map → style-CKs7nnn3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js → target-DW5tsDW6.js} +2 -2
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js.map → target-DW5tsDW6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js → test-tube-BHm7w3ON.js} +2 -2
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js.map → test-tube-BHm7w3ON.js.map} +1 -1
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js → upload-DYR7PWwt.js} +2 -2
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js.map → upload-DYR7PWwt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js → useApiSettings-D0TVgQD_.js} +2 -2
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js.map → useApiSettings-D0TVgQD_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js → useCli-DfY8mAP8.js} +2 -2
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js.map → useCli-DfY8mAP8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js → useCommands-CGusDp0F.js} +2 -2
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js.map → useCommands-CGusDp0F.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js → useDebounce-CIwh0fF1.js} +2 -2
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js.map → useDebounce-CIwh0fF1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js → useFileExplorer-FMyFv39K.js} +2 -2
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js.map → useFileExplorer-FMyFv39K.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js → useLocale-B2qhsoTb.js} +2 -2
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js.map → useLocale-B2qhsoTb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js → useSkills-cxKXMBm3.js} +3 -3
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js.map → useSkills-cxKXMBm3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js → useSystemSettings-B-xUT_z-.js} +2 -2
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js.map → useSystemSettings-B-xUT_z-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js → wand-sparkles-DZV_3lPr.js} +2 -2
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js.map → wand-sparkles-DZV_3lPr.js.map} +1 -1
- package/ccw/frontend/dist/index.html +1 -1
- package/package.json +105 -105
- 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": "
|
|
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
|
```
|