@vanduo-oss/framework 1.3.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
- /*! Vanduo v1.3.0 | Built: 2026-03-17T16:46:03.216Z | git:ea44b23 | production */
2
- (function(){"use strict";let f={instances:new Map,register:function(e,t,n=[]){if(this.instances.has(e)){let s=this.instances.get(e);s.cleanup=s.cleanup.concat(n);return}this.instances.set(e,{component:t,cleanup:n,registeredAt:Date.now()})},unregister:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(function(n){try{n()}catch(s){console.warn("[Vanduo Lifecycle] Cleanup error:",s)}}),this.instances.delete(e))},destroyAll:function(e){let t=[];this.instances.forEach(function(n,s){(!e||n.component===e)&&t.push(s)}),t.forEach(function(n){f.unregister(n)})},destroyAllInContainer:function(e){let t=[];this.instances.forEach(function(n,s){e.contains(s)&&t.push(s)}),t.forEach(function(n){f.unregister(n)})},getAll:function(){let e=[];return this.instances.forEach(function(t,n){e.push({element:n,component:t.component,registeredAt:t.registeredAt})}),e},has:function(e){return this.instances.has(e)}};window.addEventListener("beforeunload",function(){f.destroyAll()}),window.VanduoLifecycle=f,typeof window.Vanduo<"u"&&window.Vanduo.register("lifecycle",f)})();(function(){"use strict";let e={version:"1.3.0",components:{},init:function(){typeof ready<"u"?ready(()=>{this.initComponents()}):document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{this.initComponents()}):this.initComponents()},initComponents:function(){Object.keys(this.components).forEach(t=>{let n=this.components[t];if(n.init&&typeof n.init=="function")try{n.init()}catch(s){console.warn('[Vanduo] Failed to initialize component "'+t+'":',s)}}),console.log("Vanduo Framework v"+this.version+" initialized")},register:function(t,n){this.components[t]=n},reinit:function(t){let n=this.components[t];if(n&&n.init&&typeof n.init=="function")try{n.init()}catch(s){console.warn('[Vanduo] Failed to reinitialize component "'+t+'":',s)}},destroyAll:function(){let t=Object.keys(this.components);for(let n=0;n<t.length;n++){let s=this.components[t[n]];if(s&&s.destroyAll&&typeof s.destroyAll=="function")try{s.destroyAll()}catch(i){console.warn('[Vanduo] Failed to destroy component "'+t[n]+'":',i)}}typeof window.VanduoLifecycle<"u"&&window.VanduoLifecycle.destroyAll()},getComponent:function(t){return this.components[t]||null}};window.Vanduo=e})();(function(){"use strict";let f={_snippetIdCounter:0,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(){document.querySelectorAll(".vd-code-snippet").forEach(t=>{t.dataset.initialized||this.initSnippet(t)})},initSnippet:function(e){e.dataset.initialized="true",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 a=e.querySelector(".vd-code-snippet-copy");a&&this.initCopyButton(e,a),e.querySelectorAll("[data-extract]").forEach(l=>{this.extractHtml(l)}),e.querySelectorAll(".has-line-numbers").forEach(l=>{this.addLineNumbers(l)})},initCollapsible:function(e,t,n){let s=e.dataset.expanded==="true";t.setAttribute("aria-expanded",s),n.dataset.visible=s,this.addListener(e,t,"click",()=>{let i=e.dataset.expanded==="true";e.dataset.expanded=!i,t.setAttribute("aria-expanded",!i),n.dataset.visible=!i,i||n.querySelectorAll("[data-extract]:not([data-extracted])").forEach(o=>{this.extractHtml(o)});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((a,r)=>{let o=a.dataset.lang,l=a.classList.contains("is-active");a.setAttribute("role","tab"),a.setAttribute("aria-selected",l),a.setAttribute("tabindex",l?"0":"-1"),a.id=a.id||`code-tab-${s}-${o||"tab"}-${r}`;let c=e.querySelector(`.vd-code-snippet-pane[data-lang="${o}"]`);c&&(c.id=c.id||`code-pane-${s}-${o||"pane"}-${r}`,c.setAttribute("role","tabpanel"),a.setAttribute("aria-controls",c.id),c.setAttribute("aria-labelledby",a.id)),this.addListener(e,a,"click",()=>{this.switchTab(e,a,t,n)}),this.addListener(e,a,"keydown",d=>{this.handleTabKeydown(d,e,t,n)})})},switchTab:function(e,t,n,s){let i=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="${i}"]`);a&&a.classList.add("is-active");let r=new CustomEvent("codesnippet:tabchange",{bubbles:!0,detail:{snippet:e,tab:t,lang:i}});e.dispatchEvent(r)},handleTabKeydown:function(e,t,n,s){let i=Array.from(n),a=i.indexOf(e.target),r;switch(e.key){case"ArrowLeft":e.preventDefault(),r=a>0?a-1:i.length-1;break;case"ArrowRight":e.preventDefault(),r=a<i.length-1?a+1:0;break;case"Home":e.preventDefault(),r=0;break;case"End":e.preventDefault(),r=i.length-1;break;default:return}r!==a&&(i[r].focus(),this.switchTab(t,i[r],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;try{await navigator.clipboard.writeText(i),this.showCopyFeedback(t,!0)}catch{let o=this.fallbackCopy(i);this.showCopyFeedback(t,o)}let a=new CustomEvent("codesnippet:copy",{bubbles:!0,detail:{snippet:e,code:i,success:!0}});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"},formatHtml:function(e){e=e.trim();let t=e.split(`
1
+ /*! Vanduo v1.3.1 | Built: 2026-03-20T21:48:40.922Z | git:7e73bb8 | production */
2
+ (function(){"use strict";let f={instances:new Map,register:function(e,t,n=[]){if(this.instances.has(e)){let s=this.instances.get(e);s.cleanup=s.cleanup.concat(n);return}this.instances.set(e,{component:t,cleanup:n,registeredAt:Date.now()})},unregister:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(function(n){try{n()}catch(s){console.warn("[Vanduo Lifecycle] Cleanup error:",s)}}),this.instances.delete(e))},destroyAll:function(e){let t=[];this.instances.forEach(function(n,s){(!e||n.component===e)&&t.push(s)}),t.forEach(function(n){f.unregister(n)})},destroyAllInContainer:function(e){let t=[];this.instances.forEach(function(n,s){e.contains(s)&&t.push(s)}),t.forEach(function(n){f.unregister(n)})},getAll:function(){let e=[];return this.instances.forEach(function(t,n){e.push({element:n,component:t.component,registeredAt:t.registeredAt})}),e},has:function(e){return this.instances.has(e)}};window.addEventListener("beforeunload",function(){f.destroyAll()}),window.VanduoLifecycle=f,typeof window.Vanduo<"u"&&window.Vanduo.register("lifecycle",f)})();(function(){"use strict";let e={version:"1.3.1",components:{},init:function(){typeof ready<"u"?ready(()=>{this.initComponents()}):document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{this.initComponents()}):this.initComponents()},initComponents:function(){Object.keys(this.components).forEach(t=>{let n=this.components[t];if(n.init&&typeof n.init=="function")try{n.init()}catch(s){console.warn('[Vanduo] Failed to initialize component "'+t+'":',s)}}),console.log("Vanduo Framework v"+this.version+" initialized")},register:function(t,n){this.components[t]=n},reinit:function(t){let n=this.components[t];if(n&&n.init&&typeof n.init=="function")try{n.init()}catch(s){console.warn('[Vanduo] Failed to reinitialize component "'+t+'":',s)}},destroyAll:function(){let t=Object.keys(this.components);for(let n=0;n<t.length;n++){let s=this.components[t[n]];if(s&&s.destroyAll&&typeof s.destroyAll=="function")try{s.destroyAll()}catch(i){console.warn('[Vanduo] Failed to destroy component "'+t[n]+'":',i)}}typeof window.VanduoLifecycle<"u"&&window.VanduoLifecycle.destroyAll()},getComponent:function(t){return this.components[t]||null}};window.Vanduo=e})();(function(){"use strict";let f={_snippetIdCounter:0,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(){document.querySelectorAll(".vd-code-snippet").forEach(t=>{t.dataset.initialized||this.initSnippet(t)})},initSnippet:function(e){e.dataset.initialized="true",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 a=e.querySelector(".vd-code-snippet-copy");a&&this.initCopyButton(e,a),e.querySelectorAll("[data-extract]").forEach(c=>{this.extractHtml(c)}),e.querySelectorAll(".has-line-numbers").forEach(c=>{this.addLineNumbers(c)})},initCollapsible:function(e,t,n){let s=e.dataset.expanded==="true";t.setAttribute("aria-expanded",s),n.dataset.visible=s,this.addListener(e,t,"click",()=>{let i=e.dataset.expanded==="true";e.dataset.expanded=!i,t.setAttribute("aria-expanded",!i),n.dataset.visible=!i,i||n.querySelectorAll("[data-extract]:not([data-extracted])").forEach(o=>{this.extractHtml(o)});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((a,r)=>{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"}-${r}`;let l=e.querySelector(`.vd-code-snippet-pane[data-lang="${o}"]`);l&&(l.id=l.id||`code-pane-${s}-${o||"pane"}-${r}`,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",d=>{this.handleTabKeydown(d,e,t,n)})})},switchTab:function(e,t,n,s){let i=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="${i}"]`);a&&a.classList.add("is-active");let r=new CustomEvent("codesnippet:tabchange",{bubbles:!0,detail:{snippet:e,tab:t,lang:i}});e.dispatchEvent(r)},handleTabKeydown:function(e,t,n,s){let i=Array.from(n),a=i.indexOf(e.target),r;switch(e.key){case"ArrowLeft":e.preventDefault(),r=a>0?a-1:i.length-1;break;case"ArrowRight":e.preventDefault(),r=a<i.length-1?a+1:0;break;case"Home":e.preventDefault(),r=0;break;case"End":e.preventDefault(),r=i.length-1;break;default:return}r!==a&&(i[r].focus(),this.switchTab(t,i[r],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,a;try{await navigator.clipboard.writeText(i),a=!0}catch{a=this.fallbackCopy(i)}this.showCopyFeedback(t,a);let r=new CustomEvent("codesnippet:copy",{bubbles:!0,detail:{snippet:e,code:i,success:a}});e.dispatchEvent(r)},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"},formatHtml:function(e){e=e.trim();let t=e.split(`
3
3
  `),n=0,s=2,i=[];return t.forEach(a=>{if(a=a.trim(),!a)return;a.match(/^<\/\w/)&&(n=Math.max(0,n-s)),i.push(" ".repeat(n)+a);let r=/<[a-zA-Z]/.test(a),o=a.includes("/>");r&&!o&&(a.match(/<(br|hr|img|input|meta|link|area|base|col|embed|param|source|track|wbr)/i)||a.match(/<\/\w+>$/)||(n+=s))}),i.join(`
4
4
  `)},escapeHtml:function(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML},highlightHtml:function(e){return e=e.replace(/(&lt;\/?)([\w-]+)/g,'$1<span class="code-tag">$2</span>'),e=e.replace(/([\w-]+)(=)(&quot;|&#39;)/g,'<span class="code-attr">$1</span>$2$3'),e=e.replace(/(&quot;|&#39;)([^&]*)(&quot;|&#39;)/g,'$1<span class="code-string">$2</span>$3'),e=e.replace(/(&lt;!--)(.*?)(--&gt;)/g,'<span class="code-comment">$1$2$3</span>'),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){return["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(n=>{let s=new RegExp(`\\b(${n})\\b`,"g");e=e.replace(s,'<span class="code-keyword">$1</span>')}),e=e.replace(/('(?:[^'\\]|\\.){0,10000}'|"(?:[^"\\]|\\.){0,10000}"|`(?:[^`\\]|\\.){0,10000}`)/g,'<span class="code-string">$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'),e=e.replace(/(\/\/.*$)/gm,'<span class="code-comment">$1</span>'),e=e.replace(/(\/\*[\s\S]*?\*\/)/g,'<span class="code-comment">$1</span>'),e},addLineNumbers:function(e){let t=e.querySelector("code");if(!t)return;let s=t.innerHTML.split(`
5
- `).length,i=document.createElement("div");i.className="vd-code-snippet-line-numbers",i.setAttribute("aria-hidden","true");for(let r=1;r<=s;r++){let o=document.createElement("span");o.textContent=r,i.appendChild(o)}let a=document.createElement("div");a.className="vd-code-snippet-code",a.appendChild(t.cloneNode(!0)),t.parentNode.removeChild(t),e.appendChild(i),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"),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(){document.querySelectorAll('.vd-code-snippet[data-initialized="true"]').forEach(t=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("codeSnippet",f),window.CodeSnippet=f})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll(".vd-collapsible, .accordion").forEach(t=>{this.instances.has(t)||this.initCollapsible(t)})},initCollapsible:function(e){let t=e.classList.contains("accordion"),n=e.querySelectorAll(".vd-collapsible-item, .accordion-item"),s=[];n.forEach(i=>{let a=i.querySelector(".vd-collapsible-header, .accordion-header"),r=i.querySelector(".vd-collapsible-body, .accordion-body"),o=i.querySelector(".vd-collapsible-trigger, .accordion-trigger")||a;if(!a||!r)return;i.classList.contains("is-open")?this.openItem(i,r,!1):this.closeItem(i,r,!1);let l=c=>{c.preventDefault(),this.toggleItem(i,r,e,t)};o.addEventListener("click",l),s.push(()=>o.removeEventListener("click",l))}),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(r=>{if(r!==e){let o=r.querySelector(".vd-collapsible-body, .accordion-body");this.closeItem(r,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"),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",f),window.VanduoCollapsible=f})();(function(){"use strict";let f={instances:new Map,_typeaheadBuffer:"",_typeaheadTimer:null,init:function(){document.querySelectorAll(".vd-dropdown").forEach(t=>{this.instances.has(t)||this.initDropdown(t)})},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=l=>{l.preventDefault(),l.stopPropagation(),this.toggleDropdown(e,t,n)};t.addEventListener("click",i),s.push(()=>t.removeEventListener("click",i));let a=l=>{!e.contains(l.target)&&n.classList.contains("is-open")&&this.closeDropdown(e,t,n)};document.addEventListener("click",a),s.push(()=>document.removeEventListener("click",a));let r=l=>{this.handleKeydown(l,e,t,n)};t.addEventListener("keydown",r),s.push(()=>t.removeEventListener("keydown",r)),n.querySelectorAll(".vd-dropdown-item:not(.disabled):not(.is-disabled)").forEach(l=>{let c=u=>{u.preventDefault(),this.selectItem(l,e,t,n)};l.addEventListener("click",c),s.push(()=>l.removeEventListener("click",c));let d=u=>{(u.key==="Enter"||u.key===" ")&&(u.preventDefault(),this.selectItem(l,e,t,n))};l.addEventListener("keydown",d),s.push(()=>l.removeEventListener("keydown",d))}),this.instances.set(e,{toggle:t,menu:n,cleanup:s})},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 r=a.closest(".vd-dropdown"),o=r.querySelector(".vd-dropdown-toggle");this.closeDropdown(r,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 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,a=window.innerHeight,r=8;n.left+s.width>i-r&&(t.classList.add("vd-dropdown-menu-end"),t.classList.remove("vd-dropdown-menu-start")),t.classList.contains("dropdown-menu-top")?n.top-s.height<r&&t.classList.remove("vd-dropdown-menu-top"):n.bottom+s.height>a-r&&t.classList.add("vd-dropdown-menu-top")},handleKeydown:function(e,t,n,s){let i=s.classList.contains("is-open"),a=Array.from(s.querySelectorAll(".vd-dropdown-item:not(.disabled):not(.is-disabled)")),r=a.findIndex(o=>o===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 o=r<a.length-1?r+1:0;a[o].focus()}break;case"ArrowUp":if(i){e.preventDefault();let o=r>0?r-1:a.length-1;a[o].focus()}break;case"Escape":i&&(e.preventDefault(),this.closeDropdown(t,n,s));break;case"Home":i&&(e.preventDefault(),a[0].focus());break;case"End":i&&(e.preventDefault(),a[a.length-1].focus());break;default:if(i&&e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey){clearTimeout(this._typeaheadTimer),this._typeaheadBuffer+=e.key.toLowerCase();let o=a.find(l=>l.textContent.trim().toLowerCase().startsWith(this._typeaheadBuffer));o&&o.focus(),this._typeaheadTimer=setTimeout(()=>{this._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",f),window.VanduoDropdown=f})();(function(){"use strict";let f={STORAGE_KEY:"vanduo-font-preference",isInitialized:!1,fonts:{system:{name:"System Default",family:null},inter:{name:"Inter",family:"'Inter', sans-serif"},"source-sans":{name:"Source Sans 3",family:"'Source Sans 3', sans-serif"},"fira-sans":{name:"Fira Sans",family:"'Fira Sans', sans-serif"},"ibm-plex":{name:"IBM Plex Sans",family:"'IBM Plex Sans', sans-serif"},"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"},rubik:{name:"Rubik",family:"'Rubik', sans-serif",category:"sans-serif",description:"Modern, geometric"},"titillium-web":{name:"Titillium Web",family:"'Titillium Web', sans-serif",category:"sans-serif",description:"Technical, elegant"}},init:function(){if(this.state={preference:this.getPreference()},this.isInitialized){this.applyFont(),this.renderUI(),this.updateUI();return}this.isInitialized=!0,this.applyFont(),this.renderUI(),console.log("Vanduo Font Switcher initialized")},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(){document.querySelectorAll('[data-toggle="font"]').forEach(t=>{if(t.getAttribute("data-font-initialized")==="true"){t.tagName==="SELECT"&&(t.value=this.state.preference);return}if(t.tagName==="SELECT"){t.value=this.state.preference;let n=s=>{this.setPreference(s.target.value)};t.addEventListener("change",n),t._fontToggleHandler=n}else{let n=()=>{let s=Object.keys(this.fonts),a=(s.indexOf(this.state.preference)+1)%s.length;this.setPreference(s[a])};t.addEventListener("click",n),t._fontToggleHandler=n}t.setAttribute("data-font-initialized","true")})},updateUI:function(){document.querySelectorAll('[data-toggle="font"]').forEach(t=>{if(t.tagName==="SELECT")t.value=this.state.preference;else{let n=t.querySelector(".font-current-label");n&&(n.textContent=this.fonts[this.state.preference].name)}})},getCurrentFont:function(){return this.state.preference},getFontData:function(e){return this.fonts[e]||null},destroyAll:function(){document.querySelectorAll('[data-toggle="font"][data-font-initialized="true"]').forEach(t=>{if(t._fontToggleHandler){let n=t.tagName==="SELECT"?"change":"click";t.removeEventListener(n,t._fontToggleHandler),delete t._fontToggleHandler}t.removeAttribute("data-font-initialized")}),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",f),window.FontSwitcher=f})();(function(){"use strict";let f=(function(){try{return CSS.supports("selector(:has(*))")}catch{return!1}})(),e={instances:new Map,init:function(){document.querySelectorAll("[data-layout-mode]").forEach(function(n){this.instances.has(n)||this.initContainer(n)}.bind(this)),this.initToggleButtons()},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(){document.querySelectorAll("[data-grid-toggle]").forEach(function(n){if(n.getAttribute("data-grid-initialized")==="true")return;let s=function(i){i.preventDefault();let a=n.getAttribute("data-grid-toggle"),r;a?r=document.querySelector(a):r=n.closest("[data-layout-mode]"),r&&this.toggle(r)}.bind(this);n.addEventListener("click",s),n.setAttribute("data-grid-initialized","true"),n.setAttribute("aria-pressed","false"),n._gridCleanup=function(){n.removeEventListener("click",s),n.removeAttribute("data-grid-initialized"),n.removeAttribute("aria-pressed")}}.bind(this))},applyFibFallback:function(t){if(f)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(r){let o=r.getAttribute("data-grid-toggle");if(o&&t.matches(o)){let l=n==="fibonacci";l?r.classList.add("is-active"):r.classList.remove("is-active"),r.setAttribute("aria-pressed",l?"true":"false")}});let i=this.instances.get(t);i&&(i.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(){this.instances.forEach(function(n,s){this.destroy(s)}.bind(this)),document.querySelectorAll('[data-grid-initialized="true"]').forEach(function(n){n._gridCleanup&&(n._gridCleanup(),delete n._gridCleanup)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("gridLayout",e),window.VanduoGridLayout=e})();(function(){"use strict";let f={backdrop:null,container:null,img:null,closeBtn:null,caption:null,currentTrigger:null,scrollThreshold:50,initialScrollY:0,isOpen:!1,_cleanupFunctions:[],init:function(){this.createBackdrop(),this.bindTriggers()},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="&times;",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(r){(r.target===e.backdrop||r.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(r){r.key==="Escape"&&e.isOpen&&e.close()};document.addEventListener("keydown",i),this._cleanupFunctions.push(()=>document.removeEventListener("keydown",i));let a=function(){if(!e.isOpen)return;let r=window.scrollY;Math.abs(r-e.initialScrollY)>e.scrollThreshold&&e.close()};window.addEventListener("scroll",a,{passive:!0}),this._cleanupFunctions.push(()=>window.removeEventListener("scroll",a))},bindTriggers:function(){let e=this;document.querySelectorAll("[data-image-box]").forEach(function(n){if(n.dataset.imageBoxInitialized)return;if(n.dataset.imageBoxInitialized="true",n.classList.add("vd-image-box-trigger"),n.tagName==="IMG"){n.complete&&n.naturalWidth===0&&n.classList.add("is-broken");let i=function(){n.classList.add("is-broken")};n.addEventListener("error",i);let a=function(){n.classList.remove("is-broken")};n.addEventListener("load",a)}let s=function(i){i.preventDefault(),e.open(n)};if(n.addEventListener("click",s),n._imageBoxCleanup=()=>n.removeEventListener("click",s),n.tagName!=="BUTTON"&&n.tagName!=="A"){n.setAttribute("role","button"),n.setAttribute("tabindex","0"),n.setAttribute("aria-label","View enlarged image");let i=function(r){(r.key==="Enter"||r.key===" ")&&(r.preventDefault(),e.open(n))};n.addEventListener("keydown",i);let a=n._imageBoxCleanup;n._imageBoxCleanup=()=>{a(),n.removeEventListener("keydown",i)}}})},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("--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.img.onload=()=>{this.img.style.opacity=""})},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("--scrollbar-width"),this.currentTrigger&&(this.currentTrigger.focus(),this.currentTrigger.dispatchEvent(new CustomEvent("imageBox:close",{bubbles:!0})),this.currentTrigger=null),setTimeout(()=>{this.isOpen||(this.img.src="",this.img.alt="")},300))},reinit:function(){this.bindTriggers()},destroy:function(){this.isOpen&&this.close(),this.backdrop&&this.backdrop.parentNode&&this.backdrop.parentNode.removeChild(this.backdrop),this._cleanupFunctions.forEach(t=>t()),this._cleanupFunctions=[],document.querySelectorAll("[data-image-box-initialized]").forEach(t=>{t.classList.remove("vd-image-box-trigger"),t._imageBoxCleanup&&(t._imageBoxCleanup(),delete t._imageBoxCleanup),delete t.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(){this.destroy()}};typeof window.Vanduo<"u"&&window.Vanduo.register("imageBox",f),window.VanduoImageBox=f})();(function(){"use strict";let f={modals:new Map,openModals:[],zIndexCounter:1050,_triggerCleanups:[],init:function(){document.querySelectorAll(".vd-modal").forEach(n=>{this.modals.has(n)||this.initModal(n)}),document.querySelectorAll("[data-modal]").forEach(n=>{if(n.dataset.modalTriggerInitialized)return;n.dataset.modalTriggerInitialized="true";let s=i=>{i.preventDefault();let a=n.dataset.modal,r=document.querySelector(a);r&&this.open(r)};n.addEventListener("click",s),this._triggerCleanups.push(()=>n.removeEventListener("click",s))})},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 a=e.querySelector(".vd-modal-title");a&&!a.id&&(a.id=e.id+"-title",e.setAttribute("aria-labelledby",a.id)),n.forEach(l=>{let c=()=>{this.close(e)};l.addEventListener("click",c),i.push(()=>l.removeEventListener("click",c))});let r=l=>{l.target===t&&e.dataset.backdrop!=="static"&&this.close(e)};t.addEventListener("click",r),i.push(()=>t.removeEventListener("click",r));let o=l=>{if(l.key==="Escape"&&this.openModals.length>0){let c=this.openModals[this.openModals.length-1];c===e&&c.dataset.keyboard!=="false"&&this.close(c)}};document.addEventListener("keydown",o),i.push(()=>document.removeEventListener("keydown",o)),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.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 r=window.innerWidth-document.documentElement.clientWidth;r>0&&(document.body.style.paddingRight=`${r}px`)}let a=this.trapFocus(t);n.trapHandler=a,setTimeout(()=>{let r=this.getFocusableElements(t)[0];r&&r.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 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 r=document.querySelector(`[data-modal="#${t.id}"]`);r&&r.focus(),t.dispatchEvent(new CustomEvent("modal:close",{bubbles:!0}))},trapFocus:function(e){let t=this,n=function(s){if(s.key!=="Tab")return;let i=t.getFocusableElements(e),a=i[0],r=i[i.length-1];s.shiftKey?document.activeElement===a&&(s.preventDefault(),r.focus()):document.activeElement===r&&(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);t&&(e.classList.contains("is-open")&&this.close(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(){this.modals.forEach((e,t)=>{this.destroy(t)}),this._triggerCleanups.forEach(e=>e()),this._triggerCleanups=[]}};typeof window.Vanduo<"u"&&window.Vanduo.register("modals",f),window.VanduoModals=f})();(function(){"use strict";let f={instances:new Map,getBreakpoint:function(){let t=getComputedStyle(document.documentElement).getPropertyValue("--breakpoint-lg").trim(),n=parseInt(t,10);return isNaN(n)?992:n},init:function(){document.querySelectorAll(".vd-navbar").forEach(t=>{this.instances.has(t)||this.initNavbar(t)})},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);if(!t||!n)return;let i=[],a=u=>{u.preventDefault(),u.stopPropagation(),this.toggleMenu(e,t,n,s)};if(t.addEventListener("click",a),i.push(()=>t.removeEventListener("click",a)),s){let u=()=>{this.closeMenu(e,t,n,s)};s.addEventListener("click",u),i.push(()=>s.removeEventListener("click",u))}let r=u=>{u.key==="Escape"&&n.classList.contains("is-open")&&this.closeMenu(e,t,n,s)};document.addEventListener("keydown",r),i.push(()=>document.removeEventListener("keydown",r));let o,l=()=>{clearTimeout(o),o=setTimeout(()=>{let u=this.getBreakpoint();window.innerWidth>=u&&n.classList.contains("is-open")&&this.closeMenu(e,t,n,s)},250)};window.addEventListener("resize",l),i.push(()=>{clearTimeout(o),window.removeEventListener("resize",l)});let c=u=>{n.classList.contains("is-open")&&!e.contains(u.target)&&!n.contains(u.target)&&this.closeMenu(e,t,n,s)};document.addEventListener("click",c),i.push(()=>document.removeEventListener("click",c)),n.querySelectorAll(".vd-navbar-dropdown > .vd-nav-link, .vd-navbar-dropdown > .nav-link").forEach(u=>{let p=h=>{let m=this.getBreakpoint();if(window.innerWidth<m){h.preventDefault();let k=u.parentElement.querySelector(".vd-navbar-dropdown-menu");k&&k.classList.toggle("is-open")}};u.addEventListener("click",p),i.push(()=>u.removeEventListener("click",p))}),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.style.overflow="hidden",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.style.overflow="",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",f),window.VanduoNavbar=f})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll(".vd-pagination[data-pagination]").forEach(t=>{this.instances.has(t)||this.initPagination(t)})},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=a=>{let r=a.target.closest(".vd-pagination-link");if(!r||r.closest(".vd-pagination-item.disabled")||r.closest(".vd-pagination-item.active"))return;a.preventDefault();let o=r.closest(".vd-pagination-item"),l=o.dataset.page;l?this.goToPage(e,parseInt(l)):o.classList.contains("pagination-prev")?this.prevPage(e):o.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 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 r=this.calculatePages(s,n,i),o=0;r.forEach(l=>{if(l==="ellipsis")a+='<li class="vd-pagination-item pagination-item"><span class="vd-pagination-ellipsis pagination-ellipsis">\u2026</span></li>';else{l!==o+1&&o>0&&(a+='<li class="vd-pagination-item pagination-item"><span class="vd-pagination-ellipsis pagination-ellipsis">\u2026</span></li>');let c=Number(l);a+=`<li class="vd-pagination-item pagination-item ${c===s?"active":""}" data-page="${c}">`,a+=`<a class="vd-pagination-link pagination-link" href="#" aria-label="Page ${c}">${c}</a>`,a+="</li>",o=l}}),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=[],i=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-i),r=Math.min(t-1,e+i);e<=i+1&&(r=Math.min(t-1,n-1)),e>=t-i&&(a=Math.max(2,t-n+2)),a>2&&s.push("ellipsis");for(let o=a;o<=r;o++)s.push(o);r<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",f),window.VanduoPagination=f})();(function(){"use strict";let f={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(){if(this.isInitialized){this.refresh();return}if(this.isInitialized=!0,this.reducedMotion)return;document.querySelectorAll(".vd-parallax").forEach(t=>{t.dataset.parallaxInitialized||this.initParallax(t)}),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("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("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("parallax-slow")?.5: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,a=n.height,o=(Math.max(0,Math.min(1,(s-i)/(s+a)))-.5)*t.speed*100;t.layers.forEach((l,c)=>{let d=l.dataset.parallaxSpeed?parseFloat(l.dataset.parallaxSpeed):1,u=o*d;t.direction==="horizontal"?l.style.transform=`translateX(${u}px)`:l.style.transform=`translateY(${u}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",f),window.VanduoParallax=f})();(function(){"use strict";let f={init:function(){document.querySelectorAll(".progress-bar[data-progress]").forEach(t=>{t.dataset.progressInitialized||this.initProgressBar(t)})},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(--transition-duration-slow) var(--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(".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,a=t-i,r=performance.now(),o=l=>{let c=l-r,d=Math.min(c/n,1),u=1-Math.pow(1-d,3),p=i+a*u;this.setProgress(s,p,!1),d<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(){document.querySelectorAll('.progress-bar[data-progress-initialized="true"]').forEach(t=>{delete t.dataset.progressInitialized})}};typeof window.Vanduo<"u"&&window.Vanduo.register("preloader",f),window.VanduoPreloader=f})();(function(){"use strict";let f={instances:new Map,_typeaheadBuffer:"",_typeaheadTimer:null,init:function(){document.querySelectorAll("select.vd-custom-select-input, select[data-custom-select]").forEach(t=>{this.instances.has(t)||this.initSelect(t)})},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 c=document.createElement("div");c.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"),c.appendChild(d),i.appendChild(c);let u=h=>{this.filterOptions(i,h.target.value)},p=typeof debounce=="function"?debounce(u,150):u;d.addEventListener("input",p),t.push(()=>d.removeEventListener("input",p))}this.buildOptions(e,i,s),n.appendChild(s),n.appendChild(i),this.updateButtonText(e,s);let a=c=>{c.preventDefault(),c.stopPropagation(),this.toggleDropdown(s,i)};s.addEventListener("click",a),t.push(()=>s.removeEventListener("click",a));let r=c=>{!n.contains(c.target)&&i.classList.contains("is-open")&&this.closeDropdown(s,i)};document.addEventListener("click",r),t.push(()=>document.removeEventListener("click",r));let o=c=>{this.handleKeydown(c,e,s,i)};s.addEventListener("keydown",o),t.push(()=>s.removeEventListener("keydown",o));let l=()=>{this.updateButtonText(e,s),this.updateSelectedOptions(e,i)};e.addEventListener("change",l),t.push(()=>e.removeEventListener("change",l)),this.instances.set(e,{wrapper:n,button:s,dropdown:i,cleanup:t})},buildOptions:function(e,t,n){let s=e.querySelectorAll("option"),i=document.createDocumentFragment();s.forEach((a,r)=>{if(a.parentElement.tagName==="OPTGROUP"){let l=a.parentElement;if(!t.querySelector(`[data-group="${l.label}"]`)){let c=document.createElement("div");c.className="custom-select-option-group",c.textContent=l.label,c.dataset.group=l.label,i.appendChild(c)}}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",r),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",l=>{a.disabled||this.selectOption(e,a,o,n,t)}),i.appendChild(o)}),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(".vd-custom-select-option"),s=Array.from(e.selectedOptions).map(i=>i.value);n.forEach(i=>{let a=i.dataset.value;s.includes(a)?(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(".vd-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"),a=Array.from(s.querySelectorAll(".vd-custom-select-option:not(.is-disabled)")),r=a.findIndex(o=>o===document.activeElement);switch(e.key){case"Enter":case" ":if(e.preventDefault(),i&&r>=0){let o=a[r],l=t.options[parseInt(o.dataset.index)];this.selectOption(t,l,o,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 o=r<a.length-1?r+1:0;a[o].focus()}break;case"ArrowUp":if(e.preventDefault(),i){let o=r>0?r-1:a.length-1;a[o].focus()}break;case"Home":i&&(e.preventDefault(),a[0].focus());break;case"End":i&&(e.preventDefault(),a[a.length-1].focus());break;default:if(i&&e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey){clearTimeout(this._typeaheadTimer),this._typeaheadBuffer+=e.key.toLowerCase();let o=a.find(l=>l.textContent.trim().toLowerCase().startsWith(this._typeaheadBuffer));o&&o.focus(),this._typeaheadTimer=setTimeout(()=>{this._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){return e.id?e.id:"select-"+Math.random().toString(36).substr(2,9)},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",f)})();(function(){"use strict";let f={sidenavs:new Map,breakpoint:992,_globalCleanups:[],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")},init:function(){document.querySelectorAll(".vd-sidenav, .vd-offcanvas").forEach(s=>{this.sidenavs.has(s)||this.initSidenav(s)}),document.querySelectorAll("[data-sidenav-toggle]").forEach(s=>{if(s.dataset.sidenavToggleInitialized)return;s.dataset.sidenavToggleInitialized="true";let i=a=>{a.preventDefault();let r=s.dataset.sidenavToggle,o=document.querySelector(r);o&&this.toggle(o)};s.addEventListener("click",i),this._globalCleanups.push(()=>s.removeEventListener("click",i))}),this.handleResize();let n=()=>{this.handleResize()};window.addEventListener("resize",n),this._globalCleanups.push(()=>window.removeEventListener("resize",n))},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"),i=[];if(e.setAttribute("role","navigation"),e.setAttribute("aria-hidden","true"),s){let o=()=>{this.close(e)};s.addEventListener("click",o),i.push(()=>s.removeEventListener("click",o))}let a=()=>{e.dataset.backdrop!=="static"&&this.close(e)};n.addEventListener("click",a),i.push(()=>n.removeEventListener("click",a));let r=o=>{o.key==="Escape"&&e.classList.contains("is-open")&&e.dataset.keyboard!=="false"&&this.close(e)};document.addEventListener("keydown",r),i.push(()=>document.removeEventListener("keydown",r)),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.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}))},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")&&this.close(e),t.cleanup.forEach(n=>n()),t.overlay&&t.overlay.parentNode&&t.overlay.parentNode.removeChild(t.overlay),this.sidenavs.delete(e))},destroyAll:function(){this.sidenavs.forEach((e,t)=>{this.destroy(t)}),this._globalCleanups.forEach(e=>e()),this._globalCleanups=[]}};typeof window.Vanduo<"u"&&window.Vanduo.register("sidenav",f),window.VanduoSidenav=f})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll(".vd-tabs, [data-tabs]").forEach(t=>{this.instances.has(t)||this.initTabs(t)})},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((r,o)=>{let l=r.dataset.tab||r.getAttribute("href")?.replace("#","")||`tab-${o}`,c=this.findPane(e,l,s);r.setAttribute("role","tab"),r.setAttribute("aria-selected",r.classList.contains("is-active")?"true":"false"),r.setAttribute("tabindex",r.classList.contains("is-active")?"0":"-1"),r.id||(r.id=`tab-btn-${l}`),c&&(c.setAttribute("role","tabpanel"),c.setAttribute("aria-labelledby",r.id),c.id||(c.id=`tab-pane-${l}`),r.setAttribute("aria-controls",c.id));let d=p=>{p.preventDefault(),!r.classList.contains("disabled")&&!r.disabled&&this.activateTab(e,r,n,s)};r.addEventListener("click",d),i.push(()=>r.removeEventListener("click",d));let u=p=>{this.handleKeydown(p,e,r,n,s)};r.addEventListener("keydown",u),i.push(()=>r.removeEventListener("keydown",u))}),!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})},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,r)=>{(a.dataset.tab||a.getAttribute("href")?.replace("#",""))===t&&n[r]&&(s=n[r])}),s},activateTab:function(e,t,n,s){let i=t.dataset.tab||t.getAttribute("href")?.replace("#","")||t.id;n.forEach(o=>{o.classList.remove("is-active"),o.setAttribute("aria-selected","false"),o.setAttribute("tabindex","-1"),o.parentElement&&o.parentElement.classList.contains("tab-item")&&o.parentElement.classList.remove("is-active")}),s.forEach(o=>{o.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,i,s);a&&a.classList.add("is-active");let r=new CustomEvent("tab:change",{bubbles:!0,detail:{tab:t,pane:a,tabId:i}});e.dispatchEvent(r)},handleKeydown:function(e,t,n,s,i){let a=t.classList.contains("tabs-vertical"),r=Array.from(s).filter(c=>!c.classList.contains("disabled")&&!c.disabled),o=r.indexOf(n),l=o;switch(e.key){case"ArrowLeft":a||(e.preventDefault(),l=o>0?o-1:r.length-1);break;case"ArrowRight":a||(e.preventDefault(),l=o<r.length-1?o+1:0);break;case"ArrowUp":a&&(e.preventDefault(),l=o>0?o-1:r.length-1);break;case"ArrowDown":a&&(e.preventDefault(),l=o<r.length-1?o+1:0);break;case"Home":e.preventDefault(),l=0;break;case"End":e.preventDefault(),l=r.length-1;break;case"Enter":case" ":e.preventDefault(),this.activateTab(t,n,s,i);return;default:return}l!==o&&(r[l].focus(),this.activateTab(t,r[l],s,i))},show:function(e){let t;if(typeof e=="string"?t=document.querySelector(`[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",f)})();(function(){"use strict";let f={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:"neutral",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:{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"},inter:{name:"Inter",family:"'Inter', sans-serif"},"source-sans":{name:"Source Sans 3",family:"'Source Sans 3', sans-serif"},"fira-sans":{name:"Fira Sans",family:"'Fira Sans', sans-serif"},"ibm-plex":{name:"IBM Plex Sans",family:"'IBM Plex Sans', sans-serif"},system:{name:"System Default",family:null},ubuntu:{name:"Ubuntu",family:"'Ubuntu', sans-serif"},"open-sans":{name:"Open Sans",family:"'Open Sans', sans-serif"},rubik:{name:"Rubik",family:"'Rubik', sans-serif"},"titillium-web":{name:"Titillium Web",family:"'Titillium Web', sans-serif"}},THEME_MODES:["system","dark","light"],state:{primary:null,neutral:null,radius:null,font:null,theme:null,isOpen:!1},isInitialized:!1,_cleanup:[],elements:{customizer:null,trigger:null,panel:null,overlay:null},init:function(){if(this.isInitialized){this.bindExistingElements(),this.bindPanelEvents(),this.updateUI();return}this.isInitialized=!0,this._cleanup=[],this.loadPreferences(),this.applyAllPreferences(),this.bindExistingElements(),this.bindEvents(),console.log("Vanduo Theme Customizer initialized")},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.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("--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){this.THEME_MODES.includes(e)||(e=this.DEFAULTS.THEME),this._isApplying=!0;let t=this.state.theme,n=this.getDefaultPrimary(t);if(this.state.primary===n){let s=this.getDefaultPrimary(e);s!==this.state.primary&&this.applyPrimary(s)}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 s=window.Vanduo.components.themeSwitcher;s.state&&s.state.preference!==e&&(s.state.preference=e,typeof s.setStorageValue=="function"&&s.setStorageValue(s.STORAGE_KEY,e),typeof s.updateUI=="function"&&s.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(){if(this.elements.customizer=document.querySelector(".vd-theme-customizer"),this.elements.customizer)this.elements.trigger=this.elements.customizer.querySelector(".vd-theme-customizer-trigger"),this.elements.panel=this.elements.customizer.querySelector(".vd-theme-customizer-panel"),this.elements.overlay=this.elements.customizer.querySelector(".vd-theme-customizer-overlay");else{let e=document.querySelector("[data-theme-customizer-trigger]");e&&this.createDynamicPanel(e)}this.updateUI()},createDynamicPanel:function(e){let t=document.createElement("div");t.className="vd-theme-customizer",this.elements.trigger=e;let n=document.createElement("div");n.className="vd-theme-customizer-overlay";let s=document.createElement("div");s.className="vd-theme-customizer-panel",s.innerHTML=this.getPanelHTML(),document.body.appendChild(n),document.body.appendChild(s),this.elements.panel=s,this.elements.overlay=n,this.elements.customizer={contains:i=>s.contains(i)||e.contains(i)},this.positionPanel(),this.bindPanelEvents(),this.addListener(window,"resize",()=>this.positionPanel())},positionPanel:function(){if(!this.elements.panel||!this.elements.trigger)return;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 t=this.elements.trigger.getBoundingClientRect(),n=320,s=t.bottom+8,i=window.innerWidth,a=i-t.right;i-a-n<8&&(a=i-n-8),this.elements.panel.style.top=s+"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 - "+s+"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(r){let o=document.createElement("div");return o.textContent=String(r??""),o.innerHTML},t=function(r){let o=String(r??"").trim();return/^(#[0-9a-fA-F]{3,8}|rgb[a]?\([^)]{1,60}\)|hsl[a]?\([^)]{1,60}\)|var\(--[a-zA-Z0-9_-]{1,40}\))$/.test(o)?o:"#000000"},n="";for(let[r,o]of Object.entries(this.PRIMARY_COLORS))n+=`<button class="tc-color-swatch${r===this.state.primary?" is-active":""}" data-color="${e(r)}" style="--swatch-color: ${t(o.color)}" title="${e(o.name)}"></button>`;let s="";for(let[r,o]of Object.entries(this.NEUTRAL_COLORS))s+=`<button class="tc-neutral-swatch${r===this.state.neutral?" is-active":""}" data-neutral="${e(r)}" style="--swatch-color: ${t(o.color)}" title="${e(o.name)}"><span>${e(o.name)}</span></button>`;let i="";this.RADIUS_OPTIONS.forEach(r=>{i+=`<button class="tc-radius-btn${r===this.state.radius?" is-active":""}" data-radius="${e(r)}">${e(r)}</button>`});let a="";for(let[r,o]of Object.entries(this.FONT_OPTIONS))a+=`<option value="${e(r)}"${r===this.state.font?" selected":""}>${e(o.name)}</option>`;return`
5
+ `).length,i=document.createElement("div");i.className="vd-code-snippet-line-numbers",i.setAttribute("aria-hidden","true");for(let r=1;r<=s;r++){let o=document.createElement("span");o.textContent=r,i.appendChild(o)}let a=document.createElement("div");a.className="vd-code-snippet-code",a.appendChild(t.cloneNode(!0)),t.parentNode.removeChild(t),e.appendChild(i),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"),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(){document.querySelectorAll('.vd-code-snippet[data-initialized="true"]').forEach(t=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("codeSnippet",f),window.CodeSnippet=f})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll(".vd-collapsible, .accordion").forEach(t=>{this.instances.has(t)||this.initCollapsible(t)})},initCollapsible:function(e){let t=e.classList.contains("accordion"),n=e.querySelectorAll(".vd-collapsible-item, .accordion-item"),s=[];n.forEach(i=>{let a=i.querySelector(".vd-collapsible-header, .accordion-header"),r=i.querySelector(".vd-collapsible-body, .accordion-body"),o=i.querySelector(".vd-collapsible-trigger, .accordion-trigger")||a;if(!a||!r)return;i.classList.contains("is-open")?this.openItem(i,r,!1):this.closeItem(i,r,!1);let c=l=>{l.preventDefault(),this.toggleItem(i,r,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(r=>{if(r!==e){let o=r.querySelector(".vd-collapsible-body, .accordion-body");this.closeItem(r,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"),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",f),window.VanduoCollapsible=f})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll(".vd-dropdown").forEach(t=>{this.instances.has(t)||this.initDropdown(t)})},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 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 r=c=>{this.handleKeydown(c,e,t,n)};t.addEventListener("keydown",r),s.push(()=>t.removeEventListener("keydown",r)),n.querySelectorAll(".vd-dropdown-item:not(.disabled):not(.is-disabled)").forEach(c=>{let l=u=>{u.preventDefault(),this.selectItem(c,e,t,n)};c.addEventListener("click",l),s.push(()=>c.removeEventListener("click",l));let d=u=>{(u.key==="Enter"||u.key===" ")&&(u.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(a=>{if(a!==n){let r=a.closest(".vd-dropdown"),o=r.querySelector(".vd-dropdown-toggle");this.closeDropdown(r,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 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,a=window.innerHeight,r=8;n.left+s.width>i-r&&(t.classList.add("vd-dropdown-menu-end"),t.classList.remove("vd-dropdown-menu-start")),t.classList.contains("dropdown-menu-top")?n.top-s.height<r&&t.classList.remove("vd-dropdown-menu-top"):n.bottom+s.height>a-r&&t.classList.add("vd-dropdown-menu-top")},handleKeydown:function(e,t,n,s){let i=s.classList.contains("is-open"),a=Array.from(s.querySelectorAll(".vd-dropdown-item:not(.disabled):not(.is-disabled)")),r=a.findIndex(o=>o===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 o=r<a.length-1?r+1:0;a[o].focus()}break;case"ArrowUp":if(i){e.preventDefault();let o=r>0?r-1:a.length-1;a[o].focus()}break;case"Escape":i&&(e.preventDefault(),this.closeDropdown(t,n,s));break;case"Home":i&&(e.preventDefault(),a[0].focus());break;case"End":i&&(e.preventDefault(),a[a.length-1].focus());break;default:if(i&&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(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",f),window.VanduoDropdown=f})();(function(){"use strict";let f={STORAGE_KEY:"vanduo-font-preference",isInitialized:!1,fonts:{system:{name:"System Default",family:null},inter:{name:"Inter",family:"'Inter', sans-serif"},"source-sans":{name:"Source Sans 3",family:"'Source Sans 3', sans-serif"},"fira-sans":{name:"Fira Sans",family:"'Fira Sans', sans-serif"},"ibm-plex":{name:"IBM Plex Sans",family:"'IBM Plex Sans', sans-serif"},"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"},rubik:{name:"Rubik",family:"'Rubik', sans-serif",category:"sans-serif",description:"Modern, geometric"},"titillium-web":{name:"Titillium Web",family:"'Titillium Web', sans-serif",category:"sans-serif",description:"Technical, elegant"}},init:function(){if(this.state={preference:this.getPreference()},this.isInitialized){this.applyFont(),this.renderUI(),this.updateUI();return}this.isInitialized=!0,this.applyFont(),this.renderUI(),console.log("Vanduo Font Switcher initialized")},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(){document.querySelectorAll('[data-toggle="font"]').forEach(t=>{if(t.getAttribute("data-font-initialized")==="true"){t.tagName==="SELECT"&&(t.value=this.state.preference);return}if(t.tagName==="SELECT"){t.value=this.state.preference;let n=s=>{this.setPreference(s.target.value)};t.addEventListener("change",n),t._fontToggleHandler=n}else{let n=()=>{let s=Object.keys(this.fonts),a=(s.indexOf(this.state.preference)+1)%s.length;this.setPreference(s[a])};t.addEventListener("click",n),t._fontToggleHandler=n}t.setAttribute("data-font-initialized","true")})},updateUI:function(){document.querySelectorAll('[data-toggle="font"]').forEach(t=>{if(t.tagName==="SELECT")t.value=this.state.preference;else{let n=t.querySelector(".font-current-label");n&&(n.textContent=this.fonts[this.state.preference].name)}})},getCurrentFont:function(){return this.state.preference},getFontData:function(e){return this.fonts[e]||null},destroyAll:function(){document.querySelectorAll('[data-toggle="font"][data-font-initialized="true"]').forEach(t=>{if(t._fontToggleHandler){let n=t.tagName==="SELECT"?"change":"click";t.removeEventListener(n,t._fontToggleHandler),delete t._fontToggleHandler}t.removeAttribute("data-font-initialized")}),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",f),window.FontSwitcher=f})();(function(){"use strict";let f=(function(){try{return CSS.supports("selector(:has(*))")}catch{return!1}})(),e={instances:new Map,init:function(){document.querySelectorAll("[data-layout-mode]").forEach(function(n){this.instances.has(n)||this.initContainer(n)}.bind(this)),this.initToggleButtons()},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(){document.querySelectorAll("[data-grid-toggle]").forEach(function(n){if(n.getAttribute("data-grid-initialized")==="true")return;let s=function(i){i.preventDefault();let a=n.getAttribute("data-grid-toggle"),r;a?r=document.querySelector(a):r=n.closest("[data-layout-mode]"),r&&this.toggle(r)}.bind(this);n.addEventListener("click",s),n.setAttribute("data-grid-initialized","true"),n.setAttribute("aria-pressed","false"),n._gridCleanup=function(){n.removeEventListener("click",s),n.removeAttribute("data-grid-initialized"),n.removeAttribute("aria-pressed")}}.bind(this))},applyFibFallback:function(t){if(f)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(r){let o=r.getAttribute("data-grid-toggle");if(o&&t.matches(o)){let c=n==="fibonacci";c?r.classList.add("is-active"):r.classList.remove("is-active"),r.setAttribute("aria-pressed",c?"true":"false")}});let i=this.instances.get(t);i&&(i.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(){this.instances.forEach(function(n,s){this.destroy(s)}.bind(this)),document.querySelectorAll('[data-grid-initialized="true"]').forEach(function(n){n._gridCleanup&&(n._gridCleanup(),delete n._gridCleanup)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("gridLayout",e),window.VanduoGridLayout=e})();(function(){"use strict";let f={backdrop:null,container:null,img:null,closeBtn:null,caption:null,currentTrigger:null,scrollThreshold:50,initialScrollY:0,isOpen:!1,_cleanupFunctions:[],init:function(){this.createBackdrop(),this.bindTriggers()},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="&times;",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(r){(r.target===e.backdrop||r.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(r){r.key==="Escape"&&e.isOpen&&e.close()};document.addEventListener("keydown",i),this._cleanupFunctions.push(()=>document.removeEventListener("keydown",i));let a=function(){if(!e.isOpen)return;let r=window.scrollY;Math.abs(r-e.initialScrollY)>e.scrollThreshold&&e.close()};window.addEventListener("scroll",a,{passive:!0}),this._cleanupFunctions.push(()=>window.removeEventListener("scroll",a))},bindTriggers:function(){let e=this;document.querySelectorAll("[data-image-box]").forEach(function(n){if(n.dataset.imageBoxInitialized)return;if(n.dataset.imageBoxInitialized="true",n.classList.add("vd-image-box-trigger"),n.tagName==="IMG"){n.complete&&n.naturalWidth===0&&n.classList.add("is-broken");let i=function(){n.classList.add("is-broken")};n.addEventListener("error",i);let a=function(){n.classList.remove("is-broken")};n.addEventListener("load",a)}let s=function(i){i.preventDefault(),e.open(n)};if(n.addEventListener("click",s),n._imageBoxCleanup=()=>n.removeEventListener("click",s),n.tagName!=="BUTTON"&&n.tagName!=="A"){n.setAttribute("role","button"),n.setAttribute("tabindex","0"),n.setAttribute("aria-label","View enlarged image");let i=function(r){(r.key==="Enter"||r.key===" ")&&(r.preventDefault(),e.open(n))};n.addEventListener("keydown",i);let a=n._imageBoxCleanup;n._imageBoxCleanup=()=>{a(),n.removeEventListener("keydown",i)}}})},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("--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("--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(){this.bindTriggers()},destroy:function(){this.isOpen&&this.close(),this.backdrop&&this.backdrop.parentNode&&this.backdrop.parentNode.removeChild(this.backdrop),this._cleanupFunctions.forEach(t=>t()),this._cleanupFunctions=[],document.querySelectorAll("[data-image-box-initialized]").forEach(t=>{t.classList.remove("vd-image-box-trigger"),t._imageBoxCleanup&&(t._imageBoxCleanup(),delete t._imageBoxCleanup),delete t.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(){this.destroy()}};typeof window.Vanduo<"u"&&window.Vanduo.register("imageBox",f),window.VanduoImageBox=f})();(function(){"use strict";let f={modals:new Map,openModals:[],zIndexCounter:1050,_triggerCleanups:[],_sharedEscHandler:null,init:function(){document.querySelectorAll(".vd-modal").forEach(n=>{this.modals.has(n)||this.initModal(n)}),document.querySelectorAll("[data-modal]").forEach(n=>{if(n.dataset.modalTriggerInitialized)return;n.dataset.modalTriggerInitialized="true";let s=i=>{i.preventDefault();let a=n.dataset.modal,r=document.querySelector(a);r&&this.open(r)};n.addEventListener("click",s),this._triggerCleanups.push(()=>n.removeEventListener("click",s))})},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 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),i.push(()=>o.removeEventListener("click",c))});let r=o=>{o.target===t&&e.dataset.backdrop!=="static"&&this.close(e)};t.addEventListener("click",r),i.push(()=>t.removeEventListener("click",r)),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: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.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 r=window.innerWidth-document.documentElement.clientWidth;r>0&&(document.body.style.paddingRight=`${r}px`)}let a=this.trapFocus(t);n.trapHandler=a,setTimeout(()=>{let r=this.getFocusableElements(t)[0];r&&r.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 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 r=document.querySelector(`[data-modal="#${t.id}"]`);r&&r.focus(),t.dispatchEvent(new CustomEvent("modal:close",{bubbles:!0}))},trapFocus:function(e){let t=this,n=function(s){if(s.key!=="Tab")return;let i=t.getFocusableElements(e),a=i[0],r=i[i.length-1];s.shiftKey?document.activeElement===a&&(s.preventDefault(),r.focus()):document.activeElement===r&&(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);t&&(e.classList.contains("is-open")&&this.close(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(){this.modals.forEach((e,t)=>{this.destroy(t)}),this._triggerCleanups.forEach(e=>e()),this._triggerCleanups=[],this._sharedEscHandler&&(document.removeEventListener("keydown",this._sharedEscHandler),this._sharedEscHandler=null)}};typeof window.Vanduo<"u"&&window.Vanduo.register("modals",f),window.VanduoModals=f})();(function(){"use strict";let f={instances:new Map,getBreakpoint:function(){let t=getComputedStyle(document.documentElement).getPropertyValue("--breakpoint-lg").trim(),n=parseInt(t,10);return isNaN(n)?992:n},init:function(){document.querySelectorAll(".vd-navbar").forEach(t=>{this.instances.has(t)||this.initNavbar(t)})},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);if(!t||!n)return;let i=[],a=u=>{u.preventDefault(),u.stopPropagation(),this.toggleMenu(e,t,n,s)};if(t.addEventListener("click",a),i.push(()=>t.removeEventListener("click",a)),s){let u=()=>{this.closeMenu(e,t,n,s)};s.addEventListener("click",u),i.push(()=>s.removeEventListener("click",u))}let r=u=>{u.key==="Escape"&&n.classList.contains("is-open")&&this.closeMenu(e,t,n,s)};document.addEventListener("keydown",r),i.push(()=>document.removeEventListener("keydown",r));let o,c=()=>{clearTimeout(o),o=setTimeout(()=>{let u=this.getBreakpoint();window.innerWidth>=u&&n.classList.contains("is-open")&&this.closeMenu(e,t,n,s)},250)};window.addEventListener("resize",c),i.push(()=>{clearTimeout(o),window.removeEventListener("resize",c)});let l=u=>{n.classList.contains("is-open")&&!e.contains(u.target)&&!n.contains(u.target)&&this.closeMenu(e,t,n,s)};document.addEventListener("click",l),i.push(()=>document.removeEventListener("click",l)),n.querySelectorAll(".vd-navbar-dropdown > .vd-nav-link, .vd-navbar-dropdown > .nav-link").forEach(u=>{let p=h=>{let m=this.getBreakpoint();if(window.innerWidth<m){h.preventDefault();let A=u.parentElement.querySelector(".vd-navbar-dropdown-menu");A&&A.classList.toggle("is-open")}};u.addEventListener("click",p),i.push(()=>u.removeEventListener("click",p))}),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(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",f),window.VanduoNavbar=f})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll(".vd-pagination[data-pagination]").forEach(t=>{this.instances.has(t)||this.initPagination(t)})},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=a=>{let r=a.target.closest(".vd-pagination-link");if(!r||r.closest(".vd-pagination-item.disabled")||r.closest(".vd-pagination-item.active"))return;a.preventDefault();let o=r.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",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 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 r=this.calculatePages(s,n,i),o=0;r.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=[],i=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-i),r=Math.min(t-1,e+i);e<=i+1&&(r=Math.min(t-1,n-1)),e>=t-i&&(a=Math.max(2,t-n+2)),a>2&&s.push("ellipsis");for(let o=a;o<=r;o++)s.push(o);r<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",f),window.VanduoPagination=f})();(function(){"use strict";let f={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(){if(this.isInitialized){this.refresh();return}if(this.isInitialized=!0,this.reducedMotion)return;document.querySelectorAll(".vd-parallax").forEach(t=>{t.dataset.parallaxInitialized||this.initParallax(t)}),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("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("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("parallax-slow")?.5: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,a=n.height,o=(Math.max(0,Math.min(1,(s-i)/(s+a)))-.5)*t.speed*100;t.layers.forEach((c,l)=>{let d=c.dataset.parallaxSpeed?parseFloat(c.dataset.parallaxSpeed):1,u=o*d;t.direction==="horizontal"?c.style.transform=`translateX(${u}px)`:c.style.transform=`translateY(${u}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",f),window.VanduoParallax=f})();(function(){"use strict";let f={init:function(){document.querySelectorAll(".progress-bar[data-progress]").forEach(t=>{t.dataset.progressInitialized||this.initProgressBar(t)})},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(--transition-duration-slow) var(--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(".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,a=t-i,r=performance.now(),o=c=>{let l=c-r,d=Math.min(l/n,1),u=1-Math.pow(1-d,3),p=i+a*u;this.setProgress(s,p,!1),d<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(){document.querySelectorAll('.progress-bar[data-progress-initialized="true"]').forEach(t=>{delete t.dataset.progressInitialized})}};typeof window.Vanduo<"u"&&window.Vanduo.register("preloader",f),window.VanduoPreloader=f})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll("select.vd-custom-select-input, select[data-custom-select]").forEach(t=>{this.instances.has(t)||this.initSelect(t)})},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 u=h=>{this.filterOptions(i,h.target.value)},p=typeof debounce=="function"?debounce(u,150):u;d.addEventListener("input",p),t.push(()=>d.removeEventListener("input",p))}this.buildOptions(e,i,s),n.appendChild(s),n.appendChild(i),this.updateButtonText(e,s);let a=l=>{l.preventDefault(),l.stopPropagation(),this.toggleDropdown(s,i)};s.addEventListener("click",a),t.push(()=>s.removeEventListener("click",a));let r=l=>{!n.contains(l.target)&&i.classList.contains("is-open")&&this.closeDropdown(s,i)};document.addEventListener("click",r),t.push(()=>document.removeEventListener("click",r));let o=l=>{this.handleKeydown(l,e,s,i)};s.addEventListener("keydown",o),t.push(()=>s.removeEventListener("keydown",o));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((a,r)=>{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,i.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",r),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)}),i.appendChild(o)}),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 a=i.dataset.value;s.includes(a)?(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"),a=Array.from(s.querySelectorAll(".custom-select-option:not(.is-disabled)")),r=a.findIndex(o=>o===document.activeElement);switch(e.key){case"Enter":case" ":if(e.preventDefault(),i&&r>=0){let o=a[r],c=t.options[parseInt(o.dataset.index)];this.selectOption(t,c,o,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 o=r<a.length-1?r+1:0;a[o].focus()}break;case"ArrowUp":if(e.preventDefault(),i){let o=r>0?r-1:a.length-1;a[o].focus()}break;case"Home":i&&(e.preventDefault(),a[0].focus());break;case"End":i&&(e.preventDefault(),a[a.length-1].focus());break;default:if(i&&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(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",f)})();(function(){"use strict";let f={sidenavs:new Map,breakpoint:992,_globalCleanups:[],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")},init:function(){document.querySelectorAll(".vd-sidenav, .vd-offcanvas").forEach(s=>{this.sidenavs.has(s)||this.initSidenav(s)}),document.querySelectorAll("[data-sidenav-toggle]").forEach(s=>{if(s.dataset.sidenavToggleInitialized)return;s.dataset.sidenavToggleInitialized="true";let i=a=>{a.preventDefault();let r=s.dataset.sidenavToggle,o=document.querySelector(r);o&&this.toggle(o)};s.addEventListener("click",i),this._globalCleanups.push(()=>s.removeEventListener("click",i))}),this.handleResize();let n=()=>{this.handleResize()};window.addEventListener("resize",n),this._globalCleanups.push(()=>window.removeEventListener("resize",n))},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"),i=[];if(e.setAttribute("role","navigation"),e.setAttribute("aria-hidden","true"),s){let o=()=>{this.close(e)};s.addEventListener("click",o),i.push(()=>s.removeEventListener("click",o))}let a=()=>{e.dataset.backdrop!=="static"&&this.close(e)};n.addEventListener("click",a),i.push(()=>n.removeEventListener("click",a));let r=o=>{o.key==="Escape"&&e.classList.contains("is-open")&&e.dataset.keyboard!=="false"&&this.close(e)};document.addEventListener("keydown",r),i.push(()=>document.removeEventListener("keydown",r)),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.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}))},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")&&this.close(e),t.cleanup.forEach(n=>n()),t.overlay&&t.overlay.parentNode&&t.overlay.parentNode.removeChild(t.overlay),this.sidenavs.delete(e))},destroyAll:function(){this.sidenavs.forEach((e,t)=>{this.destroy(t)}),this._globalCleanups.forEach(e=>e()),this._globalCleanups=[]}};typeof window.Vanduo<"u"&&window.Vanduo.register("sidenav",f),window.VanduoSidenav=f})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll(".vd-tabs, [data-tabs]").forEach(t=>{this.instances.has(t)||this.initTabs(t)})},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((r,o)=>{let c=r.dataset.tab||r.getAttribute("href")?.replace("#","")||`tab-${o}`,l=this.findPane(e,c,s);r.setAttribute("role","tab"),r.setAttribute("aria-selected",r.classList.contains("is-active")?"true":"false"),r.setAttribute("tabindex",r.classList.contains("is-active")?"0":"-1"),r.id||(r.id=`tab-btn-${c}`),l&&(l.setAttribute("role","tabpanel"),l.setAttribute("aria-labelledby",r.id),l.id||(l.id=`tab-pane-${c}`),r.setAttribute("aria-controls",l.id));let d=p=>{p.preventDefault(),!r.classList.contains("disabled")&&!r.disabled&&this.activateTab(e,r,n,s)};r.addEventListener("click",d),i.push(()=>r.removeEventListener("click",d));let u=p=>{this.handleKeydown(p,e,r,n,s)};r.addEventListener("keydown",u),i.push(()=>r.removeEventListener("keydown",u))}),!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})},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,r)=>{(a.dataset.tab||a.getAttribute("href")?.replace("#",""))===t&&n[r]&&(s=n[r])}),s},activateTab:function(e,t,n,s){let i=t.dataset.tab||t.getAttribute("href")?.replace("#","")||t.id;n.forEach(o=>{o.classList.remove("is-active"),o.setAttribute("aria-selected","false"),o.setAttribute("tabindex","-1"),o.parentElement&&o.parentElement.classList.contains("tab-item")&&o.parentElement.classList.remove("is-active")}),s.forEach(o=>{o.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,i,s);a&&a.classList.add("is-active");let r=new CustomEvent("tab:change",{bubbles:!0,detail:{tab:t,pane:a,tabId:i}});e.dispatchEvent(r)},handleKeydown:function(e,t,n,s,i){let a=t.classList.contains("tabs-vertical"),r=Array.from(s).filter(l=>!l.classList.contains("disabled")&&!l.disabled),o=r.indexOf(n),c=o;switch(e.key){case"ArrowLeft":a||(e.preventDefault(),c=o>0?o-1:r.length-1);break;case"ArrowRight":a||(e.preventDefault(),c=o<r.length-1?o+1:0);break;case"ArrowUp":a&&(e.preventDefault(),c=o>0?o-1:r.length-1);break;case"ArrowDown":a&&(e.preventDefault(),c=o<r.length-1?o+1:0);break;case"Home":e.preventDefault(),c=0;break;case"End":e.preventDefault(),c=r.length-1;break;case"Enter":case" ":e.preventDefault(),this.activateTab(t,n,s,i);return;default:return}c!==o&&(r[c].focus(),this.activateTab(t,r[c],s,i))},show:function(e){let t;if(typeof e=="string"?t=document.querySelector(`[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",f)})();(function(){"use strict";let f={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:"neutral",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:{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"},inter:{name:"Inter",family:"'Inter', sans-serif"},"source-sans":{name:"Source Sans 3",family:"'Source Sans 3', sans-serif"},"fira-sans":{name:"Fira Sans",family:"'Fira Sans', sans-serif"},"ibm-plex":{name:"IBM Plex Sans",family:"'IBM Plex Sans', sans-serif"},system:{name:"System Default",family:null},ubuntu:{name:"Ubuntu",family:"'Ubuntu', sans-serif"},"open-sans":{name:"Open Sans",family:"'Open Sans', sans-serif"},rubik:{name:"Rubik",family:"'Rubik', sans-serif"},"titillium-web":{name:"Titillium Web",family:"'Titillium Web', sans-serif"}},THEME_MODES:["system","dark","light"],state:{primary:null,neutral:null,radius:null,font:null,theme:null,isOpen:!1},isInitialized:!1,_cleanup:[],elements:{customizer:null,trigger:null,panel:null,overlay:null},init:function(){if(this.isInitialized){this.bindExistingElements(),this.bindPanelEvents(),this.updateUI();return}this.isInitialized=!0,this._cleanup=[],this.loadPreferences(),this.applyAllPreferences(),this.bindExistingElements(),this.bindEvents(),console.log("Vanduo Theme Customizer initialized")},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.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("--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){this.THEME_MODES.includes(e)||(e=this.DEFAULTS.THEME),this._isApplying=!0;let t=this.state.theme,n=this.getDefaultPrimary(t);if(this.state.primary===n){let s=this.getDefaultPrimary(e);s!==this.state.primary&&this.applyPrimary(s)}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 s=window.Vanduo.components.themeSwitcher;s.state&&s.state.preference!==e&&(s.state.preference=e,typeof s.setStorageValue=="function"&&s.setStorageValue(s.STORAGE_KEY,e),typeof s.updateUI=="function"&&s.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(){if(this.elements.customizer=document.querySelector(".vd-theme-customizer"),this.elements.customizer)this.elements.trigger=this.elements.customizer.querySelector(".vd-theme-customizer-trigger"),this.elements.panel=this.elements.customizer.querySelector(".vd-theme-customizer-panel"),this.elements.overlay=this.elements.customizer.querySelector(".vd-theme-customizer-overlay");else{let e=document.querySelector("[data-theme-customizer-trigger]");e&&this.createDynamicPanel(e)}this.updateUI()},createDynamicPanel:function(e){let t=document.createElement("div");t.className="vd-theme-customizer",this.elements.trigger=e;let n=document.createElement("div");n.className="vd-theme-customizer-overlay";let s=document.createElement("div");s.className="vd-theme-customizer-panel",s.innerHTML=this.getPanelHTML(),document.body.appendChild(n),document.body.appendChild(s),this.elements.panel=s,this.elements.overlay=n,this.elements.customizer={contains:i=>s.contains(i)||e.contains(i)},this.positionPanel(),this.bindPanelEvents(),this.addListener(window,"resize",()=>this.positionPanel())},positionPanel:function(){if(!this.elements.panel||!this.elements.trigger)return;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 t=this.elements.trigger.getBoundingClientRect(),n=320,s=t.bottom+8,i=window.innerWidth,a=i-t.right;i-a-n<8&&(a=i-n-8),this.elements.panel.style.top=s+"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 - "+s+"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(r){let o=document.createElement("div");return o.textContent=String(r??""),o.innerHTML},t=function(r){let o=String(r??"").trim();return/^(#[0-9a-fA-F]{3,8}|rgb[a]?\([^)]{1,60}\)|hsl[a]?\([^)]{1,60}\)|var\(--[a-zA-Z0-9_-]{1,40}\))$/.test(o)?o:"#000000"},n="";for(let[r,o]of Object.entries(this.PRIMARY_COLORS))n+=`<button class="tc-color-swatch${r===this.state.primary?" is-active":""}" data-color="${e(r)}" style="--swatch-color: ${t(o.color)}" title="${e(o.name)}"></button>`;let s="";for(let[r,o]of Object.entries(this.NEUTRAL_COLORS))s+=`<button class="tc-neutral-swatch${r===this.state.neutral?" is-active":""}" data-neutral="${e(r)}" style="--swatch-color: ${t(o.color)}" title="${e(o.name)}"><span>${e(o.name)}</span></button>`;let i="";this.RADIUS_OPTIONS.forEach(r=>{i+=`<button class="tc-radius-btn${r===this.state.radius?" is-active":""}" data-radius="${e(r)}">${e(r)}</button>`});let a="";for(let[r,o]of Object.entries(this.FONT_OPTIONS))a+=`<option value="${e(r)}"${r===this.state.font?" selected":""}>${e(o.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">
@@ -39,5 +39,5 @@
39
39
  <div class="tc-footer">
40
40
  <button class="customizer-reset btn btn-sm btn-outline">Reset to Defaults</button>
41
41
  </div>
42
- `},isUsingDefaultPrimary:function(){return this.state.primary===this.DEFAULTS.PRIMARY_LIGHT||this.state.primary===this.DEFAULTS.PRIMARY_DARK},bindEvents:function(){if(this.elements.trigger&&this.addListener(this.elements.trigger,"click",e=>{e.preventDefault(),e.stopPropagation(),this.toggle()}),this.bindPanelEvents(),window.matchMedia){let e=window.matchMedia("(prefers-color-scheme: dark)"),t=()=>{if(this.state.theme==="system"&&this.isUsingDefaultPrimary()){let n=this.getDefaultPrimary("system");n!==this.state.primary&&(this.applyPrimary(n),this.updateUI())}};e.addEventListener("change",t),this._cleanup.push(()=>e.removeEventListener("change",t))}this.addListener(document,"click",e=>{this.state.isOpen&&this.elements.customizer&&!this.elements.customizer.contains(e.target)&&this.close()}),this.addListener(document,"keydown",e=>{e.key==="Escape"&&this.state.isOpen&&this.close()})},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.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.trigger&&this.elements.trigger.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.applyTheme(this.DEFAULTS.THEME),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(){this._cleanup.forEach(e=>e()),this._cleanup=[],this.elements.panel&&this.elements.panel.removeAttribute("data-customizer-initialized"),this.close(),this.isInitialized=!1}};window.Vanduo&&window.Vanduo.register("themeCustomizer",f),window.ThemeCustomizer=f})();(function(){"use strict";let f={isInitialized:!1,_mediaQuery:null,_onMediaChange:null,init:function(){if(this.STORAGE_KEY="vanduo-theme-preference",this.state={preference:this.getPreference()},this.isInitialized){this.applyTheme(),this.renderUI(),this.updateUI();return}this.isInitialized=!0,this.applyTheme(),this.listenForSystemChanges(),this.renderUI(),console.log("Vanduo Theme Switcher initialized")},getPreference:function(){return this.getStorageValue(this.STORAGE_KEY,"system")},setPreference:function(e){this.state.preference=e,this.setStorageValue(this.STORAGE_KEY,e),this.applyTheme(),window.ThemeCustomizer&&window.ThemeCustomizer.applyTheme&&!window.ThemeCustomizer._isApplying&&window.ThemeCustomizer.applyTheme(e),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}},applyTheme:function(){let e=this.state.preference;e==="system"?document.documentElement.removeAttribute("data-theme"):document.documentElement.setAttribute("data-theme",e)},listenForSystemChanges:function(){this._mediaQuery&&this._onMediaChange||(this._mediaQuery=window.matchMedia("(prefers-color-scheme: dark)"),this._onMediaChange=e=>{this.state.preference==="system"&&this.applyTheme()},this._mediaQuery.addEventListener("change",this._onMediaChange))},renderUI:function(){document.querySelectorAll('[data-toggle="theme"]').forEach(t=>{if(t.getAttribute("data-theme-initialized")==="true"){t.tagName==="SELECT"&&(t.value=this.state.preference);return}if(t.tagName==="SELECT"){t.value=this.state.preference;let n=s=>{this.setPreference(s.target.value)};t.addEventListener("change",n),t._themeToggleHandler=n}else{let n=()=>{let s=["system","light","dark"],i=(s.indexOf(this.state.preference)+1)%s.length;this.setPreference(s[i])};t.addEventListener("click",n),t._themeToggleHandler=n}t.setAttribute("data-theme-initialized","true")})},updateUI:function(){document.querySelectorAll('[data-toggle="theme"]').forEach(t=>{if(t.tagName==="SELECT")t.value=this.state.preference;else{let n=t.querySelector(".theme-current-label");n&&(n.textContent=this.state.preference.charAt(0).toUpperCase()+this.state.preference.slice(1))}})},destroyAll:function(){document.querySelectorAll('[data-toggle="theme"][data-theme-initialized="true"]').forEach(t=>{if(t._themeToggleHandler){let n=t.tagName==="SELECT"?"change":"click";t.removeEventListener(n,t._themeToggleHandler),delete t._themeToggleHandler}t.removeAttribute("data-theme-initialized")}),this._mediaQuery&&this._onMediaChange&&this._mediaQuery.removeEventListener("change",this._onMediaChange),this._mediaQuery=null,this._onMediaChange=null,this.isInitialized=!1}};window.Vanduo&&window.Vanduo.register("themeSwitcher",f)})();(function(){"use strict";let f={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"&&(e={message:e,type:t,duration:n});let s=Object.assign({},this.defaults,e),i=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 r="";if(s.icon){let m=typeof sanitizeHtml=="function"?sanitizeHtml(s.icon):escapeHtml(s.icon);r+=`<span class="vd-toast-icon">${m}</span>`}else s.type&&(r+=`<span class="vd-toast-icon">${this.getDefaultIcon(s.type)}</span>`);let o=typeof escapeHtml=="function"?escapeHtml:function(m){let b=document.createElement("div");return b.appendChild(document.createTextNode(m)),b.innerHTML};if(r+='<div class="vd-toast-content">',s.title&&(r+=`<div class="vd-toast-title">${o(String(s.title))}</div>`),s.message&&(r+=`<div class="vd-toast-message">${o(String(s.message))}</div>`),r+="</div>",s.dismissible&&(r+='<button type="button" class="vd-toast-close" aria-label="Close"></button>'),s.showProgress&&s.duration>0){let m=parseInt(s.duration,10)||0;r+=`<div class="vd-toast-progress" style="animation-duration: ${m}ms"></div>`}if(a.innerHTML=r,i.appendChild(a),a._toastCleanup=[],s.dismissible){let m=a.querySelector(".vd-toast-close"),b=()=>{this.dismiss(a)};m.addEventListener("click",b),a._toastCleanup.push(()=>m.removeEventListener("click",b))}let l=null,c=s.duration,d=null,u=()=>{if(s.duration>0){d=Date.now(),l=setTimeout(()=>{this.dismiss(a)},c),a._toastTimeoutId=l;let m=a.querySelector(".vd-toast-progress");m&&(m.style.animationPlayState="running")}},p=()=>{if(l){clearTimeout(l),l=null,a._toastTimeoutId=null,c-=Date.now()-d;let m=a.querySelector(".vd-toast-progress");m&&(m.style.animationPlayState="paused")}};s.pauseOnHover&&(a.addEventListener("mouseenter",p),a.addEventListener("mouseleave",u),a._toastCleanup.push(()=>a.removeEventListener("mouseenter",p),()=>a.removeEventListener("mouseleave",u))),requestAnimationFrame(()=>{a.classList.add("is-visible"),u()}),a._toastConfig=s;let h=new CustomEvent("toast:show",{bubbles:!0,detail:{toast:a,config:s}});return a.dispatchEvent(h),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(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",f),window.Toast=f})();(function(){"use strict";let f={tooltips:new Map,delayTimers:new Map,sanitizeHtml:function(e){if(typeof sanitizeHtml=="function")return sanitizeHtml(e);let t=document.createElement("div");return t.textContent=e||"",t.innerHTML},init:function(){document.querySelectorAll("[data-tooltip], [data-tooltip-html]").forEach(t=>{this.tooltips.has(t)||this.initTooltip(t)})},initTooltip:function(e){let t=this.createTooltip(e),n=[],s=()=>{this.showTooltip(e,t)},i=()=>{this.hideTooltip(e,t)},a=()=>{this.showTooltip(e,t)},r=()=>{this.hideTooltip(e,t)};e.addEventListener("mouseenter",s),e.addEventListener("mouseleave",i),e.addEventListener("focus",a),e.addEventListener("blur",r),n.push(()=>e.removeEventListener("mouseenter",s),()=>e.removeEventListener("mouseleave",i),()=>e.removeEventListener("focus",a),()=>e.removeEventListener("blur",r)),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;s?(t.innerHTML=this.sanitizeHtml(s),t.classList.add("vd-tooltip-html")):i&&(t.textContent=i);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 r=parseInt(e.dataset.tooltipDelay)||0;return t.dataset.delay=r,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(),a=window.pageYOffset||document.documentElement.scrollTop,r=window.pageXOffset||document.documentElement.scrollLeft,o=0,l=0;switch(n){case"top":o=s.top+a-i.height-8,l=s.left+r+s.width/2-i.width/2;break;case"bottom":o=s.bottom+a+8,l=s.left+r+s.width/2-i.width/2;break;case"left":o=s.top+a+s.height/2-i.height/2,l=s.left+r-i.width-8;break;case"right":o=s.top+a+s.height/2-i.height/2,l=s.right+r+8;break}let c=window.innerWidth,d=window.innerHeight,u=8;l<u?l=u:l+i.width>c-u&&(l=c-i.width-u),o<a+u?o=a+u:o+i.height>a+d-u&&(o=a+d-i.height-u),t.style.cssText=`position: absolute; top: 0; left: 0; transform: translate(${l}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:i}=this.tooltips.get(s);n?(i.innerHTML=this.sanitizeHtml(t),i.classList.add("vd-tooltip-html")):(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",f),window.VanduoTooltips=f})();(function(){"use strict";let f={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..."};function e(n){let s=Object.assign({},f,n||{}),i={initialized:!1,index:[],results:[],activeIndex:-1,isOpen:!1,query:"",container:null,input:null,resultsContainer:null,debounceTimer:null,boundHandlers:{}};function a(g,y,...E){try{y(...E)}catch(A){console.warn('[Vanduo Search] Callback error in "'+g+'":',A)}}function r(g){if(i.resultsContainer)try{i.resultsContainer.innerHTML=g}catch(y){console.warn("[Vanduo Search] Failed to render results:",y)}}function o(){return i.initialized?U:(i.container=document.querySelector(s.containerSelector),!i.container||(i.input=i.container.querySelector(s.inputSelector),i.resultsContainer=i.container.querySelector(s.resultsSelector),!i.input||!i.resultsContainer)?(i.initialized=!1,null):(s.placeholder&&i.input.setAttribute("placeholder",s.placeholder),l(),m(),k(),i.initialized=!0,U))}function l(){if(i.index=[],s.data&&Array.isArray(s.data)){s.data.forEach(function(E){i.index.push({id:E.id||h(E.title),title:E.title||"",category:E.category||"",categorySlug:h(E.category||""),content:E.content||"",keywords:E.keywords||p(E.title+" "+E.content),url:E.url||"#"+(E.id||h(E.title)),icon:E.icon||""})});return}let g=document.querySelectorAll(s.contentSelector),y=c();g.forEach(function(E){let A=E.id;if(!A)return;let _=E.querySelector(s.titleSelector),N=_?_.textContent.replace(/v[\d.]+/g,"").trim():A,X=y[A]||"Documentation",$=d(E),B=u(E,N),Y=_?_.querySelector("i.ph"):null,G="";if(Y&&Y.classList){for(let K=0;K<Y.classList.length;K++)if(Y.classList[K].indexOf("ph-")===0){G=Y.classList[K];break}}i.index.push({id:A,title:N,category:X,categorySlug:h(X),content:$,keywords:B,url:"#"+A,icon:G})})}function c(){let g={},y="Documentation";return document.querySelectorAll(s.navSelector+", "+s.sectionSelector).forEach(function(A){if(A.classList.contains("doc-nav-section"))y=A.textContent.trim();else{let _=A.getAttribute("href");if(_&&_.startsWith("#")){let N=_.substring(1);g[N]=y}}}),g}function d(g){let y=g.cloneNode(!0);y.querySelectorAll(s.excludeFromContent).forEach(function(_){_.remove()});let A=y.textContent||"";return A=A.replace(/\s+/g," ").trim(),A.substring(0,s.maxContentLength)}function u(g,y){let E=[];return y.toLowerCase().split(/\s+/).forEach(function(N){N.length>2&&E.push(N)}),g.querySelectorAll("code").forEach(function(N){let $=(N.textContent||"").match(/\.([\w-]+)/g);$&&$.forEach(function(B){E.push(B.substring(1).toLowerCase())})}),g.querySelectorAll("[data-tooltip], [data-modal]").forEach(function(N){N.getAttributeNames().filter(function($){return $.startsWith("data-")}).forEach(function($){E.push($.replace("data-",""))})}),Array.from(new Set(E))}function p(g){return g.toLowerCase().split(/\s+/).filter(function(E){return E.length>2})}function h(g){return g.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"")}function m(){i.boundHandlers.handleInput=function(g){T(g)},i.boundHandlers.handleFocus=function(){i.query.length>=s.minQueryLength&&R()},i.boundHandlers.handleKeydown=function(g){H(g)},i.boundHandlers.handleOutsideClick=function(g){i.container.contains(g.target)||O()},i.boundHandlers.handleGlobalKeydown=function(g){s.keyboardShortcut&&(g.metaKey||g.ctrlKey)&&g.key==="k"&&(g.preventDefault(),i.input.focus(),i.input.select())},i.boundHandlers.handleResultClick=function(g){let y=g.target.closest(".vd-doc-search-result");if(y){let E=parseInt(y.dataset.index,10);q(E)}},i.input.addEventListener("input",i.boundHandlers.handleInput),i.input.addEventListener("focus",i.boundHandlers.handleFocus),i.input.addEventListener("keydown",i.boundHandlers.handleKeydown),document.addEventListener("click",i.boundHandlers.handleOutsideClick),document.addEventListener("keydown",i.boundHandlers.handleGlobalKeydown),i.resultsContainer.addEventListener("click",i.boundHandlers.handleResultClick)}function b(){i.input&&(i.input.removeEventListener("input",i.boundHandlers.handleInput),i.input.removeEventListener("focus",i.boundHandlers.handleFocus),i.input.removeEventListener("keydown",i.boundHandlers.handleKeydown)),document.removeEventListener("click",i.boundHandlers.handleOutsideClick),document.removeEventListener("keydown",i.boundHandlers.handleGlobalKeydown),i.resultsContainer&&i.resultsContainer.removeEventListener("click",i.boundHandlers.handleResultClick)}function k(){let g=i.resultsContainer.id||"search-results-"+Math.random().toString(36).substr(2,9);i.resultsContainer.id=g,i.input.setAttribute("role","combobox"),i.input.setAttribute("aria-autocomplete","list"),i.input.setAttribute("aria-controls",g),i.input.setAttribute("aria-expanded","false"),i.resultsContainer.setAttribute("role","listbox"),i.resultsContainer.setAttribute("aria-label","Search results")}function T(g){let y=g.target.value.trim();i.debounceTimer&&clearTimeout(i.debounceTimer),i.debounceTimer=setTimeout(function(){if(i.query=y,y.length<s.minQueryLength){O();return}i.results=I(y),i.activeIndex=-1,V(),R(),typeof s.onSearch=="function"&&a("onSearch",s.onSearch,y,i.results)},s.debounceMs)}function H(g){if(!i.isOpen){g.key==="ArrowDown"&&i.query.length>=s.minQueryLength&&(g.preventDefault(),i.results=I(i.query),V(),R());return}switch(g.key){case"ArrowDown":g.preventDefault(),x(1);break;case"ArrowUp":g.preventDefault(),x(-1);break;case"Enter":g.preventDefault(),i.activeIndex>=0?q(i.activeIndex):i.results.length>0&&q(0);break;case"Escape":g.preventDefault(),O();break;case"Tab":O();break}}function I(g){let y=g.toLowerCase().split(/\s+/).filter(function(A){return A.length>0}),E=[];return i.index.forEach(function(A){let _=0,N=A.title.toLowerCase(),X=A.category.toLowerCase(),$=A.content.toLowerCase();y.forEach(function(B){N.includes(B)&&(_+=100,N===B?_+=50:N.startsWith(B)&&(_+=25)),X.includes(B)&&(_+=50),A.keywords.some(function(G){return G.includes(B)})&&(_+=30),$.includes(B)&&(_+=10)}),_>0&&E.push({id:A.id,title:A.title,category:A.category,categorySlug:A.categorySlug,content:A.content,url:A.url,icon:A.icon,score:_})}),E.sort(function(A,_){return _.score-A.score}),E.slice(0,s.maxResults)}function V(){if(i.results.length===0){r(S());return}let g='<ul class="vd-doc-search-results-list" role="listbox">';i.results.forEach(function(y,E){let A=E===i.activeIndex,_=y.icon||L(y.categorySlug),N=D(y.content,i.query);g+='<li class="vd-doc-search-result'+(A?" is-active":"")+'" role="option" id="vd-doc-search-result-'+E+'" data-index="'+E+'" data-category="'+w(y.categorySlug)+'" aria-selected="'+A+'"><div class="vd-doc-search-result-icon"><i class="ph '+w(_)+'"></i></div><div class="vd-doc-search-result-content"><div class="vd-doc-search-result-title">'+M(y.title,i.query)+'</div><div class="vd-doc-search-result-category">'+w(y.category)+'</div><div class="vd-doc-search-result-excerpt">'+M(N,i.query)+"</div></div></li>"}),g+="</ul>",g+=v(),r(g)}function S(){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">'+w(s.emptyTitle)+'</div><div class="vd-doc-search-empty-text">'+w(s.emptyText)+"</div></div>"}function v(){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 L(g){return s.categoryIcons[g]||s.categoryIcons.default||"ph-file-text"}function D(g,y){let E=y.toLowerCase().split(/\s+/),A=g.toLowerCase(),_=100,N=-1;for(let Y=0;Y<E.length;Y++){let G=A.indexOf(E[Y]);G!==-1&&(N===-1||G<N)&&(N=G)}if(N===-1)return g.substring(0,_)+"...";let X=Math.max(0,N-30),$=Math.min(g.length,N+_),B=g.substring(X,$);return X>0&&(B="..."+B),$<g.length&&(B=B+"..."),B}function M(g,y){if(!y)return w(g);let E=y.toLowerCase().split(/\s+/).filter(function(_){return _.length>0}),A=w(g);return E.forEach(function(_){if(_.length>50)return;let N=new RegExp("("+_.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+")","gi");A=A.replace(N,"<"+s.highlightTag+">$1</"+s.highlightTag+">")}),A}function w(g){let y=document.createElement("div");return y.textContent=g,y.innerHTML}function x(g){let y=i.activeIndex+g;y<0?y=i.results.length-1:y>=i.results.length&&(y=0),C(y)}function C(g){let y=i.resultsContainer.querySelector(".vd-doc-search-result.is-active");y&&(y.classList.remove("is-active"),y.setAttribute("aria-selected","false")),i.activeIndex=g;let E=i.resultsContainer.querySelector('[data-index="'+g+'"]');E&&(E.classList.add("is-active"),E.setAttribute("aria-selected","true"),i.input.setAttribute("aria-activedescendant","vd-doc-search-result-"+g),E.scrollIntoView({block:"nearest"}))}function q(g){let y=i.results[g];if(!y)return;if(O(),i.input.value="",i.query="",typeof s.onSelect=="function"){a("onSelect",s.onSelect,y);return}let E=document.querySelector(y.url);E&&(E.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",y.url),z(y.id))}function z(g){document.querySelectorAll(s.navSelector).forEach(function(E){E.classList.remove("active"),E.getAttribute("href")==="#"+g&&E.classList.add("active")})}function R(){i.isOpen||(i.isOpen=!0,i.resultsContainer.classList.add("is-open"),i.input.setAttribute("aria-expanded","true"),typeof s.onOpen=="function"&&a("onOpen",s.onOpen))}function O(){i.isOpen&&(i.isOpen=!1,i.activeIndex=-1,i.resultsContainer.classList.remove("is-open"),i.input.setAttribute("aria-expanded","false"),i.input.removeAttribute("aria-activedescendant"),typeof s.onClose=="function"&&a("onClose",s.onClose))}function P(){b(),i.initialized=!1,i.index=[],i.results=[],i.isOpen=!1,i.query="",i.debounceTimer&&clearTimeout(i.debounceTimer),i.resultsContainer&&r("")}function j(){l()}function W(g){Object.assign(s,g)}function J(){return Object.assign({},s)}function F(){return i.index.slice()}let U={init:o,destroy:P,rebuild:j,search:I,open:R,close:O,setConfig:W,getConfig:J,getIndex:F};return U}let t={create:function(n){let s=e(n);return s&&s.init(),s||null},_instance:null,config:Object.assign({},f),init:function(n){return this._instance&&this._instance.destroy(),n&&Object.assign(this.config,n),this._instance=e(this.config),this._instance?this._instance.init():null},destroy:function(){this._instance&&(this._instance.destroy(),this._instance=null)},destroyAll:function(){this.destroy()},rebuild:function(){this._instance&&this._instance.rebuild()},search:function(n){return this._instance?this._instance.search(n):[]},open:function(){this._instance&&this._instance.open()},close:function(){this._instance&&this._instance.close()}};typeof window.Vanduo<"u"&&window.Vanduo.register("docSearch",t),window.Search=t,window.DocSearch=t,window.VanduoDocSearch=t})();(function(){"use strict";let f={instances:new Map,currentDrag:null,touchState:null,feedbackElement:null,init:function(){document.querySelectorAll(".vd-draggable, [data-draggable]").forEach(s=>{this.instances.has(s)||this.initDraggable(s)}),document.querySelectorAll(".vd-draggable-container, .vd-draggable-container-vertical").forEach(s=>{this.instances.has(s)||this.initContainer(s)}),document.querySelectorAll(".vd-drop-zone").forEach(s=>{this.instances.has(s)||this.initDropZone(s)}),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 a=d=>{this.handleTouchStart(d,e)};e.addEventListener("touchstart",a),t.push(()=>e.removeEventListener("touchstart",a));let r=d=>{this.handleTouchMove(d,e)};e.addEventListener("touchmove",r,{passive:!1}),t.push(()=>e.removeEventListener("touchmove",r));let o=d=>{this.handleTouchEnd(d,e)};e.addEventListener("touchend",o,{passive:!1}),t.push(()=>e.removeEventListener("touchend",o));let l=d=>{this.handleTouchEnd(d,e)};e.addEventListener("touchcancel",l),t.push(()=>e.removeEventListener("touchcancel",l));let c=d=>{this.handleKeydown(d,e)};e.addEventListener("keydown",c),t.push(()=>e.removeEventListener("keydown",c)),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(r=>{this.instances.has(r)||this.initDraggable(r)});let n=[],s=r=>{r.preventDefault(),r.dataTransfer.dropEffect="move"},i=r=>{if(r.preventDefault(),r.dataTransfer.dropEffect="move",!this.currentDrag)return;let o=this.currentDrag.element;e.contains(o)&&(r.clientX===0&&r.clientY===0||this.handleReorder(e,o,r.clientX,r.clientY))},a=r=>{r.preventDefault()};e.addEventListener("dragenter",s),e.addEventListener("dragover",i),e.addEventListener("drop",a),n.push(()=>{e.removeEventListener("dragenter",s),e.removeEventListener("dragover",i),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=r=>{r.preventDefault(),this.handleDragOver(r,e)};e.addEventListener("dragover",n),t.push(()=>e.removeEventListener("dragover",n));let s=r=>{r.preventDefault(),this.handleDragEnter(r,e)};e.addEventListener("dragenter",s),t.push(()=>e.removeEventListener("dragenter",s));let i=r=>{this.handleDragLeave(r,e)};e.addEventListener("dragleave",i),t.push(()=>e.removeEventListener("dragleave",i));let a=r=>{r.preventDefault(),this.handleDrop(r,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];this.touchState={element:t,startX:n.clientX,startY:n.clientY,startTime:Date.now(),isDragging:!1}},handleTouchMove:function(e,t){if(!this.touchState)return;let n=e.touches[0],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)},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}}}));let a=t.closest(".vd-draggable-container");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(),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 n=e.changedTouches[0],s=this.currentDrag?.data||this.getData(t),i=this.touchState?.startX||0,a=this.touchState?.startY||0;t.dispatchEvent(new CustomEvent("draggable:end",{bubbles:!0,detail:{element:t,data:s,position:{x:n.clientX,y:n.clientY},delta:{x:n.clientX-i,y:n.clientY-a}}}))}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(),t.classList.remove("is-drag-over"),t.dispatchEvent(new CustomEvent("draggable:drop",{bubbles:!0,detail:{zone:t,element:this.currentDrag?.element,data:this.currentDrag?.data,position:{x:e.clientX,y:e.clientY}}}))},handleReorder:function(e,t,n,s){let i=e.classList.contains("vd-draggable-container-vertical"),r=[...e.querySelectorAll(".vd-draggable-item:not(.is-dragging), .vd-draggable:not(.is-dragging)")].reduce((o,l)=>{let c=l.getBoundingClientRect(),d=i?s-c.top-c.height/2:n-c.left-c.width/2;return d<0&&d>o.offset?{offset:d,element:l}:o},{offset:Number.NEGATIVE_INFINITY}).element;r==null?e.appendChild(t):e.insertBefore(t,r)},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),Object.assign(this.feedbackElement.style,{left:e-20+"px",top:t-20+"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",f),window.VanduoDraggable=f})();(function(){"use strict";let f=new Map;function e(o){try{return new URL(o,window.location.href).origin===window.location.origin}catch{return!1}}function t(o,l){let d=new DOMParser().parseFromString(l.trim(),"text/html"),u=["SCRIPT","IFRAME","OBJECT","EMBED","FORM","BASE","LINK","META","STYLE"];for(let m of u){let b=d.querySelectorAll(m);for(let k=b.length-1;k>=0;k--)b[k].parentNode.removeChild(b[k])}function p(m){if(m.nodeType===Node.ELEMENT_NODE){let b=m.attributes;for(let T=b.length-1;T>=0;T--){let H=b[T].name.toLowerCase(),V=b[T].value.toLowerCase().trim();(H.startsWith("on")||V.startsWith("javascript:")||V.startsWith("data:")||V.startsWith("vbscript:"))&&m.removeAttribute(b[T].name)}let k=m.childNodes;for(let T=0;T<k.length;T++)p(k[T])}}p(d.body);let h=Array.from(d.body.childNodes);for(;o.firstChild;)o.removeChild(o.firstChild);h.forEach(function(m){o.appendChild(document.adoptNode(m))})}function n(){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" style="animation-delay:0s;"></div><div class="vd-spinner vd-spinner-sm vd-spinner-warning" style="animation-delay:-0.15s;"></div><div class="vd-spinner vd-spinner-sm vd-spinner-error" style="animation-delay:-0.3s;"></div><div class="vd-spinner vd-spinner-sm vd-spinner-info" style="animation-delay:-0.45s;"></div></div><span class="vd-dynamic-loader-text">Loading\u2026</span></div></div>'}function s(){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" style="animation-delay:0s;"></div><div class="vd-spinner vd-spinner-sm vd-spinner-warning" style="animation-delay:-0.15s;"></div><div class="vd-spinner vd-spinner-sm vd-spinner-error" style="animation-delay:-0.3s;"></div><div class="vd-spinner vd-spinner-sm vd-spinner-info" style="animation-delay:-0.45s;"></div></div><span class="vd-dynamic-loader-text">Loading\u2026</span></div>'}function i(o){return!o||o==="skeleton"?n():o==="spinner"?s():o}function a(o,l,c){o.dispatchEvent(new CustomEvent(l,{bubbles:!0,detail:c||{}}))}let r={observe:function(o,l,c){if(!(o instanceof Element)){console.warn("[VanduoLazyLoad] observe() requires a DOM Element.");return}if(typeof l!="function"){console.warn("[VanduoLazyLoad] observe() requires a callback function.");return}if(f.has(o))return;let d=c&&c.threshold!=null?c.threshold:0,u=c&&c.rootMargin?c.rootMargin:"0px",p=new IntersectionObserver(function(h,m){h.forEach(function(b){if(b.isIntersecting){m.unobserve(b.target),f.delete(b.target);try{l(b.target)}catch(k){console.error("[VanduoLazyLoad] Callback threw:",k)}}})},{threshold:d,rootMargin:u});f.set(o,p),p.observe(o)},unobserve:function(o){let l=f.get(o);l&&(l.unobserve(o),f.delete(o))},unobserveAll:function(){f.forEach(function(o,l){o.unobserve(l)}),f.clear()},loadSection:function(o,l,c){if(typeof o!="string"||!o){console.warn("[VanduoLazyLoad] loadSection() requires a non-empty URL string.");return}if(!(l instanceof Element)){console.warn("[VanduoLazyLoad] loadSection() requires a DOM Element as containerEl.");return}if(!e(o)){console.error("[VanduoLazyLoad] loadSection() blocked cross-origin URL:",o);return}let d=c||{},u=i(d.placeholder);t(l,u),a(l,"lazysection:loading",{url:o}),this.observe(l,function(){let p=new window.AbortController,h=setTimeout(function(){p.abort()},1e4);window.fetch(o,{signal:p.signal}).then(function(m){if(clearTimeout(h),!m.ok)throw new Error("HTTP "+m.status);return m.text()}).then(function(m){t(l,m),a(l,"lazysection:loaded",{url:o}),typeof window.Vanduo<"u"&&window.Vanduo.init(),typeof d.onLoaded=="function"&&d.onLoaded(l)}).catch(function(m){let b=document.createElement("div");b.className="vd-alert vd-alert-error",b.setAttribute("role","alert");let k=document.createElement("span");k.textContent="Failed to load content. ";let T=document.createElement("small");for(T.style.opacity="0.7",T.textContent=m.message,b.appendChild(k),b.appendChild(T);l.firstChild;)l.removeChild(l.firstChild);l.appendChild(b),a(l,"lazysection:error",{url:o,error:m}),console.error("[VanduoLazyLoad] loadSection failed:",m),typeof d.onError=="function"&&d.onError(m)})},{threshold:d.threshold,rootMargin:d.rootMargin})},init:function(){let o=this;document.querySelectorAll("[data-vd-lazy]").forEach(function(c){if(f.has(c)||c.dataset.vdLazyState==="loading"||c.dataset.vdLazyState==="loaded")return;let d=c.getAttribute("data-vd-lazy");if(!d)return;c.dataset.vdLazyState="loading";let u=c.getAttribute("data-vd-lazy-placeholder")||"skeleton";o.loadSection(d,c,{placeholder:u,onLoaded:function(){c.dataset.vdLazyState="loaded"},onError:function(){c.dataset.vdLazyState="error"}})})}};typeof window.Vanduo<"u"&&window.Vanduo.register("LazyLoad",r),window.VanduoLazyLoad=r})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll(".vd-flow, .vd-carousel").forEach(t=>{this.instances.has(t)||this.initInstance(t)})},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"),a=parseInt(e.getAttribute("data-vd-interval"),10)||5e3,r=e.getAttribute("data-vd-loop")!=="false",o={current:0,total:n.length,autoplayTimer:null,isFade:s,loop:r,isDragging:!1,startX:0,currentX:0,threshold:50},l=[];n.forEach((v,L)=>{v.setAttribute("role","group"),v.setAttribute("aria-roledescription","slide"),v.setAttribute("aria-label","Slide "+(L+1)+" of "+n.length),L===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 c=document.createElement("div");c.setAttribute("aria-live","polite"),c.setAttribute("aria-atomic","true"),c.className="sr-only",c.style.cssText="position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);",e.appendChild(c);let d=(v,L)=>{L===void 0&&(L=!0);let D=v;o.loop?D=(v%o.total+o.total)%o.total:D=Math.max(0,Math.min(v,o.total-1));let M=o.current;o.current=D,o.isFade?n.forEach((x,C)=>{x.classList.toggle("is-active",C===D)}):t.style.transform="translateX(-"+D*100+"%)",e.querySelectorAll(".vd-flow-indicator").forEach((x,C)=>{x.classList.toggle("is-active",C===D),x.setAttribute("aria-selected",C===D?"true":"false")}),n.forEach((x,C)=>{x.setAttribute("aria-hidden",C!==D?"true":"false")}),L&&(c.textContent="Slide "+(D+1)+" of "+o.total),e.dispatchEvent(new CustomEvent("flow:change",{detail:{current:D,previous:M,total:o.total}}))},u=()=>d(o.current+1),p=()=>d(o.current-1),h=e.querySelector(".vd-flow-prev"),m=e.querySelector(".vd-flow-next");if(h){let v=()=>p();h.addEventListener("click",v),l.push(()=>h.removeEventListener("click",v))}if(m){let v=()=>u();m.addEventListener("click",v),l.push(()=>m.removeEventListener("click",v))}e.querySelectorAll(".vd-flow-indicator").forEach((v,L)=>{v.setAttribute("role","tab"),v.setAttribute("aria-selected",L===0?"true":"false"),v.setAttribute("aria-label","Go to slide "+(L+1));let D=()=>d(L);v.addEventListener("click",D),l.push(()=>v.removeEventListener("click",D))});let k=v=>{v.key==="ArrowLeft"&&(p(),v.preventDefault()),v.key==="ArrowRight"&&(u(),v.preventDefault())};e.setAttribute("tabindex","0"),e.addEventListener("keydown",k),l.push(()=>e.removeEventListener("keydown",k));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")},H=v=>{o.isDragging&&(o.currentX=v.clientX||v.touches&&v.touches[0].clientX||0)},I=()=>{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?u():p())};e.addEventListener("mousedown",T),e.addEventListener("mousemove",H),e.addEventListener("mouseup",I),e.addEventListener("mouseleave",I),e.addEventListener("touchstart",T,{passive:!0}),e.addEventListener("touchmove",H,{passive:!0}),e.addEventListener("touchend",I),l.push(()=>e.removeEventListener("mousedown",T),()=>e.removeEventListener("mousemove",H),()=>e.removeEventListener("mouseup",I),()=>e.removeEventListener("mouseleave",I),()=>e.removeEventListener("touchstart",T),()=>e.removeEventListener("touchmove",H),()=>e.removeEventListener("touchend",I));let V=()=>{S(),o.autoplayTimer=setInterval(u,a)},S=()=>{o.autoplayTimer&&(clearInterval(o.autoplayTimer),o.autoplayTimer=null)};if(i){V();let v=()=>S(),L=()=>V();e.addEventListener("mouseenter",v),e.addEventListener("mouseleave",L),e.addEventListener("focusin",v),e.addEventListener("focusout",L),l.push(()=>e.removeEventListener("mouseenter",v),()=>e.removeEventListener("mouseleave",L),()=>e.removeEventListener("focusin",v),()=>e.removeEventListener("focusout",L),()=>S())}d(0,!1),this.instances.set(e,{cleanup:l,goTo:d,next:u,prev:p,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",f),window.VanduoFlow=f})();(function(){"use strict";let f={instances:new Map,_globalCleanups:[],init:function(){if(document.querySelectorAll("[data-vd-bubble], [data-vd-popover]").forEach(t=>{this.instances.has(t)||this.initInstance(t)}),this._globalCleanups.length===0){let t=s=>{this.instances.forEach((i,a)=>{!i.popover.contains(s.target)&&!a.contains(s.target)&&this.hide(a)})},n=s=>{s.key==="Escape"&&this.instances.forEach((i,a)=>this.hide(a))};document.addEventListener("click",t,!0),document.addEventListener("keydown",n),this._globalCleanups.push(()=>document.removeEventListener("click",t,!0),()=>document.removeEventListener("keydown",n))}},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"),a=e.getAttribute("data-vd-bubble")||e.getAttribute("data-vd-popover")||"",r=e.getAttribute("data-vd-bubble-html")||e.getAttribute("data-vd-popover-html");if(i){let d=document.createElement("div");d.className="vd-bubble-header";let u=document.createElement("span");u.textContent=i;let p=document.createElement("button");p.className="vd-bubble-close",p.setAttribute("aria-label","Close"),p.innerHTML="&times;",d.appendChild(u),d.appendChild(p),s.appendChild(d);let h=m=>{m.stopPropagation(),this.hide(e)};p.addEventListener("click",h),t.push(()=>p.removeEventListener("click",h))}let o=document.createElement("div");o.className="vd-bubble-body",r?typeof sanitizeHtml=="function"?o.innerHTML=sanitizeHtml(r):o.textContent=r:o.textContent=a,s.appendChild(o),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 c=d=>{d.stopPropagation(),s.classList.contains("is-visible")?this.hide(e):(this.hideAll(),this.show(e))};e.addEventListener("click",c),t.push(()=>e.removeEventListener("click",c)),this.instances.set(e,{popover:s,cleanup:t,placement:n})},position:function(e,t,n){let s=e.getBoundingClientRect(),i=t.getBoundingClientRect(),a=10,r,o;switch(n){case"top":r=s.top-i.height-a+window.scrollY,o=s.left+(s.width-i.width)/2+window.scrollX;break;case"left":r=s.top+(s.height-i.height)/2+window.scrollY,o=s.left-i.width-a+window.scrollX;break;case"right":r=s.top+(s.height-i.height)/2+window.scrollY,o=s.right+a+window.scrollX;break;default:r=s.bottom+a+window.scrollY,o=s.left+(s.width-i.width)/2+window.scrollX}o=Math.max(8,Math.min(o,window.innerWidth-i.width-8)),r=Math.max(8,r),t.style.top=r+"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}))},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})))},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",f),window.VanduoBubble=f})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll("[data-vd-waypoint-nav], [data-vd-scrollspy-nav]").forEach(t=>{this.instances.has(t)||this.initInstance(t)})},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(c=>{let d=c.getAttribute("href").slice(1),u=document.getElementById(d);u&&(u.setAttribute("data-vd-waypoint-section",""),i.push({id:d,link:c,section:u}))}),i.length===0)return;let a=new Set,r=c=>{t.forEach(u=>u.classList.remove("is-active"));let d=t.find(u=>u.getAttribute("href")==="#"+c);d&&(d.classList.add("is-active"),e.dispatchEvent(new CustomEvent("waypoint:change",{detail:{activeId:c,link:d}})))},o="-"+s+"px 0px -40% 0px",l=new IntersectionObserver(c=>{c.forEach(d=>{d.isIntersecting?a.add(d.target.id):a.delete(d.target.id)});for(let d=0;d<i.length;d++)if(a.has(i[d].id)){r(i[d].id);return}},{rootMargin:o,threshold:0});i.forEach(c=>l.observe(c.section)),t.forEach(c=>{let d=u=>{u.preventDefault();let p=c.getAttribute("href").slice(1),h=document.getElementById(p);h&&(h.scrollIntoView({behavior:"smooth"}),r(p))};c.addEventListener("click",d),n.push(()=>c.removeEventListener("click",d))}),n.push(()=>l.disconnect()),this.instances.set(e,{observer:l,cleanup:n,sections:i,setActive:r})},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",f),window.VanduoWaypoint=f})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll(".vd-ripple, [data-vd-ripple]").forEach(t=>{this.instances.has(t)||this.initInstance(t)})},initInstance:function(e){let t=[],n=s=>{let i=e.getBoundingClientRect(),a=Math.max(i.width,i.height),r=(s.clientX||s.touches&&s.touches[0].clientX||i.left+i.width/2)-i.left-a/2,o=(s.clientY||s.touches&&s.touches[0].clientY||i.top+i.height/2)-i.top-a/2,l=document.createElement("span");l.className="vd-ripple-wave",l.style.width=a+"px",l.style.height=a+"px",l.style.left=r+"px",l.style.top=o+"px",e.appendChild(l),l.addEventListener("animationend",()=>{l.parentNode&&l.parentNode.removeChild(l)})};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",f),window.VanduoRipple=f})();(function(){"use strict";function f(n){if(!n||n===document.body)return!1;let s=window.getComputedStyle(n),i=s.overflowY,a=s.overflowX,r=/(auto|scroll|overlay)/.test(i)&&n.scrollHeight>n.clientHeight,o=/(auto|scroll|overlay)/.test(a)&&n.scrollWidth>n.clientWidth;return r||o}function e(n){let s=n.parentElement;for(;s&&s!==document.body&&s!==document.documentElement;){if(f(s))return s;s=s.parentElement}return null}let t={instances:new Map,init:function(){document.querySelectorAll(".vd-affix, .vd-sticky, [data-vd-affix]").forEach(s=>{this.instances.has(s)||this.initInstance(s)})},initInstance:function(n){let s=[],i=parseInt(n.getAttribute("data-vd-affix-offset")||"0",10),a=Number.isNaN(i)?0:i,r=e(n),o=!1,l=document.createElement("div");l.style.cssText="display:block;height:1px;margin-bottom:-1px;visibility:hidden;pointer-events:none;",n.parentNode.insertBefore(l,n),n.style.setProperty("--affix-top-offset",a+"px");function c(){o||(o=!0,n.classList.add("is-stuck"),n.dispatchEvent(new CustomEvent("affix:stuck",{bubbles:!0,detail:{offset:a,root:r||window}})))}function d(){o&&(o=!1,n.classList.remove("is-stuck"),n.dispatchEvent(new CustomEvent("affix:unstuck",{bubbles:!0,detail:{offset:a,root:r||window}})))}let u=new IntersectionObserver(function(p){p.forEach(h=>{h.isIntersecting?d():c()})},{root:r,rootMargin:"-"+a+"px 0px 0px 0px",threshold:0});u.observe(l),s.push(()=>u.disconnect(),()=>{l.parentNode&&l.parentNode.removeChild(l)},()=>{n.classList.remove("is-stuck"),n.style.removeProperty("--affix-top-offset")}),this.instances.set(n,{cleanup:s,observer:u,sentinel:l,scrollParent:r})},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";let f={instances:new Map,init:function(){document.querySelectorAll("[data-vd-suggest], [data-vd-autocomplete]").forEach(t=>{this.instances.has(t)||this.initInstance(t)})},initInstance:function(e){let t=[],n=parseInt(e.getAttribute("data-vd-suggest-min-chars")||"1",10),s=e.getAttribute("data-vd-suggest-url")||"",i=e.getAttribute("data-vd-suggest")||e.getAttribute("data-vd-autocomplete")||"",a=[];try{a=JSON.parse(i)}catch{a=i.split(",").map(v=>v.trim()).filter(Boolean)}let r=e.closest(".vd-suggest-wrapper, .vd-autocomplete-wrapper");r||(r=document.createElement("div"),r.className="vd-suggest-wrapper",e.parentNode.insertBefore(r,e),r.appendChild(e));let o=document.createElement("ul");o.className="vd-suggest-list",o.setAttribute("role","listbox");let l="vd-suggest-"+Math.random().toString(36).slice(2,9);o.id=l,r.appendChild(o),e.setAttribute("role","combobox"),e.setAttribute("aria-autocomplete","list"),e.setAttribute("aria-expanded","false"),e.setAttribute("aria-controls",l),e.setAttribute("autocomplete","off");let c=-1,d=[],u=null,p=(S,v)=>{if(o.innerHTML="",d=S,c=-1,S.length===0){let L=document.createElement("li");L.className="vd-suggest-empty",L.textContent="No results",o.appendChild(L);return}S.forEach((L,D)=>{let M=document.createElement("li");M.className="vd-suggest-item",M.setAttribute("role","option"),M.id=l+"-item-"+D;let w=typeof L=="object"&&(L.label||L.text)||String(L);if(v){let x=new RegExp("("+v.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+")","gi");M.innerHTML=w.replace(x,'<span class="vd-suggest-match">$1</span>')}else M.textContent=w;M.addEventListener("click",()=>b(D)),o.appendChild(M)})},h=()=>{o.classList.add("is-open"),e.setAttribute("aria-expanded","true")},m=()=>{o.classList.remove("is-open"),e.setAttribute("aria-expanded","false"),c=-1,e.removeAttribute("aria-activedescendant")},b=S=>{let v=d[S],L=typeof v=="object"&&(v.value||v.label)||String(v);e.value=L,m(),e.dispatchEvent(new CustomEvent("suggest:select",{detail:{value:L,item:v,index:S},bubbles:!0}))},k=S=>{let v=o.querySelectorAll(".vd-suggest-item");v.forEach(L=>L.classList.remove("is-highlighted")),S>=0&&S<v.length&&(c=S,v[S].classList.add("is-highlighted"),e.setAttribute("aria-activedescendant",v[S].id),v[S].scrollIntoView({block:"nearest"}))},T=async S=>{if(S.length<n){m();return}let v;if(s)try{let L=s.includes("?")?"&":"?";v=await(await window.fetch(s+L+"q="+encodeURIComponent(S))).json()}catch{v=[]}else{let L=S.toLowerCase();v=a.filter(D=>(typeof D=="object"&&(D.label||D.text)||String(D)).toLowerCase().includes(L))}p(v,S),v.length>0,h()},H=()=>{clearTimeout(u),u=setTimeout(()=>T(e.value),200)},I=S=>{if(!o.classList.contains("is-open")){S.key==="ArrowDown"&&(T(e.value),S.preventDefault());return}let v=d.length;switch(S.key){case"ArrowDown":S.preventDefault(),k(c<v-1?c+1:0);break;case"ArrowUp":S.preventDefault(),k(c>0?c-1:v-1);break;case"Enter":S.preventDefault(),c>=0&&b(c);break;case"Escape":m();break}},V=()=>{setTimeout(m,200)};e.addEventListener("input",H),e.addEventListener("keydown",I),e.addEventListener("blur",V),e.addEventListener("focus",()=>{e.value.length>=n&&T(e.value)}),t.push(()=>e.removeEventListener("input",H),()=>e.removeEventListener("keydown",I),()=>e.removeEventListener("blur",V),()=>clearTimeout(u),()=>{o.parentNode&&o.parentNode.removeChild(o)}),this.instances.set(e,{cleanup:t,list:o,close:m})},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("suggest",f),window.VanduoSuggest=f})();(function(){"use strict";let f={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 new RegExp(t).test(e)}catch{return!1}},match:(e,t)=>{let n=document.querySelector('[name="'+t+'"]');return n?e===n.value:!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(){document.querySelectorAll("[data-vd-validate], .vd-validate").forEach(t=>{this.instances.has(t)||this.initInstance(t)})},initInstance:function(e){let t=[],n=e.getAttribute("data-vd-validate-mode")||"blur",s=e.querySelectorAll("[data-vd-rules]"),i=o=>{let c=(o.getAttribute("data-vd-rules")||"").split("|").map(p=>p.trim()).filter(Boolean),d=o.value,u=[];for(let p of c){let[h,...m]=p.split(":"),b=m.join(":"),k=this.rules[h];if(k&&!k(d,b)){let H=o.getAttribute("data-vd-msg-"+h)||this.messages[h]||"Invalid";b&&(H=H.replace("{0}",b)),u.push(H);break}}return this.setFieldState(o,u),u.length===0},a=()=>{let o=!0;return s.forEach(l=>{i(l)||(o=!1)}),o};s.forEach(o=>{if(n==="input"||n==="blur"){let l=n==="input"?"input":"blur",c=()=>i(o);if(o.addEventListener(l,c),t.push(()=>o.removeEventListener(l,c)),n==="blur"){let d=()=>{(o.classList.contains("is-invalid")||o.classList.contains("is-valid"))&&i(o)};o.addEventListener("input",d),t.push(()=>o.removeEventListener("input",d))}}});let r=o=>{let l=a();if(!l){o.preventDefault(),o.stopPropagation();let c=e.querySelector(".is-invalid");c&&c.focus()}e.dispatchEvent(new CustomEvent("validate:submit",{detail:{valid:l},bubbles:!0}))};e.addEventListener("submit",r),t.push(()=>e.removeEventListener("submit",r)),this.instances.set(e,{cleanup:t,validateAll:a,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",f),window.VanduoValidate=f})();(function(){"use strict";let f=["Su","Mo","Tu","We","Th","Fr","Sa"],e=["January","February","March","April","May","June","July","August","September","October","November","December"],t={instances:new Map,init:function(){document.querySelectorAll("[data-vd-datepicker]").forEach(s=>{this.instances.has(s)||this.initInstance(s)})},initInstance:function(n){let s=[],i=n.getAttribute("data-vd-datepicker-format")||"yyyy-mm-dd",a=n.getAttribute("data-vd-datepicker-min"),r=n.getAttribute("data-vd-datepicker-max"),o=a?new Date(a):null,l=r?new Date(r):null,c=new Date,d=c.getFullYear(),u=c.getMonth(),p=null,h="days";if(n.value){let w=new Date(n.value);isNaN(w.getTime())||(p=w,d=w.getFullYear(),u=w.getMonth())}let m=document.createElement("div");m.className="vd-datepicker-popup",m.setAttribute("role","dialog"),m.setAttribute("aria-label","Choose date");let b=document.createElement("div");b.className="vd-suggest-wrapper",b.style.position="relative",b.style.display="inline-block",n.parentNode.insertBefore(b,n),b.appendChild(n),b.appendChild(m);let k=w=>{let x=w.getFullYear(),C=String(w.getMonth()+1).padStart(2,"0"),q=String(w.getDate()).padStart(2,"0");return i.replace("yyyy",x).replace("mm",C).replace("dd",q)},T=w=>!!(o&&w<o||l&&w>l),H=(w,x)=>w&&x&&w.getFullYear()===x.getFullYear()&&w.getMonth()===x.getMonth()&&w.getDate()===x.getDate(),I=()=>{m.innerHTML="";let w=document.createElement("div");w.className="vd-datepicker-header";let x=document.createElement("button");x.type="button",x.className="vd-datepicker-prev",x.innerHTML="&#8249;",x.setAttribute("aria-label","Previous");let C=document.createElement("button");C.type="button",C.className="vd-datepicker-next",C.innerHTML="&#8250;",C.setAttribute("aria-label","Next");let q=document.createElement("span");if(q.className="vd-datepicker-title",h==="days")q.textContent=e[u]+" "+d,q.addEventListener("click",()=>{h="months",I()}),x.addEventListener("click",()=>{u--,u<0&&(u=11,d--),I()}),C.addEventListener("click",()=>{u++,u>11&&(u=0,d++),I()});else if(h==="months")q.textContent=String(d),q.addEventListener("click",()=>{h="years",I()}),x.addEventListener("click",()=>{d--,I()}),C.addEventListener("click",()=>{d++,I()});else{let z=Math.floor(d/10)*10;q.textContent=z+" - "+(z+9),x.addEventListener("click",()=>{d-=10,I()}),C.addEventListener("click",()=>{d+=10,I()})}if(w.appendChild(x),w.appendChild(q),w.appendChild(C),m.appendChild(w),h==="days"){let z=document.createElement("div");z.className="vd-datepicker-weekdays",f.forEach(F=>{let U=document.createElement("span");U.textContent=F,z.appendChild(U)}),m.appendChild(z);let R=document.createElement("div");R.className="vd-datepicker-days";let O=new Date(d,u,1).getDay(),P=new Date(d,u+1,0).getDate(),j=new Date(d,u,0).getDate();for(let F=O-1;F>=0;F--){let U=V(j-F,!0);R.appendChild(U)}for(let F=1;F<=P;F++){let U=new Date(d,u,F),g=V(F,!1,U);R.appendChild(g)}let W=O+P,J=W%7===0?0:7-W%7;for(let F=1;F<=J;F++){let U=V(F,!0);R.appendChild(U)}m.appendChild(R)}else if(h==="months"){let z=document.createElement("div");z.className="vd-datepicker-months",e.forEach((R,O)=>{let P=document.createElement("button");P.type="button",P.className="vd-datepicker-month-btn",P.textContent=R.slice(0,3),p&&p.getFullYear()===d&&p.getMonth()===O&&P.classList.add("is-selected"),P.addEventListener("click",()=>{u=O,h="days",I()}),z.appendChild(P)}),m.appendChild(z)}else{let z=document.createElement("div");z.className="vd-datepicker-years";let R=Math.floor(d/10)*10;for(let O=R-1;O<=R+10;O++){let P=document.createElement("button");P.type="button",P.className="vd-datepicker-year-btn",P.textContent=O,p&&p.getFullYear()===O&&P.classList.add("is-selected"),(O<R||O>R+9)&&(P.style.opacity="0.4"),P.addEventListener("click",()=>{d=O,h="months",I()}),z.appendChild(P)}m.appendChild(z)}},V=(w,x,C)=>{let q=document.createElement("button");return q.type="button",q.className="vd-datepicker-day",q.textContent=w,x?(q.classList.add("is-outside"),q.tabIndex=-1,q):(C&&H(C,c)&&q.classList.add("is-today"),C&&H(C,p)&&q.classList.add("is-selected"),C&&T(C)?(q.classList.add("is-disabled"),q):(C&&q.addEventListener("click",()=>{p=C,d=C.getFullYear(),u=C.getMonth(),n.value=k(C),v(),n.dispatchEvent(new CustomEvent("datepicker:select",{detail:{date:C,formatted:n.value},bubbles:!0})),n.dispatchEvent(new Event("change",{bubbles:!0}))}),q))},S=()=>{I(),m.classList.add("is-open"),n.setAttribute("aria-expanded","true")},v=()=>{m.classList.remove("is-open"),n.setAttribute("aria-expanded","false"),h="days"},L=()=>S(),D=w=>{b.contains(w.target)||v()},M=w=>{w.key==="Escape"&&v()};n.addEventListener("focus",L),document.addEventListener("click",D,!0),document.addEventListener("keydown",M),n.setAttribute("aria-haspopup","dialog"),n.setAttribute("aria-expanded","false"),n.setAttribute("autocomplete","off"),s.push(()=>n.removeEventListener("focus",L),()=>document.removeEventListener("click",D,!0),()=>document.removeEventListener("keydown",M)),this.instances.set(n,{cleanup:s,open:S,close:v,popup:m})},destroy:function(n){let s=this.instances.get(n);s&&(s.cleanup.forEach(i=>i()),this.instances.delete(n))},destroyAll:function(){this.instances.forEach((n,s)=>this.destroy(s))}};typeof window.Vanduo<"u"&&window.Vanduo.register("datepicker",t),window.VanduoDatepicker=t})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll("[data-vd-timepicker]").forEach(t=>{this.instances.has(t)||this.initInstance(t)})},initInstance:function(e){let t=[],n=e.getAttribute("data-vd-timepicker-format")==="24h",s=parseInt(e.getAttribute("data-vd-timepicker-step")||"30",10),i=e.closest(".vd-suggest-wrapper");i||(i=document.createElement("div"),i.style.position="relative",i.style.display="inline-block",e.parentNode.insertBefore(i,e),i.appendChild(e));let a=document.createElement("div");a.className="vd-timepicker-popup",a.setAttribute("role","listbox"),i.appendChild(a);let r=[];for(let h=0;h<24;h++)for(let m=0;m<60;m+=s){let b=String(h).padStart(2,"0"),k=String(m).padStart(2,"0");if(n)r.push({display:b+":"+k,value:b+":"+k});else{let T=h<12?"AM":"PM",I=(h===0?12:h>12?h-12:h)+":"+k+" "+T;r.push({display:I,value:b+":"+k})}}let o=()=>{a.innerHTML="",r.forEach(h=>{let m=document.createElement("div");m.className="vd-timepicker-item",m.setAttribute("role","option"),m.textContent=h.display,(e.value===h.value||e.value===h.display)&&m.classList.add("is-selected"),m.addEventListener("click",()=>{e.value=h.display,a.querySelectorAll(".vd-timepicker-item").forEach(b=>b.classList.remove("is-selected")),m.classList.add("is-selected"),c(),e.dispatchEvent(new CustomEvent("timepicker:select",{detail:{display:h.display,value:h.value},bubbles:!0})),e.dispatchEvent(new Event("change",{bubbles:!0}))}),a.appendChild(m)})},l=()=>{o(),a.classList.add("is-open"),e.setAttribute("aria-expanded","true");let h=a.querySelector(".is-selected");h&&h.scrollIntoView({block:"center"})},c=()=>{a.classList.remove("is-open"),e.setAttribute("aria-expanded","false")},d=()=>l(),u=h=>{i.contains(h.target)||c()},p=h=>{h.key==="Escape"&&c()};e.addEventListener("focus",d),document.addEventListener("click",u,!0),document.addEventListener("keydown",p),e.setAttribute("aria-haspopup","listbox"),e.setAttribute("aria-expanded","false"),e.setAttribute("autocomplete","off"),e.readOnly=!0,t.push(()=>e.removeEventListener("focus",d),()=>document.removeEventListener("click",u,!0),()=>document.removeEventListener("keydown",p)),this.instances.set(e,{cleanup:t,open:l,close:c})},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("timepicker",f),window.VanduoTimepicker=f})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll(".vd-stepper").forEach(t=>{this.instances.has(t)||this.initInstance(t)})},initInstance:function(e){let t=[],n=Array.from(e.querySelectorAll(".vd-stepper-item")),s=e.classList.contains("vd-stepper-clickable"),i=n.findIndex(r=>r.classList.contains("is-active"));i===-1&&(i=0);let a=r=>{if(r<0||r>=n.length)return;let o=i;i=r,n.forEach((l,c)=>{l.classList.remove("is-active","is-completed"),c<r?l.classList.add("is-completed"):c===r&&l.classList.add("is-active")}),e.dispatchEvent(new CustomEvent("stepper:change",{detail:{current:r,previous:o,total:n.length},bubbles:!0}))};s&&n.forEach((r,o)=>{let l=()=>a(o);r.addEventListener("click",l),t.push(()=>r.removeEventListener("click",l))}),a(i),this.instances.set(e,{cleanup:t,setStep:a,next:()=>a(i+1),prev:()=>a(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",f),window.VanduoStepper=f})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll("[data-vd-rating]").forEach(t=>{this.instances.has(t)||this.initInstance(t)})},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"),a=s;e.classList.add("vd-rating"),e.setAttribute("role","radiogroup"),e.setAttribute("aria-label",e.getAttribute("aria-label")||"Rating"),e.innerHTML="";let r=[];for(let c=1;c<=n;c++){let d=document.createElement("button");d.type="button",d.className="vd-rating-star",d.setAttribute("role","radio"),d.setAttribute("aria-label",c+" star"+(c>1?"s":"")),d.setAttribute("aria-checked",c<=a?"true":"false"),i&&(d.tabIndex=-1),r.push(d),e.appendChild(d)}let o=document.createElement("span");o.className="vd-rating-value",o.textContent=a>0?a.toString():"",e.appendChild(o);let l=c=>{r.forEach((d,u)=>{d.classList.remove("is-active","is-half");let p=u+1;p<=Math.floor(c)?d.classList.add("is-active"):p-.5<=c&&d.classList.add("is-half"),d.setAttribute("aria-checked",p<=c?"true":"false")}),o.textContent=c>0?c.toString():""};if(l(a),!i){r.forEach((d,u)=>{let p=()=>{r.forEach((b,k)=>{b.classList.toggle("is-hovered",k<=u)})},h=()=>{r.forEach(b=>b.classList.remove("is-hovered"))},m=()=>{a=u+1,e.setAttribute("data-vd-rating-value",a),l(a),e.dispatchEvent(new CustomEvent("rating:change",{detail:{value:a,max:n},bubbles:!0}))};d.addEventListener("mouseenter",p),d.addEventListener("mouseleave",h),d.addEventListener("click",m),t.push(()=>d.removeEventListener("mouseenter",p),()=>d.removeEventListener("mouseleave",h),()=>d.removeEventListener("click",m))});let c=d=>{d.key==="ArrowRight"||d.key==="ArrowUp"?(d.preventDefault(),a<n&&(a++,l(a),r[a-1].focus(),e.dispatchEvent(new CustomEvent("rating:change",{detail:{value:a,max:n},bubbles:!0})))):(d.key==="ArrowLeft"||d.key==="ArrowDown")&&(d.preventDefault(),a>1&&(a--,l(a),r[a-1].focus(),e.dispatchEvent(new CustomEvent("rating:change",{detail:{value:a,max:n},bubbles:!0}))))};e.addEventListener("keydown",c),t.push(()=>e.removeEventListener("keydown",c))}this.instances.set(e,{cleanup:t,getValue:()=>a,setValue:c=>{a=c,l(c)}})},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",f),window.VanduoRating=f})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll("[data-vd-transfer]").forEach(t=>{this.instances.has(t)||this.initInstance(t)})},initInstance:function(e){let t=[];e.classList.add("vd-transfer");let n,s;try{n=JSON.parse(e.getAttribute("data-vd-transfer")||"[]").map((p,h)=>({id:p.id||"item-"+h,label:p.label||p.text||String(p),selected:!1}))}catch{n=[]}s=[];let i=new Set,a=new Set,r=()=>{e.innerHTML="";let u=o("Source",n,i,"source"),p=document.createElement("div");p.className="vd-transfer-actions";let h=document.createElement("button");h.type="button",h.className="vd-transfer-btn",h.innerHTML="&#8250;",h.setAttribute("aria-label","Move to target"),h.disabled=i.size===0,h.addEventListener("click",()=>l());let m=document.createElement("button");m.type="button",m.className="vd-transfer-btn",m.innerHTML="&#8249;",m.setAttribute("aria-label","Move to source"),m.disabled=a.size===0,m.addEventListener("click",()=>c()),p.appendChild(h),p.appendChild(m);let b=o("Target",s,a,"target");e.appendChild(u),e.appendChild(p),e.appendChild(b)},o=(u,p,h,m)=>{let b=document.createElement("div");b.className="vd-transfer-panel";let k=document.createElement("div");k.className="vd-transfer-header";let T=document.createElement("span");T.textContent=u;let H=document.createElement("span");H.className="vd-transfer-count",H.textContent=h.size+"/"+p.length,k.appendChild(T),k.appendChild(H),b.appendChild(k);let I=document.createElement("div");I.className="vd-transfer-search";let V=document.createElement("input");V.type="text",V.placeholder="Search...",V.setAttribute("aria-label","Search "+u.toLowerCase()),I.appendChild(V),b.appendChild(I);let S=document.createElement("ul");S.className="vd-transfer-list",S.setAttribute("role","listbox");let v=L=>{S.innerHTML="",(L?p.filter(M=>(M.label||M.text||String(M)).toLowerCase().includes(L.toLowerCase())):p).forEach(M=>{let w=document.createElement("li");w.className="vd-transfer-item",w.setAttribute("role","option"),h.has(M.id)&&w.classList.add("is-selected");let x=document.createElement("input");x.type="checkbox",x.checked=h.has(M.id),x.setAttribute("aria-label",M.label);let C=document.createElement("span");C.textContent=M.label,w.addEventListener("click",()=>{h.has(M.id)?h.delete(M.id):h.add(M.id),r()}),w.appendChild(x),w.appendChild(C),S.appendChild(w)})};return V.addEventListener("input",()=>v(V.value)),v(""),b.appendChild(S),b},l=()=>{let u=n.filter(p=>i.has(p.id));n=n.filter(p=>!i.has(p.id)),s=s.concat(u),i.clear(),r(),d()},c=()=>{let u=s.filter(p=>a.has(p.id));s=s.filter(p=>!a.has(p.id)),n=n.concat(u),a.clear(),r(),d()},d=()=>{e.dispatchEvent(new CustomEvent("transfer:change",{detail:{source:n.map(u=>u.id),target:s.map(u=>u.id)},bubbles:!0}))};r(),this.instances.set(e,{cleanup:t,getTarget:()=>s.map(u=>u.id),getSource:()=>n.map(u=>u.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",f),window.VanduoTransfer=f})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll("[data-vd-tree]").forEach(t=>{this.instances.has(t)||this.initInstance(t)})},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=(o,l)=>{l.innerHTML="",o.forEach(c=>{let d=document.createElement("li");d.className="vd-tree-node",d.setAttribute("role","treeitem"),d.setAttribute("aria-expanded",c.open?"true":"false"),c.open&&d.classList.add("is-open");let u=document.createElement("div");if(u.className="vd-tree-node-content",c.children&&c.children.length>0){let h=document.createElement("button");h.type="button",h.className="vd-tree-toggle",h.setAttribute("aria-label","Toggle"),h.addEventListener("click",m=>{m.stopPropagation(),c.open=!c.open,d.classList.toggle("is-open"),d.setAttribute("aria-expanded",c.open?"true":"false")}),u.appendChild(h)}else{let h=document.createElement("span");h.className="vd-tree-toggle-placeholder",u.appendChild(h)}if(e.hasAttribute("data-vd-tree-checkbox")){let h=document.createElement("input");h.type="checkbox",h.className="vd-tree-checkbox",h.checked=!!c.checked,h.setAttribute("aria-label",c.label),h.addEventListener("change",m=>{m.stopPropagation(),c.checked=h.checked,n&&c.children&&(a(c.children,h.checked),i(s,e)),e.dispatchEvent(new CustomEvent("tree:check",{detail:{id:c.id,checked:h.checked,label:c.label},bubbles:!0}))}),u.appendChild(h)}if(c.icon){let h=document.createElement("span");h.className="vd-tree-icon "+c.icon,u.appendChild(h)}let p=document.createElement("span");if(p.className="vd-tree-label",p.textContent=c.label||"",u.appendChild(p),d.appendChild(u),c.children&&c.children.length>0){let h=document.createElement("ul");h.className="vd-tree-children",h.setAttribute("role","group"),i(c.children,h),d.appendChild(h)}l.appendChild(d)})},a=(o,l)=>{o.forEach(c=>{c.checked=l,c.children&&a(c.children,l)})},r=o=>{let l=document.activeElement;if(!e.contains(l))return;let c=Array.from(e.querySelectorAll(".vd-tree-node-content")),d=c.indexOf(l.closest(".vd-tree-node-content"));if(d!==-1)switch(o.key){case"ArrowDown":if(o.preventDefault(),d<c.length-1){let u=c[d+1].querySelector(".vd-tree-toggle, .vd-tree-label");u&&u.focus()}break;case"ArrowUp":if(o.preventDefault(),d>0){let u=c[d-1].querySelector(".vd-tree-toggle, .vd-tree-label");u&&u.focus()}break}};e.addEventListener("keydown",r),t.push(()=>e.removeEventListener("keydown",r)),i(s,e),this.instances.set(e,{cleanup:t,getData:()=>s,getChecked:()=>{let o=[],l=c=>{c.forEach(d=>{d.checked&&o.push(d.id||d.label),d.children&&l(d.children)})};return l(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",f),window.VanduoTree=f})();(function(){"use strict";let f={_active:!1,_steps:[],_currentStep:0,_elements:{},_cleanup:[],_boundTriggers:new WeakMap,_triggerElement:null,init:function(){document.querySelectorAll("[data-vd-spotlight]").forEach(t=>{if(this._boundTriggers.has(t))return;let n=s=>{s.preventDefault();let i=this._parseSteps(t.getAttribute("data-vd-spotlight"));i.length!==0&&this.start(i,{trigger:t})};t.addEventListener("click",n),this._boundTriggers.set(t,n)})},_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:"",a=typeof e.description=="string"?e.description:typeof e.content=="string"?e.content:"";return{target:t,title:i,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 i=document.createElement("div");i.className="vd-spotlight-overlay",i.setAttribute("aria-hidden","true"),document.body.appendChild(i);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:i,tooltip:a};let r=o=>{o.key==="Escape"&&this.stop()};document.addEventListener("keydown",r),this._cleanup.push(()=>document.removeEventListener("keydown",r)),i.addEventListener("click",()=>this.stop()),this._showStep(this._currentStep)},_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(c=>{c.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 c=document.createElement("h4");c.className="vd-spotlight-title",c.id="vd-spotlight-title-"+e+"-"+Date.now(),c.textContent=t.title,s.appendChild(c),s.setAttribute("aria-labelledby",c.id)}if(t.description){let c=document.createElement("p");c.className="vd-spotlight-description",c.id="vd-spotlight-description-"+e+"-"+Date.now(),c.textContent=t.description,s.appendChild(c),s.setAttribute("aria-describedby",c.id)}let a=document.createElement("div");a.className="vd-spotlight-footer",a.setAttribute("aria-label","Step "+(e+1)+" of "+i);let r=document.createElement("span");r.className="vd-spotlight-counter",r.textContent=e+1+" / "+i;let o=document.createElement("div");if(o.className="vd-spotlight-actions",e>0){let c=document.createElement("button");c.type="button",c.className="vd-spotlight-btn",c.textContent="Back",c.addEventListener("click",()=>this.prev()),o.appendChild(c)}let l=document.createElement("button");if(l.type="button",l.className="vd-spotlight-btn",l.textContent="Skip",l.addEventListener("click",()=>this.stop()),o.appendChild(l),e<i-1){let c=document.createElement("button");c.type="button",c.className="vd-spotlight-btn vd-spotlight-btn-primary",c.textContent="Next",c.addEventListener("click",()=>this.next()),o.appendChild(c)}else{let c=document.createElement("button");c.type="button",c.className="vd-spotlight-btn vd-spotlight-btn-primary",c.textContent="Done",c.addEventListener("click",()=>this.stop()),o.appendChild(c)}a.appendChild(r),a.appendChild(o),s.appendChild(a),n&&requestAnimationFrame(()=>{let c=n.getBoundingClientRect(),d=s.getBoundingClientRect(),u=c.bottom+12+window.scrollY,p=c.left+(c.width-d.width)/2+window.scrollX;p=Math.max(8,Math.min(p,window.innerWidth-d.width-8)),u+d.height>window.innerHeight+window.scrollY&&(u=c.top-d.height-12+window.scrollY),s.style.top=u+"px",s.style.left=p+"px"}),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._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",f),window.VanduoSpotlight=f})();var Q=window.Vanduo;var Oe=Q;export{Q as Vanduo,Oe as default};
42
+ `},isUsingDefaultPrimary:function(){return this.state.primary===this.DEFAULTS.PRIMARY_LIGHT||this.state.primary===this.DEFAULTS.PRIMARY_DARK},bindEvents:function(){if(this.elements.trigger&&this.addListener(this.elements.trigger,"click",e=>{e.preventDefault(),e.stopPropagation(),this.toggle()}),this.bindPanelEvents(),window.matchMedia){let e=window.matchMedia("(prefers-color-scheme: dark)"),t=()=>{if(this.state.theme==="system"&&this.isUsingDefaultPrimary()){let n=this.getDefaultPrimary("system");n!==this.state.primary&&(this.applyPrimary(n),this.updateUI())}};e.addEventListener("change",t),this._cleanup.push(()=>e.removeEventListener("change",t))}this.addListener(document,"click",e=>{this.state.isOpen&&this.elements.customizer&&!this.elements.customizer.contains(e.target)&&this.close()}),this.addListener(document,"keydown",e=>{e.key==="Escape"&&this.state.isOpen&&this.close()})},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.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.trigger&&this.elements.trigger.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(){this._cleanup.forEach(e=>e()),this._cleanup=[],this.elements.panel&&this.elements.panel.removeAttribute("data-customizer-initialized"),this.close(),this.isInitialized=!1}};window.Vanduo&&window.Vanduo.register("themeCustomizer",f),window.ThemeCustomizer=f})();(function(){"use strict";let f={isInitialized:!1,_mediaQuery:null,_onMediaChange:null,init:function(){if(this.STORAGE_KEY="vanduo-theme-preference",this.state={preference:this.getPreference()},this.isInitialized){this.applyTheme(),this.renderUI(),this.updateUI();return}this.isInitialized=!0,this.applyTheme(),this.listenForSystemChanges(),this.renderUI(),console.log("Vanduo Theme Switcher initialized")},getPreference:function(){return this.getStorageValue(this.STORAGE_KEY,"system")},setPreference:function(e){this.state.preference=e,this.setStorageValue(this.STORAGE_KEY,e),this.applyTheme(),window.ThemeCustomizer&&window.ThemeCustomizer.applyTheme&&!window.ThemeCustomizer._isApplying&&window.ThemeCustomizer.applyTheme(e),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}},applyTheme:function(){let e=this.state.preference;e==="system"?document.documentElement.removeAttribute("data-theme"):document.documentElement.setAttribute("data-theme",e)},listenForSystemChanges:function(){this._mediaQuery&&this._onMediaChange||(this._mediaQuery=window.matchMedia("(prefers-color-scheme: dark)"),this._onMediaChange=e=>{this.state.preference==="system"&&this.applyTheme()},this._mediaQuery.addEventListener("change",this._onMediaChange))},renderUI:function(){document.querySelectorAll('[data-toggle="theme"]').forEach(t=>{if(t.getAttribute("data-theme-initialized")==="true"){t.tagName==="SELECT"&&(t.value=this.state.preference);return}if(t.tagName==="SELECT"){t.value=this.state.preference;let n=s=>{this.setPreference(s.target.value)};t.addEventListener("change",n),t._themeToggleHandler=n}else{let n=()=>{let s=["system","light","dark"],i=(s.indexOf(this.state.preference)+1)%s.length;this.setPreference(s[i])};t.addEventListener("click",n),t._themeToggleHandler=n}t.setAttribute("data-theme-initialized","true")})},updateUI:function(){document.querySelectorAll('[data-toggle="theme"]').forEach(t=>{if(t.tagName==="SELECT")t.value=this.state.preference;else{let n=t.querySelector(".theme-current-label");n&&(n.textContent=this.state.preference.charAt(0).toUpperCase()+this.state.preference.slice(1))}})},destroyAll:function(){document.querySelectorAll('[data-toggle="theme"][data-theme-initialized="true"]').forEach(t=>{if(t._themeToggleHandler){let n=t.tagName==="SELECT"?"change":"click";t.removeEventListener(n,t._themeToggleHandler),delete t._themeToggleHandler}t.removeAttribute("data-theme-initialized")}),this._mediaQuery&&this._onMediaChange&&this._mediaQuery.removeEventListener("change",this._onMediaChange),this._mediaQuery=null,this._onMediaChange=null,this.isInitialized=!1}};window.Vanduo&&window.Vanduo.register("themeSwitcher",f)})();(function(){"use strict";let f={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"&&(e={message:e,type:t,duration:n});let s=Object.assign({},this.defaults,e),i=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 r="";if(s.icon){let m=typeof sanitizeHtml=="function"?sanitizeHtml(s.icon):escapeHtml(s.icon);r+=`<span class="vd-toast-icon">${m}</span>`}else s.type&&(r+=`<span class="vd-toast-icon">${this.getDefaultIcon(s.type)}</span>`);let o=typeof escapeHtml=="function"?escapeHtml:function(m){let b=document.createElement("div");return b.appendChild(document.createTextNode(m)),b.innerHTML};if(r+='<div class="vd-toast-content">',s.title&&(r+=`<div class="vd-toast-title">${o(String(s.title))}</div>`),s.message&&(r+=`<div class="vd-toast-message">${o(String(s.message))}</div>`),r+="</div>",s.dismissible&&(r+='<button type="button" class="vd-toast-close" aria-label="Close"></button>'),s.showProgress&&s.duration>0){let m=parseInt(s.duration,10)||0;r+=`<div class="vd-toast-progress" style="animation-duration: ${m}ms"></div>`}if(a.innerHTML=r,i.appendChild(a),a._toastCleanup=[],s.dismissible){let m=a.querySelector(".vd-toast-close"),b=()=>{this.dismiss(a)};m.addEventListener("click",b),a._toastCleanup.push(()=>m.removeEventListener("click",b))}let c=null,l=s.duration,d=null,u=()=>{if(s.duration>0){d=Date.now(),c=setTimeout(()=>{this.dismiss(a)},l),a._toastTimeoutId=c;let m=a.querySelector(".vd-toast-progress");m&&(m.style.animationPlayState="running")}},p=()=>{if(c){clearTimeout(c),c=null,a._toastTimeoutId=null,l-=Date.now()-d;let m=a.querySelector(".vd-toast-progress");m&&(m.style.animationPlayState="paused")}};s.pauseOnHover&&(a.addEventListener("mouseenter",p),a.addEventListener("mouseleave",u),a._toastCleanup.push(()=>a.removeEventListener("mouseenter",p),()=>a.removeEventListener("mouseleave",u))),requestAnimationFrame(()=>{a.classList.add("is-visible"),u()}),a._toastConfig=s;let h=new CustomEvent("toast:show",{bubbles:!0,detail:{toast:a,config:s}});return a.dispatchEvent(h),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(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",f),window.Toast=f})();(function(){"use strict";let f={tooltips:new Map,delayTimers:new Map,sanitizeHtml:function(e){if(typeof sanitizeHtml=="function")return sanitizeHtml(e);let t=document.createElement("div");return t.textContent=e||"",t.innerHTML},init:function(){document.querySelectorAll("[data-tooltip], [data-tooltip-html]").forEach(t=>{this.tooltips.has(t)||this.initTooltip(t)})},initTooltip:function(e){let t=this.createTooltip(e),n=[],s=()=>{this.showTooltip(e,t)},i=()=>{this.hideTooltip(e,t)},a=()=>{this.showTooltip(e,t)},r=()=>{this.hideTooltip(e,t)};e.addEventListener("mouseenter",s),e.addEventListener("mouseleave",i),e.addEventListener("focus",a),e.addEventListener("blur",r),n.push(()=>e.removeEventListener("mouseenter",s),()=>e.removeEventListener("mouseleave",i),()=>e.removeEventListener("focus",a),()=>e.removeEventListener("blur",r)),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;s?(t.innerHTML=this.sanitizeHtml(s),t.classList.add("vd-tooltip-html")):i&&(t.textContent=i);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 r=parseInt(e.dataset.tooltipDelay)||0;return t.dataset.delay=r,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(),a=window.pageYOffset||document.documentElement.scrollTop,r=window.pageXOffset||document.documentElement.scrollLeft,o=0,c=0;switch(n){case"top":o=s.top+a-i.height-8,c=s.left+r+s.width/2-i.width/2;break;case"bottom":o=s.bottom+a+8,c=s.left+r+s.width/2-i.width/2;break;case"left":o=s.top+a+s.height/2-i.height/2,c=s.left+r-i.width-8;break;case"right":o=s.top+a+s.height/2-i.height/2,c=s.right+r+8;break}let l=window.innerWidth,d=window.innerHeight,u=8;c<u?c=u:c+i.width>l-u&&(c=l-i.width-u),o<a+u?o=a+u:o+i.height>a+d-u&&(o=a+d-i.height-u),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:i}=this.tooltips.get(s);n?(i.innerHTML=this.sanitizeHtml(t),i.classList.add("vd-tooltip-html")):(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",f),window.VanduoTooltips=f})();(function(){"use strict";let f={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..."};function e(n){let s=Object.assign({},f,n||{}),i={initialized:!1,index:[],results:[],activeIndex:-1,isOpen:!1,query:"",container:null,input:null,resultsContainer:null,debounceTimer:null,boundHandlers:{}};function a(g,y,...E){try{y(...E)}catch(S){console.warn('[Vanduo Search] Callback error in "'+g+'":',S)}}function r(g){if(i.resultsContainer)try{i.resultsContainer.innerHTML=g}catch(y){console.warn("[Vanduo Search] Failed to render results:",y)}}function o(){return i.initialized?U:(i.container=document.querySelector(s.containerSelector),!i.container||(i.input=i.container.querySelector(s.inputSelector),i.resultsContainer=i.container.querySelector(s.resultsSelector),!i.input||!i.resultsContainer)?(i.initialized=!1,null):(s.placeholder&&i.input.setAttribute("placeholder",s.placeholder),c(),m(),A(),i.initialized=!0,U))}function c(){if(i.index=[],s.data&&Array.isArray(s.data)){s.data.forEach(function(E){i.index.push({id:E.id||h(E.title),title:E.title||"",category:E.category||"",categorySlug:h(E.category||""),content:E.content||"",keywords:E.keywords||p(E.title+" "+E.content),url:E.url||"#"+(E.id||h(E.title)),icon:E.icon||""})});return}let g=document.querySelectorAll(s.contentSelector),y=l();g.forEach(function(E){let S=E.id;if(!S)return;let I=E.querySelector(s.titleSelector),q=I?I.textContent.replace(/v[\d.]+/g,"").trim():S,X=y[S]||"Documentation",$=d(E),B=u(E,q),Y=I?I.querySelector("i.ph"):null,G="";if(Y&&Y.classList){for(let K=0;K<Y.classList.length;K++)if(Y.classList[K].indexOf("ph-")===0){G=Y.classList[K];break}}i.index.push({id:S,title:q,category:X,categorySlug:h(X),content:$,keywords:B,url:"#"+S,icon:G})})}function l(){let g={},y="Documentation";return document.querySelectorAll(s.navSelector+", "+s.sectionSelector).forEach(function(S){if(S.classList.contains("doc-nav-section"))y=S.textContent.trim();else{let I=S.getAttribute("href");if(I&&I.startsWith("#")){let q=I.substring(1);g[q]=y}}}),g}function d(g){let y=g.cloneNode(!0);y.querySelectorAll(s.excludeFromContent).forEach(function(I){I.remove()});let S=y.textContent||"";return S=S.replace(/\s+/g," ").trim(),S.substring(0,s.maxContentLength)}function u(g,y){let E=[];return y.toLowerCase().split(/\s+/).forEach(function(q){q.length>2&&E.push(q)}),g.querySelectorAll("code").forEach(function(q){let $=(q.textContent||"").match(/\.([\w-]+)/g);$&&$.forEach(function(B){E.push(B.substring(1).toLowerCase())})}),g.querySelectorAll("[data-tooltip], [data-modal]").forEach(function(q){q.getAttributeNames().filter(function($){return $.startsWith("data-")}).forEach(function($){E.push($.replace("data-",""))})}),Array.from(new Set(E))}function p(g){return g.toLowerCase().split(/\s+/).filter(function(E){return E.length>2})}function h(g){return g.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"")}function m(){i.boundHandlers.handleInput=function(g){_(g)},i.boundHandlers.handleFocus=function(){i.query.length>=s.minQueryLength&&R()},i.boundHandlers.handleKeydown=function(g){N(g)},i.boundHandlers.handleOutsideClick=function(g){i.container.contains(g.target)||V()},i.boundHandlers.handleGlobalKeydown=function(g){s.keyboardShortcut&&(g.metaKey||g.ctrlKey)&&g.key==="k"&&(g.preventDefault(),i.input.focus(),i.input.select())},i.boundHandlers.handleResultClick=function(g){let y=g.target.closest(".vd-doc-search-result");if(y){let E=parseInt(y.dataset.index,10);M(E)}},i.input.addEventListener("input",i.boundHandlers.handleInput),i.input.addEventListener("focus",i.boundHandlers.handleFocus),i.input.addEventListener("keydown",i.boundHandlers.handleKeydown),document.addEventListener("click",i.boundHandlers.handleOutsideClick),document.addEventListener("keydown",i.boundHandlers.handleGlobalKeydown),i.resultsContainer.addEventListener("click",i.boundHandlers.handleResultClick)}function b(){i.input&&(i.input.removeEventListener("input",i.boundHandlers.handleInput),i.input.removeEventListener("focus",i.boundHandlers.handleFocus),i.input.removeEventListener("keydown",i.boundHandlers.handleKeydown)),document.removeEventListener("click",i.boundHandlers.handleOutsideClick),document.removeEventListener("keydown",i.boundHandlers.handleGlobalKeydown),i.resultsContainer&&i.resultsContainer.removeEventListener("click",i.boundHandlers.handleResultClick)}function A(){let g=i.resultsContainer.id||"search-results-"+Math.random().toString(36).substr(2,9);i.resultsContainer.id=g,i.input.setAttribute("role","combobox"),i.input.setAttribute("aria-autocomplete","list"),i.input.setAttribute("aria-controls",g),i.input.setAttribute("aria-expanded","false"),i.resultsContainer.setAttribute("role","listbox"),i.resultsContainer.setAttribute("aria-label","Search results")}function _(g){let y=g.target.value.trim();i.debounceTimer&&clearTimeout(i.debounceTimer),i.debounceTimer=setTimeout(function(){if(i.query=y,y.length<s.minQueryLength){V();return}i.results=T(y),i.activeIndex=-1,H(),R(),typeof s.onSearch=="function"&&a("onSearch",s.onSearch,y,i.results)},s.debounceMs)}function N(g){if(!i.isOpen){g.key==="ArrowDown"&&i.query.length>=s.minQueryLength&&(g.preventDefault(),i.results=T(i.query),H(),R());return}switch(g.key){case"ArrowDown":g.preventDefault(),x(1);break;case"ArrowUp":g.preventDefault(),x(-1);break;case"Enter":g.preventDefault(),i.activeIndex>=0?M(i.activeIndex):i.results.length>0&&M(0);break;case"Escape":g.preventDefault(),V();break;case"Tab":V();break}}function T(g){let y=g.toLowerCase().split(/\s+/).filter(function(S){return S.length>0}),E=[];return i.index.forEach(function(S){let I=0,q=S.title.toLowerCase(),X=S.category.toLowerCase(),$=S.content.toLowerCase();y.forEach(function(B){q.includes(B)&&(I+=100,q===B?I+=50:q.startsWith(B)&&(I+=25)),X.includes(B)&&(I+=50),S.keywords.some(function(G){return G.includes(B)})&&(I+=30),$.includes(B)&&(I+=10)}),I>0&&E.push({id:S.id,title:S.title,category:S.category,categorySlug:S.categorySlug,content:S.content,url:S.url,icon:S.icon,score:I})}),E.sort(function(S,I){return I.score-S.score}),E.slice(0,s.maxResults)}function H(){if(i.results.length===0){r(O());return}let g='<ul class="vd-doc-search-results-list" role="listbox">';i.results.forEach(function(y,E){let S=E===i.activeIndex,I=y.icon||L(y.categorySlug),q=k(y.content,i.query);g+='<li class="vd-doc-search-result'+(S?" is-active":"")+'" role="option" id="vd-doc-search-result-'+E+'" data-index="'+E+'" data-category="'+w(y.categorySlug)+'" aria-selected="'+S+'"><div class="vd-doc-search-result-icon"><i class="ph '+w(I)+'"></i></div><div class="vd-doc-search-result-content"><div class="vd-doc-search-result-title">'+D(y.title,i.query)+'</div><div class="vd-doc-search-result-category">'+w(y.category)+'</div><div class="vd-doc-search-result-excerpt">'+D(q,i.query)+"</div></div></li>"}),g+="</ul>",g+=v(),r(g)}function O(){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">'+w(s.emptyTitle)+'</div><div class="vd-doc-search-empty-text">'+w(s.emptyText)+"</div></div>"}function v(){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 L(g){return s.categoryIcons[g]||s.categoryIcons.default||"ph-file-text"}function k(g,y){let E=y.toLowerCase().split(/\s+/),S=g.toLowerCase(),I=100,q=-1;for(let Y=0;Y<E.length;Y++){let G=S.indexOf(E[Y]);G!==-1&&(q===-1||G<q)&&(q=G)}if(q===-1)return g.substring(0,I)+"...";let X=Math.max(0,q-30),$=Math.min(g.length,q+I),B=g.substring(X,$);return X>0&&(B="..."+B),$<g.length&&(B=B+"..."),B}function D(g,y){if(!y)return w(g);let E=y.toLowerCase().split(/\s+/).filter(function(I){return I.length>0}),S=w(g);return E.forEach(function(I){if(I.length>50)return;let q=new RegExp("("+I.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+")","gi");S=S.replace(q,"<"+s.highlightTag+">$1</"+s.highlightTag+">")}),S}function w(g){let y=document.createElement("div");return y.textContent=g,y.innerHTML}function x(g){let y=i.activeIndex+g;y<0?y=i.results.length-1:y>=i.results.length&&(y=0),C(y)}function C(g){let y=i.resultsContainer.querySelector(".vd-doc-search-result.is-active");y&&(y.classList.remove("is-active"),y.setAttribute("aria-selected","false")),i.activeIndex=g;let E=i.resultsContainer.querySelector('[data-index="'+g+'"]');E&&(E.classList.add("is-active"),E.setAttribute("aria-selected","true"),i.input.setAttribute("aria-activedescendant","vd-doc-search-result-"+g),E.scrollIntoView({block:"nearest"}))}function M(g){let y=i.results[g];if(!y)return;if(V(),i.input.value="",i.query="",typeof s.onSelect=="function"){a("onSelect",s.onSelect,y);return}let E=document.querySelector(y.url);E&&(E.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",y.url),z(y.id))}function z(g){document.querySelectorAll(s.navSelector).forEach(function(E){E.classList.remove("active"),E.getAttribute("href")==="#"+g&&E.classList.add("active")})}function R(){i.isOpen||(i.isOpen=!0,i.resultsContainer.classList.add("is-open"),i.input.setAttribute("aria-expanded","true"),typeof s.onOpen=="function"&&a("onOpen",s.onOpen))}function V(){i.isOpen&&(i.isOpen=!1,i.activeIndex=-1,i.resultsContainer.classList.remove("is-open"),i.input.setAttribute("aria-expanded","false"),i.input.removeAttribute("aria-activedescendant"),typeof s.onClose=="function"&&a("onClose",s.onClose))}function P(){b(),i.initialized=!1,i.index=[],i.results=[],i.isOpen=!1,i.query="",i.debounceTimer&&clearTimeout(i.debounceTimer),i.resultsContainer&&r("")}function j(){c()}function W(g){Object.assign(s,g)}function J(){return Object.assign({},s)}function F(){return i.index.slice()}let U={init:o,destroy:P,rebuild:j,search:T,open:R,close:V,setConfig:W,getConfig:J,getIndex:F};return U}let t={create:function(n){let s=e(n);return s&&s.init(),s||null},_instance:null,config:Object.assign({},f),init:function(n){return this._instance&&this._instance.destroy(),n&&Object.assign(this.config,n),this._instance=e(this.config),this._instance?this._instance.init():null},destroy:function(){this._instance&&(this._instance.destroy(),this._instance=null)},destroyAll:function(){this.destroy()},rebuild:function(){this._instance&&this._instance.rebuild()},search:function(n){return this._instance?this._instance.search(n):[]},open:function(){this._instance&&this._instance.open()},close:function(){this._instance&&this._instance.close()}};typeof window.Vanduo<"u"&&window.Vanduo.register("docSearch",t),window.Search=t,window.DocSearch=t,window.VanduoDocSearch=t})();(function(){"use strict";let f={instances:new Map,currentDrag:null,touchState:null,feedbackElement:null,init:function(){document.querySelectorAll(".vd-draggable, [data-draggable]").forEach(s=>{this.instances.has(s)||this.initDraggable(s)}),document.querySelectorAll(".vd-draggable-container, .vd-draggable-container-vertical").forEach(s=>{this.instances.has(s)||this.initContainer(s)}),document.querySelectorAll(".vd-drop-zone").forEach(s=>{this.instances.has(s)||this.initDropZone(s)}),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 a=d=>{this.handleTouchStart(d,e)};e.addEventListener("touchstart",a),t.push(()=>e.removeEventListener("touchstart",a));let r=d=>{this.handleTouchMove(d,e)};e.addEventListener("touchmove",r,{passive:!1}),t.push(()=>e.removeEventListener("touchmove",r));let o=d=>{this.handleTouchEnd(d,e)};e.addEventListener("touchend",o,{passive:!1}),t.push(()=>e.removeEventListener("touchend",o));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(r=>{this.instances.has(r)||this.initDraggable(r)});let n=[],s=r=>{r.preventDefault(),r.dataTransfer.dropEffect="move"},i=r=>{if(r.preventDefault(),r.dataTransfer.dropEffect="move",!this.currentDrag)return;let o=this.currentDrag.element;e.contains(o)&&(r.clientX===0&&r.clientY===0||this.handleReorder(e,o,r.clientX,r.clientY))},a=r=>{r.preventDefault()};e.addEventListener("dragenter",s),e.addEventListener("dragover",i),e.addEventListener("drop",a),n.push(()=>{e.removeEventListener("dragenter",s),e.removeEventListener("dragover",i),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=r=>{r.preventDefault(),this.handleDragOver(r,e)};e.addEventListener("dragover",n),t.push(()=>e.removeEventListener("dragover",n));let s=r=>{r.preventDefault(),this.handleDragEnter(r,e)};e.addEventListener("dragenter",s),t.push(()=>e.removeEventListener("dragenter",s));let i=r=>{this.handleDragLeave(r,e)};e.addEventListener("dragleave",i),t.push(()=>e.removeEventListener("dragleave",i));let a=r=>{r.preventDefault(),this.handleDrop(r,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];this.touchState={element:t,startX:n.clientX,startY:n.clientY,startTime:Date.now(),isDragging:!1}},handleTouchMove:function(e,t){if(!this.touchState)return;let n=e.touches[0],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)},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}}}));let a=t.closest(".vd-draggable-container");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(),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 n=e.changedTouches[0],s=this.currentDrag?.data||this.getData(t),i=this.touchState?.startX||0,a=this.touchState?.startY||0;t.dispatchEvent(new CustomEvent("draggable:end",{bubbles:!0,detail:{element:t,data:s,position:{x:n.clientX,y:n.clientY},delta:{x:n.clientX-i,y:n.clientY-a}}}))}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(),t.classList.remove("is-drag-over"),t.dispatchEvent(new CustomEvent("draggable:drop",{bubbles:!0,detail:{zone:t,element:this.currentDrag?.element,data:this.currentDrag?.data,position:{x:e.clientX,y:e.clientY}}}))},handleReorder:function(e,t,n,s){let i=e.classList.contains("vd-draggable-container-vertical"),r=[...e.querySelectorAll(".vd-draggable-item:not(.is-dragging), .vd-draggable:not(.is-dragging)")].reduce((o,c)=>{let l=c.getBoundingClientRect(),d=i?s-l.top-l.height/2:n-l.left-l.width/2;return d<0&&d>o.offset?{offset:d,element:c}:o},{offset:Number.NEGATIVE_INFINITY}).element;r==null?e.appendChild(t):e.insertBefore(t,r)},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),Object.assign(this.feedbackElement.style,{left:e-20+"px",top:t-20+"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",f),window.VanduoDraggable=f})();(function(){"use strict";let f=new Map;function e(o){try{return new URL(o,window.location.href).origin===window.location.origin}catch{return!1}}function t(o,c){let d=new DOMParser().parseFromString(c.trim(),"text/html"),u=["SCRIPT","IFRAME","OBJECT","EMBED","FORM","BASE","LINK","META","STYLE"];for(let m of u){let b=d.querySelectorAll(m);for(let A=b.length-1;A>=0;A--)b[A].parentNode.removeChild(b[A])}function p(m){if(m.nodeType===Node.ELEMENT_NODE){let b=m.attributes;for(let _=b.length-1;_>=0;_--){let N=b[_].name.toLowerCase(),H=b[_].value.toLowerCase().trim();(N.startsWith("on")||H.startsWith("javascript:")||H.startsWith("data:")||H.startsWith("vbscript:"))&&m.removeAttribute(b[_].name)}let A=m.childNodes;for(let _=0;_<A.length;_++)p(A[_])}}p(d.body);let h=Array.from(d.body.childNodes);for(;o.firstChild;)o.removeChild(o.firstChild);h.forEach(function(m){o.appendChild(document.adoptNode(m))})}function n(){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" style="animation-delay:0s;"></div><div class="vd-spinner vd-spinner-sm vd-spinner-warning" style="animation-delay:-0.15s;"></div><div class="vd-spinner vd-spinner-sm vd-spinner-error" style="animation-delay:-0.3s;"></div><div class="vd-spinner vd-spinner-sm vd-spinner-info" style="animation-delay:-0.45s;"></div></div><span class="vd-dynamic-loader-text">Loading\u2026</span></div></div>'}function s(){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" style="animation-delay:0s;"></div><div class="vd-spinner vd-spinner-sm vd-spinner-warning" style="animation-delay:-0.15s;"></div><div class="vd-spinner vd-spinner-sm vd-spinner-error" style="animation-delay:-0.3s;"></div><div class="vd-spinner vd-spinner-sm vd-spinner-info" style="animation-delay:-0.45s;"></div></div><span class="vd-dynamic-loader-text">Loading\u2026</span></div>'}function i(o){return!o||o==="skeleton"?n():o==="spinner"?s():o}function a(o,c,l){o.dispatchEvent(new CustomEvent(c,{bubbles:!0,detail:l||{}}))}let r={observe:function(o,c,l){if(!(o instanceof Element)){console.warn("[VanduoLazyLoad] observe() requires a DOM Element.");return}if(typeof c!="function"){console.warn("[VanduoLazyLoad] observe() requires a callback function.");return}if(f.has(o))return;let d=l&&l.threshold!=null?l.threshold:0,u=l&&l.rootMargin?l.rootMargin:"0px",p=new IntersectionObserver(function(h,m){h.forEach(function(b){if(b.isIntersecting){m.unobserve(b.target),f.delete(b.target);try{c(b.target)}catch(A){console.error("[VanduoLazyLoad] Callback threw:",A)}}})},{threshold:d,rootMargin:u});f.set(o,p),p.observe(o)},unobserve:function(o){let c=f.get(o);c&&(c.unobserve(o),f.delete(o))},unobserveAll:function(){f.forEach(function(o,c){o.unobserve(c)}),f.clear()},loadSection:function(o,c,l){if(typeof o!="string"||!o){console.warn("[VanduoLazyLoad] loadSection() requires a non-empty URL string.");return}if(!(c instanceof Element)){console.warn("[VanduoLazyLoad] loadSection() requires a DOM Element as containerEl.");return}if(!e(o)){console.error("[VanduoLazyLoad] loadSection() blocked cross-origin URL:",o);return}let d=l||{},u=i(d.placeholder);t(c,u),a(c,"lazysection:loading",{url:o}),this.observe(c,function(){let p=new window.AbortController,h=setTimeout(function(){p.abort()},1e4);window.fetch(o,{signal:p.signal}).then(function(m){if(clearTimeout(h),!m.ok)throw new Error("HTTP "+m.status);return m.text()}).then(function(m){t(c,m),a(c,"lazysection:loaded",{url:o}),typeof window.Vanduo<"u"&&window.Vanduo.init(),typeof d.onLoaded=="function"&&d.onLoaded(c)}).catch(function(m){let b=document.createElement("div");b.className="vd-alert vd-alert-error",b.setAttribute("role","alert");let A=document.createElement("span");A.textContent="Failed to load content. ";let _=document.createElement("small");for(_.style.opacity="0.7",_.textContent=m.message,b.appendChild(A),b.appendChild(_);c.firstChild;)c.removeChild(c.firstChild);c.appendChild(b),a(c,"lazysection:error",{url:o,error:m}),console.error("[VanduoLazyLoad] loadSection failed:",m),typeof d.onError=="function"&&d.onError(m)})},{threshold:d.threshold,rootMargin:d.rootMargin})},init:function(){let o=this;document.querySelectorAll("[data-vd-lazy]").forEach(function(l){if(f.has(l)||l.dataset.vdLazyState==="loading"||l.dataset.vdLazyState==="loaded")return;let d=l.getAttribute("data-vd-lazy");if(!d)return;l.dataset.vdLazyState="loading";let u=l.getAttribute("data-vd-lazy-placeholder")||"skeleton";o.loadSection(d,l,{placeholder:u,onLoaded:function(){l.dataset.vdLazyState="loaded"},onError:function(){l.dataset.vdLazyState="error"}})})}};typeof window.Vanduo<"u"&&window.Vanduo.register("LazyLoad",r),window.VanduoLazyLoad=r})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll(".vd-flow, .vd-carousel").forEach(t=>{this.instances.has(t)||this.initInstance(t)})},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"),a=parseInt(e.getAttribute("data-vd-interval"),10)||5e3,r=e.getAttribute("data-vd-loop")!=="false",o={current:0,total:n.length,autoplayTimer:null,isFade:s,loop:r,isDragging:!1,startX:0,currentX:0,threshold:50},c=[];n.forEach((v,L)=>{v.setAttribute("role","group"),v.setAttribute("aria-roledescription","slide"),v.setAttribute("aria-label","Slide "+(L+1)+" of "+n.length),L===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,L)=>{L===void 0&&(L=!0);let k=v;o.loop?k=(v%o.total+o.total)%o.total:k=Math.max(0,Math.min(v,o.total-1));let D=o.current;o.current=k,o.isFade?n.forEach((x,C)=>{x.classList.toggle("is-active",C===k)}):t.style.transform="translateX(-"+k*100+"%)",e.querySelectorAll(".vd-flow-indicator").forEach((x,C)=>{x.classList.toggle("is-active",C===k),x.setAttribute("aria-selected",C===k?"true":"false")}),n.forEach((x,C)=>{x.setAttribute("aria-hidden",C!==k?"true":"false")}),L&&(l.textContent="Slide "+(k+1)+" of "+o.total),e.dispatchEvent(new CustomEvent("flow:change",{detail:{current:k,previous:D,total:o.total}}))},u=()=>d(o.current+1),p=()=>d(o.current-1),h=e.querySelector(".vd-flow-prev"),m=e.querySelector(".vd-flow-next");if(h){let v=()=>p();h.addEventListener("click",v),c.push(()=>h.removeEventListener("click",v))}if(m){let v=()=>u();m.addEventListener("click",v),c.push(()=>m.removeEventListener("click",v))}e.querySelectorAll(".vd-flow-indicator").forEach((v,L)=>{v.setAttribute("role","tab"),v.setAttribute("aria-selected",L===0?"true":"false"),v.setAttribute("aria-label","Go to slide "+(L+1));let k=()=>d(L);v.addEventListener("click",k),c.push(()=>v.removeEventListener("click",k))});let A=v=>{v.key==="ArrowLeft"&&(p(),v.preventDefault()),v.key==="ArrowRight"&&(u(),v.preventDefault())};e.setAttribute("tabindex","0"),e.addEventListener("keydown",A),c.push(()=>e.removeEventListener("keydown",A));let _=v=>{o.isDragging=!0,o.startX=v.clientX||v.touches&&v.touches[0].clientX||0,o.currentX=o.startX,e.classList.add("is-dragging")},N=v=>{o.isDragging&&(o.currentX=v.clientX||v.touches&&v.touches[0].clientX||0)},T=()=>{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?u():p())};e.addEventListener("mousedown",_),e.addEventListener("mousemove",N),e.addEventListener("mouseup",T),e.addEventListener("mouseleave",T),e.addEventListener("touchstart",_,{passive:!0}),e.addEventListener("touchmove",N,{passive:!0}),e.addEventListener("touchend",T),c.push(()=>e.removeEventListener("mousedown",_),()=>e.removeEventListener("mousemove",N),()=>e.removeEventListener("mouseup",T),()=>e.removeEventListener("mouseleave",T),()=>e.removeEventListener("touchstart",_),()=>e.removeEventListener("touchmove",N),()=>e.removeEventListener("touchend",T));let H=()=>{O(),o.autoplayTimer=setInterval(u,a)},O=()=>{o.autoplayTimer&&(clearInterval(o.autoplayTimer),o.autoplayTimer=null)};if(i){H();let v=()=>O(),L=()=>H();e.addEventListener("mouseenter",v),e.addEventListener("mouseleave",L),e.addEventListener("focusin",v),e.addEventListener("focusout",L),c.push(()=>e.removeEventListener("mouseenter",v),()=>e.removeEventListener("mouseleave",L),()=>e.removeEventListener("focusin",v),()=>e.removeEventListener("focusout",L),()=>O())}d(0,!1),this.instances.set(e,{cleanup:c,goTo:d,next:u,prev:p,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",f),window.VanduoFlow=f})();(function(){"use strict";let f={instances:new Map,_globalCleanups:[],init:function(){if(document.querySelectorAll("[data-vd-bubble], [data-vd-popover]").forEach(t=>{this.instances.has(t)||this.initInstance(t)}),this._globalCleanups.length===0){let t=s=>{this.instances.forEach((i,a)=>{!i.popover.contains(s.target)&&!a.contains(s.target)&&this.hide(a)})},n=s=>{s.key==="Escape"&&this.instances.forEach((i,a)=>this.hide(a))};document.addEventListener("click",t,!0),document.addEventListener("keydown",n),this._globalCleanups.push(()=>document.removeEventListener("click",t,!0),()=>document.removeEventListener("keydown",n))}},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"),a=e.getAttribute("data-vd-bubble")||e.getAttribute("data-vd-popover")||"",r=e.getAttribute("data-vd-bubble-html")||e.getAttribute("data-vd-popover-html");if(i){let d=document.createElement("div");d.className="vd-bubble-header";let u=document.createElement("span");u.textContent=i;let p=document.createElement("button");p.className="vd-bubble-close",p.setAttribute("aria-label","Close"),p.innerHTML="&times;",d.appendChild(u),d.appendChild(p),s.appendChild(d);let h=m=>{m.stopPropagation(),this.hide(e)};p.addEventListener("click",h),t.push(()=>p.removeEventListener("click",h))}let o=document.createElement("div");o.className="vd-bubble-body",r?typeof sanitizeHtml=="function"?o.innerHTML=sanitizeHtml(r):o.textContent=r:o.textContent=a,s.appendChild(o),document.body.appendChild(s);let c="vd-bubble-"+Math.random().toString(36).slice(2,9);s.id=c,e.setAttribute("aria-haspopup","dialog"),e.setAttribute("aria-expanded","false"),e.setAttribute("aria-controls",c);let l=d=>{d.stopPropagation(),s.classList.contains("is-visible")?this.hide(e):(this.hideAll(),this.show(e))};e.addEventListener("click",l),t.push(()=>e.removeEventListener("click",l)),this.instances.set(e,{popover:s,cleanup:t,placement:n})},position:function(e,t,n){let s=e.getBoundingClientRect(),i=t.getBoundingClientRect(),a=10,r,o;switch(n){case"top":r=s.top-i.height-a+window.scrollY,o=s.left+(s.width-i.width)/2+window.scrollX;break;case"left":r=s.top+(s.height-i.height)/2+window.scrollY,o=s.left-i.width-a+window.scrollX;break;case"right":r=s.top+(s.height-i.height)/2+window.scrollY,o=s.right+a+window.scrollX;break;default:r=s.bottom+a+window.scrollY,o=s.left+(s.width-i.width)/2+window.scrollX}o=Math.max(8,Math.min(o,window.innerWidth-i.width-8)),r=Math.max(8,r),t.style.top=r+"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}))},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})))},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",f),window.VanduoBubble=f})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll("[data-vd-waypoint-nav], [data-vd-scrollspy-nav]").forEach(t=>{this.instances.has(t)||this.initInstance(t)})},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),u=document.getElementById(d);u&&(u.setAttribute("data-vd-waypoint-section",""),i.push({id:d,link:l,section:u}))}),i.length===0)return;let a=new Set,r=l=>{t.forEach(u=>u.classList.remove("is-active"));let d=t.find(u=>u.getAttribute("href")==="#"+l);d&&(d.classList.add("is-active"),e.dispatchEvent(new CustomEvent("waypoint:change",{detail:{activeId:l,link:d}})))},o="-"+s+"px 0px -40% 0px",c=new IntersectionObserver(l=>{l.forEach(d=>{d.isIntersecting?a.add(d.target.id):a.delete(d.target.id)});for(let d=0;d<i.length;d++)if(a.has(i[d].id)){r(i[d].id);return}},{rootMargin:o,threshold:0});i.forEach(l=>c.observe(l.section)),t.forEach(l=>{let d=u=>{u.preventDefault();let p=l.getAttribute("href").slice(1),h=document.getElementById(p);h&&(h.scrollIntoView({behavior:"smooth"}),r(p))};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:r})},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",f),window.VanduoWaypoint=f})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll(".vd-ripple, [data-vd-ripple]").forEach(t=>{this.instances.has(t)||this.initInstance(t)})},initInstance:function(e){let t=[],n=s=>{let i=e.getBoundingClientRect(),a=Math.max(i.width,i.height),r=(s.clientX||s.touches&&s.touches[0].clientX||i.left+i.width/2)-i.left-a/2,o=(s.clientY||s.touches&&s.touches[0].clientY||i.top+i.height/2)-i.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=r+"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",f),window.VanduoRipple=f})();(function(){"use strict";function f(n){if(!n||n===document.body)return!1;let s=window.getComputedStyle(n),i=s.overflowY,a=s.overflowX,r=/(auto|scroll|overlay)/.test(i)&&n.scrollHeight>n.clientHeight,o=/(auto|scroll|overlay)/.test(a)&&n.scrollWidth>n.clientWidth;return r||o}function e(n){let s=n.parentElement;for(;s&&s!==document.body&&s!==document.documentElement;){if(f(s))return s;s=s.parentElement}return null}let t={instances:new Map,init:function(){document.querySelectorAll(".vd-affix, .vd-sticky, [data-vd-affix]").forEach(s=>{this.instances.has(s)||this.initInstance(s)})},initInstance:function(n){let s=[],i=parseInt(n.getAttribute("data-vd-affix-offset")||"0",10),a=Number.isNaN(i)?0:i,r=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("--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:r||window}})))}function d(){o&&(o=!1,n.classList.remove("is-stuck"),n.dispatchEvent(new CustomEvent("affix:unstuck",{bubbles:!0,detail:{offset:a,root:r||window}})))}let u=new IntersectionObserver(function(p){p.forEach(h=>{h.isIntersecting?d():l()})},{root:r,rootMargin:"-"+a+"px 0px 0px 0px",threshold:0});u.observe(c),s.push(()=>u.disconnect(),()=>{c.parentNode&&c.parentNode.removeChild(c)},()=>{n.classList.remove("is-stuck"),n.style.removeProperty("--affix-top-offset")}),this.instances.set(n,{cleanup:s,observer:u,sentinel:c,scrollParent:r})},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 f(t){let n=document.createElement("div");return n.textContent=t,n.innerHTML}let e={instances:new Map,init:function(){document.querySelectorAll("[data-vd-suggest], [data-vd-autocomplete]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},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")||t.getAttribute("data-vd-autocomplete")||"",r=[];try{r=JSON.parse(a)}catch{r=a.split(",").map(L=>L.trim()).filter(Boolean)}let o=t.closest(".vd-suggest-wrapper, .vd-autocomplete-wrapper");o||(o=document.createElement("div"),o.className="vd-suggest-wrapper",t.parentNode.insertBefore(o,t),o.appendChild(t));let c=document.createElement("ul");c.className="vd-suggest-list",c.setAttribute("role","listbox");let l="vd-suggest-"+Math.random().toString(36).slice(2,9);c.id=l,o.appendChild(c),t.setAttribute("role","combobox"),t.setAttribute("aria-autocomplete","list"),t.setAttribute("aria-expanded","false"),t.setAttribute("aria-controls",l),t.setAttribute("autocomplete","off");let d=-1,u=[],p=null,h=(v,L)=>{if(c.innerHTML="",u=v,d=-1,v.length===0){let k=document.createElement("li");k.className="vd-suggest-empty",k.textContent="No results",c.appendChild(k);return}v.forEach((k,D)=>{let w=document.createElement("li");w.className="vd-suggest-item",w.setAttribute("role","option"),w.id=l+"-item-"+D;let x=typeof k=="object"&&(k.label||k.text)||String(k);if(L){let C=f(x),M=new RegExp("("+L.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+")","gi");w.innerHTML=C.replace(M,'<span class="vd-suggest-match">$1</span>')}else w.textContent=x;w.addEventListener("click",()=>A(D)),c.appendChild(w)})},m=()=>{c.classList.add("is-open"),t.setAttribute("aria-expanded","true")},b=()=>{c.classList.remove("is-open"),t.setAttribute("aria-expanded","false"),d=-1,t.removeAttribute("aria-activedescendant")},A=v=>{let L=u[v],k=typeof L=="object"&&(L.value||L.label)||String(L);t.value=k,b(),t.dispatchEvent(new CustomEvent("suggest:select",{detail:{value:k,item:L,index:v},bubbles:!0}))},_=v=>{let L=c.querySelectorAll(".vd-suggest-item");L.forEach(k=>k.classList.remove("is-highlighted")),v>=0&&v<L.length&&(d=v,L[v].classList.add("is-highlighted"),t.setAttribute("aria-activedescendant",L[v].id),L[v].scrollIntoView({block:"nearest"}))},N=async v=>{if(v.length<s){b();return}let L;if(i)try{let k=i.includes("?")?"&":"?";L=await(await window.fetch(i+k+"q="+encodeURIComponent(v))).json()}catch{L=[]}else{let k=v.toLowerCase();L=r.filter(D=>(typeof D=="object"&&(D.label||D.text)||String(D)).toLowerCase().includes(k))}h(L,v),L.length>0,m()},T=()=>{clearTimeout(p),p=setTimeout(()=>N(t.value),200)},H=v=>{if(!c.classList.contains("is-open")){v.key==="ArrowDown"&&(N(t.value),v.preventDefault());return}let L=u.length;switch(v.key){case"ArrowDown":v.preventDefault(),_(d<L-1?d+1:0);break;case"ArrowUp":v.preventDefault(),_(d>0?d-1:L-1);break;case"Enter":v.preventDefault(),d>=0&&A(d);break;case"Escape":b();break}},O=()=>{setTimeout(b,200)};t.addEventListener("input",T),t.addEventListener("keydown",H),t.addEventListener("blur",O),t.addEventListener("focus",()=>{t.value.length>=s&&N(t.value)}),n.push(()=>t.removeEventListener("input",T),()=>t.removeEventListener("keydown",H),()=>t.removeEventListener("blur",O),()=>clearTimeout(p),()=>{c.parentNode&&c.parentNode.removeChild(c)}),this.instances.set(t,{cleanup:n,list:c,close:b})},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 f={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(){document.querySelectorAll("[data-vd-validate], .vd-validate").forEach(t=>{this.instances.has(t)||this.initInstance(t)})},initInstance:function(e){let t=[],n=e.getAttribute("data-vd-validate-mode")||"blur",s=e.querySelectorAll("[data-vd-rules]"),i=o=>{let l=(o.getAttribute("data-vd-rules")||"").split("|").map(p=>p.trim()).filter(Boolean),d=o.value,u=[];for(let p of l){let[h,...m]=p.split(":"),b=m.join(":"),A=this.rules[h];if(A&&!A(d,b)){let N=o.getAttribute("data-vd-msg-"+h)||this.messages[h]||"Invalid";b&&(N=N.replace("{0}",b)),u.push(N);break}}return this.setFieldState(o,u),u.length===0},a=()=>{let o=!0;return s.forEach(c=>{i(c)||(o=!1)}),o};s.forEach(o=>{if(n==="input"||n==="blur"){let c=n==="input"?"input":"blur",l=()=>i(o);if(o.addEventListener(c,l),t.push(()=>o.removeEventListener(c,l)),n==="blur"){let d=()=>{(o.classList.contains("is-invalid")||o.classList.contains("is-valid"))&&i(o)};o.addEventListener("input",d),t.push(()=>o.removeEventListener("input",d))}}});let r=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",r),t.push(()=>e.removeEventListener("submit",r)),this.instances.set(e,{cleanup:t,validateAll:a,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",f),window.VanduoValidate=f})();(function(){"use strict";let f=["Su","Mo","Tu","We","Th","Fr","Sa"],e=["January","February","March","April","May","June","July","August","September","October","November","December"],t={instances:new Map,init:function(){document.querySelectorAll("[data-vd-datepicker]").forEach(s=>{this.instances.has(s)||this.initInstance(s)})},initInstance:function(n){let s=[],i=n.getAttribute("data-vd-datepicker-format")||"yyyy-mm-dd",a=n.getAttribute("data-vd-datepicker-min"),r=n.getAttribute("data-vd-datepicker-max"),o=a?new Date(a):null,c=r?new Date(r):null,l=new Date,d=l.getFullYear(),u=l.getMonth(),p=null,h="days";if(n.value){let w=new Date(n.value);isNaN(w.getTime())||(p=w,d=w.getFullYear(),u=w.getMonth())}let m=document.createElement("div");m.className="vd-datepicker-popup",m.setAttribute("role","dialog"),m.setAttribute("aria-label","Choose date");let b=document.createElement("div");b.className="vd-suggest-wrapper",b.style.position="relative",b.style.display="inline-block",n.parentNode.insertBefore(b,n),b.appendChild(n),b.appendChild(m);let A=w=>{let x=w.getFullYear(),C=String(w.getMonth()+1).padStart(2,"0"),M=String(w.getDate()).padStart(2,"0");return i.replace("yyyy",x).replace("mm",C).replace("dd",M)},_=w=>!!(o&&w<o||c&&w>c),N=(w,x)=>w&&x&&w.getFullYear()===x.getFullYear()&&w.getMonth()===x.getMonth()&&w.getDate()===x.getDate(),T=()=>{m.innerHTML="";let w=document.createElement("div");w.className="vd-datepicker-header";let x=document.createElement("button");x.type="button",x.className="vd-datepicker-prev",x.innerHTML="&#8249;",x.setAttribute("aria-label","Previous");let C=document.createElement("button");C.type="button",C.className="vd-datepicker-next",C.innerHTML="&#8250;",C.setAttribute("aria-label","Next");let M=document.createElement("span");if(M.className="vd-datepicker-title",h==="days")M.textContent=e[u]+" "+d,M.addEventListener("click",()=>{h="months",T()}),x.addEventListener("click",()=>{u--,u<0&&(u=11,d--),T()}),C.addEventListener("click",()=>{u++,u>11&&(u=0,d++),T()});else if(h==="months")M.textContent=String(d),M.addEventListener("click",()=>{h="years",T()}),x.addEventListener("click",()=>{d--,T()}),C.addEventListener("click",()=>{d++,T()});else{let z=Math.floor(d/10)*10;M.textContent=z+" - "+(z+9),x.addEventListener("click",()=>{d-=10,T()}),C.addEventListener("click",()=>{d+=10,T()})}if(w.appendChild(x),w.appendChild(M),w.appendChild(C),m.appendChild(w),h==="days"){let z=document.createElement("div");z.className="vd-datepicker-weekdays",f.forEach(F=>{let U=document.createElement("span");U.textContent=F,z.appendChild(U)}),m.appendChild(z);let R=document.createElement("div");R.className="vd-datepicker-days";let V=new Date(d,u,1).getDay(),P=new Date(d,u+1,0).getDate(),j=new Date(d,u,0).getDate();for(let F=V-1;F>=0;F--){let U=H(j-F,!0);R.appendChild(U)}for(let F=1;F<=P;F++){let U=new Date(d,u,F),g=H(F,!1,U);R.appendChild(g)}let W=V+P,J=W%7===0?0:7-W%7;for(let F=1;F<=J;F++){let U=H(F,!0);R.appendChild(U)}m.appendChild(R)}else if(h==="months"){let z=document.createElement("div");z.className="vd-datepicker-months",e.forEach((R,V)=>{let P=document.createElement("button");P.type="button",P.className="vd-datepicker-month-btn",P.textContent=R.slice(0,3),p&&p.getFullYear()===d&&p.getMonth()===V&&P.classList.add("is-selected"),P.addEventListener("click",()=>{u=V,h="days",T()}),z.appendChild(P)}),m.appendChild(z)}else{let z=document.createElement("div");z.className="vd-datepicker-years";let R=Math.floor(d/10)*10;for(let V=R-1;V<=R+10;V++){let P=document.createElement("button");P.type="button",P.className="vd-datepicker-year-btn",P.textContent=V,p&&p.getFullYear()===V&&P.classList.add("is-selected"),(V<R||V>R+9)&&(P.style.opacity="0.4"),P.addEventListener("click",()=>{d=V,h="months",T()}),z.appendChild(P)}m.appendChild(z)}},H=(w,x,C)=>{let M=document.createElement("button");return M.type="button",M.className="vd-datepicker-day",M.textContent=w,x?(M.classList.add("is-outside"),M.tabIndex=-1,M):(C&&N(C,l)&&M.classList.add("is-today"),C&&N(C,p)&&M.classList.add("is-selected"),C&&_(C)?(M.classList.add("is-disabled"),M):(C&&M.addEventListener("click",()=>{p=C,d=C.getFullYear(),u=C.getMonth(),n.value=A(C),v(),n.dispatchEvent(new CustomEvent("datepicker:select",{detail:{date:C,formatted:n.value},bubbles:!0})),n.dispatchEvent(new Event("change",{bubbles:!0}))}),M))},O=()=>{T(),m.classList.add("is-open"),n.setAttribute("aria-expanded","true")},v=()=>{m.classList.remove("is-open"),n.setAttribute("aria-expanded","false"),h="days"},L=()=>O(),k=w=>{b.contains(w.target)||v()},D=w=>{w.key==="Escape"&&v()};n.addEventListener("focus",L),document.addEventListener("click",k,!0),document.addEventListener("keydown",D),n.setAttribute("aria-haspopup","dialog"),n.setAttribute("aria-expanded","false"),n.setAttribute("autocomplete","off"),s.push(()=>n.removeEventListener("focus",L),()=>document.removeEventListener("click",k,!0),()=>document.removeEventListener("keydown",D)),this.instances.set(n,{cleanup:s,open:O,close:v,popup:m})},destroy:function(n){let s=this.instances.get(n);s&&(s.cleanup.forEach(i=>i()),this.instances.delete(n))},destroyAll:function(){this.instances.forEach((n,s)=>this.destroy(s))}};typeof window.Vanduo<"u"&&window.Vanduo.register("datepicker",t),window.VanduoDatepicker=t})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll("[data-vd-timepicker]").forEach(t=>{this.instances.has(t)||this.initInstance(t)})},initInstance:function(e){let t=[],n=e.getAttribute("data-vd-timepicker-format")==="24h",s=parseInt(e.getAttribute("data-vd-timepicker-step")||"30",10),i=e.closest(".vd-suggest-wrapper");i||(i=document.createElement("div"),i.style.position="relative",i.style.display="inline-block",e.parentNode.insertBefore(i,e),i.appendChild(e));let a=document.createElement("div");a.className="vd-timepicker-popup",a.setAttribute("role","listbox"),i.appendChild(a);let r=[];for(let h=0;h<24;h++)for(let m=0;m<60;m+=s){let b=String(h).padStart(2,"0"),A=String(m).padStart(2,"0");if(n)r.push({display:b+":"+A,value:b+":"+A});else{let _=h<12?"AM":"PM",T=(h===0?12:h>12?h-12:h)+":"+A+" "+_;r.push({display:T,value:b+":"+A})}}let o=()=>{a.innerHTML="",r.forEach(h=>{let m=document.createElement("div");m.className="vd-timepicker-item",m.setAttribute("role","option"),m.textContent=h.display,(e.value===h.value||e.value===h.display)&&m.classList.add("is-selected"),m.addEventListener("click",()=>{e.value=h.display,a.querySelectorAll(".vd-timepicker-item").forEach(b=>b.classList.remove("is-selected")),m.classList.add("is-selected"),l(),e.dispatchEvent(new CustomEvent("timepicker:select",{detail:{display:h.display,value:h.value},bubbles:!0})),e.dispatchEvent(new Event("change",{bubbles:!0}))}),a.appendChild(m)})},c=()=>{o(),a.classList.add("is-open"),e.setAttribute("aria-expanded","true");let h=a.querySelector(".is-selected");h&&h.scrollIntoView({block:"center"})},l=()=>{a.classList.remove("is-open"),e.setAttribute("aria-expanded","false")},d=()=>c(),u=h=>{i.contains(h.target)||l()},p=h=>{h.key==="Escape"&&l()};e.addEventListener("focus",d),document.addEventListener("click",u,!0),document.addEventListener("keydown",p),e.setAttribute("aria-haspopup","listbox"),e.setAttribute("aria-expanded","false"),e.setAttribute("autocomplete","off"),e.readOnly=!0,t.push(()=>e.removeEventListener("focus",d),()=>document.removeEventListener("click",u,!0),()=>document.removeEventListener("keydown",p)),this.instances.set(e,{cleanup:t,open:c,close:l})},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("timepicker",f),window.VanduoTimepicker=f})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll(".vd-stepper").forEach(t=>{this.instances.has(t)||this.initInstance(t)})},initInstance:function(e){let t=[],n=Array.from(e.querySelectorAll(".vd-stepper-item")),s=e.classList.contains("vd-stepper-clickable"),i=n.findIndex(r=>r.classList.contains("is-active"));i===-1&&(i=0);let a=r=>{if(r<0||r>=n.length)return;let o=i;i=r,n.forEach((c,l)=>{c.classList.remove("is-active","is-completed"),l<r?c.classList.add("is-completed"):l===r&&c.classList.add("is-active")}),e.dispatchEvent(new CustomEvent("stepper:change",{detail:{current:r,previous:o,total:n.length},bubbles:!0}))};s&&n.forEach((r,o)=>{let c=()=>a(o);r.addEventListener("click",c),t.push(()=>r.removeEventListener("click",c))}),a(i),this.instances.set(e,{cleanup:t,setStep:a,next:()=>a(i+1),prev:()=>a(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",f),window.VanduoStepper=f})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll("[data-vd-rating]").forEach(t=>{this.instances.has(t)||this.initInstance(t)})},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"),a=s;e.classList.add("vd-rating"),e.setAttribute("role","radiogroup"),e.setAttribute("aria-label",e.getAttribute("aria-label")||"Rating"),e.innerHTML="";let r=[];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<=a?"true":"false"),i&&(d.tabIndex=-1),r.push(d),e.appendChild(d)}let o=document.createElement("span");o.className="vd-rating-value",o.textContent=a>0?a.toString():"",e.appendChild(o);let c=l=>{r.forEach((d,u)=>{d.classList.remove("is-active","is-half");let p=u+1;p<=Math.floor(l)?d.classList.add("is-active"):p-.5<=l&&d.classList.add("is-half"),d.setAttribute("aria-checked",p<=l?"true":"false")}),o.textContent=l>0?l.toString():""};if(c(a),!i){r.forEach((d,u)=>{let p=()=>{r.forEach((b,A)=>{b.classList.toggle("is-hovered",A<=u)})},h=()=>{r.forEach(b=>b.classList.remove("is-hovered"))},m=()=>{a=u+1,e.setAttribute("data-vd-rating-value",a),c(a),e.dispatchEvent(new CustomEvent("rating:change",{detail:{value:a,max:n},bubbles:!0}))};d.addEventListener("mouseenter",p),d.addEventListener("mouseleave",h),d.addEventListener("click",m),t.push(()=>d.removeEventListener("mouseenter",p),()=>d.removeEventListener("mouseleave",h),()=>d.removeEventListener("click",m))});let l=d=>{d.key==="ArrowRight"||d.key==="ArrowUp"?(d.preventDefault(),a<n&&(a++,c(a),r[a-1].focus(),e.dispatchEvent(new CustomEvent("rating:change",{detail:{value:a,max:n},bubbles:!0})))):(d.key==="ArrowLeft"||d.key==="ArrowDown")&&(d.preventDefault(),a>1&&(a--,c(a),r[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",f),window.VanduoRating=f})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll("[data-vd-transfer]").forEach(t=>{this.instances.has(t)||this.initInstance(t)})},initInstance:function(e){let t=[];e.classList.add("vd-transfer");let n,s;try{n=JSON.parse(e.getAttribute("data-vd-transfer")||"[]").map((p,h)=>({id:p.id||"item-"+h,label:p.label||p.text||String(p),selected:!1}))}catch{n=[]}s=[];let i=new Set,a=new Set,r=()=>{e.innerHTML="";let u=o("Source",n,i,"source"),p=document.createElement("div");p.className="vd-transfer-actions";let h=document.createElement("button");h.type="button",h.className="vd-transfer-btn",h.innerHTML="&#8250;",h.setAttribute("aria-label","Move to target"),h.disabled=i.size===0,h.addEventListener("click",()=>c());let m=document.createElement("button");m.type="button",m.className="vd-transfer-btn",m.innerHTML="&#8249;",m.setAttribute("aria-label","Move to source"),m.disabled=a.size===0,m.addEventListener("click",()=>l()),p.appendChild(h),p.appendChild(m);let b=o("Target",s,a,"target");e.appendChild(u),e.appendChild(p),e.appendChild(b)},o=(u,p,h,m)=>{let b=document.createElement("div");b.className="vd-transfer-panel";let A=document.createElement("div");A.className="vd-transfer-header";let _=document.createElement("span");_.textContent=u;let N=document.createElement("span");N.className="vd-transfer-count",N.textContent=h.size+"/"+p.length,A.appendChild(_),A.appendChild(N),b.appendChild(A);let T=document.createElement("div");T.className="vd-transfer-search";let H=document.createElement("input");H.type="text",H.placeholder="Search...",H.setAttribute("aria-label","Search "+u.toLowerCase()),T.appendChild(H),b.appendChild(T);let O=document.createElement("ul");O.className="vd-transfer-list",O.setAttribute("role","listbox");let v=L=>{O.innerHTML="",(L?p.filter(D=>(D.label||D.text||String(D)).toLowerCase().includes(L.toLowerCase())):p).forEach(D=>{let w=document.createElement("li");w.className="vd-transfer-item",w.setAttribute("role","option"),h.has(D.id)&&w.classList.add("is-selected");let x=document.createElement("input");x.type="checkbox",x.checked=h.has(D.id),x.setAttribute("aria-label",D.label);let C=document.createElement("span");C.textContent=D.label,w.addEventListener("click",()=>{h.has(D.id)?h.delete(D.id):h.add(D.id),r()}),w.appendChild(x),w.appendChild(C),O.appendChild(w)})};return H.addEventListener("input",()=>v(H.value)),v(""),b.appendChild(O),b},c=()=>{let u=n.filter(p=>i.has(p.id));n=n.filter(p=>!i.has(p.id)),s=s.concat(u),i.clear(),r(),d()},l=()=>{let u=s.filter(p=>a.has(p.id));s=s.filter(p=>!a.has(p.id)),n=n.concat(u),a.clear(),r(),d()},d=()=>{e.dispatchEvent(new CustomEvent("transfer:change",{detail:{source:n.map(u=>u.id),target:s.map(u=>u.id)},bubbles:!0}))};r(),this.instances.set(e,{cleanup:t,getTarget:()=>s.map(u=>u.id),getSource:()=>n.map(u=>u.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",f),window.VanduoTransfer=f})();(function(){"use strict";let f={instances:new Map,init:function(){document.querySelectorAll("[data-vd-tree]").forEach(t=>{this.instances.has(t)||this.initInstance(t)})},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=(o,c)=>{c.innerHTML="",o.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 u=document.createElement("div");if(u.className="vd-tree-node-content",l.children&&l.children.length>0){let h=document.createElement("button");h.type="button",h.className="vd-tree-toggle",h.setAttribute("aria-label","Toggle"),h.addEventListener("click",m=>{m.stopPropagation(),l.open=!l.open,d.classList.toggle("is-open"),d.setAttribute("aria-expanded",l.open?"true":"false")}),u.appendChild(h)}else{let h=document.createElement("span");h.className="vd-tree-toggle-placeholder",u.appendChild(h)}if(e.hasAttribute("data-vd-tree-checkbox")){let h=document.createElement("input");h.type="checkbox",h.className="vd-tree-checkbox",h.checked=!!l.checked,h.setAttribute("aria-label",l.label),h.addEventListener("change",m=>{m.stopPropagation(),l.checked=h.checked,n&&l.children&&(a(l.children,h.checked),i(s,e)),e.dispatchEvent(new CustomEvent("tree:check",{detail:{id:l.id,checked:h.checked,label:l.label},bubbles:!0}))}),u.appendChild(h)}if(l.icon){let h=document.createElement("span");h.className="vd-tree-icon "+l.icon,u.appendChild(h)}let p=document.createElement("span");if(p.className="vd-tree-label",p.textContent=l.label||"",u.appendChild(p),d.appendChild(u),l.children&&l.children.length>0){let h=document.createElement("ul");h.className="vd-tree-children",h.setAttribute("role","group"),i(l.children,h),d.appendChild(h)}c.appendChild(d)})},a=(o,c)=>{o.forEach(l=>{l.checked=c,l.children&&a(l.children,c)})},r=o=>{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(o.key){case"ArrowDown":if(o.preventDefault(),d<l.length-1){let u=l[d+1].querySelector(".vd-tree-toggle, .vd-tree-label");u&&u.focus()}break;case"ArrowUp":if(o.preventDefault(),d>0){let u=l[d-1].querySelector(".vd-tree-toggle, .vd-tree-label");u&&u.focus()}break}};e.addEventListener("keydown",r),t.push(()=>e.removeEventListener("keydown",r)),i(s,e),this.instances.set(e,{cleanup:t,getData:()=>s,getChecked:()=>{let o=[],c=l=>{l.forEach(d=>{d.checked&&o.push(d.id||d.label),d.children&&c(d.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",f),window.VanduoTree=f})();(function(){"use strict";let f={_active:!1,_steps:[],_currentStep:0,_elements:{},_cleanup:[],_boundTriggers:new WeakMap,_triggerElement:null,init:function(){document.querySelectorAll("[data-vd-spotlight]").forEach(t=>{if(this._boundTriggers.has(t))return;let n=s=>{s.preventDefault();let i=this._parseSteps(t.getAttribute("data-vd-spotlight"));i.length!==0&&this.start(i,{trigger:t})};t.addEventListener("click",n),this._boundTriggers.set(t,n)})},_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:"",a=typeof e.description=="string"?e.description:typeof e.content=="string"?e.content:"";return{target:t,title:i,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 i=document.createElement("div");i.className="vd-spotlight-overlay",i.setAttribute("aria-hidden","true"),document.body.appendChild(i);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:i,tooltip:a};let r=o=>{o.key==="Escape"&&this.stop()};document.addEventListener("keydown",r),this._cleanup.push(()=>document.removeEventListener("keydown",r)),i.addEventListener("click",()=>this.stop()),this._showStep(this._currentStep)},_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 a=document.createElement("div");a.className="vd-spotlight-footer",a.setAttribute("aria-label","Step "+(e+1)+" of "+i);let r=document.createElement("span");r.className="vd-spotlight-counter",r.textContent=e+1+" / "+i;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<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()),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)}a.appendChild(r),a.appendChild(o),s.appendChild(a),n&&requestAnimationFrame(()=>{let l=n.getBoundingClientRect(),d=s.getBoundingClientRect(),u=l.bottom+12+window.scrollY,p=l.left+(l.width-d.width)/2+window.scrollX;p=Math.max(8,Math.min(p,window.innerWidth-d.width-8)),u+d.height>window.innerHeight+window.scrollY&&(u=l.top-d.height-12+window.scrollY),s.style.top=u+"px",s.style.left=p+"px"}),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._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",f),window.VanduoSpotlight=f})();var Q=window.Vanduo;var Pe=Q;export{Q as Vanduo,Pe as default};
43
43
  //# sourceMappingURL=vanduo.esm.min.js.map