@openpresentation/opf 0.10.1 → 0.11.1

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 (280) hide show
  1. package/dist/{catalogs-DoVmvDr7.d.ts → catalogs-DJ-B5ZyD.d.ts} +79 -9
  2. package/dist/catalogs.d.ts +2 -2
  3. package/dist/catalogs.js +1 -1
  4. package/dist/{chunk-PQJRDNA6.js → chunk-6UPHKXI5.js} +381 -34
  5. package/dist/{chunk-TU7I3KSB.js → chunk-7LF37SG3.js} +7400 -5422
  6. package/dist/{chunk-EWJNRHXA.js → chunk-BP6WMSSS.js} +3 -3
  7. package/dist/{chunk-FHGJX5QK.js → chunk-KWIOQ3QR.js} +73 -32
  8. package/dist/{chunk-D3GQIREP.js → chunk-LTSDDBNW.js} +558 -52
  9. package/dist/{chunk-ZIL7MGZU.js → chunk-M4GTWRK7.js} +333 -102
  10. package/dist/chunk-NPYN4TZ5.js +3516 -0
  11. package/dist/{chunk-RS5GZ5RW.js → chunk-SDETQV7Y.js} +161 -0
  12. package/dist/composition-DzLwY-Mi.d.ts +887 -0
  13. package/dist/composition.d.ts +1 -676
  14. package/dist/composition.js +1 -1
  15. package/dist/docs.js +80 -20
  16. package/dist/examples.d.ts +1 -1
  17. package/dist/examples.js +11 -11
  18. package/dist/font-policy.d.ts +123 -0
  19. package/dist/font-policy.js +1 -0
  20. package/dist/index.d.ts +184 -4
  21. package/dist/index.js +473 -7
  22. package/dist/lint.d.ts +3 -3
  23. package/dist/lint.js +5 -5
  24. package/dist/pagination.d.ts +6 -2
  25. package/dist/pagination.js +5 -5
  26. package/dist/{presentation-BMTdX6O1.d.ts → presentation-bceTClm8.d.ts} +297 -30
  27. package/dist/repo-readme.js +1 -1
  28. package/dist/{schemas-BYe5y8-i.d.ts → schemas-X_NniU4A.d.ts} +8 -0
  29. package/dist/schemas.d.ts +1 -1
  30. package/dist/schemas.js +1 -1
  31. package/dist/spec/catalogs/audiences/academic.json +24 -0
  32. package/dist/spec/catalogs/audiences/all-hands.json +3 -1
  33. package/dist/spec/catalogs/audiences/board.json +3 -1
  34. package/dist/spec/catalogs/audiences/customer.json +25 -0
  35. package/dist/spec/catalogs/audiences/executive.json +24 -0
  36. package/dist/spec/catalogs/audiences/general-public.json +25 -0
  37. package/dist/spec/catalogs/audiences/index.json +73 -1
  38. package/dist/spec/catalogs/audiences/internal-team.json +25 -0
  39. package/dist/spec/catalogs/audiences/investor.json +25 -0
  40. package/dist/spec/catalogs/audiences/marketing.json +25 -0
  41. package/dist/spec/catalogs/audiences/media.json +24 -0
  42. package/dist/spec/catalogs/audiences/partner.json +25 -0
  43. package/dist/spec/catalogs/audiences/regulatory.json +25 -0
  44. package/dist/spec/catalogs/audiences/sales.json +25 -0
  45. package/dist/spec/catalogs/audiences/technical.json +25 -0
  46. package/dist/spec/catalogs/chart-types/100pct-bullet-bar-2x.json +5 -0
  47. package/dist/spec/catalogs/chart-types/100pct-bullet-bar-3x.json +5 -0
  48. package/dist/spec/catalogs/chart-types/100pct-bullet-bar.json +5 -0
  49. package/dist/spec/catalogs/chart-types/100pct-bullet-column-2x.json +5 -0
  50. package/dist/spec/catalogs/chart-types/100pct-bullet-column-3x.json +5 -0
  51. package/dist/spec/catalogs/chart-types/100pct-bullet-column.json +5 -0
  52. package/dist/spec/catalogs/chart-types/100pct-progress-bar.json +10 -0
  53. package/dist/spec/catalogs/chart-types/100pct-stacked-area-2x.json +10 -0
  54. package/dist/spec/catalogs/chart-types/100pct-stacked-area-3x.json +6 -1
  55. package/dist/spec/catalogs/chart-types/100pct-stacked-bar-2x.json +10 -0
  56. package/dist/spec/catalogs/chart-types/100pct-stacked-bar-3x.json +6 -1
  57. package/dist/spec/catalogs/chart-types/100pct-stacked-column-2x.json +10 -0
  58. package/dist/spec/catalogs/chart-types/100pct-stacked-column-3x.json +6 -1
  59. package/dist/spec/catalogs/chart-types/area.json +5 -0
  60. package/dist/spec/catalogs/chart-types/australia.json +10 -0
  61. package/dist/spec/catalogs/chart-types/bar.json +5 -0
  62. package/dist/spec/catalogs/chart-types/box-and-whisker-2x.json +10 -0
  63. package/dist/spec/catalogs/chart-types/box-and-whisker-3x.json +10 -0
  64. package/dist/spec/catalogs/chart-types/box-and-whisker.json +5 -0
  65. package/dist/spec/catalogs/chart-types/bullet-bar-2x.json +5 -0
  66. package/dist/spec/catalogs/chart-types/bullet-bar-3x.json +5 -0
  67. package/dist/spec/catalogs/chart-types/bullet-bar.json +5 -0
  68. package/dist/spec/catalogs/chart-types/bullet-column-2x.json +5 -0
  69. package/dist/spec/catalogs/chart-types/bullet-column-3x.json +5 -0
  70. package/dist/spec/catalogs/chart-types/bullet-column.json +5 -0
  71. package/dist/spec/catalogs/chart-types/canada.json +10 -0
  72. package/dist/spec/catalogs/chart-types/clustered-bar-2x.json +10 -0
  73. package/dist/spec/catalogs/chart-types/clustered-column.json +10 -0
  74. package/dist/spec/catalogs/chart-types/column.json +5 -0
  75. package/dist/spec/catalogs/chart-types/dot-plot-2x.json +5 -0
  76. package/dist/spec/catalogs/chart-types/dot-plot-3x.json +5 -0
  77. package/dist/spec/catalogs/chart-types/dot-plot-4x.json +5 -0
  78. package/dist/spec/catalogs/chart-types/dot-plot-5x.json +5 -0
  79. package/dist/spec/catalogs/chart-types/dot-plot-6x.json +5 -0
  80. package/dist/spec/catalogs/chart-types/dot-plot.json +5 -0
  81. package/dist/spec/catalogs/chart-types/doughnut.json +5 -0
  82. package/dist/spec/catalogs/chart-types/dumbbell.json +5 -0
  83. package/dist/spec/catalogs/chart-types/filled-radar.json +5 -0
  84. package/dist/spec/catalogs/chart-types/funnel.json +5 -0
  85. package/dist/spec/catalogs/chart-types/histogram.json +5 -0
  86. package/dist/spec/catalogs/chart-types/index.json +333 -233
  87. package/dist/spec/catalogs/chart-types/line-2x.json +10 -0
  88. package/dist/spec/catalogs/chart-types/line-3x.json +10 -0
  89. package/dist/spec/catalogs/chart-types/line-with-high-low-and-markers.json +5 -0
  90. package/dist/spec/catalogs/chart-types/line-with-high-low.json +5 -0
  91. package/dist/spec/catalogs/chart-types/line-with-markers-2x.json +10 -0
  92. package/dist/spec/catalogs/chart-types/line-with-markers-3x.json +10 -0
  93. package/dist/spec/catalogs/chart-types/line-with-markers.json +5 -0
  94. package/dist/spec/catalogs/chart-types/line.json +5 -0
  95. package/dist/spec/catalogs/chart-types/pareto.json +9 -14
  96. package/dist/spec/catalogs/chart-types/pie.json +5 -0
  97. package/dist/spec/catalogs/chart-types/radar-with-markers.json +5 -0
  98. package/dist/spec/catalogs/chart-types/radar.json +5 -0
  99. package/dist/spec/catalogs/chart-types/scatter.json +5 -0
  100. package/dist/spec/catalogs/chart-types/sparkline-2x.json +5 -0
  101. package/dist/spec/catalogs/chart-types/sparkline-3x.json +5 -0
  102. package/dist/spec/catalogs/chart-types/sparkline-4x.json +5 -0
  103. package/dist/spec/catalogs/chart-types/sparkline-5x.json +5 -0
  104. package/dist/spec/catalogs/chart-types/sparkline-6x.json +5 -0
  105. package/dist/spec/catalogs/chart-types/sparkline.json +5 -0
  106. package/dist/spec/catalogs/chart-types/stacked-area-2x.json +10 -0
  107. package/dist/spec/catalogs/chart-types/stacked-area-3x.json +6 -1
  108. package/dist/spec/catalogs/chart-types/stacked-bar-2x.json +10 -0
  109. package/dist/spec/catalogs/chart-types/stacked-bar-3x.json +6 -1
  110. package/dist/spec/catalogs/chart-types/stacked-column-2x.json +10 -0
  111. package/dist/spec/catalogs/chart-types/stacked-column-3x.json +6 -1
  112. package/dist/spec/catalogs/chart-types/stacked-line-2x.json +10 -0
  113. package/dist/spec/catalogs/chart-types/stacked-line-3x.json +6 -1
  114. package/dist/spec/catalogs/chart-types/stacked-line-with-markers-2x.json +10 -0
  115. package/dist/spec/catalogs/chart-types/stacked-line-with-markers-3x.json +6 -1
  116. package/dist/spec/catalogs/chart-types/treemap-2x.json +10 -0
  117. package/dist/spec/catalogs/chart-types/treemap-3x.json +10 -0
  118. package/dist/spec/catalogs/chart-types/treemap.json +5 -0
  119. package/dist/spec/catalogs/chart-types/united-kingdom.json +10 -0
  120. package/dist/spec/catalogs/chart-types/united-states.json +10 -0
  121. package/dist/spec/catalogs/chart-types/waterfall.json +5 -0
  122. package/dist/spec/catalogs/chart-types/world.json +6 -1
  123. package/dist/spec/catalogs/font-schemes/consolas.json +3 -0
  124. package/dist/spec/catalogs/font-schemes/courier-new.json +3 -0
  125. package/dist/spec/catalogs/languages/afrikaans.json +3 -0
  126. package/dist/spec/catalogs/languages/albanian.json +3 -0
  127. package/dist/spec/catalogs/languages/amharic.json +3 -0
  128. package/dist/spec/catalogs/languages/arabic.json +3 -0
  129. package/dist/spec/catalogs/languages/armenian.json +3 -0
  130. package/dist/spec/catalogs/languages/aymara.json +3 -0
  131. package/dist/spec/catalogs/languages/azerbaijani.json +3 -0
  132. package/dist/spec/catalogs/languages/bengali.json +3 -0
  133. package/dist/spec/catalogs/languages/berber-latin.json +3 -0
  134. package/dist/spec/catalogs/languages/bosnian-latin.json +3 -0
  135. package/dist/spec/catalogs/languages/bulgarian.json +3 -0
  136. package/dist/spec/catalogs/languages/catalan.json +3 -0
  137. package/dist/spec/catalogs/languages/cebuano.json +3 -0
  138. package/dist/spec/catalogs/languages/chinese-simplified.json +3 -0
  139. package/dist/spec/catalogs/languages/chinese-traditional.json +3 -0
  140. package/dist/spec/catalogs/languages/chittagonian.json +3 -0
  141. package/dist/spec/catalogs/languages/croatian.json +3 -0
  142. package/dist/spec/catalogs/languages/czech.json +3 -0
  143. package/dist/spec/catalogs/languages/danish.json +3 -0
  144. package/dist/spec/catalogs/languages/dutch.json +3 -0
  145. package/dist/spec/catalogs/languages/english-au.json +3 -0
  146. package/dist/spec/catalogs/languages/english-ca.json +3 -0
  147. package/dist/spec/catalogs/languages/english-gb.json +3 -0
  148. package/dist/spec/catalogs/languages/english-in.json +3 -0
  149. package/dist/spec/catalogs/languages/english-us.json +3 -0
  150. package/dist/spec/catalogs/languages/english.json +3 -0
  151. package/dist/spec/catalogs/languages/estonian.json +3 -0
  152. package/dist/spec/catalogs/languages/filipino.json +3 -0
  153. package/dist/spec/catalogs/languages/finnish.json +3 -0
  154. package/dist/spec/catalogs/languages/french.json +3 -0
  155. package/dist/spec/catalogs/languages/fulfulde.json +3 -0
  156. package/dist/spec/catalogs/languages/galician.json +3 -0
  157. package/dist/spec/catalogs/languages/georgian.json +3 -0
  158. package/dist/spec/catalogs/languages/german.json +3 -0
  159. package/dist/spec/catalogs/languages/greek.json +3 -0
  160. package/dist/spec/catalogs/languages/gujarati.json +3 -0
  161. package/dist/spec/catalogs/languages/hausa.json +3 -0
  162. package/dist/spec/catalogs/languages/hebrew.json +3 -0
  163. package/dist/spec/catalogs/languages/hindi.json +3 -0
  164. package/dist/spec/catalogs/languages/hungarian.json +3 -0
  165. package/dist/spec/catalogs/languages/igbo.json +3 -0
  166. package/dist/spec/catalogs/languages/indonesian.json +3 -0
  167. package/dist/spec/catalogs/languages/italian.json +3 -0
  168. package/dist/spec/catalogs/languages/japanese.json +3 -0
  169. package/dist/spec/catalogs/languages/kannada.json +3 -0
  170. package/dist/spec/catalogs/languages/kazakh.json +3 -0
  171. package/dist/spec/catalogs/languages/khmer.json +3 -0
  172. package/dist/spec/catalogs/languages/kinyarwanda.json +3 -0
  173. package/dist/spec/catalogs/languages/korean.json +3 -0
  174. package/dist/spec/catalogs/languages/kurmanji.json +3 -0
  175. package/dist/spec/catalogs/languages/latvian.json +3 -0
  176. package/dist/spec/catalogs/languages/lithuanian.json +3 -0
  177. package/dist/spec/catalogs/languages/macedonian.json +3 -0
  178. package/dist/spec/catalogs/languages/malagasy.json +3 -0
  179. package/dist/spec/catalogs/languages/malay.json +3 -0
  180. package/dist/spec/catalogs/languages/malayalam.json +3 -0
  181. package/dist/spec/catalogs/languages/maori.json +3 -0
  182. package/dist/spec/catalogs/languages/marathi.json +3 -0
  183. package/dist/spec/catalogs/languages/mongolian.json +3 -0
  184. package/dist/spec/catalogs/languages/nepali.json +3 -0
  185. package/dist/spec/catalogs/languages/norwegian.json +3 -0
  186. package/dist/spec/catalogs/languages/odia.json +3 -0
  187. package/dist/spec/catalogs/languages/oromo.json +3 -0
  188. package/dist/spec/catalogs/languages/pashto.json +3 -0
  189. package/dist/spec/catalogs/languages/persian.json +3 -0
  190. package/dist/spec/catalogs/languages/polish.json +3 -0
  191. package/dist/spec/catalogs/languages/portuguese.json +3 -0
  192. package/dist/spec/catalogs/languages/punjabi-gurmukhi.json +3 -0
  193. package/dist/spec/catalogs/languages/punjabi-shahmukhi.json +3 -0
  194. package/dist/spec/catalogs/languages/romanian.json +3 -0
  195. package/dist/spec/catalogs/languages/russian.json +3 -0
  196. package/dist/spec/catalogs/languages/serbian-cyrillic.json +3 -0
  197. package/dist/spec/catalogs/languages/serbian-latin.json +3 -0
  198. package/dist/spec/catalogs/languages/shona.json +3 -0
  199. package/dist/spec/catalogs/languages/slovak.json +3 -0
  200. package/dist/spec/catalogs/languages/slovenian.json +3 -0
  201. package/dist/spec/catalogs/languages/somali.json +3 -0
  202. package/dist/spec/catalogs/languages/spanish.json +3 -0
  203. package/dist/spec/catalogs/languages/swahili.json +3 -0
  204. package/dist/spec/catalogs/languages/swedish.json +3 -0
  205. package/dist/spec/catalogs/languages/tagalog.json +3 -0
  206. package/dist/spec/catalogs/languages/tajik.json +3 -0
  207. package/dist/spec/catalogs/languages/tamil.json +3 -0
  208. package/dist/spec/catalogs/languages/telugu.json +3 -0
  209. package/dist/spec/catalogs/languages/thai.json +3 -0
  210. package/dist/spec/catalogs/languages/turkish.json +3 -0
  211. package/dist/spec/catalogs/languages/ukrainian.json +3 -0
  212. package/dist/spec/catalogs/languages/urdu.json +3 -0
  213. package/dist/spec/catalogs/languages/uzbek-latin.json +3 -0
  214. package/dist/spec/catalogs/languages/vietnamese-quoc-ngu.json +3 -0
  215. package/dist/spec/catalogs/languages/xhosa.json +3 -0
  216. package/dist/spec/catalogs/languages/yoruba.json +3 -0
  217. package/dist/spec/catalogs/languages/zulu.json +3 -0
  218. package/dist/spec/catalogs/narratives/board-meeting.json +21 -21
  219. package/dist/spec/catalogs/narratives/business-narrative.json +8 -8
  220. package/dist/spec/catalogs/narratives/business-review.json +12 -12
  221. package/dist/spec/catalogs/narratives/capacity-planning.json +8 -8
  222. package/dist/spec/catalogs/narratives/challenge-resolution.json +7 -7
  223. package/dist/spec/catalogs/narratives/change-story.json +64 -0
  224. package/dist/spec/catalogs/narratives/classic-story.json +7 -7
  225. package/dist/spec/catalogs/narratives/company-intro.json +9 -9
  226. package/dist/spec/catalogs/narratives/conference-talk.json +1 -1
  227. package/dist/spec/catalogs/narratives/data-story.json +66 -0
  228. package/dist/spec/catalogs/narratives/early-startup-pitch.json +12 -12
  229. package/dist/spec/catalogs/narratives/educate.json +9 -9
  230. package/dist/spec/catalogs/narratives/employee-review.json +8 -8
  231. package/dist/spec/catalogs/narratives/failure-analysis.json +10 -10
  232. package/dist/spec/catalogs/narratives/focus.json +12 -12
  233. package/dist/spec/catalogs/narratives/golden-circle.json +1 -1
  234. package/dist/spec/catalogs/narratives/heros-journey.json +64 -0
  235. package/dist/spec/catalogs/narratives/index.json +81 -0
  236. package/dist/spec/catalogs/narratives/innovation.json +9 -9
  237. package/dist/spec/catalogs/narratives/justice.json +11 -11
  238. package/dist/spec/catalogs/narratives/marketing-strategy.json +11 -11
  239. package/dist/spec/catalogs/narratives/performance-improvement-plan.json +8 -8
  240. package/dist/spec/catalogs/narratives/performance-review.json +11 -11
  241. package/dist/spec/catalogs/narratives/persuade.json +7 -7
  242. package/dist/spec/catalogs/narratives/persuasive-sales.json +8 -8
  243. package/dist/spec/catalogs/narratives/pitch-deck.json +3 -3
  244. package/dist/spec/catalogs/narratives/problem-solution.json +2 -2
  245. package/dist/spec/catalogs/narratives/product-launch.json +10 -10
  246. package/dist/spec/catalogs/narratives/project-proposal.json +10 -10
  247. package/dist/spec/catalogs/narratives/pyramid-principle.json +48 -0
  248. package/dist/spec/catalogs/narratives/qbr.json +3 -3
  249. package/dist/spec/catalogs/narratives/rags-to-riches.json +7 -7
  250. package/dist/spec/catalogs/narratives/reveal.json +8 -8
  251. package/dist/spec/catalogs/narratives/scqa.json +1 -1
  252. package/dist/spec/catalogs/narratives/situation-complication-resolution.json +56 -0
  253. package/dist/spec/catalogs/narratives/sparkline.json +56 -0
  254. package/dist/spec/catalogs/narratives/star-method.json +56 -0
  255. package/dist/spec/catalogs/narratives/status-update.json +6 -6
  256. package/dist/spec/catalogs/narratives/strategic-advisory.json +7 -7
  257. package/dist/spec/catalogs/narratives/strategic-narrative.json +1 -1
  258. package/dist/spec/catalogs/narratives/survey-analysis.json +10 -10
  259. package/dist/spec/catalogs/narratives/survival-story.json +10 -10
  260. package/dist/spec/catalogs/narratives/transformation-arc.json +1 -1
  261. package/dist/spec/catalogs/narratives/trend-analysis.json +7 -7
  262. package/dist/spec/catalogs/narratives/underdog-victory.json +8 -8
  263. package/dist/spec/catalogs/narratives/venture-pitch.json +12 -12
  264. package/dist/spec/catalogs/narratives/vision-roadmap.json +65 -0
  265. package/dist/spec/catalogs/narratives/weekly-progress.json +10 -10
  266. package/dist/spec/catalogs/narratives/what-so-what-now-what.json +48 -0
  267. package/dist/spec/openapi.yaml +5 -0
  268. package/dist/spec/reference/engine-defaults.json +2 -2
  269. package/dist/spec/reference/font-policy.json +3435 -0
  270. package/dist/spec/reference/font-policy.schema.json +328 -0
  271. package/dist/spec/schemas/chart-type.schema.json +51 -11
  272. package/dist/spec/schemas/font-scheme.schema.json +91 -1
  273. package/dist/spec/schemas/language.schema.json +10 -5
  274. package/dist/spec/schemas/opf.schema.json +241 -32
  275. package/dist/spec-files.d.ts +1 -1
  276. package/dist/spec-files.js +1 -1
  277. package/dist/types.d.ts +3 -3
  278. package/dist/validator.d.ts +7 -4
  279. package/dist/validator.js +4 -4
  280. package/package.json +6 -2
