@aivorynet/slaide 1.0.5 → 1.2.0

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 (52) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/compiler/chrome.d.ts +5 -1
  3. package/dist/compiler/chrome.js +51 -5
  4. package/dist/compiler/chrome.js.map +1 -1
  5. package/dist/compiler/compile.d.ts +7 -1
  6. package/dist/compiler/compile.js +94 -6
  7. package/dist/compiler/compile.js.map +1 -1
  8. package/dist/compiler/markdown.js +24 -4
  9. package/dist/compiler/markdown.js.map +1 -1
  10. package/dist/compiler/unknown-vars.d.ts +16 -0
  11. package/dist/compiler/unknown-vars.js +134 -0
  12. package/dist/compiler/unknown-vars.js.map +1 -0
  13. package/dist/container.js +9 -0
  14. package/dist/container.js.map +1 -1
  15. package/dist/export-pptx/embed-fonts.d.ts +1 -0
  16. package/dist/export-pptx/embed-fonts.js +42 -7
  17. package/dist/export-pptx/embed-fonts.js.map +1 -1
  18. package/dist/export-pptx/pptx.js +139 -13
  19. package/dist/export-pptx/pptx.js.map +1 -1
  20. package/dist/index.d.ts +10 -2
  21. package/dist/index.js +26 -2
  22. package/dist/index.js.map +1 -1
  23. package/dist/master-io.js +1 -0
  24. package/dist/master-io.js.map +1 -1
  25. package/dist/optimize/export-optimize.d.ts +26 -0
  26. package/dist/optimize/export-optimize.js +104 -5
  27. package/dist/optimize/export-optimize.js.map +1 -1
  28. package/dist/parser/parse.js +23 -3
  29. package/dist/parser/parse.js.map +1 -1
  30. package/dist/render/anim.js +5 -5
  31. package/dist/render/anim.js.map +1 -1
  32. package/dist/render/css.js +1 -1
  33. package/dist/render/html.js +8 -1
  34. package/dist/render/html.js.map +1 -1
  35. package/dist/render/runtime.js +12 -10
  36. package/dist/render/runtime.js.map +1 -1
  37. package/dist/render-pdf/pdf.js +22 -3
  38. package/dist/render-pdf/pdf.js.map +1 -1
  39. package/dist/render-png/montage.js +7 -2
  40. package/dist/render-png/montage.js.map +1 -1
  41. package/dist/render-png/shoot.d.ts +6 -0
  42. package/dist/render-png/shoot.js +20 -7
  43. package/dist/render-png/shoot.js.map +1 -1
  44. package/dist/types.d.ts +22 -2
  45. package/dist/vocab.d.ts +4 -1
  46. package/dist/vocab.js +10 -4
  47. package/dist/vocab.js.map +1 -1
  48. package/package.json +1 -1
  49. package/skills/slaide/grammar.md +2 -1
  50. package/skills/slaide/reference.md +7 -3
  51. package/skills/slaide/themes.md +16 -3
  52. package/themes/blank.slaide.yaml +62 -0
