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
@@ -1,6 +1,23 @@
1
1
  ---
2
2
  name: html-pdf-report
3
3
  description: Генерация PRD или Product Review Deck из HTML/CSS в PDF — self-contained, print-ready
4
+ type: triggered
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-reference
19
+ budget_lines: 297
20
+ schema_version: 1
4
21
  ---
5
22
  # HTML/PDF-отчёт — Генерация PRD или Product Review Deck в PDF
6
23
 
@@ -69,120 +86,7 @@ description: Генерация PRD или Product Review Deck из HTML/CSS в
69
86
 
70
87
  Полный рабочий CSS-блок:
71
88
 
72
- ```css
73
- /* ========== RESET & BASE ========== */
74
- *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
75
- body {
76
- font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;
77
- font-size: 11pt;
78
- line-height: 1.6;
79
- color: #1a1a2e;
80
- background: #fff;
81
- }
82
- .report { max-width: 210mm; margin: 0 auto; padding: 20mm; }
83
-
84
- /* ========== TYPOGRAPHY ========== */
85
- h1 { font-size: 24pt; font-weight: 700; margin-bottom: 0.5em; color: var(--primary); }
86
- h2 { font-size: 18pt; font-weight: 600; margin: 1.5em 0 0.5em; padding-bottom: 0.3em;
87
- border-bottom: 2px solid var(--primary); color: var(--primary); }
88
- h3 { font-size: 14pt; font-weight: 600; margin: 1.2em 0 0.4em; color: var(--secondary); }
89
- h4 { font-size: 12pt; font-weight: 600; margin: 1em 0 0.3em; }
90
- p { margin-bottom: 0.8em; }
91
- blockquote { border-left: 4px solid var(--accent); padding: 0.8em 1.2em;
92
- margin: 1em 0; background: var(--bg-light); font-style: italic; }
93
-
94
- /* ========== CSS VARIABLES (из палитры) ========== */
95
- :root {
96
- --primary: #1a1a2e; /* Заменить из Design Spec */
97
- --secondary: #16213e;
98
- --accent: #0f3460;
99
- --highlight: #e94560;
100
- --bg-light: #f5f5f5;
101
- --border: #e0e0e0;
102
- --success: #2ecc71;
103
- --warning: #f39c12;
104
- --danger: #e74c3c;
105
- }
106
-
107
- /* ========== TITLE PAGE ========== */
108
- .title-page {
109
- display: flex; flex-direction: column; justify-content: center; align-items: center;
110
- min-height: 100vh; text-align: center;
111
- }
112
- .title-page h1 { font-size: 32pt; margin-bottom: 0.3em; }
113
- .title-page .subtitle { font-size: 16pt; color: var(--secondary); margin-bottom: 2em; }
114
- .title-page .meta { font-size: 10pt; color: #666; }
115
-
116
- /* ========== TOC ========== */
117
- .toc-list { list-style: none; counter-reset: toc; }
118
- .toc-list li { padding: 0.4em 0; border-bottom: 1px dotted var(--border); }
119
- .toc-list li::before { counter-increment: toc; content: counter(toc) ". "; font-weight: 600; }
120
- .toc-list a { text-decoration: none; color: var(--primary); }
121
- .toc-list a:hover { color: var(--accent); }
122
-
123
- /* ========== DATA TABLE ========== */
124
- .data-table { width: 100%; border-collapse: collapse; margin: 1em 0; font-size: 10pt; }
125
- .data-table th { background: var(--primary); color: #fff; padding: 8px 12px;
126
- text-align: left; font-weight: 600; }
127
- .data-table td { padding: 8px 12px; border-bottom: 1px solid var(--border); }
128
- .data-table tr:nth-child(even) { background: var(--bg-light); }
129
- .data-table .highlight { background: rgba(233, 69, 96, 0.1); font-weight: 600; }
130
-
131
- /* ========== MATRIX 2x2 ========== */
132
- .matrix-2x2 { display: grid; grid-template-columns: 1fr 1fr; gap: 2px;
133
- margin: 1em 0; border: 2px solid var(--border); }
134
- .matrix-2x2 .cell { padding: 1.2em; }
135
- .matrix-2x2 .cell-header { background: var(--primary); color: #fff; font-weight: 600;
136
- text-align: center; padding: 0.6em; }
137
- .matrix-2x2 .cell-tl { background: #e8f5e9; } /* Top-left: green */
138
- .matrix-2x2 .cell-tr { background: #fff3e0; } /* Top-right: orange */
139
- .matrix-2x2 .cell-bl { background: #e3f2fd; } /* Bottom-left: blue */
140
- .matrix-2x2 .cell-br { background: #fce4ec; } /* Bottom-right: red */
141
-
142
- /* ========== CALLOUT BOX ========== */
143
- .callout { padding: 1em 1.2em; margin: 1em 0; border-radius: 6px; border-left: 4px solid; }
144
- .callout-info { background: #e3f2fd; border-color: #2196f3; }
145
- .callout-success { background: #e8f5e9; border-color: var(--success); }
146
- .callout-warning { background: #fff3e0; border-color: var(--warning); }
147
- .callout-danger { background: #fce4ec; border-color: var(--danger); }
148
- .callout-title { font-weight: 700; margin-bottom: 0.3em; }
149
-
150
- /* ========== PULL QUOTE ========== */
151
- .pull-quote { font-size: 14pt; font-weight: 300; text-align: center;
152
- padding: 1.5em 2em; margin: 1.5em 0; color: var(--accent);
153
- border-top: 2px solid var(--accent); border-bottom: 2px solid var(--accent); }
154
-
155
- /* ========== CHART CONTAINER ========== */
156
- .chart-container { position: relative; margin: 1.5em 0; max-width: 100%; }
157
- .chart-container canvas { max-width: 100%; }
158
- .chart-container figcaption { font-size: 9pt; color: #666; text-align: center;
159
- margin-top: 0.5em; font-style: italic; }
160
-
161
- /* ========== SCORE / BADGE ========== */
162
- .score-badge { display: inline-block; padding: 0.2em 0.8em; border-radius: 12px;
163
- font-weight: 700; font-size: 10pt; }
164
- .score-high { background: var(--success); color: #fff; }
165
- .score-mid { background: var(--warning); color: #fff; }
166
- .score-low { background: var(--danger); color: #fff; }
167
-
168
- /* ========== PRINT ========== */
169
- @media print {
170
- @page { size: A4 portrait; margin: 20mm; }
171
- body { font-size: 10pt; }
172
- .report { max-width: none; padding: 0; }
173
- .title-page { min-height: auto; page-break-after: always; }
174
- .toc { page-break-after: always; }
175
- .executive-summary { page-break-after: always; }
176
- .appendix { page-break-before: always; }
177
- .data-table, .chart-container, .matrix-2x2, .mermaid, figure {
178
- page-break-inside: avoid;
179
- }
180
- h2, h3 { page-break-after: avoid; }
181
- .callout { page-break-inside: avoid; }
182
- a { color: inherit; text-decoration: none; }
183
- canvas { max-width: 100% !important; height: auto !important; }
184
- }
185
- ```
89
+ > 📦 <!--SPLIT-POINTER--> Полный блок — в `$html-pdf-report-reference` (§ Шаг 2 — CSS (Base + Print)).
186
90
 