@@ -26,7 +26,7 @@
26
26
  "description": "Open by naming the question the survey was meant to answer. Why this, why now, who commissioned it. Anchor the audience in the decision the survey is designed to inform.",
27
27
  "instructions": "Present survey topic",
28
28
  "slideType": "text",
29
- "layoutHint": "text-1x-left"
29
+ "layoutHint": "text-1x"
30
30
  },
31
31
  {
32
32
  "id": "executive-summary",
@@ -34,7 +34,7 @@
34
34
  "description": "State the top three findings in plain language on a single slide. A reader who only sees this slide should still be able to make the right call. Avoid hedging — synthesis is the point.",
35
35
  "instructions": "Summarize key findings",
36
36
  "slideType": "text",
37
- "layoutHint": "text-1x-left"
37
+ "layoutHint": "text-1x"
38
38
  },
39
39
  {
40
40
  "id": "context",
@@ -42,7 +42,7 @@
42
42
  "description": "Detail the situation behind the survey: prior knowledge, related research, the gap this work fills. Just enough to position the findings as new information rather than restated common sense.",
43
43
  "instructions": "Detail survey background",
44
44
  "slideType": "text",
45
- "layoutHint": "text-1x-left"
45
+ "layoutHint": "text-1x"
46
46
  },
47
47
  {
48
48
  "id": "data-methodology",
@@ -50,7 +50,7 @@
50
50
  "description": "Describe how the data was collected and from whom. Sample size, recruitment, instrument, timing. Be honest about limitations; methodological transparency is what gives the findings their weight.",
51
51
  "instructions": "Discuss sourcing and collection",
52
52
  "slideType": "text",
53
- "layoutHint": "text-1x-left"
53
+ "layoutHint": "text-1x"
54
54
  },
