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.
Files changed (416) hide show
  1. package/.ccw/specs/architecture-constraints.md +5 -0
  2. package/.claude/skills/_shared/SKILL-DESIGN-SPEC.md +140 -0
  3. package/.claude/skills/investigate/SKILL.md +110 -0
  4. package/.claude/skills/investigate/phases/01-root-cause-investigation.md +132 -0
  5. package/.claude/skills/investigate/phases/02-pattern-analysis.md +126 -0
  6. package/.claude/skills/investigate/phases/03-hypothesis-testing.md +177 -0
  7. package/.claude/skills/investigate/phases/04-implementation.md +139 -0
  8. package/.claude/skills/investigate/phases/05-verification-report.md +153 -0
  9. package/.claude/skills/investigate/specs/debug-report-format.md +226 -0
  10. package/.claude/skills/investigate/specs/iron-law.md +101 -0
  11. package/.claude/skills/security-audit/SKILL.md +125 -0
  12. package/.claude/skills/security-audit/phases/01-supply-chain-scan.md +139 -0
  13. package/.claude/skills/security-audit/phases/02-owasp-review.md +156 -0
  14. package/.claude/skills/security-audit/phases/03-threat-modeling.md +180 -0
  15. package/.claude/skills/security-audit/phases/04-report-tracking.md +177 -0
  16. package/.claude/skills/security-audit/specs/owasp-checklist.md +442 -0
  17. package/.claude/skills/security-audit/specs/scoring-gates.md +141 -0
  18. package/.claude/skills/ship/SKILL.md +105 -0
  19. package/.claude/skills/ship/phases/01-preflight-checks.md +121 -0
  20. package/.claude/skills/ship/phases/02-code-review.md +137 -0
  21. package/.claude/skills/ship/phases/03-version-bump.md +171 -0
  22. package/.claude/skills/ship/phases/04-changelog-commit.md +167 -0
  23. package/.claude/skills/ship/phases/05-pr-creation.md +163 -0
  24. package/.claude/skills/skill-generator/templates/sequential-phase.md +10 -0
  25. package/.claude/skills/skill-generator/templates/skill-md.md +4 -0
  26. package/.claude/skills/team-interactive-craft/SKILL.md +127 -0
  27. package/.claude/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
  28. package/.claude/skills/team-interactive-craft/roles/builder/role.md +216 -0
  29. package/.claude/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
  30. package/.claude/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +192 -0
  31. package/.claude/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +183 -0
  32. package/.claude/skills/team-interactive-craft/roles/coordinator/role.md +166 -0
  33. package/.claude/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
  34. package/.claude/skills/team-interactive-craft/roles/researcher/role.md +131 -0
  35. package/.claude/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
  36. package/.claude/skills/team-interactive-craft/specs/pipelines.md +85 -0
  37. package/.claude/skills/team-interactive-craft/specs/team-config.json +105 -0
  38. package/.claude/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
  39. package/.claude/skills/team-motion-design/SKILL.md +129 -0
  40. package/.claude/skills/team-motion-design/roles/animator/role.md +194 -0
  41. package/.claude/skills/team-motion-design/roles/choreographer/role.md +164 -0
  42. package/.claude/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
  43. package/.claude/skills/team-motion-design/roles/coordinator/commands/dispatch.md +203 -0
  44. package/.claude/skills/team-motion-design/roles/coordinator/commands/monitor.md +184 -0
  45. package/.claude/skills/team-motion-design/roles/coordinator/role.md +167 -0
  46. package/.claude/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
  47. package/.claude/skills/team-motion-design/roles/motion-tester/role.md +175 -0
  48. package/.claude/skills/team-motion-design/specs/gpu-constraints.md +114 -0
  49. package/.claude/skills/team-motion-design/specs/motion-tokens.md +128 -0
  50. package/.claude/skills/team-motion-design/specs/pipelines.md +74 -0
  51. package/.claude/skills/team-motion-design/specs/reduced-motion.md +129 -0
  52. package/.claude/skills/team-motion-design/specs/team-config.json +99 -0
  53. package/.claude/skills/team-ui-polish/SKILL.md +127 -0
  54. package/.claude/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
  55. package/.claude/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +194 -0
  56. package/.claude/skills/team-ui-polish/roles/coordinator/commands/monitor.md +180 -0
  57. package/.claude/skills/team-ui-polish/roles/coordinator/role.md +170 -0
  58. package/.claude/skills/team-ui-polish/roles/diagnostician/role.md +160 -0
  59. package/.claude/skills/team-ui-polish/roles/optimizer/role.md +225 -0
  60. package/.claude/skills/team-ui-polish/roles/scanner/role.md +356 -0
  61. package/.claude/skills/team-ui-polish/roles/verifier/role.md +142 -0
  62. package/.claude/skills/team-ui-polish/specs/anti-patterns.md +141 -0
  63. package/.claude/skills/team-ui-polish/specs/design-standards.md +356 -0
  64. package/.claude/skills/team-ui-polish/specs/fix-strategies.md +235 -0
  65. package/.claude/skills/team-ui-polish/specs/pipelines.md +81 -0
  66. package/.claude/skills/team-ui-polish/specs/scoring-guide.md +162 -0
  67. package/.claude/skills/team-ui-polish/specs/team-config.json +73 -0
  68. package/.claude/skills/team-uidesign/SKILL.md +6 -1
  69. package/.claude/skills/team-uidesign/roles/designer/role.md +28 -4
  70. package/.claude/skills/team-uidesign/roles/implementer/role.md +25 -3
  71. package/.claude/skills/team-uidesign/roles/researcher/role.md +21 -2
  72. package/.claude/skills/team-uidesign/roles/reviewer/role.md +19 -17
  73. package/.claude/skills/team-uidesign/specs/anti-patterns.md +211 -0
  74. package/.claude/skills/team-uidesign/specs/design-standards.md +329 -0
  75. package/.claude/skills/team-uidesign/specs/scoring-guide.md +114 -0
  76. package/.claude/skills/team-uidesign/specs/team-config.json +1 -1
  77. package/.claude/skills/team-uidesign/specs/ux-writing.md +86 -0
  78. package/.claude/skills/team-ux-improve/SKILL.md +3 -0
  79. package/.claude/skills/team-ux-improve/roles/designer/role.md +30 -0
  80. package/.claude/skills/team-ux-improve/roles/diagnoser/role.md +16 -1
  81. package/.claude/skills/team-ux-improve/roles/scanner/role.md +43 -1
  82. package/.claude/skills/team-ux-improve/specs/anti-patterns.md +103 -0
  83. package/.claude/skills/team-ux-improve/specs/design-standards.md +54 -0
  84. package/.claude/skills/team-ux-improve/specs/heuristics.md +88 -0
  85. package/.claude/skills/team-ux-improve/wisdom/anti-patterns/common-ux-pitfalls.md +40 -8
  86. package/.claude/skills/team-ux-improve/wisdom/patterns/state-management.md +32 -12
  87. package/.claude/skills/team-ux-improve/wisdom/patterns/ui-feedback.md +35 -11
  88. package/.claude/skills/team-ux-improve/wisdom/principles/general-ux.md +36 -9
  89. package/.claude/skills/team-visual-a11y/SKILL.md +143 -0
  90. package/.claude/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
  91. package/.claude/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
  92. package/.claude/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +250 -0
  93. package/.claude/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +204 -0
  94. package/.claude/skills/team-visual-a11y/roles/coordinator/role.md +169 -0
  95. package/.claude/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
  96. package/.claude/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
  97. package/.claude/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
  98. package/.claude/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
  99. package/.claude/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
  100. package/.claude/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
  101. package/.claude/skills/team-visual-a11y/specs/pipelines.md +98 -0
  102. package/.claude/skills/team-visual-a11y/specs/team-config.json +109 -0
  103. package/.claude/skills/team-visual-a11y/specs/typography-scale.md +165 -0
  104. package/.claude/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
  105. package/.codex/skills/brainstorm/SKILL.md +3 -3
  106. package/.codex/skills/clean/SKILL.md +3 -3
  107. package/.codex/skills/investigate/agents/investigator.md +392 -0
  108. package/.codex/skills/investigate/orchestrator.md +362 -0
  109. package/.codex/skills/investigate/phases/01-root-cause-investigation.md +212 -0
  110. package/.codex/skills/investigate/phases/02-pattern-analysis.md +181 -0
  111. package/.codex/skills/investigate/phases/03-hypothesis-testing.md +214 -0
  112. package/.codex/skills/investigate/phases/04-implementation.md +195 -0
  113. package/.codex/skills/investigate/phases/05-verification-report.md +240 -0
  114. package/.codex/skills/issue-discover/SKILL.md +13 -13
  115. package/.codex/skills/issue-discover/phases/02-discover.md +4 -4
  116. package/.codex/skills/issue-discover/phases/03-discover-by-prompt.md +3 -3
  117. package/.codex/skills/parallel-dev-cycle/SKILL.md +4 -4
  118. package/.codex/skills/parallel-dev-cycle/phases/02-agent-execution.md +6 -6
  119. package/.codex/skills/parallel-dev-cycle/phases/03-result-aggregation.md +10 -10
  120. package/.codex/skills/review-cycle/SKILL.md +10 -10
  121. package/.codex/skills/review-cycle/phases/02-parallel-review.md +6 -6
  122. package/.codex/skills/review-cycle/phases/04-iterative-deep-dive.md +4 -4
  123. package/.codex/skills/review-cycle/phases/07-fix-parallel-planning.md +4 -4
  124. package/.codex/skills/review-cycle/phases/08-fix-execution.md +2 -2
  125. package/.codex/skills/roadmap-with-file/SKILL.md +14 -14
  126. package/.codex/skills/security-audit/agents/security-auditor.md +341 -0
  127. package/.codex/skills/security-audit/orchestrator.md +384 -0
  128. package/.codex/skills/security-audit/phases/01-supply-chain-scan.md +226 -0
  129. package/.codex/skills/security-audit/phases/02-owasp-review.md +232 -0
  130. package/.codex/skills/security-audit/phases/03-threat-modeling.md +249 -0
  131. package/.codex/skills/security-audit/phases/04-report-tracking.md +300 -0
  132. package/.codex/skills/ship/agents/ship-operator.md +318 -0
  133. package/.codex/skills/ship/orchestrator.md +426 -0
  134. package/.codex/skills/ship/phases/01-preflight-checks.md +198 -0
  135. package/.codex/skills/ship/phases/02-code-review.md +228 -0
  136. package/.codex/skills/ship/phases/03-version-bump.md +259 -0
  137. package/.codex/skills/ship/phases/04-changelog-commit.md +263 -0
  138. package/.codex/skills/ship/phases/05-pr-creation.md +280 -0
  139. package/.codex/skills/spec-generator/README.md +1 -1
  140. package/.codex/skills/spec-generator/SKILL.md +184 -88
  141. package/.codex/skills/spec-generator/phases/01-5-requirement-clarification.md +4 -7
  142. package/.codex/skills/spec-generator/phases/01-discovery.md +30 -11
  143. package/.codex/skills/spec-generator/phases/02-product-brief.md +2 -5
  144. package/.codex/skills/spec-generator/phases/03-requirements.md +4 -6
  145. package/.codex/skills/spec-generator/phases/04-architecture.md +4 -6
  146. package/.codex/skills/spec-generator/phases/05-epics-stories.md +4 -6
  147. package/.codex/skills/spec-generator/phases/06-5-auto-fix.md +4 -5
  148. package/.codex/skills/spec-generator/phases/06-readiness-check.md +8 -8
  149. package/.codex/skills/spec-generator/phases/07-issue-export.md +2 -2
  150. package/.codex/skills/spec-setup/SKILL.md +4 -4
  151. package/.codex/skills/team-interactive-craft/SKILL.md +220 -0
  152. package/.codex/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
  153. package/.codex/skills/team-interactive-craft/roles/builder/role.md +216 -0
  154. package/.codex/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
  155. package/.codex/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +162 -0
  156. package/.codex/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +233 -0
  157. package/.codex/skills/team-interactive-craft/roles/coordinator/role.md +209 -0
  158. package/.codex/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
  159. package/.codex/skills/team-interactive-craft/roles/researcher/role.md +131 -0
  160. package/.codex/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
  161. package/.codex/skills/team-interactive-craft/specs/pipelines.md +85 -0
  162. package/.codex/skills/team-interactive-craft/specs/team-config.json +105 -0
  163. package/.codex/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
  164. package/.codex/skills/team-motion-design/SKILL.md +222 -0
  165. package/.codex/skills/team-motion-design/roles/animator/role.md +194 -0
  166. package/.codex/skills/team-motion-design/roles/choreographer/role.md +164 -0
  167. package/.codex/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
  168. package/.codex/skills/team-motion-design/roles/coordinator/commands/dispatch.md +168 -0
  169. package/.codex/skills/team-motion-design/roles/coordinator/commands/monitor.md +242 -0
  170. package/.codex/skills/team-motion-design/roles/coordinator/role.md +210 -0
  171. package/.codex/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
  172. package/.codex/skills/team-motion-design/roles/motion-tester/role.md +175 -0
  173. package/.codex/skills/team-motion-design/specs/gpu-constraints.md +114 -0
  174. package/.codex/skills/team-motion-design/specs/motion-tokens.md +128 -0
  175. package/.codex/skills/team-motion-design/specs/pipelines.md +74 -0
  176. package/.codex/skills/team-motion-design/specs/reduced-motion.md +129 -0
  177. package/.codex/skills/team-motion-design/specs/team-config.json +99 -0
  178. package/.codex/skills/team-ui-polish/SKILL.md +218 -0
  179. package/.codex/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
  180. package/.codex/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +167 -0
  181. package/.codex/skills/team-ui-polish/roles/coordinator/commands/monitor.md +230 -0
  182. package/.codex/skills/team-ui-polish/roles/coordinator/role.md +213 -0
  183. package/.codex/skills/team-ui-polish/roles/diagnostician/role.md +164 -0
  184. package/.codex/skills/team-ui-polish/roles/optimizer/role.md +229 -0
  185. package/.codex/skills/team-ui-polish/roles/scanner/role.md +360 -0
  186. package/.codex/skills/team-ui-polish/roles/verifier/role.md +142 -0
  187. package/.codex/skills/team-ui-polish/specs/anti-patterns.md +141 -0
  188. package/.codex/skills/team-ui-polish/specs/design-standards.md +356 -0
  189. package/.codex/skills/team-ui-polish/specs/fix-strategies.md +235 -0
  190. package/.codex/skills/team-ui-polish/specs/pipelines.md +81 -0
  191. package/.codex/skills/team-ui-polish/specs/scoring-guide.md +162 -0
  192. package/.codex/skills/team-ui-polish/specs/team-config.json +73 -0
  193. package/.codex/skills/team-visual-a11y/SKILL.md +319 -0
  194. package/.codex/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
  195. package/.codex/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
  196. package/.codex/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +188 -0
  197. package/.codex/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +281 -0
  198. package/.codex/skills/team-visual-a11y/roles/coordinator/role.md +213 -0
  199. package/.codex/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
  200. package/.codex/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
  201. package/.codex/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
  202. package/.codex/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
  203. package/.codex/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
  204. package/.codex/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
  205. package/.codex/skills/team-visual-a11y/specs/pipelines.md +98 -0
  206. package/.codex/skills/team-visual-a11y/specs/team-config.json +109 -0
  207. package/.codex/skills/team-visual-a11y/specs/typography-scale.md +165 -0
  208. package/.codex/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
  209. package/.codex/skills/workflow-plan/SKILL.md +6 -6
  210. package/.codex/skills/workflow-tdd-plan/SKILL.md +5 -5
  211. package/.codex/skills/workflow-test-fix-cycle/SKILL.md +19 -19
  212. package/.codex/skills/workflow-test-fix-cycle/phases/01-test-fix-gen.md +5 -5
  213. package/.codex/skills/workflow-test-fix-cycle/phases/02-test-cycle-execute.md +5 -5
  214. package/README.md +8 -0
  215. package/ccw/dist/core/hooks/hook-templates.d.ts.map +1 -1
  216. package/ccw/dist/core/hooks/hook-templates.js +114 -1
  217. package/ccw/dist/core/hooks/hook-templates.js.map +1 -1
  218. package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
  219. package/ccw/dist/core/routes/cli-routes.js +34 -0
  220. package/ccw/dist/core/routes/cli-routes.js.map +1 -1
  221. package/ccw/dist/core/routes/system-routes.js +2 -2
  222. package/ccw/dist/core/routes/system-routes.js.map +1 -1
  223. package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js → AlertDialog-exlTDW81.js} +3 -3
  224. package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js.map → AlertDialog-exlTDW81.js.map} +1 -1
  225. package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js → AnalysisPage-cgV9LfAI.js} +2 -2
  226. package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js.map → AnalysisPage-cgV9LfAI.js.map} +1 -1
  227. package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js → ApiSettingsPage-Dk5jJdWt.js} +2 -2
  228. package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js.map → ApiSettingsPage-Dk5jJdWt.js.map} +1 -1
  229. package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js → CliModeToggle-Be9xsPiv.js} +2 -2
  230. package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js.map → CliModeToggle-Be9xsPiv.js.map} +1 -1
  231. package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js → CliSessionSharePage-Bh9jBtPI.js} +2 -2
  232. package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js.map → CliSessionSharePage-Bh9jBtPI.js.map} +1 -1
  233. package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js → CliViewerPage-BrE-oyEq.js} +2 -2
  234. package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js.map → CliViewerPage-BrE-oyEq.js.map} +1 -1
  235. package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js → CodexLensPage-Cd3nrC93.js} +2 -2
  236. package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js.map → CodexLensPage-Cd3nrC93.js.map} +1 -1
  237. package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js → Collapsible-DXFl3VKF.js} +2 -2
  238. package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js.map → Collapsible-DXFl3VKF.js.map} +1 -1
  239. package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js → CommandsManagerPage-IV8zpjgX.js} +2 -2
  240. package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js.map → CommandsManagerPage-IV8zpjgX.js.map} +1 -1
  241. package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js → DeepWikiPage-CpDxtmRX.js} +2 -2
  242. package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js.map → DeepWikiPage-CpDxtmRX.js.map} +1 -1
  243. package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js → EndpointsPage-BchjWe7s.js} +2 -2
  244. package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js.map → EndpointsPage-BchjWe7s.js.map} +1 -1
  245. package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js → ExplorerPage-CbWvaJ0y.js} +2 -2
  246. package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js.map → ExplorerPage-CbWvaJ0y.js.map} +1 -1
  247. package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js → FixSessionPage-YMjVRiCk.js} +2 -2
  248. package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js.map → FixSessionPage-YMjVRiCk.js.map} +1 -1
  249. package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js → FloatingFileBrowser-JW2ehYY_.js} +2 -2
  250. package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js.map → FloatingFileBrowser-JW2ehYY_.js.map} +1 -1
  251. package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js → FloatingPanel-BtqzqDVq.js} +2 -2
  252. package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js.map → FloatingPanel-BtqzqDVq.js.map} +1 -1
  253. package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js → GraphExplorerPage-BsJL_W4d.js} +3 -3
  254. package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js.map → GraphExplorerPage-BsJL_W4d.js.map} +1 -1
  255. package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js → HistoryPage-BuWpQ7k5.js} +2 -2
  256. package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js.map → HistoryPage-BuWpQ7k5.js.map} +1 -1
  257. package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js → HookManagerPage-D0BtMIWy.js} +2 -2
  258. package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js.map → HookManagerPage-D0BtMIWy.js.map} +1 -1
  259. package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js → InstallationsPage-C7dwsAKG.js} +2 -2
  260. package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js.map → InstallationsPage-C7dwsAKG.js.map} +1 -1
  261. package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js → IssueHubPage-D0nCNaeB.js} +2 -2
  262. package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js.map → IssueHubPage-D0nCNaeB.js.map} +1 -1
  263. package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js → LiteTasksPage-B5c2Kb9r.js} +3 -3
  264. package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js.map → LiteTasksPage-B5c2Kb9r.js.map} +1 -1
  265. package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js → McpManagerPage-C-S5CehM.js} +2 -2
  266. package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js.map → McpManagerPage-C-S5CehM.js.map} +1 -1
  267. package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js → MemoryPage-P_B0JVUQ.js} +2 -2
  268. package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js.map → MemoryPage-P_B0JVUQ.js.map} +1 -1
  269. package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js → NotFoundPage-S4Jn9LUE.js} +2 -2
  270. package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js.map → NotFoundPage-S4Jn9LUE.js.map} +1 -1
  271. package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js → OrchestratorPage-C2Zlr7AC.js} +2 -2
  272. package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js.map → OrchestratorPage-C2Zlr7AC.js.map} +1 -1
  273. package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js → ProjectOverviewPage-CMVfz8s5.js} +2 -2
  274. package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js.map → ProjectOverviewPage-CMVfz8s5.js.map} +1 -1
  275. package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js → PromptHistoryPage-YEMjFARX.js} +3 -3
  276. package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js.map → PromptHistoryPage-YEMjFARX.js.map} +1 -1
  277. package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js → ReviewSessionPage-DnTm55nG.js} +2 -2
  278. package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js.map → ReviewSessionPage-DnTm55nG.js.map} +1 -1
  279. package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js → RulesManagerPage-CUwebtO2.js} +2 -2
  280. package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js.map → RulesManagerPage-CUwebtO2.js.map} +1 -1
  281. package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js → SessionDetailPage-0qyH1Z5P.js} +2 -2
  282. package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js.map → SessionDetailPage-0qyH1Z5P.js.map} +1 -1
  283. package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js → SessionsPage-BpgP4087.js} +2 -2
  284. package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js.map → SessionsPage-BpgP4087.js.map} +1 -1
  285. package/ccw/frontend/dist/assets/SettingsPage-C3SJajeT.js +150 -0
  286. package/ccw/frontend/dist/assets/SettingsPage-C3SJajeT.js.map +1 -0
  287. package/ccw/frontend/dist/assets/SkillsManagerPage-vD9PTsmy.js +7 -0
  288. package/ccw/frontend/dist/assets/SkillsManagerPage-vD9PTsmy.js.map +1 -0
  289. package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js → SpecsSettingsPage-DT-yTVkD.js} +4 -4
  290. package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js.map → SpecsSettingsPage-DT-yTVkD.js.map} +1 -1
  291. package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js → Switch-CYSPdqWk.js} +2 -2
  292. package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js.map → Switch-CYSPdqWk.js.map} +1 -1
  293. package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js → TabsNavigation-CPh6Zor1.js} +2 -2
  294. package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js.map → TabsNavigation-CPh6Zor1.js.map} +1 -1
  295. package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js → TaskDrawer-Ds-8830B.js} +2 -2
  296. package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js.map → TaskDrawer-Ds-8830B.js.map} +1 -1
  297. package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js → TeamPage-CJODUxBk.js} +2 -2
  298. package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js.map → TeamPage-CJODUxBk.js.map} +1 -1
  299. package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js → TerminalDashboardPage-Cn3fGUuO.js} +3 -3
  300. package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js.map → TerminalDashboardPage-Cn3fGUuO.js.map} +1 -1
  301. package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js → archive-CjwVpw6k.js} +2 -2
  302. package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js.map → archive-CjwVpw6k.js.map} +1 -1
  303. package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js → archive-restore-2vZa9Ic3.js} +2 -2
  304. package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js.map → archive-restore-2vZa9Ic3.js.map} +1 -1
  305. package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js → arrow-right-CUU5XDgT.js} +2 -2
  306. package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js.map → arrow-right-CUU5XDgT.js.map} +1 -1
  307. package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js → bookmark-plus-Cc3nKRZ5.js} +2 -2
  308. package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js.map → bookmark-plus-Cc3nKRZ5.js.map} +1 -1
  309. package/ccw/frontend/dist/assets/{bot-BLkaQscs.js → bot-BwpSRDUa.js} +2 -2
  310. package/ccw/frontend/dist/assets/{bot-BLkaQscs.js.map → bot-BwpSRDUa.js.map} +1 -1
  311. package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js → braces-DBzUW1XC.js} +2 -2
  312. package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js.map → braces-DBzUW1XC.js.map} +1 -1
  313. package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js → circle-stop-CGNNsjvE.js} +2 -2
  314. package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js.map → circle-stop-CGNNsjvE.js.map} +1 -1
  315. package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js → cpu-D27G86Ul.js} +2 -2
  316. package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js.map → cpu-D27G86Ul.js.map} +1 -1
  317. package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js → ellipsis-vertical-C1Ij47Yz.js} +2 -2
  318. package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js.map → ellipsis-vertical-C1Ij47Yz.js.map} +1 -1
  319. package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js → eye-C6MOB7Au.js} +2 -2
  320. package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js.map → eye-C6MOB7Au.js.map} +1 -1
  321. package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js → eye-off-BxfBlZ26.js} +2 -2
  322. package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js.map → eye-off-BxfBlZ26.js.map} +1 -1
  323. package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js → file-json-NI237wA-.js} +2 -2
  324. package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js.map → file-json-NI237wA-.js.map} +1 -1
  325. package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js → file-text-Byn2_2v6.js} +2 -2
  326. package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js.map → file-text-Byn2_2v6.js.map} +1 -1
  327. package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js → filter-D-7PhZjx.js} +2 -2
  328. package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js.map → filter-D-7PhZjx.js.map} +1 -1
  329. package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js → folder-BoAsK_FL.js} +2 -2
  330. package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js.map → folder-BoAsK_FL.js.map} +1 -1
  331. package/ccw/frontend/dist/assets/{gauge-kazFexTr.js → gauge-DCSxJIS4.js} +2 -2
  332. package/ccw/frontend/dist/assets/{gauge-kazFexTr.js.map → gauge-DCSxJIS4.js.map} +1 -1
  333. package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js → globe-CHS3prza.js} +2 -2
  334. package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js.map → globe-CHS3prza.js.map} +1 -1
  335. package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js → grid-3x3-D7K35U7S.js} +2 -2
  336. package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js.map → grid-3x3-D7K35U7S.js.map} +1 -1
  337. package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js → hard-drive-eq9xE07G.js} +2 -2
  338. package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js.map → hard-drive-eq9xE07G.js.map} +1 -1
  339. package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js → hash-C1DMpBua.js} +2 -2
  340. package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js.map → hash-C1DMpBua.js.map} +1 -1
  341. package/ccw/frontend/dist/assets/{history-ujQnmMC9.js → history-Di5SBCY-.js} +2 -2
  342. package/ccw/frontend/dist/assets/{history-ujQnmMC9.js.map → history-Di5SBCY-.js.map} +1 -1
  343. package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js → index--_R7COnA.js} +2 -2
  344. package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js.map → index--_R7COnA.js.map} +1 -1
  345. package/ccw/frontend/dist/assets/{index-Dff4bg3u.js → index-BUol9HDD.js} +3 -3
  346. package/ccw/frontend/dist/assets/{index-Dff4bg3u.js.map → index-BUol9HDD.js.map} +1 -1
  347. package/ccw/frontend/dist/assets/{index-B76AGix5.js → index-CT9oykfw.js} +2 -2
  348. package/ccw/frontend/dist/assets/{index-B76AGix5.js.map → index-CT9oykfw.js.map} +1 -1
  349. package/ccw/frontend/dist/assets/{index-CxzXz6o1.js → index-Ddwvf87H.js} +2 -2
  350. package/ccw/frontend/dist/assets/{index-CxzXz6o1.js.map → index-Ddwvf87H.js.map} +1 -1
  351. package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js → layout-grid-LiX0qZbN.js} +2 -2
  352. package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js.map → layout-grid-LiX0qZbN.js.map} +1 -1
  353. package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js → lightbulb-CL3DVEwb.js} +2 -2
  354. package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js.map → lightbulb-CL3DVEwb.js.map} +1 -1
  355. package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js → link-2-CC5cFeq6.js} +2 -2
  356. package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js.map → link-2-CC5cFeq6.js.map} +1 -1
  357. package/ccw/frontend/dist/assets/{link-5yXdZBch.js → link-ngFQ9bs0.js} +2 -2
  358. package/ccw/frontend/dist/assets/{link-5yXdZBch.js.map → link-ngFQ9bs0.js.map} +1 -1
  359. package/ccw/frontend/dist/assets/{list-9lHhC_U_.js → list-BEU6I0KK.js} +2 -2
  360. package/ccw/frontend/dist/assets/{list-9lHhC_U_.js.map → list-BEU6I0KK.js.map} +1 -1
  361. package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js → map-pin-BWZdLA6y.js} +2 -2
  362. package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js.map → map-pin-BWZdLA6y.js.map} +1 -1
  363. package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js → messages-square-K6_Chm7n.js} +2 -2
  364. package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js.map → messages-square-K6_Chm7n.js.map} +1 -1
  365. package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js → minimize-2-CWkphauf.js} +2 -2
  366. package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js.map → minimize-2-CWkphauf.js.map} +1 -1
  367. package/ccw/frontend/dist/assets/{package-BjOw1ldU.js → package-DrNgkamn.js} +2 -2
  368. package/ccw/frontend/dist/assets/{package-BjOw1ldU.js.map → package-DrNgkamn.js.map} +1 -1
  369. package/ccw/frontend/dist/assets/{plug-9dAARpE1.js → plug-CMo3sw5_.js} +2 -2
  370. package/ccw/frontend/dist/assets/{plug-9dAARpE1.js.map → plug-CMo3sw5_.js.map} +1 -1
  371. package/ccw/frontend/dist/assets/{power-K2S39x7f.js → power-DppNTW5e.js} +2 -2
  372. package/ccw/frontend/dist/assets/{power-K2S39x7f.js.map → power-DppNTW5e.js.map} +1 -1
  373. package/ccw/frontend/dist/assets/{save-D9-CoT3x.js → save-CD8aPMbZ.js} +2 -2
  374. package/ccw/frontend/dist/assets/{save-D9-CoT3x.js.map → save-CD8aPMbZ.js.map} +1 -1
  375. package/ccw/frontend/dist/assets/{send-Bunw9NtC.js → send-B4z90fQD.js} +2 -2
  376. package/ccw/frontend/dist/assets/{send-Bunw9NtC.js.map → send-B4z90fQD.js.map} +1 -1
  377. package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js → settings-2-CAKRU_QC.js} +2 -2
  378. package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js.map → settings-2-CAKRU_QC.js.map} +1 -1
  379. package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js → square-check-big-KhI3HrzX.js} +2 -2
  380. package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js.map → square-check-big-KhI3HrzX.js.map} +1 -1
  381. package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js → square-pen-BtdGIpuq.js} +2 -2
  382. package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js.map → square-pen-BtdGIpuq.js.map} +1 -1
  383. package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js → star-ZoBUkXoD.js} +2 -2
  384. package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js.map → star-ZoBUkXoD.js.map} +1 -1
  385. package/ccw/frontend/dist/assets/{style-BbREPmRj.js → style-CltxQP-P.js} +2 -2
  386. package/ccw/frontend/dist/assets/{style-BbREPmRj.js.map → style-CltxQP-P.js.map} +1 -1
  387. package/ccw/frontend/dist/assets/{target-CElrCVhR.js → target-C32OUSGf.js} +2 -2
  388. package/ccw/frontend/dist/assets/{target-CElrCVhR.js.map → target-C32OUSGf.js.map} +1 -1
  389. package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js → test-tube-0IxoyAVZ.js} +2 -2
  390. package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js.map → test-tube-0IxoyAVZ.js.map} +1 -1
  391. package/ccw/frontend/dist/assets/{upload-BD1F07wG.js → upload-4eKCkyBn.js} +2 -2
  392. package/ccw/frontend/dist/assets/{upload-BD1F07wG.js.map → upload-4eKCkyBn.js.map} +1 -1
  393. package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js → useApiSettings-zLTUWqhi.js} +2 -2
  394. package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js.map → useApiSettings-zLTUWqhi.js.map} +1 -1
  395. package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js → useCli-BtN2vpOX.js} +2 -2
  396. package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js.map → useCli-BtN2vpOX.js.map} +1 -1
  397. package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js → useCommands-_spj49qL.js} +2 -2
  398. package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js.map → useCommands-_spj49qL.js.map} +1 -1
  399. package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js → useDebounce-Bm9KFZvd.js} +2 -2
  400. package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js.map → useDebounce-Bm9KFZvd.js.map} +1 -1
  401. package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js → useFileExplorer-DOmpm6v9.js} +2 -2
  402. package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js.map → useFileExplorer-DOmpm6v9.js.map} +1 -1
  403. package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js → useLocale-D2rj4rea.js} +2 -2
  404. package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js.map → useLocale-D2rj4rea.js.map} +1 -1
  405. package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js → useSkills-OskEpomF.js} +3 -3
  406. package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js.map → useSkills-OskEpomF.js.map} +1 -1
  407. package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js → useSystemSettings-BjMgsNSF.js} +2 -2
  408. package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js.map → useSystemSettings-BjMgsNSF.js.map} +1 -1
  409. package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js → wand-sparkles-CLhyYWa7.js} +2 -2
  410. package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js.map → wand-sparkles-CLhyYWa7.js.map} +1 -1
  411. package/ccw/frontend/dist/index.html +1 -1
  412. package/package.json +105 -105
  413. package/ccw/frontend/dist/assets/SettingsPage-BPDbXPSM.js +0 -150
  414. package/ccw/frontend/dist/assets/SettingsPage-BPDbXPSM.js.map +0 -1
  415. package/ccw/frontend/dist/assets/SkillsManagerPage-D3LzbpJY.js +0 -7
  416. package/ccw/frontend/dist/assets/SkillsManagerPage-D3LzbpJY.js.map +0 -1
