@vanduo-oss/framework 1.5.1 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -2
- package/README.md +30 -7
- package/css/components/navbar.css +11 -0
- package/css/components/popover.css +97 -0
- package/css/components/theme-customizer.css +53 -0
- package/css/core/colors-fib-base.css +524 -0
- package/css/core/colors-palette.css +786 -0
- package/css/core/colors.css +54 -46
- package/css/core/tokens.css +19 -19
- package/css/vanduo.css +8 -1
- package/dist/build-info.json +3 -3
- package/dist/vanduo-core.css +1509 -62
- package/dist/vanduo-core.css.map +1 -1
- package/dist/vanduo-core.min.css +2 -2
- package/dist/vanduo-core.min.css.map +1 -1
- package/dist/vanduo.cjs.js +387 -6
- package/dist/vanduo.cjs.js.map +3 -3
- package/dist/vanduo.cjs.min.js +16 -10
- package/dist/vanduo.cjs.min.js.map +4 -4
- package/dist/vanduo.css +1509 -62
- package/dist/vanduo.css.map +1 -1
- package/dist/vanduo.esm.js +387 -6
- package/dist/vanduo.esm.js.map +3 -3
- package/dist/vanduo.esm.min.js +16 -10
- package/dist/vanduo.esm.min.js.map +4 -4
- package/dist/vanduo.js +387 -6
- package/dist/vanduo.js.map +3 -3
- package/dist/vanduo.min.css +2 -2
- package/dist/vanduo.min.css.map +1 -1
- package/dist/vanduo.min.js +16 -10
- package/dist/vanduo.min.js.map +4 -4
- package/js/components/doc-search.js +9 -4
- package/js/components/popover.js +295 -0
- package/js/components/search.js +108 -0
- package/js/components/theme-customizer.js +54 -1
- package/js/index.js +2 -0
- package/js/utils/helpers.js +12 -4
- package/package.json +7 -4
package/dist/vanduo.cjs.min.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/*! Vanduo v1.
|
|
2
|
-
var ue=Object.defineProperty;var ve=Object.getOwnPropertyDescriptor;var ye=Object.getOwnPropertyNames;var be=Object.prototype.hasOwnProperty;var we=(m,e)=>{for(var t in e)ue(m,t,{get:e[t],enumerable:!0})},Ee=(m,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ye(e))!be.call(m,s)&&s!==t&&ue(m,s,{get:()=>e[s],enumerable:!(n=ve(e,s))||n.enumerable});return m};var Le=m=>Ee(ue({},"__esModule",{value:!0}),m);var Se={};we(Se,{Vanduo:()=>fe,default:()=>Ae});module.exports=Le(Se);(function(){"use strict";function m(s){return s?Array.isArray(s)?s.filter(function(i){return typeof i=="function"}):typeof s=="function"?[s]:[]:[]}function e(s){return typeof s=="function"?{onDestroy:[s]}:s||{}}function t(s,i){try{i()}catch(o){console.warn("[Vanduo Lifecycle] "+s+" error:",o)}}let n={instances:new Map,isRoot:function(s){return!!s&&(s===document||s.nodeType===1||s.nodeType===9||s.nodeType===11)},normalizeRoot:function(s){return this.isRoot(s)?s:document},isInRoot:function(s,i){let o=this.normalizeRoot(s);return i instanceof Element?o===document?document.documentElement?document.documentElement.contains(i):document.contains(i):o===i?!0:typeof o.contains=="function"&&o.contains(i):!1},queryAll:function(s,i){let o=this.normalizeRoot(s),a=[];if(o instanceof Element&&typeof o.matches=="function"&&o.matches(i)&&a.push(o),typeof o.querySelectorAll=="function"){let r=o.querySelectorAll(i);for(let c=0;c<r.length;c++)a.push(r[c])}return a},queryOne:function(s,i){let o=this.queryAll(s,i);return o.length?o[0]:null},runInRoot:function(s,i){let o=this.normalizeRoot(s);return i(o)},register:function(s,i,o,a){if(!(s instanceof Element)||!i)return;let r=e(a),c=m(o),l=m(r.onDestroy),d=this.instances.get(s)||new Map,h=d.get(i);if(h){h.cleanup=h.cleanup.concat(c),h.onDestroy=h.onDestroy.concat(l);return}d.set(i,{component:i,cleanup:c,onDestroy:l,registeredAt:Date.now()}),this.instances.set(s,d)},unregister:function(s,i){let o=this.instances.get(s);if(!o)return;if(i){let r=o.get(i);if(!r)return;o.delete(i),o.size||this.instances.delete(s),r.cleanup.forEach(function(c){t("Cleanup",c)}),r.onDestroy.forEach(function(c){t("Destroy",c)});return}let a=Array.from(o.values());this.instances.delete(s),a.forEach(function(r){r.cleanup.forEach(function(c){t("Cleanup",c)}),r.onDestroy.forEach(function(c){t("Destroy",c)})})},destroyAll:function(s){let i=[];return this.instances.forEach(function(o,a){if(!s){i.push([a,null]);return}o.has(s)&&i.push([a,s])}),i.forEach(function(o){n.unregister(o[0],o[1]||void 0)}),i.length},destroyAllInContainer:function(s,i){let o=this.normalizeRoot(s),a=[];return this.instances.forEach(function(r,c){if(n.isInRoot(o,c)){if(!i){a.push([c,null]);return}r.has(i)&&a.push([c,i])}}),a.forEach(function(r){n.unregister(r[0],r[1]||void 0)}),a.length},getAll:function(){let s=[];return this.instances.forEach(function(i,o){i.forEach(function(a){s.push({element:o,component:a.component,registeredAt:a.registeredAt})})}),s},has:function(s,i){let o=this.instances.get(s);return o?i?o.has(i):o.size>0:!1}};window.addEventListener("beforeunload",function(){n.destroyAll()}),window.VanduoLifecycle=n})();(function(){"use strict";let m="1.5.1",e=Object.prototype.hasOwnProperty,t={version:m,components:{},aliases:{},_decoratedComponents:new WeakSet,resolveComponentName:function(n){return this.aliases[n]||n},_isRoot:function(n){return typeof window.VanduoLifecycle<"u"&&typeof window.VanduoLifecycle.isRoot=="function"?window.VanduoLifecycle.isRoot(n):!!n&&(n===document||n.nodeType===1||n.nodeType===9||n.nodeType===11)},_normalizeRoot:function(n){return this._isRoot(n)?n:document},_queryAll:function(n,s){let i=this._normalizeRoot(n),o=[];if(i instanceof Element&&typeof i.matches=="function"&&i.matches(s)&&o.push(i),typeof i.querySelectorAll=="function"){let a=i.querySelectorAll(s);for(let r=0;r<a.length;r++)o.push(a[r])}return o},queryAll:function(n,s){return typeof s>"u"&&(s=n,n=document),this._queryAll(n,s)},queryOne:function(n,s){let i=this.queryAll(n,s);return i.length?i[0]:null},_isLifecycleManagedComponent:function(n){if(!n||typeof n!="object")return!1;for(let s in n)if(e.call(n,s)&&n[s]instanceof Map)return!0;return!1},_syncComponentLifecycle:function(n,s,i){let o=window.VanduoLifecycle;if(!o||!this._isLifecycleManagedComponent(s))return;let a=this.resolveComponentName(n),r=this._normalizeRoot(i);for(let c in s)!e.call(s,c)||!(s[c]instanceof Map)||s[c].forEach(function(l,d){if(!(d instanceof Element)||!o.isInRoot(r,d)||o.has(d,a))return;if(typeof s.destroy=="function"){o.register(d,a,[],function(){s.destroy(d)});return}let h=l&&Array.isArray(l.cleanup)?l.cleanup:[];o.register(d,a,h,function(){s[c].delete(d)})})},_decorateComponent:function(n,s){let i=this,o=window.VanduoLifecycle;if(!s||typeof s!="object"||this._decoratedComponents.has(s))return;let a=typeof s.init=="function"?s.init:null;a&&(s.init=function(...c){let l=i._isRoot(c[0])?c[0]:null,d=a.apply(this,c);if(window.Vanduo){let h=l||document;window.Vanduo._syncComponentLifecycle(n,this,h)}return d});let r=typeof s.destroyAll=="function"?s.destroyAll:null;r&&(s.destroyAll=function(...c){let l=i._isRoot(c[0])?c[0]:null,d=window.Vanduo?window.Vanduo.resolveComponentName(n):n;if(o&&window.Vanduo&&window.Vanduo._isLifecycleManagedComponent(this)){if(l&&l!==document)return o.destroyAllInContainer(l,d),this.__vanduoScopedDestroyAll===!0?r.apply(this,c):void 0;o.destroyAll(d)}return r.apply(this,c)}),this._decoratedComponents.add(s)},init:function(n){let s=this._normalizeRoot(n);if(s!==document){this.initComponents(s);return}if(typeof ready<"u"){ready(()=>{this.initComponents(document)});return}if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",()=>{this.initComponents(document)});return}this.initComponents(document)},initComponents:function(n){let s=this._normalizeRoot(n);Object.keys(this.components).forEach(i=>{let o=this.components[i];if(o.init&&typeof o.init=="function")try{o.init(s)}catch(a){console.warn('[Vanduo] Failed to initialize component "'+i+'":',a)}})},register:function(n,s,i){let o=i||{};this._decorateComponent(n,s),this.components[n]=s,Array.isArray(o.aliases)&&o.aliases.forEach(a=>{this.aliases[a]=n})},registerAlias:function(n,s){let i=this.resolveComponentName(s);this.components[i]&&(this.aliases[n]=i)},reinit:function(n,s){let i=this._normalizeRoot(s),o=this.resolveComponentName(n),a=this.components[o];if(a&&a.init&&typeof a.init=="function")try{a.destroyAll&&typeof a.destroyAll=="function"&&a.destroyAll(i),a.init(i)}catch(r){console.warn('[Vanduo] Failed to reinitialize component "'+o+'":',r)}},destroy:function(n){let s=this._normalizeRoot(n),i=Object.keys(this.components);for(let o=0;o<i.length;o++){let a=this.components[i[o]];if(a&&a.destroyAll&&typeof a.destroyAll=="function")try{a.destroyAll(s)}catch(r){console.warn('[Vanduo] Failed to destroy component "'+i[o]+'":',r)}}},destroyAll:function(){this.destroy(document)},getComponent:function(n){let s=this.resolveComponentName(n);return this.components[s]||null}};window.Vanduo=t})();(function(){"use strict";let m={_snippetIdCounter:0,resolveRoot:function(e){return e&&(e.nodeType===1||e.nodeType===9||e.nodeType===11)?e:document},queryWithin:function(e,t){let n=this.resolveRoot(e),s=[];if(n instanceof Element&&typeof n.matches=="function"&&n.matches(t)&&s.push(n),typeof n.querySelectorAll=="function"){let i=n.querySelectorAll(t);for(let o=0;o<i.length;o++)s.push(i[o])}return s},getSnippetInstanceId:function(e){if(e.dataset.codeSnippetId)return e.dataset.codeSnippetId;let t=(e.id||"").trim();return t?(e.dataset.codeSnippetId=`snippet-${t}`,e.dataset.codeSnippetId):(this._snippetIdCounter+=1,e.dataset.codeSnippetId=`snippet-auto-${this._snippetIdCounter}`,e.dataset.codeSnippetId)},addListener:function(e,t,n,s){t&&(t.addEventListener(n,s),e._codeSnippetCleanup||(e._codeSnippetCleanup=[]),e._codeSnippetCleanup.push(()=>t.removeEventListener(n,s)))},init:function(e){this.queryWithin(e,".vd-code-snippet").forEach(n=>{n.dataset.initialized!=="true"&&this.initSnippet(n)})},initSnippet:function(e){if(e.dataset.initialized==="true")return;e._codeSnippetCleanup=[];let t=e.querySelector(".vd-code-snippet-toggle"),n=e.querySelector(".vd-code-snippet-content");t&&n&&this.initCollapsible(e,t,n);let s=e.querySelectorAll(".vd-code-snippet-tab"),i=e.querySelectorAll(".vd-code-snippet-pane");s.length>0&&this.initTabs(e,s,i);let o=e.querySelector(".vd-code-snippet-copy");o&&this.initCopyButton(e,o),e.querySelectorAll("[data-extract]").forEach(l=>{this.extractHtml(l)}),e.querySelectorAll(".vd-code-snippet-pane:not([data-extract])").forEach(l=>{this.applyPaneHighlighting(l)}),e.querySelectorAll(".has-line-numbers").forEach(l=>{this.addLineNumbers(l)}),e.dataset.initialized="true"},initCollapsible:function(e,t,n){let s=e.dataset.expanded==="true";t.setAttribute("aria-expanded",s?"true":"false"),n.dataset.visible=s?"true":"false",this.addListener(e,t,"click",()=>{let i=e.dataset.expanded==="true",o=!i;e.dataset.expanded=o?"true":"false",t.setAttribute("aria-expanded",o?"true":"false"),n.dataset.visible=o?"true":"false",i||n.querySelectorAll("[data-extract]:not([data-extracted])").forEach(c=>{this.extractHtml(c)});let a=new CustomEvent("codesnippet:toggle",{bubbles:!0,detail:{snippet:e,expanded:!i}});e.dispatchEvent(a)})},initTabs:function(e,t,n){let s=this.getSnippetInstanceId(e),i=e.querySelector(".vd-code-snippet-tabs");i&&i.setAttribute("role","tablist"),t.forEach((o,a)=>{let r=o.dataset.lang,c=o.classList.contains("is-active");o.setAttribute("role","tab"),o.setAttribute("aria-selected",c),o.setAttribute("tabindex",c?"0":"-1"),o.id=o.id||`code-tab-${s}-${r||"tab"}-${a}`;let l=e.querySelector(`.vd-code-snippet-pane[data-lang="${r}"]`);l&&(l.id=l.id||`code-pane-${s}-${r||"pane"}-${a}`,l.setAttribute("role","tabpanel"),o.setAttribute("aria-controls",l.id),l.setAttribute("aria-labelledby",o.id)),this.addListener(e,o,"click",()=>{this.switchTab(e,o,t,n)}),this.addListener(e,o,"keydown",d=>{this.handleTabKeydown(d,e,t,n)})})},switchTab:function(e,t,n,s){let i=t.dataset.lang;n.forEach(r=>{r.classList.remove("is-active"),r.setAttribute("aria-selected","false"),r.setAttribute("tabindex","-1")}),s.forEach(r=>{r.classList.remove("is-active")}),t.classList.add("is-active"),t.setAttribute("aria-selected","true"),t.setAttribute("tabindex","0");let o=e.querySelector(`.vd-code-snippet-pane[data-lang="${i}"]`);o&&o.classList.add("is-active");let a=new CustomEvent("codesnippet:tabchange",{bubbles:!0,detail:{snippet:e,tab:t,lang:i}});e.dispatchEvent(a)},handleTabKeydown:function(e,t,n,s){let i=Array.from(n),o=i.indexOf(e.target),a;switch(e.key){case"ArrowLeft":e.preventDefault(),a=o>0?o-1:i.length-1;break;case"ArrowRight":e.preventDefault(),a=o<i.length-1?o+1:0;break;case"Home":e.preventDefault(),a=0;break;case"End":e.preventDefault(),a=i.length-1;break;default:return}a!==o&&(i[a].focus(),this.switchTab(t,i[a],n,s))},initCopyButton:function(e,t){this.addListener(e,t,"click",async()=>{await this.copyCode(e,t)})},copyCode:async function(e,t){let n=e.querySelector(".vd-code-snippet-pane.is-active")||e.querySelector(".vd-code-snippet-pane");if(!n){console.warn("CodeSnippet: No code pane found");return}let i=(n.querySelector("code")||n).textContent,o;try{await navigator.clipboard.writeText(i),o=!0}catch{o=this.fallbackCopy(i)}this.showCopyFeedback(t,o);let a=new CustomEvent("codesnippet:copy",{bubbles:!0,detail:{snippet:e,code:i,success:o}});e.dispatchEvent(a)},fallbackCopy:function(e){let t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.left="-9999px",t.style.top="-9999px",document.body.appendChild(t),t.focus(),t.select();let n=!1;try{n=document.execCommand("copy")}catch(s){console.warn("CodeSnippet: Fallback copy failed",s)}return document.body.removeChild(t),n},showCopyFeedback:function(e,t){if(t){e.classList.add("is-copied");let n=document.createElement("span");n.setAttribute("role","status"),n.setAttribute("aria-live","polite"),n.className="sr-only",n.textContent="Code copied to clipboard",e.appendChild(n),setTimeout(()=>{e.classList.remove("is-copied"),n.parentNode&&n.parentNode.removeChild(n)},2e3)}},extractHtml:function(e){let t=e.dataset.extract;if(!t)return;let n=document.querySelector(t);if(!n){console.warn(`CodeSnippet: Source element not found: ${t}`);return}let s=n.innerHTML;s=this.formatHtml(s),s=this.escapeHtml(s),s=this.highlightHtml(s);let i=document.createElement("code");i.innerHTML=s,e.replaceChildren(i),e.dataset.extracted="true",e.dataset.highlighted="true"},formatHtml:function(e){e=e.trim();let t=e.split(`
|
|
3
|
-
`),n=0,s=2,
|
|
4
|
-
`)},escapeHtml:function(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML},needsHighlighting:function(e,t){return!(!t||e.dataset.highlighted==="true"||t.querySelector('[class^="code-"], [class*=" code-"]'))},getHighlightMode:function(e){let t=String(e||"").trim().toLowerCase();return["html","xml","svg","vue","svelte","astro"].includes(t)?"html":["css","scss","sass","less"].includes(t)?"css":["js","mjs","cjs","ts","jsx","tsx","json","bash","sh"].includes(t)?"js":"plain"},highlightCodeByLang:function(e,t){let n=this.escapeHtml(e),s=this.getHighlightMode(t);return s==="html"?this.highlightHtml(n):s==="css"?this.highlightCss(n):s==="js"?this.highlightJs(n):n},applyPaneHighlighting:function(e){if(!e)return;let t=e.querySelector("code")||e;if(!this.needsHighlighting(e,t)){e.dataset.highlighted="true";return}let n=t.textContent||"",s=this.highlightCodeByLang(n,e.dataset.lang),
|
|
5
|
-
`).length,i=document.createElement("div");i.className="vd-code-snippet-line-numbers",i.setAttribute("aria-hidden","true");for(let a=1;a<=s;a++){let r=document.createElement("span");r.textContent=a,i.appendChild(r)}let o=document.createElement("div");o.className="vd-code-snippet-code",o.appendChild(t.cloneNode(!0)),t.parentNode.removeChild(t),e.appendChild(i),e.appendChild(o)},expand:function(e){if(typeof e=="string"&&(e=document.querySelector(e)),!e)return;e.dataset.expanded="true";let t=e.querySelector(".vd-code-snippet-toggle"),n=e.querySelector(".vd-code-snippet-content");t&&t.setAttribute("aria-expanded","true"),n&&(n.dataset.visible="true")},collapse:function(e){if(typeof e=="string"&&(e=document.querySelector(e)),!e)return;e.dataset.expanded="false";let t=e.querySelector(".vd-code-snippet-toggle"),n=e.querySelector(".vd-code-snippet-content");t&&t.setAttribute("aria-expanded","false"),n&&(n.dataset.visible="false")},showLang:function(e,t){if(typeof e=="string"&&(e=document.querySelector(e)),!e)return;let n=e.querySelector(`.vd-code-snippet-tab[data-lang="${t}"]`),s=e.querySelectorAll(".vd-code-snippet-tab"),i=e.querySelectorAll(".vd-code-snippet-pane");n&&this.switchTab(e,n,s,i)},destroy:function(e){typeof e=="string"&&(e=document.querySelector(e)),e&&(e._codeSnippetCleanup&&(e._codeSnippetCleanup.forEach(t=>t()),delete e._codeSnippetCleanup),delete e.dataset.initialized)},destroyAll:function(e){let t=this.resolveRoot(e);this.queryWithin(t,'.vd-code-snippet[data-initialized="true"]').forEach(s=>{this.destroy(s)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("codeSnippet",m),window.CodeSnippet=m})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-collapsible, .accordion").forEach(n=>{this.instances.has(n)||this.initCollapsible(n)})},initCollapsible:function(e){let t=e.classList.contains("accordion"),n=e.querySelectorAll(".vd-collapsible-item, .accordion-item"),s=[];n.forEach(i=>{let o=i.querySelector(".vd-collapsible-header, .accordion-header"),a=i.querySelector(".vd-collapsible-body, .accordion-body"),r=i.querySelector(".vd-collapsible-trigger, .accordion-trigger")||o;if(!o||!a)return;i.classList.contains("is-open")?this.openItem(i,a,!1):this.closeItem(i,a,!1);let c=l=>{l.preventDefault(),this.toggleItem(i,a,e,t)};r.addEventListener("click",c),s.push(()=>r.removeEventListener("click",c))}),this.instances.set(e,{cleanup:s})},toggleItem:function(e,t,n,s){e.classList.contains("is-open")?this.closeItem(e,t):(s&&n.querySelectorAll(".vd-collapsible-item.is-open, .accordion-item.is-open").forEach(a=>{if(a!==e){let r=a.querySelector(".vd-collapsible-body, .accordion-body");this.closeItem(a,r)}}),this.openItem(e,t))},openItem:function(e,t,n=!0){n||(t.style.transition="none"),e.classList.add("is-open"),e.setAttribute("aria-expanded","true");let s=t.scrollHeight;t.style.maxHeight=`${s}px`,n||setTimeout(()=>{t.style.transition=""},0),e.dispatchEvent(new CustomEvent("collapsible:open",{bubbles:!0}))},closeItem:function(e,t,n=!0){n||(t.style.transition="none"),e.classList.remove("is-open"),e.setAttribute("aria-expanded","false"),t.style.maxHeight="0",n||setTimeout(()=>{t.style.transition=""},0),e.dispatchEvent(new CustomEvent("collapsible:close",{bubbles:!0}))},open:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t){let n=t.querySelector(".vd-collapsible-body, .accordion-body");n&&this.openItem(t,n)}},close:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t){let n=t.querySelector(".vd-collapsible-body, .accordion-body");n&&this.closeItem(t,n)}},toggle:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t){let n=t.querySelector(".vd-collapsible-body, .accordion-body"),s=t.closest(".vd-collapsible, .accordion"),i=s&&s.classList.contains("accordion");n&&this.toggleItem(t,n,s,i)}},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("collapsible",m),window.VanduoCollapsible=m})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-dropdown").forEach(n=>{this.instances.has(n)||this.initDropdown(n)})},initDropdown:function(e){let t=e.querySelector(".vd-dropdown-toggle"),n=e.querySelector(".vd-dropdown-menu");if(!t||!n)return;let s=[];t.setAttribute("aria-haspopup","true"),t.setAttribute("aria-expanded","false"),n.setAttribute("role","menu"),n.setAttribute("aria-hidden","true");let i=c=>{c.preventDefault(),c.stopPropagation(),this.toggleDropdown(e,t,n)};t.addEventListener("click",i),s.push(()=>t.removeEventListener("click",i));let o=c=>{!e.contains(c.target)&&n.classList.contains("is-open")&&this.closeDropdown(e,t,n)};document.addEventListener("click",o),s.push(()=>document.removeEventListener("click",o));let a=c=>{this.handleKeydown(c,e,t,n)};t.addEventListener("keydown",a),s.push(()=>t.removeEventListener("keydown",a)),n.querySelectorAll(".vd-dropdown-item:not(.disabled):not(.is-disabled)").forEach(c=>{let l=h=>{h.preventDefault(),this.selectItem(c,e,t,n)};c.addEventListener("click",l),s.push(()=>c.removeEventListener("click",l));let d=h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),this.selectItem(c,e,t,n))};c.addEventListener("keydown",d),s.push(()=>c.removeEventListener("keydown",d))}),this.instances.set(e,{toggle:t,menu:n,cleanup:s,typeaheadBuffer:"",typeaheadTimer:null})},toggleDropdown:function(e,t,n){n.classList.contains("is-open")?this.closeDropdown(e,t,n):this.openDropdown(e,t,n)},openDropdown:function(e,t,n){document.querySelectorAll(".vd-dropdown-menu.is-open").forEach(o=>{if(o!==n){let a=o.closest(".vd-dropdown"),r=a.querySelector(".vd-dropdown-toggle");this.closeDropdown(a,r,o)}}),e.classList.add("is-open"),n.classList.add("is-open"),t.setAttribute("aria-expanded","true"),n.setAttribute("aria-hidden","false"),this.positionMenu(e,n);let i=n.querySelector(".vd-dropdown-item:not(.disabled):not(.is-disabled)");i&&setTimeout(()=>i.focus(),0)},closeDropdown:function(e,t,n){e.classList.remove("is-open"),n.classList.remove("is-open"),t.setAttribute("aria-expanded","false"),n.setAttribute("aria-hidden","true"),t.focus()},positionMenu:function(e,t){let n=e.getBoundingClientRect(),s=t.getBoundingClientRect(),i=window.innerWidth,o=window.innerHeight,a=8;if(t.classList.remove("vd-dropdown-menu-end","vd-dropdown-menu-start","vd-dropdown-menu-top"),e.classList.contains("vd-dropdown-dropup")){t.classList.add("vd-dropdown-menu-top");return}e.classList.contains("vd-dropdown-dropright")||e.classList.contains("vd-dropdown-dropleft")||(n.left+s.width>i-a?t.classList.add("vd-dropdown-menu-end"):t.classList.add("vd-dropdown-menu-start"),n.bottom+s.height>o-a&&n.top-s.height>a&&t.classList.add("vd-dropdown-menu-top"))},handleKeydown:function(e,t,n,s){let i=s.classList.contains("is-open"),o=Array.from(s.querySelectorAll(".vd-dropdown-item:not(.disabled):not(.is-disabled)")),a=o.findIndex(r=>r===document.activeElement);switch(e.key){case"Enter":case" ":case"ArrowDown":if(e.preventDefault(),!i)this.openDropdown(t,n,s);else if(e.key==="ArrowDown"){let r=a<o.length-1?a+1:0;o[r].focus()}break;case"ArrowUp":if(i){e.preventDefault();let r=a>0?a-1:o.length-1;o[r].focus()}break;case"Escape":i&&(e.preventDefault(),this.closeDropdown(t,n,s));break;case"Home":i&&(e.preventDefault(),o[0].focus());break;case"End":i&&(e.preventDefault(),o[o.length-1].focus());break;default:if(i&&e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey){let r=this.instances.get(t);if(!r)break;clearTimeout(r.typeaheadTimer),r.typeaheadBuffer+=e.key.toLowerCase();let c=o.find(l=>l.textContent.trim().toLowerCase().startsWith(r.typeaheadBuffer));c&&c.focus(),r.typeaheadTimer=setTimeout(()=>{r.typeaheadBuffer=""},500)}break}},selectItem:function(e,t,n,s){s.querySelectorAll(".vd-dropdown-item").forEach(i=>{i.classList.remove("active","is-active")}),e.classList.add("active","is-active"),(n.tagName==="BUTTON"||n.classList.contains("btn"))&&(n.textContent=e.textContent.trim()),this.closeDropdown(t,n,s),e.dispatchEvent(new CustomEvent("dropdown:select",{bubbles:!0,detail:{item:e,value:e.dataset.value||e.textContent}}))},open:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t){let n=t.querySelector(".vd-dropdown-toggle"),s=t.querySelector(".vd-dropdown-menu");n&&s&&this.openDropdown(t,n,s)}},close:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t){let n=t.querySelector(".vd-dropdown-toggle"),s=t.querySelector(".vd-dropdown-menu");n&&s&&this.closeDropdown(t,n,s)}},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("dropdown",m),window.VanduoDropdown=m})();(function(){"use strict";let m={STORAGE_KEY:"vanduo-font-preference",isInitialized:!1,fonts:{system:{name:"System Default",family:null},"jetbrains-mono":{name:"JetBrains Mono",family:"'JetBrains Mono', monospace"},ubuntu:{name:"Ubuntu",family:"'Ubuntu', sans-serif",category:"sans-serif",description:"Friendly, humanist sans-serif"},"open-sans":{name:"Open Sans",family:"'Open Sans', sans-serif",category:"sans-serif",description:"Neutral, highly readable"},lato:{name:"Lato",family:"'Lato', sans-serif",category:"sans-serif",description:"Friendly, rounded sans-serif"}},getToggles:function(e){return window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,'[data-toggle="font"]'):Array.from(document.querySelectorAll('[data-toggle="font"]'))},init:function(e){if(this.state={preference:this.getPreference()},this.fonts[this.state.preference]||(this.state.preference="ubuntu",this.setStorageValue(this.STORAGE_KEY,this.state.preference)),this.isInitialized){this.applyFont(),this.renderUI(e),this.updateUI(e);return}this.isInitialized=!0,this.applyFont(),this.renderUI(e)},getPreference:function(){return this.getStorageValue(this.STORAGE_KEY,"ubuntu")},setPreference:function(e){if(!this.fonts[e]){console.warn("Unknown font:",e);return}this.state.preference=e,this.setStorageValue(this.STORAGE_KEY,e),this.applyFont(),this.updateUI();let t=new CustomEvent("font:change",{bubbles:!0,detail:{font:e,fontData:this.fonts[e]}});document.dispatchEvent(t)},applyFont:function(){let e=this.state.preference;e==="system"?document.documentElement.removeAttribute("data-font"):document.documentElement.setAttribute("data-font",e)},renderUI:function(e){this.getToggles(e).forEach(n=>{if(n.getAttribute("data-font-initialized")==="true"){n.tagName==="SELECT"&&(n.value=this.state.preference);return}if(n.tagName==="SELECT"){n.value=this.state.preference;let s=i=>{this.setPreference(i.target.value)};n.addEventListener("change",s),n._fontToggleHandler=s}else{let s=()=>{let i=Object.keys(this.fonts),a=(i.indexOf(this.state.preference)+1)%i.length;this.setPreference(i[a])};n.addEventListener("click",s),n._fontToggleHandler=s}n.setAttribute("data-font-initialized","true")})},updateUI:function(e){this.getToggles(e).forEach(n=>{if(n.tagName==="SELECT")n.value=this.state.preference;else{let s=n.querySelector(".font-current-label");s&&(s.textContent=this.fonts[this.state.preference].name)}})},getCurrentFont:function(){return this.state.preference},getFontData:function(e){return this.fonts[e]||null},destroyAll:function(e){this.getToggles(e||document).filter(function(n){return n.getAttribute("data-font-initialized")==="true"}).forEach(n=>{if(n._fontToggleHandler){let s=n.tagName==="SELECT"?"change":"click";n.removeEventListener(s,n._fontToggleHandler),delete n._fontToggleHandler}n.removeAttribute("data-font-initialized")}),(!e||e===document)&&(this.isInitialized=!1)},getStorageValue:function(e,t){if(typeof window.safeStorageGet=="function")return window.safeStorageGet(e,t);try{let n=localStorage.getItem(e);return n!==null?n:t}catch{return t}},setStorageValue:function(e,t){if(typeof window.safeStorageSet=="function")return window.safeStorageSet(e,t);try{return localStorage.setItem(e,t),!0}catch{return!1}}};window.Vanduo&&window.Vanduo.register("fontSwitcher",m),window.FontSwitcher=m})();(function(){"use strict";let m=(function(){try{return CSS.supports("selector(:has(*))")}catch{return!1}})(),e={instances:new Map,__vanduoScopedDestroyAll:!0,init:function(t){window.Vanduo.queryAll(t,"[data-layout-mode]").forEach(function(s){this.instances.has(s)||this.initContainer(s)}.bind(this)),this.initToggleButtons(t)},initContainer:function(t){let n=t.getAttribute("data-layout-mode")||"standard",s=[];this.applyMode(t,n),t.setAttribute("role","region"),t.setAttribute("aria-label","Grid layout: "+n+" mode"),this.instances.set(t,{cleanup:s,mode:n})},initToggleButtons:function(t){(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(t,"[data-grid-toggle]"):document.querySelectorAll("[data-grid-toggle]")).forEach(function(s){if(s.getAttribute("data-grid-initialized")==="true")return;let i=function(o){o.preventDefault();let a=s.getAttribute("data-grid-toggle"),r;a?r=document.querySelector(a):r=s.closest("[data-layout-mode]"),r&&this.toggle(r)}.bind(this);s.addEventListener("click",i),s.setAttribute("data-grid-initialized","true"),s.setAttribute("aria-pressed","false"),s._gridCleanup=function(){s.removeEventListener("click",i),s.removeAttribute("data-grid-initialized"),s.removeAttribute("aria-pressed")}}.bind(this))},applyFibFallback:function(t){if(m)return;t.querySelectorAll(".vd-row, .row").forEach(function(s){let o=s.querySelectorAll(':scope > [class*="vd-col-"], :scope > [class*="col-"]').length;o===1?s.style.gridTemplateColumns="1fr":o===2?s.style.gridTemplateColumns="1fr 1.618fr":o===3?s.style.gridTemplateColumns="2fr 3fr 5fr":o===4?s.style.gridTemplateColumns="1fr 2fr 3fr 5fr":s.style.gridTemplateColumns="repeat("+o+", 1fr)"})},removeFibFallback:function(t){t.querySelectorAll(".vd-row, .row").forEach(function(s){s.style.gridTemplateColumns=""})},applyMode:function(t,n){t.classList.remove("vd-grid-standard","vd-grid-fibonacci"),n==="fibonacci"?(t.classList.add("vd-grid-fibonacci"),this.applyFibFallback(t)):(t.classList.add("vd-grid-standard"),this.removeFibFallback(t)),t.setAttribute("data-layout-mode",n),t.setAttribute("aria-label","Grid layout: "+n+" mode"),document.querySelectorAll("[data-grid-toggle]").forEach(function(a){let r=a.getAttribute("data-grid-toggle");if(r&&t.matches(r)){let c=n==="fibonacci";c?a.classList.add("is-active"):a.classList.remove("is-active"),a.setAttribute("aria-pressed",c?"true":"false")}});let i=this.instances.get(t);i&&(i.mode=n);let o;try{o=new CustomEvent("grid:modechange",{bubbles:!0,detail:{container:t,mode:n}})}catch{o=document.createEvent("CustomEvent"),o.initCustomEvent("grid:modechange",!0,!0,{container:t,mode:n})}t.dispatchEvent(o)},toggle:function(t){if(typeof t=="string"&&(t=document.querySelector(t)),!t)return;let s=(t.getAttribute("data-layout-mode")||"standard")==="fibonacci"?"standard":"fibonacci";this.applyMode(t,s)},setMode:function(t,n){typeof t=="string"&&(t=document.querySelector(t)),t&&(n!=="fibonacci"&&n!=="standard"||this.applyMode(t,n))},getMode:function(t){return typeof t=="string"&&(t=document.querySelector(t)),t?t.getAttribute("data-layout-mode")||"standard":null},destroy:function(t){let n=this.instances.get(t);n&&(n.cleanup.forEach(function(s){s()}),t.classList.remove("vd-grid-standard","vd-grid-fibonacci"),t.removeAttribute("aria-label"),this.removeFibFallback(t),this.instances.delete(t))},destroyAll:function(t){let n=window.Vanduo&&typeof window.Vanduo._normalizeRoot=="function"?window.Vanduo._normalizeRoot(t):t||document;this.instances.forEach(function(i,o){(n===document||n===o||typeof n.contains=="function"&&n.contains(o))&&this.destroy(o)}.bind(this)),(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(n,'[data-grid-toggle][data-grid-initialized="true"]'):document.querySelectorAll('[data-grid-initialized="true"]')).forEach(function(i){i._gridCleanup&&(i._gridCleanup(),delete i._gridCleanup)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("gridLayout",e),window.VanduoGridLayout=e})();(function(){"use strict";let m={backdrop:null,container:null,img:null,closeBtn:null,caption:null,currentTrigger:null,scrollThreshold:50,initialScrollY:0,isOpen:!1,_cleanupFunctions:[],getTriggers:function(e){return window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,"[data-image-box]"):Array.from(document.querySelectorAll("[data-image-box]"))},init:function(e){this.createBackdrop(),this.bindTriggers(e)},createBackdrop:function(){if(this.backdrop||document.querySelector(".vd-image-box-backdrop")){this.backdrop||(this.backdrop=document.querySelector(".vd-image-box-backdrop"),this.container=this.backdrop.querySelector(".vd-image-box-container"),this.img=this.backdrop.querySelector(".vd-image-box-img"),this.closeBtn=this.backdrop.querySelector(".vd-image-box-close"),this.caption=this.backdrop.querySelector(".vd-image-box-caption"),this.bindBackdropEvents());return}this.backdrop=document.createElement("div"),this.backdrop.className="vd-image-box-backdrop",this.backdrop.setAttribute("role","dialog"),this.backdrop.setAttribute("aria-modal","true"),this.backdrop.setAttribute("aria-label","Image viewer"),this.backdrop.setAttribute("tabindex","-1"),this.container=document.createElement("div"),this.container.className="vd-image-box-container",this.img=document.createElement("img"),this.img.className="vd-image-box-img",this.img.alt="",this.closeBtn=document.createElement("button"),this.closeBtn.className="vd-image-box-close",this.closeBtn.setAttribute("aria-label","Close image viewer"),this.closeBtn.innerHTML="×",this.caption=document.createElement("div"),this.caption.className="vd-image-box-caption",this.container.appendChild(this.img),this.backdrop.appendChild(this.closeBtn),this.backdrop.appendChild(this.container),this.backdrop.appendChild(this.caption),document.body.appendChild(this.backdrop),this.bindBackdropEvents()},bindBackdropEvents:function(){let e=this,t=function(a){(a.target===e.backdrop||a.target===e.container)&&e.close()};this.backdrop.addEventListener("click",t),this._cleanupFunctions.push(()=>this.backdrop.removeEventListener("click",t));let n=function(){e.close()};this.img.addEventListener("click",n),this._cleanupFunctions.push(()=>this.img.removeEventListener("click",n));let s=function(){e.close()};this.closeBtn.addEventListener("click",s),this._cleanupFunctions.push(()=>this.closeBtn.removeEventListener("click",s));let i=function(a){a.key==="Escape"&&e.isOpen&&e.close()};document.addEventListener("keydown",i),this._cleanupFunctions.push(()=>document.removeEventListener("keydown",i));let o=function(){if(!e.isOpen)return;let a=window.scrollY;Math.abs(a-e.initialScrollY)>e.scrollThreshold&&e.close()};window.addEventListener("scroll",o,{passive:!0}),this._cleanupFunctions.push(()=>window.removeEventListener("scroll",o))},bindTriggers:function(e){let t=this;this.getTriggers(e).forEach(function(s){if(s.dataset.imageBoxInitialized)return;if(s.dataset.imageBoxInitialized="true",s.classList.add("vd-image-box-trigger"),s.tagName==="IMG"){s.complete&&s.naturalWidth===0&&s.classList.add("is-broken");let a=function(){s.classList.add("is-broken")};s.addEventListener("error",a);let r=function(){s.classList.remove("is-broken")};s.addEventListener("load",r),s._imageBoxErrorHandler=a,s._imageBoxLoadHandler=r}let i=function(a){a.preventDefault(),t.open(s)};if(s.addEventListener("click",i),s._imageBoxCleanup=()=>s.removeEventListener("click",i),s.tagName!=="BUTTON"&&s.tagName!=="A"){s.setAttribute("role","button"),s.setAttribute("tabindex","0"),s.setAttribute("aria-label","View enlarged image");let a=function(c){(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),t.open(s))};s.addEventListener("keydown",a);let r=s._imageBoxCleanup;s._imageBoxCleanup=()=>{r(),s.removeEventListener("keydown",a)}}let o=s._imageBoxCleanup;s._imageBoxCleanup=()=>{o(),s._imageBoxErrorHandler&&(s.removeEventListener("error",s._imageBoxErrorHandler),delete s._imageBoxErrorHandler),s._imageBoxLoadHandler&&(s.removeEventListener("load",s._imageBoxLoadHandler),delete s._imageBoxLoadHandler)}})},open:function(e){if(this.isOpen)return;this.currentTrigger=e,this.isOpen=!0,this.initialScrollY=window.scrollY;let t=e.dataset.imageBoxFullSrc||e.dataset.imageBoxSrc||e.src||e.href;if(!t){console.warn("[Vanduo ImageBox] No image source found for trigger:",e);return}let n=e.dataset.imageBoxCaption||e.alt||"";this.img.src=t,this.img.alt=e.alt||"",n?(this.caption.textContent=n,this.caption.style.display="block"):this.caption.style.display="none";let s=window.innerWidth-document.documentElement.clientWidth;document.body.style.setProperty("--vd-scrollbar-width",`${s}px`),document.body.classList.add("body-image-box-open"),this.backdrop.classList.add("is-visible"),this.backdrop.focus(),e.dispatchEvent(new CustomEvent("imageBox:open",{bubbles:!0,detail:{src:t}})),this.img.complete||(this.img.style.opacity="0",this._imgLoadHandler=()=>{this.img.style.opacity=""},this.img.addEventListener("load",this._imgLoadHandler,{once:!0}))},close:function(){this.isOpen&&(this.isOpen=!1,this.backdrop.classList.remove("is-visible"),document.body.classList.remove("body-image-box-open"),document.body.style.removeProperty("--vd-scrollbar-width"),this.currentTrigger&&(this.currentTrigger.focus(),this.currentTrigger.dispatchEvent(new CustomEvent("imageBox:close",{bubbles:!0})),this.currentTrigger=null),setTimeout(()=>{this.isOpen||(this._imgLoadHandler&&(this.img.removeEventListener("load",this._imgLoadHandler),this._imgLoadHandler=null),this.img.src="",this.img.alt="")},300))},reinit:function(e){this.bindTriggers(e)},destroy:function(e){if(e&&e!==document){this.getTriggers(e).forEach(s=>{s.classList.remove("vd-image-box-trigger"),s._imageBoxCleanup&&(s._imageBoxCleanup(),delete s._imageBoxCleanup),delete s.dataset.imageBoxInitialized});return}this.isOpen&&this.close(),this.backdrop&&this.backdrop.parentNode&&this.backdrop.parentNode.removeChild(this.backdrop),this._cleanupFunctions.forEach(n=>n()),this._cleanupFunctions=[],(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,"[data-image-box-initialized]"):document.querySelectorAll("[data-image-box-initialized]")).forEach(n=>{n.classList.remove("vd-image-box-trigger"),n._imageBoxCleanup&&(n._imageBoxCleanup(),delete n._imageBoxCleanup),delete n.dataset.imageBoxInitialized}),this.backdrop=null,this.container=null,this.img=null,this.closeBtn=null,this.caption=null,this.currentTrigger=null,this.isOpen=!1},destroyAll:function(e){this.destroy(e)}};typeof window.Vanduo<"u"&&window.Vanduo.register("imageBox",m),window.VanduoImageBox=m})();(function(){"use strict";let m={modals:new Map,openModals:[],zIndexCounter:1050,__vanduoScopedDestroyAll:!0,_triggerCleanups:[],_sharedEscHandler:null,getPortalState:function(e){return e._vdPortalState||(e._vdPortalState={originalParent:null,originalNextSibling:null,placeholder:null}),e._vdPortalState},portalToBody:function(e){if(!e||e.parentNode===document.body)return;let t=this.getPortalState(e);t.originalParent=e.parentNode,t.originalNextSibling=e.nextSibling,t.placeholder||(t.placeholder=document.createComment("vd-modal-placeholder")),t.originalParent.insertBefore(t.placeholder,e),document.body.appendChild(e),e.dataset.vdPortaled="true"},restoreFromPortal:function(e){if(!e)return;let t=this.getPortalState(e);if(!t.placeholder){delete e.dataset.vdPortaled;return}t.placeholder.parentNode?(t.placeholder.parentNode.insertBefore(e,t.placeholder),t.placeholder.parentNode.removeChild(t.placeholder)):t.originalParent&&t.originalParent.isConnected&&(t.originalNextSibling&&t.originalNextSibling.parentNode===t.originalParent?t.originalParent.insertBefore(e,t.originalNextSibling):t.originalParent.appendChild(e)),t.originalParent=null,t.originalNextSibling=null,t.placeholder=null,delete e.dataset.vdPortaled},init:function(e){window.Vanduo.queryAll(e,".vd-modal").forEach(s=>{this.modals.has(s)||this.initModal(s)}),(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,"[data-modal]"):document.querySelectorAll("[data-modal]")).forEach(s=>{if(s.dataset.modalTriggerInitialized)return;s.dataset.modalTriggerInitialized="true";let i=o=>{o.preventDefault();let a=s.dataset.modal,r=document.querySelector(a);r&&this.open(r)};s.addEventListener("click",i),s._modalTriggerCleanup=()=>s.removeEventListener("click",i)})},initModal:function(e){let t=this.createBackdrop(e),n=e.querySelectorAll('.vd-modal-close, [data-dismiss="modal"]'),s=e.querySelector(".vd-modal-dialog");if(!s)return;let i=[];e.setAttribute("role","dialog"),e.setAttribute("aria-modal","true"),e.setAttribute("aria-hidden","true"),e.id||(e.id="modal-"+Math.random().toString(36).substr(2,9));let o=e.querySelector(".vd-modal-title");o&&!o.id&&(o.id=e.id+"-title",e.setAttribute("aria-labelledby",o.id)),n.forEach(r=>{let c=()=>{this.close(e)};r.addEventListener("click",c),i.push(()=>r.removeEventListener("click",c))});let a=r=>{r.target===t&&e.dataset.backdrop!=="static"&&this.close(e)};t.addEventListener("click",a),i.push(()=>t.removeEventListener("click",a)),this._sharedEscHandler||(this._sharedEscHandler=r=>{if(r.key==="Escape"&&this.openModals.length>0){let c=this.openModals[this.openModals.length-1];c.dataset.keyboard!=="false"&&this.close(c)}},document.addEventListener("keydown",this._sharedEscHandler)),this.modals.set(e,{backdrop:t,dialog:s,trapHandler:null,cleanup:i})},createBackdrop:function(e){let t=e.querySelector(".vd-modal-backdrop");return t||(t=document.createElement("div"),t.className="vd-modal-backdrop",document.body.appendChild(t)),t},open:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(!t){console.warn("[Vanduo Modals] Modal element not found:",e);return}if(!this.modals.has(t)){console.warn("[Vanduo Modals] Modal not initialized:",t);return}let n=this.modals.get(t),{backdrop:s,dialog:i}=n;if(this.portalToBody(t),this.zIndexCounter+=10,t.style.zIndex=this.zIndexCounter,s.style.zIndex=this.zIndexCounter-1,this.openModals.push(t),s.classList.add("is-visible"),t.classList.add("is-open"),t.setAttribute("aria-hidden","false"),this.openModals.length===1){document.body.classList.add("body-modal-open");let a=window.innerWidth-document.documentElement.clientWidth;a>0&&(document.body.style.paddingRight=`${a}px`)}let o=this.trapFocus(t);n.trapHandler=o,setTimeout(()=>{let a=this.getFocusableElements(t)[0];a&&a.focus()},100),t.dispatchEvent(new CustomEvent("modal:open",{bubbles:!0}))},close:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(!t){console.warn("[Vanduo Modals] Modal element not found:",e);return}if(!this.modals.has(t)){console.warn("[Vanduo Modals] Modal not initialized:",t);return}let n=this.modals.get(t),{backdrop:s,trapHandler:i}=n;i&&(t.removeEventListener("keydown",i),n.trapHandler=null);let o=this.openModals.indexOf(t);if(o>-1&&this.openModals.splice(o,1),t.classList.remove("is-open"),t.setAttribute("aria-hidden","true"),this.openModals.length===0)s.classList.remove("is-visible"),document.body.classList.remove("body-modal-open"),document.body.style.paddingRight="",this.zIndexCounter=1050;else{let r=this.openModals[this.openModals.length-1];this.modals.get(r).backdrop.classList.add("is-visible")}let a=document.querySelector(`[data-modal="#${t.id}"]`);a&&a.focus(),t.dispatchEvent(new CustomEvent("modal:close",{bubbles:!0})),this.restoreFromPortal(t)},trapFocus:function(e){let t=this,n=function(s){if(s.key!=="Tab")return;let i=t.getFocusableElements(e),o=i[0],a=i[i.length-1];s.shiftKey?document.activeElement===o&&(s.preventDefault(),a.focus()):document.activeElement===a&&(s.preventDefault(),o.focus())};return e.addEventListener("keydown",n),n},getFocusableElements:function(e){return Array.from(e.querySelectorAll('a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])')).filter(n=>!n.hasAttribute("disabled")&&n.offsetWidth>0&&n.offsetHeight>0)},toggle:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&(t.classList.contains("is-open")?this.close(t):this.open(t))},destroy:function(e){let t=this.modals.get(e);if(t){if(e.classList.contains("is-open")){let n=this.openModals.indexOf(e);n>-1&&this.openModals.splice(n,1),t.backdrop.classList.remove("is-visible"),e.classList.remove("is-open"),e.setAttribute("aria-hidden","true"),this.openModals.length===0&&(document.body.classList.remove("body-modal-open"),document.body.style.paddingRight="",this.zIndexCounter=1050)}this.restoreFromPortal(e),t.cleanup&&t.cleanup.forEach(n=>n()),t.backdrop&&t.backdrop.parentNode&&t.backdrop.parentNode.removeChild(t.backdrop),this.modals.delete(e)}},destroyAll:function(e){let t=window.Vanduo&&typeof window.Vanduo._normalizeRoot=="function"?window.Vanduo._normalizeRoot(e):e||document;this.modals.forEach((s,i)=>{(t===document||t===i||typeof t.contains=="function"&&t.contains(i))&&this.destroy(i)}),(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(t,"[data-modal][data-modal-trigger-initialized]"):document.querySelectorAll("[data-modal][data-modal-trigger-initialized]")).forEach(s=>{s._modalTriggerCleanup&&(s._modalTriggerCleanup(),delete s._modalTriggerCleanup),delete s.dataset.modalTriggerInitialized}),t===document&&this._sharedEscHandler&&(document.removeEventListener("keydown",this._sharedEscHandler),this._sharedEscHandler=null)}};typeof window.Vanduo<"u"&&window.Vanduo.register("modals",m),window.VanduoModals=m})();(function(){"use strict";let m={instances:new Map,getBreakpoint:function(){let t=getComputedStyle(document.documentElement).getPropertyValue("--vd-breakpoint-lg").trim(),n=parseInt(t,10);return isNaN(n)?992:n},init:function(e){window.Vanduo.queryAll(e,".vd-navbar").forEach(n=>{this.instances.has(n)||this.initNavbar(n)})},initScrollWatcher:function(e){let t=e.classList.contains("vd-navbar-glass"),n=e.classList.contains("vd-navbar-transparent");if(!t&&!n)return null;let s=()=>{let o=parseInt(e.dataset.scrollThreshold,10);return isNaN(o)?e.offsetHeight||60:o},i=()=>{let o=window.scrollY>s();e.classList.toggle("vd-navbar-scrolled",o)};return i(),window.addEventListener("scroll",i,{passive:!0}),()=>window.removeEventListener("scroll",i)},initNavbar:function(e){let t=e.querySelector(".vd-navbar-toggle, .vd-navbar-burger"),n=e.querySelector(".vd-navbar-menu"),s=e.querySelector(".vd-navbar-overlay")||this.createOverlay(e),i=[],o=this.initScrollWatcher(e);if(o&&i.push(o),!t||!n){i.length&&this.instances.set(e,{toggle:null,menu:null,overlay:null,cleanup:i});return}let a=f=>{f.preventDefault(),f.stopPropagation(),this.toggleMenu(e,t,n,s)};if(t.addEventListener("click",a),i.push(()=>t.removeEventListener("click",a)),s){let f=()=>{this.closeMenu(e,t,n,s)};s.addEventListener("click",f),i.push(()=>s.removeEventListener("click",f))}let r=f=>{f.key==="Escape"&&n.classList.contains("is-open")&&this.closeMenu(e,t,n,s)};document.addEventListener("keydown",r),i.push(()=>document.removeEventListener("keydown",r));let c,l=()=>{clearTimeout(c),c=setTimeout(()=>{let f=this.getBreakpoint();window.innerWidth>=f&&n.classList.contains("is-open")&&this.closeMenu(e,t,n,s)},250)};window.addEventListener("resize",l),i.push(()=>{clearTimeout(c),window.removeEventListener("resize",l)});let d=f=>{n.classList.contains("is-open")&&!e.contains(f.target)&&!n.contains(f.target)&&this.closeMenu(e,t,n,s)};document.addEventListener("click",d),i.push(()=>document.removeEventListener("click",d)),n.querySelectorAll(".vd-navbar-dropdown > .vd-nav-link, .vd-navbar-dropdown > .nav-link").forEach(f=>{let u=p=>{let g=this.getBreakpoint();if(window.innerWidth<g){p.preventDefault();let T=f.parentElement.querySelector(".vd-navbar-dropdown-menu");T&&T.classList.toggle("is-open")}};f.addEventListener("click",u),i.push(()=>f.removeEventListener("click",u))}),this.instances.set(e,{toggle:t,menu:n,overlay:s,cleanup:i})},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),t.overlay&&t.overlay.parentNode&&t.overlay.parentNode.removeChild(t.overlay),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})},toggleMenu:function(e,t,n,s){n.classList.contains("is-open")?this.closeMenu(e,t,n,s):this.openMenu(e,t,n,s)},openMenu:function(e,t,n,s){n.classList.add("is-open"),t.classList.add("is-active"),s&&s.classList.add("is-active"),document.body.classList.add("body-navbar-open"),t.setAttribute("aria-expanded","true"),n.setAttribute("aria-hidden","false")},closeMenu:function(e,t,n,s){n.classList.remove("is-open"),t.classList.remove("is-active"),s&&s.classList.remove("is-active"),document.body.classList.remove("body-navbar-open"),n.querySelectorAll(".vd-navbar-dropdown-menu.is-open").forEach(o=>{o.classList.remove("is-open")}),t.setAttribute("aria-expanded","false"),n.setAttribute("aria-hidden","true")},createOverlay:function(e){let t=document.createElement("div");return t.className="vd-navbar-overlay",document.body.appendChild(t),t}};typeof window.Vanduo<"u"&&window.Vanduo.register("navbar",m),window.VanduoNavbar=m})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-pagination[data-pagination]").forEach(n=>{this.instances.has(n)||this.initPagination(n)})},initPagination:function(e){let t=parseInt(e.dataset.totalPages)||1,n=parseInt(e.dataset.currentPage)||1,s=parseInt(e.dataset.maxVisible)||7;this.render(e,{totalPages:t,currentPage:n,maxVisible:s});let i=o=>{let a=o.target.closest(".vd-pagination-link");if(!a||a.closest(".vd-pagination-item.disabled")||a.closest(".vd-pagination-item.active"))return;o.preventDefault();let r=a.closest(".vd-pagination-item"),c=r.dataset.page;c?this.goToPage(e,parseInt(c)):r.classList.contains("pagination-prev")?this.prevPage(e):r.classList.contains("pagination-next")&&this.nextPage(e)};e.addEventListener("click",i),this.instances.set(e,{cleanup:[()=>e.removeEventListener("click",i)]})},render:function(e,t){let{totalPages:n,currentPage:s,maxVisible:i}=t;if(n<=1){e.innerHTML="";return}let o="";o+=`<li class="vd-pagination-item vd-pagination-prev pagination-item pagination-prev ${s===1?"disabled":""}">`,o+='<a class="vd-pagination-link pagination-link" href="#" aria-label="Previous">Previous</a>',o+="</li>";let a=this.calculatePages(s,n,i),r=0;a.forEach(c=>{if(c==="ellipsis")o+='<li class="vd-pagination-item pagination-item"><span class="vd-pagination-ellipsis pagination-ellipsis">\u2026</span></li>';else{c!==r+1&&r>0&&(o+='<li class="vd-pagination-item pagination-item"><span class="vd-pagination-ellipsis pagination-ellipsis">\u2026</span></li>');let l=Number(c);o+=`<li class="vd-pagination-item pagination-item ${l===s?"active":""}" data-page="${l}">`,o+=`<a class="vd-pagination-link pagination-link" href="#" aria-label="Page ${l}">${l}</a>`,o+="</li>",r=c}}),o+=`<li class="vd-pagination-item vd-pagination-next pagination-item pagination-next ${s===n?"disabled":""}">`,o+='<a class="vd-pagination-link pagination-link" href="#" aria-label="Next">Next</a>',o+="</li>",e.innerHTML=o,e.dataset.currentPage=s},calculatePages:function(e,t,n){let s=[],i=Math.floor(n/2);if(t<=n)for(let o=1;o<=t;o++)s.push(o);else{s.push(1);let o=Math.max(2,e-i),a=Math.min(t-1,e+i);e<=i+1&&(a=Math.min(t-1,n-1)),e>=t-i&&(o=Math.max(2,t-n+2)),o>2&&s.push("ellipsis");for(let r=o;r<=a;r++)s.push(r);a<t-1&&s.push("ellipsis"),t>1&&s.push(t)}return s},goToPage:function(e,t){let n=parseInt(e.dataset.totalPages)||1,s=parseInt(e.dataset.maxVisible)||7;t<1||t>n||(this.render(e,{totalPages:n,currentPage:t,maxVisible:s}),e.dispatchEvent(new CustomEvent("pagination:change",{bubbles:!0,detail:{page:t,totalPages:n}})))},prevPage:function(e){let t=parseInt(e.dataset.currentPage)||1;t>1&&this.goToPage(e,t-1)},nextPage:function(e){let t=parseInt(e.dataset.currentPage)||1,n=parseInt(e.dataset.totalPages)||1;t<n&&this.goToPage(e,t+1)},update:function(e,t){let n=typeof e=="string"?document.querySelector(e):e;n&&(t.totalPages!==void 0&&(n.dataset.totalPages=t.totalPages),t.currentPage!==void 0&&(n.dataset.currentPage=t.currentPage),t.maxVisible!==void 0&&(n.dataset.maxVisible=t.maxVisible),this.render(n,{totalPages:parseInt(n.dataset.totalPages)||1,currentPage:parseInt(n.dataset.currentPage)||1,maxVisible:parseInt(n.dataset.maxVisible)||7}))},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("pagination",m),window.VanduoPagination=m})();(function(){"use strict";let m={parallaxElements:new Map,ticking:!1,isMobile:window.innerWidth<768,reducedMotion:window.matchMedia("(prefers-reduced-motion: reduce)").matches,isInitialized:!1,_onScroll:null,_onResize:null,init:function(e){if(this.reducedMotion)return;if(window.Vanduo.queryAll(e,".vd-parallax").forEach(n=>{n.dataset.parallaxInitialized||this.initParallax(n)}),this.isInitialized){this.refresh();return}this.isInitialized=!0,this.handleScroll(),this._onScroll=()=>{this.handleScroll()},window.addEventListener("scroll",this._onScroll,{passive:!0}),this._onResize=()=>{this.isMobile=window.innerWidth<768,this.updateAll()},window.addEventListener("resize",this._onResize)},initParallax:function(e){e.dataset.parallaxInitialized="true";let t=e.classList.contains("vd-parallax-disable-mobile")||e.classList.contains("parallax-disable-mobile");if(t&&this.isMobile)return;let n=e.querySelectorAll(".vd-parallax-layer, .vd-parallax-bg"),s=this.getSpeed(e),i=e.classList.contains("vd-parallax-horizontal")||e.classList.contains("parallax-horizontal")?"horizontal":"vertical";this.parallaxElements.set(e,{layers:Array.from(n),speed:s,direction:i,disableMobile:t}),this.updateParallax(e)},getSpeed:function(e){return e.classList.contains("vd-parallax-slow")||e.classList.contains("parallax-slow")?.5:e.classList.contains("vd-parallax-fast")||e.classList.contains("parallax-fast")?1.5:1},handleScroll:function(){this.ticking||(window.requestAnimationFrame(()=>{this.updateAll(),this.ticking=!1}),this.ticking=!0)},updateAll:function(){this.parallaxElements.forEach((e,t)=>{e.disableMobile&&this.isMobile||this.updateParallax(t)})},updateParallax:function(e){let t=this.parallaxElements.get(e);if(!t)return;let n=e.getBoundingClientRect(),s=window.innerHeight,i=n.top,o=n.height,r=(Math.max(0,Math.min(1,(s-i)/(s+o)))-.5)*t.speed*100;t.layers.forEach((c,l)=>{let d=c.dataset.parallaxSpeed||c.dataset.speed,h=d?parseFloat(d):1,f=r*h;t.direction==="horizontal"?c.style.transform=`translateX(${f}px)`:c.style.transform=`translateY(${f}px)`})},destroy:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&this.parallaxElements.has(t)&&(this.parallaxElements.get(t).layers.forEach(s=>{s.style.transform=""}),this.parallaxElements.delete(t))},refresh:function(){this.updateAll()},destroyAll:function(){this.parallaxElements.forEach((e,t)=>{this.destroy(t)}),this.parallaxElements.clear(),this._onScroll&&(window.removeEventListener("scroll",this._onScroll),this._onScroll=null),this._onResize&&(window.removeEventListener("resize",this._onResize),this._onResize=null),this.isInitialized=!1}};typeof window.Vanduo<"u"&&window.Vanduo.register("parallax",m),window.VanduoParallax=m})();(function(){"use strict";let m={getProgressBars:function(e){return window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,".vd-progress-bar[data-progress], .progress-bar[data-progress]"):Array.from(document.querySelectorAll(".vd-progress-bar[data-progress], .progress-bar[data-progress]"))},init:function(e){this.getProgressBars(e).forEach(n=>{n.dataset.progressInitialized||this.initProgressBar(n)})},initProgressBar:function(e){e.dataset.progressInitialized="true";let t=parseInt(e.dataset.progress)||0;this.setProgress(e,t,!1)},setProgress:function(e,t,n=!0){let s=typeof e=="string"?document.querySelector(e):e;if(!s)return;t=Math.max(0,Math.min(100,t)),n?s.style.transition="width var(--vd-transition-duration-slow) var(--vd-transition-ease)":(s.style.transition="none",setTimeout(()=>{s.style.transition=""},0)),s.style.width=t+"%",s.setAttribute("aria-valuenow",t),s.setAttribute("aria-valuemin",0),s.setAttribute("aria-valuemax",100);let i=s.querySelector(".vd-progress-text, .progress-text");i&&(i.textContent=t+"%"),s.dispatchEvent(new CustomEvent("progress:update",{bubbles:!0,detail:{value:t,max:100}})),t>=100&&s.dispatchEvent(new CustomEvent("progress:complete",{bubbles:!0,detail:{value:t,max:100}}))},animateProgress:function(e,t,n=1e3){let s=typeof e=="string"?document.querySelector(e):e;if(!s)return;let i=parseInt(s.style.width)||0,o=t-i,a=performance.now(),r=c=>{let l=c-a,d=Math.min(l/n,1),h=1-Math.pow(1-d,3),f=i+o*h;this.setProgress(s,f,!1),d<1&&requestAnimationFrame(r)};requestAnimationFrame(r)},show:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&(t.style.display="inline-block",t.setAttribute("aria-hidden","false"))},hide:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&(t.style.display="none",t.setAttribute("aria-hidden","true"))},toggle:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&(t.style.display==="none"||t.getAttribute("aria-hidden")==="true"?this.show(t):this.hide(t))},destroyAll:function(e){this.getProgressBars(e||document).filter(function(n){return n.dataset.progressInitialized==="true"}).forEach(n=>{delete n.dataset.progressInitialized})}};typeof window.Vanduo<"u"&&window.Vanduo.register("preloader",m),window.VanduoPreloader=m})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,"select.vd-custom-select-input, select[data-custom-select]").forEach(n=>{this.instances.has(n)||this.initSelect(n)})},initSelect:function(e){if(e.closest(".vd-custom-select-wrapper"))return;let t=[],n=document.createElement("div");n.className="custom-select-wrapper",e.parentNode.insertBefore(n,e),n.appendChild(e);let s=document.createElement("button");s.type="button",s.className="custom-select-button",s.setAttribute("aria-haspopup","listbox"),s.setAttribute("aria-expanded","false"),s.setAttribute("aria-labelledby",e.id||this.generateId(e));let i=document.createElement("div");if(i.className="custom-select-dropdown",i.setAttribute("role","listbox"),e.dataset.searchable==="true"){let l=document.createElement("div");l.className="custom-select-search";let d=document.createElement("input");d.type="text",d.className="input input-sm",d.placeholder="Search...",d.setAttribute("aria-label","Search options"),l.appendChild(d),i.appendChild(l);let h=u=>{this.filterOptions(i,u.target.value)},f=typeof debounce=="function"?debounce(h,150):h;d.addEventListener("input",f),t.push(()=>d.removeEventListener("input",f))}this.buildOptions(e,i,s),n.appendChild(s),n.appendChild(i),this.updateButtonText(e,s);let o=l=>{l.preventDefault(),l.stopPropagation(),this.toggleDropdown(s,i)};s.addEventListener("click",o),t.push(()=>s.removeEventListener("click",o));let a=l=>{!n.contains(l.target)&&i.classList.contains("is-open")&&this.closeDropdown(s,i)};document.addEventListener("click",a),t.push(()=>document.removeEventListener("click",a));let r=l=>{this.handleKeydown(l,e,s,i)};s.addEventListener("keydown",r),t.push(()=>s.removeEventListener("keydown",r));let c=()=>{this.updateButtonText(e,s),this.updateSelectedOptions(e,i)};e.addEventListener("change",c),t.push(()=>e.removeEventListener("change",c)),this.instances.set(e,{wrapper:n,button:s,dropdown:i,cleanup:t,typeaheadBuffer:"",typeaheadTimer:null})},buildOptions:function(e,t,n){let s=e.querySelectorAll("option"),i=document.createDocumentFragment();s.forEach((o,a)=>{if(o.parentElement.tagName==="OPTGROUP"){let c=o.parentElement;if(!t.querySelector(`[data-group="${c.label}"]`)){let l=document.createElement("div");l.className="custom-select-option-group",l.textContent=c.label,l.dataset.group=c.label,i.appendChild(l)}}if(o.value===""&&!o.textContent.trim())return;let r=document.createElement("div");r.className="custom-select-option",r.textContent=o.textContent,r.setAttribute("role","option"),r.setAttribute("data-value",o.value),r.setAttribute("data-index",a),o.selected&&(r.classList.add("is-selected"),r.setAttribute("aria-selected","true")),o.disabled&&(r.classList.add("is-disabled"),r.setAttribute("aria-disabled","true")),r.addEventListener("click",c=>{o.disabled||this.selectOption(e,o,r,n,t)}),i.appendChild(r)}),t.appendChild(i)},selectOption:function(e,t,n,s,i){e.multiple?(t.selected=!t.selected,n.classList.toggle("is-selected"),n.setAttribute("aria-selected",t.selected)):(e.value=t.value,e.dispatchEvent(new Event("change",{bubbles:!0})),this.closeDropdown(s,i)),this.updateButtonText(e,s)},updateButtonText:function(e,t){if(e.multiple){let n=Array.from(e.selectedOptions);n.length===0?t.textContent=e.dataset.placeholder||"Select options...":n.length===1?t.textContent=n[0].textContent:t.textContent=`${n.length} selected`}else{let n=e.options[e.selectedIndex];t.textContent=n?n.textContent:e.dataset.placeholder||"Select..."}},updateSelectedOptions:function(e,t){let n=t.querySelectorAll(".custom-select-option"),s=Array.from(e.selectedOptions).map(i=>i.value);n.forEach(i=>{let o=i.dataset.value;s.includes(o)?(i.classList.add("is-selected"),i.setAttribute("aria-selected","true")):(i.classList.remove("is-selected"),i.setAttribute("aria-selected","false"))})},toggleDropdown:function(e,t){t.classList.contains("is-open")?this.closeDropdown(e,t):this.openDropdown(e,t)},openDropdown:function(e,t){t.classList.add("is-open"),e.setAttribute("aria-expanded","true");let n=t.querySelector(".custom-select-option:not(.is-disabled)");n&&n.focus()},closeDropdown:function(e,t){t.classList.remove("is-open"),e.setAttribute("aria-expanded","false")},handleKeydown:function(e,t,n,s){let i=s.classList.contains("is-open"),o=Array.from(s.querySelectorAll(".custom-select-option:not(.is-disabled)")),a=o.findIndex(r=>r===document.activeElement);switch(e.key){case"Enter":case" ":if(e.preventDefault(),i&&a>=0){let r=o[a],c=t.options[parseInt(r.dataset.index)];this.selectOption(t,c,r,n,s)}else this.openDropdown(n,s);break;case"Escape":i&&(e.preventDefault(),this.closeDropdown(n,s),n.focus());break;case"ArrowDown":if(e.preventDefault(),!i)this.openDropdown(n,s);else{let r=a<o.length-1?a+1:0;o[r].focus()}break;case"ArrowUp":if(e.preventDefault(),i){let r=a>0?a-1:o.length-1;o[r].focus()}break;case"Home":i&&(e.preventDefault(),o[0].focus());break;case"End":i&&(e.preventDefault(),o[o.length-1].focus());break;default:if(i&&e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey){let r=this.instances.get(t);if(!r)break;clearTimeout(r.typeaheadTimer),r.typeaheadBuffer+=e.key.toLowerCase();let c=o.find(l=>l.textContent.trim().toLowerCase().startsWith(r.typeaheadBuffer));c&&c.focus(),r.typeaheadTimer=setTimeout(()=>{r.typeaheadBuffer=""},500)}break}},filterOptions:function(e,t){let n=e.querySelectorAll(".vd-custom-select-option"),s=t.toLowerCase();n.forEach(i=>{i.textContent.toLowerCase().includes(s)?i.style.display="block":i.style.display="none"})},generateId:function(e){if(e.id)return e.id;let t="select-"+Math.random().toString(36).substr(2,9);return e.id=t,t},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),t.wrapper&&t.wrapper.parentNode&&(t.wrapper.parentNode.insertBefore(e,t.wrapper),t.wrapper.parentNode.removeChild(t.wrapper)),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("select",m)})();(function(){"use strict";let m={sidenavs:new Map,breakpoint:992,restoreDelayMs:450,__vanduoScopedDestroyAll:!0,_globalCleanups:[],_resizeCleanup:null,isFixedVariant:function(e){return e.classList.contains("vd-sidenav-fixed")||e.classList.contains("sidenav-fixed")},isPushVariant:function(e){return e.classList.contains("vd-sidenav-push")||e.classList.contains("sidenav-push")},isRightVariant:function(e){return e.classList.contains("vd-sidenav-right")||e.classList.contains("sidenav-right")},getPortalState:function(e){return e._vdPortalState||(e._vdPortalState={originalParent:null,originalNextSibling:null,placeholder:null,restoreTimer:null,restoreHandler:null}),e._vdPortalState},cancelScheduledRestore:function(e){let t=this.getPortalState(e);t.restoreHandler&&(e.removeEventListener("transitionend",t.restoreHandler),t.restoreHandler=null),t.restoreTimer&&(window.clearTimeout(t.restoreTimer),t.restoreTimer=null)},portalToBody:function(e){if(!e)return;if(e.parentNode===document.body){this.cancelScheduledRestore(e);return}let t=this.getPortalState(e);this.cancelScheduledRestore(e),t.originalParent=e.parentNode,t.originalNextSibling=e.nextSibling,t.placeholder||(t.placeholder=document.createComment("vd-sidenav-placeholder")),t.originalParent.insertBefore(t.placeholder,e),document.body.appendChild(e),e.dataset.vdPortaled="true"},restoreFromPortal:function(e){if(!e)return;let t=this.getPortalState(e);if(this.cancelScheduledRestore(e),!t.placeholder){delete e.dataset.vdPortaled;return}t.placeholder.parentNode?(t.placeholder.parentNode.insertBefore(e,t.placeholder),t.placeholder.parentNode.removeChild(t.placeholder)):t.originalParent&&t.originalParent.isConnected&&(t.originalNextSibling&&t.originalNextSibling.parentNode===t.originalParent?t.originalParent.insertBefore(e,t.originalNextSibling):t.originalParent.appendChild(e)),t.originalParent=null,t.originalNextSibling=null,t.placeholder=null,delete e.dataset.vdPortaled},scheduleRestoreFromPortal:function(e){if(!e||e.parentNode!==document.body)return;let t=this.getPortalState(e);this.cancelScheduledRestore(e);let n=()=>{this.restoreFromPortal(e)},s=i=>{i.target!==e||i.propertyName!=="transform"||n()};t.restoreHandler=s,e.addEventListener("transitionend",s),t.restoreTimer=window.setTimeout(()=>{n()},this.restoreDelayMs)},init:function(e){if(window.Vanduo.queryAll(e,".vd-sidenav, .vd-offcanvas").forEach(s=>{this.sidenavs.has(s)||this.initSidenav(s)}),(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,"[data-sidenav-toggle]"):document.querySelectorAll("[data-sidenav-toggle]")).forEach(s=>{if(s.dataset.sidenavToggleInitialized)return;s.dataset.sidenavToggleInitialized="true";let i=o=>{o.preventDefault();let a=s.dataset.sidenavToggle,r=document.querySelector(a);r&&this.toggle(r)};s.addEventListener("click",i),s._sidenavToggleCleanup=()=>s.removeEventListener("click",i)}),this.handleResize(),!this._resizeCleanup){let s=()=>{this.handleResize()};window.addEventListener("resize",s),this._resizeCleanup=()=>window.removeEventListener("resize",s)}},initSidenav:function(e){let t=e.getAttribute("data-vd-position");if(t){let r=e.classList.contains("vd-offcanvas")?"vd-offcanvas":"vd-sidenav";e.classList.add(r+"-"+t)}let n=this.createOverlay(e),s=e.querySelector(".vd-sidenav-close, .vd-offcanvas-close"),i=[];if(e.setAttribute("role","navigation"),e.setAttribute("aria-hidden","true"),s){let r=()=>{this.close(e)};s.addEventListener("click",r),i.push(()=>s.removeEventListener("click",r))}let o=()=>{e.dataset.backdrop!=="static"&&this.close(e)};n.addEventListener("click",o),i.push(()=>n.removeEventListener("click",o));let a=r=>{r.key==="Escape"&&e.classList.contains("is-open")&&e.dataset.keyboard!=="false"&&this.close(e)};document.addEventListener("keydown",a),i.push(()=>document.removeEventListener("keydown",a)),this.sidenavs.set(e,{overlay:n,cleanup:i})},createOverlay:function(e){let t=e.querySelector(".vd-sidenav-overlay");return t||(t=document.createElement("div"),t.className="vd-sidenav-overlay",document.body.appendChild(t)),t},open:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(!t||!this.sidenavs.has(t))return;let{overlay:n}=this.sidenavs.get(t);this.portalToBody(t),this.isFixedVariant(t)||n.classList.add("is-visible"),t.classList.add("is-open"),t.setAttribute("aria-hidden","false"),document.body.classList.add("body-sidenav-open"),this.isPushVariant(t)&&this.handlePushVariant(t,!0),t.dispatchEvent(new CustomEvent("sidenav:open",{bubbles:!0}))},close:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(!t||!this.sidenavs.has(t))return;let{overlay:n}=this.sidenavs.get(t);n.classList.remove("is-visible"),t.classList.remove("is-open"),t.setAttribute("aria-hidden","true"),document.body.classList.remove("body-sidenav-open"),this.isPushVariant(t)&&this.handlePushVariant(t,!1),t.dispatchEvent(new CustomEvent("sidenav:close",{bubbles:!0})),this.scheduleRestoreFromPortal(t)},toggle:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&(t.classList.contains("is-open")?this.close(t):this.open(t))},handlePushVariant:function(e,t){let n=document.querySelector('main, .main-content, .content, [role="main"]')||document.body;t?window.innerWidth>=this.breakpoint&&(this.isRightVariant(e)?n.style.marginRight=e.offsetWidth+"px":n.style.marginLeft=e.offsetWidth+"px"):(n.style.marginLeft="",n.style.marginRight="")},handleResize:function(){this.sidenavs.forEach(({overlay:e},t)=>{window.innerWidth>=this.breakpoint?this.isFixedVariant(t)&&!t.classList.contains("is-open")&&(t.classList.add("is-open"),t.setAttribute("aria-hidden","false"),e.classList.remove("is-visible")):this.isFixedVariant(t)&&t.classList.contains("is-open")&&this.close(t)})},destroy:function(e){let t=this.sidenavs.get(e);t&&(e.classList.contains("is-open")&&(t.overlay.classList.remove("is-visible"),e.classList.remove("is-open"),e.setAttribute("aria-hidden","true"),document.body.classList.remove("body-sidenav-open")),this.restoreFromPortal(e),t.cleanup.forEach(n=>n()),t.overlay&&t.overlay.parentNode&&t.overlay.parentNode.removeChild(t.overlay),this.sidenavs.delete(e))},destroyAll:function(e){let t=window.Vanduo&&typeof window.Vanduo._normalizeRoot=="function"?window.Vanduo._normalizeRoot(e):e||document;this.sidenavs.forEach((s,i)=>{(t===document||t===i||typeof t.contains=="function"&&t.contains(i))&&this.destroy(i)}),(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(t,"[data-sidenav-toggle][data-sidenav-toggle-initialized]"):document.querySelectorAll("[data-sidenav-toggle][data-sidenav-toggle-initialized]")).forEach(s=>{s._sidenavToggleCleanup&&(s._sidenavToggleCleanup(),delete s._sidenavToggleCleanup),delete s.dataset.sidenavToggleInitialized}),t===document&&(this._resizeCleanup&&(this._resizeCleanup(),this._resizeCleanup=null),this._globalCleanups.forEach(s=>s()),this._globalCleanups=[])}};typeof window.Vanduo<"u"&&window.Vanduo.register("sidenav",m),window.VanduoSidenav=m})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-tabs, [data-tabs]").forEach(n=>{this.instances.has(n)||this.initTabs(n)})},initTabs:function(e){let t=e.querySelector('.vd-tab-list, [role="tablist"]'),n=e.querySelectorAll(".vd-tab-link, [data-tab]"),s=e.querySelectorAll(".vd-tab-pane, [data-tab-pane]");if(!t||n.length===0)return;let i=[];t.setAttribute("role","tablist"),n.forEach((a,r)=>{let c=this.getTabId(a,r),l=this.findPane(e,c,s);a.setAttribute("role","tab"),a.setAttribute("aria-selected",a.classList.contains("is-active")?"true":"false"),a.setAttribute("tabindex",a.classList.contains("is-active")?"0":"-1"),a.id||(a.id=`tab-btn-${c}`),l&&(l.setAttribute("role","tabpanel"),l.setAttribute("aria-labelledby",a.id),l.id||(l.id=`tab-pane-${c}`),a.setAttribute("aria-controls",l.id));let d=f=>{f.preventDefault(),!a.classList.contains("disabled")&&!a.disabled&&this.activateTab(e,a,n,s)};a.addEventListener("click",d),i.push(()=>a.removeEventListener("click",d));let h=f=>{this.handleKeydown(f,e,a,n,s)};a.addEventListener("keydown",h),i.push(()=>a.removeEventListener("keydown",h))}),!e.querySelector(".vd-tab-link.is-active, [data-tab].is-active")&&n.length>0&&this.activateTab(e,n[0],n,s),this.instances.set(e,{cleanup:i})},getTabId:function(e,t){return e.dataset.tabTarget||e.dataset.tab||e.getAttribute("href")?.replace("#","")||(typeof t=="number"?`tab-${t}`:e.id)},findPane:function(e,t,n){let s=e.querySelector(`[data-tab-pane="${t}"]`);return s||(s=e.querySelector(`#${t}`)),s||e.querySelectorAll(".vd-tab-link, [data-tab]").forEach((o,a)=>{this.getTabId(o,a)===t&&n[a]&&(s=n[a])}),s},activateTab:function(e,t,n,s){let i=Array.from(n).indexOf(t),o=this.getTabId(t,i);n.forEach(c=>{c.classList.remove("is-active"),c.setAttribute("aria-selected","false"),c.setAttribute("tabindex","-1"),c.parentElement&&c.parentElement.classList.contains("tab-item")&&c.parentElement.classList.remove("is-active")}),s.forEach(c=>{c.classList.remove("is-active")}),t.classList.add("is-active"),t.setAttribute("aria-selected","true"),t.setAttribute("tabindex","0"),t.parentElement&&t.parentElement.classList.contains("tab-item")&&t.parentElement.classList.add("is-active");let a=this.findPane(e,o,s);a&&a.classList.add("is-active");let r=new CustomEvent("tab:change",{bubbles:!0,detail:{tab:t,pane:a,tabId:o}});e.dispatchEvent(r)},handleKeydown:function(e,t,n,s,i){let o=t.classList.contains("vd-tabs-vertical")||t.classList.contains("tabs-vertical"),a=Array.from(s).filter(l=>!l.classList.contains("disabled")&&!l.disabled),r=a.indexOf(n),c=r;switch(e.key){case"ArrowLeft":o||(e.preventDefault(),c=r>0?r-1:a.length-1);break;case"ArrowRight":o||(e.preventDefault(),c=r<a.length-1?r+1:0);break;case"ArrowUp":o&&(e.preventDefault(),c=r>0?r-1:a.length-1);break;case"ArrowDown":o&&(e.preventDefault(),c=r<a.length-1?r+1:0);break;case"Home":e.preventDefault(),c=0;break;case"End":e.preventDefault(),c=a.length-1;break;case"Enter":case" ":e.preventDefault(),this.activateTab(t,n,s,i);return;default:return}c!==r&&(a[c].focus(),this.activateTab(t,a[c],s,i))},show:function(e){let t;if(typeof e=="string"?t=document.querySelector(`[data-tab-target="${e}"], [data-tab="${e}"], [href="#${e}"]`):t=e,!t)return;let n=t.closest(".vd-tabs, [data-tabs]");if(!n)return;let s=n.querySelectorAll(".vd-tab-link, [data-tab]"),i=n.querySelectorAll(".vd-tab-pane, [data-tab-pane]");this.activateTab(n,t,s,i)},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("tabs",m)})();(function(){"use strict";let m={STORAGE_KEYS:{PRIMARY:"vanduo-primary-color",NEUTRAL:"vanduo-neutral-color",RADIUS:"vanduo-radius",FONT:"vanduo-font-preference",THEME:"vanduo-theme-preference"},DEFAULTS:{PRIMARY_LIGHT:"black",PRIMARY_DARK:"amber",NEUTRAL:"charcoal",RADIUS:"0.5",FONT:"ubuntu",THEME:"system"},PRIMARY_COLORS:{black:{name:"Black",color:"#000000"},red:{name:"Red",color:"#fa5252"},orange:{name:"Orange",color:"#fd7e14"},amber:{name:"Amber",color:"#f59f00"},yellow:{name:"Yellow",color:"#fcc419"},lime:{name:"Lime",color:"#82c91e"},green:{name:"Green",color:"#40c057"},emerald:{name:"Emerald",color:"#20c997"},teal:{name:"Teal",color:"#12b886"},cyan:{name:"Cyan",color:"#22b8cf"},sky:{name:"Sky",color:"#3bc9db"},blue:{name:"Blue",color:"#228be6"},indigo:{name:"Indigo",color:"#4c6ef5"},violet:{name:"Violet",color:"#7950f2"},purple:{name:"Purple",color:"#be4bdb"},fuchsia:{name:"Fuchsia",color:"#f06595"},pink:{name:"Pink",color:"#e64980"},rose:{name:"Rose",color:"#ff8787"}},NEUTRAL_COLORS:{charcoal:{name:"Charcoal",color:"#0d1117"},slate:{name:"Slate",color:"#64748b"},gray:{name:"Gray",color:"#6b7280"},zinc:{name:"Zinc",color:"#71717a"},neutral:{name:"Neutral",color:"#737373"},stone:{name:"Stone",color:"#78716c"}},RADIUS_OPTIONS:["0","0.125","0.25","0.375","0.5"],FONT_OPTIONS:{"jetbrains-mono":{name:"JetBrains Mono",family:"'JetBrains Mono', monospace"},system:{name:"System Default",family:null},ubuntu:{name:"Ubuntu",family:"'Ubuntu', sans-serif"},lato:{name:"Lato",family:"'Lato', sans-serif"},"open-sans":{name:"Open Sans",family:"'Open Sans', sans-serif"}},THEME_MODES:["system","dark","light"],state:{primary:null,neutral:null,radius:null,font:null,theme:null,isOpen:!1},isInitialized:!1,_cleanup:[],_ownsDynamicPanel:!1,elements:{customizer:null,trigger:null,activeTrigger:null,triggers:[],panel:null,overlay:null},isRoot:function(e){return!!e&&(e===document||e.nodeType===1||e.nodeType===9||e.nodeType===11)},normalizeRoot:function(e){return this.isRoot(e)?e:document},queryAll:function(e,t){let n=this.normalizeRoot(e);if(typeof window.VanduoLifecycle<"u"&&typeof window.VanduoLifecycle.queryAll=="function")return window.VanduoLifecycle.queryAll(n,t);let s=[];if(n instanceof Element&&typeof n.matches=="function"&&n.matches(t)&&s.push(n),typeof n.querySelectorAll=="function"){let i=n.querySelectorAll(t);for(let o=0;o<i.length;o++)s.push(i[o])}return s},queryOne:function(e,t){let n=this.queryAll(e,t);return n.length?n[0]:null},getTriggers:function(e){return this.queryAll(e,"[data-theme-customizer-trigger]")},pruneTriggers:function(){this.elements.triggers=this.elements.triggers.filter(function(e){return e&&e.isConnected}),this.elements.trigger&&!this.elements.trigger.isConnected&&(this.elements.trigger=null),this.elements.activeTrigger&&!this.elements.activeTrigger.isConnected&&(this.elements.activeTrigger=null)},init:function(e){let t=this.normalizeRoot(e);if(this.isInitialized){this.bindExistingElements(t),this.bindTriggerEvents(t),this.bindPanelEvents(),this.updateUI();return}this.isInitialized=!0,this._cleanup=[],this.loadPreferences(),this.applyAllPreferences(),this.bindExistingElements(t),this.bindEvents(t)},addListener:function(e,t,n,s){e&&(e.addEventListener(t,n,s),this._cleanup.push(()=>e.removeEventListener(t,n,s)))},getDefaultPrimary:function(e){return e==="system"?window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?this.DEFAULTS.PRIMARY_DARK:this.DEFAULTS.PRIMARY_LIGHT:e==="dark"?this.DEFAULTS.PRIMARY_DARK:this.DEFAULTS.PRIMARY_LIGHT},loadPreferences:function(){this.state.theme=this.getStorageValue(this.STORAGE_KEYS.THEME,this.DEFAULTS.THEME),this.state.primary=this.getStorageValue(this.STORAGE_KEYS.PRIMARY,this.getDefaultPrimary(this.state.theme)),this._normalizeDefaultPrimaryIfStaleWithStoredTheme(),this.state.neutral=this.getStorageValue(this.STORAGE_KEYS.NEUTRAL,this.DEFAULTS.NEUTRAL),this.state.radius=this.getStorageValue(this.STORAGE_KEYS.RADIUS,this.DEFAULTS.RADIUS),this.state.font=this.getStorageValue(this.STORAGE_KEYS.FONT,this.DEFAULTS.FONT)},savePreference:function(e,t){this.setStorageValue(e,t)},applyAllPreferences:function(){this.applyPrimary(this.state.primary),this.applyNeutral(this.state.neutral),this.applyRadius(this.state.radius),this.applyFont(this.state.font),this.applyTheme(this.state.theme)},applyPrimary:function(e){this.PRIMARY_COLORS[e]||(e=this.getDefaultPrimary(this.state.theme)),this.state.primary=e,document.documentElement.setAttribute("data-primary",e),this.savePreference(this.STORAGE_KEYS.PRIMARY,e),this.dispatchEvent("primary-change",{color:e})},applyNeutral:function(e){this.NEUTRAL_COLORS[e]||(e=this.DEFAULTS.NEUTRAL),this.state.neutral=e,document.documentElement.setAttribute("data-neutral",e),this.savePreference(this.STORAGE_KEYS.NEUTRAL,e),this.dispatchEvent("neutral-change",{neutral:e})},applyRadius:function(e){this.RADIUS_OPTIONS.includes(e)||(e=this.DEFAULTS.RADIUS),this.state.radius=e,document.documentElement.setAttribute("data-radius",e),document.documentElement.style.setProperty("--vd-radius-scale",e),this.savePreference(this.STORAGE_KEYS.RADIUS,e),this.dispatchEvent("radius-change",{radius:e})},applyFont:function(e){this.FONT_OPTIONS[e]||(e=this.DEFAULTS.FONT),this.state.font=e,e==="system"?document.documentElement.removeAttribute("data-font"):document.documentElement.setAttribute("data-font",e),this.savePreference(this.STORAGE_KEYS.FONT,e),window.FontSwitcher&&window.FontSwitcher.setPreference&&(window.FontSwitcher.state.preference=e,window.FontSwitcher.applyFont()),this.dispatchEvent("font-change",{font:e})},applyTheme:function(e){if(this.THEME_MODES.includes(e)||(e=this.DEFAULTS.THEME),this._isApplying=!0,this.isUsingDefaultPrimary()){let t=this.getDefaultPrimary(e);this.state.primary!==t&&this.applyPrimary(t)}if(this.state.theme=e,e==="system"?document.documentElement.removeAttribute("data-theme"):document.documentElement.setAttribute("data-theme",e),this.savePreference(this.STORAGE_KEYS.THEME,e),window.Vanduo&&window.Vanduo.components.themeSwitcher){let t=window.Vanduo.components.themeSwitcher;t.state&&t.state.preference!==e&&(t.state.preference=e,typeof t.setStorageValue=="function"&&t.setStorageValue(t.STORAGE_KEY,e),typeof t.updateUI=="function"&&t.updateUI())}this._isApplying=!1,this.dispatchEvent("mode-change",{mode:e})},dispatchEvent:function(e,t){let n=new CustomEvent("theme:"+e,{bubbles:!0,detail:t});document.dispatchEvent(n);let s=new CustomEvent("theme:change",{bubbles:!0,detail:{type:e,value:t[Object.keys(t)[0]],state:{...this.state}}});document.dispatchEvent(s)},bindExistingElements:function(e){let t=this.normalizeRoot(e);this.pruneTriggers();let n=this.getTriggers(t);n.forEach(i=>{this.elements.triggers.includes(i)||this.elements.triggers.push(i)}),!this.elements.trigger&&this.elements.triggers.length&&(this.elements.trigger=this.elements.triggers[0]);let s=this.queryOne(t,".vd-theme-customizer")||(this.elements.customizer&&typeof this.elements.customizer.contains=="function"?this.elements.customizer:null)||document.querySelector(".vd-theme-customizer");s instanceof Element?(this.elements.customizer=s,this.elements.trigger=this.elements.customizer.querySelector(".vd-theme-customizer-trigger")||this.elements.trigger,this.elements.panel=this.elements.customizer.querySelector(".vd-theme-customizer-panel"),this.elements.overlay=this.elements.customizer.querySelector(".vd-theme-customizer-overlay")):n.length&&!this.elements.panel&&this.createDynamicPanel(),this.updateUI()},createDynamicPanel:function(){if(!this.elements.triggers.length||this.elements.panel&&this.elements.panel.isConnected)return;this.elements.trigger=this.elements.triggers[0];let e=document.createElement("div");e.className="vd-theme-customizer-overlay";let t=document.createElement("div");t.className="vd-theme-customizer-panel",t.innerHTML=this.getPanelHTML(),document.body.appendChild(e),document.body.appendChild(t),this.elements.panel=t,this.elements.overlay=e,this._ownsDynamicPanel=!0,this.elements.customizer={contains:n=>t.contains(n)||this.elements.triggers.some(s=>s.contains(n))},this.positionPanel(),this.bindPanelEvents(),this.addListener(window,"resize",()=>this.positionPanel())},positionPanel:function(){if(!this.elements.panel||!this.elements.trigger)return;let e=this.elements.activeTrigger||this.elements.trigger;if(window.innerWidth<768)this.elements.panel.style.top="",this.elements.panel.style.right="",this.elements.panel.style.left="",this.elements.panel.style.height="",this.elements.panel.style.maxHeight="";else{let n=e.getBoundingClientRect(),s=320,i=n.bottom+8,o=window.innerWidth,a=o-n.right;o-a-s<8&&(a=o-s-8),this.elements.panel.style.top=i+"px",this.elements.panel.style.right=a+"px",this.elements.panel.style.left="",this.elements.panel.style.height="auto",this.elements.panel.style.maxHeight="calc(100vh - "+i+"px)"}},bindPanelEvents:function(){if(!this.elements.panel||this.elements.panel.getAttribute("data-customizer-initialized")==="true")return;this.elements.panel.setAttribute("data-customizer-initialized","true"),this.elements.panel.querySelectorAll("[data-color]").forEach(s=>{this.addListener(s,"click",()=>{this.applyPrimary(s.dataset.color),this.updateUI()})}),this.elements.panel.querySelectorAll("[data-neutral]").forEach(s=>{this.addListener(s,"click",()=>{this.applyNeutral(s.dataset.neutral),this.updateUI()})}),this.elements.panel.querySelectorAll("[data-radius]").forEach(s=>{this.addListener(s,"click",()=>{this.applyRadius(s.dataset.radius),this.updateUI()})});let e=this.elements.panel.querySelector("[data-customizer-font]");e&&this.addListener(e,"change",s=>{this.applyFont(s.target.value),this.updateUI()});let t=this.elements.panel.querySelector(".customizer-reset");t&&this.addListener(t,"click",()=>{this.reset()});let n=this.elements.panel.querySelector(".customizer-mobile-close");n&&this.addListener(n,"click",()=>{this.close()}),this.elements.overlay&&this.addListener(this.elements.overlay,"click",()=>{this.close()})},getPanelHTML:function(){let e=typeof escapeHtml=="function"?escapeHtml:function(a){let r=document.createElement("div");return r.textContent=String(a??""),r.innerHTML},t=function(a){let r=String(a??"").trim();return/^(#[0-9a-fA-F]{3,8}|rgb[a]?\([^)]{1,60}\)|hsl[a]?\([^)]{1,60}\)|var\(--[a-zA-Z0-9_-]{1,40}\))$/.test(r)?r:"#000000"},n="";for(let[a,r]of Object.entries(this.PRIMARY_COLORS))n+=`<button class="tc-color-swatch${a===this.state.primary?" is-active":""}" data-color="${e(a)}" style="--vd-swatch-color: ${t(r.color)}" title="${e(r.name)}"></button>`;let s="";for(let[a,r]of Object.entries(this.NEUTRAL_COLORS))s+=`<button class="tc-neutral-swatch${a===this.state.neutral?" is-active":""}" data-neutral="${e(a)}" style="--vd-swatch-color: ${t(r.color)}" title="${e(r.name)}"><span>${e(r.name)}</span></button>`;let i="";this.RADIUS_OPTIONS.forEach(a=>{i+=`<button class="tc-radius-btn${a===this.state.radius?" is-active":""}" data-radius="${e(a)}">${e(a)}</button>`});let o="";for(let[a,r]of Object.entries(this.FONT_OPTIONS))o+=`<option value="${e(a)}"${a===this.state.font?" selected":""}>${e(r.name)}</option>`;return`
|
|
1
|
+
/*! Vanduo v1.6.0 | Built: 2026-06-27T15:48:08.659Z | git:9384f14 | production */
|
|
2
|
+
var ue=Object.defineProperty;var ve=Object.getOwnPropertyDescriptor;var ye=Object.getOwnPropertyNames;var be=Object.prototype.hasOwnProperty;var we=(m,e)=>{for(var t in e)ue(m,t,{get:e[t],enumerable:!0})},Ee=(m,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ye(e))!be.call(m,s)&&s!==t&&ue(m,s,{get:()=>e[s],enumerable:!(n=ve(e,s))||n.enumerable});return m};var Le=m=>Ee(ue({},"__esModule",{value:!0}),m);var Se={};we(Se,{Vanduo:()=>he,default:()=>Ae});module.exports=Le(Se);(function(){"use strict";function m(s){return s?Array.isArray(s)?s.filter(function(r){return typeof r=="function"}):typeof s=="function"?[s]:[]:[]}function e(s){return typeof s=="function"?{onDestroy:[s]}:s||{}}function t(s,r){try{r()}catch(a){console.warn("[Vanduo Lifecycle] "+s+" error:",a)}}let n={instances:new Map,isRoot:function(s){return!!s&&(s===document||s.nodeType===1||s.nodeType===9||s.nodeType===11)},normalizeRoot:function(s){return this.isRoot(s)?s:document},isInRoot:function(s,r){let a=this.normalizeRoot(s);return r instanceof Element?a===document?document.documentElement?document.documentElement.contains(r):document.contains(r):a===r?!0:typeof a.contains=="function"&&a.contains(r):!1},queryAll:function(s,r){let a=this.normalizeRoot(s),i=[];if(a instanceof Element&&typeof a.matches=="function"&&a.matches(r)&&i.push(a),typeof a.querySelectorAll=="function"){let o=a.querySelectorAll(r);for(let c=0;c<o.length;c++)i.push(o[c])}return i},queryOne:function(s,r){let a=this.queryAll(s,r);return a.length?a[0]:null},runInRoot:function(s,r){let a=this.normalizeRoot(s);return r(a)},register:function(s,r,a,i){if(!(s instanceof Element)||!r)return;let o=e(i),c=m(a),l=m(o.onDestroy),u=this.instances.get(s)||new Map,f=u.get(r);if(f){f.cleanup=f.cleanup.concat(c),f.onDestroy=f.onDestroy.concat(l);return}u.set(r,{component:r,cleanup:c,onDestroy:l,registeredAt:Date.now()}),this.instances.set(s,u)},unregister:function(s,r){let a=this.instances.get(s);if(!a)return;if(r){let o=a.get(r);if(!o)return;a.delete(r),a.size||this.instances.delete(s),o.cleanup.forEach(function(c){t("Cleanup",c)}),o.onDestroy.forEach(function(c){t("Destroy",c)});return}let i=Array.from(a.values());this.instances.delete(s),i.forEach(function(o){o.cleanup.forEach(function(c){t("Cleanup",c)}),o.onDestroy.forEach(function(c){t("Destroy",c)})})},destroyAll:function(s){let r=[];return this.instances.forEach(function(a,i){if(!s){r.push([i,null]);return}a.has(s)&&r.push([i,s])}),r.forEach(function(a){n.unregister(a[0],a[1]||void 0)}),r.length},destroyAllInContainer:function(s,r){let a=this.normalizeRoot(s),i=[];return this.instances.forEach(function(o,c){if(n.isInRoot(a,c)){if(!r){i.push([c,null]);return}o.has(r)&&i.push([c,r])}}),i.forEach(function(o){n.unregister(o[0],o[1]||void 0)}),i.length},getAll:function(){let s=[];return this.instances.forEach(function(r,a){r.forEach(function(i){s.push({element:a,component:i.component,registeredAt:i.registeredAt})})}),s},has:function(s,r){let a=this.instances.get(s);return a?r?a.has(r):a.size>0:!1}};window.addEventListener("beforeunload",function(){n.destroyAll()}),window.VanduoLifecycle=n})();(function(){"use strict";let m="1.6.0",e=Object.prototype.hasOwnProperty,t={version:m,components:{},aliases:{},_decoratedComponents:new WeakSet,resolveComponentName:function(n){return this.aliases[n]||n},_isRoot:function(n){return typeof window.VanduoLifecycle<"u"&&typeof window.VanduoLifecycle.isRoot=="function"?window.VanduoLifecycle.isRoot(n):!!n&&(n===document||n.nodeType===1||n.nodeType===9||n.nodeType===11)},_normalizeRoot:function(n){return this._isRoot(n)?n:document},_queryAll:function(n,s){let r=this._normalizeRoot(n),a=[];if(r instanceof Element&&typeof r.matches=="function"&&r.matches(s)&&a.push(r),typeof r.querySelectorAll=="function"){let i=r.querySelectorAll(s);for(let o=0;o<i.length;o++)a.push(i[o])}return a},queryAll:function(n,s){return typeof s>"u"&&(s=n,n=document),this._queryAll(n,s)},queryOne:function(n,s){let r=this.queryAll(n,s);return r.length?r[0]:null},_isLifecycleManagedComponent:function(n){if(!n||typeof n!="object")return!1;for(let s in n)if(e.call(n,s)&&n[s]instanceof Map)return!0;return!1},_syncComponentLifecycle:function(n,s,r){let a=window.VanduoLifecycle;if(!a||!this._isLifecycleManagedComponent(s))return;let i=this.resolveComponentName(n),o=this._normalizeRoot(r);for(let c in s)!e.call(s,c)||!(s[c]instanceof Map)||s[c].forEach(function(l,u){if(!(u instanceof Element)||!a.isInRoot(o,u)||a.has(u,i))return;if(typeof s.destroy=="function"){a.register(u,i,[],function(){s.destroy(u)});return}let f=l&&Array.isArray(l.cleanup)?l.cleanup:[];a.register(u,i,f,function(){s[c].delete(u)})})},_decorateComponent:function(n,s){let r=this,a=window.VanduoLifecycle;if(!s||typeof s!="object"||this._decoratedComponents.has(s))return;let i=typeof s.init=="function"?s.init:null;i&&(s.init=function(...c){let l=r._isRoot(c[0])?c[0]:null,u=i.apply(this,c);if(window.Vanduo){let f=l||document;window.Vanduo._syncComponentLifecycle(n,this,f)}return u});let o=typeof s.destroyAll=="function"?s.destroyAll:null;o&&(s.destroyAll=function(...c){let l=r._isRoot(c[0])?c[0]:null,u=window.Vanduo?window.Vanduo.resolveComponentName(n):n;if(a&&window.Vanduo&&window.Vanduo._isLifecycleManagedComponent(this)){if(l&&l!==document)return a.destroyAllInContainer(l,u),this.__vanduoScopedDestroyAll===!0?o.apply(this,c):void 0;a.destroyAll(u)}return o.apply(this,c)}),this._decoratedComponents.add(s)},init:function(n){let s=this._normalizeRoot(n);if(s!==document){this.initComponents(s);return}if(typeof ready<"u"){ready(()=>{this.initComponents(document)});return}if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",()=>{this.initComponents(document)});return}this.initComponents(document)},initComponents:function(n){let s=this._normalizeRoot(n);Object.keys(this.components).forEach(r=>{let a=this.components[r];if(a.init&&typeof a.init=="function")try{a.init(s)}catch(i){console.warn('[Vanduo] Failed to initialize component "'+r+'":',i)}})},register:function(n,s,r){let a=r||{};this._decorateComponent(n,s),this.components[n]=s,Array.isArray(a.aliases)&&a.aliases.forEach(i=>{this.aliases[i]=n})},registerAlias:function(n,s){let r=this.resolveComponentName(s);this.components[r]&&(this.aliases[n]=r)},reinit:function(n,s){let r=this._normalizeRoot(s),a=this.resolveComponentName(n),i=this.components[a];if(i&&i.init&&typeof i.init=="function")try{i.destroyAll&&typeof i.destroyAll=="function"&&i.destroyAll(r),i.init(r)}catch(o){console.warn('[Vanduo] Failed to reinitialize component "'+a+'":',o)}},destroy:function(n){let s=this._normalizeRoot(n),r=Object.keys(this.components);for(let a=0;a<r.length;a++){let i=this.components[r[a]];if(i&&i.destroyAll&&typeof i.destroyAll=="function")try{i.destroyAll(s)}catch(o){console.warn('[Vanduo] Failed to destroy component "'+r[a]+'":',o)}}},destroyAll:function(){this.destroy(document)},getComponent:function(n){let s=this.resolveComponentName(n);return this.components[s]||null}};window.Vanduo=t})();(function(){"use strict";let m={_snippetIdCounter:0,resolveRoot:function(e){return e&&(e.nodeType===1||e.nodeType===9||e.nodeType===11)?e:document},queryWithin:function(e,t){let n=this.resolveRoot(e),s=[];if(n instanceof Element&&typeof n.matches=="function"&&n.matches(t)&&s.push(n),typeof n.querySelectorAll=="function"){let r=n.querySelectorAll(t);for(let a=0;a<r.length;a++)s.push(r[a])}return s},getSnippetInstanceId:function(e){if(e.dataset.codeSnippetId)return e.dataset.codeSnippetId;let t=(e.id||"").trim();return t?(e.dataset.codeSnippetId=`snippet-${t}`,e.dataset.codeSnippetId):(this._snippetIdCounter+=1,e.dataset.codeSnippetId=`snippet-auto-${this._snippetIdCounter}`,e.dataset.codeSnippetId)},addListener:function(e,t,n,s){t&&(t.addEventListener(n,s),e._codeSnippetCleanup||(e._codeSnippetCleanup=[]),e._codeSnippetCleanup.push(()=>t.removeEventListener(n,s)))},init:function(e){this.queryWithin(e,".vd-code-snippet").forEach(n=>{n.dataset.initialized!=="true"&&this.initSnippet(n)})},initSnippet:function(e){if(e.dataset.initialized==="true")return;e._codeSnippetCleanup=[];let t=e.querySelector(".vd-code-snippet-toggle"),n=e.querySelector(".vd-code-snippet-content");t&&n&&this.initCollapsible(e,t,n);let s=e.querySelectorAll(".vd-code-snippet-tab"),r=e.querySelectorAll(".vd-code-snippet-pane");s.length>0&&this.initTabs(e,s,r);let a=e.querySelector(".vd-code-snippet-copy");a&&this.initCopyButton(e,a),e.querySelectorAll("[data-extract]").forEach(l=>{this.extractHtml(l)}),e.querySelectorAll(".vd-code-snippet-pane:not([data-extract])").forEach(l=>{this.applyPaneHighlighting(l)}),e.querySelectorAll(".has-line-numbers").forEach(l=>{this.addLineNumbers(l)}),e.dataset.initialized="true"},initCollapsible:function(e,t,n){let s=e.dataset.expanded==="true";t.setAttribute("aria-expanded",s?"true":"false"),n.dataset.visible=s?"true":"false",this.addListener(e,t,"click",()=>{let r=e.dataset.expanded==="true",a=!r;e.dataset.expanded=a?"true":"false",t.setAttribute("aria-expanded",a?"true":"false"),n.dataset.visible=a?"true":"false",r||n.querySelectorAll("[data-extract]:not([data-extracted])").forEach(c=>{this.extractHtml(c)});let i=new CustomEvent("codesnippet:toggle",{bubbles:!0,detail:{snippet:e,expanded:!r}});e.dispatchEvent(i)})},initTabs:function(e,t,n){let s=this.getSnippetInstanceId(e),r=e.querySelector(".vd-code-snippet-tabs");r&&r.setAttribute("role","tablist"),t.forEach((a,i)=>{let o=a.dataset.lang,c=a.classList.contains("is-active");a.setAttribute("role","tab"),a.setAttribute("aria-selected",c),a.setAttribute("tabindex",c?"0":"-1"),a.id=a.id||`code-tab-${s}-${o||"tab"}-${i}`;let l=e.querySelector(`.vd-code-snippet-pane[data-lang="${o}"]`);l&&(l.id=l.id||`code-pane-${s}-${o||"pane"}-${i}`,l.setAttribute("role","tabpanel"),a.setAttribute("aria-controls",l.id),l.setAttribute("aria-labelledby",a.id)),this.addListener(e,a,"click",()=>{this.switchTab(e,a,t,n)}),this.addListener(e,a,"keydown",u=>{this.handleTabKeydown(u,e,t,n)})})},switchTab:function(e,t,n,s){let r=t.dataset.lang;n.forEach(o=>{o.classList.remove("is-active"),o.setAttribute("aria-selected","false"),o.setAttribute("tabindex","-1")}),s.forEach(o=>{o.classList.remove("is-active")}),t.classList.add("is-active"),t.setAttribute("aria-selected","true"),t.setAttribute("tabindex","0");let a=e.querySelector(`.vd-code-snippet-pane[data-lang="${r}"]`);a&&a.classList.add("is-active");let i=new CustomEvent("codesnippet:tabchange",{bubbles:!0,detail:{snippet:e,tab:t,lang:r}});e.dispatchEvent(i)},handleTabKeydown:function(e,t,n,s){let r=Array.from(n),a=r.indexOf(e.target),i;switch(e.key){case"ArrowLeft":e.preventDefault(),i=a>0?a-1:r.length-1;break;case"ArrowRight":e.preventDefault(),i=a<r.length-1?a+1:0;break;case"Home":e.preventDefault(),i=0;break;case"End":e.preventDefault(),i=r.length-1;break;default:return}i!==a&&(r[i].focus(),this.switchTab(t,r[i],n,s))},initCopyButton:function(e,t){this.addListener(e,t,"click",async()=>{await this.copyCode(e,t)})},copyCode:async function(e,t){let n=e.querySelector(".vd-code-snippet-pane.is-active")||e.querySelector(".vd-code-snippet-pane");if(!n){console.warn("CodeSnippet: No code pane found");return}let r=(n.querySelector("code")||n).textContent,a;try{await navigator.clipboard.writeText(r),a=!0}catch{a=this.fallbackCopy(r)}this.showCopyFeedback(t,a);let i=new CustomEvent("codesnippet:copy",{bubbles:!0,detail:{snippet:e,code:r,success:a}});e.dispatchEvent(i)},fallbackCopy:function(e){let t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.left="-9999px",t.style.top="-9999px",document.body.appendChild(t),t.focus(),t.select();let n=!1;try{n=document.execCommand("copy")}catch(s){console.warn("CodeSnippet: Fallback copy failed",s)}return document.body.removeChild(t),n},showCopyFeedback:function(e,t){if(t){e.classList.add("is-copied");let n=document.createElement("span");n.setAttribute("role","status"),n.setAttribute("aria-live","polite"),n.className="sr-only",n.textContent="Code copied to clipboard",e.appendChild(n),setTimeout(()=>{e.classList.remove("is-copied"),n.parentNode&&n.parentNode.removeChild(n)},2e3)}},extractHtml:function(e){let t=e.dataset.extract;if(!t)return;let n=document.querySelector(t);if(!n){console.warn(`CodeSnippet: Source element not found: ${t}`);return}let s=n.innerHTML;s=this.formatHtml(s),s=this.escapeHtml(s),s=this.highlightHtml(s);let r=document.createElement("code");r.innerHTML=s,e.replaceChildren(r),e.dataset.extracted="true",e.dataset.highlighted="true"},formatHtml:function(e){e=e.trim();let t=e.split(`
|
|
3
|
+
`),n=0,s=2,r=[];return t.forEach(a=>{if(a=a.trim(),!a)return;a.match(/^<\/\w/)&&(n=Math.max(0,n-s)),r.push(" ".repeat(n)+a);let i=/<[a-zA-Z]/.test(a),o=a.includes("/>");i&&!o&&(a.match(/<(br|hr|img|input|meta|link|area|base|col|embed|param|source|track|wbr)/i)||a.match(/<\/\w+>$/)||(n+=s))}),r.join(`
|
|
4
|
+
`)},escapeHtml:function(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML},needsHighlighting:function(e,t){return!(!t||e.dataset.highlighted==="true"||t.querySelector('[class^="code-"], [class*=" code-"]'))},getHighlightMode:function(e){let t=String(e||"").trim().toLowerCase();return["html","xml","svg","vue","svelte","astro"].includes(t)?"html":["css","scss","sass","less"].includes(t)?"css":["js","mjs","cjs","ts","jsx","tsx","json","bash","sh"].includes(t)?"js":"plain"},highlightCodeByLang:function(e,t){let n=this.escapeHtml(e),s=this.getHighlightMode(t);return s==="html"?this.highlightHtml(n):s==="css"?this.highlightCss(n):s==="js"?this.highlightJs(n):n},applyPaneHighlighting:function(e){if(!e)return;let t=e.querySelector("code")||e;if(!this.needsHighlighting(e,t)){e.dataset.highlighted="true";return}let n=t.textContent||"",s=this.highlightCodeByLang(n,e.dataset.lang),r=t.tagName==="CODE"?t:document.createElement("code");r.innerHTML=s,r!==t&&e.replaceChildren(r),e.dataset.highlighted="true"},highlightHtml:function(e){return e=e.replace(/(<!--)(.*?)(-->)/g,'<span class="code-comment">$1$2$3</span>'),e=e.replace(/<(?!--)([\s\S]*?)>/g,function(t,n){let s=n.match(/^(\/)([\w-]+)\s*$/);if(s)return"<"+s[1]+'<span class="code-tag">'+s[2]+"</span>>";let r=n.match(/(\s*\/)\s*$/),a=r?r[1]:"",o=(r?n.slice(0,n.length-r[0].length):n).match(/^([\w-]+)([\s\S]*)$/);if(!o)return t;let c=o[1],l=o[2];return l=l.replace(/([\w:-]+)(\s*=\s*)(["'])([\s\S]*?)\3/g,function(u,f,h,d,p){return'<span class="code-attr">'+f+"</span>"+h+d+'<span class="code-string">'+p+"</span>"+d}),l=l.replace(/([\w:-]+)(\s*=\s*)("|')([\s\S]*?)("|')/g,function(u,f,h,d,p,g){return d!==g?u:'<span class="code-attr">'+f+"</span>"+h+d+'<span class="code-string">'+p+"</span>"+g}),'<<span class="code-tag">'+c+"</span>"+l+a+">"}),e},highlightCss:function(e){return e=e.replace(/([.#]?[a-zA-Z][a-zA-Z0-9_-]{0,200})(\s*\{)/g,'<span class="code-selector">$1</span>$2'),e=e.replace(/([a-zA-Z][a-zA-Z0-9_-]{0,200})(\s*:)/g,'<span class="code-property">$1</span>$2'),e=e.replace(/:\s*([^;{}]+)(;)/g,': <span class="code-value">$1</span>$2'),e=e.replace(/(\d+)(px|rem|em|%|vh|vw|deg|s|ms)/g,'<span class="code-number">$1</span><span class="code-unit">$2</span>'),e=e.replace(/(\/\*[\s\S]*?\*\/)/g,'<span class="code-comment">$1</span>'),e},highlightJs:function(e){let t=[],n=(r,a)=>{let i=String.fromCharCode(57344+t.length);return t.push({marker:i,html:'<span class="'+a+'">'+r+"</span>"}),i};return e=e.replace(/\/\*[\s\S]*?\*\/|\/\/.*$|'(?:[^'\\]|\\.){0,10000}'|"(?:[^"\\]|\\.){0,10000}"|`(?:[^`\\]|\\.){0,10000}`/gm,r=>n(r,r.startsWith("/")?"code-comment":"code-string")),["const","let","var","function","return","if","else","for","while","switch","case","break","continue","new","this","class","extends","import","export","default","async","await","try","catch","throw","typeof","instanceof"].forEach(r=>{let a=new RegExp(`\\b(${r})\\b`,"g");e=e.replace(a,'<span class="code-keyword">$1</span>')}),e=e.replace(/\b(\d+\.?\d*)\b/g,'<span class="code-number">$1</span>'),e=e.replace(/\b([\w]+)(\s*\()/g,'<span class="code-function">$1</span>$2'),t.forEach(r=>{e=e.replace(r.marker,r.html)}),e},addLineNumbers:function(e){let t=e.querySelector("code");if(!t)return;let s=t.innerHTML.split(`
|
|
5
|
+
`).length,r=document.createElement("div");r.className="vd-code-snippet-line-numbers",r.setAttribute("aria-hidden","true");for(let i=1;i<=s;i++){let o=document.createElement("span");o.textContent=i,r.appendChild(o)}let a=document.createElement("div");a.className="vd-code-snippet-code",a.appendChild(t.cloneNode(!0)),t.parentNode.removeChild(t),e.appendChild(r),e.appendChild(a)},expand:function(e){if(typeof e=="string"&&(e=document.querySelector(e)),!e)return;e.dataset.expanded="true";let t=e.querySelector(".vd-code-snippet-toggle"),n=e.querySelector(".vd-code-snippet-content");t&&t.setAttribute("aria-expanded","true"),n&&(n.dataset.visible="true")},collapse:function(e){if(typeof e=="string"&&(e=document.querySelector(e)),!e)return;e.dataset.expanded="false";let t=e.querySelector(".vd-code-snippet-toggle"),n=e.querySelector(".vd-code-snippet-content");t&&t.setAttribute("aria-expanded","false"),n&&(n.dataset.visible="false")},showLang:function(e,t){if(typeof e=="string"&&(e=document.querySelector(e)),!e)return;let n=e.querySelector(`.vd-code-snippet-tab[data-lang="${t}"]`),s=e.querySelectorAll(".vd-code-snippet-tab"),r=e.querySelectorAll(".vd-code-snippet-pane");n&&this.switchTab(e,n,s,r)},destroy:function(e){typeof e=="string"&&(e=document.querySelector(e)),e&&(e._codeSnippetCleanup&&(e._codeSnippetCleanup.forEach(t=>t()),delete e._codeSnippetCleanup),delete e.dataset.initialized)},destroyAll:function(e){let t=this.resolveRoot(e);this.queryWithin(t,'.vd-code-snippet[data-initialized="true"]').forEach(s=>{this.destroy(s)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("codeSnippet",m),window.CodeSnippet=m})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-collapsible, .accordion").forEach(n=>{this.instances.has(n)||this.initCollapsible(n)})},initCollapsible:function(e){let t=e.classList.contains("accordion"),n=e.querySelectorAll(".vd-collapsible-item, .accordion-item"),s=[];n.forEach(r=>{let a=r.querySelector(".vd-collapsible-header, .accordion-header"),i=r.querySelector(".vd-collapsible-body, .accordion-body"),o=r.querySelector(".vd-collapsible-trigger, .accordion-trigger")||a;if(!a||!i)return;r.classList.contains("is-open")?this.openItem(r,i,!1):this.closeItem(r,i,!1);let c=l=>{l.preventDefault(),this.toggleItem(r,i,e,t)};o.addEventListener("click",c),s.push(()=>o.removeEventListener("click",c))}),this.instances.set(e,{cleanup:s})},toggleItem:function(e,t,n,s){e.classList.contains("is-open")?this.closeItem(e,t):(s&&n.querySelectorAll(".vd-collapsible-item.is-open, .accordion-item.is-open").forEach(i=>{if(i!==e){let o=i.querySelector(".vd-collapsible-body, .accordion-body");this.closeItem(i,o)}}),this.openItem(e,t))},openItem:function(e,t,n=!0){n||(t.style.transition="none"),e.classList.add("is-open"),e.setAttribute("aria-expanded","true");let s=t.scrollHeight;t.style.maxHeight=`${s}px`,n||setTimeout(()=>{t.style.transition=""},0),e.dispatchEvent(new CustomEvent("collapsible:open",{bubbles:!0}))},closeItem:function(e,t,n=!0){n||(t.style.transition="none"),e.classList.remove("is-open"),e.setAttribute("aria-expanded","false"),t.style.maxHeight="0",n||setTimeout(()=>{t.style.transition=""},0),e.dispatchEvent(new CustomEvent("collapsible:close",{bubbles:!0}))},open:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t){let n=t.querySelector(".vd-collapsible-body, .accordion-body");n&&this.openItem(t,n)}},close:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t){let n=t.querySelector(".vd-collapsible-body, .accordion-body");n&&this.closeItem(t,n)}},toggle:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t){let n=t.querySelector(".vd-collapsible-body, .accordion-body"),s=t.closest(".vd-collapsible, .accordion"),r=s&&s.classList.contains("accordion");n&&this.toggleItem(t,n,s,r)}},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("collapsible",m),window.VanduoCollapsible=m})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-dropdown").forEach(n=>{this.instances.has(n)||this.initDropdown(n)})},initDropdown:function(e){let t=e.querySelector(".vd-dropdown-toggle"),n=e.querySelector(".vd-dropdown-menu");if(!t||!n)return;let s=[];t.setAttribute("aria-haspopup","true"),t.setAttribute("aria-expanded","false"),n.setAttribute("role","menu"),n.setAttribute("aria-hidden","true");let r=c=>{c.preventDefault(),c.stopPropagation(),this.toggleDropdown(e,t,n)};t.addEventListener("click",r),s.push(()=>t.removeEventListener("click",r));let a=c=>{!e.contains(c.target)&&n.classList.contains("is-open")&&this.closeDropdown(e,t,n)};document.addEventListener("click",a),s.push(()=>document.removeEventListener("click",a));let i=c=>{this.handleKeydown(c,e,t,n)};t.addEventListener("keydown",i),s.push(()=>t.removeEventListener("keydown",i)),n.querySelectorAll(".vd-dropdown-item:not(.disabled):not(.is-disabled)").forEach(c=>{let l=f=>{f.preventDefault(),this.selectItem(c,e,t,n)};c.addEventListener("click",l),s.push(()=>c.removeEventListener("click",l));let u=f=>{(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),this.selectItem(c,e,t,n))};c.addEventListener("keydown",u),s.push(()=>c.removeEventListener("keydown",u))}),this.instances.set(e,{toggle:t,menu:n,cleanup:s,typeaheadBuffer:"",typeaheadTimer:null})},toggleDropdown:function(e,t,n){n.classList.contains("is-open")?this.closeDropdown(e,t,n):this.openDropdown(e,t,n)},openDropdown:function(e,t,n){document.querySelectorAll(".vd-dropdown-menu.is-open").forEach(a=>{if(a!==n){let i=a.closest(".vd-dropdown"),o=i.querySelector(".vd-dropdown-toggle");this.closeDropdown(i,o,a)}}),e.classList.add("is-open"),n.classList.add("is-open"),t.setAttribute("aria-expanded","true"),n.setAttribute("aria-hidden","false"),this.positionMenu(e,n);let r=n.querySelector(".vd-dropdown-item:not(.disabled):not(.is-disabled)");r&&setTimeout(()=>r.focus(),0)},closeDropdown:function(e,t,n){e.classList.remove("is-open"),n.classList.remove("is-open"),t.setAttribute("aria-expanded","false"),n.setAttribute("aria-hidden","true"),t.focus()},positionMenu:function(e,t){let n=e.getBoundingClientRect(),s=t.getBoundingClientRect(),r=window.innerWidth,a=window.innerHeight,i=8;if(t.classList.remove("vd-dropdown-menu-end","vd-dropdown-menu-start","vd-dropdown-menu-top"),e.classList.contains("vd-dropdown-dropup")){t.classList.add("vd-dropdown-menu-top");return}e.classList.contains("vd-dropdown-dropright")||e.classList.contains("vd-dropdown-dropleft")||(n.left+s.width>r-i?t.classList.add("vd-dropdown-menu-end"):t.classList.add("vd-dropdown-menu-start"),n.bottom+s.height>a-i&&n.top-s.height>i&&t.classList.add("vd-dropdown-menu-top"))},handleKeydown:function(e,t,n,s){let r=s.classList.contains("is-open"),a=Array.from(s.querySelectorAll(".vd-dropdown-item:not(.disabled):not(.is-disabled)")),i=a.findIndex(o=>o===document.activeElement);switch(e.key){case"Enter":case" ":case"ArrowDown":if(e.preventDefault(),!r)this.openDropdown(t,n,s);else if(e.key==="ArrowDown"){let o=i<a.length-1?i+1:0;a[o].focus()}break;case"ArrowUp":if(r){e.preventDefault();let o=i>0?i-1:a.length-1;a[o].focus()}break;case"Escape":r&&(e.preventDefault(),this.closeDropdown(t,n,s));break;case"Home":r&&(e.preventDefault(),a[0].focus());break;case"End":r&&(e.preventDefault(),a[a.length-1].focus());break;default:if(r&&e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey){let o=this.instances.get(t);if(!o)break;clearTimeout(o.typeaheadTimer),o.typeaheadBuffer+=e.key.toLowerCase();let c=a.find(l=>l.textContent.trim().toLowerCase().startsWith(o.typeaheadBuffer));c&&c.focus(),o.typeaheadTimer=setTimeout(()=>{o.typeaheadBuffer=""},500)}break}},selectItem:function(e,t,n,s){s.querySelectorAll(".vd-dropdown-item").forEach(r=>{r.classList.remove("active","is-active")}),e.classList.add("active","is-active"),(n.tagName==="BUTTON"||n.classList.contains("btn"))&&(n.textContent=e.textContent.trim()),this.closeDropdown(t,n,s),e.dispatchEvent(new CustomEvent("dropdown:select",{bubbles:!0,detail:{item:e,value:e.dataset.value||e.textContent}}))},open:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t){let n=t.querySelector(".vd-dropdown-toggle"),s=t.querySelector(".vd-dropdown-menu");n&&s&&this.openDropdown(t,n,s)}},close:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t){let n=t.querySelector(".vd-dropdown-toggle"),s=t.querySelector(".vd-dropdown-menu");n&&s&&this.closeDropdown(t,n,s)}},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("dropdown",m),window.VanduoDropdown=m})();(function(){"use strict";let m={STORAGE_KEY:"vanduo-font-preference",isInitialized:!1,fonts:{system:{name:"System Default",family:null},"jetbrains-mono":{name:"JetBrains Mono",family:"'JetBrains Mono', monospace"},ubuntu:{name:"Ubuntu",family:"'Ubuntu', sans-serif",category:"sans-serif",description:"Friendly, humanist sans-serif"},"open-sans":{name:"Open Sans",family:"'Open Sans', sans-serif",category:"sans-serif",description:"Neutral, highly readable"},lato:{name:"Lato",family:"'Lato', sans-serif",category:"sans-serif",description:"Friendly, rounded sans-serif"}},getToggles:function(e){return window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,'[data-toggle="font"]'):Array.from(document.querySelectorAll('[data-toggle="font"]'))},init:function(e){if(this.state={preference:this.getPreference()},this.fonts[this.state.preference]||(this.state.preference="ubuntu",this.setStorageValue(this.STORAGE_KEY,this.state.preference)),this.isInitialized){this.applyFont(),this.renderUI(e),this.updateUI(e);return}this.isInitialized=!0,this.applyFont(),this.renderUI(e)},getPreference:function(){return this.getStorageValue(this.STORAGE_KEY,"ubuntu")},setPreference:function(e){if(!this.fonts[e]){console.warn("Unknown font:",e);return}this.state.preference=e,this.setStorageValue(this.STORAGE_KEY,e),this.applyFont(),this.updateUI();let t=new CustomEvent("font:change",{bubbles:!0,detail:{font:e,fontData:this.fonts[e]}});document.dispatchEvent(t)},applyFont:function(){let e=this.state.preference;e==="system"?document.documentElement.removeAttribute("data-font"):document.documentElement.setAttribute("data-font",e)},renderUI:function(e){this.getToggles(e).forEach(n=>{if(n.getAttribute("data-font-initialized")==="true"){n.tagName==="SELECT"&&(n.value=this.state.preference);return}if(n.tagName==="SELECT"){n.value=this.state.preference;let s=r=>{this.setPreference(r.target.value)};n.addEventListener("change",s),n._fontToggleHandler=s}else{let s=()=>{let r=Object.keys(this.fonts),i=(r.indexOf(this.state.preference)+1)%r.length;this.setPreference(r[i])};n.addEventListener("click",s),n._fontToggleHandler=s}n.setAttribute("data-font-initialized","true")})},updateUI:function(e){this.getToggles(e).forEach(n=>{if(n.tagName==="SELECT")n.value=this.state.preference;else{let s=n.querySelector(".font-current-label");s&&(s.textContent=this.fonts[this.state.preference].name)}})},getCurrentFont:function(){return this.state.preference},getFontData:function(e){return this.fonts[e]||null},destroyAll:function(e){this.getToggles(e||document).filter(function(n){return n.getAttribute("data-font-initialized")==="true"}).forEach(n=>{if(n._fontToggleHandler){let s=n.tagName==="SELECT"?"change":"click";n.removeEventListener(s,n._fontToggleHandler),delete n._fontToggleHandler}n.removeAttribute("data-font-initialized")}),(!e||e===document)&&(this.isInitialized=!1)},getStorageValue:function(e,t){if(typeof window.safeStorageGet=="function")return window.safeStorageGet(e,t);try{let n=localStorage.getItem(e);return n!==null?n:t}catch{return t}},setStorageValue:function(e,t){if(typeof window.safeStorageSet=="function")return window.safeStorageSet(e,t);try{return localStorage.setItem(e,t),!0}catch{return!1}}};window.Vanduo&&window.Vanduo.register("fontSwitcher",m),window.FontSwitcher=m})();(function(){"use strict";let m=(function(){try{return CSS.supports("selector(:has(*))")}catch{return!1}})(),e={instances:new Map,__vanduoScopedDestroyAll:!0,init:function(t){window.Vanduo.queryAll(t,"[data-layout-mode]").forEach(function(s){this.instances.has(s)||this.initContainer(s)}.bind(this)),this.initToggleButtons(t)},initContainer:function(t){let n=t.getAttribute("data-layout-mode")||"standard",s=[];this.applyMode(t,n),t.setAttribute("role","region"),t.setAttribute("aria-label","Grid layout: "+n+" mode"),this.instances.set(t,{cleanup:s,mode:n})},initToggleButtons:function(t){(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(t,"[data-grid-toggle]"):document.querySelectorAll("[data-grid-toggle]")).forEach(function(s){if(s.getAttribute("data-grid-initialized")==="true")return;let r=function(a){a.preventDefault();let i=s.getAttribute("data-grid-toggle"),o;i?o=document.querySelector(i):o=s.closest("[data-layout-mode]"),o&&this.toggle(o)}.bind(this);s.addEventListener("click",r),s.setAttribute("data-grid-initialized","true"),s.setAttribute("aria-pressed","false"),s._gridCleanup=function(){s.removeEventListener("click",r),s.removeAttribute("data-grid-initialized"),s.removeAttribute("aria-pressed")}}.bind(this))},applyFibFallback:function(t){if(m)return;t.querySelectorAll(".vd-row, .row").forEach(function(s){let a=s.querySelectorAll(':scope > [class*="vd-col-"], :scope > [class*="col-"]').length;a===1?s.style.gridTemplateColumns="1fr":a===2?s.style.gridTemplateColumns="1fr 1.618fr":a===3?s.style.gridTemplateColumns="2fr 3fr 5fr":a===4?s.style.gridTemplateColumns="1fr 2fr 3fr 5fr":s.style.gridTemplateColumns="repeat("+a+", 1fr)"})},removeFibFallback:function(t){t.querySelectorAll(".vd-row, .row").forEach(function(s){s.style.gridTemplateColumns=""})},applyMode:function(t,n){t.classList.remove("vd-grid-standard","vd-grid-fibonacci"),n==="fibonacci"?(t.classList.add("vd-grid-fibonacci"),this.applyFibFallback(t)):(t.classList.add("vd-grid-standard"),this.removeFibFallback(t)),t.setAttribute("data-layout-mode",n),t.setAttribute("aria-label","Grid layout: "+n+" mode"),document.querySelectorAll("[data-grid-toggle]").forEach(function(i){let o=i.getAttribute("data-grid-toggle");if(o&&t.matches(o)){let c=n==="fibonacci";c?i.classList.add("is-active"):i.classList.remove("is-active"),i.setAttribute("aria-pressed",c?"true":"false")}});let r=this.instances.get(t);r&&(r.mode=n);let a;try{a=new CustomEvent("grid:modechange",{bubbles:!0,detail:{container:t,mode:n}})}catch{a=document.createEvent("CustomEvent"),a.initCustomEvent("grid:modechange",!0,!0,{container:t,mode:n})}t.dispatchEvent(a)},toggle:function(t){if(typeof t=="string"&&(t=document.querySelector(t)),!t)return;let s=(t.getAttribute("data-layout-mode")||"standard")==="fibonacci"?"standard":"fibonacci";this.applyMode(t,s)},setMode:function(t,n){typeof t=="string"&&(t=document.querySelector(t)),t&&(n!=="fibonacci"&&n!=="standard"||this.applyMode(t,n))},getMode:function(t){return typeof t=="string"&&(t=document.querySelector(t)),t?t.getAttribute("data-layout-mode")||"standard":null},destroy:function(t){let n=this.instances.get(t);n&&(n.cleanup.forEach(function(s){s()}),t.classList.remove("vd-grid-standard","vd-grid-fibonacci"),t.removeAttribute("aria-label"),this.removeFibFallback(t),this.instances.delete(t))},destroyAll:function(t){let n=window.Vanduo&&typeof window.Vanduo._normalizeRoot=="function"?window.Vanduo._normalizeRoot(t):t||document;this.instances.forEach(function(r,a){(n===document||n===a||typeof n.contains=="function"&&n.contains(a))&&this.destroy(a)}.bind(this)),(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(n,'[data-grid-toggle][data-grid-initialized="true"]'):document.querySelectorAll('[data-grid-initialized="true"]')).forEach(function(r){r._gridCleanup&&(r._gridCleanup(),delete r._gridCleanup)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("gridLayout",e),window.VanduoGridLayout=e})();(function(){"use strict";let m={backdrop:null,container:null,img:null,closeBtn:null,caption:null,currentTrigger:null,scrollThreshold:50,initialScrollY:0,isOpen:!1,_cleanupFunctions:[],getTriggers:function(e){return window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,"[data-image-box]"):Array.from(document.querySelectorAll("[data-image-box]"))},init:function(e){this.createBackdrop(),this.bindTriggers(e)},createBackdrop:function(){if(this.backdrop||document.querySelector(".vd-image-box-backdrop")){this.backdrop||(this.backdrop=document.querySelector(".vd-image-box-backdrop"),this.container=this.backdrop.querySelector(".vd-image-box-container"),this.img=this.backdrop.querySelector(".vd-image-box-img"),this.closeBtn=this.backdrop.querySelector(".vd-image-box-close"),this.caption=this.backdrop.querySelector(".vd-image-box-caption"),this.bindBackdropEvents());return}this.backdrop=document.createElement("div"),this.backdrop.className="vd-image-box-backdrop",this.backdrop.setAttribute("role","dialog"),this.backdrop.setAttribute("aria-modal","true"),this.backdrop.setAttribute("aria-label","Image viewer"),this.backdrop.setAttribute("tabindex","-1"),this.container=document.createElement("div"),this.container.className="vd-image-box-container",this.img=document.createElement("img"),this.img.className="vd-image-box-img",this.img.alt="",this.closeBtn=document.createElement("button"),this.closeBtn.className="vd-image-box-close",this.closeBtn.setAttribute("aria-label","Close image viewer"),this.closeBtn.innerHTML="×",this.caption=document.createElement("div"),this.caption.className="vd-image-box-caption",this.container.appendChild(this.img),this.backdrop.appendChild(this.closeBtn),this.backdrop.appendChild(this.container),this.backdrop.appendChild(this.caption),document.body.appendChild(this.backdrop),this.bindBackdropEvents()},bindBackdropEvents:function(){let e=this,t=function(i){(i.target===e.backdrop||i.target===e.container)&&e.close()};this.backdrop.addEventListener("click",t),this._cleanupFunctions.push(()=>this.backdrop.removeEventListener("click",t));let n=function(){e.close()};this.img.addEventListener("click",n),this._cleanupFunctions.push(()=>this.img.removeEventListener("click",n));let s=function(){e.close()};this.closeBtn.addEventListener("click",s),this._cleanupFunctions.push(()=>this.closeBtn.removeEventListener("click",s));let r=function(i){i.key==="Escape"&&e.isOpen&&e.close()};document.addEventListener("keydown",r),this._cleanupFunctions.push(()=>document.removeEventListener("keydown",r));let a=function(){if(!e.isOpen)return;let i=window.scrollY;Math.abs(i-e.initialScrollY)>e.scrollThreshold&&e.close()};window.addEventListener("scroll",a,{passive:!0}),this._cleanupFunctions.push(()=>window.removeEventListener("scroll",a))},bindTriggers:function(e){let t=this;this.getTriggers(e).forEach(function(s){if(s.dataset.imageBoxInitialized)return;if(s.dataset.imageBoxInitialized="true",s.classList.add("vd-image-box-trigger"),s.tagName==="IMG"){s.complete&&s.naturalWidth===0&&s.classList.add("is-broken");let i=function(){s.classList.add("is-broken")};s.addEventListener("error",i);let o=function(){s.classList.remove("is-broken")};s.addEventListener("load",o),s._imageBoxErrorHandler=i,s._imageBoxLoadHandler=o}let r=function(i){i.preventDefault(),t.open(s)};if(s.addEventListener("click",r),s._imageBoxCleanup=()=>s.removeEventListener("click",r),s.tagName!=="BUTTON"&&s.tagName!=="A"){s.setAttribute("role","button"),s.setAttribute("tabindex","0"),s.setAttribute("aria-label","View enlarged image");let i=function(c){(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),t.open(s))};s.addEventListener("keydown",i);let o=s._imageBoxCleanup;s._imageBoxCleanup=()=>{o(),s.removeEventListener("keydown",i)}}let a=s._imageBoxCleanup;s._imageBoxCleanup=()=>{a(),s._imageBoxErrorHandler&&(s.removeEventListener("error",s._imageBoxErrorHandler),delete s._imageBoxErrorHandler),s._imageBoxLoadHandler&&(s.removeEventListener("load",s._imageBoxLoadHandler),delete s._imageBoxLoadHandler)}})},open:function(e){if(this.isOpen)return;this.currentTrigger=e,this.isOpen=!0,this.initialScrollY=window.scrollY;let t=e.dataset.imageBoxFullSrc||e.dataset.imageBoxSrc||e.src||e.href;if(!t){console.warn("[Vanduo ImageBox] No image source found for trigger:",e);return}let n=e.dataset.imageBoxCaption||e.alt||"";this.img.src=t,this.img.alt=e.alt||"",n?(this.caption.textContent=n,this.caption.style.display="block"):this.caption.style.display="none";let s=window.innerWidth-document.documentElement.clientWidth;document.body.style.setProperty("--vd-scrollbar-width",`${s}px`),document.body.classList.add("body-image-box-open"),this.backdrop.classList.add("is-visible"),this.backdrop.focus(),e.dispatchEvent(new CustomEvent("imageBox:open",{bubbles:!0,detail:{src:t}})),this.img.complete||(this.img.style.opacity="0",this._imgLoadHandler=()=>{this.img.style.opacity=""},this.img.addEventListener("load",this._imgLoadHandler,{once:!0}))},close:function(){this.isOpen&&(this.isOpen=!1,this.backdrop.classList.remove("is-visible"),document.body.classList.remove("body-image-box-open"),document.body.style.removeProperty("--vd-scrollbar-width"),this.currentTrigger&&(this.currentTrigger.focus(),this.currentTrigger.dispatchEvent(new CustomEvent("imageBox:close",{bubbles:!0})),this.currentTrigger=null),setTimeout(()=>{this.isOpen||(this._imgLoadHandler&&(this.img.removeEventListener("load",this._imgLoadHandler),this._imgLoadHandler=null),this.img.src="",this.img.alt="")},300))},reinit:function(e){this.bindTriggers(e)},destroy:function(e){if(e&&e!==document){this.getTriggers(e).forEach(s=>{s.classList.remove("vd-image-box-trigger"),s._imageBoxCleanup&&(s._imageBoxCleanup(),delete s._imageBoxCleanup),delete s.dataset.imageBoxInitialized});return}this.isOpen&&this.close(),this.backdrop&&this.backdrop.parentNode&&this.backdrop.parentNode.removeChild(this.backdrop),this._cleanupFunctions.forEach(n=>n()),this._cleanupFunctions=[],(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,"[data-image-box-initialized]"):document.querySelectorAll("[data-image-box-initialized]")).forEach(n=>{n.classList.remove("vd-image-box-trigger"),n._imageBoxCleanup&&(n._imageBoxCleanup(),delete n._imageBoxCleanup),delete n.dataset.imageBoxInitialized}),this.backdrop=null,this.container=null,this.img=null,this.closeBtn=null,this.caption=null,this.currentTrigger=null,this.isOpen=!1},destroyAll:function(e){this.destroy(e)}};typeof window.Vanduo<"u"&&window.Vanduo.register("imageBox",m),window.VanduoImageBox=m})();(function(){"use strict";let m={modals:new Map,openModals:[],zIndexCounter:1050,__vanduoScopedDestroyAll:!0,_triggerCleanups:[],_sharedEscHandler:null,getPortalState:function(e){return e._vdPortalState||(e._vdPortalState={originalParent:null,originalNextSibling:null,placeholder:null}),e._vdPortalState},portalToBody:function(e){if(!e||e.parentNode===document.body)return;let t=this.getPortalState(e);t.originalParent=e.parentNode,t.originalNextSibling=e.nextSibling,t.placeholder||(t.placeholder=document.createComment("vd-modal-placeholder")),t.originalParent.insertBefore(t.placeholder,e),document.body.appendChild(e),e.dataset.vdPortaled="true"},restoreFromPortal:function(e){if(!e)return;let t=this.getPortalState(e);if(!t.placeholder){delete e.dataset.vdPortaled;return}t.placeholder.parentNode?(t.placeholder.parentNode.insertBefore(e,t.placeholder),t.placeholder.parentNode.removeChild(t.placeholder)):t.originalParent&&t.originalParent.isConnected&&(t.originalNextSibling&&t.originalNextSibling.parentNode===t.originalParent?t.originalParent.insertBefore(e,t.originalNextSibling):t.originalParent.appendChild(e)),t.originalParent=null,t.originalNextSibling=null,t.placeholder=null,delete e.dataset.vdPortaled},init:function(e){window.Vanduo.queryAll(e,".vd-modal").forEach(s=>{this.modals.has(s)||this.initModal(s)}),(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,"[data-modal]"):document.querySelectorAll("[data-modal]")).forEach(s=>{if(s.dataset.modalTriggerInitialized)return;s.dataset.modalTriggerInitialized="true";let r=a=>{a.preventDefault();let i=s.dataset.modal,o=document.querySelector(i);o&&this.open(o)};s.addEventListener("click",r),s._modalTriggerCleanup=()=>s.removeEventListener("click",r)})},initModal:function(e){let t=this.createBackdrop(e),n=e.querySelectorAll('.vd-modal-close, [data-dismiss="modal"]'),s=e.querySelector(".vd-modal-dialog");if(!s)return;let r=[];e.setAttribute("role","dialog"),e.setAttribute("aria-modal","true"),e.setAttribute("aria-hidden","true"),e.id||(e.id="modal-"+Math.random().toString(36).substr(2,9));let a=e.querySelector(".vd-modal-title");a&&!a.id&&(a.id=e.id+"-title",e.setAttribute("aria-labelledby",a.id)),n.forEach(o=>{let c=()=>{this.close(e)};o.addEventListener("click",c),r.push(()=>o.removeEventListener("click",c))});let i=o=>{o.target===t&&e.dataset.backdrop!=="static"&&this.close(e)};t.addEventListener("click",i),r.push(()=>t.removeEventListener("click",i)),this._sharedEscHandler||(this._sharedEscHandler=o=>{if(o.key==="Escape"&&this.openModals.length>0){let c=this.openModals[this.openModals.length-1];c.dataset.keyboard!=="false"&&this.close(c)}},document.addEventListener("keydown",this._sharedEscHandler)),this.modals.set(e,{backdrop:t,dialog:s,trapHandler:null,cleanup:r})},createBackdrop:function(e){let t=e.querySelector(".vd-modal-backdrop");return t||(t=document.createElement("div"),t.className="vd-modal-backdrop",document.body.appendChild(t)),t},open:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(!t){console.warn("[Vanduo Modals] Modal element not found:",e);return}if(!this.modals.has(t)){console.warn("[Vanduo Modals] Modal not initialized:",t);return}let n=this.modals.get(t),{backdrop:s,dialog:r}=n;if(this.portalToBody(t),this.zIndexCounter+=10,t.style.zIndex=this.zIndexCounter,s.style.zIndex=this.zIndexCounter-1,this.openModals.push(t),s.classList.add("is-visible"),t.classList.add("is-open"),t.setAttribute("aria-hidden","false"),this.openModals.length===1){document.body.classList.add("body-modal-open");let i=window.innerWidth-document.documentElement.clientWidth;i>0&&(document.body.style.paddingRight=`${i}px`)}let a=this.trapFocus(t);n.trapHandler=a,setTimeout(()=>{let i=this.getFocusableElements(t)[0];i&&i.focus()},100),t.dispatchEvent(new CustomEvent("modal:open",{bubbles:!0}))},close:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(!t){console.warn("[Vanduo Modals] Modal element not found:",e);return}if(!this.modals.has(t)){console.warn("[Vanduo Modals] Modal not initialized:",t);return}let n=this.modals.get(t),{backdrop:s,trapHandler:r}=n;r&&(t.removeEventListener("keydown",r),n.trapHandler=null);let a=this.openModals.indexOf(t);if(a>-1&&this.openModals.splice(a,1),t.classList.remove("is-open"),t.setAttribute("aria-hidden","true"),this.openModals.length===0)s.classList.remove("is-visible"),document.body.classList.remove("body-modal-open"),document.body.style.paddingRight="",this.zIndexCounter=1050;else{let o=this.openModals[this.openModals.length-1];this.modals.get(o).backdrop.classList.add("is-visible")}let i=document.querySelector(`[data-modal="#${t.id}"]`);i&&i.focus(),t.dispatchEvent(new CustomEvent("modal:close",{bubbles:!0})),this.restoreFromPortal(t)},trapFocus:function(e){let t=this,n=function(s){if(s.key!=="Tab")return;let r=t.getFocusableElements(e),a=r[0],i=r[r.length-1];s.shiftKey?document.activeElement===a&&(s.preventDefault(),i.focus()):document.activeElement===i&&(s.preventDefault(),a.focus())};return e.addEventListener("keydown",n),n},getFocusableElements:function(e){return Array.from(e.querySelectorAll('a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])')).filter(n=>!n.hasAttribute("disabled")&&n.offsetWidth>0&&n.offsetHeight>0)},toggle:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&(t.classList.contains("is-open")?this.close(t):this.open(t))},destroy:function(e){let t=this.modals.get(e);if(t){if(e.classList.contains("is-open")){let n=this.openModals.indexOf(e);n>-1&&this.openModals.splice(n,1),t.backdrop.classList.remove("is-visible"),e.classList.remove("is-open"),e.setAttribute("aria-hidden","true"),this.openModals.length===0&&(document.body.classList.remove("body-modal-open"),document.body.style.paddingRight="",this.zIndexCounter=1050)}this.restoreFromPortal(e),t.cleanup&&t.cleanup.forEach(n=>n()),t.backdrop&&t.backdrop.parentNode&&t.backdrop.parentNode.removeChild(t.backdrop),this.modals.delete(e)}},destroyAll:function(e){let t=window.Vanduo&&typeof window.Vanduo._normalizeRoot=="function"?window.Vanduo._normalizeRoot(e):e||document;this.modals.forEach((s,r)=>{(t===document||t===r||typeof t.contains=="function"&&t.contains(r))&&this.destroy(r)}),(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(t,"[data-modal][data-modal-trigger-initialized]"):document.querySelectorAll("[data-modal][data-modal-trigger-initialized]")).forEach(s=>{s._modalTriggerCleanup&&(s._modalTriggerCleanup(),delete s._modalTriggerCleanup),delete s.dataset.modalTriggerInitialized}),t===document&&this._sharedEscHandler&&(document.removeEventListener("keydown",this._sharedEscHandler),this._sharedEscHandler=null)}};typeof window.Vanduo<"u"&&window.Vanduo.register("modals",m),window.VanduoModals=m})();(function(){"use strict";let m={instances:new Map,getBreakpoint:function(){let t=getComputedStyle(document.documentElement).getPropertyValue("--vd-breakpoint-lg").trim(),n=parseInt(t,10);return isNaN(n)?992:n},init:function(e){window.Vanduo.queryAll(e,".vd-navbar").forEach(n=>{this.instances.has(n)||this.initNavbar(n)})},initScrollWatcher:function(e){let t=e.classList.contains("vd-navbar-glass"),n=e.classList.contains("vd-navbar-transparent");if(!t&&!n)return null;let s=()=>{let a=parseInt(e.dataset.scrollThreshold,10);return isNaN(a)?e.offsetHeight||60:a},r=()=>{let a=window.scrollY>s();e.classList.toggle("vd-navbar-scrolled",a)};return r(),window.addEventListener("scroll",r,{passive:!0}),()=>window.removeEventListener("scroll",r)},initNavbar:function(e){let t=e.querySelector(".vd-navbar-toggle, .vd-navbar-burger"),n=e.querySelector(".vd-navbar-menu"),s=e.querySelector(".vd-navbar-overlay")||this.createOverlay(e),r=[],a=this.initScrollWatcher(e);if(a&&r.push(a),!t||!n){r.length&&this.instances.set(e,{toggle:null,menu:null,overlay:null,cleanup:r});return}let i=h=>{h.preventDefault(),h.stopPropagation(),this.toggleMenu(e,t,n,s)};if(t.addEventListener("click",i),r.push(()=>t.removeEventListener("click",i)),s){let h=()=>{this.closeMenu(e,t,n,s)};s.addEventListener("click",h),r.push(()=>s.removeEventListener("click",h))}let o=h=>{h.key==="Escape"&&n.classList.contains("is-open")&&this.closeMenu(e,t,n,s)};document.addEventListener("keydown",o),r.push(()=>document.removeEventListener("keydown",o));let c,l=()=>{clearTimeout(c),c=setTimeout(()=>{let h=this.getBreakpoint();window.innerWidth>=h&&n.classList.contains("is-open")&&this.closeMenu(e,t,n,s)},250)};window.addEventListener("resize",l),r.push(()=>{clearTimeout(c),window.removeEventListener("resize",l)});let u=h=>{n.classList.contains("is-open")&&!e.contains(h.target)&&!n.contains(h.target)&&this.closeMenu(e,t,n,s)};document.addEventListener("click",u),r.push(()=>document.removeEventListener("click",u)),n.querySelectorAll(".vd-navbar-dropdown > .vd-nav-link, .vd-navbar-dropdown > .nav-link").forEach(h=>{let d=p=>{let g=this.getBreakpoint();if(window.innerWidth<g){p.preventDefault();let T=h.parentElement.querySelector(".vd-navbar-dropdown-menu");T&&T.classList.toggle("is-open")}};h.addEventListener("click",d),r.push(()=>h.removeEventListener("click",d))}),this.instances.set(e,{toggle:t,menu:n,overlay:s,cleanup:r})},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),t.overlay&&t.overlay.parentNode&&t.overlay.parentNode.removeChild(t.overlay),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})},toggleMenu:function(e,t,n,s){n.classList.contains("is-open")?this.closeMenu(e,t,n,s):this.openMenu(e,t,n,s)},openMenu:function(e,t,n,s){n.classList.add("is-open"),t.classList.add("is-active"),s&&s.classList.add("is-active"),document.body.classList.add("body-navbar-open"),t.setAttribute("aria-expanded","true"),n.setAttribute("aria-hidden","false")},closeMenu:function(e,t,n,s){n.classList.remove("is-open"),t.classList.remove("is-active"),s&&s.classList.remove("is-active"),document.body.classList.remove("body-navbar-open"),n.querySelectorAll(".vd-navbar-dropdown-menu.is-open").forEach(a=>{a.classList.remove("is-open")}),t.setAttribute("aria-expanded","false"),n.setAttribute("aria-hidden","true")},createOverlay:function(e){let t=document.createElement("div");return t.className="vd-navbar-overlay",document.body.appendChild(t),t}};typeof window.Vanduo<"u"&&window.Vanduo.register("navbar",m),window.VanduoNavbar=m})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-pagination[data-pagination]").forEach(n=>{this.instances.has(n)||this.initPagination(n)})},initPagination:function(e){let t=parseInt(e.dataset.totalPages)||1,n=parseInt(e.dataset.currentPage)||1,s=parseInt(e.dataset.maxVisible)||7;this.render(e,{totalPages:t,currentPage:n,maxVisible:s});let r=a=>{let i=a.target.closest(".vd-pagination-link");if(!i||i.closest(".vd-pagination-item.disabled")||i.closest(".vd-pagination-item.active"))return;a.preventDefault();let o=i.closest(".vd-pagination-item"),c=o.dataset.page;c?this.goToPage(e,parseInt(c)):o.classList.contains("pagination-prev")?this.prevPage(e):o.classList.contains("pagination-next")&&this.nextPage(e)};e.addEventListener("click",r),this.instances.set(e,{cleanup:[()=>e.removeEventListener("click",r)]})},render:function(e,t){let{totalPages:n,currentPage:s,maxVisible:r}=t;if(n<=1){e.innerHTML="";return}let a="";a+=`<li class="vd-pagination-item vd-pagination-prev pagination-item pagination-prev ${s===1?"disabled":""}">`,a+='<a class="vd-pagination-link pagination-link" href="#" aria-label="Previous">Previous</a>',a+="</li>";let i=this.calculatePages(s,n,r),o=0;i.forEach(c=>{if(c==="ellipsis")a+='<li class="vd-pagination-item pagination-item"><span class="vd-pagination-ellipsis pagination-ellipsis">\u2026</span></li>';else{c!==o+1&&o>0&&(a+='<li class="vd-pagination-item pagination-item"><span class="vd-pagination-ellipsis pagination-ellipsis">\u2026</span></li>');let l=Number(c);a+=`<li class="vd-pagination-item pagination-item ${l===s?"active":""}" data-page="${l}">`,a+=`<a class="vd-pagination-link pagination-link" href="#" aria-label="Page ${l}">${l}</a>`,a+="</li>",o=c}}),a+=`<li class="vd-pagination-item vd-pagination-next pagination-item pagination-next ${s===n?"disabled":""}">`,a+='<a class="vd-pagination-link pagination-link" href="#" aria-label="Next">Next</a>',a+="</li>",e.innerHTML=a,e.dataset.currentPage=s},calculatePages:function(e,t,n){let s=[],r=Math.floor(n/2);if(t<=n)for(let a=1;a<=t;a++)s.push(a);else{s.push(1);let a=Math.max(2,e-r),i=Math.min(t-1,e+r);e<=r+1&&(i=Math.min(t-1,n-1)),e>=t-r&&(a=Math.max(2,t-n+2)),a>2&&s.push("ellipsis");for(let o=a;o<=i;o++)s.push(o);i<t-1&&s.push("ellipsis"),t>1&&s.push(t)}return s},goToPage:function(e,t){let n=parseInt(e.dataset.totalPages)||1,s=parseInt(e.dataset.maxVisible)||7;t<1||t>n||(this.render(e,{totalPages:n,currentPage:t,maxVisible:s}),e.dispatchEvent(new CustomEvent("pagination:change",{bubbles:!0,detail:{page:t,totalPages:n}})))},prevPage:function(e){let t=parseInt(e.dataset.currentPage)||1;t>1&&this.goToPage(e,t-1)},nextPage:function(e){let t=parseInt(e.dataset.currentPage)||1,n=parseInt(e.dataset.totalPages)||1;t<n&&this.goToPage(e,t+1)},update:function(e,t){let n=typeof e=="string"?document.querySelector(e):e;n&&(t.totalPages!==void 0&&(n.dataset.totalPages=t.totalPages),t.currentPage!==void 0&&(n.dataset.currentPage=t.currentPage),t.maxVisible!==void 0&&(n.dataset.maxVisible=t.maxVisible),this.render(n,{totalPages:parseInt(n.dataset.totalPages)||1,currentPage:parseInt(n.dataset.currentPage)||1,maxVisible:parseInt(n.dataset.maxVisible)||7}))},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("pagination",m),window.VanduoPagination=m})();(function(){"use strict";let m={parallaxElements:new Map,ticking:!1,isMobile:window.innerWidth<768,reducedMotion:window.matchMedia("(prefers-reduced-motion: reduce)").matches,isInitialized:!1,_onScroll:null,_onResize:null,init:function(e){if(this.reducedMotion)return;if(window.Vanduo.queryAll(e,".vd-parallax").forEach(n=>{n.dataset.parallaxInitialized||this.initParallax(n)}),this.isInitialized){this.refresh();return}this.isInitialized=!0,this.handleScroll(),this._onScroll=()=>{this.handleScroll()},window.addEventListener("scroll",this._onScroll,{passive:!0}),this._onResize=()=>{this.isMobile=window.innerWidth<768,this.updateAll()},window.addEventListener("resize",this._onResize)},initParallax:function(e){e.dataset.parallaxInitialized="true";let t=e.classList.contains("vd-parallax-disable-mobile")||e.classList.contains("parallax-disable-mobile");if(t&&this.isMobile)return;let n=e.querySelectorAll(".vd-parallax-layer, .vd-parallax-bg"),s=this.getSpeed(e),r=e.classList.contains("vd-parallax-horizontal")||e.classList.contains("parallax-horizontal")?"horizontal":"vertical";this.parallaxElements.set(e,{layers:Array.from(n),speed:s,direction:r,disableMobile:t}),this.updateParallax(e)},getSpeed:function(e){return e.classList.contains("vd-parallax-slow")||e.classList.contains("parallax-slow")?.5:e.classList.contains("vd-parallax-fast")||e.classList.contains("parallax-fast")?1.5:1},handleScroll:function(){this.ticking||(window.requestAnimationFrame(()=>{this.updateAll(),this.ticking=!1}),this.ticking=!0)},updateAll:function(){this.parallaxElements.forEach((e,t)=>{e.disableMobile&&this.isMobile||this.updateParallax(t)})},updateParallax:function(e){let t=this.parallaxElements.get(e);if(!t)return;let n=e.getBoundingClientRect(),s=window.innerHeight,r=n.top,a=n.height,o=(Math.max(0,Math.min(1,(s-r)/(s+a)))-.5)*t.speed*100;t.layers.forEach((c,l)=>{let u=c.dataset.parallaxSpeed||c.dataset.speed,f=u?parseFloat(u):1,h=o*f;t.direction==="horizontal"?c.style.transform=`translateX(${h}px)`:c.style.transform=`translateY(${h}px)`})},destroy:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&this.parallaxElements.has(t)&&(this.parallaxElements.get(t).layers.forEach(s=>{s.style.transform=""}),this.parallaxElements.delete(t))},refresh:function(){this.updateAll()},destroyAll:function(){this.parallaxElements.forEach((e,t)=>{this.destroy(t)}),this.parallaxElements.clear(),this._onScroll&&(window.removeEventListener("scroll",this._onScroll),this._onScroll=null),this._onResize&&(window.removeEventListener("resize",this._onResize),this._onResize=null),this.isInitialized=!1}};typeof window.Vanduo<"u"&&window.Vanduo.register("parallax",m),window.VanduoParallax=m})();(function(){"use strict";let m={getProgressBars:function(e){return window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,".vd-progress-bar[data-progress], .progress-bar[data-progress]"):Array.from(document.querySelectorAll(".vd-progress-bar[data-progress], .progress-bar[data-progress]"))},init:function(e){this.getProgressBars(e).forEach(n=>{n.dataset.progressInitialized||this.initProgressBar(n)})},initProgressBar:function(e){e.dataset.progressInitialized="true";let t=parseInt(e.dataset.progress)||0;this.setProgress(e,t,!1)},setProgress:function(e,t,n=!0){let s=typeof e=="string"?document.querySelector(e):e;if(!s)return;t=Math.max(0,Math.min(100,t)),n?s.style.transition="width var(--vd-transition-duration-slow) var(--vd-transition-ease)":(s.style.transition="none",setTimeout(()=>{s.style.transition=""},0)),s.style.width=t+"%",s.setAttribute("aria-valuenow",t),s.setAttribute("aria-valuemin",0),s.setAttribute("aria-valuemax",100);let r=s.querySelector(".vd-progress-text, .progress-text");r&&(r.textContent=t+"%"),s.dispatchEvent(new CustomEvent("progress:update",{bubbles:!0,detail:{value:t,max:100}})),t>=100&&s.dispatchEvent(new CustomEvent("progress:complete",{bubbles:!0,detail:{value:t,max:100}}))},animateProgress:function(e,t,n=1e3){let s=typeof e=="string"?document.querySelector(e):e;if(!s)return;let r=parseInt(s.style.width)||0,a=t-r,i=performance.now(),o=c=>{let l=c-i,u=Math.min(l/n,1),f=1-Math.pow(1-u,3),h=r+a*f;this.setProgress(s,h,!1),u<1&&requestAnimationFrame(o)};requestAnimationFrame(o)},show:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&(t.style.display="inline-block",t.setAttribute("aria-hidden","false"))},hide:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&(t.style.display="none",t.setAttribute("aria-hidden","true"))},toggle:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&(t.style.display==="none"||t.getAttribute("aria-hidden")==="true"?this.show(t):this.hide(t))},destroyAll:function(e){this.getProgressBars(e||document).filter(function(n){return n.dataset.progressInitialized==="true"}).forEach(n=>{delete n.dataset.progressInitialized})}};typeof window.Vanduo<"u"&&window.Vanduo.register("preloader",m),window.VanduoPreloader=m})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,"select.vd-custom-select-input, select[data-custom-select]").forEach(n=>{this.instances.has(n)||this.initSelect(n)})},initSelect:function(e){if(e.closest(".vd-custom-select-wrapper"))return;let t=[],n=document.createElement("div");n.className="custom-select-wrapper",e.parentNode.insertBefore(n,e),n.appendChild(e);let s=document.createElement("button");s.type="button",s.className="custom-select-button",s.setAttribute("aria-haspopup","listbox"),s.setAttribute("aria-expanded","false"),s.setAttribute("aria-labelledby",e.id||this.generateId(e));let r=document.createElement("div");if(r.className="custom-select-dropdown",r.setAttribute("role","listbox"),e.dataset.searchable==="true"){let l=document.createElement("div");l.className="custom-select-search";let u=document.createElement("input");u.type="text",u.className="input input-sm",u.placeholder="Search...",u.setAttribute("aria-label","Search options"),l.appendChild(u),r.appendChild(l);let f=d=>{this.filterOptions(r,d.target.value)},h=typeof debounce=="function"?debounce(f,150):f;u.addEventListener("input",h),t.push(()=>u.removeEventListener("input",h))}this.buildOptions(e,r,s),n.appendChild(s),n.appendChild(r),this.updateButtonText(e,s);let a=l=>{l.preventDefault(),l.stopPropagation(),this.toggleDropdown(s,r)};s.addEventListener("click",a),t.push(()=>s.removeEventListener("click",a));let i=l=>{!n.contains(l.target)&&r.classList.contains("is-open")&&this.closeDropdown(s,r)};document.addEventListener("click",i),t.push(()=>document.removeEventListener("click",i));let o=l=>{this.handleKeydown(l,e,s,r)};s.addEventListener("keydown",o),t.push(()=>s.removeEventListener("keydown",o));let c=()=>{this.updateButtonText(e,s),this.updateSelectedOptions(e,r)};e.addEventListener("change",c),t.push(()=>e.removeEventListener("change",c)),this.instances.set(e,{wrapper:n,button:s,dropdown:r,cleanup:t,typeaheadBuffer:"",typeaheadTimer:null})},buildOptions:function(e,t,n){let s=e.querySelectorAll("option"),r=document.createDocumentFragment();s.forEach((a,i)=>{if(a.parentElement.tagName==="OPTGROUP"){let c=a.parentElement;if(!t.querySelector(`[data-group="${c.label}"]`)){let l=document.createElement("div");l.className="custom-select-option-group",l.textContent=c.label,l.dataset.group=c.label,r.appendChild(l)}}if(a.value===""&&!a.textContent.trim())return;let o=document.createElement("div");o.className="custom-select-option",o.textContent=a.textContent,o.setAttribute("role","option"),o.setAttribute("data-value",a.value),o.setAttribute("data-index",i),a.selected&&(o.classList.add("is-selected"),o.setAttribute("aria-selected","true")),a.disabled&&(o.classList.add("is-disabled"),o.setAttribute("aria-disabled","true")),o.addEventListener("click",c=>{a.disabled||this.selectOption(e,a,o,n,t)}),r.appendChild(o)}),t.appendChild(r)},selectOption:function(e,t,n,s,r){e.multiple?(t.selected=!t.selected,n.classList.toggle("is-selected"),n.setAttribute("aria-selected",t.selected)):(e.value=t.value,e.dispatchEvent(new Event("change",{bubbles:!0})),this.closeDropdown(s,r)),this.updateButtonText(e,s)},updateButtonText:function(e,t){if(e.multiple){let n=Array.from(e.selectedOptions);n.length===0?t.textContent=e.dataset.placeholder||"Select options...":n.length===1?t.textContent=n[0].textContent:t.textContent=`${n.length} selected`}else{let n=e.options[e.selectedIndex];t.textContent=n?n.textContent:e.dataset.placeholder||"Select..."}},updateSelectedOptions:function(e,t){let n=t.querySelectorAll(".custom-select-option"),s=Array.from(e.selectedOptions).map(r=>r.value);n.forEach(r=>{let a=r.dataset.value;s.includes(a)?(r.classList.add("is-selected"),r.setAttribute("aria-selected","true")):(r.classList.remove("is-selected"),r.setAttribute("aria-selected","false"))})},toggleDropdown:function(e,t){t.classList.contains("is-open")?this.closeDropdown(e,t):this.openDropdown(e,t)},openDropdown:function(e,t){t.classList.add("is-open"),e.setAttribute("aria-expanded","true");let n=t.querySelector(".custom-select-option:not(.is-disabled)");n&&n.focus()},closeDropdown:function(e,t){t.classList.remove("is-open"),e.setAttribute("aria-expanded","false")},handleKeydown:function(e,t,n,s){let r=s.classList.contains("is-open"),a=Array.from(s.querySelectorAll(".custom-select-option:not(.is-disabled)")),i=a.findIndex(o=>o===document.activeElement);switch(e.key){case"Enter":case" ":if(e.preventDefault(),r&&i>=0){let o=a[i],c=t.options[parseInt(o.dataset.index)];this.selectOption(t,c,o,n,s)}else this.openDropdown(n,s);break;case"Escape":r&&(e.preventDefault(),this.closeDropdown(n,s),n.focus());break;case"ArrowDown":if(e.preventDefault(),!r)this.openDropdown(n,s);else{let o=i<a.length-1?i+1:0;a[o].focus()}break;case"ArrowUp":if(e.preventDefault(),r){let o=i>0?i-1:a.length-1;a[o].focus()}break;case"Home":r&&(e.preventDefault(),a[0].focus());break;case"End":r&&(e.preventDefault(),a[a.length-1].focus());break;default:if(r&&e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey){let o=this.instances.get(t);if(!o)break;clearTimeout(o.typeaheadTimer),o.typeaheadBuffer+=e.key.toLowerCase();let c=a.find(l=>l.textContent.trim().toLowerCase().startsWith(o.typeaheadBuffer));c&&c.focus(),o.typeaheadTimer=setTimeout(()=>{o.typeaheadBuffer=""},500)}break}},filterOptions:function(e,t){let n=e.querySelectorAll(".vd-custom-select-option"),s=t.toLowerCase();n.forEach(r=>{r.textContent.toLowerCase().includes(s)?r.style.display="block":r.style.display="none"})},generateId:function(e){if(e.id)return e.id;let t="select-"+Math.random().toString(36).substr(2,9);return e.id=t,t},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),t.wrapper&&t.wrapper.parentNode&&(t.wrapper.parentNode.insertBefore(e,t.wrapper),t.wrapper.parentNode.removeChild(t.wrapper)),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("select",m)})();(function(){"use strict";let m={sidenavs:new Map,breakpoint:992,restoreDelayMs:450,__vanduoScopedDestroyAll:!0,_globalCleanups:[],_resizeCleanup:null,isFixedVariant:function(e){return e.classList.contains("vd-sidenav-fixed")||e.classList.contains("sidenav-fixed")},isPushVariant:function(e){return e.classList.contains("vd-sidenav-push")||e.classList.contains("sidenav-push")},isRightVariant:function(e){return e.classList.contains("vd-sidenav-right")||e.classList.contains("sidenav-right")},getPortalState:function(e){return e._vdPortalState||(e._vdPortalState={originalParent:null,originalNextSibling:null,placeholder:null,restoreTimer:null,restoreHandler:null}),e._vdPortalState},cancelScheduledRestore:function(e){let t=this.getPortalState(e);t.restoreHandler&&(e.removeEventListener("transitionend",t.restoreHandler),t.restoreHandler=null),t.restoreTimer&&(window.clearTimeout(t.restoreTimer),t.restoreTimer=null)},portalToBody:function(e){if(!e)return;if(e.parentNode===document.body){this.cancelScheduledRestore(e);return}let t=this.getPortalState(e);this.cancelScheduledRestore(e),t.originalParent=e.parentNode,t.originalNextSibling=e.nextSibling,t.placeholder||(t.placeholder=document.createComment("vd-sidenav-placeholder")),t.originalParent.insertBefore(t.placeholder,e),document.body.appendChild(e),e.dataset.vdPortaled="true"},restoreFromPortal:function(e){if(!e)return;let t=this.getPortalState(e);if(this.cancelScheduledRestore(e),!t.placeholder){delete e.dataset.vdPortaled;return}t.placeholder.parentNode?(t.placeholder.parentNode.insertBefore(e,t.placeholder),t.placeholder.parentNode.removeChild(t.placeholder)):t.originalParent&&t.originalParent.isConnected&&(t.originalNextSibling&&t.originalNextSibling.parentNode===t.originalParent?t.originalParent.insertBefore(e,t.originalNextSibling):t.originalParent.appendChild(e)),t.originalParent=null,t.originalNextSibling=null,t.placeholder=null,delete e.dataset.vdPortaled},scheduleRestoreFromPortal:function(e){if(!e||e.parentNode!==document.body)return;let t=this.getPortalState(e);this.cancelScheduledRestore(e);let n=()=>{this.restoreFromPortal(e)},s=r=>{r.target!==e||r.propertyName!=="transform"||n()};t.restoreHandler=s,e.addEventListener("transitionend",s),t.restoreTimer=window.setTimeout(()=>{n()},this.restoreDelayMs)},init:function(e){if(window.Vanduo.queryAll(e,".vd-sidenav, .vd-offcanvas").forEach(s=>{this.sidenavs.has(s)||this.initSidenav(s)}),(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,"[data-sidenav-toggle]"):document.querySelectorAll("[data-sidenav-toggle]")).forEach(s=>{if(s.dataset.sidenavToggleInitialized)return;s.dataset.sidenavToggleInitialized="true";let r=a=>{a.preventDefault();let i=s.dataset.sidenavToggle,o=document.querySelector(i);o&&this.toggle(o)};s.addEventListener("click",r),s._sidenavToggleCleanup=()=>s.removeEventListener("click",r)}),this.handleResize(),!this._resizeCleanup){let s=()=>{this.handleResize()};window.addEventListener("resize",s),this._resizeCleanup=()=>window.removeEventListener("resize",s)}},initSidenav:function(e){let t=e.getAttribute("data-vd-position");if(t){let o=e.classList.contains("vd-offcanvas")?"vd-offcanvas":"vd-sidenav";e.classList.add(o+"-"+t)}let n=this.createOverlay(e),s=e.querySelector(".vd-sidenav-close, .vd-offcanvas-close"),r=[];if(e.setAttribute("role","navigation"),e.setAttribute("aria-hidden","true"),s){let o=()=>{this.close(e)};s.addEventListener("click",o),r.push(()=>s.removeEventListener("click",o))}let a=()=>{e.dataset.backdrop!=="static"&&this.close(e)};n.addEventListener("click",a),r.push(()=>n.removeEventListener("click",a));let i=o=>{o.key==="Escape"&&e.classList.contains("is-open")&&e.dataset.keyboard!=="false"&&this.close(e)};document.addEventListener("keydown",i),r.push(()=>document.removeEventListener("keydown",i)),this.sidenavs.set(e,{overlay:n,cleanup:r})},createOverlay:function(e){let t=e.querySelector(".vd-sidenav-overlay");return t||(t=document.createElement("div"),t.className="vd-sidenav-overlay",document.body.appendChild(t)),t},open:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(!t||!this.sidenavs.has(t))return;let{overlay:n}=this.sidenavs.get(t);this.portalToBody(t),this.isFixedVariant(t)||n.classList.add("is-visible"),t.classList.add("is-open"),t.setAttribute("aria-hidden","false"),document.body.classList.add("body-sidenav-open"),this.isPushVariant(t)&&this.handlePushVariant(t,!0),t.dispatchEvent(new CustomEvent("sidenav:open",{bubbles:!0}))},close:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(!t||!this.sidenavs.has(t))return;let{overlay:n}=this.sidenavs.get(t);n.classList.remove("is-visible"),t.classList.remove("is-open"),t.setAttribute("aria-hidden","true"),document.body.classList.remove("body-sidenav-open"),this.isPushVariant(t)&&this.handlePushVariant(t,!1),t.dispatchEvent(new CustomEvent("sidenav:close",{bubbles:!0})),this.scheduleRestoreFromPortal(t)},toggle:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&(t.classList.contains("is-open")?this.close(t):this.open(t))},handlePushVariant:function(e,t){let n=document.querySelector('main, .main-content, .content, [role="main"]')||document.body;t?window.innerWidth>=this.breakpoint&&(this.isRightVariant(e)?n.style.marginRight=e.offsetWidth+"px":n.style.marginLeft=e.offsetWidth+"px"):(n.style.marginLeft="",n.style.marginRight="")},handleResize:function(){this.sidenavs.forEach(({overlay:e},t)=>{window.innerWidth>=this.breakpoint?this.isFixedVariant(t)&&!t.classList.contains("is-open")&&(t.classList.add("is-open"),t.setAttribute("aria-hidden","false"),e.classList.remove("is-visible")):this.isFixedVariant(t)&&t.classList.contains("is-open")&&this.close(t)})},destroy:function(e){let t=this.sidenavs.get(e);t&&(e.classList.contains("is-open")&&(t.overlay.classList.remove("is-visible"),e.classList.remove("is-open"),e.setAttribute("aria-hidden","true"),document.body.classList.remove("body-sidenav-open")),this.restoreFromPortal(e),t.cleanup.forEach(n=>n()),t.overlay&&t.overlay.parentNode&&t.overlay.parentNode.removeChild(t.overlay),this.sidenavs.delete(e))},destroyAll:function(e){let t=window.Vanduo&&typeof window.Vanduo._normalizeRoot=="function"?window.Vanduo._normalizeRoot(e):e||document;this.sidenavs.forEach((s,r)=>{(t===document||t===r||typeof t.contains=="function"&&t.contains(r))&&this.destroy(r)}),(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(t,"[data-sidenav-toggle][data-sidenav-toggle-initialized]"):document.querySelectorAll("[data-sidenav-toggle][data-sidenav-toggle-initialized]")).forEach(s=>{s._sidenavToggleCleanup&&(s._sidenavToggleCleanup(),delete s._sidenavToggleCleanup),delete s.dataset.sidenavToggleInitialized}),t===document&&(this._resizeCleanup&&(this._resizeCleanup(),this._resizeCleanup=null),this._globalCleanups.forEach(s=>s()),this._globalCleanups=[])}};typeof window.Vanduo<"u"&&window.Vanduo.register("sidenav",m),window.VanduoSidenav=m})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-tabs, [data-tabs]").forEach(n=>{this.instances.has(n)||this.initTabs(n)})},initTabs:function(e){let t=e.querySelector('.vd-tab-list, [role="tablist"]'),n=e.querySelectorAll(".vd-tab-link, [data-tab]"),s=e.querySelectorAll(".vd-tab-pane, [data-tab-pane]");if(!t||n.length===0)return;let r=[];t.setAttribute("role","tablist"),n.forEach((i,o)=>{let c=this.getTabId(i,o),l=this.findPane(e,c,s);i.setAttribute("role","tab"),i.setAttribute("aria-selected",i.classList.contains("is-active")?"true":"false"),i.setAttribute("tabindex",i.classList.contains("is-active")?"0":"-1"),i.id||(i.id=`tab-btn-${c}`),l&&(l.setAttribute("role","tabpanel"),l.setAttribute("aria-labelledby",i.id),l.id||(l.id=`tab-pane-${c}`),i.setAttribute("aria-controls",l.id));let u=h=>{h.preventDefault(),!i.classList.contains("disabled")&&!i.disabled&&this.activateTab(e,i,n,s)};i.addEventListener("click",u),r.push(()=>i.removeEventListener("click",u));let f=h=>{this.handleKeydown(h,e,i,n,s)};i.addEventListener("keydown",f),r.push(()=>i.removeEventListener("keydown",f))}),!e.querySelector(".vd-tab-link.is-active, [data-tab].is-active")&&n.length>0&&this.activateTab(e,n[0],n,s),this.instances.set(e,{cleanup:r})},getTabId:function(e,t){return e.dataset.tabTarget||e.dataset.tab||e.getAttribute("href")?.replace("#","")||(typeof t=="number"?`tab-${t}`:e.id)},findPane:function(e,t,n){let s=e.querySelector(`[data-tab-pane="${t}"]`);return s||(s=e.querySelector(`#${t}`)),s||e.querySelectorAll(".vd-tab-link, [data-tab]").forEach((a,i)=>{this.getTabId(a,i)===t&&n[i]&&(s=n[i])}),s},activateTab:function(e,t,n,s){let r=Array.from(n).indexOf(t),a=this.getTabId(t,r);n.forEach(c=>{c.classList.remove("is-active"),c.setAttribute("aria-selected","false"),c.setAttribute("tabindex","-1"),c.parentElement&&c.parentElement.classList.contains("tab-item")&&c.parentElement.classList.remove("is-active")}),s.forEach(c=>{c.classList.remove("is-active")}),t.classList.add("is-active"),t.setAttribute("aria-selected","true"),t.setAttribute("tabindex","0"),t.parentElement&&t.parentElement.classList.contains("tab-item")&&t.parentElement.classList.add("is-active");let i=this.findPane(e,a,s);i&&i.classList.add("is-active");let o=new CustomEvent("tab:change",{bubbles:!0,detail:{tab:t,pane:i,tabId:a}});e.dispatchEvent(o)},handleKeydown:function(e,t,n,s,r){let a=t.classList.contains("vd-tabs-vertical")||t.classList.contains("tabs-vertical"),i=Array.from(s).filter(l=>!l.classList.contains("disabled")&&!l.disabled),o=i.indexOf(n),c=o;switch(e.key){case"ArrowLeft":a||(e.preventDefault(),c=o>0?o-1:i.length-1);break;case"ArrowRight":a||(e.preventDefault(),c=o<i.length-1?o+1:0);break;case"ArrowUp":a&&(e.preventDefault(),c=o>0?o-1:i.length-1);break;case"ArrowDown":a&&(e.preventDefault(),c=o<i.length-1?o+1:0);break;case"Home":e.preventDefault(),c=0;break;case"End":e.preventDefault(),c=i.length-1;break;case"Enter":case" ":e.preventDefault(),this.activateTab(t,n,s,r);return;default:return}c!==o&&(i[c].focus(),this.activateTab(t,i[c],s,r))},show:function(e){let t;if(typeof e=="string"?t=document.querySelector(`[data-tab-target="${e}"], [data-tab="${e}"], [href="#${e}"]`):t=e,!t)return;let n=t.closest(".vd-tabs, [data-tabs]");if(!n)return;let s=n.querySelectorAll(".vd-tab-link, [data-tab]"),r=n.querySelectorAll(".vd-tab-pane, [data-tab-pane]");this.activateTab(n,t,s,r)},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("tabs",m)})();(function(){"use strict";let m={STORAGE_KEYS:{PALETTE:"vanduo-palette",PRIMARY:"vanduo-primary-color",NEUTRAL:"vanduo-neutral-color",RADIUS:"vanduo-radius",FONT:"vanduo-font-preference",THEME:"vanduo-theme-preference"},DEFAULTS:{PALETTE:"open-color",PRIMARY_LIGHT:"black",PRIMARY_DARK:"amber",NEUTRAL:"charcoal",RADIUS:"0.5",FONT:"ubuntu",THEME:"system"},PALETTE_OPTIONS:{"open-color":{name:"Open Color",description:"The Open Color palette (MIT) \u2014 the Vanduo default."},fibonacci:{name:"Fibonacci",description:'Golden-angle generated palette \u2014 optional, opt in via data-palette="fibonacci".'}},PRIMARY_COLORS:{black:{name:"Black",color:"#000000"},red:{name:"Red",color:"#fa5252"},orange:{name:"Orange",color:"#fd7e14"},amber:{name:"Amber",color:"#f59f00"},yellow:{name:"Yellow",color:"#fcc419"},lime:{name:"Lime",color:"#82c91e"},green:{name:"Green",color:"#40c057"},emerald:{name:"Emerald",color:"#20c997"},teal:{name:"Teal",color:"#12b886"},cyan:{name:"Cyan",color:"#22b8cf"},sky:{name:"Sky",color:"#3bc9db"},blue:{name:"Blue",color:"#228be6"},indigo:{name:"Indigo",color:"#4c6ef5"},violet:{name:"Violet",color:"#7950f2"},purple:{name:"Purple",color:"#be4bdb"},fuchsia:{name:"Fuchsia",color:"#f06595"},pink:{name:"Pink",color:"#e64980"},rose:{name:"Rose",color:"#ff8787"}},NEUTRAL_COLORS:{charcoal:{name:"Charcoal",color:"#0d1117"},slate:{name:"Slate",color:"#64748b"},gray:{name:"Gray",color:"#6b7280"},zinc:{name:"Zinc",color:"#71717a"},neutral:{name:"Neutral",color:"#737373"},stone:{name:"Stone",color:"#78716c"}},RADIUS_OPTIONS:["0","0.125","0.25","0.375","0.5"],FONT_OPTIONS:{"jetbrains-mono":{name:"JetBrains Mono",family:"'JetBrains Mono', monospace"},system:{name:"System Default",family:null},ubuntu:{name:"Ubuntu",family:"'Ubuntu', sans-serif"},lato:{name:"Lato",family:"'Lato', sans-serif"},"open-sans":{name:"Open Sans",family:"'Open Sans', sans-serif"}},THEME_MODES:["system","dark","light"],state:{palette:null,primary:null,neutral:null,radius:null,font:null,theme:null,isOpen:!1},isInitialized:!1,_cleanup:[],_ownsDynamicPanel:!1,elements:{customizer:null,trigger:null,activeTrigger:null,triggers:[],panel:null,overlay:null},isRoot:function(e){return!!e&&(e===document||e.nodeType===1||e.nodeType===9||e.nodeType===11)},normalizeRoot:function(e){return this.isRoot(e)?e:document},queryAll:function(e,t){let n=this.normalizeRoot(e);if(typeof window.VanduoLifecycle<"u"&&typeof window.VanduoLifecycle.queryAll=="function")return window.VanduoLifecycle.queryAll(n,t);let s=[];if(n instanceof Element&&typeof n.matches=="function"&&n.matches(t)&&s.push(n),typeof n.querySelectorAll=="function"){let r=n.querySelectorAll(t);for(let a=0;a<r.length;a++)s.push(r[a])}return s},queryOne:function(e,t){let n=this.queryAll(e,t);return n.length?n[0]:null},getTriggers:function(e){return this.queryAll(e,"[data-theme-customizer-trigger]")},pruneTriggers:function(){this.elements.triggers=this.elements.triggers.filter(function(e){return e&&e.isConnected}),this.elements.trigger&&!this.elements.trigger.isConnected&&(this.elements.trigger=null),this.elements.activeTrigger&&!this.elements.activeTrigger.isConnected&&(this.elements.activeTrigger=null)},init:function(e){let t=this.normalizeRoot(e);if(this.isInitialized){this.bindExistingElements(t),this.bindTriggerEvents(t),this.bindPanelEvents(),this.updateUI();return}this.isInitialized=!0,this._cleanup=[],this.loadPreferences(),this.applyAllPreferences(),this.bindExistingElements(t),this.bindEvents(t)},addListener:function(e,t,n,s){e&&(e.addEventListener(t,n,s),this._cleanup.push(()=>e.removeEventListener(t,n,s)))},getDefaultPrimary:function(e){return e==="system"?window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?this.DEFAULTS.PRIMARY_DARK:this.DEFAULTS.PRIMARY_LIGHT:e==="dark"?this.DEFAULTS.PRIMARY_DARK:this.DEFAULTS.PRIMARY_LIGHT},loadPreferences:function(){this.state.palette=this.getStorageValue(this.STORAGE_KEYS.PALETTE,this.DEFAULTS.PALETTE),this.state.theme=this.getStorageValue(this.STORAGE_KEYS.THEME,this.DEFAULTS.THEME),this.state.primary=this.getStorageValue(this.STORAGE_KEYS.PRIMARY,this.getDefaultPrimary(this.state.theme)),this._normalizeDefaultPrimaryIfStaleWithStoredTheme(),this.state.neutral=this.getStorageValue(this.STORAGE_KEYS.NEUTRAL,this.DEFAULTS.NEUTRAL),this.state.radius=this.getStorageValue(this.STORAGE_KEYS.RADIUS,this.DEFAULTS.RADIUS),this.state.font=this.getStorageValue(this.STORAGE_KEYS.FONT,this.DEFAULTS.FONT)},savePreference:function(e,t){this.setStorageValue(e,t)},applyAllPreferences:function(){this.applyPalette(this.state.palette),this.applyPrimary(this.state.primary),this.applyNeutral(this.state.neutral),this.applyRadius(this.state.radius),this.applyFont(this.state.font),this.applyTheme(this.state.theme)},applyPalette:function(e){this.PALETTE_OPTIONS[e]||(e=this.DEFAULTS.PALETTE),this.state.palette=e,document.documentElement.setAttribute("data-palette",e),this.savePreference(this.STORAGE_KEYS.PALETTE,e),this.dispatchEvent("palette-change",{palette:e})},applyPrimary:function(e){this.PRIMARY_COLORS[e]||(e=this.getDefaultPrimary(this.state.theme)),this.state.primary=e,document.documentElement.setAttribute("data-primary",e),this.savePreference(this.STORAGE_KEYS.PRIMARY,e),this.dispatchEvent("primary-change",{color:e})},applyNeutral:function(e){this.NEUTRAL_COLORS[e]||(e=this.DEFAULTS.NEUTRAL),this.state.neutral=e,document.documentElement.setAttribute("data-neutral",e),this.savePreference(this.STORAGE_KEYS.NEUTRAL,e),this.dispatchEvent("neutral-change",{neutral:e})},applyRadius:function(e){this.RADIUS_OPTIONS.includes(e)||(e=this.DEFAULTS.RADIUS),this.state.radius=e,document.documentElement.setAttribute("data-radius",e),document.documentElement.style.setProperty("--vd-radius-scale",e),this.savePreference(this.STORAGE_KEYS.RADIUS,e),this.dispatchEvent("radius-change",{radius:e})},applyFont:function(e){this.FONT_OPTIONS[e]||(e=this.DEFAULTS.FONT),this.state.font=e,e==="system"?document.documentElement.removeAttribute("data-font"):document.documentElement.setAttribute("data-font",e),this.savePreference(this.STORAGE_KEYS.FONT,e),window.FontSwitcher&&window.FontSwitcher.setPreference&&(window.FontSwitcher.state.preference=e,window.FontSwitcher.applyFont()),this.dispatchEvent("font-change",{font:e})},applyTheme:function(e){if(this.THEME_MODES.includes(e)||(e=this.DEFAULTS.THEME),this._isApplying=!0,this.isUsingDefaultPrimary()){let t=this.getDefaultPrimary(e);this.state.primary!==t&&this.applyPrimary(t)}if(this.state.theme=e,e==="system"?document.documentElement.removeAttribute("data-theme"):document.documentElement.setAttribute("data-theme",e),this.savePreference(this.STORAGE_KEYS.THEME,e),window.Vanduo&&window.Vanduo.components.themeSwitcher){let t=window.Vanduo.components.themeSwitcher;t.state&&t.state.preference!==e&&(t.state.preference=e,typeof t.setStorageValue=="function"&&t.setStorageValue(t.STORAGE_KEY,e),typeof t.updateUI=="function"&&t.updateUI())}this._isApplying=!1,this.dispatchEvent("mode-change",{mode:e})},dispatchEvent:function(e,t){let n=new CustomEvent("theme:"+e,{bubbles:!0,detail:t});document.dispatchEvent(n);let s=new CustomEvent("theme:change",{bubbles:!0,detail:{type:e,value:t[Object.keys(t)[0]],state:{...this.state}}});document.dispatchEvent(s)},bindExistingElements:function(e){let t=this.normalizeRoot(e);this.pruneTriggers();let n=this.getTriggers(t);n.forEach(r=>{this.elements.triggers.includes(r)||this.elements.triggers.push(r)}),!this.elements.trigger&&this.elements.triggers.length&&(this.elements.trigger=this.elements.triggers[0]);let s=this.queryOne(t,".vd-theme-customizer")||(this.elements.customizer&&typeof this.elements.customizer.contains=="function"?this.elements.customizer:null)||document.querySelector(".vd-theme-customizer");s instanceof Element?(this.elements.customizer=s,this.elements.trigger=this.elements.customizer.querySelector(".vd-theme-customizer-trigger")||this.elements.trigger,this.elements.panel=this.elements.customizer.querySelector(".vd-theme-customizer-panel"),this.elements.overlay=this.elements.customizer.querySelector(".vd-theme-customizer-overlay")):n.length&&!this.elements.panel&&this.createDynamicPanel(),this.updateUI()},createDynamicPanel:function(){if(!this.elements.triggers.length||this.elements.panel&&this.elements.panel.isConnected)return;this.elements.trigger=this.elements.triggers[0];let e=document.createElement("div");e.className="vd-theme-customizer-overlay";let t=document.createElement("div");t.className="vd-theme-customizer-panel",t.innerHTML=this.getPanelHTML(),document.body.appendChild(e),document.body.appendChild(t),this.elements.panel=t,this.elements.overlay=e,this._ownsDynamicPanel=!0,this.elements.customizer={contains:n=>t.contains(n)||this.elements.triggers.some(s=>s.contains(n))},this.positionPanel(),this.bindPanelEvents(),this.addListener(window,"resize",()=>this.positionPanel())},positionPanel:function(){if(!this.elements.panel||!this.elements.trigger)return;let e=this.elements.activeTrigger||this.elements.trigger;if(window.innerWidth<768)this.elements.panel.style.top="",this.elements.panel.style.right="",this.elements.panel.style.left="",this.elements.panel.style.height="",this.elements.panel.style.maxHeight="";else{let n=e.getBoundingClientRect(),s=320,r=n.bottom+8,a=window.innerWidth,i=a-n.right;a-i-s<8&&(i=a-s-8),this.elements.panel.style.top=r+"px",this.elements.panel.style.right=i+"px",this.elements.panel.style.left="",this.elements.panel.style.height="auto",this.elements.panel.style.maxHeight="calc(100vh - "+r+"px)"}},bindPanelEvents:function(){if(!this.elements.panel||this.elements.panel.getAttribute("data-customizer-initialized")==="true")return;this.elements.panel.setAttribute("data-customizer-initialized","true"),this.elements.panel.querySelectorAll("[data-palette]").forEach(s=>{this.addListener(s,"click",()=>{this.applyPalette(s.dataset.palette),this.updateUI()})}),this.elements.panel.querySelectorAll("[data-color]").forEach(s=>{this.addListener(s,"click",()=>{this.applyPrimary(s.dataset.color),this.updateUI()})}),this.elements.panel.querySelectorAll("[data-neutral]").forEach(s=>{this.addListener(s,"click",()=>{this.applyNeutral(s.dataset.neutral),this.updateUI()})}),this.elements.panel.querySelectorAll("[data-radius]").forEach(s=>{this.addListener(s,"click",()=>{this.applyRadius(s.dataset.radius),this.updateUI()})});let e=this.elements.panel.querySelector("[data-customizer-font]");e&&this.addListener(e,"change",s=>{this.applyFont(s.target.value),this.updateUI()});let t=this.elements.panel.querySelector(".customizer-reset");t&&this.addListener(t,"click",()=>{this.reset()});let n=this.elements.panel.querySelector(".customizer-mobile-close");n&&this.addListener(n,"click",()=>{this.close()}),this.elements.overlay&&this.addListener(this.elements.overlay,"click",()=>{this.close()})},getPanelHTML:function(){let e=typeof escapeHtml=="function"?escapeHtml:function(o){let c=document.createElement("div");return c.textContent=String(o??""),c.innerHTML},t=function(o){let c=String(o??"").trim();return/^(#[0-9a-fA-F]{3,8}|rgb[a]?\([^)]{1,60}\)|hsl[a]?\([^)]{1,60}\)|var\(--[a-zA-Z0-9_-]{1,40}\))$/.test(c)?c:"#000000"},n="";for(let[o,c]of Object.entries(this.PALETTE_OPTIONS))n+=`<button class="tc-palette-btn${o===this.state.palette?" is-active":""}" data-palette="${e(o)}" title="${e(c.description)}">${e(c.name)}</button>`;let s="";for(let[o,c]of Object.entries(this.PRIMARY_COLORS))s+=`<button class="tc-color-swatch${o===this.state.primary?" is-active":""}" data-color="${e(o)}" style="--vd-swatch-color: ${t(c.color)}" title="${e(c.name)}"></button>`;let r="";for(let[o,c]of Object.entries(this.NEUTRAL_COLORS))r+=`<button class="tc-neutral-swatch${o===this.state.neutral?" is-active":""}" data-neutral="${e(o)}" style="--vd-swatch-color: ${t(c.color)}" title="${e(c.name)}"><span>${e(c.name)}</span></button>`;let a="";this.RADIUS_OPTIONS.forEach(o=>{a+=`<button class="tc-radius-btn${o===this.state.radius?" is-active":""}" data-radius="${e(o)}">${e(o)}</button>`});let i="";for(let[o,c]of Object.entries(this.FONT_OPTIONS))i+=`<option value="${e(o)}"${o===this.state.font?" selected":""}>${e(c.name)}</option>`;return`
|
|
6
6
|
<div class="tc-header">
|
|
7
7
|
<h3 class="tc-title">Customize Theme</h3>
|
|
8
8
|
<button class="customizer-mobile-close" aria-label="Close">
|
|
@@ -11,33 +11,39 @@ var ue=Object.defineProperty;var ve=Object.getOwnPropertyDescriptor;var ye=Objec
|
|
|
11
11
|
</div>
|
|
12
12
|
<div class="tc-body">
|
|
13
13
|
|
|
14
|
+
<div class="tc-section">
|
|
15
|
+
<label class="tc-label">Palette</label>
|
|
16
|
+
<div class="tc-palette-group">
|
|
17
|
+
${n}
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
14
20
|
<div class="tc-section">
|
|
15
21
|
<label class="tc-label">Primary Color</label>
|
|
16
22
|
<div class="tc-color-grid">
|
|
17
|
-
${
|
|
23
|
+
${s}
|
|
18
24
|
</div>
|
|
19
25
|
</div>
|
|
20
26
|
<div class="tc-section">
|
|
21
27
|
<label class="tc-label">Neutral Color</label>
|
|
22
28
|
<div class="tc-neutral-grid">
|
|
23
|
-
${
|
|
29
|
+
${r}
|
|
24
30
|
</div>
|
|
25
31
|
</div>
|
|
26
32
|
<div class="tc-section">
|
|
27
33
|
<label class="tc-label">Border Radius</label>
|
|
28
34
|
<div class="tc-radius-group">
|
|
29
|
-
${
|
|
35
|
+
${a}
|
|
30
36
|
</div>
|
|
31
37
|
</div>
|
|
32
38
|
<div class="tc-section">
|
|
33
39
|
<label class="tc-label">Font Family</label>
|
|
34
40
|
<select class="tc-font-select" data-customizer-font>
|
|
35
|
-
${
|
|
41
|
+
${i}
|
|
36
42
|
</select>
|
|
37
43
|
</div>
|
|
38
44
|
</div>
|
|
39
45
|
<div class="tc-footer">
|
|
40
46
|
<button class="customizer-reset btn btn-sm btn-outline">Reset to Defaults</button>
|
|
41
47
|
</div>
|
|
42
|
-
`},isUsingDefaultPrimary:function(){return this.state.primary===this.DEFAULTS.PRIMARY_LIGHT||this.state.primary===this.DEFAULTS.PRIMARY_DARK},_normalizeDefaultPrimaryIfStaleWithStoredTheme:function(){if(!this.isUsingDefaultPrimary())return;let e=this.getDefaultPrimary(this.state.theme);this.state.primary!==e&&(this.state.primary=e)},bindEvents:function(e){if(this.bindTriggerEvents(e),this.bindPanelEvents(),window.matchMedia){let t=window.matchMedia("(prefers-color-scheme: dark)"),n=()=>{if(this.state.theme==="system"&&this.isUsingDefaultPrimary()){let s=this.getDefaultPrimary("system");s!==this.state.primary&&(this.applyPrimary(s),this.updateUI())}};t.addEventListener("change",n),this._cleanup.push(()=>t.removeEventListener("change",n))}this.addListener(document,"click",t=>{this.state.isOpen&&this.elements.customizer&&!this.elements.customizer.contains(t.target)&&this.close()}),this.addListener(document,"keydown",t=>{t.key==="Escape"&&this.state.isOpen&&this.close()})},bindTriggerEvents:function(e){(e?this.getTriggers(e):this.elements.triggers).forEach(n=>{if(n.getAttribute("data-customizer-trigger-initialized")==="true")return;let s=i=>{i.preventDefault(),i.stopPropagation(),this.elements.activeTrigger=n,this.elements.trigger=n,this.toggle()};n.addEventListener("click",s),n._themeCustomizerTriggerHandler=s,n.setAttribute("data-customizer-trigger-initialized","true")})},cleanupTrigger:function(e){!e||e.getAttribute("data-customizer-trigger-initialized")!=="true"||(e._themeCustomizerTriggerHandler&&(e.removeEventListener("click",e._themeCustomizerTriggerHandler),delete e._themeCustomizerTriggerHandler),e.setAttribute("aria-expanded","false"),e.removeAttribute("data-customizer-trigger-initialized"),this.elements.activeTrigger===e&&(this.elements.activeTrigger=null),this.elements.triggers=this.elements.triggers.filter(function(t){return t!==e}),this.elements.trigger===e&&(this.elements.trigger=this.elements.triggers[0]||null))},toggle:function(){this.state.isOpen?this.close():this.open()},open:function(){this.state.isOpen=!0,this.positionPanel(),this.elements.panel&&this.elements.panel.classList.add("is-open"),this.elements.triggers.forEach(e=>e.setAttribute("aria-expanded","false")),this.elements.trigger&&this.elements.trigger.setAttribute("aria-expanded","true"),this.elements.overlay&&this.elements.overlay.classList.add("is-active"),this.dispatchEvent("panel-open",{isOpen:!0})},close:function(){this.state.isOpen=!1,this.elements.panel&&this.elements.panel.classList.remove("is-open"),this.elements.triggers.forEach(e=>e.setAttribute("aria-expanded","false")),this.elements.overlay&&this.elements.overlay.classList.remove("is-active"),this.dispatchEvent("panel-close",{isOpen:!1})},updateUI:function(){if(!this.elements.panel)return;this.elements.panel.querySelectorAll("[data-color]").forEach(t=>{t.classList.toggle("is-active",t.dataset.color===this.state.primary)}),this.elements.panel.querySelectorAll("[data-neutral]").forEach(t=>{t.classList.toggle("is-active",t.dataset.neutral===this.state.neutral)}),this.elements.panel.querySelectorAll("[data-radius]").forEach(t=>{t.classList.toggle("is-active",t.dataset.radius===this.state.radius)});let e=this.elements.panel.querySelector("[data-customizer-font]");e&&(e.value=this.state.font)},reset:function(){this.applyTheme(this.DEFAULTS.THEME),this.applyPrimary(this.getDefaultPrimary(this.DEFAULTS.THEME)),this.applyNeutral(this.DEFAULTS.NEUTRAL),this.applyRadius(this.DEFAULTS.RADIUS),this.applyFont(this.DEFAULTS.FONT),this.updateUI(),this.dispatchEvent("reset",{state:{...this.state}})},getState:function(){return{...this.state}},setPreferences:function(e){e.primary&&this.applyPrimary(e.primary),e.neutral&&this.applyNeutral(e.neutral),e.radius&&this.applyRadius(e.radius),e.font&&this.applyFont(e.font),e.theme&&this.applyTheme(e.theme),this.updateUI()},getStorageValue:function(e,t){if(typeof window.safeStorageGet=="function")return window.safeStorageGet(e,t);try{let n=localStorage.getItem(e);return n!==null?n:t}catch{return t}},setStorageValue:function(e,t){if(typeof window.safeStorageSet=="function")return window.safeStorageSet(e,t);try{return localStorage.setItem(e,t),!0}catch{return!1}},destroyAll:function(e){let t=this.normalizeRoot(e);if(t!==document){this.getTriggers(t).forEach(n=>{this.cleanupTrigger(n)}),this.pruneTriggers(),this.elements.triggers.length||this.destroyAll(document);return}this._cleanup.forEach(n=>n()),this._cleanup=[],this.elements.panel&&this.elements.panel.removeAttribute("data-customizer-initialized"),this.elements.triggers.slice().forEach(n=>{this.cleanupTrigger(n)}),this._ownsDynamicPanel&&(this.elements.panel&&this.elements.panel.parentNode&&this.elements.panel.parentNode.removeChild(this.elements.panel),this.elements.overlay&&this.elements.overlay.parentNode&&this.elements.overlay.parentNode.removeChild(this.elements.overlay),this._ownsDynamicPanel=!1),this.close(),this.elements.customizer=null,this.elements.trigger=null,this.elements.activeTrigger=null,this.elements.triggers=[],this.elements.panel=null,this.elements.overlay=null,this.isInitialized=!1}};window.Vanduo&&window.Vanduo.register("themeCustomizer",m),window.ThemeCustomizer=m})();(function(){"use strict";let m=["system","light","dark"],e={system:"ph ph-desktop",light:"ph ph-sun",dark:"ph ph-moon"},t={system:"Theme: System",light:"Theme: Light",dark:"Theme: Dark"},n={system:"Use system preference",light:"Light theme",dark:"Dark theme"},s={isInitialized:!1,_mediaQuery:null,_onMediaChange:null,menuInstances:new Map,getToggles:function(i){let o=i||document;return(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(o,'[data-toggle="theme"]'):Array.from(o.querySelectorAll('[data-toggle="theme"]'))).filter(function(r){return!r.closest('.vd-theme-switcher[data-theme-ui="menu"]')})},getMenuSwitchers:function(i){let o=i||document;return window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(o,'.vd-theme-switcher[data-theme-ui="menu"]'):Array.from(o.querySelectorAll('.vd-theme-switcher[data-theme-ui="menu"]'))},init:function(i){if(this.STORAGE_KEY="vanduo-theme-preference",this.state={preference:this.getPreference()},this.isInitialized){this.applyTheme(),this.renderUI(i),this.updateUI(i);return}this.isInitialized=!0,this.applyTheme(),this.listenForSystemChanges(),this.renderUI(i)},getPreference:function(){return this.getStorageValue(this.STORAGE_KEY,"system")},setPreference:function(i){m.includes(i)&&(this.state.preference=i,this.setStorageValue(this.STORAGE_KEY,i),this.applyTheme(),window.ThemeCustomizer&&window.ThemeCustomizer.applyTheme&&!window.ThemeCustomizer._isApplying&&window.ThemeCustomizer.applyTheme(i),this.updateUI())},getStorageValue:function(i,o){if(typeof window.safeStorageGet=="function")return window.safeStorageGet(i,o);try{let a=localStorage.getItem(i);return a!==null?a:o}catch{return o}},setStorageValue:function(i,o){if(typeof window.safeStorageSet=="function")return window.safeStorageSet(i,o);try{return localStorage.setItem(i,o),!0}catch{return!1}},applyTheme:function(){let i=this.state.preference;i==="system"?document.documentElement.removeAttribute("data-theme"):document.documentElement.setAttribute("data-theme",i)},listenForSystemChanges:function(){this._mediaQuery&&this._onMediaChange||(this._mediaQuery=window.matchMedia("(prefers-color-scheme: dark)"),this._onMediaChange=i=>{this.state.preference==="system"&&(this.applyTheme(),window.ThemeCustomizer&&typeof window.ThemeCustomizer.applyTheme=="function"&&!window.ThemeCustomizer._isApplying&&window.ThemeCustomizer.applyTheme("system"))},this._mediaQuery.addEventListener("change",this._onMediaChange))},renderUI:function(i){this.renderMenuSwitchers(i),this.getToggles(i).forEach(a=>{if(a.getAttribute("data-theme-initialized")==="true"){a.tagName==="SELECT"&&(a.value=this.state.preference);return}if(a.tagName==="SELECT"){a.value=this.state.preference;let r=c=>{this.setPreference(c.target.value)};a.addEventListener("change",r),a._themeToggleHandler=r}else{let r=()=>{let c=m,l=(c.indexOf(this.state.preference)+1)%c.length;this.setPreference(c[l])};a.addEventListener("click",r),a._themeToggleHandler=r}a.setAttribute("data-theme-initialized","true")}),this.updateUI(i)},renderMenuSwitchers:function(i){this.getMenuSwitchers(i).forEach(a=>{if(a.getAttribute("data-theme-menu-initialized")==="true")return;let r=a.querySelector(".vd-theme-switcher-toggle"),c=a.querySelector(".vd-theme-switcher-menu");if(!r||!c)return;let l=c.querySelectorAll("[data-theme-value]"),d=[];r.setAttribute("aria-haspopup","true"),r.setAttribute("aria-expanded","false"),c.setAttribute("aria-hidden","true");let h=g=>{g.preventDefault(),g.stopPropagation(),this.toggleMenu(a,r,c)};r.addEventListener("click",h),d.push(()=>r.removeEventListener("click",h)),l.forEach(g=>{let w=b=>{b.preventDefault(),b.stopPropagation();let L=g.getAttribute("data-theme-value");L&&this.setPreference(L),this.closeMenu(a,r,c)};g.addEventListener("click",w),d.push(()=>g.removeEventListener("click",w));let T=b=>{(b.key==="Enter"||b.key===" ")&&(b.preventDefault(),w(b))};g.addEventListener("keydown",T),d.push(()=>g.removeEventListener("keydown",T))});let f=g=>{g.key==="ArrowDown"||g.key==="Enter"||g.key===" "?(g.preventDefault(),c.classList.contains("is-open")||this.openMenu(a,r,c)):g.key==="Escape"&&c.classList.contains("is-open")&&(g.preventDefault(),this.closeMenu(a,r,c))};r.addEventListener("keydown",f),d.push(()=>r.removeEventListener("keydown",f));let u=g=>{this.handleMenuKeydown(g,a,r,c,l)};c.addEventListener("keydown",u),d.push(()=>c.removeEventListener("keydown",u));let p=g=>{!a.contains(g.target)&&c.classList.contains("is-open")&&this.closeMenu(a,r,c)};document.addEventListener("click",p),d.push(()=>document.removeEventListener("click",p)),this.menuInstances.set(a,{toggle:r,menu:c,cleanup:d}),a.setAttribute("data-theme-menu-initialized","true"),this.initMenuTooltips(a)})},initMenuTooltips:function(i){let o=window.Vanduo&&typeof window.Vanduo.getComponent=="function"?window.Vanduo.getComponent("tooltips"):null;o&&typeof o.init=="function"&&o.init(i)},closeOtherMenus:function(i){this.menuInstances.forEach((o,a)=>{o.menu!==i&&o.menu.classList.contains("is-open")&&this.closeMenu(a,o.toggle,o.menu)})},toggleMenu:function(i,o,a){a.classList.contains("is-open")?this.closeMenu(i,o,a):this.openMenu(i,o,a)},openMenu:function(i,o,a){this.closeOtherMenus(a),i.classList.add("is-open"),a.classList.add("is-open"),o.setAttribute("aria-expanded","true"),a.setAttribute("aria-hidden","false");let r=a.querySelector("[data-theme-value].is-active")||a.querySelector("[data-theme-value]");r&&setTimeout(()=>r.focus(),0)},closeMenu:function(i,o,a){i.classList.remove("is-open"),a.classList.remove("is-open"),o.setAttribute("aria-expanded","false"),a.setAttribute("aria-hidden","true")},handleMenuKeydown:function(i,o,a,r,c){let l=Array.from(c),d=l.indexOf(document.activeElement);if(i.key==="Escape"){i.preventDefault(),this.closeMenu(o,a,r),a.focus();return}if(i.key==="ArrowDown"){i.preventDefault();let h=d<l.length-1?d+1:0;l[h].focus();return}if(i.key==="ArrowUp"){i.preventDefault();let h=d>0?d-1:l.length-1;l[h].focus()}},updateMenuSwitcher:function(i){let o=i.querySelector(".vd-theme-switcher-toggle"),a=i.querySelector(".vd-theme-switcher-menu");if(!o||!a)return;let r=this.state.preference,c=o.querySelector("[data-theme-icon]"),l=t[r]||t.system;c&&(c.className=e[r]||e.system),o.setAttribute("aria-label",l),o.hasAttribute("data-tooltip")&&(o.setAttribute("data-tooltip",l),this.refreshTooltipContent(o,l)),a.querySelectorAll("[data-theme-value]").forEach(d=>{let h=d.getAttribute("data-theme-value"),f=h===r;d.classList.toggle("is-active",f),d.setAttribute("aria-checked",f?"true":"false");let u=n[h];u&&d.hasAttribute("data-tooltip")&&(d.setAttribute("data-tooltip",u),this.refreshTooltipContent(d,u))})},refreshTooltipContent:function(i,o){let a=window.Vanduo&&typeof window.Vanduo.getComponent=="function"?window.Vanduo.getComponent("tooltips"):null;!a||typeof a.update!="function"||a.update(i,o)},updateCycleToggle:function(i){let o=this.state.preference,a=i.querySelector("[data-theme-icon]"),r=t[o]||t.system;a&&(a.className=e[o]||e.system),i.setAttribute("aria-label",r),i.hasAttribute("data-tooltip")&&(i.setAttribute("data-tooltip",r),this.refreshTooltipContent(i,r))},updateUI:function(i){this.getToggles(i).forEach(a=>{if(a.tagName==="SELECT")a.value=this.state.preference;else{let r=a.querySelector(".theme-current-label");r&&(r.textContent=this.state.preference.charAt(0).toUpperCase()+this.state.preference.slice(1)),a.querySelector("[data-theme-icon]")&&this.updateCycleToggle(a)}}),this.getMenuSwitchers(i).forEach(a=>{this.updateMenuSwitcher(a)})},destroyAll:function(i){let o=i||document;this.getMenuSwitchers(o).forEach(r=>{let c=this.menuInstances.get(r);c&&(c.cleanup.forEach(l=>l()),this.closeMenu(r,c.toggle,c.menu),this.menuInstances.delete(r)),r.removeAttribute("data-theme-menu-initialized")}),this.getToggles(o).filter(function(r){return r.getAttribute("data-theme-initialized")==="true"}).forEach(r=>{if(r._themeToggleHandler){let c=r.tagName==="SELECT"?"change":"click";r.removeEventListener(c,r._themeToggleHandler),delete r._themeToggleHandler}r.removeAttribute("data-theme-initialized")}),o===document&&this._mediaQuery&&this._onMediaChange&&this._mediaQuery.removeEventListener("change",this._onMediaChange),o===document&&(this._mediaQuery=null,this._onMediaChange=null,this.isInitialized=!1)}};window.Vanduo&&window.Vanduo.register("themeSwitcher",s)})();(function(){"use strict";let m={defaults:{position:"top-right",duration:5e3,dismissible:!0,showProgress:!0,pauseOnHover:!0},containers:{},getContainer:function(e){if(this.containers[e])return this.containers[e];let t=document.createElement("div");return t.className=`vd-toast-container vd-toast-container-${e}`,t.setAttribute("role","status"),t.setAttribute("aria-live","polite"),t.setAttribute("aria-atomic","false"),document.body.appendChild(t),this.containers[e]=t,t},show:function(e,t,n){typeof e=="string"&&(t&&typeof t=="object"?e=Object.assign({},t,{message:e}):e={message:e,type:t,duration:n});let s=Object.assign({},this.defaults,e),i=this.getContainer(s.position),o=document.createElement("div");o.className="vd-toast",s.type&&o.classList.add(`vd-toast-${s.type}`),s.solid&&o.classList.add("vd-toast-solid"),s.showProgress&&s.duration>0&&o.classList.add("vd-toast-with-progress");let a="";if(s.icon){let p=s.iconAllowSvg===!0,g=typeof sanitizeHtml=="function"?sanitizeHtml(s.icon,{allowSvg:p,allowStyle:!1}):escapeHtml(s.icon);a+=`<span class="vd-toast-icon">${g}</span>`}else s.type&&(a+=`<span class="vd-toast-icon">${this.getDefaultIcon(s.type)}</span>`);let r=typeof escapeHtml=="function"?escapeHtml:function(p){let g=document.createElement("div");return g.appendChild(document.createTextNode(p)),g.innerHTML};if(a+='<div class="vd-toast-content">',s.title&&(a+=`<div class="vd-toast-title">${r(String(s.title))}</div>`),s.message&&(a+=`<div class="vd-toast-message">${r(String(s.message))}</div>`),a+="</div>",s.dismissible&&(a+='<button type="button" class="vd-toast-close" aria-label="Close"></button>'),s.showProgress&&s.duration>0){let p=parseInt(s.duration,10)||0;a+=`<div class="vd-toast-progress" style="animation-duration: ${p}ms"></div>`}if(o.innerHTML=a,i.appendChild(o),o._toastCleanup=[],s.dismissible){let p=o.querySelector(".vd-toast-close"),g=()=>{this.dismiss(o)};p.addEventListener("click",g),o._toastCleanup.push(()=>p.removeEventListener("click",g))}let c=null,l=s.duration,d=null,h=()=>{if(s.duration>0){d=Date.now(),c=setTimeout(()=>{this.dismiss(o)},l),o._toastTimeoutId=c;let p=o.querySelector(".vd-toast-progress");p&&(p.style.animationPlayState="running")}},f=()=>{if(c){clearTimeout(c),c=null,o._toastTimeoutId=null,l-=Date.now()-d;let p=o.querySelector(".vd-toast-progress");p&&(p.style.animationPlayState="paused")}};s.pauseOnHover&&(o.addEventListener("mouseenter",f),o.addEventListener("mouseleave",h),o._toastCleanup.push(()=>o.removeEventListener("mouseenter",f),()=>o.removeEventListener("mouseleave",h))),requestAnimationFrame(()=>{o.classList.add("is-visible"),h()}),o._toastConfig=s;let u=new CustomEvent("toast:show",{bubbles:!0,detail:{toast:o,config:s}});return o.dispatchEvent(u),o},dismiss:function(e){if(!e||e.classList.contains("is-exiting"))return;e._toastTimeoutId&&(clearTimeout(e._toastTimeoutId),e._toastTimeoutId=null),e.classList.remove("is-visible"),e.classList.add("is-exiting");let t=new CustomEvent("toast:dismiss",{bubbles:!0,detail:{toast:e}});e.dispatchEvent(t);let n=()=>{e.removeEventListener("transitionend",n),e._toastCleanup&&(e._toastCleanup.forEach(s=>s()),delete e._toastCleanup),e.parentElement&&e.parentElement.removeChild(e)};e.addEventListener("transitionend",n),setTimeout(()=>{e._toastCleanup&&(e._toastCleanup.forEach(s=>s()),delete e._toastCleanup),e.parentElement&&e.parentElement.removeChild(e)},400)},destroyAll:function(){Object.keys(this.containers).forEach(e=>{let t=this.containers[e];if(!t)return;t.querySelectorAll(".vd-toast").forEach(s=>{s._toastTimeoutId&&clearTimeout(s._toastTimeoutId),s._toastCleanup&&(s._toastCleanup.forEach(i=>i()),delete s._toastCleanup),s.parentElement&&s.parentElement.removeChild(s)}),t.parentElement&&t.parentElement.removeChild(t)}),this.containers={}},dismissAll:function(e){e&&this.containers[e]?this.containers[e].querySelectorAll(".vd-toast").forEach(n=>this.dismiss(n)):Object.values(this.containers).forEach(t=>{t.querySelectorAll(".vd-toast").forEach(s=>this.dismiss(s))})},getDefaultIcon:function(e){return{success:'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>',error:'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="15" y1="9" x2="9" y2="15"></line><line x1="9" y1="9" x2="15" y2="15"></line></svg>',warning:'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>',info:'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg>'}[e]||""},success:function(e,t){return this.show(Object.assign({message:e,type:"success"},t))},error:function(e,t){return this.show(Object.assign({message:e,type:"error"},t))},warning:function(e,t){return this.show(Object.assign({message:e,type:"warning"},t))},info:function(e,t){return this.show(Object.assign({message:e,type:"info"},t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("toast",m),window.Toast=m})();(function(){"use strict";let m={tooltips:new Map,delayTimers:new Map,sanitizeHtml:function(e,t){return typeof sanitizeHtml=="function"?sanitizeHtml(e,t):e||""},init:function(e){window.Vanduo.queryAll(e,"[data-tooltip], [data-tooltip-html]").forEach(n=>{this.tooltips.has(n)||this.initTooltip(n)})},initTooltip:function(e){let t=this.createTooltip(e),n=[],s=()=>{this.showTooltip(e,t)},i=()=>{this.hideTooltip(e,t)},o=()=>{this.showTooltip(e,t)},a=()=>{this.hideTooltip(e,t)};e.addEventListener("mouseenter",s),e.addEventListener("mouseleave",i),e.addEventListener("focus",o),e.addEventListener("blur",a),n.push(()=>e.removeEventListener("mouseenter",s),()=>e.removeEventListener("mouseleave",i),()=>e.removeEventListener("focus",o),()=>e.removeEventListener("blur",a)),this.tooltips.set(e,{tooltip:t,cleanup:n})},createTooltip:function(e){let t=document.createElement("div");t.className="vd-tooltip",t.setAttribute("role","tooltip"),t.setAttribute("aria-hidden","true");let n="tooltip-"+Math.random().toString(36).substr(2,9);t.id=n,e.setAttribute("aria-describedby",n);let s=e.dataset.tooltipHtml,i=e.dataset.tooltip;if(s){let r=e.hasAttribute("data-tooltip-allow-svg");t.innerHTML=this.sanitizeHtml(s,{allowSvg:r,allowStyle:!1}),t.classList.add("vd-tooltip-html")}else i&&(t.textContent=i);let o=e.dataset.tooltipPlacement||e.dataset.placement||"top";t.setAttribute("data-placement",o),t.classList.add(`vd-tooltip-${o}`),e.dataset.tooltipVariant&&t.classList.add(`vd-tooltip-${e.dataset.tooltipVariant}`),e.dataset.tooltipSize&&t.classList.add(`vd-tooltip-${e.dataset.tooltipSize}`);let a=parseInt(e.dataset.tooltipDelay)||0;return t.dataset.delay=a,document.body.appendChild(t),t},showTooltip:function(e,t){let n=parseInt(t.dataset.delay)||0;if(n>0){let s=setTimeout(()=>{this.positionTooltip(e,t),t.classList.add("is-visible"),t.setAttribute("aria-hidden","false")},n);this.delayTimers.set(e,s)}else this.positionTooltip(e,t),t.classList.add("is-visible"),t.setAttribute("aria-hidden","false")},hideTooltip:function(e,t){let n=this.delayTimers.get(e);n&&(clearTimeout(n),this.delayTimers.delete(e)),t.classList.remove("is-visible"),t.setAttribute("aria-hidden","true")},positionTooltip:function(e,t){let n=t.dataset.placement||"top",s=e.getBoundingClientRect(),i=t.getBoundingClientRect(),o=window.pageYOffset||document.documentElement.scrollTop,a=window.pageXOffset||document.documentElement.scrollLeft,r=0,c=0;switch(n){case"top":r=s.top+o-i.height-8,c=s.left+a+s.width/2-i.width/2;break;case"bottom":r=s.bottom+o+8,c=s.left+a+s.width/2-i.width/2;break;case"left":r=s.top+o+s.height/2-i.height/2,c=s.left+a-i.width-8;break;case"right":r=s.top+o+s.height/2-i.height/2,c=s.right+a+8;break}let l=window.innerWidth,d=window.innerHeight,h=8;c<h?c=h:c+i.width>l-h&&(c=l-i.width-h),r<o+h?r=o+h:r+i.height>o+d-h&&(r=o+d-i.height-h),t.style.cssText=`position: absolute; top: 0; left: 0; transform: translate(${c}px, ${r}px);`},show:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t&&this.tooltips.has(t)){let{tooltip:n}=this.tooltips.get(t);this.showTooltip(t,n)}},hide:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t&&this.tooltips.has(t)){let{tooltip:n}=this.tooltips.get(t);this.hideTooltip(t,n)}},update:function(e,t,n=!1){let s=typeof e=="string"?document.querySelector(e):e;if(s&&this.tooltips.has(s)){let{tooltip:i}=this.tooltips.get(s);if(n){let o=s.hasAttribute("data-tooltip-allow-svg");i.innerHTML=this.sanitizeHtml(t,{allowSvg:o,allowStyle:!1}),i.classList.add("vd-tooltip-html")}else i.textContent=t,i.classList.remove("vd-tooltip-html")}},destroy:function(e){let t=this.tooltips.get(e);if(!t)return;let n=this.delayTimers.get(e);n&&(clearTimeout(n),this.delayTimers.delete(e)),t.cleanup.forEach(s=>s()),t.tooltip&&t.tooltip.parentNode&&t.tooltip.parentNode.removeChild(t.tooltip),this.tooltips.delete(e)},destroyAll:function(){this.tooltips.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("tooltips",m),window.VanduoTooltips=m})();(function(){"use strict";let m={minQueryLength:2,maxResults:10,debounceMs:150,highlightTag:"mark",keyboardShortcut:!0,containerSelector:".vd-doc-search",inputSelector:".vd-doc-search-input",resultsSelector:".vd-doc-search-results",contentSelector:".doc-content section[id]",titleSelector:".demo-title, h2, h3",navSelector:".doc-nav-link",sectionSelector:".doc-nav-section",excludeFromContent:"pre, code, script, style",maxContentLength:500,data:null,categoryIcons:{"getting-started":"ph-rocket-launch",core:"ph-cube",components:"ph-puzzle-piece",interactive:"ph-cursor-click","data-display":"ph-table",feedback:"ph-bell",meta:"ph-info",default:"ph-file-text"},onSelect:null,onSearch:null,onOpen:null,onClose:null,emptyTitle:"No results found",emptyText:"Try different keywords or check spelling",placeholder:"Search..."},e={mark:!0,span:!0,strong:!0,em:!0};function t(a){return typeof window.VanduoLifecycle<"u"&&window.VanduoLifecycle.isRoot(a)}function n(a){return t(a)?a:document}function s(a){let r=typeof a=="string"?a.toLowerCase():"mark";return e[r]?r:"mark"}function i(a){let r=Object.assign({},m,a||{});r.root=n(r.root),r.highlightTag=s(r.highlightTag);let c={initialized:!1,index:[],results:[],activeIndex:-1,isOpen:!1,query:"",container:null,input:null,resultsContainer:null,debounceTimer:null,boundHandlers:{}};function l(y){if(window.Vanduo&&typeof window.Vanduo.queryAll=="function")return window.Vanduo.queryAll(r.root,y);let x=n(r.root);if(x===document)return Array.from(document.querySelectorAll(y));let _=[];return x instanceof Element&&x.matches(y)&&_.push(x),_.concat(Array.from(x.querySelectorAll(y)))}function d(y){let x=l(y);return x.length?x[0]:null}function h(y,x,..._){try{x(..._)}catch(N){console.warn('[Vanduo Search] Callback error in "'+y+'":',N)}}function f(y){if(c.resultsContainer)try{c.resultsContainer.innerHTML=y}catch(x){console.warn("[Vanduo Search] Failed to render results:",x)}}function u(){return c.initialized?te:(c.container=d(r.containerSelector),!c.container||(c.input=c.container.querySelector(r.inputSelector),c.resultsContainer=c.container.querySelector(r.resultsSelector),!c.input||!c.resultsContainer)?(c.initialized=!1,null):(r.placeholder&&c.input.setAttribute("placeholder",r.placeholder),p(),V(),v(),c.initialized=!0,te))}function p(){if(c.index=[],r.data&&Array.isArray(r.data)){r.data.forEach(function(_){c.index.push({id:_.id||L(_.title),title:_.title||"",category:_.category||"",categorySlug:L(_.category||""),content:_.content||"",keywords:_.keywords||b(_.title+" "+_.content),url:_.url||"#"+(_.id||L(_.title)),icon:_.icon||""})});return}let y=l(r.contentSelector),x=g();y.forEach(function(_){let N=_.id;if(!N)return;let z=_.querySelector(r.titleSelector),O=z?z.textContent.replace(/v[\d.]+/g,"").trim():N,A=x[N]||"Documentation",D=w(_),E=T(_,O),C=z?z.querySelector("i.ph"):null,H="";if(C&&C.classList){for(let B=0;B<C.classList.length;B++)if(C.classList[B].indexOf("ph-")===0){H=C.classList[B];break}}c.index.push({id:N,title:O,category:A,categorySlug:L(A),content:D,keywords:E,url:"#"+N,icon:H})})}function g(){let y={},x="Documentation";return l(r.navSelector+", "+r.sectionSelector).forEach(function(N){if(N.classList.contains("doc-nav-section"))x=N.textContent.trim();else{let z=N.getAttribute("href");if(z&&z.startsWith("#")){let O=z.substring(1);y[O]=x}}}),y}function w(y){let x=y.cloneNode(!0);x.querySelectorAll(r.excludeFromContent).forEach(function(z){z.remove()});let N=x.textContent||"";return N=N.replace(/\s+/g," ").trim(),N.substring(0,r.maxContentLength)}function T(y,x){let _=[];return x.toLowerCase().split(/\s+/).forEach(function(O){O.length>2&&_.push(O)}),y.querySelectorAll("code").forEach(function(O){let D=(O.textContent||"").match(/\.([\w-]+)/g);D&&D.forEach(function(E){_.push(E.substring(1).toLowerCase())})}),y.querySelectorAll("[data-tooltip], [data-modal]").forEach(function(O){O.getAttributeNames().filter(function(D){return D.startsWith("data-")}).forEach(function(D){_.push(D.replace("data-",""))})}),Array.from(new Set(_))}function b(y){return y.toLowerCase().split(/\s+/).filter(function(_){return _.length>2})}function L(y){return y.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"")}function V(){c.boundHandlers.handleInput=function(y){q(y)},c.boundHandlers.handleFocus=function(){c.query.length>=r.minQueryLength&&ne()},c.boundHandlers.handleKeydown=function(y){I(y)},c.boundHandlers.handleOutsideClick=function(y){c.container.contains(y.target)||ee()},c.boundHandlers.handleGlobalKeydown=function(y){r.keyboardShortcut&&(y.metaKey||y.ctrlKey)&&y.key==="k"&&(y.preventDefault(),c.input.focus(),c.input.select())},c.boundHandlers.handleResultClick=function(y){let x=y.target.closest(".vd-doc-search-result");if(x){let _=parseInt(x.dataset.index,10);J(_)}},c.input.addEventListener("input",c.boundHandlers.handleInput),c.input.addEventListener("focus",c.boundHandlers.handleFocus),c.input.addEventListener("keydown",c.boundHandlers.handleKeydown),document.addEventListener("click",c.boundHandlers.handleOutsideClick),document.addEventListener("keydown",c.boundHandlers.handleGlobalKeydown),c.resultsContainer.addEventListener("click",c.boundHandlers.handleResultClick)}function k(){c.input&&(c.input.removeEventListener("input",c.boundHandlers.handleInput),c.input.removeEventListener("focus",c.boundHandlers.handleFocus),c.input.removeEventListener("keydown",c.boundHandlers.handleKeydown)),document.removeEventListener("click",c.boundHandlers.handleOutsideClick),document.removeEventListener("keydown",c.boundHandlers.handleGlobalKeydown),c.resultsContainer&&c.resultsContainer.removeEventListener("click",c.boundHandlers.handleResultClick)}function v(){let y=c.resultsContainer.id||"search-results-"+Math.random().toString(36).substr(2,9);c.resultsContainer.id=y,c.input.setAttribute("role","combobox"),c.input.setAttribute("aria-autocomplete","list"),c.input.setAttribute("aria-controls",y),c.input.setAttribute("aria-expanded","false"),c.resultsContainer.setAttribute("role","listbox"),c.resultsContainer.setAttribute("aria-label","Search results")}function q(y){let x=y.target.value.trim();c.debounceTimer&&clearTimeout(c.debounceTimer),c.debounceTimer=setTimeout(function(){if(c.query=x,x.length<r.minQueryLength){ee();return}c.results=S(x),c.activeIndex=-1,M(),ne(),typeof r.onSearch=="function"&&h("onSearch",r.onSearch,x,c.results)},r.debounceMs)}function I(y){if(!c.isOpen){y.key==="ArrowDown"&&c.query.length>=r.minQueryLength&&(y.preventDefault(),c.results=S(c.query),M(),ne());return}switch(y.key){case"ArrowDown":y.preventDefault(),W(1);break;case"ArrowUp":y.preventDefault(),W(-1);break;case"Enter":y.preventDefault(),c.activeIndex>=0?J(c.activeIndex):c.results.length>0&&J(0);break;case"Escape":y.preventDefault(),ee();break;case"Tab":ee();break}}function S(y){let x=y.toLowerCase().split(/\s+/).filter(function(N){return N.length>0}),_=[];return c.index.forEach(function(N){let z=0,O=N.title.toLowerCase(),A=N.category.toLowerCase(),D=N.content.toLowerCase();x.forEach(function(E){O.includes(E)&&(z+=100,O===E?z+=50:O.startsWith(E)&&(z+=25)),A.includes(E)&&(z+=50),N.keywords.some(function(H){return H.includes(E)})&&(z+=30),D.includes(E)&&(z+=10)}),z>0&&_.push({id:N.id,title:N.title,category:N.category,categorySlug:N.categorySlug,content:N.content,url:N.url,icon:N.icon,score:z})}),_.sort(function(N,z){return z.score-N.score}),_.slice(0,r.maxResults)}function M(){if(c.results.length===0){f(P());return}let y='<ul class="vd-doc-search-results-list" role="listbox">';c.results.forEach(function(x,_){let N=_===c.activeIndex,z=x.icon||$(x.categorySlug),O=Z(x.content,c.query);y+='<li class="vd-doc-search-result'+(N?" is-active":"")+'" role="option" id="vd-doc-search-result-'+_+'" data-index="'+_+'" data-category="'+R(x.categorySlug)+'" aria-selected="'+N+'"><div class="vd-doc-search-result-icon"><i class="ph '+R(z)+'"></i></div><div class="vd-doc-search-result-content"><div class="vd-doc-search-result-title">'+Q(x.title,c.query)+'</div><div class="vd-doc-search-result-category">'+R(x.category)+'</div><div class="vd-doc-search-result-excerpt">'+Q(O,c.query)+"</div></div></li>"}),y+="</ul>",y+=F(),f(y)}function P(){return'<div class="vd-doc-search-empty"><div class="vd-doc-search-empty-icon"><i class="ph ph-magnifying-glass"></i></div><div class="vd-doc-search-empty-title">'+R(r.emptyTitle)+'</div><div class="vd-doc-search-empty-text">'+R(r.emptyText)+"</div></div>"}function F(){return'<div class="vd-doc-search-footer"><span class="vd-doc-search-footer-item"><kbd>\u2191</kbd><kbd>\u2193</kbd> to navigate</span><span class="vd-doc-search-footer-item"><kbd>\u21B5</kbd> to select</span><span class="vd-doc-search-footer-item"><kbd>esc</kbd> to close</span></div>'}function $(y){return r.categoryIcons[y]||r.categoryIcons.default||"ph-file-text"}function Z(y,x){let _=x.toLowerCase().split(/\s+/),N=y.toLowerCase(),z=100,O=-1;for(let C=0;C<_.length;C++){let H=N.indexOf(_[C]);H!==-1&&(O===-1||H<O)&&(O=H)}if(O===-1)return y.substring(0,z)+"...";let A=Math.max(0,O-30),D=Math.min(y.length,O+z),E=y.substring(A,D);return A>0&&(E="..."+E),D<y.length&&(E=E+"..."),E}function Q(y,x){if(!x)return R(y);let _=x.toLowerCase().split(/\s+/).filter(function(z){return z.length>0}),N=R(y);return _.forEach(function(z){if(z.length>50)return;let O=new RegExp("("+z.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+")","gi");N=N.replace(O,"<"+r.highlightTag+">$1</"+r.highlightTag+">")}),N}function R(y){let x=document.createElement("div");return x.textContent=y,x.innerHTML}function W(y){let x=c.activeIndex+y;x<0?x=c.results.length-1:x>=c.results.length&&(x=0),K(x)}function K(y){let x=c.resultsContainer.querySelector(".vd-doc-search-result.is-active");x&&(x.classList.remove("is-active"),x.setAttribute("aria-selected","false")),c.activeIndex=y;let _=c.resultsContainer.querySelector('[data-index="'+y+'"]');_&&(_.classList.add("is-active"),_.setAttribute("aria-selected","true"),c.input.setAttribute("aria-activedescendant","vd-doc-search-result-"+y),_.scrollIntoView({block:"nearest"}))}function J(y){let x=c.results[y];if(!x)return;if(ee(),c.input.value="",c.query="",typeof r.onSelect=="function"){h("onSelect",r.onSelect,x);return}let _=d(x.url)||document.querySelector(x.url);_&&(_.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",x.url),ce(x.id))}function ce(y){l(r.navSelector).forEach(function(_){_.classList.remove("active"),_.getAttribute("href")==="#"+y&&_.classList.add("active")})}function ne(){c.isOpen||(c.isOpen=!0,c.resultsContainer.classList.add("is-open"),c.input.setAttribute("aria-expanded","true"),typeof r.onOpen=="function"&&h("onOpen",r.onOpen))}function ee(){c.isOpen&&(c.isOpen=!1,c.activeIndex=-1,c.resultsContainer.classList.remove("is-open"),c.input.setAttribute("aria-expanded","false"),c.input.removeAttribute("aria-activedescendant"),typeof r.onClose=="function"&&h("onClose",r.onClose))}function G(){k(),c.initialized=!1,c.index=[],c.results=[],c.isOpen=!1,c.query="",c.debounceTimer&&clearTimeout(c.debounceTimer),c.resultsContainer&&f("")}function le(){p()}function ie(y){Object.assign(r,y),r.root=n(r.root),r.highlightTag=s(r.highlightTag)}function se(){return Object.assign({},r)}function de(){return c.index.slice()}let te={init:u,destroy:G,rebuild:le,search:S,open:ne,close:ee,setConfig:ie,getConfig:se,getIndex:de,getContainer:function(){return c.container}};return te}let o={create:function(a){let r=i(a);return r&&r.init(),r||null},_instance:null,config:Object.assign({},m),init:function(a,r){let c=t(a)?a:null,l=c?r:a;return this._instance&&this._instance.destroy(),l&&Object.assign(this.config,l),this._instance=i(Object.assign({},this.config,c?{root:c}:{})),this._instance?this._instance.init():null},destroy:function(a){a&&this._instance&&this._instance.getContainer()&&typeof window.VanduoLifecycle<"u"&&!window.VanduoLifecycle.isInRoot(a,this._instance.getContainer())||this._instance&&(this._instance.destroy(),this._instance=null)},destroyAll:function(a){this.destroy(a)},rebuild:function(){this._instance&&this._instance.rebuild()},search:function(a){return this._instance?this._instance.search(a):[]},open:function(){this._instance&&this._instance.open()},close:function(){this._instance&&this._instance.close()}};typeof window.Vanduo<"u"&&window.Vanduo.register("docSearch",o),window.Search=o,window.DocSearch=o,window.VanduoDocSearch=o})();(function(){"use strict";let m={instances:new Map,currentDrag:null,touchState:null,feedbackElement:null,containerSelector:".vd-draggable-container, .vd-draggable-container-vertical",init:function(e){window.Vanduo.queryAll(e,".vd-draggable, [data-draggable]").forEach(i=>{this.instances.has(i)||this.initDraggable(i)}),window.Vanduo.queryAll(e,this.containerSelector).forEach(i=>{this.instances.has(i)||this.initContainer(i)}),window.Vanduo.queryAll(e,".vd-drop-zone").forEach(i=>{this.instances.has(i)||this.initDropZone(i)}),this.createFeedbackElement()},initDraggable:function(e){let t=[];e.hasAttribute("draggable")||e.setAttribute("draggable","true"),e.hasAttribute("tabindex")||e.setAttribute("tabindex","0"),e.setAttribute("role","option"),e.setAttribute("aria-roledescription","draggable item"),e.setAttribute("aria-grabbed","false");let n=d=>{this.handleDragStart(d,e)};e.addEventListener("dragstart",n),t.push(()=>e.removeEventListener("dragstart",n));let s=d=>{this.handleDrag(d,e)};e.addEventListener("drag",s),t.push(()=>e.removeEventListener("drag",s));let i=d=>{this.handleDragEnd(d,e)};e.addEventListener("dragend",i),t.push(()=>e.removeEventListener("dragend",i));let o=d=>{this.handleTouchStart(d,e)};e.addEventListener("touchstart",o),t.push(()=>e.removeEventListener("touchstart",o));let a=d=>{this.handleTouchMove(d,e)};e.addEventListener("touchmove",a,{passive:!1}),t.push(()=>e.removeEventListener("touchmove",a));let r=d=>{this.handleTouchEnd(d,e)};e.addEventListener("touchend",r,{passive:!1}),t.push(()=>e.removeEventListener("touchend",r));let c=d=>{this.handleTouchEnd(d,e)};e.addEventListener("touchcancel",c),t.push(()=>e.removeEventListener("touchcancel",c));let l=d=>{this.handleKeydown(d,e)};e.addEventListener("keydown",l),t.push(()=>e.removeEventListener("keydown",l)),this.instances.set(e,{cleanup:t})},initContainer:function(e){e.setAttribute("role","listbox"),e.setAttribute("aria-label",e.getAttribute("aria-label")||"Draggable items"),e.querySelectorAll(".vd-draggable-item").forEach(a=>{this.instances.has(a)||this.initDraggable(a)});let n=[],s=a=>{a.preventDefault(),a.dataTransfer.dropEffect="move"},i=a=>{if(a.preventDefault(),a.dataTransfer.dropEffect="move",!this.currentDrag)return;let r=this.currentDrag.element;e.contains(r)&&(a.clientX===0&&a.clientY===0||this.handleReorder(e,r,a.clientX,a.clientY))},o=a=>{a.preventDefault()};e.addEventListener("dragenter",s),e.addEventListener("dragover",i),e.addEventListener("drop",o),n.push(()=>{e.removeEventListener("dragenter",s),e.removeEventListener("dragover",i),e.removeEventListener("drop",o)}),this.instances.set(e,{cleanup:n})},initDropZone:function(e){let t=[];e.setAttribute("role","region"),e.setAttribute("aria-dropeffect","move"),e.hasAttribute("aria-label")||e.setAttribute("aria-label","Drop zone");let n=a=>{a.preventDefault(),this.handleDragOver(a,e)};e.addEventListener("dragover",n),t.push(()=>e.removeEventListener("dragover",n));let s=a=>{a.preventDefault(),this.handleDragEnter(a,e)};e.addEventListener("dragenter",s),t.push(()=>e.removeEventListener("dragenter",s));let i=a=>{this.handleDragLeave(a,e)};e.addEventListener("dragleave",i),t.push(()=>e.removeEventListener("dragleave",i));let o=a=>{a.preventDefault(),this.handleDrop(a,e)};e.addEventListener("drop",o),t.push(()=>e.removeEventListener("drop",o)),this.instances.set(e,{cleanup:t})},createFeedbackElement:function(){if(!this.feedbackElement){let e=document.querySelector(".vd-drag-feedback");if(e){this.feedbackElement=e;return}this.feedbackElement=document.createElement("div"),this.feedbackElement.className="vd-drag-feedback hidden",this.feedbackElement.setAttribute("role","presentation"),document.body.appendChild(this.feedbackElement)}},handleDragStart:function(e,t){t.classList.add("is-dragging"),t.setAttribute("aria-grabbed","true"),this.currentDrag={element:t,initialPosition:{x:e.clientX,y:e.clientY},initialBounds:t.getBoundingClientRect(),data:this.getData(t)},e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text/plain",this.currentDrag.data),t.dispatchEvent(new CustomEvent("draggable:start",{bubbles:!0,detail:{element:t,data:this.currentDrag.data,position:{x:e.clientX,y:e.clientY}}}))},handleDrag:function(e,t){this.currentDrag&&t.dispatchEvent(new CustomEvent("draggable:drag",{bubbles:!0,detail:{element:t,data:this.currentDrag.data,position:{x:e.clientX,y:e.clientY},delta:{x:e.clientX-this.currentDrag.initialPosition.x,y:e.clientY-this.currentDrag.initialPosition.y}}}))},handleDragEnd:function(e,t){t.classList.remove("is-dragging"),t.classList.add("is-dropped"),setTimeout(()=>t.classList.remove("is-dropped"),300),t.setAttribute("aria-grabbed","false"),this.feedbackElement&&this.feedbackElement.classList.add("hidden");let n=this.currentDrag?.data||this.getData(t),s=this.currentDrag?.initialPosition||{x:0,y:0};t.dispatchEvent(new CustomEvent("draggable:end",{bubbles:!0,detail:{element:t,data:n,position:{x:e.clientX,y:e.clientY},delta:{x:e.clientX-s.x,y:e.clientY-s.y}}})),this.currentDrag=null},handleTouchStart:function(e,t){let n=e.touches[0],s=t.getBoundingClientRect();this.touchState={element:t,startX:n.clientX,startY:n.clientY,lastX:n.clientX,lastY:n.clientY,offsetX:n.clientX-s.left,offsetY:n.clientY-s.top,startTime:Date.now(),isDragging:!1}},handleTouchMove:function(e,t){if(!this.touchState)return;let n=e.touches[0];this.touchState.lastX=n.clientX,this.touchState.lastY=n.clientY;let s=n.clientX-this.touchState.startX,i=n.clientY-this.touchState.startY;if((Math.abs(s)>10||Math.abs(i)>10)&&(e.cancelable&&e.preventDefault(),this.touchState.isDragging||(this.touchState.isDragging=!0,t.classList.add("is-dragging"),t.setAttribute("aria-grabbed","true"),this.currentDrag={element:t,initialPosition:{x:this.touchState.startX,y:this.touchState.startY},initialBounds:t.getBoundingClientRect(),data:this.getData(t),offsetX:this.touchState.offsetX,offsetY:this.touchState.offsetY},t.dispatchEvent(new CustomEvent("draggable:start",{bubbles:!0,detail:{element:t,data:this.currentDrag.data,position:{x:n.clientX,y:n.clientY}}}))),this.updateFeedback(n.clientX,n.clientY),this.currentDrag)){t.dispatchEvent(new CustomEvent("draggable:drag",{bubbles:!0,detail:{element:t,data:this.currentDrag.data,position:{x:n.clientX,y:n.clientY},delta:{x:s,y:i}}})),this.updateTouchDropZone(n.clientX,n.clientY);let o=t.closest(this.containerSelector);o&&o.contains(t)&&this.handleReorder(o,t,n.clientX,n.clientY)}},handleTouchEnd:function(e,t){if(this.touchState&&this.touchState.isDragging){e.cancelable&&e.preventDefault();let n=e.changedTouches?.[0],s={x:n?.clientX??this.touchState.lastX??this.touchState.startX,y:n?.clientY??this.touchState.lastY??this.touchState.startY},i=this.resolveDropZoneAtPoint(s.x,s.y)||this.touchState.overZone;i?this.dispatchDrop(i,s):this.touchState.overZone&&this.touchState.overZone.classList.remove("is-drag-over"),t.classList.remove("is-dragging"),t.classList.add("is-dropped"),t.setAttribute("aria-grabbed","false"),setTimeout(()=>t.classList.remove("is-dropped"),300),this.feedbackElement&&this.feedbackElement.classList.add("hidden");let o=this.currentDrag?.data||this.getData(t),a=this.touchState?.startX||0,r=this.touchState?.startY||0;t.dispatchEvent(new CustomEvent("draggable:end",{bubbles:!0,detail:{element:t,data:o,position:s,delta:{x:s.x-a,y:s.y-r}}}))}this.touchState=null,this.currentDrag=null},handleDragOver:function(e,t){e.preventDefault(),e.dataTransfer.dropEffect="move"},handleDragEnter:function(e,t){e.preventDefault(),t.classList.add("is-drag-over")},handleDragLeave:function(e,t){t.classList.remove("is-drag-over")},handleDrop:function(e,t){e.preventDefault(),this.dispatchDrop(t,{x:e.clientX,y:e.clientY})},resolveDropZoneAtPoint:function(e,t){if(!Number.isFinite(e)||!Number.isFinite(t))return null;if(typeof document.elementsFromPoint=="function"){let o=document.elementsFromPoint(e,t);for(let a of o){let r=a.closest(".vd-drop-zone");if(r)return r}}let n=document.elementFromPoint(e,t),s=n?n.closest(".vd-drop-zone"):null;if(s)return s;let i=document.querySelectorAll(".vd-drop-zone");for(let o of i){let a=o.getBoundingClientRect();if(e>=a.left&&e<=a.right&&t>=a.top&&t<=a.bottom)return o}return null},updateTouchDropZone:function(e,t){if(!this.touchState)return;let n=this.resolveDropZoneAtPoint(e,t),s=this.touchState.overZone||null;s&&s!==n&&s.classList.remove("is-drag-over"),n&&n!==s&&n.classList.add("is-drag-over"),this.touchState.overZone=n||null},dispatchDrop:function(e,t){e.classList.remove("is-drag-over"),e.dispatchEvent(new CustomEvent("draggable:drop",{bubbles:!0,detail:{zone:e,element:this.currentDrag?.element,data:this.currentDrag?.data,position:t}}))},handleReorder:function(e,t,n,s){let i=e.classList.contains("vd-draggable-container-vertical"),a=[...e.querySelectorAll(".vd-draggable-item:not(.is-dragging), .vd-draggable:not(.is-dragging)")].reduce((r,c)=>{let l=c.getBoundingClientRect(),d=i?s-l.top-l.height/2:n-l.left-l.width/2;return d<0&&d>r.offset?{offset:d,element:c}:r},{offset:Number.NEGATIVE_INFINITY}).element;a==null?e.appendChild(t):e.insertBefore(t,a)},handleKeydown:function(e,t){switch(e.key){case"Enter":case" ":e.preventDefault(),t.click();break;case"Escape":t.classList.contains("is-dragging")&&(t.classList.remove("is-dragging"),t.setAttribute("aria-grabbed","false"),this.feedbackElement&&this.feedbackElement.classList.add("hidden"),this.currentDrag=null);break;case"ArrowUp":case"ArrowLeft":{e.preventDefault();let n=t.previousElementSibling;n&&(n.classList.contains("vd-draggable")||n.classList.contains("vd-draggable-item"))&&(t.parentNode.insertBefore(t,n),t.focus(),t.dispatchEvent(new CustomEvent("draggable:reorder",{bubbles:!0,detail:{element:t,direction:"up"}})));break}case"ArrowDown":case"ArrowRight":{e.preventDefault();let n=t.nextElementSibling;n&&(n.classList.contains("vd-draggable")||n.classList.contains("vd-draggable-item"))&&(t.parentNode.insertBefore(n,t),t.focus(),t.dispatchEvent(new CustomEvent("draggable:reorder",{bubbles:!0,detail:{element:t,direction:"down"}})));break}}},getData:function(e){return e.dataset.draggable||e.textContent.trim()},updateFeedback:function(e,t){if(!this.currentDrag)return;this.feedbackElement.classList.remove("hidden");let n=this.currentDrag.initialBounds;this.feedbackElement.innerHTML="";let s=this.currentDrag.element.cloneNode(!0);this.feedbackElement.appendChild(s);let i=this.currentDrag.offsetX??20,o=this.currentDrag.offsetY??20;Object.assign(this.feedbackElement.style,{left:e-i+"px",top:t-o+"px",width:n.width+"px",height:n.height+"px"})},makeDraggable:function(e,t={}){let n=typeof e=="string"?document.querySelector(e):e;n&&!this.instances.has(n)&&(n.classList.add("vd-draggable"),n.setAttribute("draggable","true"),t.data&&(n.dataset.draggable=t.data),this.initDraggable(n))},removeDraggable:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&this.instances.has(t)&&(this.instances.get(t).cleanup.forEach(s=>s()),this.instances.delete(t),t.classList.remove("vd-draggable"),t.removeAttribute("draggable"),t.removeAttribute("data-draggable"))},destroy:function(e){this.removeDraggable(e)},destroyAll:function(){Array.from(this.instances.keys()).forEach(t=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("draggable",m),window.VanduoDraggable=m})();(function(){"use strict";let m=new Map;function e(h){return!!h&&(h===document||h.nodeType===1||h.nodeType===9||h.nodeType===11)}function t(h){return e(h)?h:document}function n(h,f){let u=t(h);return f instanceof Element?u===document?document.documentElement?document.documentElement.contains(f):document.contains(f):u===f?!0:typeof u.contains=="function"&&u.contains(f):!1}function s(h,f){let u=t(h),p=[];if(u instanceof Element&&typeof u.matches=="function"&&u.matches(f)&&p.push(u),typeof u.querySelectorAll=="function"){let g=u.querySelectorAll(f);for(let w=0;w<g.length;w++)p.push(g[w])}return p}function i(h){try{return new URL(h,window.location.href).origin===window.location.origin}catch{return!1}}function o(h,f){let p=new DOMParser().parseFromString(f.trim(),"text/html"),g=["SCRIPT","IFRAME","OBJECT","EMBED","FORM","BASE","LINK","META","STYLE"];for(let b of g){let L=p.querySelectorAll(b);for(let V=L.length-1;V>=0;V--)L[V].parentNode.removeChild(L[V])}function w(b){if(b.nodeType===Node.ELEMENT_NODE){let L=b.attributes;for(let k=L.length-1;k>=0;k--){let v=L[k].name.toLowerCase(),I=L[k].value.toLowerCase().trim();(v.startsWith("on")||I.startsWith("javascript:")||I.startsWith("data:")||I.startsWith("vbscript:"))&&b.removeAttribute(L[k].name)}let V=b.childNodes;for(let k=0;k<V.length;k++)w(V[k])}}w(p.body);let T=Array.from(p.body.childNodes);for(;h.firstChild;)h.removeChild(h.firstChild);T.forEach(function(b){h.appendChild(document.adoptNode(b))})}function a(){return'<div class="vd-skeleton-card" style="position:relative;min-height:200px;padding:2rem;overflow:hidden;"><div class="vd-skeleton vd-skeleton-heading-lg" style="margin-bottom:1.5rem;"></div><div class="vd-skeleton vd-skeleton-paragraph"><div class="vd-skeleton vd-skeleton-text"></div><div class="vd-skeleton vd-skeleton-text"></div><div class="vd-skeleton vd-skeleton-text"></div></div><div class="vd-dynamic-loader" style="position:absolute;inset:0;"><div class="vd-dynamic-loader-grid"><div class="vd-spinner vd-spinner-sm vd-spinner-success"></div><div class="vd-spinner vd-spinner-sm vd-spinner-warning"></div><div class="vd-spinner vd-spinner-sm vd-spinner-error"></div><div class="vd-spinner vd-spinner-sm vd-spinner-info"></div></div><span class="vd-dynamic-loader-text">Loading\u2026</span></div></div>'}function r(){return'<div class="vd-dynamic-loader" style="min-height:180px;display:flex;align-items:center;justify-content:center;"><div class="vd-dynamic-loader-grid"><div class="vd-spinner vd-spinner-sm vd-spinner-success"></div><div class="vd-spinner vd-spinner-sm vd-spinner-warning"></div><div class="vd-spinner vd-spinner-sm vd-spinner-error"></div><div class="vd-spinner vd-spinner-sm vd-spinner-info"></div></div><span class="vd-dynamic-loader-text">Loading\u2026</span></div>'}function c(h){return!h||h==="skeleton"?a():h==="spinner"?r():h}function l(h,f,u){h.dispatchEvent(new CustomEvent(f,{bubbles:!0,detail:u||{}}))}let d={observe:function(h,f,u){if(!(h instanceof Element)){console.warn("[VanduoLazyLoad] observe() requires a DOM Element.");return}if(typeof f!="function"){console.warn("[VanduoLazyLoad] observe() requires a callback function.");return}if(m.has(h))return;let p=u&&u.threshold!=null?u.threshold:0,g=u&&u.rootMargin?u.rootMargin:"0px",w=new IntersectionObserver(function(T,b){T.forEach(function(L){if(L.isIntersecting){b.unobserve(L.target),m.delete(L.target),typeof window.VanduoLifecycle<"u"&&window.VanduoLifecycle.has(L.target,"lazyLoad")&&window.VanduoLifecycle.unregister(L.target,"lazyLoad");try{f(L.target)}catch(V){console.error("[VanduoLazyLoad] Callback threw:",V)}}})},{threshold:p,rootMargin:g});m.set(h,w),typeof window.VanduoLifecycle<"u"&&!window.VanduoLifecycle.has(h,"lazyLoad")&&window.VanduoLifecycle.register(h,"lazyLoad",[()=>{d.unobserve(h,{skipLifecycle:!0})}]),w.observe(h)},unobserve:function(h,f){let u=f||{},p=m.get(h);p&&(p.unobserve(h),typeof p.disconnect=="function"&&p.disconnect(),m.delete(h)),!u.skipLifecycle&&typeof window.VanduoLifecycle<"u"&&window.VanduoLifecycle.has(h,"lazyLoad")&&window.VanduoLifecycle.unregister(h,"lazyLoad")},unobserveAll:function(){Array.from(m.keys()).forEach(function(f){d.unobserve(f)})},loadSection:function(h,f,u){if(typeof h!="string"||!h){console.warn("[VanduoLazyLoad] loadSection() requires a non-empty URL string.");return}if(!(f instanceof Element)){console.warn("[VanduoLazyLoad] loadSection() requires a DOM Element as containerEl.");return}if(!i(h)){console.error("[VanduoLazyLoad] loadSection() blocked cross-origin URL:",h);return}let p=u||{},g=c(p.placeholder);o(f,g),l(f,"lazysection:loading",{url:h}),this.observe(f,function(){let w=new window.AbortController,T=setTimeout(function(){w.abort()},1e4);window.fetch(h,{signal:w.signal}).then(function(b){if(clearTimeout(T),!b.ok)throw new Error("HTTP "+b.status);return b.text()}).then(function(b){o(f,b),l(f,"lazysection:loaded",{url:h}),typeof window.Vanduo<"u"&&window.Vanduo.init(f),typeof p.onLoaded=="function"&&p.onLoaded(f)}).catch(function(b){let L=document.createElement("div");L.className="vd-alert vd-alert-error",L.setAttribute("role","alert");let V=document.createElement("span");V.textContent="Failed to load content. ";let k=document.createElement("small");for(k.style.opacity="0.7",k.textContent=b.message,L.appendChild(V),L.appendChild(k);f.firstChild;)f.removeChild(f.firstChild);f.appendChild(L),l(f,"lazysection:error",{url:h,error:b}),console.error("[VanduoLazyLoad] loadSection failed:",b),typeof p.onError=="function"&&p.onError(b)})},{threshold:p.threshold,rootMargin:p.rootMargin})},init:function(h){let f=this;s(h,"[data-vd-lazy]").forEach(function(p){if(m.has(p)||p.dataset.vdLazyState==="loading"||p.dataset.vdLazyState==="loaded")return;let g=p.getAttribute("data-vd-lazy");if(!g)return;p.dataset.vdLazyState="loading";let w=p.getAttribute("data-vd-lazy-placeholder")||"skeleton";f.loadSection(g,p,{placeholder:w,onLoaded:function(){p.dataset.vdLazyState="loaded"},onError:function(){p.dataset.vdLazyState="error"}})})},destroy:function(h){this.unobserve(h)},destroyAll:function(h){let f=t(h);if(f===document){this.unobserveAll();return}Array.from(m.keys()).forEach(p=>{n(f,p)&&this.unobserve(p)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("lazyLoad",d,{aliases:["LazyLoad"]}),window.VanduoLazyLoad=d})();(function(){"use strict";let m={observers:new Map,init:function(e){window.Vanduo.queryAll(e,"[data-glass-scroll]").forEach(t=>{this.observers.has(t)||this.initElement(t)})},initElement:function(e){let t=e.dataset.glassSentinel,n;if(t&&(n=document.querySelector(t)),n||(n=e.previousElementSibling),!n){e.classList.add("is-glass-active");return}let s=new IntersectionObserver(i=>{i.forEach(o=>{e.classList.toggle("is-glass-active",!o.isIntersecting)})},{threshold:0,rootMargin:"0px"});s.observe(n),this.observers.set(e,s)},destroy:function(e){let t=this.observers.get(e);t&&(t.disconnect(),this.observers.delete(e))},destroyAll:function(){this.observers.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("glassScroll",m),window.VanduoGlassScroll=m})();(function(){"use strict";let e={instances:new Map,init:function(t){window.Vanduo.queryAll(t,".vd-morph, [data-vd-morph]").forEach(function(s){e.instances.has(s)||s.getAttribute("data-vd-morph")!=="manual"&&e.initInstance(s)})},initInstance:function(t){e._ensureLayers(t);let n=[],s=!1,i=function(o){s||(e._runMorph(t,o,function(){s=!1}),s=!0)};t.addEventListener("click",i),n.push(function(){t.removeEventListener("click",i)}),this.instances.set(t,{cleanup:n})},morph:function(t){t&&(this.instances.has(t)||this.initInstance(t),this._runMorph(t,null,null))},destroy:function(t){let n=this.instances.get(t);n&&(n.cleanup.forEach(function(s){s()}),this.instances.delete(t))},destroyAll:function(){this.instances.forEach(function(t,n){e.destroy(n)})},_ensureLayers:function(t){if(!t.querySelector(".vd-morph-wave")){let n=document.createElement("span");n.className="vd-morph-wave",n.setAttribute("aria-hidden","true"),t.insertBefore(n,t.firstChild)}if(!t.querySelector(".vd-morph-shine")){let n=document.createElement("span");n.className="vd-morph-shine",n.setAttribute("aria-hidden","true");let s=t.querySelector(".vd-morph-wave");s&&s.nextSibling?t.insertBefore(n,s.nextSibling):t.insertBefore(n,t.firstChild)}},_runMorph:function(t,n,s){let i=t.querySelector(".vd-morph-wave");if(i){let r=t.getBoundingClientRect(),c=r.left+r.width/2,l=r.top+r.height/2,d=n&&n.clientX||c,h=n&&n.clientY||l;i.style.left=d-r.left+"px",i.style.top=h-r.top+"px"}t.classList.add("is-morphing");let o=750,a=getComputedStyle(t).getPropertyValue("--vd-morph-duration");if(a){let r=parseFloat(a);isNaN(r)||(o=r*(a.indexOf("ms")!==-1?1:1e3))}setTimeout(function(){t.classList.remove("is-morphing");let r=t.querySelector(".vd-morph-current"),c=t.querySelector(".vd-morph-next");r&&c&&(r.classList.remove("vd-morph-current"),r.classList.add("vd-morph-next"),c.classList.remove("vd-morph-next"),c.classList.add("vd-morph-current")),typeof s=="function"&&s()},o)}};typeof window.Vanduo<"u"&&window.Vanduo.register("morph",e),window.VanduoMorph=e})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-expanding-cards").forEach(function(t){t.getAttribute("data-vd-expanding-cards")!=="manual"&&(m.instances.has(t)||m.initContainer(t))})},initContainer:function(e){let t=[],n=function(){return Array.prototype.slice.call(e.querySelectorAll(".vd-expanding-card"))},s=function(c){let l=n();!c||l.indexOf(c)===-1||(l.forEach(function(d){d.classList.toggle("is-active",d===c)}),c.focus({preventScroll:!0}))},i=function(c){let l=c.target,d=l.closest?l.closest(".vd-expanding-card"):null;!d||!e.contains(d)||s(d)},o=function(c){if(c.key!=="ArrowLeft"&&c.key!=="ArrowRight"&&c.key!=="ArrowUp"&&c.key!=="ArrowDown"&&c.key!=="Home"&&c.key!=="End")return;let l=n().filter(function(u){return u.offsetParent!==null||u.getClientRects().length>0});if(!l.length)return;let d=document.activeElement,h=l.indexOf(d);h<0&&(h=l.findIndex(function(u){return u.classList.contains("is-active")})),h<0&&(h=0),!(!(window.getComputedStyle(e).flexDirection==="column")&&(c.key==="ArrowUp"||c.key==="ArrowDown"))&&(c.key==="ArrowLeft"||c.key==="ArrowUp"?(c.preventDefault(),s(l[Math.max(0,h-1)])):c.key==="ArrowRight"||c.key==="ArrowDown"?(c.preventDefault(),s(l[Math.min(l.length-1,h+1)])):c.key==="Home"?(c.preventDefault(),s(l[0])):c.key==="End"&&(c.preventDefault(),s(l[l.length-1])))};e.addEventListener("click",i),t.push(function(){e.removeEventListener("click",i)}),e.addEventListener("keydown",o),t.push(function(){e.removeEventListener("keydown",o)}),n().forEach(function(c){c.hasAttribute("tabindex")||c.setAttribute("tabindex","0"),c.setAttribute("role","button"),c.hasAttribute("aria-pressed")||c.setAttribute("aria-pressed",c.classList.contains("is-active")?"true":"false")});let a=function(){n().forEach(function(c){c.setAttribute("aria-pressed",c.classList.contains("is-active")?"true":"false")})},r=new MutationObserver(a);r.observe(e,{attributes:!0,subtree:!0,attributeFilter:["class"]}),t.push(function(){r.disconnect()}),a(),m.instances.set(e,{cleanup:t})},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(function(n){n()}),this.instances.delete(e))},destroyAll:function(){this.instances.forEach(function(e,t){m.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("expandingCards",m),window.VanduoExpandingCards=m})();(function(){"use strict";function n(a){let r=0;for(let c=0;c<a.length&&a[c].classList.contains("is-revealed");c++)r++;return r}function s(a){return a.parentElement||document.body}function i(a,r,c){r.forEach(function(I){I.classList.remove("is-revealed")});let l=s(a),d=l.querySelector("[data-vd-timeline-prev]"),h=l.querySelector("[data-vd-timeline-next]"),f=l.querySelector("[data-vd-timeline-play]"),u=l.querySelector("[data-vd-timeline-pause]"),p=null,g=!1,w=0;function T(){let I=n(r),S=r.length;if(d){let M=I===0;d.disabled=M,d.setAttribute("aria-disabled",M?"true":"false")}if(h){let M=I>=S;h.disabled=M,h.setAttribute("aria-disabled",M?"true":"false")}f&&f.setAttribute("aria-pressed",g?"true":"false"),u&&(u.disabled=!g)}function b(){let I=n(r);I<r.length&&r[I].classList.add("is-revealed"),T()}function L(){let I=n(r);I>0&&r[I-1].classList.remove("is-revealed"),T()}function V(){let I=++w;p=setTimeout(function(){if(p=null,!(!g||I!==w)){if(n(r)>=r.length){v();return}if(b(),n(r)>=r.length){v();return}V()}},800)}function k(){g||(g=!0,V(),T())}function v(){g=!1,w++,p&&(clearTimeout(p),p=null),T()}function q(I,S){if(!I)return;let M=function(P){P.preventDefault(),S()};I.addEventListener("click",M),c.push(function(){I.removeEventListener("click",M)})}return q(d,L),q(h,b),q(f,k),q(u,v),c.push(function(){v()}),T(),{stepNext:b,stepPrev:L,play:k,pause:v}}let o={instances:new Map,init:function(a){window.Vanduo.queryAll(a,".vd-timeline.vd-timeline-animated").forEach(function(r){o.instances.has(r)||o.initInstance(r)})},reinit:function(a){o.destroyAll(a),o.init(a)},initInstance:function(a){let r=[],c=Array.prototype.filter.call(a.children,function(f){return f.classList&&f.classList.contains("vd-timeline-item")});if(c.forEach(function(f,u){let p=Math.min(u,7);f.style.setProperty("--vd-timeline-reveal-delay",p*140+"ms")}),typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches){c.forEach(function(f){f.classList.add("is-revealed")}),o.instances.set(a,{cleanup:r});return}if(a.classList&&a.classList.contains("vd-timeline-playback")){let f=i(a,c,r);o.instances.set(a,{cleanup:r,playback:f});return}if(typeof IntersectionObserver>"u"){c.forEach(function(f){f.classList.add("is-revealed")}),o.instances.set(a,{cleanup:r});return}let h=new IntersectionObserver(function(f){f.forEach(function(u){u.isIntersecting&&(u.target.classList.add("is-revealed"),h.unobserve(u.target))})},{root:null,rootMargin:"0px 0px -10% 0px",threshold:.15});c.forEach(function(f){h.observe(f)}),r.push(function(){h.disconnect()}),o.instances.set(a,{cleanup:r})},destroy:function(a){let r=this.instances.get(a);r&&(r.cleanup.forEach(function(c){c()}),this.instances.delete(a))},destroyAll:function(a){let r=window.Vanduo&&typeof window.Vanduo._normalizeRoot=="function"?window.Vanduo._normalizeRoot(a):document;this.instances.forEach(function(c,l){r!==document&&r!==l&&(!r.contains||!r.contains(l))||o.destroy(l)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("timeline",o),window.VanduoTimeline=o})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-flow, .vd-carousel").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=e.querySelector(".vd-flow-track");if(!t)return;let n=Array.from(t.querySelectorAll(".vd-flow-slide"));if(n.length===0)return;let s=e.classList.contains("vd-flow-fade"),i=e.hasAttribute("data-vd-autoplay"),o=parseInt(e.getAttribute("data-vd-interval"),10)||5e3,a=e.getAttribute("data-vd-loop")!=="false",r={current:0,total:n.length,autoplayTimer:null,isFade:s,loop:a,isDragging:!1,startX:0,currentX:0,threshold:50},c=[];n.forEach((v,q)=>{v.setAttribute("role","group"),v.setAttribute("aria-roledescription","slide"),v.setAttribute("aria-label","Slide "+(q+1)+" of "+n.length),q===0&&v.classList.add("is-active")}),e.setAttribute("role","region"),e.setAttribute("aria-roledescription","carousel"),e.getAttribute("aria-label")||e.setAttribute("aria-label","Carousel");let l=document.createElement("div");l.setAttribute("aria-live","polite"),l.setAttribute("aria-atomic","true"),l.className="sr-only",l.style.cssText="position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);",e.appendChild(l);let d=(v,q)=>{q===void 0&&(q=!0);let I=v;r.loop?I=(v%r.total+r.total)%r.total:I=Math.max(0,Math.min(v,r.total-1));let S=r.current;r.current=I,r.isFade?n.forEach((P,F)=>{P.classList.toggle("is-active",F===I)}):t.style.transform="translateX(-"+I*100+"%)",e.querySelectorAll(".vd-flow-indicator").forEach((P,F)=>{P.classList.toggle("is-active",F===I),P.setAttribute("aria-selected",F===I?"true":"false")}),n.forEach((P,F)=>{P.setAttribute("aria-hidden",F!==I?"true":"false")}),q&&(l.textContent="Slide "+(I+1)+" of "+r.total),e.dispatchEvent(new CustomEvent("flow:change",{detail:{current:I,previous:S,total:r.total}}))},h=()=>d(r.current+1),f=()=>d(r.current-1),u=e.querySelector(".vd-flow-prev"),p=e.querySelector(".vd-flow-next");if(u){let v=()=>f();u.addEventListener("click",v),c.push(()=>u.removeEventListener("click",v))}if(p){let v=()=>h();p.addEventListener("click",v),c.push(()=>p.removeEventListener("click",v))}e.querySelectorAll(".vd-flow-indicator").forEach((v,q)=>{v.setAttribute("role","tab"),v.setAttribute("aria-selected",q===0?"true":"false"),v.setAttribute("aria-label","Go to slide "+(q+1));let I=()=>d(q);v.addEventListener("click",I),c.push(()=>v.removeEventListener("click",I))});let w=v=>{v.key==="ArrowLeft"&&(f(),v.preventDefault()),v.key==="ArrowRight"&&(h(),v.preventDefault())};e.setAttribute("tabindex","0"),e.addEventListener("keydown",w),c.push(()=>e.removeEventListener("keydown",w));let T=v=>{r.isDragging=!0,r.startX=v.clientX||v.touches&&v.touches[0].clientX||0,r.currentX=r.startX,e.classList.add("is-dragging")},b=v=>{r.isDragging&&(r.currentX=v.clientX||v.touches&&v.touches[0].clientX||0)},L=()=>{if(!r.isDragging)return;r.isDragging=!1,e.classList.remove("is-dragging");let v=r.startX-r.currentX;Math.abs(v)>r.threshold&&(v>0?h():f())};e.addEventListener("mousedown",T),e.addEventListener("mousemove",b),e.addEventListener("mouseup",L),e.addEventListener("mouseleave",L),e.addEventListener("touchstart",T,{passive:!0}),e.addEventListener("touchmove",b,{passive:!0}),e.addEventListener("touchend",L),c.push(()=>e.removeEventListener("mousedown",T),()=>e.removeEventListener("mousemove",b),()=>e.removeEventListener("mouseup",L),()=>e.removeEventListener("mouseleave",L),()=>e.removeEventListener("touchstart",T),()=>e.removeEventListener("touchmove",b),()=>e.removeEventListener("touchend",L));let V=()=>{k(),r.autoplayTimer=setInterval(h,o)},k=()=>{r.autoplayTimer&&(clearInterval(r.autoplayTimer),r.autoplayTimer=null)};if(i){V();let v=()=>k(),q=()=>V();e.addEventListener("mouseenter",v),e.addEventListener("mouseleave",q),e.addEventListener("focusin",v),e.addEventListener("focusout",q),c.push(()=>e.removeEventListener("mouseenter",v),()=>e.removeEventListener("mouseleave",q),()=>e.removeEventListener("focusin",v),()=>e.removeEventListener("focusout",q),()=>k())}d(0,!1),this.instances.set(e,{cleanup:c,goTo:d,next:h,prev:f,getState:()=>({...r})})},goTo:function(e,t){let n=this.instances.get(e);n&&n.goTo(t)},next:function(e){let t=this.instances.get(e);t&&t.next()},prev:function(e){let t=this.instances.get(e);t&&t.prev()},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("flow",m),window.VanduoFlow=m})();(function(){"use strict";let m={instances:new Map,_globalCleanups:[],init:function(e){if(window.Vanduo.queryAll(e,"[data-vd-bubble], [data-vd-popover]").forEach(n=>{this.instances.has(n)||this.initInstance(n)}),this._globalCleanups.length===0){let n=i=>{this.instances.forEach((o,a)=>{!o.popover.contains(i.target)&&!a.contains(i.target)&&this.hide(a)})},s=i=>{i.key==="Escape"&&this.instances.forEach((o,a)=>this.hide(a))};document.addEventListener("click",n,!0),document.addEventListener("keydown",s),this._globalCleanups.push(()=>document.removeEventListener("click",n,!0),()=>document.removeEventListener("keydown",s))}},initInstance:function(e){let t=[],n=e.getAttribute("data-vd-bubble-placement")||e.getAttribute("data-vd-popover-placement")||"bottom",s=document.createElement("div");s.className="vd-bubble-content",s.setAttribute("role","dialog"),s.setAttribute("aria-modal","false"),s.setAttribute("data-placement",n);let i=e.getAttribute("data-vd-bubble-title")||e.getAttribute("data-vd-popover-title"),o=e.getAttribute("data-vd-bubble")||e.getAttribute("data-vd-popover")||"",a=e.getAttribute("data-vd-bubble-html")||e.getAttribute("data-vd-popover-html"),r=e.hasAttribute("data-vd-bubble-allow-svg")||e.hasAttribute("data-vd-popover-allow-svg");if(i){let h=document.createElement("div");h.className="vd-bubble-header";let f=document.createElement("span");f.textContent=i;let u=document.createElement("button");u.className="vd-bubble-close",u.setAttribute("aria-label","Close"),u.innerHTML="×",h.appendChild(f),h.appendChild(u),s.appendChild(h);let p=g=>{g.stopPropagation(),this.hide(e)};u.addEventListener("click",p),t.push(()=>u.removeEventListener("click",p))}let c=document.createElement("div");c.className="vd-bubble-body",a?typeof sanitizeHtml=="function"?c.innerHTML=sanitizeHtml(a,{allowSvg:r,allowStyle:!1}):c.textContent=a:c.textContent=o,s.appendChild(c),document.body.appendChild(s);let l="vd-bubble-"+Math.random().toString(36).slice(2,9);s.id=l,e.setAttribute("aria-haspopup","dialog"),e.setAttribute("aria-expanded","false"),e.setAttribute("aria-controls",l);let d=h=>{h.stopPropagation(),s.classList.contains("is-visible")?this.hide(e):(this.hideAll(),this.show(e))};e.addEventListener("click",d),t.push(()=>e.removeEventListener("click",d)),this.instances.set(e,{popover:s,cleanup:t,placement:n})},position:function(e,t,n){let s=e.getBoundingClientRect(),i=t.getBoundingClientRect(),o=10,a,r;switch(n){case"top":a=s.top-i.height-o+window.scrollY,r=s.left+(s.width-i.width)/2+window.scrollX;break;case"left":a=s.top+(s.height-i.height)/2+window.scrollY,r=s.left-i.width-o+window.scrollX;break;case"right":a=s.top+(s.height-i.height)/2+window.scrollY,r=s.right+o+window.scrollX;break;default:a=s.bottom+o+window.scrollY,r=s.left+(s.width-i.width)/2+window.scrollX}r=Math.max(8,Math.min(r,window.innerWidth-i.width-8)),a=Math.max(8,a),t.style.top=a+"px",t.style.left=r+"px"},show:function(e){let t=this.instances.get(e);if(!t)return;let{popover:n,placement:s}=t;n.style.display="block",n.classList.add("is-visible"),e.setAttribute("aria-expanded","true"),requestAnimationFrame(()=>{this.position(e,n,s)}),e.dispatchEvent(new CustomEvent("bubble:show",{bubbles:!0,detail:{trigger:e,placement:s}}))},hide:function(e){let t=this.instances.get(e);t&&(t.popover.classList.remove("is-visible"),e.setAttribute("aria-expanded","false"),e.dispatchEvent(new CustomEvent("bubble:hide",{bubbles:!0,detail:{trigger:e}})))},hideAll:function(){this.instances.forEach((e,t)=>this.hide(t))},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),t.popover.parentNode&&t.popover.parentNode.removeChild(t.popover),e.removeAttribute("aria-haspopup"),e.removeAttribute("aria-expanded"),e.removeAttribute("aria-controls"),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t)),this._globalCleanups.forEach(e=>e()),this._globalCleanups=[]}};typeof window.Vanduo<"u"&&window.Vanduo.register("bubble",m),window.VanduoBubble=m})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,"[data-vd-waypoint-nav], [data-vd-scrollspy-nav]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=Array.from(e.querySelectorAll('a[href^="#"]'));if(t.length===0)return;let n=[],s=parseInt(e.getAttribute("data-vd-waypoint-offset")||"80",10),i=[];if(t.forEach(l=>{let d=l.getAttribute("href").slice(1),h=document.getElementById(d);h&&(h.setAttribute("data-vd-waypoint-section",""),i.push({id:d,link:l,section:h}))}),i.length===0)return;let o=new Set,a=l=>{t.forEach(h=>h.classList.remove("is-active"));let d=t.find(h=>h.getAttribute("href")==="#"+l);d&&(d.classList.add("is-active"),e.dispatchEvent(new CustomEvent("waypoint:change",{detail:{activeId:l,link:d}})))},r="-"+s+"px 0px -40% 0px",c=new IntersectionObserver(l=>{l.forEach(d=>{d.isIntersecting?o.add(d.target.id):o.delete(d.target.id)});for(let d=0;d<i.length;d++)if(o.has(i[d].id)){a(i[d].id);return}},{rootMargin:r,threshold:0});i.forEach(l=>c.observe(l.section)),t.forEach(l=>{let d=h=>{h.preventDefault();let f=l.getAttribute("href").slice(1),u=document.getElementById(f);u&&(u.scrollIntoView({behavior:"smooth"}),a(f))};l.addEventListener("click",d),n.push(()=>l.removeEventListener("click",d))}),n.push(()=>c.disconnect()),this.instances.set(e,{observer:c,cleanup:n,sections:i,setActive:a})},refresh:function(e){this.destroy(e),this.initInstance(e)},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("waypoint",m),window.VanduoWaypoint=m})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-ripple, [data-vd-ripple]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[],n=s=>{let i=e.getBoundingClientRect(),o=Math.max(i.width,i.height),a=(s.clientX||s.touches&&s.touches[0].clientX||i.left+i.width/2)-i.left-o/2,r=(s.clientY||s.touches&&s.touches[0].clientY||i.top+i.height/2)-i.top-o/2,c=document.createElement("span");c.className="vd-ripple-wave",c.style.width=o+"px",c.style.height=o+"px",c.style.left=a+"px",c.style.top=r+"px",e.appendChild(c),c.addEventListener("animationend",()=>{c.parentNode&&c.parentNode.removeChild(c)})};e.addEventListener("mousedown",n),e.addEventListener("touchstart",n,{passive:!0}),t.push(()=>e.removeEventListener("mousedown",n),()=>e.removeEventListener("touchstart",n)),this.instances.set(e,{cleanup:t})},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),e.querySelectorAll(".vd-ripple-wave").forEach(n=>n.remove()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("ripple",m),window.VanduoRipple=m})();(function(){"use strict";function m(n){if(!n||n===document.body)return!1;let s=window.getComputedStyle(n),i=s.overflowY,o=s.overflowX,a=/(auto|scroll|overlay)/.test(i)&&n.scrollHeight>n.clientHeight,r=/(auto|scroll|overlay)/.test(o)&&n.scrollWidth>n.clientWidth;return a||r}function e(n){let s=n.parentElement;for(;s&&s!==document.body&&s!==document.documentElement;){if(m(s))return s;s=s.parentElement}return null}let t={instances:new Map,init:function(n){window.Vanduo.queryAll(n,".vd-affix, .vd-sticky, [data-vd-affix]").forEach(i=>{this.instances.has(i)||this.initInstance(i)})},initInstance:function(n){let s=[],i=parseInt(n.getAttribute("data-vd-affix-offset")||"0",10),o=Number.isNaN(i)?0:i,a=e(n),r=!1,c=document.createElement("div");c.style.cssText="display:block;height:1px;margin-bottom:-1px;visibility:hidden;pointer-events:none;",n.parentNode.insertBefore(c,n),n.style.setProperty("--vd-affix-top-offset",o+"px");function l(){r||(r=!0,n.classList.add("is-stuck"),n.dispatchEvent(new CustomEvent("affix:stuck",{bubbles:!0,detail:{offset:o,root:a||window}})))}function d(){r&&(r=!1,n.classList.remove("is-stuck"),n.dispatchEvent(new CustomEvent("affix:unstuck",{bubbles:!0,detail:{offset:o,root:a||window}})))}let h=new IntersectionObserver(function(f){f.forEach(u=>{u.isIntersecting?d():l()})},{root:a,rootMargin:"-"+o+"px 0px 0px 0px",threshold:0});h.observe(c),s.push(()=>h.disconnect(),()=>{c.parentNode&&c.parentNode.removeChild(c)},()=>{n.classList.remove("is-stuck"),n.style.removeProperty("--vd-affix-top-offset")}),this.instances.set(n,{cleanup:s,observer:h,sentinel:c,scrollParent:a})},destroy:function(n){let s=this.instances.get(n);s&&(s.cleanup.forEach(i=>i()),n.classList.remove("is-stuck"),this.instances.delete(n))},destroyAll:function(){this.instances.forEach((n,s)=>this.destroy(s))}};typeof window.Vanduo<"u"&&window.Vanduo.register("affix",t),window.VanduoAffix=t})();(function(){"use strict";function m(t,n){try{let s=new URL(t,window.location.href);return s.origin===window.location.origin?!0:n.includes(s.origin)}catch{return!1}}let e={instances:new Map,init:function(t){window.Vanduo.queryAll(t,"[data-vd-suggest], [data-vd-autocomplete]").forEach(s=>{this.instances.has(s)||this.initInstance(s)})},initInstance:function(t){let n=[],s=parseInt(t.getAttribute("data-vd-suggest-min-chars")||"1",10),i=t.getAttribute("data-vd-suggest-url")||"",a=(t.getAttribute("data-vd-suggest-allowlist")||"").split(",").map(S=>S.trim()).filter(Boolean),r=t.getAttribute("data-vd-suggest")||t.getAttribute("data-vd-autocomplete")||"",c=[];try{c=JSON.parse(r)}catch{c=r.split(",").map(M=>M.trim()).filter(Boolean)}let l=t.closest(".vd-suggest-wrapper, .vd-autocomplete-wrapper");l||(l=document.createElement("div"),l.className="vd-suggest-wrapper",t.parentNode.insertBefore(l,t),l.appendChild(t));let d=document.createElement("ul");d.className="vd-suggest-list",d.setAttribute("role","listbox");let h="vd-suggest-"+Math.random().toString(36).slice(2,9);d.id=h,l.appendChild(d),t.setAttribute("role","combobox"),t.setAttribute("aria-autocomplete","list"),t.setAttribute("aria-expanded","false"),t.setAttribute("aria-controls",h),t.setAttribute("autocomplete","off");let f=-1,u=[],p=null,g=(S,M)=>{if(d.innerHTML="",u=S,f=-1,S.length===0){let P=document.createElement("li");P.className="vd-suggest-empty",P.textContent="No results",d.appendChild(P);return}S.forEach((P,F)=>{let $=document.createElement("li");$.className="vd-suggest-item",$.setAttribute("role","option"),$.id=h+"-item-"+F;let Z=typeof P=="object"&&(P.label||P.text)||String(P);if(M){let Q=Z.toLowerCase(),R=M.toLowerCase(),W=0,K=Q.indexOf(R,W);for(;K!==-1;){K>W&&$.appendChild(document.createTextNode(Z.slice(W,K)));let J=document.createElement("span");J.className="vd-suggest-match",J.textContent=Z.slice(K,K+M.length),$.appendChild(J),W=K+M.length,K=Q.indexOf(R,W)}W<Z.length&&$.appendChild(document.createTextNode(Z.slice(W)))}else $.textContent=Z;$.addEventListener("click",()=>b(F)),d.appendChild($)})},w=()=>{d.classList.add("is-open"),t.setAttribute("aria-expanded","true")},T=()=>{d.classList.remove("is-open"),t.setAttribute("aria-expanded","false"),f=-1,t.removeAttribute("aria-activedescendant")},b=S=>{let M=u[S],P=typeof M=="object"&&(M.value||M.label)||String(M);t.value=P,T(),t.dispatchEvent(new CustomEvent("suggest:select",{detail:{value:P,item:M,index:S},bubbles:!0}))},L=S=>{let M=d.querySelectorAll(".vd-suggest-item");M.forEach(P=>P.classList.remove("is-highlighted")),S>=0&&S<M.length&&(f=S,M[S].classList.add("is-highlighted"),t.setAttribute("aria-activedescendant",M[S].id),M[S].scrollIntoView({block:"nearest"}))},V=async S=>{if(S.length<s){T();return}let M;if(i)try{if(!m(i,a))console.warn("[VanduoSuggest] Blocked non-allowlisted URL:",i),M=[];else{let P=i.includes("?")?"&":"?";M=await(await window.fetch(i+P+"q="+encodeURIComponent(S))).json()}}catch{M=[]}else{let P=S.toLowerCase();M=c.filter(F=>(typeof F=="object"&&(F.label||F.text)||String(F)).toLowerCase().includes(P))}g(M,S),M.length>0,w()},k=()=>{clearTimeout(p),p=setTimeout(()=>V(t.value),200)},v=S=>{if(!d.classList.contains("is-open")){S.key==="ArrowDown"&&(V(t.value),S.preventDefault());return}let M=u.length;switch(S.key){case"ArrowDown":S.preventDefault(),L(f<M-1?f+1:0);break;case"ArrowUp":S.preventDefault(),L(f>0?f-1:M-1);break;case"Enter":S.preventDefault(),f>=0&&b(f);break;case"Escape":T();break}},q=()=>{setTimeout(T,200)},I=()=>{t.value.length>=s&&V(t.value)};t.addEventListener("input",k),t.addEventListener("keydown",v),t.addEventListener("blur",q),t.addEventListener("focus",I),n.push(()=>t.removeEventListener("input",k),()=>t.removeEventListener("keydown",v),()=>t.removeEventListener("blur",q),()=>t.removeEventListener("focus",I),()=>clearTimeout(p),()=>{d.parentNode&&d.parentNode.removeChild(d)}),this.instances.set(t,{cleanup:n,list:d,close:T})},destroy:function(t){let n=this.instances.get(t);n&&(n.cleanup.forEach(s=>s()),this.instances.delete(t))},destroyAll:function(){this.instances.forEach((t,n)=>this.destroy(n))}};typeof window.Vanduo<"u"&&window.Vanduo.register("suggest",e),window.VanduoSuggest=e})();(function(){"use strict";let m={instances:new Map,rules:{required:e=>e.trim().length>0,email:e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e),url:e=>{try{return new URL(e),!0}catch{return!1}},number:e=>!isNaN(parseFloat(e))&&isFinite(e),min:(e,t)=>e.length>=parseInt(t,10),max:(e,t)=>e.length<=parseInt(t,10),minVal:(e,t)=>parseFloat(e)>=parseFloat(t),maxVal:(e,t)=>parseFloat(e)<=parseFloat(t),pattern:(e,t)=>{try{return t.length>100?!1:new RegExp(t).test(e)}catch{return!1}},match:(e,t)=>{try{let n=typeof CSS<"u"&&CSS.escape?CSS.escape(t):t,s=document.querySelector('[name="'+n+'"]');return s?e===s.value:!1}catch{return!1}}},messages:{required:"This field is required",email:"Please enter a valid email address",url:"Please enter a valid URL",number:"Please enter a valid number",min:"Minimum {0} characters required",max:"Maximum {0} characters allowed",minVal:"Value must be at least {0}",maxVal:"Value must be at most {0}",pattern:"Invalid format",match:"Fields do not match"},init:function(e){window.Vanduo.queryAll(e,"[data-vd-validate], .vd-validate").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[],n=e.getAttribute("data-vd-validate-mode")||"blur",s=e.querySelectorAll("[data-vd-rules]"),i=r=>{let l=(r.getAttribute("data-vd-rules")||"").split("|").map(f=>f.trim()).filter(Boolean),d=r.value,h=[];for(let f of l){let[u,...p]=f.split(":"),g=p.join(":"),w=this.rules[u];if(w&&!w(d,g)){let b=r.getAttribute("data-vd-msg-"+u)||this.messages[u]||"Invalid";g&&(b=b.replace("{0}",g)),h.push(b);break}}return this.setFieldState(r,h),h.length===0},o=()=>{let r=!0;return s.forEach(c=>{i(c)||(r=!1)}),r};s.forEach(r=>{if(n==="input"||n==="blur"){let c=n==="input"?"input":"blur",l=()=>i(r);if(r.addEventListener(c,l),t.push(()=>r.removeEventListener(c,l)),n==="blur"){let d=()=>{(r.classList.contains("is-invalid")||r.classList.contains("is-valid"))&&i(r)};r.addEventListener("input",d),t.push(()=>r.removeEventListener("input",d))}}});let a=r=>{let c=o();if(!c){r.preventDefault(),r.stopPropagation();let l=e.querySelector(".is-invalid");l&&l.focus()}e.dispatchEvent(new CustomEvent("validate:submit",{detail:{valid:c},bubbles:!0}))};e.addEventListener("submit",a),t.push(()=>e.removeEventListener("submit",a)),this.instances.set(e,{cleanup:t,validateAll:o,validateField:i})},setFieldState:function(e,t){let n=e.closest(".vd-form-group")||e.parentElement,s=n.querySelector(".vd-validate-error");e.classList.remove("is-valid","is-invalid"),t.length>0?(e.classList.add("is-invalid"),e.setAttribute("aria-invalid","true"),s||(s=document.createElement("div"),s.className="vd-validate-error",s.id="vd-err-"+Math.random().toString(36).slice(2,9),s.setAttribute("role","alert"),n.appendChild(s)),s.textContent=t[0],s.style.display="",e.setAttribute("aria-describedby",s.id)):e.value.trim()?(e.classList.add("is-valid"),e.removeAttribute("aria-invalid"),s&&(s.style.display="none")):(e.removeAttribute("aria-invalid"),s&&(s.style.display="none"))},validateForm:function(e){let t=this.instances.get(e);return t?t.validateAll():!1},addRule:function(e,t,n){this.rules[e]=t,n&&(this.messages[e]=n)},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("validate",m),window.VanduoValidate=m})();(function(){"use strict";let m=["Su","Mo","Tu","We","Th","Fr","Sa"],e=["January","February","March","April","May","June","July","August","September","October","November","December"];function t(u){return u.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function n(u){let p="^",g=[],w=0;for(;w<u.length;){let T=u.slice(w);T.toLowerCase().startsWith("yyyy")?(p+="(\\d{4})",g.push("y"),w+=4):T.toLowerCase().startsWith("mm")?(p+="(\\d{2})",g.push("m"),w+=2):T.toLowerCase().startsWith("dd")?(p+="(\\d{2})",g.push("d"),w+=2):(p+=t(u[w]),w++)}return p+="$",{regex:new RegExp(p),order:g}}function s(u,p){if(!u||!p)return null;let{regex:g,order:w}=n(p),T=u.trim().match(g);if(!T)return null;let b,L,V,k=1;for(let q=0;q<w.length;q++){let I=w[q],S=parseInt(T[k++],10);if(Number.isNaN(S))return null;I==="y"?b=S:I==="m"?L=S-1:I==="d"&&(V=S)}if(b===void 0||L===void 0||V===void 0)return null;let v=new Date(b,L,V);return v.getFullYear()!==b||v.getMonth()!==L||v.getDate()!==V?null:v}function i(u,p){let g=String(u.getFullYear()),w=String(u.getMonth()+1).padStart(2,"0"),T=String(u.getDate()).padStart(2,"0"),b="",L=0;for(;L<p.length;){let V=p.slice(L);V.toLowerCase().startsWith("yyyy")?(b+=g,L+=4):V.toLowerCase().startsWith("mm")?(b+=w,L+=2):V.toLowerCase().startsWith("dd")?(b+=T,L+=2):(b+=p[L],L++)}return b}function o(u){return u.getFullYear()+"-"+String(u.getMonth()+1).padStart(2,"0")+"-"+String(u.getDate()).padStart(2,"0")}function a(u,p){let g=new Date(u.getFullYear(),u.getMonth(),u.getDate());return g.setDate(g.getDate()+p),g}function r(u,p){return new Date(u.getFullYear(),u.getMonth()+p,u.getDate())}function c(u){if(!u||typeof u!="string")return null;let p=/^(\d{4})-(\d{2})-(\d{2})$/.exec(u.trim());if(!p)return null;let g=+p[1],w=+p[2]-1,T=+p[3],b=new Date(g,w,T);return b.getFullYear()!==g||b.getMonth()!==w||b.getDate()!==T?null:b}function l(u){let p=new Date(u.getFullYear(),u.getMonth(),u.getDate()),g=p.getDay();return p.setDate(p.getDate()-g),p}function d(u){let p=new Date(u.getFullYear(),u.getMonth(),u.getDate()),g=p.getDay();return p.setDate(p.getDate()+(6-g)),p}function h(u,p,g){let T=g??4,b=u.getBoundingClientRect();p.style.minWidth=Math.max(b.width,0)+"px";let L=b.bottom+T,V=b.left;p.style.top=L+"px",p.style.left=V+"px";let k=p.getBoundingClientRect();k.bottom>window.innerHeight-8&&b.top-k.height>8&&(L=b.top-k.height-T,p.style.top=L+"px");let v=p.getBoundingClientRect();V=b.left,V+v.width>window.innerWidth-8&&(V=window.innerWidth-v.width-8),p.style.left=Math.max(8,V)+"px"}let f={instances:new Map,init:function(u){window.Vanduo.queryAll(u,"[data-vd-datepicker]").forEach(g=>{this.instances.has(g)||this.initInstance(g)})},initInstance:function(u){let p=[],g=u.getAttribute("data-vd-datepicker-format")||"YYYY-MM-DD",w=u.getAttribute("data-vd-datepicker-min"),T=u.getAttribute("data-vd-datepicker-max"),b=w?c(w):null,L=T?c(T):null,V=new Date,k=V.getFullYear(),v=V.getMonth(),q=null,I="days",S=null,M=!1,P=0,F=A=>!!(b&&new Date(A.getFullYear(),A.getMonth(),A.getDate()).getTime()<b.getTime()||L&&new Date(A.getFullYear(),A.getMonth(),A.getDate()).getTime()>L.getTime()),$=(A,D)=>{if(!b&&!L)return{y:A,m:D};let E=new Date(A,D,1),C=new Date(A,D+1,0);return b&&C.getTime()<b.getTime()?{y:b.getFullYear(),m:b.getMonth()}:L&&E.getTime()>L.getTime()?{y:L.getFullYear(),m:L.getMonth()}:{y:A,m:D}},Z=(A,D)=>{let E=new Date(A,D+1,0).getDate();for(let C=1;C<=E;C++){let H=new Date(A,D,C);if(!F(H))return H}return new Date(A,D,1)};if(u.value){let A=u.value.trim(),D=s(A,g);if(!D){let E=new Date(A);isNaN(E.getTime())||(D=E)}D&&(q=D,k=D.getFullYear(),v=D.getMonth())}let Q=$(k,v);k=Q.y,v=Q.m;let R=document.createElement("div");R.className="vd-datepicker-popup",R.setAttribute("role","dialog"),R.setAttribute("aria-label","Choose date"),R.tabIndex=-1;let W=document.createElement("div");W.className="vd-suggest-wrapper",W.style.position="relative",W.style.display="inline-block",u.parentNode.insertBefore(W,u),W.appendChild(u),document.body.appendChild(R);let K=(A,D)=>A&&D&&A.getFullYear()===D.getFullYear()&&A.getMonth()===D.getMonth()&&A.getDate()===D.getDate(),J=A=>{q=A,k=A.getFullYear(),v=A.getMonth(),u.value=i(A,g),M=!0,y(),u.dispatchEvent(new CustomEvent("datepicker:select",{detail:{date:A,formatted:u.value},bubbles:!0})),u.dispatchEvent(new Event("change",{bubbles:!0})),u.focus()},ce=()=>{if(I!=="days"||!S)return;let A=o(S),D=R.querySelector('[data-vd-date="'+A+'"]');D&&!D.classList.contains("is-outside")&&D.getAttribute("aria-disabled")!=="true"&&D.focus()},ne=(A,D,E)=>{let C=new Date(A.getFullYear(),A.getMonth(),A.getDate()),H=D>0?1:-1;for(let B=0;B<E;B++){if(!F(C))return C;C=a(C,H)}return A},ee=(A,D,E)=>{let C=document.createElement("button");if(C.type="button",C.className="vd-datepicker-day",C.textContent=A,C.setAttribute("role","gridcell"),D)return C.classList.add("is-outside"),C.tabIndex=-1,C.setAttribute("aria-disabled","true"),C;if(C.setAttribute("data-vd-date",o(E)),E&&K(E,V)&&C.classList.add("is-today"),E&&K(E,q)&&C.classList.add("is-selected"),E&&F(E))return C.classList.add("is-disabled"),C.setAttribute("aria-disabled","true"),C.tabIndex=-1,C;if(E){let H=S&&K(E,S);C.tabIndex=H?0:-1,C.addEventListener("click",()=>{q=E,k=E.getFullYear(),v=E.getMonth(),S=new Date(E.getFullYear(),E.getMonth(),E.getDate()),u.value=i(E,g),M=!0,y(),u.dispatchEvent(new CustomEvent("datepicker:select",{detail:{date:E,formatted:u.value},bubbles:!0})),u.dispatchEvent(new Event("change",{bubbles:!0})),u.focus()})}return C},G=()=>{R.innerHTML="";let A=document.createElement("div");A.className="vd-datepicker-header";let D=document.createElement("button");D.type="button",D.className="vd-datepicker-prev",D.innerHTML="‹",D.setAttribute("aria-label","Previous");let E=document.createElement("button");E.type="button",E.className="vd-datepicker-next",E.innerHTML="›",E.setAttribute("aria-label","Next");let C=document.createElement("span");if(C.className="vd-datepicker-title",I==="days")C.textContent=e[v]+" "+k,C.addEventListener("click",()=>{I="months",G()}),D.addEventListener("click",()=>{v--,v<0&&(v=11,k--),G()}),E.addEventListener("click",()=>{v++,v>11&&(v=0,k++),G()});else if(I==="months")C.textContent=String(k),C.addEventListener("click",()=>{I="years",G()}),D.addEventListener("click",()=>{k--,G()}),E.addEventListener("click",()=>{k++,G()});else{let H=Math.floor(k/10)*10;C.textContent=H+" - "+(H+9),D.addEventListener("click",()=>{k-=10,G()}),E.addEventListener("click",()=>{k+=10,G()})}if(A.appendChild(D),A.appendChild(C),A.appendChild(E),R.appendChild(A),I==="days"){let H=document.createElement("div");H.className="vd-datepicker-grid",H.setAttribute("role","grid"),H.setAttribute("aria-label","Calendar");let B=document.createElement("div");B.className="vd-datepicker-weekdays",B.setAttribute("role","row"),m.forEach(function(Y){let X=document.createElement("span");X.setAttribute("role","columnheader"),X.setAttribute("aria-label",Y),X.textContent=Y,B.appendChild(X)}),H.appendChild(B);let j=new Date(k,v,1).getDay(),U=new Date(k,v+1,0).getDate(),pe=new Date(k,v,0).getDate(),oe=[];for(let Y=j-1;Y>=0;Y--){let X=pe-Y,ae=v===0?11:v-1,re=v===0?k-1:k,ge=new Date(re,ae,X);oe.push({day:X,outside:!0,date:ge})}for(let Y=1;Y<=U;Y++){let X=new Date(k,v,Y);oe.push({day:Y,outside:!1,date:X})}let he=j+U,me=he%7===0?0:7-he%7;for(let Y=1;Y<=me;Y++){let X=new Date(k,v+1,Y);oe.push({day:Y,outside:!0,date:X})}for(let Y=0;Y<oe.length;Y+=7){let X=document.createElement("div");X.className="vd-datepicker-row",X.setAttribute("role","row");for(let ae=0;ae<7;ae++){let re=oe[Y+ae];X.appendChild(ee(re.day,re.outside,re.date))}H.appendChild(X)}R.appendChild(H)}else if(I==="months"){let H=document.createElement("div");H.className="vd-datepicker-months",e.forEach((B,j)=>{let U=document.createElement("button");U.type="button",U.className="vd-datepicker-month-btn",U.textContent=B.slice(0,3),q&&q.getFullYear()===k&&q.getMonth()===j&&U.classList.add("is-selected"),U.addEventListener("click",()=>{v=j,I="days",G()}),H.appendChild(U)}),R.appendChild(H)}else{let H=document.createElement("div");H.className="vd-datepicker-years";let B=Math.floor(k/10)*10;for(let j=B-1;j<=B+10;j++){let U=document.createElement("button");U.type="button",U.className="vd-datepicker-year-btn",U.textContent=j,q&&q.getFullYear()===j&&U.classList.add("is-selected"),(j<B||j>B+9)&&(U.style.opacity="0.4"),U.addEventListener("click",()=>{k=j,I="months",G()}),H.appendChild(U)}R.appendChild(H)}R.classList.contains("is-open")&&requestAnimationFrame(ie)},le=A=>{if(!R.classList.contains("is-open")||I!=="days")return;let D=R.querySelector(".vd-datepicker-grid");if(!D||!D.contains(A.target))return;let E=A.key;if(E!=="ArrowLeft"&&E!=="ArrowRight"&&E!=="ArrowUp"&&E!=="ArrowDown"&&E!=="Home"&&E!=="End"&&E!=="PageUp"&&E!=="PageDown"&&E!=="Enter"&&E!==" "&&E!=="Escape")return;if(E==="Escape"){A.preventDefault(),A.stopPropagation(),M=!0,y(),u.focus();return}if(S||(S=Z(k,v)),E==="Enter"||E===" "){A.preventDefault(),S&&!F(S)&&J(new Date(S.getFullYear(),S.getMonth(),S.getDate()));return}A.preventDefault();let C=new Date(S.getFullYear(),S.getMonth(),S.getDate()),H=1;if(E==="ArrowLeft"?(C=a(C,-1),H=-1):E==="ArrowRight"?(C=a(C,1),H=1):E==="ArrowUp"?(C=a(C,-7),H=-1):E==="ArrowDown"?(C=a(C,7),H=1):E==="Home"?(C=l(C),H=1):E==="End"?(C=d(C),H=-1):E==="PageUp"?(C=r(C,-1),H=-1):E==="PageDown"&&(C=r(C,1),H=1),C=ne(C,H,400),C.getMonth()!==v||C.getFullYear()!==k){k=C.getFullYear(),v=C.getMonth();let B=$(k,v);k=B.y,v=B.m}S=C,G(),requestAnimationFrame(ce)},ie=()=>{R.classList.contains("is-open")&&h(u,R)},se=()=>{ie()},de=()=>{P=Date.now()+100},te=()=>{de(),I="days",q&&(k=q.getFullYear(),v=q.getMonth());let A=$(k,v);k=A.y,v=A.m,q?S=new Date(q.getFullYear(),q.getMonth(),q.getDate()):S=Z(k,v),G(),R.classList.add("is-open"),u.setAttribute("aria-expanded","true"),requestAnimationFrame(()=>{ie(),ce()})},y=()=>{R.classList.remove("is-open"),u.setAttribute("aria-expanded","false"),I="days"},x=()=>{if(M){M=!1;return}te()},_=()=>{R.classList.contains("is-open")||te()},N=A=>{if(!A||!(A instanceof Node))return!1;if(A===u||u.contains(A)||R.contains(A))return!0;let D=u.id;if(D){let E=document.querySelector('label[for="'+D.replace(/"/g,'\\"')+'"]');if(E&&(A===E||E.contains(A)))return!0}return!1},z=A=>{Date.now()<P||N(A.target)||y()},O=A=>{A.key==="Escape"&&R.classList.contains("is-open")&&(M=!0,y(),u.focus())};u.addEventListener("focus",x),u.addEventListener("click",_),document.addEventListener("click",z,!0),document.addEventListener("keydown",O),R.addEventListener("keydown",le),window.addEventListener("resize",se),window.addEventListener("scroll",se,!0),u.setAttribute("aria-haspopup","dialog"),u.setAttribute("aria-expanded","false"),u.setAttribute("autocomplete","off"),p.push(()=>u.removeEventListener("focus",x),()=>u.removeEventListener("click",_),()=>document.removeEventListener("click",z,!0),()=>document.removeEventListener("keydown",O),()=>R.removeEventListener("keydown",le),()=>window.removeEventListener("resize",se),()=>window.removeEventListener("scroll",se,!0),()=>R.remove()),this.instances.set(u,{cleanup:p,open:te,close:y,popup:R})},destroy:function(u){let p=this.instances.get(u);p&&(p.cleanup.forEach(g=>g()),this.instances.delete(u))},destroyAll:function(){this.instances.forEach((u,p)=>this.destroy(p))}};typeof window.Vanduo<"u"&&window.Vanduo.register("datepicker",f),window.VanduoDatepicker=f})();(function(){"use strict";function m(t,n,s){let o=s??4,a=t.getBoundingClientRect();n.style.minWidth=Math.max(a.width,0)+"px";let r=a.bottom+o,c=a.left;n.style.top=r+"px",n.style.left=c+"px";let l=n.getBoundingClientRect();l.bottom>window.innerHeight-8&&a.top-l.height>8&&(r=a.top-l.height-o,n.style.top=r+"px");let d=n.getBoundingClientRect();c=a.left,c+d.width>window.innerWidth-8&&(c=window.innerWidth-d.width-8),n.style.left=Math.max(8,c)+"px"}let e={instances:new Map,init:function(t){window.Vanduo.queryAll(t,"[data-vd-timepicker]").forEach(s=>{this.instances.has(s)||this.initInstance(s)})},initInstance:function(t){let n=[],s=t.getAttribute("data-vd-timepicker-format")==="24h",i=parseInt(t.getAttribute("data-vd-timepicker-step")||"30",10),o=t.closest(".vd-suggest-wrapper");o||(o=document.createElement("div"),o.style.position="relative",o.style.display="inline-block",t.parentNode.insertBefore(o,t),o.appendChild(t));let a=document.createElement("div");a.className="vd-timepicker-popup",a.setAttribute("role","listbox"),document.body.appendChild(a);let r=[];for(let w=0;w<24;w++)for(let T=0;T<60;T+=i){let b=String(w).padStart(2,"0"),L=String(T).padStart(2,"0");if(s)r.push({display:b+":"+L,value:b+":"+L});else{let V=w<12?"AM":"PM",v=(w===0?12:w>12?w-12:w)+":"+L+" "+V;r.push({display:v,value:b+":"+L})}}let c=()=>{a.innerHTML="",r.forEach(w=>{let T=document.createElement("div");T.className="vd-timepicker-item",T.setAttribute("role","option"),T.textContent=w.display,(t.value===w.value||t.value===w.display)&&T.classList.add("is-selected"),T.addEventListener("click",()=>{t.value=w.display,a.querySelectorAll(".vd-timepicker-item").forEach(b=>b.classList.remove("is-selected")),T.classList.add("is-selected"),f(),t.dispatchEvent(new CustomEvent("timepicker:select",{detail:{display:w.display,value:w.value},bubbles:!0})),t.dispatchEvent(new Event("change",{bubbles:!0}))}),a.appendChild(T)})},l=()=>{a.classList.contains("is-open")&&m(t,a)},d=()=>{l()},h=()=>{c(),a.classList.add("is-open"),t.setAttribute("aria-expanded","true"),requestAnimationFrame(()=>{l();let w=a.querySelector(".is-selected");w&&w.scrollIntoView({block:"center"})})},f=()=>{a.classList.remove("is-open"),t.setAttribute("aria-expanded","false")},u=()=>h(),p=w=>{!t.contains(w.target)&&!a.contains(w.target)&&f()},g=w=>{w.key==="Escape"&&f()};t.addEventListener("focus",u),document.addEventListener("click",p,!0),document.addEventListener("keydown",g),window.addEventListener("resize",d),window.addEventListener("scroll",d,!0),t.setAttribute("aria-haspopup","listbox"),t.setAttribute("aria-expanded","false"),t.setAttribute("autocomplete","off"),t.readOnly=!0,n.push(()=>t.removeEventListener("focus",u),()=>document.removeEventListener("click",p,!0),()=>document.removeEventListener("keydown",g),()=>window.removeEventListener("resize",d),()=>window.removeEventListener("scroll",d,!0),()=>a.remove()),this.instances.set(t,{cleanup:n,open:h,close:f})},destroy:function(t){let n=this.instances.get(t);n&&(n.cleanup.forEach(s=>s()),this.instances.delete(t))},destroyAll:function(){this.instances.forEach((t,n)=>this.destroy(n))}};typeof window.Vanduo<"u"&&window.Vanduo.register("timepicker",e),window.VanduoTimepicker=e})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-stepper").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[],n=Array.from(e.querySelectorAll(".vd-stepper-item")),s=e.classList.contains("vd-stepper-clickable"),i=n.findIndex(a=>a.classList.contains("is-active"));i===-1&&(i=0);let o=a=>{if(a<0||a>=n.length)return;let r=i;i=a,n.forEach((c,l)=>{c.classList.remove("is-active","is-completed"),l<a?c.classList.add("is-completed"):l===a&&c.classList.add("is-active")}),e.dispatchEvent(new CustomEvent("stepper:change",{detail:{current:a,previous:r,total:n.length},bubbles:!0}))};s&&n.forEach((a,r)=>{let c=()=>o(r);a.addEventListener("click",c),t.push(()=>a.removeEventListener("click",c))}),o(i),this.instances.set(e,{cleanup:t,setStep:o,next:()=>o(i+1),prev:()=>o(i-1),getCurrent:()=>i})},setStep:function(e,t){let n=this.instances.get(e);n&&n.setStep(t)},next:function(e){let t=this.instances.get(e);t&&t.next()},prev:function(e){let t=this.instances.get(e);t&&t.prev()},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("stepper",m),window.VanduoStepper=m})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,"[data-vd-rating]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[],n=parseInt(e.getAttribute("data-vd-rating-max")||"5",10),s=parseFloat(e.getAttribute("data-vd-rating-value")||"0"),i=e.classList.contains("vd-rating-readonly")||e.hasAttribute("data-vd-rating-readonly"),o=s;e.classList.add("vd-rating"),e.setAttribute("role","radiogroup"),e.setAttribute("aria-label",e.getAttribute("aria-label")||"Rating"),e.innerHTML="";let a=[];for(let l=1;l<=n;l++){let d=document.createElement("button");d.type="button",d.className="vd-rating-star",d.setAttribute("role","radio"),d.setAttribute("aria-label",l+" star"+(l>1?"s":"")),d.setAttribute("aria-checked",l<=o?"true":"false"),i&&(d.tabIndex=-1),a.push(d),e.appendChild(d)}let r=document.createElement("span");r.className="vd-rating-value",r.textContent=o>0?o.toString():"",e.appendChild(r);let c=l=>{a.forEach((d,h)=>{d.classList.remove("is-active","is-half");let f=h+1;f<=Math.floor(l)?d.classList.add("is-active"):f-.5<=l&&d.classList.add("is-half"),d.setAttribute("aria-checked",f<=l?"true":"false")}),r.textContent=l>0?l.toString():""};if(c(o),!i){a.forEach((d,h)=>{let f=()=>{a.forEach((g,w)=>{g.classList.toggle("is-hovered",w<=h)})},u=()=>{a.forEach(g=>g.classList.remove("is-hovered"))},p=()=>{o=h+1,e.setAttribute("data-vd-rating-value",o),c(o),e.dispatchEvent(new CustomEvent("rating:change",{detail:{value:o,max:n},bubbles:!0}))};d.addEventListener("mouseenter",f),d.addEventListener("mouseleave",u),d.addEventListener("click",p),t.push(()=>d.removeEventListener("mouseenter",f),()=>d.removeEventListener("mouseleave",u),()=>d.removeEventListener("click",p))});let l=d=>{d.key==="ArrowRight"||d.key==="ArrowUp"?(d.preventDefault(),o<n&&(o++,c(o),a[o-1].focus(),e.dispatchEvent(new CustomEvent("rating:change",{detail:{value:o,max:n},bubbles:!0})))):(d.key==="ArrowLeft"||d.key==="ArrowDown")&&(d.preventDefault(),o>1&&(o--,c(o),a[o-1].focus(),e.dispatchEvent(new CustomEvent("rating:change",{detail:{value:o,max:n},bubbles:!0}))))};e.addEventListener("keydown",l),t.push(()=>e.removeEventListener("keydown",l))}this.instances.set(e,{cleanup:t,getValue:()=>o,setValue:l=>{o=l,c(l)}})},getValue:function(e){let t=this.instances.get(e);return t?t.getValue():0},setValue:function(e,t){let n=this.instances.get(e);n&&n.setValue(t)},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("rating",m),window.VanduoRating=m})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,"[data-vd-transfer]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[];e.classList.add("vd-transfer");let n,s;try{n=JSON.parse(e.getAttribute("data-vd-transfer")||"[]").map((f,u)=>({id:f.id||"item-"+u,label:f.label||f.text||String(f),selected:!1}))}catch{n=[]}s=[];let i=new Set,o=new Set,a=()=>{e.innerHTML="";let h=r("Source",n,i,"source"),f=document.createElement("div");f.className="vd-transfer-actions";let u=document.createElement("button");u.type="button",u.className="vd-transfer-btn",u.innerHTML="›",u.setAttribute("aria-label","Move to target"),u.disabled=i.size===0,u.addEventListener("click",()=>c());let p=document.createElement("button");p.type="button",p.className="vd-transfer-btn",p.innerHTML="‹",p.setAttribute("aria-label","Move to source"),p.disabled=o.size===0,p.addEventListener("click",()=>l()),f.appendChild(u),f.appendChild(p);let g=r("Target",s,o,"target");e.appendChild(h),e.appendChild(f),e.appendChild(g)},r=(h,f,u,p)=>{let g=document.createElement("div");g.className="vd-transfer-panel";let w=document.createElement("div");w.className="vd-transfer-header";let T=document.createElement("span");T.textContent=h;let b=document.createElement("span");b.className="vd-transfer-count",b.textContent=u.size+"/"+f.length,w.appendChild(T),w.appendChild(b),g.appendChild(w);let L=document.createElement("div");L.className="vd-transfer-search";let V=document.createElement("input");V.type="text",V.placeholder="Search...",V.setAttribute("aria-label","Search "+h.toLowerCase()),L.appendChild(V),g.appendChild(L);let k=document.createElement("ul");k.className="vd-transfer-list",k.setAttribute("role","listbox");let v=q=>{k.innerHTML="",(q?f.filter(S=>(S.label||S.text||String(S)).toLowerCase().includes(q.toLowerCase())):f).forEach(S=>{let M=document.createElement("li");M.className="vd-transfer-item",M.setAttribute("role","option"),u.has(S.id)&&M.classList.add("is-selected");let P=document.createElement("input");P.type="checkbox",P.checked=u.has(S.id),P.setAttribute("aria-label",S.label);let F=document.createElement("span");F.textContent=S.label,M.addEventListener("click",()=>{u.has(S.id)?u.delete(S.id):u.add(S.id),a()}),M.appendChild(P),M.appendChild(F),k.appendChild(M)})};return V.addEventListener("input",()=>v(V.value)),v(""),g.appendChild(k),g},c=()=>{let h=n.filter(f=>i.has(f.id));n=n.filter(f=>!i.has(f.id)),s=s.concat(h),i.clear(),a(),d()},l=()=>{let h=s.filter(f=>o.has(f.id));s=s.filter(f=>!o.has(f.id)),n=n.concat(h),o.clear(),a(),d()},d=()=>{e.dispatchEvent(new CustomEvent("transfer:change",{detail:{source:n.map(h=>h.id),target:s.map(h=>h.id)},bubbles:!0}))};a(),this.instances.set(e,{cleanup:t,getTarget:()=>s.map(h=>h.id),getSource:()=>n.map(h=>h.id)})},getSelected:function(e){let t=this.instances.get(e);return t?t.getTarget():[]},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),e.innerHTML="",this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("transfer",m),window.VanduoTransfer=m})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,"[data-vd-tree]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[],n=e.getAttribute("data-vd-tree-cascade")!=="false",s;try{s=JSON.parse(e.getAttribute("data-vd-tree")||"[]")}catch{s=[]}e.classList.add("vd-tree"),e.setAttribute("role","tree");let i=(r,c)=>{c.innerHTML="",r.forEach(l=>{let d=document.createElement("li");d.className="vd-tree-node",d.setAttribute("role","treeitem"),d.setAttribute("aria-expanded",l.open?"true":"false"),l.open&&d.classList.add("is-open");let h=document.createElement("div");if(h.className="vd-tree-node-content",l.children&&l.children.length>0){let u=document.createElement("button");u.type="button",u.className="vd-tree-toggle",u.setAttribute("aria-label","Toggle"),u.addEventListener("click",p=>{p.stopPropagation(),l.open=!l.open,d.classList.toggle("is-open"),d.setAttribute("aria-expanded",l.open?"true":"false")}),h.appendChild(u)}else{let u=document.createElement("span");u.className="vd-tree-toggle-placeholder",h.appendChild(u)}if(e.hasAttribute("data-vd-tree-checkbox")){let u=document.createElement("input");u.type="checkbox",u.className="vd-tree-checkbox",u.checked=!!l.checked,u.setAttribute("aria-label",l.label),u.addEventListener("change",p=>{p.stopPropagation(),l.checked=u.checked,n&&l.children&&(o(l.children,u.checked),i(s,e)),e.dispatchEvent(new CustomEvent("tree:check",{detail:{id:l.id,checked:u.checked,label:l.label},bubbles:!0}))}),h.appendChild(u)}if(l.icon){let u=document.createElement("span");u.className="vd-tree-icon "+l.icon,h.appendChild(u)}let f=document.createElement("span");if(f.className="vd-tree-label",f.textContent=l.label||"",h.appendChild(f),d.appendChild(h),l.children&&l.children.length>0){let u=document.createElement("ul");u.className="vd-tree-children",u.setAttribute("role","group"),i(l.children,u),d.appendChild(u)}c.appendChild(d)})},o=(r,c)=>{r.forEach(l=>{l.checked=c,l.children&&o(l.children,c)})},a=r=>{let c=document.activeElement;if(!e.contains(c))return;let l=Array.from(e.querySelectorAll(".vd-tree-node-content")),d=l.indexOf(c.closest(".vd-tree-node-content"));if(d!==-1)switch(r.key){case"ArrowDown":if(r.preventDefault(),d<l.length-1){let h=l[d+1].querySelector(".vd-tree-toggle, .vd-tree-label");h&&h.focus()}break;case"ArrowUp":if(r.preventDefault(),d>0){let h=l[d-1].querySelector(".vd-tree-toggle, .vd-tree-label");h&&h.focus()}break}};e.addEventListener("keydown",a),t.push(()=>e.removeEventListener("keydown",a)),i(s,e),this.instances.set(e,{cleanup:t,getData:()=>s,getChecked:()=>{let r=[],c=l=>{l.forEach(d=>{d.checked&&r.push(d.id||d.label),d.children&&c(d.children)})};return c(s),r}})},getChecked:function(e){let t=this.instances.get(e);return t?t.getChecked():[]},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),e.innerHTML="",this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("tree",m),window.VanduoTree=m})();(function(){"use strict";let m={_active:!1,_steps:[],_currentStep:0,_elements:{},_cleanup:[],_boundTriggers:new WeakMap,_triggerElement:null,_currentTarget:null,init:function(e){window.Vanduo.queryAll(e,"[data-vd-spotlight]").forEach(n=>{if(this._boundTriggers.has(n))return;let s=i=>{i.preventDefault();let o=this._parseSteps(n.getAttribute("data-vd-spotlight"));o.length!==0&&this.start(o,{trigger:n})};n.addEventListener("click",s),this._boundTriggers.set(n,s)})},_parseSteps:function(e){if(typeof e!="string"||e.trim()==="")return[];try{let t=JSON.parse(e);return this._normalizeSteps(t)}catch(t){return console.error("VanduoSpotlight: invalid data-vd-spotlight payload.",t),[]}},_normalizeStep:function(e){if(!e||typeof e!="object")return null;let t=e.target,n=typeof t=="string"&&t.trim()!=="",s=typeof Element<"u"&&t instanceof Element;if(!n&&!s)return null;let i=typeof e.title=="string"?e.title:"",o=typeof e.description=="string"?e.description:typeof e.content=="string"?e.content:"";return{target:t,title:i,description:o}},_normalizeSteps:function(e){return Array.isArray(e)?e.map(t=>this._normalizeStep(t)).filter(Boolean):[]},start:function(e,t){this._active&&this.stop();let n=this._normalizeSteps(e);if(n.length===0)return;let s=t||{};this._steps=n,this._currentStep=0,this._active=!0,this._triggerElement=s.trigger||(document.activeElement instanceof HTMLElement?document.activeElement:null);let i=document.createElement("div");i.className="vd-spotlight-overlay",i.setAttribute("aria-hidden","true"),document.body.appendChild(i);let o=document.createElement("div");o.className="vd-spotlight-tooltip",o.setAttribute("role","dialog"),o.setAttribute("aria-modal","true"),o.tabIndex=-1,document.body.appendChild(o),this._elements={overlay:i,tooltip:o};let a=c=>{c.key==="Escape"&&this.stop()};document.addEventListener("keydown",a),this._cleanup.push(()=>document.removeEventListener("keydown",a)),i.addEventListener("click",()=>this.stop());let r=()=>{this._active&&this._currentTarget&&this._positionTooltip(this._currentTarget)};window.addEventListener("scroll",r,{passive:!0}),window.addEventListener("resize",r),this._cleanup.push(()=>window.removeEventListener("scroll",r)),this._cleanup.push(()=>window.removeEventListener("resize",r)),this._showStep(this._currentStep)},_positionTooltip:function(e){let t=this._elements.tooltip;if(!t||!e||!e.isConnected)return;let n=e.getBoundingClientRect(),s=t.getBoundingClientRect(),i=n.bottom+12+window.scrollY,o=n.left+(n.width-s.width)/2+window.scrollX;o=Math.max(8,Math.min(o,window.innerWidth-s.width-8)),i+s.height>window.innerHeight+window.scrollY&&(i=n.top-s.height-12+window.scrollY),t.style.top=i+"px",t.style.left=o+"px"},_showStep:function(e){let t=this._steps[e];if(!t)return;let n=typeof t.target=="string"?document.querySelector(t.target):t.target,{tooltip:s}=this._elements;document.querySelectorAll(".vd-spotlight-target").forEach(l=>{l.classList.remove("vd-spotlight-target")}),n&&(n.classList.add("vd-spotlight-target"),n.scrollIntoView({behavior:"smooth",block:"center"}));let i=this._steps.length;if(s.innerHTML="",s.removeAttribute("aria-labelledby"),s.removeAttribute("aria-describedby"),t.title){let l=document.createElement("h4");l.className="vd-spotlight-title",l.id="vd-spotlight-title-"+e+"-"+Date.now(),l.textContent=t.title,s.appendChild(l),s.setAttribute("aria-labelledby",l.id)}if(t.description){let l=document.createElement("p");l.className="vd-spotlight-description",l.id="vd-spotlight-description-"+e+"-"+Date.now(),l.textContent=t.description,s.appendChild(l),s.setAttribute("aria-describedby",l.id)}let o=document.createElement("div");o.className="vd-spotlight-footer",o.setAttribute("aria-label","Step "+(e+1)+" of "+i);let a=document.createElement("span");a.className="vd-spotlight-counter",a.textContent=e+1+" / "+i;let r=document.createElement("div");if(r.className="vd-spotlight-actions",e>0){let l=document.createElement("button");l.type="button",l.className="vd-spotlight-btn",l.textContent="Back",l.addEventListener("click",()=>this.prev()),r.appendChild(l)}let c=document.createElement("button");if(c.type="button",c.className="vd-spotlight-btn",c.textContent="Skip",c.addEventListener("click",()=>this.stop()),r.appendChild(c),e<i-1){let l=document.createElement("button");l.type="button",l.className="vd-spotlight-btn vd-spotlight-btn-primary",l.textContent="Next",l.addEventListener("click",()=>this.next()),r.appendChild(l)}else{let l=document.createElement("button");l.type="button",l.className="vd-spotlight-btn vd-spotlight-btn-primary",l.textContent="Done",l.addEventListener("click",()=>this.stop()),r.appendChild(l)}if(o.appendChild(a),o.appendChild(r),s.appendChild(o),this._currentTarget=n||null,n){let l=0,d=()=>{!this._active||this._currentTarget!==n||(this._positionTooltip(n),l++<30&&requestAnimationFrame(d))};requestAnimationFrame(d)}document.dispatchEvent(new CustomEvent("spotlight:step",{detail:{index:e,step:e,total:i,data:t}}))},next:function(){this._currentStep<this._steps.length-1&&(this._currentStep++,this._showStep(this._currentStep))},prev:function(){this._currentStep>0&&(this._currentStep--,this._showStep(this._currentStep))},stop:function(){if(!this._active)return;let e=this._steps.length,t={completedSteps:e===0?0:Math.min(this._currentStep+1,e),total:e,completed:e>0&&this._currentStep>=e-1};this._active=!1,document.querySelectorAll(".vd-spotlight-target").forEach(n=>{n.classList.remove("vd-spotlight-target")}),this._elements.overlay&&this._elements.overlay.parentNode&&this._elements.overlay.parentNode.removeChild(this._elements.overlay),this._elements.tooltip&&this._elements.tooltip.parentNode&&this._elements.tooltip.parentNode.removeChild(this._elements.tooltip),this._cleanup.forEach(n=>n()),this._cleanup=[],this._elements={},this._steps=[],this._currentStep=0,this._currentTarget=null,this._triggerElement&&this._triggerElement.isConnected&&typeof this._triggerElement.focus=="function"&&this._triggerElement.focus(),this._triggerElement=null,document.dispatchEvent(new CustomEvent("spotlight:end",{detail:t}))},destroyAll:function(){this.stop()}};typeof window.Vanduo<"u"&&window.Vanduo.register("spotlight",m),window.VanduoSpotlight=m})();var fe=window.Vanduo;var Ae=fe;
|
|
48
|
+
`},isUsingDefaultPrimary:function(){return this.state.primary===this.DEFAULTS.PRIMARY_LIGHT||this.state.primary===this.DEFAULTS.PRIMARY_DARK},_normalizeDefaultPrimaryIfStaleWithStoredTheme:function(){if(!this.isUsingDefaultPrimary())return;let e=this.getDefaultPrimary(this.state.theme);this.state.primary!==e&&(this.state.primary=e)},bindEvents:function(e){if(this.bindTriggerEvents(e),this.bindPanelEvents(),window.matchMedia){let t=window.matchMedia("(prefers-color-scheme: dark)"),n=()=>{if(this.state.theme==="system"&&this.isUsingDefaultPrimary()){let s=this.getDefaultPrimary("system");s!==this.state.primary&&(this.applyPrimary(s),this.updateUI())}};t.addEventListener("change",n),this._cleanup.push(()=>t.removeEventListener("change",n))}this.addListener(document,"click",t=>{this.state.isOpen&&this.elements.customizer&&!this.elements.customizer.contains(t.target)&&this.close()}),this.addListener(document,"keydown",t=>{t.key==="Escape"&&this.state.isOpen&&this.close()})},bindTriggerEvents:function(e){(e?this.getTriggers(e):this.elements.triggers).forEach(n=>{if(n.getAttribute("data-customizer-trigger-initialized")==="true")return;let s=r=>{r.preventDefault(),r.stopPropagation(),this.elements.activeTrigger=n,this.elements.trigger=n,this.toggle()};n.addEventListener("click",s),n._themeCustomizerTriggerHandler=s,n.setAttribute("data-customizer-trigger-initialized","true")})},cleanupTrigger:function(e){!e||e.getAttribute("data-customizer-trigger-initialized")!=="true"||(e._themeCustomizerTriggerHandler&&(e.removeEventListener("click",e._themeCustomizerTriggerHandler),delete e._themeCustomizerTriggerHandler),e.setAttribute("aria-expanded","false"),e.removeAttribute("data-customizer-trigger-initialized"),this.elements.activeTrigger===e&&(this.elements.activeTrigger=null),this.elements.triggers=this.elements.triggers.filter(function(t){return t!==e}),this.elements.trigger===e&&(this.elements.trigger=this.elements.triggers[0]||null))},toggle:function(){this.state.isOpen?this.close():this.open()},open:function(){this.state.isOpen=!0,this.positionPanel(),this.elements.panel&&this.elements.panel.classList.add("is-open"),this.elements.triggers.forEach(e=>e.setAttribute("aria-expanded","false")),this.elements.trigger&&this.elements.trigger.setAttribute("aria-expanded","true"),this.elements.overlay&&this.elements.overlay.classList.add("is-active"),this.dispatchEvent("panel-open",{isOpen:!0})},close:function(){this.state.isOpen=!1,this.elements.panel&&this.elements.panel.classList.remove("is-open"),this.elements.triggers.forEach(e=>e.setAttribute("aria-expanded","false")),this.elements.overlay&&this.elements.overlay.classList.remove("is-active"),this.dispatchEvent("panel-close",{isOpen:!1})},updateUI:function(){if(!this.elements.panel)return;this.elements.panel.querySelectorAll("[data-palette]").forEach(t=>{t.classList.toggle("is-active",t.dataset.palette===this.state.palette)}),this.elements.panel.querySelectorAll("[data-color]").forEach(t=>{t.classList.toggle("is-active",t.dataset.color===this.state.primary)}),this.elements.panel.querySelectorAll("[data-neutral]").forEach(t=>{t.classList.toggle("is-active",t.dataset.neutral===this.state.neutral)}),this.elements.panel.querySelectorAll("[data-radius]").forEach(t=>{t.classList.toggle("is-active",t.dataset.radius===this.state.radius)});let e=this.elements.panel.querySelector("[data-customizer-font]");e&&(e.value=this.state.font)},reset:function(){this.applyPalette(this.DEFAULTS.PALETTE),this.applyTheme(this.DEFAULTS.THEME),this.applyPrimary(this.getDefaultPrimary(this.DEFAULTS.THEME)),this.applyNeutral(this.DEFAULTS.NEUTRAL),this.applyRadius(this.DEFAULTS.RADIUS),this.applyFont(this.DEFAULTS.FONT),this.updateUI(),this.dispatchEvent("reset",{state:{...this.state}})},getState:function(){return{...this.state}},setPreferences:function(e){e.palette&&this.applyPalette(e.palette),e.primary&&this.applyPrimary(e.primary),e.neutral&&this.applyNeutral(e.neutral),e.radius&&this.applyRadius(e.radius),e.font&&this.applyFont(e.font),e.theme&&this.applyTheme(e.theme),this.updateUI()},getStorageValue:function(e,t){if(typeof window.safeStorageGet=="function")return window.safeStorageGet(e,t);try{let n=localStorage.getItem(e);return n!==null?n:t}catch{return t}},setStorageValue:function(e,t){if(typeof window.safeStorageSet=="function")return window.safeStorageSet(e,t);try{return localStorage.setItem(e,t),!0}catch{return!1}},destroyAll:function(e){let t=this.normalizeRoot(e);if(t!==document){this.getTriggers(t).forEach(n=>{this.cleanupTrigger(n)}),this.pruneTriggers(),this.elements.triggers.length||this.destroyAll(document);return}this._cleanup.forEach(n=>n()),this._cleanup=[],this.elements.panel&&this.elements.panel.removeAttribute("data-customizer-initialized"),this.elements.triggers.slice().forEach(n=>{this.cleanupTrigger(n)}),this._ownsDynamicPanel&&(this.elements.panel&&this.elements.panel.parentNode&&this.elements.panel.parentNode.removeChild(this.elements.panel),this.elements.overlay&&this.elements.overlay.parentNode&&this.elements.overlay.parentNode.removeChild(this.elements.overlay),this._ownsDynamicPanel=!1),this.close(),this.elements.customizer=null,this.elements.trigger=null,this.elements.activeTrigger=null,this.elements.triggers=[],this.elements.panel=null,this.elements.overlay=null,this.isInitialized=!1}};window.Vanduo&&window.Vanduo.register("themeCustomizer",m),window.ThemeCustomizer=m})();(function(){"use strict";let m=["system","light","dark"],e={system:"ph ph-desktop",light:"ph ph-sun",dark:"ph ph-moon"},t={system:"Theme: System",light:"Theme: Light",dark:"Theme: Dark"},n={system:"Use system preference",light:"Light theme",dark:"Dark theme"},s={isInitialized:!1,_mediaQuery:null,_onMediaChange:null,menuInstances:new Map,getToggles:function(r){let a=r||document;return(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(a,'[data-toggle="theme"]'):Array.from(a.querySelectorAll('[data-toggle="theme"]'))).filter(function(o){return!o.closest('.vd-theme-switcher[data-theme-ui="menu"]')})},getMenuSwitchers:function(r){let a=r||document;return window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(a,'.vd-theme-switcher[data-theme-ui="menu"]'):Array.from(a.querySelectorAll('.vd-theme-switcher[data-theme-ui="menu"]'))},init:function(r){if(this.STORAGE_KEY="vanduo-theme-preference",this.state={preference:this.getPreference()},this.isInitialized){this.applyTheme(),this.renderUI(r),this.updateUI(r);return}this.isInitialized=!0,this.applyTheme(),this.listenForSystemChanges(),this.renderUI(r)},getPreference:function(){return this.getStorageValue(this.STORAGE_KEY,"system")},setPreference:function(r){m.includes(r)&&(this.state.preference=r,this.setStorageValue(this.STORAGE_KEY,r),this.applyTheme(),window.ThemeCustomizer&&window.ThemeCustomizer.applyTheme&&!window.ThemeCustomizer._isApplying&&window.ThemeCustomizer.applyTheme(r),this.updateUI())},getStorageValue:function(r,a){if(typeof window.safeStorageGet=="function")return window.safeStorageGet(r,a);try{let i=localStorage.getItem(r);return i!==null?i:a}catch{return a}},setStorageValue:function(r,a){if(typeof window.safeStorageSet=="function")return window.safeStorageSet(r,a);try{return localStorage.setItem(r,a),!0}catch{return!1}},applyTheme:function(){let r=this.state.preference;r==="system"?document.documentElement.removeAttribute("data-theme"):document.documentElement.setAttribute("data-theme",r)},listenForSystemChanges:function(){this._mediaQuery&&this._onMediaChange||(this._mediaQuery=window.matchMedia("(prefers-color-scheme: dark)"),this._onMediaChange=r=>{this.state.preference==="system"&&(this.applyTheme(),window.ThemeCustomizer&&typeof window.ThemeCustomizer.applyTheme=="function"&&!window.ThemeCustomizer._isApplying&&window.ThemeCustomizer.applyTheme("system"))},this._mediaQuery.addEventListener("change",this._onMediaChange))},renderUI:function(r){this.renderMenuSwitchers(r),this.getToggles(r).forEach(i=>{if(i.getAttribute("data-theme-initialized")==="true"){i.tagName==="SELECT"&&(i.value=this.state.preference);return}if(i.tagName==="SELECT"){i.value=this.state.preference;let o=c=>{this.setPreference(c.target.value)};i.addEventListener("change",o),i._themeToggleHandler=o}else{let o=()=>{let c=m,l=(c.indexOf(this.state.preference)+1)%c.length;this.setPreference(c[l])};i.addEventListener("click",o),i._themeToggleHandler=o}i.setAttribute("data-theme-initialized","true")}),this.updateUI(r)},renderMenuSwitchers:function(r){this.getMenuSwitchers(r).forEach(i=>{if(i.getAttribute("data-theme-menu-initialized")==="true")return;let o=i.querySelector(".vd-theme-switcher-toggle"),c=i.querySelector(".vd-theme-switcher-menu");if(!o||!c)return;let l=c.querySelectorAll("[data-theme-value]"),u=[];o.setAttribute("aria-haspopup","true"),o.setAttribute("aria-expanded","false"),c.setAttribute("aria-hidden","true");let f=g=>{g.preventDefault(),g.stopPropagation(),this.toggleMenu(i,o,c)};o.addEventListener("click",f),u.push(()=>o.removeEventListener("click",f)),l.forEach(g=>{let y=w=>{w.preventDefault(),w.stopPropagation();let L=g.getAttribute("data-theme-value");L&&this.setPreference(L),this.closeMenu(i,o,c)};g.addEventListener("click",y),u.push(()=>g.removeEventListener("click",y));let T=w=>{(w.key==="Enter"||w.key===" ")&&(w.preventDefault(),y(w))};g.addEventListener("keydown",T),u.push(()=>g.removeEventListener("keydown",T))});let h=g=>{g.key==="ArrowDown"||g.key==="Enter"||g.key===" "?(g.preventDefault(),c.classList.contains("is-open")||this.openMenu(i,o,c)):g.key==="Escape"&&c.classList.contains("is-open")&&(g.preventDefault(),this.closeMenu(i,o,c))};o.addEventListener("keydown",h),u.push(()=>o.removeEventListener("keydown",h));let d=g=>{this.handleMenuKeydown(g,i,o,c,l)};c.addEventListener("keydown",d),u.push(()=>c.removeEventListener("keydown",d));let p=g=>{!i.contains(g.target)&&c.classList.contains("is-open")&&this.closeMenu(i,o,c)};document.addEventListener("click",p),u.push(()=>document.removeEventListener("click",p)),this.menuInstances.set(i,{toggle:o,menu:c,cleanup:u}),i.setAttribute("data-theme-menu-initialized","true"),this.initMenuTooltips(i)})},initMenuTooltips:function(r){let a=window.Vanduo&&typeof window.Vanduo.getComponent=="function"?window.Vanduo.getComponent("tooltips"):null;a&&typeof a.init=="function"&&a.init(r)},closeOtherMenus:function(r){this.menuInstances.forEach((a,i)=>{a.menu!==r&&a.menu.classList.contains("is-open")&&this.closeMenu(i,a.toggle,a.menu)})},toggleMenu:function(r,a,i){i.classList.contains("is-open")?this.closeMenu(r,a,i):this.openMenu(r,a,i)},openMenu:function(r,a,i){this.closeOtherMenus(i),r.classList.add("is-open"),i.classList.add("is-open"),a.setAttribute("aria-expanded","true"),i.setAttribute("aria-hidden","false");let o=i.querySelector("[data-theme-value].is-active")||i.querySelector("[data-theme-value]");o&&setTimeout(()=>o.focus(),0)},closeMenu:function(r,a,i){r.classList.remove("is-open"),i.classList.remove("is-open"),a.setAttribute("aria-expanded","false"),i.setAttribute("aria-hidden","true")},handleMenuKeydown:function(r,a,i,o,c){let l=Array.from(c),u=l.indexOf(document.activeElement);if(r.key==="Escape"){r.preventDefault(),this.closeMenu(a,i,o),i.focus();return}if(r.key==="ArrowDown"){r.preventDefault();let f=u<l.length-1?u+1:0;l[f].focus();return}if(r.key==="ArrowUp"){r.preventDefault();let f=u>0?u-1:l.length-1;l[f].focus()}},updateMenuSwitcher:function(r){let a=r.querySelector(".vd-theme-switcher-toggle"),i=r.querySelector(".vd-theme-switcher-menu");if(!a||!i)return;let o=this.state.preference,c=a.querySelector("[data-theme-icon]"),l=t[o]||t.system;c&&(c.className=e[o]||e.system),a.setAttribute("aria-label",l),a.hasAttribute("data-tooltip")&&(a.setAttribute("data-tooltip",l),this.refreshTooltipContent(a,l)),i.querySelectorAll("[data-theme-value]").forEach(u=>{let f=u.getAttribute("data-theme-value"),h=f===o;u.classList.toggle("is-active",h),u.setAttribute("aria-checked",h?"true":"false");let d=n[f];d&&u.hasAttribute("data-tooltip")&&(u.setAttribute("data-tooltip",d),this.refreshTooltipContent(u,d))})},refreshTooltipContent:function(r,a){let i=window.Vanduo&&typeof window.Vanduo.getComponent=="function"?window.Vanduo.getComponent("tooltips"):null;!i||typeof i.update!="function"||i.update(r,a)},updateCycleToggle:function(r){let a=this.state.preference,i=r.querySelector("[data-theme-icon]"),o=t[a]||t.system;i&&(i.className=e[a]||e.system),r.setAttribute("aria-label",o),r.hasAttribute("data-tooltip")&&(r.setAttribute("data-tooltip",o),this.refreshTooltipContent(r,o))},updateUI:function(r){this.getToggles(r).forEach(i=>{if(i.tagName==="SELECT")i.value=this.state.preference;else{let o=i.querySelector(".theme-current-label");o&&(o.textContent=this.state.preference.charAt(0).toUpperCase()+this.state.preference.slice(1)),i.querySelector("[data-theme-icon]")&&this.updateCycleToggle(i)}}),this.getMenuSwitchers(r).forEach(i=>{this.updateMenuSwitcher(i)})},destroyAll:function(r){let a=r||document;this.getMenuSwitchers(a).forEach(o=>{let c=this.menuInstances.get(o);c&&(c.cleanup.forEach(l=>l()),this.closeMenu(o,c.toggle,c.menu),this.menuInstances.delete(o)),o.removeAttribute("data-theme-menu-initialized")}),this.getToggles(a).filter(function(o){return o.getAttribute("data-theme-initialized")==="true"}).forEach(o=>{if(o._themeToggleHandler){let c=o.tagName==="SELECT"?"change":"click";o.removeEventListener(c,o._themeToggleHandler),delete o._themeToggleHandler}o.removeAttribute("data-theme-initialized")}),a===document&&this._mediaQuery&&this._onMediaChange&&this._mediaQuery.removeEventListener("change",this._onMediaChange),a===document&&(this._mediaQuery=null,this._onMediaChange=null,this.isInitialized=!1)}};window.Vanduo&&window.Vanduo.register("themeSwitcher",s)})();(function(){"use strict";let m={defaults:{position:"top-right",duration:5e3,dismissible:!0,showProgress:!0,pauseOnHover:!0},containers:{},getContainer:function(e){if(this.containers[e])return this.containers[e];let t=document.createElement("div");return t.className=`vd-toast-container vd-toast-container-${e}`,t.setAttribute("role","status"),t.setAttribute("aria-live","polite"),t.setAttribute("aria-atomic","false"),document.body.appendChild(t),this.containers[e]=t,t},show:function(e,t,n){typeof e=="string"&&(t&&typeof t=="object"?e=Object.assign({},t,{message:e}):e={message:e,type:t,duration:n});let s=Object.assign({},this.defaults,e),r=this.getContainer(s.position),a=document.createElement("div");a.className="vd-toast",s.type&&a.classList.add(`vd-toast-${s.type}`),s.solid&&a.classList.add("vd-toast-solid"),s.showProgress&&s.duration>0&&a.classList.add("vd-toast-with-progress");let i="";if(s.icon){let p=s.iconAllowSvg===!0,g=typeof sanitizeHtml=="function"?sanitizeHtml(s.icon,{allowSvg:p,allowStyle:!1}):escapeHtml(s.icon);i+=`<span class="vd-toast-icon">${g}</span>`}else s.type&&(i+=`<span class="vd-toast-icon">${this.getDefaultIcon(s.type)}</span>`);let o=typeof escapeHtml=="function"?escapeHtml:function(p){let g=document.createElement("div");return g.appendChild(document.createTextNode(p)),g.innerHTML};if(i+='<div class="vd-toast-content">',s.title&&(i+=`<div class="vd-toast-title">${o(String(s.title))}</div>`),s.message&&(i+=`<div class="vd-toast-message">${o(String(s.message))}</div>`),i+="</div>",s.dismissible&&(i+='<button type="button" class="vd-toast-close" aria-label="Close"></button>'),s.showProgress&&s.duration>0){let p=parseInt(s.duration,10)||0;i+=`<div class="vd-toast-progress" style="animation-duration: ${p}ms"></div>`}if(a.innerHTML=i,r.appendChild(a),a._toastCleanup=[],s.dismissible){let p=a.querySelector(".vd-toast-close"),g=()=>{this.dismiss(a)};p.addEventListener("click",g),a._toastCleanup.push(()=>p.removeEventListener("click",g))}let c=null,l=s.duration,u=null,f=()=>{if(s.duration>0){u=Date.now(),c=setTimeout(()=>{this.dismiss(a)},l),a._toastTimeoutId=c;let p=a.querySelector(".vd-toast-progress");p&&(p.style.animationPlayState="running")}},h=()=>{if(c){clearTimeout(c),c=null,a._toastTimeoutId=null,l-=Date.now()-u;let p=a.querySelector(".vd-toast-progress");p&&(p.style.animationPlayState="paused")}};s.pauseOnHover&&(a.addEventListener("mouseenter",h),a.addEventListener("mouseleave",f),a._toastCleanup.push(()=>a.removeEventListener("mouseenter",h),()=>a.removeEventListener("mouseleave",f))),requestAnimationFrame(()=>{a.classList.add("is-visible"),f()}),a._toastConfig=s;let d=new CustomEvent("toast:show",{bubbles:!0,detail:{toast:a,config:s}});return a.dispatchEvent(d),a},dismiss:function(e){if(!e||e.classList.contains("is-exiting"))return;e._toastTimeoutId&&(clearTimeout(e._toastTimeoutId),e._toastTimeoutId=null),e.classList.remove("is-visible"),e.classList.add("is-exiting");let t=new CustomEvent("toast:dismiss",{bubbles:!0,detail:{toast:e}});e.dispatchEvent(t);let n=()=>{e.removeEventListener("transitionend",n),e._toastCleanup&&(e._toastCleanup.forEach(s=>s()),delete e._toastCleanup),e.parentElement&&e.parentElement.removeChild(e)};e.addEventListener("transitionend",n),setTimeout(()=>{e._toastCleanup&&(e._toastCleanup.forEach(s=>s()),delete e._toastCleanup),e.parentElement&&e.parentElement.removeChild(e)},400)},destroyAll:function(){Object.keys(this.containers).forEach(e=>{let t=this.containers[e];if(!t)return;t.querySelectorAll(".vd-toast").forEach(s=>{s._toastTimeoutId&&clearTimeout(s._toastTimeoutId),s._toastCleanup&&(s._toastCleanup.forEach(r=>r()),delete s._toastCleanup),s.parentElement&&s.parentElement.removeChild(s)}),t.parentElement&&t.parentElement.removeChild(t)}),this.containers={}},dismissAll:function(e){e&&this.containers[e]?this.containers[e].querySelectorAll(".vd-toast").forEach(n=>this.dismiss(n)):Object.values(this.containers).forEach(t=>{t.querySelectorAll(".vd-toast").forEach(s=>this.dismiss(s))})},getDefaultIcon:function(e){return{success:'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>',error:'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="15" y1="9" x2="9" y2="15"></line><line x1="9" y1="9" x2="15" y2="15"></line></svg>',warning:'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>',info:'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg>'}[e]||""},success:function(e,t){return this.show(Object.assign({message:e,type:"success"},t))},error:function(e,t){return this.show(Object.assign({message:e,type:"error"},t))},warning:function(e,t){return this.show(Object.assign({message:e,type:"warning"},t))},info:function(e,t){return this.show(Object.assign({message:e,type:"info"},t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("toast",m),window.Toast=m})();(function(){"use strict";let m={tooltips:new Map,delayTimers:new Map,sanitizeHtml:function(e,t){return typeof sanitizeHtml=="function"?sanitizeHtml(e,t):e||""},init:function(e){window.Vanduo.queryAll(e,"[data-tooltip], [data-tooltip-html]").forEach(n=>{this.tooltips.has(n)||this.initTooltip(n)})},initTooltip:function(e){let t=this.createTooltip(e),n=[],s=()=>{this.showTooltip(e,t)},r=()=>{this.hideTooltip(e,t)},a=()=>{this.showTooltip(e,t)},i=()=>{this.hideTooltip(e,t)};e.addEventListener("mouseenter",s),e.addEventListener("mouseleave",r),e.addEventListener("focus",a),e.addEventListener("blur",i),n.push(()=>e.removeEventListener("mouseenter",s),()=>e.removeEventListener("mouseleave",r),()=>e.removeEventListener("focus",a),()=>e.removeEventListener("blur",i)),this.tooltips.set(e,{tooltip:t,cleanup:n})},createTooltip:function(e){let t=document.createElement("div");t.className="vd-tooltip",t.setAttribute("role","tooltip"),t.setAttribute("aria-hidden","true");let n="tooltip-"+Math.random().toString(36).substr(2,9);t.id=n,e.setAttribute("aria-describedby",n);let s=e.dataset.tooltipHtml,r=e.dataset.tooltip;if(s){let o=e.hasAttribute("data-tooltip-allow-svg");t.innerHTML=this.sanitizeHtml(s,{allowSvg:o,allowStyle:!1}),t.classList.add("vd-tooltip-html")}else r&&(t.textContent=r);let a=e.dataset.tooltipPlacement||e.dataset.placement||"top";t.setAttribute("data-placement",a),t.classList.add(`vd-tooltip-${a}`),e.dataset.tooltipVariant&&t.classList.add(`vd-tooltip-${e.dataset.tooltipVariant}`),e.dataset.tooltipSize&&t.classList.add(`vd-tooltip-${e.dataset.tooltipSize}`);let i=parseInt(e.dataset.tooltipDelay)||0;return t.dataset.delay=i,document.body.appendChild(t),t},showTooltip:function(e,t){let n=parseInt(t.dataset.delay)||0;if(n>0){let s=setTimeout(()=>{this.positionTooltip(e,t),t.classList.add("is-visible"),t.setAttribute("aria-hidden","false")},n);this.delayTimers.set(e,s)}else this.positionTooltip(e,t),t.classList.add("is-visible"),t.setAttribute("aria-hidden","false")},hideTooltip:function(e,t){let n=this.delayTimers.get(e);n&&(clearTimeout(n),this.delayTimers.delete(e)),t.classList.remove("is-visible"),t.setAttribute("aria-hidden","true")},positionTooltip:function(e,t){let n=t.dataset.placement||"top",s=e.getBoundingClientRect(),r=t.getBoundingClientRect(),a=window.pageYOffset||document.documentElement.scrollTop,i=window.pageXOffset||document.documentElement.scrollLeft,o=0,c=0;switch(n){case"top":o=s.top+a-r.height-8,c=s.left+i+s.width/2-r.width/2;break;case"bottom":o=s.bottom+a+8,c=s.left+i+s.width/2-r.width/2;break;case"left":o=s.top+a+s.height/2-r.height/2,c=s.left+i-r.width-8;break;case"right":o=s.top+a+s.height/2-r.height/2,c=s.right+i+8;break}let l=window.innerWidth,u=window.innerHeight,f=8;c<f?c=f:c+r.width>l-f&&(c=l-r.width-f),o<a+f?o=a+f:o+r.height>a+u-f&&(o=a+u-r.height-f),t.style.cssText=`position: absolute; top: 0; left: 0; transform: translate(${c}px, ${o}px);`},show:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t&&this.tooltips.has(t)){let{tooltip:n}=this.tooltips.get(t);this.showTooltip(t,n)}},hide:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t&&this.tooltips.has(t)){let{tooltip:n}=this.tooltips.get(t);this.hideTooltip(t,n)}},update:function(e,t,n=!1){let s=typeof e=="string"?document.querySelector(e):e;if(s&&this.tooltips.has(s)){let{tooltip:r}=this.tooltips.get(s);if(n){let a=s.hasAttribute("data-tooltip-allow-svg");r.innerHTML=this.sanitizeHtml(t,{allowSvg:a,allowStyle:!1}),r.classList.add("vd-tooltip-html")}else r.textContent=t,r.classList.remove("vd-tooltip-html")}},destroy:function(e){let t=this.tooltips.get(e);if(!t)return;let n=this.delayTimers.get(e);n&&(clearTimeout(n),this.delayTimers.delete(e)),t.cleanup.forEach(s=>s()),t.tooltip&&t.tooltip.parentNode&&t.tooltip.parentNode.removeChild(t.tooltip),this.tooltips.delete(e)},destroyAll:function(){this.tooltips.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("tooltips",m),window.VanduoTooltips=m})();(function(){"use strict";let m={minQueryLength:2,maxResults:10,debounceMs:150,highlightTag:"mark",keyboardShortcut:!0,containerSelector:".vd-doc-search",inputSelector:".vd-doc-search-input",resultsSelector:".vd-doc-search-results",contentSelector:".doc-content section[id]",titleSelector:".demo-title, h2, h3",navSelector:".doc-nav-link",sectionSelector:".doc-nav-section",excludeFromContent:"pre, code, script, style",maxContentLength:500,data:null,categoryIcons:{"getting-started":"ph-rocket-launch",core:"ph-cube",components:"ph-puzzle-piece",interactive:"ph-cursor-click","data-display":"ph-table",feedback:"ph-bell",meta:"ph-info",default:"ph-file-text"},onSelect:null,onSearch:null,onOpen:null,onClose:null,emptyTitle:"No results found",emptyText:"Try different keywords or check spelling",placeholder:"Search..."},e={mark:!0,span:!0,strong:!0,em:!0};function t(i){return typeof window.VanduoLifecycle<"u"&&window.VanduoLifecycle.isRoot(i)}function n(i){return t(i)?i:document}function s(i){let o=typeof i=="string"?i.toLowerCase():"mark";return e[o]?o:"mark"}function r(i){let o=Object.assign({},m,i||{});o.root=n(o.root),o.highlightTag=s(o.highlightTag);let c={initialized:!1,index:[],results:[],activeIndex:-1,isOpen:!1,query:"",container:null,input:null,resultsContainer:null,debounceTimer:null,boundHandlers:{}};function l(b){if(window.Vanduo&&typeof window.Vanduo.queryAll=="function")return window.Vanduo.queryAll(o.root,b);let x=n(o.root);if(x===document)return Array.from(document.querySelectorAll(b));let _=[];return x instanceof Element&&x.matches(b)&&_.push(x),_.concat(Array.from(x.querySelectorAll(b)))}function u(b){let x=l(b);return x.length?x[0]:null}function f(b,x,..._){try{x(..._)}catch(P){console.warn('[Vanduo Search] Callback error in "'+b+'":',P)}}function h(b){if(c.resultsContainer)try{c.resultsContainer.innerHTML=b}catch(x){console.warn("[Vanduo Search] Failed to render results:",x)}}function d(){return c.initialized?te:(c.container=u(o.containerSelector),!c.container||(c.input=c.container.querySelector(o.inputSelector),c.resultsContainer=c.container.querySelector(o.resultsSelector),!c.input||!c.resultsContainer)?(c.initialized=!1,null):(o.placeholder&&c.input.setAttribute("placeholder",o.placeholder),p(),V(),v(),c.initialized=!0,te))}function p(){if(c.index=[],o.data&&Array.isArray(o.data)){o.data.forEach(function(_){c.index.push({id:_.id||L(_.title),title:_.title||"",category:_.category||"",categorySlug:L(_.category||""),content:_.content||"",keywords:_.keywords||w(_.title+" "+_.content),url:_.url||"#"+(_.id||L(_.title)),icon:_.icon||""})});return}let b=l(o.contentSelector),x=g();b.forEach(function(_){let P=_.id;if(!P)return;let z=_.querySelector(o.titleSelector),O=z?z.textContent.replace(/v[\d.]+/g,"").trim():P,A=x[P]||"Documentation",D=y(_),E=T(_,O),C=z?z.querySelector("i.ph"):null,N="";if(C&&C.classList){for(let B=0;B<C.classList.length;B++)if(C.classList[B].indexOf("ph-")===0){N=C.classList[B];break}}c.index.push({id:P,title:O,category:A,categorySlug:L(A),content:D,keywords:E,url:"#"+P,icon:N})})}function g(){let b={},x="Documentation";return l(o.navSelector+", "+o.sectionSelector).forEach(function(P){if(P.classList.contains("doc-nav-section"))x=P.textContent.trim();else{let z=P.getAttribute("href");if(z&&z.startsWith("#")){let O=z.substring(1);b[O]=x}}}),b}function y(b){let x=b.cloneNode(!0);x.querySelectorAll(o.excludeFromContent).forEach(function(z){z.remove()});let P=x.textContent||"";return P=P.replace(/\s+/g," ").trim(),P.substring(0,o.maxContentLength)}function T(b,x){let _=[];return x.toLowerCase().split(/\s+/).forEach(function(O){O.length>2&&_.push(O)}),b.querySelectorAll("code").forEach(function(O){let D=(O.textContent||"").match(/\.([\w-]+)/g);D&&D.forEach(function(E){_.push(E.substring(1).toLowerCase())})}),b.querySelectorAll("[data-tooltip], [data-modal]").forEach(function(O){O.getAttributeNames().filter(function(D){return D.startsWith("data-")}).forEach(function(D){_.push(D.replace("data-",""))})}),Array.from(new Set(_))}function w(b){return b.toLowerCase().split(/\s+/).filter(function(_){return _.length>2})}function L(b){return b.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"")}function V(){c.boundHandlers.handleInput=function(b){q(b)},c.boundHandlers.handleFocus=function(){c.query.length>=o.minQueryLength&&ne()},c.boundHandlers.handleKeydown=function(b){I(b)},c.boundHandlers.handleOutsideClick=function(b){c.container.contains(b.target)||ee()},c.boundHandlers.handleGlobalKeydown=function(b){o.keyboardShortcut&&(b.metaKey||b.ctrlKey)&&b.key==="k"&&(b.preventDefault(),c.input.focus(),c.input.select())},c.boundHandlers.handleResultClick=function(b){let x=b.target.closest(".vd-doc-search-result");if(x){let _=parseInt(x.dataset.index,10);J(_)}},c.input.addEventListener("input",c.boundHandlers.handleInput),c.input.addEventListener("focus",c.boundHandlers.handleFocus),c.input.addEventListener("keydown",c.boundHandlers.handleKeydown),document.addEventListener("click",c.boundHandlers.handleOutsideClick),document.addEventListener("keydown",c.boundHandlers.handleGlobalKeydown),c.resultsContainer.addEventListener("click",c.boundHandlers.handleResultClick)}function k(){c.input&&(c.input.removeEventListener("input",c.boundHandlers.handleInput),c.input.removeEventListener("focus",c.boundHandlers.handleFocus),c.input.removeEventListener("keydown",c.boundHandlers.handleKeydown)),document.removeEventListener("click",c.boundHandlers.handleOutsideClick),document.removeEventListener("keydown",c.boundHandlers.handleGlobalKeydown),c.resultsContainer&&c.resultsContainer.removeEventListener("click",c.boundHandlers.handleResultClick)}function v(){let b=c.resultsContainer.id||"search-results-"+Math.random().toString(36).substr(2,9);c.resultsContainer.id=b,c.input.setAttribute("role","combobox"),c.input.setAttribute("aria-autocomplete","list"),c.input.setAttribute("aria-controls",b),c.input.setAttribute("aria-expanded","false"),c.resultsContainer.setAttribute("role","listbox"),c.resultsContainer.setAttribute("aria-label","Search results")}function q(b){let x=b.target.value.trim();c.debounceTimer&&clearTimeout(c.debounceTimer),c.debounceTimer=setTimeout(function(){if(c.query=x,x.length<o.minQueryLength){ee();return}c.results=S(x),c.activeIndex=-1,M(),ne(),typeof o.onSearch=="function"&&f("onSearch",o.onSearch,x,c.results)},o.debounceMs)}function I(b){if(!c.isOpen){b.key==="ArrowDown"&&c.query.length>=o.minQueryLength&&(b.preventDefault(),c.results=S(c.query),M(),ne());return}switch(b.key){case"ArrowDown":b.preventDefault(),G(1);break;case"ArrowUp":b.preventDefault(),G(-1);break;case"Enter":b.preventDefault(),c.activeIndex>=0?J(c.activeIndex):c.results.length>0&&J(0);break;case"Escape":b.preventDefault(),ee();break;case"Tab":ee();break}}function S(b){let x=b.toLowerCase().split(/\s+/).filter(function(P){return P.length>0}),_=[];return c.index.forEach(function(P){let z=0,O=P.title.toLowerCase(),A=P.category.toLowerCase(),D=P.content.toLowerCase();x.forEach(function(E){O.includes(E)&&(z+=100,O===E?z+=50:O.startsWith(E)&&(z+=25)),A.includes(E)&&(z+=50),P.keywords.some(function(N){return N.includes(E)})&&(z+=30),D.includes(E)&&(z+=10)}),z>0&&_.push({id:P.id,title:P.title,category:P.category,categorySlug:P.categorySlug,content:P.content,url:P.url,icon:P.icon,score:z})}),_.sort(function(P,z){return z.score-P.score}),_.slice(0,o.maxResults)}function M(){if(c.results.length===0){h(H());return}let b='<ul class="vd-doc-search-results-list" role="listbox">';c.results.forEach(function(x,_){let P=_===c.activeIndex,z=x.icon||$(x.categorySlug),O=Z(x.content,c.query);b+='<li class="vd-doc-search-result'+(P?" is-active":"")+'" role="option" id="vd-doc-search-result-'+_+'" data-index="'+_+'" data-category="'+R(x.categorySlug)+'" aria-selected="'+P+'"><div class="vd-doc-search-result-icon"><i class="ph '+R(z)+'"></i></div><div class="vd-doc-search-result-content"><div class="vd-doc-search-result-title">'+Q(x.title,c.query)+'</div><div class="vd-doc-search-result-category">'+R(x.category)+'</div><div class="vd-doc-search-result-excerpt">'+Q(O,c.query)+"</div></div></li>"}),b+="</ul>",b+=F(),h(b)}function H(){return'<div class="vd-doc-search-empty"><div class="vd-doc-search-empty-icon"><i class="ph ph-magnifying-glass"></i></div><div class="vd-doc-search-empty-title">'+R(o.emptyTitle)+'</div><div class="vd-doc-search-empty-text">'+R(o.emptyText)+"</div></div>"}function F(){return'<div class="vd-doc-search-footer"><span class="vd-doc-search-footer-item"><kbd>\u2191</kbd><kbd>\u2193</kbd> to navigate</span><span class="vd-doc-search-footer-item"><kbd>\u21B5</kbd> to select</span><span class="vd-doc-search-footer-item"><kbd>esc</kbd> to close</span></div>'}function $(b){return o.categoryIcons[b]||o.categoryIcons.default||"ph-file-text"}function Z(b,x){let _=x.toLowerCase().split(/\s+/),P=b.toLowerCase(),z=100,O=-1;for(let C=0;C<_.length;C++){let N=P.indexOf(_[C]);N!==-1&&(O===-1||N<O)&&(O=N)}if(O===-1)return b.substring(0,z)+"...";let A=Math.max(0,O-30),D=Math.min(b.length,O+z),E=b.substring(A,D);return A>0&&(E="..."+E),D<b.length&&(E=E+"..."),E}function Q(b,x){if(!x)return R(b);let _=x.toLowerCase().split(/\s+/).filter(function(z){return z.length>0}),P=R(b);return _.forEach(function(z){if(z.length>50)return;let O=new RegExp("("+z.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+")","gi");P=P.replace(O,"<"+o.highlightTag+">$1</"+o.highlightTag+">")}),P}function R(b){return b==null?"":String(b).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function G(b){let x=c.activeIndex+b;x<0?x=c.results.length-1:x>=c.results.length&&(x=0),j(x)}function j(b){let x=c.resultsContainer.querySelector(".vd-doc-search-result.is-active");x&&(x.classList.remove("is-active"),x.setAttribute("aria-selected","false")),c.activeIndex=b;let _=c.resultsContainer.querySelector('[data-index="'+b+'"]');_&&(_.classList.add("is-active"),_.setAttribute("aria-selected","true"),c.input.setAttribute("aria-activedescendant","vd-doc-search-result-"+b),_.scrollIntoView({block:"nearest"}))}function J(b){let x=c.results[b];if(!x)return;if(ee(),c.input.value="",c.query="",typeof o.onSelect=="function"){f("onSelect",o.onSelect,x);return}let _=u(x.url)||document.querySelector(x.url);_&&(_.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",x.url),ce(x.id))}function ce(b){l(o.navSelector).forEach(function(_){_.classList.remove("active"),_.getAttribute("href")==="#"+b&&_.classList.add("active")})}function ne(){c.isOpen||(c.isOpen=!0,c.resultsContainer.classList.add("is-open"),c.input.setAttribute("aria-expanded","true"),typeof o.onOpen=="function"&&f("onOpen",o.onOpen))}function ee(){c.isOpen&&(c.isOpen=!1,c.activeIndex=-1,c.resultsContainer.classList.remove("is-open"),c.input.setAttribute("aria-expanded","false"),c.input.removeAttribute("aria-activedescendant"),typeof o.onClose=="function"&&f("onClose",o.onClose))}function X(){k(),c.initialized=!1,c.index=[],c.results=[],c.isOpen=!1,c.query="",c.debounceTimer&&clearTimeout(c.debounceTimer),c.resultsContainer&&h("")}function le(){p()}function ie(b){Object.assign(o,b),o.root=n(o.root),o.highlightTag=s(o.highlightTag)}function se(){return Object.assign({},o)}function de(){return c.index.slice()}let te={init:d,destroy:X,rebuild:le,search:S,open:ne,close:ee,setConfig:ie,getConfig:se,getIndex:de,getContainer:function(){return c.container}};return te}let a={create:function(i){let o=r(i);return o&&o.init(),o||null},_instance:null,config:Object.assign({},m),init:function(i,o){let c=t(i)?i:null,l=c?o:i;return this._instance&&this._instance.destroy(),l&&Object.assign(this.config,l),this._instance=r(Object.assign({},this.config,c?{root:c}:{})),this._instance?this._instance.init():null},destroy:function(i){i&&this._instance&&this._instance.getContainer()&&typeof window.VanduoLifecycle<"u"&&!window.VanduoLifecycle.isInRoot(i,this._instance.getContainer())||this._instance&&(this._instance.destroy(),this._instance=null)},destroyAll:function(i){this.destroy(i)},rebuild:function(){this._instance&&this._instance.rebuild()},search:function(i){return this._instance?this._instance.search(i):[]},open:function(){this._instance&&this._instance.open()},close:function(){this._instance&&this._instance.close()}};typeof window.Vanduo<"u"&&window.Vanduo.register("docSearch",a),window.Search=a,window.DocSearch=a,window.VanduoDocSearch=a})();(function(){"use strict";let m={instances:new Map,currentDrag:null,touchState:null,feedbackElement:null,containerSelector:".vd-draggable-container, .vd-draggable-container-vertical",init:function(e){window.Vanduo.queryAll(e,".vd-draggable, [data-draggable]").forEach(r=>{this.instances.has(r)||this.initDraggable(r)}),window.Vanduo.queryAll(e,this.containerSelector).forEach(r=>{this.instances.has(r)||this.initContainer(r)}),window.Vanduo.queryAll(e,".vd-drop-zone").forEach(r=>{this.instances.has(r)||this.initDropZone(r)}),this.createFeedbackElement()},initDraggable:function(e){let t=[];e.hasAttribute("draggable")||e.setAttribute("draggable","true"),e.hasAttribute("tabindex")||e.setAttribute("tabindex","0"),e.setAttribute("role","option"),e.setAttribute("aria-roledescription","draggable item"),e.setAttribute("aria-grabbed","false");let n=u=>{this.handleDragStart(u,e)};e.addEventListener("dragstart",n),t.push(()=>e.removeEventListener("dragstart",n));let s=u=>{this.handleDrag(u,e)};e.addEventListener("drag",s),t.push(()=>e.removeEventListener("drag",s));let r=u=>{this.handleDragEnd(u,e)};e.addEventListener("dragend",r),t.push(()=>e.removeEventListener("dragend",r));let a=u=>{this.handleTouchStart(u,e)};e.addEventListener("touchstart",a),t.push(()=>e.removeEventListener("touchstart",a));let i=u=>{this.handleTouchMove(u,e)};e.addEventListener("touchmove",i,{passive:!1}),t.push(()=>e.removeEventListener("touchmove",i));let o=u=>{this.handleTouchEnd(u,e)};e.addEventListener("touchend",o,{passive:!1}),t.push(()=>e.removeEventListener("touchend",o));let c=u=>{this.handleTouchEnd(u,e)};e.addEventListener("touchcancel",c),t.push(()=>e.removeEventListener("touchcancel",c));let l=u=>{this.handleKeydown(u,e)};e.addEventListener("keydown",l),t.push(()=>e.removeEventListener("keydown",l)),this.instances.set(e,{cleanup:t})},initContainer:function(e){e.setAttribute("role","listbox"),e.setAttribute("aria-label",e.getAttribute("aria-label")||"Draggable items"),e.querySelectorAll(".vd-draggable-item").forEach(i=>{this.instances.has(i)||this.initDraggable(i)});let n=[],s=i=>{i.preventDefault(),i.dataTransfer.dropEffect="move"},r=i=>{if(i.preventDefault(),i.dataTransfer.dropEffect="move",!this.currentDrag)return;let o=this.currentDrag.element;e.contains(o)&&(i.clientX===0&&i.clientY===0||this.handleReorder(e,o,i.clientX,i.clientY))},a=i=>{i.preventDefault()};e.addEventListener("dragenter",s),e.addEventListener("dragover",r),e.addEventListener("drop",a),n.push(()=>{e.removeEventListener("dragenter",s),e.removeEventListener("dragover",r),e.removeEventListener("drop",a)}),this.instances.set(e,{cleanup:n})},initDropZone:function(e){let t=[];e.setAttribute("role","region"),e.setAttribute("aria-dropeffect","move"),e.hasAttribute("aria-label")||e.setAttribute("aria-label","Drop zone");let n=i=>{i.preventDefault(),this.handleDragOver(i,e)};e.addEventListener("dragover",n),t.push(()=>e.removeEventListener("dragover",n));let s=i=>{i.preventDefault(),this.handleDragEnter(i,e)};e.addEventListener("dragenter",s),t.push(()=>e.removeEventListener("dragenter",s));let r=i=>{this.handleDragLeave(i,e)};e.addEventListener("dragleave",r),t.push(()=>e.removeEventListener("dragleave",r));let a=i=>{i.preventDefault(),this.handleDrop(i,e)};e.addEventListener("drop",a),t.push(()=>e.removeEventListener("drop",a)),this.instances.set(e,{cleanup:t})},createFeedbackElement:function(){if(!this.feedbackElement){let e=document.querySelector(".vd-drag-feedback");if(e){this.feedbackElement=e;return}this.feedbackElement=document.createElement("div"),this.feedbackElement.className="vd-drag-feedback hidden",this.feedbackElement.setAttribute("role","presentation"),document.body.appendChild(this.feedbackElement)}},handleDragStart:function(e,t){t.classList.add("is-dragging"),t.setAttribute("aria-grabbed","true"),this.currentDrag={element:t,initialPosition:{x:e.clientX,y:e.clientY},initialBounds:t.getBoundingClientRect(),data:this.getData(t)},e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text/plain",this.currentDrag.data),t.dispatchEvent(new CustomEvent("draggable:start",{bubbles:!0,detail:{element:t,data:this.currentDrag.data,position:{x:e.clientX,y:e.clientY}}}))},handleDrag:function(e,t){this.currentDrag&&t.dispatchEvent(new CustomEvent("draggable:drag",{bubbles:!0,detail:{element:t,data:this.currentDrag.data,position:{x:e.clientX,y:e.clientY},delta:{x:e.clientX-this.currentDrag.initialPosition.x,y:e.clientY-this.currentDrag.initialPosition.y}}}))},handleDragEnd:function(e,t){t.classList.remove("is-dragging"),t.classList.add("is-dropped"),setTimeout(()=>t.classList.remove("is-dropped"),300),t.setAttribute("aria-grabbed","false"),this.feedbackElement&&this.feedbackElement.classList.add("hidden");let n=this.currentDrag?.data||this.getData(t),s=this.currentDrag?.initialPosition||{x:0,y:0};t.dispatchEvent(new CustomEvent("draggable:end",{bubbles:!0,detail:{element:t,data:n,position:{x:e.clientX,y:e.clientY},delta:{x:e.clientX-s.x,y:e.clientY-s.y}}})),this.currentDrag=null},handleTouchStart:function(e,t){let n=e.touches[0],s=t.getBoundingClientRect();this.touchState={element:t,startX:n.clientX,startY:n.clientY,lastX:n.clientX,lastY:n.clientY,offsetX:n.clientX-s.left,offsetY:n.clientY-s.top,startTime:Date.now(),isDragging:!1}},handleTouchMove:function(e,t){if(!this.touchState)return;let n=e.touches[0];this.touchState.lastX=n.clientX,this.touchState.lastY=n.clientY;let s=n.clientX-this.touchState.startX,r=n.clientY-this.touchState.startY;if((Math.abs(s)>10||Math.abs(r)>10)&&(e.cancelable&&e.preventDefault(),this.touchState.isDragging||(this.touchState.isDragging=!0,t.classList.add("is-dragging"),t.setAttribute("aria-grabbed","true"),this.currentDrag={element:t,initialPosition:{x:this.touchState.startX,y:this.touchState.startY},initialBounds:t.getBoundingClientRect(),data:this.getData(t),offsetX:this.touchState.offsetX,offsetY:this.touchState.offsetY},t.dispatchEvent(new CustomEvent("draggable:start",{bubbles:!0,detail:{element:t,data:this.currentDrag.data,position:{x:n.clientX,y:n.clientY}}}))),this.updateFeedback(n.clientX,n.clientY),this.currentDrag)){t.dispatchEvent(new CustomEvent("draggable:drag",{bubbles:!0,detail:{element:t,data:this.currentDrag.data,position:{x:n.clientX,y:n.clientY},delta:{x:s,y:r}}})),this.updateTouchDropZone(n.clientX,n.clientY);let a=t.closest(this.containerSelector);a&&a.contains(t)&&this.handleReorder(a,t,n.clientX,n.clientY)}},handleTouchEnd:function(e,t){if(this.touchState&&this.touchState.isDragging){e.cancelable&&e.preventDefault();let n=e.changedTouches?.[0],s={x:n?.clientX??this.touchState.lastX??this.touchState.startX,y:n?.clientY??this.touchState.lastY??this.touchState.startY},r=this.resolveDropZoneAtPoint(s.x,s.y)||this.touchState.overZone;r?this.dispatchDrop(r,s):this.touchState.overZone&&this.touchState.overZone.classList.remove("is-drag-over"),t.classList.remove("is-dragging"),t.classList.add("is-dropped"),t.setAttribute("aria-grabbed","false"),setTimeout(()=>t.classList.remove("is-dropped"),300),this.feedbackElement&&this.feedbackElement.classList.add("hidden");let a=this.currentDrag?.data||this.getData(t),i=this.touchState?.startX||0,o=this.touchState?.startY||0;t.dispatchEvent(new CustomEvent("draggable:end",{bubbles:!0,detail:{element:t,data:a,position:s,delta:{x:s.x-i,y:s.y-o}}}))}this.touchState=null,this.currentDrag=null},handleDragOver:function(e,t){e.preventDefault(),e.dataTransfer.dropEffect="move"},handleDragEnter:function(e,t){e.preventDefault(),t.classList.add("is-drag-over")},handleDragLeave:function(e,t){t.classList.remove("is-drag-over")},handleDrop:function(e,t){e.preventDefault(),this.dispatchDrop(t,{x:e.clientX,y:e.clientY})},resolveDropZoneAtPoint:function(e,t){if(!Number.isFinite(e)||!Number.isFinite(t))return null;if(typeof document.elementsFromPoint=="function"){let a=document.elementsFromPoint(e,t);for(let i of a){let o=i.closest(".vd-drop-zone");if(o)return o}}let n=document.elementFromPoint(e,t),s=n?n.closest(".vd-drop-zone"):null;if(s)return s;let r=document.querySelectorAll(".vd-drop-zone");for(let a of r){let i=a.getBoundingClientRect();if(e>=i.left&&e<=i.right&&t>=i.top&&t<=i.bottom)return a}return null},updateTouchDropZone:function(e,t){if(!this.touchState)return;let n=this.resolveDropZoneAtPoint(e,t),s=this.touchState.overZone||null;s&&s!==n&&s.classList.remove("is-drag-over"),n&&n!==s&&n.classList.add("is-drag-over"),this.touchState.overZone=n||null},dispatchDrop:function(e,t){e.classList.remove("is-drag-over"),e.dispatchEvent(new CustomEvent("draggable:drop",{bubbles:!0,detail:{zone:e,element:this.currentDrag?.element,data:this.currentDrag?.data,position:t}}))},handleReorder:function(e,t,n,s){let r=e.classList.contains("vd-draggable-container-vertical"),i=[...e.querySelectorAll(".vd-draggable-item:not(.is-dragging), .vd-draggable:not(.is-dragging)")].reduce((o,c)=>{let l=c.getBoundingClientRect(),u=r?s-l.top-l.height/2:n-l.left-l.width/2;return u<0&&u>o.offset?{offset:u,element:c}:o},{offset:Number.NEGATIVE_INFINITY}).element;i==null?e.appendChild(t):e.insertBefore(t,i)},handleKeydown:function(e,t){switch(e.key){case"Enter":case" ":e.preventDefault(),t.click();break;case"Escape":t.classList.contains("is-dragging")&&(t.classList.remove("is-dragging"),t.setAttribute("aria-grabbed","false"),this.feedbackElement&&this.feedbackElement.classList.add("hidden"),this.currentDrag=null);break;case"ArrowUp":case"ArrowLeft":{e.preventDefault();let n=t.previousElementSibling;n&&(n.classList.contains("vd-draggable")||n.classList.contains("vd-draggable-item"))&&(t.parentNode.insertBefore(t,n),t.focus(),t.dispatchEvent(new CustomEvent("draggable:reorder",{bubbles:!0,detail:{element:t,direction:"up"}})));break}case"ArrowDown":case"ArrowRight":{e.preventDefault();let n=t.nextElementSibling;n&&(n.classList.contains("vd-draggable")||n.classList.contains("vd-draggable-item"))&&(t.parentNode.insertBefore(n,t),t.focus(),t.dispatchEvent(new CustomEvent("draggable:reorder",{bubbles:!0,detail:{element:t,direction:"down"}})));break}}},getData:function(e){return e.dataset.draggable||e.textContent.trim()},updateFeedback:function(e,t){if(!this.currentDrag)return;this.feedbackElement.classList.remove("hidden");let n=this.currentDrag.initialBounds;this.feedbackElement.innerHTML="";let s=this.currentDrag.element.cloneNode(!0);this.feedbackElement.appendChild(s);let r=this.currentDrag.offsetX??20,a=this.currentDrag.offsetY??20;Object.assign(this.feedbackElement.style,{left:e-r+"px",top:t-a+"px",width:n.width+"px",height:n.height+"px"})},makeDraggable:function(e,t={}){let n=typeof e=="string"?document.querySelector(e):e;n&&!this.instances.has(n)&&(n.classList.add("vd-draggable"),n.setAttribute("draggable","true"),t.data&&(n.dataset.draggable=t.data),this.initDraggable(n))},removeDraggable:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&this.instances.has(t)&&(this.instances.get(t).cleanup.forEach(s=>s()),this.instances.delete(t),t.classList.remove("vd-draggable"),t.removeAttribute("draggable"),t.removeAttribute("data-draggable"))},destroy:function(e){this.removeDraggable(e)},destroyAll:function(){Array.from(this.instances.keys()).forEach(t=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("draggable",m),window.VanduoDraggable=m})();(function(){"use strict";let m=new Map;function e(f){return!!f&&(f===document||f.nodeType===1||f.nodeType===9||f.nodeType===11)}function t(f){return e(f)?f:document}function n(f,h){let d=t(f);return h instanceof Element?d===document?document.documentElement?document.documentElement.contains(h):document.contains(h):d===h?!0:typeof d.contains=="function"&&d.contains(h):!1}function s(f,h){let d=t(f),p=[];if(d instanceof Element&&typeof d.matches=="function"&&d.matches(h)&&p.push(d),typeof d.querySelectorAll=="function"){let g=d.querySelectorAll(h);for(let y=0;y<g.length;y++)p.push(g[y])}return p}function r(f){try{return new URL(f,window.location.href).origin===window.location.origin}catch{return!1}}function a(f,h){let p=new DOMParser().parseFromString(h.trim(),"text/html"),g=["SCRIPT","IFRAME","OBJECT","EMBED","FORM","BASE","LINK","META","STYLE"];for(let w of g){let L=p.querySelectorAll(w);for(let V=L.length-1;V>=0;V--)L[V].parentNode.removeChild(L[V])}function y(w){if(w.nodeType===Node.ELEMENT_NODE){let L=w.attributes;for(let k=L.length-1;k>=0;k--){let v=L[k].name.toLowerCase(),I=L[k].value.toLowerCase().trim();(v.startsWith("on")||I.startsWith("javascript:")||I.startsWith("data:")||I.startsWith("vbscript:"))&&w.removeAttribute(L[k].name)}let V=w.childNodes;for(let k=0;k<V.length;k++)y(V[k])}}y(p.body);let T=Array.from(p.body.childNodes);for(;f.firstChild;)f.removeChild(f.firstChild);T.forEach(function(w){f.appendChild(document.adoptNode(w))})}function i(){return'<div class="vd-skeleton-card" style="position:relative;min-height:200px;padding:2rem;overflow:hidden;"><div class="vd-skeleton vd-skeleton-heading-lg" style="margin-bottom:1.5rem;"></div><div class="vd-skeleton vd-skeleton-paragraph"><div class="vd-skeleton vd-skeleton-text"></div><div class="vd-skeleton vd-skeleton-text"></div><div class="vd-skeleton vd-skeleton-text"></div></div><div class="vd-dynamic-loader" style="position:absolute;inset:0;"><div class="vd-dynamic-loader-grid"><div class="vd-spinner vd-spinner-sm vd-spinner-success"></div><div class="vd-spinner vd-spinner-sm vd-spinner-warning"></div><div class="vd-spinner vd-spinner-sm vd-spinner-error"></div><div class="vd-spinner vd-spinner-sm vd-spinner-info"></div></div><span class="vd-dynamic-loader-text">Loading\u2026</span></div></div>'}function o(){return'<div class="vd-dynamic-loader" style="min-height:180px;display:flex;align-items:center;justify-content:center;"><div class="vd-dynamic-loader-grid"><div class="vd-spinner vd-spinner-sm vd-spinner-success"></div><div class="vd-spinner vd-spinner-sm vd-spinner-warning"></div><div class="vd-spinner vd-spinner-sm vd-spinner-error"></div><div class="vd-spinner vd-spinner-sm vd-spinner-info"></div></div><span class="vd-dynamic-loader-text">Loading\u2026</span></div>'}function c(f){return!f||f==="skeleton"?i():f==="spinner"?o():f}function l(f,h,d){f.dispatchEvent(new CustomEvent(h,{bubbles:!0,detail:d||{}}))}let u={observe:function(f,h,d){if(!(f instanceof Element)){console.warn("[VanduoLazyLoad] observe() requires a DOM Element.");return}if(typeof h!="function"){console.warn("[VanduoLazyLoad] observe() requires a callback function.");return}if(m.has(f))return;let p=d&&d.threshold!=null?d.threshold:0,g=d&&d.rootMargin?d.rootMargin:"0px",y=new IntersectionObserver(function(T,w){T.forEach(function(L){if(L.isIntersecting){w.unobserve(L.target),m.delete(L.target),typeof window.VanduoLifecycle<"u"&&window.VanduoLifecycle.has(L.target,"lazyLoad")&&window.VanduoLifecycle.unregister(L.target,"lazyLoad");try{h(L.target)}catch(V){console.error("[VanduoLazyLoad] Callback threw:",V)}}})},{threshold:p,rootMargin:g});m.set(f,y),typeof window.VanduoLifecycle<"u"&&!window.VanduoLifecycle.has(f,"lazyLoad")&&window.VanduoLifecycle.register(f,"lazyLoad",[()=>{u.unobserve(f,{skipLifecycle:!0})}]),y.observe(f)},unobserve:function(f,h){let d=h||{},p=m.get(f);p&&(p.unobserve(f),typeof p.disconnect=="function"&&p.disconnect(),m.delete(f)),!d.skipLifecycle&&typeof window.VanduoLifecycle<"u"&&window.VanduoLifecycle.has(f,"lazyLoad")&&window.VanduoLifecycle.unregister(f,"lazyLoad")},unobserveAll:function(){Array.from(m.keys()).forEach(function(h){u.unobserve(h)})},loadSection:function(f,h,d){if(typeof f!="string"||!f){console.warn("[VanduoLazyLoad] loadSection() requires a non-empty URL string.");return}if(!(h instanceof Element)){console.warn("[VanduoLazyLoad] loadSection() requires a DOM Element as containerEl.");return}if(!r(f)){console.error("[VanduoLazyLoad] loadSection() blocked cross-origin URL:",f);return}let p=d||{},g=c(p.placeholder);a(h,g),l(h,"lazysection:loading",{url:f}),this.observe(h,function(){let y=new window.AbortController,T=setTimeout(function(){y.abort()},1e4);window.fetch(f,{signal:y.signal}).then(function(w){if(clearTimeout(T),!w.ok)throw new Error("HTTP "+w.status);return w.text()}).then(function(w){a(h,w),l(h,"lazysection:loaded",{url:f}),typeof window.Vanduo<"u"&&window.Vanduo.init(h),typeof p.onLoaded=="function"&&p.onLoaded(h)}).catch(function(w){let L=document.createElement("div");L.className="vd-alert vd-alert-error",L.setAttribute("role","alert");let V=document.createElement("span");V.textContent="Failed to load content. ";let k=document.createElement("small");for(k.style.opacity="0.7",k.textContent=w.message,L.appendChild(V),L.appendChild(k);h.firstChild;)h.removeChild(h.firstChild);h.appendChild(L),l(h,"lazysection:error",{url:f,error:w}),console.error("[VanduoLazyLoad] loadSection failed:",w),typeof p.onError=="function"&&p.onError(w)})},{threshold:p.threshold,rootMargin:p.rootMargin})},init:function(f){let h=this;s(f,"[data-vd-lazy]").forEach(function(p){if(m.has(p)||p.dataset.vdLazyState==="loading"||p.dataset.vdLazyState==="loaded")return;let g=p.getAttribute("data-vd-lazy");if(!g)return;p.dataset.vdLazyState="loading";let y=p.getAttribute("data-vd-lazy-placeholder")||"skeleton";h.loadSection(g,p,{placeholder:y,onLoaded:function(){p.dataset.vdLazyState="loaded"},onError:function(){p.dataset.vdLazyState="error"}})})},destroy:function(f){this.unobserve(f)},destroyAll:function(f){let h=t(f);if(h===document){this.unobserveAll();return}Array.from(m.keys()).forEach(p=>{n(h,p)&&this.unobserve(p)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("lazyLoad",u,{aliases:["LazyLoad"]}),window.VanduoLazyLoad=u})();(function(){"use strict";let m={observers:new Map,init:function(e){window.Vanduo.queryAll(e,"[data-glass-scroll]").forEach(t=>{this.observers.has(t)||this.initElement(t)})},initElement:function(e){let t=e.dataset.glassSentinel,n;if(t&&(n=document.querySelector(t)),n||(n=e.previousElementSibling),!n){e.classList.add("is-glass-active");return}let s=new IntersectionObserver(r=>{r.forEach(a=>{e.classList.toggle("is-glass-active",!a.isIntersecting)})},{threshold:0,rootMargin:"0px"});s.observe(n),this.observers.set(e,s)},destroy:function(e){let t=this.observers.get(e);t&&(t.disconnect(),this.observers.delete(e))},destroyAll:function(){this.observers.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("glassScroll",m),window.VanduoGlassScroll=m})();(function(){"use strict";let e={instances:new Map,init:function(t){window.Vanduo.queryAll(t,".vd-morph, [data-vd-morph]").forEach(function(s){e.instances.has(s)||s.getAttribute("data-vd-morph")!=="manual"&&e.initInstance(s)})},initInstance:function(t){e._ensureLayers(t);let n=[],s=!1,r=function(a){s||(e._runMorph(t,a,function(){s=!1}),s=!0)};t.addEventListener("click",r),n.push(function(){t.removeEventListener("click",r)}),this.instances.set(t,{cleanup:n})},morph:function(t){t&&(this.instances.has(t)||this.initInstance(t),this._runMorph(t,null,null))},destroy:function(t){let n=this.instances.get(t);n&&(n.cleanup.forEach(function(s){s()}),this.instances.delete(t))},destroyAll:function(){this.instances.forEach(function(t,n){e.destroy(n)})},_ensureLayers:function(t){if(!t.querySelector(".vd-morph-wave")){let n=document.createElement("span");n.className="vd-morph-wave",n.setAttribute("aria-hidden","true"),t.insertBefore(n,t.firstChild)}if(!t.querySelector(".vd-morph-shine")){let n=document.createElement("span");n.className="vd-morph-shine",n.setAttribute("aria-hidden","true");let s=t.querySelector(".vd-morph-wave");s&&s.nextSibling?t.insertBefore(n,s.nextSibling):t.insertBefore(n,t.firstChild)}},_runMorph:function(t,n,s){let r=t.querySelector(".vd-morph-wave");if(r){let o=t.getBoundingClientRect(),c=o.left+o.width/2,l=o.top+o.height/2,u=n&&n.clientX||c,f=n&&n.clientY||l;r.style.left=u-o.left+"px",r.style.top=f-o.top+"px"}t.classList.add("is-morphing");let a=750,i=getComputedStyle(t).getPropertyValue("--vd-morph-duration");if(i){let o=parseFloat(i);isNaN(o)||(a=o*(i.indexOf("ms")!==-1?1:1e3))}setTimeout(function(){t.classList.remove("is-morphing");let o=t.querySelector(".vd-morph-current"),c=t.querySelector(".vd-morph-next");o&&c&&(o.classList.remove("vd-morph-current"),o.classList.add("vd-morph-next"),c.classList.remove("vd-morph-next"),c.classList.add("vd-morph-current")),typeof s=="function"&&s()},a)}};typeof window.Vanduo<"u"&&window.Vanduo.register("morph",e),window.VanduoMorph=e})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-expanding-cards").forEach(function(t){t.getAttribute("data-vd-expanding-cards")!=="manual"&&(m.instances.has(t)||m.initContainer(t))})},initContainer:function(e){let t=[],n=function(){return Array.prototype.slice.call(e.querySelectorAll(".vd-expanding-card"))},s=function(c){let l=n();!c||l.indexOf(c)===-1||(l.forEach(function(u){u.classList.toggle("is-active",u===c)}),c.focus({preventScroll:!0}))},r=function(c){let l=c.target,u=l.closest?l.closest(".vd-expanding-card"):null;!u||!e.contains(u)||s(u)},a=function(c){if(c.key!=="ArrowLeft"&&c.key!=="ArrowRight"&&c.key!=="ArrowUp"&&c.key!=="ArrowDown"&&c.key!=="Home"&&c.key!=="End")return;let l=n().filter(function(d){return d.offsetParent!==null||d.getClientRects().length>0});if(!l.length)return;let u=document.activeElement,f=l.indexOf(u);f<0&&(f=l.findIndex(function(d){return d.classList.contains("is-active")})),f<0&&(f=0),!(!(window.getComputedStyle(e).flexDirection==="column")&&(c.key==="ArrowUp"||c.key==="ArrowDown"))&&(c.key==="ArrowLeft"||c.key==="ArrowUp"?(c.preventDefault(),s(l[Math.max(0,f-1)])):c.key==="ArrowRight"||c.key==="ArrowDown"?(c.preventDefault(),s(l[Math.min(l.length-1,f+1)])):c.key==="Home"?(c.preventDefault(),s(l[0])):c.key==="End"&&(c.preventDefault(),s(l[l.length-1])))};e.addEventListener("click",r),t.push(function(){e.removeEventListener("click",r)}),e.addEventListener("keydown",a),t.push(function(){e.removeEventListener("keydown",a)}),n().forEach(function(c){c.hasAttribute("tabindex")||c.setAttribute("tabindex","0"),c.setAttribute("role","button"),c.hasAttribute("aria-pressed")||c.setAttribute("aria-pressed",c.classList.contains("is-active")?"true":"false")});let i=function(){n().forEach(function(c){c.setAttribute("aria-pressed",c.classList.contains("is-active")?"true":"false")})},o=new MutationObserver(i);o.observe(e,{attributes:!0,subtree:!0,attributeFilter:["class"]}),t.push(function(){o.disconnect()}),i(),m.instances.set(e,{cleanup:t})},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(function(n){n()}),this.instances.delete(e))},destroyAll:function(){this.instances.forEach(function(e,t){m.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("expandingCards",m),window.VanduoExpandingCards=m})();(function(){"use strict";function n(i){let o=0;for(let c=0;c<i.length&&i[c].classList.contains("is-revealed");c++)o++;return o}function s(i){return i.parentElement||document.body}function r(i,o,c){o.forEach(function(I){I.classList.remove("is-revealed")});let l=s(i),u=l.querySelector("[data-vd-timeline-prev]"),f=l.querySelector("[data-vd-timeline-next]"),h=l.querySelector("[data-vd-timeline-play]"),d=l.querySelector("[data-vd-timeline-pause]"),p=null,g=!1,y=0;function T(){let I=n(o),S=o.length;if(u){let M=I===0;u.disabled=M,u.setAttribute("aria-disabled",M?"true":"false")}if(f){let M=I>=S;f.disabled=M,f.setAttribute("aria-disabled",M?"true":"false")}h&&h.setAttribute("aria-pressed",g?"true":"false"),d&&(d.disabled=!g)}function w(){let I=n(o);I<o.length&&o[I].classList.add("is-revealed"),T()}function L(){let I=n(o);I>0&&o[I-1].classList.remove("is-revealed"),T()}function V(){let I=++y;p=setTimeout(function(){if(p=null,!(!g||I!==y)){if(n(o)>=o.length){v();return}if(w(),n(o)>=o.length){v();return}V()}},800)}function k(){g||(g=!0,V(),T())}function v(){g=!1,y++,p&&(clearTimeout(p),p=null),T()}function q(I,S){if(!I)return;let M=function(H){H.preventDefault(),S()};I.addEventListener("click",M),c.push(function(){I.removeEventListener("click",M)})}return q(u,L),q(f,w),q(h,k),q(d,v),c.push(function(){v()}),T(),{stepNext:w,stepPrev:L,play:k,pause:v}}let a={instances:new Map,init:function(i){window.Vanduo.queryAll(i,".vd-timeline.vd-timeline-animated").forEach(function(o){a.instances.has(o)||a.initInstance(o)})},reinit:function(i){a.destroyAll(i),a.init(i)},initInstance:function(i){let o=[],c=Array.prototype.filter.call(i.children,function(h){return h.classList&&h.classList.contains("vd-timeline-item")});if(c.forEach(function(h,d){let p=Math.min(d,7);h.style.setProperty("--vd-timeline-reveal-delay",p*140+"ms")}),typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches){c.forEach(function(h){h.classList.add("is-revealed")}),a.instances.set(i,{cleanup:o});return}if(i.classList&&i.classList.contains("vd-timeline-playback")){let h=r(i,c,o);a.instances.set(i,{cleanup:o,playback:h});return}if(typeof IntersectionObserver>"u"){c.forEach(function(h){h.classList.add("is-revealed")}),a.instances.set(i,{cleanup:o});return}let f=new IntersectionObserver(function(h){h.forEach(function(d){d.isIntersecting&&(d.target.classList.add("is-revealed"),f.unobserve(d.target))})},{root:null,rootMargin:"0px 0px -10% 0px",threshold:.15});c.forEach(function(h){f.observe(h)}),o.push(function(){f.disconnect()}),a.instances.set(i,{cleanup:o})},destroy:function(i){let o=this.instances.get(i);o&&(o.cleanup.forEach(function(c){c()}),this.instances.delete(i))},destroyAll:function(i){let o=window.Vanduo&&typeof window.Vanduo._normalizeRoot=="function"?window.Vanduo._normalizeRoot(i):document;this.instances.forEach(function(c,l){o!==document&&o!==l&&(!o.contains||!o.contains(l))||a.destroy(l)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("timeline",a),window.VanduoTimeline=a})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-flow, .vd-carousel").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=e.querySelector(".vd-flow-track");if(!t)return;let n=Array.from(t.querySelectorAll(".vd-flow-slide"));if(n.length===0)return;let s=e.classList.contains("vd-flow-fade"),r=e.hasAttribute("data-vd-autoplay"),a=parseInt(e.getAttribute("data-vd-interval"),10)||5e3,i=e.getAttribute("data-vd-loop")!=="false",o={current:0,total:n.length,autoplayTimer:null,isFade:s,loop:i,isDragging:!1,startX:0,currentX:0,threshold:50},c=[];n.forEach((v,q)=>{v.setAttribute("role","group"),v.setAttribute("aria-roledescription","slide"),v.setAttribute("aria-label","Slide "+(q+1)+" of "+n.length),q===0&&v.classList.add("is-active")}),e.setAttribute("role","region"),e.setAttribute("aria-roledescription","carousel"),e.getAttribute("aria-label")||e.setAttribute("aria-label","Carousel");let l=document.createElement("div");l.setAttribute("aria-live","polite"),l.setAttribute("aria-atomic","true"),l.className="sr-only",l.style.cssText="position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);",e.appendChild(l);let u=(v,q)=>{q===void 0&&(q=!0);let I=v;o.loop?I=(v%o.total+o.total)%o.total:I=Math.max(0,Math.min(v,o.total-1));let S=o.current;o.current=I,o.isFade?n.forEach((H,F)=>{H.classList.toggle("is-active",F===I)}):t.style.transform="translateX(-"+I*100+"%)",e.querySelectorAll(".vd-flow-indicator").forEach((H,F)=>{H.classList.toggle("is-active",F===I),H.setAttribute("aria-selected",F===I?"true":"false")}),n.forEach((H,F)=>{H.setAttribute("aria-hidden",F!==I?"true":"false")}),q&&(l.textContent="Slide "+(I+1)+" of "+o.total),e.dispatchEvent(new CustomEvent("flow:change",{detail:{current:I,previous:S,total:o.total}}))},f=()=>u(o.current+1),h=()=>u(o.current-1),d=e.querySelector(".vd-flow-prev"),p=e.querySelector(".vd-flow-next");if(d){let v=()=>h();d.addEventListener("click",v),c.push(()=>d.removeEventListener("click",v))}if(p){let v=()=>f();p.addEventListener("click",v),c.push(()=>p.removeEventListener("click",v))}e.querySelectorAll(".vd-flow-indicator").forEach((v,q)=>{v.setAttribute("role","tab"),v.setAttribute("aria-selected",q===0?"true":"false"),v.setAttribute("aria-label","Go to slide "+(q+1));let I=()=>u(q);v.addEventListener("click",I),c.push(()=>v.removeEventListener("click",I))});let y=v=>{v.key==="ArrowLeft"&&(h(),v.preventDefault()),v.key==="ArrowRight"&&(f(),v.preventDefault())};e.setAttribute("tabindex","0"),e.addEventListener("keydown",y),c.push(()=>e.removeEventListener("keydown",y));let T=v=>{o.isDragging=!0,o.startX=v.clientX||v.touches&&v.touches[0].clientX||0,o.currentX=o.startX,e.classList.add("is-dragging")},w=v=>{o.isDragging&&(o.currentX=v.clientX||v.touches&&v.touches[0].clientX||0)},L=()=>{if(!o.isDragging)return;o.isDragging=!1,e.classList.remove("is-dragging");let v=o.startX-o.currentX;Math.abs(v)>o.threshold&&(v>0?f():h())};e.addEventListener("mousedown",T),e.addEventListener("mousemove",w),e.addEventListener("mouseup",L),e.addEventListener("mouseleave",L),e.addEventListener("touchstart",T,{passive:!0}),e.addEventListener("touchmove",w,{passive:!0}),e.addEventListener("touchend",L),c.push(()=>e.removeEventListener("mousedown",T),()=>e.removeEventListener("mousemove",w),()=>e.removeEventListener("mouseup",L),()=>e.removeEventListener("mouseleave",L),()=>e.removeEventListener("touchstart",T),()=>e.removeEventListener("touchmove",w),()=>e.removeEventListener("touchend",L));let V=()=>{k(),o.autoplayTimer=setInterval(f,a)},k=()=>{o.autoplayTimer&&(clearInterval(o.autoplayTimer),o.autoplayTimer=null)};if(r){V();let v=()=>k(),q=()=>V();e.addEventListener("mouseenter",v),e.addEventListener("mouseleave",q),e.addEventListener("focusin",v),e.addEventListener("focusout",q),c.push(()=>e.removeEventListener("mouseenter",v),()=>e.removeEventListener("mouseleave",q),()=>e.removeEventListener("focusin",v),()=>e.removeEventListener("focusout",q),()=>k())}u(0,!1),this.instances.set(e,{cleanup:c,goTo:u,next:f,prev:h,getState:()=>({...o})})},goTo:function(e,t){let n=this.instances.get(e);n&&n.goTo(t)},next:function(e){let t=this.instances.get(e);t&&t.next()},prev:function(e){let t=this.instances.get(e);t&&t.prev()},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("flow",m),window.VanduoFlow=m})();(function(){"use strict";let m={instances:new Map,_globalCleanups:[],init:function(e){if(window.Vanduo.queryAll(e,"[data-vd-bubble], [data-vd-popover]").forEach(n=>{this.instances.has(n)||this.initInstance(n)}),this._globalCleanups.length===0){let n=r=>{this.instances.forEach((a,i)=>{!a.popover.contains(r.target)&&!i.contains(r.target)&&this.hide(i)})},s=r=>{r.key==="Escape"&&this.instances.forEach((a,i)=>this.hide(i))};document.addEventListener("click",n,!0),document.addEventListener("keydown",s),this._globalCleanups.push(()=>document.removeEventListener("click",n,!0),()=>document.removeEventListener("keydown",s))}},initInstance:function(e){let t=[],n=e.getAttribute("data-vd-bubble-placement")||e.getAttribute("data-vd-popover-placement")||"bottom",s=document.createElement("div");s.className="vd-bubble-content",s.setAttribute("role","dialog"),s.setAttribute("aria-modal","false"),s.setAttribute("data-placement",n);let r=e.getAttribute("data-vd-bubble-title")||e.getAttribute("data-vd-popover-title"),a=e.getAttribute("data-vd-bubble")||e.getAttribute("data-vd-popover")||"",i=e.getAttribute("data-vd-bubble-html")||e.getAttribute("data-vd-popover-html"),o=e.hasAttribute("data-vd-bubble-allow-svg")||e.hasAttribute("data-vd-popover-allow-svg");if(r){let f=document.createElement("div");f.className="vd-bubble-header";let h=document.createElement("span");h.textContent=r;let d=document.createElement("button");d.className="vd-bubble-close",d.setAttribute("aria-label","Close"),d.innerHTML="×",f.appendChild(h),f.appendChild(d),s.appendChild(f);let p=g=>{g.stopPropagation(),this.hide(e)};d.addEventListener("click",p),t.push(()=>d.removeEventListener("click",p))}let c=document.createElement("div");c.className="vd-bubble-body",i?typeof sanitizeHtml=="function"?c.innerHTML=sanitizeHtml(i,{allowSvg:o,allowStyle:!1}):c.textContent=i:c.textContent=a,s.appendChild(c),document.body.appendChild(s);let l="vd-bubble-"+Math.random().toString(36).slice(2,9);s.id=l,e.setAttribute("aria-haspopup","dialog"),e.setAttribute("aria-expanded","false"),e.setAttribute("aria-controls",l);let u=f=>{f.stopPropagation(),s.classList.contains("is-visible")?this.hide(e):(this.hideAll(),this.show(e))};e.addEventListener("click",u),t.push(()=>e.removeEventListener("click",u)),this.instances.set(e,{popover:s,cleanup:t,placement:n})},position:function(e,t,n){let s=e.getBoundingClientRect(),r=t.getBoundingClientRect(),a=10,i,o;switch(n){case"top":i=s.top-r.height-a+window.scrollY,o=s.left+(s.width-r.width)/2+window.scrollX;break;case"left":i=s.top+(s.height-r.height)/2+window.scrollY,o=s.left-r.width-a+window.scrollX;break;case"right":i=s.top+(s.height-r.height)/2+window.scrollY,o=s.right+a+window.scrollX;break;default:i=s.bottom+a+window.scrollY,o=s.left+(s.width-r.width)/2+window.scrollX}o=Math.max(8,Math.min(o,window.innerWidth-r.width-8)),i=Math.max(8,i),t.style.top=i+"px",t.style.left=o+"px"},show:function(e){let t=this.instances.get(e);if(!t)return;let{popover:n,placement:s}=t;n.style.display="block",n.classList.add("is-visible"),e.setAttribute("aria-expanded","true"),requestAnimationFrame(()=>{this.position(e,n,s)}),e.dispatchEvent(new CustomEvent("bubble:show",{bubbles:!0,detail:{trigger:e,placement:s}}))},hide:function(e){let t=this.instances.get(e);t&&(t.popover.classList.remove("is-visible"),e.setAttribute("aria-expanded","false"),e.dispatchEvent(new CustomEvent("bubble:hide",{bubbles:!0,detail:{trigger:e}})))},hideAll:function(){this.instances.forEach((e,t)=>this.hide(t))},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),t.popover.parentNode&&t.popover.parentNode.removeChild(t.popover),e.removeAttribute("aria-haspopup"),e.removeAttribute("aria-expanded"),e.removeAttribute("aria-controls"),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t)),this._globalCleanups.forEach(e=>e()),this._globalCleanups=[]}};typeof window.Vanduo<"u"&&window.Vanduo.register("bubble",m),window.VanduoBubble=m})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,"[data-vd-waypoint-nav], [data-vd-scrollspy-nav]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=Array.from(e.querySelectorAll('a[href^="#"]'));if(t.length===0)return;let n=[],s=parseInt(e.getAttribute("data-vd-waypoint-offset")||"80",10),r=[];if(t.forEach(l=>{let u=l.getAttribute("href").slice(1),f=document.getElementById(u);f&&(f.setAttribute("data-vd-waypoint-section",""),r.push({id:u,link:l,section:f}))}),r.length===0)return;let a=new Set,i=l=>{t.forEach(f=>f.classList.remove("is-active"));let u=t.find(f=>f.getAttribute("href")==="#"+l);u&&(u.classList.add("is-active"),e.dispatchEvent(new CustomEvent("waypoint:change",{detail:{activeId:l,link:u}})))},o="-"+s+"px 0px -40% 0px",c=new IntersectionObserver(l=>{l.forEach(u=>{u.isIntersecting?a.add(u.target.id):a.delete(u.target.id)});for(let u=0;u<r.length;u++)if(a.has(r[u].id)){i(r[u].id);return}},{rootMargin:o,threshold:0});r.forEach(l=>c.observe(l.section)),t.forEach(l=>{let u=f=>{f.preventDefault();let h=l.getAttribute("href").slice(1),d=document.getElementById(h);d&&(d.scrollIntoView({behavior:"smooth"}),i(h))};l.addEventListener("click",u),n.push(()=>l.removeEventListener("click",u))}),n.push(()=>c.disconnect()),this.instances.set(e,{observer:c,cleanup:n,sections:r,setActive:i})},refresh:function(e){this.destroy(e),this.initInstance(e)},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("waypoint",m),window.VanduoWaypoint=m})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-ripple, [data-vd-ripple]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[],n=s=>{let r=e.getBoundingClientRect(),a=Math.max(r.width,r.height),i=(s.clientX||s.touches&&s.touches[0].clientX||r.left+r.width/2)-r.left-a/2,o=(s.clientY||s.touches&&s.touches[0].clientY||r.top+r.height/2)-r.top-a/2,c=document.createElement("span");c.className="vd-ripple-wave",c.style.width=a+"px",c.style.height=a+"px",c.style.left=i+"px",c.style.top=o+"px",e.appendChild(c),c.addEventListener("animationend",()=>{c.parentNode&&c.parentNode.removeChild(c)})};e.addEventListener("mousedown",n),e.addEventListener("touchstart",n,{passive:!0}),t.push(()=>e.removeEventListener("mousedown",n),()=>e.removeEventListener("touchstart",n)),this.instances.set(e,{cleanup:t})},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),e.querySelectorAll(".vd-ripple-wave").forEach(n=>n.remove()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("ripple",m),window.VanduoRipple=m})();(function(){"use strict";function m(n){if(!n||n===document.body)return!1;let s=window.getComputedStyle(n),r=s.overflowY,a=s.overflowX,i=/(auto|scroll|overlay)/.test(r)&&n.scrollHeight>n.clientHeight,o=/(auto|scroll|overlay)/.test(a)&&n.scrollWidth>n.clientWidth;return i||o}function e(n){let s=n.parentElement;for(;s&&s!==document.body&&s!==document.documentElement;){if(m(s))return s;s=s.parentElement}return null}let t={instances:new Map,init:function(n){window.Vanduo.queryAll(n,".vd-affix, .vd-sticky, [data-vd-affix]").forEach(r=>{this.instances.has(r)||this.initInstance(r)})},initInstance:function(n){let s=[],r=parseInt(n.getAttribute("data-vd-affix-offset")||"0",10),a=Number.isNaN(r)?0:r,i=e(n),o=!1,c=document.createElement("div");c.style.cssText="display:block;height:1px;margin-bottom:-1px;visibility:hidden;pointer-events:none;",n.parentNode.insertBefore(c,n),n.style.setProperty("--vd-affix-top-offset",a+"px");function l(){o||(o=!0,n.classList.add("is-stuck"),n.dispatchEvent(new CustomEvent("affix:stuck",{bubbles:!0,detail:{offset:a,root:i||window}})))}function u(){o&&(o=!1,n.classList.remove("is-stuck"),n.dispatchEvent(new CustomEvent("affix:unstuck",{bubbles:!0,detail:{offset:a,root:i||window}})))}let f=new IntersectionObserver(function(h){h.forEach(d=>{d.isIntersecting?u():l()})},{root:i,rootMargin:"-"+a+"px 0px 0px 0px",threshold:0});f.observe(c),s.push(()=>f.disconnect(),()=>{c.parentNode&&c.parentNode.removeChild(c)},()=>{n.classList.remove("is-stuck"),n.style.removeProperty("--vd-affix-top-offset")}),this.instances.set(n,{cleanup:s,observer:f,sentinel:c,scrollParent:i})},destroy:function(n){let s=this.instances.get(n);s&&(s.cleanup.forEach(r=>r()),n.classList.remove("is-stuck"),this.instances.delete(n))},destroyAll:function(){this.instances.forEach((n,s)=>this.destroy(s))}};typeof window.Vanduo<"u"&&window.Vanduo.register("affix",t),window.VanduoAffix=t})();(function(){"use strict";function m(t,n){try{let s=new URL(t,window.location.href);return s.origin===window.location.origin?!0:n.includes(s.origin)}catch{return!1}}let e={instances:new Map,init:function(t){window.Vanduo.queryAll(t,"[data-vd-suggest], [data-vd-autocomplete]").forEach(s=>{this.instances.has(s)||this.initInstance(s)})},initInstance:function(t){let n=[],s=parseInt(t.getAttribute("data-vd-suggest-min-chars")||"1",10),r=t.getAttribute("data-vd-suggest-url")||"",i=(t.getAttribute("data-vd-suggest-allowlist")||"").split(",").map(S=>S.trim()).filter(Boolean),o=t.getAttribute("data-vd-suggest")||t.getAttribute("data-vd-autocomplete")||"",c=[];try{c=JSON.parse(o)}catch{c=o.split(",").map(M=>M.trim()).filter(Boolean)}let l=t.closest(".vd-suggest-wrapper, .vd-autocomplete-wrapper");l||(l=document.createElement("div"),l.className="vd-suggest-wrapper",t.parentNode.insertBefore(l,t),l.appendChild(t));let u=document.createElement("ul");u.className="vd-suggest-list",u.setAttribute("role","listbox");let f="vd-suggest-"+Math.random().toString(36).slice(2,9);u.id=f,l.appendChild(u),t.setAttribute("role","combobox"),t.setAttribute("aria-autocomplete","list"),t.setAttribute("aria-expanded","false"),t.setAttribute("aria-controls",f),t.setAttribute("autocomplete","off");let h=-1,d=[],p=null,g=(S,M)=>{if(u.innerHTML="",d=S,h=-1,S.length===0){let H=document.createElement("li");H.className="vd-suggest-empty",H.textContent="No results",u.appendChild(H);return}S.forEach((H,F)=>{let $=document.createElement("li");$.className="vd-suggest-item",$.setAttribute("role","option"),$.id=f+"-item-"+F;let Z=typeof H=="object"&&(H.label||H.text)||String(H);if(M){let Q=Z.toLowerCase(),R=M.toLowerCase(),G=0,j=Q.indexOf(R,G);for(;j!==-1;){j>G&&$.appendChild(document.createTextNode(Z.slice(G,j)));let J=document.createElement("span");J.className="vd-suggest-match",J.textContent=Z.slice(j,j+M.length),$.appendChild(J),G=j+M.length,j=Q.indexOf(R,G)}G<Z.length&&$.appendChild(document.createTextNode(Z.slice(G)))}else $.textContent=Z;$.addEventListener("click",()=>w(F)),u.appendChild($)})},y=()=>{u.classList.add("is-open"),t.setAttribute("aria-expanded","true")},T=()=>{u.classList.remove("is-open"),t.setAttribute("aria-expanded","false"),h=-1,t.removeAttribute("aria-activedescendant")},w=S=>{let M=d[S],H=typeof M=="object"&&(M.value||M.label)||String(M);t.value=H,T(),t.dispatchEvent(new CustomEvent("suggest:select",{detail:{value:H,item:M,index:S},bubbles:!0}))},L=S=>{let M=u.querySelectorAll(".vd-suggest-item");M.forEach(H=>H.classList.remove("is-highlighted")),S>=0&&S<M.length&&(h=S,M[S].classList.add("is-highlighted"),t.setAttribute("aria-activedescendant",M[S].id),M[S].scrollIntoView({block:"nearest"}))},V=async S=>{if(S.length<s){T();return}let M;if(r)try{if(!m(r,i))console.warn("[VanduoSuggest] Blocked non-allowlisted URL:",r),M=[];else{let H=r.includes("?")?"&":"?";M=await(await window.fetch(r+H+"q="+encodeURIComponent(S))).json()}}catch{M=[]}else{let H=S.toLowerCase();M=c.filter(F=>(typeof F=="object"&&(F.label||F.text)||String(F)).toLowerCase().includes(H))}g(M,S),M.length>0,y()},k=()=>{clearTimeout(p),p=setTimeout(()=>V(t.value),200)},v=S=>{if(!u.classList.contains("is-open")){S.key==="ArrowDown"&&(V(t.value),S.preventDefault());return}let M=d.length;switch(S.key){case"ArrowDown":S.preventDefault(),L(h<M-1?h+1:0);break;case"ArrowUp":S.preventDefault(),L(h>0?h-1:M-1);break;case"Enter":S.preventDefault(),h>=0&&w(h);break;case"Escape":T();break}},q=()=>{setTimeout(T,200)},I=()=>{t.value.length>=s&&V(t.value)};t.addEventListener("input",k),t.addEventListener("keydown",v),t.addEventListener("blur",q),t.addEventListener("focus",I),n.push(()=>t.removeEventListener("input",k),()=>t.removeEventListener("keydown",v),()=>t.removeEventListener("blur",q),()=>t.removeEventListener("focus",I),()=>clearTimeout(p),()=>{u.parentNode&&u.parentNode.removeChild(u)}),this.instances.set(t,{cleanup:n,list:u,close:T})},destroy:function(t){let n=this.instances.get(t);n&&(n.cleanup.forEach(s=>s()),this.instances.delete(t))},destroyAll:function(){this.instances.forEach((t,n)=>this.destroy(n))}};typeof window.Vanduo<"u"&&window.Vanduo.register("suggest",e),window.VanduoSuggest=e})();(function(){"use strict";let m={instances:new Map,rules:{required:e=>e.trim().length>0,email:e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e),url:e=>{try{return new URL(e),!0}catch{return!1}},number:e=>!isNaN(parseFloat(e))&&isFinite(e),min:(e,t)=>e.length>=parseInt(t,10),max:(e,t)=>e.length<=parseInt(t,10),minVal:(e,t)=>parseFloat(e)>=parseFloat(t),maxVal:(e,t)=>parseFloat(e)<=parseFloat(t),pattern:(e,t)=>{try{return t.length>100?!1:new RegExp(t).test(e)}catch{return!1}},match:(e,t)=>{try{let n=typeof CSS<"u"&&CSS.escape?CSS.escape(t):t,s=document.querySelector('[name="'+n+'"]');return s?e===s.value:!1}catch{return!1}}},messages:{required:"This field is required",email:"Please enter a valid email address",url:"Please enter a valid URL",number:"Please enter a valid number",min:"Minimum {0} characters required",max:"Maximum {0} characters allowed",minVal:"Value must be at least {0}",maxVal:"Value must be at most {0}",pattern:"Invalid format",match:"Fields do not match"},init:function(e){window.Vanduo.queryAll(e,"[data-vd-validate], .vd-validate").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[],n=e.getAttribute("data-vd-validate-mode")||"blur",s=e.querySelectorAll("[data-vd-rules]"),r=o=>{let l=(o.getAttribute("data-vd-rules")||"").split("|").map(h=>h.trim()).filter(Boolean),u=o.value,f=[];for(let h of l){let[d,...p]=h.split(":"),g=p.join(":"),y=this.rules[d];if(y&&!y(u,g)){let w=o.getAttribute("data-vd-msg-"+d)||this.messages[d]||"Invalid";g&&(w=w.replace("{0}",g)),f.push(w);break}}return this.setFieldState(o,f),f.length===0},a=()=>{let o=!0;return s.forEach(c=>{r(c)||(o=!1)}),o};s.forEach(o=>{if(n==="input"||n==="blur"){let c=n==="input"?"input":"blur",l=()=>r(o);if(o.addEventListener(c,l),t.push(()=>o.removeEventListener(c,l)),n==="blur"){let u=()=>{(o.classList.contains("is-invalid")||o.classList.contains("is-valid"))&&r(o)};o.addEventListener("input",u),t.push(()=>o.removeEventListener("input",u))}}});let i=o=>{let c=a();if(!c){o.preventDefault(),o.stopPropagation();let l=e.querySelector(".is-invalid");l&&l.focus()}e.dispatchEvent(new CustomEvent("validate:submit",{detail:{valid:c},bubbles:!0}))};e.addEventListener("submit",i),t.push(()=>e.removeEventListener("submit",i)),this.instances.set(e,{cleanup:t,validateAll:a,validateField:r})},setFieldState:function(e,t){let n=e.closest(".vd-form-group")||e.parentElement,s=n.querySelector(".vd-validate-error");e.classList.remove("is-valid","is-invalid"),t.length>0?(e.classList.add("is-invalid"),e.setAttribute("aria-invalid","true"),s||(s=document.createElement("div"),s.className="vd-validate-error",s.id="vd-err-"+Math.random().toString(36).slice(2,9),s.setAttribute("role","alert"),n.appendChild(s)),s.textContent=t[0],s.style.display="",e.setAttribute("aria-describedby",s.id)):e.value.trim()?(e.classList.add("is-valid"),e.removeAttribute("aria-invalid"),s&&(s.style.display="none")):(e.removeAttribute("aria-invalid"),s&&(s.style.display="none"))},validateForm:function(e){let t=this.instances.get(e);return t?t.validateAll():!1},addRule:function(e,t,n){this.rules[e]=t,n&&(this.messages[e]=n)},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("validate",m),window.VanduoValidate=m})();(function(){"use strict";let m=["Su","Mo","Tu","We","Th","Fr","Sa"],e=["January","February","March","April","May","June","July","August","September","October","November","December"];function t(d){return d.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function n(d){let p="^",g=[],y=0;for(;y<d.length;){let T=d.slice(y);T.toLowerCase().startsWith("yyyy")?(p+="(\\d{4})",g.push("y"),y+=4):T.toLowerCase().startsWith("mm")?(p+="(\\d{2})",g.push("m"),y+=2):T.toLowerCase().startsWith("dd")?(p+="(\\d{2})",g.push("d"),y+=2):(p+=t(d[y]),y++)}return p+="$",{regex:new RegExp(p),order:g}}function s(d,p){if(!d||!p)return null;let{regex:g,order:y}=n(p),T=d.trim().match(g);if(!T)return null;let w,L,V,k=1;for(let q=0;q<y.length;q++){let I=y[q],S=parseInt(T[k++],10);if(Number.isNaN(S))return null;I==="y"?w=S:I==="m"?L=S-1:I==="d"&&(V=S)}if(w===void 0||L===void 0||V===void 0)return null;let v=new Date(w,L,V);return v.getFullYear()!==w||v.getMonth()!==L||v.getDate()!==V?null:v}function r(d,p){let g=String(d.getFullYear()),y=String(d.getMonth()+1).padStart(2,"0"),T=String(d.getDate()).padStart(2,"0"),w="",L=0;for(;L<p.length;){let V=p.slice(L);V.toLowerCase().startsWith("yyyy")?(w+=g,L+=4):V.toLowerCase().startsWith("mm")?(w+=y,L+=2):V.toLowerCase().startsWith("dd")?(w+=T,L+=2):(w+=p[L],L++)}return w}function a(d){return d.getFullYear()+"-"+String(d.getMonth()+1).padStart(2,"0")+"-"+String(d.getDate()).padStart(2,"0")}function i(d,p){let g=new Date(d.getFullYear(),d.getMonth(),d.getDate());return g.setDate(g.getDate()+p),g}function o(d,p){return new Date(d.getFullYear(),d.getMonth()+p,d.getDate())}function c(d){if(!d||typeof d!="string")return null;let p=/^(\d{4})-(\d{2})-(\d{2})$/.exec(d.trim());if(!p)return null;let g=+p[1],y=+p[2]-1,T=+p[3],w=new Date(g,y,T);return w.getFullYear()!==g||w.getMonth()!==y||w.getDate()!==T?null:w}function l(d){let p=new Date(d.getFullYear(),d.getMonth(),d.getDate()),g=p.getDay();return p.setDate(p.getDate()-g),p}function u(d){let p=new Date(d.getFullYear(),d.getMonth(),d.getDate()),g=p.getDay();return p.setDate(p.getDate()+(6-g)),p}function f(d,p,g){let T=g??4,w=d.getBoundingClientRect();p.style.minWidth=Math.max(w.width,0)+"px";let L=w.bottom+T,V=w.left;p.style.top=L+"px",p.style.left=V+"px";let k=p.getBoundingClientRect();k.bottom>window.innerHeight-8&&w.top-k.height>8&&(L=w.top-k.height-T,p.style.top=L+"px");let v=p.getBoundingClientRect();V=w.left,V+v.width>window.innerWidth-8&&(V=window.innerWidth-v.width-8),p.style.left=Math.max(8,V)+"px"}let h={instances:new Map,init:function(d){window.Vanduo.queryAll(d,"[data-vd-datepicker]").forEach(g=>{this.instances.has(g)||this.initInstance(g)})},initInstance:function(d){let p=[],g=d.getAttribute("data-vd-datepicker-format")||"YYYY-MM-DD",y=d.getAttribute("data-vd-datepicker-min"),T=d.getAttribute("data-vd-datepicker-max"),w=y?c(y):null,L=T?c(T):null,V=new Date,k=V.getFullYear(),v=V.getMonth(),q=null,I="days",S=null,M=!1,H=0,F=A=>!!(w&&new Date(A.getFullYear(),A.getMonth(),A.getDate()).getTime()<w.getTime()||L&&new Date(A.getFullYear(),A.getMonth(),A.getDate()).getTime()>L.getTime()),$=(A,D)=>{if(!w&&!L)return{y:A,m:D};let E=new Date(A,D,1),C=new Date(A,D+1,0);return w&&C.getTime()<w.getTime()?{y:w.getFullYear(),m:w.getMonth()}:L&&E.getTime()>L.getTime()?{y:L.getFullYear(),m:L.getMonth()}:{y:A,m:D}},Z=(A,D)=>{let E=new Date(A,D+1,0).getDate();for(let C=1;C<=E;C++){let N=new Date(A,D,C);if(!F(N))return N}return new Date(A,D,1)};if(d.value){let A=d.value.trim(),D=s(A,g);if(!D){let E=new Date(A);isNaN(E.getTime())||(D=E)}D&&(q=D,k=D.getFullYear(),v=D.getMonth())}let Q=$(k,v);k=Q.y,v=Q.m;let R=document.createElement("div");R.className="vd-datepicker-popup",R.setAttribute("role","dialog"),R.setAttribute("aria-label","Choose date"),R.tabIndex=-1;let G=document.createElement("div");G.className="vd-suggest-wrapper",G.style.position="relative",G.style.display="inline-block",d.parentNode.insertBefore(G,d),G.appendChild(d),document.body.appendChild(R);let j=(A,D)=>A&&D&&A.getFullYear()===D.getFullYear()&&A.getMonth()===D.getMonth()&&A.getDate()===D.getDate(),J=A=>{q=A,k=A.getFullYear(),v=A.getMonth(),d.value=r(A,g),M=!0,b(),d.dispatchEvent(new CustomEvent("datepicker:select",{detail:{date:A,formatted:d.value},bubbles:!0})),d.dispatchEvent(new Event("change",{bubbles:!0})),d.focus()},ce=()=>{if(I!=="days"||!S)return;let A=a(S),D=R.querySelector('[data-vd-date="'+A+'"]');D&&!D.classList.contains("is-outside")&&D.getAttribute("aria-disabled")!=="true"&&D.focus()},ne=(A,D,E)=>{let C=new Date(A.getFullYear(),A.getMonth(),A.getDate()),N=D>0?1:-1;for(let B=0;B<E;B++){if(!F(C))return C;C=i(C,N)}return A},ee=(A,D,E)=>{let C=document.createElement("button");if(C.type="button",C.className="vd-datepicker-day",C.textContent=A,C.setAttribute("role","gridcell"),D)return C.classList.add("is-outside"),C.tabIndex=-1,C.setAttribute("aria-disabled","true"),C;if(C.setAttribute("data-vd-date",a(E)),E&&j(E,V)&&C.classList.add("is-today"),E&&j(E,q)&&C.classList.add("is-selected"),E&&F(E))return C.classList.add("is-disabled"),C.setAttribute("aria-disabled","true"),C.tabIndex=-1,C;if(E){let N=S&&j(E,S);C.tabIndex=N?0:-1,C.addEventListener("click",()=>{q=E,k=E.getFullYear(),v=E.getMonth(),S=new Date(E.getFullYear(),E.getMonth(),E.getDate()),d.value=r(E,g),M=!0,b(),d.dispatchEvent(new CustomEvent("datepicker:select",{detail:{date:E,formatted:d.value},bubbles:!0})),d.dispatchEvent(new Event("change",{bubbles:!0})),d.focus()})}return C},X=()=>{R.innerHTML="";let A=document.createElement("div");A.className="vd-datepicker-header";let D=document.createElement("button");D.type="button",D.className="vd-datepicker-prev",D.innerHTML="‹",D.setAttribute("aria-label","Previous");let E=document.createElement("button");E.type="button",E.className="vd-datepicker-next",E.innerHTML="›",E.setAttribute("aria-label","Next");let C=document.createElement("span");if(C.className="vd-datepicker-title",I==="days")C.textContent=e[v]+" "+k,C.addEventListener("click",()=>{I="months",X()}),D.addEventListener("click",()=>{v--,v<0&&(v=11,k--),X()}),E.addEventListener("click",()=>{v++,v>11&&(v=0,k++),X()});else if(I==="months")C.textContent=String(k),C.addEventListener("click",()=>{I="years",X()}),D.addEventListener("click",()=>{k--,X()}),E.addEventListener("click",()=>{k++,X()});else{let N=Math.floor(k/10)*10;C.textContent=N+" - "+(N+9),D.addEventListener("click",()=>{k-=10,X()}),E.addEventListener("click",()=>{k+=10,X()})}if(A.appendChild(D),A.appendChild(C),A.appendChild(E),R.appendChild(A),I==="days"){let N=document.createElement("div");N.className="vd-datepicker-grid",N.setAttribute("role","grid"),N.setAttribute("aria-label","Calendar");let B=document.createElement("div");B.className="vd-datepicker-weekdays",B.setAttribute("role","row"),m.forEach(function(Y){let W=document.createElement("span");W.setAttribute("role","columnheader"),W.setAttribute("aria-label",Y),W.textContent=Y,B.appendChild(W)}),N.appendChild(B);let K=new Date(k,v,1).getDay(),U=new Date(k,v+1,0).getDate(),pe=new Date(k,v,0).getDate(),oe=[];for(let Y=K-1;Y>=0;Y--){let W=pe-Y,ae=v===0?11:v-1,re=v===0?k-1:k,ge=new Date(re,ae,W);oe.push({day:W,outside:!0,date:ge})}for(let Y=1;Y<=U;Y++){let W=new Date(k,v,Y);oe.push({day:Y,outside:!1,date:W})}let fe=K+U,me=fe%7===0?0:7-fe%7;for(let Y=1;Y<=me;Y++){let W=new Date(k,v+1,Y);oe.push({day:Y,outside:!0,date:W})}for(let Y=0;Y<oe.length;Y+=7){let W=document.createElement("div");W.className="vd-datepicker-row",W.setAttribute("role","row");for(let ae=0;ae<7;ae++){let re=oe[Y+ae];W.appendChild(ee(re.day,re.outside,re.date))}N.appendChild(W)}R.appendChild(N)}else if(I==="months"){let N=document.createElement("div");N.className="vd-datepicker-months",e.forEach((B,K)=>{let U=document.createElement("button");U.type="button",U.className="vd-datepicker-month-btn",U.textContent=B.slice(0,3),q&&q.getFullYear()===k&&q.getMonth()===K&&U.classList.add("is-selected"),U.addEventListener("click",()=>{v=K,I="days",X()}),N.appendChild(U)}),R.appendChild(N)}else{let N=document.createElement("div");N.className="vd-datepicker-years";let B=Math.floor(k/10)*10;for(let K=B-1;K<=B+10;K++){let U=document.createElement("button");U.type="button",U.className="vd-datepicker-year-btn",U.textContent=K,q&&q.getFullYear()===K&&U.classList.add("is-selected"),(K<B||K>B+9)&&(U.style.opacity="0.4"),U.addEventListener("click",()=>{k=K,I="months",X()}),N.appendChild(U)}R.appendChild(N)}R.classList.contains("is-open")&&requestAnimationFrame(ie)},le=A=>{if(!R.classList.contains("is-open")||I!=="days")return;let D=R.querySelector(".vd-datepicker-grid");if(!D||!D.contains(A.target))return;let E=A.key;if(E!=="ArrowLeft"&&E!=="ArrowRight"&&E!=="ArrowUp"&&E!=="ArrowDown"&&E!=="Home"&&E!=="End"&&E!=="PageUp"&&E!=="PageDown"&&E!=="Enter"&&E!==" "&&E!=="Escape")return;if(E==="Escape"){A.preventDefault(),A.stopPropagation(),M=!0,b(),d.focus();return}if(S||(S=Z(k,v)),E==="Enter"||E===" "){A.preventDefault(),S&&!F(S)&&J(new Date(S.getFullYear(),S.getMonth(),S.getDate()));return}A.preventDefault();let C=new Date(S.getFullYear(),S.getMonth(),S.getDate()),N=1;if(E==="ArrowLeft"?(C=i(C,-1),N=-1):E==="ArrowRight"?(C=i(C,1),N=1):E==="ArrowUp"?(C=i(C,-7),N=-1):E==="ArrowDown"?(C=i(C,7),N=1):E==="Home"?(C=l(C),N=1):E==="End"?(C=u(C),N=-1):E==="PageUp"?(C=o(C,-1),N=-1):E==="PageDown"&&(C=o(C,1),N=1),C=ne(C,N,400),C.getMonth()!==v||C.getFullYear()!==k){k=C.getFullYear(),v=C.getMonth();let B=$(k,v);k=B.y,v=B.m}S=C,X(),requestAnimationFrame(ce)},ie=()=>{R.classList.contains("is-open")&&f(d,R)},se=()=>{ie()},de=()=>{H=Date.now()+100},te=()=>{de(),I="days",q&&(k=q.getFullYear(),v=q.getMonth());let A=$(k,v);k=A.y,v=A.m,q?S=new Date(q.getFullYear(),q.getMonth(),q.getDate()):S=Z(k,v),X(),R.classList.add("is-open"),d.setAttribute("aria-expanded","true"),requestAnimationFrame(()=>{ie(),ce()})},b=()=>{R.classList.remove("is-open"),d.setAttribute("aria-expanded","false"),I="days"},x=()=>{if(M){M=!1;return}te()},_=()=>{R.classList.contains("is-open")||te()},P=A=>{if(!A||!(A instanceof Node))return!1;if(A===d||d.contains(A)||R.contains(A))return!0;let D=d.id;if(D){let E=document.querySelector('label[for="'+D.replace(/"/g,'\\"')+'"]');if(E&&(A===E||E.contains(A)))return!0}return!1},z=A=>{Date.now()<H||P(A.target)||b()},O=A=>{A.key==="Escape"&&R.classList.contains("is-open")&&(M=!0,b(),d.focus())};d.addEventListener("focus",x),d.addEventListener("click",_),document.addEventListener("click",z,!0),document.addEventListener("keydown",O),R.addEventListener("keydown",le),window.addEventListener("resize",se),window.addEventListener("scroll",se,!0),d.setAttribute("aria-haspopup","dialog"),d.setAttribute("aria-expanded","false"),d.setAttribute("autocomplete","off"),p.push(()=>d.removeEventListener("focus",x),()=>d.removeEventListener("click",_),()=>document.removeEventListener("click",z,!0),()=>document.removeEventListener("keydown",O),()=>R.removeEventListener("keydown",le),()=>window.removeEventListener("resize",se),()=>window.removeEventListener("scroll",se,!0),()=>R.remove()),this.instances.set(d,{cleanup:p,open:te,close:b,popup:R})},destroy:function(d){let p=this.instances.get(d);p&&(p.cleanup.forEach(g=>g()),this.instances.delete(d))},destroyAll:function(){this.instances.forEach((d,p)=>this.destroy(p))}};typeof window.Vanduo<"u"&&window.Vanduo.register("datepicker",h),window.VanduoDatepicker=h})();(function(){"use strict";function m(t,n,s){let a=s??4,i=t.getBoundingClientRect();n.style.minWidth=Math.max(i.width,0)+"px";let o=i.bottom+a,c=i.left;n.style.top=o+"px",n.style.left=c+"px";let l=n.getBoundingClientRect();l.bottom>window.innerHeight-8&&i.top-l.height>8&&(o=i.top-l.height-a,n.style.top=o+"px");let u=n.getBoundingClientRect();c=i.left,c+u.width>window.innerWidth-8&&(c=window.innerWidth-u.width-8),n.style.left=Math.max(8,c)+"px"}let e={instances:new Map,init:function(t){window.Vanduo.queryAll(t,"[data-vd-timepicker]").forEach(s=>{this.instances.has(s)||this.initInstance(s)})},initInstance:function(t){let n=[],s=t.getAttribute("data-vd-timepicker-format")==="24h",r=parseInt(t.getAttribute("data-vd-timepicker-step")||"30",10),a=t.closest(".vd-suggest-wrapper");a||(a=document.createElement("div"),a.style.position="relative",a.style.display="inline-block",t.parentNode.insertBefore(a,t),a.appendChild(t));let i=document.createElement("div");i.className="vd-timepicker-popup",i.setAttribute("role","listbox"),document.body.appendChild(i);let o=[];for(let y=0;y<24;y++)for(let T=0;T<60;T+=r){let w=String(y).padStart(2,"0"),L=String(T).padStart(2,"0");if(s)o.push({display:w+":"+L,value:w+":"+L});else{let V=y<12?"AM":"PM",v=(y===0?12:y>12?y-12:y)+":"+L+" "+V;o.push({display:v,value:w+":"+L})}}let c=()=>{i.innerHTML="",o.forEach(y=>{let T=document.createElement("div");T.className="vd-timepicker-item",T.setAttribute("role","option"),T.textContent=y.display,(t.value===y.value||t.value===y.display)&&T.classList.add("is-selected"),T.addEventListener("click",()=>{t.value=y.display,i.querySelectorAll(".vd-timepicker-item").forEach(w=>w.classList.remove("is-selected")),T.classList.add("is-selected"),h(),t.dispatchEvent(new CustomEvent("timepicker:select",{detail:{display:y.display,value:y.value},bubbles:!0})),t.dispatchEvent(new Event("change",{bubbles:!0}))}),i.appendChild(T)})},l=()=>{i.classList.contains("is-open")&&m(t,i)},u=()=>{l()},f=()=>{c(),i.classList.add("is-open"),t.setAttribute("aria-expanded","true"),requestAnimationFrame(()=>{l();let y=i.querySelector(".is-selected");y&&y.scrollIntoView({block:"center"})})},h=()=>{i.classList.remove("is-open"),t.setAttribute("aria-expanded","false")},d=()=>f(),p=y=>{!t.contains(y.target)&&!i.contains(y.target)&&h()},g=y=>{y.key==="Escape"&&h()};t.addEventListener("focus",d),document.addEventListener("click",p,!0),document.addEventListener("keydown",g),window.addEventListener("resize",u),window.addEventListener("scroll",u,!0),t.setAttribute("aria-haspopup","listbox"),t.setAttribute("aria-expanded","false"),t.setAttribute("autocomplete","off"),t.readOnly=!0,n.push(()=>t.removeEventListener("focus",d),()=>document.removeEventListener("click",p,!0),()=>document.removeEventListener("keydown",g),()=>window.removeEventListener("resize",u),()=>window.removeEventListener("scroll",u,!0),()=>i.remove()),this.instances.set(t,{cleanup:n,open:f,close:h})},destroy:function(t){let n=this.instances.get(t);n&&(n.cleanup.forEach(s=>s()),this.instances.delete(t))},destroyAll:function(){this.instances.forEach((t,n)=>this.destroy(n))}};typeof window.Vanduo<"u"&&window.Vanduo.register("timepicker",e),window.VanduoTimepicker=e})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-stepper").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[],n=Array.from(e.querySelectorAll(".vd-stepper-item")),s=e.classList.contains("vd-stepper-clickable"),r=n.findIndex(i=>i.classList.contains("is-active"));r===-1&&(r=0);let a=i=>{if(i<0||i>=n.length)return;let o=r;r=i,n.forEach((c,l)=>{c.classList.remove("is-active","is-completed"),l<i?c.classList.add("is-completed"):l===i&&c.classList.add("is-active")}),e.dispatchEvent(new CustomEvent("stepper:change",{detail:{current:i,previous:o,total:n.length},bubbles:!0}))};s&&n.forEach((i,o)=>{let c=()=>a(o);i.addEventListener("click",c),t.push(()=>i.removeEventListener("click",c))}),a(r),this.instances.set(e,{cleanup:t,setStep:a,next:()=>a(r+1),prev:()=>a(r-1),getCurrent:()=>r})},setStep:function(e,t){let n=this.instances.get(e);n&&n.setStep(t)},next:function(e){let t=this.instances.get(e);t&&t.next()},prev:function(e){let t=this.instances.get(e);t&&t.prev()},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("stepper",m),window.VanduoStepper=m})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,"[data-vd-rating]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[],n=parseInt(e.getAttribute("data-vd-rating-max")||"5",10),s=parseFloat(e.getAttribute("data-vd-rating-value")||"0"),r=e.classList.contains("vd-rating-readonly")||e.hasAttribute("data-vd-rating-readonly"),a=s;e.classList.add("vd-rating"),e.setAttribute("role","radiogroup"),e.setAttribute("aria-label",e.getAttribute("aria-label")||"Rating"),e.innerHTML="";let i=[];for(let l=1;l<=n;l++){let u=document.createElement("button");u.type="button",u.className="vd-rating-star",u.setAttribute("role","radio"),u.setAttribute("aria-label",l+" star"+(l>1?"s":"")),u.setAttribute("aria-checked",l<=a?"true":"false"),r&&(u.tabIndex=-1),i.push(u),e.appendChild(u)}let o=document.createElement("span");o.className="vd-rating-value",o.textContent=a>0?a.toString():"",e.appendChild(o);let c=l=>{i.forEach((u,f)=>{u.classList.remove("is-active","is-half");let h=f+1;h<=Math.floor(l)?u.classList.add("is-active"):h-.5<=l&&u.classList.add("is-half"),u.setAttribute("aria-checked",h<=l?"true":"false")}),o.textContent=l>0?l.toString():""};if(c(a),!r){i.forEach((u,f)=>{let h=()=>{i.forEach((g,y)=>{g.classList.toggle("is-hovered",y<=f)})},d=()=>{i.forEach(g=>g.classList.remove("is-hovered"))},p=()=>{a=f+1,e.setAttribute("data-vd-rating-value",a),c(a),e.dispatchEvent(new CustomEvent("rating:change",{detail:{value:a,max:n},bubbles:!0}))};u.addEventListener("mouseenter",h),u.addEventListener("mouseleave",d),u.addEventListener("click",p),t.push(()=>u.removeEventListener("mouseenter",h),()=>u.removeEventListener("mouseleave",d),()=>u.removeEventListener("click",p))});let l=u=>{u.key==="ArrowRight"||u.key==="ArrowUp"?(u.preventDefault(),a<n&&(a++,c(a),i[a-1].focus(),e.dispatchEvent(new CustomEvent("rating:change",{detail:{value:a,max:n},bubbles:!0})))):(u.key==="ArrowLeft"||u.key==="ArrowDown")&&(u.preventDefault(),a>1&&(a--,c(a),i[a-1].focus(),e.dispatchEvent(new CustomEvent("rating:change",{detail:{value:a,max:n},bubbles:!0}))))};e.addEventListener("keydown",l),t.push(()=>e.removeEventListener("keydown",l))}this.instances.set(e,{cleanup:t,getValue:()=>a,setValue:l=>{a=l,c(l)}})},getValue:function(e){let t=this.instances.get(e);return t?t.getValue():0},setValue:function(e,t){let n=this.instances.get(e);n&&n.setValue(t)},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("rating",m),window.VanduoRating=m})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,"[data-vd-transfer]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[];e.classList.add("vd-transfer");let n,s;try{n=JSON.parse(e.getAttribute("data-vd-transfer")||"[]").map((h,d)=>({id:h.id||"item-"+d,label:h.label||h.text||String(h),selected:!1}))}catch{n=[]}s=[];let r=new Set,a=new Set,i=()=>{e.innerHTML="";let f=o("Source",n,r,"source"),h=document.createElement("div");h.className="vd-transfer-actions";let d=document.createElement("button");d.type="button",d.className="vd-transfer-btn",d.innerHTML="›",d.setAttribute("aria-label","Move to target"),d.disabled=r.size===0,d.addEventListener("click",()=>c());let p=document.createElement("button");p.type="button",p.className="vd-transfer-btn",p.innerHTML="‹",p.setAttribute("aria-label","Move to source"),p.disabled=a.size===0,p.addEventListener("click",()=>l()),h.appendChild(d),h.appendChild(p);let g=o("Target",s,a,"target");e.appendChild(f),e.appendChild(h),e.appendChild(g)},o=(f,h,d,p)=>{let g=document.createElement("div");g.className="vd-transfer-panel";let y=document.createElement("div");y.className="vd-transfer-header";let T=document.createElement("span");T.textContent=f;let w=document.createElement("span");w.className="vd-transfer-count",w.textContent=d.size+"/"+h.length,y.appendChild(T),y.appendChild(w),g.appendChild(y);let L=document.createElement("div");L.className="vd-transfer-search";let V=document.createElement("input");V.type="text",V.placeholder="Search...",V.setAttribute("aria-label","Search "+f.toLowerCase()),L.appendChild(V),g.appendChild(L);let k=document.createElement("ul");k.className="vd-transfer-list",k.setAttribute("role","listbox");let v=q=>{k.innerHTML="",(q?h.filter(S=>(S.label||S.text||String(S)).toLowerCase().includes(q.toLowerCase())):h).forEach(S=>{let M=document.createElement("li");M.className="vd-transfer-item",M.setAttribute("role","option"),d.has(S.id)&&M.classList.add("is-selected");let H=document.createElement("input");H.type="checkbox",H.checked=d.has(S.id),H.setAttribute("aria-label",S.label);let F=document.createElement("span");F.textContent=S.label,M.addEventListener("click",()=>{d.has(S.id)?d.delete(S.id):d.add(S.id),i()}),M.appendChild(H),M.appendChild(F),k.appendChild(M)})};return V.addEventListener("input",()=>v(V.value)),v(""),g.appendChild(k),g},c=()=>{let f=n.filter(h=>r.has(h.id));n=n.filter(h=>!r.has(h.id)),s=s.concat(f),r.clear(),i(),u()},l=()=>{let f=s.filter(h=>a.has(h.id));s=s.filter(h=>!a.has(h.id)),n=n.concat(f),a.clear(),i(),u()},u=()=>{e.dispatchEvent(new CustomEvent("transfer:change",{detail:{source:n.map(f=>f.id),target:s.map(f=>f.id)},bubbles:!0}))};i(),this.instances.set(e,{cleanup:t,getTarget:()=>s.map(f=>f.id),getSource:()=>n.map(f=>f.id)})},getSelected:function(e){let t=this.instances.get(e);return t?t.getTarget():[]},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),e.innerHTML="",this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("transfer",m),window.VanduoTransfer=m})();(function(){"use strict";let m={instances:new Map,init:function(e){window.Vanduo.queryAll(e,"[data-vd-tree]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[],n=e.getAttribute("data-vd-tree-cascade")!=="false",s;try{s=JSON.parse(e.getAttribute("data-vd-tree")||"[]")}catch{s=[]}e.classList.add("vd-tree"),e.setAttribute("role","tree");let r=(o,c)=>{c.innerHTML="",o.forEach(l=>{let u=document.createElement("li");u.className="vd-tree-node",u.setAttribute("role","treeitem"),u.setAttribute("aria-expanded",l.open?"true":"false"),l.open&&u.classList.add("is-open");let f=document.createElement("div");if(f.className="vd-tree-node-content",l.children&&l.children.length>0){let d=document.createElement("button");d.type="button",d.className="vd-tree-toggle",d.setAttribute("aria-label","Toggle"),d.addEventListener("click",p=>{p.stopPropagation(),l.open=!l.open,u.classList.toggle("is-open"),u.setAttribute("aria-expanded",l.open?"true":"false")}),f.appendChild(d)}else{let d=document.createElement("span");d.className="vd-tree-toggle-placeholder",f.appendChild(d)}if(e.hasAttribute("data-vd-tree-checkbox")){let d=document.createElement("input");d.type="checkbox",d.className="vd-tree-checkbox",d.checked=!!l.checked,d.setAttribute("aria-label",l.label),d.addEventListener("change",p=>{p.stopPropagation(),l.checked=d.checked,n&&l.children&&(a(l.children,d.checked),r(s,e)),e.dispatchEvent(new CustomEvent("tree:check",{detail:{id:l.id,checked:d.checked,label:l.label},bubbles:!0}))}),f.appendChild(d)}if(l.icon){let d=document.createElement("span");d.className="vd-tree-icon "+l.icon,f.appendChild(d)}let h=document.createElement("span");if(h.className="vd-tree-label",h.textContent=l.label||"",f.appendChild(h),u.appendChild(f),l.children&&l.children.length>0){let d=document.createElement("ul");d.className="vd-tree-children",d.setAttribute("role","group"),r(l.children,d),u.appendChild(d)}c.appendChild(u)})},a=(o,c)=>{o.forEach(l=>{l.checked=c,l.children&&a(l.children,c)})},i=o=>{let c=document.activeElement;if(!e.contains(c))return;let l=Array.from(e.querySelectorAll(".vd-tree-node-content")),u=l.indexOf(c.closest(".vd-tree-node-content"));if(u!==-1)switch(o.key){case"ArrowDown":if(o.preventDefault(),u<l.length-1){let f=l[u+1].querySelector(".vd-tree-toggle, .vd-tree-label");f&&f.focus()}break;case"ArrowUp":if(o.preventDefault(),u>0){let f=l[u-1].querySelector(".vd-tree-toggle, .vd-tree-label");f&&f.focus()}break}};e.addEventListener("keydown",i),t.push(()=>e.removeEventListener("keydown",i)),r(s,e),this.instances.set(e,{cleanup:t,getData:()=>s,getChecked:()=>{let o=[],c=l=>{l.forEach(u=>{u.checked&&o.push(u.id||u.label),u.children&&c(u.children)})};return c(s),o}})},getChecked:function(e){let t=this.instances.get(e);return t?t.getChecked():[]},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),e.innerHTML="",this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("tree",m),window.VanduoTree=m})();(function(){"use strict";let m={_active:!1,_steps:[],_currentStep:0,_elements:{},_cleanup:[],_boundTriggers:new WeakMap,_triggerElement:null,_currentTarget:null,init:function(e){window.Vanduo.queryAll(e,"[data-vd-spotlight]").forEach(n=>{if(this._boundTriggers.has(n))return;let s=r=>{r.preventDefault();let a=this._parseSteps(n.getAttribute("data-vd-spotlight"));a.length!==0&&this.start(a,{trigger:n})};n.addEventListener("click",s),this._boundTriggers.set(n,s)})},_parseSteps:function(e){if(typeof e!="string"||e.trim()==="")return[];try{let t=JSON.parse(e);return this._normalizeSteps(t)}catch(t){return console.error("VanduoSpotlight: invalid data-vd-spotlight payload.",t),[]}},_normalizeStep:function(e){if(!e||typeof e!="object")return null;let t=e.target,n=typeof t=="string"&&t.trim()!=="",s=typeof Element<"u"&&t instanceof Element;if(!n&&!s)return null;let r=typeof e.title=="string"?e.title:"",a=typeof e.description=="string"?e.description:typeof e.content=="string"?e.content:"";return{target:t,title:r,description:a}},_normalizeSteps:function(e){return Array.isArray(e)?e.map(t=>this._normalizeStep(t)).filter(Boolean):[]},start:function(e,t){this._active&&this.stop();let n=this._normalizeSteps(e);if(n.length===0)return;let s=t||{};this._steps=n,this._currentStep=0,this._active=!0,this._triggerElement=s.trigger||(document.activeElement instanceof HTMLElement?document.activeElement:null);let r=document.createElement("div");r.className="vd-spotlight-overlay",r.setAttribute("aria-hidden","true"),document.body.appendChild(r);let a=document.createElement("div");a.className="vd-spotlight-tooltip",a.setAttribute("role","dialog"),a.setAttribute("aria-modal","true"),a.tabIndex=-1,document.body.appendChild(a),this._elements={overlay:r,tooltip:a};let i=c=>{c.key==="Escape"&&this.stop()};document.addEventListener("keydown",i),this._cleanup.push(()=>document.removeEventListener("keydown",i)),r.addEventListener("click",()=>this.stop());let o=()=>{this._active&&this._currentTarget&&this._positionTooltip(this._currentTarget)};window.addEventListener("scroll",o,{passive:!0}),window.addEventListener("resize",o),this._cleanup.push(()=>window.removeEventListener("scroll",o)),this._cleanup.push(()=>window.removeEventListener("resize",o)),this._showStep(this._currentStep)},_positionTooltip:function(e){let t=this._elements.tooltip;if(!t||!e||!e.isConnected)return;let n=e.getBoundingClientRect(),s=t.getBoundingClientRect(),r=n.bottom+12+window.scrollY,a=n.left+(n.width-s.width)/2+window.scrollX;a=Math.max(8,Math.min(a,window.innerWidth-s.width-8)),r+s.height>window.innerHeight+window.scrollY&&(r=n.top-s.height-12+window.scrollY),t.style.top=r+"px",t.style.left=a+"px"},_showStep:function(e){let t=this._steps[e];if(!t)return;let n=typeof t.target=="string"?document.querySelector(t.target):t.target,{tooltip:s}=this._elements;document.querySelectorAll(".vd-spotlight-target").forEach(l=>{l.classList.remove("vd-spotlight-target")}),n&&(n.classList.add("vd-spotlight-target"),n.scrollIntoView({behavior:"smooth",block:"center"}));let r=this._steps.length;if(s.innerHTML="",s.removeAttribute("aria-labelledby"),s.removeAttribute("aria-describedby"),t.title){let l=document.createElement("h4");l.className="vd-spotlight-title",l.id="vd-spotlight-title-"+e+"-"+Date.now(),l.textContent=t.title,s.appendChild(l),s.setAttribute("aria-labelledby",l.id)}if(t.description){let l=document.createElement("p");l.className="vd-spotlight-description",l.id="vd-spotlight-description-"+e+"-"+Date.now(),l.textContent=t.description,s.appendChild(l),s.setAttribute("aria-describedby",l.id)}let a=document.createElement("div");a.className="vd-spotlight-footer",a.setAttribute("aria-label","Step "+(e+1)+" of "+r);let i=document.createElement("span");i.className="vd-spotlight-counter",i.textContent=e+1+" / "+r;let o=document.createElement("div");if(o.className="vd-spotlight-actions",e>0){let l=document.createElement("button");l.type="button",l.className="vd-spotlight-btn",l.textContent="Back",l.addEventListener("click",()=>this.prev()),o.appendChild(l)}let c=document.createElement("button");if(c.type="button",c.className="vd-spotlight-btn",c.textContent="Skip",c.addEventListener("click",()=>this.stop()),o.appendChild(c),e<r-1){let l=document.createElement("button");l.type="button",l.className="vd-spotlight-btn vd-spotlight-btn-primary",l.textContent="Next",l.addEventListener("click",()=>this.next()),o.appendChild(l)}else{let l=document.createElement("button");l.type="button",l.className="vd-spotlight-btn vd-spotlight-btn-primary",l.textContent="Done",l.addEventListener("click",()=>this.stop()),o.appendChild(l)}if(a.appendChild(i),a.appendChild(o),s.appendChild(a),this._currentTarget=n||null,n){let l=0,u=()=>{!this._active||this._currentTarget!==n||(this._positionTooltip(n),l++<30&&requestAnimationFrame(u))};requestAnimationFrame(u)}document.dispatchEvent(new CustomEvent("spotlight:step",{detail:{index:e,step:e,total:r,data:t}}))},next:function(){this._currentStep<this._steps.length-1&&(this._currentStep++,this._showStep(this._currentStep))},prev:function(){this._currentStep>0&&(this._currentStep--,this._showStep(this._currentStep))},stop:function(){if(!this._active)return;let e=this._steps.length,t={completedSteps:e===0?0:Math.min(this._currentStep+1,e),total:e,completed:e>0&&this._currentStep>=e-1};this._active=!1,document.querySelectorAll(".vd-spotlight-target").forEach(n=>{n.classList.remove("vd-spotlight-target")}),this._elements.overlay&&this._elements.overlay.parentNode&&this._elements.overlay.parentNode.removeChild(this._elements.overlay),this._elements.tooltip&&this._elements.tooltip.parentNode&&this._elements.tooltip.parentNode.removeChild(this._elements.tooltip),this._cleanup.forEach(n=>n()),this._cleanup=[],this._elements={},this._steps=[],this._currentStep=0,this._currentTarget=null,this._triggerElement&&this._triggerElement.isConnected&&typeof this._triggerElement.focus=="function"&&this._triggerElement.focus(),this._triggerElement=null,document.dispatchEvent(new CustomEvent("spotlight:end",{detail:t}))},destroyAll:function(){this.stop()}};typeof window.Vanduo<"u"&&window.Vanduo.register("spotlight",m),window.VanduoSpotlight=m})();(function(){"use strict";let m=["top","bottom","left","right"],e=["click","hover","focus"];function n(i){return m.indexOf(i)!==-1?i:"bottom"}function s(i){return i?i.split(/\s+/).filter(function(o){return e.indexOf(o)!==-1}):["click","focus"]}function r(i){let o=i.getAttribute("data-vd-popover-target");if(!o)return null;let l=(i.ownerDocument||document).querySelector(o);return l?(l.classList.contains("vd-popover-panel")||l.classList.add("vd-popover-panel"),l):null}let a={instances:new Map,_globalCleanups:[],init:function(i){let o=i||document,c=o.querySelectorAll?o.querySelectorAll(".vd-popover-trigger"):document.querySelectorAll(".vd-popover-trigger");if(Array.prototype.forEach.call(c,function(l){a.instances.has(l)||a.initInstance(l)}),a._globalCleanups.length===0){let l=function(f){a.instances.forEach(function(h,d){h.trigger==="click"&&(h.panel.contains(f.target)||d.contains(f.target)||a.hide(d))})},u=function(f){if(f.key!=="Escape")return;let h=null;a.instances.forEach(function(d,p){d.panel.hasAttribute("hidden")===!1&&(h=p)}),h&&a.hide(h)};document.addEventListener("click",l,!0),document.addEventListener("keydown",u),a._globalCleanups.push(function(){document.removeEventListener("click",l,!0)}),a._globalCleanups.push(function(){document.removeEventListener("keydown",u)})}},initInstance:function(i){let o=r(i);if(!o)return;let c=[],l=n(i.getAttribute("data-vd-popover-placement")),u=s(i.getAttribute("data-vd-popover-trigger")),f=i.getAttribute("data-vd-popover-flip")!=="false";if(o.id||(o.id="vd-popover-"+Math.random().toString(36).slice(2,9)),o.hasAttribute("role")||o.setAttribute("role","dialog"),o.hasAttribute("aria-modal")||o.setAttribute("aria-modal","false"),i.setAttribute("aria-haspopup","dialog"),i.setAttribute("aria-expanded","false"),i.setAttribute("aria-controls",o.id),u.indexOf("click")!==-1){let d=function(p){p.stopPropagation(),i.getAttribute("aria-expanded")==="true"?a.hide(i):(a._closeOthers(i),a.show(i))};i.addEventListener("click",d),c.push(function(){i.removeEventListener("click",d)})}if(u.indexOf("hover")!==-1){let d=function(){a.show(i)},p=function(){setTimeout(function(){!o.matches(":hover")&&!i.matches(":hover")&&a.hide(i)},80)};i.addEventListener("mouseenter",d),i.addEventListener("mouseleave",p),o.addEventListener("mouseenter",d),o.addEventListener("mouseleave",p),c.push(function(){i.removeEventListener("mouseenter",d)}),c.push(function(){i.removeEventListener("mouseleave",p)}),c.push(function(){o.removeEventListener("mouseenter",d)}),c.push(function(){o.removeEventListener("mouseleave",p)})}if(u.indexOf("focus")!==-1){let d=function(){a.show(i)},p=function(g){o.contains(g.relatedTarget)||a.hide(i)};i.addEventListener("focus",d),i.addEventListener("blur",p),c.push(function(){i.removeEventListener("focus",d)}),c.push(function(){i.removeEventListener("blur",p)})}let h=function(){a.flipPlacement(i)};window.addEventListener("resize",h),window.addEventListener("scroll",h,!0),c.push(function(){window.removeEventListener("resize",h)}),c.push(function(){window.removeEventListener("scroll",h,!0)}),a.instances.set(i,{panel:o,cleanup:c,placement:l,trigger:u.join(" "),allowFlip:f})},show:function(i){let o=a.instances.get(i);o&&(o.panel.hidden=!1,requestAnimationFrame(function(){a.position(i,o.panel,o.placement),i.setAttribute("aria-expanded","true"),o.panel.setAttribute("data-placement",o.placement),i.dispatchEvent(new CustomEvent("popover:show",{bubbles:!0,detail:{trigger:i,placement:o.placement}}))}))},hide:function(i){let o=a.instances.get(i);o&&(o.panel.hidden=!0,i.setAttribute("aria-expanded","false"),i.dispatchEvent(new CustomEvent("popover:hide",{bubbles:!0,detail:{trigger:i}})))},_closeOthers:function(i){a.instances.forEach(function(o,c){c!==i&&a.hide(c)})},position:function(i,o,c){let l=i.getBoundingClientRect(),u=o.getBoundingClientRect(),f=8,h,d,p=o.ownerDocument.defaultView||window,g=p.pageXOffset||0,y=p.pageYOffset||0;switch(c){case"top":h=l.top-u.height-f+y,d=l.left+(l.width-u.width)/2+g;break;case"left":h=l.top+(l.height-u.height)/2+y,d=l.left-u.width-f+g;break;case"right":h=l.top+(l.height-u.height)/2+y,d=l.right+f+g;break;default:h=l.bottom+f+y,d=l.left+(l.width-u.width)/2+g}d=Math.max(8,Math.min(d,p.innerWidth-u.width-8)),h=Math.max(8,h),o.style.position="absolute",o.style.top=h+"px",o.style.left=d+"px"},flipPlacement:function(i){let o=a.instances.get(i);if(!o||!o.allowFlip||o.panel.hidden)return;let c=o.panel.ownerDocument.defaultView||window,l=i.getBoundingClientRect(),u=o.panel.getBoundingClientRect(),f=8,h=null,d=o.placement;d==="top"&&l.top-u.height-f<0?h="bottom":d==="bottom"&&l.bottom+u.height+f>c.innerHeight?h="top":d==="left"&&l.left-u.width-f<0?h="right":d==="right"&&l.right+u.width+f>c.innerWidth&&(h="left"),h&&(o.placement=h,a.position(i,o.panel,h),o.panel.setAttribute("data-placement",h))},destroy:function(i){let o=a.instances.get(i);o&&(o.cleanup.forEach(function(c){c()}),a.hide(i),i.removeAttribute("aria-haspopup"),i.removeAttribute("aria-expanded"),i.removeAttribute("aria-controls"),a.instances.delete(i))},destroyAll:function(i){let o=[];a.instances.forEach(function(c,l){(!i||l.closest&&l.closest(i))&&o.push(l)}),o.forEach(function(c){a.destroy(c)}),a.instances.size===0&&(a._globalCleanups.forEach(function(c){c()}),a._globalCleanups=[])}};typeof window<"u"&&(typeof window.Vanduo<"u"&&typeof window.Vanduo.register=="function"&&window.Vanduo.register("popover",a),window.VanduoPopover=a)})();(function(){"use strict";let e=new Map;function t(i){if(!i||typeof i.name!="string"||i.name.length===0)throw new Error("VanduoSearch.register: source.name is required");if(typeof i.fetch!="function")throw new Error("VanduoSearch.register: source.fetch must be a function");if(e.has(i.name))throw new Error('VanduoSearch.register: source "'+i.name+'" already registered');e.set(i.name,Object.freeze({name:i.name,label:i.label||i.name,icon:i.icon||null,limit:typeof i.limit=="number"?i.limit:10,fetch:i.fetch}))}function n(i){return e.delete(i)}function s(){return Object.freeze(Array.from(e.values()))}function r(i,o){o=o||{};let c=o.signal,l=typeof o.limitPerSource=="number"?o.limitPerSource:null,u=(i||"").trim(),f=Array.from(e.values());if(u.length===0)return Promise.resolve({text:u,sources:f.map(function(d){return{name:d.name,label:d.label,results:[]}})});let h=f.map(function(d){let p=l??d.limit;return Promise.resolve().then(function(){return d.fetch(u,{signal:c,limit:p})}).then(function(g){let y=Array.isArray(g)?g:[];return{name:d.name,label:d.label,results:y}}).catch(function(g){if(g&&g.name==="AbortError")throw g;return{name:d.name,label:d.label,results:[],error:g.message||"fetch failed"}})});return Promise.all(h).then(function(d){return{text:u,sources:d}})}let a={register:t,unregister:n,list:s,query:r};typeof window<"u"&&(typeof window.Vanduo<"u"&&typeof window.Vanduo.register=="function"&&window.Vanduo.register("search",a),window.VanduoSearch=a)})();var he=window.Vanduo;var Ae=he;
|
|
43
49
|
//# sourceMappingURL=vanduo.cjs.min.js.map
|