55
55
  {
56
56
  "id": "data-summary",
@@ -58,7 +58,7 @@
58
58
  "description": "Give the audience an overview of the dataset before drilling in. Demographics, response rates, distribution of key variables. Help them calibrate what 'most' and 'few' mean in this study.",
59
59
  "instructions": "Provide data overview",
60
60
  "slideType": "text",
61
- "layoutHint": "text-1x-left"
61
+ "layoutHint": "text-1x"
62
62
  },
63
63
  {
64
64
  "id": "findings",
@@ -66,7 +66,7 @@
66
66
  "description": "Present the key insights one at a time. Lead each finding with the claim, then the chart. Avoid burying the point under the visualization — captions should restate the insight in words.",
67
67
  "instructions": "Highlight key insights",
68
68
  "slideType": "text",
69
- "layoutHint": "text-1x-left"
69
+ "layoutHint": "text-1x"
70
70
  },
71
71
  {
72
72
  "id": "data-analysis",
@@ -74,7 +74,7 @@
74
74
  "description": "Break down the data behind each finding: cross-tabs, segment splits, statistical confidence. This is the slide skeptics will scrutinize — make it scrutinizable.",
75
75
  "instructions": "Break down data",
76
76
  "slideType": "text",
77
- "layoutHint": "text-1x-left"
77
+ "layoutHint": "text-1x"
78
78
  },
