claude-code-workflow 7.2.27 → 7.2.29
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-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-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-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/brainstorm/SKILL.md +3 -3
- package/.codex/skills/clean/SKILL.md +3 -3
- 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/issue-discover/SKILL.md +13 -13
- package/.codex/skills/issue-discover/phases/02-discover.md +4 -4
- package/.codex/skills/issue-discover/phases/03-discover-by-prompt.md +3 -3
- package/.codex/skills/parallel-dev-cycle/SKILL.md +4 -4
- package/.codex/skills/parallel-dev-cycle/phases/02-agent-execution.md +6 -6
- package/.codex/skills/parallel-dev-cycle/phases/03-result-aggregation.md +10 -10
- package/.codex/skills/review-cycle/SKILL.md +10 -10
- package/.codex/skills/review-cycle/phases/02-parallel-review.md +6 -6
- package/.codex/skills/review-cycle/phases/04-iterative-deep-dive.md +4 -4
- package/.codex/skills/review-cycle/phases/07-fix-parallel-planning.md +4 -4
- package/.codex/skills/review-cycle/phases/08-fix-execution.md +2 -2
- package/.codex/skills/roadmap-with-file/SKILL.md +14 -14
- 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/spec-generator/README.md +1 -1
- package/.codex/skills/spec-generator/SKILL.md +184 -88
- package/.codex/skills/spec-generator/phases/01-5-requirement-clarification.md +4 -7
- package/.codex/skills/spec-generator/phases/01-discovery.md +30 -11
- package/.codex/skills/spec-generator/phases/02-product-brief.md +2 -5
- package/.codex/skills/spec-generator/phases/03-requirements.md +4 -6
- package/.codex/skills/spec-generator/phases/04-architecture.md +4 -6
- package/.codex/skills/spec-generator/phases/05-epics-stories.md +4 -6
- package/.codex/skills/spec-generator/phases/06-5-auto-fix.md +4 -5
- package/.codex/skills/spec-generator/phases/06-readiness-check.md +8 -8
- package/.codex/skills/spec-generator/phases/07-issue-export.md +2 -2
- package/.codex/skills/spec-setup/SKILL.md +4 -4
- 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/.codex/skills/workflow-plan/SKILL.md +6 -6
- package/.codex/skills/workflow-tdd-plan/SKILL.md +5 -5
- package/.codex/skills/workflow-test-fix-cycle/SKILL.md +19 -19
- package/.codex/skills/workflow-test-fix-cycle/phases/01-test-fix-gen.md +5 -5
- package/.codex/skills/workflow-test-fix-cycle/phases/02-test-cycle-execute.md +5 -5
- 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-exlTDW81.js} +3 -3
- package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js.map → AlertDialog-exlTDW81.js.map} +1 -1
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js → AnalysisPage-cgV9LfAI.js} +2 -2
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js.map → AnalysisPage-cgV9LfAI.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js → ApiSettingsPage-Dk5jJdWt.js} +2 -2
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js.map → ApiSettingsPage-Dk5jJdWt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js → CliModeToggle-Be9xsPiv.js} +2 -2
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js.map → CliModeToggle-Be9xsPiv.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js → CliSessionSharePage-Bh9jBtPI.js} +2 -2
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js.map → CliSessionSharePage-Bh9jBtPI.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js → CliViewerPage-BrE-oyEq.js} +2 -2
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js.map → CliViewerPage-BrE-oyEq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js → CodexLensPage-Cd3nrC93.js} +2 -2
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js.map → CodexLensPage-Cd3nrC93.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js → Collapsible-DXFl3VKF.js} +2 -2
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js.map → Collapsible-DXFl3VKF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js → CommandsManagerPage-IV8zpjgX.js} +2 -2
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js.map → CommandsManagerPage-IV8zpjgX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js → DeepWikiPage-CpDxtmRX.js} +2 -2
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js.map → DeepWikiPage-CpDxtmRX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js → EndpointsPage-BchjWe7s.js} +2 -2
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js.map → EndpointsPage-BchjWe7s.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js → ExplorerPage-CbWvaJ0y.js} +2 -2
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js.map → ExplorerPage-CbWvaJ0y.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js → FixSessionPage-YMjVRiCk.js} +2 -2
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js.map → FixSessionPage-YMjVRiCk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js → FloatingFileBrowser-JW2ehYY_.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js.map → FloatingFileBrowser-JW2ehYY_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js → FloatingPanel-BtqzqDVq.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js.map → FloatingPanel-BtqzqDVq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js → GraphExplorerPage-BsJL_W4d.js} +3 -3
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js.map → GraphExplorerPage-BsJL_W4d.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js → HistoryPage-BuWpQ7k5.js} +2 -2
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js.map → HistoryPage-BuWpQ7k5.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js → HookManagerPage-D0BtMIWy.js} +2 -2
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js.map → HookManagerPage-D0BtMIWy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js → InstallationsPage-C7dwsAKG.js} +2 -2
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js.map → InstallationsPage-C7dwsAKG.js.map} +1 -1
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js → IssueHubPage-D0nCNaeB.js} +2 -2
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js.map → IssueHubPage-D0nCNaeB.js.map} +1 -1
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js → LiteTasksPage-B5c2Kb9r.js} +3 -3
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js.map → LiteTasksPage-B5c2Kb9r.js.map} +1 -1
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js → McpManagerPage-C-S5CehM.js} +2 -2
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js.map → McpManagerPage-C-S5CehM.js.map} +1 -1
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js → MemoryPage-P_B0JVUQ.js} +2 -2
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js.map → MemoryPage-P_B0JVUQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js → NotFoundPage-S4Jn9LUE.js} +2 -2
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js.map → NotFoundPage-S4Jn9LUE.js.map} +1 -1
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js → OrchestratorPage-C2Zlr7AC.js} +2 -2
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js.map → OrchestratorPage-C2Zlr7AC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js → ProjectOverviewPage-CMVfz8s5.js} +2 -2
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js.map → ProjectOverviewPage-CMVfz8s5.js.map} +1 -1
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js → PromptHistoryPage-YEMjFARX.js} +3 -3
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js.map → PromptHistoryPage-YEMjFARX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js → ReviewSessionPage-DnTm55nG.js} +2 -2
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js.map → ReviewSessionPage-DnTm55nG.js.map} +1 -1
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js → RulesManagerPage-CUwebtO2.js} +2 -2
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js.map → RulesManagerPage-CUwebtO2.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js → SessionDetailPage-0qyH1Z5P.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js.map → SessionDetailPage-0qyH1Z5P.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js → SessionsPage-BpgP4087.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js.map → SessionsPage-BpgP4087.js.map} +1 -1
- package/ccw/frontend/dist/assets/SettingsPage-C3SJajeT.js +150 -0
- package/ccw/frontend/dist/assets/SettingsPage-C3SJajeT.js.map +1 -0
- package/ccw/frontend/dist/assets/SkillsManagerPage-vD9PTsmy.js +7 -0
- package/ccw/frontend/dist/assets/SkillsManagerPage-vD9PTsmy.js.map +1 -0
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js → SpecsSettingsPage-DT-yTVkD.js} +4 -4
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js.map → SpecsSettingsPage-DT-yTVkD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js → Switch-CYSPdqWk.js} +2 -2
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js.map → Switch-CYSPdqWk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js → TabsNavigation-CPh6Zor1.js} +2 -2
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js.map → TabsNavigation-CPh6Zor1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js → TaskDrawer-Ds-8830B.js} +2 -2
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js.map → TaskDrawer-Ds-8830B.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js → TeamPage-CJODUxBk.js} +2 -2
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js.map → TeamPage-CJODUxBk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js → TerminalDashboardPage-Cn3fGUuO.js} +3 -3
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js.map → TerminalDashboardPage-Cn3fGUuO.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js → archive-CjwVpw6k.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js.map → archive-CjwVpw6k.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js → archive-restore-2vZa9Ic3.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js.map → archive-restore-2vZa9Ic3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js → arrow-right-CUU5XDgT.js} +2 -2
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js.map → arrow-right-CUU5XDgT.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js → bookmark-plus-Cc3nKRZ5.js} +2 -2
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js.map → bookmark-plus-Cc3nKRZ5.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js → bot-BwpSRDUa.js} +2 -2
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js.map → bot-BwpSRDUa.js.map} +1 -1
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js → braces-DBzUW1XC.js} +2 -2
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js.map → braces-DBzUW1XC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js → circle-stop-CGNNsjvE.js} +2 -2
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js.map → circle-stop-CGNNsjvE.js.map} +1 -1
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js → cpu-D27G86Ul.js} +2 -2
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js.map → cpu-D27G86Ul.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js → ellipsis-vertical-C1Ij47Yz.js} +2 -2
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js.map → ellipsis-vertical-C1Ij47Yz.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js → eye-C6MOB7Au.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js.map → eye-C6MOB7Au.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js → eye-off-BxfBlZ26.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js.map → eye-off-BxfBlZ26.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js → file-json-NI237wA-.js} +2 -2
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js.map → file-json-NI237wA-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js → file-text-Byn2_2v6.js} +2 -2
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js.map → file-text-Byn2_2v6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js → filter-D-7PhZjx.js} +2 -2
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js.map → filter-D-7PhZjx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js → folder-BoAsK_FL.js} +2 -2
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js.map → folder-BoAsK_FL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js → gauge-DCSxJIS4.js} +2 -2
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js.map → gauge-DCSxJIS4.js.map} +1 -1
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js → globe-CHS3prza.js} +2 -2
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js.map → globe-CHS3prza.js.map} +1 -1
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js → grid-3x3-D7K35U7S.js} +2 -2
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js.map → grid-3x3-D7K35U7S.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js → hard-drive-eq9xE07G.js} +2 -2
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js.map → hard-drive-eq9xE07G.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js → hash-C1DMpBua.js} +2 -2
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js.map → hash-C1DMpBua.js.map} +1 -1
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js → history-Di5SBCY-.js} +2 -2
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js.map → history-Di5SBCY-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js → index--_R7COnA.js} +2 -2
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js.map → index--_R7COnA.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js → index-BUol9HDD.js} +3 -3
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js.map → index-BUol9HDD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-B76AGix5.js → index-CT9oykfw.js} +2 -2
- package/ccw/frontend/dist/assets/{index-B76AGix5.js.map → index-CT9oykfw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js → index-Ddwvf87H.js} +2 -2
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js.map → index-Ddwvf87H.js.map} +1 -1
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js → layout-grid-LiX0qZbN.js} +2 -2
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js.map → layout-grid-LiX0qZbN.js.map} +1 -1
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js → lightbulb-CL3DVEwb.js} +2 -2
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js.map → lightbulb-CL3DVEwb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js → link-2-CC5cFeq6.js} +2 -2
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js.map → link-2-CC5cFeq6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js → link-ngFQ9bs0.js} +2 -2
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js.map → link-ngFQ9bs0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js → list-BEU6I0KK.js} +2 -2
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js.map → list-BEU6I0KK.js.map} +1 -1
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js → map-pin-BWZdLA6y.js} +2 -2
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js.map → map-pin-BWZdLA6y.js.map} +1 -1
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js → messages-square-K6_Chm7n.js} +2 -2
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js.map → messages-square-K6_Chm7n.js.map} +1 -1
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js → minimize-2-CWkphauf.js} +2 -2
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js.map → minimize-2-CWkphauf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js → package-DrNgkamn.js} +2 -2
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js.map → package-DrNgkamn.js.map} +1 -1
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js → plug-CMo3sw5_.js} +2 -2
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js.map → plug-CMo3sw5_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js → power-DppNTW5e.js} +2 -2
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js.map → power-DppNTW5e.js.map} +1 -1
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js → save-CD8aPMbZ.js} +2 -2
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js.map → save-CD8aPMbZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js → send-B4z90fQD.js} +2 -2
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js.map → send-B4z90fQD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js → settings-2-CAKRU_QC.js} +2 -2
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js.map → settings-2-CAKRU_QC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js → square-check-big-KhI3HrzX.js} +2 -2
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js.map → square-check-big-KhI3HrzX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js → square-pen-BtdGIpuq.js} +2 -2
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js.map → square-pen-BtdGIpuq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js → star-ZoBUkXoD.js} +2 -2
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js.map → star-ZoBUkXoD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js → style-CltxQP-P.js} +2 -2
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js.map → style-CltxQP-P.js.map} +1 -1
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js → target-C32OUSGf.js} +2 -2
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js.map → target-C32OUSGf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js → test-tube-0IxoyAVZ.js} +2 -2
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js.map → test-tube-0IxoyAVZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js → upload-4eKCkyBn.js} +2 -2
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js.map → upload-4eKCkyBn.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js → useApiSettings-zLTUWqhi.js} +2 -2
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js.map → useApiSettings-zLTUWqhi.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js → useCli-BtN2vpOX.js} +2 -2
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js.map → useCli-BtN2vpOX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js → useCommands-_spj49qL.js} +2 -2
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js.map → useCommands-_spj49qL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js → useDebounce-Bm9KFZvd.js} +2 -2
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js.map → useDebounce-Bm9KFZvd.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js → useFileExplorer-DOmpm6v9.js} +2 -2
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js.map → useFileExplorer-DOmpm6v9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js → useLocale-D2rj4rea.js} +2 -2
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js.map → useLocale-D2rj4rea.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js → useSkills-OskEpomF.js} +3 -3
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js.map → useSkills-OskEpomF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js → useSystemSettings-BjMgsNSF.js} +2 -2
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js.map → useSystemSettings-BjMgsNSF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js → wand-sparkles-CLhyYWa7.js} +2 -2
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js.map → wand-sparkles-CLhyYWa7.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 +0 -150
- package/ccw/frontend/dist/assets/SettingsPage-BPDbXPSM.js.map +0 -1
- package/ccw/frontend/dist/assets/SkillsManagerPage-D3LzbpJY.js +0 -7
- package/ccw/frontend/dist/assets/SkillsManagerPage-D3LzbpJY.js.map +0 -1
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
# AI Slop Detection Catalog
|
|
2
|
+
|
|
3
|
+
20 anti-patterns that signal AI-generated or low-effort design. Reference this during research (visual quality baseline), design (avoidance), review (scoring), and implementation (validation).
|
|
4
|
+
|
|
5
|
+
## Severity Guide
|
|
6
|
+
|
|
7
|
+
| Severity | Meaning | Scoring Impact |
|
|
8
|
+
|----------|---------|----------------|
|
|
9
|
+
| P1 | Major -- immediately recognizable as AI slop | Dimension score capped at 1 |
|
|
10
|
+
| P2 | Minor -- common AI default, degrades quality | Dimension score capped at 2 |
|
|
11
|
+
| P3 | Polish -- subtle tell, acceptable in early iterations | Dimension score capped at 3 |
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 1. AI Color Palette -- P1
|
|
16
|
+
|
|
17
|
+
**Pattern**: Cyan-on-dark, purple-blue gradients, neon accent colors against dark backgrounds. The "AI dashboard" look.
|
|
18
|
+
|
|
19
|
+
**Detection**: Check for `oklch(... 250-280)` as primary + dark background, or gradient from purple to cyan/blue. Check for saturated neon accents (`chroma > 0.25`) on `lightness < 0.15` backgrounds.
|
|
20
|
+
|
|
21
|
+
**Fix**: Use brand-derived colors. Reduce chroma. Apply 60-30-10 rule. Tint neutrals toward brand hue.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 2. Gradient Text for Impact -- P1
|
|
26
|
+
|
|
27
|
+
**Pattern**: `background-clip: text` with gradient fills on headings for visual flair.
|
|
28
|
+
|
|
29
|
+
**Detection**: Search for `background-clip: text` or `-webkit-background-clip: text` in stylesheets.
|
|
30
|
+
|
|
31
|
+
**Fix**: Use solid color with proper contrast. If emphasis needed, use weight or size, not gradient text.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 3. Default Dark Mode with Glowing Accents -- P2
|
|
36
|
+
|
|
37
|
+
**Pattern**: Dark background as default with glowing/neon UI elements. No light mode alternative.
|
|
38
|
+
|
|
39
|
+
**Detection**: Check if dark theme is the only theme defined. Look for `box-shadow` with saturated colors (`0 0 Npx oklch(... 0.2+ ...)`).
|
|
40
|
+
|
|
41
|
+
**Fix**: Design light mode first. Dark mode as opt-in. Use subtle elevation shadows, not glows.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 4. Glassmorphism Everywhere -- P1
|
|
46
|
+
|
|
47
|
+
**Pattern**: `backdrop-filter: blur()` on more than 2 components. Frosted glass effect as default surface treatment.
|
|
48
|
+
|
|
49
|
+
**Detection**: Count `backdrop-filter: blur` occurrences. Flag if > 2 distinct components use it.
|
|
50
|
+
|
|
51
|
+
**Fix**: Reserve glass effect for 1-2 overlay/modal surfaces max. Use solid or semi-transparent backgrounds elsewhere.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 5. Hero Metric Layout -- P2
|
|
56
|
+
|
|
57
|
+
**Pattern**: Big number + small label arranged in rows/grids. The "SaaS dashboard hero" pattern with 3-4 metric cards.
|
|
58
|
+
|
|
59
|
+
**Detection**: Look for repeated pattern of large font-size number + small label in card grids at page top.
|
|
60
|
+
|
|
61
|
+
**Fix**: Show metrics in context of their meaning. Use sparklines with real data, comparisons, or trends instead of isolated numbers.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 6. Identical Card Grids -- P2
|
|
66
|
+
|
|
67
|
+
**Pattern**: 3+ cards with identical dimensions, same padding, same shadow, same structure. No visual hierarchy.
|
|
68
|
+
|
|
69
|
+
**Detection**: Count card components with identical styling. Flag if 3+ share exact same dimensions and no hierarchy differentiation.
|
|
70
|
+
|
|
71
|
+
**Fix**: Vary card sizes by importance. Use a featured/primary card. Apply visual hierarchy through size or position.
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## 7. Nested Cards -- P2
|
|
76
|
+
|
|
77
|
+
**Pattern**: Card inside card -- border/shadow inside border/shadow. Creates visual clutter.
|
|
78
|
+
|
|
79
|
+
**Detection**: Check for components with `border`/`box-shadow` containing child components that also have `border`/`box-shadow`.
|
|
80
|
+
|
|
81
|
+
**Fix**: Flatten hierarchy. Use spacing and subtle dividers instead of nested containers.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 8. Generic Fonts -- P2
|
|
86
|
+
|
|
87
|
+
**Pattern**: Inter, Roboto, Open Sans, Lato, Montserrat, or Arial as the primary font. Zero typographic identity.
|
|
88
|
+
|
|
89
|
+
**Detection**: Check `font-family` declarations for the generic font list.
|
|
90
|
+
|
|
91
|
+
**Fix**: Choose from recommended fonts: Instrument Sans, Plus Jakarta Sans, DM Sans, Space Grotesk, Fraunces.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 9. Rounded Rectangles + Generic Drop Shadows -- P3
|
|
96
|
+
|
|
97
|
+
**Pattern**: More than 5 elements with identical `border-radius` and generic `box-shadow` (e.g., `0 1px 3px rgba(0,0,0,0.1)`).
|
|
98
|
+
|
|
99
|
+
**Detection**: Count elements sharing identical `border-radius` + `box-shadow` values. Flag if > 5.
|
|
100
|
+
|
|
101
|
+
**Fix**: Vary border-radius by component type (buttons vs cards vs modals). Use layered shadows with tinted colors.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## 10. Large Icons Above Every Heading -- P2
|
|
106
|
+
|
|
107
|
+
**Pattern**: Decorative icon placed above every section heading. Adds visual noise without meaning.
|
|
108
|
+
|
|
109
|
+
**Detection**: Check for repeated icon + heading pattern across 3+ sections.
|
|
110
|
+
|
|
111
|
+
**Fix**: Use icons sparingly and only where they add meaning. Prefer inline icons at heading size, not oversized decorative ones.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 11. One-Side Border Accent -- P3
|
|
116
|
+
|
|
117
|
+
**Pattern**: `border-left: 3px solid var(--accent)` on cards or sections as the sole visual treatment.
|
|
118
|
+
|
|
119
|
+
**Detection**: Search for one-sided border declarations on 3+ components.
|
|
120
|
+
|
|
121
|
+
**Fix**: Use spacing, background tinting, or typography to create differentiation instead.
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 12. Decorative Sparklines -- P2
|
|
126
|
+
|
|
127
|
+
**Pattern**: Tiny charts with no axis labels, no data context, no interactivity. Pure decoration.
|
|
128
|
+
|
|
129
|
+
**Detection**: Check for chart/sparkline components without accessible labels, axis values, or data source.
|
|
130
|
+
|
|
131
|
+
**Fix**: Either make charts meaningful (labels, context, interaction) or remove them. No decorative data visualization.
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## 13. Bounce/Elastic Easing -- P2
|
|
136
|
+
|
|
137
|
+
**Pattern**: Bounce or elastic easing on UI transitions. Feels toylike and unprofessional.
|
|
138
|
+
|
|
139
|
+
**Detection**: Search for `bounce`, `elastic`, `cubic-bezier` with values > 1.0 in the second or fourth parameter.
|
|
140
|
+
|
|
141
|
+
**Fix**: Use ease-out-quart `cubic-bezier(0.25, 1, 0.5, 1)` as default. See design-standards.md Motion section.
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## 14. Redundant Copy -- P3
|
|
146
|
+
|
|
147
|
+
**Pattern**: Heading restated in the body text immediately below. "Our Features" followed by "Here are our features."
|
|
148
|
+
|
|
149
|
+
**Detection**: Compare heading text to first sentence of body. Flag if > 60% word overlap.
|
|
150
|
+
|
|
151
|
+
**Fix**: Body text should expand on the heading, not repeat it. Each element earns its space.
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 15. All Buttons Primary -- P1
|
|
156
|
+
|
|
157
|
+
**Pattern**: Every button is the same filled/primary style. No visual hierarchy between actions.
|
|
158
|
+
|
|
159
|
+
**Detection**: Count button variants. Flag if > 80% of buttons share the same style (all filled, all same color).
|
|
160
|
+
|
|
161
|
+
**Fix**: 1 primary CTA per viewport. Secondary = outline. Tertiary = text link. See design-standards.md Visual Hierarchy.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 16. Everything Centered -- P2
|
|
166
|
+
|
|
167
|
+
**Pattern**: Body text, lists, and form labels all center-aligned. Looks "designed" but kills readability.
|
|
168
|
+
|
|
169
|
+
**Detection**: Check for `text-align: center` on body text, lists, or form elements (not just headings).
|
|
170
|
+
|
|
171
|
+
**Fix**: Left-align body text. Center only headings, hero text, and short labels. Reading follows left edge.
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## 17. Same Spacing Everywhere -- P2
|
|
176
|
+
|
|
177
|
+
**Pattern**: More than 70% of spacing values are identical. No rhythm variation.
|
|
178
|
+
|
|
179
|
+
**Detection**: Audit spacing tokens usage. Flag if > 70% of `gap`, `padding`, `margin` values use the same token.
|
|
180
|
+
|
|
181
|
+
**Fix**: Apply rhythm: tight (4-8px) within groups, comfortable (16-24px) between items, generous (48-96px) between sections.
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## 18. Monospace as Tech Aesthetic -- P3
|
|
186
|
+
|
|
187
|
+
**Pattern**: Monospace font used on non-code content (headings, labels, body text) for "techy" feel.
|
|
188
|
+
|
|
189
|
+
**Detection**: Check for monospace `font-family` on elements that are not `code`, `pre`, `kbd`, or `samp`.
|
|
190
|
+
|
|
191
|
+
**Fix**: Reserve monospace for code. Use Space Grotesk or similar geometric sans if tech aesthetic is desired.
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## 19. Modal Overuse -- P3
|
|
196
|
+
|
|
197
|
+
**Pattern**: More than 3 modals in a flow for non-critical actions. Interrupts flow unnecessarily.
|
|
198
|
+
|
|
199
|
+
**Detection**: Count modal/dialog components. Flag if > 3 modals exist for non-destructive actions.
|
|
200
|
+
|
|
201
|
+
**Fix**: Use inline expansion, drawers, or page navigation. Reserve modals for confirmations and critical decisions.
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## 20. Pure Black or Pure White -- P1
|
|
206
|
+
|
|
207
|
+
**Pattern**: Using `#000000` or `#ffffff` (or `rgb(0,0,0)` / `rgb(255,255,255)`). Harsh contrast, unnatural.
|
|
208
|
+
|
|
209
|
+
**Detection**: Search for `#000`, `#fff`, `#000000`, `#ffffff`, `rgb(0,0,0)`, `rgb(255,255,255)` in stylesheets and tokens.
|
|
210
|
+
|
|
211
|
+
**Fix**: Use tinted neutrals. Darkest: `oklch(0.08 0.010 <hue>)`. Lightest: `oklch(0.98 0.005 <hue>)`.
|
|
@@ -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": {
|