@su-record/vibe 2.9.25 → 2.9.32

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 (527) hide show
  1. package/.env.example +37 -37
  2. package/CLAUDE.md +109 -106
  3. package/LICENSE +21 -21
  4. package/README.en.md +220 -220
  5. package/README.md +171 -171
  6. package/agents/architect-low.md +41 -41
  7. package/agents/architect-medium.md +59 -59
  8. package/agents/architect.md +80 -80
  9. package/agents/build-error-resolver.md +115 -115
  10. package/agents/compounder.md +261 -261
  11. package/agents/diagrammer.md +178 -178
  12. package/agents/docs/api-documenter.md +99 -99
  13. package/agents/docs/changelog-writer.md +93 -93
  14. package/agents/e2e-tester.md +294 -294
  15. package/agents/event/event-comms.md +78 -78
  16. package/agents/event/event-content.md +68 -68
  17. package/agents/event/event-image.md +95 -95
  18. package/agents/event/event-ops.md +84 -84
  19. package/agents/event/event-scheduler.md +69 -69
  20. package/agents/event/event-speaker.md +86 -86
  21. package/agents/explorer-low.md +42 -42
  22. package/agents/explorer-medium.md +59 -59
  23. package/agents/explorer.md +48 -48
  24. package/agents/implementer-low.md +43 -43
  25. package/agents/implementer-medium.md +52 -52
  26. package/agents/implementer.md +54 -54
  27. package/agents/junior-mentor.md +141 -141
  28. package/agents/planning/requirements-analyst.md +84 -84
  29. package/agents/planning/ux-advisor.md +83 -83
  30. package/agents/qa/acceptance-tester.md +86 -86
  31. package/agents/qa/edge-case-finder.md +93 -93
  32. package/agents/qa/qa-coordinator.md +131 -131
  33. package/agents/refactor-cleaner.md +143 -143
  34. package/agents/research/best-practices-agent.md +199 -199
  35. package/agents/research/codebase-patterns-agent.md +157 -157
  36. package/agents/research/framework-docs-agent.md +188 -188
  37. package/agents/research/security-advisory-agent.md +213 -213
  38. package/agents/review/architecture-reviewer.md +107 -107
  39. package/agents/review/complexity-reviewer.md +116 -116
  40. package/agents/review/data-integrity-reviewer.md +88 -88
  41. package/agents/review/git-history-reviewer.md +103 -103
  42. package/agents/review/performance-reviewer.md +86 -86
  43. package/agents/review/python-reviewer.md +150 -150
  44. package/agents/review/rails-reviewer.md +139 -139
  45. package/agents/review/react-reviewer.md +144 -144
  46. package/agents/review/security-reviewer.md +80 -80
  47. package/agents/review/simplicity-reviewer.md +140 -140
  48. package/agents/review/test-coverage-reviewer.md +116 -116
  49. package/agents/review/typescript-reviewer.md +127 -127
  50. package/agents/searcher.md +54 -54
  51. package/agents/simplifier.md +120 -120
  52. package/agents/teams/debug-team.md +70 -70
  53. package/agents/teams/dev-team.md +88 -88
  54. package/agents/teams/docs-team.md +80 -80
  55. package/agents/teams/figma/figma-analyst.md +52 -52
  56. package/agents/teams/figma/figma-architect.md +112 -112
  57. package/agents/teams/figma/figma-auditor.md +82 -82
  58. package/agents/teams/figma/figma-builder.md +100 -100
  59. package/agents/teams/figma-team.md +85 -85
  60. package/agents/teams/fullstack-team.md +83 -83
  61. package/agents/teams/lite-team.md +69 -69
  62. package/agents/teams/migration-team.md +78 -78
  63. package/agents/teams/refactor-team.md +94 -94
  64. package/agents/teams/research-team.md +86 -86
  65. package/agents/teams/review-debate-team.md +125 -125
  66. package/agents/teams/security-team.md +81 -81
  67. package/agents/tester.md +49 -49
  68. package/agents/ui/ui-a11y-auditor.md +93 -93
  69. package/agents/ui/ui-antipattern-detector.md +102 -102
  70. package/agents/ui/ui-dataviz-advisor.md +69 -69
  71. package/agents/ui/ui-design-system-gen.md +57 -57
  72. package/agents/ui/ui-industry-analyzer.md +49 -49
  73. package/agents/ui/ui-layout-architect.md +65 -65
  74. package/agents/ui/ui-stack-implementer.md +68 -68
  75. package/agents/ui/ux-compliance-reviewer.md +81 -81
  76. package/agents/ui-previewer.md +258 -258
  77. package/commands/vibe.analyze.md +533 -533
  78. package/commands/vibe.contract.md +105 -105
  79. package/commands/vibe.docs.md +33 -33
  80. package/commands/vibe.event.md +163 -163
  81. package/commands/vibe.figma.md +600 -584
  82. package/commands/vibe.harness.md +177 -177
  83. package/commands/vibe.regress.md +73 -73
  84. package/commands/vibe.review.md +624 -624
  85. package/commands/vibe.run.md +1946 -1940
  86. package/commands/vibe.scaffold.md +195 -195
  87. package/commands/vibe.spec.md +577 -577
  88. package/commands/vibe.test.md +49 -49
  89. package/commands/vibe.trace.md +276 -276
  90. package/commands/vibe.utils.md +413 -413
  91. package/commands/vibe.verify.md +572 -550
  92. package/dist/cli/auth.d.ts +7 -1
  93. package/dist/cli/auth.d.ts.map +1 -1
  94. package/dist/cli/auth.js +51 -11
  95. package/dist/cli/auth.js.map +1 -1
  96. package/dist/cli/collaborator.d.ts +5 -1
  97. package/dist/cli/collaborator.d.ts.map +1 -1
  98. package/dist/cli/collaborator.js +60 -55
  99. package/dist/cli/collaborator.js.map +1 -1
  100. package/dist/cli/commands/codex-proxy.js +15 -15
  101. package/dist/cli/commands/config.js +9 -9
  102. package/dist/cli/commands/evolution.js +12 -12
  103. package/dist/cli/commands/figma.js +20 -20
  104. package/dist/cli/commands/info.d.ts.map +1 -1
  105. package/dist/cli/commands/info.js +47 -63
  106. package/dist/cli/commands/info.js.map +1 -1
  107. package/dist/cli/commands/init.d.ts +13 -5
  108. package/dist/cli/commands/init.d.ts.map +1 -1
  109. package/dist/cli/commands/init.js +71 -35
  110. package/dist/cli/commands/init.js.map +1 -1
  111. package/dist/cli/commands/remove.d.ts.map +1 -1
  112. package/dist/cli/commands/remove.js +35 -22
  113. package/dist/cli/commands/remove.js.map +1 -1
  114. package/dist/cli/commands/sentinel.js +27 -27
  115. package/dist/cli/commands/skills.js +5 -5
  116. package/dist/cli/commands/slack.js +10 -10
  117. package/dist/cli/commands/stats.js +6 -6
  118. package/dist/cli/commands/telegram.js +12 -12
  119. package/dist/cli/commands/update.d.ts.map +1 -1
  120. package/dist/cli/commands/update.js +10 -6
  121. package/dist/cli/commands/update.js.map +1 -1
  122. package/dist/cli/detect.js +32 -32
  123. package/dist/cli/index.js +37 -35
  124. package/dist/cli/index.js.map +1 -1
  125. package/dist/cli/llm/claude-commands.js +16 -16
  126. package/dist/cli/llm/config.js +18 -18
  127. package/dist/cli/llm/gemini-commands.js +16 -16
  128. package/dist/cli/llm/gpt-commands.js +19 -19
  129. package/dist/cli/llm/help.js +21 -21
  130. package/dist/cli/postinstall/cursor-agents.js +32 -32
  131. package/dist/cli/postinstall/cursor-rules.js +83 -83
  132. package/dist/cli/postinstall/cursor-skills.js +743 -743
  133. package/dist/cli/postinstall/global-config.d.ts.map +1 -1
  134. package/dist/cli/postinstall/global-config.js +8 -4
  135. package/dist/cli/postinstall/global-config.js.map +1 -1
  136. package/dist/cli/setup/LegacyMigration.d.ts +14 -0
  137. package/dist/cli/setup/LegacyMigration.d.ts.map +1 -1
  138. package/dist/cli/setup/LegacyMigration.js +61 -0
  139. package/dist/cli/setup/LegacyMigration.js.map +1 -1
  140. package/dist/cli/setup/ProjectSetup.d.ts +9 -3
  141. package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
  142. package/dist/cli/setup/ProjectSetup.js +60 -36
  143. package/dist/cli/setup/ProjectSetup.js.map +1 -1
  144. package/dist/cli/setup/Provisioner.js +44 -44
  145. package/dist/cli/setup/Provisioner.js.map +1 -1
  146. package/dist/cli/setup.d.ts +1 -1
  147. package/dist/cli/setup.d.ts.map +1 -1
  148. package/dist/cli/setup.js +1 -1
  149. package/dist/cli/setup.js.map +1 -1
  150. package/dist/cli/utils/cli-detector.d.ts +9 -6
  151. package/dist/cli/utils/cli-detector.d.ts.map +1 -1
  152. package/dist/cli/utils/cli-detector.js +127 -8
  153. package/dist/cli/utils/cli-detector.js.map +1 -1
  154. package/dist/infra/lib/DeepInit.js +24 -24
  155. package/dist/infra/lib/IterationTracker.js +11 -11
  156. package/dist/infra/lib/PythonParser.js +108 -108
  157. package/dist/infra/lib/ReviewRace.js +96 -96
  158. package/dist/infra/lib/SkillFrontmatter.js +28 -28
  159. package/dist/infra/lib/SkillQualityGate.js +9 -9
  160. package/dist/infra/lib/SkillRepository.js +159 -159
  161. package/dist/infra/lib/UltraQA.js +99 -99
  162. package/dist/infra/lib/autonomy/AuditStore.js +41 -41
  163. package/dist/infra/lib/autonomy/ConfirmationStore.js +30 -30
  164. package/dist/infra/lib/autonomy/EventOutbox.js +38 -38
  165. package/dist/infra/lib/autonomy/PolicyEngine.d.ts +3 -3
  166. package/dist/infra/lib/autonomy/PolicyEngine.js +18 -18
  167. package/dist/infra/lib/autonomy/SecuritySentinel.js +1 -1
  168. package/dist/infra/lib/autonomy/SuggestionStore.js +33 -33
  169. package/dist/infra/lib/browser/compare.d.ts +27 -0
  170. package/dist/infra/lib/browser/compare.d.ts.map +1 -1
  171. package/dist/infra/lib/browser/compare.js +55 -0
  172. package/dist/infra/lib/browser/compare.js.map +1 -1
  173. package/dist/infra/lib/browser/index.d.ts +2 -1
  174. package/dist/infra/lib/browser/index.d.ts.map +1 -1
  175. package/dist/infra/lib/browser/index.js +1 -1
  176. package/dist/infra/lib/browser/index.js.map +1 -1
  177. package/dist/infra/lib/embedding/VectorStore.js +22 -22
  178. package/dist/infra/lib/evolution/AgentAnalyzer.js +10 -10
  179. package/dist/infra/lib/evolution/DescriptionOptimizer.js +21 -21
  180. package/dist/infra/lib/evolution/GenerationRegistry.js +36 -36
  181. package/dist/infra/lib/evolution/InsightStore.js +90 -90
  182. package/dist/infra/lib/evolution/ParityTester.js +57 -57
  183. package/dist/infra/lib/evolution/RollbackManager.js +5 -5
  184. package/dist/infra/lib/evolution/SkillBenchmark.js +23 -23
  185. package/dist/infra/lib/evolution/SkillEvalRunner.js +50 -50
  186. package/dist/infra/lib/evolution/SkillGapDetector.js +10 -10
  187. package/dist/infra/lib/evolution/UsageTracker.js +28 -28
  188. package/dist/infra/lib/figma/audit.d.ts +37 -0
  189. package/dist/infra/lib/figma/audit.d.ts.map +1 -0
  190. package/dist/infra/lib/figma/audit.js +130 -0
  191. package/dist/infra/lib/figma/audit.js.map +1 -0
  192. package/dist/infra/lib/figma/extract.d.ts +21 -1
  193. package/dist/infra/lib/figma/extract.d.ts.map +1 -1
  194. package/dist/infra/lib/figma/extract.js +84 -12
  195. package/dist/infra/lib/figma/extract.js.map +1 -1
  196. package/dist/infra/lib/figma/index.d.ts +4 -2
  197. package/dist/infra/lib/figma/index.d.ts.map +1 -1
  198. package/dist/infra/lib/figma/index.js +2 -1
  199. package/dist/infra/lib/figma/index.js.map +1 -1
  200. package/dist/infra/lib/figma/types.d.ts +31 -0
  201. package/dist/infra/lib/figma/types.d.ts.map +1 -1
  202. package/dist/infra/lib/gemini/orchestration.js +5 -5
  203. package/dist/infra/lib/gpt/orchestration.js +4 -4
  204. package/dist/infra/lib/memory/KnowledgeGraph.js +4 -4
  205. package/dist/infra/lib/memory/MemorySearch.js +57 -57
  206. package/dist/infra/lib/memory/MemoryStorage.d.ts +5 -0
  207. package/dist/infra/lib/memory/MemoryStorage.d.ts.map +1 -1
  208. package/dist/infra/lib/memory/MemoryStorage.js +202 -183
  209. package/dist/infra/lib/memory/MemoryStorage.js.map +1 -1
  210. package/dist/infra/lib/memory/ObservationStore.js +28 -28
  211. package/dist/infra/lib/memory/ReflectionStore.js +30 -30
  212. package/dist/infra/lib/memory/SessionRAGRetriever.js +7 -7
  213. package/dist/infra/lib/memory/SessionRAGStore.js +225 -225
  214. package/dist/infra/lib/memory/SessionSummarizer.js +9 -9
  215. package/dist/infra/orchestrator/AgentManager.js +12 -12
  216. package/dist/infra/orchestrator/AgentRegistry.js +65 -65
  217. package/dist/infra/orchestrator/MultiLlmResearch.js +8 -8
  218. package/dist/infra/orchestrator/SwarmOrchestrator.test.js +16 -16
  219. package/dist/infra/orchestrator/parallelResearch.js +24 -24
  220. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  221. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  222. package/dist/tools/memory/createMemoryTimeline.js +10 -10
  223. package/dist/tools/memory/getMemoryGraph.js +12 -12
  224. package/dist/tools/memory/getSessionContext.js +9 -9
  225. package/dist/tools/memory/linkMemories.js +14 -14
  226. package/dist/tools/memory/listMemories.js +4 -4
  227. package/dist/tools/memory/recallMemory.js +4 -4
  228. package/dist/tools/memory/saveMemory.js +4 -4
  229. package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
  230. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  231. package/dist/tools/semantic/astGrep.test.js +6 -6
  232. package/dist/tools/spec/prdParser.test.js +171 -171
  233. package/dist/tools/spec/specGenerator.js +169 -169
  234. package/dist/tools/spec/traceabilityMatrix.js +64 -64
  235. package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
  236. package/hooks/gemini-hooks.json +73 -73
  237. package/hooks/hooks.json +134 -126
  238. package/hooks/scripts/__tests__/keyword-detector.test.js +199 -199
  239. package/hooks/scripts/__tests__/pre-tool-guard.test.js +409 -409
  240. package/hooks/scripts/__tests__/sentinel-guard.test.js +208 -208
  241. package/hooks/scripts/auto-commit.js +97 -97
  242. package/hooks/scripts/auto-format.js +64 -64
  243. package/hooks/scripts/auto-test.js +81 -81
  244. package/hooks/scripts/code-check.js +271 -271
  245. package/hooks/scripts/codex-detect.js +46 -46
  246. package/hooks/scripts/codex-review-gate.js +80 -80
  247. package/hooks/scripts/command-log.js +32 -32
  248. package/hooks/scripts/context-save.js +353 -353
  249. package/hooks/scripts/evolution-engine.js +91 -91
  250. package/hooks/scripts/figma-extract.js +768 -635
  251. package/hooks/scripts/figma-guard.js +219 -219
  252. package/hooks/scripts/figma-refine.js +315 -315
  253. package/hooks/scripts/figma-to-scss.js +394 -394
  254. package/hooks/scripts/figma-validate.js +353 -353
  255. package/hooks/scripts/hud-status.js +321 -321
  256. package/hooks/scripts/keyword-detector.js +214 -214
  257. package/hooks/scripts/lib/dispatcher.js +87 -83
  258. package/hooks/scripts/lib/scope-from-spec.js +276 -261
  259. package/hooks/scripts/llm-orchestrate.js +645 -645
  260. package/hooks/scripts/post-edit.js +35 -35
  261. package/hooks/scripts/pr-test-gate.js +52 -52
  262. package/hooks/scripts/pre-tool-guard.js +259 -259
  263. package/hooks/scripts/prompt-dispatcher.js +192 -190
  264. package/hooks/scripts/scope-guard.js +145 -145
  265. package/hooks/scripts/sentinel-guard.js +130 -130
  266. package/hooks/scripts/session-start.js +186 -186
  267. package/hooks/scripts/skill-injector.js +83 -83
  268. package/hooks/scripts/step-counter.js +45 -0
  269. package/hooks/scripts/stop-notify.js +209 -209
  270. package/hooks/scripts/utils.js +315 -257
  271. package/languages/csharp-unity.md +515 -515
  272. package/languages/gdscript-godot.md +470 -470
  273. package/languages/ruby-rails.md +489 -489
  274. package/languages/typescript-angular.md +433 -433
  275. package/languages/typescript-astro.md +416 -416
  276. package/languages/typescript-electron.md +406 -406
  277. package/languages/typescript-nestjs.md +524 -524
  278. package/languages/typescript-svelte.md +407 -407
  279. package/languages/typescript-tauri.md +365 -365
  280. package/package.json +106 -106
  281. package/skills/agents-md/SKILL.md +121 -121
  282. package/skills/agents-md/rubrics/what-to-keep.md +49 -49
  283. package/skills/agents-md/templates/agents-md.md +36 -36
  284. package/skills/arch-guard/SKILL.md +181 -181
  285. package/skills/arch-guard/agents/detector.md +48 -48
  286. package/skills/arch-guard/agents/reporter.md +48 -48
  287. package/skills/arch-guard/agents/rule-generator.md +49 -49
  288. package/skills/arch-guard/agents/violation-checker.md +51 -51
  289. package/skills/arch-guard/frameworks/clean-architecture.md +108 -108
  290. package/skills/arch-guard/frameworks/solid.md +102 -102
  291. package/skills/arch-guard/scripts/check-boundaries.js +90 -90
  292. package/skills/arch-guard/templates/arch-rules.json +47 -47
  293. package/skills/arch-guard/templates/violation-report.md +53 -53
  294. package/skills/brand-assets/SKILL.md +147 -147
  295. package/skills/brand-assets/rubrics/asset-checklist.md +98 -98
  296. package/skills/brand-assets/templates/brand-guide.md +161 -161
  297. package/skills/capability-loop/SKILL.md +272 -272
  298. package/skills/capability-loop/agents/capability-designer.md +61 -61
  299. package/skills/capability-loop/agents/failure-analyst.md +55 -55
  300. package/skills/capability-loop/agents/implementer.md +50 -50
  301. package/skills/capability-loop/agents/tester.md +53 -53
  302. package/skills/capability-loop/templates/capability-spec.md +118 -118
  303. package/skills/capability-loop/templates/failure-analysis.md +118 -118
  304. package/skills/characterization-test/SKILL.md +207 -207
  305. package/skills/characterization-test/agents/behavior-capturer.md +50 -50
  306. package/skills/characterization-test/agents/coverage-checker.md +54 -54
  307. package/skills/characterization-test/agents/reporter.md +50 -50
  308. package/skills/characterization-test/agents/test-writer.md +49 -49
  309. package/skills/characterization-test/rubrics/coverage-criteria.md +53 -53
  310. package/skills/characterization-test/templates/test-template.ts +101 -101
  311. package/skills/chub-usage/SKILL.md +139 -139
  312. package/skills/claude-md-guide/SKILL.md +351 -351
  313. package/skills/claude-md-guide/rubrics/anti-patterns.md +88 -88
  314. package/skills/claude-md-guide/templates/claude-md.md +54 -54
  315. package/skills/commerce-patterns/SKILL.md +64 -64
  316. package/skills/commerce-patterns/rubrics/checkout-flow.md +48 -48
  317. package/skills/commerce-patterns/templates/product-schema.md +85 -85
  318. package/skills/commit-push-pr/SKILL.md +77 -77
  319. package/skills/commit-push-pr/agents/change-analyzer.md +55 -55
  320. package/skills/commit-push-pr/agents/message-writer.md +50 -50
  321. package/skills/commit-push-pr/agents/pr-writer.md +58 -58
  322. package/skills/commit-push-pr/agents/reviewer.md +52 -52
  323. package/skills/commit-push-pr/rubrics/commit-message.md +73 -73
  324. package/skills/commit-push-pr/templates/pr-body.md +63 -63
  325. package/skills/context7-usage/SKILL.md +106 -106
  326. package/skills/context7-usage/rubrics/when-to-use.md +50 -50
  327. package/skills/create-prd/SKILL.md +90 -90
  328. package/skills/create-prd/agents/edge-case-finder.md +48 -48
  329. package/skills/create-prd/agents/prioritizer.md +60 -60
  330. package/skills/create-prd/agents/requirements-writer.md +48 -48
  331. package/skills/create-prd/agents/researcher.md +55 -55
  332. package/skills/create-prd/agents/reviewer.md +54 -54
  333. package/skills/create-prd/frameworks/jobs-to-be-done.md +96 -96
  334. package/skills/create-prd/frameworks/rice-scoring.md +97 -97
  335. package/skills/create-prd/orchestrator.md +70 -70
  336. package/skills/create-prd/rubrics/completeness.md +58 -58
  337. package/skills/create-prd/templates/prd.md +139 -139
  338. package/skills/design-audit/SKILL.md +152 -152
  339. package/skills/design-audit/agents/a11y-auditor.md +43 -43
  340. package/skills/design-audit/agents/performance-auditor.md +46 -46
  341. package/skills/design-audit/agents/responsive-auditor.md +46 -46
  342. package/skills/design-audit/agents/scorer.md +47 -47
  343. package/skills/design-audit/agents/slop-detector.md +47 -47
  344. package/skills/design-audit/frameworks/core-web-vitals.md +107 -107
  345. package/skills/design-audit/frameworks/wcag-checklist.md +64 -64
  346. package/skills/design-audit/orchestrator.md +64 -64
  347. package/skills/design-audit/rubrics/ai-slop-patterns.md +83 -83
  348. package/skills/design-audit/rubrics/scoring.md +63 -63
  349. package/skills/design-audit/templates/report.md +88 -88
  350. package/skills/design-critique/SKILL.md +139 -139
  351. package/skills/design-critique/rubrics/ux-heuristics.md +143 -143
  352. package/skills/design-critique/templates/critique-report.md +86 -86
  353. package/skills/design-distill/SKILL.md +130 -130
  354. package/skills/design-distill/templates/design-system.md +132 -132
  355. package/skills/design-normalize/SKILL.md +133 -133
  356. package/skills/design-normalize/rubrics/token-naming.md +117 -117
  357. package/skills/design-normalize/templates/token-audit.md +89 -89
  358. package/skills/design-polish/SKILL.md +131 -131
  359. package/skills/design-polish/rubrics/polish-checklist.md +68 -68
  360. package/skills/design-polish/templates/polish-report.md +64 -64
  361. package/skills/design-teach/SKILL.md +182 -182
  362. package/skills/design-teach/rubrics/brand-personality.md +73 -73
  363. package/skills/design-teach/templates/design-context.json +36 -36
  364. package/skills/devlog/SKILL.md +143 -143
  365. package/skills/e2e-commerce/SKILL.md +62 -62
  366. package/skills/e2e-commerce/templates/test-scenarios.md +170 -170
  367. package/skills/event-comms/SKILL.md +172 -172
  368. package/skills/event-comms/templates/email-invite.md +99 -99
  369. package/skills/event-comms/templates/sns-post.md +133 -133
  370. package/skills/event-ops/SKILL.md +207 -207
  371. package/skills/event-ops/rubrics/contingency.md +85 -85
  372. package/skills/event-ops/templates/d-day-checklist.md +65 -65
  373. package/skills/event-planning/SKILL.md +144 -144
  374. package/skills/event-planning/rubrics/timeline.md +70 -70
  375. package/skills/event-planning/templates/event-plan.md +91 -91
  376. package/skills/exec-plan/SKILL.md +149 -149
  377. package/skills/exec-plan/agents/decomposer.md +47 -47
  378. package/skills/exec-plan/agents/dependency-mapper.md +44 -44
  379. package/skills/exec-plan/agents/estimator.md +43 -43
  380. package/skills/exec-plan/agents/validator.md +55 -55
  381. package/skills/exec-plan/orchestrator.md +70 -70
  382. package/skills/exec-plan/rubrics/complexity-scoring.md +75 -75
  383. package/skills/exec-plan/templates/plan.md +147 -147
  384. package/skills/git-worktree/SKILL.md +73 -73
  385. package/skills/git-worktree/rubrics/when-to-use.md +55 -55
  386. package/skills/handoff/SKILL.md +110 -110
  387. package/skills/handoff/agents/context-summarizer.md +51 -51
  388. package/skills/handoff/agents/document-writer.md +63 -63
  389. package/skills/handoff/agents/state-collector.md +53 -53
  390. package/skills/handoff/agents/verifier.md +48 -48
  391. package/skills/handoff/rubrics/completeness.md +62 -62
  392. package/skills/handoff/templates/handoff.md +107 -107
  393. package/skills/parallel-research/SKILL.md +104 -104
  394. package/skills/parallel-research/agents/best-practices.md +43 -43
  395. package/skills/parallel-research/agents/codebase-patterns.md +46 -46
  396. package/skills/parallel-research/agents/framework-docs.md +45 -45
  397. package/skills/parallel-research/agents/security-advisory.md +46 -46
  398. package/skills/parallel-research/agents/synthesizer.md +57 -57
  399. package/skills/parallel-research/experts/best-practices.md +50 -50
  400. package/skills/parallel-research/experts/codebase-patterns.md +70 -70
  401. package/skills/parallel-research/experts/framework-docs.md +65 -65
  402. package/skills/parallel-research/experts/security-advisory.md +69 -69
  403. package/skills/parallel-research/orchestrator.md +79 -79
  404. package/skills/parallel-research/templates/awesome-list.md +32 -32
  405. package/skills/parallel-research/templates/paper.md +88 -88
  406. package/skills/parallel-research/templates/synthesis.md +101 -101
  407. package/skills/prioritization-frameworks/SKILL.md +87 -87
  408. package/skills/prioritization-frameworks/rubrics/frameworks.md +79 -79
  409. package/skills/prioritization-frameworks/templates/scoring-matrix.md +69 -69
  410. package/skills/priority-todos/SKILL.md +64 -64
  411. package/skills/priority-todos/rubrics/prioritization.md +70 -70
  412. package/skills/priority-todos/templates/todo-board.md +59 -59
  413. package/skills/seo-checklist/SKILL.md +58 -58
  414. package/skills/seo-checklist/frameworks/structured-data.md +153 -153
  415. package/skills/seo-checklist/rubrics/content-seo.md +42 -42
  416. package/skills/seo-checklist/rubrics/technical-seo.md +48 -48
  417. package/skills/techdebt/SKILL.md +124 -124
  418. package/skills/techdebt/agents/analyzer.md +50 -50
  419. package/skills/techdebt/agents/fixer.md +41 -41
  420. package/skills/techdebt/agents/reviewer.md +47 -47
  421. package/skills/techdebt/agents/scanner.md +44 -44
  422. package/skills/techdebt/orchestrator.md +70 -70
  423. package/skills/techdebt/rubrics/severity.md +51 -51
  424. package/skills/techdebt/scripts/scan.js +90 -90
  425. package/skills/techdebt/templates/report.md +86 -86
  426. package/skills/tool-fallback/SKILL.md +104 -104
  427. package/skills/tool-fallback/rubrics/fallback-chain.md +58 -58
  428. package/skills/typescript-advanced-types/SKILL.md +67 -67
  429. package/skills/typescript-advanced-types/rubrics/type-patterns.md +109 -109
  430. package/skills/ui-ux-pro-max/SKILL.md +236 -236
  431. package/skills/ui-ux-pro-max/reference/color-and-contrast.md +517 -517
  432. package/skills/ui-ux-pro-max/reference/interaction-design.md +544 -544
  433. package/skills/ui-ux-pro-max/reference/motion-design.md +591 -591
  434. package/skills/ui-ux-pro-max/reference/responsive-design.md +463 -463
  435. package/skills/ui-ux-pro-max/reference/spatial-design.md +390 -390
  436. package/skills/ui-ux-pro-max/reference/typography.md +455 -455
  437. package/skills/ui-ux-pro-max/reference/ux-writing.md +469 -469
  438. package/skills/ui-ux-pro-max/rubrics/interaction-states.md +83 -83
  439. package/skills/ui-ux-pro-max/rubrics/responsive-breakpoints.md +99 -99
  440. package/skills/user-personas/SKILL.md +75 -75
  441. package/skills/user-personas/rubrics/research-methods.md +56 -56
  442. package/skills/user-personas/templates/persona.md +89 -89
  443. package/skills/vercel-react-best-practices/SKILL.md +60 -60
  444. package/skills/vercel-react-best-practices/rubrics/performance.md +82 -82
  445. package/skills/vercel-react-best-practices/rubrics/server-components.md +86 -86
  446. package/skills/vibe-contract/SKILL.md +166 -166
  447. package/skills/vibe-docs/templates/architecture.md +80 -80
  448. package/skills/vibe-docs/templates/readme.md +84 -84
  449. package/skills/vibe-docs/templates/release-notes.md +74 -74
  450. package/skills/vibe-figma/SKILL.md +363 -363
  451. package/skills/vibe-figma/rubrics/extraction-checklist.md +51 -51
  452. package/skills/vibe-figma/templates/component-index.md +126 -126
  453. package/skills/vibe-figma/templates/component-spec.md +168 -168
  454. package/skills/vibe-figma/templates/figma-handoff.md +100 -100
  455. package/skills/vibe-figma/templates/remapped-tree.md +277 -277
  456. package/skills/vibe-figma-convert/SKILL.md +235 -235
  457. package/skills/vibe-figma-convert/rubrics/conversion-rules.md +141 -141
  458. package/skills/vibe-figma-convert/templates/component.md +140 -140
  459. package/skills/vibe-figma-extract/SKILL.md +241 -219
  460. package/skills/vibe-figma-extract/rubrics/image-rules.md +157 -157
  461. package/skills/vibe-interview/SKILL.md +358 -358
  462. package/skills/vibe-interview/checklists/api.md +101 -101
  463. package/skills/vibe-interview/checklists/feature.md +88 -88
  464. package/skills/vibe-interview/checklists/library.md +95 -95
  465. package/skills/vibe-interview/checklists/mobile.md +89 -89
  466. package/skills/vibe-interview/checklists/webapp.md +97 -97
  467. package/skills/vibe-interview/checklists/website.md +99 -99
  468. package/skills/vibe-plan/SKILL.md +254 -254
  469. package/skills/vibe-regress/SKILL.md +174 -174
  470. package/skills/vibe-regress/templates/bug.md +44 -44
  471. package/skills/vibe-regress/templates/test-jest.md +29 -29
  472. package/skills/vibe-regress/templates/test-vitest.md +30 -30
  473. package/skills/vibe-spec/SKILL.md +1195 -1195
  474. package/skills/vibe-spec-review/SKILL.md +726 -726
  475. package/skills/vibe-test/SKILL.md +140 -140
  476. package/skills/video-production/SKILL.md +52 -52
  477. package/skills/video-production/rubrics/quality-checklist.md +58 -58
  478. package/skills/video-production/templates/production-plan.md +104 -104
  479. package/vibe/config.json +29 -29
  480. package/vibe/constitution.md +227 -227
  481. package/vibe/rules/principles/communication-guide.md +98 -98
  482. package/vibe/rules/principles/development-philosophy.md +52 -52
  483. package/vibe/rules/principles/quick-start.md +102 -102
  484. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  485. package/vibe/rules/quality/checklist.md +276 -276
  486. package/vibe/rules/quality/performance.md +236 -236
  487. package/vibe/rules/quality/testing-strategy.md +440 -440
  488. package/vibe/rules/standards/anti-patterns.md +541 -541
  489. package/vibe/rules/standards/code-structure.md +291 -291
  490. package/vibe/rules/standards/complexity-metrics.md +313 -313
  491. package/vibe/rules/standards/git-workflow.md +237 -237
  492. package/vibe/rules/standards/naming-conventions.md +198 -198
  493. package/vibe/rules/standards/security.md +305 -305
  494. package/vibe/rules/writing/document-style.md +74 -74
  495. package/vibe/setup.sh +31 -31
  496. package/vibe/templates/claudemd-template.md +74 -74
  497. package/vibe/templates/constitution-template.md +267 -267
  498. package/vibe/templates/contract-backend-template.md +526 -526
  499. package/vibe/templates/contract-frontend-template.md +599 -599
  500. package/vibe/templates/feature-template.md +96 -96
  501. package/vibe/templates/plan-template.md +194 -194
  502. package/vibe/templates/spec-template.md +221 -221
  503. package/vibe/ui-ux-data/charts.csv +26 -26
  504. package/vibe/ui-ux-data/colors.csv +97 -97
  505. package/vibe/ui-ux-data/icons.csv +101 -101
  506. package/vibe/ui-ux-data/landing.csv +31 -31
  507. package/vibe/ui-ux-data/products.csv +96 -96
  508. package/vibe/ui-ux-data/react-performance.csv +45 -45
  509. package/vibe/ui-ux-data/stacks/astro.csv +54 -54
  510. package/vibe/ui-ux-data/stacks/flutter.csv +53 -53
  511. package/vibe/ui-ux-data/stacks/html-tailwind.csv +56 -56
  512. package/vibe/ui-ux-data/stacks/jetpack-compose.csv +53 -53
  513. package/vibe/ui-ux-data/stacks/nextjs.csv +53 -53
  514. package/vibe/ui-ux-data/stacks/nuxt-ui.csv +51 -51
  515. package/vibe/ui-ux-data/stacks/nuxtjs.csv +59 -59
  516. package/vibe/ui-ux-data/stacks/react-native.csv +52 -52
  517. package/vibe/ui-ux-data/stacks/react.csv +54 -54
  518. package/vibe/ui-ux-data/stacks/shadcn.csv +61 -61
  519. package/vibe/ui-ux-data/stacks/svelte.csv +54 -54
  520. package/vibe/ui-ux-data/stacks/swiftui.csv +51 -51
  521. package/vibe/ui-ux-data/stacks/vue.csv +50 -50
  522. package/vibe/ui-ux-data/styles.csv +68 -68
  523. package/vibe/ui-ux-data/typography.csv +57 -57
  524. package/vibe/ui-ux-data/ui-reasoning.csv +101 -101
  525. package/vibe/ui-ux-data/ux-guidelines.csv +99 -99
  526. package/vibe/ui-ux-data/version.json +31 -31
  527. package/vibe/ui-ux-data/web-interface.csv +31 -31