79
79
  {
80
80
  "id": "implications",
@@ -82,7 +82,7 @@
82
82
  "description": "Translate findings into 'so what.' What changes for product, marketing, ops, the customer? Implications without consequences are interesting trivia, not research.",
83
83
  "instructions": "Discuss survey implications",
84
84
  "slideType": "text",
85
- "layoutHint": "text-1x-left"
85
+ "layoutHint": "text-1x"
86
86
  },
87
87
  {
88
88
  "id": "recommendations",
@@ -90,13 +90,13 @@
90
90
  "description": "Provide the actions that follow from the implications. Prioritize, attach owners, mark which require decisions. This is where research becomes useful.",
91
91
  "instructions": "Provide action plans",
92
92
  "slideType": "text",
93
- "layoutHint": "text-1x-left"
93
+ "layoutHint": "text-1x"
94
94
  },
95
95
  {
96
96
  "id": "conclusion",
97
97
  "name": "Conclusion",
98
98
  "description": "Recap the headline finding and the most important recommendation. End with the next step — a follow-on study, a workshop, a decision — so the work doesn't sit on a shelf.",
99
- "layoutHint": "title-left",
99
+ "layoutHint": "title",
100
100
  "instructions": "Recap and finalize",
101
101
  "slideType": "text"
102
102
  }