187
91
  > **Палитра:** заменить CSS variables из Design Spec. Все цвета — через `var(--name)`, чтобы палитра менялась в одном месте.
188
92
 
@@ -194,99 +98,7 @@ blockquote { border-left: 4px solid var(--accent); padding: 0.8em 1.2em;
194
98
 
195
99
  **Конфигурации по типам:**
196
100
 
197
- ```javascript
198
- // ========== BAR CHART (сравнение конкурентов, scoring) ==========
199
- new Chart(document.getElementById('chart-competitors'), {
200
- type: 'bar',
201
- data: {
202
- labels: ['Конкурент A', 'Конкурент B', 'Конкурент C', 'Наш продукт'],
203
- datasets: [{
204
- label: 'Threat Score',
205
- data: [7.2, 7.3, 4.8, null],
206
- backgroundColor: ['#e74c3c', '#e74c3c', '#f39c12', '#2ecc71'],
207
- borderWidth: 0,
208
- borderRadius: 4
209
- }]
210
- },
211
- options: {
212
- animation: false, responsive: true,
213
- plugins: { legend: { display: false },
214
- title: { display: true, text: 'Threat Score конкурентов', font: { size: 14 } } },
215
- scales: { y: { beginAtZero: true, max: 10, title: { display: true, text: 'Score' } } }
216
- }
217
- });
218
-
219
- // ========== RADAR CHART (мультикритериальное сравнение) ==========
220
- new Chart(document.getElementById('chart-radar'), {
221
- type: 'radar',
222
- data: {
223
- labels: ['Функционал', 'Цена', 'UX', 'Поддержка', 'Экосистема', 'Бренд'],
224
- datasets: [
225
- { label: 'Наш продукт', data: [7, 8, 6, 5, 4, 3],
226
- borderColor: '#0f3460', backgroundColor: 'rgba(15,52,96,0.1)', borderWidth: 2 },
227
- { label: 'Лидер рынка', data: [9, 4, 8, 7, 9, 9],
228
- borderColor: '#e94560', backgroundColor: 'rgba(233,69,96,0.1)', borderWidth: 2 }
229
- ]
230
- },
231
- options: {
232
- animation: false, responsive: true,
233
- scales: { r: { beginAtZero: true, max: 10, ticks: { stepSize: 2 } } }
234
- }
235
- });
236
-
237
- // ========== PIE / DOUGHNUT (доли, распределение) ==========
238
- new Chart(document.getElementById('chart-share'), {
239
- type: 'doughnut',
240
- data: {
241
- labels: ['Сегмент A', 'Сегмент B', 'Сегмент C', 'Прочие'],
242
- datasets: [{ data: [35, 28, 22, 15],
243
- backgroundColor: ['#1a1a2e', '#0f3460', '#e94560', '#ccc'],
244
- borderWidth: 2, borderColor: '#fff' }]
245
- },
246
- options: {
247
- animation: false, responsive: true,
248
- plugins: { legend: { position: 'right' } }
249
- }
250
- });
251
-
252
- // ========== LINE CHART (тренды, retention curves) ==========
253
- new Chart(document.getElementById('chart-retention'), {
254
- type: 'line',
255
- data: {
256
- labels: ['M0', 'M1', 'M2', 'M3', 'M6', 'M12'],
257
- datasets: [
258
- { label: 'Когорта Янв', data: [100, 42, 31, 26, 20, 16],
259
- borderColor: '#e94560', fill: false, tension: 0.3 },
260
- { label: 'Когорта Мар', data: [100, 55, 44, 38, null, null],
261
- borderColor: '#2ecc71', fill: false, tension: 0.3 }
262
- ]
263
- },
264
- options: {
265
- animation: false, responsive: true,
266
- scales: { y: { beginAtZero: true, max: 100, title: { display: true, text: 'Retention %' } } }
267
- }
268
- });
269
-
270
- // ========== SCATTER (позиционирование 2D) ==========
271
- new Chart(document.getElementById('chart-positioning'), {
272
- type: 'scatter',
273
- data: {
274
- datasets: [
275
- { label: 'Конкурент A', data: [{ x: 8, y: 7 }], pointRadius: 10,
276
- backgroundColor: '#e74c3c' },
277
- { label: 'Наш продукт', data: [{ x: 5, y: 6 }], pointRadius: 12,
278
- backgroundColor: '#2ecc71', pointStyle: 'star' }
279
- ]
280
- },
281
- options: {
282
- animation: false, responsive: true,
283
- scales: {
284
- x: { min: 0, max: 10, title: { display: true, text: 'Функционал' } },
285
- y: { min: 0, max: 10, title: { display: true, text: 'Цена' } }
286
- }
287
- }
288
- });
289
- ```
101
+ > 📦 <!--SPLIT-POINTER--> Полный блок — в `$html-pdf-report-reference` (§ Шаг 3 — Chart.js).
290
102
 
291
103
  ### Шаг 4 — Mermaid
292
104
 
@@ -296,51 +108,7 @@ mermaid.initialize({ startOnLoad: true, theme: 'neutral', securityLevel: 'loose'
296
108
 
297
109
  **Диаграммы по типам:**
298
110
 
299
- ```html
300
- <!-- ========== FLOWCHART (процессы, пайплайны) ========== -->
301
- <div class="mermaid">
302
- flowchart TD
303
- A[Awareness] --> B[Consideration]
304
- B --> C[Decision]
305
- C --> D[Purchase]
306
- D --> E[Retention]
307
- E --> F[Advocacy]
308
- E -.->|churn| G[Exit]
309
- style G fill:#fce4ec,stroke:#e74c3c
310
- </div>
311
-
312
- <!-- ========== MINDMAP (структура, иерархия) ========== -->
313
- <div class="mermaid">
314
- mindmap
315
- root((Стратегия роста))
316
- Проникновение
317
- Upsell
318
- Cross-sell
319
- Развитие рынка
320
- СНГ
321
- Enterprise
322
- Развитие продукта
323
- AI-модуль
324
- Mobile app
325
- Диверсификация
326
- White-label
327
- </div>
328
-
329
- <!-- ========== QUADRANT CHART (матрицы 2x2) ========== -->
330
- <div class="mermaid">
331
- quadrantChart
332
- title Impact vs Effort
333
- x-axis Low Effort --> High Effort
334
- y-axis Low Impact --> High Impact
335
- quadrant-1 Big Bets
336
- quadrant-2 Quick Wins
337
- quadrant-3 Fill-ins
338
- quadrant-4 Avoid
339
- Action A: [0.3, 0.8]
340
- Action B: [0.7, 0.9]
341
- Action C: [0.2, 0.3]
342
- </div>
343
- ```
111
+ > 📦 <!--SPLIT-POINTER--> Полный блок — в `$html-pdf-report-reference` (§ Шаг 4 — Mermaid).
344
112
 
345
113
  > Каждая Mermaid-диаграмма оборачивается в `<figure>` с `<figcaption>` и `page-break-inside: avoid`.
346
114
 
@@ -452,43 +220,7 @@ quadrantChart
452
220
 
453
221
  ## Пример — Секция Executive Summary
454
222
 
455
- ```html
456
- <section class="executive-summary" id="executive-summary">
457
- <h2>Executive Summary</h2>
458
-
459
- <div class="pull-quote">
460
- «AI-powered 1:1 summarization решает 45-60 мин/week admin overhead для 5,000+
461
- managers в TeamFlow base. Projected +$2.4M ARR expansion за 12 мес, NRR +4pp.»
462
- </div>
463
-
464
- <h3>Ключевые выводы</h3>
465
- <div class="callout callout-success">
466
- <div class="callout-title">✅ Главный инсайт</div>
467
- <p>Mid-market и enterprise customers готовы платить $8-12/seat premium за AI summarization.
468
- 6 of 8 buyer interviews подтверждают value, 4/4 enterprise accounts ready для beta.</p>
469
- </div>
470
-
471
- <table class="data-table">
472
- <caption>Сводка по ключевым метрикам</caption>
473
- <thead>
474
- <tr><th scope="col">Метрика</th><th scope="col">Значение</th><th scope="col">Бенчмарк</th><th scope="col">Оценка</th></tr>
475
- </thead>
476
- <tbody>
477
- <tr><td>TAM</td><td>$4.2B</td><td>—</td>
478
- <td><span class="score-badge score-high">Крупный</span></td></tr>
479
- <tr><td>SOM (Year 1)</td><td>$180M</td><td>—</td>
480
- <td><span class="score-badge score-mid">Средний</span></td></tr>
481
- <tr><td>Главная угроза</td><td>Яндекс Практикум</td><td>Score 7.6</td>
482
- <td><span class="score-badge score-low">High</span></td></tr>
483
- </tbody>
484
- </table>
485
-
486
- <figure class="chart-container" role="img" aria-label="Threat Score: Skillbox 7.2, Нетология 6.8, Яндекс 7.6, GeekBrains 4.1, Skyeng 5.3">
487
- <canvas id="chart-exec-threats"></canvas>
488
- <figcaption>Рис. 1 — Threat Score ключевых конкурентов</figcaption>
489
- </figure>
490
- </section>
491
- ```
223
+ > 📦 <!--SPLIT-POINTER--> Полный блок — в `$html-pdf-report-reference` (§ Пример — Секция Executive Summary).
492
224
 
493
225
  ## Валидация (Quality Gate)
494
226
 
@@ -563,377 +295,3 @@ quadrantChart
563
295
  ### Инструкция для PDF
564
296
  Chrome/Edge → Ctrl+P → Save as PDF → Portrait → A4 → Default margins → **Background graphics: ON** → Save
565
297
  ```
566
-
567
- ## Worked Example — TeamFlow Product Review Deck (HTML skeleton)
568
-
569
- **Контекст:** Full Pipeline A `/ship-right-thing` завершён. Дизайнер подготовил design spec (см. `$report-design`). Верстальщик конвертирует в production HTML/PDF — Product Review Deck для exec sign-off.
570
-
571
- ### Целевая структура
572
-
573
- - 12 страниц в стиле слайдов (каждая отделена `page-break`)
574
- - Cover → TL;DR → Проблема → Стратегия → PRD highlights → Метрики → Риски → Роллаут → Приложения
575
- - Executive-стиль: плотный, но читаемый, без декоративных элементов, данные на первом плане
576
- - Целевой размер PDF < 5MB для рассылки по email
577
-
578
- ### Self-contained HTML Skeleton
579
-
580
- ```html
581
- <!DOCTYPE html>
582
- <html lang="en">
583
- <head>
584
- <meta charset="UTF-8">
585
- <title>TeamFlow AI Summarization — Product Review Deck · Q2 2026</title>
586
- <meta name="description" content="Product Review Deck for executive sign-off: AI-powered 1:1 summarization initiative">
587
- <style>
588
- /* ============ CSS Tokens ============ */
589
- :root {
590
- --color-primary: #0A2540; /* TeamFlow deep blue */
591
- --color-accent: #F2A900; /* TeamFlow amber */
592
- --color-text: #1A1A1A;
593
- --color-text-muted: #6B6B6B;
594
- --color-bg: #FFFFFF;
595
- --color-bg-alt: #F7F9FB;
596
- --color-success: #22A06B;
597
- --color-warning: #E67E22;
598
- --color-danger: #C0392B;
599
- --color-border: #E1E4E8;
600
- --font-body: 'Inter', -apple-system, sans-serif;
601
- --font-serif: 'Source Serif Pro', Georgia, serif;
602
- --space-1: 4px; --space-2: 8px; --space-3: 16px;
603
- --space-4: 24px; --space-5: 32px; --space-6: 48px;
604
- }
605
-
606
- /* ============ Reset + Base ============ */
607
- * { margin: 0; padding: 0; box-sizing: border-box; }
608
- body {
609
- font-family: var(--font-body);
610
- color: var(--color-text);
611
- font-size: 14px;
612
- line-height: 1.5;
613
- background: var(--color-bg);
614
- }
615
-
616
- /* ============ Page Structure (print-ready) ============ */
617
- @page {
618
- size: A4 portrait;
619
- margin: 2cm 1.8cm;
620
- }
621
- .page {
622
- page-break-after: always;
623
- min-height: 24cm;
624
- padding: 2cm 1.5cm;
625
- position: relative;
626
- }
627
- .page:last-child { page-break-after: auto; }
628
- .page-footer {
629
- position: absolute;
630
- bottom: 0.8cm;
631
- left: 1.5cm;
632
- right: 1.5cm;
633
- font-size: 10px;
634
- color: var(--color-text-muted);
635
- border-top: 1px solid var(--color-border);
636
- padding-top: 8px;
637
- display: flex;
638
- justify-content: space-between;
639
- }
640
- @media screen { .page { border-bottom: 2px dashed var(--color-border); margin-bottom: 2cm; } }
641
-
642
- /* ============ Typography ============ */
643
- h1 { font-size: 32px; font-weight: 700; color: var(--color-primary); letter-spacing: -0.5px; margin-bottom: var(--space-4); }
644
- h2 { font-size: 22px; font-weight: 600; color: var(--color-primary); margin: var(--space-5) 0 var(--space-3); }
645
- h3 { font-size: 16px; font-weight: 600; color: var(--color-text); margin: var(--space-3) 0 var(--space-2); }
646
- p { margin-bottom: var(--space-2); }
647
- .lead { font-size: 16px; line-height: 1.6; color: var(--color-text); }
648
- .pull-quote {
649
- font-family: var(--font-serif);
650
- font-size: 20px; line-height: 1.4;
651
- color: var(--color-primary);
652
- border-left: 3px solid var(--color-accent);
653
- padding: var(--space-3) var(--space-4);
654
- margin: var(--space-4) 0;
655
- background: var(--color-bg-alt);
656
- }
657
-
658
- /* ============ Components ============ */
659
- .meta-bar {
660
- display: flex;
661
- justify-content: space-between;
662
- border-top: 3px solid var(--color-accent);
663
- border-bottom: 1px solid var(--color-border);
664
- padding: var(--space-3) 0;
665
- font-size: 12px;
666
- color: var(--color-text-muted);
667
- margin-bottom: var(--space-5);
668
- }
669
- .callout {
670
- border-left: 4px solid var(--color-accent);
671
- padding: var(--space-3);
672
- background: var(--color-bg-alt);
673
- margin: var(--space-3) 0;
674
- }
675
- .callout-title {
676
- font-weight: 600;
677
- color: var(--color-primary);
678
- margin-bottom: var(--space-1);
679
- }
680
- .callout-success { border-left-color: var(--color-success); }
681
- .callout-warning { border-left-color: var(--color-warning); }
682
- .callout-danger { border-left-color: var(--color-danger); }
683
-
684
- table {
685
- width: 100%;
686
- border-collapse: collapse;
687
- margin: var(--space-3) 0;
688
- font-size: 12px;
689
- }
690
- th, td {
691
- padding: var(--space-2) var(--space-3);
692
- text-align: left;
693
- border-bottom: 1px solid var(--color-border);
694
- }
695
- th {
696
- font-weight: 600;
697
- background: var(--color-bg-alt);
698
- color: var(--color-primary);
699
- }
700
- tr:hover { background: var(--color-bg-alt); }
701
- .metric-positive { color: var(--color-success); font-weight: 600; }
702
- .metric-negative { color: var(--color-danger); font-weight: 600; }
703
- .metric-neutral { color: var(--color-text-muted); }
704
-
705
- .status-badge {
706
- display: inline-block;
707
- padding: 2px 8px;
708
- font-size: 10px;
709
- font-weight: 600;
710
- border-radius: 3px;
711
- text-transform: uppercase;
712
- }
713
- .status-green { background: var(--color-success); color: white; }
714
- .status-amber { background: var(--color-warning); color: white; }
715
- .status-red { background: var(--color-danger); color: white; }
716
-
717
- /* Grid layouts */
718
- .grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); }
719
- .grid-3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: var(--space-3); }
720
- .kpi-card {
721
- padding: var(--space-4);
722
- background: var(--color-bg-alt);
723
- border: 1px solid var(--color-border);
724
- border-left: 3px solid var(--color-accent);
725
- }
726
- .kpi-value {
727
- font-size: 32px; font-weight: 700;
728
- color: var(--color-primary);
729
- margin-bottom: var(--space-1);
730
- }
731
- .kpi-label {
732
- font-size: 11px;
733
- color: var(--color-text-muted);
734
- text-transform: uppercase;
735
- letter-spacing: 0.5px;
736
- }
737
-
738
- /* Roadmap columns */
739
- .roadmap {
740
- display: grid;
741
- grid-template-columns: 1fr 1fr 1fr;
742
- gap: var(--space-3);
743
- margin: var(--space-4) 0;
744
- }
745
- .roadmap-column {
746
- padding: var(--space-3);
747
- background: var(--color-bg-alt);
748
- border-top: 3px solid var(--color-accent);
749
- }
750
- .roadmap-column h4 {
751
- font-size: 13px;
752
- font-weight: 700;
753
- text-transform: uppercase;
754
- color: var(--color-primary);
755
- margin-bottom: var(--space-2);
756
- }
757
- .roadmap-column ul { list-style: none; padding-left: 0; }
758
- .roadmap-column li { padding: 6px 0; border-bottom: 1px solid var(--color-border); font-size: 12px; }
759
-
760
- /* ============ Print Optimizations ============ */
761
- @media print {
762
- body { print-color-adjust: exact; -webkit-print-color-adjust: exact; }
763
- .page { page-break-after: always; }
764
- table { page-break-inside: avoid; }
765
- .callout { page-break-inside: avoid; }
766
- h2, h3 { page-break-after: avoid; }
767
- }
768
- </style>
769
- </head>
770
- <body>
771
-
772
- <!-- PAGE 1: COVER -->
773
- <section class="page" id="cover">
774
- <div style="margin-top: 8cm; text-align: center;">
775
- <p style="font-size: 13px; color: var(--color-text-muted); letter-spacing: 2px;">PRODUCT REVIEW DECK · CONFIDENTIAL</p>
776
- <h1 style="font-size: 42px; margin-top: var(--space-4);">AI 1:1 Summarization</h1>
777
- <p class="lead" style="margin-top: var(--space-3); color: var(--color-text-muted);">
778
- TeamFlow Q2 2026 Launch Proposal · Executive Sign-Off
779
- </p>
780
- <div style="margin-top: 4cm;">
781
- <p style="font-size: 12px; color: var(--color-text-muted);">Prepared by Product Team · April 17, 2026</p>
782
- <p style="font-size: 12px; color: var(--color-text-muted);">Alex K., Product · Priya S., Engineering · Jordan M., Design · Sam P., Data</p>
783
- </div>
784
- </div>
785
- </section>
786
-
787
- <!-- PAGE 2: TL;DR / EXECUTIVE SUMMARY -->
788
- <section class="page" id="summary">
789
- <div class="meta-bar">
790
- <span>TeamFlow AI Summarization</span>
791
- <span>Page 2 · Executive Summary</span>
792
- </div>
793
- <h1>Executive Summary</h1>
794
- <div class="pull-quote">
795
- «AI-powered 1:1 summarization решает 45-60 мин/week admin overhead для 3,000+ managers в TeamFlow base. Projected +$2.4M ARR expansion за 12 мес, NRR +4pp.»
796
- </div>
797
- <div class="grid-3" style="margin: var(--space-5) 0;">
798
- <div class="kpi-card">
799
- <div class="kpi-value">40</div>
800
- <div class="kpi-label">Target Team Tier Upgrades (Q2)</div>
801
- </div>
802
- <div class="kpi-card">
803
- <div class="kpi-value">+$8</div>
804
- <div class="kpi-label">Per-Seat Premium (Team Tier)</div>
805
- </div>
806
- <div class="kpi-card">
807
- <div class="kpi-value">3 hrs</div>
808
- <div class="kpi-label">Weekly Manager Time Saved</div>
809
- </div>
810
- </div>
811
- <h2>What we're proposing</h2>
812
- <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>
813
- <h2>Why now</h2>
814
- <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>
815
- <div class="callout callout-success">
816
- <div class="callout-title">Expected Outcome</div>
817
- <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>
818
- </div>
819
- <div class="page-footer">
820
- <span>TeamFlow AI Summarization · Product Review · April 17, 2026</span>
821
- <span>2 / 12</span>
822
- </div>
823
- </section>
824
-
825
- <!-- PAGE 3: PROBLEM -->
826
- <section class="page" id="problem">
827
- <div class="meta-bar">
828
- <span>TeamFlow AI Summarization</span>
829
- <span>Page 3 · The Problem</span>
830
- </div>
831
- <h1>The Problem</h1>
832
- <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>
833
-
834
- <div class="grid-3" style="margin: var(--space-4) 0;">
835
- <div class="kpi-card">
836
- <div class="kpi-value" style="color: var(--color-danger);">3-4 hrs</div>
837
- <div class="kpi-label">Manager admin time / week on 1:1s (8 reports avg)</div>
838
- </div>
839
- <div class="kpi-card">
840
- <div class="kpi-value" style="color: var(--color-danger);">40%</div>
841
- <div class="kpi-label">Action items dropped / never completed</div>
842
- </div>
843
- <div class="kpi-card">
844
- <div class="kpi-value" style="color: var(--color-danger);">0%</div>
845
- <div class="kpi-label">VP HR visibility into manager 1:1 quality</div>
846
- </div>
847
- </div>
848
-
849
- <h2>Evidence from Discovery</h2>
850
- <p>8 customer interviews (4 buyers VP HR, 4 end-user managers) + 120 support tickets Q1 2026 + internal product analytics. Direct quotes:</p>
851
-
852
- <div class="callout">
853
- <p><em>«25 минут prep каждую неделю на каждого из 8 reports. Итого ~3 часа в неделю.»</em></p>
854
- <p style="text-align: right; font-size: 11px; margin-top: 8px; color: var(--color-text-muted);">— Interview E3 (Engineering Manager, mid-market)</p>
855
- </div>
856
- <div class="callout">
857
- <p><em>«Some managers run amazing 1:1s, others literally cancel them. I have no visibility, no levers.»</em></p>
858
- <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>
859
- </div>
860
-
861
- <div class="page-footer">
862
- <span>TeamFlow AI Summarization · Product Review · April 17, 2026</span>
863
- <span>3 / 12</span>
864
- </div>
865
- </section>
866
-
867
- <!-- PAGES 4-12: abbreviated ... full deck continues with Strategy / PRD / Metrics / Risks / Rollout / Appendix -->
868
-
869
- <!-- PAGE 12: APPENDIX — Roadmap -->
870
- <section class="page" id="roadmap">
871
- <div class="meta-bar">
872
- <span>TeamFlow AI Summarization</span>
873
- <span>Page 12 · Roadmap</span>
874
- </div>
875
- <h1>Product Roadmap — Now / Next / Later</h1>
876
- <div class="roadmap">
877
- <div class="roadmap-column">
878
- <h4>Now (Q2 2026)</h4>
879
- <ul>
880
- <li>✨ AI Summarization Core (Team Tier)</li>
881
- <li>✨ Auto Action Items Extraction</li>
882
- <li>✨ Action Items Reminders</li>
883
- <li>🔐 SOC 2 Type II (AI features)</li>
884
- <li>🔐 SSO SAML + SCIM</li>
885
- </ul>
886
- </div>
887
- <div class="roadmap-column">
888
- <h4>Next (Q3 2026)</h4>
889
- <ul>
890
- <li>📊 Aggregate Dashboard (Enterprise)</li>
891
- <li>⏱️ Real-time Transcription</li>
892
- <li>🎯 Manager Health Score</li>
893
- <li>🔗 Zoom / Meet Import</li>
894
- </ul>
895
- </div>
896
- <div class="roadmap-column">
897
- <h4>Later (Q4+)</h4>
898
- <ul>
899
- <li>🌍 Multi-language Support</li>
900
- <li>📱 Native Mobile App</li>
901
- <li>🔍 AI Coaching Insights</li>
902
- <li>📈 Predictive Attrition Model</li>
903
- </ul>
904
- </div>
905
- </div>
906
- <div class="page-footer">
907
- <span>TeamFlow AI Summarization · Product Review · April 17, 2026</span>
908
- <span>12 / 12</span>
909
- </div>
910
- </section>
911
-
912
- </body>
913
- </html>
914
- ```
915
-
916
- ### Проверки качества пройдены
917
- - [x] Self-contained (единый HTML-файл, весь CSS встроен)
918
- - [x] Отсутствие битых ссылок
919
- - [x] Print-ready (директивы @page, @media print)
920
- - [x] Page breaks между секциями
921
- - [x] Executive-плотность без перегруза
922
- - [x] Цвета соответствуют бренду TeamFlow (тёмно-синий + янтарный)
923
- - [x] Доступность (семантический HTML, alt text на изображениях при наличии)
924
- - [x] Оценочный размер файла < 2MB (без встроенных изображений; с логотипами/графиками возможен рост до 3-4MB)
925
-
926
- ### PDF Generation
927
-
928
- ```bash
929
- # Via puppeteer (preferred, automation-friendly)
930
- puppeteer-pdf product-review-deck.html --format=A4 --margin-top=2cm --print-background
931
-
932
- # Via WeasyPrint
933
- weasyprint product-review-deck.html product-review-deck.pdf
934
-
935
- # Manual via Chrome
936
- open product-review-deck.html; Ctrl+P; Save as PDF; Background graphics ON
937
- ```
938
-
939
- > **Урок html-pdf-report:** Self-contained = единый HTML + inline CSS. Component tokens (CSS variables) обеспечивают единообразие и лёгкую смену палитры. Правила @page + @media print критичны для PDF-вывода. KPI-карточки с одним крупным числом + маленьким ярлыком — паттерн чтения, оптимизированный для exec-сканирования. Callouts (цветная левая граница) > inline-цитаты для визуальной иерархии. Page footers с номерами страниц + заголовком помогают читателю ориентироваться в печатном PDF.