orz-slides 0.4.0 → 0.6.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.
package/README.md CHANGED
@@ -9,7 +9,7 @@ syntax, and stays *quietly editable*. Built on
9
9
  One file. Open it in a browser to present. Pop out a per-slide editor to change
10
10
  a slide. Save it back in place. Nothing to install for the audience.
11
11
 
12
- > **Status: published (v0.1.1).** The authoring syntax, CLI, engine, and in-file
12
+ > **Status: published (v0.4.0).** The authoring syntax, CLI, engine, and in-file
13
13
  > editor all work (see [DESIGN.md](./DESIGN.md)). Two packages publish in
14
14
  > lockstep: the [`orz-slides`](https://www.npmjs.com/package/orz-slides) CLI and
15
15
  > the [`orz-slides-browser`](https://www.npmjs.com/package/orz-slides-browser)
@@ -182,10 +182,14 @@ reveal's core CSS, and all themes are embedded.
182
182
 
183
183
  `.slides.html` files conform to **`orz-host-save@1`**: a platform can embed a
184
184
  deck in an iframe, announce itself with a `postMessage` handshake, and receive
185
- saves (`{ source, html }`) instead of the file-system path — standalone
185
+ saves (`{ source, html, theme }`) instead of the file-system path — standalone
186
186
  behavior and Export are unchanged, and nothing activates without the
187
- handshake. The canonical spec lives in the orz-mdhtml repo:
188
- [PROTOCOL.md](https://github.com/wangyu16/orz-mdhtml/blob/main/PROTOCOL.md).
187
+ handshake. Files also speak **`orz-host-ai@1`**: when the host advertises AI
188
+ operations, the editor shows an assistant (a chip on the current selection and a
189
+ toolbar button) that sends the passage to the host and applies the suggestion it
190
+ returns — the file owns the UI, the host owns the model. Both protocols are
191
+ documented in this repo's [PROTOCOL.md](./PROTOCOL.md) (the shared spec
192
+ originates in orz-mdhtml).
189
193
 
190
194
  ## Security — treat these as programs, not documents
191
195
 
package/assets/app.js CHANGED
@@ -146,6 +146,7 @@
146
146
  extraKeys: { Enter: 'newlineAndIndentContinueMarkdownList' },
147
147
  });
148
148
  cm.on('change', function () {
149
+ aiHideAll();
149
150
  if (suppressChange) return;
150
151
  markDirty();
151
152
  if (editingDeck) {
@@ -158,6 +159,7 @@
158
159
  scheduleRerender();
159
160
  }
160
161
  });
162
+ cm.on('cursorActivity', function () { aiRefresh(); });
161
163
  });
162
164
  }
163
165
 
@@ -207,6 +209,7 @@
207
209
  function done() {
208
210
  editing = false;
209
211
  root.setAttribute('data-mode', 'present');
212
+ aiHideAll();
210
213
  if (API.reveal) { API.reveal.layout(); API.refresh(); }
211
214
  }
212
215
 
@@ -280,6 +283,21 @@
280
283
  }
281
284
  return true;
282
285
  }
286
+ // Self-reproducing: a theme picked from the toolbar must land IN the source,
287
+ // not just the DOM — rewrite (or insert) the `theme:` line of the leading
288
+ // `<!-- deck ... -->` block so `fullSource()` always states the deck's actual
289
+ // theme, standalone and inside a host alike. No deck block yet → create a
290
+ // minimal one rather than silently dropping the pick.
291
+ function rewriteDeckTheme(id) {
292
+ var m = preamble.match(/^([ \t]*<!--\s*deck\b)([\s\S]*?)(-->)/);
293
+ if (!m) { preamble = '<!-- deck\ntheme: ' + id + '\n-->\n' + preamble; return; }
294
+ var head = m[1], body = m[2], tail = m[3];
295
+ var hasTheme = /(^|\n)[ \t]*theme[ \t]*:/.test(body);
296
+ var newBody = hasTheme
297
+ ? body.replace(/((^|\n)[ \t]*theme[ \t]*:)[^\n]*/, function (_, prefix) { return prefix + ' ' + id; })
298
+ : body.replace(/\n?$/, '\ntheme: ' + id + '\n');
299
+ preamble = preamble.slice(0, m.index) + head + newBody + tail + preamble.slice(m.index + m[0].length);
300
+ }
283
301
  function setTheme(id) {
284
302
  currentTheme = id;
285
303
  root.setAttribute('data-theme', id);
@@ -293,6 +311,15 @@
293
311
  }
294
312
  link.href = themeById(id).href;
295
313
  }
314
+ rewriteDeckTheme(id);
315
+ writeDeck();
316
+ if (editingDeck && cm) {
317
+ // The "deck settings" editor is open on this exact text — keep it in
318
+ // sync without re-triggering the change handler (already handled below).
319
+ suppressChange = true;
320
+ cm.setValue(preamble);
321
+ suppressChange = false;
322
+ }
296
323
  if (cm) cm.setOption('theme', cmTheme());
297
324
  markDirty();
298
325
  if (API.reveal) setTimeout(function () { API.reveal.layout(); API.refresh(); }, 60);
@@ -330,8 +357,151 @@
330
357
  hostSaveTimer = null;
331
358
  toast('Save failed — no response from the host'); // document intact, still dirty
332
359
  }, 10000);
333
- hostPost({ type: 'orz-host-save', protocol: HOST_PROTOCOL, version: HOST_VERSION, source: src, html: html });
360
+ hostPost({ type: 'orz-host-save', protocol: HOST_PROTOCOL, version: HOST_VERSION, source: src, html: html, theme: currentTheme });
361
+ }
362
+
363
+ // ---- host AI assistant (orz-host-ai@1) ------------------------------------
364
+ // When the host advertises AI operations, selecting text in the editor shows
365
+ // an "Improve selection" affordance; picking an op sends the passage to the
366
+ // host, which returns a suggested replacement to apply. File owns the UI; the
367
+ // host owns the model + governance. Additive — no host, no affordance.
368
+ var AI_PROTOCOL = 'orz-host-ai';
369
+ var AI_VERSION = 1;
370
+ var aiOps = null; // advertised operations, or null when no AI host
371
+ var aiOrigin = null; // recorded at the AI handshake
372
+ var aiSeq = 0;
373
+ var aiPending = {}; // requestId -> resolve
374
+ var aiTrigger = null; // the floating "Improve selection" chip
375
+ var aiPanel = null; // the menu / result popover
376
+ var aiRect = null; // anchor rect {left,top,bottom} for the active popover
377
+
378
+ function aiTarget() { return aiOrigin && aiOrigin !== 'null' ? aiOrigin : '*'; }
379
+ function aiPost(msg) { try { window.parent.postMessage(msg, aiTarget()); } catch (e) {} }
380
+ function aiRequest(op, text, sel) {
381
+ return new Promise(function (resolve) {
382
+ var id = 'ai' + (++aiSeq);
383
+ aiPending[id] = resolve;
384
+ aiPost({ type: 'orz-host-ai-request', protocol: AI_PROTOCOL, version: AI_VERSION, requestId: id, op: op, text: text, selection: !!sel });
385
+ setTimeout(function () { if (aiPending[id]) { delete aiPending[id]; resolve({ ok: false, error: 'No response from the host.' }); } }, 30000);
386
+ });
387
+ }
388
+
389
+ function aiBox() {
390
+ var b = document.createElement('div');
391
+ b.style.cssText = 'position:fixed;z-index:80;background:Canvas;color:CanvasText;border:1px solid GrayText;border-radius:10px;box-shadow:0 6px 24px rgba(0,0,0,.28);font:13px system-ui,sans-serif;padding:4px;';
392
+ return b;
393
+ }
394
+ // Position `el` (already in the DOM, so it can be measured) just below the
395
+ // selection end; if it would overflow the bottom, flip it ABOVE the selection;
396
+ // if it fits neither, pin near the top and let it scroll. Clamp horizontally.
397
+ function aiSelRect() {
398
+ var to = cm.cursorCoords(cm.getCursor('to'), 'window');
399
+ var fr = cm.cursorCoords(cm.getCursor('from'), 'window');
400
+ return { left: to.left, top: fr.top, bottom: to.bottom };
401
+ }
402
+ function aiElRect(el) { var b = el.getBoundingClientRect(); return { left: b.left, top: b.top, bottom: b.bottom }; }
403
+ function aiPlace(el) {
404
+ if (!el) return;
405
+ var r = aiRect || (cm ? aiSelRect() : { left: 8, top: 8, bottom: 40 });
406
+ var w = el.offsetWidth || 240;
407
+ var h = el.offsetHeight || 40;
408
+ var left = Math.max(8, Math.min(r.left, window.innerWidth - w - 8));
409
+ var top = r.bottom + 6;
410
+ if (top + h > window.innerHeight - 8) {
411
+ var above = r.top - h - 6;
412
+ if (above >= 8) {
413
+ top = above;
414
+ } else {
415
+ top = 8;
416
+ el.style.maxHeight = (window.innerHeight - 16) + 'px';
417
+ el.style.overflowY = 'auto';
418
+ }
419
+ }
420
+ el.style.left = left + 'px';
421
+ el.style.top = top + 'px';
422
+ }
423
+ function aiHidePanel() { if (aiPanel) { try { aiPanel.remove(); } catch (e) {} aiPanel = null; } }
424
+ function aiHideTrigger() { if (aiTrigger) { try { aiTrigger.remove(); } catch (e) {} aiTrigger = null; } }
425
+ function aiHideAll() { aiHidePanel(); aiHideTrigger(); }
426
+
427
+ // Open the ops menu anchored at `rect`, operating on `text` (a selection when
428
+ // isSel, else the whole editor buffer — the current slide or the deck config).
429
+ function aiOpen(rect, text, isSel) {
430
+ aiHideAll();
431
+ aiRect = rect;
432
+ aiPanel = aiBox();
433
+ aiOps.forEach(function (op) {
434
+ var btn = document.createElement('button');
435
+ btn.textContent = op.title;
436
+ btn.style.cssText = 'display:block;width:220px;text-align:left;background:none;border:0;color:inherit;font:inherit;padding:6px 10px;border-radius:6px;cursor:pointer;';
437
+ btn.onmouseenter = function () { btn.style.background = 'rgba(127,127,127,.16)'; };
438
+ btn.onmouseleave = function () { btn.style.background = 'none'; };
439
+ btn.onclick = function () { aiRun(op, text, isSel); };
440
+ aiPanel.appendChild(btn);
441
+ });
442
+ document.body.appendChild(aiPanel);
443
+ aiPlace(aiPanel);
444
+ }
445
+
446
+ function aiRun(op, text, isSel) {
447
+ aiHideAll();
448
+ aiPanel = aiBox();
449
+ aiPanel.style.padding = '10px';
450
+ aiPanel.style.width = (isSel ? '340px' : '460px');
451
+ aiPanel.textContent = 'Thinking…';
452
+ document.body.appendChild(aiPanel);
453
+ aiPlace(aiPanel);
454
+ aiRequest(op.id, text, isSel).then(function (r) {
455
+ if (!aiPanel) return;
456
+ aiPanel.textContent = '';
457
+ if (!r.ok) { aiPanel.textContent = r.error || 'That didn’t work.'; aiPlace(aiPanel); return; }
458
+ var label = document.createElement('div');
459
+ label.textContent = isSel ? 'Suggested replacement — edit before applying'
460
+ : 'Suggested rewrite — edit before applying';
461
+ label.style.cssText = 'font-size:11px;opacity:.7;margin-bottom:4px;';
462
+ var ta = document.createElement('textarea');
463
+ ta.value = r.proposed || '';
464
+ ta.style.cssText = 'width:100%;height:' + (isSel ? '130px' : '240px') + ';box-sizing:border-box;font:12px ui-monospace,monospace;resize:vertical;';
465
+ var row = document.createElement('div');
466
+ row.style.cssText = 'display:flex;justify-content:flex-end;gap:6px;margin-top:6px;';
467
+ var cancel = document.createElement('button');
468
+ cancel.textContent = 'Cancel'; cancel.style.cssText = 'padding:4px 10px;cursor:pointer;';
469
+ cancel.onclick = aiHidePanel;
470
+ var apply = document.createElement('button');
471
+ apply.textContent = isSel ? 'Replace' : 'Replace all'; apply.style.cssText = 'padding:4px 10px;cursor:pointer;font-weight:600;';
472
+ apply.onclick = function () {
473
+ if (isSel) { cm.replaceSelection(ta.value); }
474
+ else { var c = cm.getCursor(); cm.setValue(ta.value); try { cm.setCursor(c); } catch (e) {} }
475
+ aiHidePanel(); markDirty();
476
+ };
477
+ row.appendChild(cancel); row.appendChild(apply);
478
+ aiPanel.appendChild(label); aiPanel.appendChild(ta); aiPanel.appendChild(row);
479
+ aiPlace(aiPanel);
480
+ ta.focus();
481
+ });
334
482
  }
483
+
484
+ // Called on selection change: show the chip when there's a usable selection.
485
+ function aiRefresh() {
486
+ if (!aiOps || !aiOps.length || !cm || !editing) { aiHideAll(); return; }
487
+ if (aiPanel) return; // don't fight an open menu/result
488
+ var sel = cm.getSelection();
489
+ if (!sel || sel.trim().length < 2) { aiHideTrigger(); return; }
490
+ if (!aiTrigger) {
491
+ aiTrigger = document.createElement('button');
492
+ aiTrigger.textContent = '✦ Improve selection';
493
+ aiTrigger.style.cssText = 'position:fixed;z-index:78;background:Canvas;color:CanvasText;border:1px solid GrayText;border-radius:999px;font:12px system-ui,sans-serif;padding:4px 10px;cursor:pointer;box-shadow:0 4px 16px rgba(0,0,0,.22);';
494
+ aiTrigger.onmousedown = function (e) { e.preventDefault(); }; // keep the cm selection
495
+ aiTrigger.onclick = function (e) { e.stopPropagation(); aiOpen(aiSelRect(), cm.getSelection(), true); };
496
+ document.body.appendChild(aiTrigger);
497
+ }
498
+ aiRect = aiSelRect();
499
+ aiPlace(aiTrigger);
500
+ }
501
+ document.addEventListener('mousedown', function (e) {
502
+ if (aiPanel && !aiPanel.contains(e.target)) aiHidePanel();
503
+ });
504
+
335
505
  function onHostMessage(event) {
336
506
  // only the embedding parent may speak the protocol
337
507
  if (window.parent === window || event.source !== window.parent) return;
@@ -348,6 +518,19 @@
348
518
  clearTimeout(hostSaveTimer); hostSaveTimer = null;
349
519
  if (d.ok) { clearDirty(); toast('Saved'); }
350
520
  else { toast('Save failed' + (d.error ? ' — ' + String(d.error) : '')); }
521
+ } else if (d.type === 'orz-host-ai-hello' && d.protocol === AI_PROTOCOL && Array.isArray(d.operations)) {
522
+ aiOrigin = event.origin;
523
+ aiOps = d.operations.filter(function (o) { return o && o.id && o.title; });
524
+ aiPost({ type: 'orz-host-ai-ready', protocol: AI_PROTOCOL, version: AI_VERSION });
525
+ // Reveal the toolbar's page-wide AI button — runs an op on the editor buffer.
526
+ var aiBtn = document.getElementById('orz-ai');
527
+ if (aiBtn && aiOps.length) {
528
+ aiBtn.style.display = '';
529
+ aiBtn.onclick = function () { if (cm) aiOpen(aiElRect(aiBtn), cm.getValue(), false); };
530
+ }
531
+ } else if (d.type === 'orz-host-ai-result' && d.requestId && aiPending[d.requestId]) {
532
+ var aiRes = aiPending[d.requestId]; delete aiPending[d.requestId];
533
+ aiRes({ ok: !!d.ok, proposed: d.proposed, error: d.error });
351
534
  }
352
535
  }
353
536
  // listen from script load so an early hello isn't missed
@@ -369,7 +369,7 @@ ${JSON.stringify(i,null,2).replace(/<\/script>/gi,"<\\/script>")}
369
369
  <div class="r-overlay-help-content">${t}</div>
370
370
  </div>