@@ -25,7 +25,7 @@
25
25
  "description": "Open in the middle of the disaster. Specific moment, specific stakes, specific damage. Drop the audience into the worst point of the story before walking them back.",
26
26
  "instructions": "Present initial disaster",
27
27
  "slideType": "text",
28
- "layoutHint": "text-1x-left"
28
+ "layoutHint": "text-1x"
29
29
  },
30
30
  {
31
31
  "id": "backstory",
@@ -33,7 +33,7 @@
33
33
  "description": "Detail the events that led up to the catastrophe. Just enough for the audience to understand how the disaster could have happened. Avoid moralizing — the story does the work.",
34
34
  "instructions": "Detail past events",
35
35
  "slideType": "text",
36
- "layoutHint": "text-1x-left"
36
+ "layoutHint": "text-1x"
37
37
  },
38
38
  {
39
39
  "id": "blueprint",
@@ -41,7 +41,7 @@
41
41
  "description": "Illustrate the recovery plan. Specific moves, specific bets, specific people. The audience should see the strategy as more than 'try hard.'",
42
42
  "instructions": "Illustrate recovery plans",
43
43
  "slideType": "text",
44
- "layoutHint": "text-1x-left"
44
+ "layoutHint": "text-1x"
45
45
  },
46
46
  {
47
47
  "id": "danger",
@@ -49,7 +49,7 @@
49
49
  "description": "Highlight the emerging threats to the recovery plan. New risks, returning ones. Tension here makes the eventual triumph credible.",
50
50
  "instructions": "Highlight emerging threats",
51
51
  "slideType": "text",
52
- "layoutHint": "text-1x-left"
52
+ "layoutHint": "text-1x"
53
53
  },
54
54
  {
55
55
  "id": "endeavor",
@@ -57,7 +57,7 @@
57
57
  "description": "Show the determined effort underway. The hours, the trade-offs, the discipline. The audience must feel the work, not just hear about it.",
58
58
  "instructions": "Show determination effort",
59
59
  "slideType": "text",
60
- "layoutHint": "text-1x-left"
60
+ "layoutHint": "text-1x"
61
61
  },
62
62
  {
63
63
  "id": "struggles",
@@ -65,7 +65,7 @@
65
65
  "description": "Showcase challenging moments along the way: the setbacks, the false starts, the hard calls. Honest setbacks make eventual success feel earned.",
66
66
  "instructions": "Showcase challenging encounters",
67
67
  "slideType": "text",
68
- "layoutHint": "text-1x-left"
68
+ "layoutHint": "text-1x"
69
69
  },
70
70
  {
71
71
  "id": "pivot",
@@ -73,7 +73,7 @@
73
73
  "description": "Highlight the strategic shift that changed the trajectory. What got reconsidered, what got dropped, what got doubled down on. The pivot is the moment the protagonist became something new.",
74
74
  "instructions": "Highlight strategy shift",
75
75
  "slideType": "text",
76
- "layoutHint": "text-1x-left"
76
+ "layoutHint": "text-1x"
77
77
  },
78
78
  {
79
79
  "id": "breakthrough",
@@ -81,7 +81,7 @@
81
81
  "description": "Emphasize the moment adversity finally broke. Concrete result, concrete date. Let the slide land — the audience came for this turn.",
82
82
  "instructions": "Emphasize overcoming adversity",
83
83
  "slideType": "text",
84
- "layoutHint": "text-1x-left"
84
+ "layoutHint": "text-1x"
85
85
  },
86
86
  {
87
87
  "id": "legacy",
@@ -89,13 +89,13 @@
89
89
  "description": "Discuss the enduring impact. What survival made possible afterward, who benefited, what was built on top. Survival stories are most powerful when they create more than they restore.",
90
90
  "instructions": "Discuss enduring impact",
91
91
  "slideType": "text",
92
- "layoutHint": "text-1x-left"
92
+ "layoutHint": "text-1x"
93
93
  },
94
94
  {
95
95
  "id": "takeaway",
96
96
  "name": "Takeaway",
97
97
  "description": "Share the lesson the audience can carry away. One transferable insight, framed for their own challenges — not a general moral.",
98
- "layoutHint": "title-left",
98
+ "layoutHint": "title",
99
99
  "instructions": "Share important lessons",
100
100
  "slideType": "text"
101
101
  }
@@ -44,7 +44,7 @@
44
44
  "id": "ask",
45
45
  "name": "Ask",
46
46
  "description": "Close with the single low-friction action that starts the audience across the bridge. Make it small enough to act on now and meaningful enough to count as commitment.",
47
- "layoutHint": "title-left"
47
+ "layoutHint": "title"
48
48
  }
49
49
  ]
50
50
  }
@@ -25,7 +25,7 @@
25
25
  "description": "Open by establishing why this trend matters now. Tie it to a decision on the table or a forecast that's about to be made. Trends without consequences are filler.",
26
26
  "instructions": "Ignite interest, establish significance",
27
27
  "slideType": "text",
28
- "layoutHint": "text-1x-left"
28
+ "layoutHint": "text-1x"
29
29
  },
30
30
  {
31
31
  "id": "historical-comparison",
@@ -33,7 +33,7 @@
33
33
  "description": "Contrast current data with the relevant past. Pick the comparison window that makes the trend visible without cherry-picking. Be honest about base effects.",
34
34
  "instructions": "Contrast current and past data",
35
35
  "slideType": "text",
36
- "layoutHint": "text-1x-left"
36
+ "layoutHint": "text-1x"
37
37
  },
38
38
  {
39
39
  "id": "pattern-identification",
@@ -41,7 +41,7 @@
41
41
  "description": "Name the recurring outcome you've spotted. Use one or two strong charts that show the pattern unambiguously. Avoid overclaiming significance from a small N.",
42
42
  "instructions": "Point out recurring outcomes",
43
43
  "slideType": "text",
44
- "layoutHint": "text-1x-left"
44
+ "layoutHint": "text-1x"
45
45
  },
46
46
  {
47
47
  "id": "future-prediction",
@@ -49,7 +49,7 @@
49
49
  "description": "Project where the trend leads if it continues. Show the forecast and the confidence interval. State the assumptions that would have to break for the prediction to fail.",
50
50
  "instructions": "Predict using established patterns",
51
51
  "slideType": "text",
52
- "layoutHint": "text-1x-left"
52
+ "layoutHint": "text-1x"
53
53
  },
54
54
  {
55
55
  "id": "action-plan",
@@ -57,7 +57,7 @@
57
57
  "description": "Translate the prediction into the strategy it implies. Specific actions, sequenced. Each action should map to a particular reading of the trend, not a generic best practice.",
58
58
  "instructions": "Strategies based on prediction",
59
59
  "slideType": "text",
60
- "layoutHint": "text-1x-left"
60
+ "layoutHint": "text-1x"
61
61
  },