@@ -0,0 +1,362 @@
1
+ # Interaction Pattern Catalog
2
+
3
+ Reference patterns for common interactive components. Each pattern defines the core interaction model, browser APIs, state machine, animation approach, and accessibility requirements.
4
+
5
+ ---
6
+
7
+ ## Glass Terminal Pattern
8
+
9
+ Split-view layout with frosted glass effect, tab navigation, and command input simulation.
10
+
11
+ **Core Interaction**:
12
+ - Tab-based view switching (2-4 panels)
13
+ - Command input field with syntax-highlighted output
14
+ - Frosted glass background via `backdrop-filter: blur()`
15
+ - Resize-aware layout via ResizeObserver
16
+
17
+ **State Machine**:
18
+ ```
19
+ [idle] --(tab-click)--> [switching]
20
+ [switching] --(transition-end)--> [idle]
21
+ [idle] --(input-focus)--> [input-active]
22
+ [input-active] --(Enter)--> [processing]
23
+ [processing] --(output-ready)--> [idle]
24
+ [input-active] --(Escape)--> [idle]
25
+ ```
26
+
27
+ **Browser APIs**: ResizeObserver, CSS backdrop-filter, CSS custom properties
28
+
29
+ **Animation**:
30
+ - Tab switch: opacity crossfade (200ms, ease-out), GPU-only
31
+ - Output appear: translateY(10px)->0 + opacity (300ms, ease-out)
32
+ - Cursor blink: CSS animation (1s steps(2))
33
+
34
+ **CSS Key Properties**:
35
+ ```css
36
+ .glass-terminal {
37
+ backdrop-filter: blur(12px) saturate(180%);
38
+ -webkit-backdrop-filter: blur(12px) saturate(180%);
39
+ background: rgba(255, 255, 255, 0.1);
40
+ border: 1px solid rgba(255, 255, 255, 0.2);
41
+ }
42
+ ```
43
+
44
+ **Accessibility**:
45
+ - role="tablist" + role="tab" + role="tabpanel"
46
+ - aria-selected on active tab
47
+ - Arrow keys navigate tabs, Enter/Space activates
48
+ - Input field: role="textbox", aria-label
49
+ - Output: aria-live="polite" for new content
50
+
51
+ ---
52
+
53
+ ## Split Compare Pattern
54
+
55
+ Before/after overlay with draggable divider for visual comparison.
56
+
57
+ **Core Interaction**:
58
+ - Draggable vertical divider splits two overlapping images/views
59
+ - Pointer events for drag with Lerp interpolation (speed: 0.15)
60
+ - clip-path animation reveals before/after content
61
+ - Touch-friendly with full pointer event support
62
+
63
+ **State Machine**:
64
+ ```
65
+ [idle] --(pointerenter)--> [hover]
66
+ [hover] --(pointerdown on divider)--> [dragging]
67
+ [hover] --(pointerleave)--> [idle]
68
+ [dragging] --(pointermove)--> [dragging] (update position)
69
+ [dragging] --(pointerup)--> [settling]
70
+ [settling] --(lerp-complete)--> [idle]
71
+ [any] --(focus + ArrowLeft/Right)--> [keyboard-adjusting]
72
+ [keyboard-adjusting] --(keyup)--> [idle]
73
+ ```
74
+
75
+ **Browser APIs**: Pointer Events, CSS clip-path, ResizeObserver, requestAnimationFrame
76
+
77
+ **Animation**:
78
+ - Divider follow: Lerp `current += (target - current) * 0.15` per frame
79
+ - Clip-path update: `clip-path: inset(0 0 0 ${position}%)` on after layer
80
+ - Settle: natural Lerp deceleration to final position
81
+ - Hover hint: divider scale(1.1) + glow (200ms, ease-out)
82
+
83
+ **CSS Key Properties**:
84
+ ```css
85
+ .split-compare__after {
86
+ clip-path: inset(0 0 0 var(--split-position, 50%));
87
+ transition: none; /* JS-driven via lerp */
88
+ }
89
+ .split-compare__divider {
90
+ cursor: col-resize;
91
+ touch-action: none; /* prevent scroll during drag */
92
+ }
93
+ ```
94
+
95
+ **Keyboard**:
96
+ - Tab to divider element (tabindex="0")
97
+ - ArrowLeft/ArrowRight: move divider 2% per keypress
98
+ - Home/End: move to 0%/100%
99
+
100
+ **Accessibility**:
101
+ - role="slider", aria-valuenow, aria-valuemin="0", aria-valuemax="100"
102
+ - aria-label="Image comparison slider"
103
+ - Keyboard step: 2%, large step (PageUp/PageDown): 10%
104
+
105
+ ---
106
+
107
+ ## Scroll-Snap Gallery Pattern
108
+
109
+ Horizontal scroll with CSS scroll-snap, navigation controls, and active item detection.
110
+
111
+ **Core Interaction**:
112
+ - CSS scroll-snap-type: x mandatory on container
113
+ - scroll-snap-align: start on children
114
+ - Touch-friendly: native momentum scrolling
115
+ - Navigation dots/arrows update with IntersectionObserver
116
+ - Keyboard: ArrowLeft/ArrowRight navigate between items
117
+
118
+ **State Machine**:
119
+ ```
120
+ [idle] --(scroll-start)--> [scrolling]
121
+ [scrolling] --(scroll-end)--> [snapped]
122
+ [snapped] --(intersection-change)--> [idle] (update active)
123
+ [idle] --(arrow-click)--> [navigating]
124
+ [navigating] --(scrollTo-complete)--> [idle]
125
+ [idle] --(keyboard-arrow)--> [navigating]
126
+ ```
127
+
128
+ **Browser APIs**: CSS scroll-snap, IntersectionObserver, Element.scrollTo(), Pointer Events
129
+
130
+ **Animation**:
131
+ - Scroll: native CSS scroll-snap (browser-handled, smooth)
132
+ - Active dot: scale(1) -> scale(1.3) + opacity change (200ms, ease-out)
133
+ - Item entry: opacity 0->1 as intersection threshold crossed (CSS transition)
134
+ - Arrow hover: translateX(+-2px) (150ms, ease-out)
135
+
136
+ **CSS Key Properties**:
137
+ ```css
138
+ .gallery__track {
139
+ display: flex;
140
+ overflow-x: auto;
141
+ scroll-snap-type: x mandatory;
142
+ scroll-behavior: smooth;
143
+ -webkit-overflow-scrolling: touch;
144
+ scrollbar-width: none; /* Firefox */
145
+ }
146
+ .gallery__track::-webkit-scrollbar { display: none; }
147
+ .gallery__item {
148
+ scroll-snap-align: start;
149
+ flex: 0 0 100%; /* or 80% for peek */
150
+ }
151
+ ```
152
+
153
+ **IntersectionObserver Config**:
154
+ ```javascript
155
+ new IntersectionObserver(entries => {
156
+ entries.forEach(entry => {
157
+ if (entry.isIntersecting) updateActiveItem(entry.target);
158
+ });
159
+ }, { root: trackElement, threshold: 0.5 });
160
+ ```
161
+
162
+ **Accessibility**:
163
+ - role="region", aria-label="Image gallery"
164
+ - role="group" on each item, aria-roledescription="slide"
165
+ - aria-label="Slide N of M" on each item
166
+ - Navigation: role="tablist" on dots, role="tab" on each dot
167
+ - ArrowLeft/ArrowRight between items, Home/End to first/last
168
+
169
+ ---
170
+
171
+ ## Scroll Reveal Pattern
172
+
173
+ Elements animate into view as user scrolls, using IntersectionObserver with staggered delays.
174
+
175
+ **Core Interaction**:
176
+ - IntersectionObserver with threshold: 0.1 triggers entry animation
177
+ - data-reveal attribute marks revealable elements
178
+ - Staggered delay: index * 80ms for grouped items
179
+ - GPU-only: translateY(20px)->0 + opacity 0->1
180
+ - One-shot: element stays visible after reveal
181
+
182
+ **State Machine**:
183
+ ```
184
+ [hidden] --(intersection: entering)--> [revealing]
185
+ [revealing] --(animation-end)--> [visible]
186
+ [visible] -- (terminal state, no transition out)
187
+ ```
188
+
189
+ **Browser APIs**: IntersectionObserver, CSS transitions, requestAnimationFrame
190
+
191
+ **Animation**:
192
+ - Entry: translateY(20px) -> translateY(0) + opacity 0->1
193
+ - Duration: 400ms
194
+ - Easing: cubic-bezier(0.16, 1, 0.3, 1)
195
+ - Stagger: CSS custom property `--reveal-delay: calc(var(--reveal-index) * 80ms)`
196
+ - Reduced motion: opacity-only crossfade (200ms)
197
+
198
+ **CSS Key Properties**:
199
+ ```css
200
+ [data-reveal] {
201
+ opacity: 0;
202
+ transform: translateY(20px);
203
+ transition: opacity 400ms cubic-bezier(0.16, 1, 0.3, 1),
204
+ transform 400ms cubic-bezier(0.16, 1, 0.3, 1);
205
+ transition-delay: var(--reveal-delay, 0ms);
206
+ }
207
+ [data-reveal="visible"] {
208
+ opacity: 1;
209
+ transform: translateY(0);
210
+ }
211
+ @media (prefers-reduced-motion: reduce) {
212
+ [data-reveal] {
213
+ transform: none;
214
+ transition: opacity 200ms ease;
215
+ }
216
+ }
217
+ ```
218
+
219
+ **IntersectionObserver Config**:
220
+ ```javascript
221
+ new IntersectionObserver(entries => {
222
+ entries.forEach(entry => {
223
+ if (entry.isIntersecting) {
224
+ entry.target.dataset.reveal = 'visible';
225
+ observer.unobserve(entry.target); // one-shot
226
+ }
227
+ });
228
+ }, { threshold: 0.1 });
229
+ ```
230
+
231
+ **Accessibility**:
232
+ - Content must be accessible in DOM before reveal (no display:none)
233
+ - Use opacity + transform only (content readable by screen readers at all times)
234
+ - aria-hidden NOT used (content is always in accessibility tree)
235
+ - Stagger delay < 500ms total to avoid perception of broken page
236
+
237
+ ---
238
+
239
+ ## Lens/Overlay Pattern
240
+
241
+ Magnification overlay that follows pointer position over an image or content area.
242
+
243
+ **Core Interaction**:
244
+ - Circular/rectangular lens follows pointer over source content
245
+ - Magnified view rendered via CSS transform: scale() on background
246
+ - Lens positioned via transform: translate() (GPU-only)
247
+ - Toggle on click/tap, follow on pointermove
248
+
249
+ **State Machine**:
250
+ ```
251
+ [inactive] --(click/tap on source)--> [active]
252
+ [active] --(pointermove)--> [active] (update lens position)
253
+ [active] --(click/tap)--> [inactive]
254
+ [active] --(pointerleave)--> [inactive]
255
+ [active] --(Escape)--> [inactive]
256
+ [inactive] --(Enter/Space on source)--> [active-keyboard]
257
+ [active-keyboard] --(Arrow keys)--> [active-keyboard] (move lens)
258
+ [active-keyboard] --(Escape)--> [inactive]
259
+ ```
260
+
261
+ **Browser APIs**: Pointer Events, CSS transform, CSS clip-path/border-radius, requestAnimationFrame
262
+
263
+ **Animation**:
264
+ - Lens appear: opacity 0->1 + scale(0.8)->scale(1) (200ms, ease-out)
265
+ - Lens follow: Lerp position tracking (speed: 0.2)
266
+ - Lens dismiss: opacity 1->0 + scale(1)->scale(0.9) (150ms, ease-in)
267
+
268
+ **CSS Key Properties**:
269
+ ```css
270
+ .lens__overlay {
271
+ position: absolute;
272
+ width: 150px;
273
+ height: 150px;
274
+ border-radius: 50%;
275
+ overflow: hidden;
276
+ pointer-events: none;
277
+ transform: translate(var(--lens-x), var(--lens-y));
278
+ will-change: transform;
279
+ }
280
+ .lens__magnified {
281
+ transform: scale(var(--lens-zoom, 2));
282
+ transform-origin: var(--lens-origin-x) var(--lens-origin-y);
283
+ }
284
+ ```
285
+
286
+ **Accessibility**:
287
+ - Source: role="img" with descriptive aria-label
288
+ - Lens toggle: aria-expanded on source element
289
+ - Keyboard: Enter/Space to activate, Arrow keys to pan, Escape to dismiss
290
+ - Screen reader: aria-live="polite" announces zoom state changes
291
+ - Not essential content: decorative enhancement, base content always visible
292
+
293
+ ---
294
+
295
+ ## Lightbox Pattern
296
+
297
+ Full-viewport overlay for content viewing with background dim and entry animation.
298
+
299
+ **Core Interaction**:
300
+ - Click/tap thumbnail opens full-viewport overlay
301
+ - Background dim via backdrop-filter + background overlay
302
+ - Scale-up entry animation from thumbnail position
303
+ - Dismiss: click outside, Escape key, close button
304
+ - Focus trap: Tab cycles within lightbox
305
+ - Scroll lock on body while open
306
+
307
+ **State Machine**:
308
+ ```
309
+ [closed] --(click thumbnail)--> [opening]
310
+ [opening] --(animation-end)--> [open]
311
+ [open] --(click-outside / Escape / close-btn)--> [closing]
312
+ [closing] --(animation-end)--> [closed]
313
+ [open] --(ArrowLeft)--> [navigating-prev]
314
+ [open] --(ArrowRight)--> [navigating-next]
315
+ [navigating-*] --(content-loaded)--> [open]
316
+ ```
317
+
318
+ **Browser APIs**: CSS backdrop-filter, Focus trap (manual), CSS transitions, Pointer Events
319
+
320
+ **Animation**:
321
+ - Open: scale(0.85)->scale(1) + opacity 0->1 (300ms, cubic-bezier(0.16,1,0.3,1))
322
+ - Close: scale(1)->scale(0.95) + opacity 1->0 (200ms, ease-in)
323
+ - Backdrop: opacity 0->1 (250ms, ease-out)
324
+ - Navigation: translateX crossfade between items (250ms)
325
+
326
+ **CSS Key Properties**:
327
+ ```css
328
+ .lightbox__backdrop {
329
+ position: fixed;
330
+ inset: 0;
331
+ background: rgba(0, 0, 0, 0.8);
332
+ backdrop-filter: blur(4px);
333
+ z-index: 1000;
334
+ }
335
+ .lightbox__content {
336
+ transform: scale(var(--lb-scale, 0.85));
337
+ opacity: var(--lb-opacity, 0);
338
+ transition: transform 300ms cubic-bezier(0.16, 1, 0.3, 1),
339
+ opacity 300ms cubic-bezier(0.16, 1, 0.3, 1);
340
+ }
341
+ .lightbox--open .lightbox__content {
342
+ --lb-scale: 1;
343
+ --lb-opacity: 1;
344
+ }
345
+ ```
346
+
347
+ **Focus Trap Implementation**:
348
+ ```javascript
349
+ // On open: store trigger, move focus to first focusable in lightbox
350
+ // On Tab: cycle within lightbox (first <-> last focusable)
351
+ // On close: restore focus to original trigger element
352
+ // Prevent body scroll: document.body.style.overflow = 'hidden'
353
+ ```
354
+
355
+ **Accessibility**:
356
+ - role="dialog", aria-modal="true", aria-label="Image viewer"
357
+ - Close button: aria-label="Close lightbox"
358
+ - Focus trap: Tab cycles within dialog
359
+ - Escape dismisses
360
+ - ArrowLeft/ArrowRight for gallery navigation
361
+ - aria-live="polite" announces current item "Image N of M"
362
+ - Scroll lock: prevent background scroll while open
@@ -0,0 +1,85 @@
1
+ # Pipeline Definitions
2
+
3
+ Interactive craft pipeline modes and task registry.
4
+
5
+ ## Pipeline Modes
6
+
7
+ | Mode | Description | Task Count |
8
+ |------|-------------|------------|
9
+ | single | Single component: research -> interaction design -> build -> a11y test | 4 tasks |
10
+ | gallery | Gallery: base component + scroll container, two build phases | 6 tasks |
11
+ | page | Full page: parallel component builds after single interaction design | 3 + N tasks |
12
+
13
+ ## Single Pipeline Task Registry
14
+
15
+ | Task ID | Role | deps | Description |
16
+ |---------|------|------|-------------|
17
+ | RESEARCH-001 | researcher | [] | Interaction inventory, browser API audit, pattern reference |
18
+ | INTERACT-001 | interaction-designer | [RESEARCH-001] | State machine, event flow, gesture spec, animation choreography |
19
+ | BUILD-001 | builder | [INTERACT-001] | Vanilla JS + CSS component: ES module, GPU animations, touch-aware |
20
+ | A11Y-001 | a11y-tester | [BUILD-001] | Keyboard, screen reader, reduced motion, focus, contrast audit |
21
+
22
+ ## Gallery Pipeline Task Registry
23
+
24
+ | Task ID | Role | deps | Description |
25
+ |---------|------|------|-------------|
26
+ | RESEARCH-001 | researcher | [] | Interaction patterns for base component + gallery container |
27
+ | INTERACT-001 | interaction-designer | [RESEARCH-001] | Base component interaction blueprint |
28
+ | BUILD-001 | builder | [INTERACT-001] | Base component implementation |
29
+ | INTERACT-002 | interaction-designer | [BUILD-001] | Gallery/scroll-snap container blueprint |
30
+ | BUILD-002 | builder | [INTERACT-002] | Gallery container + navigation implementation |
31
+ | A11Y-001 | a11y-tester | [BUILD-002] | Full gallery accessibility audit |
32
+
33
+ ## Page Pipeline Task Registry
34
+
35
+ | Task ID | Role | deps | Description |
36
+ |---------|------|------|-------------|
37
+ | RESEARCH-001 | researcher | [] | Interaction patterns for all page sections |
38
+ | INTERACT-001 | interaction-designer | [RESEARCH-001] | Blueprints for all interactive sections |
39
+ | BUILD-001 | builder | [INTERACT-001] | Section 1 component |
40
+ | BUILD-002 | builder | [INTERACT-001] | Section 2 component |
41
+ | ... | builder | [INTERACT-001] | Additional sections (parallel) |
42
+ | BUILD-00N | builder | [INTERACT-001] | Section N component |
43
+ | A11Y-001 | a11y-tester | [BUILD-001..N] | Full page accessibility audit |
44
+
45
+ ## Quality Gate (A11y Checkpoint)
46
+
47
+ | Checkpoint | Task | Condition | Action |
48
+ |------------|------|-----------|--------|
49
+ | A11Y Gate | A11Y-001 completes | 0 critical, 0 high | Pipeline complete |
50
+ | A11Y GC Loop | A11Y-* completes | Critical or high issues | Create BUILD-fix task, new A11Y task (max 2 rounds) |
51
+
52
+ ## GC Loop Behavior
53
+
54
+ | Signal | Condition | Action |
55
+ |--------|-----------|--------|
56
+ | a11y_passed | 0 critical, 0 high | GC converged -> pipeline complete |
57
+ | a11y_result | 0 critical, high > 0 | gc_rounds < max -> create BUILD-fix task |
58
+ | fix_required | critical > 0 | gc_rounds < max -> create BUILD-fix task (CRITICAL) |
59
+ | Any | gc_rounds >= max | Escalate to user: accept / try one more / terminate |
60
+
61
+ ## Parallel Spawn Rules
62
+
63
+ | Mode | After | Spawn Behavior |
64
+ |------|-------|----------------|
65
+ | single | Sequential | One task at a time |
66
+ | gallery | Sequential | One task at a time |
67
+ | page | INTERACT-001 | Spawn BUILD-001..N in parallel |
68
+ | page | All BUILD complete | Spawn A11Y-001 |
69
+
70
+ ## Collaboration Patterns
71
+
72
+ | Pattern | Roles | Description |
73
+ |---------|-------|-------------|
74
+ | CP-1 Linear Pipeline | All | Base sequential flow for single/gallery modes |
75
+ | CP-2 Review-Fix | builder <-> a11y-tester | GC loop with max 2 rounds |
76
+ | CP-3 Parallel Fan-out | builder (multiple) | Page mode: multiple BUILD tasks in parallel |
77
+
78
+ ## Output Artifacts
79
+
80
+ | Task | Output Path |
81
+ |------|-------------|
82
+ | RESEARCH-001 | <session>/research/*.json |
83
+ | INTERACT-* | <session>/interaction/blueprints/*.md |
84
+ | BUILD-* | <session>/build/components/*.js + *.css |
85
+ | A11Y-* | <session>/a11y/a11y-audit-*.md |
@@ -0,0 +1,105 @@
1
+ {
2
+ "team_name": "interactive-craft",
3
+ "team_display_name": "Interactive Craft",
4
+ "description": "Interactive component team with vanilla JS + CSS. Research -> interaction design -> build -> a11y test.",
5
+ "version": "1.0.0",
6
+
7
+ "roles": {
8
+ "coordinator": {
9
+ "task_prefix": null,
10
+ "responsibility": "Scope assessment, pipeline orchestration, GC loop control between builder and a11y-tester",
11
+ "message_types": ["task_unblocked", "a11y_checkpoint", "fix_required", "error", "shutdown"]
12
+ },
13
+ "researcher": {
14
+ "task_prefix": "RESEARCH",
15
+ "responsibility": "Interaction pattern analysis, browser API audit, reference pattern collection",
16
+ "message_types": ["research_ready", "research_progress", "error"]
17
+ },
18
+ "interaction-designer": {
19
+ "task_prefix": "INTERACT",
20
+ "responsibility": "State machine design, event flow mapping, gesture specification, animation choreography",
21
+ "message_types": ["blueprint_ready", "blueprint_revision", "blueprint_progress", "error"]
22
+ },
23
+ "builder": {
24
+ "task_prefix": "BUILD",
25
+ "inner_loop": true,
26
+ "responsibility": "Vanilla JS + CSS component implementation, progressive enhancement, GPU-only animations",
27
+ "message_types": ["build_ready", "build_revision", "build_progress", "error"]
28
+ },
29
+ "a11y-tester": {
30
+ "task_prefix": "A11Y",
31
+ "responsibility": "Keyboard navigation, screen reader, reduced motion, focus management, contrast testing",
32
+ "message_types": ["a11y_passed", "a11y_result", "fix_required", "error"]
33
+ }
34
+ },
35
+
36
+ "pipelines": {
37
+ "single": {
38
+ "description": "Single component: research -> interaction design -> build -> a11y test",
39
+ "task_chain": ["RESEARCH-001", "INTERACT-001", "BUILD-001", "A11Y-001"],
40
+ "complexity": "low"
41
+ },
42
+ "gallery": {
43
+ "description": "Gallery with base component + scroll container: two build phases",
44
+ "task_chain": [
45
+ "RESEARCH-001",
46
+ "INTERACT-001", "BUILD-001",
47
+ "INTERACT-002", "BUILD-002",
48
+ "A11Y-001"
49
+ ],
50
+ "complexity": "medium"
51
+ },
52
+ "page": {
53
+ "description": "Full interactive page with parallel component builds",
54
+ "task_chain": [
55
+ "RESEARCH-001",
56
+ "INTERACT-001",
57
+ "BUILD-001..N (parallel)",
58
+ "A11Y-001"
59
+ ],
60
+ "parallel_stage": "BUILD-001..N",
61
+ "complexity": "high"
62
+ }
63
+ },
64
+
65
+ "innovation_patterns": {
66
+ "generator_critic": {
67
+ "generator": "builder",
68
+ "critic": "a11y-tester",
69
+ "max_rounds": 2,
70
+ "convergence": "a11y.critical_count === 0 && a11y.high_count === 0",
71
+ "escalation": "Coordinator intervenes after max rounds"
72
+ },
73
+ "shared_memory": {
74
+ "file": "shared-memory.json",
75
+ "fields": {
76
+ "researcher": ["interaction_inventory", "browser_apis"],
77
+ "interaction-designer": ["state_machines", "event_flows"],
78
+ "builder": ["component_registry", "implementation_decisions"],
79
+ "a11y-tester": ["audit_history"]
80
+ }
81
+ },
82
+ "dynamic_pipeline": {
83
+ "criteria": {
84
+ "single": "scope.component_count <= 1",
85
+ "gallery": "scope.has_gallery || scope.has_scroll_collection",
86
+ "page": "scope.is_full_page || scope.section_count > 2"
87
+ }
88
+ },
89
+ "parallel_fanout": {
90
+ "pattern": "CP-3",
91
+ "description": "Multiple BUILD tasks spawned in parallel after single INTERACT blueprint",
92
+ "trigger": "page mode after INTERACT-001 completes",
93
+ "fallback": "If parallel fails, coordinator falls back to sequential execution"
94
+ }
95
+ },
96
+
97
+ "session_dirs": {
98
+ "base": ".workflow/.team/IC-{slug}-{YYYY-MM-DD}/",
99
+ "research": "research/",
100
+ "interaction": "interaction/blueprints/",
101
+ "build": "build/components/",
102
+ "a11y": "a11y/",
103
+ "messages": ".workflow/.team-msg/{team-name}/"
104
+ }
105
+ }
@@ -0,0 +1,83 @@
1
+ # Vanilla Constraints
2
+
3
+ Zero-dependency rules for all interactive components built by this team. These constraints are non-negotiable and apply to every BUILD task output.
4
+
5
+ ## Dependency Rules
6
+
7
+ | Rule | Requirement |
8
+ |------|-------------|
9
+ | No npm packages | Zero `import` from node_modules or CDN URLs |
10
+ | No build tools required | Components run directly via `<script type="module">` |
11
+ | No framework dependency | No React, Vue, Svelte, Angular, jQuery, etc. |
12
+ | No CSS preprocessor | No Sass, Less, PostCSS, Tailwind -- pure CSS only |
13
+ | No bundler required | No webpack, Vite, Rollup, esbuild in critical path |
14
+
15
+ ## JavaScript Rules
16
+
17
+ | Rule | Requirement |
18
+ |------|-------------|
19
+ | ES modules only | `export class`, `export function`, `import` syntax |
20
+ | Class-based components | Private fields (#), constructor(element, options) |
21
+ | No inline styles from JS | Set CSS custom properties or toggle CSS classes |
22
+ | No document.write | Use DOM APIs (createElement, append, etc.) |
23
+ | No eval or innerHTML | Use textContent or DOM construction |
24
+ | requestAnimationFrame | All animation loops use rAF, not setInterval |
25
+ | Pointer Events primary | Use pointer events; touch events as fallback only |
26
+ | Cleanup required | destroy() method disconnects all observers/listeners |
27
+ | Auto-init pattern | `document.querySelectorAll('[data-component]')` on load |
28
+
29
+ ## CSS Rules
30
+
31
+ | Rule | Requirement |
32
+ |------|-------------|
33
+ | Custom properties | All configurable values as CSS custom properties |
34
+ | No inline styles | JS sets `--custom-prop` values, not style.left/top |
35
+ | State via data attributes | `[data-state="active"]`, not inline style changes |
36
+ | GPU-only animations | `transform` and `opacity` ONLY in transitions/animations |
37
+ | No layout animations | Never animate `width`, `height`, `top`, `left`, `margin`, `padding` |
38
+ | will-change on animated | Hint browser for animated elements |
39
+ | Reduced motion | `@media (prefers-reduced-motion: reduce)` with instant fallback |
40
+ | focus-visible | `:focus-visible` for keyboard-only focus indicators |
41
+ | Responsive | Min touch target 44x44px on mobile, use @media breakpoints |
42
+
43
+ ## Progressive Enhancement
44
+
45
+ | Rule | Requirement |
46
+ |------|-------------|
47
+ | Content without JS | Base content visible and readable without JavaScript |
48
+ | CSS-only fallback | Essential layout works with CSS alone |
49
+ | No-JS class | Optional `[data-js-enabled]` class for JS-enhanced styles |
50
+ | Semantic HTML base | Use appropriate elements (button, a, nav, dialog) |
51
+
52
+ ## Performance Budget
53
+
54
+ | Metric | Budget |
55
+ |--------|--------|
56
+ | Frame time | < 5ms per frame (leaves room for browser work in 16ms budget) |
57
+ | Interaction response | < 50ms from input to visual feedback |
58
+ | Animation jank | 0 frames dropped at 60fps for GPU-composited animations |
59
+ | Observer callbacks | < 1ms per IntersectionObserver/ResizeObserver callback |
60
+ | Component init | < 100ms from constructor to interactive |
61
+ | Memory | No detached DOM nodes after destroy() |
62
+ | Listeners | All removed in destroy(), no orphaned listeners |
63
+
64
+ ## Forbidden Patterns
65
+
66
+ | Pattern | Why |
67
+ |---------|-----|
68
+ | `element.style.left = ...` | Forces layout recalc, not GPU composited |
69
+ | `element.offsetWidth` in animation loop | Forces synchronous layout (reflow) |
70
+ | `setInterval` for animation | Not synced to display refresh rate |
71
+ | `setTimeout` for animation | Not synced to display refresh rate |
72
+ | `innerHTML = userContent` | XSS vector |
73
+ | Passive: false on scroll/touch without need | Blocks scrolling performance |
74
+ | `!important` in component CSS | Breaks cascade, unmaintainable |
75
+ | Global CSS selectors (tag-only) | Leaks styles outside component scope |
76
+
77
+ ## File Output Convention
78
+
79
+ | File | Purpose | Location |
80
+ |------|---------|----------|
81
+ | `{name}.js` | ES module component class | `<session>/build/components/` |
82
+ | `{name}.css` | Component styles with custom properties | `<session>/build/components/` |
83
+ | `demo.html` | Optional: standalone demo page | `<session>/build/components/` |