code-ai-installer 4.0.0 → 4.0.1-a

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 (471) hide show
  1. package/README.md +83 -67
  2. package/dist/index.js +2 -0
  3. package/dist/mcp/audit_ledger.d.ts +12 -0
  4. package/dist/mcp/audit_ledger.js +82 -0
  5. package/dist/mcp/cli.js +7 -1
  6. package/dist/mcp/config.d.ts +23 -0
  7. package/dist/mcp/config.js +36 -0
  8. package/dist/mcp/index.d.ts +1 -2
  9. package/dist/mcp/index.js +1 -2
  10. package/dist/mcp/paths.d.ts +20 -2
  11. package/dist/mcp/paths.js +29 -5
  12. package/dist/mcp/proposal_dedup.d.ts +32 -0
  13. package/dist/mcp/proposal_dedup.js +102 -0
  14. package/dist/mcp/proposal_store.d.ts +18 -0
  15. package/dist/mcp/proposal_store.js +74 -0
  16. package/dist/mcp/scorecard.d.ts +140 -0
  17. package/dist/mcp/scorecard.js +103 -0
  18. package/dist/mcp/skill_invocations.d.ts +15 -0
  19. package/dist/mcp/skill_invocations.js +28 -0
  20. package/dist/mcp/task_state.d.ts +77 -2
  21. package/dist/mcp/tools/_subprocess.d.ts +16 -0
  22. package/dist/mcp/tools/_subprocess.js +56 -0
  23. package/dist/mcp/tools/advance_gate.js +2 -2
  24. package/dist/mcp/tools/aggregate_run_metrics.d.ts +19 -0
  25. package/dist/mcp/tools/aggregate_run_metrics.js +139 -0
  26. package/dist/mcp/tools/apply_diff.d.ts +2 -0
  27. package/dist/mcp/tools/apply_diff.js +29 -0
  28. package/dist/mcp/tools/audit_bilocale_parity.d.ts +2 -0
  29. package/dist/mcp/tools/audit_bilocale_parity.js +146 -0
  30. package/dist/mcp/tools/audit_budget_compliance.d.ts +35 -0
  31. package/dist/mcp/tools/audit_budget_compliance.js +172 -0
  32. package/dist/mcp/tools/build.d.ts +2 -0
  33. package/dist/mcp/tools/build.js +47 -0
  34. package/dist/mcp/tools/check_lint.d.ts +2 -0
  35. package/dist/mcp/tools/check_lint.js +23 -0
  36. package/dist/mcp/tools/classify_gate.js +2 -2
  37. package/dist/mcp/tools/current_gate.js +2 -2
  38. package/dist/mcp/tools/dependency_supply_chain.d.ts +2 -0
  39. package/dist/mcp/tools/dependency_supply_chain.js +59 -0
  40. package/dist/mcp/tools/docker_compose.d.ts +2 -0
  41. package/dist/mcp/tools/docker_compose.js +24 -0
  42. package/dist/mcp/tools/e2e_playwright.d.ts +2 -0
  43. package/dist/mcp/tools/e2e_playwright.js +88 -0
  44. package/dist/mcp/tools/get_skill.js +17 -0
  45. package/dist/mcp/tools/git_commit.d.ts +2 -0
  46. package/dist/mcp/tools/git_commit.js +30 -0
  47. package/dist/mcp/tools/list_proposals.d.ts +6 -0
  48. package/dist/mcp/tools/list_proposals.js +16 -0
  49. package/dist/mcp/tools/list_skills.js +9 -1
  50. package/dist/mcp/tools/load_role.d.ts +3 -4
  51. package/dist/mcp/tools/load_role.js +11 -13
  52. package/dist/mcp/tools/propose_change.d.ts +8 -0
  53. package/dist/mcp/tools/propose_change.js +36 -0
  54. package/dist/mcp/tools/record_decision.js +25 -25
  55. package/dist/mcp/tools/review_proposal.d.ts +17 -0
  56. package/dist/mcp/tools/review_proposal.js +99 -0
  57. package/dist/mcp/tools/run_drift_audit.d.ts +11 -0
  58. package/dist/mcp/tools/run_drift_audit.js +79 -0
  59. package/dist/mcp/tools/run_tests.d.ts +2 -0
  60. package/dist/mcp/tools/run_tests.js +92 -0
  61. package/dist/mcp/tools/sign_off.js +14 -2
  62. package/dist/mcp/tools/stubs.js +30 -9
  63. package/dist/mcp/tools/verify_claim.js +33 -6
  64. package/dist/mcp_setup.d.ts +8 -0
  65. package/dist/mcp_setup.js +4 -1
  66. package/dist/shared/frontmatter.d.ts +44 -2
  67. package/dist/shared/frontmatter.js +54 -6
  68. package/dist/shared/index.d.ts +0 -5
  69. package/dist/shared/index.js +0 -5
  70. package/dist/shared/persona.d.ts +2 -2
  71. package/dist/shared/persona.js +1 -1
  72. package/dist/shared/pipeline.d.ts +46 -1
  73. package/dist/shared/tools.d.ts +1382 -16
  74. package/dist/shared/tools.js +229 -0
  75. package/dist/shared/vocabulary.d.ts +99 -4
  76. package/dist/shared/vocabulary.js +94 -5
  77. package/domains/analytics/.agents/skills/ansoff-matrix/SKILL.md +316 -300
  78. package/domains/analytics/.agents/skills/bcg-matrix/SKILL.md +345 -329
  79. package/domains/analytics/.agents/skills/blue-ocean-strategy/SKILL.md +432 -416
  80. package/domains/analytics/.agents/skills/board/SKILL.md +22 -0
  81. package/domains/analytics/.agents/skills/cohort-analysis/SKILL.md +338 -322
  82. package/domains/analytics/.agents/skills/competitive-analysis/SKILL.md +413 -395
  83. package/domains/analytics/.agents/skills/customer-journey-mapping/SKILL.md +347 -331
  84. package/domains/analytics/.agents/skills/gates/SKILL.md +388 -366
  85. package/domains/analytics/.agents/skills/handoff/SKILL.md +402 -380
  86. package/domains/analytics/.agents/skills/html-pdf-report/SKILL.md +21 -289
  87. package/domains/analytics/.agents/skills/html-pdf-report-reference/SKILL.md +325 -0
  88. package/domains/analytics/.agents/skills/html-pdf-report-reference/agents/claude.json +17 -0
  89. package/domains/analytics/.agents/skills/html-pdf-report-reference/agents/copilot.json +17 -0
  90. package/domains/analytics/.agents/skills/html-pdf-report-reference/agents/gemini.json +17 -0
  91. package/domains/analytics/.agents/skills/html-pdf-report-reference/agents/kimi.yaml +15 -0
  92. package/domains/analytics/.agents/skills/html-pdf-report-reference/agents/openai.yaml +10 -0
  93. package/domains/analytics/.agents/skills/html-pdf-report-reference/agents/qwen.json +17 -0
  94. package/domains/analytics/.agents/skills/html-pdf-report-reference/agents/skill.yaml +23 -0
  95. package/domains/analytics/.agents/skills/icp-buyer-persona/SKILL.md +407 -390
  96. package/domains/analytics/.agents/skills/jtbd-analysis/SKILL.md +357 -341
  97. package/domains/analytics/.agents/skills/karpathy-guidelines/SKILL.md +32 -0
  98. package/domains/analytics/.agents/skills/pest-analysis/SKILL.md +324 -305
  99. package/domains/analytics/.agents/skills/porters-five-forces/SKILL.md +377 -361
  100. package/domains/analytics/.agents/skills/report-design/SKILL.md +416 -398
  101. package/domains/analytics/.agents/skills/rfm-analysis/SKILL.md +330 -314
  102. package/domains/analytics/.agents/skills/session-prompt-generator/SKILL.md +400 -378
  103. package/domains/analytics/.agents/skills/swot-analysis/SKILL.md +340 -324
  104. package/domains/analytics/.agents/skills/tam-sam-som/SKILL.md +329 -312
  105. package/domains/analytics/.agents/skills/trend-analysis/SKILL.md +347 -331
  106. package/domains/analytics/.agents/skills/unit-economics/SKILL.md +430 -413
  107. package/domains/analytics/.agents/skills/value-chain-analysis/SKILL.md +346 -330
  108. package/domains/analytics/.agents/skills/web-research/SKILL.md +323 -308
  109. package/domains/analytics/AGENTS.md +1 -0
  110. package/domains/analytics/agents/auditor.md +76 -0
  111. package/domains/analytics/agents/conductor.md +11 -0
  112. package/domains/analytics/agents/data_analyst.md +11 -0
  113. package/domains/analytics/agents/designer.md +11 -0
  114. package/domains/analytics/agents/interviewer.md +11 -0
  115. package/domains/analytics/agents/layouter.md +11 -0
  116. package/domains/analytics/agents/mediator.md +11 -0
  117. package/domains/analytics/agents/researcher.md +11 -0
  118. package/domains/analytics/agents/strategist.md +11 -0
  119. package/domains/analytics/locales/en/.agents/skills/ansoff-matrix/SKILL.md +316 -300
  120. package/domains/analytics/locales/en/.agents/skills/bcg-matrix/SKILL.md +345 -329
  121. package/domains/analytics/locales/en/.agents/skills/blue-ocean-strategy/SKILL.md +432 -416
  122. package/domains/analytics/locales/en/.agents/skills/board/SKILL.md +22 -0
  123. package/domains/analytics/locales/en/.agents/skills/cohort-analysis/SKILL.md +338 -322
  124. package/domains/analytics/locales/en/.agents/skills/competitive-analysis/SKILL.md +413 -395
  125. package/domains/analytics/locales/en/.agents/skills/customer-journey-mapping/SKILL.md +347 -331
  126. package/domains/analytics/locales/en/.agents/skills/gates/SKILL.md +388 -366
  127. package/domains/analytics/locales/en/.agents/skills/handoff/SKILL.md +402 -380
  128. package/domains/analytics/locales/en/.agents/skills/html-pdf-report/SKILL.md +21 -289
  129. package/domains/analytics/locales/en/.agents/skills/html-pdf-report-reference/SKILL.md +325 -0
  130. package/domains/analytics/locales/en/.agents/skills/html-pdf-report-reference/agents/claude.json +17 -0
  131. package/domains/analytics/locales/en/.agents/skills/html-pdf-report-reference/agents/copilot.json +17 -0
  132. package/domains/analytics/locales/en/.agents/skills/html-pdf-report-reference/agents/gemini.json +17 -0
  133. package/domains/analytics/locales/en/.agents/skills/html-pdf-report-reference/agents/kimi.yaml +15 -0
  134. package/domains/analytics/locales/en/.agents/skills/html-pdf-report-reference/agents/openai.yaml +10 -0
  135. package/domains/analytics/locales/en/.agents/skills/html-pdf-report-reference/agents/qwen.json +17 -0
  136. package/domains/analytics/locales/en/.agents/skills/html-pdf-report-reference/agents/skill.yaml +29 -0
  137. package/domains/analytics/locales/en/.agents/skills/icp-buyer-persona/SKILL.md +407 -390
  138. package/domains/analytics/locales/en/.agents/skills/jtbd-analysis/SKILL.md +357 -341
  139. package/domains/analytics/locales/en/.agents/skills/karpathy-guidelines/SKILL.md +32 -0
  140. package/domains/analytics/locales/en/.agents/skills/pest-analysis/SKILL.md +324 -305
  141. package/domains/analytics/locales/en/.agents/skills/porters-five-forces/SKILL.md +377 -361
  142. package/domains/analytics/locales/en/.agents/skills/report-design/SKILL.md +416 -398
  143. package/domains/analytics/locales/en/.agents/skills/rfm-analysis/SKILL.md +330 -314
  144. package/domains/analytics/locales/en/.agents/skills/session-prompt-generator/SKILL.md +400 -378
  145. package/domains/analytics/locales/en/.agents/skills/swot-analysis/SKILL.md +340 -324
  146. package/domains/analytics/locales/en/.agents/skills/tam-sam-som/SKILL.md +329 -312
  147. package/domains/analytics/locales/en/.agents/skills/trend-analysis/SKILL.md +347 -331
  148. package/domains/analytics/locales/en/.agents/skills/unit-economics/SKILL.md +430 -413
  149. package/domains/analytics/locales/en/.agents/skills/value-chain-analysis/SKILL.md +366 -350
  150. package/domains/analytics/locales/en/.agents/skills/web-research/SKILL.md +324 -309
  151. package/domains/analytics/locales/en/AGENTS.md +1 -0
  152. package/domains/analytics/locales/en/agents/auditor.md +76 -0
  153. package/domains/analytics/locales/en/agents/conductor.md +27 -0
  154. package/domains/analytics/locales/en/agents/data_analyst.md +29 -0
  155. package/domains/analytics/locales/en/agents/designer.md +27 -0
  156. package/domains/analytics/locales/en/agents/interviewer.md +11 -0
  157. package/domains/analytics/locales/en/agents/layouter.md +11 -0
  158. package/domains/analytics/locales/en/agents/mediator.md +11 -0
  159. package/domains/analytics/locales/en/agents/researcher.md +11 -0
  160. package/domains/analytics/locales/en/agents/strategist.md +11 -0
  161. package/domains/analytics/persona/persona-base.md +94 -0
  162. package/domains/analytics/pipeline.yaml +102 -0
  163. package/domains/content/.agents/skills/audience-analysis/SKILL.md +15 -0
  164. package/domains/content/.agents/skills/board/SKILL.md +20 -0
  165. package/domains/content/.agents/skills/brand-compliance/SKILL.md +15 -0
  166. package/domains/content/.agents/skills/brand-guidelines/SKILL.md +17 -0
  167. package/domains/content/.agents/skills/competitor-content-analysis/SKILL.md +15 -0
  168. package/domains/content/.agents/skills/content-brief/SKILL.md +15 -0
  169. package/domains/content/.agents/skills/content-calendar/SKILL.md +15 -0
  170. package/domains/content/.agents/skills/content-release-gate/SKILL.md +15 -0
  171. package/domains/content/.agents/skills/content-review-checklist/SKILL.md +15 -0
  172. package/domains/content/.agents/skills/cta-optimization/SKILL.md +15 -0
  173. package/domains/content/.agents/skills/data-storytelling/SKILL.md +15 -0
  174. package/domains/content/.agents/skills/email-copywriting/SKILL.md +15 -0
  175. package/domains/content/.agents/skills/email-engagement-tiers/SKILL.md +15 -0
  176. package/domains/content/.agents/skills/fact-checking/SKILL.md +15 -0
  177. package/domains/content/.agents/skills/gates/SKILL.md +20 -0
  178. package/domains/content/.agents/skills/google-stitch-content/SKILL.md +15 -0
  179. package/domains/content/.agents/skills/handoff/SKILL.md +24 -0
  180. package/domains/content/.agents/skills/headline-formulas/SKILL.md +15 -0
  181. package/domains/content/.agents/skills/image-prompt-engineering/SKILL.md +15 -0
  182. package/domains/content/.agents/skills/karpathy-guidelines/SKILL.md +28 -0
  183. package/domains/content/.agents/skills/mailerlite-email-ops/SKILL.md +15 -0
  184. package/domains/content/.agents/skills/marketing-psychology/SKILL.md +15 -0
  185. package/domains/content/.agents/skills/moodboard/SKILL.md +15 -0
  186. package/domains/content/.agents/skills/platform-compliance/SKILL.md +15 -0
  187. package/domains/content/.agents/skills/platform-strategy/SKILL.md +15 -0
  188. package/domains/content/.agents/skills/platform-visual-specs/SKILL.md +15 -0
  189. package/domains/content/.agents/skills/readability-scoring/SKILL.md +15 -0
  190. package/domains/content/.agents/skills/seo-copywriting/SKILL.md +15 -0
  191. package/domains/content/.agents/skills/social-media-formats/SKILL.md +15 -0
  192. package/domains/content/.agents/skills/source-verification/SKILL.md +15 -0
  193. package/domains/content/.agents/skills/storytelling-framework/SKILL.md +15 -0
  194. package/domains/content/.agents/skills/tone-of-voice/SKILL.md +15 -0
  195. package/domains/content/.agents/skills/topic-research/SKILL.md +15 -0
  196. package/domains/content/.agents/skills/trend-research/SKILL.md +15 -0
  197. package/domains/content/.agents/skills/visual-brief/SKILL.md +15 -0
  198. package/domains/content/AGENTS.md +4 -0
  199. package/domains/content/agents/auditor.md +76 -0
  200. package/domains/content/agents/conductor.md +11 -0
  201. package/domains/content/agents/copywriter.md +11 -0
  202. package/domains/content/agents/researcher.md +11 -0
  203. package/domains/content/agents/reviewer.md +11 -0
  204. package/domains/content/agents/strategist.md +11 -0
  205. package/domains/content/agents/visual_concept.md +11 -0
  206. package/domains/content/locales/en/.agents/skills/audience-analysis/SKILL.md +15 -0
  207. package/domains/content/locales/en/.agents/skills/board/SKILL.md +20 -0
  208. package/domains/content/locales/en/.agents/skills/brand-compliance/SKILL.md +15 -0
  209. package/domains/content/locales/en/.agents/skills/brand-guidelines/SKILL.md +17 -0
  210. package/domains/content/locales/en/.agents/skills/competitor-content-analysis/SKILL.md +15 -0
  211. package/domains/content/locales/en/.agents/skills/content-brief/SKILL.md +15 -0
  212. package/domains/content/locales/en/.agents/skills/content-calendar/SKILL.md +15 -0
  213. package/domains/content/locales/en/.agents/skills/content-release-gate/SKILL.md +15 -0
  214. package/domains/content/locales/en/.agents/skills/content-review-checklist/SKILL.md +15 -0
  215. package/domains/content/locales/en/.agents/skills/cta-optimization/SKILL.md +15 -0
  216. package/domains/content/locales/en/.agents/skills/data-storytelling/SKILL.md +15 -0
  217. package/domains/content/locales/en/.agents/skills/email-copywriting/SKILL.md +15 -0
  218. package/domains/content/locales/en/.agents/skills/email-engagement-tiers/SKILL.md +15 -0
  219. package/domains/content/locales/en/.agents/skills/fact-checking/SKILL.md +15 -0
  220. package/domains/content/locales/en/.agents/skills/gates/SKILL.md +20 -0
  221. package/domains/content/locales/en/.agents/skills/google-stitch-content/SKILL.md +15 -0
  222. package/domains/content/locales/en/.agents/skills/handoff/SKILL.md +24 -0
  223. package/domains/content/locales/en/.agents/skills/headline-formulas/SKILL.md +15 -0
  224. package/domains/content/locales/en/.agents/skills/image-prompt-engineering/SKILL.md +15 -0
  225. package/domains/content/locales/en/.agents/skills/karpathy-guidelines/SKILL.md +30 -1
  226. package/domains/content/locales/en/.agents/skills/mailerlite-email-ops/SKILL.md +15 -0
  227. package/domains/content/locales/en/.agents/skills/marketing-psychology/SKILL.md +15 -0
  228. package/domains/content/locales/en/.agents/skills/moodboard/SKILL.md +15 -0
  229. package/domains/content/locales/en/.agents/skills/platform-compliance/SKILL.md +15 -0
  230. package/domains/content/locales/en/.agents/skills/platform-strategy/SKILL.md +15 -0
  231. package/domains/content/locales/en/.agents/skills/platform-visual-specs/SKILL.md +15 -0
  232. package/domains/content/locales/en/.agents/skills/readability-scoring/SKILL.md +15 -0
  233. package/domains/content/locales/en/.agents/skills/seo-copywriting/SKILL.md +15 -0
  234. package/domains/content/locales/en/.agents/skills/social-media-formats/SKILL.md +15 -0
  235. package/domains/content/locales/en/.agents/skills/source-verification/SKILL.md +15 -0
  236. package/domains/content/locales/en/.agents/skills/storytelling-framework/SKILL.md +15 -0
  237. package/domains/content/locales/en/.agents/skills/tone-of-voice/SKILL.md +15 -0
  238. package/domains/content/locales/en/.agents/skills/topic-research/SKILL.md +15 -0
  239. package/domains/content/locales/en/.agents/skills/trend-research/SKILL.md +15 -0
  240. package/domains/content/locales/en/.agents/skills/visual-brief/SKILL.md +15 -0
  241. package/domains/content/locales/en/AGENTS.md +4 -0
  242. package/domains/content/locales/en/agents/auditor.md +76 -0
  243. package/domains/content/locales/en/agents/conductor.md +12 -0
  244. package/domains/content/locales/en/agents/copywriter.md +12 -0
  245. package/domains/content/locales/en/agents/researcher.md +12 -0
  246. package/domains/content/locales/en/agents/reviewer.md +12 -0
  247. package/domains/content/locales/en/agents/strategist.md +12 -0
  248. package/domains/content/locales/en/agents/visual_concept.md +12 -0
  249. package/domains/content/persona/persona-base.md +94 -0
  250. package/domains/content/pipeline.yaml +96 -0
  251. package/domains/development/.agents/skills/adr-log/SKILL.md +1 -0
  252. package/domains/development/.agents/skills/design-intake/SKILL.md +0 -4
  253. package/domains/development/.agents/skills/karpathy-guidelines/SKILL.md +2 -1
  254. package/domains/development/.agents/skills/lava-flow-legacy-detection/SKILL.md +15 -1
  255. package/domains/development/.agents/skills/mcp-integration/SKILL.md +211 -0
  256. package/domains/development/.agents/skills/mcp-integration/agents/claude.json +22 -0
  257. package/domains/development/.agents/skills/mcp-integration/agents/copilot.json +22 -0
  258. package/domains/development/.agents/skills/mcp-integration/agents/gemini.json +22 -0
  259. package/domains/development/.agents/skills/mcp-integration/agents/kimi.yaml +18 -0
  260. package/domains/development/.agents/skills/mcp-integration/agents/openai.yaml +8 -0
  261. package/domains/development/.agents/skills/mcp-integration/agents/qwen.json +22 -0
  262. package/domains/development/.agents/skills/mcp-integration/agents/skill.yaml +26 -0
  263. package/domains/development/.agents/skills/qa-ui-a11y-smoke/SKILL.md +1 -1
  264. package/domains/development/.agents/skills/ui-a11y-smoke-review/SKILL.md +1 -1
  265. package/domains/development/AGENTS.md +1 -0
  266. package/domains/development/AGENTS.yaml +1 -0
  267. package/domains/development/agents/architect.md +13 -1
  268. package/domains/development/agents/auditor.md +74 -0
  269. package/domains/development/agents/conductor.md +14 -3
  270. package/domains/development/agents/devops.md +8 -9
  271. package/domains/development/agents/reviewer.md +12 -0
  272. package/domains/development/agents/senior_full_stack.md +12 -0
  273. package/domains/development/agents/tester.md +10 -16
  274. package/domains/development/locales/en/.agents/skills/adr-log/SKILL.md +1 -0
  275. package/domains/development/locales/en/.agents/skills/current-state-analysis/SKILL.md +256 -172
  276. package/domains/development/locales/en/.agents/skills/karpathy-guidelines/SKILL.md +2 -1
  277. package/domains/development/locales/en/.agents/skills/lava-flow-legacy-detection/SKILL.md +15 -1
  278. package/domains/development/locales/en/.agents/skills/mcp-integration/SKILL.md +211 -0
  279. package/domains/development/locales/en/.agents/skills/mcp-integration/agents/claude.json +22 -0
  280. package/domains/development/locales/en/.agents/skills/mcp-integration/agents/copilot.json +22 -0
  281. package/domains/development/locales/en/.agents/skills/mcp-integration/agents/gemini.json +22 -0
  282. package/domains/development/locales/en/.agents/skills/mcp-integration/agents/kimi.yaml +18 -0
  283. package/domains/development/locales/en/.agents/skills/mcp-integration/agents/openai.yaml +8 -0
  284. package/domains/development/locales/en/.agents/skills/mcp-integration/agents/qwen.json +22 -0
  285. package/domains/development/locales/en/.agents/skills/mcp-integration/agents/skill.yaml +26 -0
  286. package/domains/development/locales/en/.agents/skills/qa-ui-a11y-smoke/SKILL.md +1 -1
  287. package/domains/development/locales/en/.agents/skills/ui-a11y-smoke-review/SKILL.md +1 -1
  288. package/domains/development/locales/en/AGENTS.md +5 -0
  289. package/domains/development/locales/en/AGENTS.yaml +1 -0
  290. package/domains/development/locales/en/agents/architect.md +13 -1
  291. package/domains/development/locales/en/agents/auditor.md +74 -0
  292. package/domains/development/locales/en/agents/conductor.md +14 -3
  293. package/domains/development/locales/en/agents/devops.md +8 -9
  294. package/domains/development/locales/en/agents/reviewer.md +12 -0
  295. package/domains/development/locales/en/agents/senior_full_stack.md +12 -0
  296. package/domains/development/locales/en/agents/tester.md +10 -16
  297. package/domains/development/persona/persona-base.md +94 -0
  298. package/domains/product/.agents/skills/aarrr-metrics/SKILL.md +451 -433
  299. package/domains/product/.agents/skills/ab-test-design/SKILL.md +428 -412
  300. package/domains/product/.agents/skills/acceptance-criteria/SKILL.md +422 -406
  301. package/domains/product/.agents/skills/assumption-mapping/SKILL.md +323 -307
  302. package/domains/product/.agents/skills/board/SKILL.md +24 -0
  303. package/domains/product/.agents/skills/design-brief/SKILL.md +433 -418
  304. package/domains/product/.agents/skills/epic-breakdown/SKILL.md +435 -420
  305. package/domains/product/.agents/skills/gates/SKILL.md +470 -446
  306. package/domains/product/.agents/skills/gtm-brief/SKILL.md +18 -321
  307. package/domains/product/.agents/skills/gtm-brief-reference/SKILL.md +348 -0
  308. package/domains/product/.agents/skills/gtm-brief-reference/agents/claude.json +17 -0
  309. package/domains/product/.agents/skills/gtm-brief-reference/agents/copilot.json +17 -0
  310. package/domains/product/.agents/skills/gtm-brief-reference/agents/gemini.json +17 -0
  311. package/domains/product/.agents/skills/gtm-brief-reference/agents/kimi.yaml +15 -0
  312. package/domains/product/.agents/skills/gtm-brief-reference/agents/openai.yaml +10 -0
  313. package/domains/product/.agents/skills/gtm-brief-reference/agents/qwen.json +17 -0
  314. package/domains/product/.agents/skills/gtm-brief-reference/agents/skill.yaml +22 -0
  315. package/domains/product/.agents/skills/handoff/SKILL.md +463 -439
  316. package/domains/product/.agents/skills/html-pdf-report/SKILL.md +21 -663
  317. package/domains/product/.agents/skills/html-pdf-report-reference/SKILL.md +699 -0
  318. package/domains/product/.agents/skills/html-pdf-report-reference/agents/claude.json +17 -0
  319. package/domains/product/.agents/skills/html-pdf-report-reference/agents/copilot.json +17 -0
  320. package/domains/product/.agents/skills/html-pdf-report-reference/agents/gemini.json +17 -0
  321. package/domains/product/.agents/skills/html-pdf-report-reference/agents/kimi.yaml +15 -0
  322. package/domains/product/.agents/skills/html-pdf-report-reference/agents/openai.yaml +10 -0
  323. package/domains/product/.agents/skills/html-pdf-report-reference/agents/qwen.json +17 -0
  324. package/domains/product/.agents/skills/html-pdf-report-reference/agents/skill.yaml +22 -0
  325. package/domains/product/.agents/skills/hypothesis-template/SKILL.md +484 -469
  326. package/domains/product/.agents/skills/jtbd-canvas/SKILL.md +274 -258
  327. package/domains/product/.agents/skills/kano-model/SKILL.md +370 -355
  328. package/domains/product/.agents/skills/karpathy-guidelines/SKILL.md +36 -0
  329. package/domains/product/.agents/skills/launch-checklist/SKILL.md +434 -419
  330. package/domains/product/.agents/skills/moscow-prioritization/SKILL.md +407 -392
  331. package/domains/product/.agents/skills/north-star-metric/SKILL.md +317 -301
  332. package/domains/product/.agents/skills/okr-framework/SKILL.md +299 -284
  333. package/domains/product/.agents/skills/opportunity-solution-tree/SKILL.md +472 -456
  334. package/domains/product/.agents/skills/prd-template/SKILL.md +18 -258
  335. package/domains/product/.agents/skills/prd-template-reference/SKILL.md +285 -0
  336. package/domains/product/.agents/skills/prd-template-reference/agents/claude.json +17 -0
  337. package/domains/product/.agents/skills/prd-template-reference/agents/copilot.json +17 -0
  338. package/domains/product/.agents/skills/prd-template-reference/agents/gemini.json +17 -0
  339. package/domains/product/.agents/skills/prd-template-reference/agents/kimi.yaml +16 -0
  340. package/domains/product/.agents/skills/prd-template-reference/agents/openai.yaml +10 -0
  341. package/domains/product/.agents/skills/prd-template-reference/agents/qwen.json +17 -0
  342. package/domains/product/.agents/skills/prd-template-reference/agents/skill.yaml +23 -0
  343. package/domains/product/.agents/skills/problem-statement/SKILL.md +327 -312
  344. package/domains/product/.agents/skills/product-roadmap/SKILL.md +320 -304
  345. package/domains/product/.agents/skills/product-vision/SKILL.md +409 -394
  346. package/domains/product/.agents/skills/release-notes/SKILL.md +18 -258
  347. package/domains/product/.agents/skills/release-notes-reference/SKILL.md +285 -0
  348. package/domains/product/.agents/skills/release-notes-reference/agents/claude.json +17 -0
  349. package/domains/product/.agents/skills/release-notes-reference/agents/copilot.json +17 -0
  350. package/domains/product/.agents/skills/release-notes-reference/agents/gemini.json +17 -0
  351. package/domains/product/.agents/skills/release-notes-reference/agents/kimi.yaml +15 -0
  352. package/domains/product/.agents/skills/release-notes-reference/agents/openai.yaml +10 -0
  353. package/domains/product/.agents/skills/release-notes-reference/agents/qwen.json +17 -0
  354. package/domains/product/.agents/skills/release-notes-reference/agents/skill.yaml +22 -0
  355. package/domains/product/.agents/skills/report-design/SKILL.md +17 -307
  356. package/domains/product/.agents/skills/report-design-reference/SKILL.md +331 -0
  357. package/domains/product/.agents/skills/report-design-reference/agents/claude.json +17 -0
  358. package/domains/product/.agents/skills/report-design-reference/agents/copilot.json +17 -0
  359. package/domains/product/.agents/skills/report-design-reference/agents/gemini.json +17 -0
  360. package/domains/product/.agents/skills/report-design-reference/agents/kimi.yaml +15 -0
  361. package/domains/product/.agents/skills/report-design-reference/agents/openai.yaml +10 -0
  362. package/domains/product/.agents/skills/report-design-reference/agents/qwen.json +17 -0
  363. package/domains/product/.agents/skills/report-design-reference/agents/skill.yaml +22 -0
  364. package/domains/product/.agents/skills/rice-scoring/SKILL.md +266 -251
  365. package/domains/product/.agents/skills/saas-metrics/SKILL.md +422 -404
  366. package/domains/product/.agents/skills/session-prompt-generator/SKILL.md +474 -450
  367. package/domains/product/.agents/skills/user-flow/SKILL.md +491 -476
  368. package/domains/product/.agents/skills/user-interview-script/SKILL.md +315 -298
  369. package/domains/product/.agents/skills/user-story/SKILL.md +401 -385
  370. package/domains/product/.agents/skills/wsjf-scoring/SKILL.md +333 -315
  371. package/domains/product/AGENTS.md +5 -0
  372. package/domains/product/AGENTS.yaml +1 -0
  373. package/domains/product/agents/auditor.md +76 -0
  374. package/domains/product/agents/conductor.md +11 -0
  375. package/domains/product/agents/data_analyst.md +11 -0
  376. package/domains/product/agents/designer.md +11 -0
  377. package/domains/product/agents/discovery.md +11 -0
  378. package/domains/product/agents/layouter.md +11 -0
  379. package/domains/product/agents/mediator.md +11 -0
  380. package/domains/product/agents/pm.md +11 -0
  381. package/domains/product/agents/product_strategist.md +11 -0
  382. package/domains/product/agents/tech_lead.md +11 -0
  383. package/domains/product/agents/ux_designer.md +11 -0
  384. package/domains/product/locales/en/.agents/skills/aarrr-metrics/SKILL.md +451 -433
  385. package/domains/product/locales/en/.agents/skills/ab-test-design/SKILL.md +428 -412
  386. package/domains/product/locales/en/.agents/skills/acceptance-criteria/SKILL.md +422 -406
  387. package/domains/product/locales/en/.agents/skills/assumption-mapping/SKILL.md +323 -307
  388. package/domains/product/locales/en/.agents/skills/board/SKILL.md +24 -0
  389. package/domains/product/locales/en/.agents/skills/design-brief/SKILL.md +433 -418
  390. package/domains/product/locales/en/.agents/skills/epic-breakdown/SKILL.md +435 -420
  391. package/domains/product/locales/en/.agents/skills/gates/SKILL.md +470 -446
  392. package/domains/product/locales/en/.agents/skills/gtm-brief/SKILL.md +18 -321
  393. package/domains/product/locales/en/.agents/skills/gtm-brief-reference/SKILL.md +348 -0
  394. package/domains/product/locales/en/.agents/skills/gtm-brief-reference/agents/claude.json +17 -0
  395. package/domains/product/locales/en/.agents/skills/gtm-brief-reference/agents/copilot.json +17 -0
  396. package/domains/product/locales/en/.agents/skills/gtm-brief-reference/agents/gemini.json +17 -0
  397. package/domains/product/locales/en/.agents/skills/gtm-brief-reference/agents/kimi.yaml +15 -0
  398. package/domains/product/locales/en/.agents/skills/gtm-brief-reference/agents/openai.yaml +10 -0
  399. package/domains/product/locales/en/.agents/skills/gtm-brief-reference/agents/qwen.json +17 -0
  400. package/domains/product/locales/en/.agents/skills/gtm-brief-reference/agents/skill.yaml +22 -0
  401. package/domains/product/locales/en/.agents/skills/handoff/SKILL.md +463 -439
  402. package/domains/product/locales/en/.agents/skills/html-pdf-report/SKILL.md +21 -663
  403. package/domains/product/locales/en/.agents/skills/html-pdf-report-reference/SKILL.md +699 -0
  404. package/domains/product/locales/en/.agents/skills/html-pdf-report-reference/agents/claude.json +17 -0
  405. package/domains/product/locales/en/.agents/skills/html-pdf-report-reference/agents/copilot.json +17 -0
  406. package/domains/product/locales/en/.agents/skills/html-pdf-report-reference/agents/gemini.json +17 -0
  407. package/domains/product/locales/en/.agents/skills/html-pdf-report-reference/agents/kimi.yaml +15 -0
  408. package/domains/product/locales/en/.agents/skills/html-pdf-report-reference/agents/openai.yaml +10 -0
  409. package/domains/product/locales/en/.agents/skills/html-pdf-report-reference/agents/qwen.json +17 -0
  410. package/domains/product/locales/en/.agents/skills/html-pdf-report-reference/agents/skill.yaml +22 -0
  411. package/domains/product/locales/en/.agents/skills/hypothesis-template/SKILL.md +484 -469
  412. package/domains/product/locales/en/.agents/skills/jtbd-canvas/SKILL.md +273 -257
  413. package/domains/product/locales/en/.agents/skills/kano-model/SKILL.md +370 -355
  414. package/domains/product/locales/en/.agents/skills/karpathy-guidelines/SKILL.md +36 -0
  415. package/domains/product/locales/en/.agents/skills/launch-checklist/SKILL.md +434 -419
  416. package/domains/product/locales/en/.agents/skills/moscow-prioritization/SKILL.md +407 -392
  417. package/domains/product/locales/en/.agents/skills/north-star-metric/SKILL.md +317 -301
  418. package/domains/product/locales/en/.agents/skills/okr-framework/SKILL.md +299 -284
  419. package/domains/product/locales/en/.agents/skills/opportunity-solution-tree/SKILL.md +472 -456
  420. package/domains/product/locales/en/.agents/skills/prd-template/SKILL.md +18 -258
  421. package/domains/product/locales/en/.agents/skills/prd-template-reference/SKILL.md +285 -0
  422. package/domains/product/locales/en/.agents/skills/prd-template-reference/agents/claude.json +16 -0
  423. package/domains/product/locales/en/.agents/skills/prd-template-reference/agents/copilot.json +16 -0
  424. package/domains/product/locales/en/.agents/skills/prd-template-reference/agents/gemini.json +16 -0
  425. package/domains/product/locales/en/.agents/skills/prd-template-reference/agents/kimi.yaml +15 -0
  426. package/domains/product/locales/en/.agents/skills/prd-template-reference/agents/openai.yaml +10 -0
  427. package/domains/product/locales/en/.agents/skills/prd-template-reference/agents/qwen.json +16 -0
  428. package/domains/product/locales/en/.agents/skills/prd-template-reference/agents/skill.yaml +22 -0
  429. package/domains/product/locales/en/.agents/skills/problem-statement/SKILL.md +327 -312
  430. package/domains/product/locales/en/.agents/skills/product-roadmap/SKILL.md +321 -305
  431. package/domains/product/locales/en/.agents/skills/product-vision/SKILL.md +410 -395
  432. package/domains/product/locales/en/.agents/skills/release-notes/SKILL.md +18 -258
  433. package/domains/product/locales/en/.agents/skills/release-notes-reference/SKILL.md +285 -0
  434. package/domains/product/locales/en/.agents/skills/release-notes-reference/agents/claude.json +16 -0
  435. package/domains/product/locales/en/.agents/skills/release-notes-reference/agents/copilot.json +16 -0
  436. package/domains/product/locales/en/.agents/skills/release-notes-reference/agents/gemini.json +16 -0
  437. package/domains/product/locales/en/.agents/skills/release-notes-reference/agents/kimi.yaml +14 -0
  438. package/domains/product/locales/en/.agents/skills/release-notes-reference/agents/openai.yaml +10 -0
  439. package/domains/product/locales/en/.agents/skills/release-notes-reference/agents/qwen.json +16 -0
  440. package/domains/product/locales/en/.agents/skills/release-notes-reference/agents/skill.yaml +21 -0
  441. package/domains/product/locales/en/.agents/skills/report-design/SKILL.md +17 -307
  442. package/domains/product/locales/en/.agents/skills/report-design-reference/SKILL.md +331 -0
  443. package/domains/product/locales/en/.agents/skills/report-design-reference/agents/claude.json +17 -0
  444. package/domains/product/locales/en/.agents/skills/report-design-reference/agents/copilot.json +17 -0
  445. package/domains/product/locales/en/.agents/skills/report-design-reference/agents/gemini.json +17 -0
  446. package/domains/product/locales/en/.agents/skills/report-design-reference/agents/kimi.yaml +15 -0
  447. package/domains/product/locales/en/.agents/skills/report-design-reference/agents/openai.yaml +10 -0
  448. package/domains/product/locales/en/.agents/skills/report-design-reference/agents/qwen.json +17 -0
  449. package/domains/product/locales/en/.agents/skills/report-design-reference/agents/skill.yaml +22 -0
  450. package/domains/product/locales/en/.agents/skills/rice-scoring/SKILL.md +266 -251
  451. package/domains/product/locales/en/.agents/skills/saas-metrics/SKILL.md +422 -404
  452. package/domains/product/locales/en/.agents/skills/session-prompt-generator/SKILL.md +474 -450
  453. package/domains/product/locales/en/.agents/skills/user-flow/SKILL.md +491 -476
  454. package/domains/product/locales/en/.agents/skills/user-interview-script/SKILL.md +314 -297
  455. package/domains/product/locales/en/.agents/skills/user-story/SKILL.md +401 -385
  456. package/domains/product/locales/en/.agents/skills/wsjf-scoring/SKILL.md +333 -315
  457. package/domains/product/locales/en/AGENTS.md +5 -0
  458. package/domains/product/locales/en/agents/auditor.md +76 -0
  459. package/domains/product/locales/en/agents/conductor.md +11 -0
  460. package/domains/product/locales/en/agents/data_analyst.md +11 -0
  461. package/domains/product/locales/en/agents/designer.md +11 -0
  462. package/domains/product/locales/en/agents/discovery.md +11 -0
  463. package/domains/product/locales/en/agents/layouter.md +11 -0
  464. package/domains/product/locales/en/agents/mediator.md +11 -0
  465. package/domains/product/locales/en/agents/pm.md +11 -0
  466. package/domains/product/locales/en/agents/product_strategist.md +11 -0
  467. package/domains/product/locales/en/agents/tech_lead.md +11 -0
  468. package/domains/product/locales/en/agents/ux_designer.md +11 -0
  469. package/domains/product/persona/persona-base.md +94 -0
  470. package/domains/product/pipeline.yaml +115 -0
  471. package/package.json +72 -70