@@ -1,463 +1,463 @@
1
- # Responsive Design Reference
2
-
3
- Deep reference for building layouts that adapt to any screen, input method, and environment. Covers mobile-first methodology, breakpoint strategy, input modality, safe areas, images, typography scaling, and container queries.
4
-
5
- ---
6
-
7
- ## Mobile-First Development
8
-
9
- ### The Core Principle
10
-
11
- Write base styles for the smallest viewport first, then use `min-width` media queries to add complexity as space increases. This is progressive enhancement applied to layout.
12
-
13
- The inverse approach — starting at desktop and overriding down — produces larger CSS, more specificity conflicts, and worse performance on mobile because the browser must parse and then undo rules.
14
-
15
- ```css
16
- /* Wrong: desktop-first with max-width overrides */
17
- .card {
18
- display: grid;
19
- grid-template-columns: 1fr 1fr;
20
- }
21
- @media (max-width: 768px) {
22
- .card { display: block; } /* fighting the cascade */
23
- }
24
-
25
- /* Correct: mobile-first with min-width additions */
26
- .card {
27
- display: block; /* single column by default */
28
- }
29
- @media (min-width: 768px) {
30
- .card {
31
- display: grid;
32
- grid-template-columns: 1fr 1fr;
33
- }
34
- }
35
- ```
36
-
37
- In Tailwind, unprefixed utilities are the mobile base. Prefixes add styles at and above a breakpoint.
38
-
39
- ```html
40
- <!-- Single column on mobile, two columns from md (768px) up -->
41
- <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3">
42
- ```
43
-
44
- ### Progressive Enhancement in Practice
45
-
46
- Start with the content working at any width, then layer layout, then layer decoration.
47
-
48
- 1. Content: readable text, visible images, working links — no CSS required
49
- 2. Layout: flexbox/grid for spatial organization
50
- 3. Enhancement: hover effects, transitions, complex grid areas
51
-
52
- ### DO / DON'T
53
-
54
- - DO write all base styles without a media query — that is your mobile design.
55
- - DO load critical CSS inline and defer large layout stylesheets where possible.
56
- - DON'T use `max-width` media queries in a mobile-first system; they fight the cascade.
57
- - DON'T assume "mobile" means "slow" — optimize for network conditions, not device class.
58
-
59
- ---
60
-
61
- ## Content-Driven Breakpoints
62
-
63
- ### Break Where Content Breaks
64
-
65
- Breakpoints should be chosen by observing where the layout becomes uncomfortable, not by matching known device widths. Devices change; content layout patterns are more stable.
66
-
67
- The practical test: drag your browser window smaller. The moment the content looks wrong — text becomes too long, an image becomes too narrow, a navigation link wraps — that is your breakpoint.
68
-
69
- ```css
70
- /* Content-driven: this nav breaks at the point it wraps, not at 768px */
71
- @media (min-width: 52rem) { /* ~832px at 16px base */
72
- .primary-nav {
73
- display: flex;
74
- gap: 1.5rem;
75
- }
76
- }
77
- ```
78
-
79
- ### Naming Breakpoints Semantically
80
-
81
- Avoid naming breakpoints after devices (`iphone`, `ipad`). Name them after layout roles.
82
-
83
- ```css
84
- /* In a design token file */
85
- :root {
86
- --bp-compact: 375px;
87
- --bp-medium: 768px;
88
- --bp-wide: 1024px;
89
- --bp-ultrawide: 1440px;
90
- }
91
- ```
92
-
93
- In Tailwind, extend the theme rather than using arbitrary values to maintain consistency.
94
-
95
- ```js
96
- // tailwind.config.js
97
- export default {
98
- theme: {
99
- screens: {
100
- sm: '375px',
101
- md: '768px',
102
- lg: '1024px',
103
- xl: '1440px',
104
- },
105
- },
106
- };
107
- ```
108
-
109
- ### DO / DON'T
110
-
111
- - DO add a breakpoint only when the content demands one.
112
- - DO name breakpoints by their layout role, not by device names.
113
- - DON'T add breakpoints at `320px`, `480px`, `768px`, `1024px` by habit — verify each one is needed.
114
- - DON'T target a specific device's dimensions; target your content's natural limits.
115
-
116
- ---
117
-
118
- ## Reference Breakpoint Values
119
-
120
- These four values cover the overwhelming majority of real-world layouts. They are starting points, not mandates.
121
-
122
- | Name | Width | Typical use |
123
- |------|-------|-------------|
124
- | Mobile | 375px | Single-column, stacked navigation, full-width cards |
125
- | Tablet | 768px | Two-column grid, side-by-side cards, visible sidebar |
126
- | Desktop | 1024px | Three-column grid, persistent sidebar, expanded navigation |
127
- | Wide | 1440px | Max-width container centered with side gutters |
128
-
129
- ### Max-Width Container Pattern
130
-
131
- Prevent layouts from becoming too wide on large screens by constraining the content column.
132
-
133
- ```css
134
- .container {
135
- width: 100%;
136
- max-width: 1440px;
137
- margin-inline: auto;
138
- padding-inline: clamp(1rem, 5vw, 4rem);
139
- }
140
- ```
141
-
142
- ```html
143
- <!-- Tailwind equivalent -->
144
- <div class="w-full max-w-screen-xl mx-auto px-4 md:px-8 xl:px-16">
145
- ```
146
-
147
- ### DO / DON'T
148
-
149
- - DO set a `max-width` on your primary content container — unconstrained line lengths harm readability.
150
- - DO use `padding-inline` (logical properties) for horizontal rhythm.
151
- - DON'T center content with `margin: 0 auto` without a `max-width` — it has no effect on full-width elements.
152
-
153
- ---
154
-
155
- ## Input Modality
156
-
157
- ### Detecting Touch vs. Mouse
158
-
159
- The `pointer` and `hover` media features detect the primary input device's capabilities, not the device class. A tablet with a mouse attached is `pointer: fine`.
160
-
161
- ```css
162
- /* Expand targets for coarse pointers (touch) */
163
- @media (pointer: coarse) {
164
- .btn {
165
- min-height: 44px;
166
- padding-block: 0.75rem;
167
- }
168
- }
169
-
170
- /* Rich hover effects only for devices that support hover */
171
- @media (hover: hover) and (pointer: fine) {
172
- .card:hover {
173
- transform: translateY(-2px);
174
- box-shadow: var(--shadow-raised);
175
- }
176
- }
177
- ```
178
-
179
- In Tailwind, use arbitrary media query variants or custom plugins:
180
-
181
- ```html
182
- <!-- Show only on hover-capable devices -->
183
- <button class="[@media(hover:hover)]:hover:bg-blue-600">
184
- ```
185
-
186
- ### The `any-pointer` and `any-hover` Features
187
-
188
- On hybrid devices (e.g., a Surface with both touch and stylus), `any-pointer: fine` is true even if `pointer: coarse` is the primary input. Use `any-pointer` to check whether any available input can be precise.
189
-
190
- ```css
191
- /* Provide fine controls if any precision pointing device is available */
192
- @media (any-pointer: fine) {
193
- .resize-handle { display: block; }
194
- }
195
- ```
196
-
197
- ### DO / DON'T
198
-
199
- - DO use `(hover: hover) and (pointer: fine)` together — hover alone matches touch on some platforms.
200
- - DO test on real touch devices; DevTools device emulation does not always replicate touch behavior accurately.
201
- - DON'T add hover effects that reveal critical information — they are inaccessible on touch devices.
202
- - DON'T assume a narrow viewport means a touch device.
203
-
204
- ---
205
-
206
- ## Safe Areas
207
-
208
- ### Notches, Dynamic Island, and Home Indicators
209
-
210
- Modern mobile devices cut into the viewport with sensors and virtual home indicators. Content placed at the screen edges without accounting for these insets will be obscured.
211
-
212
- ```css
213
- /* Opt in to the full screen area first */
214
- html {
215
- /* Without this, safe area insets are always 0 */
216
- }
217
- /* Must be set on viewport meta: content="viewport-fit=cover" */
218
-
219
- .header {
220
- padding-top: env(safe-area-inset-top);
221
- }
222
-
223
- .bottom-nav {
224
- padding-bottom: env(safe-area-inset-bottom);
225
- }
226
-
227
- .sidebar {
228
- padding-left: env(safe-area-inset-left);
229
- }
230
- ```
231
-
232
- ```html
233
- <!-- Required meta tag in <head> -->
234
- <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
235
- ```
236
-
237
- ### Combining with Existing Padding
238
-
239
- Use `calc()` to add safe area insets on top of existing padding rather than replacing it.
240
-
241
- ```css
242
- .bottom-sheet {
243
- padding-bottom: calc(1.5rem + env(safe-area-inset-bottom));
244
- }
245
- ```
246
-
247
- In Tailwind, use arbitrary values:
248
-
249
- ```html
250
- <nav class="pb-[calc(1rem+env(safe-area-inset-bottom))]">
251
- ```
252
-
253
- ### DO / DON'T
254
-
255
- - DO set `viewport-fit=cover` in the meta viewport tag to make `env()` values non-zero.
256
- - DO add safe area insets to existing padding with `calc()`, not as replacements.
257
- - DON'T apply safe area insets to every element — apply them only to edge-anchored containers.
258
- - DON'T test only in DevTools — test on a physical device with a notch.
259
-
260
- ---
261
-
262
- ## Responsive Images
263
-
264
- ### `srcset` and `sizes`
265
-
266
- The browser chooses the best image source; your job is to describe the candidates and the display size.
267
-
268
- ```html
269
- <!-- Resolution switching: same image, different sizes -->
270
- <img
271
- src="photo-800.jpg"
272
- srcset="
273
- photo-400.jpg 400w,
274
- photo-800.jpg 800w,
275
- photo-1600.jpg 1600w
276
- "
277
- sizes="
278
- (max-width: 767px) 100vw,
279
- (max-width: 1023px) 50vw,
280
- 33vw
281
- "
282
- alt="Description of photo"
283
- loading="lazy"
284
- decoding="async"
285
- />
286
- ```
287
-
288
- `sizes` tells the browser how wide the image will be rendered before it downloads any CSS. Match it to your actual layout.
289
-
290
- ### Art Direction with `<picture>`
291
-
292
- When the composition must change at different sizes (e.g., a wide landscape crop on desktop, a tight portrait crop on mobile), use `<picture>`.
293
-
294
- ```html
295
- <picture>
296
- <source
297
- media="(min-width: 1024px)"
298
- srcset="hero-landscape-1600.webp 1600w, hero-landscape-800.webp 800w"
299
- type="image/webp"
300
- />
301
- <source
302
- media="(min-width: 768px)"
303
- srcset="hero-square-800.webp"
304
- type="image/webp"
305
- />
306
- <img
307
- src="hero-portrait-400.jpg"
308
- srcset="hero-portrait-400.jpg 400w, hero-portrait-800.jpg 800w"
309
- alt="Hero image"
310
- loading="eager"
311
- />
312
- </picture>
313
- ```
314
-
315
- ### Modern Formats
316
-
317
- Serve WebP or AVIF with JPEG/PNG fallback. AVIF is ~50% smaller than JPEG at equivalent quality. Use `<picture>` type switching to serve the best format the browser supports.
318
-
319
- ### DO / DON'T
320
-
321
- - DO always write `alt` text on `<img>` — empty string is correct for decorative images.
322
- - DO use `loading="lazy"` for below-the-fold images and `loading="eager"` for above-the-fold.
323
- - DON'T set `sizes="100vw"` for every image — calculate the actual rendered width.
324
- - DON'T use `<picture>` for resolution switching when `srcset` + `sizes` is sufficient.
325
-
326
- ---
327
-
328
- ## Fluid Typography
329
-
330
- ### The `clamp()` Function
331
-
332
- `clamp(min, preferred, max)` produces a value that scales smoothly between a minimum and maximum based on the viewport width. This eliminates the need for multiple typography breakpoints.
333
-
334
- ```css
335
- /* Font size scales from 1rem at 375px to 1.5rem at 1440px */
336
- :root {
337
- --font-size-body: clamp(1rem, 0.75rem + 0.67vw, 1.5rem);
338
- --font-size-h1: clamp(1.75rem, 1.25rem + 2.13vw, 3.5rem);
339
- --font-size-h2: clamp(1.375rem, 1rem + 1.6vw, 2.5rem);
340
- }
341
-
342
- body { font-size: var(--font-size-body); }
343
- h1 { font-size: var(--font-size-h1); }
344
- h2 { font-size: var(--font-size-h2); }
345
- ```
346
-
347
- ### Calculating the Preferred Value
348
-
349
- The linear interpolation formula for `clamp()`:
350
-
351
- ```
352
- preferred = minSize + (maxSize - minSize) * (100vw - minVp) / (maxVp - minVp)
353
- ```
354
-
355
- Simplified as a CSS calc (using unitless vw slope):
356
-
357
- ```css
358
- /* Scales from 16px at 375px viewport to 20px at 1440px */
359
- font-size: clamp(1rem, calc(0.75rem + 1.07vw), 1.25rem);
360
- ```
361
-
362
- ### Line Length Control
363
-
364
- Fluid font sizes work best when paired with a constrained line length (`ch` units are ideal for this).
365
-
366
- ```css
367
- .prose {
368
- max-width: 70ch;
369
- font-size: clamp(1rem, 1.5vw, 1.125rem);
370
- line-height: 1.6;
371
- }
372
- ```
373
-
374
- ### DO / DON'T
375
-
376
- - DO set both a `min` and `max` in every `clamp()` to prevent runaway scaling.
377
- - DO pair fluid type with fluid spacing — use `clamp()` for padding and gaps too.
378
- - DON'T use viewport units alone (`font-size: 2vw`) without min/max constraints.
379
- - DON'T fluid-scale every text element — establish a base scale, then derive headings from it.
380
-
381
- ---
382
-
383
- ## Container Queries
384
-
385
- ### Why Container Queries
386
-
387
- Media queries respond to the viewport. Container queries respond to the size of a parent element. This makes components truly reusable: a card in a wide sidebar behaves differently from the same card in a narrow main column without any global media queries.
388
-
389
- ```css
390
- /* Declare the containment context on the parent */
391
- .card-wrapper {
392
- container-type: inline-size;
393
- container-name: card;
394
- }
395
-
396
- /* Style the card based on its container's width */
397
- .card {
398
- display: block;
399
- }
400
-
401
- @container card (min-width: 400px) {
402
- .card {
403
- display: grid;
404
- grid-template-columns: 120px 1fr;
405
- gap: 1rem;
406
- }
407
- }
408
- ```
409
-
410
- ### Container Query Units
411
-
412
- Container queries introduce new viewport-relative units scoped to the container: `cqi` (1% of container inline size), `cqb` (1% of container block size), `cqw`, `cqh`, `cqmin`, `cqmax`.
413
-
414
- ```css
415
- @container (min-width: 400px) {
416
- .card__title {
417
- font-size: clamp(1rem, 4cqi, 1.5rem);
418
- }
419
- }
420
- ```
421
-
422
- ### Nesting and Named Containers
423
-
424
- Name containers to target specific ancestors when containers are nested.
425
-
426
- ```css
427
- .layout { container-type: inline-size; container-name: layout; }
428
- .sidebar { container-type: inline-size; container-name: sidebar; }
429
-
430
- /* Target layout, not the nearest ancestor */
431
- @container layout (min-width: 1024px) {
432
- .article { padding-inline: 2rem; }
433
- }
434
- ```
435
-
436
- ### React Integration Pattern
437
-
438
- Pair container queries with a wrapper component to keep the containment declaration co-located with the component.
439
-
440
- ```tsx
441
- export function CardContainer({ children }: { children: React.ReactNode }) {
442
- return (
443
- <div className="card-container">
444
- {children}
445
- </div>
446
- );
447
- }
448
- ```
449
-
450
- ```css
451
- .card-container {
452
- container-type: inline-size;
453
- container-name: card;
454
- }
455
- ```
456
-
457
- ### DO / DON'T
458
-
459
- - DO use container queries for component-level responsiveness and media queries for page-level layout.
460
- - DO name containers when nesting container query contexts.
461
- - DON'T use `container-type: size` unless you need to query block size — `inline-size` is sufficient for most layouts and has less layout impact.
462
- - DON'T apply `container-type` directly to elements that participate in flex or grid layout — wrap them in a container element.
463
- - DON'T replace all media queries with container queries; page-level layout (header, sidebar, footer) still belongs in media queries.
1
+ # Responsive Design Reference
2
+
3
+ Deep reference for building layouts that adapt to any screen, input method, and environment. Covers mobile-first methodology, breakpoint strategy, input modality, safe areas, images, typography scaling, and container queries.
4
+
5
+ ---
6
+
7
+ ## Mobile-First Development
8
+
9
+ ### The Core Principle
10
+
11
+ Write base styles for the smallest viewport first, then use `min-width` media queries to add complexity as space increases. This is progressive enhancement applied to layout.
12
+
13
+ The inverse approach — starting at desktop and overriding down — produces larger CSS, more specificity conflicts, and worse performance on mobile because the browser must parse and then undo rules.
14
+
15
+ ```css
16
+ /* Wrong: desktop-first with max-width overrides */
17
+ .card {
18
+ display: grid;
19
+ grid-template-columns: 1fr 1fr;
20
+ }
21
+ @media (max-width: 768px) {
22
+ .card { display: block; } /* fighting the cascade */
23
+ }
24
+
25
+ /* Correct: mobile-first with min-width additions */
26
+ .card {
27
+ display: block; /* single column by default */
28
+ }
29
+ @media (min-width: 768px) {
30
+ .card {
31
+ display: grid;
32
+ grid-template-columns: 1fr 1fr;
33
+ }
34
+ }
35
+ ```
36
+
37
+ In Tailwind, unprefixed utilities are the mobile base. Prefixes add styles at and above a breakpoint.
38
+
39
+ ```html
40
+ <!-- Single column on mobile, two columns from md (768px) up -->
41
+ <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3">
42
+ ```
43
+
44
+ ### Progressive Enhancement in Practice
45
+
46
+ Start with the content working at any width, then layer layout, then layer decoration.
47
+
48
+ 1. Content: readable text, visible images, working links — no CSS required
49
+ 2. Layout: flexbox/grid for spatial organization
50
+ 3. Enhancement: hover effects, transitions, complex grid areas
51
+
52
+ ### DO / DON'T
53
+
54
+ - DO write all base styles without a media query — that is your mobile design.
55
+ - DO load critical CSS inline and defer large layout stylesheets where possible.
56
+ - DON'T use `max-width` media queries in a mobile-first system; they fight the cascade.
57
+ - DON'T assume "mobile" means "slow" — optimize for network conditions, not device class.
58
+
59
+ ---
60
+
61
+ ## Content-Driven Breakpoints
62
+
63
+ ### Break Where Content Breaks
64
+
65
+ Breakpoints should be chosen by observing where the layout becomes uncomfortable, not by matching known device widths. Devices change; content layout patterns are more stable.
66
+
67
+ The practical test: drag your browser window smaller. The moment the content looks wrong — text becomes too long, an image becomes too narrow, a navigation link wraps — that is your breakpoint.
68
+
69
+ ```css
70
+ /* Content-driven: this nav breaks at the point it wraps, not at 768px */
71
+ @media (min-width: 52rem) { /* ~832px at 16px base */
72
+ .primary-nav {
73
+ display: flex;
74
+ gap: 1.5rem;
75
+ }
76
+ }
77
+ ```
78
+
79
+ ### Naming Breakpoints Semantically
80
+
81
+ Avoid naming breakpoints after devices (`iphone`, `ipad`). Name them after layout roles.
82
+
83
+ ```css
84
+ /* In a design token file */
85
+ :root {
86
+ --bp-compact: 375px;
87
+ --bp-medium: 768px;
88
+ --bp-wide: 1024px;
89
+ --bp-ultrawide: 1440px;
90
+ }
91
+ ```
92
+
93
+ In Tailwind, extend the theme rather than using arbitrary values to maintain consistency.
94
+
95
+ ```js
96
+ // tailwind.config.js
97
+ export default {
98
+ theme: {
99
+ screens: {
100
+ sm: '375px',
101
+ md: '768px',
102
+ lg: '1024px',
103
+ xl: '1440px',
104
+ },
105
+ },
106
+ };
107
+ ```
108
+
109
+ ### DO / DON'T
110
+
111
+ - DO add a breakpoint only when the content demands one.
112
+ - DO name breakpoints by their layout role, not by device names.
113
+ - DON'T add breakpoints at `320px`, `480px`, `768px`, `1024px` by habit — verify each one is needed.
114
+ - DON'T target a specific device's dimensions; target your content's natural limits.
115
+
116
+ ---
117
+
118
+ ## Reference Breakpoint Values
119
+
120
+ These four values cover the overwhelming majority of real-world layouts. They are starting points, not mandates.
121
+
122
+ | Name | Width | Typical use |
123
+ |------|-------|-------------|
124
+ | Mobile | 375px | Single-column, stacked navigation, full-width cards |
125
+ | Tablet | 768px | Two-column grid, side-by-side cards, visible sidebar |
126
+ | Desktop | 1024px | Three-column grid, persistent sidebar, expanded navigation |
127
+ | Wide | 1440px | Max-width container centered with side gutters |
128
+
129
+ ### Max-Width Container Pattern
130
+
131
+ Prevent layouts from becoming too wide on large screens by constraining the content column.
132
+
133
+ ```css
134
+ .container {
135
+ width: 100%;
136
+ max-width: 1440px;
137
+ margin-inline: auto;
138
+ padding-inline: clamp(1rem, 5vw, 4rem);
139
+ }
140
+ ```
141
+
142
+ ```html
143
+ <!-- Tailwind equivalent -->
144
+ <div class="w-full max-w-screen-xl mx-auto px-4 md:px-8 xl:px-16">
145
+ ```
146
+
147
+ ### DO / DON'T
148
+
149
+ - DO set a `max-width` on your primary content container — unconstrained line lengths harm readability.
150
+ - DO use `padding-inline` (logical properties) for horizontal rhythm.
151
+ - DON'T center content with `margin: 0 auto` without a `max-width` — it has no effect on full-width elements.
152
+
153
+ ---
154
+
155
+ ## Input Modality
156
+
157
+ ### Detecting Touch vs. Mouse
158
+
159
+ The `pointer` and `hover` media features detect the primary input device's capabilities, not the device class. A tablet with a mouse attached is `pointer: fine`.
160
+
161
+ ```css
162
+ /* Expand targets for coarse pointers (touch) */
163
+ @media (pointer: coarse) {
164
+ .btn {
165
+ min-height: 44px;
166
+ padding-block: 0.75rem;
167
+ }
168
+ }
169
+
170
+ /* Rich hover effects only for devices that support hover */
171
+ @media (hover: hover) and (pointer: fine) {
172
+ .card:hover {
173
+ transform: translateY(-2px);
174
+ box-shadow: var(--shadow-raised);
175
+ }
176
+ }
177
+ ```
178
+
179
+ In Tailwind, use arbitrary media query variants or custom plugins:
180
+
181
+ ```html
182
+ <!-- Show only on hover-capable devices -->
183
+ <button class="[@media(hover:hover)]:hover:bg-blue-600">
184
+ ```
185
+
186
+ ### The `any-pointer` and `any-hover` Features
187
+
188
+ On hybrid devices (e.g., a Surface with both touch and stylus), `any-pointer: fine` is true even if `pointer: coarse` is the primary input. Use `any-pointer` to check whether any available input can be precise.
189
+
190
+ ```css
191
+ /* Provide fine controls if any precision pointing device is available */
192
+ @media (any-pointer: fine) {
193
+ .resize-handle { display: block; }
194
+ }
195
+ ```
196
+
197
+ ### DO / DON'T
198
+
199
+ - DO use `(hover: hover) and (pointer: fine)` together — hover alone matches touch on some platforms.
200
+ - DO test on real touch devices; DevTools device emulation does not always replicate touch behavior accurately.
201
+ - DON'T add hover effects that reveal critical information — they are inaccessible on touch devices.
202
+ - DON'T assume a narrow viewport means a touch device.
203
+
204
+ ---
205
+
206
+ ## Safe Areas
207
+
208
+ ### Notches, Dynamic Island, and Home Indicators
209
+
210
+ Modern mobile devices cut into the viewport with sensors and virtual home indicators. Content placed at the screen edges without accounting for these insets will be obscured.
211
+
212
+ ```css
213
+ /* Opt in to the full screen area first */
214
+ html {
215
+ /* Without this, safe area insets are always 0 */
216
+ }
217
+ /* Must be set on viewport meta: content="viewport-fit=cover" */
218
+
219
+ .header {
220
+ padding-top: env(safe-area-inset-top);
221
+ }
222
+
223
+ .bottom-nav {
224
+ padding-bottom: env(safe-area-inset-bottom);
225
+ }
226
+
227
+ .sidebar {
228
+ padding-left: env(safe-area-inset-left);
229
+ }
230
+ ```
231
+
232
+ ```html
233
+ <!-- Required meta tag in <head> -->
234
+ <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
235
+ ```
236
+
237
+ ### Combining with Existing Padding
238
+
239
+ Use `calc()` to add safe area insets on top of existing padding rather than replacing it.
240
+
241
+ ```css
242
+ .bottom-sheet {
243
+ padding-bottom: calc(1.5rem + env(safe-area-inset-bottom));
244
+ }
245
+ ```
246
+
247
+ In Tailwind, use arbitrary values:
248
+
249
+ ```html
250
+ <nav class="pb-[calc(1rem+env(safe-area-inset-bottom))]">
251
+ ```
252
+
253
+ ### DO / DON'T
254
+
255
+ - DO set `viewport-fit=cover` in the meta viewport tag to make `env()` values non-zero.
256
+ - DO add safe area insets to existing padding with `calc()`, not as replacements.
257
+ - DON'T apply safe area insets to every element — apply them only to edge-anchored containers.
258
+ - DON'T test only in DevTools — test on a physical device with a notch.
259
+
260
+ ---
261
+
262
+ ## Responsive Images
263
+
264
+ ### `srcset` and `sizes`
265
+
266
+ The browser chooses the best image source; your job is to describe the candidates and the display size.
267
+
268
+ ```html
269
+ <!-- Resolution switching: same image, different sizes -->
270
+ <img
271
+ src="photo-800.jpg"
272
+ srcset="
273
+ photo-400.jpg 400w,
274
+ photo-800.jpg 800w,
275
+ photo-1600.jpg 1600w
276
+ "
277
+ sizes="
278
+ (max-width: 767px) 100vw,
279
+ (max-width: 1023px) 50vw,
280
+ 33vw
281
+ "
282
+ alt="Description of photo"
283
+ loading="lazy"
284
+ decoding="async"
285
+ />
286
+ ```
287
+
288
+ `sizes` tells the browser how wide the image will be rendered before it downloads any CSS. Match it to your actual layout.
289
+
290
+ ### Art Direction with `<picture>`
291
+
292
+ When the composition must change at different sizes (e.g., a wide landscape crop on desktop, a tight portrait crop on mobile), use `<picture>`.
293
+
294
+ ```html
295
+ <picture>
296
+ <source
297
+ media="(min-width: 1024px)"
298
+ srcset="hero-landscape-1600.webp 1600w, hero-landscape-800.webp 800w"
299
+ type="image/webp"
300
+ />
301
+ <source
302
+ media="(min-width: 768px)"
303
+ srcset="hero-square-800.webp"
304
+ type="image/webp"
305
+ />
306
+ <img
307
+ src="hero-portrait-400.jpg"
308
+ srcset="hero-portrait-400.jpg 400w, hero-portrait-800.jpg 800w"
309
+ alt="Hero image"
310
+ loading="eager"
311
+ />
312
+ </picture>
313
+ ```
314
+
315
+ ### Modern Formats
316
+
317
+ Serve WebP or AVIF with JPEG/PNG fallback. AVIF is ~50% smaller than JPEG at equivalent quality. Use `<picture>` type switching to serve the best format the browser supports.
318
+
319
+ ### DO / DON'T
320
+
321
+ - DO always write `alt` text on `<img>` — empty string is correct for decorative images.
322
+ - DO use `loading="lazy"` for below-the-fold images and `loading="eager"` for above-the-fold.
323
+ - DON'T set `sizes="100vw"` for every image — calculate the actual rendered width.
324
+ - DON'T use `<picture>` for resolution switching when `srcset` + `sizes` is sufficient.
325
+
326
+ ---
327
+
328
+ ## Fluid Typography
329
+
330
+ ### The `clamp()` Function
331
+
332
+ `clamp(min, preferred, max)` produces a value that scales smoothly between a minimum and maximum based on the viewport width. This eliminates the need for multiple typography breakpoints.
333
+
334
+ ```css
335
+ /* Font size scales from 1rem at 375px to 1.5rem at 1440px */
336
+ :root {
337
+ --font-size-body: clamp(1rem, 0.75rem + 0.67vw, 1.5rem);
338
+ --font-size-h1: clamp(1.75rem, 1.25rem + 2.13vw, 3.5rem);
339
+ --font-size-h2: clamp(1.375rem, 1rem + 1.6vw, 2.5rem);
340
+ }
341
+
342
+ body { font-size: var(--font-size-body); }
343
+ h1 { font-size: var(--font-size-h1); }
344
+ h2 { font-size: var(--font-size-h2); }
345
+ ```
346
+
347
+ ### Calculating the Preferred Value
348
+
349
+ The linear interpolation formula for `clamp()`:
350
+
351
+ ```
352
+ preferred = minSize + (maxSize - minSize) * (100vw - minVp) / (maxVp - minVp)
353
+ ```
354
+
355
+ Simplified as a CSS calc (using unitless vw slope):
356
+
357
+ ```css
358
+ /* Scales from 16px at 375px viewport to 20px at 1440px */
359
+ font-size: clamp(1rem, calc(0.75rem + 1.07vw), 1.25rem);
360
+ ```
361
+
362
+ ### Line Length Control
363
+
364
+ Fluid font sizes work best when paired with a constrained line length (`ch` units are ideal for this).
365
+
366
+ ```css
367
+ .prose {
368
+ max-width: 70ch;
369
+ font-size: clamp(1rem, 1.5vw, 1.125rem);
370
+ line-height: 1.6;
371
+ }
372
+ ```
373
+
374
+ ### DO / DON'T
375
+
376
+ - DO set both a `min` and `max` in every `clamp()` to prevent runaway scaling.
377
+ - DO pair fluid type with fluid spacing — use `clamp()` for padding and gaps too.
378
+ - DON'T use viewport units alone (`font-size: 2vw`) without min/max constraints.
379
+ - DON'T fluid-scale every text element — establish a base scale, then derive headings from it.
380
+
381
+ ---
382
+
383
+ ## Container Queries
384
+
385
+ ### Why Container Queries
386
+
387
+ Media queries respond to the viewport. Container queries respond to the size of a parent element. This makes components truly reusable: a card in a wide sidebar behaves differently from the same card in a narrow main column without any global media queries.
388
+
389
+ ```css
390
+ /* Declare the containment context on the parent */
391
+ .card-wrapper {
392
+ container-type: inline-size;
393
+ container-name: card;
394
+ }
395
+
396
+ /* Style the card based on its container's width */
397
+ .card {
398
+ display: block;
399
+ }
400
+
401
+ @container card (min-width: 400px) {
402
+ .card {
403
+ display: grid;
404
+ grid-template-columns: 120px 1fr;
405
+ gap: 1rem;
406
+ }
407
+ }
408
+ ```
409
+
410
+ ### Container Query Units
411
+
412
+ Container queries introduce new viewport-relative units scoped to the container: `cqi` (1% of container inline size), `cqb` (1% of container block size), `cqw`, `cqh`, `cqmin`, `cqmax`.
413
+
414
+ ```css
415
+ @container (min-width: 400px) {
416
+ .card__title {
417
+ font-size: clamp(1rem, 4cqi, 1.5rem);
418
+ }
419
+ }
420
+ ```
421
+
422
+ ### Nesting and Named Containers
423
+
424
+ Name containers to target specific ancestors when containers are nested.
425
+
426
+ ```css
427
+ .layout { container-type: inline-size; container-name: layout; }
428
+ .sidebar { container-type: inline-size; container-name: sidebar; }
429
+
430
+ /* Target layout, not the nearest ancestor */
431
+ @container layout (min-width: 1024px) {
432
+ .article { padding-inline: 2rem; }
433
+ }
434
+ ```
435
+
436
+ ### React Integration Pattern
437
+
438
+ Pair container queries with a wrapper component to keep the containment declaration co-located with the component.
439
+
440
+ ```tsx
441
+ export function CardContainer({ children }: { children: React.ReactNode }) {
442
+ return (
443
+ <div className="card-container">
444
+ {children}
445
+ </div>
446
+ );
447
+ }
448
+ ```
449
+
450
+ ```css
451
+ .card-container {
452
+ container-type: inline-size;
453
+ container-name: card;
454
+ }
455
+ ```
456
+
457
+ ### DO / DON'T
458
+
459
+ - DO use container queries for component-level responsiveness and media queries for page-level layout.
460
+ - DO name containers when nesting container query contexts.
461
+ - DON'T use `container-type: size` unless you need to query block size — `inline-size` is sufficient for most layouts and has less layout impact.
462
+ - DON'T apply `container-type` directly to elements that participate in flex or grid layout — wrap them in a container element.
463
+ - DON'T replace all media queries with container queries; page-level layout (header, sidebar, footer) still belongs in media queries.