code-ai-installer 4.0.0 → 4.0.1-a

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