@@ -0,0 +1,699 @@
1
+ ---
2
+ name: html-pdf-report-reference
3
+ description: Генерация PRD или Product Review Deck из HTML/CSS в PDF — self-contained, print-ready — reference (code & worked-example library)
4
+ type: reference
5
+ domain: product
6
+ owners:
7
+ - layouter
8
+ gates:
9
+ - LAYOUTER
10
+ tech: []
11
+ topic: []
12
+ triggers:
13
+ - "html-pdf-report"
14
+ - "HTML PDF"
15
+ - "PRD PDF"
16
+ - "product review deck"
17
+ related:
18
+ - html-pdf-report
19
+ budget_lines: 699
20
+ schema_version: 1
21
+ ---
22
+ # html-pdf-report — Reference (code & worked-example library)
23
+
24
+ > Verbatim code blocks and the worked example extracted from `$html-pdf-report` (workflow). Copy-paste library; the procedure lives in the workflow skill.
25
+
26
+ ## Шаг 2 — CSS (Base + Print)
27
+
28
+ ```css
29
+ /* ========== RESET & BASE ========== */
30
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
31
+ body {
32
+ font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;
33
+ font-size: 11pt;
34
+ line-height: 1.6;
35
+ color: #1a1a2e;
36
+ background: #fff;
37
+ }
38
+ .report { max-width: 210mm; margin: 0 auto; padding: 20mm; }
39
+
40
+ /* ========== TYPOGRAPHY ========== */
41
+ h1 { font-size: 24pt; font-weight: 700; margin-bottom: 0.5em; color: var(--primary); }
42
+ h2 { font-size: 18pt; font-weight: 600; margin: 1.5em 0 0.5em; padding-bottom: 0.3em;
43
+ border-bottom: 2px solid var(--primary); color: var(--primary); }
44
+ h3 { font-size: 14pt; font-weight: 600; margin: 1.2em 0 0.4em; color: var(--secondary); }
45
+ h4 { font-size: 12pt; font-weight: 600; margin: 1em 0 0.3em; }
46
+ p { margin-bottom: 0.8em; }
47
+ blockquote { border-left: 4px solid var(--accent); padding: 0.8em 1.2em;
48
+ margin: 1em 0; background: var(--bg-light); font-style: italic; }
49
+
50
+ /* ========== CSS VARIABLES (из палитры) ========== */
51
+ :root {
52
+ --primary: #1a1a2e; /* Заменить из Design Spec */
53
+ --secondary: #16213e;
54
+ --accent: #0f3460;
55
+ --highlight: #e94560;
56
+ --bg-light: #f5f5f5;
57
+ --border: #e0e0e0;
58
+ --success: #2ecc71;
59
+ --warning: #f39c12;
60
+ --danger: #e74c3c;
61
+ }
62
+
63
+ /* ========== TITLE PAGE ========== */
64
+ .title-page {
65
+ display: flex; flex-direction: column; justify-content: center; align-items: center;
66
+ min-height: 100vh; text-align: center;
67
+ }
68
+ .title-page h1 { font-size: 32pt; margin-bottom: 0.3em; }
69
+ .title-page .subtitle { font-size: 16pt; color: var(--secondary); margin-bottom: 2em; }
70
+ .title-page .meta { font-size: 10pt; color: #666; }
71
+
72
+ /* ========== TOC ========== */
73
+ .toc-list { list-style: none; counter-reset: toc; }
74
+ .toc-list li { padding: 0.4em 0; border-bottom: 1px dotted var(--border); }
75
+ .toc-list li::before { counter-increment: toc; content: counter(toc) ". "; font-weight: 600; }
76
+ .toc-list a { text-decoration: none; color: var(--primary); }
77
+ .toc-list a:hover { color: var(--accent); }
78
+
79
+ /* ========== DATA TABLE ========== */
80
+ .data-table { width: 100%; border-collapse: collapse; margin: 1em 0; font-size: 10pt; }
81
+ .data-table th { background: var(--primary); color: #fff; padding: 8px 12px;
82
+ text-align: left; font-weight: 600; }
83
+ .data-table td { padding: 8px 12px; border-bottom: 1px solid var(--border); }
84
+ .data-table tr:nth-child(even) { background: var(--bg-light); }
85
+ .data-table .highlight { background: rgba(233, 69, 96, 0.1); font-weight: 600; }
86
+
87
+ /* ========== MATRIX 2x2 ========== */
88
+ .matrix-2x2 { display: grid; grid-template-columns: 1fr 1fr; gap: 2px;
89
+ margin: 1em 0; border: 2px solid var(--border); }
90
+ .matrix-2x2 .cell { padding: 1.2em; }
91
+ .matrix-2x2 .cell-header { background: var(--primary); color: #fff; font-weight: 600;
92
+ text-align: center; padding: 0.6em; }
93
+ .matrix-2x2 .cell-tl { background: #e8f5e9; } /* Top-left: green */
94
+ .matrix-2x2 .cell-tr { background: #fff3e0; } /* Top-right: orange */
95
+ .matrix-2x2 .cell-bl { background: #e3f2fd; } /* Bottom-left: blue */
96
+ .matrix-2x2 .cell-br { background: #fce4ec; } /* Bottom-right: red */
97
+
98
+ /* ========== CALLOUT BOX ========== */
99
+ .callout { padding: 1em 1.2em; margin: 1em 0; border-radius: 6px; border-left: 4px solid; }
100
+ .callout-info { background: #e3f2fd; border-color: #2196f3; }
101
+ .callout-success { background: #e8f5e9; border-color: var(--success); }
102
+ .callout-warning { background: #fff3e0; border-color: var(--warning); }
103
+ .callout-danger { background: #fce4ec; border-color: var(--danger); }
104
+ .callout-title { font-weight: 700; margin-bottom: 0.3em; }
105
+
106
+ /* ========== PULL QUOTE ========== */
107
+ .pull-quote { font-size: 14pt; font-weight: 300; text-align: center;
108
+ padding: 1.5em 2em; margin: 1.5em 0; color: var(--accent);
109
+ border-top: 2px solid var(--accent); border-bottom: 2px solid var(--accent); }
110
+
111
+ /* ========== CHART CONTAINER ========== */
112
+ .chart-container { position: relative; margin: 1.5em 0; max-width: 100%; }
113
+ .chart-container canvas { max-width: 100%; }
114
+ .chart-container figcaption { font-size: 9pt; color: #666; text-align: center;
115
+ margin-top: 0.5em; font-style: italic; }
116
+
117
+ /* ========== SCORE / BADGE ========== */
118
+ .score-badge { display: inline-block; padding: 0.2em 0.8em; border-radius: 12px;
119
+ font-weight: 700; font-size: 10pt; }
120
+ .score-high { background: var(--success); color: #fff; }
121
+ .score-mid { background: var(--warning); color: #fff; }
122
+ .score-low { background: var(--danger); color: #fff; }
123
+
124
+ /* ========== PRINT ========== */
125
+ @media print {
126
+ @page { size: A4 portrait; margin: 20mm; }
127
+ body { font-size: 10pt; }
128
+ .report { max-width: none; padding: 0; }
129
+ .title-page { min-height: auto; page-break-after: always; }
130
+ .toc { page-break-after: always; }
131
+ .executive-summary { page-break-after: always; }
132
+ .appendix { page-break-before: always; }
133
+ .data-table, .chart-container, .matrix-2x2, .mermaid, figure {
134
+ page-break-inside: avoid;
135
+ }
136
+ h2, h3 { page-break-after: avoid; }
137
+ .callout { page-break-inside: avoid; }
138
+ a { color: inherit; text-decoration: none; }
139
+ canvas { max-width: 100% !important; height: auto !important; }
140
+ }
141
+ ```
142
+
143
+ ## Шаг 3 — Chart.js
144
+
145
+ ```javascript
146
+ // ========== BAR CHART (сравнение конкурентов, scoring) ==========
147
+ new Chart(document.getElementById('chart-competitors'), {
148
+ type: 'bar',
149
+ data: {
150
+ labels: ['Конкурент A', 'Конкурент B', 'Конкурент C', 'Наш продукт'],
151
+ datasets: [{
152
+ label: 'Threat Score',
153
+ data: [7.2, 7.3, 4.8, null],
154
+ backgroundColor: ['#e74c3c', '#e74c3c', '#f39c12', '#2ecc71'],
155
+ borderWidth: 0,
156
+ borderRadius: 4
157
+ }]
158
+ },
159
+ options: {
160
+ animation: false, responsive: true,
161
+ plugins: { legend: { display: false },
162
+ title: { display: true, text: 'Threat Score конкурентов', font: { size: 14 } } },
163
+ scales: { y: { beginAtZero: true, max: 10, title: { display: true, text: 'Score' } } }
164
+ }
165
+ });
166
+
167
+ // ========== RADAR CHART (мультикритериальное сравнение) ==========
168
+ new Chart(document.getElementById('chart-radar'), {
169
+ type: 'radar',
170
+ data: {
171
+ labels: ['Функционал', 'Цена', 'UX', 'Поддержка', 'Экосистема', 'Бренд'],
172
+ datasets: [
173
+ { label: 'Наш продукт', data: [7, 8, 6, 5, 4, 3],
174
+ borderColor: '#0f3460', backgroundColor: 'rgba(15,52,96,0.1)', borderWidth: 2 },
175
+ { label: 'Лидер рынка', data: [9, 4, 8, 7, 9, 9],
176
+ borderColor: '#e94560', backgroundColor: 'rgba(233,69,96,0.1)', borderWidth: 2 }
177
+ ]
178
+ },
179
+ options: {
180
+ animation: false, responsive: true,
181
+ scales: { r: { beginAtZero: true, max: 10, ticks: { stepSize: 2 } } }
182
+ }
183
+ });
184
+
185
+ // ========== PIE / DOUGHNUT (доли, распределение) ==========
186
+ new Chart(document.getElementById('chart-share'), {
187
+ type: 'doughnut',
188
+ data: {
189
+ labels: ['Сегмент A', 'Сегмент B', 'Сегмент C', 'Прочие'],
190
+ datasets: [{ data: [35, 28, 22, 15],
191
+ backgroundColor: ['#1a1a2e', '#0f3460', '#e94560', '#ccc'],
192
+ borderWidth: 2, borderColor: '#fff' }]
193
+ },
194
+ options: {
195
+ animation: false, responsive: true,
196
+ plugins: { legend: { position: 'right' } }
197
+ }
198
+ });
199
+
200
+ // ========== LINE CHART (тренды, retention curves) ==========
201
+ new Chart(document.getElementById('chart-retention'), {
202
+ type: 'line',
203
+ data: {
204
+ labels: ['M0', 'M1', 'M2', 'M3', 'M6', 'M12'],
205
+ datasets: [
206
+ { label: 'Когорта Янв', data: [100, 42, 31, 26, 20, 16],
207
+ borderColor: '#e94560', fill: false, tension: 0.3 },
208
+ { label: 'Когорта Мар', data: [100, 55, 44, 38, null, null],
209
+ borderColor: '#2ecc71', fill: false, tension: 0.3 }
210
+ ]
211
+ },
212
+ options: {
213
+ animation: false, responsive: true,
214
+ scales: { y: { beginAtZero: true, max: 100, title: { display: true, text: 'Retention %' } } }
215
+ }
216
+ });
217
+
218
+ // ========== SCATTER (позиционирование 2D) ==========
219
+ new Chart(document.getElementById('chart-positioning'), {
220
+ type: 'scatter',
221
+ data: {
222
+ datasets: [
223
+ { label: 'Конкурент A', data: [{ x: 8, y: 7 }], pointRadius: 10,
224
+ backgroundColor: '#e74c3c' },
225
+ { label: 'Наш продукт', data: [{ x: 5, y: 6 }], pointRadius: 12,
226
+ backgroundColor: '#2ecc71', pointStyle: 'star' }
227
+ ]
228
+ },
229
+ options: {
230
+ animation: false, responsive: true,
231
+ scales: {
232
+ x: { min: 0, max: 10, title: { display: true, text: 'Функционал' } },
233
+ y: { min: 0, max: 10, title: { display: true, text: 'Цена' } }
234
+ }
235
+ }
236
+ });
237
+ ```
238
+
239
+ ## Шаг 4 — Mermaid
240
+
241
+ ```html
242
+ <!-- ========== FLOWCHART (процессы, пайплайны) ========== -->
243
+ <div class="mermaid">
244
+ flowchart TD
245
+ A[Awareness] --> B[Consideration]
246
+ B --> C[Decision]
247
+ C --> D[Purchase]
248
+ D --> E[Retention]
249
+ E --> F[Advocacy]
250
+ E -.->|churn| G[Exit]
251
+ style G fill:#fce4ec,stroke:#e74c3c
252
+ </div>
253
+
254
+ <!-- ========== MINDMAP (структура, иерархия) ========== -->
255
+ <div class="mermaid">
256
+ mindmap
257
+ root((Стратегия роста))
258
+ Проникновение
259
+ Upsell
260
+ Cross-sell
261
+ Развитие рынка
262
+ СНГ
263
+ Enterprise
264
+ Развитие продукта
265
+ AI-модуль
266
+ Mobile app
267
+ Диверсификация
268
+ White-label
269
+ </div>
270
+
271
+ <!-- ========== QUADRANT CHART (матрицы 2x2) ========== -->
272
+ <div class="mermaid">
273
+ quadrantChart
274
+ title Impact vs Effort
275
+ x-axis Low Effort --> High Effort
276
+ y-axis Low Impact --> High Impact
277
+ quadrant-1 Big Bets
278
+ quadrant-2 Quick Wins
279
+ quadrant-3 Fill-ins
280
+ quadrant-4 Avoid
281
+ Action A: [0.3, 0.8]
282
+ Action B: [0.7, 0.9]
283
+ Action C: [0.2, 0.3]
284
+ </div>
285
+ ```
286
+
287
+ ## Пример — Секция Executive Summary
288
+
289
+ ```html
290
+ <section class="executive-summary" id="executive-summary">
291
+ <h2>Executive Summary</h2>
292
+
293
+ <div class="pull-quote">
294
+ «AI-powered 1:1 summarization решает 45-60 мин/week admin overhead для 5,000+
295
+ managers в TeamFlow base. Projected +$2.4M ARR expansion за 12 мес, NRR +4pp.»
296
+ </div>
297
+
298
+ <h3>Ключевые выводы</h3>
299
+ <div class="callout callout-success">
300
+ <div class="callout-title">✅ Главный инсайт</div>
301
+ <p>Mid-market и enterprise customers готовы платить $8-12/seat premium за AI summarization.
302
+ 6 of 8 buyer interviews подтверждают value, 4/4 enterprise accounts ready для beta.</p>
303
+ </div>
304
+
305
+ <table class="data-table">
306
+ <caption>Сводка по ключевым метрикам</caption>
307
+ <thead>
308
+ <tr><th scope="col">Метрика</th><th scope="col">Значение</th><th scope="col">Бенчмарк</th><th scope="col">Оценка</th></tr>
309
+ </thead>
310
+ <tbody>
311
+ <tr><td>TAM</td><td>$4.2B</td><td>—</td>
312
+ <td><span class="score-badge score-high">Крупный</span></td></tr>
313
+ <tr><td>SOM (Year 1)</td><td>$180M</td><td>—</td>
314
+ <td><span class="score-badge score-mid">Средний</span></td></tr>
315
+ <tr><td>Главная угроза</td><td>Яндекс Практикум</td><td>Score 7.6</td>
316
+ <td><span class="score-badge score-low">High</span></td></tr>
317
+ </tbody>
318
+ </table>
319
+
320
+ <figure class="chart-container" role="img" aria-label="Threat Score: Skillbox 7.2, Нетология 6.8, Яндекс 7.6, GeekBrains 4.1, Skyeng 5.3">
321
+ <canvas id="chart-exec-threats"></canvas>
322
+ <figcaption>Рис. 1 — Threat Score ключевых конкурентов</figcaption>
323
+ </figure>
324
+ </section>
325
+ ```
326
+
327
+ ## Worked Example — TeamFlow Product Review Deck (HTML skeleton)
328
+
329
+ **Контекст:** Full Pipeline A `/ship-right-thing` завершён. Дизайнер подготовил design spec (см. `$report-design`). Верстальщик конвертирует в production HTML/PDF — Product Review Deck для exec sign-off.
330
+
331
+ ### Целевая структура
332
+
333
+ - 12 страниц в стиле слайдов (каждая отделена `page-break`)
334
+ - Cover → TL;DR → Проблема → Стратегия → PRD highlights → Метрики → Риски → Роллаут → Приложения
335
+ - Executive-стиль: плотный, но читаемый, без декоративных элементов, данные на первом плане
336
+ - Целевой размер PDF < 5MB для рассылки по email
337
+
338
+ ### Self-contained HTML Skeleton
339
+
340
+ ```html
341
+ <!DOCTYPE html>
342
+ <html lang="en">
343
+ <head>
344
+ <meta charset="UTF-8">
345
+ <title>TeamFlow AI Summarization — Product Review Deck · Q2 2026</title>
346
+ <meta name="description" content="Product Review Deck for executive sign-off: AI-powered 1:1 summarization initiative">
347
+ <style>
348
+ /* ============ CSS Tokens ============ */
349
+ :root {
350
+ --color-primary: #0A2540; /* TeamFlow deep blue */
351
+ --color-accent: #F2A900; /* TeamFlow amber */
352
+ --color-text: #1A1A1A;
353
+ --color-text-muted: #6B6B6B;
354
+ --color-bg: #FFFFFF;
355
+ --color-bg-alt: #F7F9FB;
356
+ --color-success: #22A06B;
357
+ --color-warning: #E67E22;
358
+ --color-danger: #C0392B;
359
+ --color-border: #E1E4E8;
360
+ --font-body: 'Inter', -apple-system, sans-serif;
361
+ --font-serif: 'Source Serif Pro', Georgia, serif;
362
+ --space-1: 4px; --space-2: 8px; --space-3: 16px;
363
+ --space-4: 24px; --space-5: 32px; --space-6: 48px;
364
+ }
365
+
366
+ /* ============ Reset + Base ============ */
367
+ * { margin: 0; padding: 0; box-sizing: border-box; }
368
+ body {
369
+ font-family: var(--font-body);
370
+ color: var(--color-text);
371
+ font-size: 14px;
372
+ line-height: 1.5;
373
+ background: var(--color-bg);
374
+ }
375
+
376
+ /* ============ Page Structure (print-ready) ============ */
377
+ @page {
378
+ size: A4 portrait;
379
+ margin: 2cm 1.8cm;
380
+ }
381
+ .page {
382
+ page-break-after: always;
383
+ min-height: 24cm;
384
+ padding: 2cm 1.5cm;
385
+ position: relative;
386
+ }
387
+ .page:last-child { page-break-after: auto; }
388
+ .page-footer {
389
+ position: absolute;
390
+ bottom: 0.8cm;
391
+ left: 1.5cm;
392
+ right: 1.5cm;
393
+ font-size: 10px;
394
+ color: var(--color-text-muted);
395
+ border-top: 1px solid var(--color-border);
396
+ padding-top: 8px;
397
+ display: flex;
398
+ justify-content: space-between;
399
+ }
400
+ @media screen { .page { border-bottom: 2px dashed var(--color-border); margin-bottom: 2cm; } }
401
+
402
+ /* ============ Typography ============ */
403
+ h1 { font-size: 32px; font-weight: 700; color: var(--color-primary); letter-spacing: -0.5px; margin-bottom: var(--space-4); }
404
+ h2 { font-size: 22px; font-weight: 600; color: var(--color-primary); margin: var(--space-5) 0 var(--space-3); }
405
+ h3 { font-size: 16px; font-weight: 600; color: var(--color-text); margin: var(--space-3) 0 var(--space-2); }
406
+ p { margin-bottom: var(--space-2); }
407
+ .lead { font-size: 16px; line-height: 1.6; color: var(--color-text); }
408
+ .pull-quote {
409
+ font-family: var(--font-serif);
410
+ font-size: 20px; line-height: 1.4;
411
+ color: var(--color-primary);
412
+ border-left: 3px solid var(--color-accent);
413
+ padding: var(--space-3) var(--space-4);
414
+ margin: var(--space-4) 0;
415
+ background: var(--color-bg-alt);
416
+ }
417
+
418
+ /* ============ Components ============ */
419
+ .meta-bar {
420
+ display: flex;
421
+ justify-content: space-between;
422
+ border-top: 3px solid var(--color-accent);
423
+ border-bottom: 1px solid var(--color-border);
424
+ padding: var(--space-3) 0;
425
+ font-size: 12px;
426
+ color: var(--color-text-muted);
427
+ margin-bottom: var(--space-5);
428
+ }
429
+ .callout {
430
+ border-left: 4px solid var(--color-accent);
431
+ padding: var(--space-3);
432
+ background: var(--color-bg-alt);
433
+ margin: var(--space-3) 0;
434
+ }
435
+ .callout-title {
436
+ font-weight: 600;
437
+ color: var(--color-primary);
438
+ margin-bottom: var(--space-1);
439
+ }
440
+ .callout-success { border-left-color: var(--color-success); }
441
+ .callout-warning { border-left-color: var(--color-warning); }
442
+ .callout-danger { border-left-color: var(--color-danger); }
443
+
444
+ table {
445
+ width: 100%;
446
+ border-collapse: collapse;
447
+ margin: var(--space-3) 0;
448
+ font-size: 12px;
449
+ }
450
+ th, td {
451
+ padding: var(--space-2) var(--space-3);
452
+ text-align: left;
453
+ border-bottom: 1px solid var(--color-border);
454
+ }
455
+ th {
456
+ font-weight: 600;
457
+ background: var(--color-bg-alt);
458
+ color: var(--color-primary);
459
+ }
460
+ tr:hover { background: var(--color-bg-alt); }
461
+ .metric-positive { color: var(--color-success); font-weight: 600; }
462
+ .metric-negative { color: var(--color-danger); font-weight: 600; }
463
+ .metric-neutral { color: var(--color-text-muted); }
464
+
465
+ .status-badge {
466
+ display: inline-block;
467
+ padding: 2px 8px;
468
+ font-size: 10px;
469
+ font-weight: 600;
470
+ border-radius: 3px;
471
+ text-transform: uppercase;
472
+ }
473
+ .status-green { background: var(--color-success); color: white; }
474
+ .status-amber { background: var(--color-warning); color: white; }
475
+ .status-red { background: var(--color-danger); color: white; }
476
+
477
+ /* Grid layouts */
478
+ .grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); }
479
+ .grid-3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: var(--space-3); }
480
+ .kpi-card {
481
+ padding: var(--space-4);
482
+ background: var(--color-bg-alt);
483
+ border: 1px solid var(--color-border);
484
+ border-left: 3px solid var(--color-accent);
485
+ }
486
+ .kpi-value {
487
+ font-size: 32px; font-weight: 700;
488
+ color: var(--color-primary);
489
+ margin-bottom: var(--space-1);
490
+ }
491
+ .kpi-label {
492
+ font-size: 11px;
493
+ color: var(--color-text-muted);
494
+ text-transform: uppercase;
495
+ letter-spacing: 0.5px;
496
+ }
497
+
498
+ /* Roadmap columns */
499
+ .roadmap {
500
+ display: grid;
501
+ grid-template-columns: 1fr 1fr 1fr;
502
+ gap: var(--space-3);
503
+ margin: var(--space-4) 0;
504
+ }
505
+ .roadmap-column {
506
+ padding: var(--space-3);
507
+ background: var(--color-bg-alt);
508
+ border-top: 3px solid var(--color-accent);
509
+ }
510
+ .roadmap-column h4 {
511
+ font-size: 13px;
512
+ font-weight: 700;
513
+ text-transform: uppercase;
514
+ color: var(--color-primary);
515
+ margin-bottom: var(--space-2);
516
+ }
517
+ .roadmap-column ul { list-style: none; padding-left: 0; }
518
+ .roadmap-column li { padding: 6px 0; border-bottom: 1px solid var(--color-border); font-size: 12px; }
519
+
520
+ /* ============ Print Optimizations ============ */
521
+ @media print {
522
+ body { print-color-adjust: exact; -webkit-print-color-adjust: exact; }
523
+ .page { page-break-after: always; }
524
+ table { page-break-inside: avoid; }
525
+ .callout { page-break-inside: avoid; }
526
+ h2, h3 { page-break-after: avoid; }
527
+ }
528
+ </style>
529
+ </head>
530
+ <body>
531
+
532
+ <!-- PAGE 1: COVER -->
533
+ <section class="page" id="cover">
534
+ <div style="margin-top: 8cm; text-align: center;">
535
+ <p style="font-size: 13px; color: var(--color-text-muted); letter-spacing: 2px;">PRODUCT REVIEW DECK · CONFIDENTIAL</p>
536
+ <h1 style="font-size: 42px; margin-top: var(--space-4);">AI 1:1 Summarization</h1>
537
+ <p class="lead" style="margin-top: var(--space-3); color: var(--color-text-muted);">
538
+ TeamFlow Q2 2026 Launch Proposal · Executive Sign-Off
539
+ </p>
540
+ <div style="margin-top: 4cm;">
541
+ <p style="font-size: 12px; color: var(--color-text-muted);">Prepared by Product Team · April 17, 2026</p>
542
+ <p style="font-size: 12px; color: var(--color-text-muted);">Alex K., Product · Priya S., Engineering · Jordan M., Design · Sam P., Data</p>
543
+ </div>
544
+ </div>
545
+ </section>
546
+
547
+ <!-- PAGE 2: TL;DR / EXECUTIVE SUMMARY -->
548
+ <section class="page" id="summary">
549
+ <div class="meta-bar">
550
+ <span>TeamFlow AI Summarization</span>
551
+ <span>Page 2 · Executive Summary</span>
552
+ </div>
553
+ <h1>Executive Summary</h1>
554
+ <div class="pull-quote">
555
+ «AI-powered 1:1 summarization решает 45-60 мин/week admin overhead для 3,000+ managers в TeamFlow base. Projected +$2.4M ARR expansion за 12 мес, NRR +4pp.»
556
+ </div>
557
+ <div class="grid-3" style="margin: var(--space-5) 0;">
558
+ <div class="kpi-card">
559
+ <div class="kpi-value">40</div>
560
+ <div class="kpi-label">Target Team Tier Upgrades (Q2)</div>
561
+ </div>
562
+ <div class="kpi-card">
563
+ <div class="kpi-value">+$8</div>
564
+ <div class="kpi-label">Per-Seat Premium (Team Tier)</div>
565
+ </div>
566
+ <div class="kpi-card">
567
+ <div class="kpi-value">3 hrs</div>
568
+ <div class="kpi-label">Weekly Manager Time Saved</div>
569
+ </div>
570
+ </div>
571
+ <h2>What we're proposing</h2>
572
+ <p class="lead">Launch AI Summarization as flagship feature of new Team Tier ($23/seat/month). Core capability: generate structured summary + action items within 60 seconds of 1:1 meeting end. Privacy-first architecture — opt-in per meeting, zero data retention с LLM providers, SOC 2 Type II attestation.</p>
573
+ <h2>Why now</h2>
574
+ <p class="lead">Mid-market и enterprise customers face growing manager efficiency crisis — 3-4 hrs/week admin burden is #2 churn risk factor per exit interviews. Competitors (Lattice, 15Five) haven't shipped AI summarization — 6-12 month first-mover window exists. Our 3-year behavioral data corpus enables superior quality vs standalone tools.</p>
575
+ <div class="callout callout-success">
576
+ <div class="callout-title">Expected Outcome</div>
577
+ <p>Mid-market base ($5M ARR) → +30% NRR lift over 12 months via Team Tier upgrades. Enterprise tier foundation enables $2-3M ARR expansion opportunity через Q3.</p>
578
+ </div>
579
+ <div class="page-footer">
580
+ <span>TeamFlow AI Summarization · Product Review · April 17, 2026</span>
581
+ <span>2 / 12</span>
582
+ </div>
583
+ </section>
584
+
585
+ <!-- PAGE 3: PROBLEM -->
586
+ <section class="page" id="problem">
587
+ <div class="meta-bar">
588
+ <span>TeamFlow AI Summarization</span>
589
+ <span>Page 3 · The Problem</span>
590
+ </div>
591
+ <h1>The Problem</h1>
592
+ <p class="lead">People managers managing 5-15 direct reports at mid-market B2B SaaS companies experience severe admin overhead in 1:1 workflow. This manifests across three dimensions:</p>
593
+
594
+ <div class="grid-3" style="margin: var(--space-4) 0;">
595
+ <div class="kpi-card">
596
+ <div class="kpi-value" style="color: var(--color-danger);">3-4 hrs</div>
597
+ <div class="kpi-label">Manager admin time / week on 1:1s (8 reports avg)</div>
598
+ </div>
599
+ <div class="kpi-card">
600
+ <div class="kpi-value" style="color: var(--color-danger);">40%</div>
601
+ <div class="kpi-label">Action items dropped / never completed</div>
602
+ </div>
603
+ <div class="kpi-card">
604
+ <div class="kpi-value" style="color: var(--color-danger);">0%</div>
605
+ <div class="kpi-label">VP HR visibility into manager 1:1 quality</div>
606
+ </div>
607
+ </div>
608
+
609
+ <h2>Evidence from Discovery</h2>
610
+ <p>8 customer interviews (4 buyers VP HR, 4 end-user managers) + 120 support tickets Q1 2026 + internal product analytics. Direct quotes:</p>
611
+
612
+ <div class="callout">
613
+ <p><em>«25 минут prep каждую неделю на каждого из 8 reports. Итого ~3 часа в неделю.»</em></p>
614
+ <p style="text-align: right; font-size: 11px; margin-top: 8px; color: var(--color-text-muted);">— Interview E3 (Engineering Manager, mid-market)</p>
615
+ </div>
616
+ <div class="callout">
617
+ <p><em>«Some managers run amazing 1:1s, others literally cancel them. I have no visibility, no levers.»</em></p>
618
+ <p style="text-align: right; font-size: 11px; margin-top: 8px; color: var(--color-text-muted);">— Interview B2 (VP HR, 450-employee B2B SaaS)</p>
619
+ </div>
620
+
621
+ <div class="page-footer">
622
+ <span>TeamFlow AI Summarization · Product Review · April 17, 2026</span>
623
+ <span>3 / 12</span>
624
+ </div>
625
+ </section>
626
+
627
+ <!-- PAGES 4-12: abbreviated ... full deck continues with Strategy / PRD / Metrics / Risks / Rollout / Appendix -->
628
+
629
+ <!-- PAGE 12: APPENDIX — Roadmap -->
630
+ <section class="page" id="roadmap">
631
+ <div class="meta-bar">
632
+ <span>TeamFlow AI Summarization</span>
633
+ <span>Page 12 · Roadmap</span>
634
+ </div>
635
+ <h1>Product Roadmap — Now / Next / Later</h1>
636
+ <div class="roadmap">
637
+ <div class="roadmap-column">
638
+ <h4>Now (Q2 2026)</h4>
639
+ <ul>
640
+ <li>✨ AI Summarization Core (Team Tier)</li>
641
+ <li>✨ Auto Action Items Extraction</li>
642
+ <li>✨ Action Items Reminders</li>
643
+ <li>🔐 SOC 2 Type II (AI features)</li>
644
+ <li>🔐 SSO SAML + SCIM</li>
645
+ </ul>
646
+ </div>
647
+ <div class="roadmap-column">
648
+ <h4>Next (Q3 2026)</h4>
649
+ <ul>
650
+ <li>📊 Aggregate Dashboard (Enterprise)</li>
651
+ <li>⏱️ Real-time Transcription</li>
652
+ <li>🎯 Manager Health Score</li>
653
+ <li>🔗 Zoom / Meet Import</li>
654
+ </ul>
655
+ </div>
656
+ <div class="roadmap-column">
657
+ <h4>Later (Q4+)</h4>
658
+ <ul>
659
+ <li>🌍 Multi-language Support</li>
660
+ <li>📱 Native Mobile App</li>
661
+ <li>🔍 AI Coaching Insights</li>
662
+ <li>📈 Predictive Attrition Model</li>
663
+ </ul>
664
+ </div>
665
+ </div>
666
+ <div class="page-footer">
667
+ <span>TeamFlow AI Summarization · Product Review · April 17, 2026</span>
668
+ <span>12 / 12</span>
669
+ </div>
670
+ </section>
671
+
672
+ </body>
673
+ </html>
674
+ ```
675
+
676
+ ### Проверки качества пройдены
677
+ - [x] Self-contained (единый HTML-файл, весь CSS встроен)
678
+ - [x] Отсутствие битых ссылок
679
+ - [x] Print-ready (директивы @page, @media print)
680
+ - [x] Page breaks между секциями
681
+ - [x] Executive-плотность без перегруза
682
+ - [x] Цвета соответствуют бренду TeamFlow (тёмно-синий + янтарный)
683
+ - [x] Доступность (семантический HTML, alt text на изображениях при наличии)
684
+ - [x] Оценочный размер файла < 2MB (без встроенных изображений; с логотипами/графиками возможен рост до 3-4MB)
685
+
686
+ ### PDF Generation
687
+
688
+ ```bash
689
+ # Via puppeteer (preferred, automation-friendly)
690
+ puppeteer-pdf product-review-deck.html --format=A4 --margin-top=2cm --print-background
691
+
692
+ # Via WeasyPrint
693
+ weasyprint product-review-deck.html product-review-deck.pdf
694
+
695
+ # Manual via Chrome
696
+ open product-review-deck.html; Ctrl+P; Save as PDF; Background graphics ON
697
+ ```
698
+
699
+ > **Урок html-pdf-report:** Self-contained = единый HTML + inline CSS. Component tokens (CSS variables) обеспечивают единообразие и лёгкую смену палитры. Правила @page + @media print критичны для PDF-вывода. KPI-карточки с одним крупным числом + маленьким ярлыком — паттерн чтения, оптимизированный для exec-сканирования. Callouts (цветная левая граница) > inline-цитаты для визуальной иерархии. Page footers с номерами страниц + заголовком помогают читателю ориентироваться в печатном PDF.