claude-code-workflow 7.2.27 → 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-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/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,356 @@
|
|
|
1
|
+
# Design Standards
|
|
2
|
+
|
|
3
|
+
Impeccable's positive design standards. These are the target state -- what good looks like. Used by scanner for scoring (how close to ideal) and optimizer as fix targets.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Color
|
|
8
|
+
|
|
9
|
+
### Principles
|
|
10
|
+
- Use **OKLCH** for perceptually uniform palettes. Colors at the same lightness actually look the same lightness
|
|
11
|
+
- Tint neutrals toward brand hue (chroma 0.005-0.01). Never pure gray
|
|
12
|
+
- **60-30-10 rule**: 60% neutral, 30% secondary/supporting, 10% accent
|
|
13
|
+
- Semantic token hierarchy: primitive -> semantic -> component tokens
|
|
14
|
+
- Never pure black (`#000`) or pure white (`#fff`). Always tint
|
|
15
|
+
|
|
16
|
+
### Color Token Structure
|
|
17
|
+
```
|
|
18
|
+
--color-primary oklch(0.55 0.2 250)
|
|
19
|
+
--color-primary-hover oklch(0.50 0.22 250)
|
|
20
|
+
--color-primary-active oklch(0.45 0.22 250)
|
|
21
|
+
|
|
22
|
+
--color-neutral-50 oklch(0.98 0.005 250) /* near-white, brand tinted */
|
|
23
|
+
--color-neutral-100 oklch(0.95 0.005 250)
|
|
24
|
+
--color-neutral-200 oklch(0.90 0.007 250)
|
|
25
|
+
--color-neutral-300 oklch(0.80 0.007 250)
|
|
26
|
+
--color-neutral-400 oklch(0.65 0.008 250)
|
|
27
|
+
--color-neutral-500 oklch(0.50 0.008 250)
|
|
28
|
+
--color-neutral-600 oklch(0.40 0.008 250)
|
|
29
|
+
--color-neutral-700 oklch(0.30 0.008 250)
|
|
30
|
+
--color-neutral-800 oklch(0.20 0.010 250)
|
|
31
|
+
--color-neutral-900 oklch(0.13 0.010 250)
|
|
32
|
+
--color-neutral-950 oklch(0.08 0.010 250) /* near-black, brand tinted */
|
|
33
|
+
|
|
34
|
+
--color-success oklch(0.65 0.18 145)
|
|
35
|
+
--color-warning oklch(0.75 0.15 85)
|
|
36
|
+
--color-error oklch(0.55 0.22 25)
|
|
37
|
+
--color-info oklch(0.60 0.15 250)
|
|
38
|
+
|
|
39
|
+
--color-surface var(--color-neutral-50)
|
|
40
|
+
--color-surface-raised var(--color-neutral-100)
|
|
41
|
+
--color-surface-overlay var(--color-neutral-900 / 0.5)
|
|
42
|
+
|
|
43
|
+
--color-text-primary var(--color-neutral-900)
|
|
44
|
+
--color-text-secondary var(--color-neutral-600)
|
|
45
|
+
--color-text-muted var(--color-neutral-400)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Contrast Requirements (WCAG AA)
|
|
49
|
+
- Normal text (<18px / <24px bold): 4.5:1 minimum
|
|
50
|
+
- Large text (>=18px / >=24px bold): 3:1 minimum
|
|
51
|
+
- UI components and graphical objects: 3:1 minimum
|
|
52
|
+
- Focus indicators: 3:1 against adjacent colors
|
|
53
|
+
|
|
54
|
+
### Text on Colored Backgrounds
|
|
55
|
+
- Never gray text on colored backgrounds (looks washed out)
|
|
56
|
+
- Use shade of the background color, or white/dark with transparency
|
|
57
|
+
- `color-mix(in oklch, var(--bg-color) 30%, black)` for text on colored surfaces
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Typography
|
|
62
|
+
|
|
63
|
+
### Font Selection
|
|
64
|
+
Avoid: Inter, Roboto, Open Sans, Lato, Montserrat, Arial (overused defaults).
|
|
65
|
+
|
|
66
|
+
Recommended alternatives by category:
|
|
67
|
+
- **Sans-serif body**: Instrument Sans, Plus Jakarta Sans, DM Sans, Geist, General Sans
|
|
68
|
+
- **Sans-serif display**: Space Grotesk, Manrope, Outfit, Satoshi, Clash Display
|
|
69
|
+
- **Serif display**: Fraunces, Playfair Display 2, Source Serif 4
|
|
70
|
+
- **Monospace (code only)**: Geist Mono, JetBrains Mono, Fira Code
|
|
71
|
+
|
|
72
|
+
### Modular Type Scale
|
|
73
|
+
Choose one ratio and apply consistently:
|
|
74
|
+
|
|
75
|
+
| Ratio | Name | Scale (base 16px) |
|
|
76
|
+
|-------|------|--------------------|
|
|
77
|
+
| 1.125 | Major Second | 16, 18, 20.25, 22.78, 25.63 |
|
|
78
|
+
| 1.200 | Minor Third | 16, 19.2, 23.04, 27.65, 33.18 |
|
|
79
|
+
| 1.250 | Major Third | 16, 20, 25, 31.25, 39.06 |
|
|
80
|
+
| 1.333 | Perfect Fourth | 16, 21.33, 28.43, 37.9, 50.52 |
|
|
81
|
+
| 1.500 | Perfect Fifth | 16, 24, 36, 54, 81 |
|
|
82
|
+
|
|
83
|
+
### Fluid Sizing
|
|
84
|
+
Use `clamp()` for display text:
|
|
85
|
+
```css
|
|
86
|
+
--text-xs: 0.75rem; /* 12px, fixed */
|
|
87
|
+
--text-sm: 0.875rem; /* 14px, fixed */
|
|
88
|
+
--text-base: 1rem; /* 16px, body */
|
|
89
|
+
--text-lg: 1.125rem; /* 18px */
|
|
90
|
+
--text-xl: clamp(1.25rem, 1.1rem + 0.5vw, 1.5rem); /* 20-24px */
|
|
91
|
+
--text-2xl: clamp(1.5rem, 1.2rem + 1vw, 2rem); /* 24-32px */
|
|
92
|
+
--text-3xl: clamp(1.875rem, 1.4rem + 1.5vw, 2.5rem); /* 30-40px */
|
|
93
|
+
--text-4xl: clamp(2.25rem, 1.5rem + 2.5vw, 3.5rem); /* 36-56px */
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Line Height & Spacing
|
|
97
|
+
- Body text: `line-height: 1.5` (24px at 16px base)
|
|
98
|
+
- Headings: `line-height: 1.2` (tighter)
|
|
99
|
+
- Small text / captions: `line-height: 1.6`
|
|
100
|
+
- Reading width: `max-width: 65ch` (range: 45-75ch)
|
|
101
|
+
|
|
102
|
+
### Loading
|
|
103
|
+
- `font-display: swap` on all custom fonts
|
|
104
|
+
- Provide `size-adjust`, `ascent-override`, `descent-override` on fallback for minimal CLS
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Spacing
|
|
109
|
+
|
|
110
|
+
### 4pt Base Scale
|
|
111
|
+
```css
|
|
112
|
+
--space-0: 0;
|
|
113
|
+
--space-1: 0.25rem; /* 4px */
|
|
114
|
+
--space-2: 0.5rem; /* 8px */
|
|
115
|
+
--space-3: 0.75rem; /* 12px */
|
|
116
|
+
--space-4: 1rem; /* 16px */
|
|
117
|
+
--space-5: 1.25rem; /* 20px */
|
|
118
|
+
--space-6: 1.5rem; /* 24px */
|
|
119
|
+
--space-8: 2rem; /* 32px */
|
|
120
|
+
--space-10: 2.5rem; /* 40px */
|
|
121
|
+
--space-12: 3rem; /* 48px */
|
|
122
|
+
--space-16: 4rem; /* 64px */
|
|
123
|
+
--space-24: 6rem; /* 96px */
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Rhythm
|
|
127
|
+
- **Tight**: 4-8px within component groups (e.g., label + input, icon + text)
|
|
128
|
+
- **Comfortable**: 16-24px between related items (e.g., list items, form fields)
|
|
129
|
+
- **Generous**: 48-96px between major sections (e.g., page sections, content blocks)
|
|
130
|
+
|
|
131
|
+
Monotonous spacing (same value everywhere) = no rhythm = boring. Vary spacing intentionally.
|
|
132
|
+
|
|
133
|
+
### Layout Principles
|
|
134
|
+
- Use `gap` instead of `margin` for sibling spacing
|
|
135
|
+
- Cards only when content is truly distinct and actionable. Not everything needs a card
|
|
136
|
+
- Flatten nested cards -- use spacing + subtle dividers instead
|
|
137
|
+
- Container queries (`@container`) for component-level responsive
|
|
138
|
+
- Touch targets: minimum 44x44px for all interactive elements
|
|
139
|
+
- Optical adjustments: visually center, not mathematically center (e.g., play button in circle needs right offset)
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Motion
|
|
144
|
+
|
|
145
|
+
### Property Rules
|
|
146
|
+
- **Animate ONLY**: `transform`, `opacity`, `clip-path`, `background-color`, `color`, `border-color`, `box-shadow`, `filter`
|
|
147
|
+
- **NEVER animate**: `width`, `height`, `top`, `left`, `right`, `bottom`, `margin`, `padding` (triggers layout)
|
|
148
|
+
|
|
149
|
+
### Easing
|
|
150
|
+
- **Default (ease-out-quart)**: `cubic-bezier(0.25, 1, 0.5, 1)` -- decelerates naturally
|
|
151
|
+
- **Enter (ease-out)**: `cubic-bezier(0, 0, 0.25, 1)` -- elements arrive and settle
|
|
152
|
+
- **Exit (ease-in)**: `cubic-bezier(0.5, 0, 0.75, 0)` -- elements accelerate away
|
|
153
|
+
- **NEVER**: `ease` (default), `linear` (mechanical), bounce/elastic (dated)
|
|
154
|
+
|
|
155
|
+
### Duration Scale
|
|
156
|
+
```css
|
|
157
|
+
--duration-instant: 100ms; /* tooltip show, ripple */
|
|
158
|
+
--duration-fast: 150ms; /* button hover, focus ring */
|
|
159
|
+
--duration-normal: 250ms; /* dropdown open, tab switch */
|
|
160
|
+
--duration-slow: 400ms; /* modal open, sidebar slide */
|
|
161
|
+
--duration-entrance: 500ms; /* page entrance, hero animation */
|
|
162
|
+
--duration-complex: 800ms; /* complex sequence, page transition */
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
- Exit = 75% of entrance duration
|
|
166
|
+
- Feedback (hover, active, focus): 100-150ms maximum
|
|
167
|
+
- State change: 200-300ms
|
|
168
|
+
- Layout change: 300-500ms
|
|
169
|
+
|
|
170
|
+
### Stagger
|
|
171
|
+
- Max visible items to stagger: 10
|
|
172
|
+
- Total stagger duration: max 500ms
|
|
173
|
+
- Formula: `animation-delay: calc(var(--index) * 50ms)`
|
|
174
|
+
- Cap: `animation-delay: min(calc(var(--index) * 50ms), 500ms)`
|
|
175
|
+
|
|
176
|
+
### Reduced Motion
|
|
177
|
+
**Required** -- affects ~35% of adults over 40:
|
|
178
|
+
```css
|
|
179
|
+
@media (prefers-reduced-motion: reduce) {
|
|
180
|
+
*,
|
|
181
|
+
*::before,
|
|
182
|
+
*::after {
|
|
183
|
+
animation-duration: 0.01ms !important;
|
|
184
|
+
animation-iteration-count: 1 !important;
|
|
185
|
+
transition-duration: 0.01ms !important;
|
|
186
|
+
scroll-behavior: auto !important;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### will-change
|
|
192
|
+
- Do NOT set in CSS (wastes GPU memory permanently)
|
|
193
|
+
- Add via JS on `pointerenter` / `focusin`
|
|
194
|
+
- Remove on `animationend` / `transitionend`
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Interaction States
|
|
199
|
+
|
|
200
|
+
### The 8 Required States
|
|
201
|
+
|
|
202
|
+
Every interactive element must define:
|
|
203
|
+
|
|
204
|
+
| State | CSS | Visual Change |
|
|
205
|
+
|-------|-----|---------------|
|
|
206
|
+
| Default | -- | Base appearance |
|
|
207
|
+
| Hover | `:hover` (wrap in `@media(hover:hover)`) | Subtle background/opacity change |
|
|
208
|
+
| Focus | `:focus-visible` | Focus ring: 2px solid accent, offset 2px |
|
|
209
|
+
| Active | `:active` | Scale down (0.97) or darker background |
|
|
210
|
+
| Disabled | `[disabled], [aria-disabled="true"]` | Opacity 0.5, cursor not-allowed |
|
|
211
|
+
| Loading | `[aria-busy="true"]` | Spinner/skeleton, disable interaction |
|
|
212
|
+
| Error | `[aria-invalid="true"]` | Red border, error message below |
|
|
213
|
+
| Success | custom class/attribute | Green check, success message |
|
|
214
|
+
|
|
215
|
+
### Focus Ring Specification
|
|
216
|
+
```css
|
|
217
|
+
:focus-visible {
|
|
218
|
+
outline: 2px solid var(--color-primary);
|
|
219
|
+
outline-offset: 2px;
|
|
220
|
+
border-radius: inherit;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/* Only remove outline for mouse clicks */
|
|
224
|
+
:focus:not(:focus-visible) {
|
|
225
|
+
outline: none;
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Focus ring contrast: 3:1 minimum against all adjacent colors.
|
|
230
|
+
|
|
231
|
+
### Form Labels
|
|
232
|
+
- Always provide visible `<label>` elements
|
|
233
|
+
- Placeholders are hints, NOT labels (they disappear)
|
|
234
|
+
- Use `aria-labelledby` or `aria-label` for icon-only buttons
|
|
235
|
+
- Error messages: `aria-describedby` linking input to error text
|
|
236
|
+
|
|
237
|
+
### Touch Targets
|
|
238
|
+
- Minimum: 44x44px (WCAG 2.5.5 AAA) / 24x24px (WCAG 2.5.8 AA minimum)
|
|
239
|
+
- Use padding to increase hit area without changing visual size
|
|
240
|
+
- Minimum 8px gap between adjacent targets
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Visual Hierarchy
|
|
245
|
+
|
|
246
|
+
### Squint Test
|
|
247
|
+
Blur the page (or squint). You should immediately identify:
|
|
248
|
+
1. The most important element (usually primary heading or CTA)
|
|
249
|
+
2. The second most important element
|
|
250
|
+
3. Clear groupings of related content
|
|
251
|
+
|
|
252
|
+
If everything looks the same when blurred, hierarchy has failed.
|
|
253
|
+
|
|
254
|
+
### Hierarchy Tools (use 2-3 together)
|
|
255
|
+
| Tool | Effect |
|
|
256
|
+
|------|--------|
|
|
257
|
+
| Size | Larger = more important. 3:1 ratio between major levels |
|
|
258
|
+
| Weight | Bold vs regular vs light. Maximum 2 weights per page |
|
|
259
|
+
| Color | Saturated vs muted. Primary color for emphasis |
|
|
260
|
+
| Space | More surrounding space = more important |
|
|
261
|
+
| Position | Top-left reads first (in LTR). Above fold > below fold |
|
|
262
|
+
| Contrast | High contrast = more important. Low contrast recedes |
|
|
263
|
+
|
|
264
|
+
### Primary Action Rule
|
|
265
|
+
- Only 1 primary CTA per viewport
|
|
266
|
+
- Primary: filled button, highest contrast, most saturated
|
|
267
|
+
- Secondary: outline/ghost button
|
|
268
|
+
- Tertiary: text link, no background
|
|
269
|
+
|
|
270
|
+
### Progressive Disclosure
|
|
271
|
+
- Show summary first, detail on demand
|
|
272
|
+
- Expandable sections, "show more," detail panels
|
|
273
|
+
- Do not dump all information at once
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## Responsive Design
|
|
278
|
+
|
|
279
|
+
### Breakpoints
|
|
280
|
+
```css
|
|
281
|
+
/* Mobile first */
|
|
282
|
+
--bp-sm: 640px; /* Small tablets */
|
|
283
|
+
--bp-md: 768px; /* Tablets */
|
|
284
|
+
--bp-lg: 1024px; /* Laptops */
|
|
285
|
+
--bp-xl: 1280px; /* Desktops */
|
|
286
|
+
--bp-2xl: 1536px; /* Large screens */
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### Fluid Design Principles
|
|
290
|
+
- Use `%`, `vw`, `fr`, `min()`, `max()`, `clamp()` instead of fixed `px` widths
|
|
291
|
+
- `max-width` instead of `width` for containers
|
|
292
|
+
- Grid with `fr` units for responsive layouts
|
|
293
|
+
- Container queries (`@container`) for component-level responsiveness
|
|
294
|
+
|
|
295
|
+
### Mobile Requirements
|
|
296
|
+
- Minimum text: 14px (0.875rem), prefer 16px for body
|
|
297
|
+
- Touch targets: 44x44px minimum
|
|
298
|
+
- No horizontal scroll at >= 320px viewport
|
|
299
|
+
- Must have `<meta name="viewport" content="width=device-width, initial-scale=1">`
|
|
300
|
+
- Images: `max-width: 100%; height: auto`
|
|
301
|
+
|
|
302
|
+
### Adapt, Don't Hide
|
|
303
|
+
- Content should be restructured for smaller screens, not hidden
|
|
304
|
+
- Stack horizontal layouts vertically
|
|
305
|
+
- Use accordion/tabs for complex content
|
|
306
|
+
- Simplify navigation (hamburger, bottom nav)
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## UX Writing
|
|
311
|
+
|
|
312
|
+
### Button Labels
|
|
313
|
+
- NEVER: "OK", "Submit", "Yes", "No" (generic)
|
|
314
|
+
- ALWAYS: verb + object — "Save changes", "Create account", "Delete message"
|
|
315
|
+
- Destructive: name the destruction + count — "Delete 5 items"
|
|
316
|
+
|
|
317
|
+
### Error Messages
|
|
318
|
+
Formula: what happened + why + how to fix
|
|
319
|
+
- "Password must be 8+ characters with a number" not "Invalid password"
|
|
320
|
+
- Never blame user, never use codes alone
|
|
321
|
+
- Preserve user input on error
|
|
322
|
+
|
|
323
|
+
### Empty States
|
|
324
|
+
Acknowledge + explain value + provide action
|
|
325
|
+
- "No projects yet. Create your first project to start collaborating. [Create project]"
|
|
326
|
+
|
|
327
|
+
### Loading Text
|
|
328
|
+
- Specific: "Saving your draft..." not "Loading..."
|
|
329
|
+
- Multi-step: "Uploading (2 of 5 files)..."
|
|
330
|
+
|
|
331
|
+
### Consistency
|
|
332
|
+
- One term per concept (delete/remove → pick one)
|
|
333
|
+
- Same icon for same action everywhere
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
## Dark Mode (when present)
|
|
338
|
+
|
|
339
|
+
### Rules
|
|
340
|
+
- NOT inverted light mode — requires deliberate design
|
|
341
|
+
- **Surface hierarchy**: lighter surfaces = higher elevation
|
|
342
|
+
- Base: `oklch(0.10-0.15 0.01 <hue>)`
|
|
343
|
+
- Raised: `oklch(0.18-0.22 0.01 <hue>)`
|
|
344
|
+
- Overlay: `oklch(0.24-0.28 0.01 <hue>)`
|
|
345
|
+
- **Font weight**: reduce by 1 step (600→500, 500→400) — light text on dark looks heavier
|
|
346
|
+
- **Accent colors**: desaturate — reduce OKLCH chroma by 0.05-0.10 from light theme values
|
|
347
|
+
- Never: pure black `#000` background
|
|
348
|
+
|
|
349
|
+
### Dangerous Combinations
|
|
350
|
+
| Combination | Problem | Fix |
|
|
351
|
+
|-------------|---------|-----|
|
|
352
|
+
| Gray on colored bg | Washed out | Use shade of bg color or white with opacity |
|
|
353
|
+
| Red + Green adjacent | Color blindness | Add icons/patterns |
|
|
354
|
+
| Yellow on white | Invisible | Use dark amber |
|
|
355
|
+
| Thin light text on images | Unpredictable contrast | Text shadow or overlay |
|
|
356
|
+
| Saturated on dark | Visual vibration | Desaturate chroma |
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
# Fix Strategies
|
|
2
|
+
|
|
3
|
+
Maps issue categories to Impeccable fix strategies. Used by diagnostician for fix planning and optimizer for implementation guidance.
|
|
4
|
+
|
|
5
|
+
## Strategy Index
|
|
6
|
+
|
|
7
|
+
| Issue Category | Fix Strategy | Impeccable Concept | Scope |
|
|
8
|
+
|----------------|-------------|-------------------|-------|
|
|
9
|
+
| AI slop aesthetic | De-template | normalize + critique | Systemic |
|
|
10
|
+
| Color problems | Colorize | colorize | Systemic / Per-file |
|
|
11
|
+
| Typography issues | Typeset | typeset | Systemic |
|
|
12
|
+
| Spacing/layout | Arrange | arrange | Systemic / Per-file |
|
|
13
|
+
| Animation issues | Animate | animate | Per-file |
|
|
14
|
+
| Missing states | Harden | harden + polish | Per-component |
|
|
15
|
+
| Visual noise | Simplify | quieter + distill | Per-component |
|
|
16
|
+
| Too bland/weak | Strengthen | bolder + delight | Per-component |
|
|
17
|
+
| Inconsistency | Normalize | normalize | Systemic |
|
|
18
|
+
| Final pass | Polish | polish | Per-component |
|
|
19
|
+
| Hierarchy issues | Clarify | distill + bolder | Per-page |
|
|
20
|
+
| Responsive issues | Adapt | adapt | Per-component |
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## De-template (Anti-AI-Slop)
|
|
25
|
+
|
|
26
|
+
**When**: Anti-patterns dimension score 0-2 (AI slop or heavy AI influence)
|
|
27
|
+
|
|
28
|
+
**Strategy**:
|
|
29
|
+
1. Replace generic fonts with distinctive alternatives (see design-standards.md Typography)
|
|
30
|
+
2. Convert gradient text to solid accent colors with weight/size emphasis instead
|
|
31
|
+
3. Break identical card grids: vary sizes, add featured card, introduce asymmetry
|
|
32
|
+
4. Remove decorative glassmorphism (keep functional like overlays)
|
|
33
|
+
5. Redesign hero metrics with intentional hierarchy, not template layout
|
|
34
|
+
6. Flatten nested cards into single-level with spacing
|
|
35
|
+
7. Add left-alignment for body text, centering only for specific hero elements
|
|
36
|
+
8. Create button hierarchy: 1 primary, ghost secondary, text tertiary
|
|
37
|
+
9. Introduce spacing rhythm (tight within groups, generous between sections)
|
|
38
|
+
10. Replace bounce easing with exponential curves
|
|
39
|
+
|
|
40
|
+
**Dependency**: Requires Colorize and Typeset to be planned (often executed together).
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Colorize
|
|
45
|
+
|
|
46
|
+
**When**: Color dimension score 0-2 or any P0/P1 color issues
|
|
47
|
+
|
|
48
|
+
**Strategy**:
|
|
49
|
+
1. **Token foundation** (if no tokens exist):
|
|
50
|
+
- Create CSS custom property file with full neutral scale (50-950)
|
|
51
|
+
- Define primary, semantic (success/warning/error/info), and surface tokens
|
|
52
|
+
- All neutrals tinted toward brand hue (OKLCH chroma 0.005-0.01)
|
|
53
|
+
|
|
54
|
+
2. **Pure black/white removal**:
|
|
55
|
+
- `#000` -> `oklch(0.08-0.15 0.01 <hue>)` (near-black, brand tinted)
|
|
56
|
+
- `#fff` -> `oklch(0.97-0.99 0.005 <hue>)` (near-white, brand tinted)
|
|
57
|
+
|
|
58
|
+
3. **Gray tinting**:
|
|
59
|
+
- Convert all pure grays to brand-tinted variants
|
|
60
|
+
- Add chroma 0.005-0.01 at brand hue
|
|
61
|
+
|
|
62
|
+
4. **Contrast fixes**:
|
|
63
|
+
- Measure each text/background pair
|
|
64
|
+
- Adjust lightness until WCAG AA met (4.5:1 normal, 3:1 large)
|
|
65
|
+
|
|
66
|
+
5. **OKLCH conversion**:
|
|
67
|
+
- Convert key palette colors from hex/hsl to oklch
|
|
68
|
+
- Generate tint/shade scales in OKLCH for perceptual uniformity
|
|
69
|
+
|
|
70
|
+
6. **60-30-10 enforcement**:
|
|
71
|
+
- Audit accent color usage, reduce to ~10%
|
|
72
|
+
- Ensure neutral dominates at ~60%
|
|
73
|
+
|
|
74
|
+
**Dependency**: Should run before De-template (anti-slop fixes may need new colors).
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Typeset
|
|
79
|
+
|
|
80
|
+
**When**: Typography dimension score 0-2 or muddy hierarchy
|
|
81
|
+
|
|
82
|
+
**Strategy**:
|
|
83
|
+
1. **Font replacement**: Swap generic fonts for distinctive alternatives
|
|
84
|
+
- Body: Plus Jakarta Sans, Instrument Sans, DM Sans, Geist
|
|
85
|
+
- Display: Space Grotesk, Manrope, Fraunces
|
|
86
|
+
2. **Scale establishment**: Choose modular ratio (1.25 or 1.333 recommended), generate size scale
|
|
87
|
+
3. **Fluid sizing**: Add `clamp()` for h1-h3 display sizes
|
|
88
|
+
4. **Line length**: Add `max-width: 65ch` to prose containers
|
|
89
|
+
5. **Vertical rhythm**: Set line-height system (1.5 body, 1.2 headings)
|
|
90
|
+
6. **Font loading**: Add `font-display: swap` to all @font-face
|
|
91
|
+
|
|
92
|
+
**Dependency**: Run before Clarify (hierarchy depends on type scale).
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Arrange
|
|
97
|
+
|
|
98
|
+
**When**: Spacing dimension score 0-2 or arbitrary spacing values
|
|
99
|
+
|
|
100
|
+
**Strategy**:
|
|
101
|
+
1. **Scale creation**: Define 4pt base scale as CSS custom properties
|
|
102
|
+
2. **Value replacement**: Map arbitrary values to nearest scale value
|
|
103
|
+
3. **Rhythm introduction**: Tight (4-8px) within groups, comfortable (16-24px) between items, generous (48-96px) between sections
|
|
104
|
+
4. **Card flattening**: Remove nested cards, replace with spacing + subtle dividers
|
|
105
|
+
5. **Gap conversion**: Replace margin between siblings with gap on flex/grid parent
|
|
106
|
+
6. **Touch targets**: Ensure all interactive elements are 44x44px minimum
|
|
107
|
+
|
|
108
|
+
**Dependency**: Independent, but benefits from Colorize tokens being in place.
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Animate
|
|
113
|
+
|
|
114
|
+
**When**: Motion dimension score 0-2 or layout property animations
|
|
115
|
+
|
|
116
|
+
**Strategy**:
|
|
117
|
+
1. **Property fix**: Replace layout animations (width/height/margin/padding) with transform+opacity
|
|
118
|
+
2. **Easing fix**: Replace ease/linear/bounce with exponential curves
|
|
119
|
+
3. **Reduced-motion**: Add `@media (prefers-reduced-motion: reduce)` global rule
|
|
120
|
+
4. **Token system**: Create duration + easing custom properties
|
|
121
|
+
5. **Stagger cap**: Cap stagger at 10 items, 500ms total
|
|
122
|
+
6. **will-change**: Remove from CSS, document JS activation pattern
|
|
123
|
+
|
|
124
|
+
**Dependency**: Independent.
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Harden
|
|
129
|
+
|
|
130
|
+
**When**: Interaction states dimension score 0-2 or missing critical states
|
|
131
|
+
|
|
132
|
+
**Strategy**:
|
|
133
|
+
1. **Hover**: Add `:hover` with subtle visual change, wrap in `@media(hover:hover)`
|
|
134
|
+
2. **Focus**: Add `:focus-visible` with 2px solid accent ring, offset 2px
|
|
135
|
+
3. **Active**: Add `:active` with scale(0.97) or darker background
|
|
136
|
+
4. **Disabled**: Add `[disabled]` with opacity 0.5, cursor not-allowed
|
|
137
|
+
5. **Loading**: Add aria-busy pattern with spinner/skeleton
|
|
138
|
+
6. **Error/Success**: Add form validation visual states
|
|
139
|
+
7. **Focus ring**: Ensure 3:1 contrast against all adjacent colors
|
|
140
|
+
8. **Labels**: Replace placeholder-as-label with visible `<label>` elements
|
|
141
|
+
9. **Touch targets**: Pad interactive elements to 44px minimum
|
|
142
|
+
|
|
143
|
+
**Dependency**: Requires Colorize tokens for consistent state colors.
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## Simplify (quieter + distill)
|
|
148
|
+
|
|
149
|
+
**When**: Visual noise, too many decorations, competing elements
|
|
150
|
+
|
|
151
|
+
**Strategy**:
|
|
152
|
+
1. Remove decorative elements that do not aid comprehension
|
|
153
|
+
2. Mute icon colors (reduce saturation/opacity)
|
|
154
|
+
3. Remove background decorations and unnecessary borders
|
|
155
|
+
4. Reduce shadow intensity
|
|
156
|
+
5. Simplify card borders (remove or lighten)
|
|
157
|
+
6. Remove sparkline decorations without data value
|
|
158
|
+
|
|
159
|
+
**Dependency**: Independent.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Strengthen (bolder + delight)
|
|
164
|
+
|
|
165
|
+
**When**: Too bland, everything same weight, no emphasis
|
|
166
|
+
|
|
167
|
+
**Strategy**:
|
|
168
|
+
1. Increase primary element size by 1.5-2x
|
|
169
|
+
2. Add color saturation to primary CTA
|
|
170
|
+
3. Increase weight contrast (bold primary, regular secondary)
|
|
171
|
+
4. Add subtle micro-interactions (hover lift, active press)
|
|
172
|
+
5. Introduce one distinctive element (asymmetric layout, unexpected color, custom illustration)
|
|
173
|
+
|
|
174
|
+
**Dependency**: Requires Typeset and Colorize to be in place.
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Clarify (hierarchy)
|
|
179
|
+
|
|
180
|
+
**When**: Visual hierarchy dimension score 0-2 or fails squint test
|
|
181
|
+
|
|
182
|
+
**Strategy**:
|
|
183
|
+
1. Identify primary element, increase to 3:1 ratio over body
|
|
184
|
+
2. Use 2-3 hierarchy tools together (size + weight + color)
|
|
185
|
+
3. Group related content with proximity (smaller gaps within, larger between)
|
|
186
|
+
4. Reduce visual weight of competing secondary elements
|
|
187
|
+
5. Ensure only 1 primary CTA per viewport
|
|
188
|
+
6. Add progressive disclosure where appropriate
|
|
189
|
+
|
|
190
|
+
**Dependency**: Requires Typeset (size hierarchy) and Colorize (color hierarchy).
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Adapt (responsive)
|
|
195
|
+
|
|
196
|
+
**When**: Responsive dimension score 0-2 or broken mobile experience
|
|
197
|
+
|
|
198
|
+
**Strategy**:
|
|
199
|
+
1. Replace fixed widths with fluid (%, vw, fr, min/max/clamp)
|
|
200
|
+
2. Add missing breakpoints (640, 768, 1024, 1280px)
|
|
201
|
+
3. Fix overflow (horizontal scroll causes)
|
|
202
|
+
4. Fix mobile text sizes (minimum 14px)
|
|
203
|
+
5. Fix touch targets (minimum 44px)
|
|
204
|
+
6. Add container queries for component-level responsive
|
|
205
|
+
7. Restructure hidden content (adapt, don't hide)
|
|
206
|
+
8. Add viewport meta tag if missing
|
|
207
|
+
|
|
208
|
+
**Dependency**: Run last -- tests all other fixes at different viewports.
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Fix Order (Default)
|
|
213
|
+
|
|
214
|
+
When applying all strategies in a full polish cycle:
|
|
215
|
+
|
|
216
|
+
```
|
|
217
|
+
Phase 1: Foundation
|
|
218
|
+
1. Colorize (token system + color fixes)
|
|
219
|
+
2. Typeset (font + scale + fluid sizing)
|
|
220
|
+
3. Arrange (spacing scale + layout)
|
|
221
|
+
|
|
222
|
+
Phase 2: Aesthetic
|
|
223
|
+
4. De-template (anti-AI-slop cleanup)
|
|
224
|
+
5. Simplify or Strengthen (as needed)
|
|
225
|
+
|
|
226
|
+
Phase 3: Interaction
|
|
227
|
+
6. Animate (motion system)
|
|
228
|
+
7. Harden (interaction states)
|
|
229
|
+
|
|
230
|
+
Phase 4: Structure
|
|
231
|
+
8. Clarify (visual hierarchy)
|
|
232
|
+
|
|
233
|
+
Phase 5: Validation
|
|
234
|
+
9. Adapt (responsive -- tests everything)
|
|
235
|
+
```
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Pipeline Definitions
|
|
2
|
+
|
|
3
|
+
UI polish pipeline modes and task registry.
|
|
4
|
+
|
|
5
|
+
## Pipeline Modes
|
|
6
|
+
|
|
7
|
+
| Mode | Description | Task Count |
|
|
8
|
+
|------|-------------|------------|
|
|
9
|
+
| scan-only | Discover + diagnose, report only | 2 tasks |
|
|
10
|
+
| targeted | Fix specific dimensions: scan -> diagnose -> optimize -> verify | 4 tasks |
|
|
11
|
+
| full | Complete polish cycle with GC loop on verify failure | 4 tasks + GC |
|
|
12
|
+
|
|
13
|
+
## Scan-Only Pipeline Task Registry
|
|
14
|
+
|
|
15
|
+
| Task ID | Role | blockedBy | Description |
|
|
16
|
+
|---------|------|-----------|-------------|
|
|
17
|
+
| SCAN-001 | scanner | [] | 8-dimension UI audit against Impeccable design standards |
|
|
18
|
+
| DIAG-001 | diagnostician | [SCAN-001] | Root cause analysis, severity classification, fix dependency graph |
|
|
19
|
+
|
|
20
|
+
## Targeted Pipeline Task Registry
|
|
21
|
+
|
|
22
|
+
| Task ID | Role | blockedBy | Description |
|
|
23
|
+
|---------|------|-----------|-------------|
|
|
24
|
+
| SCAN-001 | scanner | [] | 8-dimension UI audit (filtered to target dimensions) |
|
|
25
|
+
| DIAG-001 | diagnostician | [SCAN-001] | Root cause analysis for targeted dimensions |
|
|
26
|
+
| OPT-001 | optimizer | [DIAG-001] | Apply targeted fixes per Impeccable standards |
|
|
27
|
+
| VERIFY-001 | verifier | [OPT-001] | Before/after comparison, regression check |
|
|
28
|
+
|
|
29
|
+
## Full Pipeline Task Registry
|
|
30
|
+
|
|
31
|
+
| Task ID | Role | blockedBy | Description |
|
|
32
|
+
|---------|------|-----------|-------------|
|
|
33
|
+
| SCAN-001 | scanner | [] | Full 8-dimension UI audit |
|
|
34
|
+
| DIAG-001 | diagnostician | [SCAN-001] | Complete root cause analysis with fix dependency graph |
|
|
35
|
+
| OPT-001 | optimizer | [DIAG-001] | Apply all fixes in dependency order |
|
|
36
|
+
| VERIFY-001 | verifier | [OPT-001] | Verification with GC loop trigger |
|
|
37
|
+
|
|
38
|
+
## GC Loop (Full Mode Only)
|
|
39
|
+
|
|
40
|
+
| Checkpoint | Task | Condition | Action |
|
|
41
|
+
|------------|------|-----------|--------|
|
|
42
|
+
| VERIFY completes | VERIFY-* | verify_passed (no regressions, score >= before) | Pipeline complete |
|
|
43
|
+
| VERIFY completes | VERIFY-* | verify_failed (non-critical regressions) | gc_rounds < 2 -> create OPT-fix task |
|
|
44
|
+
| VERIFY completes | VERIFY-* | fix_required (critical regressions or score drop) | gc_rounds < 2 -> create OPT-fix task (CRITICAL) |
|
|
45
|
+
| VERIFY completes | VERIFY-* | gc_rounds >= 2 | Escalate to user |
|
|
46
|
+
|
|
47
|
+
### GC Fix Tasks (dynamically created)
|
|
48
|
+
|
|
49
|
+
| Task ID | Role | blockedBy | Description |
|
|
50
|
+
|---------|------|-----------|-------------|
|
|
51
|
+
| OPT-fix-1 | optimizer | [VERIFY-001] | Fix regressions from round 1 verification |
|
|
52
|
+
| VERIFY-002 | verifier | [OPT-fix-1] | Re-verify after round 1 fixes |
|
|
53
|
+
| OPT-fix-2 | optimizer | [VERIFY-002] | Fix regressions from round 2 verification (if needed) |
|
|
54
|
+
| VERIFY-003 | verifier | [OPT-fix-2] | Final re-verify (max round) |
|
|
55
|
+
|
|
56
|
+
## Collaboration Patterns
|
|
57
|
+
|
|
58
|
+
| Pattern | Roles | Description |
|
|
59
|
+
|---------|-------|-------------|
|
|
60
|
+
| CP-1 Linear Pipeline | All | Base sequential flow: scan -> diagnose -> optimize -> verify |
|
|
61
|
+
| CP-2 Review-Fix (GC) | optimizer <-> verifier | Generator-Critic loop, max 2 rounds |
|
|
62
|
+
|
|
63
|
+
## Spawn Rules
|
|
64
|
+
|
|
65
|
+
| Mode | Behavior |
|
|
66
|
+
|------|----------|
|
|
67
|
+
| scan-only | Sequential: SCAN-001 then DIAG-001 |
|
|
68
|
+
| targeted | Sequential: SCAN -> DIAG -> OPT -> VERIFY |
|
|
69
|
+
| full | Sequential: SCAN -> DIAG -> OPT -> VERIFY, then GC loop if verify triggers |
|
|
70
|
+
|
|
71
|
+
All modes use sequential spawning (one task at a time) since each task depends on the previous.
|
|
72
|
+
|
|
73
|
+
## Output Artifacts
|
|
74
|
+
|
|
75
|
+
| Task | Output Path |
|
|
76
|
+
|------|-------------|
|
|
77
|
+
| SCAN-001 | <session>/scan/scan-report.md |
|
|
78
|
+
| DIAG-001 | <session>/diagnosis/diagnosis-report.md |
|
|
79
|
+
| OPT-001 / OPT-fix-* | <session>/optimization/fix-log.md + modified source files |
|
|
80
|
+
| VERIFY-001 / VERIFY-* | <session>/verification/verify-report.md |
|
|
81
|
+
| Screenshots (if DevTools) | <session>/evidence/*.png |
|