@pagenary/publisher 2026.6.16 → 2026.6.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/package.json +1 -1
  2. package/scripts/build-tenants.js +23 -1
  3. package/site/{app.b987cce735d6.js → app.30b49ee65857.js} +1 -1
  4. package/site/app.js +1 -1
  5. package/site/index.html +4 -4
  6. package/site/lib/page-effects.b19ebfe6c2c7.js +1 -0
  7. package/site/lib/page-effects.js +1 -1
  8. package/site/{manifest.76e14cbcc513.js → manifest.65e01b421b84.js} +1 -1
  9. package/site/manifest.js +1 -1
  10. package/site/pages/accessible-authoring.html +1 -1
  11. package/site/pages/api.html +1 -1
  12. package/site/pages/architecture.html +1 -1
  13. package/site/pages/blog-layout.html +1 -1
  14. package/site/pages/deployment.html +1 -1
  15. package/site/pages/developer-guide.html +1 -1
  16. package/site/pages/extending.html +1 -1
  17. package/site/pages/overview.html +1 -1
  18. package/site/pages/page-effects.html +1 -1
  19. package/site/pages/publishing.html +1 -1
  20. package/site/pages/quickstart.html +1 -1
  21. package/site/pages/search-and-data.html +1 -1
  22. package/site/pages/seo-strategy.html +1 -1
  23. package/site/pages/showcase-gallery.html +1 -1
  24. package/site/pages/showcase-story.html +1 -1
  25. package/site/pages/tenant-config.html +2 -2
  26. package/site/pages/theming-recipes.html +1 -1
  27. package/site/pages/welcome.html +1 -1
  28. package/site/robots.txt +1 -1
  29. package/site/search-index/manifest.json +3 -3
  30. package/site/search-index/metadata.json +20 -20
  31. package/site/search-index/{part-0000.510602c32169.json → part-0000.4f5b2fe8190c.json} +19 -19
  32. package/site/search-index/part-0000.json +19 -19
  33. package/site/sections/tenant-config.90fc84e44857.js +3 -0
  34. package/site/sections/tenant-config.js +1 -1
  35. package/site/{styles.bdb30ba34de5.css → styles.781144256628.css} +221 -21
  36. package/site/styles.css +221 -21
  37. package/src/lib/page-effects.js +197 -10
  38. package/src/styles.css +219 -19
  39. package/site/lib/page-effects.2131b53bea6b.js +0 -1
  40. package/site/sections/tenant-config.532868a466d7.js +0 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pagenary/publisher",
3
- "version": "2026.6.16",
3
+ "version": "2026.6.17",
4
4
  "type": "module",
5
5
  "description": "Multi-tenant static publishing component for Pagenary platform.",
6
6
  "license": "AGPL-3.0-or-later",
@@ -1713,6 +1713,24 @@ async function applyReadingProgressConfig(distDir, config, tenantId) {
1713
1713
  console.log(` ↳ enabled reading progress for ${tenantId}`);
1714
1714
  }
1715
1715
 
