code-ai-installer 4.0.0 → 4.0.1-b

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 +44 -6
  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 +14 -3
  65. package/dist/mcp_setup.js +15 -6
  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: Generating a PRD or Product Review Deck from HTML/CSS to 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 Report — Generating a PRD or Product Review Deck as PDF
6
23
 
@@ -69,120 +86,7 @@ description: Generating a PRD or Product Review Deck from HTML/CSS to PDF — se
69
86
 
70
87
  Full working CSS block:
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 (from palette) ========== */
95
- :root {
96
- --primary: #1a1a2e; /* Replace from 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` (§ Step 2 — CSS (Base + Print)).
186
90
 
187
91
  > **Palette:** replace CSS variables from Design Spec. All colors — via `var(--name)` so the palette changes in one place.
188
92
 
@@ -194,99 +98,7 @@ For each chart from the Visualization Map:
194
98
 
195
99
  **Configurations by type:**
196
100
 
197
- ```javascript
198
- // ========== BAR CHART (competitor comparison, scoring) ==========
199
- new Chart(document.getElementById('chart-competitors'), {
200
- type: 'bar',
201
- data: {
202
- labels: ['Competitor A', 'Competitor B', 'Competitor C', 'Our Product'],
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: 'Competitor Threat Score', font: { size: 14 } } },
215
- scales: { y: { beginAtZero: true, max: 10, title: { display: true, text: 'Score' } } }
216
- }
217
- });
218
-
219
- // ========== RADAR CHART (multi-criteria comparison) ==========
220
- new Chart(document.getElementById('chart-radar'), {
221
- type: 'radar',
222
- data: {
223
- labels: ['Features', 'Price', 'UX', 'Support', 'Ecosystem', 'Brand'],
224
- datasets: [
225
- { label: 'Our Product', data: [7, 8, 6, 5, 4, 3],
226
- borderColor: '#0f3460', backgroundColor: 'rgba(15,52,96,0.1)', borderWidth: 2 },
227
- { label: 'Market Leader', 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 (shares, distribution) ==========
238
- new Chart(document.getElementById('chart-share'), {
239
- type: 'doughnut',
240
- data: {
241
- labels: ['Segment A', 'Segment B', 'Segment C', 'Other'],
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 (trends, 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: 'Jan Cohort', data: [100, 42, 31, 26, 20, 16],
259
- borderColor: '#e94560', fill: false, tension: 0.3 },
260
- { label: 'Mar Cohort', 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 positioning) ==========
271
- new Chart(document.getElementById('chart-positioning'), {
272
- type: 'scatter',
273
- data: {
274
- datasets: [
275
- { label: 'Competitor A', data: [{ x: 8, y: 7 }], pointRadius: 10,
276
- backgroundColor: '#e74c3c' },
277
- { label: 'Our Product', 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: 'Features' } },
285
- y: { min: 0, max: 10, title: { display: true, text: 'Price' } }
286
- }
287
- }
288
- });
289
- ```
101
+ > 📦 <!--SPLIT-POINTER--> Полный блок — в `$html-pdf-report-reference` (§ Step 3 — Chart.js).
290
102
 
291
103
  ### Step 4 — Mermaid
292
104
 
@@ -296,51 +108,7 @@ mermaid.initialize({ startOnLoad: true, theme: 'neutral', securityLevel: 'loose'
296
108
 
297
109
  **Diagrams by type:**
298
110
 
299
- ```html
300
- <!-- ========== FLOWCHART (processes, pipelines) ========== -->
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 (structure, hierarchy) ========== -->
313
- <div class="mermaid">
314
- mindmap
315
- root((Growth Strategy))
316
- Penetration
317
- Upsell
318
- Cross-sell
319
- Market Development
320
- CIS
321
- Enterprise
322
- Product Development
323
- AI module
324
- Mobile app
325
- Diversification
326
- White-label
327
- </div>
328
-
329
- <!-- ========== QUADRANT CHART (2x2 matrices) ========== -->
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` (§ Step 4 — Mermaid).
344
112
 
345
113
  > Each Mermaid diagram is wrapped in `<figure>` with `<figcaption>` and `page-break-inside: avoid`.
346
114
 
@@ -452,43 +220,7 @@ quadrantChart
452
220
 
453
221
  ## Example — Executive Summary Section
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 solves 45-60 min/week admin overhead for 5,000+
461
- managers in TeamFlow base. Projected +$2.4M ARR expansion over 12 months, NRR +4pp.»
462
- </div>
463
-
464
- <h3>Key Findings</h3>
465
- <div class="callout callout-success">
466
- <div class="callout-title">✅ Main Insight</div>
467
- <p>Mid-market and enterprise customers are ready to pay $8-12/seat premium for AI summarization.
468
- 6 of 8 buyer interviews confirm value, 4/4 enterprise accounts ready for beta.</p>
469
- </div>
470
-
471
- <table class="data-table">
472
- <caption>Summary of Key Metrics</caption>
473
- <thead>
474
- <tr><th scope="col">Metric</th><th scope="col">Value</th><th scope="col">Benchmark</th><th scope="col">Rating</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">Large</span></td></tr>
479
- <tr><td>SOM (Year 1)</td><td>$180M</td><td>—</td>
480
- <td><span class="score-badge score-mid">Medium</span></td></tr>
481
- <tr><td>Top Threat</td><td>Competitor X</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: A=7.2, B=6.8, C=7.6, D=4.1, E=5.3">
487
- <canvas id="chart-exec-threats"></canvas>
488
- <figcaption>Fig. 1 — Threat Score of key competitors</figcaption>
489
- </figure>
490
- </section>
491
- ```
223
+ > 📦 <!--SPLIT-POINTER--> Полный блок — в `$html-pdf-report-reference` (§ Example — Executive Summary Section).
492
224
 
493
225
  ## Validation (Quality Gate)
494
226
 
@@ -563,377 +295,3 @@ Transfer format: `report.html` (single file) + PDF printing instructions.
563
295
  ### PDF Instructions
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
- **Context:** Full Pipeline A `/ship-right-thing` completed. Designer prepared design spec (see `$report-design`). Layouter converts to production HTML/PDF — Product Review Deck for exec sign-off.
570
-
571
- ### Target Structure
572
-
573
- - 12 slide-like pages (each `page-break` separated)
574
- - Cover → TL;DR → Problem → Strategy → PRD highlights → Metrics → Risks → Rollout → Appendices
575
- - Executive style: dense but readable, no decoration, data-forward
576
- - PDF size target < 5MB for email distribution
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 solves 45-60 min/week admin overhead for 3,000+ managers in TeamFlow base. Projected +$2.4M ARR expansion over 12 months, 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 with LLM providers, SOC 2 Type II attestation.</p>
813
- <h2>Why now</h2>
814
- <p class="lead">Mid-market and 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 through 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 minutes of prep every week for each of 8 reports. That's ~3 hours per week.»</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
- ### Quality Checks Passed
917
- - [x] Self-contained (single HTML file, all CSS inlined)
918
- - [x] No broken references
919
- - [x] Print-ready (@page, @media print directives)
920
- - [x] Page breaks between sections
921
- - [x] Executive dense without overwhelm
922
- - [x] Color consistent with TeamFlow brand (deep blue + amber)
923
- - [x] Accessible (semantic HTML, alt text on images if any)
924
- - [x] File size estimate < 2MB (no embedded images yet; with logos/charts might grow to 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 lesson:** Self-contained = single HTML + inline CSS. Component tokens (CSS variables) enable consistency + easy re-skin. @page + @media print rules critical for PDF output. KPI cards with single large number + small label — reading pattern optimized for exec scanning. Callouts (colored left border) > inline quotes for visual hierarchy. Page footers with page numbers + title help reader navigate printed PDF.