62
62
  {
63
63
  "id": "implementation",
@@ -65,13 +65,13 @@
65
65
  "description": "Walk through how the actions get executed: owners, milestones, monitoring. The audience should leave understanding what to do tomorrow, not just what to think about.",
66
66
  "instructions": "Discuss strategy execution",
67
67
  "slideType": "text",
68
- "layoutHint": "text-1x-left"
68
+ "layoutHint": "text-1x"
69
69
  },
70
70
  {
71
71
  "id": "conclusion",
72
72
  "name": "Conclusion",
73
73
  "description": "Recap the trend, the forecast, and the recommended action. End with the leading indicator you'll watch to know if the call is right.",
74
- "layoutHint": "title-left",
74
+ "layoutHint": "title",
75
75
  "instructions": "Summarize key points",
76
76
  "slideType": "text"
77
77
  }
@@ -25,7 +25,7 @@
25
25
  "description": "Establish the opening scene: who the underdog is and the world that overlooked them. Specific details make the rest of the journey feel real.",
26
26
  "instructions": "Establish opening scene",
27
27
  "slideType": "text",
28
- "layoutHint": "text-1x-left"
28
+ "layoutHint": "text-1x"
29
29
  },
30
30
  {
31
31
  "id": "struggles",
@@ -33,7 +33,7 @@
33
33
  "description": "Highlight the early setbacks. What didn't work, who said no, where the path closed up. The audience needs to feel the doubt before they can feel the win.",
34
34
  "instructions": "Highlight initial setbacks",
35
35
  "slideType": "text",
36
- "layoutHint": "text-1x-left"
36
+ "layoutHint": "text-1x"
37
37
  },
38
38
  {
39
39
  "id": "determination",
@@ -41,7 +41,7 @@
41
41
  "description": "Showcase the enduring passion that kept the underdog going. What they refused to give up on, and why. Determination, in this beat, is the only resource the underdog has.",
42
42
  "instructions": "Showcase enduring passion",
43
43
  "slideType": "text",
44
- "layoutHint": "text-1x-left"
44
+ "layoutHint": "text-1x"
45
45
  },
46
46
  {
47
47
  "id": "crisis",
@@ -49,7 +49,7 @@
49
49
  "description": "Identify the lowest point of the journey. The moment the dream nearly ended. Don't soften — the contrast with the triumph ahead depends on the depth of this slide.",
50
50
  "instructions": "Identify lowest point",
51
51
  "slideType": "text",
52
- "layoutHint": "text-1x-left"
52
+ "layoutHint": "text-1x"
53
53
  },
54
54
  {
55
55
  "id": "resolve",
@@ -57,7 +57,7 @@
57
57
  "description": "Articulate the choice the underdog made to keep going. The strong will, the small bet, the borrowed faith. Resolve is where the protagonist becomes someone the audience roots for.",
58
58
  "instructions": "Articulate strong will",
59
59
  "slideType": "text",
60
- "layoutHint": "text-1x-left"
60
+ "layoutHint": "text-1x"
61
61
  },
62
62
  {
63
63
  "id": "breakthrough",
@@ -65,7 +65,7 @@
65
65
  "description": "Show the reward of perseverance: the customer who said yes, the door that opened, the fortune that turned. The breakthrough should feel earned, not granted.",
66
66
  "instructions": "Reward of perseverance",
67
67
  "slideType": "text",
68
- "layoutHint": "text-1x-left"
68
+ "layoutHint": "text-1x"
69
69
  },
70
70
  {
71
71
  "id": "triumph",
@@ -73,13 +73,13 @@
73
73
  "description": "Reveal the ultimate success. Concrete outcomes, named milestones. The triumph is the audience's emotional payoff — let it land.",
74
74
  "instructions": "Reveal ultimate success",
75
75
  "slideType": "text",
76
- "layoutHint": "text-1x-left"
76
+ "layoutHint": "text-1x"
77
77
  },
78
78
  {
79
79
  "id": "legacy",
80
80
  "name": "Legacy",
81
81
  "description": "Share the lasting impact. What the underdog's victory makes possible for those who come after. The legacy beat is what turns a story into a lesson.",
82
- "layoutHint": "title-left",
82
+ "layoutHint": "title",
83
83
  "instructions": "Share long-lasting impact",
84
84
  "slideType": "text"
85
85
  }
@@ -26,84 +26,84 @@
26
26
  "name": "Opening",
27
27
  "instructions": "Establish identity",
28
28
  "slideType": "text",
29
- "layoutHint": "text-1x-left"
29
+ "layoutHint": "text-1x"
30
30
  },
31
31
  {
32
32
  "id": "purpose",
33
33
  "name": "Purpose",
34
34
  "instructions": "State your mission",
35
35
  "slideType": "text",
36
- "layoutHint": "text-1x-left"
36
+ "layoutHint": "text-1x"
37
37
  },
38
38
  {
39
39
  "id": "problem",
40
40
  "name": "Problem",
41
41
  "instructions": "Present the challenge",
42
42
  "slideType": "text",
43
- "layoutHint": "text-1x-left"
43
+ "layoutHint": "text-1x"
44
44
  },
45
45
  {
46
46
  "id": "solution",
47
47
  "name": "Solution",
48
48
  "instructions": "Propose your idea",
49
49
  "slideType": "text",
50
- "layoutHint": "text-1x-left"
50
+ "layoutHint": "text-1x"
51
51
  },
52
52
  {
53
53
  "id": "why-now",
54
54
  "name": "Why Now",
55
55
  "instructions": "Explain timing importance",
56
56
  "slideType": "text",
57
- "layoutHint": "text-1x-left"
57
+ "layoutHint": "text-1x"
58
58
  },
59
59
  {
60
60
  "id": "market-size",
61
61
  "name": "Market Size",
62
62
  "instructions": "Demonstrate potential",
63
63
  "slideType": "text",
64
- "layoutHint": "text-1x-left"
64
+ "layoutHint": "text-1x"
65
65
  },
66
66
  {
67
67
  "id": "competition",
68
68
  "name": "Competition",
69
69
  "instructions": "Analyze competitive landscape",
70
70
  "slideType": "text",
71
- "layoutHint": "text-1x-left"
71
+ "layoutHint": "text-1x"
72
72
  },
73
73
  {
74
74
  "id": "product",
75
75
  "name": "Product",
76
76
  "instructions": "Showcase features/benefits",
77
77
  "slideType": "text",
78
- "layoutHint": "text-1x-left"
78
+ "layoutHint": "text-1x"
79
79
  },
80
80
  {
81
81
  "id": "business-model",
82
82
  "name": "Business Model",
83
83
  "instructions": "Detail revenue streams",
84
84
  "slideType": "text",
85
- "layoutHint": "text-1x-left"
85
+ "layoutHint": "text-1x"
86
86
  },