1716
+ /**
1717
+ * Quick-copy control on code/example blocks (#89). Opt-in via `codeCopy: true`
1718
+ * (or `{ enabled: true }`). Writes the `data-code-copy` body flag the page-effect
1719
+ * reads; the button is added by JS, so JS-off pages keep fully-selectable code.
1720
+ */
1721
+ async function applyCodeCopyConfig(distDir, config, tenantId) {
1722
+ const cc = config.codeCopy;
1723
+ const enabled = cc === true || (cc && typeof cc === 'object' && cc.enabled !== false);
1724
+ if (!enabled) return;
1725
+ const indexPath = path.join(distDir, 'index.html');
1726
+ if (!(await pathExists(indexPath))) return;
1727
+ let html = await fsp.readFile(indexPath, 'utf8');
1728
+ if (/<body[^>]*data-code-copy(?:[\s=>])/.test(html)) return;
1729
+ html = html.replace(/<body(?=[\s>])/, '<body data-code-copy');
1730
+ await fsp.writeFile(indexPath, html, 'utf8');
1731
+ console.log(` ↳ enabled code-copy for ${tenantId}`);
1732
+ }
1733
+
1716
1734
  /**
1717
1735
  * Living scroll on any layout (docs included). Blog tenants opt in via
1718
1736
  * `blog.livingScroll` (handled in applyBlogLayout); this is the general path,
@@ -1754,7 +1772,10 @@ async function applyPageTocConfig(distDir, config, tenantId) {
1754
1772
  if (toc !== true && (!toc || typeof toc !== 'object')) return;
1755
1773
  const placementRaw = toc && typeof toc === 'object' ? toc.placement : undefined;
1756
1774
  if (placementRaw === 'off' || (toc && typeof toc === 'object' && toc.enabled === false)) return;
1757
- const placement = placementRaw === 'top' ? 'top' : 'rail';
1775
+ const placement = placementRaw === 'top' ? 'top'
1776
+ : placementRaw === 'left' ? 'left'
1777
+ : placementRaw === 'right' ? 'right'
1778
+ : 'rail';
1758
1779
  const min = toc && typeof toc === 'object' && Number.isInteger(toc.minHeadings) && toc.minHeadings > 0
1759
1780
  ? toc.minHeadings : null;
1760
1781
 
@@ -4904,6 +4925,7 @@ async function buildTenant(tenant, targetOverride, cacheDir, buildOptions) {
4904
4925
  await applyLivingScrollConfig(distDir, config, tenantId);
4905
4926
  await applyPageTocConfig(distDir, config, tenantId);
4906
4927
  await applyNavCollapseConfig(distDir, config, tenantId);
4928
+ await applyCodeCopyConfig(distDir, config, tenantId);
4907
4929
  await applyDocsMap(distDir, config, tenantId);
4908
4930
  await applyWelcome(distDir, config, tenantId);
4909
4931
  }
@@ -1 +1 @@
1
- import{MANIFEST as e,DEFAULT_SECTION as t,findSection as n,getAdjacentSections as a,SITE_CONFIG as o,EXPORT_CONFIG as s}from"./manifest.76e14cbcc513.js";import{updateMetaTags as i}from"./seo.90687a1d3d78.js";import{escapeRegExp as r,searchContentPage as c,flattenManifest as l,findPreferredIndex as d,resolveSectionMetadata as m}from"./lib/search.c52bcae8afda.js";import{resolveTarget as p,resolveEntry as u}from"./lib/router.f9d1cfba022d.js";import{composeExportDocument as v,collectExportableSections as f}from"./lib/export.2db2c0bd974c.js";import{renderMermaidBlocks as h}from"./mermaid-init.f25ee3b6ec1e.js";import{initMediaEmbeds as g}from"./media-init.16fde41d8850.js";import{highlightCodeBlocks as y}from"./syntax-highlight.9d51f36b24da.js";import{initPageEffects as b}from"./lib/page-effects.2131b53bea6b.js";const E=document.getElementById("app"),x=document.getElementById("nav"),C=document.getElementById("year"),T=document.getElementById("exportBtn"),L=document.getElementById("commandToggle"),N=document.getElementById("commandPalette"),k=document.getElementById("commandInput"),$=document.getElementById("commandList"),w=document.getElementById("mobileMenuToggle"),A=document.querySelector(".sidebar"),S=document.body.hasAttribute("data-reading-progress"),I=document.body.dataset.readingProgressMode||"bar",M="docs-toolkit-command-query",H=new Map,P=new Map,_=new Map,B=new Set;let q=[],R=0,F=!1,j=(localStorage.getItem(M)||"").trim(),D=!1;function W(e,t){const n=document.createElement("a");return n.href=e.url,n.target="_blank",n.rel="noopener noreferrer",n.className=`${t} nav-external`,n.title=e.summary||e.title,n.innerHTML=`\n <span class="nav-title">${e.title}<span class="nav-external-icon" aria-label="(opens in new tab)">↗</span></span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,n}function O(e,t={}){const{scrollToHighlight:a=!1}=t,{targetId:o,parentId:s}=function(e){return p(e,n)}(e);F&&ee(),s&&z(s,!0),D=a||Boolean(j),location.hash.replace("#","")===o?V():location.hash=`#${o}`}function U(){return location.hash.replace("#","")||t}async function V(){const s=U(),r=u(s,n);if(!r)return;const{entry:c,targetId:l,parentId:d}=r;l===s?(d&&z(d,!0),function(e,t=null){P.forEach(e=>{e.setAttribute("aria-current","false")});const n=P.get(e);if(n&&n.setAttribute("aria-current","page"),t){const e=P.get(t);e&&e.setAttribute("aria-current","page")}}(c.id,d),await async function(s){if(!s)return;const r=await import(s.module),c=r.load||r.default;if("function"!=typeof c)return void(E.innerHTML='<article class="section"><p>Section failed to load.</p></article>');const l=await c();E.innerHTML=l.html||"",function(t){if(function(e){const t=function(e){if(S)return!0;const t=e?.progress;return!0===e?.reading_progress||!0===e?.readingProgress||(!0===t||!(!t||"object"!=typeof t||!0!==t.enabled&&!0!==t.bar&&"bar"!==t.mode))}(e);if(document.body.toggleAttribute("data-reading-progress",t),t){const t=e?.progress&&"object"==typeof e.progress?e.progress.mode||(e.progress.label?"label":"bar"):I;document.body.dataset.readingProgressMode=t}else delete document.body.dataset.readingProgressMode}(t),!t)return;const n=(E.querySelector(".doc-content")||E.querySelector("article, section")||E).querySelector("h1");if(!n)return;if(t.hero){const e=document.createElement("figure");e.className="post-hero";const a=document.createElement("img");a.src=t.hero,a.alt="",a.loading="eager",e.appendChild(a),n.before(e)}const a=[];t.showDate&&t.date&&a.push(function(e){const t=String(e||"").trim();if(!t)return"";const n=/^\d{4}-\d{2}-\d{2}$/.test(t)?`${t}T00:00:00Z`:t,a=new Date(n);return Number.isNaN(a.getTime())?t:new Intl.DateTimeFormat(void 0,{year:"numeric",month:"long",day:"numeric",timeZone:"UTC"}).format(a)}(t.date)),t.author&&a.push(`By ${t.author}`),t.showReadingTime&&t.reading_time&&a.push(t.reading_label||`${t.reading_time} min read`);let o=n,s=null;if(a.length>0){const e=document.createElement("p");e.className="doc-meta";const t=document.createElement("span");t.className="doc-meta-text",t.textContent=a.join(" · "),e.appendChild(t),n.after(e),o=e,s=e}if(t.showSummary&&t.summary){const e=document.createElement("p");e.className="doc-summary",e.textContent=t.summary,o.after(e),o=e}if(Array.isArray(t.tags)&&t.tags.length){const e=document.createElement("ul");e.className="post-tags";for(const n of t.tags){const t=document.createElement("li");t.textContent=n,e.appendChild(t)}o.after(e),o=e}!async function(t,n,a=null){const o=t.id,s=n.closest(".doc-content")||n.parentElement;let i=null;try{i=await m(e,o)}catch{return}if(U()!==o||!function(e){return!!e&&Boolean(e.concepts&&e.concepts.length||e.skos_concepts&&e.skos_concepts.length||e.relationships&&e.relationships.length||e.provenance&&e.provenance.length||e.provenance_events&&e.provenance_events.length||e.source||e.privacy)}(i))return;const r=document.createElement("div");r.className="doc-fortemi-tools";const c=`docFortemiPanel-${o}`,l=document.createElement("div");l.id=c,l.className="doc-fortemi-panel",l.hidden=!0,l.setAttribute("role","region"),l.setAttribute("aria-label","Page metadata"),function(e,t){e.textContent="",K(e,"Concepts",e=>{const n=t.skos_concepts&&t.skos_concepts.length?t.skos_concepts:t.concepts||[];n.length?function(e,t){const n=document.createElement("div");n.className="doc-fortemi-chips",t.forEach(e=>{const t=document.createElement("span");t.className="doc-fortemi-chip",t.textContent=X(e),"object"==typeof e&&e&&e.definition&&(t.title=e.definition),n.appendChild(t)}),e.appendChild(n)}(e,n):G(e,"concepts","none"),(t.skos_relations||[]).forEach(t=>{const n=X({id:t.source_id||t.source}),a=X({id:t.target_id||t.target});G(e,t.type||"related",`${J(n)} -> ${J(a)}`)})}),K(e,"Source and Provenance",e=>{G(e,"source",t.source?.repo_relative_path||t.source?.path),G(e,"locator",t.source?.locator),G(e,"updated",t.updated_at),G(e,"privacy",t.privacy?.classification),(t.provenance||[]).forEach(t=>{G(e,t.field||"field",`${t.source||"source"} (${t.confidence||"unknown"})`)}),(t.provenance_events||[]).forEach(t=>{const n=[t.agent||"unknown agent",t.source,t.started_at||t.ended_at].filter(Boolean).join(" · ");G(e,t.activity||"activity",n)})}),K(e,"Related Pages",e=>{const n=t.relationships||[];if(!n.length)return void G(e,"related","none");const a=document.createElement("ul");a.className="doc-fortemi-links",n.forEach(e=>{const t=document.createElement("li"),n=document.createElement("button");n.type="button",n.className="doc-fortemi-link";const o=function(e){return String(e?.target_id||e?.target||"").replace(/^docs:page:/,"")}(e),s=function(e){const t=Number(e);return Number.isFinite(t)?`${Math.round(100*Math.max(0,Math.min(1,t)))}%`:null}(e.confidence),i=e.label||e.type||"related",r=Array.isArray(e.metadata?.shared_concepts)?e.metadata.shared_concepts.map(J).join(", "):null;n.textContent=`${i}: ${J(o)}${s?` (${s})`:""}`,r&&(n.title=`Shared concepts: ${r}`),n.addEventListener("click",()=>{o&&O(o)}),t.appendChild(n),a.appendChild(t)}),e.appendChild(a)})}(l,i);const d=document.createElement("button");d.type="button",d.className="doc-fortemi-button",d.setAttribute("aria-expanded","false"),d.setAttribute("aria-controls",c),d.title="Show page metadata",d.innerHTML='<span aria-hidden="true">i</span><span class="sr-only">Show page metadata</span>',d.addEventListener("click",()=>{const e=l.hidden;l.hidden=!e,d.setAttribute("aria-expanded",String(e))}),a?(d.classList.add("doc-fortemi-button-inline"),a.appendChild(d),s.appendChild(l)):(r.appendChild(d),s.append(r,l))}(t,o,s)}(s),await h(E),g(E),await y(E),function(e){const s=E.querySelector(".bottom-nav");s&&s.remove();const i="function"==typeof n?n(e):null;if(i&&i.collection)return void function(e){const n=function(){const e=o.postNav;if(!1===e)return null;const t=e&&"object"==typeof e?e:{};return{prev:!1!==t.prev,next:!1!==t.next,index:!1!==t.index,label:"string"==typeof t.label?t.label:null}}();if(!n)return;const{prev:s,next:i}=a(e),r=o.blogIndex||("string"==typeof t?t:null),c=n.index&&r&&r!==e,l=n.prev&&Boolean(s),d=n.next&&Boolean(i);if(!l&&!d&&!c)return;const m=document.createElement("nav");if(m.className="bottom-nav bottom-nav--posts",m.setAttribute("aria-label","Post navigation"),m.appendChild(l?Y(s,"prev"):Z()),c){const e=n.label||(o.blogIndexTitle?`All ${o.blogIndexTitle}`:"Back to index"),t=document.createElement("a");t.href=`#${r}`,t.className="bottom-nav-index",t.textContent=e,t.setAttribute("aria-label",e),t.addEventListener("click",e=>{e.preventDefault(),O(r)}),m.appendChild(t)}else m.appendChild(Z());m.appendChild(d?Y(i,"next"):Z());(E.querySelector("section")||E).appendChild(m)}(e);if("never"===o.bottomNav)return;const r=(o.bottomNavSections||[]).some(t=>e.startsWith(t)),c="mobile"===o.bottomNav&&!r,{prev:l,next:d}=a(e);if(!l&&!d)return;const m=document.createElement("nav");m.className="bottom-nav",c&&m.classList.add("mobile-only"),m.appendChild(l?Y(l,"prev"):Z()),d&&m.appendChild(Y(d,"next")),(E.querySelector("section")||E).appendChild(m)}(s.id),E.scrollTop=0,window.scrollTo(0,0),"function"==typeof l.afterRender&&l.afterRender(E),b(E),i({title:s.title,description:s.summary,siteTitle:o.siteTitle,siteUrl:o.siteUrl,sectionId:s.id,ogImage:s.ogImage||o.ogImage}),H.set(s.id,Date.now());const d=D;D=!1,ue(d),requestAnimationFrame(()=>E.focus())}(c)):location.replace(`#${l}`)}function z(e,t){if(!e)return;const n=_.get(e);t?(B.add(e),n&&n.group.classList.add("expanded")):(B.delete(e),n&&n.group.classList.remove("expanded"))}function J(e){return String(e||"").replace(/[-_]+/g," ").replace(/\s+/g," ").trim()}function X(e){return"string"==typeof e?J(e):e.prefLabel||e.pref_label||e.label||e.id||"concept"}function G(e,t,n){if(null==n||""===n)return;const a=document.createElement("div");a.className="doc-fortemi-row";const o=document.createElement("span");o.className="doc-fortemi-key",o.textContent=t;const s=document.createElement("span");s.textContent=String(n),a.append(o,s),e.appendChild(a)}function K(e,t,n){const a=document.createElement("section");a.className="doc-fortemi-section";const o=document.createElement("h2");o.textContent=t,a.appendChild(o),n(a),e.appendChild(a)}function Y(e,t){const n=document.createElement("div");n.className=`bottom-nav-item bottom-nav-${t}`;const a=`<span class="bottom-nav-chevron">${"prev"===t?"‹":"›"}</span>`,o=document.createElement("a");o.href=`#${e.id}`,o.className="bottom-nav-link";const s="prev"===t?"Previous":"Next";return o.title=`${s}: ${e.title}`,o.setAttribute("aria-label",`${s}: ${e.title}`),o.textContent=e.title,o.addEventListener("click",t=>{t.preventDefault(),O(e.id)}),"prev"===t?(n.innerHTML=a,n.appendChild(o)):(n.appendChild(o),n.insertAdjacentHTML("beforeend",a)),n}function Z(){const e=document.createElement("div");return e.className="bottom-nav-spacer",e}function Q(){if(!N||!k)return;F=!0,N.hidden=!1;const e=j;k.value=e,se(e),requestAnimationFrame(()=>{k.focus(),e&&k.select()})}function ee(){N&&k&&(F=!1,N.hidden=!0,k.blur())}!function(){x.innerHTML="",P.clear(),_.clear();let t=B.size>0;e.forEach((e,n)=>{if(e.url){const t=W(e,"nav-leaf");return void x.appendChild(t)}if(e.subsections&&e.subsections.length){const n=document.createElement("div");n.className="nav-group";const a=Boolean(e.module),o=document.createElement("button");o.type="button",o.className="nav-parent"+(a?" nav-parent-with-content":""),o.dataset.section=e.id,o.title=e.summary,a?(o.innerHTML=`\n <span class="nav-title-link">${e.title}</span>\n <span class="nav-expand-toggle" aria-label="Expand"></span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,o.querySelector(".nav-title-link").addEventListener("click",t=>{t.stopPropagation(),O(e.id,{scrollToHighlight:Boolean(j)})}),o.querySelector(".nav-expand-toggle").addEventListener("click",t=>{t.stopPropagation();const n=!B.has(e.id);z(e.id,n)}),o.addEventListener("click",t=>{if(t.target===o){const t=!B.has(e.id);z(e.id,t)}})):(o.innerHTML=`\n <span class="nav-title">${e.title}</span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,o.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)}));const s=document.createElement("div");s.className="nav-sublist",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void s.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-nested";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-nested",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const a=document.createElement("div");a.className="nav-sublist nav-sublist-nested",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void a.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-deep";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-deep",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const o=document.createElement("div");o.className="nav-sublist nav-sublist-deep",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void o.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-ultra";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-ultra",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const a=document.createElement("div");a.className="nav-sublist nav-sublist-ultra",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void a.appendChild(t)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-ultra"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),a.appendChild(t),P.set(e.id,t)}),t.append(n,a),o.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:a});const s=B.has(e.id)&&!e.collapsed;return void z(e.id,s)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-deep"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),o.appendChild(t),P.set(e.id,t)}),t.append(n,o),a.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:o});const s=B.has(e.id)&&!e.collapsed;return void z(e.id,s)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-nested"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),a.appendChild(t),P.set(e.id,t)}),t.append(n,a),s.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:a});const o=B.has(e.id)&&!e.collapsed;return void z(e.id,o)}const t=document.createElement("button");t.type="button",t.className="nav-item"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),s.appendChild(t),P.set(e.id,t)}),n.append(o,s),x.appendChild(n),P.set(e.id,o),_.set(e.id,{group:n,button:o,list:s});const i=!e.collapsed&&(B.has(e.id)||!t&&!B.size);z(e.id,i),i&&(t=!0)}else{const t=document.createElement("button");t.type="button",t.className="nav-leaf"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),x.appendChild(t),P.set(e.id,t)}})}(),function(){const e=document.getElementById("themePicker"),t=document.getElementById("themeStylesheet");if(!e||!t)return;let n;try{n=JSON.parse(e.dataset.themes||"[]")}catch{return}if(!Array.isArray(n)||0===n.length)return;const a="pagenary:theme",o=e=>{const t=n.find(t=>t.name===e);return t?t.file:null};function s(n){const a=o(n);a&&(t.setAttribute("href",a),e.value=n)}let i=null;try{i=localStorage.getItem(a)}catch{i=null}const r=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches;s(i&&o(i)?i:r&&o("dark")?"dark":e.dataset.default&&o(e.dataset.default)?e.dataset.default:n[0].name),e.addEventListener("change",()=>{s(e.value);try{localStorage.setItem(a,e.value)}catch{}})}(),j&&(D=!0),window.addEventListener("hashchange",()=>{j&&(D=!0),V()}),C.textContent=(new Date).getFullYear(),V(),L&&N&&k&&$&&(L.addEventListener("click",()=>{F?ee():Q()}),k.addEventListener("input",()=>{const e=k.value;pe(e,!0),se(e)}),k.addEventListener("keydown",e=>{const t=q.length-1;if("ArrowDown"===e.key)e.preventDefault(),R=Math.min(t,R+1),re();else if("ArrowUp"===e.key)e.preventDefault(),R=Math.max(0,R-1),re();else if("Enter"===e.key){e.preventDefault();const t=q[R];t&&(pe(k.value,!0),O(t.id,{scrollToHighlight:!0}),ee())}else"Escape"===e.key&&(e.preventDefault(),ee())}),$.addEventListener("click",e=>{const t=e.target.closest("[data-section]");if(!t)return;const n=t.dataset.section;n&&(pe(k.value,!0),O(n,{scrollToHighlight:!0}),ee())}),N.addEventListener("click",e=>{e.target===N&&ee()}),$.addEventListener("scroll",()=>{oe.loading||oe.complete||$.scrollTop+$.clientHeight>=$.scrollHeight-48&&ie(!1)}),window.addEventListener("keydown",e=>{const t=e.target,n=t&&("INPUT"===t.tagName||"TEXTAREA"===t.tagName||t.isContentEditable),a=e.metaKey||e.ctrlKey;"k"===e.key.toLowerCase()&&a||"/"===e.key&&!n?(e.preventDefault(),F?ee():Q()):"Escape"===e.key&&F&&(e.preventDefault(),ee())}));let te=null,ne=!1;const ae=25;let oe={query:"",offset:0,total:0,complete:!0,loading:!1};async function se(e){$&&(oe={query:e,offset:0,total:0,complete:!1,loading:!1},q=[],!ne&&e.trim()&&(ne=!0,$.innerHTML='<li class="cmd-item cmd-loading">Indexing content...</li>'),clearTimeout(te),te=setTimeout(async()=>{await ie(!0);const e=U();R=d(q,e),re(),ne=!1},e.trim()?150:0))}async function ie(t=!1){if(oe.loading)return;if(!t&&oe.complete)return;const n=oe.query;let a;oe.loading=!0;try{a=await c(e,n,{offset:oe.offset,limit:ae})}catch{return void(oe.loading=!1)}n===oe.query?(q=t?a.items:q.concat(a.items),oe.offset=q.length,oe.total=a.total,oe.complete=a.complete||0===a.items.length,oe.loading=!1,function(){if($){if($.innerHTML="",!q.length){const e=document.createElement("li");return e.className="cmd-item",e.setAttribute("aria-selected","false"),e.textContent="No matches.",void $.appendChild(e)}if(q.forEach(e=>{const t=document.createElement("li");t.className="cmd-item",t.dataset.section=e.id,t.setAttribute("role","option");const n=document.createElement("span");if(n.className="cmd-item-title",n.textContent=e.title,e.group){const t=document.createElement("span");t.className="cmd-item-group",t.textContent=e.group,n.prepend(t)}const a=document.createElement("span");if(a.className="cmd-item-summary",a.textContent=e.summary||"",t.append(n,a),e.searchSnippet&&e.searchSnippet!==e.summary){const n=document.createElement("span");n.className="cmd-item-snippet",n.textContent=e.searchSnippet,t.appendChild(n)}if("number"==typeof e.searchRank&&e.searchRank>0){const n=document.createElement("span");n.className="cmd-item-score",n.textContent=`Rank ${e.searchRank}`,t.appendChild(n)}$.appendChild(t)}),!oe.complete&&oe.total>q.length){const e=document.createElement("li");e.className="cmd-item cmd-more",e.setAttribute("aria-selected","false"),e.setAttribute("role","presentation"),e.textContent=`Showing ${q.length} of ${oe.total} — scroll for more`,$.appendChild(e)}}}()):oe.loading=!1}function re(){$&&Array.from($.children).forEach((e,t)=>{const n=t===R&&q.length;e.setAttribute("aria-selected",n?"true":"false"),n&&e.scrollIntoView({block:"nearest"})})}const ce=!s||!1!==s.enabled,le=s&&Array.isArray(s.scopes)&&s.scopes.length?s.scopes:["page","site"];T&&(ce?T.addEventListener("click",function(){const t=document.createElement("div");t.className="export-options-overlay";const n=le.map(e=>{const t=de[e];return t?`<button type="button" class="export-option-btn" data-scope="${e}">\n <span class="export-option-title">${t.title}</span>\n <span class="export-option-desc">${t.desc}</span>\n </button>`:""}).join("");t.innerHTML=`\n <div class="export-options-modal">\n <div class="export-options-header">EXPORT OPTIONS</div>\n <div class="export-options-buttons">\n ${n}\n </div>\n <button type="button" class="export-cancel-btn">Cancel</button>\n </div>\n `,document.body.appendChild(t),setTimeout(()=>t.classList.add("active"),10);const a=()=>{t.classList.remove("active"),setTimeout(()=>t.remove(),200)};t.querySelector(".export-cancel-btn").addEventListener("click",a),t.addEventListener("click",e=>{e.target===t&&a()}),t.querySelectorAll(".export-option-btn").forEach(t=>{t.addEventListener("click",()=>{const n=t.dataset.scope;a(),async function(t="site"){if(!T)return;const n=T.innerHTML;T.disabled=!0;const a=document.createElement("div");a.className="export-loading-overlay",a.innerHTML='\n <div class="export-loading-modal">\n <div class="export-loading-header">\n <div class="export-loading-title">COMPILING DOCUMENTATION</div>\n <div class="export-loading-subtitle">Assembling all sections into unified document</div>\n </div>\n <div class="export-loading-progress">\n <div class="export-loading-bar">\n <div class="export-loading-fill"></div>\n </div>\n <div class="export-loading-status-container">\n <div class="export-loading-status">Initializing...</div>\n </div>\n </div>\n <div class="export-loading-scanner">\n <div class="scanner-line"></div>\n </div>\n </div>\n ',document.body.appendChild(a),setTimeout(()=>a.classList.add("active"),10);const o=a.querySelector(".export-loading-fill"),i=a.querySelector(".export-loading-status");try{let n;if("page"===t){const t=U(),a=f(e).find(e=>e.id===t);n=a?[a]:[]}else n=f(e);if(0===n.length)return alert("No content available to export."),a.remove(),void(T.disabled=!1);const r=[],c=n.length;let l=0;for(const e of n){l++;const n=l/c*100;o.style.width=`${n}%`,i.textContent="page"===t?`Exporting: ${e.title}`:`Processing section ${l} of ${c}: ${e.title}`,await new Promise(e=>setTimeout(e,50));try{const t=await import(e.module),n=t.load||t.default;if("function"!=typeof n)continue;const a=me((await n()).html||"");r.push({section:e,html:a})}catch(t){console.error("Failed to include section in export",e.id,t)}}i.textContent="Generating document...",await new Promise(e=>setTimeout(e,200));const d=v(r,s);i.textContent="Opening print dialog...",await new Promise(e=>setTimeout(e,100)),function(e){document.getElementById("exportPrintFrame")?.remove();const t=document.createElement("iframe");t.id="exportPrintFrame",t.setAttribute("aria-hidden","true"),t.setAttribute("tabindex","-1"),t.style.cssText="position:fixed;width:0;height:0;border:0;left:-9999px;top:0;visibility:hidden;",document.body.appendChild(t);let n=!1;const a=()=>{n||(n=!0,setTimeout(()=>t.remove(),500))},o=t.contentWindow.document;o.open(),o.write(e),o.close();const s=()=>{const e=t.contentWindow;try{e.addEventListener("afterprint",a,{once:!0}),e.focus(),e.print(),setTimeout(a,6e4)}catch(e){console.error("Export print failed",e),t.remove()}};"complete"===t.contentWindow.document.readyState?setTimeout(s,60):t.addEventListener("load",()=>setTimeout(s,60),{once:!0})}(d),a.classList.remove("active"),setTimeout(()=>a.remove(),300)}catch(e){console.error("Export failed",e),alert("Export failed. Check console for details."),a.remove()}finally{T.disabled=!1,T.innerHTML=n}}(n)})})}):T.remove());const de={page:{title:"Current Page",desc:"Export only this section"},site:{title:"Entire Site",desc:"Export all documentation"}};function me(e){const t=document.createElement("div");t.innerHTML=e,t.querySelectorAll("script").forEach(e=>e.remove()),t.querySelectorAll("button").forEach(e=>e.removeAttribute("onclick")),t.querySelectorAll("mark.hl").forEach(e=>{const t=document.createTextNode(e.textContent||"");e.replaceWith(t)});const n=t.querySelector("section");return n?n.innerHTML:t.innerHTML}function pe(e,t=!1){j=e.trim(),t&&(j?localStorage.setItem(M,j):localStorage.removeItem(M)),ue()}function ue(e=!1){E&&function(e,t,{scrollToFirst:n=!1}={}){if(!e)return;if(function(e){e&&e.querySelectorAll("mark.hl").forEach(e=>{const t=document.createTextNode(e.textContent||"");e.replaceWith(t)})}(e),!t)return;const a=t.split(/\s+/).map(e=>e.trim()).filter(Boolean);if(!a.length)return;const o=a.map(e=>e.toLowerCase()),s=new Set(["SCRIPT","STYLE","CODE","PRE"]),i=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(e){if(!e.nodeValue||!e.nodeValue.trim())return NodeFilter.FILTER_REJECT;const t=e.parentNode;return t&&s.has(t.tagName)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}),c=[];let l;for(;l=i.nextNode();){const e=l.nodeValue.toLowerCase();o.some(t=>e.includes(t))&&c.push(l)}const d=new RegExp(`(${a.map(r).join("|")})`,"gi");c.forEach(e=>{const t=e.nodeValue,n=[];let a=0;t.replace(d,(e,o,s)=>{s>a&&n.push(document.createTextNode(t.slice(a,s)));const i=document.createElement("mark");return i.className="hl",i.textContent=e,n.push(i),a=s+e.length,e}),a<t.length&&n.push(document.createTextNode(t.slice(a)));const o=document.createDocumentFragment();n.forEach(e=>o.appendChild(e)),e.parentNode.replaceChild(o,e)}),n&&requestAnimationFrame(()=>{const t=e.querySelector("mark.hl");t&&t.scrollIntoView({behavior:"smooth",block:"center"})})}(E,j,{scrollToFirst:e})}if(w&&A){const e=()=>document.body.dataset.navCollapse||"overlay",t=()=>window.innerWidth<=960||"overlay"===e(),n=()=>{A.classList.remove("mobile-open"),document.body.classList.remove("menu-open"),w.setAttribute("aria-expanded","false")};window.innerWidth>960&&"overlay"!==e()&&w.setAttribute("aria-expanded","true"),w.addEventListener("click",()=>{if(window.innerWidth>960&&"overlay"!==e()){const e=document.body.classList.toggle("nav-collapsed");return void w.setAttribute("aria-expanded",String(!e))}const t=A.classList.toggle("mobile-open");document.body.classList.toggle("menu-open",t),w.setAttribute("aria-expanded",String(t))}),x.addEventListener("click",e=>{if(!t())return;const a=e.target.closest(".nav-item, .nav-leaf, .nav-parent");a&&(a.classList.contains("nav-item")||a.classList.contains("nav-leaf"))&&n()}),document.addEventListener("click",e=>{t()&&A.classList.contains("mobile-open")&&!A.contains(e.target)&&!w.contains(e.target)&&n()})}const ve=document.getElementById("brandHome");ve&&ve.addEventListener("click",e=>{e.preventDefault(),O(t)});
1
+ import{MANIFEST as e,DEFAULT_SECTION as t,findSection as n,getAdjacentSections as a,SITE_CONFIG as o,EXPORT_CONFIG as s}from"./manifest.65e01b421b84.js";import{updateMetaTags as i}from"./seo.90687a1d3d78.js";import{escapeRegExp as r,searchContentPage as c,flattenManifest as l,findPreferredIndex as d,resolveSectionMetadata as m}from"./lib/search.c52bcae8afda.js";import{resolveTarget as p,resolveEntry as u}from"./lib/router.f9d1cfba022d.js";import{composeExportDocument as v,collectExportableSections as f}from"./lib/export.2db2c0bd974c.js";import{renderMermaidBlocks as h}from"./mermaid-init.f25ee3b6ec1e.js";import{initMediaEmbeds as g}from"./media-init.16fde41d8850.js";import{highlightCodeBlocks as y}from"./syntax-highlight.9d51f36b24da.js";import{initPageEffects as b}from"./lib/page-effects.b19ebfe6c2c7.js";const E=document.getElementById("app"),x=document.getElementById("nav"),C=document.getElementById("year"),T=document.getElementById("exportBtn"),L=document.getElementById("commandToggle"),N=document.getElementById("commandPalette"),k=document.getElementById("commandInput"),$=document.getElementById("commandList"),w=document.getElementById("mobileMenuToggle"),A=document.querySelector(".sidebar"),S=document.body.hasAttribute("data-reading-progress"),I=document.body.dataset.readingProgressMode||"bar",M="docs-toolkit-command-query",H=new Map,P=new Map,_=new Map,B=new Set;let q=[],R=0,F=!1,j=(localStorage.getItem(M)||"").trim(),D=!1;function W(e,t){const n=document.createElement("a");return n.href=e.url,n.target="_blank",n.rel="noopener noreferrer",n.className=`${t} nav-external`,n.title=e.summary||e.title,n.innerHTML=`\n <span class="nav-title">${e.title}<span class="nav-external-icon" aria-label="(opens in new tab)">↗</span></span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,n}function O(e,t={}){const{scrollToHighlight:a=!1}=t,{targetId:o,parentId:s}=function(e){return p(e,n)}(e);F&&ee(),s&&z(s,!0),D=a||Boolean(j),location.hash.replace("#","")===o?V():location.hash=`#${o}`}function U(){return location.hash.replace("#","")||t}async function V(){const s=U(),r=u(s,n);if(!r)return;const{entry:c,targetId:l,parentId:d}=r;l===s?(d&&z(d,!0),function(e,t=null){P.forEach(e=>{e.setAttribute("aria-current","false")});const n=P.get(e);if(n&&n.setAttribute("aria-current","page"),t){const e=P.get(t);e&&e.setAttribute("aria-current","page")}}(c.id,d),await async function(s){if(!s)return;const r=await import(s.module),c=r.load||r.default;if("function"!=typeof c)return void(E.innerHTML='<article class="section"><p>Section failed to load.</p></article>');const l=await c();E.innerHTML=l.html||"",function(t){if(function(e){const t=function(e){if(S)return!0;const t=e?.progress;return!0===e?.reading_progress||!0===e?.readingProgress||(!0===t||!(!t||"object"!=typeof t||!0!==t.enabled&&!0!==t.bar&&"bar"!==t.mode))}(e);if(document.body.toggleAttribute("data-reading-progress",t),t){const t=e?.progress&&"object"==typeof e.progress?e.progress.mode||(e.progress.label?"label":"bar"):I;document.body.dataset.readingProgressMode=t}else delete document.body.dataset.readingProgressMode}(t),!t)return;const n=(E.querySelector(".doc-content")||E.querySelector("article, section")||E).querySelector("h1");if(!n)return;if(t.hero){const e=document.createElement("figure");e.className="post-hero";const a=document.createElement("img");a.src=t.hero,a.alt="",a.loading="eager",e.appendChild(a),n.before(e)}const a=[];t.showDate&&t.date&&a.push(function(e){const t=String(e||"").trim();if(!t)return"";const n=/^\d{4}-\d{2}-\d{2}$/.test(t)?`${t}T00:00:00Z`:t,a=new Date(n);return Number.isNaN(a.getTime())?t:new Intl.DateTimeFormat(void 0,{year:"numeric",month:"long",day:"numeric",timeZone:"UTC"}).format(a)}(t.date)),t.author&&a.push(`By ${t.author}`),t.showReadingTime&&t.reading_time&&a.push(t.reading_label||`${t.reading_time} min read`);let o=n,s=null;if(a.length>0){const e=document.createElement("p");e.className="doc-meta";const t=document.createElement("span");t.className="doc-meta-text",t.textContent=a.join(" · "),e.appendChild(t),n.after(e),o=e,s=e}if(t.showSummary&&t.summary){const e=document.createElement("p");e.className="doc-summary",e.textContent=t.summary,o.after(e),o=e}if(Array.isArray(t.tags)&&t.tags.length){const e=document.createElement("ul");e.className="post-tags";for(const n of t.tags){const t=document.createElement("li");t.textContent=n,e.appendChild(t)}o.after(e),o=e}!async function(t,n,a=null){const o=t.id,s=n.closest(".doc-content")||n.parentElement;let i=null;try{i=await m(e,o)}catch{return}if(U()!==o||!function(e){return!!e&&Boolean(e.concepts&&e.concepts.length||e.skos_concepts&&e.skos_concepts.length||e.relationships&&e.relationships.length||e.provenance&&e.provenance.length||e.provenance_events&&e.provenance_events.length||e.source||e.privacy)}(i))return;const r=document.createElement("div");r.className="doc-fortemi-tools";const c=`docFortemiPanel-${o}`,l=document.createElement("div");l.id=c,l.className="doc-fortemi-panel",l.hidden=!0,l.setAttribute("role","region"),l.setAttribute("aria-label","Page metadata"),function(e,t){e.textContent="",K(e,"Concepts",e=>{const n=t.skos_concepts&&t.skos_concepts.length?t.skos_concepts:t.concepts||[];n.length?function(e,t){const n=document.createElement("div");n.className="doc-fortemi-chips",t.forEach(e=>{const t=document.createElement("span");t.className="doc-fortemi-chip",t.textContent=X(e),"object"==typeof e&&e&&e.definition&&(t.title=e.definition),n.appendChild(t)}),e.appendChild(n)}(e,n):G(e,"concepts","none"),(t.skos_relations||[]).forEach(t=>{const n=X({id:t.source_id||t.source}),a=X({id:t.target_id||t.target});G(e,t.type||"related",`${J(n)} -> ${J(a)}`)})}),K(e,"Source and Provenance",e=>{G(e,"source",t.source?.repo_relative_path||t.source?.path),G(e,"locator",t.source?.locator),G(e,"updated",t.updated_at),G(e,"privacy",t.privacy?.classification),(t.provenance||[]).forEach(t=>{G(e,t.field||"field",`${t.source||"source"} (${t.confidence||"unknown"})`)}),(t.provenance_events||[]).forEach(t=>{const n=[t.agent||"unknown agent",t.source,t.started_at||t.ended_at].filter(Boolean).join(" · ");G(e,t.activity||"activity",n)})}),K(e,"Related Pages",e=>{const n=t.relationships||[];if(!n.length)return void G(e,"related","none");const a=document.createElement("ul");a.className="doc-fortemi-links",n.forEach(e=>{const t=document.createElement("li"),n=document.createElement("button");n.type="button",n.className="doc-fortemi-link";const o=function(e){return String(e?.target_id||e?.target||"").replace(/^docs:page:/,"")}(e),s=function(e){const t=Number(e);return Number.isFinite(t)?`${Math.round(100*Math.max(0,Math.min(1,t)))}%`:null}(e.confidence),i=e.label||e.type||"related",r=Array.isArray(e.metadata?.shared_concepts)?e.metadata.shared_concepts.map(J).join(", "):null;n.textContent=`${i}: ${J(o)}${s?` (${s})`:""}`,r&&(n.title=`Shared concepts: ${r}`),n.addEventListener("click",()=>{o&&O(o)}),t.appendChild(n),a.appendChild(t)}),e.appendChild(a)})}(l,i);const d=document.createElement("button");d.type="button",d.className="doc-fortemi-button",d.setAttribute("aria-expanded","false"),d.setAttribute("aria-controls",c),d.title="Show page metadata",d.innerHTML='<span aria-hidden="true">i</span><span class="sr-only">Show page metadata</span>',d.addEventListener("click",()=>{const e=l.hidden;l.hidden=!e,d.setAttribute("aria-expanded",String(e))}),a?(d.classList.add("doc-fortemi-button-inline"),a.appendChild(d),s.appendChild(l)):(r.appendChild(d),s.append(r,l))}(t,o,s)}(s),await h(E),g(E),await y(E),function(e){const s=E.querySelector(".bottom-nav");s&&s.remove();const i="function"==typeof n?n(e):null;if(i&&i.collection)return void function(e){const n=function(){const e=o.postNav;if(!1===e)return null;const t=e&&"object"==typeof e?e:{};return{prev:!1!==t.prev,next:!1!==t.next,index:!1!==t.index,label:"string"==typeof t.label?t.label:null}}();if(!n)return;const{prev:s,next:i}=a(e),r=o.blogIndex||("string"==typeof t?t:null),c=n.index&&r&&r!==e,l=n.prev&&Boolean(s),d=n.next&&Boolean(i);if(!l&&!d&&!c)return;const m=document.createElement("nav");if(m.className="bottom-nav bottom-nav--posts",m.setAttribute("aria-label","Post navigation"),m.appendChild(l?Y(s,"prev"):Z()),c){const e=n.label||(o.blogIndexTitle?`All ${o.blogIndexTitle}`:"Back to index"),t=document.createElement("a");t.href=`#${r}`,t.className="bottom-nav-index",t.textContent=e,t.setAttribute("aria-label",e),t.addEventListener("click",e=>{e.preventDefault(),O(r)}),m.appendChild(t)}else m.appendChild(Z());m.appendChild(d?Y(i,"next"):Z());(E.querySelector("section")||E).appendChild(m)}(e);if("never"===o.bottomNav)return;const r=(o.bottomNavSections||[]).some(t=>e.startsWith(t)),c="mobile"===o.bottomNav&&!r,{prev:l,next:d}=a(e);if(!l&&!d)return;const m=document.createElement("nav");m.className="bottom-nav",c&&m.classList.add("mobile-only"),m.appendChild(l?Y(l,"prev"):Z()),d&&m.appendChild(Y(d,"next")),(E.querySelector("section")||E).appendChild(m)}(s.id),E.scrollTop=0,window.scrollTo(0,0),"function"==typeof l.afterRender&&l.afterRender(E),b(E),i({title:s.title,description:s.summary,siteTitle:o.siteTitle,siteUrl:o.siteUrl,sectionId:s.id,ogImage:s.ogImage||o.ogImage}),H.set(s.id,Date.now());const d=D;D=!1,ue(d),requestAnimationFrame(()=>E.focus())}(c)):location.replace(`#${l}`)}function z(e,t){if(!e)return;const n=_.get(e);t?(B.add(e),n&&n.group.classList.add("expanded")):(B.delete(e),n&&n.group.classList.remove("expanded"))}function J(e){return String(e||"").replace(/[-_]+/g," ").replace(/\s+/g," ").trim()}function X(e){return"string"==typeof e?J(e):e.prefLabel||e.pref_label||e.label||e.id||"concept"}function G(e,t,n){if(null==n||""===n)return;const a=document.createElement("div");a.className="doc-fortemi-row";const o=document.createElement("span");o.className="doc-fortemi-key",o.textContent=t;const s=document.createElement("span");s.textContent=String(n),a.append(o,s),e.appendChild(a)}function K(e,t,n){const a=document.createElement("section");a.className="doc-fortemi-section";const o=document.createElement("h2");o.textContent=t,a.appendChild(o),n(a),e.appendChild(a)}function Y(e,t){const n=document.createElement("div");n.className=`bottom-nav-item bottom-nav-${t}`;const a=`<span class="bottom-nav-chevron">${"prev"===t?"‹":"›"}</span>`,o=document.createElement("a");o.href=`#${e.id}`,o.className="bottom-nav-link";const s="prev"===t?"Previous":"Next";return o.title=`${s}: ${e.title}`,o.setAttribute("aria-label",`${s}: ${e.title}`),o.textContent=e.title,o.addEventListener("click",t=>{t.preventDefault(),O(e.id)}),"prev"===t?(n.innerHTML=a,n.appendChild(o)):(n.appendChild(o),n.insertAdjacentHTML("beforeend",a)),n}function Z(){const e=document.createElement("div");return e.className="bottom-nav-spacer",e}function Q(){if(!N||!k)return;F=!0,N.hidden=!1;const e=j;k.value=e,se(e),requestAnimationFrame(()=>{k.focus(),e&&k.select()})}function ee(){N&&k&&(F=!1,N.hidden=!0,k.blur())}!function(){x.innerHTML="",P.clear(),_.clear();let t=B.size>0;e.forEach((e,n)=>{if(e.url){const t=W(e,"nav-leaf");return void x.appendChild(t)}if(e.subsections&&e.subsections.length){const n=document.createElement("div");n.className="nav-group";const a=Boolean(e.module),o=document.createElement("button");o.type="button",o.className="nav-parent"+(a?" nav-parent-with-content":""),o.dataset.section=e.id,o.title=e.summary,a?(o.innerHTML=`\n <span class="nav-title-link">${e.title}</span>\n <span class="nav-expand-toggle" aria-label="Expand"></span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,o.querySelector(".nav-title-link").addEventListener("click",t=>{t.stopPropagation(),O(e.id,{scrollToHighlight:Boolean(j)})}),o.querySelector(".nav-expand-toggle").addEventListener("click",t=>{t.stopPropagation();const n=!B.has(e.id);z(e.id,n)}),o.addEventListener("click",t=>{if(t.target===o){const t=!B.has(e.id);z(e.id,t)}})):(o.innerHTML=`\n <span class="nav-title">${e.title}</span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,o.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)}));const s=document.createElement("div");s.className="nav-sublist",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void s.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-nested";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-nested",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const a=document.createElement("div");a.className="nav-sublist nav-sublist-nested",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void a.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-deep";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-deep",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const o=document.createElement("div");o.className="nav-sublist nav-sublist-deep",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void o.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-ultra";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-ultra",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const a=document.createElement("div");a.className="nav-sublist nav-sublist-ultra",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void a.appendChild(t)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-ultra"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),a.appendChild(t),P.set(e.id,t)}),t.append(n,a),o.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:a});const s=B.has(e.id)&&!e.collapsed;return void z(e.id,s)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-deep"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),o.appendChild(t),P.set(e.id,t)}),t.append(n,o),a.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:o});const s=B.has(e.id)&&!e.collapsed;return void z(e.id,s)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-nested"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),a.appendChild(t),P.set(e.id,t)}),t.append(n,a),s.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:a});const o=B.has(e.id)&&!e.collapsed;return void z(e.id,o)}const t=document.createElement("button");t.type="button",t.className="nav-item"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),s.appendChild(t),P.set(e.id,t)}),n.append(o,s),x.appendChild(n),P.set(e.id,o),_.set(e.id,{group:n,button:o,list:s});const i=!e.collapsed&&(B.has(e.id)||!t&&!B.size);z(e.id,i),i&&(t=!0)}else{const t=document.createElement("button");t.type="button",t.className="nav-leaf"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),x.appendChild(t),P.set(e.id,t)}})}(),function(){const e=document.getElementById("themePicker"),t=document.getElementById("themeStylesheet");if(!e||!t)return;let n;try{n=JSON.parse(e.dataset.themes||"[]")}catch{return}if(!Array.isArray(n)||0===n.length)return;const a="pagenary:theme",o=e=>{const t=n.find(t=>t.name===e);return t?t.file:null};function s(n){const a=o(n);a&&(t.setAttribute("href",a),e.value=n)}let i=null;try{i=localStorage.getItem(a)}catch{i=null}const r=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches;s(i&&o(i)?i:r&&o("dark")?"dark":e.dataset.default&&o(e.dataset.default)?e.dataset.default:n[0].name),e.addEventListener("change",()=>{s(e.value);try{localStorage.setItem(a,e.value)}catch{}})}(),j&&(D=!0),window.addEventListener("hashchange",()=>{j&&(D=!0),V()}),C.textContent=(new Date).getFullYear(),V(),L&&N&&k&&$&&(L.addEventListener("click",()=>{F?ee():Q()}),k.addEventListener("input",()=>{const e=k.value;pe(e,!0),se(e)}),k.addEventListener("keydown",e=>{const t=q.length-1;if("ArrowDown"===e.key)e.preventDefault(),R=Math.min(t,R+1),re();else if("ArrowUp"===e.key)e.preventDefault(),R=Math.max(0,R-1),re();else if("Enter"===e.key){e.preventDefault();const t=q[R];t&&(pe(k.value,!0),O(t.id,{scrollToHighlight:!0}),ee())}else"Escape"===e.key&&(e.preventDefault(),ee())}),$.addEventListener("click",e=>{const t=e.target.closest("[data-section]");if(!t)return;const n=t.dataset.section;n&&(pe(k.value,!0),O(n,{scrollToHighlight:!0}),ee())}),N.addEventListener("click",e=>{e.target===N&&ee()}),$.addEventListener("scroll",()=>{oe.loading||oe.complete||$.scrollTop+$.clientHeight>=$.scrollHeight-48&&ie(!1)}),window.addEventListener("keydown",e=>{const t=e.target,n=t&&("INPUT"===t.tagName||"TEXTAREA"===t.tagName||t.isContentEditable),a=e.metaKey||e.ctrlKey;"k"===e.key.toLowerCase()&&a||"/"===e.key&&!n?(e.preventDefault(),F?ee():Q()):"Escape"===e.key&&F&&(e.preventDefault(),ee())}));let te=null,ne=!1;const ae=25;let oe={query:"",offset:0,total:0,complete:!0,loading:!1};async function se(e){$&&(oe={query:e,offset:0,total:0,complete:!1,loading:!1},q=[],!ne&&e.trim()&&(ne=!0,$.innerHTML='<li class="cmd-item cmd-loading">Indexing content...</li>'),clearTimeout(te),te=setTimeout(async()=>{await ie(!0);const e=U();R=d(q,e),re(),ne=!1},e.trim()?150:0))}async function ie(t=!1){if(oe.loading)return;if(!t&&oe.complete)return;const n=oe.query;let a;oe.loading=!0;try{a=await c(e,n,{offset:oe.offset,limit:ae})}catch{return void(oe.loading=!1)}n===oe.query?(q=t?a.items:q.concat(a.items),oe.offset=q.length,oe.total=a.total,oe.complete=a.complete||0===a.items.length,oe.loading=!1,function(){if($){if($.innerHTML="",!q.length){const e=document.createElement("li");return e.className="cmd-item",e.setAttribute("aria-selected","false"),e.textContent="No matches.",void $.appendChild(e)}if(q.forEach(e=>{const t=document.createElement("li");t.className="cmd-item",t.dataset.section=e.id,t.setAttribute("role","option");const n=document.createElement("span");if(n.className="cmd-item-title",n.textContent=e.title,e.group){const t=document.createElement("span");t.className="cmd-item-group",t.textContent=e.group,n.prepend(t)}const a=document.createElement("span");if(a.className="cmd-item-summary",a.textContent=e.summary||"",t.append(n,a),e.searchSnippet&&e.searchSnippet!==e.summary){const n=document.createElement("span");n.className="cmd-item-snippet",n.textContent=e.searchSnippet,t.appendChild(n)}if("number"==typeof e.searchRank&&e.searchRank>0){const n=document.createElement("span");n.className="cmd-item-score",n.textContent=`Rank ${e.searchRank}`,t.appendChild(n)}$.appendChild(t)}),!oe.complete&&oe.total>q.length){const e=document.createElement("li");e.className="cmd-item cmd-more",e.setAttribute("aria-selected","false"),e.setAttribute("role","presentation"),e.textContent=`Showing ${q.length} of ${oe.total} — scroll for more`,$.appendChild(e)}}}()):oe.loading=!1}function re(){$&&Array.from($.children).forEach((e,t)=>{const n=t===R&&q.length;e.setAttribute("aria-selected",n?"true":"false"),n&&e.scrollIntoView({block:"nearest"})})}const ce=!s||!1!==s.enabled,le=s&&Array.isArray(s.scopes)&&s.scopes.length?s.scopes:["page","site"];T&&(ce?T.addEventListener("click",function(){const t=document.createElement("div");t.className="export-options-overlay";const n=le.map(e=>{const t=de[e];return t?`<button type="button" class="export-option-btn" data-scope="${e}">\n <span class="export-option-title">${t.title}</span>\n <span class="export-option-desc">${t.desc}</span>\n </button>`:""}).join("");t.innerHTML=`\n <div class="export-options-modal">\n <div class="export-options-header">EXPORT OPTIONS</div>\n <div class="export-options-buttons">\n ${n}\n </div>\n <button type="button" class="export-cancel-btn">Cancel</button>\n </div>\n `,document.body.appendChild(t),setTimeout(()=>t.classList.add("active"),10);const a=()=>{t.classList.remove("active"),setTimeout(()=>t.remove(),200)};t.querySelector(".export-cancel-btn").addEventListener("click",a),t.addEventListener("click",e=>{e.target===t&&a()}),t.querySelectorAll(".export-option-btn").forEach(t=>{t.addEventListener("click",()=>{const n=t.dataset.scope;a(),async function(t="site"){if(!T)return;const n=T.innerHTML;T.disabled=!0;const a=document.createElement("div");a.className="export-loading-overlay",a.innerHTML='\n <div class="export-loading-modal">\n <div class="export-loading-header">\n <div class="export-loading-title">COMPILING DOCUMENTATION</div>\n <div class="export-loading-subtitle">Assembling all sections into unified document</div>\n </div>\n <div class="export-loading-progress">\n <div class="export-loading-bar">\n <div class="export-loading-fill"></div>\n </div>\n <div class="export-loading-status-container">\n <div class="export-loading-status">Initializing...</div>\n </div>\n </div>\n <div class="export-loading-scanner">\n <div class="scanner-line"></div>\n </div>\n </div>\n ',document.body.appendChild(a),setTimeout(()=>a.classList.add("active"),10);const o=a.querySelector(".export-loading-fill"),i=a.querySelector(".export-loading-status");try{let n;if("page"===t){const t=U(),a=f(e).find(e=>e.id===t);n=a?[a]:[]}else n=f(e);if(0===n.length)return alert("No content available to export."),a.remove(),void(T.disabled=!1);const r=[],c=n.length;let l=0;for(const e of n){l++;const n=l/c*100;o.style.width=`${n}%`,i.textContent="page"===t?`Exporting: ${e.title}`:`Processing section ${l} of ${c}: ${e.title}`,await new Promise(e=>setTimeout(e,50));try{const t=await import(e.module),n=t.load||t.default;if("function"!=typeof n)continue;const a=me((await n()).html||"");r.push({section:e,html:a})}catch(t){console.error("Failed to include section in export",e.id,t)}}i.textContent="Generating document...",await new Promise(e=>setTimeout(e,200));const d=v(r,s);i.textContent="Opening print dialog...",await new Promise(e=>setTimeout(e,100)),function(e){document.getElementById("exportPrintFrame")?.remove();const t=document.createElement("iframe");t.id="exportPrintFrame",t.setAttribute("aria-hidden","true"),t.setAttribute("tabindex","-1"),t.style.cssText="position:fixed;width:0;height:0;border:0;left:-9999px;top:0;visibility:hidden;",document.body.appendChild(t);let n=!1;const a=()=>{n||(n=!0,setTimeout(()=>t.remove(),500))},o=t.contentWindow.document;o.open(),o.write(e),o.close();const s=()=>{const e=t.contentWindow;try{e.addEventListener("afterprint",a,{once:!0}),e.focus(),e.print(),setTimeout(a,6e4)}catch(e){console.error("Export print failed",e),t.remove()}};"complete"===t.contentWindow.document.readyState?setTimeout(s,60):t.addEventListener("load",()=>setTimeout(s,60),{once:!0})}(d),a.classList.remove("active"),setTimeout(()=>a.remove(),300)}catch(e){console.error("Export failed",e),alert("Export failed. Check console for details."),a.remove()}finally{T.disabled=!1,T.innerHTML=n}}(n)})})}):T.remove());const de={page:{title:"Current Page",desc:"Export only this section"},site:{title:"Entire Site",desc:"Export all documentation"}};function me(e){const t=document.createElement("div");t.innerHTML=e,t.querySelectorAll("script").forEach(e=>e.remove()),t.querySelectorAll("button").forEach(e=>e.removeAttribute("onclick")),t.querySelectorAll("mark.hl").forEach(e=>{const t=document.createTextNode(e.textContent||"");e.replaceWith(t)});const n=t.querySelector("section");return n?n.innerHTML:t.innerHTML}function pe(e,t=!1){j=e.trim(),t&&(j?localStorage.setItem(M,j):localStorage.removeItem(M)),ue()}function ue(e=!1){E&&function(e,t,{scrollToFirst:n=!1}={}){if(!e)return;if(function(e){e&&e.querySelectorAll("mark.hl").forEach(e=>{const t=document.createTextNode(e.textContent||"");e.replaceWith(t)})}(e),!t)return;const a=t.split(/\s+/).map(e=>e.trim()).filter(Boolean);if(!a.length)return;const o=a.map(e=>e.toLowerCase()),s=new Set(["SCRIPT","STYLE","CODE","PRE"]),i=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(e){if(!e.nodeValue||!e.nodeValue.trim())return NodeFilter.FILTER_REJECT;const t=e.parentNode;return t&&s.has(t.tagName)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}),c=[];let l;for(;l=i.nextNode();){const e=l.nodeValue.toLowerCase();o.some(t=>e.includes(t))&&c.push(l)}const d=new RegExp(`(${a.map(r).join("|")})`,"gi");c.forEach(e=>{const t=e.nodeValue,n=[];let a=0;t.replace(d,(e,o,s)=>{s>a&&n.push(document.createTextNode(t.slice(a,s)));const i=document.createElement("mark");return i.className="hl",i.textContent=e,n.push(i),a=s+e.length,e}),a<t.length&&n.push(document.createTextNode(t.slice(a)));const o=document.createDocumentFragment();n.forEach(e=>o.appendChild(e)),e.parentNode.replaceChild(o,e)}),n&&requestAnimationFrame(()=>{const t=e.querySelector("mark.hl");t&&t.scrollIntoView({behavior:"smooth",block:"center"})})}(E,j,{scrollToFirst:e})}if(w&&A){const e=()=>document.body.dataset.navCollapse||"overlay",t=()=>window.innerWidth<=960||"overlay"===e(),n=()=>{A.classList.remove("mobile-open"),document.body.classList.remove("menu-open"),w.setAttribute("aria-expanded","false")};window.innerWidth>960&&"overlay"!==e()&&w.setAttribute("aria-expanded","true"),w.addEventListener("click",()=>{if(window.innerWidth>960&&"overlay"!==e()){const e=document.body.classList.toggle("nav-collapsed");return void w.setAttribute("aria-expanded",String(!e))}const t=A.classList.toggle("mobile-open");document.body.classList.toggle("menu-open",t),w.setAttribute("aria-expanded",String(t))}),x.addEventListener("click",e=>{if(!t())return;const a=e.target.closest(".nav-item, .nav-leaf, .nav-parent");a&&(a.classList.contains("nav-item")||a.classList.contains("nav-leaf"))&&n()}),document.addEventListener("click",e=>{t()&&A.classList.contains("mobile-open")&&!A.contains(e.target)&&!w.contains(e.target)&&n()})}const ve=document.getElementById("brandHome");ve&&ve.addEventListener("click",e=>{e.preventDefault(),O(t)});
package/site/app.js CHANGED
@@ -1 +1 @@
1
- import{MANIFEST as e,DEFAULT_SECTION as t,findSection as n,getAdjacentSections as a,SITE_CONFIG as o,EXPORT_CONFIG as s}from"./manifest.76e14cbcc513.js";import{updateMetaTags as i}from"./seo.90687a1d3d78.js";import{escapeRegExp as r,searchContentPage as c,flattenManifest as l,findPreferredIndex as d,resolveSectionMetadata as m}from"./lib/search.c52bcae8afda.js";import{resolveTarget as p,resolveEntry as u}from"./lib/router.f9d1cfba022d.js";import{composeExportDocument as v,collectExportableSections as f}from"./lib/export.2db2c0bd974c.js";import{renderMermaidBlocks as h}from"./mermaid-init.f25ee3b6ec1e.js";import{initMediaEmbeds as g}from"./media-init.16fde41d8850.js";import{highlightCodeBlocks as y}from"./syntax-highlight.9d51f36b24da.js";import{initPageEffects as b}from"./lib/page-effects.2131b53bea6b.js";const E=document.getElementById("app"),x=document.getElementById("nav"),C=document.getElementById("year"),T=document.getElementById("exportBtn"),L=document.getElementById("commandToggle"),N=document.getElementById("commandPalette"),k=document.getElementById("commandInput"),$=document.getElementById("commandList"),w=document.getElementById("mobileMenuToggle"),A=document.querySelector(".sidebar"),S=document.body.hasAttribute("data-reading-progress"),I=document.body.dataset.readingProgressMode||"bar",M="docs-toolkit-command-query",H=new Map,P=new Map,_=new Map,B=new Set;let q=[],R=0,F=!1,j=(localStorage.getItem(M)||"").trim(),D=!1;function W(e,t){const n=document.createElement("a");return n.href=e.url,n.target="_blank",n.rel="noopener noreferrer",n.className=`${t} nav-external`,n.title=e.summary||e.title,n.innerHTML=`\n <span class="nav-title">${e.title}<span class="nav-external-icon" aria-label="(opens in new tab)">↗</span></span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,n}function O(e,t={}){const{scrollToHighlight:a=!1}=t,{targetId:o,parentId:s}=function(e){return p(e,n)}(e);F&&ee(),s&&z(s,!0),D=a||Boolean(j),location.hash.replace("#","")===o?V():location.hash=`#${o}`}function U(){return location.hash.replace("#","")||t}async function V(){const s=U(),r=u(s,n);if(!r)return;const{entry:c,targetId:l,parentId:d}=r;l===s?(d&&z(d,!0),function(e,t=null){P.forEach(e=>{e.setAttribute("aria-current","false")});const n=P.get(e);if(n&&n.setAttribute("aria-current","page"),t){const e=P.get(t);e&&e.setAttribute("aria-current","page")}}(c.id,d),await async function(s){if(!s)return;const r=await import(s.module),c=r.load||r.default;if("function"!=typeof c)return void(E.innerHTML='<article class="section"><p>Section failed to load.</p></article>');const l=await c();E.innerHTML=l.html||"",function(t){if(function(e){const t=function(e){if(S)return!0;const t=e?.progress;return!0===e?.reading_progress||!0===e?.readingProgress||(!0===t||!(!t||"object"!=typeof t||!0!==t.enabled&&!0!==t.bar&&"bar"!==t.mode))}(e);if(document.body.toggleAttribute("data-reading-progress",t),t){const t=e?.progress&&"object"==typeof e.progress?e.progress.mode||(e.progress.label?"label":"bar"):I;document.body.dataset.readingProgressMode=t}else delete document.body.dataset.readingProgressMode}(t),!t)return;const n=(E.querySelector(".doc-content")||E.querySelector("article, section")||E).querySelector("h1");if(!n)return;if(t.hero){const e=document.createElement("figure");e.className="post-hero";const a=document.createElement("img");a.src=t.hero,a.alt="",a.loading="eager",e.appendChild(a),n.before(e)}const a=[];t.showDate&&t.date&&a.push(function(e){const t=String(e||"").trim();if(!t)return"";const n=/^\d{4}-\d{2}-\d{2}$/.test(t)?`${t}T00:00:00Z`:t,a=new Date(n);return Number.isNaN(a.getTime())?t:new Intl.DateTimeFormat(void 0,{year:"numeric",month:"long",day:"numeric",timeZone:"UTC"}).format(a)}(t.date)),t.author&&a.push(`By ${t.author}`),t.showReadingTime&&t.reading_time&&a.push(t.reading_label||`${t.reading_time} min read`);let o=n,s=null;if(a.length>0){const e=document.createElement("p");e.className="doc-meta";const t=document.createElement("span");t.className="doc-meta-text",t.textContent=a.join(" · "),e.appendChild(t),n.after(e),o=e,s=e}if(t.showSummary&&t.summary){const e=document.createElement("p");e.className="doc-summary",e.textContent=t.summary,o.after(e),o=e}if(Array.isArray(t.tags)&&t.tags.length){const e=document.createElement("ul");e.className="post-tags";for(const n of t.tags){const t=document.createElement("li");t.textContent=n,e.appendChild(t)}o.after(e),o=e}!async function(t,n,a=null){const o=t.id,s=n.closest(".doc-content")||n.parentElement;let i=null;try{i=await m(e,o)}catch{return}if(U()!==o||!function(e){return!!e&&Boolean(e.concepts&&e.concepts.length||e.skos_concepts&&e.skos_concepts.length||e.relationships&&e.relationships.length||e.provenance&&e.provenance.length||e.provenance_events&&e.provenance_events.length||e.source||e.privacy)}(i))return;const r=document.createElement("div");r.className="doc-fortemi-tools";const c=`docFortemiPanel-${o}`,l=document.createElement("div");l.id=c,l.className="doc-fortemi-panel",l.hidden=!0,l.setAttribute("role","region"),l.setAttribute("aria-label","Page metadata"),function(e,t){e.textContent="",K(e,"Concepts",e=>{const n=t.skos_concepts&&t.skos_concepts.length?t.skos_concepts:t.concepts||[];n.length?function(e,t){const n=document.createElement("div");n.className="doc-fortemi-chips",t.forEach(e=>{const t=document.createElement("span");t.className="doc-fortemi-chip",t.textContent=X(e),"object"==typeof e&&e&&e.definition&&(t.title=e.definition),n.appendChild(t)}),e.appendChild(n)}(e,n):G(e,"concepts","none"),(t.skos_relations||[]).forEach(t=>{const n=X({id:t.source_id||t.source}),a=X({id:t.target_id||t.target});G(e,t.type||"related",`${J(n)} -> ${J(a)}`)})}),K(e,"Source and Provenance",e=>{G(e,"source",t.source?.repo_relative_path||t.source?.path),G(e,"locator",t.source?.locator),G(e,"updated",t.updated_at),G(e,"privacy",t.privacy?.classification),(t.provenance||[]).forEach(t=>{G(e,t.field||"field",`${t.source||"source"} (${t.confidence||"unknown"})`)}),(t.provenance_events||[]).forEach(t=>{const n=[t.agent||"unknown agent",t.source,t.started_at||t.ended_at].filter(Boolean).join(" · ");G(e,t.activity||"activity",n)})}),K(e,"Related Pages",e=>{const n=t.relationships||[];if(!n.length)return void G(e,"related","none");const a=document.createElement("ul");a.className="doc-fortemi-links",n.forEach(e=>{const t=document.createElement("li"),n=document.createElement("button");n.type="button",n.className="doc-fortemi-link";const o=function(e){return String(e?.target_id||e?.target||"").replace(/^docs:page:/,"")}(e),s=function(e){const t=Number(e);return Number.isFinite(t)?`${Math.round(100*Math.max(0,Math.min(1,t)))}%`:null}(e.confidence),i=e.label||e.type||"related",r=Array.isArray(e.metadata?.shared_concepts)?e.metadata.shared_concepts.map(J).join(", "):null;n.textContent=`${i}: ${J(o)}${s?` (${s})`:""}`,r&&(n.title=`Shared concepts: ${r}`),n.addEventListener("click",()=>{o&&O(o)}),t.appendChild(n),a.appendChild(t)}),e.appendChild(a)})}(l,i);const d=document.createElement("button");d.type="button",d.className="doc-fortemi-button",d.setAttribute("aria-expanded","false"),d.setAttribute("aria-controls",c),d.title="Show page metadata",d.innerHTML='<span aria-hidden="true">i</span><span class="sr-only">Show page metadata</span>',d.addEventListener("click",()=>{const e=l.hidden;l.hidden=!e,d.setAttribute("aria-expanded",String(e))}),a?(d.classList.add("doc-fortemi-button-inline"),a.appendChild(d),s.appendChild(l)):(r.appendChild(d),s.append(r,l))}(t,o,s)}(s),await h(E),g(E),await y(E),function(e){const s=E.querySelector(".bottom-nav");s&&s.remove();const i="function"==typeof n?n(e):null;if(i&&i.collection)return void function(e){const n=function(){const e=o.postNav;if(!1===e)return null;const t=e&&"object"==typeof e?e:{};return{prev:!1!==t.prev,next:!1!==t.next,index:!1!==t.index,label:"string"==typeof t.label?t.label:null}}();if(!n)return;const{prev:s,next:i}=a(e),r=o.blogIndex||("string"==typeof t?t:null),c=n.index&&r&&r!==e,l=n.prev&&Boolean(s),d=n.next&&Boolean(i);if(!l&&!d&&!c)return;const m=document.createElement("nav");if(m.className="bottom-nav bottom-nav--posts",m.setAttribute("aria-label","Post navigation"),m.appendChild(l?Y(s,"prev"):Z()),c){const e=n.label||(o.blogIndexTitle?`All ${o.blogIndexTitle}`:"Back to index"),t=document.createElement("a");t.href=`#${r}`,t.className="bottom-nav-index",t.textContent=e,t.setAttribute("aria-label",e),t.addEventListener("click",e=>{e.preventDefault(),O(r)}),m.appendChild(t)}else m.appendChild(Z());m.appendChild(d?Y(i,"next"):Z());(E.querySelector("section")||E).appendChild(m)}(e);if("never"===o.bottomNav)return;const r=(o.bottomNavSections||[]).some(t=>e.startsWith(t)),c="mobile"===o.bottomNav&&!r,{prev:l,next:d}=a(e);if(!l&&!d)return;const m=document.createElement("nav");m.className="bottom-nav",c&&m.classList.add("mobile-only"),m.appendChild(l?Y(l,"prev"):Z()),d&&m.appendChild(Y(d,"next")),(E.querySelector("section")||E).appendChild(m)}(s.id),E.scrollTop=0,window.scrollTo(0,0),"function"==typeof l.afterRender&&l.afterRender(E),b(E),i({title:s.title,description:s.summary,siteTitle:o.siteTitle,siteUrl:o.siteUrl,sectionId:s.id,ogImage:s.ogImage||o.ogImage}),H.set(s.id,Date.now());const d=D;D=!1,ue(d),requestAnimationFrame(()=>E.focus())}(c)):location.replace(`#${l}`)}function z(e,t){if(!e)return;const n=_.get(e);t?(B.add(e),n&&n.group.classList.add("expanded")):(B.delete(e),n&&n.group.classList.remove("expanded"))}function J(e){return String(e||"").replace(/[-_]+/g," ").replace(/\s+/g," ").trim()}function X(e){return"string"==typeof e?J(e):e.prefLabel||e.pref_label||e.label||e.id||"concept"}function G(e,t,n){if(null==n||""===n)return;const a=document.createElement("div");a.className="doc-fortemi-row";const o=document.createElement("span");o.className="doc-fortemi-key",o.textContent=t;const s=document.createElement("span");s.textContent=String(n),a.append(o,s),e.appendChild(a)}function K(e,t,n){const a=document.createElement("section");a.className="doc-fortemi-section";const o=document.createElement("h2");o.textContent=t,a.appendChild(o),n(a),e.appendChild(a)}function Y(e,t){const n=document.createElement("div");n.className=`bottom-nav-item bottom-nav-${t}`;const a=`<span class="bottom-nav-chevron">${"prev"===t?"‹":"›"}</span>`,o=document.createElement("a");o.href=`#${e.id}`,o.className="bottom-nav-link";const s="prev"===t?"Previous":"Next";return o.title=`${s}: ${e.title}`,o.setAttribute("aria-label",`${s}: ${e.title}`),o.textContent=e.title,o.addEventListener("click",t=>{t.preventDefault(),O(e.id)}),"prev"===t?(n.innerHTML=a,n.appendChild(o)):(n.appendChild(o),n.insertAdjacentHTML("beforeend",a)),n}function Z(){const e=document.createElement("div");return e.className="bottom-nav-spacer",e}function Q(){if(!N||!k)return;F=!0,N.hidden=!1;const e=j;k.value=e,se(e),requestAnimationFrame(()=>{k.focus(),e&&k.select()})}function ee(){N&&k&&(F=!1,N.hidden=!0,k.blur())}!function(){x.innerHTML="",P.clear(),_.clear();let t=B.size>0;e.forEach((e,n)=>{if(e.url){const t=W(e,"nav-leaf");return void x.appendChild(t)}if(e.subsections&&e.subsections.length){const n=document.createElement("div");n.className="nav-group";const a=Boolean(e.module),o=document.createElement("button");o.type="button",o.className="nav-parent"+(a?" nav-parent-with-content":""),o.dataset.section=e.id,o.title=e.summary,a?(o.innerHTML=`\n <span class="nav-title-link">${e.title}</span>\n <span class="nav-expand-toggle" aria-label="Expand"></span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,o.querySelector(".nav-title-link").addEventListener("click",t=>{t.stopPropagation(),O(e.id,{scrollToHighlight:Boolean(j)})}),o.querySelector(".nav-expand-toggle").addEventListener("click",t=>{t.stopPropagation();const n=!B.has(e.id);z(e.id,n)}),o.addEventListener("click",t=>{if(t.target===o){const t=!B.has(e.id);z(e.id,t)}})):(o.innerHTML=`\n <span class="nav-title">${e.title}</span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,o.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)}));const s=document.createElement("div");s.className="nav-sublist",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void s.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-nested";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-nested",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const a=document.createElement("div");a.className="nav-sublist nav-sublist-nested",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void a.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-deep";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-deep",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const o=document.createElement("div");o.className="nav-sublist nav-sublist-deep",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void o.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-ultra";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-ultra",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const a=document.createElement("div");a.className="nav-sublist nav-sublist-ultra",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void a.appendChild(t)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-ultra"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),a.appendChild(t),P.set(e.id,t)}),t.append(n,a),o.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:a});const s=B.has(e.id)&&!e.collapsed;return void z(e.id,s)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-deep"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),o.appendChild(t),P.set(e.id,t)}),t.append(n,o),a.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:o});const s=B.has(e.id)&&!e.collapsed;return void z(e.id,s)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-nested"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),a.appendChild(t),P.set(e.id,t)}),t.append(n,a),s.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:a});const o=B.has(e.id)&&!e.collapsed;return void z(e.id,o)}const t=document.createElement("button");t.type="button",t.className="nav-item"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),s.appendChild(t),P.set(e.id,t)}),n.append(o,s),x.appendChild(n),P.set(e.id,o),_.set(e.id,{group:n,button:o,list:s});const i=!e.collapsed&&(B.has(e.id)||!t&&!B.size);z(e.id,i),i&&(t=!0)}else{const t=document.createElement("button");t.type="button",t.className="nav-leaf"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),x.appendChild(t),P.set(e.id,t)}})}(),function(){const e=document.getElementById("themePicker"),t=document.getElementById("themeStylesheet");if(!e||!t)return;let n;try{n=JSON.parse(e.dataset.themes||"[]")}catch{return}if(!Array.isArray(n)||0===n.length)return;const a="pagenary:theme",o=e=>{const t=n.find(t=>t.name===e);return t?t.file:null};function s(n){const a=o(n);a&&(t.setAttribute("href",a),e.value=n)}let i=null;try{i=localStorage.getItem(a)}catch{i=null}const r=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches;s(i&&o(i)?i:r&&o("dark")?"dark":e.dataset.default&&o(e.dataset.default)?e.dataset.default:n[0].name),e.addEventListener("change",()=>{s(e.value);try{localStorage.setItem(a,e.value)}catch{}})}(),j&&(D=!0),window.addEventListener("hashchange",()=>{j&&(D=!0),V()}),C.textContent=(new Date).getFullYear(),V(),L&&N&&k&&$&&(L.addEventListener("click",()=>{F?ee():Q()}),k.addEventListener("input",()=>{const e=k.value;pe(e,!0),se(e)}),k.addEventListener("keydown",e=>{const t=q.length-1;if("ArrowDown"===e.key)e.preventDefault(),R=Math.min(t,R+1),re();else if("ArrowUp"===e.key)e.preventDefault(),R=Math.max(0,R-1),re();else if("Enter"===e.key){e.preventDefault();const t=q[R];t&&(pe(k.value,!0),O(t.id,{scrollToHighlight:!0}),ee())}else"Escape"===e.key&&(e.preventDefault(),ee())}),$.addEventListener("click",e=>{const t=e.target.closest("[data-section]");if(!t)return;const n=t.dataset.section;n&&(pe(k.value,!0),O(n,{scrollToHighlight:!0}),ee())}),N.addEventListener("click",e=>{e.target===N&&ee()}),$.addEventListener("scroll",()=>{oe.loading||oe.complete||$.scrollTop+$.clientHeight>=$.scrollHeight-48&&ie(!1)}),window.addEventListener("keydown",e=>{const t=e.target,n=t&&("INPUT"===t.tagName||"TEXTAREA"===t.tagName||t.isContentEditable),a=e.metaKey||e.ctrlKey;"k"===e.key.toLowerCase()&&a||"/"===e.key&&!n?(e.preventDefault(),F?ee():Q()):"Escape"===e.key&&F&&(e.preventDefault(),ee())}));let te=null,ne=!1;const ae=25;let oe={query:"",offset:0,total:0,complete:!0,loading:!1};async function se(e){$&&(oe={query:e,offset:0,total:0,complete:!1,loading:!1},q=[],!ne&&e.trim()&&(ne=!0,$.innerHTML='<li class="cmd-item cmd-loading">Indexing content...</li>'),clearTimeout(te),te=setTimeout(async()=>{await ie(!0);const e=U();R=d(q,e),re(),ne=!1},e.trim()?150:0))}async function ie(t=!1){if(oe.loading)return;if(!t&&oe.complete)return;const n=oe.query;let a;oe.loading=!0;try{a=await c(e,n,{offset:oe.offset,limit:ae})}catch{return void(oe.loading=!1)}n===oe.query?(q=t?a.items:q.concat(a.items),oe.offset=q.length,oe.total=a.total,oe.complete=a.complete||0===a.items.length,oe.loading=!1,function(){if($){if($.innerHTML="",!q.length){const e=document.createElement("li");return e.className="cmd-item",e.setAttribute("aria-selected","false"),e.textContent="No matches.",void $.appendChild(e)}if(q.forEach(e=>{const t=document.createElement("li");t.className="cmd-item",t.dataset.section=e.id,t.setAttribute("role","option");const n=document.createElement("span");if(n.className="cmd-item-title",n.textContent=e.title,e.group){const t=document.createElement("span");t.className="cmd-item-group",t.textContent=e.group,n.prepend(t)}const a=document.createElement("span");if(a.className="cmd-item-summary",a.textContent=e.summary||"",t.append(n,a),e.searchSnippet&&e.searchSnippet!==e.summary){const n=document.createElement("span");n.className="cmd-item-snippet",n.textContent=e.searchSnippet,t.appendChild(n)}if("number"==typeof e.searchRank&&e.searchRank>0){const n=document.createElement("span");n.className="cmd-item-score",n.textContent=`Rank ${e.searchRank}`,t.appendChild(n)}$.appendChild(t)}),!oe.complete&&oe.total>q.length){const e=document.createElement("li");e.className="cmd-item cmd-more",e.setAttribute("aria-selected","false"),e.setAttribute("role","presentation"),e.textContent=`Showing ${q.length} of ${oe.total} — scroll for more`,$.appendChild(e)}}}()):oe.loading=!1}function re(){$&&Array.from($.children).forEach((e,t)=>{const n=t===R&&q.length;e.setAttribute("aria-selected",n?"true":"false"),n&&e.scrollIntoView({block:"nearest"})})}const ce=!s||!1!==s.enabled,le=s&&Array.isArray(s.scopes)&&s.scopes.length?s.scopes:["page","site"];T&&(ce?T.addEventListener("click",function(){const t=document.createElement("div");t.className="export-options-overlay";const n=le.map(e=>{const t=de[e];return t?`<button type="button" class="export-option-btn" data-scope="${e}">\n <span class="export-option-title">${t.title}</span>\n <span class="export-option-desc">${t.desc}</span>\n </button>`:""}).join("");t.innerHTML=`\n <div class="export-options-modal">\n <div class="export-options-header">EXPORT OPTIONS</div>\n <div class="export-options-buttons">\n ${n}\n </div>\n <button type="button" class="export-cancel-btn">Cancel</button>\n </div>\n `,document.body.appendChild(t),setTimeout(()=>t.classList.add("active"),10);const a=()=>{t.classList.remove("active"),setTimeout(()=>t.remove(),200)};t.querySelector(".export-cancel-btn").addEventListener("click",a),t.addEventListener("click",e=>{e.target===t&&a()}),t.querySelectorAll(".export-option-btn").forEach(t=>{t.addEventListener("click",()=>{const n=t.dataset.scope;a(),async function(t="site"){if(!T)return;const n=T.innerHTML;T.disabled=!0;const a=document.createElement("div");a.className="export-loading-overlay",a.innerHTML='\n <div class="export-loading-modal">\n <div class="export-loading-header">\n <div class="export-loading-title">COMPILING DOCUMENTATION</div>\n <div class="export-loading-subtitle">Assembling all sections into unified document</div>\n </div>\n <div class="export-loading-progress">\n <div class="export-loading-bar">\n <div class="export-loading-fill"></div>\n </div>\n <div class="export-loading-status-container">\n <div class="export-loading-status">Initializing...</div>\n </div>\n </div>\n <div class="export-loading-scanner">\n <div class="scanner-line"></div>\n </div>\n </div>\n ',document.body.appendChild(a),setTimeout(()=>a.classList.add("active"),10);const o=a.querySelector(".export-loading-fill"),i=a.querySelector(".export-loading-status");try{let n;if("page"===t){const t=U(),a=f(e).find(e=>e.id===t);n=a?[a]:[]}else n=f(e);if(0===n.length)return alert("No content available to export."),a.remove(),void(T.disabled=!1);const r=[],c=n.length;let l=0;for(const e of n){l++;const n=l/c*100;o.style.width=`${n}%`,i.textContent="page"===t?`Exporting: ${e.title}`:`Processing section ${l} of ${c}: ${e.title}`,await new Promise(e=>setTimeout(e,50));try{const t=await import(e.module),n=t.load||t.default;if("function"!=typeof n)continue;const a=me((await n()).html||"");r.push({section:e,html:a})}catch(t){console.error("Failed to include section in export",e.id,t)}}i.textContent="Generating document...",await new Promise(e=>setTimeout(e,200));const d=v(r,s);i.textContent="Opening print dialog...",await new Promise(e=>setTimeout(e,100)),function(e){document.getElementById("exportPrintFrame")?.remove();const t=document.createElement("iframe");t.id="exportPrintFrame",t.setAttribute("aria-hidden","true"),t.setAttribute("tabindex","-1"),t.style.cssText="position:fixed;width:0;height:0;border:0;left:-9999px;top:0;visibility:hidden;",document.body.appendChild(t);let n=!1;const a=()=>{n||(n=!0,setTimeout(()=>t.remove(),500))},o=t.contentWindow.document;o.open(),o.write(e),o.close();const s=()=>{const e=t.contentWindow;try{e.addEventListener("afterprint",a,{once:!0}),e.focus(),e.print(),setTimeout(a,6e4)}catch(e){console.error("Export print failed",e),t.remove()}};"complete"===t.contentWindow.document.readyState?setTimeout(s,60):t.addEventListener("load",()=>setTimeout(s,60),{once:!0})}(d),a.classList.remove("active"),setTimeout(()=>a.remove(),300)}catch(e){console.error("Export failed",e),alert("Export failed. Check console for details."),a.remove()}finally{T.disabled=!1,T.innerHTML=n}}(n)})})}):T.remove());const de={page:{title:"Current Page",desc:"Export only this section"},site:{title:"Entire Site",desc:"Export all documentation"}};function me(e){const t=document.createElement("div");t.innerHTML=e,t.querySelectorAll("script").forEach(e=>e.remove()),t.querySelectorAll("button").forEach(e=>e.removeAttribute("onclick")),t.querySelectorAll("mark.hl").forEach(e=>{const t=document.createTextNode(e.textContent||"");e.replaceWith(t)});const n=t.querySelector("section");return n?n.innerHTML:t.innerHTML}function pe(e,t=!1){j=e.trim(),t&&(j?localStorage.setItem(M,j):localStorage.removeItem(M)),ue()}function ue(e=!1){E&&function(e,t,{scrollToFirst:n=!1}={}){if(!e)return;if(function(e){e&&e.querySelectorAll("mark.hl").forEach(e=>{const t=document.createTextNode(e.textContent||"");e.replaceWith(t)})}(e),!t)return;const a=t.split(/\s+/).map(e=>e.trim()).filter(Boolean);if(!a.length)return;const o=a.map(e=>e.toLowerCase()),s=new Set(["SCRIPT","STYLE","CODE","PRE"]),i=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(e){if(!e.nodeValue||!e.nodeValue.trim())return NodeFilter.FILTER_REJECT;const t=e.parentNode;return t&&s.has(t.tagName)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}),c=[];let l;for(;l=i.nextNode();){const e=l.nodeValue.toLowerCase();o.some(t=>e.includes(t))&&c.push(l)}const d=new RegExp(`(${a.map(r).join("|")})`,"gi");c.forEach(e=>{const t=e.nodeValue,n=[];let a=0;t.replace(d,(e,o,s)=>{s>a&&n.push(document.createTextNode(t.slice(a,s)));const i=document.createElement("mark");return i.className="hl",i.textContent=e,n.push(i),a=s+e.length,e}),a<t.length&&n.push(document.createTextNode(t.slice(a)));const o=document.createDocumentFragment();n.forEach(e=>o.appendChild(e)),e.parentNode.replaceChild(o,e)}),n&&requestAnimationFrame(()=>{const t=e.querySelector("mark.hl");t&&t.scrollIntoView({behavior:"smooth",block:"center"})})}(E,j,{scrollToFirst:e})}if(w&&A){const e=()=>document.body.dataset.navCollapse||"overlay",t=()=>window.innerWidth<=960||"overlay"===e(),n=()=>{A.classList.remove("mobile-open"),document.body.classList.remove("menu-open"),w.setAttribute("aria-expanded","false")};window.innerWidth>960&&"overlay"!==e()&&w.setAttribute("aria-expanded","true"),w.addEventListener("click",()=>{if(window.innerWidth>960&&"overlay"!==e()){const e=document.body.classList.toggle("nav-collapsed");return void w.setAttribute("aria-expanded",String(!e))}const t=A.classList.toggle("mobile-open");document.body.classList.toggle("menu-open",t),w.setAttribute("aria-expanded",String(t))}),x.addEventListener("click",e=>{if(!t())return;const a=e.target.closest(".nav-item, .nav-leaf, .nav-parent");a&&(a.classList.contains("nav-item")||a.classList.contains("nav-leaf"))&&n()}),document.addEventListener("click",e=>{t()&&A.classList.contains("mobile-open")&&!A.contains(e.target)&&!w.contains(e.target)&&n()})}const ve=document.getElementById("brandHome");ve&&ve.addEventListener("click",e=>{e.preventDefault(),O(t)});
1
+ import{MANIFEST as e,DEFAULT_SECTION as t,findSection as n,getAdjacentSections as a,SITE_CONFIG as o,EXPORT_CONFIG as s}from"./manifest.65e01b421b84.js";import{updateMetaTags as i}from"./seo.90687a1d3d78.js";import{escapeRegExp as r,searchContentPage as c,flattenManifest as l,findPreferredIndex as d,resolveSectionMetadata as m}from"./lib/search.c52bcae8afda.js";import{resolveTarget as p,resolveEntry as u}from"./lib/router.f9d1cfba022d.js";import{composeExportDocument as v,collectExportableSections as f}from"./lib/export.2db2c0bd974c.js";import{renderMermaidBlocks as h}from"./mermaid-init.f25ee3b6ec1e.js";import{initMediaEmbeds as g}from"./media-init.16fde41d8850.js";import{highlightCodeBlocks as y}from"./syntax-highlight.9d51f36b24da.js";import{initPageEffects as b}from"./lib/page-effects.b19ebfe6c2c7.js";const E=document.getElementById("app"),x=document.getElementById("nav"),C=document.getElementById("year"),T=document.getElementById("exportBtn"),L=document.getElementById("commandToggle"),N=document.getElementById("commandPalette"),k=document.getElementById("commandInput"),$=document.getElementById("commandList"),w=document.getElementById("mobileMenuToggle"),A=document.querySelector(".sidebar"),S=document.body.hasAttribute("data-reading-progress"),I=document.body.dataset.readingProgressMode||"bar",M="docs-toolkit-command-query",H=new Map,P=new Map,_=new Map,B=new Set;let q=[],R=0,F=!1,j=(localStorage.getItem(M)||"").trim(),D=!1;function W(e,t){const n=document.createElement("a");return n.href=e.url,n.target="_blank",n.rel="noopener noreferrer",n.className=`${t} nav-external`,n.title=e.summary||e.title,n.innerHTML=`\n <span class="nav-title">${e.title}<span class="nav-external-icon" aria-label="(opens in new tab)">↗</span></span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,n}function O(e,t={}){const{scrollToHighlight:a=!1}=t,{targetId:o,parentId:s}=function(e){return p(e,n)}(e);F&&ee(),s&&z(s,!0),D=a||Boolean(j),location.hash.replace("#","")===o?V():location.hash=`#${o}`}function U(){return location.hash.replace("#","")||t}async function V(){const s=U(),r=u(s,n);if(!r)return;const{entry:c,targetId:l,parentId:d}=r;l===s?(d&&z(d,!0),function(e,t=null){P.forEach(e=>{e.setAttribute("aria-current","false")});const n=P.get(e);if(n&&n.setAttribute("aria-current","page"),t){const e=P.get(t);e&&e.setAttribute("aria-current","page")}}(c.id,d),await async function(s){if(!s)return;const r=await import(s.module),c=r.load||r.default;if("function"!=typeof c)return void(E.innerHTML='<article class="section"><p>Section failed to load.</p></article>');const l=await c();E.innerHTML=l.html||"",function(t){if(function(e){const t=function(e){if(S)return!0;const t=e?.progress;return!0===e?.reading_progress||!0===e?.readingProgress||(!0===t||!(!t||"object"!=typeof t||!0!==t.enabled&&!0!==t.bar&&"bar"!==t.mode))}(e);if(document.body.toggleAttribute("data-reading-progress",t),t){const t=e?.progress&&"object"==typeof e.progress?e.progress.mode||(e.progress.label?"label":"bar"):I;document.body.dataset.readingProgressMode=t}else delete document.body.dataset.readingProgressMode}(t),!t)return;const n=(E.querySelector(".doc-content")||E.querySelector("article, section")||E).querySelector("h1");if(!n)return;if(t.hero){const e=document.createElement("figure");e.className="post-hero";const a=document.createElement("img");a.src=t.hero,a.alt="",a.loading="eager",e.appendChild(a),n.before(e)}const a=[];t.showDate&&t.date&&a.push(function(e){const t=String(e||"").trim();if(!t)return"";const n=/^\d{4}-\d{2}-\d{2}$/.test(t)?`${t}T00:00:00Z`:t,a=new Date(n);return Number.isNaN(a.getTime())?t:new Intl.DateTimeFormat(void 0,{year:"numeric",month:"long",day:"numeric",timeZone:"UTC"}).format(a)}(t.date)),t.author&&a.push(`By ${t.author}`),t.showReadingTime&&t.reading_time&&a.push(t.reading_label||`${t.reading_time} min read`);let o=n,s=null;if(a.length>0){const e=document.createElement("p");e.className="doc-meta";const t=document.createElement("span");t.className="doc-meta-text",t.textContent=a.join(" · "),e.appendChild(t),n.after(e),o=e,s=e}if(t.showSummary&&t.summary){const e=document.createElement("p");e.className="doc-summary",e.textContent=t.summary,o.after(e),o=e}if(Array.isArray(t.tags)&&t.tags.length){const e=document.createElement("ul");e.className="post-tags";for(const n of t.tags){const t=document.createElement("li");t.textContent=n,e.appendChild(t)}o.after(e),o=e}!async function(t,n,a=null){const o=t.id,s=n.closest(".doc-content")||n.parentElement;let i=null;try{i=await m(e,o)}catch{return}if(U()!==o||!function(e){return!!e&&Boolean(e.concepts&&e.concepts.length||e.skos_concepts&&e.skos_concepts.length||e.relationships&&e.relationships.length||e.provenance&&e.provenance.length||e.provenance_events&&e.provenance_events.length||e.source||e.privacy)}(i))return;const r=document.createElement("div");r.className="doc-fortemi-tools";const c=`docFortemiPanel-${o}`,l=document.createElement("div");l.id=c,l.className="doc-fortemi-panel",l.hidden=!0,l.setAttribute("role","region"),l.setAttribute("aria-label","Page metadata"),function(e,t){e.textContent="",K(e,"Concepts",e=>{const n=t.skos_concepts&&t.skos_concepts.length?t.skos_concepts:t.concepts||[];n.length?function(e,t){const n=document.createElement("div");n.className="doc-fortemi-chips",t.forEach(e=>{const t=document.createElement("span");t.className="doc-fortemi-chip",t.textContent=X(e),"object"==typeof e&&e&&e.definition&&(t.title=e.definition),n.appendChild(t)}),e.appendChild(n)}(e,n):G(e,"concepts","none"),(t.skos_relations||[]).forEach(t=>{const n=X({id:t.source_id||t.source}),a=X({id:t.target_id||t.target});G(e,t.type||"related",`${J(n)} -> ${J(a)}`)})}),K(e,"Source and Provenance",e=>{G(e,"source",t.source?.repo_relative_path||t.source?.path),G(e,"locator",t.source?.locator),G(e,"updated",t.updated_at),G(e,"privacy",t.privacy?.classification),(t.provenance||[]).forEach(t=>{G(e,t.field||"field",`${t.source||"source"} (${t.confidence||"unknown"})`)}),(t.provenance_events||[]).forEach(t=>{const n=[t.agent||"unknown agent",t.source,t.started_at||t.ended_at].filter(Boolean).join(" · ");G(e,t.activity||"activity",n)})}),K(e,"Related Pages",e=>{const n=t.relationships||[];if(!n.length)return void G(e,"related","none");const a=document.createElement("ul");a.className="doc-fortemi-links",n.forEach(e=>{const t=document.createElement("li"),n=document.createElement("button");n.type="button",n.className="doc-fortemi-link";const o=function(e){return String(e?.target_id||e?.target||"").replace(/^docs:page:/,"")}(e),s=function(e){const t=Number(e);return Number.isFinite(t)?`${Math.round(100*Math.max(0,Math.min(1,t)))}%`:null}(e.confidence),i=e.label||e.type||"related",r=Array.isArray(e.metadata?.shared_concepts)?e.metadata.shared_concepts.map(J).join(", "):null;n.textContent=`${i}: ${J(o)}${s?` (${s})`:""}`,r&&(n.title=`Shared concepts: ${r}`),n.addEventListener("click",()=>{o&&O(o)}),t.appendChild(n),a.appendChild(t)}),e.appendChild(a)})}(l,i);const d=document.createElement("button");d.type="button",d.className="doc-fortemi-button",d.setAttribute("aria-expanded","false"),d.setAttribute("aria-controls",c),d.title="Show page metadata",d.innerHTML='<span aria-hidden="true">i</span><span class="sr-only">Show page metadata</span>',d.addEventListener("click",()=>{const e=l.hidden;l.hidden=!e,d.setAttribute("aria-expanded",String(e))}),a?(d.classList.add("doc-fortemi-button-inline"),a.appendChild(d),s.appendChild(l)):(r.appendChild(d),s.append(r,l))}(t,o,s)}(s),await h(E),g(E),await y(E),function(e){const s=E.querySelector(".bottom-nav");s&&s.remove();const i="function"==typeof n?n(e):null;if(i&&i.collection)return void function(e){const n=function(){const e=o.postNav;if(!1===e)return null;const t=e&&"object"==typeof e?e:{};return{prev:!1!==t.prev,next:!1!==t.next,index:!1!==t.index,label:"string"==typeof t.label?t.label:null}}();if(!n)return;const{prev:s,next:i}=a(e),r=o.blogIndex||("string"==typeof t?t:null),c=n.index&&r&&r!==e,l=n.prev&&Boolean(s),d=n.next&&Boolean(i);if(!l&&!d&&!c)return;const m=document.createElement("nav");if(m.className="bottom-nav bottom-nav--posts",m.setAttribute("aria-label","Post navigation"),m.appendChild(l?Y(s,"prev"):Z()),c){const e=n.label||(o.blogIndexTitle?`All ${o.blogIndexTitle}`:"Back to index"),t=document.createElement("a");t.href=`#${r}`,t.className="bottom-nav-index",t.textContent=e,t.setAttribute("aria-label",e),t.addEventListener("click",e=>{e.preventDefault(),O(r)}),m.appendChild(t)}else m.appendChild(Z());m.appendChild(d?Y(i,"next"):Z());(E.querySelector("section")||E).appendChild(m)}(e);if("never"===o.bottomNav)return;const r=(o.bottomNavSections||[]).some(t=>e.startsWith(t)),c="mobile"===o.bottomNav&&!r,{prev:l,next:d}=a(e);if(!l&&!d)return;const m=document.createElement("nav");m.className="bottom-nav",c&&m.classList.add("mobile-only"),m.appendChild(l?Y(l,"prev"):Z()),d&&m.appendChild(Y(d,"next")),(E.querySelector("section")||E).appendChild(m)}(s.id),E.scrollTop=0,window.scrollTo(0,0),"function"==typeof l.afterRender&&l.afterRender(E),b(E),i({title:s.title,description:s.summary,siteTitle:o.siteTitle,siteUrl:o.siteUrl,sectionId:s.id,ogImage:s.ogImage||o.ogImage}),H.set(s.id,Date.now());const d=D;D=!1,ue(d),requestAnimationFrame(()=>E.focus())}(c)):location.replace(`#${l}`)}function z(e,t){if(!e)return;const n=_.get(e);t?(B.add(e),n&&n.group.classList.add("expanded")):(B.delete(e),n&&n.group.classList.remove("expanded"))}function J(e){return String(e||"").replace(/[-_]+/g," ").replace(/\s+/g," ").trim()}function X(e){return"string"==typeof e?J(e):e.prefLabel||e.pref_label||e.label||e.id||"concept"}function G(e,t,n){if(null==n||""===n)return;const a=document.createElement("div");a.className="doc-fortemi-row";const o=document.createElement("span");o.className="doc-fortemi-key",o.textContent=t;const s=document.createElement("span");s.textContent=String(n),a.append(o,s),e.appendChild(a)}function K(e,t,n){const a=document.createElement("section");a.className="doc-fortemi-section";const o=document.createElement("h2");o.textContent=t,a.appendChild(o),n(a),e.appendChild(a)}function Y(e,t){const n=document.createElement("div");n.className=`bottom-nav-item bottom-nav-${t}`;const a=`<span class="bottom-nav-chevron">${"prev"===t?"‹":"›"}</span>`,o=document.createElement("a");o.href=`#${e.id}`,o.className="bottom-nav-link";const s="prev"===t?"Previous":"Next";return o.title=`${s}: ${e.title}`,o.setAttribute("aria-label",`${s}: ${e.title}`),o.textContent=e.title,o.addEventListener("click",t=>{t.preventDefault(),O(e.id)}),"prev"===t?(n.innerHTML=a,n.appendChild(o)):(n.appendChild(o),n.insertAdjacentHTML("beforeend",a)),n}function Z(){const e=document.createElement("div");return e.className="bottom-nav-spacer",e}function Q(){if(!N||!k)return;F=!0,N.hidden=!1;const e=j;k.value=e,se(e),requestAnimationFrame(()=>{k.focus(),e&&k.select()})}function ee(){N&&k&&(F=!1,N.hidden=!0,k.blur())}!function(){x.innerHTML="",P.clear(),_.clear();let t=B.size>0;e.forEach((e,n)=>{if(e.url){const t=W(e,"nav-leaf");return void x.appendChild(t)}if(e.subsections&&e.subsections.length){const n=document.createElement("div");n.className="nav-group";const a=Boolean(e.module),o=document.createElement("button");o.type="button",o.className="nav-parent"+(a?" nav-parent-with-content":""),o.dataset.section=e.id,o.title=e.summary,a?(o.innerHTML=`\n <span class="nav-title-link">${e.title}</span>\n <span class="nav-expand-toggle" aria-label="Expand"></span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,o.querySelector(".nav-title-link").addEventListener("click",t=>{t.stopPropagation(),O(e.id,{scrollToHighlight:Boolean(j)})}),o.querySelector(".nav-expand-toggle").addEventListener("click",t=>{t.stopPropagation();const n=!B.has(e.id);z(e.id,n)}),o.addEventListener("click",t=>{if(t.target===o){const t=!B.has(e.id);z(e.id,t)}})):(o.innerHTML=`\n <span class="nav-title">${e.title}</span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,o.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)}));const s=document.createElement("div");s.className="nav-sublist",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void s.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-nested";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-nested",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const a=document.createElement("div");a.className="nav-sublist nav-sublist-nested",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void a.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-deep";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-deep",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const o=document.createElement("div");o.className="nav-sublist nav-sublist-deep",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void o.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-ultra";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-ultra",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const a=document.createElement("div");a.className="nav-sublist nav-sublist-ultra",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void a.appendChild(t)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-ultra"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),a.appendChild(t),P.set(e.id,t)}),t.append(n,a),o.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:a});const s=B.has(e.id)&&!e.collapsed;return void z(e.id,s)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-deep"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),o.appendChild(t),P.set(e.id,t)}),t.append(n,o),a.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:o});const s=B.has(e.id)&&!e.collapsed;return void z(e.id,s)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-nested"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),a.appendChild(t),P.set(e.id,t)}),t.append(n,a),s.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:a});const o=B.has(e.id)&&!e.collapsed;return void z(e.id,o)}const t=document.createElement("button");t.type="button",t.className="nav-item"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),s.appendChild(t),P.set(e.id,t)}),n.append(o,s),x.appendChild(n),P.set(e.id,o),_.set(e.id,{group:n,button:o,list:s});const i=!e.collapsed&&(B.has(e.id)||!t&&!B.size);z(e.id,i),i&&(t=!0)}else{const t=document.createElement("button");t.type="button",t.className="nav-leaf"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),x.appendChild(t),P.set(e.id,t)}})}(),function(){const e=document.getElementById("themePicker"),t=document.getElementById("themeStylesheet");if(!e||!t)return;let n;try{n=JSON.parse(e.dataset.themes||"[]")}catch{return}if(!Array.isArray(n)||0===n.length)return;const a="pagenary:theme",o=e=>{const t=n.find(t=>t.name===e);return t?t.file:null};function s(n){const a=o(n);a&&(t.setAttribute("href",a),e.value=n)}let i=null;try{i=localStorage.getItem(a)}catch{i=null}const r=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches;s(i&&o(i)?i:r&&o("dark")?"dark":e.dataset.default&&o(e.dataset.default)?e.dataset.default:n[0].name),e.addEventListener("change",()=>{s(e.value);try{localStorage.setItem(a,e.value)}catch{}})}(),j&&(D=!0),window.addEventListener("hashchange",()=>{j&&(D=!0),V()}),C.textContent=(new Date).getFullYear(),V(),L&&N&&k&&$&&(L.addEventListener("click",()=>{F?ee():Q()}),k.addEventListener("input",()=>{const e=k.value;pe(e,!0),se(e)}),k.addEventListener("keydown",e=>{const t=q.length-1;if("ArrowDown"===e.key)e.preventDefault(),R=Math.min(t,R+1),re();else if("ArrowUp"===e.key)e.preventDefault(),R=Math.max(0,R-1),re();else if("Enter"===e.key){e.preventDefault();const t=q[R];t&&(pe(k.value,!0),O(t.id,{scrollToHighlight:!0}),ee())}else"Escape"===e.key&&(e.preventDefault(),ee())}),$.addEventListener("click",e=>{const t=e.target.closest("[data-section]");if(!t)return;const n=t.dataset.section;n&&(pe(k.value,!0),O(n,{scrollToHighlight:!0}),ee())}),N.addEventListener("click",e=>{e.target===N&&ee()}),$.addEventListener("scroll",()=>{oe.loading||oe.complete||$.scrollTop+$.clientHeight>=$.scrollHeight-48&&ie(!1)}),window.addEventListener("keydown",e=>{const t=e.target,n=t&&("INPUT"===t.tagName||"TEXTAREA"===t.tagName||t.isContentEditable),a=e.metaKey||e.ctrlKey;"k"===e.key.toLowerCase()&&a||"/"===e.key&&!n?(e.preventDefault(),F?ee():Q()):"Escape"===e.key&&F&&(e.preventDefault(),ee())}));let te=null,ne=!1;const ae=25;let oe={query:"",offset:0,total:0,complete:!0,loading:!1};async function se(e){$&&(oe={query:e,offset:0,total:0,complete:!1,loading:!1},q=[],!ne&&e.trim()&&(ne=!0,$.innerHTML='<li class="cmd-item cmd-loading">Indexing content...</li>'),clearTimeout(te),te=setTimeout(async()=>{await ie(!0);const e=U();R=d(q,e),re(),ne=!1},e.trim()?150:0))}async function ie(t=!1){if(oe.loading)return;if(!t&&oe.complete)return;const n=oe.query;let a;oe.loading=!0;try{a=await c(e,n,{offset:oe.offset,limit:ae})}catch{return void(oe.loading=!1)}n===oe.query?(q=t?a.items:q.concat(a.items),oe.offset=q.length,oe.total=a.total,oe.complete=a.complete||0===a.items.length,oe.loading=!1,function(){if($){if($.innerHTML="",!q.length){const e=document.createElement("li");return e.className="cmd-item",e.setAttribute("aria-selected","false"),e.textContent="No matches.",void $.appendChild(e)}if(q.forEach(e=>{const t=document.createElement("li");t.className="cmd-item",t.dataset.section=e.id,t.setAttribute("role","option");const n=document.createElement("span");if(n.className="cmd-item-title",n.textContent=e.title,e.group){const t=document.createElement("span");t.className="cmd-item-group",t.textContent=e.group,n.prepend(t)}const a=document.createElement("span");if(a.className="cmd-item-summary",a.textContent=e.summary||"",t.append(n,a),e.searchSnippet&&e.searchSnippet!==e.summary){const n=document.createElement("span");n.className="cmd-item-snippet",n.textContent=e.searchSnippet,t.appendChild(n)}if("number"==typeof e.searchRank&&e.searchRank>0){const n=document.createElement("span");n.className="cmd-item-score",n.textContent=`Rank ${e.searchRank}`,t.appendChild(n)}$.appendChild(t)}),!oe.complete&&oe.total>q.length){const e=document.createElement("li");e.className="cmd-item cmd-more",e.setAttribute("aria-selected","false"),e.setAttribute("role","presentation"),e.textContent=`Showing ${q.length} of ${oe.total} — scroll for more`,$.appendChild(e)}}}()):oe.loading=!1}function re(){$&&Array.from($.children).forEach((e,t)=>{const n=t===R&&q.length;e.setAttribute("aria-selected",n?"true":"false"),n&&e.scrollIntoView({block:"nearest"})})}const ce=!s||!1!==s.enabled,le=s&&Array.isArray(s.scopes)&&s.scopes.length?s.scopes:["page","site"];T&&(ce?T.addEventListener("click",function(){const t=document.createElement("div");t.className="export-options-overlay";const n=le.map(e=>{const t=de[e];return t?`<button type="button" class="export-option-btn" data-scope="${e}">\n <span class="export-option-title">${t.title}</span>\n <span class="export-option-desc">${t.desc}</span>\n </button>`:""}).join("");t.innerHTML=`\n <div class="export-options-modal">\n <div class="export-options-header">EXPORT OPTIONS</div>\n <div class="export-options-buttons">\n ${n}\n </div>\n <button type="button" class="export-cancel-btn">Cancel</button>\n </div>\n `,document.body.appendChild(t),setTimeout(()=>t.classList.add("active"),10);const a=()=>{t.classList.remove("active"),setTimeout(()=>t.remove(),200)};t.querySelector(".export-cancel-btn").addEventListener("click",a),t.addEventListener("click",e=>{e.target===t&&a()}),t.querySelectorAll(".export-option-btn").forEach(t=>{t.addEventListener("click",()=>{const n=t.dataset.scope;a(),async function(t="site"){if(!T)return;const n=T.innerHTML;T.disabled=!0;const a=document.createElement("div");a.className="export-loading-overlay",a.innerHTML='\n <div class="export-loading-modal">\n <div class="export-loading-header">\n <div class="export-loading-title">COMPILING DOCUMENTATION</div>\n <div class="export-loading-subtitle">Assembling all sections into unified document</div>\n </div>\n <div class="export-loading-progress">\n <div class="export-loading-bar">\n <div class="export-loading-fill"></div>\n </div>\n <div class="export-loading-status-container">\n <div class="export-loading-status">Initializing...</div>\n </div>\n </div>\n <div class="export-loading-scanner">\n <div class="scanner-line"></div>\n </div>\n </div>\n ',document.body.appendChild(a),setTimeout(()=>a.classList.add("active"),10);const o=a.querySelector(".export-loading-fill"),i=a.querySelector(".export-loading-status");try{let n;if("page"===t){const t=U(),a=f(e).find(e=>e.id===t);n=a?[a]:[]}else n=f(e);if(0===n.length)return alert("No content available to export."),a.remove(),void(T.disabled=!1);const r=[],c=n.length;let l=0;for(const e of n){l++;const n=l/c*100;o.style.width=`${n}%`,i.textContent="page"===t?`Exporting: ${e.title}`:`Processing section ${l} of ${c}: ${e.title}`,await new Promise(e=>setTimeout(e,50));try{const t=await import(e.module),n=t.load||t.default;if("function"!=typeof n)continue;const a=me((await n()).html||"");r.push({section:e,html:a})}catch(t){console.error("Failed to include section in export",e.id,t)}}i.textContent="Generating document...",await new Promise(e=>setTimeout(e,200));const d=v(r,s);i.textContent="Opening print dialog...",await new Promise(e=>setTimeout(e,100)),function(e){document.getElementById("exportPrintFrame")?.remove();const t=document.createElement("iframe");t.id="exportPrintFrame",t.setAttribute("aria-hidden","true"),t.setAttribute("tabindex","-1"),t.style.cssText="position:fixed;width:0;height:0;border:0;left:-9999px;top:0;visibility:hidden;",document.body.appendChild(t);let n=!1;const a=()=>{n||(n=!0,setTimeout(()=>t.remove(),500))},o=t.contentWindow.document;o.open(),o.write(e),o.close();const s=()=>{const e=t.contentWindow;try{e.addEventListener("afterprint",a,{once:!0}),e.focus(),e.print(),setTimeout(a,6e4)}catch(e){console.error("Export print failed",e),t.remove()}};"complete"===t.contentWindow.document.readyState?setTimeout(s,60):t.addEventListener("load",()=>setTimeout(s,60),{once:!0})}(d),a.classList.remove("active"),setTimeout(()=>a.remove(),300)}catch(e){console.error("Export failed",e),alert("Export failed. Check console for details."),a.remove()}finally{T.disabled=!1,T.innerHTML=n}}(n)})})}):T.remove());const de={page:{title:"Current Page",desc:"Export only this section"},site:{title:"Entire Site",desc:"Export all documentation"}};function me(e){const t=document.createElement("div");t.innerHTML=e,t.querySelectorAll("script").forEach(e=>e.remove()),t.querySelectorAll("button").forEach(e=>e.removeAttribute("onclick")),t.querySelectorAll("mark.hl").forEach(e=>{const t=document.createTextNode(e.textContent||"");e.replaceWith(t)});const n=t.querySelector("section");return n?n.innerHTML:t.innerHTML}function pe(e,t=!1){j=e.trim(),t&&(j?localStorage.setItem(M,j):localStorage.removeItem(M)),ue()}function ue(e=!1){E&&function(e,t,{scrollToFirst:n=!1}={}){if(!e)return;if(function(e){e&&e.querySelectorAll("mark.hl").forEach(e=>{const t=document.createTextNode(e.textContent||"");e.replaceWith(t)})}(e),!t)return;const a=t.split(/\s+/).map(e=>e.trim()).filter(Boolean);if(!a.length)return;const o=a.map(e=>e.toLowerCase()),s=new Set(["SCRIPT","STYLE","CODE","PRE"]),i=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(e){if(!e.nodeValue||!e.nodeValue.trim())return NodeFilter.FILTER_REJECT;const t=e.parentNode;return t&&s.has(t.tagName)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}),c=[];let l;for(;l=i.nextNode();){const e=l.nodeValue.toLowerCase();o.some(t=>e.includes(t))&&c.push(l)}const d=new RegExp(`(${a.map(r).join("|")})`,"gi");c.forEach(e=>{const t=e.nodeValue,n=[];let a=0;t.replace(d,(e,o,s)=>{s>a&&n.push(document.createTextNode(t.slice(a,s)));const i=document.createElement("mark");return i.className="hl",i.textContent=e,n.push(i),a=s+e.length,e}),a<t.length&&n.push(document.createTextNode(t.slice(a)));const o=document.createDocumentFragment();n.forEach(e=>o.appendChild(e)),e.parentNode.replaceChild(o,e)}),n&&requestAnimationFrame(()=>{const t=e.querySelector("mark.hl");t&&t.scrollIntoView({behavior:"smooth",block:"center"})})}(E,j,{scrollToFirst:e})}if(w&&A){const e=()=>document.body.dataset.navCollapse||"overlay",t=()=>window.innerWidth<=960||"overlay"===e(),n=()=>{A.classList.remove("mobile-open"),document.body.classList.remove("menu-open"),w.setAttribute("aria-expanded","false")};window.innerWidth>960&&"overlay"!==e()&&w.setAttribute("aria-expanded","true"),w.addEventListener("click",()=>{if(window.innerWidth>960&&"overlay"!==e()){const e=document.body.classList.toggle("nav-collapsed");return void w.setAttribute("aria-expanded",String(!e))}const t=A.classList.toggle("mobile-open");document.body.classList.toggle("menu-open",t),w.setAttribute("aria-expanded",String(t))}),x.addEventListener("click",e=>{if(!t())return;const a=e.target.closest(".nav-item, .nav-leaf, .nav-parent");a&&(a.classList.contains("nav-item")||a.classList.contains("nav-leaf"))&&n()}),document.addEventListener("click",e=>{t()&&A.classList.contains("mobile-open")&&!A.contains(e.target)&&!w.contains(e.target)&&n()})}const ve=document.getElementById("brandHome");ve&&ve.addEventListener("click",e=>{e.preventDefault(),O(t)});
package/site/index.html CHANGED
@@ -23,10 +23,10 @@
23
23
  document.documentElement.classList.add('has-js');
24
24
  </script>
25
25
  <link rel="icon" type="image/png" href="./favicon.png" />
26
- <link rel="stylesheet" href="./styles.bdb30ba34de5.css" />
27
- <meta name="x-build" content="2026-06-28T00:29:01.805Z" />
26
+ <link rel="stylesheet" href="./styles.781144256628.css" />
27
+ <meta name="x-build" content="2026-06-28T17:57:19.490Z" />
28
28
  </head>
29
- <body data-nav-collapse="overlay" data-page-toc="rail" data-page-toc-min="4">
29
+ <body data-code-copy data-nav-collapse="overlay" data-page-toc="right" data-page-toc-min="4" data-reading-progress>
30
30
  <a class="skip-link" href="#app">Skip to content</a>
31
31
  <header class="shell topbar">
32
32
  <button type="button" id="mobileMenuToggle" class="mobile-menu-toggle" aria-label="Toggle navigation" aria-expanded="false">
@@ -69,6 +69,6 @@
69
69
  <ul id="commandList" class="cmd-list" role="listbox"></ul>
70
70
  </div>
71
71
  </div>
72
- <script type="module" src="./app.b987cce735d6.js"></script>
72
+ <script type="module" src="./app.30b49ee65857.js"></script>
73
73
  </body>
74
74
  </html>
@@ -0,0 +1 @@
1
+ const e=[],t=[];export function prefersReducedMotion(){return Boolean("undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches)}export function registerEffect(e){"function"==typeof e&&t.push(e)}export function teardownPageEffects(){for(;e.length;){const t=e.pop();try{t()}catch{}}}export function initPageEffects(n){if(teardownPageEffects(),!n)return;const o={reducedMotion:prefersReducedMotion()};for(const r of t)try{const t=r(n,o);"function"==typeof t&&e.push(t)}catch{}}function n(){return document.querySelector(".canvas")||document.scrollingElement||document.documentElement}registerEffect(function(e,t){const n=e.querySelectorAll("[data-reveal]");if(!n.length)return;if(t.reducedMotion||"function"!=typeof IntersectionObserver)return void n.forEach(e=>e.classList.add("is-revealed"));const o=new IntersectionObserver(e=>{for(const t of e)t.isIntersecting&&(t.target.classList.add("is-revealed"),o.unobserve(t.target))},{threshold:.12,rootMargin:"0px 0px -8% 0px"});return n.forEach(e=>o.observe(e)),()=>o.disconnect()}),registerEffect(function(e,t){const n=e.querySelectorAll("[data-reveal-stagger]");if(!n.length)return;if(n.forEach(e=>{const t=(e=>{const t=parseInt(e.getAttribute("data-reveal-stagger"),10);return Number.isFinite(t)&&t>0?t:90})(e);Array.from(e.children).forEach((e,n)=>{e.style.setProperty("--reveal-delay",n*t+"ms")})}),t.reducedMotion||"function"!=typeof IntersectionObserver)return void n.forEach(e=>Array.from(e.children).forEach(e=>e.classList.add("is-revealed")));const o=new IntersectionObserver(e=>{for(const t of e)t.isIntersecting&&(Array.from(t.target.children).forEach(e=>e.classList.add("is-revealed")),o.unobserve(t.target))},{threshold:.12,rootMargin:"0px 0px -8% 0px"});return n.forEach(e=>o.observe(e)),()=>o.disconnect()}),registerEffect(function(e){if("function"!=typeof HTMLDialogElement)return;const t=e.querySelectorAll("[data-pe-zoom]");if(!t.length)return;const n=[];return t.forEach(e=>{const t=e.matches("img")?e:e.querySelector("img");if(!t||t.closest(".pe-zoom-trigger"))return;const o=document.createElement("button");o.type="button",o.className="pe-zoom-trigger",o.setAttribute("aria-label","Enlarge image"+(t.alt?`: ${t.alt}`:"")),t.replaceWith(o),o.appendChild(t);const r=()=>function(e){const t=document.createElement("dialog");t.className="pe-zoom-dialog";const n=document.createElement("button");n.type="button",n.className="pe-zoom-close",n.setAttribute("aria-label","Close"),n.textContent="×";const o=document.createElement("img");o.src=e.currentSrc||e.src,o.alt=e.alt||"",t.append(n,o),document.body.appendChild(t),n.addEventListener("click",()=>t.close()),t.addEventListener("click",e=>{e.target===t&&t.close()}),t.addEventListener("close",()=>t.remove()),t.showModal(),n.focus()}(t);o.addEventListener("click",r),n.push(()=>{o.removeEventListener("click",r),o.replaceWith(t)})}),()=>n.forEach(e=>e())}),registerEffect(function(e,t){const o=document.body.dataset.pageToc;if("rail"!==o&&"top"!==o&&"left"!==o&&"right"!==o)return;const r=e.querySelector(".doc.markdown .doc-content");if(!r)return;const c=Array.from(r.querySelectorAll("h2, h3")).filter(e=>!e.closest(".doc-fortemi-panel, .pe-hero, .pe-banner, .pe-card-grid, .pe-snap, .pe-scrolly")),s=parseInt(document.body.dataset.pageTocMin,10),i=Number.isFinite(s)&&s>0?s:3;if(c.length<i)return;const a=new Set;r.querySelectorAll("[id]").forEach(e=>a.add(e.id));const l=n();let d=!1,u=0;const p=e=>{d=!0,u&&clearTimeout(u),u=setTimeout(()=>{d=!1},t.reducedMotion?60:720);const n=l.scrollTop+(e.getBoundingClientRect().top-l.getBoundingClientRect().top)-12;(function(e,t,n){if(t=Math.max(0,t),e._peScrollRaf&&(cancelAnimationFrame(e._peScrollRaf),e._peScrollRaf=0),n||"function"!=typeof requestAnimationFrame)return void(e.scrollTop=t);const o=e.scrollTop,r=t-o;if(Math.abs(r)<2)return void(e.scrollTop=t);const c=Math.min(600,Math.max(220,.5*Math.abs(r)));let s=null;const i=t=>{null===s&&(s=t);const n=Math.min(1,(t-s)/c);e.scrollTop=o+r*(e=>1-Math.pow(1-e,3))(n),e._peScrollRaf=n<1?requestAnimationFrame(i):0};e._peScrollRaf=requestAnimationFrame(i)})(l,n,t.reducedMotion),e.setAttribute("tabindex","-1"),e.focus({preventScroll:!0})},m=document.createElement("nav"),f="left"===o||"right"===o?" page-toc--navstyle":"";m.className=`page-toc page-toc--${o}${f}`,m.setAttribute("aria-label","On this page");const g=document.createElement("details");g.className="page-toc__disc";const h=document.createElement("summary");h.className="page-toc__title";const v=document.createElement("span");v.className="page-toc__title-text",v.textContent="On this page",h.appendChild(v);let E=null;"rail"===o&&(E=document.createElement("button"),E.type="button",E.className="page-toc__pin",E.innerHTML='<svg viewBox="0 0 16 16" width="13" height="13" aria-hidden="true"><path fill="currentColor" d="M9.4 1 8 2.4l.5.6-2.9 2.9-2-.4-1.4 1.4 2.9 2.9L1 14.9 5 11l2.9 2.9 1.4-1.4-.4-2 2.9-2.9.6.5L13.9 6.6 9.4 1z"/></svg>',h.appendChild(E));const y=document.createElement("div");y.className="page-toc__body";const b=document.createElement("div");b.className="page-toc__controls";const L=document.createElement("button");L.type="button",L.className="page-toc__btn",L.innerHTML='<span aria-hidden="true">↑</span> Prev',L.setAttribute("aria-label","Previous section");const w=document.createElement("button");w.type="button",w.className="page-toc__btn",w.innerHTML='Next <span aria-hidden="true">↓</span>',w.setAttribute("aria-label","Next section"),b.append(L,w);const A=document.createElement("ol");A.className="page-toc__list";const S=[],x=new Map,C=new Map;c.forEach((e,t)=>{e.id||(e.id=function(e,t){let n=String(e||"").toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")||"section",o=n,r=2;for(;t.has(o);)o=`${n}-${r++}`;return t.add(o),o}(e.textContent,a)),C.set(e,t);const n=document.createElement("li");n.className="H3"===e.tagName?"page-toc__item page-toc__item--sub":"page-toc__item";const o=document.createElement("a");o.href=`#${e.id}`,o.textContent=e.textContent||"";const r=n=>{n.preventDefault(),n.stopPropagation(),q=t,k(),p(e)};o.addEventListener("click",r),n.appendChild(o),A.appendChild(n),S.push({a:o,onClick:r}),x.set(e,o)}),y.append(b,A),g.append(h,y),m.appendChild(g);const M="left"===o?document.querySelector(".sidebar-inner"):null;M?M.appendChild(m):r.insertBefore(m,r.firstChild);let _=null,q=-1;const k=()=>{L.disabled=q<=0,w.disabled=q<0||q>=c.length-1},T=e=>{if(e!==_){_=e;for(const{a:e}of S)e.removeAttribute("aria-current");const t=x.get(e);t&&t.setAttribute("aria-current","true")}d||(q=c.indexOf(e),k())},N=()=>{q<0&&(q=c.indexOf(_)),q>0&&(q-=1,k(),p(c[q]))},F=()=>{q<0&&(q=c.indexOf(_)),q<c.length-1&&(q+=1,k(),p(c[q]))};L.addEventListener("click",N),w.addEventListener("click",F);let H=!1;const R=()=>{if(H=!1,l.scrollTop+l.clientHeight>=l.scrollHeight-2)return void T(c[c.length-1]);const e=l.getBoundingClientRect().top;let t=c[0];for(const n of c){if(!(n.getBoundingClientRect().top-e<=96))break;t=n}T(t)},I=()=>{H||(H=!0,requestAnimationFrame(R))};R(),l.addEventListener("scroll",I,{passive:!0});const O=[];if("rail"===o){const e=window.matchMedia("(min-width: 60rem)"),t=()=>{g.open=e.matches};t(),e.addEventListener&&e.addEventListener("change",t),O.push(()=>{e.removeEventListener&&e.removeEventListener("change",t)});let n=!0;try{n="false"!==window.localStorage.getItem("pagenary:toc-pinned")}catch(e){}const o=()=>{m.classList.toggle("is-unpinned",!n),E.setAttribute("aria-pressed",String(n)),E.title=n?"Unpin — let the panel auto-hide":"Pin the panel open"},r=e=>{e.preventDefault(),e.stopPropagation(),n=!n;try{window.localStorage.setItem("pagenary:toc-pinned",String(n))}catch(e){}o()};E.addEventListener("click",r),o(),O.push(()=>E.removeEventListener("click",r));const c=t=>{e.matches&&t.preventDefault()};h.addEventListener("click",c),O.push(()=>h.removeEventListener("click",c));let s=0;const i=e=>{window.clearTimeout(s),m.classList.add("is-peeking"),e&&(s=window.setTimeout(()=>m.classList.remove("is-peeking"),e))},a=()=>{window.clearTimeout(s),s=window.setTimeout(()=>m.classList.remove("is-peeking"),180)},l=()=>i(),d=()=>{m.classList.contains("is-unpinned")&&i(3e3)};g.addEventListener("mouseenter",l),g.addEventListener("mouseleave",a),g.addEventListener("focusin",l),g.addEventListener("focusout",a),g.addEventListener("click",d),O.push(()=>{g.removeEventListener("mouseenter",l),g.removeEventListener("mouseleave",a),g.removeEventListener("focusin",l),g.removeEventListener("focusout",a),g.removeEventListener("click",d),window.clearTimeout(s)})}else{g.open=!0;const e=e=>e.preventDefault();if(h.addEventListener("click",e),O.push(()=>h.removeEventListener("click",e)),"right"===o){const e=document.createElement("button");e.type="button",e.className="page-toc__collapse",e.innerHTML='<span aria-hidden="true">›</span>',h.appendChild(e);let t=!1;try{t="true"===window.localStorage.getItem("pagenary:toc-collapsed")}catch(e){}const n=()=>{m.classList.toggle("is-collapsed",t),e.setAttribute("aria-expanded",String(!t));const n=t?"Show the on-this-page panel":"Hide the on-this-page panel";e.setAttribute("aria-label",n),e.title=t?"Show on-this-page":"Hide on-this-page"},o=e=>{e.preventDefault(),e.stopPropagation(),t=!t;try{window.localStorage.setItem("pagenary:toc-collapsed",String(t))}catch(e){}n()};e.addEventListener("click",o),n(),O.push(()=>e.removeEventListener("click",o))}}return()=>{l.removeEventListener("scroll",I),L.removeEventListener("click",N),w.removeEventListener("click",F),S.forEach(({a:e,onClick:t})=>e.removeEventListener("click",t)),O.forEach(e=>e()),m.remove()}}),registerEffect(function(e,t){const o=e.querySelectorAll(".pe-scrolly");if(!o.length)return;const r=n(),c=[];return o.forEach(e=>{const t=Array.from(e.querySelectorAll(".pe-scrolly__steps [data-pe-step]")),n=Array.from(e.querySelectorAll(".pe-scrolly__stage [data-pe-step]"));if(!t.length||!n.length)return;let o=null;const s=e=>{e!==o&&(o=e,n.forEach(t=>t.classList.toggle("is-active",t.dataset.peStep===e)))};s(t[0].dataset.peStep);let i=!1;const a=()=>{i=!1;const e=r.getBoundingClientRect().top,n=.45*r.clientHeight;let o=t[0];for(const r of t){if(!(r.getBoundingClientRect().top-e<=n))break;o=r}s(o.dataset.peStep)},l=()=>{i||(i=!0,requestAnimationFrame(a))};a(),r.addEventListener("scroll",l,{passive:!0}),c.push(()=>r.removeEventListener("scroll",l))}),()=>c.forEach(e=>e())}),registerEffect(function(){const e=document.querySelector(".canvas")||document.scrollingElement||document.documentElement;let t=document.querySelector(".reading-progress");t||(t=document.createElement("div"),t.className="reading-progress",t.setAttribute("aria-hidden","true"),t.innerHTML='<span class="reading-progress-fill"></span>',document.body.appendChild(t));const n=t.querySelector(".reading-progress-fill"),o=()=>{const o=document.body.hasAttribute("data-reading-progress");if(t.hidden=!o,!o)return void(n.style.width="0");const r=e.scrollHeight-e.clientHeight,c=r>0?Math.min(100,Math.max(0,e.scrollTop/r*100)):0;n.style.width=`${c}%`},r="function"==typeof MutationObserver?new MutationObserver(o):null;return r&&r.observe(document.body,{attributes:!0,attributeFilter:["data-reading-progress"]}),o(),e.addEventListener("scroll",o,{passive:!0}),window.addEventListener("resize",o,{passive:!0}),()=>{r&&r.disconnect(),e.removeEventListener("scroll",o),window.removeEventListener("resize",o)}}),registerEffect(function(e,t){if(t.reducedMotion||"function"!=typeof requestAnimationFrame)return;const o=e.querySelectorAll("[data-pe-parallax]");if(!o.length)return;const r=n(),c=[];if(o.forEach(e=>{const t=e.querySelector(".pe-hero-bg"),n=t||e,o=parseFloat(e.getAttribute("data-pe-parallax")),r=Number.isFinite(o)?Math.max(0,Math.min(.5,o)):.16,s=t?.12:.18;c.push({el:e,target:n,speed:r,maxFrac:s})}),!c.length)return;let s=!1;const i=()=>{s=!1;const e=r.scrollTop||0;for(const{el:t,target:n,speed:o,maxFrac:r}of c){const c=t.offsetTop-e,s=t.clientHeight*r,i=Math.max(-s,Math.min(s,-c*o));n.style.transform=`translate3d(0, ${i.toFixed(1)}px, 0)`}},a=()=>{s||(s=!0,requestAnimationFrame(i))};return i(),r.addEventListener("scroll",a,{passive:!0}),window.addEventListener("resize",a,{passive:!0}),()=>{r.removeEventListener("scroll",a),window.removeEventListener("resize",a)}}),registerEffect(function(e){const t=e.querySelectorAll(".pe-hero--sticky");if(!t.length||"function"!=typeof requestAnimationFrame)return;const o=n();let r=!1;const c=()=>{r=!1;const e="function"==typeof getComputedStyle?getComputedStyle(o):null,n=e&&parseFloat(e.paddingTop)||0,c=(o.getBoundingClientRect?o.getBoundingClientRect().top:0)+n;t.forEach(e=>{const t=e.getBoundingClientRect().top<=c+1;e.classList.toggle("is-stuck",t)})},s=()=>{r||(r=!0,requestAnimationFrame(c))};return c(),o.addEventListener("scroll",s,{passive:!0}),()=>o.removeEventListener("scroll",s)}),registerEffect(function(e,t){if(!document.body.hasAttribute("data-living-scroll")&&!document.body.hasAttribute("data-blog-living-scroll"))return;const n=e.querySelector(".doc.markdown .doc-content");if(!n)return;const o=Array.from(n.children);if(!o.length)return;if(t.reducedMotion||"function"!=typeof IntersectionObserver)return void o.forEach(e=>e.classList.add("is-living-revealed"));const r=new IntersectionObserver(e=>{for(const t of e)t.isIntersecting&&(t.target.classList.add("is-living-revealed"),r.unobserve(t.target))},{threshold:0,rootMargin:"0px"});return o.forEach(e=>r.observe(e)),()=>r.disconnect()}),registerEffect(function(e){const t=e.querySelectorAll(".pe-accordion[data-pe-single]");if(!t.length)return;const n=[];return t.forEach(e=>{const t=Array.from(e.querySelectorAll(":scope > details"));t.forEach(e=>{const o=()=>{if(e.open)for(const n of t)n!==e&&(n.open=!1)};e.addEventListener("toggle",o),n.push([e,o])})}),()=>n.forEach(([e,t])=>e.removeEventListener("toggle",t))}),registerEffect(function(e){if(!document.body.hasAttribute("data-code-copy"))return;const t=e&&e.querySelector?e:document,n=Array.from(t.querySelectorAll(".doc-content pre")),o=[];for(const e of n){const t=e.querySelector("code");if(!t||e.querySelector(":scope > .code-copy"))continue;const n=document.createElement("button");n.type="button",n.className="code-copy",n.setAttribute("aria-label","Copy code to clipboard"),n.innerHTML='<span class="code-copy__label">Copy</span>';let r=0;const c=(e,t)=>{n.querySelector(".code-copy__label").textContent=e,n.classList.toggle("is-copied",!!t),n.setAttribute("aria-label",t?"Copied to clipboard":"Copy code to clipboard")},s=async()=>{const e=t.innerText.replace(/\n$/,"");let n=!0;try{if(navigator.clipboard&&navigator.clipboard.writeText)await navigator.clipboard.writeText(e);else{const t=document.createElement("textarea");t.value=e,t.style.cssText="position:fixed;top:-9999px;opacity:0",document.body.appendChild(t),t.select(),n=document.execCommand("copy"),t.remove()}}catch{n=!1}c(n?"Copied":"Press ⌘C",n),window.clearTimeout(r),r=window.setTimeout(()=>c("Copy",!1),1600)};n.addEventListener("click",s),e.classList.add("has-code-copy"),e.appendChild(n),o.push(()=>{window.clearTimeout(r),n.removeEventListener("click",s),n.remove(),e.classList.remove("has-code-copy")})}return()=>o.forEach(e=>e())});
@@ -1 +1 @@
1
- const e=[],t=[];export function prefersReducedMotion(){return Boolean("undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches)}export function registerEffect(e){"function"==typeof e&&t.push(e)}export function teardownPageEffects(){for(;e.length;){const t=e.pop();try{t()}catch{}}}export function initPageEffects(n){if(teardownPageEffects(),!n)return;const r={reducedMotion:prefersReducedMotion()};for(const o of t)try{const t=o(n,r);"function"==typeof t&&e.push(t)}catch{}}function n(){return document.querySelector(".canvas")||document.scrollingElement||document.documentElement}registerEffect(function(e,t){const n=e.querySelectorAll("[data-reveal]");if(!n.length)return;if(t.reducedMotion||"function"!=typeof IntersectionObserver)return void n.forEach(e=>e.classList.add("is-revealed"));const r=new IntersectionObserver(e=>{for(const t of e)t.isIntersecting&&(t.target.classList.add("is-revealed"),r.unobserve(t.target))},{threshold:.12,rootMargin:"0px 0px -8% 0px"});return n.forEach(e=>r.observe(e)),()=>r.disconnect()}),registerEffect(function(e,t){const n=e.querySelectorAll("[data-reveal-stagger]");if(!n.length)return;if(n.forEach(e=>{const t=(e=>{const t=parseInt(e.getAttribute("data-reveal-stagger"),10);return Number.isFinite(t)&&t>0?t:90})(e);Array.from(e.children).forEach((e,n)=>{e.style.setProperty("--reveal-delay",n*t+"ms")})}),t.reducedMotion||"function"!=typeof IntersectionObserver)return void n.forEach(e=>Array.from(e.children).forEach(e=>e.classList.add("is-revealed")));const r=new IntersectionObserver(e=>{for(const t of e)t.isIntersecting&&(Array.from(t.target.children).forEach(e=>e.classList.add("is-revealed")),r.unobserve(t.target))},{threshold:.12,rootMargin:"0px 0px -8% 0px"});return n.forEach(e=>r.observe(e)),()=>r.disconnect()}),registerEffect(function(e){if("function"!=typeof HTMLDialogElement)return;const t=e.querySelectorAll("[data-pe-zoom]");if(!t.length)return;const n=[];return t.forEach(e=>{const t=e.matches("img")?e:e.querySelector("img");if(!t||t.closest(".pe-zoom-trigger"))return;const r=document.createElement("button");r.type="button",r.className="pe-zoom-trigger",r.setAttribute("aria-label","Enlarge image"+(t.alt?`: ${t.alt}`:"")),t.replaceWith(r),r.appendChild(t);const o=()=>function(e){const t=document.createElement("dialog");t.className="pe-zoom-dialog";const n=document.createElement("button");n.type="button",n.className="pe-zoom-close",n.setAttribute("aria-label","Close"),n.textContent="×";const r=document.createElement("img");r.src=e.currentSrc||e.src,r.alt=e.alt||"",t.append(n,r),document.body.appendChild(t),n.addEventListener("click",()=>t.close()),t.addEventListener("click",e=>{e.target===t&&t.close()}),t.addEventListener("close",()=>t.remove()),t.showModal(),n.focus()}(t);r.addEventListener("click",o),n.push(()=>{r.removeEventListener("click",o),r.replaceWith(t)})}),()=>n.forEach(e=>e())}),registerEffect(function(e,t){const r=document.body.dataset.pageToc;if("rail"!==r&&"top"!==r)return;const o=e.querySelector(".doc.markdown .doc-content");if(!o)return;const c=Array.from(o.querySelectorAll("h2, h3")).filter(e=>!e.closest(".doc-fortemi-panel, .pe-hero, .pe-banner, .pe-card-grid, .pe-snap, .pe-scrolly")),s=parseInt(document.body.dataset.pageTocMin,10),a=Number.isFinite(s)&&s>0?s:3;if(c.length<a)return;const i=new Set;o.querySelectorAll("[id]").forEach(e=>i.add(e.id));const l=n();let d=!1,u=0;const p=e=>{d=!0,u&&clearTimeout(u),u=setTimeout(()=>{d=!1},t.reducedMotion?60:720);const n=l.scrollTop+(e.getBoundingClientRect().top-l.getBoundingClientRect().top)-12;(function(e,t,n){if(t=Math.max(0,t),e._peScrollRaf&&(cancelAnimationFrame(e._peScrollRaf),e._peScrollRaf=0),n||"function"!=typeof requestAnimationFrame)return void(e.scrollTop=t);const r=e.scrollTop,o=t-r;if(Math.abs(o)<2)return void(e.scrollTop=t);const c=Math.min(600,Math.max(220,.5*Math.abs(o)));let s=null;const a=t=>{null===s&&(s=t);const n=Math.min(1,(t-s)/c);e.scrollTop=r+o*(e=>1-Math.pow(1-e,3))(n),e._peScrollRaf=n<1?requestAnimationFrame(a):0};e._peScrollRaf=requestAnimationFrame(a)})(l,n,t.reducedMotion),e.setAttribute("tabindex","-1"),e.focus({preventScroll:!0})},f=document.createElement("nav");f.className=`page-toc page-toc--${r}`,f.setAttribute("aria-label","On this page");const m=document.createElement("details");m.className="page-toc__disc";const g=document.createElement("summary");g.className="page-toc__title",g.textContent="On this page";const h=document.createElement("div");h.className="page-toc__body";const v=document.createElement("div");v.className="page-toc__controls";const E=document.createElement("button");E.type="button",E.className="page-toc__btn",E.innerHTML='<span aria-hidden="true">↑</span> Prev',E.setAttribute("aria-label","Previous section");const y=document.createElement("button");y.type="button",y.className="page-toc__btn",y.innerHTML='Next <span aria-hidden="true">↓</span>',y.setAttribute("aria-label","Next section"),v.append(E,y);const b=document.createElement("ol"),A=[],L=new Map,M=new Map;c.forEach((e,t)=>{e.id||(e.id=function(e,t){let n=String(e||"").toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")||"section",r=n,o=2;for(;t.has(r);)r=`${n}-${o++}`;return t.add(r),r}(e.textContent,i)),M.set(e,t);const n=document.createElement("li");n.className="H3"===e.tagName?"page-toc__item page-toc__item--sub":"page-toc__item";const r=document.createElement("a");r.href=`#${e.id}`,r.textContent=e.textContent||"";const o=n=>{n.preventDefault(),n.stopPropagation(),S=t,x(),p(e)};r.addEventListener("click",o),n.appendChild(r),b.appendChild(n),A.push({a:r,onClick:o}),L.set(e,r)}),h.append(v,b),m.append(g,h),f.appendChild(m),o.insertBefore(f,o.firstChild);let w=null,S=-1;const x=()=>{E.disabled=S<=0,y.disabled=S<0||S>=c.length-1},q=()=>{S<0&&(S=c.indexOf(w)),S>0&&(S-=1,x(),p(c[S]))},C=()=>{S<0&&(S=c.indexOf(w)),S<c.length-1&&(S+=1,x(),p(c[S]))};E.addEventListener("click",q),y.addEventListener("click",C);let _=!1;const F=()=>{_=!1;const e=l.getBoundingClientRect().top;let t=c[0];for(const n of c){if(!(n.getBoundingClientRect().top-e<=96))break;t=n}(e=>{if(e!==w){w=e;for(const{a:e}of A)e.removeAttribute("aria-current");const t=L.get(e);t&&t.setAttribute("aria-current","true")}d||(S=c.indexOf(e),x())})(t)},k=()=>{_||(_=!0,requestAnimationFrame(F))};F(),l.addEventListener("scroll",k,{passive:!0});const N=window.matchMedia("(min-width: 60rem)"),T=()=>{m.open=N.matches};return T(),N.addEventListener&&N.addEventListener("change",T),()=>{l.removeEventListener("scroll",k),N.removeEventListener&&N.removeEventListener("change",T),E.removeEventListener("click",q),y.removeEventListener("click",C),A.forEach(({a:e,onClick:t})=>e.removeEventListener("click",t)),f.remove()}}),registerEffect(function(e,t){const r=e.querySelectorAll(".pe-scrolly");if(!r.length)return;const o=n(),c=[];return r.forEach(e=>{const t=Array.from(e.querySelectorAll(".pe-scrolly__steps [data-pe-step]")),n=Array.from(e.querySelectorAll(".pe-scrolly__stage [data-pe-step]"));if(!t.length||!n.length)return;let r=null;const s=e=>{e!==r&&(r=e,n.forEach(t=>t.classList.toggle("is-active",t.dataset.peStep===e)))};s(t[0].dataset.peStep);let a=!1;const i=()=>{a=!1;const e=o.getBoundingClientRect().top,n=.45*o.clientHeight;let r=t[0];for(const o of t){if(!(o.getBoundingClientRect().top-e<=n))break;r=o}s(r.dataset.peStep)},l=()=>{a||(a=!0,requestAnimationFrame(i))};i(),o.addEventListener("scroll",l,{passive:!0}),c.push(()=>o.removeEventListener("scroll",l))}),()=>c.forEach(e=>e())}),registerEffect(function(){const e=document.querySelector(".canvas")||document.scrollingElement||document.documentElement;let t=document.querySelector(".reading-progress");t||(t=document.createElement("div"),t.className="reading-progress",t.setAttribute("aria-hidden","true"),t.innerHTML='<span class="reading-progress-fill"></span>',document.body.appendChild(t));const n=t.querySelector(".reading-progress-fill"),r=()=>{const r=document.body.hasAttribute("data-reading-progress");if(t.hidden=!r,!r)return void(n.style.width="0");const o=e.scrollHeight-e.clientHeight,c=o>0?Math.min(100,Math.max(0,e.scrollTop/o*100)):0;n.style.width=`${c}%`},o="function"==typeof MutationObserver?new MutationObserver(r):null;return o&&o.observe(document.body,{attributes:!0,attributeFilter:["data-reading-progress"]}),r(),e.addEventListener("scroll",r,{passive:!0}),window.addEventListener("resize",r,{passive:!0}),()=>{o&&o.disconnect(),e.removeEventListener("scroll",r),window.removeEventListener("resize",r)}}),registerEffect(function(e,t){if(t.reducedMotion||"function"!=typeof requestAnimationFrame)return;const r=e.querySelectorAll("[data-pe-parallax]");if(!r.length)return;const o=n(),c=[];if(r.forEach(e=>{const t=e.querySelector(".pe-hero-bg"),n=t||e,r=parseFloat(e.getAttribute("data-pe-parallax")),o=Number.isFinite(r)?Math.max(0,Math.min(.5,r)):.16,s=t?.12:.18;c.push({el:e,target:n,speed:o,maxFrac:s})}),!c.length)return;let s=!1;const a=()=>{s=!1;const e=o.scrollTop||0;for(const{el:t,target:n,speed:r,maxFrac:o}of c){const c=t.offsetTop-e,s=t.clientHeight*o,a=Math.max(-s,Math.min(s,-c*r));n.style.transform=`translate3d(0, ${a.toFixed(1)}px, 0)`}},i=()=>{s||(s=!0,requestAnimationFrame(a))};return a(),o.addEventListener("scroll",i,{passive:!0}),window.addEventListener("resize",i,{passive:!0}),()=>{o.removeEventListener("scroll",i),window.removeEventListener("resize",i)}}),registerEffect(function(e){const t=e.querySelectorAll(".pe-hero--sticky");if(!t.length||"function"!=typeof requestAnimationFrame)return;const r=n();let o=!1;const c=()=>{o=!1;const e="function"==typeof getComputedStyle?getComputedStyle(r):null,n=e&&parseFloat(e.paddingTop)||0,c=(r.getBoundingClientRect?r.getBoundingClientRect().top:0)+n;t.forEach(e=>{const t=e.getBoundingClientRect().top<=c+1;e.classList.toggle("is-stuck",t)})},s=()=>{o||(o=!0,requestAnimationFrame(c))};return c(),r.addEventListener("scroll",s,{passive:!0}),()=>r.removeEventListener("scroll",s)}),registerEffect(function(e,t){if(!document.body.hasAttribute("data-living-scroll")&&!document.body.hasAttribute("data-blog-living-scroll"))return;const n=e.querySelector(".doc.markdown .doc-content");if(!n)return;const r=Array.from(n.children);if(!r.length)return;if(t.reducedMotion||"function"!=typeof IntersectionObserver)return void r.forEach(e=>e.classList.add("is-living-revealed"));const o=new IntersectionObserver(e=>{for(const t of e)t.isIntersecting&&(t.target.classList.add("is-living-revealed"),o.unobserve(t.target))},{threshold:0,rootMargin:"0px"});return r.forEach(e=>o.observe(e)),()=>o.disconnect()}),registerEffect(function(e){const t=e.querySelectorAll(".pe-accordion[data-pe-single]");if(!t.length)return;const n=[];return t.forEach(e=>{const t=Array.from(e.querySelectorAll(":scope > details"));t.forEach(e=>{const r=()=>{if(e.open)for(const n of t)n!==e&&(n.open=!1)};e.addEventListener("toggle",r),n.push([e,r])})}),()=>n.forEach(([e,t])=>e.removeEventListener("toggle",t))});
1
+ const e=[],t=[];export function prefersReducedMotion(){return Boolean("undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches)}export function registerEffect(e){"function"==typeof e&&t.push(e)}export function teardownPageEffects(){for(;e.length;){const t=e.pop();try{t()}catch{}}}export function initPageEffects(n){if(teardownPageEffects(),!n)return;const o={reducedMotion:prefersReducedMotion()};for(const r of t)try{const t=r(n,o);"function"==typeof t&&e.push(t)}catch{}}function n(){return document.querySelector(".canvas")||document.scrollingElement||document.documentElement}registerEffect(function(e,t){const n=e.querySelectorAll("[data-reveal]");if(!n.length)return;if(t.reducedMotion||"function"!=typeof IntersectionObserver)return void n.forEach(e=>e.classList.add("is-revealed"));const o=new IntersectionObserver(e=>{for(const t of e)t.isIntersecting&&(t.target.classList.add("is-revealed"),o.unobserve(t.target))},{threshold:.12,rootMargin:"0px 0px -8% 0px"});return n.forEach(e=>o.observe(e)),()=>o.disconnect()}),registerEffect(function(e,t){const n=e.querySelectorAll("[data-reveal-stagger]");if(!n.length)return;if(n.forEach(e=>{const t=(e=>{const t=parseInt(e.getAttribute("data-reveal-stagger"),10);return Number.isFinite(t)&&t>0?t:90})(e);Array.from(e.children).forEach((e,n)=>{e.style.setProperty("--reveal-delay",n*t+"ms")})}),t.reducedMotion||"function"!=typeof IntersectionObserver)return void n.forEach(e=>Array.from(e.children).forEach(e=>e.classList.add("is-revealed")));const o=new IntersectionObserver(e=>{for(const t of e)t.isIntersecting&&(Array.from(t.target.children).forEach(e=>e.classList.add("is-revealed")),o.unobserve(t.target))},{threshold:.12,rootMargin:"0px 0px -8% 0px"});return n.forEach(e=>o.observe(e)),()=>o.disconnect()}),registerEffect(function(e){if("function"!=typeof HTMLDialogElement)return;const t=e.querySelectorAll("[data-pe-zoom]");if(!t.length)return;const n=[];return t.forEach(e=>{const t=e.matches("img")?e:e.querySelector("img");if(!t||t.closest(".pe-zoom-trigger"))return;const o=document.createElement("button");o.type="button",o.className="pe-zoom-trigger",o.setAttribute("aria-label","Enlarge image"+(t.alt?`: ${t.alt}`:"")),t.replaceWith(o),o.appendChild(t);const r=()=>function(e){const t=document.createElement("dialog");t.className="pe-zoom-dialog";const n=document.createElement("button");n.type="button",n.className="pe-zoom-close",n.setAttribute("aria-label","Close"),n.textContent="×";const o=document.createElement("img");o.src=e.currentSrc||e.src,o.alt=e.alt||"",t.append(n,o),document.body.appendChild(t),n.addEventListener("click",()=>t.close()),t.addEventListener("click",e=>{e.target===t&&t.close()}),t.addEventListener("close",()=>t.remove()),t.showModal(),n.focus()}(t);o.addEventListener("click",r),n.push(()=>{o.removeEventListener("click",r),o.replaceWith(t)})}),()=>n.forEach(e=>e())}),registerEffect(function(e,t){const o=document.body.dataset.pageToc;if("rail"!==o&&"top"!==o&&"left"!==o&&"right"!==o)return;const r=e.querySelector(".doc.markdown .doc-content");if(!r)return;const c=Array.from(r.querySelectorAll("h2, h3")).filter(e=>!e.closest(".doc-fortemi-panel, .pe-hero, .pe-banner, .pe-card-grid, .pe-snap, .pe-scrolly")),s=parseInt(document.body.dataset.pageTocMin,10),i=Number.isFinite(s)&&s>0?s:3;if(c.length<i)return;const a=new Set;r.querySelectorAll("[id]").forEach(e=>a.add(e.id));const l=n();let d=!1,u=0;const p=e=>{d=!0,u&&clearTimeout(u),u=setTimeout(()=>{d=!1},t.reducedMotion?60:720);const n=l.scrollTop+(e.getBoundingClientRect().top-l.getBoundingClientRect().top)-12;(function(e,t,n){if(t=Math.max(0,t),e._peScrollRaf&&(cancelAnimationFrame(e._peScrollRaf),e._peScrollRaf=0),n||"function"!=typeof requestAnimationFrame)return void(e.scrollTop=t);const o=e.scrollTop,r=t-o;if(Math.abs(r)<2)return void(e.scrollTop=t);const c=Math.min(600,Math.max(220,.5*Math.abs(r)));let s=null;const i=t=>{null===s&&(s=t);const n=Math.min(1,(t-s)/c);e.scrollTop=o+r*(e=>1-Math.pow(1-e,3))(n),e._peScrollRaf=n<1?requestAnimationFrame(i):0};e._peScrollRaf=requestAnimationFrame(i)})(l,n,t.reducedMotion),e.setAttribute("tabindex","-1"),e.focus({preventScroll:!0})},m=document.createElement("nav"),f="left"===o||"right"===o?" page-toc--navstyle":"";m.className=`page-toc page-toc--${o}${f}`,m.setAttribute("aria-label","On this page");const g=document.createElement("details");g.className="page-toc__disc";const h=document.createElement("summary");h.className="page-toc__title";const v=document.createElement("span");v.className="page-toc__title-text",v.textContent="On this page",h.appendChild(v);let E=null;"rail"===o&&(E=document.createElement("button"),E.type="button",E.className="page-toc__pin",E.innerHTML='<svg viewBox="0 0 16 16" width="13" height="13" aria-hidden="true"><path fill="currentColor" d="M9.4 1 8 2.4l.5.6-2.9 2.9-2-.4-1.4 1.4 2.9 2.9L1 14.9 5 11l2.9 2.9 1.4-1.4-.4-2 2.9-2.9.6.5L13.9 6.6 9.4 1z"/></svg>',h.appendChild(E));const y=document.createElement("div");y.className="page-toc__body";const b=document.createElement("div");b.className="page-toc__controls";const L=document.createElement("button");L.type="button",L.className="page-toc__btn",L.innerHTML='<span aria-hidden="true">↑</span> Prev',L.setAttribute("aria-label","Previous section");const w=document.createElement("button");w.type="button",w.className="page-toc__btn",w.innerHTML='Next <span aria-hidden="true">↓</span>',w.setAttribute("aria-label","Next section"),b.append(L,w);const A=document.createElement("ol");A.className="page-toc__list";const S=[],x=new Map,C=new Map;c.forEach((e,t)=>{e.id||(e.id=function(e,t){let n=String(e||"").toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")||"section",o=n,r=2;for(;t.has(o);)o=`${n}-${r++}`;return t.add(o),o}(e.textContent,a)),C.set(e,t);const n=document.createElement("li");n.className="H3"===e.tagName?"page-toc__item page-toc__item--sub":"page-toc__item";const o=document.createElement("a");o.href=`#${e.id}`,o.textContent=e.textContent||"";const r=n=>{n.preventDefault(),n.stopPropagation(),q=t,k(),p(e)};o.addEventListener("click",r),n.appendChild(o),A.appendChild(n),S.push({a:o,onClick:r}),x.set(e,o)}),y.append(b,A),g.append(h,y),m.appendChild(g);const M="left"===o?document.querySelector(".sidebar-inner"):null;M?M.appendChild(m):r.insertBefore(m,r.firstChild);let _=null,q=-1;const k=()=>{L.disabled=q<=0,w.disabled=q<0||q>=c.length-1},T=e=>{if(e!==_){_=e;for(const{a:e}of S)e.removeAttribute("aria-current");const t=x.get(e);t&&t.setAttribute("aria-current","true")}d||(q=c.indexOf(e),k())},N=()=>{q<0&&(q=c.indexOf(_)),q>0&&(q-=1,k(),p(c[q]))},F=()=>{q<0&&(q=c.indexOf(_)),q<c.length-1&&(q+=1,k(),p(c[q]))};L.addEventListener("click",N),w.addEventListener("click",F);let H=!1;const R=()=>{if(H=!1,l.scrollTop+l.clientHeight>=l.scrollHeight-2)return void T(c[c.length-1]);const e=l.getBoundingClientRect().top;let t=c[0];for(const n of c){if(!(n.getBoundingClientRect().top-e<=96))break;t=n}T(t)},I=()=>{H||(H=!0,requestAnimationFrame(R))};R(),l.addEventListener("scroll",I,{passive:!0});const O=[];if("rail"===o){const e=window.matchMedia("(min-width: 60rem)"),t=()=>{g.open=e.matches};t(),e.addEventListener&&e.addEventListener("change",t),O.push(()=>{e.removeEventListener&&e.removeEventListener("change",t)});let n=!0;try{n="false"!==window.localStorage.getItem("pagenary:toc-pinned")}catch(e){}const o=()=>{m.classList.toggle("is-unpinned",!n),E.setAttribute("aria-pressed",String(n)),E.title=n?"Unpin — let the panel auto-hide":"Pin the panel open"},r=e=>{e.preventDefault(),e.stopPropagation(),n=!n;try{window.localStorage.setItem("pagenary:toc-pinned",String(n))}catch(e){}o()};E.addEventListener("click",r),o(),O.push(()=>E.removeEventListener("click",r));const c=t=>{e.matches&&t.preventDefault()};h.addEventListener("click",c),O.push(()=>h.removeEventListener("click",c));let s=0;const i=e=>{window.clearTimeout(s),m.classList.add("is-peeking"),e&&(s=window.setTimeout(()=>m.classList.remove("is-peeking"),e))},a=()=>{window.clearTimeout(s),s=window.setTimeout(()=>m.classList.remove("is-peeking"),180)},l=()=>i(),d=()=>{m.classList.contains("is-unpinned")&&i(3e3)};g.addEventListener("mouseenter",l),g.addEventListener("mouseleave",a),g.addEventListener("focusin",l),g.addEventListener("focusout",a),g.addEventListener("click",d),O.push(()=>{g.removeEventListener("mouseenter",l),g.removeEventListener("mouseleave",a),g.removeEventListener("focusin",l),g.removeEventListener("focusout",a),g.removeEventListener("click",d),window.clearTimeout(s)})}else{g.open=!0;const e=e=>e.preventDefault();if(h.addEventListener("click",e),O.push(()=>h.removeEventListener("click",e)),"right"===o){const e=document.createElement("button");e.type="button",e.className="page-toc__collapse",e.innerHTML='<span aria-hidden="true">›</span>',h.appendChild(e);let t=!1;try{t="true"===window.localStorage.getItem("pagenary:toc-collapsed")}catch(e){}const n=()=>{m.classList.toggle("is-collapsed",t),e.setAttribute("aria-expanded",String(!t));const n=t?"Show the on-this-page panel":"Hide the on-this-page panel";e.setAttribute("aria-label",n),e.title=t?"Show on-this-page":"Hide on-this-page"},o=e=>{e.preventDefault(),e.stopPropagation(),t=!t;try{window.localStorage.setItem("pagenary:toc-collapsed",String(t))}catch(e){}n()};e.addEventListener("click",o),n(),O.push(()=>e.removeEventListener("click",o))}}return()=>{l.removeEventListener("scroll",I),L.removeEventListener("click",N),w.removeEventListener("click",F),S.forEach(({a:e,onClick:t})=>e.removeEventListener("click",t)),O.forEach(e=>e()),m.remove()}}),registerEffect(function(e,t){const o=e.querySelectorAll(".pe-scrolly");if(!o.length)return;const r=n(),c=[];return o.forEach(e=>{const t=Array.from(e.querySelectorAll(".pe-scrolly__steps [data-pe-step]")),n=Array.from(e.querySelectorAll(".pe-scrolly__stage [data-pe-step]"));if(!t.length||!n.length)return;let o=null;const s=e=>{e!==o&&(o=e,n.forEach(t=>t.classList.toggle("is-active",t.dataset.peStep===e)))};s(t[0].dataset.peStep);let i=!1;const a=()=>{i=!1;const e=r.getBoundingClientRect().top,n=.45*r.clientHeight;let o=t[0];for(const r of t){if(!(r.getBoundingClientRect().top-e<=n))break;o=r}s(o.dataset.peStep)},l=()=>{i||(i=!0,requestAnimationFrame(a))};a(),r.addEventListener("scroll",l,{passive:!0}),c.push(()=>r.removeEventListener("scroll",l))}),()=>c.forEach(e=>e())}),registerEffect(function(){const e=document.querySelector(".canvas")||document.scrollingElement||document.documentElement;let t=document.querySelector(".reading-progress");t||(t=document.createElement("div"),t.className="reading-progress",t.setAttribute("aria-hidden","true"),t.innerHTML='<span class="reading-progress-fill"></span>',document.body.appendChild(t));const n=t.querySelector(".reading-progress-fill"),o=()=>{const o=document.body.hasAttribute("data-reading-progress");if(t.hidden=!o,!o)return void(n.style.width="0");const r=e.scrollHeight-e.clientHeight,c=r>0?Math.min(100,Math.max(0,e.scrollTop/r*100)):0;n.style.width=`${c}%`},r="function"==typeof MutationObserver?new MutationObserver(o):null;return r&&r.observe(document.body,{attributes:!0,attributeFilter:["data-reading-progress"]}),o(),e.addEventListener("scroll",o,{passive:!0}),window.addEventListener("resize",o,{passive:!0}),()=>{r&&r.disconnect(),e.removeEventListener("scroll",o),window.removeEventListener("resize",o)}}),registerEffect(function(e,t){if(t.reducedMotion||"function"!=typeof requestAnimationFrame)return;const o=e.querySelectorAll("[data-pe-parallax]");if(!o.length)return;const r=n(),c=[];if(o.forEach(e=>{const t=e.querySelector(".pe-hero-bg"),n=t||e,o=parseFloat(e.getAttribute("data-pe-parallax")),r=Number.isFinite(o)?Math.max(0,Math.min(.5,o)):.16,s=t?.12:.18;c.push({el:e,target:n,speed:r,maxFrac:s})}),!c.length)return;let s=!1;const i=()=>{s=!1;const e=r.scrollTop||0;for(const{el:t,target:n,speed:o,maxFrac:r}of c){const c=t.offsetTop-e,s=t.clientHeight*r,i=Math.max(-s,Math.min(s,-c*o));n.style.transform=`translate3d(0, ${i.toFixed(1)}px, 0)`}},a=()=>{s||(s=!0,requestAnimationFrame(i))};return i(),r.addEventListener("scroll",a,{passive:!0}),window.addEventListener("resize",a,{passive:!0}),()=>{r.removeEventListener("scroll",a),window.removeEventListener("resize",a)}}),registerEffect(function(e){const t=e.querySelectorAll(".pe-hero--sticky");if(!t.length||"function"!=typeof requestAnimationFrame)return;const o=n();let r=!1;const c=()=>{r=!1;const e="function"==typeof getComputedStyle?getComputedStyle(o):null,n=e&&parseFloat(e.paddingTop)||0,c=(o.getBoundingClientRect?o.getBoundingClientRect().top:0)+n;t.forEach(e=>{const t=e.getBoundingClientRect().top<=c+1;e.classList.toggle("is-stuck",t)})},s=()=>{r||(r=!0,requestAnimationFrame(c))};return c(),o.addEventListener("scroll",s,{passive:!0}),()=>o.removeEventListener("scroll",s)}),registerEffect(function(e,t){if(!document.body.hasAttribute("data-living-scroll")&&!document.body.hasAttribute("data-blog-living-scroll"))return;const n=e.querySelector(".doc.markdown .doc-content");if(!n)return;const o=Array.from(n.children);if(!o.length)return;if(t.reducedMotion||"function"!=typeof IntersectionObserver)return void o.forEach(e=>e.classList.add("is-living-revealed"));const r=new IntersectionObserver(e=>{for(const t of e)t.isIntersecting&&(t.target.classList.add("is-living-revealed"),r.unobserve(t.target))},{threshold:0,rootMargin:"0px"});return o.forEach(e=>r.observe(e)),()=>r.disconnect()}),registerEffect(function(e){const t=e.querySelectorAll(".pe-accordion[data-pe-single]");if(!t.length)return;const n=[];return t.forEach(e=>{const t=Array.from(e.querySelectorAll(":scope > details"));t.forEach(e=>{const o=()=>{if(e.open)for(const n of t)n!==e&&(n.open=!1)};e.addEventListener("toggle",o),n.push([e,o])})}),()=>n.forEach(([e,t])=>e.removeEventListener("toggle",t))}),registerEffect(function(e){if(!document.body.hasAttribute("data-code-copy"))return;const t=e&&e.querySelector?e:document,n=Array.from(t.querySelectorAll(".doc-content pre")),o=[];for(const e of n){const t=e.querySelector("code");if(!t||e.querySelector(":scope > .code-copy"))continue;const n=document.createElement("button");n.type="button",n.className="code-copy",n.setAttribute("aria-label","Copy code to clipboard"),n.innerHTML='<span class="code-copy__label">Copy</span>';let r=0;const c=(e,t)=>{n.querySelector(".code-copy__label").textContent=e,n.classList.toggle("is-copied",!!t),n.setAttribute("aria-label",t?"Copied to clipboard":"Copy code to clipboard")},s=async()=>{const e=t.innerText.replace(/\n$/,"");let n=!0;try{if(navigator.clipboard&&navigator.clipboard.writeText)await navigator.clipboard.writeText(e);else{const t=document.createElement("textarea");t.value=e,t.style.cssText="position:fixed;top:-9999px;opacity:0",document.body.appendChild(t),t.select(),n=document.execCommand("copy"),t.remove()}}catch{n=!1}c(n?"Copied":"Press ⌘C",n),window.clearTimeout(r),r=window.setTimeout(()=>c("Copy",!1),1600)};n.addEventListener("click",s),e.classList.add("has-code-copy"),e.appendChild(n),o.push(()=>{window.clearTimeout(r),n.removeEventListener("click",s),n.remove(),e.classList.remove("has-code-copy")})}return()=>o.forEach(e=>e())});
@@ -45,7 +45,7 @@ export const MANIFEST = [
45
45
  "id": "tenant-config",
46
46
  "title": "Tenant Configuration",
47
47
  "summary": "Every config.json option: branding, theming, SEO, nav, and export.",
48
- "module": "./sections/tenant-config.532868a466d7.js"
48
+ "module": "./sections/tenant-config.90fc84e44857.js"
49
49
  },
50
50
  {
51
51
  "id": "theming-recipes",
package/site/manifest.js CHANGED
@@ -45,7 +45,7 @@ export const MANIFEST = [
45
45
  "id": "tenant-config",
46
46
  "title": "Tenant Configuration",
47
47
  "summary": "Every config.json option: branding, theming, SEO, nav, and export.",
48
- "module": "./sections/tenant-config.532868a466d7.js"
48
+ "module": "./sections/tenant-config.90fc84e44857.js"
49
49
  },
50
50
  {
51
51
  "id": "theming-recipes",
@@ -79,7 +79,7 @@
79
79
  <meta http-equiv="refresh" content="0; url=https://docs.pagenary.com/#accessible-authoring" />
80
80
  </noscript>
81
81
 
82
- <link rel="stylesheet" href="../styles.bdb30ba34de5.css" />
82
+ <link rel="stylesheet" href="../styles.781144256628.css" />
83
83
  <style>
84
84
  .static-content { max-width: 800px; margin: 0 auto; padding: 2rem; }
85
85
  .static-footer { margin-top: 3rem; padding-top: 1rem; border-top: 1px solid #eee; font-size: 0.9rem; color: #666; }
@@ -79,7 +79,7 @@
79
79
  <meta http-equiv="refresh" content="0; url=https://docs.pagenary.com/#api" />
80
80
  </noscript>
81
81
 
82
- <link rel="stylesheet" href="../styles.bdb30ba34de5.css" />
82
+ <link rel="stylesheet" href="../styles.781144256628.css" />
83
83
  <style>
84
84
  .static-content { max-width: 800px; margin: 0 auto; padding: 2rem; }
85
85
  .static-footer { margin-top: 3rem; padding-top: 1rem; border-top: 1px solid #eee; font-size: 0.9rem; color: #666; }
@@ -79,7 +79,7 @@
79
79
  <meta http-equiv="refresh" content="0; url=https://docs.pagenary.com/#architecture" />
80
80
  </noscript>
81
81
 
82
- <link rel="stylesheet" href="../styles.bdb30ba34de5.css" />
82
+ <link rel="stylesheet" href="../styles.781144256628.css" />
83
83
  <style>
84
84
  .static-content { max-width: 800px; margin: 0 auto; padding: 2rem; }
85
85
  .static-footer { margin-top: 3rem; padding-top: 1rem; border-top: 1px solid #eee; font-size: 0.9rem; color: #666; }
@@ -79,7 +79,7 @@
79
79
  <meta http-equiv="refresh" content="0; url=https://docs.pagenary.com/#blog-layout" />
80
80
  </noscript>
81
81
 
82
- <link rel="stylesheet" href="../styles.bdb30ba34de5.css" />
82
+ <link rel="stylesheet" href="../styles.781144256628.css" />
83
83
  <style>
84
84
  .static-content { max-width: 800px; margin: 0 auto; padding: 2rem; }
85
85
  .static-footer { margin-top: 3rem; padding-top: 1rem; border-top: 1px solid #eee; font-size: 0.9rem; color: #666; }
@@ -79,7 +79,7 @@
79
79
  <meta http-equiv="refresh" content="0; url=https://docs.pagenary.com/#deployment" />
80
80
  </noscript>
81
81
 
82
- <link rel="stylesheet" href="../styles.bdb30ba34de5.css" />
82
+ <link rel="stylesheet" href="../styles.781144256628.css" />
83
83
  <style>
84
84
  .static-content { max-width: 800px; margin: 0 auto; padding: 2rem; }
85
85
  .static-footer { margin-top: 3rem; padding-top: 1rem; border-top: 1px solid #eee; font-size: 0.9rem; color: #666; }