371
371
  `,this.dom.querySelector(".r-overlay-close").addEventListener("click",i=>{this.close(),i.preventDefault()},!1),this.Reveal.dispatchEvent({type:"showhelp"})}}isOpen(){return!!this.dom}close(){return!!this.dom&&(this.dom.remove(),this.dom=null,this.state={},this.Reveal.dispatchEvent({type:"closeoverlay"}),!0)}getState(){return this.state}setState(t){this.stateProps.every(r=>this.state[r]===t[r])||(t.previewIframe?this.previewIframe(t.previewIframe):t.previewImage?this.previewImage(t.previewImage,t.previewFit):t.previewVideo?this.previewVideo(t.previewVideo,t.previewFit):this.close())}onSlidesClicked(t){let r=t.target,a=r.closest(this.iframeTriggerSelector),i=r.closest(this.mediaTriggerSelector);if(a){if(t.metaKey||t.shiftKey||t.altKey)return;let c=a.getAttribute("href")||a.getAttribute("data-preview-link");c&&(this.previewIframe(c),t.preventDefault())}else if(i){if(i.hasAttribute("data-preview-image")){let c=i.dataset.previewImage||i.getAttribute("src");c&&(this.previewImage(c,i.dataset.previewFit),t.preventDefault())}else if(i.hasAttribute("data-preview-video")){let c=i.dataset.previewVideo||i.getAttribute("src");if(!c){let d=i.querySelector("source");d&&(c=d.getAttribute("src"))}c&&(this.previewVideo(c,i.dataset.previewFit),t.preventDefault())}}}destroy(){this.close()}},wo=class{constructor(t){this.Reveal=t,this.touchStartX=0,this.touchStartY=0,this.touchStartCount=0,this.touchCaptured=!1,this.onPointerDown=this.onPointerDown.bind(this),this.onPointerMove=this.onPointerMove.bind(this),this.onPointerUp=this.onPointerUp.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this)}bind(){let t=this.Reveal.getRevealElement();"onpointerdown"in window?(t.addEventListener("pointerdown",this.onPointerDown,!1),t.addEventListener("pointermove",this.onPointerMove,!1),t.addEventListener("pointerup",this.onPointerUp,!1)):window.navigator.msPointerEnabled?(t.addEventListener("MSPointerDown",this.onPointerDown,!1),t.addEventListener("MSPointerMove",this.onPointerMove,!1),t.addEventListener("MSPointerUp",this.onPointerUp,!1)):(t.addEventListener("touchstart",this.onTouchStart,!1),t.addEventListener("touchmove",this.onTouchMove,!1),t.addEventListener("touchend",this.onTouchEnd,!1))}unbind(){let t=this.Reveal.getRevealElement();t.removeEventListener("pointerdown",this.onPointerDown,!1),t.removeEventListener("pointermove",this.onPointerMove,!1),t.removeEventListener("pointerup",this.onPointerUp,!1),t.removeEventListener("MSPointerDown",this.onPointerDown,!1),t.removeEventListener("MSPointerMove",this.onPointerMove,!1),t.removeEventListener("MSPointerUp",this.onPointerUp,!1),t.removeEventListener("touchstart",this.onTouchStart,!1),t.removeEventListener("touchmove",this.onTouchMove,!1),t.removeEventListener("touchend",this.onTouchEnd,!1)}isSwipePrevented(t){if(ys(t,"video[controls], audio[controls]"))return!0;for(;t&&typeof t.hasAttribute=="function";){if(t.hasAttribute("data-prevent-swipe"))return!0;t=t.parentNode}return!1}onTouchStart(t){if(this.touchCaptured=!1,this.isSwipePrevented(t.target))return!0;this.touchStartX=t.touches[0].clientX,this.touchStartY=t.touches[0].clientY,this.touchStartCount=t.touches.length}onTouchMove(t){if(this.isSwipePrevented(t.target))return!0;let r=this.Reveal.getConfig();if(this.touchCaptured)md&&t.preventDefault();else{this.Reveal.onUserInput(t);let a=t.touches[0].clientX,i=t.touches[0].clientY;if(t.touches.length===1&&this.touchStartCount!==2){let c=this.Reveal.availableRoutes({includeFragments:!0}),d=a-this.touchStartX,u=i-this.touchStartY;d>40&&Math.abs(d)>Math.abs(u)?(this.touchCaptured=!0,r.navigationMode==="linear"?r.rtl?this.Reveal.next():this.Reveal.prev():this.Reveal.left()):d<-40&&Math.abs(d)>Math.abs(u)?(this.touchCaptured=!0,r.navigationMode==="linear"?r.rtl?this.Reveal.prev():this.Reveal.next():this.Reveal.right()):u>40&&c.up?(this.touchCaptured=!0,r.navigationMode==="linear"?this.Reveal.prev():this.Reveal.up()):u<-40&&c.down&&(this.touchCaptured=!0,r.navigationMode==="linear"?this.Reveal.next():this.Reveal.down()),r.embedded?(this.touchCaptured||this.Reveal.isVerticalSlide())&&t.preventDefault():t.preventDefault()}}}onTouchEnd(t){this.touchCaptured=!1}onPointerDown(t){t.pointerType!==t.MSPOINTER_TYPE_TOUCH&&t.pointerType!=="touch"||(t.touches=[{clientX:t.clientX,clientY:t.clientY}],this.onTouchStart(t))}onPointerMove(t){t.pointerType!==t.MSPOINTER_TYPE_TOUCH&&t.pointerType!=="touch"||(t.touches=[{clientX:t.clientX,clientY:t.clientY}],this.onTouchMove(t))}onPointerUp(t){t.pointerType!==t.MSPOINTER_TYPE_TOUCH&&t.pointerType!=="touch"||(t.touches=[{clientX:t.clientX,clientY:t.clientY}],this.onTouchEnd(t))}},ro="focus",dd="blur",vo=class{constructor(t){this.Reveal=t,this.onRevealPointerDown=this.onRevealPointerDown.bind(this),this.onDocumentPointerDown=this.onDocumentPointerDown.bind(this)}configure(t,r){t.embedded?this.blur():(this.focus(),this.unbind())}bind(){this.Reveal.getConfig().embedded&&this.Reveal.getRevealElement().addEventListener("pointerdown",this.onRevealPointerDown,!1)}unbind(){this.Reveal.getRevealElement().removeEventListener("pointerdown",this.onRevealPointerDown,!1),document.removeEventListener("pointerdown",this.onDocumentPointerDown,!1)}focus(){this.state!==ro&&(this.Reveal.getRevealElement().classList.add("focused"),document.addEventListener("pointerdown",this.onDocumentPointerDown,!1)),this.state=ro}blur(){this.state!==dd&&(this.Reveal.getRevealElement().classList.remove("focused"),document.removeEventListener("pointerdown",this.onDocumentPointerDown,!1)),this.state=dd}isFocused(){return this.state===ro}destroy(){this.Reveal.getRevealElement().classList.remove("focused")}onRevealPointerDown(t){this.focus()}onDocumentPointerDown(t){let r=yt(t.target,".reveal");r&&r===this.Reveal.getRevealElement()||this.blur()}},xo=class{constructor(t){this.Reveal=t}render(){this.element=document.createElement("div"),this.element.className="speaker-notes",this.element.setAttribute("data-prevent-swipe",""),this.element.setAttribute("tabindex","0"),this.Reveal.getRevealElement().appendChild(this.element)}configure(t,r){t.showNotes&&this.element.setAttribute("data-layout",typeof t.showNotes=="string"?t.showNotes:"inline")}update(){this.Reveal.getConfig().showNotes&&this.element&&this.Reveal.getCurrentSlide()&&!this.Reveal.isScrollView()&&!this.Reveal.isPrintView()&&(this.element.innerHTML=this.getSlideNotes()||'<span class="notes-placeholder">No notes on this slide.</span>')}updateVisibility(){this.Reveal.getConfig().showNotes&&this.hasNotes()&&!this.Reveal.isScrollView()&&!this.Reveal.isPrintView()?this.Reveal.getRevealElement().classList.add("show-notes"):this.Reveal.getRevealElement().classList.remove("show-notes")}hasNotes(){return this.Reveal.getSlidesElement().querySelectorAll("[data-notes], aside.notes").length>0}isSpeakerNotesWindow(){return!!window.location.search.match(/receiver/gi)}getSlideNotes(t=this.Reveal.getCurrentSlide()){if(t.hasAttribute("data-notes"))return t.getAttribute("data-notes");let r=t.querySelectorAll("aside.notes");return r?Array.from(r).map(a=>a.innerHTML).join(`