87
87
  {
88
88
  "id": "team",
89
89
  "name": "Team",
90
90
  "instructions": "Highlight key members",
91
91
  "slideType": "text",
92
- "layoutHint": "text-1x-left"
92
+ "layoutHint": "text-1x"
93
93
  },
94
94
  {
95
95
  "id": "financials",
96
96
  "name": "Financials",
97
97
  "instructions": "Show projections/needs",
98
98
  "slideType": "text",
99
- "layoutHint": "text-1x-left"
99
+ "layoutHint": "text-1x"
100
100
  },
101
101
  {
102
102
  "id": "closing",
103
103
  "name": "Closing",
104
104
  "instructions": "Reinforce brand",
105
105
  "slideType": "text",
106
- "layoutHint": "text-1x-left"
106
+ "layoutHint": "text-1x"
107
107
  }
108
108
  ]
109
109
  }
@@ -0,0 +1,65 @@
1
+ {
2
+ "$schema": "https://openpresentation.org/schema/opf-narrative/v1",
3
+ "id": "vision-roadmap",
4
+ "name": "Vision to Roadmap",
5
+ "summary": "Connects a compelling long-term vision to near-term executable plans, bridging aspiration and action.",
6
+ "description": "Connects a compelling long-term vision to near-term executable plans, bridging aspiration and action. Open with a specific three-to-five-year North Star, honestly diagnose the gap between today and that vision, organize the strategy into two to four named pillars, show the phased roadmap with milestones and dependencies, and end with concrete, assigned first steps for the next 30-90 days. The tone is inspirational and strategic: it creates shared direction and commitment to a plan. Best for strategic planning, annual kickoffs, product strategy, and OKR launches; typical decks run 8-20 slides.",
7
+ "audienceFit": [
8
+ "leadership-teams",
9
+ "board",
10
+ "product-and-strategy-teams",
11
+ "all-hands"
12
+ ],
13
+ "durationRange": {
14
+ "minMinutes": 15,
15
+ "maxMinutes": 45
16
+ },
17
+ "tags": [
18
+ "strategy",
19
+ "roadmap",
20
+ "planning",
21
+ "vision"
22
+ ],
23
+ "beats": [
24
+ {
25
+ "id": "vision",
26
+ "name": "Vision",
27
+ "description": "State the 3-5 year North Star. It should be specific, memorable, and directional rather than generic.",
28
+ "instructions": "Paint the future state clearly.",
29
+ "slideType": "text",
30
+ "layoutHint": "title-subtitle"
31
+ },
32
+ {
33
+ "id": "current-state-gap",
34
+ "name": "Current State Gap",
35
+ "description": "Honestly assess where you are today versus the vision. The gap justifies the plan.",
36
+ "instructions": "Define the gap between today and the vision.",
37
+ "slideType": "text",
38
+ "layoutHint": "text-2x"
39
+ },
40
+ {
41
+ "id": "strategic-pillars",
42
+ "name": "Strategic Pillars",
43
+ "description": "Organize the strategy into 2-4 named priority themes. Each pillar should be independently compelling.",
44
+ "instructions": "Name the strategic pillars that close the gap.",
45
+ "slideType": "text",
46
+ "layoutHint": "text-3x"
47
+ },
48
+ {
49
+ "id": "roadmap",
50
+ "name": "Roadmap",
51
+ "description": "Show the phased execution plan with timeframes, milestones, and dependencies. Gantt or swim lane formats work well.",
52
+ "instructions": "Sequence the initiatives over time.",
53
+ "slideType": "timeline",
54
+ "layoutHint": "timeline-1x"
55
+ },
56
+ {
57
+ "id": "first-steps",
58
+ "name": "First Steps",
59
+ "description": "Close with concrete, assigned actions for the next 30-90 days. Remove the gap between inspiration and execution.",
60
+ "instructions": "Identify the immediate moves that start execution.",
61
+ "slideType": "text",
62
+ "layoutHint": "title"
63
+ }
64
+ ]
65
+ }
@@ -23,7 +23,7 @@
23
23
  "id": "opening",
24
24
  "name": "Opening",
25
25
  "description": "Open with the initiative name, the date, and the one-line headline for the week. Frame the meeting in fifteen seconds so the rest of the time is content.",
26
- "layoutHint": "title-left",
26
+ "layoutHint": "title",
27
27
  "instructions": "Initiative name & date",
28
28
  "slideType": "text"
29
29
  },
@@ -33,7 +33,7 @@
33
33
  "description": "State what the team set out to do this week. Specific, measurable. The audience should be able to read this slide alone and know what 'on track' would mean.",
34
34
  "instructions": "Set the expectations",
35
35
  "slideType": "text",
36
- "layoutHint": "text-1x-left"
36
+ "layoutHint": "text-1x"
37
37
  },
38
38
  {
39
39
  "id": "achievements",
@@ -41,7 +41,7 @@
41
41
  "description": "Celebrate the week's wins. Concrete, attributable, dated. Brevity here — the meeting is for what's next, not a victory lap.",
42
42
  "instructions": "Celebrate success",
43
43
  "slideType": "text",
44
- "layoutHint": "text-1x-left"
44
+ "layoutHint": "text-1x"
45
45
  },
46
46
  {
47
47
  "id": "overall-progress",
@@ -49,7 +49,7 @@
49
49
  "description": "Evaluate performance against the objectives. Use a simple status indicator (green/yellow/red) plus the leading metric. Help the audience scan the state in seconds.",
50
50
  "instructions": "Evaluate performance",
51
51
  "slideType": "text",
52
- "layoutHint": "text-1x-left"
52
+ "layoutHint": "text-1x"
53
53
  },
54
54
  {
55
55
  "id": "challenges",
@@ -57,7 +57,7 @@
57
57
  "description": "Address what's hard right now: blockers, slipping items, surfaced risks. Tie each challenge to either an owner working it or a discussion you want this week.",
58
58
  "instructions": "Address difficulties",
59
59
  "slideType": "text",
60
- "layoutHint": "text-1x-left"
60
+ "layoutHint": "text-1x"
61
61
  },
62
62
  {
63
63
  "id": "opportunities-for-improvement",
@@ -65,7 +65,7 @@
65
65
  "description": "Surface where the team can level up. Process tweaks, tooling needs, ways of working. Improvement opportunities should feel like seeds, not corrections.",
66
66
  "instructions": "Seek growth",
67
67
  "slideType": "text",
68
- "layoutHint": "text-1x-left"
68
+ "layoutHint": "text-1x"
69
69
  },