@@ -1 +1 @@
1
- {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/render/html.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/render/html.ts"],"names":[],"mappings":"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"}
@@ -46,11 +46,11 @@ export const RUNTIME_JS = String.raw `
46
46
  function scale(){
47
47
  var pres = isPresenting();
48
48
  var cs = getComputedStyle(document.documentElement);
49
- var dl = pres ? 0 : cssVar(cs,'--sl-dock-left'), dr = pres ? 0 : cssVar(cs,'--sl-dock-right');
50
- var dt = pres ? 0 : cssVar(cs,'--sl-dock-top');
49
+ var dl = pres ? 0 : cssVar(cs,'--slaide--dock-left'), dr = pres ? 0 : cssVar(cs,'--slaide--dock-right');
50
+ var dt = pres ? 0 : cssVar(cs,'--slaide--dock-top');
51
51
  // Bottom dock = chrome dock (bstrip/filmstrip, absolute) + notes reservation (independent), so
52
- // the two writers never clobber each other. .sl-notes sits at --sl-dock-bottom (above the chrome).
53
- var db = pres ? 0 : cssVar(cs,'--sl-dock-bottom') + cssVar(cs,'--sl-dock-notes');
52
+ // the two writers never clobber each other. .sl-notes sits at --slaide--dock-bottom (above the chrome).
53
+ var db = pres ? 0 : cssVar(cs,'--slaide--dock-bottom') + cssVar(cs,'--slaide--dock-notes');
54
54
  var vw = window.innerWidth - dl - dr, vh = window.innerHeight - dt - db;
55
55
  var fit = Math.min(vw/CW, vh/CH);
56
56
  var s = fit * zoomFactor;
@@ -150,17 +150,17 @@ export const RUNTIME_JS = String.raw `
150
150
  function toggle(sel){ var e=document.querySelector(sel); if(e) e.classList.toggle('sl-open'); updateChrome(); }
151
151
  var NOTES_H = 180;
152
152
  // Dock the notes panel BENEATH the slide (not floating over it). The panel is a fixed sibling;
153
- // it reserves its own space via the INDEPENDENT --sl-dock-notes var (summed into the stage fit by
154
- // scale()), and anchors at --sl-dock-bottom so it sits flush above the chrome dock (the editor
155
- // filmstrip, or nothing). Keeping notes' reservation separate from --sl-dock-bottom means the
153
+ // it reserves its own space via the INDEPENDENT --slaide--dock-notes var (summed into the stage fit by
154
+ // scale()), and anchors at --slaide--dock-bottom so it sits flush above the chrome dock (the editor
155
+ // filmstrip, or nothing). Keeping notes' reservation separate from --slaide--dock-bottom means the
156
156
  // bstrip's absolute writes and the notes' toggle never clobber each other (no overlap on toggle).
157
157
  function setNotesOpen(open){
158
158
  var np = document.querySelector('.sl-notes');
159
159
  if(!np) return;
160
160
  if(open === np.classList.contains('sl-open')) return; // already in the requested state
161
161
  var ds = document.documentElement.style;
162
- if(open){ np.classList.add('sl-open'); ds.setProperty('--sl-dock-notes', NOTES_H + 'px'); }
163
- else { np.classList.remove('sl-open'); ds.setProperty('--sl-dock-notes', '0px'); }
162
+ if(open){ np.classList.add('sl-open'); ds.setProperty('--slaide--dock-notes', NOTES_H + 'px'); }
163
+ else { np.classList.remove('sl-open'); ds.setProperty('--slaide--dock-notes', '0px'); }
164
164
  // innerHTML is populated by the updateChrome() call below (it fills .sl-notes when open).
165
165
  scale();
166
166
  updateChrome();
@@ -328,7 +328,9 @@ export const RUNTIME_JS = String.raw `
328
328
  case 'Escape':
329
329
  // Close any open overlay (help, etc.) directly; notes go through setNotesOpen so the
330
330
  // reserved bottom dock unwinds too. (Loop param is el; the outer e is the KeyboardEvent.)
331
- document.querySelectorAll('.sl-open').forEach(function(el){ if(!el.classList.contains('sl-notes')) el.classList.remove('sl-open'); });
331
+ // A host surface (e.g. an editor pane) marks itself data-sl-pin to opt OUT of Esc-close
332
+ // it owns its own lifecycle; the runtime knows nothing about what it is.
333
+ document.querySelectorAll('.sl-open').forEach(function(el){ if(!el.classList.contains('sl-notes') && !el.hasAttribute('data-sl-pin')) el.classList.remove('sl-open'); });
332
334
  setNotesOpen(false);
333
335
  break;
334
336
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/render/runtime.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,sCAAsC;AACtC,8EAA8E;AAC9E,uFAAuF;AACvF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkbnC,CAAC"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/render/runtime.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,sCAAsC;AACtC,8EAA8E;AAC9E,uFAAuF;AACvF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAobnC,CAAC"}
@@ -28,11 +28,30 @@ export async function renderPdfFromHtml(html, out, canvas, injected) {
28
28
  await page.setContent(html, { waitUntil: 'networkidle' });
29
29
  // Ensure web fonts are ready before printing.
30
30
  await page.evaluate(() => document.fonts?.ready);
31
- // Render charts (lazy) and wait until they settle so they appear in the PDF.
32
- await page.evaluate(() => window.__slaideCharts?.renderAll());
31
+ // Ensure every image has finished loading (or failed) before printing print mode marks
32
+ // them eager (see renderSlidePrint), but 'networkidle' can fire while decodes/late fetches
33
+ // are still in flight. Capped at 15s so one dead URL cannot hang the export.
33
34
  await page
34
- .waitForFunction(() => window.__slaideChartsReady === true, { timeout: 8000 })
35
+ .evaluate(() => {
36
+ const pending = Array.from(document.images)
37
+ .filter((im) => !im.complete)
38
+ .map((im) => new Promise((res) => {
39
+ im.addEventListener('load', () => res(), { once: true });
40
+ im.addEventListener('error', () => res(), { once: true });
41
+ }));
42
+ if (!pending.length)
43
+ return;
44
+ return Promise.race([Promise.all(pending).then(() => undefined), new Promise((res) => setTimeout(res, 15000))]);
45
+ })
35
46
  .catch(() => { });
47
+ // Render charts (lazy) and wait until they settle so they appear in the PDF. Gated on the
48
+ // chart-lib signal + 3-arg waitForFunction form — see render-png/shoot.ts's shootHtml.
49
+ if (html.includes('id="sl-mermaid-lib"') || html.includes('id="sl-echart-lib"')) {
50
+ await page.evaluate(() => window.__slaideCharts?.renderAll());
51
+ await page
52
+ .waitForFunction(() => window.__slaideChartsReady === true, undefined, { timeout: 8000 })
53
+ .catch(() => { });
54
+ }
36
55
  await page.pdf({
37
56
  path: out,
38
57
  preferCSSPageSize: true,
@@ -1 +1 @@
1
- {"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../src/render-pdf/pdf.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,sCAAsC;AACtC,6EAA6E;AAC7E,+EAA+E;AAC/E,8CAA8C;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAO7C,KAAK,UAAU,cAAc;IAC3B,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,4CAA4C;YAC1C,4BAA4B;YAC5B,mCAAmC,CACtC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAY,EACZ,GAAW,EACX,MAA0C,EAC1C,QAAuC;IAEvC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,cAAc,EAAE,CAAC;IAC5C,wFAAwF;IACxF,iFAAiF;IACjF,MAAM,OAAO,GAAG,QAAQ,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,qFAAqF;QACrF,6EAA6E;QAC7E,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAChC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAC3E,CAAC;QACF,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;QAC1D,8CAA8C;QAC9C,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAE,QAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1D,6EAA6E;QAC7E,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAE,MAAc,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;QACvE,MAAM,IAAI;aACP,eAAe,CAAC,GAAG,EAAE,CAAE,MAAc,CAAC,mBAAmB,KAAK,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;aACtF,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACnB,MAAM,IAAI,CAAC,GAAG,CAAC;YACb,IAAI,EAAE,GAAG;YACT,iBAAiB,EAAE,IAAI;YACvB,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,QAAQ;YAAE,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACvC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,IAAgB;IAChE,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACzG,OAAO,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../src/render-pdf/pdf.ts"],"names":[],"mappings":"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"}
@@ -32,8 +32,13 @@ export async function montageDeck(deckPath, opts = {}) {
32
32
  const doc = html.replace('</head>', '<style>.sl-counter,.sl-progress,.sl-notes,.sl-help,.sl-present-toggle{display:none !important;}</style></head>');
33
33
  await page.setContent(doc, { waitUntil: 'networkidle' });
34
34
  await page.evaluate(() => document.fonts?.ready);
35
- await page.evaluate(() => window.__slaideCharts?.renderAll());
36
- await page.waitForFunction(() => window.__slaideChartsReady === true, { timeout: 8000 }).catch(() => { });
35
+ // See render-png/shoot.ts's shootHtml: gated on the same chart-lib signal (chart-free decks
36
+ // never define window.__slaideCharts, so the wait would just burn the timeout for nothing),
37
+ // and the 3-arg waitForFunction form (the 2-arg form silently drops the 8000ms cap).
38
+ if (doc.includes('id="sl-mermaid-lib"') || doc.includes('id="sl-echart-lib"')) {
39
+ await page.evaluate(() => window.__slaideCharts?.renderAll());
40
+ await page.waitForFunction(() => window.__slaideChartsReady === true, undefined, { timeout: 8000 }).catch(() => { });
41
+ }
37
42
  await page.waitForTimeout(400);
38
43
  // Capture each slide (builds settled) as a light JPEG, then tile + encode in one canvas.
39
44
  const shots = [];
@@ -1 +1 @@
1
- {"version":3,"file":"montage.js","sourceRoot":"","sources":["../../src/render-png/montage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"montage.js","sourceRoot":"","sources":["../../src/render-png/montage.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,sCAAsC;AACtC,8FAA8F;AAC9F,+FAA+F;AAC/F,+FAA+F;AAC/F,gGAAgG;AAChG,gCAAgC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAW7C,KAAK,UAAU,cAAc;IAC3B,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,oGAAoG,CAAC,CAAC;IACxH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,OAAuB,EAAE;IAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,iBAAiB,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC;IACpC,MAAM,GAAG,GAAG,CAAC,CAAC;IACd,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IAE/D,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpG,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,cAAc,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7H,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CACtB,SAAS,EACT,gHAAgH,CACjH,CAAC;QACF,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;QACzD,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAE,QAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1D,4FAA4F;QAC5F,4FAA4F;QAC5F,qFAAqF;QACrF,IAAI,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC9E,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAE,MAAc,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;YACvE,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAE,MAAc,CAAC,mBAAmB,KAAK,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC/H,CAAC;QACD,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAE/B,yFAAyF;QACzF,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,MAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9D,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAEvE,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAClC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;YACnD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAC5B,KAAK,CAAC,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,OAAO,CAAmB,CAAC,GAAG,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,yBAAyB,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CACrK,CAAC;YACF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,CAAC;YACjF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;YAC3C,MAAM,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;YAC1C,MAAM,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;YAC1C,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;YAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;YACzE,MAAM,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAA6B,CAAC;YAC5D,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC;YAAE,GAAW,CAAC,qBAAqB,GAAG,MAAM,CAAC;YAC9E,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;YAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACpD,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpK,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACtF,CAAC,EACD,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAC3C,CAAW,CAAC;QAEb,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,IAAI,GAAG,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;IACxH,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC"}
@@ -18,6 +18,12 @@ export interface ShootOptions {
18
18
  /** A pooled Chromium browser to reuse (engine-service). When set it is NOT closed here;
19
19
  * when omitted, a throwaway browser is launched and closed for this call (CLI path). */
20
20
  browser?: import('playwright').Browser;
21
+ /** Capture only this 0-based slide index instead of every slide in the deck — the
22
+ * single-slide "look" fast path (engine-server's shootSlide). Page setup / networkidle /
23
+ * font / chart-settle waits still run once as before; only the per-slide show+screenshot
24
+ * loop is trimmed to one iteration. Returns a single-element array, so callers that don't
25
+ * set this (montage, CLI `shoot`) are completely unaffected. */
26
+ only?: number;
21
27
  }
22
28
  /** Render a self-contained web-deck HTML + its IR to per-slide PNGs (builds settled). */
23
29
  export declare function shootHtml(html: string, ir: DeckIR, opts?: ShootOptions): Promise<string[]>;
@@ -36,6 +36,9 @@ export async function shootHtml(html, ir, opts = {}) {
36
36
  const tag = opts.tag ?? 'slide';
37
37
  const fmt = opts.format ?? 'png';
38
38
  const quality = Math.max(1, Math.min(100, opts.quality ?? 82));
39
+ if (opts.only != null && (opts.only < 0 || opts.only >= ir.slides.length)) {
40
+ throw new Error(`shoot: slide ${opts.only} out of range (deck has ${ir.slides.length})`);
41
+ }
39
42
  mkdirSync(outDir, { recursive: true });
40
43
  const { chromium } = await loadPlaywright();
41
44
  const browser = opts.browser ?? (await chromium.launch());
@@ -47,15 +50,25 @@ export async function shootHtml(html, ir, opts = {}) {
47
50
  }
48
51
  await page.setContent(doc, { waitUntil: 'networkidle' });
49
52
  await page.evaluate(() => document.fonts?.ready);
50
- // Render all charts (lazy in the runtime) and wait until they settle so every
51
- // captured frame includes them. No-op + immediate for chart-free decks.
52
- await page.evaluate(() => window.__slaideCharts?.renderAll());
53
- await page
54
- .waitForFunction(() => window.__slaideChartsReady === true, { timeout: 8000 })
55
- .catch(() => { });
53
+ // Render all charts (lazy in the runtime) and wait until they settle so every captured
54
+ // frame includes them. Chart-free decks never get the boot script at all (html.ts's
55
+ // chartBlock omits it when there's no mermaid/echart markup), so window.__slaideCharts
56
+ // stays undefined and the ready flag never flips — gate on the same signal so those decks
57
+ // skip the wait instead of always burning it for nothing (this was the dominant fixed cost
58
+ // of every shoot/montage call). Also note the 3-arg form: waitForFunction(fn, arg, options)
59
+ // passing options positionally as `arg` (the old 2-arg call) is silently accepted, so the
60
+ // "8000ms" cap never took effect and every wait ran out Playwright's real default instead.
61
+ const hasCharts = doc.includes('id="sl-mermaid-lib"') || doc.includes('id="sl-echart-lib"');
62
+ if (hasCharts) {
63
+ await page.evaluate(() => window.__slaideCharts?.renderAll());
64
+ await page
65
+ .waitForFunction(() => window.__slaideChartsReady === true, undefined, { timeout: 8000 })
66
+ .catch(() => { });
67
+ }
56
68
  await page.waitForTimeout(400);
57
69
  const paths = [];
58
- for (let i = 0; i < ir.slides.length; i++) {
70
+ const indices = opts.only != null ? [opts.only] : ir.slides.map((_, i) => i);
71
+ for (const i of indices) {
59
72
  // window.slaide.show(n) reveals slide n with every build settled (shown).
60
73
  await page.evaluate((n) => window.slaide.show(n), i);
61
74
  await page.waitForTimeout(180);
@@ -1 +1 @@
1
- {"version":3,"file":"shoot.js","sourceRoot":"","sources":["../../src/render-png/shoot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shoot.js","sourceRoot":"","sources":["../../src/render-png/shoot.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -78,15 +78,35 @@ export interface ChromeBand {
78
78
  export interface ChromeDef {
79
79
  header?: ChromeBand;
80
80
  footer?: ChromeBand;
81
- /** Raw inline SVG or HTML for a logo mark. */
82
- logo?: string;
81
+ /** Raw inline SVG/HTML/URL for a logo mark. A single string is used on every slide
82
+ * (unchanged); `{ dark, light }` picks per slide by its resolved ground — `dark` = the
83
+ * mark legible ON a dark background, `light` = ON a light background. Given only one
84
+ * key, that mark is used on every slide regardless of ground. */
85
+ logo?: string | {
86
+ dark?: string;
87
+ light?: string;
88
+ };
83
89
  /** Logo corner: top-left | top-right | bottom-left | bottom-right. */
84
90
  logoPos?: string;
85
91
  }
92
+ /** Brand identity metadata a deck is branded for. The master's own `colors:`/`fonts:` ARE
93
+ * the brand (no separate palette/fonts copy here — that duplication was a mistake); this
94
+ * block just names/locks it. Set/overridden by the user only — the hosted agent treats a
95
+ * `locked` brand as read-only while it works. */
96
+ export interface MasterBrand {
97
+ /** Brand / company name this deck is branded for. */
98
+ name?: string;
99
+ /** Brand logo: raw inline SVG/HTML mark or an asset reference. */
100
+ logo?: string;
101
+ /** When true the AI must not alter this block mid-run; the user can still override it. */
102
+ locked?: boolean;
103
+ }
86
104
  export interface Master {
87
105
  schema?: string;
88
106
  name: string;
89
107
  description?: string;
108
+ /** Immutable brand identity (see MasterBrand). Metadata + lock; roles still drive the CSS. */
109
+ brand?: MasterBrand;
90
110
  canvas?: {
91
111
  aspect?: string;
92
112
  width?: number;
package/dist/vocab.d.ts CHANGED
@@ -32,5 +32,8 @@ export declare const SLOT_TYPES: readonly string[];
32
32
  * literals across the parser/compiler; the lint scrapes src to keep this exhaustive. */
33
33
  export declare const DIAGNOSTIC_CODES: readonly string[];
34
34
  /** Diagnostics that are hard errors (`ok:false`); every other code is a warning.
35
- * Canonical here so `index.ts` and the docs share one definition. */
35
+ * Canonical here so `index.ts` and the docs share one definition. `unknown-slot` is an
36
+ * error (not a warning): a region routed to a slot its resolved layout doesn't define
37
+ * silently drops the content, so a `deck_source` write with a bad slot name must be
38
+ * rejected rather than reporting ok:true on a semantic no-op. */
36
39
  export declare const ERROR_SEVERITY_CODES: ReadonlySet<string>;
package/dist/vocab.js CHANGED
@@ -58,12 +58,15 @@ export const SLOT_TYPES = ['title', 'subtitle', 'body', 'image', 'media', 'quote
58
58
  * literals across the parser/compiler; the lint scrapes src to keep this exhaustive. */
59
59
  export const DIAGNOSTIC_CODES = [
60
60
  // parser/parse.ts
61
- 'bad-config', 'no-headmatter', 'ambiguous-frontmatter', 'empty-deck',
61
+ 'bad-config', 'no-headmatter', 'ambiguous-frontmatter', 'empty-deck', 'bad-region',
62
62
  // compiler/compile.ts
63
63
  'unknown-color', 'unknown-gradient', 'bad-animation', 'unknown-layout',
64
64
  'unknown-transition', 'unknown-background', 'unknown-slot', 'low-contrast',
65
+ 'overlapping-slots',
66
+ // compiler/unknown-vars.ts
67
+ 'unknown-var',
65
68
  // compiler/markdown.ts
66
- 'unknown-class', 'unknown-entrance', 'stray-build', 'bad-chart',
69
+ 'unknown-class', 'unknown-entrance', 'stray-build', 'bad-chart', 'bad-span',
67
70
  // compiler/tokens.ts
68
71
  'unknown-token', 'token-cycle', 'non-embeddable-font', 'unknown-variant',
69
72
  // compiler/chrome.ts
@@ -72,6 +75,9 @@ export const DIAGNOSTIC_CODES = [
72
75
  'no-master', 'parse-error',
73
76
  ];
74
77
  /** Diagnostics that are hard errors (`ok:false`); every other code is a warning.
75
- * Canonical here so `index.ts` and the docs share one definition. */
76
- export const ERROR_SEVERITY_CODES = new Set(['empty-deck', 'no-master', 'unknown-layout']);
78
+ * Canonical here so `index.ts` and the docs share one definition. `unknown-slot` is an
79
+ * error (not a warning): a region routed to a slot its resolved layout doesn't define
80
+ * silently drops the content, so a `deck_source` write with a bad slot name must be
81
+ * rejected rather than reporting ok:true on a semantic no-op. */
82
+ export const ERROR_SEVERITY_CODES = new Set(['empty-deck', 'no-master', 'unknown-layout', 'unknown-slot']);
77
83
  //# sourceMappingURL=vocab.js.map
package/dist/vocab.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vocab.js","sourceRoot":"","sources":["../src/vocab.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vocab.js","sourceRoot":"","sources":["../src/vocab.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aivorynet/slaide",
3
- "version": "1.0.5",
3
+ "version": "1.2.0",
4
4
  "description": "An AI-authorable slide language with beautiful web + PDF output",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -64,6 +64,7 @@ content-line = markdown-line ; (* CommonMark, with §5–§7
64
64
  ```
65
65
 
66
66
  - `region-marker` routes following content into the named slot until the next marker or separator. Content before any marker → the layout's main slot.
67
+ - A line starting `::` that is **not** a well-formed `region-marker` (e.g. `::name`, no spaces, or trailing content after the closing `::`) emits a `bad-region` warning and is kept as literal content — it is not silently dropped.
67
68
  - `note` (a `???` line and its continuation until a blank line) is a speaker note: shown in the presenter overlay, omitted from audience view and PDF.
68
69
 
69
70
  ### 4.1 Build sigil
@@ -100,7 +101,7 @@ Classes chain (`[40-80%]{.grad-purple .huge}`). Resolution (see themes.md → *M
100
101
  - `.xs .sm .md .lg .xl .xxl .huge` → font-size (type-scale steps `small`…`stat`).
101
102
  - `.bold`, `.muted`, and image utilities `.round`, `.cover`, `.shadow`.
102
103
 
103
- A class that is **none** of the above (e.g. a typo like `.xxlarge` or `.grad-teel`) emits an `unknown-class` / `unknown-gradient` warning rather than silently degrading to inert/invisible CSS. Run `slaide slots <deck>` to print the legal slot, colour, gradient and size names for a deck's master; `slaide validate <deck> [--strict]` surfaces all diagnostics (`--strict` makes warnings fail).
104
+ A class that is **none** of the above (e.g. a typo like `.xxlarge` or `.grad-teel`) emits an `unknown-class` / `unknown-gradient` warning rather than silently degrading to inert/invisible CSS. A `{…}` brace that isn't a valid dot-class list at all (missing the leading dot, empty, or otherwise malformed) emits a `bad-span` warning instead — never on a plain link `[text](url)` or a `[1]`-style reference, which don't have this shape. Run `slaide slots <deck>` to print the legal slot, colour, gradient and size names for a deck's master; `slaide validate <deck> [--strict]` surfaces all diagnostics (`--strict` makes warnings fail).
104
105
 
105
106
  ## 6. Image & attribute brace
106
107
 
@@ -68,7 +68,7 @@ My Talk
68
68
 
69
69
  ## 4. Slide body
70
70
 
71
- - **Regions:** `:: name ::` on its own line routes following Markdown into slot `name`. Text before any marker → the main slot (`body`, else the first slot).
71
+ - **Regions:** `:: name ::` on its own line routes following Markdown into slot `name`. Text before any marker → the main slot (`body`, else the first slot). A near-miss (`::` followed by content that isn't `:: name ::` alone on its line, e.g. `::name` or `:: name :: extra`) warns (`bad-region`) instead of silently rendering as literal text.
72
72
  - **Markdown:** standard CommonMark — headings, lists, **bold**, *italic*, `code`, fences, > quotes, links, tables, images. (A single newline is a space; blank line = new paragraph.)
73
73
  - **Builds `>>>`:** end an item/block with `>>>` to reveal it; steps auto-number in order, same step = simultaneous. PDF shows all. Add an entrance and timing after the sigil (§4.7).
74
74
  - **Notes `??? …`:** a `???` line (until a blank line) is a speaker note — presenter overlay only, hidden from audience and PDF.
@@ -88,7 +88,7 @@ Wrap inline text with one or more chainable dot-classes:
88
88
  | `.xs .sm .md .lg .xl .xxl .huge` | font size (type-scale steps small→…→stat) |
89
89
  | `.bold` / `.muted` | weight 800 / muted colour |
90
90
 
91
- An unknown class warns (`unknown-class`/`unknown-gradient`) — it never silently degrades. Resolved against the master (see [themes.md](themes.md#marks--utility-classes)).
91
+ An unknown class warns (`unknown-class`/`unknown-gradient`) — it never silently degrades. Resolved against the master (see [themes.md](themes.md#marks--utility-classes)). A `{…}` that isn't a valid dot-class list (missing the leading dot, empty, or otherwise malformed) warns (`bad-span`) rather than showing the raw braces; plain links `[text](url)` and `[1]`-style refs are never affected.
92
92
 
93
93
  ### 4.2 Images — `![alt](src){ … }`
94
94
 
@@ -212,16 +212,20 @@ See [themes.md](themes.md) to author a master.
212
212
  | `empty-deck` | error | No slides were found. |
213
213
  | `no-master` | error | The deck's `master:` could not be resolved. |
214
214
  | `unknown-layout` | error | A slide's `layout:` names no layout in the master. |
215
+ | `unknown-slot` | error | A `:: name ::` region names a slot the resolved layout (explicit `layout:` or the deck's default) doesn't define — the content is silently dropped. |
215
216
  | `no-headmatter` | warning | No leading `---` deck headmatter block (e.g. `master:`). |
216
217
  | `bad-config` | warning | A headmatter/frontmatter block is not valid YAML (rendered with defaults). |
217
218
  | `ambiguous-frontmatter` | warning | A config-shaped **body** was eaten as frontmatter — escape the first line with `\` or add an explicit `---`. |
219
+ | `bad-region` | warning | A line starts `::` but isn't a well-formed `:: name ::` marker (alone on its line) — rendered as literal body text. |
218
220
  | `unknown-transition` | warning | A `transition:` names no built-in transition (§3.1). |
219
221
  | `unknown-background` | warning | A `background:` names no master background. |
220
222
  | `unknown-variant` | warning | A `variant:` names no master variant. |
221
- | `unknown-slot` | warning | Content routed to a slot the chosen layout doesn't define (dropped silently). |
223
+ | `overlapping-slots` | warning | Two+ layout slots share one grid cell, or a slot's key is missing from `grid-template-areas` (default-stacks) — content renders on top of other content. |
222
224
  | `unknown-class` | warning | An inline `[x]{.cls}` is not a size / `.bold` / `.muted` / `.grad` / master colour / CSS colour. |
223
225
  | `unknown-gradient` | warning | A `.grad-<name>` or slot `fill:` names no master gradient (text gets no fill — often invisible). |
226
+ | `bad-span` | warning | A `[text]{…}` brace isn't a valid dot-class list (missing dot, empty/invalid list, unmatched brace) — shown as literal text. |
224
227
  | `unknown-color` | warning | A slot `color:`/`box:` names no master role/palette or CSS colour (falls back to a literal, often invisible). |
228
+ | `unknown-var` | warning | A raw `var(--X)` (e.g. in inline HTML) names no token the master defines — resolves to nothing, often rendering smaller/invisible. Auto-fixed to `var(--X, <fallback>)`. |
225
229
  | `unknown-entrance` | warning | A `>>> <name>` build entrance isn't a known effect (§4.7). |
226
230
  | `stray-build` | warning | A `>>>` on a non-list line (headings, bold labels, paragraphs). |
227
231
  | `low-contrast` | warning | Resolved text ≈ its background (dark-on-dark / light-on-light) — bind a `variant:` or set an explicit `color:`. |
@@ -7,6 +7,7 @@ A **master** is a YAML file defining the whole visual system as data, so one the
7
7
  ```yaml
8
8
  schema: slaide/1
9
9
  name: my-theme
10
+ brand: { name, palette, fonts, logo, source, locked } # optional: locked brand identity
10
11
  canvas: { aspect: "16:9", width: 1920, height: 1080 } # fixed design space, scaled to fit
11
12
  fonts: { … } # named roles, auto-imported from Google
12
13
  typeScale: { … } # named size steps
@@ -98,6 +99,17 @@ gradients:
98
99
  purple: "linear-gradient(120deg, #A855F7, #EC4899)" # .grad-purple
99
100
  ```
100
101
 
102
+ ## brand
103
+
104
+ Optional. Names/locks the brand identity a deck is themed for — the master's own `colors:`/`fonts:` blocks **are** the brand, no separate copy here. When `locked: true`, a hosted AI edit treats the block as read-only and won't drift it — only the user changes it.
105
+
106
+ ```yaml
107
+ brand:
108
+ name: "Acme"
109
+ logo: "<svg>…</svg>" # inline mark, or an asset reference
110
+ locked: true
111
+ ```
112
+
101
113
  ## tokens
102
114
 
103
115
  Raw CSS custom-property overrides (spacing, chrome metrics, chart + code styling). Exact names below — a misspelling is silently ignored.
@@ -139,7 +151,7 @@ variants:
139
151
 
140
152
  ## chrome
141
153
 
142
- Header/footer bands + a corner logo on every slide (toggle per layout/slide). Band cells `left`/`center`/`right` may hold `{{placeholders}}`; `logo` is inline SVG (inherits text colour via `currentColor`); `logoPos` ∈ `top-left|top-right|bottom-left|bottom-right`.
154
+ Header/footer bands + a corner logo on every slide (toggle per layout/slide). Band cells `left`/`center`/`right` may hold `{{placeholders}}`; `logo` is inline SVG (inherits text colour via `currentColor`); `logoPos` ∈ `top-left|top-right|bottom-left|bottom-right`. `logo`: may be raw markup (`<img>`/`<svg>`/text) or a bare image URL — a URL is auto-wrapped in `<img>`. `logo` may instead be `{ dark: <mark>, light: <mark> }` — picked per slide by its resolved ground (`dark` = the mark for a dark background, `light` = for a light one), so a light-on-dark wordmark never lands unreadable on a light slide; one key alone is used everywhere.
143
155
 
144
156
  ```yaml
145
157
  chrome:
@@ -151,13 +163,15 @@ chrome:
151
163
 
152
164
  Per layout: `chrome: header|footer|both|false` and `logo: false`; per-slide frontmatter overrides both. **A header/footer corner cell and the `logo` in the *same* corner overlap silently — put them in different corners.**
153
165
 
166
+ **Cover and outro/closing slides carry no page number** — layouts named `cover`/`outro`/`closing`/`thanks`/`end` get their footer suppressed automatically unless the slide/layout sets `chrome:` explicitly. So a numbered footer never lands on the title or closing slide.
167
+
154
168
  ## ui
155
169
 
156
170
  `ui: { progress: true }` — web position bar + counter (default on; never affects PDF). Per-deck override: `progress: false` in headmatter.
157
171
 
158
172
  ## layouts
159
173
 
160
- Grid templates. `areas` = a `grid-template-areas` map (each entry = one row of space-separated slot names); `slots` = the typed regions content routes into. Optional `align: start|center|end` (vertical), `rows`, `cols`, `gap`, `padding`, `background`, `variant`. Keep `areas` rectangular; every slot in `slots` must appear in `areas`.
174
+ Grid templates. `areas` = a `grid-template-areas` map (each entry = one row of space-separated slot names); `slots` = the typed regions content routes into. Optional `align: start|center|end` (vertical), `rows`, `cols`, `gap`, `padding`, `background`, `variant`. Keep `areas` rectangular; every slot in `slots` must appear in `areas` — a slot key missing from `areas` falls back to the same default cell as any other missing slot, so `validate` warns (`overlapping-slots`) when two or more do.
161
175
 
162
176
  ```yaml
163
177
  layouts:
@@ -212,7 +226,6 @@ Inline `[text]{.class}` resolves against this master: **colour** = any `palette`
212
226
  ## Tips for AI authors
213
227
 
214
228
  - Use **roles** and **scale steps**, not raw hex/px — reskin = palette swap.
215
- - **Chrome `logo:` is opt-in.** Only add it when the user supplies a real brand logo. Do NOT invent a generic icon/monogram — a tiny aimless mark in the corner of every slide is the #1 amateur tell.
216
229
  - **Cards (`box:`):** bg + padding + radius only (no gradient/shadow/border). Without `valign` a card stretches full-height and pins text top (hollow). Fix: `valign: center` to shrink-wrap, or put cards in an `auto` row with `1fr` spacers. Tint card surface off-white vs the page.
217
230
  - **Cover = dramatic hero.** Visual slot FILLS — bold brand SVG, product mock, or illustrated motif at ≥ half the slide, not a small icon. Think Apple keynote: few bold shapes at large scale. Centred text on a gradient is a section divider, not a cover. Never `.grad` text on a gradient bg (vanishes). **Closing** = bold CTA or contact slide (name/role/email/URL for pitch/agency decks). Both must feel intentional.
218
231
  - **Brand ground dominates.** Most slides use the brand's background role (warm cream, tinted neutral — not generic white). Dark/gradient = accent moments only (cover, one stat, closing).
@@ -0,0 +1,62 @@
1
+ # yaml-language-server: $schema=https://getslaide.com/schema/v1.json
2
+ # A deliberately bare placeholder: white canvas, Open Sans, a handful of layouts.
3
+ # It is NOT a design — the online default so a fresh deck reads as neutral and the AI
4
+ # must author a real theme from scratch. Keep it minimal (few options on purpose).
5
+ schema: slaide/1
6
+ name: blank
7
+ description: A minimal white placeholder theme (Open Sans). Meant to be replaced by a real theme.
8
+
9
+ canvas: { aspect: "16:9", width: 1280, height: 720 }
10
+
11
+ fonts:
12
+ sans: { family: "Open Sans", provider: google, weights: [400, 600, 700] }
13
+ display: { family: "Open Sans", provider: google, weights: [400, 600, 700] }
14
+
15
+ typeScale:
16
+ base: "24px"
17
+ ratio: 1.2
18
+ steps: { h1: 3, h2: 2, h3: 1, h4: 0, body: 0, caption: -1 }
19
+
20
+ colors:
21
+ palette:
22
+ paper: "#FFFFFF"
23
+ ink: "#1A1A1A"
24
+ muted: "#6B7280"
25
+ accent: "#3B5B8C"
26
+ roles:
27
+ background: "{palette.paper}"
28
+ surface: "{palette.paper}"
29
+ text: "{palette.ink}"
30
+ heading: "{palette.ink}"
31
+ accent: "{palette.accent}"
32
+ link: "{palette.accent}"
33
+ muted: "{palette.muted}"
34
+
35
+ layouts:
36
+ cover:
37
+ align: center
38
+ areas: ["title", "subtitle"]
39
+ rows: "auto auto"
40
+ slots:
41
+ title: { type: title, style: { size: h1, weight: "700" } }
42
+ subtitle: { type: subtitle, style: { size: h3, color: muted } }
43
+
44
+ title-content:
45
+ areas: ["title", "body"]
46
+ rows: "auto 1fr"
47
+ slots:
48
+ title: { type: title, style: { size: h2, weight: "700" } }
49
+ body: { type: body }
50
+
51
+ section:
52
+ align: center
53
+ areas: ["title"]
54
+ rows: "1fr"
55
+ slots:
56
+ title: { type: title, style: { size: h1, weight: "700", align: center } }
57
+
58
+ blank:
59
+ areas: ["body"]
60
+ rows: "1fr"
61
+ slots:
62
+ body: { type: body }