372
- `):null}destroy(){this.element.remove()}},zo=class{constructor(t,r){this.diameter=100,this.diameter2=this.diameter/2,this.thickness=6,this.playing=!1,this.progress=0,this.progressOffset=1,this.container=t,this.progressCheck=r,this.canvas=document.createElement("canvas"),this.canvas.className="playback",this.canvas.width=this.diameter,this.canvas.height=this.diameter,this.canvas.style.width=this.diameter2+"px",this.canvas.style.height=this.diameter2+"px",this.context=this.canvas.getContext("2d"),this.container.appendChild(this.canvas),this.render()}setPlaying(t){let r=this.playing;this.playing=t,!r&&this.playing?this.animate():this.render()}animate(){let t=this.progress;this.progress=this.progressCheck(),t>.8&&this.progress<.2&&(this.progressOffset=this.progress),this.render(),this.playing&&requestAnimationFrame(this.animate.bind(this))}render(){let t=this.playing?this.progress:0,r=this.diameter2-this.thickness,a=this.diameter2,i=this.diameter2,c=28;this.progressOffset+=.1*(1-this.progressOffset);let d=-Math.PI/2+t*(2*Math.PI),u=-Math.PI/2+this.progressOffset*(2*Math.PI);this.context.save(),this.context.clearRect(0,0,this.diameter,this.diameter),this.context.beginPath(),this.context.arc(a,i,r+4,0,2*Math.PI,!1),this.context.fillStyle="rgba( 0, 0, 0, 0.4 )",this.context.fill(),this.context.beginPath(),this.context.arc(a,i,r,0,2*Math.PI,!1),this.context.lineWidth=this.thickness,this.context.strokeStyle="rgba( 255, 255, 255, 0.2 )",this.context.stroke(),this.playing&&(this.context.beginPath(),this.context.arc(a,i,r,u,d,!1),this.context.lineWidth=this.thickness,this.context.strokeStyle="#fff",this.context.stroke()),this.context.translate(a-14,i-14),this.playing?(this.context.fillStyle="#fff",this.context.fillRect(0,0,10,c),this.context.fillRect(18,0,10,c)):(this.context.beginPath(),this.context.translate(4,0),this.context.moveTo(0,0),this.context.lineTo(24,14),this.context.lineTo(0,c),this.context.fillStyle="#fff",this.context.fill()),this.context.restore()}on(t,r){this.canvas.addEventListener(t,r,!1)}off(t,r){this.canvas.removeEventListener(t,r,!1)}destroy(){this.playing=!1,this.canvas.parentNode&&this.container.removeChild(this.canvas)}},$y={width:960,height:700,margin:.04,minScale:.2,maxScale:2,controls:!0,controlsTutorial:!0,controlsLayout:"bottom-right",controlsBackArrows:"faded",progress:!0,slideNumber:!1,showSlideNumber:"all",hashOneBasedIndex:!1,hash:!1,respondToHashChanges:!0,jumpToSlide:!0,history:!1,keyboard:!0,keyboardCondition:null,disableLayout:!1,overview:!0,center:!0,touch:!0,loop:!1,rtl:!1,navigationMode:"default",shuffle:!1,fragments:!0,fragmentInURL:!0,embedded:!1,help:!0,pause:!0,showNotes:!1,showHiddenSlides:!1,autoPlayMedia:null,preloadIframes:null,autoAnimate:!0,autoAnimateMatcher:null,autoAnimateEasing:"ease",autoAnimateDuration:1,autoAnimateUnmatched:!0,autoAnimateStyles:["opacity","color","background-color","padding","font-size","line-height","letter-spacing","border-width","border-color","border-radius","outline","outline-offset"],autoSlide:0,autoSlideStoppable:!0,autoSlideMethod:null,defaultTiming:null,mouseWheel:!1,previewLinks:!1,postMessage:!0,postMessageEvents:!1,focusBodyOnPageVisibilityChange:!0,transition:"slide",transitionSpeed:"default",backgroundTransition:"fade",parallaxBackgroundImage:"",parallaxBackgroundSize:"",parallaxBackgroundRepeat:"",parallaxBackgroundPosition:"",parallaxBackgroundHorizontal:null,parallaxBackgroundVertical:null,view:null,scrollLayout:"full",scrollSnap:"mandatory",scrollProgress:"auto",scrollActivationWidth:435,pdfMaxPagesPerSlide:Number.POSITIVE_INFINITY,pdfSeparateFragments:!0,pdfPageHeightOffset:-1,viewDistance:3,mobileViewDistance:2,display:"block",hideInactiveCursor:!0,hideCursorTime:5e3,sortFragmentsOnSync:!0,dependencies:[],plugins:[]},gd="5.2.1";function yd(e,t){arguments.length<2&&(t=arguments[0],e=document.querySelector(".reveal"));let r={},a,i,c,d,u,f={},k=!1,w=!1,x={hasNavigatedHorizontally:!1,hasNavigatedVertically:!1},h=[],g=1,z={layout:"",overview:""},E={},F="idle",$=0,H=0,Y=-1,V=!1,G=new no(r),K=new so(r),re=new io(r),de=new co(r),le=new oo(r),P=new lo(r),se=new uo(r),be=new fo(r),ve=new ho(r),Ae=new po(r),qe=new mo(r),Ie=new go(r),wt=new yo(r),ge=new bo(r),vt=new ko(r),Xe=new _o(r),Lt=new vo(r),Yr=new wo(r),Ce=new xo(r);function yr(){k!==!1&&(w=!0,f.showHiddenSlides||pe(E.wrapper,'section[data-visibility="hidden"]').forEach(R=>{let I=R.parentNode;I.childElementCount===1&&/section/i.test(I.nodeName)?I.remove():R.remove()}),function(){E.slides.classList.add("no-transition"),va?E.wrapper.classList.add("no-hover"):E.wrapper.classList.remove("no-hover"),le.render(),K.render(),re.render(),Ie.render(),wt.render(),Ce.render(),E.pauseOverlay=((R,I,J,O="")=>{let ae=R.querySelectorAll("."+J);for(let Se=0;Se<ae.length;Se++){let Pe=ae[Se];if(Pe.parentNode===R)return Pe}let we=document.createElement(I);return we.className=J,we.innerHTML=O,R.appendChild(we),we})(E.wrapper,"div","pause-overlay",f.controls?'<button class="resume-button">Resume presentation</button>':null),E.statusElement=function(){let R=E.wrapper.querySelector(".aria-status");return R||(R=document.createElement("div"),R.style.position="absolute",R.style.height="1px",R.style.width="1px",R.style.overflow="hidden",R.style.clip="rect( 1px, 1px, 1px, 1px )",R.classList.add("aria-status"),R.setAttribute("aria-live","polite"),R.setAttribute("aria-atomic","true"),E.wrapper.appendChild(R)),R}(),E.wrapper.setAttribute("role","application")}(),f.postMessage&&window.addEventListener("message",he,!1),setInterval(()=>{(!P.isActive()&&E.wrapper.scrollTop!==0||E.wrapper.scrollLeft!==0)&&(E.wrapper.scrollTop=0,E.wrapper.scrollLeft=0)},1e3),document.addEventListener("fullscreenchange",At),document.addEventListener("webkitfullscreenchange",At),Ct().forEach(R=>{pe(R,"section").forEach((I,J)=>{J>0&&(I.classList.remove("present"),I.classList.remove("past"),I.classList.add("future"),I.setAttribute("aria-hidden","true"))})}),sn(),le.update(!0),function(){let R=f.view==="print",I=f.view==="scroll"||f.view==="reader";(R||I)&&(R?Qr():Yr.unbind(),E.viewport.classList.add("loading-scroll-mode"),R?document.readyState==="complete"?se.activate():window.addEventListener("load",()=>se.activate()):P.activate())}(),qe.readURL(),setTimeout(()=>{E.slides.classList.remove("no-transition"),E.wrapper.classList.add("ready"),xt({type:"ready",data:{indexh:a,indexv:i,currentSlide:d}})},1))}function za(R){E.statusElement.textContent=R}function Jr(R){let I="";if(R.nodeType===3)I+=R.textContent;else if(R.nodeType===1){let J=R.getAttribute("aria-hidden"),O=window.getComputedStyle(R).display==="none";J==="true"||O||Array.from(R.childNodes).forEach(ae=>{I+=Jr(ae)})}return I=I.trim(),I===""?"":I+" "}function sn(R){let I={...f};if(typeof R=="object"&&wa(f,R),r.isReady()===!1)return;let J=E.wrapper.querySelectorAll(Zr).length;E.wrapper.classList.remove(I.transition),E.wrapper.classList.add(f.transition),E.wrapper.setAttribute("data-transition-speed",f.transitionSpeed),E.wrapper.setAttribute("data-background-transition",f.backgroundTransition),E.viewport.style.setProperty("--slide-width",typeof f.width=="string"?f.width:f.width+"px"),E.viewport.style.setProperty("--slide-height",typeof f.height=="string"?f.height:f.height+"px"),f.shuffle&&Ta(),eo(E.wrapper,"embedded",f.embedded),eo(E.wrapper,"rtl",f.rtl),eo(E.wrapper,"center",f.center),f.pause===!1&&_r(),de.reset(),u&&(u.destroy(),u=null),J>1&&f.autoSlide&&f.autoSlideStoppable&&(u=new zo(E.wrapper,()=>Math.min(Math.max((Date.now()-Y)/$,0),1)),u.on("click",L),V=!1),f.navigationMode!=="default"?E.wrapper.setAttribute("data-navigation-mode",f.navigationMode):E.wrapper.removeAttribute("data-navigation-mode"),Ce.configure(f,I),Lt.configure(f,I),ge.configure(f,I),Ie.configure(f,I),wt.configure(f,I),Ae.configure(f,I),be.configure(f,I),K.configure(f,I),hn()}function on(){window.addEventListener("resize",xr,!1),f.touch&&Yr.bind(),f.keyboard&&Ae.bind(),f.progress&&wt.bind(),f.respondToHashChanges&&qe.bind(),Ie.bind(),Lt.bind(),E.slides.addEventListener("click",mt,!1),E.slides.addEventListener("transitionend",Ve,!1),E.pauseOverlay.addEventListener("click",_r,!1),f.focusBodyOnPageVisibilityChange&&document.addEventListener("visibilitychange",M,!1)}function Qr(){Yr.unbind(),Lt.unbind(),Ae.unbind(),Ie.unbind(),wt.unbind(),qe.unbind(),window.removeEventListener("resize",xr,!1),E.slides.removeEventListener("click",mt,!1),E.slides.removeEventListener("transitionend",Ve,!1),E.pauseOverlay.removeEventListener("click",_r,!1)}function cn(R,I,J){e.addEventListener(R,I,J)}function ln(R,I,J){e.removeEventListener(R,I,J)}function Aa(R){typeof R.layout=="string"&&(z.layout=R.layout),typeof R.overview=="string"&&(z.overview=R.overview),z.layout?Ir(E.slides,z.layout+" "+z.overview):Ir(E.slides,z.overview)}function xt({target:R=E.wrapper,type:I,data:J,bubbles:O=!0}){let ae=document.createEvent("HTMLEvents",1,2);return ae.initEvent(I,O,!0),wa(ae,J),R.dispatchEvent(ae),R===E.wrapper&&un(I),ae}function Sa(R){xt({type:"slidechanged",data:{indexh:a,indexv:i,previousSlide:c,currentSlide:d,origin:R}})}function un(R,I){if(f.postMessageEvents&&window.parent!==window.self){let J={namespace:"reveal",eventName:R,state:Or()};wa(J,I),window.parent.postMessage(JSON.stringify(J),"*")}}function br(){if(E.wrapper&&!se.isActive()){let R=E.viewport.offsetWidth,I=E.viewport.offsetHeight;if(!f.disableLayout){va&&!f.embedded&&document.documentElement.style.setProperty("--vh",.01*window.innerHeight+"px");let J=P.isActive()?kr(R,I):kr(),O=g;ur(f.width,f.height),E.slides.style.width=J.width+"px",E.slides.style.height=J.height+"px",g=Math.min(J.presentationWidth/J.width,J.presentationHeight/J.height),g=Math.max(g,f.minScale),g=Math.min(g,f.maxScale),g===1||P.isActive()?(E.slides.style.zoom="",E.slides.style.left="",E.slides.style.top="",E.slides.style.bottom="",E.slides.style.right="",Aa({layout:""})):(E.slides.style.zoom="",E.slides.style.left="50%",E.slides.style.top="50%",E.slides.style.bottom="auto",E.slides.style.right="auto",Aa({layout:"translate(-50%, -50%) scale("+g+")"}));let ae=Array.from(E.wrapper.querySelectorAll(Zr));for(let we=0,Se=ae.length;we<Se;we++){let Pe=ae[we];Pe.style.display!=="none"&&(f.center||Pe.classList.contains("center")?Pe.classList.contains("stack")?Pe.style.top=0:Pe.style.top=Math.max((J.height-Pe.scrollHeight)/2,0)+"px":Pe.style.top="")}O!==g&&xt({type:"resize",data:{oldScale:O,scale:g,size:J}})}(function(){if(E.wrapper&&!f.disableLayout&&!se.isActive()&&typeof f.scrollActivationWidth=="number"&&f.view!=="scroll"){let J=kr();J.presentationWidth>0&&J.presentationWidth<=f.scrollActivationWidth?P.isActive()||(le.create(),P.activate()):P.isActive()&&P.deactivate()}})(),E.viewport.style.setProperty("--slide-scale",g),E.viewport.style.setProperty("--viewport-width",R+"px"),E.viewport.style.setProperty("--viewport-height",I+"px"),P.layout(),wt.update(),le.updateParallax(),ve.isActive()&&ve.update()}}function ur(R,I){pe(E.slides,"section > .stretch, section > .r-stretch").forEach(J=>{let O=((ae,we=0)=>{if(ae){let Se,Pe=ae.style.height;return ae.style.height="0px",ae.parentNode.style.height="auto",Se=we-ae.parentNode.offsetHeight,ae.style.height=Pe+"px",ae.parentNode.style.removeProperty("height"),Se}return we})(J,I);if(/(img|video)/gi.test(J.nodeName)){let ae=J.naturalWidth||J.videoWidth,we=J.naturalHeight||J.videoHeight,Se=Math.min(R/ae,O/we);J.style.width=ae*Se+"px",J.style.height=we*Se+"px"}else J.style.width=R+"px",J.style.height=O+"px"})}function kr(R,I){let J=f.width,O=f.height;f.disableLayout&&(J=E.slides.offsetWidth,O=E.slides.offsetHeight);let ae={width:J,height:O,presentationWidth:R||E.wrapper.offsetWidth,presentationHeight:I||E.wrapper.offsetHeight};return ae.presentationWidth-=ae.presentationWidth*f.margin,ae.presentationHeight-=ae.presentationHeight*f.margin,typeof ae.width=="string"&&/%$/.test(ae.width)&&(ae.width=parseInt(ae.width,10)/100*ae.presentationWidth),typeof ae.height=="string"&&/%$/.test(ae.height)&&(ae.height=parseInt(ae.height,10)/100*ae.presentationHeight),ae}function dn(R,I){typeof R=="object"&&typeof R.setAttribute=="function"&&R.setAttribute("data-previous-indexv",I||0)}function Ea(R){if(typeof R=="object"&&typeof R.setAttribute=="function"&&R.classList.contains("stack")){let I=R.hasAttribute("data-start-indexv")?"data-start-indexv":"data-previous-indexv";return parseInt(R.getAttribute(I)||0,10)}return 0}function Re(R=d){return R&&R.parentNode&&!!R.parentNode.nodeName.match(/section/i)}function te(){return!(!d||!Re(d))&&!d.nextElementSibling}function Ot(){return a===0&&i===0}function Nr(){return!!d&&!d.nextElementSibling&&(!Re(d)||!d.parentNode.nextElementSibling)}function Ca(){if(f.pause){let R=E.wrapper.classList.contains("paused");m(),E.wrapper.classList.add("paused"),R===!1&&xt({type:"paused"})}}function _r(){let R=E.wrapper.classList.contains("paused");E.wrapper.classList.remove("paused"),Fe(),R&&xt({type:"resumed"})}function fn(R){typeof R=="boolean"?R?Ca():_r():wr()?_r():Ca()}function wr(){return E.wrapper.classList.contains("paused")}function ft(R,I,J,O){if(xt({type:"beforeslidechange",data:{indexh:R===void 0?a:R,indexv:I===void 0?i:I,origin:O}}).defaultPrevented)return;c=d;let ae=E.wrapper.querySelectorAll(Pr);if(P.isActive()){let gt=P.getSlideByIndices(R,I);return void(gt&&P.scrollToSlide(gt))}if(ae.length===0)return;I!==void 0||ve.isActive()||(I=Ea(ae[R])),c&&c.parentNode&&c.parentNode.classList.contains("stack")&&dn(c.parentNode,i);let we=h.concat();h.length=0;let Se=a||0,Pe=i||0;a=pt(Pr,R===void 0?a:R),i=pt(cd,I===void 0?i:I);let Ut=a!==Se||i!==Pe;Ut||(c=null);let bt=ae[a],ct=bt.querySelectorAll("section");e.classList.toggle("is-vertical-slide",ct.length>1),d=ct[i]||bt;let $e=!1;Ut&&c&&d&&!ve.isActive()&&(F="running",$e=vr(c,d,Se,Pe),$e&&E.slides.classList.add("disable-slide-transitions")),jr(),br(),ve.isActive()&&ve.update(),J!==void 0&&be.goto(J),c&&c!==d&&(c.classList.remove("present"),c.setAttribute("aria-hidden","true"),Ot()&&setTimeout(()=>{pe(E.wrapper,Pr+".stack").forEach(gt=>{dn(gt,0)})},0));e:for(let gt=0,qa=h.length;gt<qa;gt++){for(let zr=0;zr<we.length;zr++)if(we[zr]===h[gt]){we.splice(zr,1);continue e}E.viewport.classList.add(h[gt]),xt({type:h[gt]})}for(;we.length;)E.viewport.classList.remove(we.pop());Ut&&Sa(O),!Ut&&c||(G.stopEmbeddedContent(c),G.startEmbeddedContent(d)),requestAnimationFrame(()=>{za(Jr(d))}),wt.update(),Ie.update(),Ce.update(),le.update(),le.updateParallax(),K.update(),be.update(),qe.writeURL(),Fe(),$e&&(setTimeout(()=>{E.slides.classList.remove("disable-slide-transitions")},0),f.autoAnimate&&de.run(c,d))}function vr(R,I,J,O){return R.hasAttribute("data-auto-animate")&&I.hasAttribute("data-auto-animate")&&R.getAttribute("data-auto-animate-id")===I.getAttribute("data-auto-animate-id")&&!(a>J||i>O?I:R).hasAttribute("data-auto-animate-restart")}function hn(){Qr(),on(),br(),$=f.autoSlide,Fe(),le.create(),qe.writeURL(),f.sortFragmentsOnSync===!0&&be.sortAll(),Ie.update(),wt.update(),jr(),Ce.update(),Ce.updateVisibility(),Xe.update(),le.update(!0),K.update(),G.formatEmbeddedContent(),f.autoPlayMedia===!1?G.stopEmbeddedContent(d,{unloadIframes:!1}):G.startEmbeddedContent(d),ve.isActive()&&ve.layout()}function Ta(R=Ct()){R.forEach((I,J)=>{let O=R[Math.floor(Math.random()*R.length)];O.parentNode===I.parentNode&&I.parentNode.insertBefore(I,O);let ae=I.querySelectorAll("section");ae.length&&Ta(ae)})}function pt(R,I){let J=pe(E.wrapper,R),O=J.length,ae=P.isActive()||se.isActive(),we=!1,Se=!1;if(O){f.loop&&(I>=O&&(we=!0),(I%=O)<0&&(I=O+I,Se=!0)),I=Math.max(Math.min(I,O-1),0);for(let ct=0;ct<O;ct++){let $e=J[ct],gt=f.rtl&&!Re($e);$e.classList.remove("past"),$e.classList.remove("present"),$e.classList.remove("future"),$e.setAttribute("hidden",""),$e.setAttribute("aria-hidden","true"),$e.querySelector("section")&&$e.classList.add("stack"),ae?$e.classList.add("present"):ct<I?($e.classList.add(gt?"future":"past"),f.fragments&&Ft($e)):ct>I?($e.classList.add(gt?"past":"future"),f.fragments&&Ht($e)):ct===I&&f.fragments&&(we?Ht($e):Se&&Ft($e))}let Pe=J[I],Ut=Pe.classList.contains("present");Pe.classList.add("present"),Pe.removeAttribute("hidden"),Pe.removeAttribute("aria-hidden"),Ut||xt({target:Pe,type:"visible",bubbles:!1});let bt=Pe.getAttribute("data-state");bt&&(h=h.concat(bt.split(" ")))}else I=0;return I}function Ft(R){pe(R,".fragment").forEach(I=>{I.classList.add("visible"),I.classList.remove("current-fragment")})}function Ht(R){pe(R,".fragment.visible").forEach(I=>{I.classList.remove("visible","current-fragment")})}function jr(){let R,I,J=Ct(),O=J.length;if(O&&a!==void 0){let ae=ve.isActive()?10:f.viewDistance;va&&(ae=ve.isActive()?6:f.mobileViewDistance),se.isActive()&&(ae=Number.MAX_VALUE);for(let we=0;we<O;we++){let Se=J[we],Pe=pe(Se,"section"),Ut=Pe.length;if(R=Math.abs((a||0)-we)||0,f.loop&&(R=Math.abs(((a||0)-we)%(O-ae))||0),R<ae?G.load(Se):G.unload(Se),Ut){let bt=Ea(Se);for(let ct=0;ct<Ut;ct++){let $e=Pe[ct];I=Math.abs(we===(a||0)?(i||0)-ct:ct-bt),R+I<ae?G.load($e):G.unload($e)}}}ea()?E.wrapper.classList.add("has-vertical-slides"):E.wrapper.classList.remove("has-vertical-slides"),gn()?E.wrapper.classList.add("has-horizontal-slides"):E.wrapper.classList.remove("has-horizontal-slides")}}function $t({includeFragments:R=!1}={}){let I=E.wrapper.querySelectorAll(Pr),J=E.wrapper.querySelectorAll(cd),O={left:a>0,right:a<I.length-1,up:i>0,down:i<J.length-1};if(f.loop&&(I.length>1&&(O.left=!0,O.right=!0),J.length>1&&(O.up=!0,O.down=!0)),I.length>1&&f.navigationMode==="linear"&&(O.right=O.right||O.down,O.left=O.left||O.up),R===!0){let ae=be.availableRoutes();O.left=O.left||ae.prev,O.up=O.up||ae.prev,O.down=O.down||ae.next,O.right=O.right||ae.next}if(f.rtl){let ae=O.left;O.left=O.right,O.right=ae}return O}function pn(R=d){let I=Ct(),J=0;e:for(let O=0;O<I.length;O++){let ae=I[O],we=ae.querySelectorAll("section");for(let Se=0;Se<we.length;Se++){if(we[Se]===R)break e;we[Se].dataset.visibility!=="uncounted"&&J++}if(ae===R)break;ae.classList.contains("stack")===!1&&ae.dataset.visibility!=="uncounted"&&J++}return J}function mn(R){let I,J=a,O=i;if(R)if(P.isActive())J=parseInt(R.getAttribute("data-index-h"),10),R.getAttribute("data-index-v")&&(O=parseInt(R.getAttribute("data-index-v"),10));else{let ae=Re(R),we=ae?R.parentNode:R,Se=Ct();J=Math.max(Se.indexOf(we),0),O=void 0,ae&&(O=Math.max(pe(R.parentNode,"section").indexOf(R),0))}if(!R&&d&&d.querySelectorAll(".fragment").length>0){let ae=d.querySelector(".current-fragment");I=ae&&ae.hasAttribute("data-fragment-index")?parseInt(ae.getAttribute("data-fragment-index"),10):d.querySelectorAll(".fragment.visible").length-1}return{h:J,v:O,f:I}}function zt(){return pe(E.wrapper,Zr+':not(.stack):not([data-visibility="uncounted"])')}function Ct(){return pe(E.wrapper,Pr)}function Da(){return pe(E.wrapper,".slides>section>section")}function gn(){return Ct().length>1}function ea(){return Da().length>1}function ta(){return zt().length}function yn(R,I){let J=Ct()[R],O=J&&J.querySelectorAll("section");return O&&O.length&&typeof I=="number"?O?O[I]:void 0:J}function Or(){let R=mn();return{indexh:R.h,indexv:R.v,indexf:R.f,paused:wr(),overview:ve.isActive(),...Xe.getState()}}function Fe(){if(m(),d&&f.autoSlide!==!1){let R=d.querySelector(".current-fragment[data-autoslide]"),I=R?R.getAttribute("data-autoslide"):null,J=d.parentNode?d.parentNode.getAttribute("data-autoslide"):null,O=d.getAttribute("data-autoslide");I?$=parseInt(I,10):O?$=parseInt(O,10):J?$=parseInt(J,10):($=f.autoSlide,d.querySelectorAll(".fragment").length===0&&pe(d,"video, audio").forEach(ae=>{ae.hasAttribute("data-autoplay")&&$&&1e3*ae.duration/ae.playbackRate>$&&($=1e3*ae.duration/ae.playbackRate+1e3)})),!$||V||wr()||ve.isActive()||Nr()&&!be.availableRoutes().next&&f.loop!==!0||(H=setTimeout(()=>{typeof f.autoSlideMethod=="function"?f.autoSlideMethod():Kt(),Fe()},$),Y=Date.now()),u&&u.setPlaying(H!==-1)}}function m(){clearTimeout(H),H=-1}function y(){$&&!V&&(V=!0,xt({type:"autoslidepaused"}),clearTimeout(H),u&&u.setPlaying(!1))}function Z(){$&&V&&(V=!1,xt({type:"autoslideresumed"}),Fe())}function v({skipFragments:R=!1}={}){if(x.hasNavigatedHorizontally=!0,P.isActive())return P.prev();f.rtl?(ve.isActive()||R||be.next()===!1)&&$t().left&&ft(a+1,f.navigationMode==="grid"?i:void 0):(ve.isActive()||R||be.prev()===!1)&&$t().left&&ft(a-1,f.navigationMode==="grid"?i:void 0)}function T({skipFragments:R=!1}={}){if(x.hasNavigatedHorizontally=!0,P.isActive())return P.next();f.rtl?(ve.isActive()||R||be.prev()===!1)&&$t().right&&ft(a-1,f.navigationMode==="grid"?i:void 0):(ve.isActive()||R||be.next()===!1)&&$t().right&&ft(a+1,f.navigationMode==="grid"?i:void 0)}function Be({skipFragments:R=!1}={}){if(P.isActive())return P.prev();(ve.isActive()||R||be.prev()===!1)&&$t().up&&ft(a,i-1)}function ie({skipFragments:R=!1}={}){if(x.hasNavigatedVertically=!0,P.isActive())return P.next();(ve.isActive()||R||be.next()===!1)&&$t().down&&ft(a,i+1)}function ot({skipFragments:R=!1}={}){if(P.isActive())return P.prev();if(R||be.prev()===!1)if($t().up)Be({skipFragments:R});else{let I;if(I=f.rtl?pe(E.wrapper,Pr+".future").pop():pe(E.wrapper,Pr+".past").pop(),I&&I.classList.contains("stack")){let J=I.querySelectorAll("section").length-1||void 0;ft(a-1,J)}else f.rtl?T({skipFragments:R}):v({skipFragments:R})}}function Kt({skipFragments:R=!1}={}){if(x.hasNavigatedHorizontally=!0,x.hasNavigatedVertically=!0,P.isActive())return P.next();if(R||be.next()===!1){let I=$t();I.down&&I.right&&f.loop&&te()&&(I.down=!1),I.down?ie({skipFragments:R}):f.rtl?v({skipFragments:R}):T({skipFragments:R})}}function he(R){let I=R.data;if(typeof I=="string"&&I.charAt(0)==="{"&&I.charAt(I.length-1)==="}"&&(I=JSON.parse(I),I.method&&typeof r[I.method]=="function"))if(Hy.test(I.method)===!1){let J=r[I.method].apply(r,I.args);un("callback",{method:I.method,result:J})}else console.warn('reveal.js: "'+I.method+'" is is blacklisted from the postMessage API')}function Ve(R){F==="running"&&/section/gi.test(R.target.nodeName)&&(F="idle",xt({type:"slidetransitionend",data:{indexh:a,indexv:i,previousSlide:c,currentSlide:d}}))}function mt(R){let I=yt(R.target,'a[href^="#"]');if(I){let J=I.getAttribute("href"),O=qe.getIndicesFromHash(J);O&&(r.slide(O.h,O.v,O.f),R.preventDefault())}}function xr(R){br()}function M(R){document.hidden===!1&&document.activeElement!==document.body&&(typeof document.activeElement.blur=="function"&&document.activeElement.blur(),document.body.focus())}function At(R){(document.fullscreenElement||document.webkitFullscreenElement)===E.wrapper&&(R.stopImmediatePropagation(),setTimeout(()=>{r.layout(),r.focus.focus()},1))}function L(R){Nr()&&f.loop===!1?(ft(0,0),Z()):V?Z():y()}let Ma={VERSION:gd,initialize:function(R){if(!e)throw'Unable to find presentation root (<div class="reveal">).';if(k)throw"Reveal.js has already been initialized.";if(k=!0,E.wrapper=e,E.slides=e.querySelector(".slides"),!E.slides)throw'Unable to find slides container (<div class="slides">).';return f={...$y,...f,...t,...R,...od()},/print-pdf/gi.test(window.location.search)&&(f.view="print"),function(){f.embedded===!0?E.viewport=yt(e,".reveal-viewport")||e:(E.viewport=document.body,document.documentElement.classList.add("reveal-full-page")),E.viewport.classList.add("reveal-viewport")}(),window.addEventListener("load",br,!1),vt.load(f.plugins,f.dependencies).then(yr),new Promise(I=>r.on("ready",I))},configure:sn,destroy:function(){k=!1,w!==!1&&(Qr(),m(),Ce.destroy(),Lt.destroy(),Xe.destroy(),vt.destroy(),ge.destroy(),Ie.destroy(),wt.destroy(),le.destroy(),K.destroy(),re.destroy(),document.removeEventListener("fullscreenchange",At),document.removeEventListener("webkitfullscreenchange",At),document.removeEventListener("visibilitychange",M,!1),window.removeEventListener("message",he,!1),window.removeEventListener("load",br,!1),E.pauseOverlay&&E.pauseOverlay.remove(),E.statusElement&&E.statusElement.remove(),document.documentElement.classList.remove("reveal-full-page"),E.wrapper.classList.remove("ready","center","has-horizontal-slides","has-vertical-slides"),E.wrapper.removeAttribute("data-transition-speed"),E.wrapper.removeAttribute("data-background-transition"),E.viewport.classList.remove("reveal-viewport"),E.viewport.style.removeProperty("--slide-width"),E.viewport.style.removeProperty("--slide-height"),E.slides.style.removeProperty("width"),E.slides.style.removeProperty("height"),E.slides.style.removeProperty("zoom"),E.slides.style.removeProperty("left"),E.slides.style.removeProperty("top"),E.slides.style.removeProperty("bottom"),E.slides.style.removeProperty("right"),E.slides.style.removeProperty("transform"),Array.from(E.wrapper.querySelectorAll(Zr)).forEach(R=>{R.style.removeProperty("display"),R.style.removeProperty("top"),R.removeAttribute("hidden"),R.removeAttribute("aria-hidden")}))},sync:hn,syncSlide:function(R=d){le.sync(R),be.sync(R),G.load(R),le.update(),Ce.update()},syncFragments:be.sync.bind(be),slide:ft,left:v,right:T,up:Be,down:ie,prev:ot,next:Kt,navigateLeft:v,navigateRight:T,navigateUp:Be,navigateDown:ie,navigatePrev:ot,navigateNext:Kt,navigateFragment:be.goto.bind(be),prevFragment:be.prev.bind(be),nextFragment:be.next.bind(be),on:cn,off:ln,addEventListener:cn,removeEventListener:ln,layout:br,shuffle:Ta,availableRoutes:$t,availableFragments:be.availableRoutes.bind(be),toggleHelp:Xe.toggleHelp.bind(Xe),toggleOverview:ve.toggle.bind(ve),toggleScrollView:P.toggle.bind(P),togglePause:fn,toggleAutoSlide:function(R){typeof R=="boolean"?R?Z():y():V?Z():y()},toggleJumpToSlide:function(R){typeof R=="boolean"?R?re.show():re.hide():re.isVisible()?re.hide():re.show()},isFirstSlide:Ot,isLastSlide:Nr,isLastVerticalSlide:te,isVerticalSlide:Re,isVerticalStack:function(R=d){return R.classList.contains(".stack")||R.querySelector("section")!==null},isPaused:wr,isAutoSliding:function(){return!(!$||V)},isSpeakerNotes:Ce.isSpeakerNotesWindow.bind(Ce),isOverview:ve.isActive.bind(ve),isFocused:Lt.isFocused.bind(Lt),isOverlayOpen:Xe.isOpen.bind(Xe),isScrollView:P.isActive.bind(P),isPrintView:se.isActive.bind(se),isReady:()=>w,loadSlide:G.load.bind(G),unloadSlide:G.unload.bind(G),startEmbeddedContent:()=>G.startEmbeddedContent(d),stopEmbeddedContent:()=>G.stopEmbeddedContent(d,{unloadIframes:!1}),previewIframe:Xe.previewIframe.bind(Xe),previewImage:Xe.previewImage.bind(Xe),previewVideo:Xe.previewVideo.bind(Xe),showPreview:Xe.previewIframe.bind(Xe),hidePreview:Xe.close.bind(Xe),addEventListeners:on,removeEventListeners:Qr,dispatchEvent:xt,getState:Or,setState:function(R){if(typeof R=="object"){ft(_a(R.indexh),_a(R.indexv),_a(R.indexf));let I=_a(R.paused),J=_a(R.overview);typeof I=="boolean"&&I!==wr()&&fn(I),typeof J=="boolean"&&J!==ve.isActive()&&ve.toggle(J),Xe.setState(R)}},getProgress:function(){let R=ta(),I=pn();if(d){let J=d.querySelectorAll(".fragment");J.length>0&&(I+=d.querySelectorAll(".fragment.visible").length/J.length*.9)}return Math.min(I/(R-1),1)},getIndices:mn,getSlidesAttributes:function(){return zt().map(R=>{let I={};for(let J=0;J<R.attributes.length;J++){let O=R.attributes[J];I[O.name]=O.value}return I})},getSlidePastCount:pn,getTotalSlides:ta,getSlide:yn,getPreviousSlide:()=>c,getCurrentSlide:()=>d,getSlideBackground:function(R,I){let J=typeof R=="number"?yn(R,I):R;if(J)return J.slideBackgroundElement},getSlideNotes:Ce.getSlideNotes.bind(Ce),getSlides:zt,getHorizontalSlides:Ct,getVerticalSlides:Da,hasHorizontalSlides:gn,hasVerticalSlides:ea,hasNavigatedHorizontally:()=>x.hasNavigatedHorizontally,hasNavigatedVertically:()=>x.hasNavigatedVertically,shouldAutoAnimateBetween:vr,addKeyBinding:Ae.addKeyBinding.bind(Ae),removeKeyBinding:Ae.removeKeyBinding.bind(Ae),triggerKey:Ae.triggerKey.bind(Ae),registerKeyboardShortcut:Ae.registerKeyboardShortcut.bind(Ae),getComputedSlideSize:kr,setCurrentScrollPage:function(R,I,J){let O=a||0;a=I,i=J;let ae=d!==R;c=d,d=R,d&&c&&f.autoAnimate&&vr(c,d,O,i)&&de.run(c,d),ae&&(c&&(G.stopEmbeddedContent(c),G.stopEmbeddedContent(c.slideBackgroundElement)),G.startEmbeddedContent(d),G.startEmbeddedContent(d.slideBackgroundElement)),requestAnimationFrame(()=>{za(Jr(d))}),Sa()},getScale:()=>g,getConfig:()=>f,getQueryHash:od,getSlidePath:qe.getHash.bind(qe),getRevealElement:()=>e,getSlidesElement:()=>E.slides,getViewportElement:()=>E.viewport,getBackgroundsElement:()=>le.element,registerPlugin:vt.registerPlugin.bind(vt),hasPlugin:vt.hasPlugin.bind(vt),getPlugin:vt.getPlugin.bind(vt),getPlugins:vt.getRegisteredPlugins.bind(vt)};return wa(r,{...Ma,announceStatus:za,getStatusText:Jr,focus:Lt,scroll:P,progress:wt,controls:Ie,location:qe,overview:ve,keyboard:Ae,fragments:be,backgrounds:le,slideContent:G,slideNumber:K,onUserInput:function(R){f.autoSlideStoppable&&y()},closeOverlay:Xe.close.bind(Xe),updateSlidesVisibility:jr,layoutSlideContents:ur,transformSlides:Aa,cueAutoSlide:Fe,cancelAutoSlide:m}),Ma}var Oe=yd,fd=[];Oe.initialize=e=>(Object.assign(Oe,new yd(document.querySelector(".reveal"),e)),fd.map(t=>t(Oe)),Oe.initialize()),["configure","on","off","addEventListener","removeEventListener","registerPlugin"].forEach(e=>{Oe[e]=(...t)=>{fd.push(r=>r[e].call(null,...t))}}),Oe.isReady=()=>!1,Oe.VERSION=gd;var Uy="0.4.0";function Ao(e){return new Promise((t,r)=>{if(!e||document.querySelector(`script[data-lib="${e}"]`))return t();let a=document.createElement("script");a.src=e,a.async=!0,a.setAttribute("data-lib",e),a.onload=()=>t(),a.onerror=()=>r(new Error("failed to load "+e)),document.head.appendChild(a)})}function xd(e){let t=e&&e.enhancers||{},r=[];return t.mermaidJs&&document.querySelector(".mermaid")&&r.push(Ao(t.mermaidJs)),t.smilesJs&&document.querySelector("canvas[data-smiles]")&&r.push(Ao(t.smilesJs)),t.chartJs&&document.querySelector("canvas.orz-chart")&&r.push(Ao(t.chartJs)),Promise.all(r).catch(()=>{})}function Vy(){let e=window.__ORZ_SLIDES__||{},t=document.documentElement.getAttribute("data-theme")||e.defaultTheme,r=(e.themes||[]).find(a=>a.id===t);return!!(r&&r.scheme==="dark")}function zd(){let e=window;try{if(e.mermaid){e.mermaid.initialize({startOnLoad:!1});let t=e.mermaid.run({querySelector:".mermaid:not([data-processed])"});t&&t.then&&t.then(()=>bs()).catch(()=>{})}}catch{}try{if(e.SmilesDrawer){let t=Vy()?"dark":"light";document.querySelectorAll("canvas[data-smiles]").forEach(r=>{let a=r;if(a.__scheme===t||a.__pending===t)return;a.__pending=t,a.__ow===void 0&&(a.__ow=r.width,a.__oh=r.height),r.width=a.__ow,r.height=a.__oh;let i=new e.SmilesDrawer.Drawer({width:a.__ow,height:a.__oh});e.SmilesDrawer.parse(r.getAttribute("data-smiles"),c=>{try{i.draw(c,r,t,!1),a.__scheme=t}catch{}a.__pending=null,bs()})})}}catch{}try{e.Chart&&(Oe.getCurrentSlide&&Oe.getCurrentSlide()||document).querySelectorAll("canvas.orz-chart[data-chart]").forEach(r=>{if(!e.Chart.getChart(r))try{let a=JSON.parse(r.getAttribute("data-chart")||"{}");a.options=a.options||{},a.options.responsive=!1,a.options.maintainAspectRatio=!1,a.options.animation=!1,new e.Chart(r,a)}catch{}})}catch{}Wy(),Gy()}function Gy(){location.protocol==="file:"&&document.querySelectorAll(".youtube-embed").forEach(e=>{if(e.__ytFacade)return;let t=e.querySelector("iframe"),a=(t&&t.getAttribute("src")||"").match(/embed\/([\w-]{6,})/);if(!t||!a)return;e.__ytFacade=!0;let i=a[1],c=document.createElement("a");c.href="https://www.youtube.com/watch?v="+i,c.target="_blank",c.rel="noopener noreferrer",c.className="youtube-facade",c.setAttribute("aria-label","Play video on YouTube"),c.style.backgroundImage="url('https://i.ytimg.com/vi/"+i+"/hqdefault.jpg')",c.innerHTML='<span class="youtube-facade-play" aria-hidden="true"></span>',t.replaceWith(c)})}function Wy(){document.querySelectorAll(".tabs:not([data-js])").forEach(e=>{let t=Array.from(e.querySelectorAll(":scope > .tab"));if(!t.length)return;let r=document.createElement("div");r.className="tabs-bar",t.forEach((a,i)=>{let c=document.createElement("button");c.className="tabs-bar-btn"+(i===0?" active":""),c.textContent=a.getAttribute("data-label")||"Tab "+(i+1),c.addEventListener("click",()=>{r.querySelectorAll(".tabs-bar-btn").forEach(d=>d.classList.remove("active")),t.forEach(d=>d.classList.remove("active")),c.classList.add("active"),a.classList.add("active")}),r.appendChild(c),i===0&&a.classList.add("active")}),e.insertBefore(r,t[0]),e.setAttribute("data-js","1")})}var bd=.6;function Xy(e){e.style.removeProperty("--region-scale");let t=e.firstElementChild;if(!t)return;let r=1;for(let a=0;a<12&&!(t.scrollHeight<=e.clientHeight+1&&t.scrollWidth<=e.clientWidth+1);a++){if(r-=.07,r<bd){r=bd,e.style.setProperty("--region-scale",String(r));break}e.style.setProperty("--region-scale",String(r))}e.setAttribute("data-scale",r.toFixed(2))}function kd(e,t){let r=e.clientWidth,a=t.closest(".markdown-body");if(!a)return{w:r,h:e.clientHeight};let i=t;for(;i.parentElement&&i.parentElement!==a;)i=i.parentElement;let c=0;return Array.prototype.forEach.call(a.children,d=>{d!==i&&(c+=d.offsetHeight)}),{w:r,h:Math.max(40,e.clientHeight-c-6)}}function Zy(e){if(!e.clientWidth||!e.clientHeight)return;e.querySelectorAll(".mermaid svg").forEach(r=>{let a=kd(e,r),i=r.viewBox&&r.viewBox.baseVal,c=i&&i.height?i.width/i.height:1,d=a.w,u=d/c;u>a.h&&(u=a.h,d=u*c),r.style.maxWidth="none",r.style.width=Math.floor(d)+"px",r.style.height=Math.floor(u)+"px"});let t=window.Chart;t&&t.getChart&&e.querySelectorAll("canvas.orz-chart").forEach(r=>{let a=t.getChart(r);if(a){let i=kd(e,r);try{a.resize(i.w,i.h)}catch{}}})}function bs(){let e=Oe.getCurrentSlide&&Oe.getCurrentSlide()||null;!e||e.getAttribute("data-fit")==="off"||e.querySelectorAll(".orz-region").forEach(t=>{Xy(t),Zy(t)})}function _d(){let e=document.getElementById("orz-deck");return(e&&e.textContent||"").replace(/^\n/,"").replace(/\n\s*$/,"")}function Ad(e){let t=document.querySelector(".reveal .slides");t&&(t.innerHTML=Qi(gs(e),Eo.md)),Sd()}var rn=()=>{if(zd(),Sd())try{Oe.sync()}catch{}bs()};function Ky(e){Ad(e);try{Oe.sync()}catch{}xd(window.__ORZ_SLIDES__||{}).then(rn)}function Yy(){let e=window.__ORZ_SLIDES__||{},t=gs(_d());Ad(_d());let r=(t.config.ratio||e.ratio||"16:9").split(":").map(Number),a=960,i=Math.round(a*(r[1]||9)/(r[0]||16));ks=a,_s=i,Oe.initialize({width:a,height:i,margin:.03,minScale:.2,maxScale:4,hash:!0,controls:!0,progress:!0,slideNumber:"c/t"}),window.orzslides.reveal=Oe;try{Oe.addKeyBinding({keyCode:83,key:"S",description:"Speaker view"},qd),Oe.addKeyBinding({keyCode:84,key:"T",description:"Toggle timer/clock"},Md)}catch{}Oe.on("slidechanged",nn),Oe.on("fragmentshown",nn),Oe.on("fragmenthidden",nn);let c=()=>{try{Oe.layout()}catch{}};xd(e).then(()=>{c(),rn()}),Oe.on("slidechanged",()=>{zd(),[80,500,1400].forEach(d=>setTimeout(rn,d))}),[200,700,1500,2600].forEach(d=>setTimeout(()=>{c(),rn()},d)),window.addEventListener("resize",()=>setTimeout(()=>{c(),bs()},60)),document.addEventListener("click",d=>{let u=d.target,f=u&&u.closest?u.closest(".qrcode"):null;if(!f)return;let k=f.querySelector("svg");if(!k)return;d.stopPropagation(),d.preventDefault();let w=document.createElement("div");w.className="orz-qr-overlay",w.appendChild(k.cloneNode(!0));let x=()=>{w.remove(),document.removeEventListener("keydown",h,!0)},h=g=>{g.key==="Escape"&&(g.stopPropagation(),g.preventDefault(),x())};w.addEventListener("click",x),document.addEventListener("keydown",h,!0),document.body.appendChild(w)},!0)}function Jy(e){let t=[];return Array.prototype.forEach.call(e.children,r=>{let a=r.tagName.toLowerCase();a==="ul"||a==="ol"?Array.prototype.forEach.call(r.children,i=>{i.tagName.toLowerCase()==="li"&&t.push(i)}):t.push(r)}),t}function Sd(){let e=!1;return document.querySelectorAll("section[data-step] .orz-region .markdown-body").forEach(t=>{Jy(t).forEach(r=>{r.classList.contains("fragment")||(r.classList.add("fragment"),e=!0)})}),e}var ks=960,_s=540,an=0,gr=null,lr=null,Kr={startMs:0,accumMs:0,running:!1,start(){this.running||(this.startMs=Date.now(),this.running=!0)},pause(){this.running&&(this.accumMs+=Date.now()-this.startMs,this.running=!1)},toggle(){this.running?this.pause():this.start()},reset(){this.accumMs=0,this.startMs=Date.now()},elapsed(){return this.accumMs+(this.running?Date.now()-this.startMs:0)}};function xa(e){return e<10?"0"+e:""+e}function Ed(e){let t=Math.floor(e/1e3),r=Math.floor(t/3600),a=Math.floor(t%3600/60),i=t%60;return r>0?r+":"+xa(a)+":"+xa(i):a+":"+xa(i)}function Cd(){let e=new Date;return xa(e.getHours())+":"+xa(e.getMinutes())+":"+xa(e.getSeconds())}function Td(){an||(an=window.setInterval(So,1e3))}function So(){let e=!!(lr&&!lr.closed);if(!gr&&!e){an&&(clearInterval(an),an=0);return}if(Dd(),e){let t=lr.document,r=(a,i)=>{let c=t.getElementById(a);c&&(c.textContent=i)};r("sv-clock",Cd()),r("sv-timer",Ed(Kr.elapsed())),r("sv-ttoggle",Kr.running?"Pause":"Start")}}function Dd(){gr&&(gr.innerHTML='<span class="orz-timer-clock">'+Cd()+'</span><span class="orz-timer-elapsed">'+Ed(Kr.elapsed())+"</span>")}function Md(){if(gr){gr.remove(),gr=null;return}Kr.start(),gr=document.createElement("div"),gr.className="orz-timer",document.body.appendChild(gr),Dd(),Td()}function Qy(){return Array.prototype.slice.call(document.querySelectorAll(".reveal > .slides > section"))}function wd(e){if(!e)return'<div class="sv-end">\u2014 End \u2014</div>';let t=e.cloneNode(!0);return t.querySelectorAll("aside.notes").forEach(r=>r.remove()),t.classList.add("present"),t.removeAttribute("hidden"),t.style.cssText="",'<div class="reveal"><div class="slides">'+t.outerHTML+"</div></div>"}function vd(e){let t=e.querySelector(".slides");if(!t||!e.clientWidth)return;let r=e.clientWidth/ks;t.style.transform="scale("+r+")",e.style.height=_s*r+"px"}function nn(){if(!lr||lr.closed)return;let e=lr.document,t=Oe.getCurrentSlide&&Oe.getCurrentSlide()||null,r=Qy(),a=t?r.indexOf(t):-1,i=a>=0&&r[a+1]||null,c=e.getElementById("sv-cur"),d=e.getElementById("sv-nxt"),u=e.getElementById("sv-notes"),f=e.getElementById("sv-pos");if(c&&(c.innerHTML=wd(t),vd(c)),d&&(d.innerHTML=wd(i),vd(d)),u){let k=t?t.querySelector("aside.notes"):null;u.innerHTML=k&&k.innerHTML.trim()?k.innerHTML:'<em class="sv-nonotes">No notes for this slide.</em>'}f&&(f.textContent=a+1+" / "+r.length)}function e2(e){return'<!DOCTYPE html><html><head><meta charset="utf-8"><title>Speaker View \u2014 orz-slides</title>'+e+"<style>*{box-sizing:border-box}html,body{margin:0;height:100%;background:#16161a;color:#e8e8ea;font:14px/1.45 system-ui,-apple-system,sans-serif}.sv-top{display:flex;align-items:center;gap:18px;padding:8px 16px;background:#000;border-bottom:1px solid #2a2a30}.sv-clock{font-size:20px;font-variant-numeric:tabular-nums;opacity:.85}.sv-tbox{display:flex;align-items:center;gap:8px}.sv-tbox #sv-timer{font-size:22px;font-variant-numeric:tabular-nums;min-width:74px}.sv-tbox button{font:inherit;font-size:12px;padding:3px 10px;border:1px solid #4a4a52;background:#23232a;color:#e8e8ea;border-radius:6px;cursor:pointer}.sv-tbox button:hover{background:#30303a}.sv-pos{margin-left:auto;font-size:17px;opacity:.8;font-variant-numeric:tabular-nums}.sv-main{display:grid;grid-template-columns:1.7fr 1fr;gap:14px;padding:14px;height:calc(100% - 49px)}.sv-current{min-height:0;display:flex;flex-direction:column}.sv-side{display:grid;grid-template-rows:auto 1fr;gap:14px;min-height:0}.sv-label{font-size:11px;letter-spacing:.09em;text-transform:uppercase;opacity:.5;margin:0 0 5px}.sv-stage{position:relative;overflow:hidden;background:#000;border:1px solid #2a2a30;border-radius:7px}.sv-stage .reveal{position:static;width:auto;height:auto}.sv-stage .slides{position:absolute;left:0;top:0;width:"+ks+"px;height:"+_s+"px;transform-origin:0 0;margin:0;padding:0;text-align:left}.sv-stage .slides>section{position:relative!important;display:block!important;left:0!important;top:0!important;transform:none!important;width:"+ks+"px!important;height:"+_s+'px!important;opacity:1!important;visibility:visible!important;background:var(--bg,#fff)}.sv-stage .fragment{opacity:1!important;visibility:visible!important}.sv-notes{background:#fbfbfa;color:#16161a;border-radius:7px;padding:16px 18px;overflow:auto;min-height:0;font-size:16px;line-height:1.5}.sv-notes :first-child{margin-top:0}.sv-notes .sv-nonotes{color:#888}.sv-end{display:flex;align-items:center;justify-content:center;height:100%;opacity:.45;font-size:18px}</style></head><body><div class="sv-top"><div class="sv-clock" id="sv-clock">--:--:--</div><div class="sv-tbox"><span id="sv-timer">0:00</span><button id="sv-ttoggle">Pause</button><button id="sv-treset">Reset</button></div><div class="sv-pos" id="sv-pos">\u2013 / \u2013</div></div><div class="sv-main"><div class="sv-current"><div class="sv-label">Current</div><div class="sv-stage" id="sv-cur"></div></div><div class="sv-side"><div><div class="sv-label">Next</div><div class="sv-stage" id="sv-nxt"></div></div><div style="display:flex;flex-direction:column;min-height:0"><div class="sv-label">Notes</div><div class="sv-notes" id="sv-notes"></div></div></div></div></body></html>'}function qd(){if(lr&&!lr.closed){lr.focus();return}let e=window.open("","orz-speaker","width=1280,height=800");if(!e)return;lr=e;let t=Array.prototype.slice.call(document.querySelectorAll('link[rel="stylesheet"], style')).map(c=>c.outerHTML).join(`
372
+ `):null}destroy(){this.element.remove()}},zo=class{constructor(t,r){this.diameter=100,this.diameter2=this.diameter/2,this.thickness=6,this.playing=!1,this.progress=0,this.progressOffset=1,this.container=t,this.progressCheck=r,this.canvas=document.createElement("canvas"),this.canvas.className="playback",this.canvas.width=this.diameter,this.canvas.height=this.diameter,this.canvas.style.width=this.diameter2+"px",this.canvas.style.height=this.diameter2+"px",this.context=this.canvas.getContext("2d"),this.container.appendChild(this.canvas),this.render()}setPlaying(t){let r=this.playing;this.playing=t,!r&&this.playing?this.animate():this.render()}animate(){let t=this.progress;this.progress=this.progressCheck(),t>.8&&this.progress<.2&&(this.progressOffset=this.progress),this.render(),this.playing&&requestAnimationFrame(this.animate.bind(this))}render(){let t=this.playing?this.progress:0,r=this.diameter2-this.thickness,a=this.diameter2,i=this.diameter2,c=28;this.progressOffset+=.1*(1-this.progressOffset);let d=-Math.PI/2+t*(2*Math.PI),u=-Math.PI/2+this.progressOffset*(2*Math.PI);this.context.save(),this.context.clearRect(0,0,this.diameter,this.diameter),this.context.beginPath(),this.context.arc(a,i,r+4,0,2*Math.PI,!1),this.context.fillStyle="rgba( 0, 0, 0, 0.4 )",this.context.fill(),this.context.beginPath(),this.context.arc(a,i,r,0,2*Math.PI,!1),this.context.lineWidth=this.thickness,this.context.strokeStyle="rgba( 255, 255, 255, 0.2 )",this.context.stroke(),this.playing&&(this.context.beginPath(),this.context.arc(a,i,r,u,d,!1),this.context.lineWidth=this.thickness,this.context.strokeStyle="#fff",this.context.stroke()),this.context.translate(a-14,i-14),this.playing?(this.context.fillStyle="#fff",this.context.fillRect(0,0,10,c),this.context.fillRect(18,0,10,c)):(this.context.beginPath(),this.context.translate(4,0),this.context.moveTo(0,0),this.context.lineTo(24,14),this.context.lineTo(0,c),this.context.fillStyle="#fff",this.context.fill()),this.context.restore()}on(t,r){this.canvas.addEventListener(t,r,!1)}off(t,r){this.canvas.removeEventListener(t,r,!1)}destroy(){this.playing=!1,this.canvas.parentNode&&this.container.removeChild(this.canvas)}},$y={width:960,height:700,margin:.04,minScale:.2,maxScale:2,controls:!0,controlsTutorial:!0,controlsLayout:"bottom-right",controlsBackArrows:"faded",progress:!0,slideNumber:!1,showSlideNumber:"all",hashOneBasedIndex:!1,hash:!1,respondToHashChanges:!0,jumpToSlide:!0,history:!1,keyboard:!0,keyboardCondition:null,disableLayout:!1,overview:!0,center:!0,touch:!0,loop:!1,rtl:!1,navigationMode:"default",shuffle:!1,fragments:!0,fragmentInURL:!0,embedded:!1,help:!0,pause:!0,showNotes:!1,showHiddenSlides:!1,autoPlayMedia:null,preloadIframes:null,autoAnimate:!0,autoAnimateMatcher:null,autoAnimateEasing:"ease",autoAnimateDuration:1,autoAnimateUnmatched:!0,autoAnimateStyles:["opacity","color","background-color","padding","font-size","line-height","letter-spacing","border-width","border-color","border-radius","outline","outline-offset"],autoSlide:0,autoSlideStoppable:!0,autoSlideMethod:null,defaultTiming:null,mouseWheel:!1,previewLinks:!1,postMessage:!0,postMessageEvents:!1,focusBodyOnPageVisibilityChange:!0,transition:"slide",transitionSpeed:"default",backgroundTransition:"fade",parallaxBackgroundImage:"",parallaxBackgroundSize:"",parallaxBackgroundRepeat:"",parallaxBackgroundPosition:"",parallaxBackgroundHorizontal:null,parallaxBackgroundVertical:null,view:null,scrollLayout:"full",scrollSnap:"mandatory",scrollProgress:"auto",scrollActivationWidth:435,pdfMaxPagesPerSlide:Number.POSITIVE_INFINITY,pdfSeparateFragments:!0,pdfPageHeightOffset:-1,viewDistance:3,mobileViewDistance:2,display:"block",hideInactiveCursor:!0,hideCursorTime:5e3,sortFragmentsOnSync:!0,dependencies:[],plugins:[]},gd="5.2.1";function yd(e,t){arguments.length<2&&(t=arguments[0],e=document.querySelector(".reveal"));let r={},a,i,c,d,u,f={},k=!1,w=!1,x={hasNavigatedHorizontally:!1,hasNavigatedVertically:!1},h=[],g=1,z={layout:"",overview:""},E={},F="idle",$=0,H=0,Y=-1,V=!1,G=new no(r),K=new so(r),re=new io(r),de=new co(r),le=new oo(r),P=new lo(r),se=new uo(r),be=new fo(r),ve=new ho(r),Ae=new po(r),qe=new mo(r),Ie=new go(r),wt=new yo(r),ge=new bo(r),vt=new ko(r),Xe=new _o(r),Lt=new vo(r),Yr=new wo(r),Ce=new xo(r);function yr(){k!==!1&&(w=!0,f.showHiddenSlides||pe(E.wrapper,'section[data-visibility="hidden"]').forEach(R=>{let I=R.parentNode;I.childElementCount===1&&/section/i.test(I.nodeName)?I.remove():R.remove()}),function(){E.slides.classList.add("no-transition"),va?E.wrapper.classList.add("no-hover"):E.wrapper.classList.remove("no-hover"),le.render(),K.render(),re.render(),Ie.render(),wt.render(),Ce.render(),E.pauseOverlay=((R,I,J,O="")=>{let ae=R.querySelectorAll("."+J);for(let Se=0;Se<ae.length;Se++){let Pe=ae[Se];if(Pe.parentNode===R)return Pe}let we=document.createElement(I);return we.className=J,we.innerHTML=O,R.appendChild(we),we})(E.wrapper,"div","pause-overlay",f.controls?'<button class="resume-button">Resume presentation</button>':null),E.statusElement=function(){let R=E.wrapper.querySelector(".aria-status");return R||(R=document.createElement("div"),R.style.position="absolute",R.style.height="1px",R.style.width="1px",R.style.overflow="hidden",R.style.clip="rect( 1px, 1px, 1px, 1px )",R.classList.add("aria-status"),R.setAttribute("aria-live","polite"),R.setAttribute("aria-atomic","true"),E.wrapper.appendChild(R)),R}(),E.wrapper.setAttribute("role","application")}(),f.postMessage&&window.addEventListener("message",he,!1),setInterval(()=>{(!P.isActive()&&E.wrapper.scrollTop!==0||E.wrapper.scrollLeft!==0)&&(E.wrapper.scrollTop=0,E.wrapper.scrollLeft=0)},1e3),document.addEventListener("fullscreenchange",At),document.addEventListener("webkitfullscreenchange",At),Ct().forEach(R=>{pe(R,"section").forEach((I,J)=>{J>0&&(I.classList.remove("present"),I.classList.remove("past"),I.classList.add("future"),I.setAttribute("aria-hidden","true"))})}),sn(),le.update(!0),function(){let R=f.view==="print",I=f.view==="scroll"||f.view==="reader";(R||I)&&(R?Qr():Yr.unbind(),E.viewport.classList.add("loading-scroll-mode"),R?document.readyState==="complete"?se.activate():window.addEventListener("load",()=>se.activate()):P.activate())}(),qe.readURL(),setTimeout(()=>{E.slides.classList.remove("no-transition"),E.wrapper.classList.add("ready"),xt({type:"ready",data:{indexh:a,indexv:i,currentSlide:d}})},1))}function za(R){E.statusElement.textContent=R}function Jr(R){let I="";if(R.nodeType===3)I+=R.textContent;else if(R.nodeType===1){let J=R.getAttribute("aria-hidden"),O=window.getComputedStyle(R).display==="none";J==="true"||O||Array.from(R.childNodes).forEach(ae=>{I+=Jr(ae)})}return I=I.trim(),I===""?"":I+" "}function sn(R){let I={...f};if(typeof R=="object"&&wa(f,R),r.isReady()===!1)return;let J=E.wrapper.querySelectorAll(Zr).length;E.wrapper.classList.remove(I.transition),E.wrapper.classList.add(f.transition),E.wrapper.setAttribute("data-transition-speed",f.transitionSpeed),E.wrapper.setAttribute("data-background-transition",f.backgroundTransition),E.viewport.style.setProperty("--slide-width",typeof f.width=="string"?f.width:f.width+"px"),E.viewport.style.setProperty("--slide-height",typeof f.height=="string"?f.height:f.height+"px"),f.shuffle&&Ta(),eo(E.wrapper,"embedded",f.embedded),eo(E.wrapper,"rtl",f.rtl),eo(E.wrapper,"center",f.center),f.pause===!1&&_r(),de.reset(),u&&(u.destroy(),u=null),J>1&&f.autoSlide&&f.autoSlideStoppable&&(u=new zo(E.wrapper,()=>Math.min(Math.max((Date.now()-Y)/$,0),1)),u.on("click",L),V=!1),f.navigationMode!=="default"?E.wrapper.setAttribute("data-navigation-mode",f.navigationMode):E.wrapper.removeAttribute("data-navigation-mode"),Ce.configure(f,I),Lt.configure(f,I),ge.configure(f,I),Ie.configure(f,I),wt.configure(f,I),Ae.configure(f,I),be.configure(f,I),K.configure(f,I),hn()}function on(){window.addEventListener("resize",xr,!1),f.touch&&Yr.bind(),f.keyboard&&Ae.bind(),f.progress&&wt.bind(),f.respondToHashChanges&&qe.bind(),Ie.bind(),Lt.bind(),E.slides.addEventListener("click",mt,!1),E.slides.addEventListener("transitionend",Ve,!1),E.pauseOverlay.addEventListener("click",_r,!1),f.focusBodyOnPageVisibilityChange&&document.addEventListener("visibilitychange",M,!1)}function Qr(){Yr.unbind(),Lt.unbind(),Ae.unbind(),Ie.unbind(),wt.unbind(),qe.unbind(),window.removeEventListener("resize",xr,!1),E.slides.removeEventListener("click",mt,!1),E.slides.removeEventListener("transitionend",Ve,!1),E.pauseOverlay.removeEventListener("click",_r,!1)}function cn(R,I,J){e.addEventListener(R,I,J)}function ln(R,I,J){e.removeEventListener(R,I,J)}function Aa(R){typeof R.layout=="string"&&(z.layout=R.layout),typeof R.overview=="string"&&(z.overview=R.overview),z.layout?Ir(E.slides,z.layout+" "+z.overview):Ir(E.slides,z.overview)}function xt({target:R=E.wrapper,type:I,data:J,bubbles:O=!0}){let ae=document.createEvent("HTMLEvents",1,2);return ae.initEvent(I,O,!0),wa(ae,J),R.dispatchEvent(ae),R===E.wrapper&&un(I),ae}function Sa(R){xt({type:"slidechanged",data:{indexh:a,indexv:i,previousSlide:c,currentSlide:d,origin:R}})}function un(R,I){if(f.postMessageEvents&&window.parent!==window.self){let J={namespace:"reveal",eventName:R,state:Or()};wa(J,I),window.parent.postMessage(JSON.stringify(J),"*")}}function br(){if(E.wrapper&&!se.isActive()){let R=E.viewport.offsetWidth,I=E.viewport.offsetHeight;if(!f.disableLayout){va&&!f.embedded&&document.documentElement.style.setProperty("--vh",.01*window.innerHeight+"px");let J=P.isActive()?kr(R,I):kr(),O=g;ur(f.width,f.height),E.slides.style.width=J.width+"px",E.slides.style.height=J.height+"px",g=Math.min(J.presentationWidth/J.width,J.presentationHeight/J.height),g=Math.max(g,f.minScale),g=Math.min(g,f.maxScale),g===1||P.isActive()?(E.slides.style.zoom="",E.slides.style.left="",E.slides.style.top="",E.slides.style.bottom="",E.slides.style.right="",Aa({layout:""})):(E.slides.style.zoom="",E.slides.style.left="50%",E.slides.style.top="50%",E.slides.style.bottom="auto",E.slides.style.right="auto",Aa({layout:"translate(-50%, -50%) scale("+g+")"}));let ae=Array.from(E.wrapper.querySelectorAll(Zr));for(let we=0,Se=ae.length;we<Se;we++){let Pe=ae[we];Pe.style.display!=="none"&&(f.center||Pe.classList.contains("center")?Pe.classList.contains("stack")?Pe.style.top=0:Pe.style.top=Math.max((J.height-Pe.scrollHeight)/2,0)+"px":Pe.style.top="")}O!==g&&xt({type:"resize",data:{oldScale:O,scale:g,size:J}})}(function(){if(E.wrapper&&!f.disableLayout&&!se.isActive()&&typeof f.scrollActivationWidth=="number"&&f.view!=="scroll"){let J=kr();J.presentationWidth>0&&J.presentationWidth<=f.scrollActivationWidth?P.isActive()||(le.create(),P.activate()):P.isActive()&&P.deactivate()}})(),E.viewport.style.setProperty("--slide-scale",g),E.viewport.style.setProperty("--viewport-width",R+"px"),E.viewport.style.setProperty("--viewport-height",I+"px"),P.layout(),wt.update(),le.updateParallax(),ve.isActive()&&ve.update()}}function ur(R,I){pe(E.slides,"section > .stretch, section > .r-stretch").forEach(J=>{let O=((ae,we=0)=>{if(ae){let Se,Pe=ae.style.height;return ae.style.height="0px",ae.parentNode.style.height="auto",Se=we-ae.parentNode.offsetHeight,ae.style.height=Pe+"px",ae.parentNode.style.removeProperty("height"),Se}return we})(J,I);if(/(img|video)/gi.test(J.nodeName)){let ae=J.naturalWidth||J.videoWidth,we=J.naturalHeight||J.videoHeight,Se=Math.min(R/ae,O/we);J.style.width=ae*Se+"px",J.style.height=we*Se+"px"}else J.style.width=R+"px",J.style.height=O+"px"})}function kr(R,I){let J=f.width,O=f.height;f.disableLayout&&(J=E.slides.offsetWidth,O=E.slides.offsetHeight);let ae={width:J,height:O,presentationWidth:R||E.wrapper.offsetWidth,presentationHeight:I||E.wrapper.offsetHeight};return ae.presentationWidth-=ae.presentationWidth*f.margin,ae.presentationHeight-=ae.presentationHeight*f.margin,typeof ae.width=="string"&&/%$/.test(ae.width)&&(ae.width=parseInt(ae.width,10)/100*ae.presentationWidth),typeof ae.height=="string"&&/%$/.test(ae.height)&&(ae.height=parseInt(ae.height,10)/100*ae.presentationHeight),ae}function dn(R,I){typeof R=="object"&&typeof R.setAttribute=="function"&&R.setAttribute("data-previous-indexv",I||0)}function Ea(R){if(typeof R=="object"&&typeof R.setAttribute=="function"&&R.classList.contains("stack")){let I=R.hasAttribute("data-start-indexv")?"data-start-indexv":"data-previous-indexv";return parseInt(R.getAttribute(I)||0,10)}return 0}function Re(R=d){return R&&R.parentNode&&!!R.parentNode.nodeName.match(/section/i)}function te(){return!(!d||!Re(d))&&!d.nextElementSibling}function Ot(){return a===0&&i===0}function Nr(){return!!d&&!d.nextElementSibling&&(!Re(d)||!d.parentNode.nextElementSibling)}function Ca(){if(f.pause){let R=E.wrapper.classList.contains("paused");m(),E.wrapper.classList.add("paused"),R===!1&&xt({type:"paused"})}}function _r(){let R=E.wrapper.classList.contains("paused");E.wrapper.classList.remove("paused"),Fe(),R&&xt({type:"resumed"})}function fn(R){typeof R=="boolean"?R?Ca():_r():wr()?_r():Ca()}function wr(){return E.wrapper.classList.contains("paused")}function ft(R,I,J,O){if(xt({type:"beforeslidechange",data:{indexh:R===void 0?a:R,indexv:I===void 0?i:I,origin:O}}).defaultPrevented)return;c=d;let ae=E.wrapper.querySelectorAll(Pr);if(P.isActive()){let gt=P.getSlideByIndices(R,I);return void(gt&&P.scrollToSlide(gt))}if(ae.length===0)return;I!==void 0||ve.isActive()||(I=Ea(ae[R])),c&&c.parentNode&&c.parentNode.classList.contains("stack")&&dn(c.parentNode,i);let we=h.concat();h.length=0;let Se=a||0,Pe=i||0;a=pt(Pr,R===void 0?a:R),i=pt(cd,I===void 0?i:I);let Ut=a!==Se||i!==Pe;Ut||(c=null);let bt=ae[a],ct=bt.querySelectorAll("section");e.classList.toggle("is-vertical-slide",ct.length>1),d=ct[i]||bt;let $e=!1;Ut&&c&&d&&!ve.isActive()&&(F="running",$e=vr(c,d,Se,Pe),$e&&E.slides.classList.add("disable-slide-transitions")),jr(),br(),ve.isActive()&&ve.update(),J!==void 0&&be.goto(J),c&&c!==d&&(c.classList.remove("present"),c.setAttribute("aria-hidden","true"),Ot()&&setTimeout(()=>{pe(E.wrapper,Pr+".stack").forEach(gt=>{dn(gt,0)})},0));e:for(let gt=0,qa=h.length;gt<qa;gt++){for(let zr=0;zr<we.length;zr++)if(we[zr]===h[gt]){we.splice(zr,1);continue e}E.viewport.classList.add(h[gt]),xt({type:h[gt]})}for(;we.length;)E.viewport.classList.remove(we.pop());Ut&&Sa(O),!Ut&&c||(G.stopEmbeddedContent(c),G.startEmbeddedContent(d)),requestAnimationFrame(()=>{za(Jr(d))}),wt.update(),Ie.update(),Ce.update(),le.update(),le.updateParallax(),K.update(),be.update(),qe.writeURL(),Fe(),$e&&(setTimeout(()=>{E.slides.classList.remove("disable-slide-transitions")},0),f.autoAnimate&&de.run(c,d))}function vr(R,I,J,O){return R.hasAttribute("data-auto-animate")&&I.hasAttribute("data-auto-animate")&&R.getAttribute("data-auto-animate-id")===I.getAttribute("data-auto-animate-id")&&!(a>J||i>O?I:R).hasAttribute("data-auto-animate-restart")}function hn(){Qr(),on(),br(),$=f.autoSlide,Fe(),le.create(),qe.writeURL(),f.sortFragmentsOnSync===!0&&be.sortAll(),Ie.update(),wt.update(),jr(),Ce.update(),Ce.updateVisibility(),Xe.update(),le.update(!0),K.update(),G.formatEmbeddedContent(),f.autoPlayMedia===!1?G.stopEmbeddedContent(d,{unloadIframes:!1}):G.startEmbeddedContent(d),ve.isActive()&&ve.layout()}function Ta(R=Ct()){R.forEach((I,J)=>{let O=R[Math.floor(Math.random()*R.length)];O.parentNode===I.parentNode&&I.parentNode.insertBefore(I,O);let ae=I.querySelectorAll("section");ae.length&&Ta(ae)})}function pt(R,I){let J=pe(E.wrapper,R),O=J.length,ae=P.isActive()||se.isActive(),we=!1,Se=!1;if(O){f.loop&&(I>=O&&(we=!0),(I%=O)<0&&(I=O+I,Se=!0)),I=Math.max(Math.min(I,O-1),0);for(let ct=0;ct<O;ct++){let $e=J[ct],gt=f.rtl&&!Re($e);$e.classList.remove("past"),$e.classList.remove("present"),$e.classList.remove("future"),$e.setAttribute("hidden",""),$e.setAttribute("aria-hidden","true"),$e.querySelector("section")&&$e.classList.add("stack"),ae?$e.classList.add("present"):ct<I?($e.classList.add(gt?"future":"past"),f.fragments&&Ft($e)):ct>I?($e.classList.add(gt?"past":"future"),f.fragments&&Ht($e)):ct===I&&f.fragments&&(we?Ht($e):Se&&Ft($e))}let Pe=J[I],Ut=Pe.classList.contains("present");Pe.classList.add("present"),Pe.removeAttribute("hidden"),Pe.removeAttribute("aria-hidden"),Ut||xt({target:Pe,type:"visible",bubbles:!1});let bt=Pe.getAttribute("data-state");bt&&(h=h.concat(bt.split(" ")))}else I=0;return I}function Ft(R){pe(R,".fragment").forEach(I=>{I.classList.add("visible"),I.classList.remove("current-fragment")})}function Ht(R){pe(R,".fragment.visible").forEach(I=>{I.classList.remove("visible","current-fragment")})}function jr(){let R,I,J=Ct(),O=J.length;if(O&&a!==void 0){let ae=ve.isActive()?10:f.viewDistance;va&&(ae=ve.isActive()?6:f.mobileViewDistance),se.isActive()&&(ae=Number.MAX_VALUE);for(let we=0;we<O;we++){let Se=J[we],Pe=pe(Se,"section"),Ut=Pe.length;if(R=Math.abs((a||0)-we)||0,f.loop&&(R=Math.abs(((a||0)-we)%(O-ae))||0),R<ae?G.load(Se):G.unload(Se),Ut){let bt=Ea(Se);for(let ct=0;ct<Ut;ct++){let $e=Pe[ct];I=Math.abs(we===(a||0)?(i||0)-ct:ct-bt),R+I<ae?G.load($e):G.unload($e)}}}ea()?E.wrapper.classList.add("has-vertical-slides"):E.wrapper.classList.remove("has-vertical-slides"),gn()?E.wrapper.classList.add("has-horizontal-slides"):E.wrapper.classList.remove("has-horizontal-slides")}}function $t({includeFragments:R=!1}={}){let I=E.wrapper.querySelectorAll(Pr),J=E.wrapper.querySelectorAll(cd),O={left:a>0,right:a<I.length-1,up:i>0,down:i<J.length-1};if(f.loop&&(I.length>1&&(O.left=!0,O.right=!0),J.length>1&&(O.up=!0,O.down=!0)),I.length>1&&f.navigationMode==="linear"&&(O.right=O.right||O.down,O.left=O.left||O.up),R===!0){let ae=be.availableRoutes();O.left=O.left||ae.prev,O.up=O.up||ae.prev,O.down=O.down||ae.next,O.right=O.right||ae.next}if(f.rtl){let ae=O.left;O.left=O.right,O.right=ae}return O}function pn(R=d){let I=Ct(),J=0;e:for(let O=0;O<I.length;O++){let ae=I[O],we=ae.querySelectorAll("section");for(let Se=0;Se<we.length;Se++){if(we[Se]===R)break e;we[Se].dataset.visibility!=="uncounted"&&J++}if(ae===R)break;ae.classList.contains("stack")===!1&&ae.dataset.visibility!=="uncounted"&&J++}return J}function mn(R){let I,J=a,O=i;if(R)if(P.isActive())J=parseInt(R.getAttribute("data-index-h"),10),R.getAttribute("data-index-v")&&(O=parseInt(R.getAttribute("data-index-v"),10));else{let ae=Re(R),we=ae?R.parentNode:R,Se=Ct();J=Math.max(Se.indexOf(we),0),O=void 0,ae&&(O=Math.max(pe(R.parentNode,"section").indexOf(R),0))}if(!R&&d&&d.querySelectorAll(".fragment").length>0){let ae=d.querySelector(".current-fragment");I=ae&&ae.hasAttribute("data-fragment-index")?parseInt(ae.getAttribute("data-fragment-index"),10):d.querySelectorAll(".fragment.visible").length-1}return{h:J,v:O,f:I}}function zt(){return pe(E.wrapper,Zr+':not(.stack):not([data-visibility="uncounted"])')}function Ct(){return pe(E.wrapper,Pr)}function Da(){return pe(E.wrapper,".slides>section>section")}function gn(){return Ct().length>1}function ea(){return Da().length>1}function ta(){return zt().length}function yn(R,I){let J=Ct()[R],O=J&&J.querySelectorAll("section");return O&&O.length&&typeof I=="number"?O?O[I]:void 0:J}function Or(){let R=mn();return{indexh:R.h,indexv:R.v,indexf:R.f,paused:wr(),overview:ve.isActive(),...Xe.getState()}}function Fe(){if(m(),d&&f.autoSlide!==!1){let R=d.querySelector(".current-fragment[data-autoslide]"),I=R?R.getAttribute("data-autoslide"):null,J=d.parentNode?d.parentNode.getAttribute("data-autoslide"):null,O=d.getAttribute("data-autoslide");I?$=parseInt(I,10):O?$=parseInt(O,10):J?$=parseInt(J,10):($=f.autoSlide,d.querySelectorAll(".fragment").length===0&&pe(d,"video, audio").forEach(ae=>{ae.hasAttribute("data-autoplay")&&$&&1e3*ae.duration/ae.playbackRate>$&&($=1e3*ae.duration/ae.playbackRate+1e3)})),!$||V||wr()||ve.isActive()||Nr()&&!be.availableRoutes().next&&f.loop!==!0||(H=setTimeout(()=>{typeof f.autoSlideMethod=="function"?f.autoSlideMethod():Kt(),Fe()},$),Y=Date.now()),u&&u.setPlaying(H!==-1)}}function m(){clearTimeout(H),H=-1}function y(){$&&!V&&(V=!0,xt({type:"autoslidepaused"}),clearTimeout(H),u&&u.setPlaying(!1))}function Z(){$&&V&&(V=!1,xt({type:"autoslideresumed"}),Fe())}function v({skipFragments:R=!1}={}){if(x.hasNavigatedHorizontally=!0,P.isActive())return P.prev();f.rtl?(ve.isActive()||R||be.next()===!1)&&$t().left&&ft(a+1,f.navigationMode==="grid"?i:void 0):(ve.isActive()||R||be.prev()===!1)&&$t().left&&ft(a-1,f.navigationMode==="grid"?i:void 0)}function T({skipFragments:R=!1}={}){if(x.hasNavigatedHorizontally=!0,P.isActive())return P.next();f.rtl?(ve.isActive()||R||be.prev()===!1)&&$t().right&&ft(a-1,f.navigationMode==="grid"?i:void 0):(ve.isActive()||R||be.next()===!1)&&$t().right&&ft(a+1,f.navigationMode==="grid"?i:void 0)}function Be({skipFragments:R=!1}={}){if(P.isActive())return P.prev();(ve.isActive()||R||be.prev()===!1)&&$t().up&&ft(a,i-1)}function ie({skipFragments:R=!1}={}){if(x.hasNavigatedVertically=!0,P.isActive())return P.next();(ve.isActive()||R||be.next()===!1)&&$t().down&&ft(a,i+1)}function ot({skipFragments:R=!1}={}){if(P.isActive())return P.prev();if(R||be.prev()===!1)if($t().up)Be({skipFragments:R});else{let I;if(I=f.rtl?pe(E.wrapper,Pr+".future").pop():pe(E.wrapper,Pr+".past").pop(),I&&I.classList.contains("stack")){let J=I.querySelectorAll("section").length-1||void 0;ft(a-1,J)}else f.rtl?T({skipFragments:R}):v({skipFragments:R})}}function Kt({skipFragments:R=!1}={}){if(x.hasNavigatedHorizontally=!0,x.hasNavigatedVertically=!0,P.isActive())return P.next();if(R||be.next()===!1){let I=$t();I.down&&I.right&&f.loop&&te()&&(I.down=!1),I.down?ie({skipFragments:R}):f.rtl?v({skipFragments:R}):T({skipFragments:R})}}function he(R){let I=R.data;if(typeof I=="string"&&I.charAt(0)==="{"&&I.charAt(I.length-1)==="}"&&(I=JSON.parse(I),I.method&&typeof r[I.method]=="function"))if(Hy.test(I.method)===!1){let J=r[I.method].apply(r,I.args);un("callback",{method:I.method,result:J})}else console.warn('reveal.js: "'+I.method+'" is is blacklisted from the postMessage API')}function Ve(R){F==="running"&&/section/gi.test(R.target.nodeName)&&(F="idle",xt({type:"slidetransitionend",data:{indexh:a,indexv:i,previousSlide:c,currentSlide:d}}))}function mt(R){let I=yt(R.target,'a[href^="#"]');if(I){let J=I.getAttribute("href"),O=qe.getIndicesFromHash(J);O&&(r.slide(O.h,O.v,O.f),R.preventDefault())}}function xr(R){br()}function M(R){document.hidden===!1&&document.activeElement!==document.body&&(typeof document.activeElement.blur=="function"&&document.activeElement.blur(),document.body.focus())}function At(R){(document.fullscreenElement||document.webkitFullscreenElement)===E.wrapper&&(R.stopImmediatePropagation(),setTimeout(()=>{r.layout(),r.focus.focus()},1))}function L(R){Nr()&&f.loop===!1?(ft(0,0),Z()):V?Z():y()}let Ma={VERSION:gd,initialize:function(R){if(!e)throw'Unable to find presentation root (<div class="reveal">).';if(k)throw"Reveal.js has already been initialized.";if(k=!0,E.wrapper=e,E.slides=e.querySelector(".slides"),!E.slides)throw'Unable to find slides container (<div class="slides">).';return f={...$y,...f,...t,...R,...od()},/print-pdf/gi.test(window.location.search)&&(f.view="print"),function(){f.embedded===!0?E.viewport=yt(e,".reveal-viewport")||e:(E.viewport=document.body,document.documentElement.classList.add("reveal-full-page")),E.viewport.classList.add("reveal-viewport")}(),window.addEventListener("load",br,!1),vt.load(f.plugins,f.dependencies).then(yr),new Promise(I=>r.on("ready",I))},configure:sn,destroy:function(){k=!1,w!==!1&&(Qr(),m(),Ce.destroy(),Lt.destroy(),Xe.destroy(),vt.destroy(),ge.destroy(),Ie.destroy(),wt.destroy(),le.destroy(),K.destroy(),re.destroy(),document.removeEventListener("fullscreenchange",At),document.removeEventListener("webkitfullscreenchange",At),document.removeEventListener("visibilitychange",M,!1),window.removeEventListener("message",he,!1),window.removeEventListener("load",br,!1),E.pauseOverlay&&E.pauseOverlay.remove(),E.statusElement&&E.statusElement.remove(),document.documentElement.classList.remove("reveal-full-page"),E.wrapper.classList.remove("ready","center","has-horizontal-slides","has-vertical-slides"),E.wrapper.removeAttribute("data-transition-speed"),E.wrapper.removeAttribute("data-background-transition"),E.viewport.classList.remove("reveal-viewport"),E.viewport.style.removeProperty("--slide-width"),E.viewport.style.removeProperty("--slide-height"),E.slides.style.removeProperty("width"),E.slides.style.removeProperty("height"),E.slides.style.removeProperty("zoom"),E.slides.style.removeProperty("left"),E.slides.style.removeProperty("top"),E.slides.style.removeProperty("bottom"),E.slides.style.removeProperty("right"),E.slides.style.removeProperty("transform"),Array.from(E.wrapper.querySelectorAll(Zr)).forEach(R=>{R.style.removeProperty("display"),R.style.removeProperty("top"),R.removeAttribute("hidden"),R.removeAttribute("aria-hidden")}))},sync:hn,syncSlide:function(R=d){le.sync(R),be.sync(R),G.load(R),le.update(),Ce.update()},syncFragments:be.sync.bind(be),slide:ft,left:v,right:T,up:Be,down:ie,prev:ot,next:Kt,navigateLeft:v,navigateRight:T,navigateUp:Be,navigateDown:ie,navigatePrev:ot,navigateNext:Kt,navigateFragment:be.goto.bind(be),prevFragment:be.prev.bind(be),nextFragment:be.next.bind(be),on:cn,off:ln,addEventListener:cn,removeEventListener:ln,layout:br,shuffle:Ta,availableRoutes:$t,availableFragments:be.availableRoutes.bind(be),toggleHelp:Xe.toggleHelp.bind(Xe),toggleOverview:ve.toggle.bind(ve),toggleScrollView:P.toggle.bind(P),togglePause:fn,toggleAutoSlide:function(R){typeof R=="boolean"?R?Z():y():V?Z():y()},toggleJumpToSlide:function(R){typeof R=="boolean"?R?re.show():re.hide():re.isVisible()?re.hide():re.show()},isFirstSlide:Ot,isLastSlide:Nr,isLastVerticalSlide:te,isVerticalSlide:Re,isVerticalStack:function(R=d){return R.classList.contains(".stack")||R.querySelector("section")!==null},isPaused:wr,isAutoSliding:function(){return!(!$||V)},isSpeakerNotes:Ce.isSpeakerNotesWindow.bind(Ce),isOverview:ve.isActive.bind(ve),isFocused:Lt.isFocused.bind(Lt),isOverlayOpen:Xe.isOpen.bind(Xe),isScrollView:P.isActive.bind(P),isPrintView:se.isActive.bind(se),isReady:()=>w,loadSlide:G.load.bind(G),unloadSlide:G.unload.bind(G),startEmbeddedContent:()=>G.startEmbeddedContent(d),stopEmbeddedContent:()=>G.stopEmbeddedContent(d,{unloadIframes:!1}),previewIframe:Xe.previewIframe.bind(Xe),previewImage:Xe.previewImage.bind(Xe),previewVideo:Xe.previewVideo.bind(Xe),showPreview:Xe.previewIframe.bind(Xe),hidePreview:Xe.close.bind(Xe),addEventListeners:on,removeEventListeners:Qr,dispatchEvent:xt,getState:Or,setState:function(R){if(typeof R=="object"){ft(_a(R.indexh),_a(R.indexv),_a(R.indexf));let I=_a(R.paused),J=_a(R.overview);typeof I=="boolean"&&I!==wr()&&fn(I),typeof J=="boolean"&&J!==ve.isActive()&&ve.toggle(J),Xe.setState(R)}},getProgress:function(){let R=ta(),I=pn();if(d){let J=d.querySelectorAll(".fragment");J.length>0&&(I+=d.querySelectorAll(".fragment.visible").length/J.length*.9)}return Math.min(I/(R-1),1)},getIndices:mn,getSlidesAttributes:function(){return zt().map(R=>{let I={};for(let J=0;J<R.attributes.length;J++){let O=R.attributes[J];I[O.name]=O.value}return I})},getSlidePastCount:pn,getTotalSlides:ta,getSlide:yn,getPreviousSlide:()=>c,getCurrentSlide:()=>d,getSlideBackground:function(R,I){let J=typeof R=="number"?yn(R,I):R;if(J)return J.slideBackgroundElement},getSlideNotes:Ce.getSlideNotes.bind(Ce),getSlides:zt,getHorizontalSlides:Ct,getVerticalSlides:Da,hasHorizontalSlides:gn,hasVerticalSlides:ea,hasNavigatedHorizontally:()=>x.hasNavigatedHorizontally,hasNavigatedVertically:()=>x.hasNavigatedVertically,shouldAutoAnimateBetween:vr,addKeyBinding:Ae.addKeyBinding.bind(Ae),removeKeyBinding:Ae.removeKeyBinding.bind(Ae),triggerKey:Ae.triggerKey.bind(Ae),registerKeyboardShortcut:Ae.registerKeyboardShortcut.bind(Ae),getComputedSlideSize:kr,setCurrentScrollPage:function(R,I,J){let O=a||0;a=I,i=J;let ae=d!==R;c=d,d=R,d&&c&&f.autoAnimate&&vr(c,d,O,i)&&de.run(c,d),ae&&(c&&(G.stopEmbeddedContent(c),G.stopEmbeddedContent(c.slideBackgroundElement)),G.startEmbeddedContent(d),G.startEmbeddedContent(d.slideBackgroundElement)),requestAnimationFrame(()=>{za(Jr(d))}),Sa()},getScale:()=>g,getConfig:()=>f,getQueryHash:od,getSlidePath:qe.getHash.bind(qe),getRevealElement:()=>e,getSlidesElement:()=>E.slides,getViewportElement:()=>E.viewport,getBackgroundsElement:()=>le.element,registerPlugin:vt.registerPlugin.bind(vt),hasPlugin:vt.hasPlugin.bind(vt),getPlugin:vt.getPlugin.bind(vt),getPlugins:vt.getRegisteredPlugins.bind(vt)};return wa(r,{...Ma,announceStatus:za,getStatusText:Jr,focus:Lt,scroll:P,progress:wt,controls:Ie,location:qe,overview:ve,keyboard:Ae,fragments:be,backgrounds:le,slideContent:G,slideNumber:K,onUserInput:function(R){f.autoSlideStoppable&&y()},closeOverlay:Xe.close.bind(Xe),updateSlidesVisibility:jr,layoutSlideContents:ur,transformSlides:Aa,cueAutoSlide:Fe,cancelAutoSlide:m}),Ma}var Oe=yd,fd=[];Oe.initialize=e=>(Object.assign(Oe,new yd(document.querySelector(".reveal"),e)),fd.map(t=>t(Oe)),Oe.initialize()),["configure","on","off","addEventListener","removeEventListener","registerPlugin"].forEach(e=>{Oe[e]=(...t)=>{fd.push(r=>r[e].call(null,...t))}}),Oe.isReady=()=>!1,Oe.VERSION=gd;var Uy="0.6.1";function Ao(e){return new Promise((t,r)=>{if(!e||document.querySelector(`script[data-lib="${e}"]`))return t();let a=document.createElement("script");a.src=e,a.async=!0,a.setAttribute("data-lib",e),a.onload=()=>t(),a.onerror=()=>r(new Error("failed to load "+e)),document.head.appendChild(a)})}function xd(e){let t=e&&e.enhancers||{},r=[];return t.mermaidJs&&document.querySelector(".mermaid")&&r.push(Ao(t.mermaidJs)),t.smilesJs&&document.querySelector("canvas[data-smiles]")&&r.push(Ao(t.smilesJs)),t.chartJs&&document.querySelector("canvas.orz-chart")&&r.push(Ao(t.chartJs)),Promise.all(r).catch(()=>{})}function Vy(){let e=window.__ORZ_SLIDES__||{},t=document.documentElement.getAttribute("data-theme")||e.defaultTheme,r=(e.themes||[]).find(a=>a.id===t);return!!(r&&r.scheme==="dark")}function zd(){let e=window;try{if(e.mermaid){e.mermaid.initialize({startOnLoad:!1});let t=e.mermaid.run({querySelector:".mermaid:not([data-processed])"});t&&t.then&&t.then(()=>bs()).catch(()=>{})}}catch{}try{if(e.SmilesDrawer){let t=Vy()?"dark":"light";document.querySelectorAll("canvas[data-smiles]").forEach(r=>{let a=r;if(a.__scheme===t||a.__pending===t)return;a.__pending=t,a.__ow===void 0&&(a.__ow=r.width,a.__oh=r.height),r.width=a.__ow,r.height=a.__oh;let i=new e.SmilesDrawer.Drawer({width:a.__ow,height:a.__oh});e.SmilesDrawer.parse(r.getAttribute("data-smiles"),c=>{try{i.draw(c,r,t,!1),a.__scheme=t}catch{}a.__pending=null,bs()})})}}catch{}try{e.Chart&&(Oe.getCurrentSlide&&Oe.getCurrentSlide()||document).querySelectorAll("canvas.orz-chart[data-chart]").forEach(r=>{if(!e.Chart.getChart(r))try{let a=JSON.parse(r.getAttribute("data-chart")||"{}");a.options=a.options||{},a.options.responsive=!1,a.options.maintainAspectRatio=!1,a.options.animation=!1,new e.Chart(r,a)}catch{}})}catch{}Wy(),Gy()}function Gy(){location.protocol==="file:"&&document.querySelectorAll(".youtube-embed").forEach(e=>{if(e.__ytFacade)return;let t=e.querySelector("iframe"),a=(t&&t.getAttribute("src")||"").match(/embed\/([\w-]{6,})/);if(!t||!a)return;e.__ytFacade=!0;let i=a[1],c=document.createElement("a");c.href="https://www.youtube.com/watch?v="+i,c.target="_blank",c.rel="noopener noreferrer",c.className="youtube-facade",c.setAttribute("aria-label","Play video on YouTube"),c.style.backgroundImage="url('https://i.ytimg.com/vi/"+i+"/hqdefault.jpg')",c.innerHTML='<span class="youtube-facade-play" aria-hidden="true"></span>',t.replaceWith(c)})}function Wy(){document.querySelectorAll(".tabs:not([data-js])").forEach(e=>{let t=Array.from(e.querySelectorAll(":scope > .tab"));if(!t.length)return;let r=document.createElement("div");r.className="tabs-bar",t.forEach((a,i)=>{let c=document.createElement("button");c.className="tabs-bar-btn"+(i===0?" active":""),c.textContent=a.getAttribute("data-label")||"Tab "+(i+1),c.addEventListener("click",()=>{r.querySelectorAll(".tabs-bar-btn").forEach(d=>d.classList.remove("active")),t.forEach(d=>d.classList.remove("active")),c.classList.add("active"),a.classList.add("active")}),r.appendChild(c),i===0&&a.classList.add("active")}),e.insertBefore(r,t[0]),e.setAttribute("data-js","1")})}var bd=.6;function Xy(e){e.style.removeProperty("--region-scale");let t=e.firstElementChild;if(!t)return;let r=1;for(let a=0;a<12&&!(t.scrollHeight<=e.clientHeight+1&&t.scrollWidth<=e.clientWidth+1);a++){if(r-=.07,r<bd){r=bd,e.style.setProperty("--region-scale",String(r));break}e.style.setProperty("--region-scale",String(r))}e.setAttribute("data-scale",r.toFixed(2))}function kd(e,t){let r=e.clientWidth,a=t.closest(".markdown-body");if(!a)return{w:r,h:e.clientHeight};let i=t;for(;i.parentElement&&i.parentElement!==a;)i=i.parentElement;let c=0;return Array.prototype.forEach.call(a.children,d=>{d!==i&&(c+=d.offsetHeight)}),{w:r,h:Math.max(40,e.clientHeight-c-6)}}function Zy(e){if(!e.clientWidth||!e.clientHeight)return;e.querySelectorAll(".mermaid svg").forEach(r=>{let a=kd(e,r),i=r.viewBox&&r.viewBox.baseVal,c=i&&i.height?i.width/i.height:1,d=a.w,u=d/c;u>a.h&&(u=a.h,d=u*c),r.style.maxWidth="none",r.style.width=Math.floor(d)+"px",r.style.height=Math.floor(u)+"px"});let t=window.Chart;t&&t.getChart&&e.querySelectorAll("canvas.orz-chart").forEach(r=>{let a=t.getChart(r);if(a){let i=kd(e,r);try{a.resize(i.w,i.h)}catch{}}})}function bs(){let e=Oe.getCurrentSlide&&Oe.getCurrentSlide()||null;!e||e.getAttribute("data-fit")==="off"||e.querySelectorAll(".orz-region").forEach(t=>{Xy(t),Zy(t)})}function _d(){let e=document.getElementById("orz-deck");return(e&&e.textContent||"").replace(/^\n/,"").replace(/\n\s*$/,"")}function Ad(e){let t=document.querySelector(".reveal .slides");t&&(t.innerHTML=Qi(gs(e),Eo.md)),Sd()}var rn=()=>{if(zd(),Sd())try{Oe.sync()}catch{}bs()};function Ky(e){Ad(e);try{Oe.sync()}catch{}xd(window.__ORZ_SLIDES__||{}).then(rn)}function Yy(){let e=window.__ORZ_SLIDES__||{},t=gs(_d());Ad(_d());let r=(t.config.ratio||e.ratio||"16:9").split(":").map(Number),a=960,i=Math.round(a*(r[1]||9)/(r[0]||16));ks=a,_s=i,Oe.initialize({width:a,height:i,margin:.03,minScale:.2,maxScale:4,hash:!0,controls:!0,progress:!0,slideNumber:"c/t"}),window.orzslides.reveal=Oe;try{Oe.addKeyBinding({keyCode:83,key:"S",description:"Speaker view"},qd),Oe.addKeyBinding({keyCode:84,key:"T",description:"Toggle timer/clock"},Md)}catch{}Oe.on("slidechanged",nn),Oe.on("fragmentshown",nn),Oe.on("fragmenthidden",nn);let c=()=>{try{Oe.layout()}catch{}};xd(e).then(()=>{c(),rn()}),Oe.on("slidechanged",()=>{zd(),[80,500,1400].forEach(d=>setTimeout(rn,d))}),[200,700,1500,2600].forEach(d=>setTimeout(()=>{c(),rn()},d)),window.addEventListener("resize",()=>setTimeout(()=>{c(),bs()},60)),document.addEventListener("click",d=>{let u=d.target,f=u&&u.closest?u.closest(".qrcode"):null;if(!f)return;let k=f.querySelector("svg");if(!k)return;d.stopPropagation(),d.preventDefault();let w=document.createElement("div");w.className="orz-qr-overlay",w.appendChild(k.cloneNode(!0));let x=()=>{w.remove(),document.removeEventListener("keydown",h,!0)},h=g=>{g.key==="Escape"&&(g.stopPropagation(),g.preventDefault(),x())};w.addEventListener("click",x),document.addEventListener("keydown",h,!0),document.body.appendChild(w)},!0)}function Jy(e){let t=[];return Array.prototype.forEach.call(e.children,r=>{let a=r.tagName.toLowerCase();a==="ul"||a==="ol"?Array.prototype.forEach.call(r.children,i=>{i.tagName.toLowerCase()==="li"&&t.push(i)}):t.push(r)}),t}function Sd(){let e=!1;return document.querySelectorAll("section[data-step] .orz-region .markdown-body").forEach(t=>{Jy(t).forEach(r=>{r.classList.contains("fragment")||(r.classList.add("fragment"),e=!0)})}),e}var ks=960,_s=540,an=0,gr=null,lr=null,Kr={startMs:0,accumMs:0,running:!1,start(){this.running||(this.startMs=Date.now(),this.running=!0)},pause(){this.running&&(this.accumMs+=Date.now()-this.startMs,this.running=!1)},toggle(){this.running?this.pause():this.start()},reset(){this.accumMs=0,this.startMs=Date.now()},elapsed(){return this.accumMs+(this.running?Date.now()-this.startMs:0)}};function xa(e){return e<10?"0"+e:""+e}function Ed(e){let t=Math.floor(e/1e3),r=Math.floor(t/3600),a=Math.floor(t%3600/60),i=t%60;return r>0?r+":"+xa(a)+":"+xa(i):a+":"+xa(i)}function Cd(){let e=new Date;return xa(e.getHours())+":"+xa(e.getMinutes())+":"+xa(e.getSeconds())}function Td(){an||(an=window.setInterval(So,1e3))}function So(){let e=!!(lr&&!lr.closed);if(!gr&&!e){an&&(clearInterval(an),an=0);return}if(Dd(),e){let t=lr.document,r=(a,i)=>{let c=t.getElementById(a);c&&(c.textContent=i)};r("sv-clock",Cd()),r("sv-timer",Ed(Kr.elapsed())),r("sv-ttoggle",Kr.running?"Pause":"Start")}}function Dd(){gr&&(gr.innerHTML='<span class="orz-timer-clock">'+Cd()+'</span><span class="orz-timer-elapsed">'+Ed(Kr.elapsed())+"</span>")}function Md(){if(gr){gr.remove(),gr=null;return}Kr.start(),gr=document.createElement("div"),gr.className="orz-timer",document.body.appendChild(gr),Dd(),Td()}function Qy(){return Array.prototype.slice.call(document.querySelectorAll(".reveal > .slides > section"))}function wd(e){if(!e)return'<div class="sv-end">\u2014 End \u2014</div>';let t=e.cloneNode(!0);return t.querySelectorAll("aside.notes").forEach(r=>r.remove()),t.classList.add("present"),t.removeAttribute("hidden"),t.style.cssText="",'<div class="reveal"><div class="slides">'+t.outerHTML+"</div></div>"}function vd(e){let t=e.querySelector(".slides");if(!t||!e.clientWidth)return;let r=e.clientWidth/ks;t.style.transform="scale("+r+")",e.style.height=_s*r+"px"}function nn(){if(!lr||lr.closed)return;let e=lr.document,t=Oe.getCurrentSlide&&Oe.getCurrentSlide()||null,r=Qy(),a=t?r.indexOf(t):-1,i=a>=0&&r[a+1]||null,c=e.getElementById("sv-cur"),d=e.getElementById("sv-nxt"),u=e.getElementById("sv-notes"),f=e.getElementById("sv-pos");if(c&&(c.innerHTML=wd(t),vd(c)),d&&(d.innerHTML=wd(i),vd(d)),u){let k=t?t.querySelector("aside.notes"):null;u.innerHTML=k&&k.innerHTML.trim()?k.innerHTML:'<em class="sv-nonotes">No notes for this slide.</em>'}f&&(f.textContent=a+1+" / "+r.length)}function e2(e){return'<!DOCTYPE html><html><head><meta charset="utf-8"><title>Speaker View \u2014 orz-slides</title>'+e+"<style>*{box-sizing:border-box}html,body{margin:0;height:100%;background:#16161a;color:#e8e8ea;font:14px/1.45 system-ui,-apple-system,sans-serif}.sv-top{display:flex;align-items:center;gap:18px;padding:8px 16px;background:#000;border-bottom:1px solid #2a2a30}.sv-clock{font-size:20px;font-variant-numeric:tabular-nums;opacity:.85}.sv-tbox{display:flex;align-items:center;gap:8px}.sv-tbox #sv-timer{font-size:22px;font-variant-numeric:tabular-nums;min-width:74px}.sv-tbox button{font:inherit;font-size:12px;padding:3px 10px;border:1px solid #4a4a52;background:#23232a;color:#e8e8ea;border-radius:6px;cursor:pointer}.sv-tbox button:hover{background:#30303a}.sv-pos{margin-left:auto;font-size:17px;opacity:.8;font-variant-numeric:tabular-nums}.sv-main{display:grid;grid-template-columns:1.7fr 1fr;gap:14px;padding:14px;height:calc(100% - 49px)}.sv-current{min-height:0;display:flex;flex-direction:column}.sv-side{display:grid;grid-template-rows:auto 1fr;gap:14px;min-height:0}.sv-label{font-size:11px;letter-spacing:.09em;text-transform:uppercase;opacity:.5;margin:0 0 5px}.sv-stage{position:relative;overflow:hidden;background:#000;border:1px solid #2a2a30;border-radius:7px}.sv-stage .reveal{position:static;width:auto;height:auto}.sv-stage .slides{position:absolute;left:0;top:0;width:"+ks+"px;height:"+_s+"px;transform-origin:0 0;margin:0;padding:0;text-align:left}.sv-stage .slides>section{position:relative!important;display:block!important;left:0!important;top:0!important;transform:none!important;width:"+ks+"px!important;height:"+_s+'px!important;opacity:1!important;visibility:visible!important;background:var(--bg,#fff)}.sv-stage .fragment{opacity:1!important;visibility:visible!important}.sv-notes{background:#fbfbfa;color:#16161a;border-radius:7px;padding:16px 18px;overflow:auto;min-height:0;font-size:16px;line-height:1.5}.sv-notes :first-child{margin-top:0}.sv-notes .sv-nonotes{color:#888}.sv-end{display:flex;align-items:center;justify-content:center;height:100%;opacity:.45;font-size:18px}</style></head><body><div class="sv-top"><div class="sv-clock" id="sv-clock">--:--:--</div><div class="sv-tbox"><span id="sv-timer">0:00</span><button id="sv-ttoggle">Pause</button><button id="sv-treset">Reset</button></div><div class="sv-pos" id="sv-pos">\u2013 / \u2013</div></div><div class="sv-main"><div class="sv-current"><div class="sv-label">Current</div><div class="sv-stage" id="sv-cur"></div></div><div class="sv-side"><div><div class="sv-label">Next</div><div class="sv-stage" id="sv-nxt"></div></div><div style="display:flex;flex-direction:column;min-height:0"><div class="sv-label">Notes</div><div class="sv-notes" id="sv-notes"></div></div></div></div></body></html>'}function qd(){if(lr&&!lr.closed){lr.focus();return}let e=window.open("","orz-speaker","width=1280,height=800");if(!e)return;lr=e;let t=Array.prototype.slice.call(document.querySelectorAll('link[rel="stylesheet"], style')).map(c=>c.outerHTML).join(`
373
373
  `);e.document.open(),e.document.write(e2(t)),e.document.close();let r=e.document,a=r.getElementById("sv-ttoggle"),i=r.getElementById("sv-treset");a&&a.addEventListener("click",()=>{Kr.toggle(),So()}),i&&i.addEventListener("click",()=>{Kr.reset(),So()}),r.addEventListener("keydown",c=>{let d=c.key;d===" "||d==="ArrowRight"||d==="ArrowDown"||d==="PageDown"||d==="n"||d==="N"?(c.preventDefault(),Oe.next()):(d==="ArrowLeft"||d==="ArrowUp"||d==="PageUp"||d==="p"||d==="P")&&(c.preventDefault(),Oe.prev())}),e.addEventListener("resize",nn),Kr.start(),Td(),nn(),e.focus()}window.orzslides={version:Uy,md:Eo.md,parseDeck:gs,renderDeck:Qi,renderSlide:Ji,mount:Yy,renderAll:Ky,refresh:rn,openSpeaker:qd,toggleTimer:Md,reveal:null};})();
374
374
  /*! Bundled license information:
375
375
 
package/dist/template.js CHANGED
@@ -161,6 +161,7 @@ const ICON = {
161
161
  pencil: ic24('<path d="M12 20h9"/><path d="M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4 12.5-12.5z"/>'),
162
162
  collapseDown: ic24('<path d="M6 9l6 6 6-6"/>'),
163
163
  layout: ic24('<rect x="3" y="3" width="7" height="7" rx="1"/><rect x="14" y="3" width="7" height="7" rx="1"/><rect x="3" y="14" width="7" height="7" rx="1"/><rect x="14" y="14" width="7" height="7" rx="1"/>'),
164
+ ai: ic24('<path d="M12 2l2.2 6.6L21 11l-6.8 2.4L12 20l-2.2-6.6L3 11l6.8-2.4z"/>'),
164
165
  };
165
166
  /** The orz mark — the "orz" wordmark knocked out of a weathered green seal
166
167
  * (rough-edged, stone-textured). From wangyu16/logoes-and-icons (orz.svg);
@@ -217,6 +218,19 @@ ${themeTag}
217
218
  <style>${CHROME_CSS}</style>
218
219
  </head>
219
220
  <body>
221
+ <!-- ═══════════ orz · editing this deck with an AI agent ═══════════
222
+ This is a self-contained, EDITABLE orz-slides deck (.slides.html). The editable
223
+ source of truth is the slide markdown in the embedded deck source island below
224
+ (kind: slides, format: 1) — NOT the rendered HTML.
225
+
226
+ To edit it correctly, load the official orz-slides agent skill first: it defines
227
+ the comment-based layout grammar (slide markers, title bands, region splits,
228
+ speaker notes) and guarantees a byte-identical round-trip.
229
+ - Fetch the skill: https://cdn.jsdelivr.net/npm/orz-slides/orz-slides-skills/SKILL.md
230
+ - Install routes: https://markdown.orz.how/agents.html
231
+
232
+ Rules: edit ONLY the embedded deck source and re-embed it in place.
233
+ ═══════════════════════════════════════════════════════════════════ -->
220
234
  <div class="reveal"><div class="slides"></div></div>
221
235
 
222
236
  <button id="orz-edit-fab" class="orz-edit-ctrl" title="Edit this deck">${ICON.pencil}</button>
@@ -240,6 +254,7 @@ ${themeTag}
240
254
  <button id="orz-up" class="ic" title="Move slide earlier">${ICON.up}</button>
241
255
  <button id="orz-down" class="ic" title="Move slide later">${ICON.down}</button>
242
256
  <span class="orz-spacer"></span>
257
+ <button id="orz-ai" class="ic" title="AI assistant — improve this slide" aria-label="AI assistant" style="display:none">${ICON.ai}</button>
243
258
  <button id="orz-layout-btn" class="ic" title="Slide layout" aria-haspopup="true" aria-expanded="false">${ICON.layout}</button>
244
259
  <button id="orz-deck-btn" class="ic" title="Deck settings (theme, footer, ratio, title)">${ICON.deck}</button>
245
260
  <select id="orz-theme" title="Theme"></select>
@@ -26,7 +26,7 @@ You write only the **deck source**. Never hand-write the surrounding HTML
26
26
  edit the deck source (in a `.md`-ish file fed to the CLI, or in-browser) and let
27
27
  the tool re-serialize.
28
28
 
29
- > Status: orz-slides is **published to npm** (v0.1.1) as two lockstep packages —
29
+ > Status: orz-slides is **published to npm** (v0.4.0) as two lockstep packages —
30
30
  > the `orz-slides` CLI and the `orz-slides-browser` engine. Generate decks with
31
31
  > the CLI (`npx orz-slides deck.md`, or install it globally). Speaker view
32
32
  > (**S**), step-reveal fragments, an on-deck timer (**T**), and slide numbers are
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orz-slides",
3
- "version": "0.4.0",
3
+ "version": "0.6.1",
4
4
  "description": "Self-contained, editable HTML slide decks (.slides.html) authored in orz-markdown with a layout syntax. Sibling of orz-mdhtml.",
5
5
  "type": "module",
6
6
  "main": "./dist/lib.js",