70
70
  {
71
71
  "id": "highlights-recognition",
@@ -73,7 +73,7 @@
73
73
  "description": "Recognize specific contributions by name. Recognition belongs in the deck, not just in the meeting — written acknowledgment travels further than verbal.",
74
74
  "instructions": "Appreciate efforts",
75
75
  "slideType": "text",
76
- "layoutHint": "text-1x-left"
76
+ "layoutHint": "text-1x"
77
77
  },
78
78
  {
79
79
  "id": "goals-next-week",
@@ -81,7 +81,7 @@
81
81
  "description": "Plan the week ahead with three to five specific goals. Each should be small enough to finish, large enough to matter, and clearly owned.",
82
82
  "instructions": "Plan ahead",
83
83
  "slideType": "text",
84
- "layoutHint": "text-1x-left"
84
+ "layoutHint": "text-1x"
85
85
  },
86
86
  {
87
87
  "id": "discussion-feedback",
@@ -89,13 +89,13 @@
89
89
  "description": "Open the floor with two or three prompts — decisions you need, opinions you want, blockers you'd like cleared. End the recap actively.",
90
90
  "instructions": "Encourage input",
91
91
  "slideType": "text",
92
- "layoutHint": "text-1x-left"
92
+ "layoutHint": "text-1x"
93
93
  },
94
94
  {
95
95
  "id": "conclusion",
96
96
  "name": "Conclusion",
97
97
  "description": "Close with one line that motivates the team into the next week. Echo the headline so the meeting feels closed.",
98
- "layoutHint": "title-left",
98
+ "layoutHint": "title",
99
99
  "instructions": "Recap & motivate",
100
100
  "slideType": "text"
101
101
  }
@@ -0,0 +1,48 @@
1
+ {
2
+ "$schema": "https://openpresentation.org/schema/opf-narrative/v1",
3
+ "id": "what-so-what-now-what",
4
+ "name": "What-So What-Now What",
5
+ "summary": "Concise framework that connects information to meaning to action. Perfect for executive audiences.",
6
+ "description": "A concise framework that connects information to meaning to action. Present the facts or findings objectively, explain why they matter to this audience, then state the decisions or next steps they require. The tone is analytical: data-forward and respectful of executive time, with no scene-setting beyond what the facts need. Best for executive briefings, status updates, and research findings; typical decks run 3-6 slides (analytics report, team performance review, strategy update).",
7
+ "audienceFit": [
8
+ "executive",
9
+ "senior-managers",
10
+ "board"
11
+ ],
12
+ "durationRange": {
13
+ "minMinutes": 5,
14
+ "maxMinutes": 15
15
+ },
16
+ "tags": [
17
+ "executive",
18
+ "briefing",
19
+ "analytical",
20
+ "action"
21
+ ],
22
+ "beats": [
23
+ {
24
+ "id": "what",
25
+ "name": "What",
26
+ "description": "Present the facts, data, or findings objectively and clearly.",
27
+ "instructions": "Present the facts, data, or findings objectively and clearly.",
28
+ "slideType": "chart",
29
+ "layoutHint": "chart-1x"
30
+ },
31
+ {
32
+ "id": "so-what",
33
+ "name": "So What",
34
+ "description": "Explain the significance. Why should your audience care about this information?",
35
+ "instructions": "Explain the significance. Why should your audience care about this information?",
36
+ "slideType": "metric",
37
+ "layoutHint": "number-2x"
38
+ },
39
+ {
40
+ "id": "now-what",
41
+ "name": "Now What",
42
+ "description": "Define the action required. What decisions or next steps follow from this?",
43
+ "instructions": "Define the action required. What decisions or next steps follow from this?",
44
+ "slideType": "text",
45
+ "layoutHint": "title"
46
+ }
47
+ ]
48
+ }
@@ -493,6 +493,10 @@ components:
493
493
  type: object
494
494
  additionalProperties: true
495
495
  description: Optional design system (theme, colorScheme, fontScheme, dimensions, background, logo, header, footer, etc).
496
+ variables:
497
+ type: object
498
+ additionalProperties: true
499
+ description: Optional named color variables referenced from content color fields as `var:<id>` strings.
496
500
  assets:
497
501
  type: object
498
502
  additionalProperties: true
@@ -719,6 +723,7 @@ components:
719
723
  type: string
720
724
  color:
721
725
  type: string
726
+ description: Hex color, color-scheme slot/role name, or `var:<id>` variable reference (ColorRef in the canonical schema).
722
727
  alignment:
723
728
  type: string
724
729
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "description": "Reference example of engine-side defaults consumed by an OPF runtime. Not part of the OPF document contract - engines load this file (or their own copy) at startup to fall back when an OPF document doesn't specify a value. There is no companion JSON Schema for this file: it is engine config, not a catalog record. Every catalog-referencing value below is resolved through the catalog system the same way an explicit reference in an OPF document would be (inline catalogs.<kind>.records[] -> catalogs.<kind>.source -> default catalog at https://www.pptx.gallery/<kind>). The optional catalogs.<kind>.source overrides below let a deployment redirect all default catalog fetches at once (e.g., to an internal mirror or local package), without each OPF document needing its own catalogs block. The 'chartTypes' array is in priority order: chartTypes[0] is the engine's primary chart type, chartTypes[1] secondary, chartTypes[2] tertiary.",
2
+ "description": "Reference example of engine-side defaults consumed by an OPF runtime. Not part of the OPF document contract - engines load this file (or their own copy) at startup to fall back when an OPF document doesn't specify a value. There is no companion JSON Schema for this file: it is engine config, not a catalog record. Every catalog-referencing value below is resolved through the catalog system the same way an explicit reference in an OPF document would be (inline catalogs.<kind>.records[] -> catalogs.<kind>.source -> default catalog at https://www.pptx.gallery/<kind>). The optional catalogs.<kind>.source overrides below let a deployment redirect all default catalog fetches at once (e.g., to an internal mirror or local package), without each OPF document needing its own catalogs block. The 'chartTypes' array is in priority order: chartTypes[0] is the engine's primary chart type, chartTypes[1] secondary, chartTypes[2] tertiary. 'fontScheme.pptx' holds the last-resort font scheme that every current engine shares: core pagination, preview, editor and PPTX export all use 'aptos' (exported by @openpresentation/opf as DEFAULT_FONT_SCHEME), so a custom theme without a font scheme is measured, previewed and exported in the same fonts. No current engine reads 'fontScheme.google': it is the intended default for a future Google Slides exporter, whose output renders in Google-hosted fonts.",
3
3
 
4
4
  "catalogs": {
5
5
  "narratives": { "source": "https://www.pptx.gallery/narratives" },
@@ -29,7 +29,7 @@
29
29
  "chartTypes": [
30
30
  "stacked-column-3x",
31
31
  "stacked-area-3x",
32
- "line-with-markers-3x"
32
+ "line-with-markers"
33
33
  ]
34
34
  }
35
35