@vanduo-oss/framework 1.4.0 → 1.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/README.md +11 -9
  2. package/css/components/affix.css +11 -11
  3. package/css/components/alerts.css +55 -55
  4. package/css/components/avatar.css +62 -62
  5. package/css/components/badges.css +25 -25
  6. package/css/components/breadcrumbs.css +31 -31
  7. package/css/components/bubble.css +40 -40
  8. package/css/components/button-group.css +2 -2
  9. package/css/components/buttons.css +33 -33
  10. package/css/components/cards.css +76 -76
  11. package/css/components/chips.css +27 -27
  12. package/css/components/code-snippet.css +132 -132
  13. package/css/components/collapsible.css +60 -60
  14. package/css/components/collections.css +58 -58
  15. package/css/components/datepicker.css +55 -53
  16. package/css/components/doc-search.css +63 -63
  17. package/css/components/doc-tabs.css +1 -1
  18. package/css/components/draggable.css +69 -69
  19. package/css/components/dropdown.css +48 -48
  20. package/css/components/fab.css +60 -60
  21. package/css/components/flow.css +55 -55
  22. package/css/components/footer.css +52 -52
  23. package/css/components/forms.css +373 -373
  24. package/css/components/image-box.css +39 -39
  25. package/css/components/modals.css +53 -49
  26. package/css/components/music-player.css +150 -150
  27. package/css/components/navbar.css +71 -71
  28. package/css/components/pagination.css +50 -50
  29. package/css/components/preloader.css +18 -18
  30. package/css/components/progress.css +16 -16
  31. package/css/components/rating.css +18 -18
  32. package/css/components/ripple.css +10 -10
  33. package/css/components/sidenav.css +67 -67
  34. package/css/components/skeleton.css +13 -13
  35. package/css/components/spinner.css +30 -30
  36. package/css/components/spotlight.css +27 -27
  37. package/css/components/stepper.css +36 -36
  38. package/css/components/suggest.css +35 -35
  39. package/css/components/tabs.css +46 -46
  40. package/css/components/theme-customizer.css +73 -73
  41. package/css/components/timeline.css +43 -43
  42. package/css/components/timepicker.css +32 -30
  43. package/css/components/toast.css +27 -27
  44. package/css/components/tooltips.css +77 -77
  45. package/css/components/transfer.css +35 -35
  46. package/css/components/tree.css +25 -25
  47. package/css/components/waypoint.css +12 -12
  48. package/css/core/colors.css +610 -610
  49. package/css/core/grid.css +127 -127
  50. package/css/core/helpers.css +338 -338
  51. package/css/core/tokens.css +69 -81
  52. package/css/core/typography.css +91 -91
  53. package/css/effects/morph.css +17 -17
  54. package/css/effects/parallax.css +6 -6
  55. package/css/utilities/color-utilities.css +273 -273
  56. package/css/utilities/media.css +2 -2
  57. package/css/utilities/shadow.css +75 -75
  58. package/css/utilities/table.css +40 -40
  59. package/css/utilities/transitions.css +38 -38
  60. package/css/vanduo.css +1 -2
  61. package/dist/build-info.json +3 -3
  62. package/dist/vanduo.cjs.js +104 -29
  63. package/dist/vanduo.cjs.js.map +2 -2
  64. package/dist/vanduo.cjs.min.js +5 -5
  65. package/dist/vanduo.cjs.min.js.map +3 -3
  66. package/dist/vanduo.css +4042 -4133
  67. package/dist/vanduo.css.map +1 -1
  68. package/dist/vanduo.esm.js +104 -29
  69. package/dist/vanduo.esm.js.map +2 -2
  70. package/dist/vanduo.esm.min.js +5 -5
  71. package/dist/vanduo.esm.min.js.map +3 -3
  72. package/dist/vanduo.js +104 -29
  73. package/dist/vanduo.js.map +2 -2
  74. package/dist/vanduo.min.css +2 -2
  75. package/dist/vanduo.min.css.map +1 -1
  76. package/dist/vanduo.min.js +5 -5
  77. package/dist/vanduo.min.js.map +3 -3
  78. package/js/components/affix.js +2 -2
  79. package/js/components/datepicker.js +51 -4
  80. package/js/components/image-box.js +2 -2
  81. package/js/components/morph.js +1 -1
  82. package/js/components/music-player.js +11 -11
  83. package/js/components/navbar.js +1 -1
  84. package/js/components/preloader.js +1 -1
  85. package/js/components/theme-customizer.js +4 -4
  86. package/js/components/timepicker.js +48 -6
  87. package/js/components/vd-hex.js +8 -10
  88. package/package.json +1 -1
  89. package/css/core/vd-aliases.css +0 -108
@@ -1,8 +1,8 @@
1
- /*! Vanduo v1.4.0 | Built: 2026-05-20T14:51:00.085Z | git:46420b0 | production */
2
- (()=>{(function(){"use strict";function y(s){return s?Array.isArray(s)?s.filter(function(r){return typeof r=="function"}):typeof s=="function"?[s]:[]:[]}function e(s){return typeof s=="function"?{onDestroy:[s]}:s||{}}function t(s,r){try{r()}catch(i){console.warn("[Vanduo Lifecycle] "+s+" error:",i)}}let n={instances:new Map,isRoot:function(s){return!!s&&(s===document||s.nodeType===1||s.nodeType===9||s.nodeType===11)},normalizeRoot:function(s){return this.isRoot(s)?s:document},isInRoot:function(s,r){let i=this.normalizeRoot(s);return r instanceof Element?i===document?document.documentElement?document.documentElement.contains(r):document.contains(r):i===r?!0:typeof i.contains=="function"&&i.contains(r):!1},queryAll:function(s,r){let i=this.normalizeRoot(s),a=[];if(i instanceof Element&&typeof i.matches=="function"&&i.matches(r)&&a.push(i),typeof i.querySelectorAll=="function"){let o=i.querySelectorAll(r);for(let c=0;c<o.length;c++)a.push(o[c])}return a},queryOne:function(s,r){let i=this.queryAll(s,r);return i.length?i[0]:null},runInRoot:function(s,r){let i=this.normalizeRoot(s);return r(i)},register:function(s,r,i,a){if(!(s instanceof Element)||!r)return;let o=e(a),c=y(i),l=y(o.onDestroy),h=this.instances.get(s)||new Map,d=h.get(r);if(d){d.cleanup=d.cleanup.concat(c),d.onDestroy=d.onDestroy.concat(l);return}h.set(r,{component:r,cleanup:c,onDestroy:l,registeredAt:Date.now()}),this.instances.set(s,h)},unregister:function(s,r){let i=this.instances.get(s);if(!i)return;if(r){let o=i.get(r);if(!o)return;i.delete(r),i.size||this.instances.delete(s),o.cleanup.forEach(function(c){t("Cleanup",c)}),o.onDestroy.forEach(function(c){t("Destroy",c)});return}let a=Array.from(i.values());this.instances.delete(s),a.forEach(function(o){o.cleanup.forEach(function(c){t("Cleanup",c)}),o.onDestroy.forEach(function(c){t("Destroy",c)})})},destroyAll:function(s){let r=[];return this.instances.forEach(function(i,a){if(!s){r.push([a,null]);return}i.has(s)&&r.push([a,s])}),r.forEach(function(i){n.unregister(i[0],i[1]||void 0)}),r.length},destroyAllInContainer:function(s,r){let i=this.normalizeRoot(s),a=[];return this.instances.forEach(function(o,c){if(n.isInRoot(i,c)){if(!r){a.push([c,null]);return}o.has(r)&&a.push([c,r])}}),a.forEach(function(o){n.unregister(o[0],o[1]||void 0)}),a.length},getAll:function(){let s=[];return this.instances.forEach(function(r,i){r.forEach(function(a){s.push({element:i,component:a.component,registeredAt:a.registeredAt})})}),s},has:function(s,r){let i=this.instances.get(s);return i?r?i.has(r):i.size>0:!1}};window.addEventListener("beforeunload",function(){n.destroyAll()}),window.VanduoLifecycle=n})();(function(){"use strict";let y="1.4.0",e=Object.prototype.hasOwnProperty,t={version:y,components:{},aliases:{},_decoratedComponents:new WeakSet,resolveComponentName:function(n){return this.aliases[n]||n},_isRoot:function(n){return typeof window.VanduoLifecycle<"u"&&typeof window.VanduoLifecycle.isRoot=="function"?window.VanduoLifecycle.isRoot(n):!!n&&(n===document||n.nodeType===1||n.nodeType===9||n.nodeType===11)},_normalizeRoot:function(n){return this._isRoot(n)?n:document},_queryAll:function(n,s){let r=this._normalizeRoot(n),i=[];if(r instanceof Element&&typeof r.matches=="function"&&r.matches(s)&&i.push(r),typeof r.querySelectorAll=="function"){let a=r.querySelectorAll(s);for(let o=0;o<a.length;o++)i.push(a[o])}return i},queryAll:function(n,s){return typeof s>"u"&&(s=n,n=document),this._queryAll(n,s)},queryOne:function(n,s){let r=this.queryAll(n,s);return r.length?r[0]:null},_isLifecycleManagedComponent:function(n){if(!n||typeof n!="object")return!1;for(let s in n)if(e.call(n,s)&&n[s]instanceof Map)return!0;return!1},_syncComponentLifecycle:function(n,s,r){let i=window.VanduoLifecycle;if(!i||!this._isLifecycleManagedComponent(s))return;let a=this.resolveComponentName(n),o=this._normalizeRoot(r);for(let c in s)!e.call(s,c)||!(s[c]instanceof Map)||s[c].forEach(function(l,h){if(!(h instanceof Element)||!i.isInRoot(o,h)||i.has(h,a))return;if(typeof s.destroy=="function"){i.register(h,a,[],function(){s.destroy(h)});return}let d=l&&Array.isArray(l.cleanup)?l.cleanup:[];i.register(h,a,d,function(){s[c].delete(h)})})},_decorateComponent:function(n,s){let r=this,i=window.VanduoLifecycle;if(!s||typeof s!="object"||this._decoratedComponents.has(s))return;let a=typeof s.init=="function"?s.init:null;a&&(s.init=function(...c){let l=r._isRoot(c[0])?c[0]:null,h=a.apply(this,c);if(window.Vanduo){let d=l||document;window.Vanduo._syncComponentLifecycle(n,this,d)}return h});let o=typeof s.destroyAll=="function"?s.destroyAll:null;o&&(s.destroyAll=function(...c){let l=r._isRoot(c[0])?c[0]:null,h=window.Vanduo?window.Vanduo.resolveComponentName(n):n;if(i&&window.Vanduo&&window.Vanduo._isLifecycleManagedComponent(this)){if(l&&l!==document)return i.destroyAllInContainer(l,h),this.__vanduoScopedDestroyAll===!0?o.apply(this,c):void 0;i.destroyAll(h)}return o.apply(this,c)}),this._decoratedComponents.add(s)},init:function(n){let s=this._normalizeRoot(n);if(s!==document){this.initComponents(s);return}if(typeof ready<"u"){ready(()=>{this.initComponents(document)});return}if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",()=>{this.initComponents(document)});return}this.initComponents(document)},initComponents:function(n){let s=this._normalizeRoot(n);Object.keys(this.components).forEach(r=>{let i=this.components[r];if(i.init&&typeof i.init=="function")try{i.init(s)}catch(a){console.warn('[Vanduo] Failed to initialize component "'+r+'":',a)}})},register:function(n,s,r){let i=r||{};this._decorateComponent(n,s),this.components[n]=s,Array.isArray(i.aliases)&&i.aliases.forEach(a=>{this.aliases[a]=n})},registerAlias:function(n,s){let r=this.resolveComponentName(s);this.components[r]&&(this.aliases[n]=r)},reinit:function(n,s){let r=this._normalizeRoot(s),i=this.resolveComponentName(n),a=this.components[i];if(a&&a.init&&typeof a.init=="function")try{a.destroyAll&&typeof a.destroyAll=="function"&&a.destroyAll(r),a.init(r)}catch(o){console.warn('[Vanduo] Failed to reinitialize component "'+i+'":',o)}},destroy:function(n){let s=this._normalizeRoot(n),r=Object.keys(this.components);for(let i=0;i<r.length;i++){let a=this.components[r[i]];if(a&&a.destroyAll&&typeof a.destroyAll=="function")try{a.destroyAll(s)}catch(o){console.warn('[Vanduo] Failed to destroy component "'+r[i]+'":',o)}}},destroyAll:function(){this.destroy(document)},getComponent:function(n){let s=this.resolveComponentName(n);return this.components[s]||null}};window.Vanduo=t})();(function(){"use strict";let y={_snippetIdCounter:0,resolveRoot:function(e){return e&&(e.nodeType===1||e.nodeType===9||e.nodeType===11)?e:document},queryWithin:function(e,t){let n=this.resolveRoot(e),s=[];if(n instanceof Element&&typeof n.matches=="function"&&n.matches(t)&&s.push(n),typeof n.querySelectorAll=="function"){let r=n.querySelectorAll(t);for(let i=0;i<r.length;i++)s.push(r[i])}return s},getSnippetInstanceId:function(e){if(e.dataset.codeSnippetId)return e.dataset.codeSnippetId;let t=(e.id||"").trim();return t?(e.dataset.codeSnippetId=`snippet-${t}`,e.dataset.codeSnippetId):(this._snippetIdCounter+=1,e.dataset.codeSnippetId=`snippet-auto-${this._snippetIdCounter}`,e.dataset.codeSnippetId)},addListener:function(e,t,n,s){t&&(t.addEventListener(n,s),e._codeSnippetCleanup||(e._codeSnippetCleanup=[]),e._codeSnippetCleanup.push(()=>t.removeEventListener(n,s)))},init:function(e){this.queryWithin(e,".vd-code-snippet").forEach(n=>{n.dataset.initialized||this.initSnippet(n)})},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"),r=e.querySelectorAll(".vd-code-snippet-pane");s.length>0&&this.initTabs(e,s,r);let i=e.querySelector(".vd-code-snippet-copy");i&&this.initCopyButton(e,i),e.querySelectorAll("[data-extract]").forEach(l=>{this.extractHtml(l)}),e.querySelectorAll(".vd-code-snippet-pane:not([data-extract])").forEach(l=>{this.applyPaneHighlighting(l)}),e.querySelectorAll(".has-line-numbers").forEach(l=>{this.addLineNumbers(l)})},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 r=e.dataset.expanded==="true";e.dataset.expanded=!r,t.setAttribute("aria-expanded",!r),n.dataset.visible=!r,r||n.querySelectorAll("[data-extract]:not([data-extracted])").forEach(o=>{this.extractHtml(o)});let i=new CustomEvent("codesnippet:toggle",{bubbles:!0,detail:{snippet:e,expanded:!r}});e.dispatchEvent(i)})},initTabs:function(e,t,n){let s=this.getSnippetInstanceId(e),r=e.querySelector(".vd-code-snippet-tabs");r&&r.setAttribute("role","tablist"),t.forEach((i,a)=>{let o=i.dataset.lang,c=i.classList.contains("is-active");i.setAttribute("role","tab"),i.setAttribute("aria-selected",c),i.setAttribute("tabindex",c?"0":"-1"),i.id=i.id||`code-tab-${s}-${o||"tab"}-${a}`;let l=e.querySelector(`.vd-code-snippet-pane[data-lang="${o}"]`);l&&(l.id=l.id||`code-pane-${s}-${o||"pane"}-${a}`,l.setAttribute("role","tabpanel"),i.setAttribute("aria-controls",l.id),l.setAttribute("aria-labelledby",i.id)),this.addListener(e,i,"click",()=>{this.switchTab(e,i,t,n)}),this.addListener(e,i,"keydown",h=>{this.handleTabKeydown(h,e,t,n)})})},switchTab:function(e,t,n,s){let r=t.dataset.lang;n.forEach(o=>{o.classList.remove("is-active"),o.setAttribute("aria-selected","false"),o.setAttribute("tabindex","-1")}),s.forEach(o=>{o.classList.remove("is-active")}),t.classList.add("is-active"),t.setAttribute("aria-selected","true"),t.setAttribute("tabindex","0");let i=e.querySelector(`.vd-code-snippet-pane[data-lang="${r}"]`);i&&i.classList.add("is-active");let a=new CustomEvent("codesnippet:tabchange",{bubbles:!0,detail:{snippet:e,tab:t,lang:r}});e.dispatchEvent(a)},handleTabKeydown:function(e,t,n,s){let r=Array.from(n),i=r.indexOf(e.target),a;switch(e.key){case"ArrowLeft":e.preventDefault(),a=i>0?i-1:r.length-1;break;case"ArrowRight":e.preventDefault(),a=i<r.length-1?i+1:0;break;case"Home":e.preventDefault(),a=0;break;case"End":e.preventDefault(),a=r.length-1;break;default:return}a!==i&&(r[a].focus(),this.switchTab(t,r[a],n,s))},initCopyButton:function(e,t){this.addListener(e,t,"click",async()=>{await this.copyCode(e,t)})},copyCode:async function(e,t){let n=e.querySelector(".vd-code-snippet-pane.is-active")||e.querySelector(".vd-code-snippet-pane");if(!n){console.warn("CodeSnippet: No code pane found");return}let r=(n.querySelector("code")||n).textContent,i;try{await navigator.clipboard.writeText(r),i=!0}catch{i=this.fallbackCopy(r)}this.showCopyFeedback(t,i);let a=new CustomEvent("codesnippet:copy",{bubbles:!0,detail:{snippet:e,code:r,success:i}});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 r=document.createElement("code");r.innerHTML=s,e.replaceChildren(r),e.dataset.extracted="true",e.dataset.highlighted="true"},formatHtml:function(e){e=e.trim();let t=e.split(`
3
- `),n=0,s=2,r=[];return t.forEach(i=>{if(i=i.trim(),!i)return;i.match(/^<\/\w/)&&(n=Math.max(0,n-s)),r.push(" ".repeat(n)+i);let a=/<[a-zA-Z]/.test(i),o=i.includes("/>");a&&!o&&(i.match(/<(br|hr|img|input|meta|link|area|base|col|embed|param|source|track|wbr)/i)||i.match(/<\/\w+>$/)||(n+=s))}),r.join(`
1
+ /*! Vanduo v1.4.2 | Built: 2026-05-23T19:59:36.731Z | git:adbe750 | production */
2
+ (()=>{(function(){"use strict";function v(s){return s?Array.isArray(s)?s.filter(function(r){return typeof r=="function"}):typeof s=="function"?[s]:[]:[]}function e(s){return typeof s=="function"?{onDestroy:[s]}:s||{}}function t(s,r){try{r()}catch(i){console.warn("[Vanduo Lifecycle] "+s+" error:",i)}}let n={instances:new Map,isRoot:function(s){return!!s&&(s===document||s.nodeType===1||s.nodeType===9||s.nodeType===11)},normalizeRoot:function(s){return this.isRoot(s)?s:document},isInRoot:function(s,r){let i=this.normalizeRoot(s);return r instanceof Element?i===document?document.documentElement?document.documentElement.contains(r):document.contains(r):i===r?!0:typeof i.contains=="function"&&i.contains(r):!1},queryAll:function(s,r){let i=this.normalizeRoot(s),o=[];if(i instanceof Element&&typeof i.matches=="function"&&i.matches(r)&&o.push(i),typeof i.querySelectorAll=="function"){let a=i.querySelectorAll(r);for(let c=0;c<a.length;c++)o.push(a[c])}return o},queryOne:function(s,r){let i=this.queryAll(s,r);return i.length?i[0]:null},runInRoot:function(s,r){let i=this.normalizeRoot(s);return r(i)},register:function(s,r,i,o){if(!(s instanceof Element)||!r)return;let a=e(o),c=v(i),l=v(a.onDestroy),f=this.instances.get(s)||new Map,d=f.get(r);if(d){d.cleanup=d.cleanup.concat(c),d.onDestroy=d.onDestroy.concat(l);return}f.set(r,{component:r,cleanup:c,onDestroy:l,registeredAt:Date.now()}),this.instances.set(s,f)},unregister:function(s,r){let i=this.instances.get(s);if(!i)return;if(r){let a=i.get(r);if(!a)return;i.delete(r),i.size||this.instances.delete(s),a.cleanup.forEach(function(c){t("Cleanup",c)}),a.onDestroy.forEach(function(c){t("Destroy",c)});return}let o=Array.from(i.values());this.instances.delete(s),o.forEach(function(a){a.cleanup.forEach(function(c){t("Cleanup",c)}),a.onDestroy.forEach(function(c){t("Destroy",c)})})},destroyAll:function(s){let r=[];return this.instances.forEach(function(i,o){if(!s){r.push([o,null]);return}i.has(s)&&r.push([o,s])}),r.forEach(function(i){n.unregister(i[0],i[1]||void 0)}),r.length},destroyAllInContainer:function(s,r){let i=this.normalizeRoot(s),o=[];return this.instances.forEach(function(a,c){if(n.isInRoot(i,c)){if(!r){o.push([c,null]);return}a.has(r)&&o.push([c,r])}}),o.forEach(function(a){n.unregister(a[0],a[1]||void 0)}),o.length},getAll:function(){let s=[];return this.instances.forEach(function(r,i){r.forEach(function(o){s.push({element:i,component:o.component,registeredAt:o.registeredAt})})}),s},has:function(s,r){let i=this.instances.get(s);return i?r?i.has(r):i.size>0:!1}};window.addEventListener("beforeunload",function(){n.destroyAll()}),window.VanduoLifecycle=n})();(function(){"use strict";let v="1.4.2",e=Object.prototype.hasOwnProperty,t={version:v,components:{},aliases:{},_decoratedComponents:new WeakSet,resolveComponentName:function(n){return this.aliases[n]||n},_isRoot:function(n){return typeof window.VanduoLifecycle<"u"&&typeof window.VanduoLifecycle.isRoot=="function"?window.VanduoLifecycle.isRoot(n):!!n&&(n===document||n.nodeType===1||n.nodeType===9||n.nodeType===11)},_normalizeRoot:function(n){return this._isRoot(n)?n:document},_queryAll:function(n,s){let r=this._normalizeRoot(n),i=[];if(r instanceof Element&&typeof r.matches=="function"&&r.matches(s)&&i.push(r),typeof r.querySelectorAll=="function"){let o=r.querySelectorAll(s);for(let a=0;a<o.length;a++)i.push(o[a])}return i},queryAll:function(n,s){return typeof s>"u"&&(s=n,n=document),this._queryAll(n,s)},queryOne:function(n,s){let r=this.queryAll(n,s);return r.length?r[0]:null},_isLifecycleManagedComponent:function(n){if(!n||typeof n!="object")return!1;for(let s in n)if(e.call(n,s)&&n[s]instanceof Map)return!0;return!1},_syncComponentLifecycle:function(n,s,r){let i=window.VanduoLifecycle;if(!i||!this._isLifecycleManagedComponent(s))return;let o=this.resolveComponentName(n),a=this._normalizeRoot(r);for(let c in s)!e.call(s,c)||!(s[c]instanceof Map)||s[c].forEach(function(l,f){if(!(f instanceof Element)||!i.isInRoot(a,f)||i.has(f,o))return;if(typeof s.destroy=="function"){i.register(f,o,[],function(){s.destroy(f)});return}let d=l&&Array.isArray(l.cleanup)?l.cleanup:[];i.register(f,o,d,function(){s[c].delete(f)})})},_decorateComponent:function(n,s){let r=this,i=window.VanduoLifecycle;if(!s||typeof s!="object"||this._decoratedComponents.has(s))return;let o=typeof s.init=="function"?s.init:null;o&&(s.init=function(...c){let l=r._isRoot(c[0])?c[0]:null,f=o.apply(this,c);if(window.Vanduo){let d=l||document;window.Vanduo._syncComponentLifecycle(n,this,d)}return f});let a=typeof s.destroyAll=="function"?s.destroyAll:null;a&&(s.destroyAll=function(...c){let l=r._isRoot(c[0])?c[0]:null,f=window.Vanduo?window.Vanduo.resolveComponentName(n):n;if(i&&window.Vanduo&&window.Vanduo._isLifecycleManagedComponent(this)){if(l&&l!==document)return i.destroyAllInContainer(l,f),this.__vanduoScopedDestroyAll===!0?a.apply(this,c):void 0;i.destroyAll(f)}return a.apply(this,c)}),this._decoratedComponents.add(s)},init:function(n){let s=this._normalizeRoot(n);if(s!==document){this.initComponents(s);return}if(typeof ready<"u"){ready(()=>{this.initComponents(document)});return}if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",()=>{this.initComponents(document)});return}this.initComponents(document)},initComponents:function(n){let s=this._normalizeRoot(n);Object.keys(this.components).forEach(r=>{let i=this.components[r];if(i.init&&typeof i.init=="function")try{i.init(s)}catch(o){console.warn('[Vanduo] Failed to initialize component "'+r+'":',o)}})},register:function(n,s,r){let i=r||{};this._decorateComponent(n,s),this.components[n]=s,Array.isArray(i.aliases)&&i.aliases.forEach(o=>{this.aliases[o]=n})},registerAlias:function(n,s){let r=this.resolveComponentName(s);this.components[r]&&(this.aliases[n]=r)},reinit:function(n,s){let r=this._normalizeRoot(s),i=this.resolveComponentName(n),o=this.components[i];if(o&&o.init&&typeof o.init=="function")try{o.destroyAll&&typeof o.destroyAll=="function"&&o.destroyAll(r),o.init(r)}catch(a){console.warn('[Vanduo] Failed to reinitialize component "'+i+'":',a)}},destroy:function(n){let s=this._normalizeRoot(n),r=Object.keys(this.components);for(let i=0;i<r.length;i++){let o=this.components[r[i]];if(o&&o.destroyAll&&typeof o.destroyAll=="function")try{o.destroyAll(s)}catch(a){console.warn('[Vanduo] Failed to destroy component "'+r[i]+'":',a)}}},destroyAll:function(){this.destroy(document)},getComponent:function(n){let s=this.resolveComponentName(n);return this.components[s]||null}};window.Vanduo=t})();(function(){"use strict";let v={_snippetIdCounter:0,resolveRoot:function(e){return e&&(e.nodeType===1||e.nodeType===9||e.nodeType===11)?e:document},queryWithin:function(e,t){let n=this.resolveRoot(e),s=[];if(n instanceof Element&&typeof n.matches=="function"&&n.matches(t)&&s.push(n),typeof n.querySelectorAll=="function"){let r=n.querySelectorAll(t);for(let i=0;i<r.length;i++)s.push(r[i])}return s},getSnippetInstanceId:function(e){if(e.dataset.codeSnippetId)return e.dataset.codeSnippetId;let t=(e.id||"").trim();return t?(e.dataset.codeSnippetId=`snippet-${t}`,e.dataset.codeSnippetId):(this._snippetIdCounter+=1,e.dataset.codeSnippetId=`snippet-auto-${this._snippetIdCounter}`,e.dataset.codeSnippetId)},addListener:function(e,t,n,s){t&&(t.addEventListener(n,s),e._codeSnippetCleanup||(e._codeSnippetCleanup=[]),e._codeSnippetCleanup.push(()=>t.removeEventListener(n,s)))},init:function(e){this.queryWithin(e,".vd-code-snippet").forEach(n=>{n.dataset.initialized||this.initSnippet(n)})},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"),r=e.querySelectorAll(".vd-code-snippet-pane");s.length>0&&this.initTabs(e,s,r);let i=e.querySelector(".vd-code-snippet-copy");i&&this.initCopyButton(e,i),e.querySelectorAll("[data-extract]").forEach(l=>{this.extractHtml(l)}),e.querySelectorAll(".vd-code-snippet-pane:not([data-extract])").forEach(l=>{this.applyPaneHighlighting(l)}),e.querySelectorAll(".has-line-numbers").forEach(l=>{this.addLineNumbers(l)})},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 r=e.dataset.expanded==="true";e.dataset.expanded=!r,t.setAttribute("aria-expanded",!r),n.dataset.visible=!r,r||n.querySelectorAll("[data-extract]:not([data-extracted])").forEach(a=>{this.extractHtml(a)});let i=new CustomEvent("codesnippet:toggle",{bubbles:!0,detail:{snippet:e,expanded:!r}});e.dispatchEvent(i)})},initTabs:function(e,t,n){let s=this.getSnippetInstanceId(e),r=e.querySelector(".vd-code-snippet-tabs");r&&r.setAttribute("role","tablist"),t.forEach((i,o)=>{let a=i.dataset.lang,c=i.classList.contains("is-active");i.setAttribute("role","tab"),i.setAttribute("aria-selected",c),i.setAttribute("tabindex",c?"0":"-1"),i.id=i.id||`code-tab-${s}-${a||"tab"}-${o}`;let l=e.querySelector(`.vd-code-snippet-pane[data-lang="${a}"]`);l&&(l.id=l.id||`code-pane-${s}-${a||"pane"}-${o}`,l.setAttribute("role","tabpanel"),i.setAttribute("aria-controls",l.id),l.setAttribute("aria-labelledby",i.id)),this.addListener(e,i,"click",()=>{this.switchTab(e,i,t,n)}),this.addListener(e,i,"keydown",f=>{this.handleTabKeydown(f,e,t,n)})})},switchTab:function(e,t,n,s){let r=t.dataset.lang;n.forEach(a=>{a.classList.remove("is-active"),a.setAttribute("aria-selected","false"),a.setAttribute("tabindex","-1")}),s.forEach(a=>{a.classList.remove("is-active")}),t.classList.add("is-active"),t.setAttribute("aria-selected","true"),t.setAttribute("tabindex","0");let i=e.querySelector(`.vd-code-snippet-pane[data-lang="${r}"]`);i&&i.classList.add("is-active");let o=new CustomEvent("codesnippet:tabchange",{bubbles:!0,detail:{snippet:e,tab:t,lang:r}});e.dispatchEvent(o)},handleTabKeydown:function(e,t,n,s){let r=Array.from(n),i=r.indexOf(e.target),o;switch(e.key){case"ArrowLeft":e.preventDefault(),o=i>0?i-1:r.length-1;break;case"ArrowRight":e.preventDefault(),o=i<r.length-1?i+1:0;break;case"Home":e.preventDefault(),o=0;break;case"End":e.preventDefault(),o=r.length-1;break;default:return}o!==i&&(r[o].focus(),this.switchTab(t,r[o],n,s))},initCopyButton:function(e,t){this.addListener(e,t,"click",async()=>{await this.copyCode(e,t)})},copyCode:async function(e,t){let n=e.querySelector(".vd-code-snippet-pane.is-active")||e.querySelector(".vd-code-snippet-pane");if(!n){console.warn("CodeSnippet: No code pane found");return}let r=(n.querySelector("code")||n).textContent,i;try{await navigator.clipboard.writeText(r),i=!0}catch{i=this.fallbackCopy(r)}this.showCopyFeedback(t,i);let o=new CustomEvent("codesnippet:copy",{bubbles:!0,detail:{snippet:e,code:r,success:i}});e.dispatchEvent(o)},fallbackCopy:function(e){let t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.left="-9999px",t.style.top="-9999px",document.body.appendChild(t),t.focus(),t.select();let n=!1;try{n=document.execCommand("copy")}catch(s){console.warn("CodeSnippet: Fallback copy failed",s)}return document.body.removeChild(t),n},showCopyFeedback:function(e,t){if(t){e.classList.add("is-copied");let n=document.createElement("span");n.setAttribute("role","status"),n.setAttribute("aria-live","polite"),n.className="sr-only",n.textContent="Code copied to clipboard",e.appendChild(n),setTimeout(()=>{e.classList.remove("is-copied"),n.parentNode&&n.parentNode.removeChild(n)},2e3)}},extractHtml:function(e){let t=e.dataset.extract;if(!t)return;let n=document.querySelector(t);if(!n){console.warn(`CodeSnippet: Source element not found: ${t}`);return}let s=n.innerHTML;s=this.formatHtml(s),s=this.escapeHtml(s),s=this.highlightHtml(s);let r=document.createElement("code");r.innerHTML=s,e.replaceChildren(r),e.dataset.extracted="true",e.dataset.highlighted="true"},formatHtml:function(e){e=e.trim();let t=e.split(`
3
+ `),n=0,s=2,r=[];return t.forEach(i=>{if(i=i.trim(),!i)return;i.match(/^<\/\w/)&&(n=Math.max(0,n-s)),r.push(" ".repeat(n)+i);let o=/<[a-zA-Z]/.test(i),a=i.includes("/>");o&&!a&&(i.match(/<(br|hr|img|input|meta|link|area|base|col|embed|param|source|track|wbr)/i)||i.match(/<\/\w+>$/)||(n+=s))}),r.join(`
4
4
  `)},escapeHtml:function(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML},needsHighlighting:function(e,t){return!(!t||e.dataset.highlighted==="true"||t.querySelector('[class^="code-"], [class*=" code-"]'))},getHighlightMode:function(e){let t=String(e||"").trim().toLowerCase();return["html","xml","svg","vue","svelte","astro"].includes(t)?"html":["css","scss","sass","less"].includes(t)?"css":["js","mjs","cjs","ts","jsx","tsx","json","bash","sh"].includes(t)?"js":"plain"},highlightCodeByLang:function(e,t){let n=this.escapeHtml(e),s=this.getHighlightMode(t);return s==="html"?this.highlightHtml(n):s==="css"?this.highlightCss(n):s==="js"?this.highlightJs(n):n},applyPaneHighlighting:function(e){if(!e)return;let t=e.querySelector("code")||e;if(!this.needsHighlighting(e,t)){e.dataset.highlighted="true";return}let n=t.textContent||"",s=this.highlightCodeByLang(n,e.dataset.lang),r=t.tagName==="CODE"?t:document.createElement("code");r.innerHTML=s,r!==t&&e.replaceChildren(r),e.dataset.highlighted="true"},highlightHtml:function(e){return e=e.replace(/(&lt;\/?)([\w-]+)/g,'$1<span class="code-tag">$2</span>'),e=e.replace(/([\w-]+)(=)(["'])/g,'<span class="code-attr">$1</span>$2$3'),e=e.replace(/([\w-]+)(=)(&quot;|&#39;)/g,'<span class="code-attr">$1</span>$2$3'),e=e.replace(/(["'])([^"']*)(["'])/g,'$1<span class="code-string">$2</span>$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,r=document.createElement("div");r.className="vd-code-snippet-line-numbers",r.setAttribute("aria-hidden","true");for(let a=1;a<=s;a++){let o=document.createElement("span");o.textContent=a,r.appendChild(o)}let i=document.createElement("div");i.className="vd-code-snippet-code",i.appendChild(t.cloneNode(!0)),t.parentNode.removeChild(t),e.appendChild(r),e.appendChild(i)},expand:function(e){if(typeof e=="string"&&(e=document.querySelector(e)),!e)return;e.dataset.expanded="true";let t=e.querySelector(".vd-code-snippet-toggle"),n=e.querySelector(".vd-code-snippet-content");t&&t.setAttribute("aria-expanded","true"),n&&(n.dataset.visible="true")},collapse:function(e){if(typeof e=="string"&&(e=document.querySelector(e)),!e)return;e.dataset.expanded="false";let t=e.querySelector(".vd-code-snippet-toggle"),n=e.querySelector(".vd-code-snippet-content");t&&t.setAttribute("aria-expanded","false"),n&&(n.dataset.visible="false")},showLang:function(e,t){if(typeof e=="string"&&(e=document.querySelector(e)),!e)return;let n=e.querySelector(`.vd-code-snippet-tab[data-lang="${t}"]`),s=e.querySelectorAll(".vd-code-snippet-tab"),r=e.querySelectorAll(".vd-code-snippet-pane");n&&this.switchTab(e,n,s,r)},destroy:function(e){typeof e=="string"&&(e=document.querySelector(e)),e&&(e._codeSnippetCleanup&&(e._codeSnippetCleanup.forEach(t=>t()),delete e._codeSnippetCleanup),delete e.dataset.initialized)},destroyAll:function(e){let t=this.resolveRoot(e);this.queryWithin(t,'.vd-code-snippet[data-initialized="true"]').forEach(s=>{this.destroy(s)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("codeSnippet",y),window.CodeSnippet=y})();(function(){"use strict";let y={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-collapsible, .accordion").forEach(n=>{this.instances.has(n)||this.initCollapsible(n)})},initCollapsible:function(e){let t=e.classList.contains("accordion"),n=e.querySelectorAll(".vd-collapsible-item, .accordion-item"),s=[];n.forEach(r=>{let i=r.querySelector(".vd-collapsible-header, .accordion-header"),a=r.querySelector(".vd-collapsible-body, .accordion-body"),o=r.querySelector(".vd-collapsible-trigger, .accordion-trigger")||i;if(!i||!a)return;r.classList.contains("is-open")?this.openItem(r,a,!1):this.closeItem(r,a,!1);let c=l=>{l.preventDefault(),this.toggleItem(r,a,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(a=>{if(a!==e){let o=a.querySelector(".vd-collapsible-body, .accordion-body");this.closeItem(a,o)}}),this.openItem(e,t))},openItem:function(e,t,n=!0){n||(t.style.transition="none"),e.classList.add("is-open"),e.setAttribute("aria-expanded","true");let s=t.scrollHeight;t.style.maxHeight=`${s}px`,n||setTimeout(()=>{t.style.transition=""},0),e.dispatchEvent(new CustomEvent("collapsible:open",{bubbles:!0}))},closeItem:function(e,t,n=!0){n||(t.style.transition="none"),e.classList.remove("is-open"),e.setAttribute("aria-expanded","false"),t.style.maxHeight="0",n||setTimeout(()=>{t.style.transition=""},0),e.dispatchEvent(new CustomEvent("collapsible:close",{bubbles:!0}))},open:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t){let n=t.querySelector(".vd-collapsible-body, .accordion-body");n&&this.openItem(t,n)}},close:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t){let n=t.querySelector(".vd-collapsible-body, .accordion-body");n&&this.closeItem(t,n)}},toggle:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t){let n=t.querySelector(".vd-collapsible-body, .accordion-body"),s=t.closest(".vd-collapsible, .accordion"),r=s&&s.classList.contains("accordion");n&&this.toggleItem(t,n,s,r)}},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("collapsible",y),window.VanduoCollapsible=y})();(function(){"use strict";let y={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-dropdown").forEach(n=>{this.instances.has(n)||this.initDropdown(n)})},initDropdown:function(e){let t=e.querySelector(".vd-dropdown-toggle"),n=e.querySelector(".vd-dropdown-menu");if(!t||!n)return;let s=[];t.setAttribute("aria-haspopup","true"),t.setAttribute("aria-expanded","false"),n.setAttribute("role","menu"),n.setAttribute("aria-hidden","true");let r=c=>{c.preventDefault(),c.stopPropagation(),this.toggleDropdown(e,t,n)};t.addEventListener("click",r),s.push(()=>t.removeEventListener("click",r));let i=c=>{!e.contains(c.target)&&n.classList.contains("is-open")&&this.closeDropdown(e,t,n)};document.addEventListener("click",i),s.push(()=>document.removeEventListener("click",i));let a=c=>{this.handleKeydown(c,e,t,n)};t.addEventListener("keydown",a),s.push(()=>t.removeEventListener("keydown",a)),n.querySelectorAll(".vd-dropdown-item:not(.disabled):not(.is-disabled)").forEach(c=>{let l=d=>{d.preventDefault(),this.selectItem(c,e,t,n)};c.addEventListener("click",l),s.push(()=>c.removeEventListener("click",l));let h=d=>{(d.key==="Enter"||d.key===" ")&&(d.preventDefault(),this.selectItem(c,e,t,n))};c.addEventListener("keydown",h),s.push(()=>c.removeEventListener("keydown",h))}),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(i=>{if(i!==n){let a=i.closest(".vd-dropdown"),o=a.querySelector(".vd-dropdown-toggle");this.closeDropdown(a,o,i)}}),e.classList.add("is-open"),n.classList.add("is-open"),t.setAttribute("aria-expanded","true"),n.setAttribute("aria-hidden","false"),this.positionMenu(e,n);let r=n.querySelector(".vd-dropdown-item:not(.disabled):not(.is-disabled)");r&&setTimeout(()=>r.focus(),0)},closeDropdown:function(e,t,n){e.classList.remove("is-open"),n.classList.remove("is-open"),t.setAttribute("aria-expanded","false"),n.setAttribute("aria-hidden","true"),t.focus()},positionMenu:function(e,t){let n=e.getBoundingClientRect(),s=t.getBoundingClientRect(),r=window.innerWidth,i=window.innerHeight,a=8;if(t.classList.remove("vd-dropdown-menu-end","vd-dropdown-menu-start","vd-dropdown-menu-top"),e.classList.contains("vd-dropdown-dropup")){t.classList.add("vd-dropdown-menu-top");return}e.classList.contains("vd-dropdown-dropright")||e.classList.contains("vd-dropdown-dropleft")||(n.left+s.width>r-a?t.classList.add("vd-dropdown-menu-end"):t.classList.add("vd-dropdown-menu-start"),n.bottom+s.height>i-a&&n.top-s.height>a&&t.classList.add("vd-dropdown-menu-top"))},handleKeydown:function(e,t,n,s){let r=s.classList.contains("is-open"),i=Array.from(s.querySelectorAll(".vd-dropdown-item:not(.disabled):not(.is-disabled)")),a=i.findIndex(o=>o===document.activeElement);switch(e.key){case"Enter":case" ":case"ArrowDown":if(e.preventDefault(),!r)this.openDropdown(t,n,s);else if(e.key==="ArrowDown"){let o=a<i.length-1?a+1:0;i[o].focus()}break;case"ArrowUp":if(r){e.preventDefault();let o=a>0?a-1:i.length-1;i[o].focus()}break;case"Escape":r&&(e.preventDefault(),this.closeDropdown(t,n,s));break;case"Home":r&&(e.preventDefault(),i[0].focus());break;case"End":r&&(e.preventDefault(),i[i.length-1].focus());break;default:if(r&&e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey){let o=this.instances.get(t);if(!o)break;clearTimeout(o.typeaheadTimer),o.typeaheadBuffer+=e.key.toLowerCase();let c=i.find(l=>l.textContent.trim().toLowerCase().startsWith(o.typeaheadBuffer));c&&c.focus(),o.typeaheadTimer=setTimeout(()=>{o.typeaheadBuffer=""},500)}break}},selectItem:function(e,t,n,s){s.querySelectorAll(".vd-dropdown-item").forEach(r=>{r.classList.remove("active","is-active")}),e.classList.add("active","is-active"),(n.tagName==="BUTTON"||n.classList.contains("btn"))&&(n.textContent=e.textContent.trim()),this.closeDropdown(t,n,s),e.dispatchEvent(new CustomEvent("dropdown:select",{bubbles:!0,detail:{item:e,value:e.dataset.value||e.textContent}}))},open:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t){let n=t.querySelector(".vd-dropdown-toggle"),s=t.querySelector(".vd-dropdown-menu");n&&s&&this.openDropdown(t,n,s)}},close:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t){let n=t.querySelector(".vd-dropdown-toggle"),s=t.querySelector(".vd-dropdown-menu");n&&s&&this.closeDropdown(t,n,s)}},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("dropdown",y),window.VanduoDropdown=y})();(function(){"use strict";let y={STORAGE_KEY:"vanduo-font-preference",isInitialized:!1,fonts:{system:{name:"System Default",family:null},"jetbrains-mono":{name:"JetBrains Mono",family:"'JetBrains Mono', monospace"},ubuntu:{name:"Ubuntu",family:"'Ubuntu', sans-serif",category:"sans-serif",description:"Friendly, humanist sans-serif"},"open-sans":{name:"Open Sans",family:"'Open Sans', sans-serif",category:"sans-serif",description:"Neutral, highly readable"},lato:{name:"Lato",family:"'Lato', sans-serif",category:"sans-serif",description:"Friendly, rounded sans-serif"}},getToggles:function(e){return window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,'[data-toggle="font"]'):Array.from(document.querySelectorAll('[data-toggle="font"]'))},init:function(e){if(this.state={preference:this.getPreference()},this.fonts[this.state.preference]||(this.state.preference="ubuntu",this.setStorageValue(this.STORAGE_KEY,this.state.preference)),this.isInitialized){this.applyFont(),this.renderUI(e),this.updateUI(e);return}this.isInitialized=!0,this.applyFont(),this.renderUI(e)},getPreference:function(){return this.getStorageValue(this.STORAGE_KEY,"ubuntu")},setPreference:function(e){if(!this.fonts[e]){console.warn("Unknown font:",e);return}this.state.preference=e,this.setStorageValue(this.STORAGE_KEY,e),this.applyFont(),this.updateUI();let t=new CustomEvent("font:change",{bubbles:!0,detail:{font:e,fontData:this.fonts[e]}});document.dispatchEvent(t)},applyFont:function(){let e=this.state.preference;e==="system"?document.documentElement.removeAttribute("data-font"):document.documentElement.setAttribute("data-font",e)},renderUI:function(e){this.getToggles(e).forEach(n=>{if(n.getAttribute("data-font-initialized")==="true"){n.tagName==="SELECT"&&(n.value=this.state.preference);return}if(n.tagName==="SELECT"){n.value=this.state.preference;let s=r=>{this.setPreference(r.target.value)};n.addEventListener("change",s),n._fontToggleHandler=s}else{let s=()=>{let r=Object.keys(this.fonts),a=(r.indexOf(this.state.preference)+1)%r.length;this.setPreference(r[a])};n.addEventListener("click",s),n._fontToggleHandler=s}n.setAttribute("data-font-initialized","true")})},updateUI:function(e){this.getToggles(e).forEach(n=>{if(n.tagName==="SELECT")n.value=this.state.preference;else{let s=n.querySelector(".font-current-label");s&&(s.textContent=this.fonts[this.state.preference].name)}})},getCurrentFont:function(){return this.state.preference},getFontData:function(e){return this.fonts[e]||null},destroyAll:function(e){this.getToggles(e||document).filter(function(n){return n.getAttribute("data-font-initialized")==="true"}).forEach(n=>{if(n._fontToggleHandler){let s=n.tagName==="SELECT"?"change":"click";n.removeEventListener(s,n._fontToggleHandler),delete n._fontToggleHandler}n.removeAttribute("data-font-initialized")}),(!e||e===document)&&(this.isInitialized=!1)},getStorageValue:function(e,t){if(typeof window.safeStorageGet=="function")return window.safeStorageGet(e,t);try{let n=localStorage.getItem(e);return n!==null?n:t}catch{return t}},setStorageValue:function(e,t){if(typeof window.safeStorageSet=="function")return window.safeStorageSet(e,t);try{return localStorage.setItem(e,t),!0}catch{return!1}}};window.Vanduo&&window.Vanduo.register("fontSwitcher",y),window.FontSwitcher=y})();(function(){"use strict";let y=(function(){try{return CSS.supports("selector(:has(*))")}catch{return!1}})(),e={instances:new Map,__vanduoScopedDestroyAll:!0,init:function(t){window.Vanduo.queryAll(t,"[data-layout-mode]").forEach(function(s){this.instances.has(s)||this.initContainer(s)}.bind(this)),this.initToggleButtons(t)},initContainer:function(t){let n=t.getAttribute("data-layout-mode")||"standard",s=[];this.applyMode(t,n),t.setAttribute("role","region"),t.setAttribute("aria-label","Grid layout: "+n+" mode"),this.instances.set(t,{cleanup:s,mode:n})},initToggleButtons:function(t){(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(t,"[data-grid-toggle]"):document.querySelectorAll("[data-grid-toggle]")).forEach(function(s){if(s.getAttribute("data-grid-initialized")==="true")return;let r=function(i){i.preventDefault();let a=s.getAttribute("data-grid-toggle"),o;a?o=document.querySelector(a):o=s.closest("[data-layout-mode]"),o&&this.toggle(o)}.bind(this);s.addEventListener("click",r),s.setAttribute("data-grid-initialized","true"),s.setAttribute("aria-pressed","false"),s._gridCleanup=function(){s.removeEventListener("click",r),s.removeAttribute("data-grid-initialized"),s.removeAttribute("aria-pressed")}}.bind(this))},applyFibFallback:function(t){if(y)return;t.querySelectorAll(".vd-row, .row").forEach(function(s){let i=s.querySelectorAll(':scope > [class*="vd-col-"], :scope > [class*="col-"]').length;i===1?s.style.gridTemplateColumns="1fr":i===2?s.style.gridTemplateColumns="1fr 1.618fr":i===3?s.style.gridTemplateColumns="2fr 3fr 5fr":i===4?s.style.gridTemplateColumns="1fr 2fr 3fr 5fr":s.style.gridTemplateColumns="repeat("+i+", 1fr)"})},removeFibFallback:function(t){t.querySelectorAll(".vd-row, .row").forEach(function(s){s.style.gridTemplateColumns=""})},applyMode:function(t,n){t.classList.remove("vd-grid-standard","vd-grid-fibonacci"),n==="fibonacci"?(t.classList.add("vd-grid-fibonacci"),this.applyFibFallback(t)):(t.classList.add("vd-grid-standard"),this.removeFibFallback(t)),t.setAttribute("data-layout-mode",n),t.setAttribute("aria-label","Grid layout: "+n+" mode"),document.querySelectorAll("[data-grid-toggle]").forEach(function(a){let o=a.getAttribute("data-grid-toggle");if(o&&t.matches(o)){let c=n==="fibonacci";c?a.classList.add("is-active"):a.classList.remove("is-active"),a.setAttribute("aria-pressed",c?"true":"false")}});let r=this.instances.get(t);r&&(r.mode=n);let i;try{i=new CustomEvent("grid:modechange",{bubbles:!0,detail:{container:t,mode:n}})}catch{i=document.createEvent("CustomEvent"),i.initCustomEvent("grid:modechange",!0,!0,{container:t,mode:n})}t.dispatchEvent(i)},toggle:function(t){if(typeof t=="string"&&(t=document.querySelector(t)),!t)return;let s=(t.getAttribute("data-layout-mode")||"standard")==="fibonacci"?"standard":"fibonacci";this.applyMode(t,s)},setMode:function(t,n){typeof t=="string"&&(t=document.querySelector(t)),t&&(n!=="fibonacci"&&n!=="standard"||this.applyMode(t,n))},getMode:function(t){return typeof t=="string"&&(t=document.querySelector(t)),t?t.getAttribute("data-layout-mode")||"standard":null},destroy:function(t){let n=this.instances.get(t);n&&(n.cleanup.forEach(function(s){s()}),t.classList.remove("vd-grid-standard","vd-grid-fibonacci"),t.removeAttribute("aria-label"),this.removeFibFallback(t),this.instances.delete(t))},destroyAll:function(t){let n=window.Vanduo&&typeof window.Vanduo._normalizeRoot=="function"?window.Vanduo._normalizeRoot(t):t||document;this.instances.forEach(function(r,i){(n===document||n===i||typeof n.contains=="function"&&n.contains(i))&&this.destroy(i)}.bind(this)),(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(n,'[data-grid-toggle][data-grid-initialized="true"]'):document.querySelectorAll('[data-grid-initialized="true"]')).forEach(function(r){r._gridCleanup&&(r._gridCleanup(),delete r._gridCleanup)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("gridLayout",e),window.VanduoGridLayout=e})();(function(){"use strict";let y={backdrop:null,container:null,img:null,closeBtn:null,caption:null,currentTrigger:null,scrollThreshold:50,initialScrollY:0,isOpen:!1,_cleanupFunctions:[],getTriggers:function(e){return window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,"[data-image-box]"):Array.from(document.querySelectorAll("[data-image-box]"))},init:function(e){this.createBackdrop(),this.bindTriggers(e)},createBackdrop:function(){if(this.backdrop||document.querySelector(".vd-image-box-backdrop")){this.backdrop||(this.backdrop=document.querySelector(".vd-image-box-backdrop"),this.container=this.backdrop.querySelector(".vd-image-box-container"),this.img=this.backdrop.querySelector(".vd-image-box-img"),this.closeBtn=this.backdrop.querySelector(".vd-image-box-close"),this.caption=this.backdrop.querySelector(".vd-image-box-caption"),this.bindBackdropEvents());return}this.backdrop=document.createElement("div"),this.backdrop.className="vd-image-box-backdrop",this.backdrop.setAttribute("role","dialog"),this.backdrop.setAttribute("aria-modal","true"),this.backdrop.setAttribute("aria-label","Image viewer"),this.backdrop.setAttribute("tabindex","-1"),this.container=document.createElement("div"),this.container.className="vd-image-box-container",this.img=document.createElement("img"),this.img.className="vd-image-box-img",this.img.alt="",this.closeBtn=document.createElement("button"),this.closeBtn.className="vd-image-box-close",this.closeBtn.setAttribute("aria-label","Close image viewer"),this.closeBtn.innerHTML="&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(a){(a.target===e.backdrop||a.target===e.container)&&e.close()};this.backdrop.addEventListener("click",t),this._cleanupFunctions.push(()=>this.backdrop.removeEventListener("click",t));let n=function(){e.close()};this.img.addEventListener("click",n),this._cleanupFunctions.push(()=>this.img.removeEventListener("click",n));let s=function(){e.close()};this.closeBtn.addEventListener("click",s),this._cleanupFunctions.push(()=>this.closeBtn.removeEventListener("click",s));let r=function(a){a.key==="Escape"&&e.isOpen&&e.close()};document.addEventListener("keydown",r),this._cleanupFunctions.push(()=>document.removeEventListener("keydown",r));let i=function(){if(!e.isOpen)return;let a=window.scrollY;Math.abs(a-e.initialScrollY)>e.scrollThreshold&&e.close()};window.addEventListener("scroll",i,{passive:!0}),this._cleanupFunctions.push(()=>window.removeEventListener("scroll",i))},bindTriggers:function(e){let t=this;this.getTriggers(e).forEach(function(s){if(s.dataset.imageBoxInitialized)return;if(s.dataset.imageBoxInitialized="true",s.classList.add("vd-image-box-trigger"),s.tagName==="IMG"){s.complete&&s.naturalWidth===0&&s.classList.add("is-broken");let a=function(){s.classList.add("is-broken")};s.addEventListener("error",a);let o=function(){s.classList.remove("is-broken")};s.addEventListener("load",o),s._imageBoxErrorHandler=a,s._imageBoxLoadHandler=o}let r=function(a){a.preventDefault(),t.open(s)};if(s.addEventListener("click",r),s._imageBoxCleanup=()=>s.removeEventListener("click",r),s.tagName!=="BUTTON"&&s.tagName!=="A"){s.setAttribute("role","button"),s.setAttribute("tabindex","0"),s.setAttribute("aria-label","View enlarged image");let a=function(c){(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),t.open(s))};s.addEventListener("keydown",a);let o=s._imageBoxCleanup;s._imageBoxCleanup=()=>{o(),s.removeEventListener("keydown",a)}}let i=s._imageBoxCleanup;s._imageBoxCleanup=()=>{i(),s._imageBoxErrorHandler&&(s.removeEventListener("error",s._imageBoxErrorHandler),delete s._imageBoxErrorHandler),s._imageBoxLoadHandler&&(s.removeEventListener("load",s._imageBoxLoadHandler),delete s._imageBoxLoadHandler)}})},open:function(e){if(this.isOpen)return;this.currentTrigger=e,this.isOpen=!0,this.initialScrollY=window.scrollY;let t=e.dataset.imageBoxFullSrc||e.dataset.imageBoxSrc||e.src||e.href;if(!t){console.warn("[Vanduo ImageBox] No image source found for trigger:",e);return}let n=e.dataset.imageBoxCaption||e.alt||"";this.img.src=t,this.img.alt=e.alt||"",n?(this.caption.textContent=n,this.caption.style.display="block"):this.caption.style.display="none";let s=window.innerWidth-document.documentElement.clientWidth;document.body.style.setProperty("--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(e){this.bindTriggers(e)},destroy:function(e){if(e&&e!==document){this.getTriggers(e).forEach(s=>{s.classList.remove("vd-image-box-trigger"),s._imageBoxCleanup&&(s._imageBoxCleanup(),delete s._imageBoxCleanup),delete s.dataset.imageBoxInitialized});return}this.isOpen&&this.close(),this.backdrop&&this.backdrop.parentNode&&this.backdrop.parentNode.removeChild(this.backdrop),this._cleanupFunctions.forEach(n=>n()),this._cleanupFunctions=[],(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,"[data-image-box-initialized]"):document.querySelectorAll("[data-image-box-initialized]")).forEach(n=>{n.classList.remove("vd-image-box-trigger"),n._imageBoxCleanup&&(n._imageBoxCleanup(),delete n._imageBoxCleanup),delete n.dataset.imageBoxInitialized}),this.backdrop=null,this.container=null,this.img=null,this.closeBtn=null,this.caption=null,this.currentTrigger=null,this.isOpen=!1},destroyAll:function(e){this.destroy(e)}};typeof window.Vanduo<"u"&&window.Vanduo.register("imageBox",y),window.VanduoImageBox=y})();(function(){"use strict";let y={modals:new Map,openModals:[],zIndexCounter:1050,__vanduoScopedDestroyAll:!0,_triggerCleanups:[],_sharedEscHandler:null,getPortalState:function(e){return e._vdPortalState||(e._vdPortalState={originalParent:null,originalNextSibling:null,placeholder:null}),e._vdPortalState},portalToBody:function(e){if(!e||e.parentNode===document.body)return;let t=this.getPortalState(e);t.originalParent=e.parentNode,t.originalNextSibling=e.nextSibling,t.placeholder||(t.placeholder=document.createComment("vd-modal-placeholder")),t.originalParent.insertBefore(t.placeholder,e),document.body.appendChild(e),e.dataset.vdPortaled="true"},restoreFromPortal:function(e){if(!e)return;let t=this.getPortalState(e);if(!t.placeholder){delete e.dataset.vdPortaled;return}t.placeholder.parentNode?(t.placeholder.parentNode.insertBefore(e,t.placeholder),t.placeholder.parentNode.removeChild(t.placeholder)):t.originalParent&&t.originalParent.isConnected&&(t.originalNextSibling&&t.originalNextSibling.parentNode===t.originalParent?t.originalParent.insertBefore(e,t.originalNextSibling):t.originalParent.appendChild(e)),t.originalParent=null,t.originalNextSibling=null,t.placeholder=null,delete e.dataset.vdPortaled},init:function(e){window.Vanduo.queryAll(e,".vd-modal").forEach(s=>{this.modals.has(s)||this.initModal(s)}),(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,"[data-modal]"):document.querySelectorAll("[data-modal]")).forEach(s=>{if(s.dataset.modalTriggerInitialized)return;s.dataset.modalTriggerInitialized="true";let r=i=>{i.preventDefault();let a=s.dataset.modal,o=document.querySelector(a);o&&this.open(o)};s.addEventListener("click",r),s._modalTriggerCleanup=()=>s.removeEventListener("click",r)})},initModal:function(e){let t=this.createBackdrop(e),n=e.querySelectorAll('.vd-modal-close, [data-dismiss="modal"]'),s=e.querySelector(".vd-modal-dialog");if(!s)return;let r=[];e.setAttribute("role","dialog"),e.setAttribute("aria-modal","true"),e.setAttribute("aria-hidden","true"),e.id||(e.id="modal-"+Math.random().toString(36).substr(2,9));let i=e.querySelector(".vd-modal-title");i&&!i.id&&(i.id=e.id+"-title",e.setAttribute("aria-labelledby",i.id)),n.forEach(o=>{let c=()=>{this.close(e)};o.addEventListener("click",c),r.push(()=>o.removeEventListener("click",c))});let a=o=>{o.target===t&&e.dataset.backdrop!=="static"&&this.close(e)};t.addEventListener("click",a),r.push(()=>t.removeEventListener("click",a)),this._sharedEscHandler||(this._sharedEscHandler=o=>{if(o.key==="Escape"&&this.openModals.length>0){let c=this.openModals[this.openModals.length-1];c.dataset.keyboard!=="false"&&this.close(c)}},document.addEventListener("keydown",this._sharedEscHandler)),this.modals.set(e,{backdrop:t,dialog:s,trapHandler:null,cleanup:r})},createBackdrop:function(e){let t=e.querySelector(".vd-modal-backdrop");return t||(t=document.createElement("div"),t.className="vd-modal-backdrop",document.body.appendChild(t)),t},open:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(!t){console.warn("[Vanduo Modals] Modal element not found:",e);return}if(!this.modals.has(t)){console.warn("[Vanduo Modals] Modal not initialized:",t);return}let n=this.modals.get(t),{backdrop:s,dialog:r}=n;if(this.portalToBody(t),this.zIndexCounter+=10,t.style.zIndex=this.zIndexCounter,s.style.zIndex=this.zIndexCounter-1,this.openModals.push(t),s.classList.add("is-visible"),t.classList.add("is-open"),t.setAttribute("aria-hidden","false"),this.openModals.length===1){document.body.classList.add("body-modal-open");let a=window.innerWidth-document.documentElement.clientWidth;a>0&&(document.body.style.paddingRight=`${a}px`)}let i=this.trapFocus(t);n.trapHandler=i,setTimeout(()=>{let a=this.getFocusableElements(t)[0];a&&a.focus()},100),t.dispatchEvent(new CustomEvent("modal:open",{bubbles:!0}))},close:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(!t){console.warn("[Vanduo Modals] Modal element not found:",e);return}if(!this.modals.has(t)){console.warn("[Vanduo Modals] Modal not initialized:",t);return}let n=this.modals.get(t),{backdrop:s,trapHandler:r}=n;r&&(t.removeEventListener("keydown",r),n.trapHandler=null);let i=this.openModals.indexOf(t);if(i>-1&&this.openModals.splice(i,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 a=document.querySelector(`[data-modal="#${t.id}"]`);a&&a.focus(),t.dispatchEvent(new CustomEvent("modal:close",{bubbles:!0})),this.restoreFromPortal(t)},trapFocus:function(e){let t=this,n=function(s){if(s.key!=="Tab")return;let r=t.getFocusableElements(e),i=r[0],a=r[r.length-1];s.shiftKey?document.activeElement===i&&(s.preventDefault(),a.focus()):document.activeElement===a&&(s.preventDefault(),i.focus())};return e.addEventListener("keydown",n),n},getFocusableElements:function(e){return Array.from(e.querySelectorAll('a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])')).filter(n=>!n.hasAttribute("disabled")&&n.offsetWidth>0&&n.offsetHeight>0)},toggle:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&(t.classList.contains("is-open")?this.close(t):this.open(t))},destroy:function(e){let t=this.modals.get(e);if(t){if(e.classList.contains("is-open")){let n=this.openModals.indexOf(e);n>-1&&this.openModals.splice(n,1),t.backdrop.classList.remove("is-visible"),e.classList.remove("is-open"),e.setAttribute("aria-hidden","true"),this.openModals.length===0&&(document.body.classList.remove("body-modal-open"),document.body.style.paddingRight="",this.zIndexCounter=1050)}this.restoreFromPortal(e),t.cleanup&&t.cleanup.forEach(n=>n()),t.backdrop&&t.backdrop.parentNode&&t.backdrop.parentNode.removeChild(t.backdrop),this.modals.delete(e)}},destroyAll:function(e){let t=window.Vanduo&&typeof window.Vanduo._normalizeRoot=="function"?window.Vanduo._normalizeRoot(e):e||document;this.modals.forEach((s,r)=>{(t===document||t===r||typeof t.contains=="function"&&t.contains(r))&&this.destroy(r)}),(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(t,"[data-modal][data-modal-trigger-initialized]"):document.querySelectorAll("[data-modal][data-modal-trigger-initialized]")).forEach(s=>{s._modalTriggerCleanup&&(s._modalTriggerCleanup(),delete s._modalTriggerCleanup),delete s.dataset.modalTriggerInitialized}),t===document&&this._sharedEscHandler&&(document.removeEventListener("keydown",this._sharedEscHandler),this._sharedEscHandler=null)}};typeof window.Vanduo<"u"&&window.Vanduo.register("modals",y),window.VanduoModals=y})();(function(){"use strict";let y={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(e){window.Vanduo.queryAll(e,".vd-navbar").forEach(n=>{this.instances.has(n)||this.initNavbar(n)})},initScrollWatcher:function(e){let t=e.classList.contains("vd-navbar-glass"),n=e.classList.contains("vd-navbar-transparent");if(!t&&!n)return null;let s=()=>{let i=parseInt(e.dataset.scrollThreshold,10);return isNaN(i)?e.offsetHeight||60:i},r=()=>{let i=window.scrollY>s();e.classList.toggle("vd-navbar-scrolled",i)};return r(),window.addEventListener("scroll",r,{passive:!0}),()=>window.removeEventListener("scroll",r)},initNavbar:function(e){let t=e.querySelector(".vd-navbar-toggle, .vd-navbar-burger"),n=e.querySelector(".vd-navbar-menu"),s=e.querySelector(".vd-navbar-overlay")||this.createOverlay(e),r=[],i=this.initScrollWatcher(e);if(i&&r.push(i),!t||!n){r.length&&this.instances.set(e,{toggle:null,menu:null,overlay:null,cleanup:r});return}let a=u=>{u.preventDefault(),u.stopPropagation(),this.toggleMenu(e,t,n,s)};if(t.addEventListener("click",a),r.push(()=>t.removeEventListener("click",a)),s){let u=()=>{this.closeMenu(e,t,n,s)};s.addEventListener("click",u),r.push(()=>s.removeEventListener("click",u))}let o=u=>{u.key==="Escape"&&n.classList.contains("is-open")&&this.closeMenu(e,t,n,s)};document.addEventListener("keydown",o),r.push(()=>document.removeEventListener("keydown",o));let c,l=()=>{clearTimeout(c),c=setTimeout(()=>{let u=this.getBreakpoint();window.innerWidth>=u&&n.classList.contains("is-open")&&this.closeMenu(e,t,n,s)},250)};window.addEventListener("resize",l),r.push(()=>{clearTimeout(c),window.removeEventListener("resize",l)});let h=u=>{n.classList.contains("is-open")&&!e.contains(u.target)&&!n.contains(u.target)&&this.closeMenu(e,t,n,s)};document.addEventListener("click",h),r.push(()=>document.removeEventListener("click",h)),n.querySelectorAll(".vd-navbar-dropdown > .vd-nav-link, .vd-navbar-dropdown > .nav-link").forEach(u=>{let f=p=>{let A=this.getBreakpoint();if(window.innerWidth<A){p.preventDefault();let k=u.parentElement.querySelector(".vd-navbar-dropdown-menu");k&&k.classList.toggle("is-open")}};u.addEventListener("click",f),r.push(()=>u.removeEventListener("click",f))}),this.instances.set(e,{toggle:t,menu:n,overlay:s,cleanup:r})},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),t.overlay&&t.overlay.parentNode&&t.overlay.parentNode.removeChild(t.overlay),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})},toggleMenu:function(e,t,n,s){n.classList.contains("is-open")?this.closeMenu(e,t,n,s):this.openMenu(e,t,n,s)},openMenu:function(e,t,n,s){n.classList.add("is-open"),t.classList.add("is-active"),s&&s.classList.add("is-active"),document.body.classList.add("body-navbar-open"),t.setAttribute("aria-expanded","true"),n.setAttribute("aria-hidden","false")},closeMenu:function(e,t,n,s){n.classList.remove("is-open"),t.classList.remove("is-active"),s&&s.classList.remove("is-active"),document.body.classList.remove("body-navbar-open"),n.querySelectorAll(".vd-navbar-dropdown-menu.is-open").forEach(i=>{i.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",y),window.VanduoNavbar=y})();(function(){"use strict";let y={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-pagination[data-pagination]").forEach(n=>{this.instances.has(n)||this.initPagination(n)})},initPagination:function(e){let t=parseInt(e.dataset.totalPages)||1,n=parseInt(e.dataset.currentPage)||1,s=parseInt(e.dataset.maxVisible)||7;this.render(e,{totalPages:t,currentPage:n,maxVisible:s});let r=i=>{let a=i.target.closest(".vd-pagination-link");if(!a||a.closest(".vd-pagination-item.disabled")||a.closest(".vd-pagination-item.active"))return;i.preventDefault();let o=a.closest(".vd-pagination-item"),c=o.dataset.page;c?this.goToPage(e,parseInt(c)):o.classList.contains("pagination-prev")?this.prevPage(e):o.classList.contains("pagination-next")&&this.nextPage(e)};e.addEventListener("click",r),this.instances.set(e,{cleanup:[()=>e.removeEventListener("click",r)]})},render:function(e,t){let{totalPages:n,currentPage:s,maxVisible:r}=t;if(n<=1){e.innerHTML="";return}let i="";i+=`<li class="vd-pagination-item vd-pagination-prev pagination-item pagination-prev ${s===1?"disabled":""}">`,i+='<a class="vd-pagination-link pagination-link" href="#" aria-label="Previous">Previous</a>',i+="</li>";let a=this.calculatePages(s,n,r),o=0;a.forEach(c=>{if(c==="ellipsis")i+='<li class="vd-pagination-item pagination-item"><span class="vd-pagination-ellipsis pagination-ellipsis">\u2026</span></li>';else{c!==o+1&&o>0&&(i+='<li class="vd-pagination-item pagination-item"><span class="vd-pagination-ellipsis pagination-ellipsis">\u2026</span></li>');let l=Number(c);i+=`<li class="vd-pagination-item pagination-item ${l===s?"active":""}" data-page="${l}">`,i+=`<a class="vd-pagination-link pagination-link" href="#" aria-label="Page ${l}">${l}</a>`,i+="</li>",o=c}}),i+=`<li class="vd-pagination-item vd-pagination-next pagination-item pagination-next ${s===n?"disabled":""}">`,i+='<a class="vd-pagination-link pagination-link" href="#" aria-label="Next">Next</a>',i+="</li>",e.innerHTML=i,e.dataset.currentPage=s},calculatePages:function(e,t,n){let s=[],r=Math.floor(n/2);if(t<=n)for(let i=1;i<=t;i++)s.push(i);else{s.push(1);let i=Math.max(2,e-r),a=Math.min(t-1,e+r);e<=r+1&&(a=Math.min(t-1,n-1)),e>=t-r&&(i=Math.max(2,t-n+2)),i>2&&s.push("ellipsis");for(let o=i;o<=a;o++)s.push(o);a<t-1&&s.push("ellipsis"),t>1&&s.push(t)}return s},goToPage:function(e,t){let n=parseInt(e.dataset.totalPages)||1,s=parseInt(e.dataset.maxVisible)||7;t<1||t>n||(this.render(e,{totalPages:n,currentPage:t,maxVisible:s}),e.dispatchEvent(new CustomEvent("pagination:change",{bubbles:!0,detail:{page:t,totalPages:n}})))},prevPage:function(e){let t=parseInt(e.dataset.currentPage)||1;t>1&&this.goToPage(e,t-1)},nextPage:function(e){let t=parseInt(e.dataset.currentPage)||1,n=parseInt(e.dataset.totalPages)||1;t<n&&this.goToPage(e,t+1)},update:function(e,t){let n=typeof e=="string"?document.querySelector(e):e;n&&(t.totalPages!==void 0&&(n.dataset.totalPages=t.totalPages),t.currentPage!==void 0&&(n.dataset.currentPage=t.currentPage),t.maxVisible!==void 0&&(n.dataset.maxVisible=t.maxVisible),this.render(n,{totalPages:parseInt(n.dataset.totalPages)||1,currentPage:parseInt(n.dataset.currentPage)||1,maxVisible:parseInt(n.dataset.maxVisible)||7}))},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("pagination",y),window.VanduoPagination=y})();(function(){"use strict";let y={parallaxElements:new Map,ticking:!1,isMobile:window.innerWidth<768,reducedMotion:window.matchMedia("(prefers-reduced-motion: reduce)").matches,isInitialized:!1,_onScroll:null,_onResize:null,init:function(e){if(this.reducedMotion)return;if(window.Vanduo.queryAll(e,".vd-parallax").forEach(n=>{n.dataset.parallaxInitialized||this.initParallax(n)}),this.isInitialized){this.refresh();return}this.isInitialized=!0,this.handleScroll(),this._onScroll=()=>{this.handleScroll()},window.addEventListener("scroll",this._onScroll,{passive:!0}),this._onResize=()=>{this.isMobile=window.innerWidth<768,this.updateAll()},window.addEventListener("resize",this._onResize)},initParallax:function(e){e.dataset.parallaxInitialized="true";let t=e.classList.contains("parallax-disable-mobile");if(t&&this.isMobile)return;let n=e.querySelectorAll(".vd-parallax-layer, .vd-parallax-bg"),s=this.getSpeed(e),r=e.classList.contains("parallax-horizontal")?"horizontal":"vertical";this.parallaxElements.set(e,{layers:Array.from(n),speed:s,direction:r,disableMobile:t}),this.updateParallax(e)},getSpeed:function(e){return e.classList.contains("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,r=n.top,i=n.height,o=(Math.max(0,Math.min(1,(s-r)/(s+i)))-.5)*t.speed*100;t.layers.forEach((c,l)=>{let h=c.dataset.parallaxSpeed?parseFloat(c.dataset.parallaxSpeed):1,d=o*h;t.direction==="horizontal"?c.style.transform=`translateX(${d}px)`:c.style.transform=`translateY(${d}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",y),window.VanduoParallax=y})();(function(){"use strict";let y={getProgressBars:function(e){return window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,".vd-progress-bar[data-progress], .progress-bar[data-progress]"):Array.from(document.querySelectorAll(".vd-progress-bar[data-progress], .progress-bar[data-progress]"))},init:function(e){this.getProgressBars(e).forEach(n=>{n.dataset.progressInitialized||this.initProgressBar(n)})},initProgressBar:function(e){e.dataset.progressInitialized="true";let t=parseInt(e.dataset.progress)||0;this.setProgress(e,t,!1)},setProgress:function(e,t,n=!0){let s=typeof e=="string"?document.querySelector(e):e;if(!s)return;t=Math.max(0,Math.min(100,t)),n?s.style.transition="width var(--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 r=s.querySelector(".vd-progress-text, .progress-text");r&&(r.textContent=t+"%"),s.dispatchEvent(new CustomEvent("progress:update",{bubbles:!0,detail:{value:t,max:100}})),t>=100&&s.dispatchEvent(new CustomEvent("progress:complete",{bubbles:!0,detail:{value:t,max:100}}))},animateProgress:function(e,t,n=1e3){let s=typeof e=="string"?document.querySelector(e):e;if(!s)return;let r=parseInt(s.style.width)||0,i=t-r,a=performance.now(),o=c=>{let l=c-a,h=Math.min(l/n,1),d=1-Math.pow(1-h,3),u=r+i*d;this.setProgress(s,u,!1),h<1&&requestAnimationFrame(o)};requestAnimationFrame(o)},show:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&(t.style.display="inline-block",t.setAttribute("aria-hidden","false"))},hide:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&(t.style.display="none",t.setAttribute("aria-hidden","true"))},toggle:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&(t.style.display==="none"||t.getAttribute("aria-hidden")==="true"?this.show(t):this.hide(t))},destroyAll:function(e){this.getProgressBars(e||document).filter(function(n){return n.dataset.progressInitialized==="true"}).forEach(n=>{delete n.dataset.progressInitialized})}};typeof window.Vanduo<"u"&&window.Vanduo.register("preloader",y),window.VanduoPreloader=y})();(function(){"use strict";let y={instances:new Map,init:function(e){window.Vanduo.queryAll(e,"select.vd-custom-select-input, select[data-custom-select]").forEach(n=>{this.instances.has(n)||this.initSelect(n)})},initSelect:function(e){if(e.closest(".vd-custom-select-wrapper"))return;let t=[],n=document.createElement("div");n.className="custom-select-wrapper",e.parentNode.insertBefore(n,e),n.appendChild(e);let s=document.createElement("button");s.type="button",s.className="custom-select-button",s.setAttribute("aria-haspopup","listbox"),s.setAttribute("aria-expanded","false"),s.setAttribute("aria-labelledby",e.id||this.generateId(e));let r=document.createElement("div");if(r.className="custom-select-dropdown",r.setAttribute("role","listbox"),e.dataset.searchable==="true"){let l=document.createElement("div");l.className="custom-select-search";let h=document.createElement("input");h.type="text",h.className="input input-sm",h.placeholder="Search...",h.setAttribute("aria-label","Search options"),l.appendChild(h),r.appendChild(l);let d=f=>{this.filterOptions(r,f.target.value)},u=typeof debounce=="function"?debounce(d,150):d;h.addEventListener("input",u),t.push(()=>h.removeEventListener("input",u))}this.buildOptions(e,r,s),n.appendChild(s),n.appendChild(r),this.updateButtonText(e,s);let i=l=>{l.preventDefault(),l.stopPropagation(),this.toggleDropdown(s,r)};s.addEventListener("click",i),t.push(()=>s.removeEventListener("click",i));let a=l=>{!n.contains(l.target)&&r.classList.contains("is-open")&&this.closeDropdown(s,r)};document.addEventListener("click",a),t.push(()=>document.removeEventListener("click",a));let o=l=>{this.handleKeydown(l,e,s,r)};s.addEventListener("keydown",o),t.push(()=>s.removeEventListener("keydown",o));let c=()=>{this.updateButtonText(e,s),this.updateSelectedOptions(e,r)};e.addEventListener("change",c),t.push(()=>e.removeEventListener("change",c)),this.instances.set(e,{wrapper:n,button:s,dropdown:r,cleanup:t,typeaheadBuffer:"",typeaheadTimer:null})},buildOptions:function(e,t,n){let s=e.querySelectorAll("option"),r=document.createDocumentFragment();s.forEach((i,a)=>{if(i.parentElement.tagName==="OPTGROUP"){let c=i.parentElement;if(!t.querySelector(`[data-group="${c.label}"]`)){let l=document.createElement("div");l.className="custom-select-option-group",l.textContent=c.label,l.dataset.group=c.label,r.appendChild(l)}}if(i.value===""&&!i.textContent.trim())return;let o=document.createElement("div");o.className="custom-select-option",o.textContent=i.textContent,o.setAttribute("role","option"),o.setAttribute("data-value",i.value),o.setAttribute("data-index",a),i.selected&&(o.classList.add("is-selected"),o.setAttribute("aria-selected","true")),i.disabled&&(o.classList.add("is-disabled"),o.setAttribute("aria-disabled","true")),o.addEventListener("click",c=>{i.disabled||this.selectOption(e,i,o,n,t)}),r.appendChild(o)}),t.appendChild(r)},selectOption:function(e,t,n,s,r){e.multiple?(t.selected=!t.selected,n.classList.toggle("is-selected"),n.setAttribute("aria-selected",t.selected)):(e.value=t.value,e.dispatchEvent(new Event("change",{bubbles:!0})),this.closeDropdown(s,r)),this.updateButtonText(e,s)},updateButtonText:function(e,t){if(e.multiple){let n=Array.from(e.selectedOptions);n.length===0?t.textContent=e.dataset.placeholder||"Select options...":n.length===1?t.textContent=n[0].textContent:t.textContent=`${n.length} selected`}else{let n=e.options[e.selectedIndex];t.textContent=n?n.textContent:e.dataset.placeholder||"Select..."}},updateSelectedOptions:function(e,t){let n=t.querySelectorAll(".custom-select-option"),s=Array.from(e.selectedOptions).map(r=>r.value);n.forEach(r=>{let i=r.dataset.value;s.includes(i)?(r.classList.add("is-selected"),r.setAttribute("aria-selected","true")):(r.classList.remove("is-selected"),r.setAttribute("aria-selected","false"))})},toggleDropdown:function(e,t){t.classList.contains("is-open")?this.closeDropdown(e,t):this.openDropdown(e,t)},openDropdown:function(e,t){t.classList.add("is-open"),e.setAttribute("aria-expanded","true");let n=t.querySelector(".custom-select-option:not(.is-disabled)");n&&n.focus()},closeDropdown:function(e,t){t.classList.remove("is-open"),e.setAttribute("aria-expanded","false")},handleKeydown:function(e,t,n,s){let r=s.classList.contains("is-open"),i=Array.from(s.querySelectorAll(".custom-select-option:not(.is-disabled)")),a=i.findIndex(o=>o===document.activeElement);switch(e.key){case"Enter":case" ":if(e.preventDefault(),r&&a>=0){let o=i[a],c=t.options[parseInt(o.dataset.index)];this.selectOption(t,c,o,n,s)}else this.openDropdown(n,s);break;case"Escape":r&&(e.preventDefault(),this.closeDropdown(n,s),n.focus());break;case"ArrowDown":if(e.preventDefault(),!r)this.openDropdown(n,s);else{let o=a<i.length-1?a+1:0;i[o].focus()}break;case"ArrowUp":if(e.preventDefault(),r){let o=a>0?a-1:i.length-1;i[o].focus()}break;case"Home":r&&(e.preventDefault(),i[0].focus());break;case"End":r&&(e.preventDefault(),i[i.length-1].focus());break;default:if(r&&e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey){let o=this.instances.get(t);if(!o)break;clearTimeout(o.typeaheadTimer),o.typeaheadBuffer+=e.key.toLowerCase();let c=i.find(l=>l.textContent.trim().toLowerCase().startsWith(o.typeaheadBuffer));c&&c.focus(),o.typeaheadTimer=setTimeout(()=>{o.typeaheadBuffer=""},500)}break}},filterOptions:function(e,t){let n=e.querySelectorAll(".vd-custom-select-option"),s=t.toLowerCase();n.forEach(r=>{r.textContent.toLowerCase().includes(s)?r.style.display="block":r.style.display="none"})},generateId:function(e){if(e.id)return e.id;let t="select-"+Math.random().toString(36).substr(2,9);return e.id=t,t},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),t.wrapper&&t.wrapper.parentNode&&(t.wrapper.parentNode.insertBefore(e,t.wrapper),t.wrapper.parentNode.removeChild(t.wrapper)),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("select",y)})();(function(){"use strict";let y={sidenavs:new Map,breakpoint:992,restoreDelayMs:450,__vanduoScopedDestroyAll:!0,_globalCleanups:[],_resizeCleanup:null,isFixedVariant:function(e){return e.classList.contains("vd-sidenav-fixed")||e.classList.contains("sidenav-fixed")},isPushVariant:function(e){return e.classList.contains("vd-sidenav-push")||e.classList.contains("sidenav-push")},isRightVariant:function(e){return e.classList.contains("vd-sidenav-right")||e.classList.contains("sidenav-right")},getPortalState:function(e){return e._vdPortalState||(e._vdPortalState={originalParent:null,originalNextSibling:null,placeholder:null,restoreTimer:null,restoreHandler:null}),e._vdPortalState},cancelScheduledRestore:function(e){let t=this.getPortalState(e);t.restoreHandler&&(e.removeEventListener("transitionend",t.restoreHandler),t.restoreHandler=null),t.restoreTimer&&(window.clearTimeout(t.restoreTimer),t.restoreTimer=null)},portalToBody:function(e){if(!e)return;if(e.parentNode===document.body){this.cancelScheduledRestore(e);return}let t=this.getPortalState(e);this.cancelScheduledRestore(e),t.originalParent=e.parentNode,t.originalNextSibling=e.nextSibling,t.placeholder||(t.placeholder=document.createComment("vd-sidenav-placeholder")),t.originalParent.insertBefore(t.placeholder,e),document.body.appendChild(e),e.dataset.vdPortaled="true"},restoreFromPortal:function(e){if(!e)return;let t=this.getPortalState(e);if(this.cancelScheduledRestore(e),!t.placeholder){delete e.dataset.vdPortaled;return}t.placeholder.parentNode?(t.placeholder.parentNode.insertBefore(e,t.placeholder),t.placeholder.parentNode.removeChild(t.placeholder)):t.originalParent&&t.originalParent.isConnected&&(t.originalNextSibling&&t.originalNextSibling.parentNode===t.originalParent?t.originalParent.insertBefore(e,t.originalNextSibling):t.originalParent.appendChild(e)),t.originalParent=null,t.originalNextSibling=null,t.placeholder=null,delete e.dataset.vdPortaled},scheduleRestoreFromPortal:function(e){if(!e||e.parentNode!==document.body)return;let t=this.getPortalState(e);this.cancelScheduledRestore(e);let n=()=>{this.restoreFromPortal(e)},s=r=>{r.target!==e||r.propertyName!=="transform"||n()};t.restoreHandler=s,e.addEventListener("transitionend",s),t.restoreTimer=window.setTimeout(()=>{n()},this.restoreDelayMs)},init:function(e){if(window.Vanduo.queryAll(e,".vd-sidenav, .vd-offcanvas").forEach(s=>{this.sidenavs.has(s)||this.initSidenav(s)}),(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,"[data-sidenav-toggle]"):document.querySelectorAll("[data-sidenav-toggle]")).forEach(s=>{if(s.dataset.sidenavToggleInitialized)return;s.dataset.sidenavToggleInitialized="true";let r=i=>{i.preventDefault();let a=s.dataset.sidenavToggle,o=document.querySelector(a);o&&this.toggle(o)};s.addEventListener("click",r),s._sidenavToggleCleanup=()=>s.removeEventListener("click",r)}),this.handleResize(),!this._resizeCleanup){let s=()=>{this.handleResize()};window.addEventListener("resize",s),this._resizeCleanup=()=>window.removeEventListener("resize",s)}},initSidenav:function(e){let t=e.getAttribute("data-vd-position");if(t){let o=e.classList.contains("vd-offcanvas")?"vd-offcanvas":"vd-sidenav";e.classList.add(o+"-"+t)}let n=this.createOverlay(e),s=e.querySelector(".vd-sidenav-close, .vd-offcanvas-close"),r=[];if(e.setAttribute("role","navigation"),e.setAttribute("aria-hidden","true"),s){let o=()=>{this.close(e)};s.addEventListener("click",o),r.push(()=>s.removeEventListener("click",o))}let i=()=>{e.dataset.backdrop!=="static"&&this.close(e)};n.addEventListener("click",i),r.push(()=>n.removeEventListener("click",i));let a=o=>{o.key==="Escape"&&e.classList.contains("is-open")&&e.dataset.keyboard!=="false"&&this.close(e)};document.addEventListener("keydown",a),r.push(()=>document.removeEventListener("keydown",a)),this.sidenavs.set(e,{overlay:n,cleanup:r})},createOverlay:function(e){let t=e.querySelector(".vd-sidenav-overlay");return t||(t=document.createElement("div"),t.className="vd-sidenav-overlay",document.body.appendChild(t)),t},open:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(!t||!this.sidenavs.has(t))return;let{overlay:n}=this.sidenavs.get(t);this.portalToBody(t),this.isFixedVariant(t)||n.classList.add("is-visible"),t.classList.add("is-open"),t.setAttribute("aria-hidden","false"),document.body.classList.add("body-sidenav-open"),this.isPushVariant(t)&&this.handlePushVariant(t,!0),t.dispatchEvent(new CustomEvent("sidenav:open",{bubbles:!0}))},close:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(!t||!this.sidenavs.has(t))return;let{overlay:n}=this.sidenavs.get(t);n.classList.remove("is-visible"),t.classList.remove("is-open"),t.setAttribute("aria-hidden","true"),document.body.classList.remove("body-sidenav-open"),this.isPushVariant(t)&&this.handlePushVariant(t,!1),t.dispatchEvent(new CustomEvent("sidenav:close",{bubbles:!0})),this.scheduleRestoreFromPortal(t)},toggle:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&(t.classList.contains("is-open")?this.close(t):this.open(t))},handlePushVariant:function(e,t){let n=document.querySelector('main, .main-content, .content, [role="main"]')||document.body;t?window.innerWidth>=this.breakpoint&&(this.isRightVariant(e)?n.style.marginRight=e.offsetWidth+"px":n.style.marginLeft=e.offsetWidth+"px"):(n.style.marginLeft="",n.style.marginRight="")},handleResize:function(){this.sidenavs.forEach(({overlay:e},t)=>{window.innerWidth>=this.breakpoint?this.isFixedVariant(t)&&!t.classList.contains("is-open")&&(t.classList.add("is-open"),t.setAttribute("aria-hidden","false"),e.classList.remove("is-visible")):this.isFixedVariant(t)&&t.classList.contains("is-open")&&this.close(t)})},destroy:function(e){let t=this.sidenavs.get(e);t&&(e.classList.contains("is-open")&&(t.overlay.classList.remove("is-visible"),e.classList.remove("is-open"),e.setAttribute("aria-hidden","true"),document.body.classList.remove("body-sidenav-open")),this.restoreFromPortal(e),t.cleanup.forEach(n=>n()),t.overlay&&t.overlay.parentNode&&t.overlay.parentNode.removeChild(t.overlay),this.sidenavs.delete(e))},destroyAll:function(e){let t=window.Vanduo&&typeof window.Vanduo._normalizeRoot=="function"?window.Vanduo._normalizeRoot(e):e||document;this.sidenavs.forEach((s,r)=>{(t===document||t===r||typeof t.contains=="function"&&t.contains(r))&&this.destroy(r)}),(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(t,"[data-sidenav-toggle][data-sidenav-toggle-initialized]"):document.querySelectorAll("[data-sidenav-toggle][data-sidenav-toggle-initialized]")).forEach(s=>{s._sidenavToggleCleanup&&(s._sidenavToggleCleanup(),delete s._sidenavToggleCleanup),delete s.dataset.sidenavToggleInitialized}),t===document&&(this._resizeCleanup&&(this._resizeCleanup(),this._resizeCleanup=null),this._globalCleanups.forEach(s=>s()),this._globalCleanups=[])}};typeof window.Vanduo<"u"&&window.Vanduo.register("sidenav",y),window.VanduoSidenav=y})();(function(){"use strict";let y={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-tabs, [data-tabs]").forEach(n=>{this.instances.has(n)||this.initTabs(n)})},initTabs:function(e){let t=e.querySelector('.vd-tab-list, [role="tablist"]'),n=e.querySelectorAll(".vd-tab-link, [data-tab]"),s=e.querySelectorAll(".vd-tab-pane, [data-tab-pane]");if(!t||n.length===0)return;let r=[];t.setAttribute("role","tablist"),n.forEach((a,o)=>{let c=this.getTabId(a,o),l=this.findPane(e,c,s);a.setAttribute("role","tab"),a.setAttribute("aria-selected",a.classList.contains("is-active")?"true":"false"),a.setAttribute("tabindex",a.classList.contains("is-active")?"0":"-1"),a.id||(a.id=`tab-btn-${c}`),l&&(l.setAttribute("role","tabpanel"),l.setAttribute("aria-labelledby",a.id),l.id||(l.id=`tab-pane-${c}`),a.setAttribute("aria-controls",l.id));let h=u=>{u.preventDefault(),!a.classList.contains("disabled")&&!a.disabled&&this.activateTab(e,a,n,s)};a.addEventListener("click",h),r.push(()=>a.removeEventListener("click",h));let d=u=>{this.handleKeydown(u,e,a,n,s)};a.addEventListener("keydown",d),r.push(()=>a.removeEventListener("keydown",d))}),!e.querySelector(".vd-tab-link.is-active, [data-tab].is-active")&&n.length>0&&this.activateTab(e,n[0],n,s),this.instances.set(e,{cleanup:r})},getTabId:function(e,t){return e.dataset.tabTarget||e.dataset.tab||e.getAttribute("href")?.replace("#","")||(typeof t=="number"?`tab-${t}`:e.id)},findPane:function(e,t,n){let s=e.querySelector(`[data-tab-pane="${t}"]`);return s||(s=e.querySelector(`#${t}`)),s||e.querySelectorAll(".vd-tab-link, [data-tab]").forEach((i,a)=>{this.getTabId(i,a)===t&&n[a]&&(s=n[a])}),s},activateTab:function(e,t,n,s){let r=Array.from(n).indexOf(t),i=this.getTabId(t,r);n.forEach(c=>{c.classList.remove("is-active"),c.setAttribute("aria-selected","false"),c.setAttribute("tabindex","-1"),c.parentElement&&c.parentElement.classList.contains("tab-item")&&c.parentElement.classList.remove("is-active")}),s.forEach(c=>{c.classList.remove("is-active")}),t.classList.add("is-active"),t.setAttribute("aria-selected","true"),t.setAttribute("tabindex","0"),t.parentElement&&t.parentElement.classList.contains("tab-item")&&t.parentElement.classList.add("is-active");let a=this.findPane(e,i,s);a&&a.classList.add("is-active");let o=new CustomEvent("tab:change",{bubbles:!0,detail:{tab:t,pane:a,tabId:i}});e.dispatchEvent(o)},handleKeydown:function(e,t,n,s,r){let i=t.classList.contains("vd-tabs-vertical")||t.classList.contains("tabs-vertical"),a=Array.from(s).filter(l=>!l.classList.contains("disabled")&&!l.disabled),o=a.indexOf(n),c=o;switch(e.key){case"ArrowLeft":i||(e.preventDefault(),c=o>0?o-1:a.length-1);break;case"ArrowRight":i||(e.preventDefault(),c=o<a.length-1?o+1:0);break;case"ArrowUp":i&&(e.preventDefault(),c=o>0?o-1:a.length-1);break;case"ArrowDown":i&&(e.preventDefault(),c=o<a.length-1?o+1:0);break;case"Home":e.preventDefault(),c=0;break;case"End":e.preventDefault(),c=a.length-1;break;case"Enter":case" ":e.preventDefault(),this.activateTab(t,n,s,r);return;default:return}c!==o&&(a[c].focus(),this.activateTab(t,a[c],s,r))},show:function(e){let t;if(typeof e=="string"?t=document.querySelector(`[data-tab-target="${e}"], [data-tab="${e}"], [href="#${e}"]`):t=e,!t)return;let n=t.closest(".vd-tabs, [data-tabs]");if(!n)return;let s=n.querySelectorAll(".vd-tab-link, [data-tab]"),r=n.querySelectorAll(".vd-tab-pane, [data-tab-pane]");this.activateTab(n,t,s,r)},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("tabs",y)})();(function(){"use strict";let y={STORAGE_KEYS:{PRIMARY:"vanduo-primary-color",NEUTRAL:"vanduo-neutral-color",RADIUS:"vanduo-radius",FONT:"vanduo-font-preference",THEME:"vanduo-theme-preference"},DEFAULTS:{PRIMARY_LIGHT:"black",PRIMARY_DARK:"amber",NEUTRAL:"charcoal",RADIUS:"0.5",FONT:"ubuntu",THEME:"system"},PRIMARY_COLORS:{black:{name:"Black",color:"#000000"},red:{name:"Red",color:"#fa5252"},orange:{name:"Orange",color:"#fd7e14"},amber:{name:"Amber",color:"#f59f00"},yellow:{name:"Yellow",color:"#fcc419"},lime:{name:"Lime",color:"#82c91e"},green:{name:"Green",color:"#40c057"},emerald:{name:"Emerald",color:"#20c997"},teal:{name:"Teal",color:"#12b886"},cyan:{name:"Cyan",color:"#22b8cf"},sky:{name:"Sky",color:"#3bc9db"},blue:{name:"Blue",color:"#228be6"},indigo:{name:"Indigo",color:"#4c6ef5"},violet:{name:"Violet",color:"#7950f2"},purple:{name:"Purple",color:"#be4bdb"},fuchsia:{name:"Fuchsia",color:"#f06595"},pink:{name:"Pink",color:"#e64980"},rose:{name:"Rose",color:"#ff8787"}},NEUTRAL_COLORS:{charcoal:{name:"Charcoal",color:"#0d1117"},slate:{name:"Slate",color:"#64748b"},gray:{name:"Gray",color:"#6b7280"},zinc:{name:"Zinc",color:"#71717a"},neutral:{name:"Neutral",color:"#737373"},stone:{name:"Stone",color:"#78716c"}},RADIUS_OPTIONS:["0","0.125","0.25","0.375","0.5"],FONT_OPTIONS:{"jetbrains-mono":{name:"JetBrains Mono",family:"'JetBrains Mono', monospace"},system:{name:"System Default",family:null},ubuntu:{name:"Ubuntu",family:"'Ubuntu', sans-serif"},lato:{name:"Lato",family:"'Lato', sans-serif"},"open-sans":{name:"Open Sans",family:"'Open Sans', sans-serif"}},THEME_MODES:["system","dark","light"],state:{primary:null,neutral:null,radius:null,font:null,theme:null,isOpen:!1},isInitialized:!1,_cleanup:[],_ownsDynamicPanel:!1,elements:{customizer:null,trigger:null,activeTrigger:null,triggers:[],panel:null,overlay:null},isRoot:function(e){return!!e&&(e===document||e.nodeType===1||e.nodeType===9||e.nodeType===11)},normalizeRoot:function(e){return this.isRoot(e)?e:document},queryAll:function(e,t){let n=this.normalizeRoot(e);if(typeof window.VanduoLifecycle<"u"&&typeof window.VanduoLifecycle.queryAll=="function")return window.VanduoLifecycle.queryAll(n,t);let s=[];if(n instanceof Element&&typeof n.matches=="function"&&n.matches(t)&&s.push(n),typeof n.querySelectorAll=="function"){let r=n.querySelectorAll(t);for(let i=0;i<r.length;i++)s.push(r[i])}return s},queryOne:function(e,t){let n=this.queryAll(e,t);return n.length?n[0]:null},getTriggers:function(e){return this.queryAll(e,"[data-theme-customizer-trigger]")},pruneTriggers:function(){this.elements.triggers=this.elements.triggers.filter(function(e){return e&&e.isConnected}),this.elements.trigger&&!this.elements.trigger.isConnected&&(this.elements.trigger=null),this.elements.activeTrigger&&!this.elements.activeTrigger.isConnected&&(this.elements.activeTrigger=null)},init:function(e){let t=this.normalizeRoot(e);if(this.isInitialized){this.bindExistingElements(t),this.bindTriggerEvents(t),this.bindPanelEvents(),this.updateUI();return}this.isInitialized=!0,this._cleanup=[],this.loadPreferences(),this.applyAllPreferences(),this.bindExistingElements(t),this.bindEvents(t)},addListener:function(e,t,n,s){e&&(e.addEventListener(t,n,s),this._cleanup.push(()=>e.removeEventListener(t,n,s)))},getDefaultPrimary:function(e){return e==="system"?window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?this.DEFAULTS.PRIMARY_DARK:this.DEFAULTS.PRIMARY_LIGHT:e==="dark"?this.DEFAULTS.PRIMARY_DARK:this.DEFAULTS.PRIMARY_LIGHT},loadPreferences:function(){this.state.theme=this.getStorageValue(this.STORAGE_KEYS.THEME,this.DEFAULTS.THEME),this.state.primary=this.getStorageValue(this.STORAGE_KEYS.PRIMARY,this.getDefaultPrimary(this.state.theme)),this._normalizeDefaultPrimaryIfStaleWithStoredTheme(),this.state.neutral=this.getStorageValue(this.STORAGE_KEYS.NEUTRAL,this.DEFAULTS.NEUTRAL),this.state.radius=this.getStorageValue(this.STORAGE_KEYS.RADIUS,this.DEFAULTS.RADIUS),this.state.font=this.getStorageValue(this.STORAGE_KEYS.FONT,this.DEFAULTS.FONT)},savePreference:function(e,t){this.setStorageValue(e,t)},applyAllPreferences:function(){this.applyPrimary(this.state.primary),this.applyNeutral(this.state.neutral),this.applyRadius(this.state.radius),this.applyFont(this.state.font),this.applyTheme(this.state.theme)},applyPrimary:function(e){this.PRIMARY_COLORS[e]||(e=this.getDefaultPrimary(this.state.theme)),this.state.primary=e,document.documentElement.setAttribute("data-primary",e),this.savePreference(this.STORAGE_KEYS.PRIMARY,e),this.dispatchEvent("primary-change",{color:e})},applyNeutral:function(e){this.NEUTRAL_COLORS[e]||(e=this.DEFAULTS.NEUTRAL),this.state.neutral=e,document.documentElement.setAttribute("data-neutral",e),this.savePreference(this.STORAGE_KEYS.NEUTRAL,e),this.dispatchEvent("neutral-change",{neutral:e})},applyRadius:function(e){this.RADIUS_OPTIONS.includes(e)||(e=this.DEFAULTS.RADIUS),this.state.radius=e,document.documentElement.setAttribute("data-radius",e),document.documentElement.style.setProperty("--radius-scale",e),this.savePreference(this.STORAGE_KEYS.RADIUS,e),this.dispatchEvent("radius-change",{radius:e})},applyFont:function(e){this.FONT_OPTIONS[e]||(e=this.DEFAULTS.FONT),this.state.font=e,e==="system"?document.documentElement.removeAttribute("data-font"):document.documentElement.setAttribute("data-font",e),this.savePreference(this.STORAGE_KEYS.FONT,e),window.FontSwitcher&&window.FontSwitcher.setPreference&&(window.FontSwitcher.state.preference=e,window.FontSwitcher.applyFont()),this.dispatchEvent("font-change",{font:e})},applyTheme:function(e){if(this.THEME_MODES.includes(e)||(e=this.DEFAULTS.THEME),this._isApplying=!0,this.isUsingDefaultPrimary()){let t=this.getDefaultPrimary(e);this.state.primary!==t&&this.applyPrimary(t)}if(this.state.theme=e,e==="system"?document.documentElement.removeAttribute("data-theme"):document.documentElement.setAttribute("data-theme",e),this.savePreference(this.STORAGE_KEYS.THEME,e),window.Vanduo&&window.Vanduo.components.themeSwitcher){let t=window.Vanduo.components.themeSwitcher;t.state&&t.state.preference!==e&&(t.state.preference=e,typeof t.setStorageValue=="function"&&t.setStorageValue(t.STORAGE_KEY,e),typeof t.updateUI=="function"&&t.updateUI())}this._isApplying=!1,this.dispatchEvent("mode-change",{mode:e})},dispatchEvent:function(e,t){let n=new CustomEvent("theme:"+e,{bubbles:!0,detail:t});document.dispatchEvent(n);let s=new CustomEvent("theme:change",{bubbles:!0,detail:{type:e,value:t[Object.keys(t)[0]],state:{...this.state}}});document.dispatchEvent(s)},bindExistingElements:function(e){let t=this.normalizeRoot(e);this.pruneTriggers();let n=this.getTriggers(t);n.forEach(r=>{this.elements.triggers.includes(r)||this.elements.triggers.push(r)}),!this.elements.trigger&&this.elements.triggers.length&&(this.elements.trigger=this.elements.triggers[0]);let s=this.queryOne(t,".vd-theme-customizer")||(this.elements.customizer&&typeof this.elements.customizer.contains=="function"?this.elements.customizer:null)||document.querySelector(".vd-theme-customizer");s instanceof Element?(this.elements.customizer=s,this.elements.trigger=this.elements.customizer.querySelector(".vd-theme-customizer-trigger")||this.elements.trigger,this.elements.panel=this.elements.customizer.querySelector(".vd-theme-customizer-panel"),this.elements.overlay=this.elements.customizer.querySelector(".vd-theme-customizer-overlay")):n.length&&!this.elements.panel&&this.createDynamicPanel(),this.updateUI()},createDynamicPanel:function(){if(!this.elements.triggers.length||this.elements.panel&&this.elements.panel.isConnected)return;this.elements.trigger=this.elements.triggers[0];let e=document.createElement("div");e.className="vd-theme-customizer-overlay";let t=document.createElement("div");t.className="vd-theme-customizer-panel",t.innerHTML=this.getPanelHTML(),document.body.appendChild(e),document.body.appendChild(t),this.elements.panel=t,this.elements.overlay=e,this._ownsDynamicPanel=!0,this.elements.customizer={contains:n=>t.contains(n)||this.elements.triggers.some(s=>s.contains(n))},this.positionPanel(),this.bindPanelEvents(),this.addListener(window,"resize",()=>this.positionPanel())},positionPanel:function(){if(!this.elements.panel||!this.elements.trigger)return;let e=this.elements.activeTrigger||this.elements.trigger;if(window.innerWidth<768)this.elements.panel.style.top="",this.elements.panel.style.right="",this.elements.panel.style.left="",this.elements.panel.style.height="",this.elements.panel.style.maxHeight="";else{let n=e.getBoundingClientRect(),s=320,r=n.bottom+8,i=window.innerWidth,a=i-n.right;i-a-s<8&&(a=i-s-8),this.elements.panel.style.top=r+"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 - "+r+"px)"}},bindPanelEvents:function(){if(!this.elements.panel||this.elements.panel.getAttribute("data-customizer-initialized")==="true")return;this.elements.panel.setAttribute("data-customizer-initialized","true"),this.elements.panel.querySelectorAll("[data-color]").forEach(s=>{this.addListener(s,"click",()=>{this.applyPrimary(s.dataset.color),this.updateUI()})}),this.elements.panel.querySelectorAll("[data-neutral]").forEach(s=>{this.addListener(s,"click",()=>{this.applyNeutral(s.dataset.neutral),this.updateUI()})}),this.elements.panel.querySelectorAll("[data-radius]").forEach(s=>{this.addListener(s,"click",()=>{this.applyRadius(s.dataset.radius),this.updateUI()})});let e=this.elements.panel.querySelector("[data-customizer-font]");e&&this.addListener(e,"change",s=>{this.applyFont(s.target.value),this.updateUI()});let t=this.elements.panel.querySelector(".customizer-reset");t&&this.addListener(t,"click",()=>{this.reset()});let n=this.elements.panel.querySelector(".customizer-mobile-close");n&&this.addListener(n,"click",()=>{this.close()}),this.elements.overlay&&this.addListener(this.elements.overlay,"click",()=>{this.close()})},getPanelHTML:function(){let e=typeof escapeHtml=="function"?escapeHtml:function(a){let o=document.createElement("div");return o.textContent=String(a??""),o.innerHTML},t=function(a){let o=String(a??"").trim();return/^(#[0-9a-fA-F]{3,8}|rgb[a]?\([^)]{1,60}\)|hsl[a]?\([^)]{1,60}\)|var\(--[a-zA-Z0-9_-]{1,40}\))$/.test(o)?o:"#000000"},n="";for(let[a,o]of Object.entries(this.PRIMARY_COLORS))n+=`<button class="tc-color-swatch${a===this.state.primary?" is-active":""}" data-color="${e(a)}" style="--swatch-color: ${t(o.color)}" title="${e(o.name)}"></button>`;let s="";for(let[a,o]of Object.entries(this.NEUTRAL_COLORS))s+=`<button class="tc-neutral-swatch${a===this.state.neutral?" is-active":""}" data-neutral="${e(a)}" style="--swatch-color: ${t(o.color)}" title="${e(o.name)}"><span>${e(o.name)}</span></button>`;let r="";this.RADIUS_OPTIONS.forEach(a=>{r+=`<button class="tc-radius-btn${a===this.state.radius?" is-active":""}" data-radius="${e(a)}">${e(a)}</button>`});let i="";for(let[a,o]of Object.entries(this.FONT_OPTIONS))i+=`<option value="${e(a)}"${a===this.state.font?" selected":""}>${e(o.name)}</option>`;return`
5
+ `).length,r=document.createElement("div");r.className="vd-code-snippet-line-numbers",r.setAttribute("aria-hidden","true");for(let o=1;o<=s;o++){let a=document.createElement("span");a.textContent=o,r.appendChild(a)}let i=document.createElement("div");i.className="vd-code-snippet-code",i.appendChild(t.cloneNode(!0)),t.parentNode.removeChild(t),e.appendChild(r),e.appendChild(i)},expand:function(e){if(typeof e=="string"&&(e=document.querySelector(e)),!e)return;e.dataset.expanded="true";let t=e.querySelector(".vd-code-snippet-toggle"),n=e.querySelector(".vd-code-snippet-content");t&&t.setAttribute("aria-expanded","true"),n&&(n.dataset.visible="true")},collapse:function(e){if(typeof e=="string"&&(e=document.querySelector(e)),!e)return;e.dataset.expanded="false";let t=e.querySelector(".vd-code-snippet-toggle"),n=e.querySelector(".vd-code-snippet-content");t&&t.setAttribute("aria-expanded","false"),n&&(n.dataset.visible="false")},showLang:function(e,t){if(typeof e=="string"&&(e=document.querySelector(e)),!e)return;let n=e.querySelector(`.vd-code-snippet-tab[data-lang="${t}"]`),s=e.querySelectorAll(".vd-code-snippet-tab"),r=e.querySelectorAll(".vd-code-snippet-pane");n&&this.switchTab(e,n,s,r)},destroy:function(e){typeof e=="string"&&(e=document.querySelector(e)),e&&(e._codeSnippetCleanup&&(e._codeSnippetCleanup.forEach(t=>t()),delete e._codeSnippetCleanup),delete e.dataset.initialized)},destroyAll:function(e){let t=this.resolveRoot(e);this.queryWithin(t,'.vd-code-snippet[data-initialized="true"]').forEach(s=>{this.destroy(s)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("codeSnippet",v),window.CodeSnippet=v})();(function(){"use strict";let v={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-collapsible, .accordion").forEach(n=>{this.instances.has(n)||this.initCollapsible(n)})},initCollapsible:function(e){let t=e.classList.contains("accordion"),n=e.querySelectorAll(".vd-collapsible-item, .accordion-item"),s=[];n.forEach(r=>{let i=r.querySelector(".vd-collapsible-header, .accordion-header"),o=r.querySelector(".vd-collapsible-body, .accordion-body"),a=r.querySelector(".vd-collapsible-trigger, .accordion-trigger")||i;if(!i||!o)return;r.classList.contains("is-open")?this.openItem(r,o,!1):this.closeItem(r,o,!1);let c=l=>{l.preventDefault(),this.toggleItem(r,o,e,t)};a.addEventListener("click",c),s.push(()=>a.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(o=>{if(o!==e){let a=o.querySelector(".vd-collapsible-body, .accordion-body");this.closeItem(o,a)}}),this.openItem(e,t))},openItem:function(e,t,n=!0){n||(t.style.transition="none"),e.classList.add("is-open"),e.setAttribute("aria-expanded","true");let s=t.scrollHeight;t.style.maxHeight=`${s}px`,n||setTimeout(()=>{t.style.transition=""},0),e.dispatchEvent(new CustomEvent("collapsible:open",{bubbles:!0}))},closeItem:function(e,t,n=!0){n||(t.style.transition="none"),e.classList.remove("is-open"),e.setAttribute("aria-expanded","false"),t.style.maxHeight="0",n||setTimeout(()=>{t.style.transition=""},0),e.dispatchEvent(new CustomEvent("collapsible:close",{bubbles:!0}))},open:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t){let n=t.querySelector(".vd-collapsible-body, .accordion-body");n&&this.openItem(t,n)}},close:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t){let n=t.querySelector(".vd-collapsible-body, .accordion-body");n&&this.closeItem(t,n)}},toggle:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t){let n=t.querySelector(".vd-collapsible-body, .accordion-body"),s=t.closest(".vd-collapsible, .accordion"),r=s&&s.classList.contains("accordion");n&&this.toggleItem(t,n,s,r)}},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("collapsible",v),window.VanduoCollapsible=v})();(function(){"use strict";let v={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-dropdown").forEach(n=>{this.instances.has(n)||this.initDropdown(n)})},initDropdown:function(e){let t=e.querySelector(".vd-dropdown-toggle"),n=e.querySelector(".vd-dropdown-menu");if(!t||!n)return;let s=[];t.setAttribute("aria-haspopup","true"),t.setAttribute("aria-expanded","false"),n.setAttribute("role","menu"),n.setAttribute("aria-hidden","true");let r=c=>{c.preventDefault(),c.stopPropagation(),this.toggleDropdown(e,t,n)};t.addEventListener("click",r),s.push(()=>t.removeEventListener("click",r));let i=c=>{!e.contains(c.target)&&n.classList.contains("is-open")&&this.closeDropdown(e,t,n)};document.addEventListener("click",i),s.push(()=>document.removeEventListener("click",i));let o=c=>{this.handleKeydown(c,e,t,n)};t.addEventListener("keydown",o),s.push(()=>t.removeEventListener("keydown",o)),n.querySelectorAll(".vd-dropdown-item:not(.disabled):not(.is-disabled)").forEach(c=>{let l=d=>{d.preventDefault(),this.selectItem(c,e,t,n)};c.addEventListener("click",l),s.push(()=>c.removeEventListener("click",l));let f=d=>{(d.key==="Enter"||d.key===" ")&&(d.preventDefault(),this.selectItem(c,e,t,n))};c.addEventListener("keydown",f),s.push(()=>c.removeEventListener("keydown",f))}),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(i=>{if(i!==n){let o=i.closest(".vd-dropdown"),a=o.querySelector(".vd-dropdown-toggle");this.closeDropdown(o,a,i)}}),e.classList.add("is-open"),n.classList.add("is-open"),t.setAttribute("aria-expanded","true"),n.setAttribute("aria-hidden","false"),this.positionMenu(e,n);let r=n.querySelector(".vd-dropdown-item:not(.disabled):not(.is-disabled)");r&&setTimeout(()=>r.focus(),0)},closeDropdown:function(e,t,n){e.classList.remove("is-open"),n.classList.remove("is-open"),t.setAttribute("aria-expanded","false"),n.setAttribute("aria-hidden","true"),t.focus()},positionMenu:function(e,t){let n=e.getBoundingClientRect(),s=t.getBoundingClientRect(),r=window.innerWidth,i=window.innerHeight,o=8;if(t.classList.remove("vd-dropdown-menu-end","vd-dropdown-menu-start","vd-dropdown-menu-top"),e.classList.contains("vd-dropdown-dropup")){t.classList.add("vd-dropdown-menu-top");return}e.classList.contains("vd-dropdown-dropright")||e.classList.contains("vd-dropdown-dropleft")||(n.left+s.width>r-o?t.classList.add("vd-dropdown-menu-end"):t.classList.add("vd-dropdown-menu-start"),n.bottom+s.height>i-o&&n.top-s.height>o&&t.classList.add("vd-dropdown-menu-top"))},handleKeydown:function(e,t,n,s){let r=s.classList.contains("is-open"),i=Array.from(s.querySelectorAll(".vd-dropdown-item:not(.disabled):not(.is-disabled)")),o=i.findIndex(a=>a===document.activeElement);switch(e.key){case"Enter":case" ":case"ArrowDown":if(e.preventDefault(),!r)this.openDropdown(t,n,s);else if(e.key==="ArrowDown"){let a=o<i.length-1?o+1:0;i[a].focus()}break;case"ArrowUp":if(r){e.preventDefault();let a=o>0?o-1:i.length-1;i[a].focus()}break;case"Escape":r&&(e.preventDefault(),this.closeDropdown(t,n,s));break;case"Home":r&&(e.preventDefault(),i[0].focus());break;case"End":r&&(e.preventDefault(),i[i.length-1].focus());break;default:if(r&&e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey){let a=this.instances.get(t);if(!a)break;clearTimeout(a.typeaheadTimer),a.typeaheadBuffer+=e.key.toLowerCase();let c=i.find(l=>l.textContent.trim().toLowerCase().startsWith(a.typeaheadBuffer));c&&c.focus(),a.typeaheadTimer=setTimeout(()=>{a.typeaheadBuffer=""},500)}break}},selectItem:function(e,t,n,s){s.querySelectorAll(".vd-dropdown-item").forEach(r=>{r.classList.remove("active","is-active")}),e.classList.add("active","is-active"),(n.tagName==="BUTTON"||n.classList.contains("btn"))&&(n.textContent=e.textContent.trim()),this.closeDropdown(t,n,s),e.dispatchEvent(new CustomEvent("dropdown:select",{bubbles:!0,detail:{item:e,value:e.dataset.value||e.textContent}}))},open:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t){let n=t.querySelector(".vd-dropdown-toggle"),s=t.querySelector(".vd-dropdown-menu");n&&s&&this.openDropdown(t,n,s)}},close:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t){let n=t.querySelector(".vd-dropdown-toggle"),s=t.querySelector(".vd-dropdown-menu");n&&s&&this.closeDropdown(t,n,s)}},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("dropdown",v),window.VanduoDropdown=v})();(function(){"use strict";let v={STORAGE_KEY:"vanduo-font-preference",isInitialized:!1,fonts:{system:{name:"System Default",family:null},"jetbrains-mono":{name:"JetBrains Mono",family:"'JetBrains Mono', monospace"},ubuntu:{name:"Ubuntu",family:"'Ubuntu', sans-serif",category:"sans-serif",description:"Friendly, humanist sans-serif"},"open-sans":{name:"Open Sans",family:"'Open Sans', sans-serif",category:"sans-serif",description:"Neutral, highly readable"},lato:{name:"Lato",family:"'Lato', sans-serif",category:"sans-serif",description:"Friendly, rounded sans-serif"}},getToggles:function(e){return window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,'[data-toggle="font"]'):Array.from(document.querySelectorAll('[data-toggle="font"]'))},init:function(e){if(this.state={preference:this.getPreference()},this.fonts[this.state.preference]||(this.state.preference="ubuntu",this.setStorageValue(this.STORAGE_KEY,this.state.preference)),this.isInitialized){this.applyFont(),this.renderUI(e),this.updateUI(e);return}this.isInitialized=!0,this.applyFont(),this.renderUI(e)},getPreference:function(){return this.getStorageValue(this.STORAGE_KEY,"ubuntu")},setPreference:function(e){if(!this.fonts[e]){console.warn("Unknown font:",e);return}this.state.preference=e,this.setStorageValue(this.STORAGE_KEY,e),this.applyFont(),this.updateUI();let t=new CustomEvent("font:change",{bubbles:!0,detail:{font:e,fontData:this.fonts[e]}});document.dispatchEvent(t)},applyFont:function(){let e=this.state.preference;e==="system"?document.documentElement.removeAttribute("data-font"):document.documentElement.setAttribute("data-font",e)},renderUI:function(e){this.getToggles(e).forEach(n=>{if(n.getAttribute("data-font-initialized")==="true"){n.tagName==="SELECT"&&(n.value=this.state.preference);return}if(n.tagName==="SELECT"){n.value=this.state.preference;let s=r=>{this.setPreference(r.target.value)};n.addEventListener("change",s),n._fontToggleHandler=s}else{let s=()=>{let r=Object.keys(this.fonts),o=(r.indexOf(this.state.preference)+1)%r.length;this.setPreference(r[o])};n.addEventListener("click",s),n._fontToggleHandler=s}n.setAttribute("data-font-initialized","true")})},updateUI:function(e){this.getToggles(e).forEach(n=>{if(n.tagName==="SELECT")n.value=this.state.preference;else{let s=n.querySelector(".font-current-label");s&&(s.textContent=this.fonts[this.state.preference].name)}})},getCurrentFont:function(){return this.state.preference},getFontData:function(e){return this.fonts[e]||null},destroyAll:function(e){this.getToggles(e||document).filter(function(n){return n.getAttribute("data-font-initialized")==="true"}).forEach(n=>{if(n._fontToggleHandler){let s=n.tagName==="SELECT"?"change":"click";n.removeEventListener(s,n._fontToggleHandler),delete n._fontToggleHandler}n.removeAttribute("data-font-initialized")}),(!e||e===document)&&(this.isInitialized=!1)},getStorageValue:function(e,t){if(typeof window.safeStorageGet=="function")return window.safeStorageGet(e,t);try{let n=localStorage.getItem(e);return n!==null?n:t}catch{return t}},setStorageValue:function(e,t){if(typeof window.safeStorageSet=="function")return window.safeStorageSet(e,t);try{return localStorage.setItem(e,t),!0}catch{return!1}}};window.Vanduo&&window.Vanduo.register("fontSwitcher",v),window.FontSwitcher=v})();(function(){"use strict";let v=(function(){try{return CSS.supports("selector(:has(*))")}catch{return!1}})(),e={instances:new Map,__vanduoScopedDestroyAll:!0,init:function(t){window.Vanduo.queryAll(t,"[data-layout-mode]").forEach(function(s){this.instances.has(s)||this.initContainer(s)}.bind(this)),this.initToggleButtons(t)},initContainer:function(t){let n=t.getAttribute("data-layout-mode")||"standard",s=[];this.applyMode(t,n),t.setAttribute("role","region"),t.setAttribute("aria-label","Grid layout: "+n+" mode"),this.instances.set(t,{cleanup:s,mode:n})},initToggleButtons:function(t){(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(t,"[data-grid-toggle]"):document.querySelectorAll("[data-grid-toggle]")).forEach(function(s){if(s.getAttribute("data-grid-initialized")==="true")return;let r=function(i){i.preventDefault();let o=s.getAttribute("data-grid-toggle"),a;o?a=document.querySelector(o):a=s.closest("[data-layout-mode]"),a&&this.toggle(a)}.bind(this);s.addEventListener("click",r),s.setAttribute("data-grid-initialized","true"),s.setAttribute("aria-pressed","false"),s._gridCleanup=function(){s.removeEventListener("click",r),s.removeAttribute("data-grid-initialized"),s.removeAttribute("aria-pressed")}}.bind(this))},applyFibFallback:function(t){if(v)return;t.querySelectorAll(".vd-row, .row").forEach(function(s){let i=s.querySelectorAll(':scope > [class*="vd-col-"], :scope > [class*="col-"]').length;i===1?s.style.gridTemplateColumns="1fr":i===2?s.style.gridTemplateColumns="1fr 1.618fr":i===3?s.style.gridTemplateColumns="2fr 3fr 5fr":i===4?s.style.gridTemplateColumns="1fr 2fr 3fr 5fr":s.style.gridTemplateColumns="repeat("+i+", 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(o){let a=o.getAttribute("data-grid-toggle");if(a&&t.matches(a)){let c=n==="fibonacci";c?o.classList.add("is-active"):o.classList.remove("is-active"),o.setAttribute("aria-pressed",c?"true":"false")}});let r=this.instances.get(t);r&&(r.mode=n);let i;try{i=new CustomEvent("grid:modechange",{bubbles:!0,detail:{container:t,mode:n}})}catch{i=document.createEvent("CustomEvent"),i.initCustomEvent("grid:modechange",!0,!0,{container:t,mode:n})}t.dispatchEvent(i)},toggle:function(t){if(typeof t=="string"&&(t=document.querySelector(t)),!t)return;let s=(t.getAttribute("data-layout-mode")||"standard")==="fibonacci"?"standard":"fibonacci";this.applyMode(t,s)},setMode:function(t,n){typeof t=="string"&&(t=document.querySelector(t)),t&&(n!=="fibonacci"&&n!=="standard"||this.applyMode(t,n))},getMode:function(t){return typeof t=="string"&&(t=document.querySelector(t)),t?t.getAttribute("data-layout-mode")||"standard":null},destroy:function(t){let n=this.instances.get(t);n&&(n.cleanup.forEach(function(s){s()}),t.classList.remove("vd-grid-standard","vd-grid-fibonacci"),t.removeAttribute("aria-label"),this.removeFibFallback(t),this.instances.delete(t))},destroyAll:function(t){let n=window.Vanduo&&typeof window.Vanduo._normalizeRoot=="function"?window.Vanduo._normalizeRoot(t):t||document;this.instances.forEach(function(r,i){(n===document||n===i||typeof n.contains=="function"&&n.contains(i))&&this.destroy(i)}.bind(this)),(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(n,'[data-grid-toggle][data-grid-initialized="true"]'):document.querySelectorAll('[data-grid-initialized="true"]')).forEach(function(r){r._gridCleanup&&(r._gridCleanup(),delete r._gridCleanup)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("gridLayout",e),window.VanduoGridLayout=e})();(function(){"use strict";let v={backdrop:null,container:null,img:null,closeBtn:null,caption:null,currentTrigger:null,scrollThreshold:50,initialScrollY:0,isOpen:!1,_cleanupFunctions:[],getTriggers:function(e){return window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,"[data-image-box]"):Array.from(document.querySelectorAll("[data-image-box]"))},init:function(e){this.createBackdrop(),this.bindTriggers(e)},createBackdrop:function(){if(this.backdrop||document.querySelector(".vd-image-box-backdrop")){this.backdrop||(this.backdrop=document.querySelector(".vd-image-box-backdrop"),this.container=this.backdrop.querySelector(".vd-image-box-container"),this.img=this.backdrop.querySelector(".vd-image-box-img"),this.closeBtn=this.backdrop.querySelector(".vd-image-box-close"),this.caption=this.backdrop.querySelector(".vd-image-box-caption"),this.bindBackdropEvents());return}this.backdrop=document.createElement("div"),this.backdrop.className="vd-image-box-backdrop",this.backdrop.setAttribute("role","dialog"),this.backdrop.setAttribute("aria-modal","true"),this.backdrop.setAttribute("aria-label","Image viewer"),this.backdrop.setAttribute("tabindex","-1"),this.container=document.createElement("div"),this.container.className="vd-image-box-container",this.img=document.createElement("img"),this.img.className="vd-image-box-img",this.img.alt="",this.closeBtn=document.createElement("button"),this.closeBtn.className="vd-image-box-close",this.closeBtn.setAttribute("aria-label","Close image viewer"),this.closeBtn.innerHTML="&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(o){(o.target===e.backdrop||o.target===e.container)&&e.close()};this.backdrop.addEventListener("click",t),this._cleanupFunctions.push(()=>this.backdrop.removeEventListener("click",t));let n=function(){e.close()};this.img.addEventListener("click",n),this._cleanupFunctions.push(()=>this.img.removeEventListener("click",n));let s=function(){e.close()};this.closeBtn.addEventListener("click",s),this._cleanupFunctions.push(()=>this.closeBtn.removeEventListener("click",s));let r=function(o){o.key==="Escape"&&e.isOpen&&e.close()};document.addEventListener("keydown",r),this._cleanupFunctions.push(()=>document.removeEventListener("keydown",r));let i=function(){if(!e.isOpen)return;let o=window.scrollY;Math.abs(o-e.initialScrollY)>e.scrollThreshold&&e.close()};window.addEventListener("scroll",i,{passive:!0}),this._cleanupFunctions.push(()=>window.removeEventListener("scroll",i))},bindTriggers:function(e){let t=this;this.getTriggers(e).forEach(function(s){if(s.dataset.imageBoxInitialized)return;if(s.dataset.imageBoxInitialized="true",s.classList.add("vd-image-box-trigger"),s.tagName==="IMG"){s.complete&&s.naturalWidth===0&&s.classList.add("is-broken");let o=function(){s.classList.add("is-broken")};s.addEventListener("error",o);let a=function(){s.classList.remove("is-broken")};s.addEventListener("load",a),s._imageBoxErrorHandler=o,s._imageBoxLoadHandler=a}let r=function(o){o.preventDefault(),t.open(s)};if(s.addEventListener("click",r),s._imageBoxCleanup=()=>s.removeEventListener("click",r),s.tagName!=="BUTTON"&&s.tagName!=="A"){s.setAttribute("role","button"),s.setAttribute("tabindex","0"),s.setAttribute("aria-label","View enlarged image");let o=function(c){(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),t.open(s))};s.addEventListener("keydown",o);let a=s._imageBoxCleanup;s._imageBoxCleanup=()=>{a(),s.removeEventListener("keydown",o)}}let i=s._imageBoxCleanup;s._imageBoxCleanup=()=>{i(),s._imageBoxErrorHandler&&(s.removeEventListener("error",s._imageBoxErrorHandler),delete s._imageBoxErrorHandler),s._imageBoxLoadHandler&&(s.removeEventListener("load",s._imageBoxLoadHandler),delete s._imageBoxLoadHandler)}})},open:function(e){if(this.isOpen)return;this.currentTrigger=e,this.isOpen=!0,this.initialScrollY=window.scrollY;let t=e.dataset.imageBoxFullSrc||e.dataset.imageBoxSrc||e.src||e.href;if(!t){console.warn("[Vanduo ImageBox] No image source found for trigger:",e);return}let n=e.dataset.imageBoxCaption||e.alt||"";this.img.src=t,this.img.alt=e.alt||"",n?(this.caption.textContent=n,this.caption.style.display="block"):this.caption.style.display="none";let s=window.innerWidth-document.documentElement.clientWidth;document.body.style.setProperty("--vd-scrollbar-width",`${s}px`),document.body.classList.add("body-image-box-open"),this.backdrop.classList.add("is-visible"),this.backdrop.focus(),e.dispatchEvent(new CustomEvent("imageBox:open",{bubbles:!0,detail:{src:t}})),this.img.complete||(this.img.style.opacity="0",this._imgLoadHandler=()=>{this.img.style.opacity=""},this.img.addEventListener("load",this._imgLoadHandler,{once:!0}))},close:function(){this.isOpen&&(this.isOpen=!1,this.backdrop.classList.remove("is-visible"),document.body.classList.remove("body-image-box-open"),document.body.style.removeProperty("--vd-scrollbar-width"),this.currentTrigger&&(this.currentTrigger.focus(),this.currentTrigger.dispatchEvent(new CustomEvent("imageBox:close",{bubbles:!0})),this.currentTrigger=null),setTimeout(()=>{this.isOpen||(this._imgLoadHandler&&(this.img.removeEventListener("load",this._imgLoadHandler),this._imgLoadHandler=null),this.img.src="",this.img.alt="")},300))},reinit:function(e){this.bindTriggers(e)},destroy:function(e){if(e&&e!==document){this.getTriggers(e).forEach(s=>{s.classList.remove("vd-image-box-trigger"),s._imageBoxCleanup&&(s._imageBoxCleanup(),delete s._imageBoxCleanup),delete s.dataset.imageBoxInitialized});return}this.isOpen&&this.close(),this.backdrop&&this.backdrop.parentNode&&this.backdrop.parentNode.removeChild(this.backdrop),this._cleanupFunctions.forEach(n=>n()),this._cleanupFunctions=[],(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,"[data-image-box-initialized]"):document.querySelectorAll("[data-image-box-initialized]")).forEach(n=>{n.classList.remove("vd-image-box-trigger"),n._imageBoxCleanup&&(n._imageBoxCleanup(),delete n._imageBoxCleanup),delete n.dataset.imageBoxInitialized}),this.backdrop=null,this.container=null,this.img=null,this.closeBtn=null,this.caption=null,this.currentTrigger=null,this.isOpen=!1},destroyAll:function(e){this.destroy(e)}};typeof window.Vanduo<"u"&&window.Vanduo.register("imageBox",v),window.VanduoImageBox=v})();(function(){"use strict";let v={modals:new Map,openModals:[],zIndexCounter:1050,__vanduoScopedDestroyAll:!0,_triggerCleanups:[],_sharedEscHandler:null,getPortalState:function(e){return e._vdPortalState||(e._vdPortalState={originalParent:null,originalNextSibling:null,placeholder:null}),e._vdPortalState},portalToBody:function(e){if(!e||e.parentNode===document.body)return;let t=this.getPortalState(e);t.originalParent=e.parentNode,t.originalNextSibling=e.nextSibling,t.placeholder||(t.placeholder=document.createComment("vd-modal-placeholder")),t.originalParent.insertBefore(t.placeholder,e),document.body.appendChild(e),e.dataset.vdPortaled="true"},restoreFromPortal:function(e){if(!e)return;let t=this.getPortalState(e);if(!t.placeholder){delete e.dataset.vdPortaled;return}t.placeholder.parentNode?(t.placeholder.parentNode.insertBefore(e,t.placeholder),t.placeholder.parentNode.removeChild(t.placeholder)):t.originalParent&&t.originalParent.isConnected&&(t.originalNextSibling&&t.originalNextSibling.parentNode===t.originalParent?t.originalParent.insertBefore(e,t.originalNextSibling):t.originalParent.appendChild(e)),t.originalParent=null,t.originalNextSibling=null,t.placeholder=null,delete e.dataset.vdPortaled},init:function(e){window.Vanduo.queryAll(e,".vd-modal").forEach(s=>{this.modals.has(s)||this.initModal(s)}),(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,"[data-modal]"):document.querySelectorAll("[data-modal]")).forEach(s=>{if(s.dataset.modalTriggerInitialized)return;s.dataset.modalTriggerInitialized="true";let r=i=>{i.preventDefault();let o=s.dataset.modal,a=document.querySelector(o);a&&this.open(a)};s.addEventListener("click",r),s._modalTriggerCleanup=()=>s.removeEventListener("click",r)})},initModal:function(e){let t=this.createBackdrop(e),n=e.querySelectorAll('.vd-modal-close, [data-dismiss="modal"]'),s=e.querySelector(".vd-modal-dialog");if(!s)return;let r=[];e.setAttribute("role","dialog"),e.setAttribute("aria-modal","true"),e.setAttribute("aria-hidden","true"),e.id||(e.id="modal-"+Math.random().toString(36).substr(2,9));let i=e.querySelector(".vd-modal-title");i&&!i.id&&(i.id=e.id+"-title",e.setAttribute("aria-labelledby",i.id)),n.forEach(a=>{let c=()=>{this.close(e)};a.addEventListener("click",c),r.push(()=>a.removeEventListener("click",c))});let o=a=>{a.target===t&&e.dataset.backdrop!=="static"&&this.close(e)};t.addEventListener("click",o),r.push(()=>t.removeEventListener("click",o)),this._sharedEscHandler||(this._sharedEscHandler=a=>{if(a.key==="Escape"&&this.openModals.length>0){let c=this.openModals[this.openModals.length-1];c.dataset.keyboard!=="false"&&this.close(c)}},document.addEventListener("keydown",this._sharedEscHandler)),this.modals.set(e,{backdrop:t,dialog:s,trapHandler:null,cleanup:r})},createBackdrop:function(e){let t=e.querySelector(".vd-modal-backdrop");return t||(t=document.createElement("div"),t.className="vd-modal-backdrop",document.body.appendChild(t)),t},open:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(!t){console.warn("[Vanduo Modals] Modal element not found:",e);return}if(!this.modals.has(t)){console.warn("[Vanduo Modals] Modal not initialized:",t);return}let n=this.modals.get(t),{backdrop:s,dialog:r}=n;if(this.portalToBody(t),this.zIndexCounter+=10,t.style.zIndex=this.zIndexCounter,s.style.zIndex=this.zIndexCounter-1,this.openModals.push(t),s.classList.add("is-visible"),t.classList.add("is-open"),t.setAttribute("aria-hidden","false"),this.openModals.length===1){document.body.classList.add("body-modal-open");let o=window.innerWidth-document.documentElement.clientWidth;o>0&&(document.body.style.paddingRight=`${o}px`)}let i=this.trapFocus(t);n.trapHandler=i,setTimeout(()=>{let o=this.getFocusableElements(t)[0];o&&o.focus()},100),t.dispatchEvent(new CustomEvent("modal:open",{bubbles:!0}))},close:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(!t){console.warn("[Vanduo Modals] Modal element not found:",e);return}if(!this.modals.has(t)){console.warn("[Vanduo Modals] Modal not initialized:",t);return}let n=this.modals.get(t),{backdrop:s,trapHandler:r}=n;r&&(t.removeEventListener("keydown",r),n.trapHandler=null);let i=this.openModals.indexOf(t);if(i>-1&&this.openModals.splice(i,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 a=this.openModals[this.openModals.length-1];this.modals.get(a).backdrop.classList.add("is-visible")}let o=document.querySelector(`[data-modal="#${t.id}"]`);o&&o.focus(),t.dispatchEvent(new CustomEvent("modal:close",{bubbles:!0})),this.restoreFromPortal(t)},trapFocus:function(e){let t=this,n=function(s){if(s.key!=="Tab")return;let r=t.getFocusableElements(e),i=r[0],o=r[r.length-1];s.shiftKey?document.activeElement===i&&(s.preventDefault(),o.focus()):document.activeElement===o&&(s.preventDefault(),i.focus())};return e.addEventListener("keydown",n),n},getFocusableElements:function(e){return Array.from(e.querySelectorAll('a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])')).filter(n=>!n.hasAttribute("disabled")&&n.offsetWidth>0&&n.offsetHeight>0)},toggle:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&(t.classList.contains("is-open")?this.close(t):this.open(t))},destroy:function(e){let t=this.modals.get(e);if(t){if(e.classList.contains("is-open")){let n=this.openModals.indexOf(e);n>-1&&this.openModals.splice(n,1),t.backdrop.classList.remove("is-visible"),e.classList.remove("is-open"),e.setAttribute("aria-hidden","true"),this.openModals.length===0&&(document.body.classList.remove("body-modal-open"),document.body.style.paddingRight="",this.zIndexCounter=1050)}this.restoreFromPortal(e),t.cleanup&&t.cleanup.forEach(n=>n()),t.backdrop&&t.backdrop.parentNode&&t.backdrop.parentNode.removeChild(t.backdrop),this.modals.delete(e)}},destroyAll:function(e){let t=window.Vanduo&&typeof window.Vanduo._normalizeRoot=="function"?window.Vanduo._normalizeRoot(e):e||document;this.modals.forEach((s,r)=>{(t===document||t===r||typeof t.contains=="function"&&t.contains(r))&&this.destroy(r)}),(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(t,"[data-modal][data-modal-trigger-initialized]"):document.querySelectorAll("[data-modal][data-modal-trigger-initialized]")).forEach(s=>{s._modalTriggerCleanup&&(s._modalTriggerCleanup(),delete s._modalTriggerCleanup),delete s.dataset.modalTriggerInitialized}),t===document&&this._sharedEscHandler&&(document.removeEventListener("keydown",this._sharedEscHandler),this._sharedEscHandler=null)}};typeof window.Vanduo<"u"&&window.Vanduo.register("modals",v),window.VanduoModals=v})();(function(){"use strict";let v={instances:new Map,getBreakpoint:function(){let t=getComputedStyle(document.documentElement).getPropertyValue("--vd-breakpoint-lg").trim(),n=parseInt(t,10);return isNaN(n)?992:n},init:function(e){window.Vanduo.queryAll(e,".vd-navbar").forEach(n=>{this.instances.has(n)||this.initNavbar(n)})},initScrollWatcher:function(e){let t=e.classList.contains("vd-navbar-glass"),n=e.classList.contains("vd-navbar-transparent");if(!t&&!n)return null;let s=()=>{let i=parseInt(e.dataset.scrollThreshold,10);return isNaN(i)?e.offsetHeight||60:i},r=()=>{let i=window.scrollY>s();e.classList.toggle("vd-navbar-scrolled",i)};return r(),window.addEventListener("scroll",r,{passive:!0}),()=>window.removeEventListener("scroll",r)},initNavbar:function(e){let t=e.querySelector(".vd-navbar-toggle, .vd-navbar-burger"),n=e.querySelector(".vd-navbar-menu"),s=e.querySelector(".vd-navbar-overlay")||this.createOverlay(e),r=[],i=this.initScrollWatcher(e);if(i&&r.push(i),!t||!n){r.length&&this.instances.set(e,{toggle:null,menu:null,overlay:null,cleanup:r});return}let o=h=>{h.preventDefault(),h.stopPropagation(),this.toggleMenu(e,t,n,s)};if(t.addEventListener("click",o),r.push(()=>t.removeEventListener("click",o)),s){let h=()=>{this.closeMenu(e,t,n,s)};s.addEventListener("click",h),r.push(()=>s.removeEventListener("click",h))}let a=h=>{h.key==="Escape"&&n.classList.contains("is-open")&&this.closeMenu(e,t,n,s)};document.addEventListener("keydown",a),r.push(()=>document.removeEventListener("keydown",a));let c,l=()=>{clearTimeout(c),c=setTimeout(()=>{let h=this.getBreakpoint();window.innerWidth>=h&&n.classList.contains("is-open")&&this.closeMenu(e,t,n,s)},250)};window.addEventListener("resize",l),r.push(()=>{clearTimeout(c),window.removeEventListener("resize",l)});let f=h=>{n.classList.contains("is-open")&&!e.contains(h.target)&&!n.contains(h.target)&&this.closeMenu(e,t,n,s)};document.addEventListener("click",f),r.push(()=>document.removeEventListener("click",f)),n.querySelectorAll(".vd-navbar-dropdown > .vd-nav-link, .vd-navbar-dropdown > .nav-link").forEach(h=>{let u=p=>{let E=this.getBreakpoint();if(window.innerWidth<E){p.preventDefault();let _=h.parentElement.querySelector(".vd-navbar-dropdown-menu");_&&_.classList.toggle("is-open")}};h.addEventListener("click",u),r.push(()=>h.removeEventListener("click",u))}),this.instances.set(e,{toggle:t,menu:n,overlay:s,cleanup:r})},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),t.overlay&&t.overlay.parentNode&&t.overlay.parentNode.removeChild(t.overlay),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})},toggleMenu:function(e,t,n,s){n.classList.contains("is-open")?this.closeMenu(e,t,n,s):this.openMenu(e,t,n,s)},openMenu:function(e,t,n,s){n.classList.add("is-open"),t.classList.add("is-active"),s&&s.classList.add("is-active"),document.body.classList.add("body-navbar-open"),t.setAttribute("aria-expanded","true"),n.setAttribute("aria-hidden","false")},closeMenu:function(e,t,n,s){n.classList.remove("is-open"),t.classList.remove("is-active"),s&&s.classList.remove("is-active"),document.body.classList.remove("body-navbar-open"),n.querySelectorAll(".vd-navbar-dropdown-menu.is-open").forEach(i=>{i.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",v),window.VanduoNavbar=v})();(function(){"use strict";let v={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-pagination[data-pagination]").forEach(n=>{this.instances.has(n)||this.initPagination(n)})},initPagination:function(e){let t=parseInt(e.dataset.totalPages)||1,n=parseInt(e.dataset.currentPage)||1,s=parseInt(e.dataset.maxVisible)||7;this.render(e,{totalPages:t,currentPage:n,maxVisible:s});let r=i=>{let o=i.target.closest(".vd-pagination-link");if(!o||o.closest(".vd-pagination-item.disabled")||o.closest(".vd-pagination-item.active"))return;i.preventDefault();let a=o.closest(".vd-pagination-item"),c=a.dataset.page;c?this.goToPage(e,parseInt(c)):a.classList.contains("pagination-prev")?this.prevPage(e):a.classList.contains("pagination-next")&&this.nextPage(e)};e.addEventListener("click",r),this.instances.set(e,{cleanup:[()=>e.removeEventListener("click",r)]})},render:function(e,t){let{totalPages:n,currentPage:s,maxVisible:r}=t;if(n<=1){e.innerHTML="";return}let i="";i+=`<li class="vd-pagination-item vd-pagination-prev pagination-item pagination-prev ${s===1?"disabled":""}">`,i+='<a class="vd-pagination-link pagination-link" href="#" aria-label="Previous">Previous</a>',i+="</li>";let o=this.calculatePages(s,n,r),a=0;o.forEach(c=>{if(c==="ellipsis")i+='<li class="vd-pagination-item pagination-item"><span class="vd-pagination-ellipsis pagination-ellipsis">\u2026</span></li>';else{c!==a+1&&a>0&&(i+='<li class="vd-pagination-item pagination-item"><span class="vd-pagination-ellipsis pagination-ellipsis">\u2026</span></li>');let l=Number(c);i+=`<li class="vd-pagination-item pagination-item ${l===s?"active":""}" data-page="${l}">`,i+=`<a class="vd-pagination-link pagination-link" href="#" aria-label="Page ${l}">${l}</a>`,i+="</li>",a=c}}),i+=`<li class="vd-pagination-item vd-pagination-next pagination-item pagination-next ${s===n?"disabled":""}">`,i+='<a class="vd-pagination-link pagination-link" href="#" aria-label="Next">Next</a>',i+="</li>",e.innerHTML=i,e.dataset.currentPage=s},calculatePages:function(e,t,n){let s=[],r=Math.floor(n/2);if(t<=n)for(let i=1;i<=t;i++)s.push(i);else{s.push(1);let i=Math.max(2,e-r),o=Math.min(t-1,e+r);e<=r+1&&(o=Math.min(t-1,n-1)),e>=t-r&&(i=Math.max(2,t-n+2)),i>2&&s.push("ellipsis");for(let a=i;a<=o;a++)s.push(a);o<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",v),window.VanduoPagination=v})();(function(){"use strict";let v={parallaxElements:new Map,ticking:!1,isMobile:window.innerWidth<768,reducedMotion:window.matchMedia("(prefers-reduced-motion: reduce)").matches,isInitialized:!1,_onScroll:null,_onResize:null,init:function(e){if(this.reducedMotion)return;if(window.Vanduo.queryAll(e,".vd-parallax").forEach(n=>{n.dataset.parallaxInitialized||this.initParallax(n)}),this.isInitialized){this.refresh();return}this.isInitialized=!0,this.handleScroll(),this._onScroll=()=>{this.handleScroll()},window.addEventListener("scroll",this._onScroll,{passive:!0}),this._onResize=()=>{this.isMobile=window.innerWidth<768,this.updateAll()},window.addEventListener("resize",this._onResize)},initParallax:function(e){e.dataset.parallaxInitialized="true";let t=e.classList.contains("parallax-disable-mobile");if(t&&this.isMobile)return;let n=e.querySelectorAll(".vd-parallax-layer, .vd-parallax-bg"),s=this.getSpeed(e),r=e.classList.contains("parallax-horizontal")?"horizontal":"vertical";this.parallaxElements.set(e,{layers:Array.from(n),speed:s,direction:r,disableMobile:t}),this.updateParallax(e)},getSpeed:function(e){return e.classList.contains("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,r=n.top,i=n.height,a=(Math.max(0,Math.min(1,(s-r)/(s+i)))-.5)*t.speed*100;t.layers.forEach((c,l)=>{let f=c.dataset.parallaxSpeed?parseFloat(c.dataset.parallaxSpeed):1,d=a*f;t.direction==="horizontal"?c.style.transform=`translateX(${d}px)`:c.style.transform=`translateY(${d}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",v),window.VanduoParallax=v})();(function(){"use strict";let v={getProgressBars:function(e){return window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,".vd-progress-bar[data-progress], .progress-bar[data-progress]"):Array.from(document.querySelectorAll(".vd-progress-bar[data-progress], .progress-bar[data-progress]"))},init:function(e){this.getProgressBars(e).forEach(n=>{n.dataset.progressInitialized||this.initProgressBar(n)})},initProgressBar:function(e){e.dataset.progressInitialized="true";let t=parseInt(e.dataset.progress)||0;this.setProgress(e,t,!1)},setProgress:function(e,t,n=!0){let s=typeof e=="string"?document.querySelector(e):e;if(!s)return;t=Math.max(0,Math.min(100,t)),n?s.style.transition="width var(--vd-transition-duration-slow) var(--vd-transition-ease)":(s.style.transition="none",setTimeout(()=>{s.style.transition=""},0)),s.style.width=t+"%",s.setAttribute("aria-valuenow",t),s.setAttribute("aria-valuemin",0),s.setAttribute("aria-valuemax",100);let r=s.querySelector(".vd-progress-text, .progress-text");r&&(r.textContent=t+"%"),s.dispatchEvent(new CustomEvent("progress:update",{bubbles:!0,detail:{value:t,max:100}})),t>=100&&s.dispatchEvent(new CustomEvent("progress:complete",{bubbles:!0,detail:{value:t,max:100}}))},animateProgress:function(e,t,n=1e3){let s=typeof e=="string"?document.querySelector(e):e;if(!s)return;let r=parseInt(s.style.width)||0,i=t-r,o=performance.now(),a=c=>{let l=c-o,f=Math.min(l/n,1),d=1-Math.pow(1-f,3),h=r+i*d;this.setProgress(s,h,!1),f<1&&requestAnimationFrame(a)};requestAnimationFrame(a)},show:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&(t.style.display="inline-block",t.setAttribute("aria-hidden","false"))},hide:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&(t.style.display="none",t.setAttribute("aria-hidden","true"))},toggle:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&(t.style.display==="none"||t.getAttribute("aria-hidden")==="true"?this.show(t):this.hide(t))},destroyAll:function(e){this.getProgressBars(e||document).filter(function(n){return n.dataset.progressInitialized==="true"}).forEach(n=>{delete n.dataset.progressInitialized})}};typeof window.Vanduo<"u"&&window.Vanduo.register("preloader",v),window.VanduoPreloader=v})();(function(){"use strict";let v={instances:new Map,init:function(e){window.Vanduo.queryAll(e,"select.vd-custom-select-input, select[data-custom-select]").forEach(n=>{this.instances.has(n)||this.initSelect(n)})},initSelect:function(e){if(e.closest(".vd-custom-select-wrapper"))return;let t=[],n=document.createElement("div");n.className="custom-select-wrapper",e.parentNode.insertBefore(n,e),n.appendChild(e);let s=document.createElement("button");s.type="button",s.className="custom-select-button",s.setAttribute("aria-haspopup","listbox"),s.setAttribute("aria-expanded","false"),s.setAttribute("aria-labelledby",e.id||this.generateId(e));let r=document.createElement("div");if(r.className="custom-select-dropdown",r.setAttribute("role","listbox"),e.dataset.searchable==="true"){let l=document.createElement("div");l.className="custom-select-search";let f=document.createElement("input");f.type="text",f.className="input input-sm",f.placeholder="Search...",f.setAttribute("aria-label","Search options"),l.appendChild(f),r.appendChild(l);let d=u=>{this.filterOptions(r,u.target.value)},h=typeof debounce=="function"?debounce(d,150):d;f.addEventListener("input",h),t.push(()=>f.removeEventListener("input",h))}this.buildOptions(e,r,s),n.appendChild(s),n.appendChild(r),this.updateButtonText(e,s);let i=l=>{l.preventDefault(),l.stopPropagation(),this.toggleDropdown(s,r)};s.addEventListener("click",i),t.push(()=>s.removeEventListener("click",i));let o=l=>{!n.contains(l.target)&&r.classList.contains("is-open")&&this.closeDropdown(s,r)};document.addEventListener("click",o),t.push(()=>document.removeEventListener("click",o));let a=l=>{this.handleKeydown(l,e,s,r)};s.addEventListener("keydown",a),t.push(()=>s.removeEventListener("keydown",a));let c=()=>{this.updateButtonText(e,s),this.updateSelectedOptions(e,r)};e.addEventListener("change",c),t.push(()=>e.removeEventListener("change",c)),this.instances.set(e,{wrapper:n,button:s,dropdown:r,cleanup:t,typeaheadBuffer:"",typeaheadTimer:null})},buildOptions:function(e,t,n){let s=e.querySelectorAll("option"),r=document.createDocumentFragment();s.forEach((i,o)=>{if(i.parentElement.tagName==="OPTGROUP"){let c=i.parentElement;if(!t.querySelector(`[data-group="${c.label}"]`)){let l=document.createElement("div");l.className="custom-select-option-group",l.textContent=c.label,l.dataset.group=c.label,r.appendChild(l)}}if(i.value===""&&!i.textContent.trim())return;let a=document.createElement("div");a.className="custom-select-option",a.textContent=i.textContent,a.setAttribute("role","option"),a.setAttribute("data-value",i.value),a.setAttribute("data-index",o),i.selected&&(a.classList.add("is-selected"),a.setAttribute("aria-selected","true")),i.disabled&&(a.classList.add("is-disabled"),a.setAttribute("aria-disabled","true")),a.addEventListener("click",c=>{i.disabled||this.selectOption(e,i,a,n,t)}),r.appendChild(a)}),t.appendChild(r)},selectOption:function(e,t,n,s,r){e.multiple?(t.selected=!t.selected,n.classList.toggle("is-selected"),n.setAttribute("aria-selected",t.selected)):(e.value=t.value,e.dispatchEvent(new Event("change",{bubbles:!0})),this.closeDropdown(s,r)),this.updateButtonText(e,s)},updateButtonText:function(e,t){if(e.multiple){let n=Array.from(e.selectedOptions);n.length===0?t.textContent=e.dataset.placeholder||"Select options...":n.length===1?t.textContent=n[0].textContent:t.textContent=`${n.length} selected`}else{let n=e.options[e.selectedIndex];t.textContent=n?n.textContent:e.dataset.placeholder||"Select..."}},updateSelectedOptions:function(e,t){let n=t.querySelectorAll(".custom-select-option"),s=Array.from(e.selectedOptions).map(r=>r.value);n.forEach(r=>{let i=r.dataset.value;s.includes(i)?(r.classList.add("is-selected"),r.setAttribute("aria-selected","true")):(r.classList.remove("is-selected"),r.setAttribute("aria-selected","false"))})},toggleDropdown:function(e,t){t.classList.contains("is-open")?this.closeDropdown(e,t):this.openDropdown(e,t)},openDropdown:function(e,t){t.classList.add("is-open"),e.setAttribute("aria-expanded","true");let n=t.querySelector(".custom-select-option:not(.is-disabled)");n&&n.focus()},closeDropdown:function(e,t){t.classList.remove("is-open"),e.setAttribute("aria-expanded","false")},handleKeydown:function(e,t,n,s){let r=s.classList.contains("is-open"),i=Array.from(s.querySelectorAll(".custom-select-option:not(.is-disabled)")),o=i.findIndex(a=>a===document.activeElement);switch(e.key){case"Enter":case" ":if(e.preventDefault(),r&&o>=0){let a=i[o],c=t.options[parseInt(a.dataset.index)];this.selectOption(t,c,a,n,s)}else this.openDropdown(n,s);break;case"Escape":r&&(e.preventDefault(),this.closeDropdown(n,s),n.focus());break;case"ArrowDown":if(e.preventDefault(),!r)this.openDropdown(n,s);else{let a=o<i.length-1?o+1:0;i[a].focus()}break;case"ArrowUp":if(e.preventDefault(),r){let a=o>0?o-1:i.length-1;i[a].focus()}break;case"Home":r&&(e.preventDefault(),i[0].focus());break;case"End":r&&(e.preventDefault(),i[i.length-1].focus());break;default:if(r&&e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey){let a=this.instances.get(t);if(!a)break;clearTimeout(a.typeaheadTimer),a.typeaheadBuffer+=e.key.toLowerCase();let c=i.find(l=>l.textContent.trim().toLowerCase().startsWith(a.typeaheadBuffer));c&&c.focus(),a.typeaheadTimer=setTimeout(()=>{a.typeaheadBuffer=""},500)}break}},filterOptions:function(e,t){let n=e.querySelectorAll(".vd-custom-select-option"),s=t.toLowerCase();n.forEach(r=>{r.textContent.toLowerCase().includes(s)?r.style.display="block":r.style.display="none"})},generateId:function(e){if(e.id)return e.id;let t="select-"+Math.random().toString(36).substr(2,9);return e.id=t,t},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),t.wrapper&&t.wrapper.parentNode&&(t.wrapper.parentNode.insertBefore(e,t.wrapper),t.wrapper.parentNode.removeChild(t.wrapper)),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("select",v)})();(function(){"use strict";let v={sidenavs:new Map,breakpoint:992,restoreDelayMs:450,__vanduoScopedDestroyAll:!0,_globalCleanups:[],_resizeCleanup:null,isFixedVariant:function(e){return e.classList.contains("vd-sidenav-fixed")||e.classList.contains("sidenav-fixed")},isPushVariant:function(e){return e.classList.contains("vd-sidenav-push")||e.classList.contains("sidenav-push")},isRightVariant:function(e){return e.classList.contains("vd-sidenav-right")||e.classList.contains("sidenav-right")},getPortalState:function(e){return e._vdPortalState||(e._vdPortalState={originalParent:null,originalNextSibling:null,placeholder:null,restoreTimer:null,restoreHandler:null}),e._vdPortalState},cancelScheduledRestore:function(e){let t=this.getPortalState(e);t.restoreHandler&&(e.removeEventListener("transitionend",t.restoreHandler),t.restoreHandler=null),t.restoreTimer&&(window.clearTimeout(t.restoreTimer),t.restoreTimer=null)},portalToBody:function(e){if(!e)return;if(e.parentNode===document.body){this.cancelScheduledRestore(e);return}let t=this.getPortalState(e);this.cancelScheduledRestore(e),t.originalParent=e.parentNode,t.originalNextSibling=e.nextSibling,t.placeholder||(t.placeholder=document.createComment("vd-sidenav-placeholder")),t.originalParent.insertBefore(t.placeholder,e),document.body.appendChild(e),e.dataset.vdPortaled="true"},restoreFromPortal:function(e){if(!e)return;let t=this.getPortalState(e);if(this.cancelScheduledRestore(e),!t.placeholder){delete e.dataset.vdPortaled;return}t.placeholder.parentNode?(t.placeholder.parentNode.insertBefore(e,t.placeholder),t.placeholder.parentNode.removeChild(t.placeholder)):t.originalParent&&t.originalParent.isConnected&&(t.originalNextSibling&&t.originalNextSibling.parentNode===t.originalParent?t.originalParent.insertBefore(e,t.originalNextSibling):t.originalParent.appendChild(e)),t.originalParent=null,t.originalNextSibling=null,t.placeholder=null,delete e.dataset.vdPortaled},scheduleRestoreFromPortal:function(e){if(!e||e.parentNode!==document.body)return;let t=this.getPortalState(e);this.cancelScheduledRestore(e);let n=()=>{this.restoreFromPortal(e)},s=r=>{r.target!==e||r.propertyName!=="transform"||n()};t.restoreHandler=s,e.addEventListener("transitionend",s),t.restoreTimer=window.setTimeout(()=>{n()},this.restoreDelayMs)},init:function(e){if(window.Vanduo.queryAll(e,".vd-sidenav, .vd-offcanvas").forEach(s=>{this.sidenavs.has(s)||this.initSidenav(s)}),(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,"[data-sidenav-toggle]"):document.querySelectorAll("[data-sidenav-toggle]")).forEach(s=>{if(s.dataset.sidenavToggleInitialized)return;s.dataset.sidenavToggleInitialized="true";let r=i=>{i.preventDefault();let o=s.dataset.sidenavToggle,a=document.querySelector(o);a&&this.toggle(a)};s.addEventListener("click",r),s._sidenavToggleCleanup=()=>s.removeEventListener("click",r)}),this.handleResize(),!this._resizeCleanup){let s=()=>{this.handleResize()};window.addEventListener("resize",s),this._resizeCleanup=()=>window.removeEventListener("resize",s)}},initSidenav:function(e){let t=e.getAttribute("data-vd-position");if(t){let a=e.classList.contains("vd-offcanvas")?"vd-offcanvas":"vd-sidenav";e.classList.add(a+"-"+t)}let n=this.createOverlay(e),s=e.querySelector(".vd-sidenav-close, .vd-offcanvas-close"),r=[];if(e.setAttribute("role","navigation"),e.setAttribute("aria-hidden","true"),s){let a=()=>{this.close(e)};s.addEventListener("click",a),r.push(()=>s.removeEventListener("click",a))}let i=()=>{e.dataset.backdrop!=="static"&&this.close(e)};n.addEventListener("click",i),r.push(()=>n.removeEventListener("click",i));let o=a=>{a.key==="Escape"&&e.classList.contains("is-open")&&e.dataset.keyboard!=="false"&&this.close(e)};document.addEventListener("keydown",o),r.push(()=>document.removeEventListener("keydown",o)),this.sidenavs.set(e,{overlay:n,cleanup:r})},createOverlay:function(e){let t=e.querySelector(".vd-sidenav-overlay");return t||(t=document.createElement("div"),t.className="vd-sidenav-overlay",document.body.appendChild(t)),t},open:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(!t||!this.sidenavs.has(t))return;let{overlay:n}=this.sidenavs.get(t);this.portalToBody(t),this.isFixedVariant(t)||n.classList.add("is-visible"),t.classList.add("is-open"),t.setAttribute("aria-hidden","false"),document.body.classList.add("body-sidenav-open"),this.isPushVariant(t)&&this.handlePushVariant(t,!0),t.dispatchEvent(new CustomEvent("sidenav:open",{bubbles:!0}))},close:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(!t||!this.sidenavs.has(t))return;let{overlay:n}=this.sidenavs.get(t);n.classList.remove("is-visible"),t.classList.remove("is-open"),t.setAttribute("aria-hidden","true"),document.body.classList.remove("body-sidenav-open"),this.isPushVariant(t)&&this.handlePushVariant(t,!1),t.dispatchEvent(new CustomEvent("sidenav:close",{bubbles:!0})),this.scheduleRestoreFromPortal(t)},toggle:function(e){let t=typeof e=="string"?document.querySelector(e):e;t&&(t.classList.contains("is-open")?this.close(t):this.open(t))},handlePushVariant:function(e,t){let n=document.querySelector('main, .main-content, .content, [role="main"]')||document.body;t?window.innerWidth>=this.breakpoint&&(this.isRightVariant(e)?n.style.marginRight=e.offsetWidth+"px":n.style.marginLeft=e.offsetWidth+"px"):(n.style.marginLeft="",n.style.marginRight="")},handleResize:function(){this.sidenavs.forEach(({overlay:e},t)=>{window.innerWidth>=this.breakpoint?this.isFixedVariant(t)&&!t.classList.contains("is-open")&&(t.classList.add("is-open"),t.setAttribute("aria-hidden","false"),e.classList.remove("is-visible")):this.isFixedVariant(t)&&t.classList.contains("is-open")&&this.close(t)})},destroy:function(e){let t=this.sidenavs.get(e);t&&(e.classList.contains("is-open")&&(t.overlay.classList.remove("is-visible"),e.classList.remove("is-open"),e.setAttribute("aria-hidden","true"),document.body.classList.remove("body-sidenav-open")),this.restoreFromPortal(e),t.cleanup.forEach(n=>n()),t.overlay&&t.overlay.parentNode&&t.overlay.parentNode.removeChild(t.overlay),this.sidenavs.delete(e))},destroyAll:function(e){let t=window.Vanduo&&typeof window.Vanduo._normalizeRoot=="function"?window.Vanduo._normalizeRoot(e):e||document;this.sidenavs.forEach((s,r)=>{(t===document||t===r||typeof t.contains=="function"&&t.contains(r))&&this.destroy(r)}),(window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(t,"[data-sidenav-toggle][data-sidenav-toggle-initialized]"):document.querySelectorAll("[data-sidenav-toggle][data-sidenav-toggle-initialized]")).forEach(s=>{s._sidenavToggleCleanup&&(s._sidenavToggleCleanup(),delete s._sidenavToggleCleanup),delete s.dataset.sidenavToggleInitialized}),t===document&&(this._resizeCleanup&&(this._resizeCleanup(),this._resizeCleanup=null),this._globalCleanups.forEach(s=>s()),this._globalCleanups=[])}};typeof window.Vanduo<"u"&&window.Vanduo.register("sidenav",v),window.VanduoSidenav=v})();(function(){"use strict";let v={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-tabs, [data-tabs]").forEach(n=>{this.instances.has(n)||this.initTabs(n)})},initTabs:function(e){let t=e.querySelector('.vd-tab-list, [role="tablist"]'),n=e.querySelectorAll(".vd-tab-link, [data-tab]"),s=e.querySelectorAll(".vd-tab-pane, [data-tab-pane]");if(!t||n.length===0)return;let r=[];t.setAttribute("role","tablist"),n.forEach((o,a)=>{let c=this.getTabId(o,a),l=this.findPane(e,c,s);o.setAttribute("role","tab"),o.setAttribute("aria-selected",o.classList.contains("is-active")?"true":"false"),o.setAttribute("tabindex",o.classList.contains("is-active")?"0":"-1"),o.id||(o.id=`tab-btn-${c}`),l&&(l.setAttribute("role","tabpanel"),l.setAttribute("aria-labelledby",o.id),l.id||(l.id=`tab-pane-${c}`),o.setAttribute("aria-controls",l.id));let f=h=>{h.preventDefault(),!o.classList.contains("disabled")&&!o.disabled&&this.activateTab(e,o,n,s)};o.addEventListener("click",f),r.push(()=>o.removeEventListener("click",f));let d=h=>{this.handleKeydown(h,e,o,n,s)};o.addEventListener("keydown",d),r.push(()=>o.removeEventListener("keydown",d))}),!e.querySelector(".vd-tab-link.is-active, [data-tab].is-active")&&n.length>0&&this.activateTab(e,n[0],n,s),this.instances.set(e,{cleanup:r})},getTabId:function(e,t){return e.dataset.tabTarget||e.dataset.tab||e.getAttribute("href")?.replace("#","")||(typeof t=="number"?`tab-${t}`:e.id)},findPane:function(e,t,n){let s=e.querySelector(`[data-tab-pane="${t}"]`);return s||(s=e.querySelector(`#${t}`)),s||e.querySelectorAll(".vd-tab-link, [data-tab]").forEach((i,o)=>{this.getTabId(i,o)===t&&n[o]&&(s=n[o])}),s},activateTab:function(e,t,n,s){let r=Array.from(n).indexOf(t),i=this.getTabId(t,r);n.forEach(c=>{c.classList.remove("is-active"),c.setAttribute("aria-selected","false"),c.setAttribute("tabindex","-1"),c.parentElement&&c.parentElement.classList.contains("tab-item")&&c.parentElement.classList.remove("is-active")}),s.forEach(c=>{c.classList.remove("is-active")}),t.classList.add("is-active"),t.setAttribute("aria-selected","true"),t.setAttribute("tabindex","0"),t.parentElement&&t.parentElement.classList.contains("tab-item")&&t.parentElement.classList.add("is-active");let o=this.findPane(e,i,s);o&&o.classList.add("is-active");let a=new CustomEvent("tab:change",{bubbles:!0,detail:{tab:t,pane:o,tabId:i}});e.dispatchEvent(a)},handleKeydown:function(e,t,n,s,r){let i=t.classList.contains("vd-tabs-vertical")||t.classList.contains("tabs-vertical"),o=Array.from(s).filter(l=>!l.classList.contains("disabled")&&!l.disabled),a=o.indexOf(n),c=a;switch(e.key){case"ArrowLeft":i||(e.preventDefault(),c=a>0?a-1:o.length-1);break;case"ArrowRight":i||(e.preventDefault(),c=a<o.length-1?a+1:0);break;case"ArrowUp":i&&(e.preventDefault(),c=a>0?a-1:o.length-1);break;case"ArrowDown":i&&(e.preventDefault(),c=a<o.length-1?a+1:0);break;case"Home":e.preventDefault(),c=0;break;case"End":e.preventDefault(),c=o.length-1;break;case"Enter":case" ":e.preventDefault(),this.activateTab(t,n,s,r);return;default:return}c!==a&&(o[c].focus(),this.activateTab(t,o[c],s,r))},show:function(e){let t;if(typeof e=="string"?t=document.querySelector(`[data-tab-target="${e}"], [data-tab="${e}"], [href="#${e}"]`):t=e,!t)return;let n=t.closest(".vd-tabs, [data-tabs]");if(!n)return;let s=n.querySelectorAll(".vd-tab-link, [data-tab]"),r=n.querySelectorAll(".vd-tab-pane, [data-tab-pane]");this.activateTab(n,t,s,r)},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("tabs",v)})();(function(){"use strict";let v={STORAGE_KEYS:{PRIMARY:"vanduo-primary-color",NEUTRAL:"vanduo-neutral-color",RADIUS:"vanduo-radius",FONT:"vanduo-font-preference",THEME:"vanduo-theme-preference"},DEFAULTS:{PRIMARY_LIGHT:"black",PRIMARY_DARK:"amber",NEUTRAL:"charcoal",RADIUS:"0.5",FONT:"ubuntu",THEME:"system"},PRIMARY_COLORS:{black:{name:"Black",color:"#000000"},red:{name:"Red",color:"#fa5252"},orange:{name:"Orange",color:"#fd7e14"},amber:{name:"Amber",color:"#f59f00"},yellow:{name:"Yellow",color:"#fcc419"},lime:{name:"Lime",color:"#82c91e"},green:{name:"Green",color:"#40c057"},emerald:{name:"Emerald",color:"#20c997"},teal:{name:"Teal",color:"#12b886"},cyan:{name:"Cyan",color:"#22b8cf"},sky:{name:"Sky",color:"#3bc9db"},blue:{name:"Blue",color:"#228be6"},indigo:{name:"Indigo",color:"#4c6ef5"},violet:{name:"Violet",color:"#7950f2"},purple:{name:"Purple",color:"#be4bdb"},fuchsia:{name:"Fuchsia",color:"#f06595"},pink:{name:"Pink",color:"#e64980"},rose:{name:"Rose",color:"#ff8787"}},NEUTRAL_COLORS:{charcoal:{name:"Charcoal",color:"#0d1117"},slate:{name:"Slate",color:"#64748b"},gray:{name:"Gray",color:"#6b7280"},zinc:{name:"Zinc",color:"#71717a"},neutral:{name:"Neutral",color:"#737373"},stone:{name:"Stone",color:"#78716c"}},RADIUS_OPTIONS:["0","0.125","0.25","0.375","0.5"],FONT_OPTIONS:{"jetbrains-mono":{name:"JetBrains Mono",family:"'JetBrains Mono', monospace"},system:{name:"System Default",family:null},ubuntu:{name:"Ubuntu",family:"'Ubuntu', sans-serif"},lato:{name:"Lato",family:"'Lato', sans-serif"},"open-sans":{name:"Open Sans",family:"'Open Sans', sans-serif"}},THEME_MODES:["system","dark","light"],state:{primary:null,neutral:null,radius:null,font:null,theme:null,isOpen:!1},isInitialized:!1,_cleanup:[],_ownsDynamicPanel:!1,elements:{customizer:null,trigger:null,activeTrigger:null,triggers:[],panel:null,overlay:null},isRoot:function(e){return!!e&&(e===document||e.nodeType===1||e.nodeType===9||e.nodeType===11)},normalizeRoot:function(e){return this.isRoot(e)?e:document},queryAll:function(e,t){let n=this.normalizeRoot(e);if(typeof window.VanduoLifecycle<"u"&&typeof window.VanduoLifecycle.queryAll=="function")return window.VanduoLifecycle.queryAll(n,t);let s=[];if(n instanceof Element&&typeof n.matches=="function"&&n.matches(t)&&s.push(n),typeof n.querySelectorAll=="function"){let r=n.querySelectorAll(t);for(let i=0;i<r.length;i++)s.push(r[i])}return s},queryOne:function(e,t){let n=this.queryAll(e,t);return n.length?n[0]:null},getTriggers:function(e){return this.queryAll(e,"[data-theme-customizer-trigger]")},pruneTriggers:function(){this.elements.triggers=this.elements.triggers.filter(function(e){return e&&e.isConnected}),this.elements.trigger&&!this.elements.trigger.isConnected&&(this.elements.trigger=null),this.elements.activeTrigger&&!this.elements.activeTrigger.isConnected&&(this.elements.activeTrigger=null)},init:function(e){let t=this.normalizeRoot(e);if(this.isInitialized){this.bindExistingElements(t),this.bindTriggerEvents(t),this.bindPanelEvents(),this.updateUI();return}this.isInitialized=!0,this._cleanup=[],this.loadPreferences(),this.applyAllPreferences(),this.bindExistingElements(t),this.bindEvents(t)},addListener:function(e,t,n,s){e&&(e.addEventListener(t,n,s),this._cleanup.push(()=>e.removeEventListener(t,n,s)))},getDefaultPrimary:function(e){return e==="system"?window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?this.DEFAULTS.PRIMARY_DARK:this.DEFAULTS.PRIMARY_LIGHT:e==="dark"?this.DEFAULTS.PRIMARY_DARK:this.DEFAULTS.PRIMARY_LIGHT},loadPreferences:function(){this.state.theme=this.getStorageValue(this.STORAGE_KEYS.THEME,this.DEFAULTS.THEME),this.state.primary=this.getStorageValue(this.STORAGE_KEYS.PRIMARY,this.getDefaultPrimary(this.state.theme)),this._normalizeDefaultPrimaryIfStaleWithStoredTheme(),this.state.neutral=this.getStorageValue(this.STORAGE_KEYS.NEUTRAL,this.DEFAULTS.NEUTRAL),this.state.radius=this.getStorageValue(this.STORAGE_KEYS.RADIUS,this.DEFAULTS.RADIUS),this.state.font=this.getStorageValue(this.STORAGE_KEYS.FONT,this.DEFAULTS.FONT)},savePreference:function(e,t){this.setStorageValue(e,t)},applyAllPreferences:function(){this.applyPrimary(this.state.primary),this.applyNeutral(this.state.neutral),this.applyRadius(this.state.radius),this.applyFont(this.state.font),this.applyTheme(this.state.theme)},applyPrimary:function(e){this.PRIMARY_COLORS[e]||(e=this.getDefaultPrimary(this.state.theme)),this.state.primary=e,document.documentElement.setAttribute("data-primary",e),this.savePreference(this.STORAGE_KEYS.PRIMARY,e),this.dispatchEvent("primary-change",{color:e})},applyNeutral:function(e){this.NEUTRAL_COLORS[e]||(e=this.DEFAULTS.NEUTRAL),this.state.neutral=e,document.documentElement.setAttribute("data-neutral",e),this.savePreference(this.STORAGE_KEYS.NEUTRAL,e),this.dispatchEvent("neutral-change",{neutral:e})},applyRadius:function(e){this.RADIUS_OPTIONS.includes(e)||(e=this.DEFAULTS.RADIUS),this.state.radius=e,document.documentElement.setAttribute("data-radius",e),document.documentElement.style.setProperty("--vd-radius-scale",e),this.savePreference(this.STORAGE_KEYS.RADIUS,e),this.dispatchEvent("radius-change",{radius:e})},applyFont:function(e){this.FONT_OPTIONS[e]||(e=this.DEFAULTS.FONT),this.state.font=e,e==="system"?document.documentElement.removeAttribute("data-font"):document.documentElement.setAttribute("data-font",e),this.savePreference(this.STORAGE_KEYS.FONT,e),window.FontSwitcher&&window.FontSwitcher.setPreference&&(window.FontSwitcher.state.preference=e,window.FontSwitcher.applyFont()),this.dispatchEvent("font-change",{font:e})},applyTheme:function(e){if(this.THEME_MODES.includes(e)||(e=this.DEFAULTS.THEME),this._isApplying=!0,this.isUsingDefaultPrimary()){let t=this.getDefaultPrimary(e);this.state.primary!==t&&this.applyPrimary(t)}if(this.state.theme=e,e==="system"?document.documentElement.removeAttribute("data-theme"):document.documentElement.setAttribute("data-theme",e),this.savePreference(this.STORAGE_KEYS.THEME,e),window.Vanduo&&window.Vanduo.components.themeSwitcher){let t=window.Vanduo.components.themeSwitcher;t.state&&t.state.preference!==e&&(t.state.preference=e,typeof t.setStorageValue=="function"&&t.setStorageValue(t.STORAGE_KEY,e),typeof t.updateUI=="function"&&t.updateUI())}this._isApplying=!1,this.dispatchEvent("mode-change",{mode:e})},dispatchEvent:function(e,t){let n=new CustomEvent("theme:"+e,{bubbles:!0,detail:t});document.dispatchEvent(n);let s=new CustomEvent("theme:change",{bubbles:!0,detail:{type:e,value:t[Object.keys(t)[0]],state:{...this.state}}});document.dispatchEvent(s)},bindExistingElements:function(e){let t=this.normalizeRoot(e);this.pruneTriggers();let n=this.getTriggers(t);n.forEach(r=>{this.elements.triggers.includes(r)||this.elements.triggers.push(r)}),!this.elements.trigger&&this.elements.triggers.length&&(this.elements.trigger=this.elements.triggers[0]);let s=this.queryOne(t,".vd-theme-customizer")||(this.elements.customizer&&typeof this.elements.customizer.contains=="function"?this.elements.customizer:null)||document.querySelector(".vd-theme-customizer");s instanceof Element?(this.elements.customizer=s,this.elements.trigger=this.elements.customizer.querySelector(".vd-theme-customizer-trigger")||this.elements.trigger,this.elements.panel=this.elements.customizer.querySelector(".vd-theme-customizer-panel"),this.elements.overlay=this.elements.customizer.querySelector(".vd-theme-customizer-overlay")):n.length&&!this.elements.panel&&this.createDynamicPanel(),this.updateUI()},createDynamicPanel:function(){if(!this.elements.triggers.length||this.elements.panel&&this.elements.panel.isConnected)return;this.elements.trigger=this.elements.triggers[0];let e=document.createElement("div");e.className="vd-theme-customizer-overlay";let t=document.createElement("div");t.className="vd-theme-customizer-panel",t.innerHTML=this.getPanelHTML(),document.body.appendChild(e),document.body.appendChild(t),this.elements.panel=t,this.elements.overlay=e,this._ownsDynamicPanel=!0,this.elements.customizer={contains:n=>t.contains(n)||this.elements.triggers.some(s=>s.contains(n))},this.positionPanel(),this.bindPanelEvents(),this.addListener(window,"resize",()=>this.positionPanel())},positionPanel:function(){if(!this.elements.panel||!this.elements.trigger)return;let e=this.elements.activeTrigger||this.elements.trigger;if(window.innerWidth<768)this.elements.panel.style.top="",this.elements.panel.style.right="",this.elements.panel.style.left="",this.elements.panel.style.height="",this.elements.panel.style.maxHeight="";else{let n=e.getBoundingClientRect(),s=320,r=n.bottom+8,i=window.innerWidth,o=i-n.right;i-o-s<8&&(o=i-s-8),this.elements.panel.style.top=r+"px",this.elements.panel.style.right=o+"px",this.elements.panel.style.left="",this.elements.panel.style.height="auto",this.elements.panel.style.maxHeight="calc(100vh - "+r+"px)"}},bindPanelEvents:function(){if(!this.elements.panel||this.elements.panel.getAttribute("data-customizer-initialized")==="true")return;this.elements.panel.setAttribute("data-customizer-initialized","true"),this.elements.panel.querySelectorAll("[data-color]").forEach(s=>{this.addListener(s,"click",()=>{this.applyPrimary(s.dataset.color),this.updateUI()})}),this.elements.panel.querySelectorAll("[data-neutral]").forEach(s=>{this.addListener(s,"click",()=>{this.applyNeutral(s.dataset.neutral),this.updateUI()})}),this.elements.panel.querySelectorAll("[data-radius]").forEach(s=>{this.addListener(s,"click",()=>{this.applyRadius(s.dataset.radius),this.updateUI()})});let e=this.elements.panel.querySelector("[data-customizer-font]");e&&this.addListener(e,"change",s=>{this.applyFont(s.target.value),this.updateUI()});let t=this.elements.panel.querySelector(".customizer-reset");t&&this.addListener(t,"click",()=>{this.reset()});let n=this.elements.panel.querySelector(".customizer-mobile-close");n&&this.addListener(n,"click",()=>{this.close()}),this.elements.overlay&&this.addListener(this.elements.overlay,"click",()=>{this.close()})},getPanelHTML:function(){let e=typeof escapeHtml=="function"?escapeHtml:function(o){let a=document.createElement("div");return a.textContent=String(o??""),a.innerHTML},t=function(o){let a=String(o??"").trim();return/^(#[0-9a-fA-F]{3,8}|rgb[a]?\([^)]{1,60}\)|hsl[a]?\([^)]{1,60}\)|var\(--[a-zA-Z0-9_-]{1,40}\))$/.test(a)?a:"#000000"},n="";for(let[o,a]of Object.entries(this.PRIMARY_COLORS))n+=`<button class="tc-color-swatch${o===this.state.primary?" is-active":""}" data-color="${e(o)}" style="--vd-swatch-color: ${t(a.color)}" title="${e(a.name)}"></button>`;let s="";for(let[o,a]of Object.entries(this.NEUTRAL_COLORS))s+=`<button class="tc-neutral-swatch${o===this.state.neutral?" is-active":""}" data-neutral="${e(o)}" style="--vd-swatch-color: ${t(a.color)}" title="${e(a.name)}"><span>${e(a.name)}</span></button>`;let r="";this.RADIUS_OPTIONS.forEach(o=>{r+=`<button class="tc-radius-btn${o===this.state.radius?" is-active":""}" data-radius="${e(o)}">${e(o)}</button>`});let i="";for(let[o,a]of Object.entries(this.FONT_OPTIONS))i+=`<option value="${e(o)}"${o===this.state.font?" selected":""}>${e(a.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},_normalizeDefaultPrimaryIfStaleWithStoredTheme:function(){if(!this.isUsingDefaultPrimary())return;let e=this.getDefaultPrimary(this.state.theme);this.state.primary!==e&&(this.state.primary=e)},bindEvents:function(e){if(this.bindTriggerEvents(e),this.bindPanelEvents(),window.matchMedia){let t=window.matchMedia("(prefers-color-scheme: dark)"),n=()=>{if(this.state.theme==="system"&&this.isUsingDefaultPrimary()){let s=this.getDefaultPrimary("system");s!==this.state.primary&&(this.applyPrimary(s),this.updateUI())}};t.addEventListener("change",n),this._cleanup.push(()=>t.removeEventListener("change",n))}this.addListener(document,"click",t=>{this.state.isOpen&&this.elements.customizer&&!this.elements.customizer.contains(t.target)&&this.close()}),this.addListener(document,"keydown",t=>{t.key==="Escape"&&this.state.isOpen&&this.close()})},bindTriggerEvents:function(e){(e?this.getTriggers(e):this.elements.triggers).forEach(n=>{if(n.getAttribute("data-customizer-trigger-initialized")==="true")return;let s=r=>{r.preventDefault(),r.stopPropagation(),this.elements.activeTrigger=n,this.elements.trigger=n,this.toggle()};n.addEventListener("click",s),n._themeCustomizerTriggerHandler=s,n.setAttribute("data-customizer-trigger-initialized","true")})},cleanupTrigger:function(e){!e||e.getAttribute("data-customizer-trigger-initialized")!=="true"||(e._themeCustomizerTriggerHandler&&(e.removeEventListener("click",e._themeCustomizerTriggerHandler),delete e._themeCustomizerTriggerHandler),e.setAttribute("aria-expanded","false"),e.removeAttribute("data-customizer-trigger-initialized"),this.elements.activeTrigger===e&&(this.elements.activeTrigger=null),this.elements.triggers=this.elements.triggers.filter(function(t){return t!==e}),this.elements.trigger===e&&(this.elements.trigger=this.elements.triggers[0]||null))},toggle:function(){this.state.isOpen?this.close():this.open()},open:function(){this.state.isOpen=!0,this.positionPanel(),this.elements.panel&&this.elements.panel.classList.add("is-open"),this.elements.triggers.forEach(e=>e.setAttribute("aria-expanded","false")),this.elements.trigger&&this.elements.trigger.setAttribute("aria-expanded","true"),this.elements.overlay&&this.elements.overlay.classList.add("is-active"),this.dispatchEvent("panel-open",{isOpen:!0})},close:function(){this.state.isOpen=!1,this.elements.panel&&this.elements.panel.classList.remove("is-open"),this.elements.triggers.forEach(e=>e.setAttribute("aria-expanded","false")),this.elements.overlay&&this.elements.overlay.classList.remove("is-active"),this.dispatchEvent("panel-close",{isOpen:!1})},updateUI:function(){if(!this.elements.panel)return;this.elements.panel.querySelectorAll("[data-color]").forEach(t=>{t.classList.toggle("is-active",t.dataset.color===this.state.primary)}),this.elements.panel.querySelectorAll("[data-neutral]").forEach(t=>{t.classList.toggle("is-active",t.dataset.neutral===this.state.neutral)}),this.elements.panel.querySelectorAll("[data-radius]").forEach(t=>{t.classList.toggle("is-active",t.dataset.radius===this.state.radius)});let e=this.elements.panel.querySelector("[data-customizer-font]");e&&(e.value=this.state.font)},reset:function(){this.applyTheme(this.DEFAULTS.THEME),this.applyPrimary(this.getDefaultPrimary(this.DEFAULTS.THEME)),this.applyNeutral(this.DEFAULTS.NEUTRAL),this.applyRadius(this.DEFAULTS.RADIUS),this.applyFont(this.DEFAULTS.FONT),this.updateUI(),this.dispatchEvent("reset",{state:{...this.state}})},getState:function(){return{...this.state}},setPreferences:function(e){e.primary&&this.applyPrimary(e.primary),e.neutral&&this.applyNeutral(e.neutral),e.radius&&this.applyRadius(e.radius),e.font&&this.applyFont(e.font),e.theme&&this.applyTheme(e.theme),this.updateUI()},getStorageValue:function(e,t){if(typeof window.safeStorageGet=="function")return window.safeStorageGet(e,t);try{let n=localStorage.getItem(e);return n!==null?n:t}catch{return t}},setStorageValue:function(e,t){if(typeof window.safeStorageSet=="function")return window.safeStorageSet(e,t);try{return localStorage.setItem(e,t),!0}catch{return!1}},destroyAll:function(e){let t=this.normalizeRoot(e);if(t!==document){this.getTriggers(t).forEach(n=>{this.cleanupTrigger(n)}),this.pruneTriggers(),this.elements.triggers.length||this.destroyAll(document);return}this._cleanup.forEach(n=>n()),this._cleanup=[],this.elements.panel&&this.elements.panel.removeAttribute("data-customizer-initialized"),this.elements.triggers.slice().forEach(n=>{this.cleanupTrigger(n)}),this._ownsDynamicPanel&&(this.elements.panel&&this.elements.panel.parentNode&&this.elements.panel.parentNode.removeChild(this.elements.panel),this.elements.overlay&&this.elements.overlay.parentNode&&this.elements.overlay.parentNode.removeChild(this.elements.overlay),this._ownsDynamicPanel=!1),this.close(),this.elements.customizer=null,this.elements.trigger=null,this.elements.activeTrigger=null,this.elements.triggers=[],this.elements.panel=null,this.elements.overlay=null,this.isInitialized=!1}};window.Vanduo&&window.Vanduo.register("themeCustomizer",y),window.ThemeCustomizer=y})();(function(){"use strict";let y={isInitialized:!1,_mediaQuery:null,_onMediaChange:null,getToggles:function(e){return window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,'[data-toggle="theme"]'):Array.from(document.querySelectorAll('[data-toggle="theme"]'))},init:function(e){if(this.STORAGE_KEY="vanduo-theme-preference",this.state={preference:this.getPreference()},this.isInitialized){this.applyTheme(),this.renderUI(e),this.updateUI(e);return}this.isInitialized=!0,this.applyTheme(),this.listenForSystemChanges(),this.renderUI(e)},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(),window.ThemeCustomizer&&typeof window.ThemeCustomizer.applyTheme=="function"&&!window.ThemeCustomizer._isApplying&&window.ThemeCustomizer.applyTheme("system"))},this._mediaQuery.addEventListener("change",this._onMediaChange))},renderUI:function(e){this.getToggles(e).forEach(n=>{if(n.getAttribute("data-theme-initialized")==="true"){n.tagName==="SELECT"&&(n.value=this.state.preference);return}if(n.tagName==="SELECT"){n.value=this.state.preference;let s=r=>{this.setPreference(r.target.value)};n.addEventListener("change",s),n._themeToggleHandler=s}else{let s=()=>{let r=["system","light","dark"],i=(r.indexOf(this.state.preference)+1)%r.length;this.setPreference(r[i])};n.addEventListener("click",s),n._themeToggleHandler=s}n.setAttribute("data-theme-initialized","true")})},updateUI:function(e){this.getToggles(e).forEach(n=>{if(n.tagName==="SELECT")n.value=this.state.preference;else{let s=n.querySelector(".theme-current-label");s&&(s.textContent=this.state.preference.charAt(0).toUpperCase()+this.state.preference.slice(1))}})},destroyAll:function(e){let t=e||document;this.getToggles(t).filter(function(s){return s.getAttribute("data-theme-initialized")==="true"}).forEach(s=>{if(s._themeToggleHandler){let r=s.tagName==="SELECT"?"change":"click";s.removeEventListener(r,s._themeToggleHandler),delete s._themeToggleHandler}s.removeAttribute("data-theme-initialized")}),t===document&&this._mediaQuery&&this._onMediaChange&&this._mediaQuery.removeEventListener("change",this._onMediaChange),t===document&&(this._mediaQuery=null,this._onMediaChange=null,this.isInitialized=!1)}};window.Vanduo&&window.Vanduo.register("themeSwitcher",y)})();(function(){"use strict";let y={defaults:{position:"top-right",duration:5e3,dismissible:!0,showProgress:!0,pauseOnHover:!0},containers:{},getContainer:function(e){if(this.containers[e])return this.containers[e];let t=document.createElement("div");return t.className=`vd-toast-container vd-toast-container-${e}`,t.setAttribute("role","status"),t.setAttribute("aria-live","polite"),t.setAttribute("aria-atomic","false"),document.body.appendChild(t),this.containers[e]=t,t},show:function(e,t,n){typeof e=="string"&&(t&&typeof t=="object"?e=Object.assign({},t,{message:e}):e={message:e,type:t,duration:n});let s=Object.assign({},this.defaults,e),r=this.getContainer(s.position),i=document.createElement("div");i.className="vd-toast",s.type&&i.classList.add(`vd-toast-${s.type}`),s.solid&&i.classList.add("vd-toast-solid"),s.showProgress&&s.duration>0&&i.classList.add("vd-toast-with-progress");let a="";if(s.icon){let p=s.iconAllowSvg===!0,A=typeof sanitizeHtml=="function"?sanitizeHtml(s.icon,{allowSvg:p,allowStyle:!1}):escapeHtml(s.icon);a+=`<span class="vd-toast-icon">${A}</span>`}else s.type&&(a+=`<span class="vd-toast-icon">${this.getDefaultIcon(s.type)}</span>`);let o=typeof escapeHtml=="function"?escapeHtml:function(p){let A=document.createElement("div");return A.appendChild(document.createTextNode(p)),A.innerHTML};if(a+='<div class="vd-toast-content">',s.title&&(a+=`<div class="vd-toast-title">${o(String(s.title))}</div>`),s.message&&(a+=`<div class="vd-toast-message">${o(String(s.message))}</div>`),a+="</div>",s.dismissible&&(a+='<button type="button" class="vd-toast-close" aria-label="Close"></button>'),s.showProgress&&s.duration>0){let p=parseInt(s.duration,10)||0;a+=`<div class="vd-toast-progress" style="animation-duration: ${p}ms"></div>`}if(i.innerHTML=a,r.appendChild(i),i._toastCleanup=[],s.dismissible){let p=i.querySelector(".vd-toast-close"),A=()=>{this.dismiss(i)};p.addEventListener("click",A),i._toastCleanup.push(()=>p.removeEventListener("click",A))}let c=null,l=s.duration,h=null,d=()=>{if(s.duration>0){h=Date.now(),c=setTimeout(()=>{this.dismiss(i)},l),i._toastTimeoutId=c;let p=i.querySelector(".vd-toast-progress");p&&(p.style.animationPlayState="running")}},u=()=>{if(c){clearTimeout(c),c=null,i._toastTimeoutId=null,l-=Date.now()-h;let p=i.querySelector(".vd-toast-progress");p&&(p.style.animationPlayState="paused")}};s.pauseOnHover&&(i.addEventListener("mouseenter",u),i.addEventListener("mouseleave",d),i._toastCleanup.push(()=>i.removeEventListener("mouseenter",u),()=>i.removeEventListener("mouseleave",d))),requestAnimationFrame(()=>{i.classList.add("is-visible"),d()}),i._toastConfig=s;let f=new CustomEvent("toast:show",{bubbles:!0,detail:{toast:i,config:s}});return i.dispatchEvent(f),i},dismiss:function(e){if(!e||e.classList.contains("is-exiting"))return;e._toastTimeoutId&&(clearTimeout(e._toastTimeoutId),e._toastTimeoutId=null),e.classList.remove("is-visible"),e.classList.add("is-exiting");let t=new CustomEvent("toast:dismiss",{bubbles:!0,detail:{toast:e}});e.dispatchEvent(t);let n=()=>{e.removeEventListener("transitionend",n),e._toastCleanup&&(e._toastCleanup.forEach(s=>s()),delete e._toastCleanup),e.parentElement&&e.parentElement.removeChild(e)};e.addEventListener("transitionend",n),setTimeout(()=>{e._toastCleanup&&(e._toastCleanup.forEach(s=>s()),delete e._toastCleanup),e.parentElement&&e.parentElement.removeChild(e)},400)},destroyAll:function(){Object.keys(this.containers).forEach(e=>{let t=this.containers[e];if(!t)return;t.querySelectorAll(".vd-toast").forEach(s=>{s._toastTimeoutId&&clearTimeout(s._toastTimeoutId),s._toastCleanup&&(s._toastCleanup.forEach(r=>r()),delete s._toastCleanup),s.parentElement&&s.parentElement.removeChild(s)}),t.parentElement&&t.parentElement.removeChild(t)}),this.containers={}},dismissAll:function(e){e&&this.containers[e]?this.containers[e].querySelectorAll(".vd-toast").forEach(n=>this.dismiss(n)):Object.values(this.containers).forEach(t=>{t.querySelectorAll(".vd-toast").forEach(s=>this.dismiss(s))})},getDefaultIcon:function(e){return{success:'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>',error:'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="15" y1="9" x2="9" y2="15"></line><line x1="9" y1="9" x2="15" y2="15"></line></svg>',warning:'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>',info:'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg>'}[e]||""},success:function(e,t){return this.show(Object.assign({message:e,type:"success"},t))},error:function(e,t){return this.show(Object.assign({message:e,type:"error"},t))},warning:function(e,t){return this.show(Object.assign({message:e,type:"warning"},t))},info:function(e,t){return this.show(Object.assign({message:e,type:"info"},t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("toast",y),window.Toast=y})();(function(){"use strict";let y={tooltips:new Map,delayTimers:new Map,sanitizeHtml:function(e,t){return typeof sanitizeHtml=="function"?sanitizeHtml(e,t):e||""},init:function(e){window.Vanduo.queryAll(e,"[data-tooltip], [data-tooltip-html]").forEach(n=>{this.tooltips.has(n)||this.initTooltip(n)})},initTooltip:function(e){let t=this.createTooltip(e),n=[],s=()=>{this.showTooltip(e,t)},r=()=>{this.hideTooltip(e,t)},i=()=>{this.showTooltip(e,t)},a=()=>{this.hideTooltip(e,t)};e.addEventListener("mouseenter",s),e.addEventListener("mouseleave",r),e.addEventListener("focus",i),e.addEventListener("blur",a),n.push(()=>e.removeEventListener("mouseenter",s),()=>e.removeEventListener("mouseleave",r),()=>e.removeEventListener("focus",i),()=>e.removeEventListener("blur",a)),this.tooltips.set(e,{tooltip:t,cleanup:n})},createTooltip:function(e){let t=document.createElement("div");t.className="vd-tooltip",t.setAttribute("role","tooltip"),t.setAttribute("aria-hidden","true");let n="tooltip-"+Math.random().toString(36).substr(2,9);t.id=n,e.setAttribute("aria-describedby",n);let s=e.dataset.tooltipHtml,r=e.dataset.tooltip;if(s){let o=e.hasAttribute("data-tooltip-allow-svg");t.innerHTML=this.sanitizeHtml(s,{allowSvg:o,allowStyle:!1}),t.classList.add("vd-tooltip-html")}else r&&(t.textContent=r);let i=e.dataset.tooltipPlacement||e.dataset.placement||"top";t.setAttribute("data-placement",i),t.classList.add(`vd-tooltip-${i}`),e.dataset.tooltipVariant&&t.classList.add(`vd-tooltip-${e.dataset.tooltipVariant}`),e.dataset.tooltipSize&&t.classList.add(`vd-tooltip-${e.dataset.tooltipSize}`);let a=parseInt(e.dataset.tooltipDelay)||0;return t.dataset.delay=a,document.body.appendChild(t),t},showTooltip:function(e,t){let n=parseInt(t.dataset.delay)||0;if(n>0){let s=setTimeout(()=>{this.positionTooltip(e,t),t.classList.add("is-visible"),t.setAttribute("aria-hidden","false")},n);this.delayTimers.set(e,s)}else this.positionTooltip(e,t),t.classList.add("is-visible"),t.setAttribute("aria-hidden","false")},hideTooltip:function(e,t){let n=this.delayTimers.get(e);n&&(clearTimeout(n),this.delayTimers.delete(e)),t.classList.remove("is-visible"),t.setAttribute("aria-hidden","true")},positionTooltip:function(e,t){let n=t.dataset.placement||"top",s=e.getBoundingClientRect(),r=t.getBoundingClientRect(),i=window.pageYOffset||document.documentElement.scrollTop,a=window.pageXOffset||document.documentElement.scrollLeft,o=0,c=0;switch(n){case"top":o=s.top+i-r.height-8,c=s.left+a+s.width/2-r.width/2;break;case"bottom":o=s.bottom+i+8,c=s.left+a+s.width/2-r.width/2;break;case"left":o=s.top+i+s.height/2-r.height/2,c=s.left+a-r.width-8;break;case"right":o=s.top+i+s.height/2-r.height/2,c=s.right+a+8;break}let l=window.innerWidth,h=window.innerHeight,d=8;c<d?c=d:c+r.width>l-d&&(c=l-r.width-d),o<i+d?o=i+d:o+r.height>i+h-d&&(o=i+h-r.height-d),t.style.cssText=`position: absolute; top: 0; left: 0; transform: translate(${c}px, ${o}px);`},show:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t&&this.tooltips.has(t)){let{tooltip:n}=this.tooltips.get(t);this.showTooltip(t,n)}},hide:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t&&this.tooltips.has(t)){let{tooltip:n}=this.tooltips.get(t);this.hideTooltip(t,n)}},update:function(e,t,n=!1){let s=typeof e=="string"?document.querySelector(e):e;if(s&&this.tooltips.has(s)){let{tooltip:r}=this.tooltips.get(s);if(n){let i=s.hasAttribute("data-tooltip-allow-svg");r.innerHTML=this.sanitizeHtml(t,{allowSvg:i,allowStyle:!1}),r.classList.add("vd-tooltip-html")}else r.textContent=t,r.classList.remove("vd-tooltip-html")}},destroy:function(e){let t=this.tooltips.get(e);if(!t)return;let n=this.delayTimers.get(e);n&&(clearTimeout(n),this.delayTimers.delete(e)),t.cleanup.forEach(s=>s()),t.tooltip&&t.tooltip.parentNode&&t.tooltip.parentNode.removeChild(t.tooltip),this.tooltips.delete(e)},destroyAll:function(){this.tooltips.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("tooltips",y),window.VanduoTooltips=y})();(function(){"use strict";let y={minQueryLength:2,maxResults:10,debounceMs:150,highlightTag:"mark",keyboardShortcut:!0,containerSelector:".vd-doc-search",inputSelector:".vd-doc-search-input",resultsSelector:".vd-doc-search-results",contentSelector:".doc-content section[id]",titleSelector:".demo-title, h2, h3",navSelector:".doc-nav-link",sectionSelector:".doc-nav-section",excludeFromContent:"pre, code, script, style",maxContentLength:500,data:null,categoryIcons:{"getting-started":"ph-rocket-launch",core:"ph-cube",components:"ph-puzzle-piece",interactive:"ph-cursor-click","data-display":"ph-table",feedback:"ph-bell",meta:"ph-info",default:"ph-file-text"},onSelect:null,onSearch:null,onOpen:null,onClose:null,emptyTitle:"No results found",emptyText:"Try different keywords or check spelling",placeholder:"Search..."},e={mark:!0,span:!0,strong:!0,em:!0};function t(a){return typeof window.VanduoLifecycle<"u"&&window.VanduoLifecycle.isRoot(a)}function n(a){return t(a)?a:document}function s(a){let o=typeof a=="string"?a.toLowerCase():"mark";return e[o]?o:"mark"}function r(a){let o=Object.assign({},y,a||{});o.root=n(o.root),o.highlightTag=s(o.highlightTag);let c={initialized:!1,index:[],results:[],activeIndex:-1,isOpen:!1,query:"",container:null,input:null,resultsContainer:null,debounceTimer:null,boundHandlers:{}};function l(m){if(window.Vanduo&&typeof window.Vanduo.queryAll=="function")return window.Vanduo.queryAll(o.root,m);let g=n(o.root);if(g===document)return Array.from(document.querySelectorAll(m));let b=[];return g instanceof Element&&g.matches(m)&&b.push(g),b.concat(Array.from(g.querySelectorAll(m)))}function h(m){let g=l(m);return g.length?g[0]:null}function d(m,g,...b){try{g(...b)}catch(C){console.warn('[Vanduo Search] Callback error in "'+m+'":',C)}}function u(m){if(c.resultsContainer)try{c.resultsContainer.innerHTML=m}catch(g){console.warn("[Vanduo Search] Failed to render results:",g)}}function f(){return c.initialized?P:(c.container=h(o.containerSelector),!c.container||(c.input=c.container.querySelector(o.inputSelector),c.resultsContainer=c.container.querySelector(o.resultsSelector),!c.input||!c.resultsContainer)?(c.initialized=!1,null):(o.placeholder&&c.input.setAttribute("placeholder",o.placeholder),p(),E(),S(),c.initialized=!0,P))}function p(){if(c.index=[],o.data&&Array.isArray(o.data)){o.data.forEach(function(b){c.index.push({id:b.id||x(b.title),title:b.title||"",category:b.category||"",categorySlug:x(b.category||""),content:b.content||"",keywords:b.keywords||w(b.title+" "+b.content),url:b.url||"#"+(b.id||x(b.title)),icon:b.icon||""})});return}let m=l(o.contentSelector),g=A();m.forEach(function(b){let C=b.id;if(!C)return;let V=b.querySelector(o.titleSelector),z=V?V.textContent.replace(/v[\d.]+/g,"").trim():C,R=g[C]||"Documentation",X=_(b),F=k(b,z),G=V?V.querySelector("i.ph"):null,W="";if(G&&G.classList){for(let O=0;O<G.classList.length;O++)if(G.classList[O].indexOf("ph-")===0){W=G.classList[O];break}}c.index.push({id:C,title:z,category:R,categorySlug:x(R),content:X,keywords:F,url:"#"+C,icon:W})})}function A(){let m={},g="Documentation";return l(o.navSelector+", "+o.sectionSelector).forEach(function(C){if(C.classList.contains("doc-nav-section"))g=C.textContent.trim();else{let V=C.getAttribute("href");if(V&&V.startsWith("#")){let z=V.substring(1);m[z]=g}}}),m}function _(m){let g=m.cloneNode(!0);g.querySelectorAll(o.excludeFromContent).forEach(function(V){V.remove()});let C=g.textContent||"";return C=C.replace(/\s+/g," ").trim(),C.substring(0,o.maxContentLength)}function k(m,g){let b=[];return g.toLowerCase().split(/\s+/).forEach(function(z){z.length>2&&b.push(z)}),m.querySelectorAll("code").forEach(function(z){let X=(z.textContent||"").match(/\.([\w-]+)/g);X&&X.forEach(function(F){b.push(F.substring(1).toLowerCase())})}),m.querySelectorAll("[data-tooltip], [data-modal]").forEach(function(z){z.getAttributeNames().filter(function(X){return X.startsWith("data-")}).forEach(function(X){b.push(X.replace("data-",""))})}),Array.from(new Set(b))}function w(m){return m.toLowerCase().split(/\s+/).filter(function(b){return b.length>2})}function x(m){return m.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"")}function E(){c.boundHandlers.handleInput=function(m){M(m)},c.boundHandlers.handleFocus=function(){c.query.length>=o.minQueryLength&&$()},c.boundHandlers.handleKeydown=function(m){T(m)},c.boundHandlers.handleOutsideClick=function(m){c.container.contains(m.target)||K()},c.boundHandlers.handleGlobalKeydown=function(m){o.keyboardShortcut&&(m.metaKey||m.ctrlKey)&&m.key==="k"&&(m.preventDefault(),c.input.focus(),c.input.select())},c.boundHandlers.handleResultClick=function(m){let g=m.target.closest(".vd-doc-search-result");if(g){let b=parseInt(g.dataset.index,10);J(b)}},c.input.addEventListener("input",c.boundHandlers.handleInput),c.input.addEventListener("focus",c.boundHandlers.handleFocus),c.input.addEventListener("keydown",c.boundHandlers.handleKeydown),document.addEventListener("click",c.boundHandlers.handleOutsideClick),document.addEventListener("keydown",c.boundHandlers.handleGlobalKeydown),c.resultsContainer.addEventListener("click",c.boundHandlers.handleResultClick)}function L(){c.input&&(c.input.removeEventListener("input",c.boundHandlers.handleInput),c.input.removeEventListener("focus",c.boundHandlers.handleFocus),c.input.removeEventListener("keydown",c.boundHandlers.handleKeydown)),document.removeEventListener("click",c.boundHandlers.handleOutsideClick),document.removeEventListener("keydown",c.boundHandlers.handleGlobalKeydown),c.resultsContainer&&c.resultsContainer.removeEventListener("click",c.boundHandlers.handleResultClick)}function S(){let m=c.resultsContainer.id||"search-results-"+Math.random().toString(36).substr(2,9);c.resultsContainer.id=m,c.input.setAttribute("role","combobox"),c.input.setAttribute("aria-autocomplete","list"),c.input.setAttribute("aria-controls",m),c.input.setAttribute("aria-expanded","false"),c.resultsContainer.setAttribute("role","listbox"),c.resultsContainer.setAttribute("aria-label","Search results")}function M(m){let g=m.target.value.trim();c.debounceTimer&&clearTimeout(c.debounceTimer),c.debounceTimer=setTimeout(function(){if(c.query=g,g.length<o.minQueryLength){K();return}c.results=H(g),c.activeIndex=-1,I(),$(),typeof o.onSearch=="function"&&d("onSearch",o.onSearch,g,c.results)},o.debounceMs)}function T(m){if(!c.isOpen){m.key==="ArrowDown"&&c.query.length>=o.minQueryLength&&(m.preventDefault(),c.results=H(c.query),I(),$());return}switch(m.key){case"ArrowDown":m.preventDefault(),Z(1);break;case"ArrowUp":m.preventDefault(),Z(-1);break;case"Enter":m.preventDefault(),c.activeIndex>=0?J(c.activeIndex):c.results.length>0&&J(0);break;case"Escape":m.preventDefault(),K();break;case"Tab":K();break}}function H(m){let g=m.toLowerCase().split(/\s+/).filter(function(C){return C.length>0}),b=[];return c.index.forEach(function(C){let V=0,z=C.title.toLowerCase(),R=C.category.toLowerCase(),X=C.content.toLowerCase();g.forEach(function(F){z.includes(F)&&(V+=100,z===F?V+=50:z.startsWith(F)&&(V+=25)),R.includes(F)&&(V+=50),C.keywords.some(function(W){return W.includes(F)})&&(V+=30),X.includes(F)&&(V+=10)}),V>0&&b.push({id:C.id,title:C.title,category:C.category,categorySlug:C.categorySlug,content:C.content,url:C.url,icon:C.icon,score:V})}),b.sort(function(C,V){return V.score-C.score}),b.slice(0,o.maxResults)}function I(){if(c.results.length===0){u(v());return}let m='<ul class="vd-doc-search-results-list" role="listbox">';c.results.forEach(function(g,b){let C=b===c.activeIndex,V=g.icon||q(g.categorySlug),z=N(g.content,c.query);m+='<li class="vd-doc-search-result'+(C?" is-active":"")+'" role="option" id="vd-doc-search-result-'+b+'" data-index="'+b+'" data-category="'+Y(g.categorySlug)+'" aria-selected="'+C+'"><div class="vd-doc-search-result-icon"><i class="ph '+Y(V)+'"></i></div><div class="vd-doc-search-result-content"><div class="vd-doc-search-result-title">'+B(g.title,c.query)+'</div><div class="vd-doc-search-result-category">'+Y(g.category)+'</div><div class="vd-doc-search-result-excerpt">'+B(z,c.query)+"</div></div></li>"}),m+="</ul>",m+=D(),u(m)}function v(){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">'+Y(o.emptyTitle)+'</div><div class="vd-doc-search-empty-text">'+Y(o.emptyText)+"</div></div>"}function D(){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 q(m){return o.categoryIcons[m]||o.categoryIcons.default||"ph-file-text"}function N(m,g){let b=g.toLowerCase().split(/\s+/),C=m.toLowerCase(),V=100,z=-1;for(let G=0;G<b.length;G++){let W=C.indexOf(b[G]);W!==-1&&(z===-1||W<z)&&(z=W)}if(z===-1)return m.substring(0,V)+"...";let R=Math.max(0,z-30),X=Math.min(m.length,z+V),F=m.substring(R,X);return R>0&&(F="..."+F),X<m.length&&(F=F+"..."),F}function B(m,g){if(!g)return Y(m);let b=g.toLowerCase().split(/\s+/).filter(function(V){return V.length>0}),C=Y(m);return b.forEach(function(V){if(V.length>50)return;let z=new RegExp("("+V.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+")","gi");C=C.replace(z,"<"+o.highlightTag+">$1</"+o.highlightTag+">")}),C}function Y(m){let g=document.createElement("div");return g.textContent=m,g.innerHTML}function Z(m){let g=c.activeIndex+m;g<0?g=c.results.length-1:g>=c.results.length&&(g=0),te(g)}function te(m){let g=c.resultsContainer.querySelector(".vd-doc-search-result.is-active");g&&(g.classList.remove("is-active"),g.setAttribute("aria-selected","false")),c.activeIndex=m;let b=c.resultsContainer.querySelector('[data-index="'+m+'"]');b&&(b.classList.add("is-active"),b.setAttribute("aria-selected","true"),c.input.setAttribute("aria-activedescendant","vd-doc-search-result-"+m),b.scrollIntoView({block:"nearest"}))}function J(m){let g=c.results[m];if(!g)return;if(K(),c.input.value="",c.query="",typeof o.onSelect=="function"){d("onSelect",o.onSelect,g);return}let b=h(g.url)||document.querySelector(g.url);b&&(b.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",g.url),oe(g.id))}function oe(m){l(o.navSelector).forEach(function(b){b.classList.remove("active"),b.getAttribute("href")==="#"+m&&b.classList.add("active")})}function $(){c.isOpen||(c.isOpen=!0,c.resultsContainer.classList.add("is-open"),c.input.setAttribute("aria-expanded","true"),typeof o.onOpen=="function"&&d("onOpen",o.onOpen))}function K(){c.isOpen&&(c.isOpen=!1,c.activeIndex=-1,c.resultsContainer.classList.remove("is-open"),c.input.setAttribute("aria-expanded","false"),c.input.removeAttribute("aria-activedescendant"),typeof o.onClose=="function"&&d("onClose",o.onClose))}function ne(){L(),c.initialized=!1,c.index=[],c.results=[],c.isOpen=!1,c.query="",c.debounceTimer&&clearTimeout(c.debounceTimer),c.resultsContainer&&u("")}function j(){p()}function se(m){Object.assign(o,m),o.root=n(o.root),o.highlightTag=s(o.highlightTag)}function ie(){return Object.assign({},o)}function ae(){return c.index.slice()}let P={init:f,destroy:ne,rebuild:j,search:H,open:$,close:K,setConfig:se,getConfig:ie,getIndex:ae,getContainer:function(){return c.container}};return P}let i={create:function(a){let o=r(a);return o&&o.init(),o||null},_instance:null,config:Object.assign({},y),init:function(a,o){let c=t(a)?a:null,l=c?o:a;return this._instance&&this._instance.destroy(),l&&Object.assign(this.config,l),this._instance=r(Object.assign({},this.config,c?{root:c}:{})),this._instance?this._instance.init():null},destroy:function(a){a&&this._instance&&this._instance.getContainer()&&typeof window.VanduoLifecycle<"u"&&!window.VanduoLifecycle.isInRoot(a,this._instance.getContainer())||this._instance&&(this._instance.destroy(),this._instance=null)},destroyAll:function(a){this.destroy(a)},rebuild:function(){this._instance&&this._instance.rebuild()},search:function(a){return this._instance?this._instance.search(a):[]},open:function(){this._instance&&this._instance.open()},close:function(){this._instance&&this._instance.close()}};typeof window.Vanduo<"u"&&window.Vanduo.register("docSearch",i),window.Search=i,window.DocSearch=i,window.VanduoDocSearch=i})();(function(){"use strict";let y={instances:new Map,currentDrag:null,touchState:null,feedbackElement:null,containerSelector:".vd-draggable-container, .vd-draggable-container-vertical",init:function(e){window.Vanduo.queryAll(e,".vd-draggable, [data-draggable]").forEach(r=>{this.instances.has(r)||this.initDraggable(r)}),window.Vanduo.queryAll(e,this.containerSelector).forEach(r=>{this.instances.has(r)||this.initContainer(r)}),window.Vanduo.queryAll(e,".vd-drop-zone").forEach(r=>{this.instances.has(r)||this.initDropZone(r)}),this.createFeedbackElement()},initDraggable:function(e){let t=[];e.hasAttribute("draggable")||e.setAttribute("draggable","true"),e.hasAttribute("tabindex")||e.setAttribute("tabindex","0"),e.setAttribute("role","option"),e.setAttribute("aria-roledescription","draggable item"),e.setAttribute("aria-grabbed","false");let n=h=>{this.handleDragStart(h,e)};e.addEventListener("dragstart",n),t.push(()=>e.removeEventListener("dragstart",n));let s=h=>{this.handleDrag(h,e)};e.addEventListener("drag",s),t.push(()=>e.removeEventListener("drag",s));let r=h=>{this.handleDragEnd(h,e)};e.addEventListener("dragend",r),t.push(()=>e.removeEventListener("dragend",r));let i=h=>{this.handleTouchStart(h,e)};e.addEventListener("touchstart",i),t.push(()=>e.removeEventListener("touchstart",i));let a=h=>{this.handleTouchMove(h,e)};e.addEventListener("touchmove",a,{passive:!1}),t.push(()=>e.removeEventListener("touchmove",a));let o=h=>{this.handleTouchEnd(h,e)};e.addEventListener("touchend",o,{passive:!1}),t.push(()=>e.removeEventListener("touchend",o));let c=h=>{this.handleTouchEnd(h,e)};e.addEventListener("touchcancel",c),t.push(()=>e.removeEventListener("touchcancel",c));let l=h=>{this.handleKeydown(h,e)};e.addEventListener("keydown",l),t.push(()=>e.removeEventListener("keydown",l)),this.instances.set(e,{cleanup:t})},initContainer:function(e){e.setAttribute("role","listbox"),e.setAttribute("aria-label",e.getAttribute("aria-label")||"Draggable items"),e.querySelectorAll(".vd-draggable-item").forEach(a=>{this.instances.has(a)||this.initDraggable(a)});let n=[],s=a=>{a.preventDefault(),a.dataTransfer.dropEffect="move"},r=a=>{if(a.preventDefault(),a.dataTransfer.dropEffect="move",!this.currentDrag)return;let o=this.currentDrag.element;e.contains(o)&&(a.clientX===0&&a.clientY===0||this.handleReorder(e,o,a.clientX,a.clientY))},i=a=>{a.preventDefault()};e.addEventListener("dragenter",s),e.addEventListener("dragover",r),e.addEventListener("drop",i),n.push(()=>{e.removeEventListener("dragenter",s),e.removeEventListener("dragover",r),e.removeEventListener("drop",i)}),this.instances.set(e,{cleanup:n})},initDropZone:function(e){let t=[];e.setAttribute("role","region"),e.setAttribute("aria-dropeffect","move"),e.hasAttribute("aria-label")||e.setAttribute("aria-label","Drop zone");let n=a=>{a.preventDefault(),this.handleDragOver(a,e)};e.addEventListener("dragover",n),t.push(()=>e.removeEventListener("dragover",n));let s=a=>{a.preventDefault(),this.handleDragEnter(a,e)};e.addEventListener("dragenter",s),t.push(()=>e.removeEventListener("dragenter",s));let r=a=>{this.handleDragLeave(a,e)};e.addEventListener("dragleave",r),t.push(()=>e.removeEventListener("dragleave",r));let i=a=>{a.preventDefault(),this.handleDrop(a,e)};e.addEventListener("drop",i),t.push(()=>e.removeEventListener("drop",i)),this.instances.set(e,{cleanup:t})},createFeedbackElement:function(){if(!this.feedbackElement){let e=document.querySelector(".vd-drag-feedback");if(e){this.feedbackElement=e;return}this.feedbackElement=document.createElement("div"),this.feedbackElement.className="vd-drag-feedback hidden",this.feedbackElement.setAttribute("role","presentation"),document.body.appendChild(this.feedbackElement)}},handleDragStart:function(e,t){t.classList.add("is-dragging"),t.setAttribute("aria-grabbed","true"),this.currentDrag={element:t,initialPosition:{x:e.clientX,y:e.clientY},initialBounds:t.getBoundingClientRect(),data:this.getData(t)},e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text/plain",this.currentDrag.data),t.dispatchEvent(new CustomEvent("draggable:start",{bubbles:!0,detail:{element:t,data:this.currentDrag.data,position:{x:e.clientX,y:e.clientY}}}))},handleDrag:function(e,t){this.currentDrag&&t.dispatchEvent(new CustomEvent("draggable:drag",{bubbles:!0,detail:{element:t,data:this.currentDrag.data,position:{x:e.clientX,y:e.clientY},delta:{x:e.clientX-this.currentDrag.initialPosition.x,y:e.clientY-this.currentDrag.initialPosition.y}}}))},handleDragEnd:function(e,t){t.classList.remove("is-dragging"),t.classList.add("is-dropped"),setTimeout(()=>t.classList.remove("is-dropped"),300),t.setAttribute("aria-grabbed","false"),this.feedbackElement&&this.feedbackElement.classList.add("hidden");let n=this.currentDrag?.data||this.getData(t),s=this.currentDrag?.initialPosition||{x:0,y:0};t.dispatchEvent(new CustomEvent("draggable:end",{bubbles:!0,detail:{element:t,data:n,position:{x:e.clientX,y:e.clientY},delta:{x:e.clientX-s.x,y:e.clientY-s.y}}})),this.currentDrag=null},handleTouchStart:function(e,t){let n=e.touches[0],s=t.getBoundingClientRect();this.touchState={element:t,startX:n.clientX,startY:n.clientY,lastX:n.clientX,lastY:n.clientY,offsetX:n.clientX-s.left,offsetY:n.clientY-s.top,startTime:Date.now(),isDragging:!1}},handleTouchMove:function(e,t){if(!this.touchState)return;let n=e.touches[0];this.touchState.lastX=n.clientX,this.touchState.lastY=n.clientY;let s=n.clientX-this.touchState.startX,r=n.clientY-this.touchState.startY;if((Math.abs(s)>10||Math.abs(r)>10)&&(e.cancelable&&e.preventDefault(),this.touchState.isDragging||(this.touchState.isDragging=!0,t.classList.add("is-dragging"),t.setAttribute("aria-grabbed","true"),this.currentDrag={element:t,initialPosition:{x:this.touchState.startX,y:this.touchState.startY},initialBounds:t.getBoundingClientRect(),data:this.getData(t),offsetX:this.touchState.offsetX,offsetY:this.touchState.offsetY},t.dispatchEvent(new CustomEvent("draggable:start",{bubbles:!0,detail:{element:t,data:this.currentDrag.data,position:{x:n.clientX,y:n.clientY}}}))),this.updateFeedback(n.clientX,n.clientY),this.currentDrag)){t.dispatchEvent(new CustomEvent("draggable:drag",{bubbles:!0,detail:{element:t,data:this.currentDrag.data,position:{x:n.clientX,y:n.clientY},delta:{x:s,y:r}}})),this.updateTouchDropZone(n.clientX,n.clientY);let i=t.closest(this.containerSelector);i&&i.contains(t)&&this.handleReorder(i,t,n.clientX,n.clientY)}},handleTouchEnd:function(e,t){if(this.touchState&&this.touchState.isDragging){e.cancelable&&e.preventDefault();let n=e.changedTouches?.[0],s={x:n?.clientX??this.touchState.lastX??this.touchState.startX,y:n?.clientY??this.touchState.lastY??this.touchState.startY},r=this.resolveDropZoneAtPoint(s.x,s.y)||this.touchState.overZone;r?this.dispatchDrop(r,s):this.touchState.overZone&&this.touchState.overZone.classList.remove("is-drag-over"),t.classList.remove("is-dragging"),t.classList.add("is-dropped"),t.setAttribute("aria-grabbed","false"),setTimeout(()=>t.classList.remove("is-dropped"),300),this.feedbackElement&&this.feedbackElement.classList.add("hidden");let i=this.currentDrag?.data||this.getData(t),a=this.touchState?.startX||0,o=this.touchState?.startY||0;t.dispatchEvent(new CustomEvent("draggable:end",{bubbles:!0,detail:{element:t,data:i,position:s,delta:{x:s.x-a,y:s.y-o}}}))}this.touchState=null,this.currentDrag=null},handleDragOver:function(e,t){e.preventDefault(),e.dataTransfer.dropEffect="move"},handleDragEnter:function(e,t){e.preventDefault(),t.classList.add("is-drag-over")},handleDragLeave:function(e,t){t.classList.remove("is-drag-over")},handleDrop:function(e,t){e.preventDefault(),this.dispatchDrop(t,{x:e.clientX,y:e.clientY})},resolveDropZoneAtPoint:function(e,t){if(!Number.isFinite(e)||!Number.isFinite(t))return null;if(typeof document.elementsFromPoint=="function"){let i=document.elementsFromPoint(e,t);for(let a of i){let o=a.closest(".vd-drop-zone");if(o)return o}}let n=document.elementFromPoint(e,t),s=n?n.closest(".vd-drop-zone"):null;if(s)return s;let r=document.querySelectorAll(".vd-drop-zone");for(let i of r){let a=i.getBoundingClientRect();if(e>=a.left&&e<=a.right&&t>=a.top&&t<=a.bottom)return i}return null},updateTouchDropZone:function(e,t){if(!this.touchState)return;let n=this.resolveDropZoneAtPoint(e,t),s=this.touchState.overZone||null;s&&s!==n&&s.classList.remove("is-drag-over"),n&&n!==s&&n.classList.add("is-drag-over"),this.touchState.overZone=n||null},dispatchDrop:function(e,t){e.classList.remove("is-drag-over"),e.dispatchEvent(new CustomEvent("draggable:drop",{bubbles:!0,detail:{zone:e,element:this.currentDrag?.element,data:this.currentDrag?.data,position:t}}))},handleReorder:function(e,t,n,s){let r=e.classList.contains("vd-draggable-container-vertical"),a=[...e.querySelectorAll(".vd-draggable-item:not(.is-dragging), .vd-draggable:not(.is-dragging)")].reduce((o,c)=>{let l=c.getBoundingClientRect(),h=r?s-l.top-l.height/2:n-l.left-l.width/2;return h<0&&h>o.offset?{offset:h,element:c}:o},{offset:Number.NEGATIVE_INFINITY}).element;a==null?e.appendChild(t):e.insertBefore(t,a)},handleKeydown:function(e,t){switch(e.key){case"Enter":case" ":e.preventDefault(),t.click();break;case"Escape":t.classList.contains("is-dragging")&&(t.classList.remove("is-dragging"),t.setAttribute("aria-grabbed","false"),this.feedbackElement&&this.feedbackElement.classList.add("hidden"),this.currentDrag=null);break;case"ArrowUp":case"ArrowLeft":{e.preventDefault();let n=t.previousElementSibling;n&&(n.classList.contains("vd-draggable")||n.classList.contains("vd-draggable-item"))&&(t.parentNode.insertBefore(t,n),t.focus(),t.dispatchEvent(new CustomEvent("draggable:reorder",{bubbles:!0,detail:{element:t,direction:"up"}})));break}case"ArrowDown":case"ArrowRight":{e.preventDefault();let n=t.nextElementSibling;n&&(n.classList.contains("vd-draggable")||n.classList.contains("vd-draggable-item"))&&(t.parentNode.insertBefore(n,t),t.focus(),t.dispatchEvent(new CustomEvent("draggable:reorder",{bubbles:!0,detail:{element:t,direction:"down"}})));break}}},getData:function(e){return e.dataset.draggable||e.textContent.trim()},updateFeedback:function(e,t){if(!this.currentDrag)return;this.feedbackElement.classList.remove("hidden");let n=this.currentDrag.initialBounds;this.feedbackElement.innerHTML="";let s=this.currentDrag.element.cloneNode(!0);this.feedbackElement.appendChild(s);let r=this.currentDrag.offsetX??20,i=this.currentDrag.offsetY??20;Object.assign(this.feedbackElement.style,{left:e-r+"px",top:t-i+"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",y),window.VanduoDraggable=y})();(function(){"use strict";let y=new Map;function e(d){return!!d&&(d===document||d.nodeType===1||d.nodeType===9||d.nodeType===11)}function t(d){return e(d)?d:document}function n(d,u){let f=t(d);return u instanceof Element?f===document?document.documentElement?document.documentElement.contains(u):document.contains(u):f===u?!0:typeof f.contains=="function"&&f.contains(u):!1}function s(d,u){let f=t(d),p=[];if(f instanceof Element&&typeof f.matches=="function"&&f.matches(u)&&p.push(f),typeof f.querySelectorAll=="function"){let A=f.querySelectorAll(u);for(let _=0;_<A.length;_++)p.push(A[_])}return p}function r(d){try{return new URL(d,window.location.href).origin===window.location.origin}catch{return!1}}function i(d,u){let p=new DOMParser().parseFromString(u.trim(),"text/html"),A=["SCRIPT","IFRAME","OBJECT","EMBED","FORM","BASE","LINK","META","STYLE"];for(let w of A){let x=p.querySelectorAll(w);for(let E=x.length-1;E>=0;E--)x[E].parentNode.removeChild(x[E])}function _(w){if(w.nodeType===Node.ELEMENT_NODE){let x=w.attributes;for(let L=x.length-1;L>=0;L--){let S=x[L].name.toLowerCase(),T=x[L].value.toLowerCase().trim();(S.startsWith("on")||T.startsWith("javascript:")||T.startsWith("data:")||T.startsWith("vbscript:"))&&w.removeAttribute(x[L].name)}let E=w.childNodes;for(let L=0;L<E.length;L++)_(E[L])}}_(p.body);let k=Array.from(p.body.childNodes);for(;d.firstChild;)d.removeChild(d.firstChild);k.forEach(function(w){d.appendChild(document.adoptNode(w))})}function a(){return'<div class="vd-skeleton-card" style="position:relative;min-height:200px;padding:2rem;overflow:hidden;"><div class="vd-skeleton vd-skeleton-heading-lg" style="margin-bottom:1.5rem;"></div><div class="vd-skeleton vd-skeleton-paragraph"><div class="vd-skeleton vd-skeleton-text"></div><div class="vd-skeleton vd-skeleton-text"></div><div class="vd-skeleton vd-skeleton-text"></div></div><div class="vd-dynamic-loader" style="position:absolute;inset:0;"><div class="vd-dynamic-loader-grid"><div class="vd-spinner vd-spinner-sm vd-spinner-success"></div><div class="vd-spinner vd-spinner-sm vd-spinner-warning"></div><div class="vd-spinner vd-spinner-sm vd-spinner-error"></div><div class="vd-spinner vd-spinner-sm vd-spinner-info"></div></div><span class="vd-dynamic-loader-text">Loading\u2026</span></div></div>'}function o(){return'<div class="vd-dynamic-loader" style="min-height:180px;display:flex;align-items:center;justify-content:center;"><div class="vd-dynamic-loader-grid"><div class="vd-spinner vd-spinner-sm vd-spinner-success"></div><div class="vd-spinner vd-spinner-sm vd-spinner-warning"></div><div class="vd-spinner vd-spinner-sm vd-spinner-error"></div><div class="vd-spinner vd-spinner-sm vd-spinner-info"></div></div><span class="vd-dynamic-loader-text">Loading\u2026</span></div>'}function c(d){return!d||d==="skeleton"?a():d==="spinner"?o():d}function l(d,u,f){d.dispatchEvent(new CustomEvent(u,{bubbles:!0,detail:f||{}}))}let h={observe:function(d,u,f){if(!(d instanceof Element)){console.warn("[VanduoLazyLoad] observe() requires a DOM Element.");return}if(typeof u!="function"){console.warn("[VanduoLazyLoad] observe() requires a callback function.");return}if(y.has(d))return;let p=f&&f.threshold!=null?f.threshold:0,A=f&&f.rootMargin?f.rootMargin:"0px",_=new IntersectionObserver(function(k,w){k.forEach(function(x){if(x.isIntersecting){w.unobserve(x.target),y.delete(x.target),typeof window.VanduoLifecycle<"u"&&window.VanduoLifecycle.has(x.target,"lazyLoad")&&window.VanduoLifecycle.unregister(x.target,"lazyLoad");try{u(x.target)}catch(E){console.error("[VanduoLazyLoad] Callback threw:",E)}}})},{threshold:p,rootMargin:A});y.set(d,_),typeof window.VanduoLifecycle<"u"&&!window.VanduoLifecycle.has(d,"lazyLoad")&&window.VanduoLifecycle.register(d,"lazyLoad",[()=>{h.unobserve(d,{skipLifecycle:!0})}]),_.observe(d)},unobserve:function(d,u){let f=u||{},p=y.get(d);p&&(p.unobserve(d),typeof p.disconnect=="function"&&p.disconnect(),y.delete(d)),!f.skipLifecycle&&typeof window.VanduoLifecycle<"u"&&window.VanduoLifecycle.has(d,"lazyLoad")&&window.VanduoLifecycle.unregister(d,"lazyLoad")},unobserveAll:function(){Array.from(y.keys()).forEach(function(u){h.unobserve(u)})},loadSection:function(d,u,f){if(typeof d!="string"||!d){console.warn("[VanduoLazyLoad] loadSection() requires a non-empty URL string.");return}if(!(u instanceof Element)){console.warn("[VanduoLazyLoad] loadSection() requires a DOM Element as containerEl.");return}if(!r(d)){console.error("[VanduoLazyLoad] loadSection() blocked cross-origin URL:",d);return}let p=f||{},A=c(p.placeholder);i(u,A),l(u,"lazysection:loading",{url:d}),this.observe(u,function(){let _=new window.AbortController,k=setTimeout(function(){_.abort()},1e4);window.fetch(d,{signal:_.signal}).then(function(w){if(clearTimeout(k),!w.ok)throw new Error("HTTP "+w.status);return w.text()}).then(function(w){i(u,w),l(u,"lazysection:loaded",{url:d}),typeof window.Vanduo<"u"&&window.Vanduo.init(u),typeof p.onLoaded=="function"&&p.onLoaded(u)}).catch(function(w){let x=document.createElement("div");x.className="vd-alert vd-alert-error",x.setAttribute("role","alert");let E=document.createElement("span");E.textContent="Failed to load content. ";let L=document.createElement("small");for(L.style.opacity="0.7",L.textContent=w.message,x.appendChild(E),x.appendChild(L);u.firstChild;)u.removeChild(u.firstChild);u.appendChild(x),l(u,"lazysection:error",{url:d,error:w}),console.error("[VanduoLazyLoad] loadSection failed:",w),typeof p.onError=="function"&&p.onError(w)})},{threshold:p.threshold,rootMargin:p.rootMargin})},init:function(d){let u=this;s(d,"[data-vd-lazy]").forEach(function(p){if(y.has(p)||p.dataset.vdLazyState==="loading"||p.dataset.vdLazyState==="loaded")return;let A=p.getAttribute("data-vd-lazy");if(!A)return;p.dataset.vdLazyState="loading";let _=p.getAttribute("data-vd-lazy-placeholder")||"skeleton";u.loadSection(A,p,{placeholder:_,onLoaded:function(){p.dataset.vdLazyState="loaded"},onError:function(){p.dataset.vdLazyState="error"}})})},destroy:function(d){this.unobserve(d)},destroyAll:function(d){let u=t(d);if(u===document){this.unobserveAll();return}Array.from(y.keys()).forEach(p=>{n(u,p)&&this.unobserve(p)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("lazyLoad",h,{aliases:["LazyLoad"]}),window.VanduoLazyLoad=h})();(function(){"use strict";let y={observers:new Map,init:function(e){window.Vanduo.queryAll(e,"[data-glass-scroll]").forEach(t=>{this.observers.has(t)||this.initElement(t)})},initElement:function(e){let t=e.dataset.glassSentinel,n;if(t&&(n=document.querySelector(t)),n||(n=e.previousElementSibling),!n){e.classList.add("is-glass-active");return}let s=new IntersectionObserver(r=>{r.forEach(i=>{e.classList.toggle("is-glass-active",!i.isIntersecting)})},{threshold:0,rootMargin:"0px"});s.observe(n),this.observers.set(e,s)},destroy:function(e){let t=this.observers.get(e);t&&(t.disconnect(),this.observers.delete(e))},destroyAll:function(){this.observers.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("glassScroll",y),window.VanduoGlassScroll=y})();(function(){"use strict";let e={instances:new Map,init:function(t){window.Vanduo.queryAll(t,".vd-morph, [data-vd-morph]").forEach(function(s){e.instances.has(s)||s.getAttribute("data-vd-morph")!=="manual"&&e.initInstance(s)})},initInstance:function(t){e._ensureLayers(t);let n=[],s=!1,r=function(i){s||(e._runMorph(t,i,function(){s=!1}),s=!0)};t.addEventListener("click",r),n.push(function(){t.removeEventListener("click",r)}),this.instances.set(t,{cleanup:n})},morph:function(t){t&&(this.instances.has(t)||this.initInstance(t),this._runMorph(t,null,null))},destroy:function(t){let n=this.instances.get(t);n&&(n.cleanup.forEach(function(s){s()}),this.instances.delete(t))},destroyAll:function(){this.instances.forEach(function(t,n){e.destroy(n)})},_ensureLayers:function(t){if(!t.querySelector(".vd-morph-wave")){let n=document.createElement("span");n.className="vd-morph-wave",n.setAttribute("aria-hidden","true"),t.insertBefore(n,t.firstChild)}if(!t.querySelector(".vd-morph-shine")){let n=document.createElement("span");n.className="vd-morph-shine",n.setAttribute("aria-hidden","true");let s=t.querySelector(".vd-morph-wave");s&&s.nextSibling?t.insertBefore(n,s.nextSibling):t.insertBefore(n,t.firstChild)}},_runMorph:function(t,n,s){let r=t.querySelector(".vd-morph-wave");if(r){let o=t.getBoundingClientRect(),c=o.left+o.width/2,l=o.top+o.height/2,h=n&&n.clientX||c,d=n&&n.clientY||l;r.style.left=h-o.left+"px",r.style.top=d-o.top+"px"}t.classList.add("is-morphing");let i=750,a=getComputedStyle(t).getPropertyValue("--morph-duration");if(a){let o=parseFloat(a);isNaN(o)||(i=o*(a.indexOf("ms")!==-1?1:1e3))}setTimeout(function(){t.classList.remove("is-morphing");let o=t.querySelector(".vd-morph-current"),c=t.querySelector(".vd-morph-next");o&&c&&(o.classList.remove("vd-morph-current"),o.classList.add("vd-morph-next"),c.classList.remove("vd-morph-next"),c.classList.add("vd-morph-current")),typeof s=="function"&&s()},i)}};typeof window.Vanduo<"u"&&window.Vanduo.register("morph",e),window.VanduoMorph=e})();(function(){"use strict";let y={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-expanding-cards").forEach(function(t){t.getAttribute("data-vd-expanding-cards")!=="manual"&&(y.instances.has(t)||y.initContainer(t))})},initContainer:function(e){let t=[],n=function(){return Array.prototype.slice.call(e.querySelectorAll(".vd-expanding-card"))},s=function(c){let l=n();!c||l.indexOf(c)===-1||(l.forEach(function(h){h.classList.toggle("is-active",h===c)}),c.focus({preventScroll:!0}))},r=function(c){let l=c.target,h=l.closest?l.closest(".vd-expanding-card"):null;!h||!e.contains(h)||s(h)},i=function(c){if(c.key!=="ArrowLeft"&&c.key!=="ArrowRight"&&c.key!=="Home"&&c.key!=="End")return;let l=n().filter(function(u){return u.offsetParent!==null||u.getClientRects().length>0});if(!l.length)return;let h=document.activeElement,d=l.indexOf(h);d<0&&(d=l.findIndex(function(u){return u.classList.contains("is-active")})),d<0&&(d=0),c.key==="ArrowLeft"?(c.preventDefault(),s(l[Math.max(0,d-1)])):c.key==="ArrowRight"?(c.preventDefault(),s(l[Math.min(l.length-1,d+1)])):c.key==="Home"?(c.preventDefault(),s(l[0])):c.key==="End"&&(c.preventDefault(),s(l[l.length-1]))};e.addEventListener("click",r),t.push(function(){e.removeEventListener("click",r)}),e.addEventListener("keydown",i),t.push(function(){e.removeEventListener("keydown",i)}),n().forEach(function(c){c.hasAttribute("tabindex")||c.setAttribute("tabindex","0"),c.setAttribute("role","button"),c.hasAttribute("aria-pressed")||c.setAttribute("aria-pressed",c.classList.contains("is-active")?"true":"false")});let a=function(){n().forEach(function(c){c.setAttribute("aria-pressed",c.classList.contains("is-active")?"true":"false")})},o=new MutationObserver(a);o.observe(e,{attributes:!0,subtree:!0,attributeFilter:["class"]}),t.push(function(){o.disconnect()}),a(),y.instances.set(e,{cleanup:t})},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(function(n){n()}),this.instances.delete(e))},destroyAll:function(){this.instances.forEach(function(e,t){y.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("expandingCards",y),window.VanduoExpandingCards=y})();(function(){"use strict";function n(a){let o=0;for(let c=0;c<a.length&&a[c].classList.contains("is-revealed");c++)o++;return o}function s(a){return a.parentElement||document.body}function r(a,o,c){o.forEach(function(T){T.classList.remove("is-revealed")});let l=s(a),h=l.querySelector("[data-vd-timeline-prev]"),d=l.querySelector("[data-vd-timeline-next]"),u=l.querySelector("[data-vd-timeline-play]"),f=l.querySelector("[data-vd-timeline-pause]"),p=null,A=!1,_=0;function k(){let T=n(o),H=o.length;if(h){let I=T===0;h.disabled=I,h.setAttribute("aria-disabled",I?"true":"false")}if(d){let I=T>=H;d.disabled=I,d.setAttribute("aria-disabled",I?"true":"false")}u&&u.setAttribute("aria-pressed",A?"true":"false"),f&&(f.disabled=!A)}function w(){let T=n(o);T<o.length&&o[T].classList.add("is-revealed"),k()}function x(){let T=n(o);T>0&&o[T-1].classList.remove("is-revealed"),k()}function E(){let T=++_;p=setTimeout(function(){if(p=null,!(!A||T!==_)){if(n(o)>=o.length){S();return}if(w(),n(o)>=o.length){S();return}E()}},800)}function L(){A||(A=!0,E(),k())}function S(){A=!1,_++,p&&(clearTimeout(p),p=null),k()}function M(T,H){if(!T)return;let I=function(v){v.preventDefault(),H()};T.addEventListener("click",I),c.push(function(){T.removeEventListener("click",I)})}return M(h,x),M(d,w),M(u,L),M(f,S),c.push(function(){S()}),k(),{stepNext:w,stepPrev:x,play:L,pause:S}}let i={instances:new Map,init:function(a){window.Vanduo.queryAll(a,".vd-timeline.vd-timeline-animated").forEach(function(o){i.instances.has(o)||i.initInstance(o)})},reinit:function(a){i.destroyAll(a),i.init(a)},initInstance:function(a){let o=[],c=Array.prototype.filter.call(a.children,function(u){return u.classList&&u.classList.contains("vd-timeline-item")});if(c.forEach(function(u,f){let p=Math.min(f,7);u.style.setProperty("--vd-timeline-reveal-delay",p*140+"ms")}),typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches){c.forEach(function(u){u.classList.add("is-revealed")}),i.instances.set(a,{cleanup:o});return}if(a.classList&&a.classList.contains("vd-timeline-playback")){let u=r(a,c,o);i.instances.set(a,{cleanup:o,playback:u});return}if(typeof IntersectionObserver>"u"){c.forEach(function(u){u.classList.add("is-revealed")}),i.instances.set(a,{cleanup:o});return}let d=new IntersectionObserver(function(u){u.forEach(function(f){f.isIntersecting&&(f.target.classList.add("is-revealed"),d.unobserve(f.target))})},{root:null,rootMargin:"0px 0px -10% 0px",threshold:.15});c.forEach(function(u){d.observe(u)}),o.push(function(){d.disconnect()}),i.instances.set(a,{cleanup:o})},destroy:function(a){let o=this.instances.get(a);o&&(o.cleanup.forEach(function(c){c()}),this.instances.delete(a))},destroyAll:function(a){let o=window.Vanduo&&typeof window.Vanduo._normalizeRoot=="function"?window.Vanduo._normalizeRoot(a):document;this.instances.forEach(function(c,l){o!==document&&o!==l&&(!o.contains||!o.contains(l))||i.destroy(l)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("timeline",i),window.VanduoTimeline=i})();(function(){"use strict";let y={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-flow, .vd-carousel").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=e.querySelector(".vd-flow-track");if(!t)return;let n=Array.from(t.querySelectorAll(".vd-flow-slide"));if(n.length===0)return;let s=e.classList.contains("vd-flow-fade"),r=e.hasAttribute("data-vd-autoplay"),i=parseInt(e.getAttribute("data-vd-interval"),10)||5e3,a=e.getAttribute("data-vd-loop")!=="false",o={current:0,total:n.length,autoplayTimer:null,isFade:s,loop:a,isDragging:!1,startX:0,currentX:0,threshold:50},c=[];n.forEach((S,M)=>{S.setAttribute("role","group"),S.setAttribute("aria-roledescription","slide"),S.setAttribute("aria-label","Slide "+(M+1)+" of "+n.length),M===0&&S.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 h=(S,M)=>{M===void 0&&(M=!0);let T=S;o.loop?T=(S%o.total+o.total)%o.total:T=Math.max(0,Math.min(S,o.total-1));let H=o.current;o.current=T,o.isFade?n.forEach((v,D)=>{v.classList.toggle("is-active",D===T)}):t.style.transform="translateX(-"+T*100+"%)",e.querySelectorAll(".vd-flow-indicator").forEach((v,D)=>{v.classList.toggle("is-active",D===T),v.setAttribute("aria-selected",D===T?"true":"false")}),n.forEach((v,D)=>{v.setAttribute("aria-hidden",D!==T?"true":"false")}),M&&(l.textContent="Slide "+(T+1)+" of "+o.total),e.dispatchEvent(new CustomEvent("flow:change",{detail:{current:T,previous:H,total:o.total}}))},d=()=>h(o.current+1),u=()=>h(o.current-1),f=e.querySelector(".vd-flow-prev"),p=e.querySelector(".vd-flow-next");if(f){let S=()=>u();f.addEventListener("click",S),c.push(()=>f.removeEventListener("click",S))}if(p){let S=()=>d();p.addEventListener("click",S),c.push(()=>p.removeEventListener("click",S))}e.querySelectorAll(".vd-flow-indicator").forEach((S,M)=>{S.setAttribute("role","tab"),S.setAttribute("aria-selected",M===0?"true":"false"),S.setAttribute("aria-label","Go to slide "+(M+1));let T=()=>h(M);S.addEventListener("click",T),c.push(()=>S.removeEventListener("click",T))});let _=S=>{S.key==="ArrowLeft"&&(u(),S.preventDefault()),S.key==="ArrowRight"&&(d(),S.preventDefault())};e.setAttribute("tabindex","0"),e.addEventListener("keydown",_),c.push(()=>e.removeEventListener("keydown",_));let k=S=>{o.isDragging=!0,o.startX=S.clientX||S.touches&&S.touches[0].clientX||0,o.currentX=o.startX,e.classList.add("is-dragging")},w=S=>{o.isDragging&&(o.currentX=S.clientX||S.touches&&S.touches[0].clientX||0)},x=()=>{if(!o.isDragging)return;o.isDragging=!1,e.classList.remove("is-dragging");let S=o.startX-o.currentX;Math.abs(S)>o.threshold&&(S>0?d():u())};e.addEventListener("mousedown",k),e.addEventListener("mousemove",w),e.addEventListener("mouseup",x),e.addEventListener("mouseleave",x),e.addEventListener("touchstart",k,{passive:!0}),e.addEventListener("touchmove",w,{passive:!0}),e.addEventListener("touchend",x),c.push(()=>e.removeEventListener("mousedown",k),()=>e.removeEventListener("mousemove",w),()=>e.removeEventListener("mouseup",x),()=>e.removeEventListener("mouseleave",x),()=>e.removeEventListener("touchstart",k),()=>e.removeEventListener("touchmove",w),()=>e.removeEventListener("touchend",x));let E=()=>{L(),o.autoplayTimer=setInterval(d,i)},L=()=>{o.autoplayTimer&&(clearInterval(o.autoplayTimer),o.autoplayTimer=null)};if(r){E();let S=()=>L(),M=()=>E();e.addEventListener("mouseenter",S),e.addEventListener("mouseleave",M),e.addEventListener("focusin",S),e.addEventListener("focusout",M),c.push(()=>e.removeEventListener("mouseenter",S),()=>e.removeEventListener("mouseleave",M),()=>e.removeEventListener("focusin",S),()=>e.removeEventListener("focusout",M),()=>L())}h(0,!1),this.instances.set(e,{cleanup:c,goTo:h,next:d,prev:u,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",y),window.VanduoFlow=y})();(function(){"use strict";let y={instances:new Map,_globalCleanups:[],init:function(e){if(window.Vanduo.queryAll(e,"[data-vd-bubble], [data-vd-popover]").forEach(n=>{this.instances.has(n)||this.initInstance(n)}),this._globalCleanups.length===0){let n=r=>{this.instances.forEach((i,a)=>{!i.popover.contains(r.target)&&!a.contains(r.target)&&this.hide(a)})},s=r=>{r.key==="Escape"&&this.instances.forEach((i,a)=>this.hide(a))};document.addEventListener("click",n,!0),document.addEventListener("keydown",s),this._globalCleanups.push(()=>document.removeEventListener("click",n,!0),()=>document.removeEventListener("keydown",s))}},initInstance:function(e){let t=[],n=e.getAttribute("data-vd-bubble-placement")||e.getAttribute("data-vd-popover-placement")||"bottom",s=document.createElement("div");s.className="vd-bubble-content",s.setAttribute("role","dialog"),s.setAttribute("aria-modal","false"),s.setAttribute("data-placement",n);let r=e.getAttribute("data-vd-bubble-title")||e.getAttribute("data-vd-popover-title"),i=e.getAttribute("data-vd-bubble")||e.getAttribute("data-vd-popover")||"",a=e.getAttribute("data-vd-bubble-html")||e.getAttribute("data-vd-popover-html"),o=e.hasAttribute("data-vd-bubble-allow-svg")||e.hasAttribute("data-vd-popover-allow-svg");if(r){let d=document.createElement("div");d.className="vd-bubble-header";let u=document.createElement("span");u.textContent=r;let f=document.createElement("button");f.className="vd-bubble-close",f.setAttribute("aria-label","Close"),f.innerHTML="&times;",d.appendChild(u),d.appendChild(f),s.appendChild(d);let p=A=>{A.stopPropagation(),this.hide(e)};f.addEventListener("click",p),t.push(()=>f.removeEventListener("click",p))}let c=document.createElement("div");c.className="vd-bubble-body",a?typeof sanitizeHtml=="function"?c.innerHTML=sanitizeHtml(a,{allowSvg:o,allowStyle:!1}):c.textContent=a:c.textContent=i,s.appendChild(c),document.body.appendChild(s);let l="vd-bubble-"+Math.random().toString(36).slice(2,9);s.id=l,e.setAttribute("aria-haspopup","dialog"),e.setAttribute("aria-expanded","false"),e.setAttribute("aria-controls",l);let h=d=>{d.stopPropagation(),s.classList.contains("is-visible")?this.hide(e):(this.hideAll(),this.show(e))};e.addEventListener("click",h),t.push(()=>e.removeEventListener("click",h)),this.instances.set(e,{popover:s,cleanup:t,placement:n})},position:function(e,t,n){let s=e.getBoundingClientRect(),r=t.getBoundingClientRect(),i=10,a,o;switch(n){case"top":a=s.top-r.height-i+window.scrollY,o=s.left+(s.width-r.width)/2+window.scrollX;break;case"left":a=s.top+(s.height-r.height)/2+window.scrollY,o=s.left-r.width-i+window.scrollX;break;case"right":a=s.top+(s.height-r.height)/2+window.scrollY,o=s.right+i+window.scrollX;break;default:a=s.bottom+i+window.scrollY,o=s.left+(s.width-r.width)/2+window.scrollX}o=Math.max(8,Math.min(o,window.innerWidth-r.width-8)),a=Math.max(8,a),t.style.top=a+"px",t.style.left=o+"px"},show:function(e){let t=this.instances.get(e);if(!t)return;let{popover:n,placement:s}=t;n.style.display="block",n.classList.add("is-visible"),e.setAttribute("aria-expanded","true"),requestAnimationFrame(()=>{this.position(e,n,s)}),e.dispatchEvent(new CustomEvent("bubble:show",{bubbles:!0,detail:{trigger:e,placement:s}}))},hide:function(e){let t=this.instances.get(e);t&&(t.popover.classList.remove("is-visible"),e.setAttribute("aria-expanded","false"),e.dispatchEvent(new CustomEvent("bubble:hide",{bubbles:!0,detail:{trigger:e}})))},hideAll:function(){this.instances.forEach((e,t)=>this.hide(t))},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),t.popover.parentNode&&t.popover.parentNode.removeChild(t.popover),e.removeAttribute("aria-haspopup"),e.removeAttribute("aria-expanded"),e.removeAttribute("aria-controls"),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t)),this._globalCleanups.forEach(e=>e()),this._globalCleanups=[]}};typeof window.Vanduo<"u"&&window.Vanduo.register("bubble",y),window.VanduoBubble=y})();(function(){"use strict";let y={instances:new Map,init:function(e){window.Vanduo.queryAll(e,"[data-vd-waypoint-nav], [data-vd-scrollspy-nav]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=Array.from(e.querySelectorAll('a[href^="#"]'));if(t.length===0)return;let n=[],s=parseInt(e.getAttribute("data-vd-waypoint-offset")||"80",10),r=[];if(t.forEach(l=>{let h=l.getAttribute("href").slice(1),d=document.getElementById(h);d&&(d.setAttribute("data-vd-waypoint-section",""),r.push({id:h,link:l,section:d}))}),r.length===0)return;let i=new Set,a=l=>{t.forEach(d=>d.classList.remove("is-active"));let h=t.find(d=>d.getAttribute("href")==="#"+l);h&&(h.classList.add("is-active"),e.dispatchEvent(new CustomEvent("waypoint:change",{detail:{activeId:l,link:h}})))},o="-"+s+"px 0px -40% 0px",c=new IntersectionObserver(l=>{l.forEach(h=>{h.isIntersecting?i.add(h.target.id):i.delete(h.target.id)});for(let h=0;h<r.length;h++)if(i.has(r[h].id)){a(r[h].id);return}},{rootMargin:o,threshold:0});r.forEach(l=>c.observe(l.section)),t.forEach(l=>{let h=d=>{d.preventDefault();let u=l.getAttribute("href").slice(1),f=document.getElementById(u);f&&(f.scrollIntoView({behavior:"smooth"}),a(u))};l.addEventListener("click",h),n.push(()=>l.removeEventListener("click",h))}),n.push(()=>c.disconnect()),this.instances.set(e,{observer:c,cleanup:n,sections:r,setActive:a})},refresh:function(e){this.destroy(e),this.initInstance(e)},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("waypoint",y),window.VanduoWaypoint=y})();(function(){"use strict";let y={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-ripple, [data-vd-ripple]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[],n=s=>{let r=e.getBoundingClientRect(),i=Math.max(r.width,r.height),a=(s.clientX||s.touches&&s.touches[0].clientX||r.left+r.width/2)-r.left-i/2,o=(s.clientY||s.touches&&s.touches[0].clientY||r.top+r.height/2)-r.top-i/2,c=document.createElement("span");c.className="vd-ripple-wave",c.style.width=i+"px",c.style.height=i+"px",c.style.left=a+"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",y),window.VanduoRipple=y})();(function(){"use strict";function y(n){if(!n||n===document.body)return!1;let s=window.getComputedStyle(n),r=s.overflowY,i=s.overflowX,a=/(auto|scroll|overlay)/.test(r)&&n.scrollHeight>n.clientHeight,o=/(auto|scroll|overlay)/.test(i)&&n.scrollWidth>n.clientWidth;return a||o}function e(n){let s=n.parentElement;for(;s&&s!==document.body&&s!==document.documentElement;){if(y(s))return s;s=s.parentElement}return null}let t={instances:new Map,init:function(n){window.Vanduo.queryAll(n,".vd-affix, .vd-sticky, [data-vd-affix]").forEach(r=>{this.instances.has(r)||this.initInstance(r)})},initInstance:function(n){let s=[],r=parseInt(n.getAttribute("data-vd-affix-offset")||"0",10),i=Number.isNaN(r)?0:r,a=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",i+"px");function l(){o||(o=!0,n.classList.add("is-stuck"),n.dispatchEvent(new CustomEvent("affix:stuck",{bubbles:!0,detail:{offset:i,root:a||window}})))}function h(){o&&(o=!1,n.classList.remove("is-stuck"),n.dispatchEvent(new CustomEvent("affix:unstuck",{bubbles:!0,detail:{offset:i,root:a||window}})))}let d=new IntersectionObserver(function(u){u.forEach(f=>{f.isIntersecting?h():l()})},{root:a,rootMargin:"-"+i+"px 0px 0px 0px",threshold:0});d.observe(c),s.push(()=>d.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:d,sentinel:c,scrollParent:a})},destroy:function(n){let s=this.instances.get(n);s&&(s.cleanup.forEach(r=>r()),n.classList.remove("is-stuck"),this.instances.delete(n))},destroyAll:function(){this.instances.forEach((n,s)=>this.destroy(s))}};typeof window.Vanduo<"u"&&window.Vanduo.register("affix",t),window.VanduoAffix=t})();(function(){"use strict";function y(n){let s=document.createElement("div");return s.textContent=n,s.innerHTML}function e(n,s){try{let r=new URL(n,window.location.href);return r.origin===window.location.origin?!0:s.includes(r.origin)}catch{return!1}}let t={instances:new Map,init:function(n){window.Vanduo.queryAll(n,"[data-vd-suggest], [data-vd-autocomplete]").forEach(r=>{this.instances.has(r)||this.initInstance(r)})},initInstance:function(n){let s=[],r=parseInt(n.getAttribute("data-vd-suggest-min-chars")||"1",10),i=n.getAttribute("data-vd-suggest-url")||"",o=(n.getAttribute("data-vd-suggest-allowlist")||"").split(",").map(I=>I.trim()).filter(Boolean),c=n.getAttribute("data-vd-suggest")||n.getAttribute("data-vd-autocomplete")||"",l=[];try{l=JSON.parse(c)}catch{l=c.split(",").map(v=>v.trim()).filter(Boolean)}let h=n.closest(".vd-suggest-wrapper, .vd-autocomplete-wrapper");h||(h=document.createElement("div"),h.className="vd-suggest-wrapper",n.parentNode.insertBefore(h,n),h.appendChild(n));let d=document.createElement("ul");d.className="vd-suggest-list",d.setAttribute("role","listbox");let u="vd-suggest-"+Math.random().toString(36).slice(2,9);d.id=u,h.appendChild(d),n.setAttribute("role","combobox"),n.setAttribute("aria-autocomplete","list"),n.setAttribute("aria-expanded","false"),n.setAttribute("aria-controls",u),n.setAttribute("autocomplete","off");let f=-1,p=[],A=null,_=(I,v)=>{if(d.innerHTML="",p=I,f=-1,I.length===0){let D=document.createElement("li");D.className="vd-suggest-empty",D.textContent="No results",d.appendChild(D);return}I.forEach((D,q)=>{let N=document.createElement("li");N.className="vd-suggest-item",N.setAttribute("role","option"),N.id=u+"-item-"+q;let B=typeof D=="object"&&(D.label||D.text)||String(D);if(v){let Y=y(B),Z=new RegExp("("+v.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+")","gi");N.innerHTML=Y.replace(Z,'<span class="vd-suggest-match">$1</span>')}else N.textContent=B;N.addEventListener("click",()=>x(q)),d.appendChild(N)})},k=()=>{d.classList.add("is-open"),n.setAttribute("aria-expanded","true")},w=()=>{d.classList.remove("is-open"),n.setAttribute("aria-expanded","false"),f=-1,n.removeAttribute("aria-activedescendant")},x=I=>{let v=p[I],D=typeof v=="object"&&(v.value||v.label)||String(v);n.value=D,w(),n.dispatchEvent(new CustomEvent("suggest:select",{detail:{value:D,item:v,index:I},bubbles:!0}))},E=I=>{let v=d.querySelectorAll(".vd-suggest-item");v.forEach(D=>D.classList.remove("is-highlighted")),I>=0&&I<v.length&&(f=I,v[I].classList.add("is-highlighted"),n.setAttribute("aria-activedescendant",v[I].id),v[I].scrollIntoView({block:"nearest"}))},L=async I=>{if(I.length<r){w();return}let v;if(i)try{if(!e(i,o))console.warn("[VanduoSuggest] Blocked non-allowlisted URL:",i),v=[];else{let D=i.includes("?")?"&":"?";v=await(await window.fetch(i+D+"q="+encodeURIComponent(I))).json()}}catch{v=[]}else{let D=I.toLowerCase();v=l.filter(q=>(typeof q=="object"&&(q.label||q.text)||String(q)).toLowerCase().includes(D))}_(v,I),v.length>0,k()},S=()=>{clearTimeout(A),A=setTimeout(()=>L(n.value),200)},M=I=>{if(!d.classList.contains("is-open")){I.key==="ArrowDown"&&(L(n.value),I.preventDefault());return}let v=p.length;switch(I.key){case"ArrowDown":I.preventDefault(),E(f<v-1?f+1:0);break;case"ArrowUp":I.preventDefault(),E(f>0?f-1:v-1);break;case"Enter":I.preventDefault(),f>=0&&x(f);break;case"Escape":w();break}},T=()=>{setTimeout(w,200)},H=()=>{n.value.length>=r&&L(n.value)};n.addEventListener("input",S),n.addEventListener("keydown",M),n.addEventListener("blur",T),n.addEventListener("focus",H),s.push(()=>n.removeEventListener("input",S),()=>n.removeEventListener("keydown",M),()=>n.removeEventListener("blur",T),()=>n.removeEventListener("focus",H),()=>clearTimeout(A),()=>{d.parentNode&&d.parentNode.removeChild(d)}),this.instances.set(n,{cleanup:s,list:d,close:w})},destroy:function(n){let s=this.instances.get(n);s&&(s.cleanup.forEach(r=>r()),this.instances.delete(n))},destroyAll:function(){this.instances.forEach((n,s)=>this.destroy(s))}};typeof window.Vanduo<"u"&&window.Vanduo.register("suggest",t),window.VanduoSuggest=t})();(function(){"use strict";let y={instances:new Map,rules:{required:e=>e.trim().length>0,email:e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e),url:e=>{try{return new URL(e),!0}catch{return!1}},number:e=>!isNaN(parseFloat(e))&&isFinite(e),min:(e,t)=>e.length>=parseInt(t,10),max:(e,t)=>e.length<=parseInt(t,10),minVal:(e,t)=>parseFloat(e)>=parseFloat(t),maxVal:(e,t)=>parseFloat(e)<=parseFloat(t),pattern:(e,t)=>{try{return t.length>100?!1:new RegExp(t).test(e)}catch{return!1}},match:(e,t)=>{try{let n=typeof CSS<"u"&&CSS.escape?CSS.escape(t):t,s=document.querySelector('[name="'+n+'"]');return s?e===s.value:!1}catch{return!1}}},messages:{required:"This field is required",email:"Please enter a valid email address",url:"Please enter a valid URL",number:"Please enter a valid number",min:"Minimum {0} characters required",max:"Maximum {0} characters allowed",minVal:"Value must be at least {0}",maxVal:"Value must be at most {0}",pattern:"Invalid format",match:"Fields do not match"},init:function(e){window.Vanduo.queryAll(e,"[data-vd-validate], .vd-validate").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[],n=e.getAttribute("data-vd-validate-mode")||"blur",s=e.querySelectorAll("[data-vd-rules]"),r=o=>{let l=(o.getAttribute("data-vd-rules")||"").split("|").map(u=>u.trim()).filter(Boolean),h=o.value,d=[];for(let u of l){let[f,...p]=u.split(":"),A=p.join(":"),_=this.rules[f];if(_&&!_(h,A)){let w=o.getAttribute("data-vd-msg-"+f)||this.messages[f]||"Invalid";A&&(w=w.replace("{0}",A)),d.push(w);break}}return this.setFieldState(o,d),d.length===0},i=()=>{let o=!0;return s.forEach(c=>{r(c)||(o=!1)}),o};s.forEach(o=>{if(n==="input"||n==="blur"){let c=n==="input"?"input":"blur",l=()=>r(o);if(o.addEventListener(c,l),t.push(()=>o.removeEventListener(c,l)),n==="blur"){let h=()=>{(o.classList.contains("is-invalid")||o.classList.contains("is-valid"))&&r(o)};o.addEventListener("input",h),t.push(()=>o.removeEventListener("input",h))}}});let a=o=>{let c=i();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",a),t.push(()=>e.removeEventListener("submit",a)),this.instances.set(e,{cleanup:t,validateAll:i,validateField:r})},setFieldState:function(e,t){let n=e.closest(".vd-form-group")||e.parentElement,s=n.querySelector(".vd-validate-error");e.classList.remove("is-valid","is-invalid"),t.length>0?(e.classList.add("is-invalid"),e.setAttribute("aria-invalid","true"),s||(s=document.createElement("div"),s.className="vd-validate-error",s.id="vd-err-"+Math.random().toString(36).slice(2,9),s.setAttribute("role","alert"),n.appendChild(s)),s.textContent=t[0],s.style.display="",e.setAttribute("aria-describedby",s.id)):e.value.trim()?(e.classList.add("is-valid"),e.removeAttribute("aria-invalid"),s&&(s.style.display="none")):(e.removeAttribute("aria-invalid"),s&&(s.style.display="none"))},validateForm:function(e){let t=this.instances.get(e);return t?t.validateAll():!1},addRule:function(e,t,n){this.rules[e]=t,n&&(this.messages[e]=n)},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("validate",y),window.VanduoValidate=y})();(function(){"use strict";let y=["Su","Mo","Tu","We","Th","Fr","Sa"],e=["January","February","March","April","May","June","July","August","September","October","November","December"];function t(u){return u.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function n(u){let f="^",p=[],A=0;for(;A<u.length;){let _=u.slice(A);_.toLowerCase().startsWith("yyyy")?(f+="(\\d{4})",p.push("y"),A+=4):_.toLowerCase().startsWith("mm")?(f+="(\\d{2})",p.push("m"),A+=2):_.toLowerCase().startsWith("dd")?(f+="(\\d{2})",p.push("d"),A+=2):(f+=t(u[A]),A++)}return f+="$",{regex:new RegExp(f),order:p}}function s(u,f){if(!u||!f)return null;let{regex:p,order:A}=n(f),_=u.trim().match(p);if(!_)return null;let k,w,x,E=1;for(let S=0;S<A.length;S++){let M=A[S],T=parseInt(_[E++],10);if(Number.isNaN(T))return null;M==="y"?k=T:M==="m"?w=T-1:M==="d"&&(x=T)}if(k===void 0||w===void 0||x===void 0)return null;let L=new Date(k,w,x);return L.getFullYear()!==k||L.getMonth()!==w||L.getDate()!==x?null:L}function r(u,f){let p=String(u.getFullYear()),A=String(u.getMonth()+1).padStart(2,"0"),_=String(u.getDate()).padStart(2,"0"),k="",w=0;for(;w<f.length;){let x=f.slice(w);x.toLowerCase().startsWith("yyyy")?(k+=p,w+=4):x.toLowerCase().startsWith("mm")?(k+=A,w+=2):x.toLowerCase().startsWith("dd")?(k+=_,w+=2):(k+=f[w],w++)}return k}function i(u){return u.getFullYear()+"-"+String(u.getMonth()+1).padStart(2,"0")+"-"+String(u.getDate()).padStart(2,"0")}function a(u,f){let p=new Date(u.getFullYear(),u.getMonth(),u.getDate());return p.setDate(p.getDate()+f),p}function o(u,f){return new Date(u.getFullYear(),u.getMonth()+f,u.getDate())}function c(u){if(!u||typeof u!="string")return null;let f=/^(\d{4})-(\d{2})-(\d{2})$/.exec(u.trim());if(!f)return null;let p=+f[1],A=+f[2]-1,_=+f[3],k=new Date(p,A,_);return k.getFullYear()!==p||k.getMonth()!==A||k.getDate()!==_?null:k}function l(u){let f=new Date(u.getFullYear(),u.getMonth(),u.getDate()),p=f.getDay();return f.setDate(f.getDate()-p),f}function h(u){let f=new Date(u.getFullYear(),u.getMonth(),u.getDate()),p=f.getDay();return f.setDate(f.getDate()+(6-p)),f}let d={instances:new Map,init:function(u){window.Vanduo.queryAll(u,"[data-vd-datepicker]").forEach(p=>{this.instances.has(p)||this.initInstance(p)})},initInstance:function(u){let f=[],p=u.getAttribute("data-vd-datepicker-format")||"YYYY-MM-DD",A=u.getAttribute("data-vd-datepicker-min"),_=u.getAttribute("data-vd-datepicker-max"),k=A?c(A):null,w=_?c(_):null,x=new Date,E=x.getFullYear(),L=x.getMonth(),S=null,M="days",T=null,H=!1,I=P=>!!(k&&new Date(P.getFullYear(),P.getMonth(),P.getDate()).getTime()<k.getTime()||w&&new Date(P.getFullYear(),P.getMonth(),P.getDate()).getTime()>w.getTime()),v=(P,m)=>{if(!k&&!w)return{y:P,m};let g=new Date(P,m,1),b=new Date(P,m+1,0);return k&&b.getTime()<k.getTime()?{y:k.getFullYear(),m:k.getMonth()}:w&&g.getTime()>w.getTime()?{y:w.getFullYear(),m:w.getMonth()}:{y:P,m}},D=(P,m)=>{let g=new Date(P,m+1,0).getDate();for(let b=1;b<=g;b++){let C=new Date(P,m,b);if(!I(C))return C}return new Date(P,m,1)};if(u.value){let P=u.value.trim(),m=s(P,p);if(!m){let g=new Date(P);isNaN(g.getTime())||(m=g)}m&&(S=m,E=m.getFullYear(),L=m.getMonth())}let q=v(E,L);E=q.y,L=q.m;let N=document.createElement("div");N.className="vd-datepicker-popup",N.setAttribute("role","dialog"),N.setAttribute("aria-label","Choose date"),N.tabIndex=-1;let B=document.createElement("div");B.className="vd-suggest-wrapper",B.style.position="relative",B.style.display="inline-block",u.parentNode.insertBefore(B,u),B.appendChild(u),B.appendChild(N);let Y=(P,m)=>P&&m&&P.getFullYear()===m.getFullYear()&&P.getMonth()===m.getMonth()&&P.getDate()===m.getDate(),Z=P=>{S=P,E=P.getFullYear(),L=P.getMonth(),u.value=r(P,p),H=!0,j(),u.dispatchEvent(new CustomEvent("datepicker:select",{detail:{date:P,formatted:u.value},bubbles:!0})),u.dispatchEvent(new Event("change",{bubbles:!0})),u.focus()},te=()=>{if(M!=="days"||!T)return;let P=i(T),m=N.querySelector('[data-vd-date="'+P+'"]');m&&!m.classList.contains("is-outside")&&m.getAttribute("aria-disabled")!=="true"&&m.focus()},J=(P,m,g)=>{let b=new Date(P.getFullYear(),P.getMonth(),P.getDate()),C=m>0?1:-1;for(let V=0;V<g;V++){if(!I(b))return b;b=a(b,C)}return P},oe=(P,m,g)=>{let b=document.createElement("button");if(b.type="button",b.className="vd-datepicker-day",b.textContent=P,b.setAttribute("role","gridcell"),m)return b.classList.add("is-outside"),b.tabIndex=-1,b.setAttribute("aria-disabled","true"),b;if(b.setAttribute("data-vd-date",i(g)),g&&Y(g,x)&&b.classList.add("is-today"),g&&Y(g,S)&&b.classList.add("is-selected"),g&&I(g))return b.classList.add("is-disabled"),b.setAttribute("aria-disabled","true"),b.tabIndex=-1,b;if(g){let C=T&&Y(g,T);b.tabIndex=C?0:-1,b.addEventListener("click",()=>{S=g,E=g.getFullYear(),L=g.getMonth(),T=new Date(g.getFullYear(),g.getMonth(),g.getDate()),u.value=r(g,p),H=!0,j(),u.dispatchEvent(new CustomEvent("datepicker:select",{detail:{date:g,formatted:u.value},bubbles:!0})),u.dispatchEvent(new Event("change",{bubbles:!0})),u.focus()})}return b},$=()=>{N.innerHTML="";let P=document.createElement("div");P.className="vd-datepicker-header";let m=document.createElement("button");m.type="button",m.className="vd-datepicker-prev",m.innerHTML="&#8249;",m.setAttribute("aria-label","Previous");let g=document.createElement("button");g.type="button",g.className="vd-datepicker-next",g.innerHTML="&#8250;",g.setAttribute("aria-label","Next");let b=document.createElement("span");if(b.className="vd-datepicker-title",M==="days")b.textContent=e[L]+" "+E,b.addEventListener("click",()=>{M="months",$()}),m.addEventListener("click",()=>{L--,L<0&&(L=11,E--),$()}),g.addEventListener("click",()=>{L++,L>11&&(L=0,E++),$()});else if(M==="months")b.textContent=String(E),b.addEventListener("click",()=>{M="years",$()}),m.addEventListener("click",()=>{E--,$()}),g.addEventListener("click",()=>{E++,$()});else{let C=Math.floor(E/10)*10;b.textContent=C+" - "+(C+9),m.addEventListener("click",()=>{E-=10,$()}),g.addEventListener("click",()=>{E+=10,$()})}if(P.appendChild(m),P.appendChild(b),P.appendChild(g),N.appendChild(P),M==="days"){let C=document.createElement("div");C.className="vd-datepicker-grid",C.setAttribute("role","grid"),C.setAttribute("aria-label","Calendar");let V=document.createElement("div");V.className="vd-datepicker-weekdays",V.setAttribute("role","row"),y.forEach(function(O){let U=document.createElement("span");U.setAttribute("role","columnheader"),U.setAttribute("aria-label",O),U.textContent=O,V.appendChild(U)}),C.appendChild(V);let z=new Date(E,L,1).getDay(),R=new Date(E,L+1,0).getDate(),X=new Date(E,L,0).getDate(),F=[];for(let O=z-1;O>=0;O--){let U=X-O,Q=L===0?11:L-1,ee=L===0?E-1:E,re=new Date(ee,Q,U);F.push({day:U,outside:!0,date:re})}for(let O=1;O<=R;O++){let U=new Date(E,L,O);F.push({day:O,outside:!1,date:U})}let G=z+R,W=G%7===0?0:7-G%7;for(let O=1;O<=W;O++){let U=new Date(E,L+1,O);F.push({day:O,outside:!0,date:U})}for(let O=0;O<F.length;O+=7){let U=document.createElement("div");U.className="vd-datepicker-row",U.setAttribute("role","row");for(let Q=0;Q<7;Q++){let ee=F[O+Q];U.appendChild(oe(ee.day,ee.outside,ee.date))}C.appendChild(U)}N.appendChild(C)}else if(M==="months"){let C=document.createElement("div");C.className="vd-datepicker-months",e.forEach((V,z)=>{let R=document.createElement("button");R.type="button",R.className="vd-datepicker-month-btn",R.textContent=V.slice(0,3),S&&S.getFullYear()===E&&S.getMonth()===z&&R.classList.add("is-selected"),R.addEventListener("click",()=>{L=z,M="days",$()}),C.appendChild(R)}),N.appendChild(C)}else{let C=document.createElement("div");C.className="vd-datepicker-years";let V=Math.floor(E/10)*10;for(let z=V-1;z<=V+10;z++){let R=document.createElement("button");R.type="button",R.className="vd-datepicker-year-btn",R.textContent=z,S&&S.getFullYear()===z&&R.classList.add("is-selected"),(z<V||z>V+9)&&(R.style.opacity="0.4"),R.addEventListener("click",()=>{E=z,M="months",$()}),C.appendChild(R)}N.appendChild(C)}},K=P=>{if(!N.classList.contains("is-open")||M!=="days")return;let m=N.querySelector(".vd-datepicker-grid");if(!m||!m.contains(P.target))return;let g=P.key;if(g!=="ArrowLeft"&&g!=="ArrowRight"&&g!=="ArrowUp"&&g!=="ArrowDown"&&g!=="Home"&&g!=="End"&&g!=="PageUp"&&g!=="PageDown"&&g!=="Enter"&&g!==" "&&g!=="Escape")return;if(g==="Escape"){P.preventDefault(),P.stopPropagation(),H=!0,j(),u.focus();return}if(T||(T=D(E,L)),g==="Enter"||g===" "){P.preventDefault(),T&&!I(T)&&Z(new Date(T.getFullYear(),T.getMonth(),T.getDate()));return}P.preventDefault();let b=new Date(T.getFullYear(),T.getMonth(),T.getDate()),C=1;if(g==="ArrowLeft"?(b=a(b,-1),C=-1):g==="ArrowRight"?(b=a(b,1),C=1):g==="ArrowUp"?(b=a(b,-7),C=-1):g==="ArrowDown"?(b=a(b,7),C=1):g==="Home"?(b=l(b),C=1):g==="End"?(b=h(b),C=-1):g==="PageUp"?(b=o(b,-1),C=-1):g==="PageDown"&&(b=o(b,1),C=1),b=J(b,C,400),b.getMonth()!==L||b.getFullYear()!==E){E=b.getFullYear(),L=b.getMonth();let V=v(E,L);E=V.y,L=V.m}T=b,$(),requestAnimationFrame(te)},ne=()=>{M="days",S&&(E=S.getFullYear(),L=S.getMonth());let P=v(E,L);E=P.y,L=P.m,S?T=new Date(S.getFullYear(),S.getMonth(),S.getDate()):T=D(E,L),$(),N.classList.add("is-open"),u.setAttribute("aria-expanded","true"),requestAnimationFrame(te)},j=()=>{N.classList.remove("is-open"),u.setAttribute("aria-expanded","false"),M="days"},se=()=>{if(H){H=!1;return}ne()},ie=P=>{B.contains(P.target)||j()},ae=P=>{P.key==="Escape"&&N.classList.contains("is-open")&&(H=!0,j(),u.focus())};u.addEventListener("focus",se),document.addEventListener("click",ie,!0),document.addEventListener("keydown",ae),N.addEventListener("keydown",K),u.setAttribute("aria-haspopup","dialog"),u.setAttribute("aria-expanded","false"),u.setAttribute("autocomplete","off"),f.push(()=>u.removeEventListener("focus",se),()=>document.removeEventListener("click",ie,!0),()=>document.removeEventListener("keydown",ae),()=>N.removeEventListener("keydown",K)),this.instances.set(u,{cleanup:f,open:ne,close:j,popup:N})},destroy:function(u){let f=this.instances.get(u);f&&(f.cleanup.forEach(p=>p()),this.instances.delete(u))},destroyAll:function(){this.instances.forEach((u,f)=>this.destroy(f))}};typeof window.Vanduo<"u"&&window.Vanduo.register("datepicker",d),window.VanduoDatepicker=d})();(function(){"use strict";let y={instances:new Map,init:function(e){window.Vanduo.queryAll(e,"[data-vd-timepicker]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[],n=e.getAttribute("data-vd-timepicker-format")==="24h",s=parseInt(e.getAttribute("data-vd-timepicker-step")||"30",10),r=e.closest(".vd-suggest-wrapper");r||(r=document.createElement("div"),r.style.position="relative",r.style.display="inline-block",e.parentNode.insertBefore(r,e),r.appendChild(e));let i=document.createElement("div");i.className="vd-timepicker-popup",i.setAttribute("role","listbox"),r.appendChild(i);let a=[];for(let f=0;f<24;f++)for(let p=0;p<60;p+=s){let A=String(f).padStart(2,"0"),_=String(p).padStart(2,"0");if(n)a.push({display:A+":"+_,value:A+":"+_});else{let k=f<12?"AM":"PM",x=(f===0?12:f>12?f-12:f)+":"+_+" "+k;a.push({display:x,value:A+":"+_})}}let o=()=>{i.innerHTML="",a.forEach(f=>{let p=document.createElement("div");p.className="vd-timepicker-item",p.setAttribute("role","option"),p.textContent=f.display,(e.value===f.value||e.value===f.display)&&p.classList.add("is-selected"),p.addEventListener("click",()=>{e.value=f.display,i.querySelectorAll(".vd-timepicker-item").forEach(A=>A.classList.remove("is-selected")),p.classList.add("is-selected"),l(),e.dispatchEvent(new CustomEvent("timepicker:select",{detail:{display:f.display,value:f.value},bubbles:!0})),e.dispatchEvent(new Event("change",{bubbles:!0}))}),i.appendChild(p)})},c=()=>{o(),i.classList.add("is-open"),e.setAttribute("aria-expanded","true");let f=i.querySelector(".is-selected");f&&f.scrollIntoView({block:"center"})},l=()=>{i.classList.remove("is-open"),e.setAttribute("aria-expanded","false")},h=()=>c(),d=f=>{r.contains(f.target)||l()},u=f=>{f.key==="Escape"&&l()};e.addEventListener("focus",h),document.addEventListener("click",d,!0),document.addEventListener("keydown",u),e.setAttribute("aria-haspopup","listbox"),e.setAttribute("aria-expanded","false"),e.setAttribute("autocomplete","off"),e.readOnly=!0,t.push(()=>e.removeEventListener("focus",h),()=>document.removeEventListener("click",d,!0),()=>document.removeEventListener("keydown",u)),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",y),window.VanduoTimepicker=y})();(function(){"use strict";let y={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-stepper").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[],n=Array.from(e.querySelectorAll(".vd-stepper-item")),s=e.classList.contains("vd-stepper-clickable"),r=n.findIndex(a=>a.classList.contains("is-active"));r===-1&&(r=0);let i=a=>{if(a<0||a>=n.length)return;let o=r;r=a,n.forEach((c,l)=>{c.classList.remove("is-active","is-completed"),l<a?c.classList.add("is-completed"):l===a&&c.classList.add("is-active")}),e.dispatchEvent(new CustomEvent("stepper:change",{detail:{current:a,previous:o,total:n.length},bubbles:!0}))};s&&n.forEach((a,o)=>{let c=()=>i(o);a.addEventListener("click",c),t.push(()=>a.removeEventListener("click",c))}),i(r),this.instances.set(e,{cleanup:t,setStep:i,next:()=>i(r+1),prev:()=>i(r-1),getCurrent:()=>r})},setStep:function(e,t){let n=this.instances.get(e);n&&n.setStep(t)},next:function(e){let t=this.instances.get(e);t&&t.next()},prev:function(e){let t=this.instances.get(e);t&&t.prev()},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("stepper",y),window.VanduoStepper=y})();(function(){"use strict";let y={instances:new Map,init:function(e){window.Vanduo.queryAll(e,"[data-vd-rating]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[],n=parseInt(e.getAttribute("data-vd-rating-max")||"5",10),s=parseFloat(e.getAttribute("data-vd-rating-value")||"0"),r=e.classList.contains("vd-rating-readonly")||e.hasAttribute("data-vd-rating-readonly"),i=s;e.classList.add("vd-rating"),e.setAttribute("role","radiogroup"),e.setAttribute("aria-label",e.getAttribute("aria-label")||"Rating"),e.innerHTML="";let a=[];for(let l=1;l<=n;l++){let h=document.createElement("button");h.type="button",h.className="vd-rating-star",h.setAttribute("role","radio"),h.setAttribute("aria-label",l+" star"+(l>1?"s":"")),h.setAttribute("aria-checked",l<=i?"true":"false"),r&&(h.tabIndex=-1),a.push(h),e.appendChild(h)}let o=document.createElement("span");o.className="vd-rating-value",o.textContent=i>0?i.toString():"",e.appendChild(o);let c=l=>{a.forEach((h,d)=>{h.classList.remove("is-active","is-half");let u=d+1;u<=Math.floor(l)?h.classList.add("is-active"):u-.5<=l&&h.classList.add("is-half"),h.setAttribute("aria-checked",u<=l?"true":"false")}),o.textContent=l>0?l.toString():""};if(c(i),!r){a.forEach((h,d)=>{let u=()=>{a.forEach((A,_)=>{A.classList.toggle("is-hovered",_<=d)})},f=()=>{a.forEach(A=>A.classList.remove("is-hovered"))},p=()=>{i=d+1,e.setAttribute("data-vd-rating-value",i),c(i),e.dispatchEvent(new CustomEvent("rating:change",{detail:{value:i,max:n},bubbles:!0}))};h.addEventListener("mouseenter",u),h.addEventListener("mouseleave",f),h.addEventListener("click",p),t.push(()=>h.removeEventListener("mouseenter",u),()=>h.removeEventListener("mouseleave",f),()=>h.removeEventListener("click",p))});let l=h=>{h.key==="ArrowRight"||h.key==="ArrowUp"?(h.preventDefault(),i<n&&(i++,c(i),a[i-1].focus(),e.dispatchEvent(new CustomEvent("rating:change",{detail:{value:i,max:n},bubbles:!0})))):(h.key==="ArrowLeft"||h.key==="ArrowDown")&&(h.preventDefault(),i>1&&(i--,c(i),a[i-1].focus(),e.dispatchEvent(new CustomEvent("rating:change",{detail:{value:i,max:n},bubbles:!0}))))};e.addEventListener("keydown",l),t.push(()=>e.removeEventListener("keydown",l))}this.instances.set(e,{cleanup:t,getValue:()=>i,setValue:l=>{i=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",y),window.VanduoRating=y})();(function(){"use strict";let y={instances:new Map,init:function(e){window.Vanduo.queryAll(e,"[data-vd-transfer]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[];e.classList.add("vd-transfer");let n,s;try{n=JSON.parse(e.getAttribute("data-vd-transfer")||"[]").map((u,f)=>({id:u.id||"item-"+f,label:u.label||u.text||String(u),selected:!1}))}catch{n=[]}s=[];let r=new Set,i=new Set,a=()=>{e.innerHTML="";let d=o("Source",n,r,"source"),u=document.createElement("div");u.className="vd-transfer-actions";let f=document.createElement("button");f.type="button",f.className="vd-transfer-btn",f.innerHTML="&#8250;",f.setAttribute("aria-label","Move to target"),f.disabled=r.size===0,f.addEventListener("click",()=>c());let p=document.createElement("button");p.type="button",p.className="vd-transfer-btn",p.innerHTML="&#8249;",p.setAttribute("aria-label","Move to source"),p.disabled=i.size===0,p.addEventListener("click",()=>l()),u.appendChild(f),u.appendChild(p);let A=o("Target",s,i,"target");e.appendChild(d),e.appendChild(u),e.appendChild(A)},o=(d,u,f,p)=>{let A=document.createElement("div");A.className="vd-transfer-panel";let _=document.createElement("div");_.className="vd-transfer-header";let k=document.createElement("span");k.textContent=d;let w=document.createElement("span");w.className="vd-transfer-count",w.textContent=f.size+"/"+u.length,_.appendChild(k),_.appendChild(w),A.appendChild(_);let x=document.createElement("div");x.className="vd-transfer-search";let E=document.createElement("input");E.type="text",E.placeholder="Search...",E.setAttribute("aria-label","Search "+d.toLowerCase()),x.appendChild(E),A.appendChild(x);let L=document.createElement("ul");L.className="vd-transfer-list",L.setAttribute("role","listbox");let S=M=>{L.innerHTML="",(M?u.filter(H=>(H.label||H.text||String(H)).toLowerCase().includes(M.toLowerCase())):u).forEach(H=>{let I=document.createElement("li");I.className="vd-transfer-item",I.setAttribute("role","option"),f.has(H.id)&&I.classList.add("is-selected");let v=document.createElement("input");v.type="checkbox",v.checked=f.has(H.id),v.setAttribute("aria-label",H.label);let D=document.createElement("span");D.textContent=H.label,I.addEventListener("click",()=>{f.has(H.id)?f.delete(H.id):f.add(H.id),a()}),I.appendChild(v),I.appendChild(D),L.appendChild(I)})};return E.addEventListener("input",()=>S(E.value)),S(""),A.appendChild(L),A},c=()=>{let d=n.filter(u=>r.has(u.id));n=n.filter(u=>!r.has(u.id)),s=s.concat(d),r.clear(),a(),h()},l=()=>{let d=s.filter(u=>i.has(u.id));s=s.filter(u=>!i.has(u.id)),n=n.concat(d),i.clear(),a(),h()},h=()=>{e.dispatchEvent(new CustomEvent("transfer:change",{detail:{source:n.map(d=>d.id),target:s.map(d=>d.id)},bubbles:!0}))};a(),this.instances.set(e,{cleanup:t,getTarget:()=>s.map(d=>d.id),getSource:()=>n.map(d=>d.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",y),window.VanduoTransfer=y})();(function(){"use strict";let y={instances:new Map,init:function(e){window.Vanduo.queryAll(e,"[data-vd-tree]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[],n=e.getAttribute("data-vd-tree-cascade")!=="false",s;try{s=JSON.parse(e.getAttribute("data-vd-tree")||"[]")}catch{s=[]}e.classList.add("vd-tree"),e.setAttribute("role","tree");let r=(o,c)=>{c.innerHTML="",o.forEach(l=>{let h=document.createElement("li");h.className="vd-tree-node",h.setAttribute("role","treeitem"),h.setAttribute("aria-expanded",l.open?"true":"false"),l.open&&h.classList.add("is-open");let d=document.createElement("div");if(d.className="vd-tree-node-content",l.children&&l.children.length>0){let f=document.createElement("button");f.type="button",f.className="vd-tree-toggle",f.setAttribute("aria-label","Toggle"),f.addEventListener("click",p=>{p.stopPropagation(),l.open=!l.open,h.classList.toggle("is-open"),h.setAttribute("aria-expanded",l.open?"true":"false")}),d.appendChild(f)}else{let f=document.createElement("span");f.className="vd-tree-toggle-placeholder",d.appendChild(f)}if(e.hasAttribute("data-vd-tree-checkbox")){let f=document.createElement("input");f.type="checkbox",f.className="vd-tree-checkbox",f.checked=!!l.checked,f.setAttribute("aria-label",l.label),f.addEventListener("change",p=>{p.stopPropagation(),l.checked=f.checked,n&&l.children&&(i(l.children,f.checked),r(s,e)),e.dispatchEvent(new CustomEvent("tree:check",{detail:{id:l.id,checked:f.checked,label:l.label},bubbles:!0}))}),d.appendChild(f)}if(l.icon){let f=document.createElement("span");f.className="vd-tree-icon "+l.icon,d.appendChild(f)}let u=document.createElement("span");if(u.className="vd-tree-label",u.textContent=l.label||"",d.appendChild(u),h.appendChild(d),l.children&&l.children.length>0){let f=document.createElement("ul");f.className="vd-tree-children",f.setAttribute("role","group"),r(l.children,f),h.appendChild(f)}c.appendChild(h)})},i=(o,c)=>{o.forEach(l=>{l.checked=c,l.children&&i(l.children,c)})},a=o=>{let c=document.activeElement;if(!e.contains(c))return;let l=Array.from(e.querySelectorAll(".vd-tree-node-content")),h=l.indexOf(c.closest(".vd-tree-node-content"));if(h!==-1)switch(o.key){case"ArrowDown":if(o.preventDefault(),h<l.length-1){let d=l[h+1].querySelector(".vd-tree-toggle, .vd-tree-label");d&&d.focus()}break;case"ArrowUp":if(o.preventDefault(),h>0){let d=l[h-1].querySelector(".vd-tree-toggle, .vd-tree-label");d&&d.focus()}break}};e.addEventListener("keydown",a),t.push(()=>e.removeEventListener("keydown",a)),r(s,e),this.instances.set(e,{cleanup:t,getData:()=>s,getChecked:()=>{let o=[],c=l=>{l.forEach(h=>{h.checked&&o.push(h.id||h.label),h.children&&c(h.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",y),window.VanduoTree=y})();(function(){"use strict";let y={_active:!1,_steps:[],_currentStep:0,_elements:{},_cleanup:[],_boundTriggers:new WeakMap,_triggerElement:null,init:function(e){window.Vanduo.queryAll(e,"[data-vd-spotlight]").forEach(n=>{if(this._boundTriggers.has(n))return;let s=r=>{r.preventDefault();let i=this._parseSteps(n.getAttribute("data-vd-spotlight"));i.length!==0&&this.start(i,{trigger:n})};n.addEventListener("click",s),this._boundTriggers.set(n,s)})},_parseSteps:function(e){if(typeof e!="string"||e.trim()==="")return[];try{let t=JSON.parse(e);return this._normalizeSteps(t)}catch(t){return console.error("VanduoSpotlight: invalid data-vd-spotlight payload.",t),[]}},_normalizeStep:function(e){if(!e||typeof e!="object")return null;let t=e.target,n=typeof t=="string"&&t.trim()!=="",s=typeof Element<"u"&&t instanceof Element;if(!n&&!s)return null;let r=typeof e.title=="string"?e.title:"",i=typeof e.description=="string"?e.description:typeof e.content=="string"?e.content:"";return{target:t,title:r,description:i}},_normalizeSteps:function(e){return Array.isArray(e)?e.map(t=>this._normalizeStep(t)).filter(Boolean):[]},start:function(e,t){this._active&&this.stop();let n=this._normalizeSteps(e);if(n.length===0)return;let s=t||{};this._steps=n,this._currentStep=0,this._active=!0,this._triggerElement=s.trigger||(document.activeElement instanceof HTMLElement?document.activeElement:null);let r=document.createElement("div");r.className="vd-spotlight-overlay",r.setAttribute("aria-hidden","true"),document.body.appendChild(r);let i=document.createElement("div");i.className="vd-spotlight-tooltip",i.setAttribute("role","dialog"),i.setAttribute("aria-modal","true"),i.tabIndex=-1,document.body.appendChild(i),this._elements={overlay:r,tooltip:i};let a=o=>{o.key==="Escape"&&this.stop()};document.addEventListener("keydown",a),this._cleanup.push(()=>document.removeEventListener("keydown",a)),r.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 r=this._steps.length;if(s.innerHTML="",s.removeAttribute("aria-labelledby"),s.removeAttribute("aria-describedby"),t.title){let l=document.createElement("h4");l.className="vd-spotlight-title",l.id="vd-spotlight-title-"+e+"-"+Date.now(),l.textContent=t.title,s.appendChild(l),s.setAttribute("aria-labelledby",l.id)}if(t.description){let l=document.createElement("p");l.className="vd-spotlight-description",l.id="vd-spotlight-description-"+e+"-"+Date.now(),l.textContent=t.description,s.appendChild(l),s.setAttribute("aria-describedby",l.id)}let i=document.createElement("div");i.className="vd-spotlight-footer",i.setAttribute("aria-label","Step "+(e+1)+" of "+r);let a=document.createElement("span");a.className="vd-spotlight-counter",a.textContent=e+1+" / "+r;let o=document.createElement("div");if(o.className="vd-spotlight-actions",e>0){let l=document.createElement("button");l.type="button",l.className="vd-spotlight-btn",l.textContent="Back",l.addEventListener("click",()=>this.prev()),o.appendChild(l)}let c=document.createElement("button");if(c.type="button",c.className="vd-spotlight-btn",c.textContent="Skip",c.addEventListener("click",()=>this.stop()),o.appendChild(c),e<r-1){let l=document.createElement("button");l.type="button",l.className="vd-spotlight-btn vd-spotlight-btn-primary",l.textContent="Next",l.addEventListener("click",()=>this.next()),o.appendChild(l)}else{let l=document.createElement("button");l.type="button",l.className="vd-spotlight-btn vd-spotlight-btn-primary",l.textContent="Done",l.addEventListener("click",()=>this.stop()),o.appendChild(l)}i.appendChild(a),i.appendChild(o),s.appendChild(i),n&&requestAnimationFrame(()=>{let l=n.getBoundingClientRect(),h=s.getBoundingClientRect(),d=l.bottom+12+window.scrollY,u=l.left+(l.width-h.width)/2+window.scrollX;u=Math.max(8,Math.min(u,window.innerWidth-h.width-8)),d+h.height>window.innerHeight+window.scrollY&&(d=l.top-h.height-12+window.scrollY),s.style.top=d+"px",s.style.left=u+"px"}),document.dispatchEvent(new CustomEvent("spotlight:step",{detail:{index:e,step:e,total:r,data:t}}))},next:function(){this._currentStep<this._steps.length-1&&(this._currentStep++,this._showStep(this._currentStep))},prev:function(){this._currentStep>0&&(this._currentStep--,this._showStep(this._currentStep))},stop:function(){if(!this._active)return;let e=this._steps.length,t={completedSteps:e===0?0:Math.min(this._currentStep+1,e),total:e,completed:e>0&&this._currentStep>=e-1};this._active=!1,document.querySelectorAll(".vd-spotlight-target").forEach(n=>{n.classList.remove("vd-spotlight-target")}),this._elements.overlay&&this._elements.overlay.parentNode&&this._elements.overlay.parentNode.removeChild(this._elements.overlay),this._elements.tooltip&&this._elements.tooltip.parentNode&&this._elements.tooltip.parentNode.removeChild(this._elements.tooltip),this._cleanup.forEach(n=>n()),this._cleanup=[],this._elements={},this._steps=[],this._currentStep=0,this._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",y),window.VanduoSpotlight=y})();(function(){"use strict";function y(i){let a=i.slice();for(let o=a.length-1;o>0;o--){let c=Math.floor(Math.random()*(o+1)),l=a[o];a[o]=a[c],a[c]=l}return a}function e(i){if(!isFinite(i)||i<0)return"0:00";let a=Math.floor(i/60),o=Math.floor(i%60);return a+":"+(o<10?"0":"")+o}function t(i){return"vanduo:music-player:"+(i&&i.trim()?i.trim():"default")+":pos"}function n(i){let a=parseFloat(i.min)||0,o=parseFloat(i.max)||1,l=((parseFloat(i.value)||0)-a)/(o-a)*100;i.style.setProperty("--fill",l+"%"),i.style.backgroundImage="linear-gradient(to right, var(--music-player-track-fill, currentColor) 0%, var(--music-player-track-fill, currentColor) "+l+"%, var(--music-player-track-bg, #ccc) "+l+"%, var(--music-player-track-bg, #ccc) 100%)"}function s(i){let a=document.createElement("i");return a.className="ph ph-"+i,a.setAttribute("aria-hidden","true"),a}let r={instances:new Map,defaults:{tracks:[],volume:.5,shuffle:!1,showProgress:!1,showPlaylist:!1,autoAdvance:!0,glass:!1,detachable:!1,floatingPosition:null,draggable:!1,minimizable:!1,startMinimized:!1,persistPosition:!1,persistKey:""},init:function(i){window.Vanduo.queryAll(i,".vd-music-player, [data-music-player]").forEach(a=>{if(this.instances.has(a))return;let o={},c=a.getAttribute("data-music-player-options");if(c)try{o=JSON.parse(c)}catch{}this.initPlayer(a,o)})},initPlayer:function(i,a){let o=Object.assign({},this.defaults,a||{}),l=(Array.isArray(o.tracks)?o.tracks:[]).filter(v=>v&&typeof v.url=="string"&&v.url.trim()),d={tracks:o.shuffle?y(l):l.slice(),originalTracks:l.slice(),currentIndex:0,isPlaying:!1,volume:Math.max(0,Math.min(1,o.volume)),shuffle:o.shuffle,showProgress:o.showProgress,showPlaylist:o.showPlaylist,autoAdvance:o.autoAdvance,audio:null,glass:!!o.glass,detachable:!!o.detachable,floatingPosition:o.floatingPosition||"bottom-right",draggable:!!o.draggable&&!!o.detachable,minimizable:!!o.minimizable,startMinimized:!!o.startMinimized,persistPosition:!!o.persistPosition,persistKey:typeof o.persistKey=="string"?o.persistKey:"",isDetached:!1,isMinimized:!1,_startMinimizeApplied:!1},u=new Audio;u.volume=d.volume,u.preload="metadata",d.audio=u,this._buildDOM(i,d);let f={btnPlay:i.querySelector(".vd-music-player-btn-play"),btnPrev:i.querySelector(".vd-music-player-btn-prev"),btnNext:i.querySelector(".vd-music-player-btn-next"),btnShuffle:i.querySelector(".vd-music-player-btn-shuffle"),btnPlaylist:i.querySelector(".vd-music-player-btn-playlist"),btnDetach:i.querySelector(".vd-music-player-btn-detach"),btnAttach:i.querySelector(".vd-music-player-btn-attach"),btnMinimize:i.querySelector(".vd-music-player-btn-minimize"),dragHandle:i.querySelector(".vd-music-player-drag-handle"),trackName:i.querySelector(".vd-music-player-track-name"),volumeSlider:i.querySelector(".vd-music-player-volume-slider"),volumeIcon:i.querySelector(".vd-music-player-volume-icon"),progressBar:i.querySelector(".vd-music-player-progress-bar"),timeElapsed:i.querySelector(".vd-music-player-time-elapsed"),timeDuration:i.querySelector(".vd-music-player-time-duration"),playlistPanel:i.querySelector(".vd-music-player-playlist")},p=()=>{let v=f.btnPlay;v&&(v.innerHTML="",v.appendChild(s(d.isPlaying?"pause":"play")),v.setAttribute("aria-label",d.isPlaying?"Pause":"Play"),v.classList.toggle("is-active",d.isPlaying))},A=()=>{let v=f.trackName;if(!v)return;let D=d.tracks[d.currentIndex];D?(v.textContent=D.name||"Unknown Track",v.classList.remove("is-idle")):(v.textContent="No tracks loaded",v.classList.add("is-idle"))},_=()=>{let v=f.volumeIcon;if(!v)return;v.innerHTML="";let D=d.volume,q=D===0?"speaker-none":D<.5?"speaker-low":"speaker-high";v.appendChild(s(q))},k=()=>{let v=f.btnShuffle;v&&(v.classList.toggle("is-active",d.shuffle),v.setAttribute("aria-pressed",d.shuffle?"true":"false"))},w=()=>{let v=f.playlistPanel;v&&(v.innerHTML="",d.tracks.forEach((D,q)=>{let N=document.createElement("button");N.className="vd-music-player-playlist-item"+(q===d.currentIndex?" is-active":""),N.type="button",N.setAttribute("data-index",String(q)),N.setAttribute("aria-current",q===d.currentIndex?"true":"false");let B=document.createElement("span");B.className="vd-music-player-playlist-num",B.textContent=String(q+1);let Y=document.createElement("span");Y.className="vd-music-player-playlist-name",Y.textContent=D.name||"Track "+(q+1),N.appendChild(B),N.appendChild(Y),v.appendChild(N)}))},x=()=>{let v=f.progressBar;if(!v||!u.duration)return;let D=u.currentTime/u.duration*100;v.value=String(D),n(v),f.timeElapsed&&(f.timeElapsed.textContent=e(u.currentTime)),f.timeDuration&&(f.timeDuration.textContent=e(u.duration))},E=(v,D)=>{let q=d.tracks[v];q&&(d.currentIndex=v,u.src=q.url,A(),w(),f.progressBar&&(f.progressBar.value="0",n(f.progressBar)),f.timeElapsed&&(f.timeElapsed.textContent="0:00"),f.timeDuration&&(f.timeDuration.textContent="0:00"),i.dispatchEvent(new CustomEvent("musicplayer:trackchange",{bubbles:!0,detail:{index:v,name:q.name,url:q.url}})),D&&u.play().catch(()=>{}))},L=[],S=()=>{d.isPlaying=!0,p(),i.dispatchEvent(new CustomEvent("musicplayer:play",{bubbles:!0}))},M=()=>{d.isPlaying=!1,p(),i.dispatchEvent(new CustomEvent("musicplayer:pause",{bubbles:!0}))},T=()=>{if(d.autoAdvance&&d.tracks.length>1){let v=(d.currentIndex+1)%d.tracks.length;E(v,!0)}else d.isPlaying=!1,p(),i.dispatchEvent(new CustomEvent("musicplayer:ended",{bubbles:!0}))},H=()=>{d.showProgress&&x()},I=()=>{f.timeDuration&&(f.timeDuration.textContent=e(u.duration)),f.progressBar&&(f.progressBar.max="100",n(f.progressBar))};if(u.addEventListener("play",S),u.addEventListener("pause",M),u.addEventListener("ended",T),u.addEventListener("timeupdate",H),u.addEventListener("loadedmetadata",I),L.push(()=>{u.removeEventListener("play",S),u.removeEventListener("pause",M),u.removeEventListener("ended",T),u.removeEventListener("timeupdate",H),u.removeEventListener("loadedmetadata",I),u.pause(),u.src=""}),f.btnPlay){let v=()=>{!u.src&&d.tracks.length&&E(d.currentIndex,!1),d.isPlaying?u.pause():u.play().catch(()=>{})};f.btnPlay.addEventListener("click",v),L.push(()=>f.btnPlay.removeEventListener("click",v));let D=q=>{(q.key===" "||q.key==="Enter")&&(q.preventDefault(),v())};f.btnPlay.addEventListener("keydown",D),L.push(()=>f.btnPlay.removeEventListener("keydown",D))}if(f.btnPrev){let v=()=>{if(d.tracks.length)if(u.currentTime>3)u.currentTime=0;else{let D=d.currentIndex===0?d.tracks.length-1:d.currentIndex-1;E(D,d.isPlaying)}};f.btnPrev.addEventListener("click",v),L.push(()=>f.btnPrev.removeEventListener("click",v))}if(f.btnNext){let v=()=>{if(!d.tracks.length)return;let D=(d.currentIndex+1)%d.tracks.length;E(D,d.isPlaying)};f.btnNext.addEventListener("click",v),L.push(()=>f.btnNext.removeEventListener("click",v))}if(f.btnShuffle){let v=()=>{if(d.shuffle=!d.shuffle,d.shuffle){let D=d.tracks[d.currentIndex];d.tracks=y(d.tracks);let q=d.tracks.findIndex(N=>N===D);q>0&&(d.tracks.splice(q,1),d.tracks.unshift(D)),d.currentIndex=0}else{let D=d.tracks[d.currentIndex];d.tracks=d.originalTracks.slice(),d.currentIndex=d.tracks.findIndex(q=>q===D),d.currentIndex<0&&(d.currentIndex=0)}k(),w()};f.btnShuffle.addEventListener("click",v),L.push(()=>f.btnShuffle.removeEventListener("click",v))}if(f.btnPlaylist){let v=()=>{let D=f.playlistPanel;if(!D)return;let q=D.classList.toggle("is-open");f.btnPlaylist.classList.toggle("is-active",q),f.btnPlaylist.setAttribute("aria-expanded",q?"true":"false")};f.btnPlaylist.addEventListener("click",v),L.push(()=>f.btnPlaylist.removeEventListener("click",v))}if(f.volumeSlider){let v=D=>{let q=parseFloat(D.target.value);d.volume=q,u.volume=q,_(),n(f.volumeSlider),i.dispatchEvent(new CustomEvent("musicplayer:volumechange",{bubbles:!0,detail:{volume:q}}))};f.volumeSlider.addEventListener("input",v),L.push(()=>f.volumeSlider.removeEventListener("input",v)),n(f.volumeSlider)}if(f.progressBar){let v=D=>{if(!u.duration)return;let q=parseFloat(D.target.value);u.currentTime=q/100*u.duration,n(f.progressBar)};f.progressBar.addEventListener("input",v),L.push(()=>f.progressBar.removeEventListener("input",v))}if(f.playlistPanel){let v=D=>{let q=D.target.closest(".vd-music-player-playlist-item");if(!q)return;let N=parseInt(q.getAttribute("data-index"),10);isNaN(N)||E(N,!0)};f.playlistPanel.addEventListener("click",v),L.push(()=>f.playlistPanel.removeEventListener("click",v))}if(f.btnDetach){let v=()=>{this.detach(i)};f.btnDetach.addEventListener("click",v),L.push(()=>f.btnDetach.removeEventListener("click",v))}if(f.btnAttach){let v=()=>{this.attach(i)};f.btnAttach.addEventListener("click",v),L.push(()=>f.btnAttach.removeEventListener("click",v))}if(f.btnMinimize){let v=()=>{this.toggleMinimize(i)};f.btnMinimize.addEventListener("click",v),L.push(()=>f.btnMinimize.removeEventListener("click",v))}p(),A(),_(),o.showPlaylist&&w(),this.instances.set(i,{state:d,audio:u,refs:f,cleanup:L,ui:{restore:null,unbindDrag:null}}),i.setAttribute("data-music-player-initialized","true")},_buildDOM:function(i,a){if(i.querySelector(".vd-music-player-controls"))return;if(i.setAttribute("role","region"),i.setAttribute("aria-label","Music Player"),a.showProgress&&i.classList.add("has-progress"),a.showPlaylist&&i.classList.add("has-playlist"),a.glass&&i.classList.add("vd-music-player-glass"),a.draggable&&i.classList.add("vd-music-player-draggable"),a.detachable||a.minimizable){let w=document.createElement("div");if(w.className="vd-music-player-toolbar",w.setAttribute("role","toolbar"),w.setAttribute("aria-label","Player window"),a.draggable){let E=document.createElement("button");E.type="button",E.className="vd-music-player-drag-handle",E.setAttribute("aria-label","Drag to move player"),E.appendChild(s("dots-six-vertical")),w.appendChild(E)}let x=document.createElement("span");if(x.className="vd-music-player-toolbar-spacer",x.setAttribute("aria-hidden","true"),w.appendChild(x),a.minimizable){let E=document.createElement("button");E.type="button",E.className="vd-music-player-btn vd-music-player-btn-minimize",E.setAttribute("aria-label","Minimize player"),E.setAttribute("aria-expanded","true"),E.appendChild(s("minus")),w.appendChild(E)}if(a.detachable){let E=document.createElement("button");E.type="button",E.className="vd-music-player-btn vd-music-player-btn-detach",E.setAttribute("aria-label","Detach player"),E.appendChild(s("arrows-out")),w.appendChild(E);let L=document.createElement("button");L.type="button",L.className="vd-music-player-btn vd-music-player-btn-attach",L.setAttribute("aria-label","Attach player"),L.appendChild(s("arrows-in")),w.appendChild(L)}i.classList.add("vd-music-player-has-chrome"),i.appendChild(w)}let o=document.createElement("div");o.className="vd-music-player-info";let c=document.createElement("span");c.className="vd-music-player-icon",c.setAttribute("aria-hidden","true"),c.appendChild(s("music-note"));let l=document.createElement("span");l.className="vd-music-player-track-name",l.setAttribute("aria-live","polite"),l.setAttribute("aria-atomic","true"),o.appendChild(c),o.appendChild(l),i.appendChild(o);let h=document.createElement("div");h.className="vd-music-player-controls",h.setAttribute("role","group"),h.setAttribute("aria-label","Playback controls");let d=document.createElement("button");d.type="button",d.className="vd-music-player-btn vd-music-player-btn-prev",d.setAttribute("aria-label","Previous track"),d.appendChild(s("skip-back"));let u=document.createElement("button");u.type="button",u.className="vd-music-player-btn vd-music-player-btn-play",u.setAttribute("aria-label","Play"),u.appendChild(s("play"));let f=document.createElement("button");if(f.type="button",f.className="vd-music-player-btn vd-music-player-btn-next",f.setAttribute("aria-label","Next track"),f.appendChild(s("skip-forward")),h.appendChild(d),h.appendChild(u),h.appendChild(f),a.showPlaylist||a.shuffle!==void 0){let w=document.createElement("button");w.type="button",w.className="vd-music-player-btn vd-music-player-btn-shuffle",w.setAttribute("aria-label","Shuffle"),w.setAttribute("aria-pressed",a.shuffle?"true":"false"),w.appendChild(s("shuffle")),h.appendChild(w)}let p=document.createElement("span");p.className="vd-music-player-spacer",p.setAttribute("aria-hidden","true"),h.appendChild(p);let A=document.createElement("div");A.className="vd-music-player-volume";let _=document.createElement("span");_.className="vd-music-player-volume-icon",_.setAttribute("aria-hidden","true");let k=document.createElement("input");if(k.type="range",k.className="vd-music-player-volume-slider",k.min="0",k.max="1",k.step="0.01",k.value=String(a.volume),k.setAttribute("aria-label","Volume"),A.appendChild(_),A.appendChild(k),h.appendChild(A),a.showPlaylist){let w=document.createElement("button");w.type="button",w.className="vd-music-player-btn vd-music-player-btn-playlist",w.setAttribute("aria-label","Show playlist"),w.setAttribute("aria-expanded","false"),w.appendChild(s("playlist")),h.appendChild(w)}if(i.appendChild(h),a.showProgress){let w=document.createElement("div");w.className="vd-music-player-progress";let x=document.createElement("span");x.className="vd-music-player-time vd-music-player-time-elapsed",x.textContent="0:00",x.setAttribute("aria-hidden","true");let E=document.createElement("input");E.type="range",E.className="vd-music-player-progress-bar",E.min="0",E.max="100",E.step="0.1",E.value="0",E.setAttribute("aria-label","Seek");let L=document.createElement("span");L.className="vd-music-player-time vd-music-player-time-duration",L.textContent="0:00",L.setAttribute("aria-hidden","true"),w.appendChild(x),w.appendChild(E),w.appendChild(L),i.appendChild(w)}if(a.showPlaylist){let w=document.createElement("div");w.className="vd-music-player-playlist",w.setAttribute("aria-label","Playlist"),i.appendChild(w)}},play:function(i){let a=this.instances.get(i);a&&(!a.audio.src&&a.state.tracks.length&&(a.audio.src=a.state.tracks[a.state.currentIndex].url),a.audio.play().catch(()=>{}))},pause:function(i){let a=this.instances.get(i);a&&a.audio.pause()},toggle:function(i){let a=this.instances.get(i);a&&(a.state.isPlaying?this.pause(i):this.play(i))},next:function(i){let a=this.instances.get(i);if(!a||!a.state.tracks.length)return;let o=(a.state.currentIndex+1)%a.state.tracks.length;this._loadTrack(a,o,a.state.isPlaying)},previous:function(i){let a=this.instances.get(i);if(!a||!a.state.tracks.length)return;let o=a.state.tracks.length,c=(a.state.currentIndex-1+o)%o;this._loadTrack(a,c,a.state.isPlaying)},setVolume:function(i,a){let o=this.instances.get(i);if(!o)return;let c=Math.max(0,Math.min(1,a));o.state.volume=c,o.audio.volume=c,o.refs.volumeSlider&&(o.refs.volumeSlider.value=String(c),n(o.refs.volumeSlider)),i.dispatchEvent(new CustomEvent("musicplayer:volumechange",{bubbles:!0,detail:{volume:c}}))},setTrack:function(i,a){let o=this.instances.get(i);o&&this._loadTrack(o,a,o.state.isPlaying)},shuffle:function(i){let a=this.instances.get(i);!a||!a.refs.btnShuffle||a.refs.btnShuffle.click()},detach:function(i,a){let o=this.instances.get(i);if(!o||!o.state.detachable||o.state.isDetached)return;let c=o.state;o.ui=o.ui||{restore:null,unbindDrag:null},c.isDetached=!0,o.ui.restore={parent:i.parentNode,next:i.nextSibling},document.body.appendChild(i),i.classList.add("vd-music-player-floating","vd-music-player-detached");let l=a!=null&&a!==void 0?a:c.floatingPosition;this._setCornerPosition(i,l==="bottom-left"||l==="bottom-right"?l:"bottom-right"),this._loadPersistedPosition(i,o),c.startMinimized&&!c._startMinimizeApplied&&(c._startMinimizeApplied=!0,this.minimize(i)),this._bindFloatingDrag(o),i.dispatchEvent(new CustomEvent("musicplayer:detach",{bubbles:!0}))},attach:function(i){let a=this.instances.get(i);if(!a||!a.state.isDetached)return;this._unbindFloatingDrag(a),a.state.isDetached=!1;let o=a.ui&&a.ui.restore;i.classList.remove("vd-music-player-floating","vd-music-player-detached","vd-music-player-floating-bottom-left","vd-music-player-floating-bottom-right","is-position-custom"),i.style.removeProperty("--music-player-floating-top"),i.style.removeProperty("--music-player-floating-left"),o&&o.parent&&o.parent.isConnected&&o.parent.insertBefore(i,o.next),a.ui&&(a.ui.restore=null,a.ui.unbindDrag=null),i.dispatchEvent(new CustomEvent("musicplayer:attach",{bubbles:!0}))},minimize:function(i){let a=this.instances.get(i);if(!a||!a.state.minimizable||a.state.isMinimized)return;let o=a.state;o.isMinimized=!0,i.classList.add("vd-music-player-minimized"),this._setMinimizeButtonState(a,!0),a.refs.playlistPanel&&a.refs.playlistPanel.classList.contains("is-open")&&a.refs.btnPlaylist&&(a.refs.playlistPanel.classList.remove("is-open"),a.refs.btnPlaylist.classList.remove("is-active"),a.refs.btnPlaylist.setAttribute("aria-expanded","false")),i.dispatchEvent(new CustomEvent("musicplayer:minimize",{bubbles:!0}))},expand:function(i){let a=this.instances.get(i);!a||!a.state.minimizable||!a.state.isMinimized||(a.state.isMinimized=!1,i.classList.remove("vd-music-player-minimized"),this._setMinimizeButtonState(a,!1),i.dispatchEvent(new CustomEvent("musicplayer:expand",{bubbles:!0})))},toggleMinimize:function(i){let a=this.instances.get(i);!a||!a.state.minimizable||(a.state.isMinimized?this.expand(i):this.minimize(i))},setPosition:function(i,a){let o=this.instances.get(i);if(!(!o||!o.state.isDetached)&&(typeof a=="string"?this._setCornerPosition(i,a==="bottom-left"||a==="bottom-right"?a:"bottom-right"):a&&typeof a.x=="number"&&typeof a.y=="number"&&this._setCustomPositionFromRect(i,a.x,a.y),o.state.persistPosition)){let c=i.getBoundingClientRect();this._savePositionPixels(o,c.left,c.top)}},_setMinimizeButtonState:function(i,a){let o=i.refs&&i.refs.btnMinimize;o&&(o.innerHTML="",o.appendChild(s(a?"plus":"minus")),o.setAttribute("aria-label",a?"Expand player":"Minimize player"),o.setAttribute("aria-expanded",a?"false":"true"))},_setCornerPosition:function(i,a){i.classList.remove("is-position-custom","vd-music-player-floating-bottom-left","vd-music-player-floating-bottom-right"),i.style.removeProperty("--music-player-floating-top"),i.style.removeProperty("--music-player-floating-left"),a==="bottom-left"?i.classList.add("vd-music-player-floating-bottom-left"):i.classList.add("vd-music-player-floating-bottom-right")},_setCustomPositionFromRect:function(i,a,o){i.classList.remove("vd-music-player-floating-bottom-left","vd-music-player-floating-bottom-right"),i.classList.add("is-position-custom"),i.style.setProperty("--music-player-floating-left",a+"px"),i.style.setProperty("--music-player-floating-top",o+"px")},_loadPersistedPosition:function(i,a){if(!a.state.persistPosition)return;let o=this._persistKeyForInstance(a,i),c=null;if(typeof window.safeStorageGet=="function")c=window.safeStorageGet(o,null);else try{c=localStorage.getItem(o)}catch{}if(c)try{let l=JSON.parse(c);l&&typeof l.x=="number"&&typeof l.y=="number"&&this._setCustomPositionFromRect(i,l.x,l.y)}catch{}},_savePositionPixels:function(i,a,o){if(!i.state.persistPosition)return;let c=this._containerOf(i);if(!c)return;let l=this._persistKeyForInstance(i,c),h=JSON.stringify({x:a,y:o});if(typeof window.safeStorageSet=="function")window.safeStorageSet(l,h);else try{localStorage.setItem(l,h)}catch{}},_persistKeyForInstance:function(i,a){let o=i.state.persistKey;return o&&String(o).trim()?t(String(o).trim()):t(a.id||"")},_unbindFloatingDrag:function(i){i.ui&&typeof i.ui.unbindDrag=="function"&&(i.ui.unbindDrag(),i.ui.unbindDrag=null)},_bindFloatingDrag:function(i){this._unbindFloatingDrag(i);let a=i.refs&&i.refs.dragHandle;if(!a||!i.state||!i.state.draggable)return;let o=this,c=this._containerOf(i);if(!c)return;let l=0,h=0,d=0,u=0,f=!1,p=function(k){if(k.pointerType==="mouse"&&k.button!==0)return;k.preventDefault(),f=!0;let w=c.getBoundingClientRect();d=w.left,u=w.top,l=k.clientX,h=k.clientY,o._setCustomPositionFromRect(c,d,u);try{a.setPointerCapture(k.pointerId)}catch{}},A=function(k){if(!f)return;let w=k.clientX-l,x=k.clientY-h,E=d+w,L=u+x,S=c.getBoundingClientRect(),M=S.width,T=S.height,H=window.innerWidth,I=window.innerHeight,v=8;E=Math.max(v,Math.min(E,H-M-v)),L=Math.max(v,Math.min(L,I-T-v)),o._setCustomPositionFromRect(c,E,L)},_=function(k){if(f){if(f=!1,typeof a.hasPointerCapture=="function"&&a.hasPointerCapture(k.pointerId))try{a.releasePointerCapture(k.pointerId)}catch{}if(i.state.persistPosition){let w=c.getBoundingClientRect();o._savePositionPixels(i,w.left,w.top)}}};a.addEventListener("pointerdown",p),a.addEventListener("pointermove",A),a.addEventListener("pointerup",_),a.addEventListener("pointercancel",_),i.ui=i.ui||{restore:null,unbindDrag:null},i.ui.unbindDrag=function(){a.removeEventListener("pointerdown",p),a.removeEventListener("pointermove",A),a.removeEventListener("pointerup",_),a.removeEventListener("pointercancel",_)}},getState:function(i){let a=this.instances.get(i);if(!a)return null;let o=a.state;return{isPlaying:o.isPlaying,currentIndex:o.currentIndex,currentTrack:o.tracks[o.currentIndex]||null,volume:o.volume,shuffle:o.shuffle,tracks:o.tracks.slice(),isDetached:!!o.isDetached,isMinimized:!!o.isMinimized}},destroy:function(i){let a=this.instances.get(i);if(a){if(this._unbindFloatingDrag(a),a.state&&a.state.isDetached)try{this.attach(i)}catch{}a.cleanup.forEach(o=>o()),this.instances.delete(i),i.removeAttribute("data-music-player-initialized")}},destroyAll:function(){this.instances.forEach((i,a)=>this.destroy(a))},_loadTrack:function(i,a,o){let c=i.state.tracks[a];if(!c)return;let l=this._containerOf(i);i.state.currentIndex=a,i.audio.src=c.url,i.refs.trackName&&(i.refs.trackName.textContent=c.name||"Unknown Track",i.refs.trackName.classList.remove("is-idle")),i.refs.playlistPanel&&i.refs.playlistPanel.querySelectorAll(".vd-music-player-playlist-item").forEach((h,d)=>{let u=d===a;h.classList.toggle("is-active",u),h.setAttribute("aria-current",u?"true":"false")}),i.refs.progressBar&&(i.refs.progressBar.value="0",n(i.refs.progressBar)),i.refs.timeElapsed&&(i.refs.timeElapsed.textContent="0:00"),i.refs.timeDuration&&(i.refs.timeDuration.textContent="0:00"),l&&l.dispatchEvent(new CustomEvent("musicplayer:trackchange",{bubbles:!0,detail:{index:a,name:c.name,url:c.url}})),o&&i.audio.play().catch(()=>{})},_containerOf:function(i){for(let[a,o]of this.instances)if(o===i)return a;return null}};typeof window.Vanduo<"u"&&window.Vanduo.register("musicPlayer",r),window.VanduoMusicPlayer=r})();var ce=window.Vanduo;var Je=ce;})();
42
+ `},isUsingDefaultPrimary:function(){return this.state.primary===this.DEFAULTS.PRIMARY_LIGHT||this.state.primary===this.DEFAULTS.PRIMARY_DARK},_normalizeDefaultPrimaryIfStaleWithStoredTheme:function(){if(!this.isUsingDefaultPrimary())return;let e=this.getDefaultPrimary(this.state.theme);this.state.primary!==e&&(this.state.primary=e)},bindEvents:function(e){if(this.bindTriggerEvents(e),this.bindPanelEvents(),window.matchMedia){let t=window.matchMedia("(prefers-color-scheme: dark)"),n=()=>{if(this.state.theme==="system"&&this.isUsingDefaultPrimary()){let s=this.getDefaultPrimary("system");s!==this.state.primary&&(this.applyPrimary(s),this.updateUI())}};t.addEventListener("change",n),this._cleanup.push(()=>t.removeEventListener("change",n))}this.addListener(document,"click",t=>{this.state.isOpen&&this.elements.customizer&&!this.elements.customizer.contains(t.target)&&this.close()}),this.addListener(document,"keydown",t=>{t.key==="Escape"&&this.state.isOpen&&this.close()})},bindTriggerEvents:function(e){(e?this.getTriggers(e):this.elements.triggers).forEach(n=>{if(n.getAttribute("data-customizer-trigger-initialized")==="true")return;let s=r=>{r.preventDefault(),r.stopPropagation(),this.elements.activeTrigger=n,this.elements.trigger=n,this.toggle()};n.addEventListener("click",s),n._themeCustomizerTriggerHandler=s,n.setAttribute("data-customizer-trigger-initialized","true")})},cleanupTrigger:function(e){!e||e.getAttribute("data-customizer-trigger-initialized")!=="true"||(e._themeCustomizerTriggerHandler&&(e.removeEventListener("click",e._themeCustomizerTriggerHandler),delete e._themeCustomizerTriggerHandler),e.setAttribute("aria-expanded","false"),e.removeAttribute("data-customizer-trigger-initialized"),this.elements.activeTrigger===e&&(this.elements.activeTrigger=null),this.elements.triggers=this.elements.triggers.filter(function(t){return t!==e}),this.elements.trigger===e&&(this.elements.trigger=this.elements.triggers[0]||null))},toggle:function(){this.state.isOpen?this.close():this.open()},open:function(){this.state.isOpen=!0,this.positionPanel(),this.elements.panel&&this.elements.panel.classList.add("is-open"),this.elements.triggers.forEach(e=>e.setAttribute("aria-expanded","false")),this.elements.trigger&&this.elements.trigger.setAttribute("aria-expanded","true"),this.elements.overlay&&this.elements.overlay.classList.add("is-active"),this.dispatchEvent("panel-open",{isOpen:!0})},close:function(){this.state.isOpen=!1,this.elements.panel&&this.elements.panel.classList.remove("is-open"),this.elements.triggers.forEach(e=>e.setAttribute("aria-expanded","false")),this.elements.overlay&&this.elements.overlay.classList.remove("is-active"),this.dispatchEvent("panel-close",{isOpen:!1})},updateUI:function(){if(!this.elements.panel)return;this.elements.panel.querySelectorAll("[data-color]").forEach(t=>{t.classList.toggle("is-active",t.dataset.color===this.state.primary)}),this.elements.panel.querySelectorAll("[data-neutral]").forEach(t=>{t.classList.toggle("is-active",t.dataset.neutral===this.state.neutral)}),this.elements.panel.querySelectorAll("[data-radius]").forEach(t=>{t.classList.toggle("is-active",t.dataset.radius===this.state.radius)});let e=this.elements.panel.querySelector("[data-customizer-font]");e&&(e.value=this.state.font)},reset:function(){this.applyTheme(this.DEFAULTS.THEME),this.applyPrimary(this.getDefaultPrimary(this.DEFAULTS.THEME)),this.applyNeutral(this.DEFAULTS.NEUTRAL),this.applyRadius(this.DEFAULTS.RADIUS),this.applyFont(this.DEFAULTS.FONT),this.updateUI(),this.dispatchEvent("reset",{state:{...this.state}})},getState:function(){return{...this.state}},setPreferences:function(e){e.primary&&this.applyPrimary(e.primary),e.neutral&&this.applyNeutral(e.neutral),e.radius&&this.applyRadius(e.radius),e.font&&this.applyFont(e.font),e.theme&&this.applyTheme(e.theme),this.updateUI()},getStorageValue:function(e,t){if(typeof window.safeStorageGet=="function")return window.safeStorageGet(e,t);try{let n=localStorage.getItem(e);return n!==null?n:t}catch{return t}},setStorageValue:function(e,t){if(typeof window.safeStorageSet=="function")return window.safeStorageSet(e,t);try{return localStorage.setItem(e,t),!0}catch{return!1}},destroyAll:function(e){let t=this.normalizeRoot(e);if(t!==document){this.getTriggers(t).forEach(n=>{this.cleanupTrigger(n)}),this.pruneTriggers(),this.elements.triggers.length||this.destroyAll(document);return}this._cleanup.forEach(n=>n()),this._cleanup=[],this.elements.panel&&this.elements.panel.removeAttribute("data-customizer-initialized"),this.elements.triggers.slice().forEach(n=>{this.cleanupTrigger(n)}),this._ownsDynamicPanel&&(this.elements.panel&&this.elements.panel.parentNode&&this.elements.panel.parentNode.removeChild(this.elements.panel),this.elements.overlay&&this.elements.overlay.parentNode&&this.elements.overlay.parentNode.removeChild(this.elements.overlay),this._ownsDynamicPanel=!1),this.close(),this.elements.customizer=null,this.elements.trigger=null,this.elements.activeTrigger=null,this.elements.triggers=[],this.elements.panel=null,this.elements.overlay=null,this.isInitialized=!1}};window.Vanduo&&window.Vanduo.register("themeCustomizer",v),window.ThemeCustomizer=v})();(function(){"use strict";let v={isInitialized:!1,_mediaQuery:null,_onMediaChange:null,getToggles:function(e){return window.Vanduo&&typeof window.Vanduo.queryAll=="function"?window.Vanduo.queryAll(e,'[data-toggle="theme"]'):Array.from(document.querySelectorAll('[data-toggle="theme"]'))},init:function(e){if(this.STORAGE_KEY="vanduo-theme-preference",this.state={preference:this.getPreference()},this.isInitialized){this.applyTheme(),this.renderUI(e),this.updateUI(e);return}this.isInitialized=!0,this.applyTheme(),this.listenForSystemChanges(),this.renderUI(e)},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(),window.ThemeCustomizer&&typeof window.ThemeCustomizer.applyTheme=="function"&&!window.ThemeCustomizer._isApplying&&window.ThemeCustomizer.applyTheme("system"))},this._mediaQuery.addEventListener("change",this._onMediaChange))},renderUI:function(e){this.getToggles(e).forEach(n=>{if(n.getAttribute("data-theme-initialized")==="true"){n.tagName==="SELECT"&&(n.value=this.state.preference);return}if(n.tagName==="SELECT"){n.value=this.state.preference;let s=r=>{this.setPreference(r.target.value)};n.addEventListener("change",s),n._themeToggleHandler=s}else{let s=()=>{let r=["system","light","dark"],i=(r.indexOf(this.state.preference)+1)%r.length;this.setPreference(r[i])};n.addEventListener("click",s),n._themeToggleHandler=s}n.setAttribute("data-theme-initialized","true")})},updateUI:function(e){this.getToggles(e).forEach(n=>{if(n.tagName==="SELECT")n.value=this.state.preference;else{let s=n.querySelector(".theme-current-label");s&&(s.textContent=this.state.preference.charAt(0).toUpperCase()+this.state.preference.slice(1))}})},destroyAll:function(e){let t=e||document;this.getToggles(t).filter(function(s){return s.getAttribute("data-theme-initialized")==="true"}).forEach(s=>{if(s._themeToggleHandler){let r=s.tagName==="SELECT"?"change":"click";s.removeEventListener(r,s._themeToggleHandler),delete s._themeToggleHandler}s.removeAttribute("data-theme-initialized")}),t===document&&this._mediaQuery&&this._onMediaChange&&this._mediaQuery.removeEventListener("change",this._onMediaChange),t===document&&(this._mediaQuery=null,this._onMediaChange=null,this.isInitialized=!1)}};window.Vanduo&&window.Vanduo.register("themeSwitcher",v)})();(function(){"use strict";let v={defaults:{position:"top-right",duration:5e3,dismissible:!0,showProgress:!0,pauseOnHover:!0},containers:{},getContainer:function(e){if(this.containers[e])return this.containers[e];let t=document.createElement("div");return t.className=`vd-toast-container vd-toast-container-${e}`,t.setAttribute("role","status"),t.setAttribute("aria-live","polite"),t.setAttribute("aria-atomic","false"),document.body.appendChild(t),this.containers[e]=t,t},show:function(e,t,n){typeof e=="string"&&(t&&typeof t=="object"?e=Object.assign({},t,{message:e}):e={message:e,type:t,duration:n});let s=Object.assign({},this.defaults,e),r=this.getContainer(s.position),i=document.createElement("div");i.className="vd-toast",s.type&&i.classList.add(`vd-toast-${s.type}`),s.solid&&i.classList.add("vd-toast-solid"),s.showProgress&&s.duration>0&&i.classList.add("vd-toast-with-progress");let o="";if(s.icon){let p=s.iconAllowSvg===!0,E=typeof sanitizeHtml=="function"?sanitizeHtml(s.icon,{allowSvg:p,allowStyle:!1}):escapeHtml(s.icon);o+=`<span class="vd-toast-icon">${E}</span>`}else s.type&&(o+=`<span class="vd-toast-icon">${this.getDefaultIcon(s.type)}</span>`);let a=typeof escapeHtml=="function"?escapeHtml:function(p){let E=document.createElement("div");return E.appendChild(document.createTextNode(p)),E.innerHTML};if(o+='<div class="vd-toast-content">',s.title&&(o+=`<div class="vd-toast-title">${a(String(s.title))}</div>`),s.message&&(o+=`<div class="vd-toast-message">${a(String(s.message))}</div>`),o+="</div>",s.dismissible&&(o+='<button type="button" class="vd-toast-close" aria-label="Close"></button>'),s.showProgress&&s.duration>0){let p=parseInt(s.duration,10)||0;o+=`<div class="vd-toast-progress" style="animation-duration: ${p}ms"></div>`}if(i.innerHTML=o,r.appendChild(i),i._toastCleanup=[],s.dismissible){let p=i.querySelector(".vd-toast-close"),E=()=>{this.dismiss(i)};p.addEventListener("click",E),i._toastCleanup.push(()=>p.removeEventListener("click",E))}let c=null,l=s.duration,f=null,d=()=>{if(s.duration>0){f=Date.now(),c=setTimeout(()=>{this.dismiss(i)},l),i._toastTimeoutId=c;let p=i.querySelector(".vd-toast-progress");p&&(p.style.animationPlayState="running")}},h=()=>{if(c){clearTimeout(c),c=null,i._toastTimeoutId=null,l-=Date.now()-f;let p=i.querySelector(".vd-toast-progress");p&&(p.style.animationPlayState="paused")}};s.pauseOnHover&&(i.addEventListener("mouseenter",h),i.addEventListener("mouseleave",d),i._toastCleanup.push(()=>i.removeEventListener("mouseenter",h),()=>i.removeEventListener("mouseleave",d))),requestAnimationFrame(()=>{i.classList.add("is-visible"),d()}),i._toastConfig=s;let u=new CustomEvent("toast:show",{bubbles:!0,detail:{toast:i,config:s}});return i.dispatchEvent(u),i},dismiss:function(e){if(!e||e.classList.contains("is-exiting"))return;e._toastTimeoutId&&(clearTimeout(e._toastTimeoutId),e._toastTimeoutId=null),e.classList.remove("is-visible"),e.classList.add("is-exiting");let t=new CustomEvent("toast:dismiss",{bubbles:!0,detail:{toast:e}});e.dispatchEvent(t);let n=()=>{e.removeEventListener("transitionend",n),e._toastCleanup&&(e._toastCleanup.forEach(s=>s()),delete e._toastCleanup),e.parentElement&&e.parentElement.removeChild(e)};e.addEventListener("transitionend",n),setTimeout(()=>{e._toastCleanup&&(e._toastCleanup.forEach(s=>s()),delete e._toastCleanup),e.parentElement&&e.parentElement.removeChild(e)},400)},destroyAll:function(){Object.keys(this.containers).forEach(e=>{let t=this.containers[e];if(!t)return;t.querySelectorAll(".vd-toast").forEach(s=>{s._toastTimeoutId&&clearTimeout(s._toastTimeoutId),s._toastCleanup&&(s._toastCleanup.forEach(r=>r()),delete s._toastCleanup),s.parentElement&&s.parentElement.removeChild(s)}),t.parentElement&&t.parentElement.removeChild(t)}),this.containers={}},dismissAll:function(e){e&&this.containers[e]?this.containers[e].querySelectorAll(".vd-toast").forEach(n=>this.dismiss(n)):Object.values(this.containers).forEach(t=>{t.querySelectorAll(".vd-toast").forEach(s=>this.dismiss(s))})},getDefaultIcon:function(e){return{success:'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>',error:'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="15" y1="9" x2="9" y2="15"></line><line x1="9" y1="9" x2="15" y2="15"></line></svg>',warning:'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>',info:'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg>'}[e]||""},success:function(e,t){return this.show(Object.assign({message:e,type:"success"},t))},error:function(e,t){return this.show(Object.assign({message:e,type:"error"},t))},warning:function(e,t){return this.show(Object.assign({message:e,type:"warning"},t))},info:function(e,t){return this.show(Object.assign({message:e,type:"info"},t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("toast",v),window.Toast=v})();(function(){"use strict";let v={tooltips:new Map,delayTimers:new Map,sanitizeHtml:function(e,t){return typeof sanitizeHtml=="function"?sanitizeHtml(e,t):e||""},init:function(e){window.Vanduo.queryAll(e,"[data-tooltip], [data-tooltip-html]").forEach(n=>{this.tooltips.has(n)||this.initTooltip(n)})},initTooltip:function(e){let t=this.createTooltip(e),n=[],s=()=>{this.showTooltip(e,t)},r=()=>{this.hideTooltip(e,t)},i=()=>{this.showTooltip(e,t)},o=()=>{this.hideTooltip(e,t)};e.addEventListener("mouseenter",s),e.addEventListener("mouseleave",r),e.addEventListener("focus",i),e.addEventListener("blur",o),n.push(()=>e.removeEventListener("mouseenter",s),()=>e.removeEventListener("mouseleave",r),()=>e.removeEventListener("focus",i),()=>e.removeEventListener("blur",o)),this.tooltips.set(e,{tooltip:t,cleanup:n})},createTooltip:function(e){let t=document.createElement("div");t.className="vd-tooltip",t.setAttribute("role","tooltip"),t.setAttribute("aria-hidden","true");let n="tooltip-"+Math.random().toString(36).substr(2,9);t.id=n,e.setAttribute("aria-describedby",n);let s=e.dataset.tooltipHtml,r=e.dataset.tooltip;if(s){let a=e.hasAttribute("data-tooltip-allow-svg");t.innerHTML=this.sanitizeHtml(s,{allowSvg:a,allowStyle:!1}),t.classList.add("vd-tooltip-html")}else r&&(t.textContent=r);let i=e.dataset.tooltipPlacement||e.dataset.placement||"top";t.setAttribute("data-placement",i),t.classList.add(`vd-tooltip-${i}`),e.dataset.tooltipVariant&&t.classList.add(`vd-tooltip-${e.dataset.tooltipVariant}`),e.dataset.tooltipSize&&t.classList.add(`vd-tooltip-${e.dataset.tooltipSize}`);let o=parseInt(e.dataset.tooltipDelay)||0;return t.dataset.delay=o,document.body.appendChild(t),t},showTooltip:function(e,t){let n=parseInt(t.dataset.delay)||0;if(n>0){let s=setTimeout(()=>{this.positionTooltip(e,t),t.classList.add("is-visible"),t.setAttribute("aria-hidden","false")},n);this.delayTimers.set(e,s)}else this.positionTooltip(e,t),t.classList.add("is-visible"),t.setAttribute("aria-hidden","false")},hideTooltip:function(e,t){let n=this.delayTimers.get(e);n&&(clearTimeout(n),this.delayTimers.delete(e)),t.classList.remove("is-visible"),t.setAttribute("aria-hidden","true")},positionTooltip:function(e,t){let n=t.dataset.placement||"top",s=e.getBoundingClientRect(),r=t.getBoundingClientRect(),i=window.pageYOffset||document.documentElement.scrollTop,o=window.pageXOffset||document.documentElement.scrollLeft,a=0,c=0;switch(n){case"top":a=s.top+i-r.height-8,c=s.left+o+s.width/2-r.width/2;break;case"bottom":a=s.bottom+i+8,c=s.left+o+s.width/2-r.width/2;break;case"left":a=s.top+i+s.height/2-r.height/2,c=s.left+o-r.width-8;break;case"right":a=s.top+i+s.height/2-r.height/2,c=s.right+o+8;break}let l=window.innerWidth,f=window.innerHeight,d=8;c<d?c=d:c+r.width>l-d&&(c=l-r.width-d),a<i+d?a=i+d:a+r.height>i+f-d&&(a=i+f-r.height-d),t.style.cssText=`position: absolute; top: 0; left: 0; transform: translate(${c}px, ${a}px);`},show:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t&&this.tooltips.has(t)){let{tooltip:n}=this.tooltips.get(t);this.showTooltip(t,n)}},hide:function(e){let t=typeof e=="string"?document.querySelector(e):e;if(t&&this.tooltips.has(t)){let{tooltip:n}=this.tooltips.get(t);this.hideTooltip(t,n)}},update:function(e,t,n=!1){let s=typeof e=="string"?document.querySelector(e):e;if(s&&this.tooltips.has(s)){let{tooltip:r}=this.tooltips.get(s);if(n){let i=s.hasAttribute("data-tooltip-allow-svg");r.innerHTML=this.sanitizeHtml(t,{allowSvg:i,allowStyle:!1}),r.classList.add("vd-tooltip-html")}else r.textContent=t,r.classList.remove("vd-tooltip-html")}},destroy:function(e){let t=this.tooltips.get(e);if(!t)return;let n=this.delayTimers.get(e);n&&(clearTimeout(n),this.delayTimers.delete(e)),t.cleanup.forEach(s=>s()),t.tooltip&&t.tooltip.parentNode&&t.tooltip.parentNode.removeChild(t.tooltip),this.tooltips.delete(e)},destroyAll:function(){this.tooltips.forEach((e,t)=>{this.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("tooltips",v),window.VanduoTooltips=v})();(function(){"use strict";let v={minQueryLength:2,maxResults:10,debounceMs:150,highlightTag:"mark",keyboardShortcut:!0,containerSelector:".vd-doc-search",inputSelector:".vd-doc-search-input",resultsSelector:".vd-doc-search-results",contentSelector:".doc-content section[id]",titleSelector:".demo-title, h2, h3",navSelector:".doc-nav-link",sectionSelector:".doc-nav-section",excludeFromContent:"pre, code, script, style",maxContentLength:500,data:null,categoryIcons:{"getting-started":"ph-rocket-launch",core:"ph-cube",components:"ph-puzzle-piece",interactive:"ph-cursor-click","data-display":"ph-table",feedback:"ph-bell",meta:"ph-info",default:"ph-file-text"},onSelect:null,onSearch:null,onOpen:null,onClose:null,emptyTitle:"No results found",emptyText:"Try different keywords or check spelling",placeholder:"Search..."},e={mark:!0,span:!0,strong:!0,em:!0};function t(o){return typeof window.VanduoLifecycle<"u"&&window.VanduoLifecycle.isRoot(o)}function n(o){return t(o)?o:document}function s(o){let a=typeof o=="string"?o.toLowerCase():"mark";return e[a]?a:"mark"}function r(o){let a=Object.assign({},v,o||{});a.root=n(a.root),a.highlightTag=s(a.highlightTag);let c={initialized:!1,index:[],results:[],activeIndex:-1,isOpen:!1,query:"",container:null,input:null,resultsContainer:null,debounceTimer:null,boundHandlers:{}};function l(x){if(window.Vanduo&&typeof window.Vanduo.queryAll=="function")return window.Vanduo.queryAll(a.root,x);let D=n(a.root);if(D===document)return Array.from(document.querySelectorAll(x));let y=[];return D instanceof Element&&D.matches(x)&&y.push(D),y.concat(Array.from(D.querySelectorAll(x)))}function f(x){let D=l(x);return D.length?D[0]:null}function d(x,D,...y){try{D(...y)}catch(T){console.warn('[Vanduo Search] Callback error in "'+x+'":',T)}}function h(x){if(c.resultsContainer)try{c.resultsContainer.innerHTML=x}catch(D){console.warn("[Vanduo Search] Failed to render results:",D)}}function u(){return c.initialized?ee:(c.container=f(a.containerSelector),!c.container||(c.input=c.container.querySelector(a.inputSelector),c.resultsContainer=c.container.querySelector(a.resultsSelector),!c.input||!c.resultsContainer)?(c.initialized=!1,null):(a.placeholder&&c.input.setAttribute("placeholder",a.placeholder),p(),S(),b(),c.initialized=!0,ee))}function p(){if(c.index=[],a.data&&Array.isArray(a.data)){a.data.forEach(function(y){c.index.push({id:y.id||C(y.title),title:y.title||"",category:y.category||"",categorySlug:C(y.category||""),content:y.content||"",keywords:y.keywords||m(y.title+" "+y.content),url:y.url||"#"+(y.id||C(y.title)),icon:y.icon||""})});return}let x=l(a.contentSelector),D=E();x.forEach(function(y){let T=y.id;if(!T)return;let A=y.querySelector(a.titleSelector),k=A?A.textContent.replace(/v[\d.]+/g,"").trim():T,z=D[T]||"Documentation",R=L(y),O=_(y,k),B=A?A.querySelector("i.ph"):null,X="";if(B&&B.classList){for(let G=0;G<B.classList.length;G++)if(B.classList[G].indexOf("ph-")===0){X=B.classList[G];break}}c.index.push({id:T,title:k,category:z,categorySlug:C(z),content:R,keywords:O,url:"#"+T,icon:X})})}function E(){let x={},D="Documentation";return l(a.navSelector+", "+a.sectionSelector).forEach(function(T){if(T.classList.contains("doc-nav-section"))D=T.textContent.trim();else{let A=T.getAttribute("href");if(A&&A.startsWith("#")){let k=A.substring(1);x[k]=D}}}),x}function L(x){let D=x.cloneNode(!0);D.querySelectorAll(a.excludeFromContent).forEach(function(A){A.remove()});let T=D.textContent||"";return T=T.replace(/\s+/g," ").trim(),T.substring(0,a.maxContentLength)}function _(x,D){let y=[];return D.toLowerCase().split(/\s+/).forEach(function(k){k.length>2&&y.push(k)}),x.querySelectorAll("code").forEach(function(k){let R=(k.textContent||"").match(/\.([\w-]+)/g);R&&R.forEach(function(O){y.push(O.substring(1).toLowerCase())})}),x.querySelectorAll("[data-tooltip], [data-modal]").forEach(function(k){k.getAttributeNames().filter(function(R){return R.startsWith("data-")}).forEach(function(R){y.push(R.replace("data-",""))})}),Array.from(new Set(y))}function m(x){return x.toLowerCase().split(/\s+/).filter(function(y){return y.length>2})}function C(x){return x.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"")}function S(){c.boundHandlers.handleInput=function(x){V(x)},c.boundHandlers.handleFocus=function(){c.query.length>=a.minQueryLength&&J()},c.boundHandlers.handleKeydown=function(x){I(x)},c.boundHandlers.handleOutsideClick=function(x){c.container.contains(x.target)||U()},c.boundHandlers.handleGlobalKeydown=function(x){a.keyboardShortcut&&(x.metaKey||x.ctrlKey)&&x.key==="k"&&(x.preventDefault(),c.input.focus(),c.input.select())},c.boundHandlers.handleResultClick=function(x){let D=x.target.closest(".vd-doc-search-result");if(D){let y=parseInt(D.dataset.index,10);Z(y)}},c.input.addEventListener("input",c.boundHandlers.handleInput),c.input.addEventListener("focus",c.boundHandlers.handleFocus),c.input.addEventListener("keydown",c.boundHandlers.handleKeydown),document.addEventListener("click",c.boundHandlers.handleOutsideClick),document.addEventListener("keydown",c.boundHandlers.handleGlobalKeydown),c.resultsContainer.addEventListener("click",c.boundHandlers.handleResultClick)}function w(){c.input&&(c.input.removeEventListener("input",c.boundHandlers.handleInput),c.input.removeEventListener("focus",c.boundHandlers.handleFocus),c.input.removeEventListener("keydown",c.boundHandlers.handleKeydown)),document.removeEventListener("click",c.boundHandlers.handleOutsideClick),document.removeEventListener("keydown",c.boundHandlers.handleGlobalKeydown),c.resultsContainer&&c.resultsContainer.removeEventListener("click",c.boundHandlers.handleResultClick)}function b(){let x=c.resultsContainer.id||"search-results-"+Math.random().toString(36).substr(2,9);c.resultsContainer.id=x,c.input.setAttribute("role","combobox"),c.input.setAttribute("aria-autocomplete","list"),c.input.setAttribute("aria-controls",x),c.input.setAttribute("aria-expanded","false"),c.resultsContainer.setAttribute("role","listbox"),c.resultsContainer.setAttribute("aria-label","Search results")}function V(x){let D=x.target.value.trim();c.debounceTimer&&clearTimeout(c.debounceTimer),c.debounceTimer=setTimeout(function(){if(c.query=D,D.length<a.minQueryLength){U();return}c.results=q(D),c.activeIndex=-1,M(),J(),typeof a.onSearch=="function"&&d("onSearch",a.onSearch,D,c.results)},a.debounceMs)}function I(x){if(!c.isOpen){x.key==="ArrowDown"&&c.query.length>=a.minQueryLength&&(x.preventDefault(),c.results=q(c.query),M(),J());return}switch(x.key){case"ArrowDown":x.preventDefault(),K(1);break;case"ArrowUp":x.preventDefault(),K(-1);break;case"Enter":x.preventDefault(),c.activeIndex>=0?Z(c.activeIndex):c.results.length>0&&Z(0);break;case"Escape":x.preventDefault(),U();break;case"Tab":U();break}}function q(x){let D=x.toLowerCase().split(/\s+/).filter(function(T){return T.length>0}),y=[];return c.index.forEach(function(T){let A=0,k=T.title.toLowerCase(),z=T.category.toLowerCase(),R=T.content.toLowerCase();D.forEach(function(O){k.includes(O)&&(A+=100,k===O?A+=50:k.startsWith(O)&&(A+=25)),z.includes(O)&&(A+=50),T.keywords.some(function(X){return X.includes(O)})&&(A+=30),R.includes(O)&&(A+=10)}),A>0&&y.push({id:T.id,title:T.title,category:T.category,categorySlug:T.categorySlug,content:T.content,url:T.url,icon:T.icon,score:A})}),y.sort(function(T,A){return A.score-T.score}),y.slice(0,a.maxResults)}function M(){if(c.results.length===0){h(g());return}let x='<ul class="vd-doc-search-results-list" role="listbox">';c.results.forEach(function(D,y){let T=y===c.activeIndex,A=D.icon||N(D.categorySlug),k=F(D.content,c.query);x+='<li class="vd-doc-search-result'+(T?" is-active":"")+'" role="option" id="vd-doc-search-result-'+y+'" data-index="'+y+'" data-category="'+$(D.categorySlug)+'" aria-selected="'+T+'"><div class="vd-doc-search-result-icon"><i class="ph '+$(A)+'"></i></div><div class="vd-doc-search-result-content"><div class="vd-doc-search-result-title">'+H(D.title,c.query)+'</div><div class="vd-doc-search-result-category">'+$(D.category)+'</div><div class="vd-doc-search-result-excerpt">'+H(k,c.query)+"</div></div></li>"}),x+="</ul>",x+=P(),h(x)}function g(){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">'+$(a.emptyTitle)+'</div><div class="vd-doc-search-empty-text">'+$(a.emptyText)+"</div></div>"}function P(){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 N(x){return a.categoryIcons[x]||a.categoryIcons.default||"ph-file-text"}function F(x,D){let y=D.toLowerCase().split(/\s+/),T=x.toLowerCase(),A=100,k=-1;for(let B=0;B<y.length;B++){let X=T.indexOf(y[B]);X!==-1&&(k===-1||X<k)&&(k=X)}if(k===-1)return x.substring(0,A)+"...";let z=Math.max(0,k-30),R=Math.min(x.length,k+A),O=x.substring(z,R);return z>0&&(O="..."+O),R<x.length&&(O=O+"..."),O}function H(x,D){if(!D)return $(x);let y=D.toLowerCase().split(/\s+/).filter(function(A){return A.length>0}),T=$(x);return y.forEach(function(A){if(A.length>50)return;let k=new RegExp("("+A.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+")","gi");T=T.replace(k,"<"+a.highlightTag+">$1</"+a.highlightTag+">")}),T}function $(x){let D=document.createElement("div");return D.textContent=x,D.innerHTML}function K(x){let D=c.activeIndex+x;D<0?D=c.results.length-1:D>=c.results.length&&(D=0),ae(D)}function ae(x){let D=c.resultsContainer.querySelector(".vd-doc-search-result.is-active");D&&(D.classList.remove("is-active"),D.setAttribute("aria-selected","false")),c.activeIndex=x;let y=c.resultsContainer.querySelector('[data-index="'+x+'"]');y&&(y.classList.add("is-active"),y.setAttribute("aria-selected","true"),c.input.setAttribute("aria-activedescendant","vd-doc-search-result-"+x),y.scrollIntoView({block:"nearest"}))}function Z(x){let D=c.results[x];if(!D)return;if(U(),c.input.value="",c.query="",typeof a.onSelect=="function"){d("onSelect",a.onSelect,D);return}let y=f(D.url)||document.querySelector(D.url);y&&(y.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",D.url),re(D.id))}function re(x){l(a.navSelector).forEach(function(y){y.classList.remove("active"),y.getAttribute("href")==="#"+x&&y.classList.add("active")})}function J(){c.isOpen||(c.isOpen=!0,c.resultsContainer.classList.add("is-open"),c.input.setAttribute("aria-expanded","true"),typeof a.onOpen=="function"&&d("onOpen",a.onOpen))}function U(){c.isOpen&&(c.isOpen=!1,c.activeIndex=-1,c.resultsContainer.classList.remove("is-open"),c.input.setAttribute("aria-expanded","false"),c.input.removeAttribute("aria-activedescendant"),typeof a.onClose=="function"&&d("onClose",a.onClose))}function ie(){w(),c.initialized=!1,c.index=[],c.results=[],c.isOpen=!1,c.query="",c.debounceTimer&&clearTimeout(c.debounceTimer),c.resultsContainer&&h("")}function te(){p()}function Q(x){Object.assign(a,x),a.root=n(a.root),a.highlightTag=s(a.highlightTag)}function oe(){return Object.assign({},a)}function j(){return c.index.slice()}let ee={init:u,destroy:ie,rebuild:te,search:q,open:J,close:U,setConfig:Q,getConfig:oe,getIndex:j,getContainer:function(){return c.container}};return ee}let i={create:function(o){let a=r(o);return a&&a.init(),a||null},_instance:null,config:Object.assign({},v),init:function(o,a){let c=t(o)?o:null,l=c?a:o;return this._instance&&this._instance.destroy(),l&&Object.assign(this.config,l),this._instance=r(Object.assign({},this.config,c?{root:c}:{})),this._instance?this._instance.init():null},destroy:function(o){o&&this._instance&&this._instance.getContainer()&&typeof window.VanduoLifecycle<"u"&&!window.VanduoLifecycle.isInRoot(o,this._instance.getContainer())||this._instance&&(this._instance.destroy(),this._instance=null)},destroyAll:function(o){this.destroy(o)},rebuild:function(){this._instance&&this._instance.rebuild()},search:function(o){return this._instance?this._instance.search(o):[]},open:function(){this._instance&&this._instance.open()},close:function(){this._instance&&this._instance.close()}};typeof window.Vanduo<"u"&&window.Vanduo.register("docSearch",i),window.Search=i,window.DocSearch=i,window.VanduoDocSearch=i})();(function(){"use strict";let v={instances:new Map,currentDrag:null,touchState:null,feedbackElement:null,containerSelector:".vd-draggable-container, .vd-draggable-container-vertical",init:function(e){window.Vanduo.queryAll(e,".vd-draggable, [data-draggable]").forEach(r=>{this.instances.has(r)||this.initDraggable(r)}),window.Vanduo.queryAll(e,this.containerSelector).forEach(r=>{this.instances.has(r)||this.initContainer(r)}),window.Vanduo.queryAll(e,".vd-drop-zone").forEach(r=>{this.instances.has(r)||this.initDropZone(r)}),this.createFeedbackElement()},initDraggable:function(e){let t=[];e.hasAttribute("draggable")||e.setAttribute("draggable","true"),e.hasAttribute("tabindex")||e.setAttribute("tabindex","0"),e.setAttribute("role","option"),e.setAttribute("aria-roledescription","draggable item"),e.setAttribute("aria-grabbed","false");let n=f=>{this.handleDragStart(f,e)};e.addEventListener("dragstart",n),t.push(()=>e.removeEventListener("dragstart",n));let s=f=>{this.handleDrag(f,e)};e.addEventListener("drag",s),t.push(()=>e.removeEventListener("drag",s));let r=f=>{this.handleDragEnd(f,e)};e.addEventListener("dragend",r),t.push(()=>e.removeEventListener("dragend",r));let i=f=>{this.handleTouchStart(f,e)};e.addEventListener("touchstart",i),t.push(()=>e.removeEventListener("touchstart",i));let o=f=>{this.handleTouchMove(f,e)};e.addEventListener("touchmove",o,{passive:!1}),t.push(()=>e.removeEventListener("touchmove",o));let a=f=>{this.handleTouchEnd(f,e)};e.addEventListener("touchend",a,{passive:!1}),t.push(()=>e.removeEventListener("touchend",a));let c=f=>{this.handleTouchEnd(f,e)};e.addEventListener("touchcancel",c),t.push(()=>e.removeEventListener("touchcancel",c));let l=f=>{this.handleKeydown(f,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(o=>{this.instances.has(o)||this.initDraggable(o)});let n=[],s=o=>{o.preventDefault(),o.dataTransfer.dropEffect="move"},r=o=>{if(o.preventDefault(),o.dataTransfer.dropEffect="move",!this.currentDrag)return;let a=this.currentDrag.element;e.contains(a)&&(o.clientX===0&&o.clientY===0||this.handleReorder(e,a,o.clientX,o.clientY))},i=o=>{o.preventDefault()};e.addEventListener("dragenter",s),e.addEventListener("dragover",r),e.addEventListener("drop",i),n.push(()=>{e.removeEventListener("dragenter",s),e.removeEventListener("dragover",r),e.removeEventListener("drop",i)}),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=o=>{o.preventDefault(),this.handleDragOver(o,e)};e.addEventListener("dragover",n),t.push(()=>e.removeEventListener("dragover",n));let s=o=>{o.preventDefault(),this.handleDragEnter(o,e)};e.addEventListener("dragenter",s),t.push(()=>e.removeEventListener("dragenter",s));let r=o=>{this.handleDragLeave(o,e)};e.addEventListener("dragleave",r),t.push(()=>e.removeEventListener("dragleave",r));let i=o=>{o.preventDefault(),this.handleDrop(o,e)};e.addEventListener("drop",i),t.push(()=>e.removeEventListener("drop",i)),this.instances.set(e,{cleanup:t})},createFeedbackElement:function(){if(!this.feedbackElement){let e=document.querySelector(".vd-drag-feedback");if(e){this.feedbackElement=e;return}this.feedbackElement=document.createElement("div"),this.feedbackElement.className="vd-drag-feedback hidden",this.feedbackElement.setAttribute("role","presentation"),document.body.appendChild(this.feedbackElement)}},handleDragStart:function(e,t){t.classList.add("is-dragging"),t.setAttribute("aria-grabbed","true"),this.currentDrag={element:t,initialPosition:{x:e.clientX,y:e.clientY},initialBounds:t.getBoundingClientRect(),data:this.getData(t)},e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text/plain",this.currentDrag.data),t.dispatchEvent(new CustomEvent("draggable:start",{bubbles:!0,detail:{element:t,data:this.currentDrag.data,position:{x:e.clientX,y:e.clientY}}}))},handleDrag:function(e,t){this.currentDrag&&t.dispatchEvent(new CustomEvent("draggable:drag",{bubbles:!0,detail:{element:t,data:this.currentDrag.data,position:{x:e.clientX,y:e.clientY},delta:{x:e.clientX-this.currentDrag.initialPosition.x,y:e.clientY-this.currentDrag.initialPosition.y}}}))},handleDragEnd:function(e,t){t.classList.remove("is-dragging"),t.classList.add("is-dropped"),setTimeout(()=>t.classList.remove("is-dropped"),300),t.setAttribute("aria-grabbed","false"),this.feedbackElement&&this.feedbackElement.classList.add("hidden");let n=this.currentDrag?.data||this.getData(t),s=this.currentDrag?.initialPosition||{x:0,y:0};t.dispatchEvent(new CustomEvent("draggable:end",{bubbles:!0,detail:{element:t,data:n,position:{x:e.clientX,y:e.clientY},delta:{x:e.clientX-s.x,y:e.clientY-s.y}}})),this.currentDrag=null},handleTouchStart:function(e,t){let n=e.touches[0],s=t.getBoundingClientRect();this.touchState={element:t,startX:n.clientX,startY:n.clientY,lastX:n.clientX,lastY:n.clientY,offsetX:n.clientX-s.left,offsetY:n.clientY-s.top,startTime:Date.now(),isDragging:!1}},handleTouchMove:function(e,t){if(!this.touchState)return;let n=e.touches[0];this.touchState.lastX=n.clientX,this.touchState.lastY=n.clientY;let s=n.clientX-this.touchState.startX,r=n.clientY-this.touchState.startY;if((Math.abs(s)>10||Math.abs(r)>10)&&(e.cancelable&&e.preventDefault(),this.touchState.isDragging||(this.touchState.isDragging=!0,t.classList.add("is-dragging"),t.setAttribute("aria-grabbed","true"),this.currentDrag={element:t,initialPosition:{x:this.touchState.startX,y:this.touchState.startY},initialBounds:t.getBoundingClientRect(),data:this.getData(t),offsetX:this.touchState.offsetX,offsetY:this.touchState.offsetY},t.dispatchEvent(new CustomEvent("draggable:start",{bubbles:!0,detail:{element:t,data:this.currentDrag.data,position:{x:n.clientX,y:n.clientY}}}))),this.updateFeedback(n.clientX,n.clientY),this.currentDrag)){t.dispatchEvent(new CustomEvent("draggable:drag",{bubbles:!0,detail:{element:t,data:this.currentDrag.data,position:{x:n.clientX,y:n.clientY},delta:{x:s,y:r}}})),this.updateTouchDropZone(n.clientX,n.clientY);let i=t.closest(this.containerSelector);i&&i.contains(t)&&this.handleReorder(i,t,n.clientX,n.clientY)}},handleTouchEnd:function(e,t){if(this.touchState&&this.touchState.isDragging){e.cancelable&&e.preventDefault();let n=e.changedTouches?.[0],s={x:n?.clientX??this.touchState.lastX??this.touchState.startX,y:n?.clientY??this.touchState.lastY??this.touchState.startY},r=this.resolveDropZoneAtPoint(s.x,s.y)||this.touchState.overZone;r?this.dispatchDrop(r,s):this.touchState.overZone&&this.touchState.overZone.classList.remove("is-drag-over"),t.classList.remove("is-dragging"),t.classList.add("is-dropped"),t.setAttribute("aria-grabbed","false"),setTimeout(()=>t.classList.remove("is-dropped"),300),this.feedbackElement&&this.feedbackElement.classList.add("hidden");let i=this.currentDrag?.data||this.getData(t),o=this.touchState?.startX||0,a=this.touchState?.startY||0;t.dispatchEvent(new CustomEvent("draggable:end",{bubbles:!0,detail:{element:t,data:i,position:s,delta:{x:s.x-o,y:s.y-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(),this.dispatchDrop(t,{x:e.clientX,y:e.clientY})},resolveDropZoneAtPoint:function(e,t){if(!Number.isFinite(e)||!Number.isFinite(t))return null;if(typeof document.elementsFromPoint=="function"){let i=document.elementsFromPoint(e,t);for(let o of i){let a=o.closest(".vd-drop-zone");if(a)return a}}let n=document.elementFromPoint(e,t),s=n?n.closest(".vd-drop-zone"):null;if(s)return s;let r=document.querySelectorAll(".vd-drop-zone");for(let i of r){let o=i.getBoundingClientRect();if(e>=o.left&&e<=o.right&&t>=o.top&&t<=o.bottom)return i}return null},updateTouchDropZone:function(e,t){if(!this.touchState)return;let n=this.resolveDropZoneAtPoint(e,t),s=this.touchState.overZone||null;s&&s!==n&&s.classList.remove("is-drag-over"),n&&n!==s&&n.classList.add("is-drag-over"),this.touchState.overZone=n||null},dispatchDrop:function(e,t){e.classList.remove("is-drag-over"),e.dispatchEvent(new CustomEvent("draggable:drop",{bubbles:!0,detail:{zone:e,element:this.currentDrag?.element,data:this.currentDrag?.data,position:t}}))},handleReorder:function(e,t,n,s){let r=e.classList.contains("vd-draggable-container-vertical"),o=[...e.querySelectorAll(".vd-draggable-item:not(.is-dragging), .vd-draggable:not(.is-dragging)")].reduce((a,c)=>{let l=c.getBoundingClientRect(),f=r?s-l.top-l.height/2:n-l.left-l.width/2;return f<0&&f>a.offset?{offset:f,element:c}:a},{offset:Number.NEGATIVE_INFINITY}).element;o==null?e.appendChild(t):e.insertBefore(t,o)},handleKeydown:function(e,t){switch(e.key){case"Enter":case" ":e.preventDefault(),t.click();break;case"Escape":t.classList.contains("is-dragging")&&(t.classList.remove("is-dragging"),t.setAttribute("aria-grabbed","false"),this.feedbackElement&&this.feedbackElement.classList.add("hidden"),this.currentDrag=null);break;case"ArrowUp":case"ArrowLeft":{e.preventDefault();let n=t.previousElementSibling;n&&(n.classList.contains("vd-draggable")||n.classList.contains("vd-draggable-item"))&&(t.parentNode.insertBefore(t,n),t.focus(),t.dispatchEvent(new CustomEvent("draggable:reorder",{bubbles:!0,detail:{element:t,direction:"up"}})));break}case"ArrowDown":case"ArrowRight":{e.preventDefault();let n=t.nextElementSibling;n&&(n.classList.contains("vd-draggable")||n.classList.contains("vd-draggable-item"))&&(t.parentNode.insertBefore(n,t),t.focus(),t.dispatchEvent(new CustomEvent("draggable:reorder",{bubbles:!0,detail:{element:t,direction:"down"}})));break}}},getData:function(e){return e.dataset.draggable||e.textContent.trim()},updateFeedback:function(e,t){if(!this.currentDrag)return;this.feedbackElement.classList.remove("hidden");let n=this.currentDrag.initialBounds;this.feedbackElement.innerHTML="";let s=this.currentDrag.element.cloneNode(!0);this.feedbackElement.appendChild(s);let r=this.currentDrag.offsetX??20,i=this.currentDrag.offsetY??20;Object.assign(this.feedbackElement.style,{left:e-r+"px",top:t-i+"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",v),window.VanduoDraggable=v})();(function(){"use strict";let v=new Map;function e(d){return!!d&&(d===document||d.nodeType===1||d.nodeType===9||d.nodeType===11)}function t(d){return e(d)?d:document}function n(d,h){let u=t(d);return h instanceof Element?u===document?document.documentElement?document.documentElement.contains(h):document.contains(h):u===h?!0:typeof u.contains=="function"&&u.contains(h):!1}function s(d,h){let u=t(d),p=[];if(u instanceof Element&&typeof u.matches=="function"&&u.matches(h)&&p.push(u),typeof u.querySelectorAll=="function"){let E=u.querySelectorAll(h);for(let L=0;L<E.length;L++)p.push(E[L])}return p}function r(d){try{return new URL(d,window.location.href).origin===window.location.origin}catch{return!1}}function i(d,h){let p=new DOMParser().parseFromString(h.trim(),"text/html"),E=["SCRIPT","IFRAME","OBJECT","EMBED","FORM","BASE","LINK","META","STYLE"];for(let m of E){let C=p.querySelectorAll(m);for(let S=C.length-1;S>=0;S--)C[S].parentNode.removeChild(C[S])}function L(m){if(m.nodeType===Node.ELEMENT_NODE){let C=m.attributes;for(let w=C.length-1;w>=0;w--){let b=C[w].name.toLowerCase(),I=C[w].value.toLowerCase().trim();(b.startsWith("on")||I.startsWith("javascript:")||I.startsWith("data:")||I.startsWith("vbscript:"))&&m.removeAttribute(C[w].name)}let S=m.childNodes;for(let w=0;w<S.length;w++)L(S[w])}}L(p.body);let _=Array.from(p.body.childNodes);for(;d.firstChild;)d.removeChild(d.firstChild);_.forEach(function(m){d.appendChild(document.adoptNode(m))})}function o(){return'<div class="vd-skeleton-card" style="position:relative;min-height:200px;padding:2rem;overflow:hidden;"><div class="vd-skeleton vd-skeleton-heading-lg" style="margin-bottom:1.5rem;"></div><div class="vd-skeleton vd-skeleton-paragraph"><div class="vd-skeleton vd-skeleton-text"></div><div class="vd-skeleton vd-skeleton-text"></div><div class="vd-skeleton vd-skeleton-text"></div></div><div class="vd-dynamic-loader" style="position:absolute;inset:0;"><div class="vd-dynamic-loader-grid"><div class="vd-spinner vd-spinner-sm vd-spinner-success"></div><div class="vd-spinner vd-spinner-sm vd-spinner-warning"></div><div class="vd-spinner vd-spinner-sm vd-spinner-error"></div><div class="vd-spinner vd-spinner-sm vd-spinner-info"></div></div><span class="vd-dynamic-loader-text">Loading\u2026</span></div></div>'}function a(){return'<div class="vd-dynamic-loader" style="min-height:180px;display:flex;align-items:center;justify-content:center;"><div class="vd-dynamic-loader-grid"><div class="vd-spinner vd-spinner-sm vd-spinner-success"></div><div class="vd-spinner vd-spinner-sm vd-spinner-warning"></div><div class="vd-spinner vd-spinner-sm vd-spinner-error"></div><div class="vd-spinner vd-spinner-sm vd-spinner-info"></div></div><span class="vd-dynamic-loader-text">Loading\u2026</span></div>'}function c(d){return!d||d==="skeleton"?o():d==="spinner"?a():d}function l(d,h,u){d.dispatchEvent(new CustomEvent(h,{bubbles:!0,detail:u||{}}))}let f={observe:function(d,h,u){if(!(d instanceof Element)){console.warn("[VanduoLazyLoad] observe() requires a DOM Element.");return}if(typeof h!="function"){console.warn("[VanduoLazyLoad] observe() requires a callback function.");return}if(v.has(d))return;let p=u&&u.threshold!=null?u.threshold:0,E=u&&u.rootMargin?u.rootMargin:"0px",L=new IntersectionObserver(function(_,m){_.forEach(function(C){if(C.isIntersecting){m.unobserve(C.target),v.delete(C.target),typeof window.VanduoLifecycle<"u"&&window.VanduoLifecycle.has(C.target,"lazyLoad")&&window.VanduoLifecycle.unregister(C.target,"lazyLoad");try{h(C.target)}catch(S){console.error("[VanduoLazyLoad] Callback threw:",S)}}})},{threshold:p,rootMargin:E});v.set(d,L),typeof window.VanduoLifecycle<"u"&&!window.VanduoLifecycle.has(d,"lazyLoad")&&window.VanduoLifecycle.register(d,"lazyLoad",[()=>{f.unobserve(d,{skipLifecycle:!0})}]),L.observe(d)},unobserve:function(d,h){let u=h||{},p=v.get(d);p&&(p.unobserve(d),typeof p.disconnect=="function"&&p.disconnect(),v.delete(d)),!u.skipLifecycle&&typeof window.VanduoLifecycle<"u"&&window.VanduoLifecycle.has(d,"lazyLoad")&&window.VanduoLifecycle.unregister(d,"lazyLoad")},unobserveAll:function(){Array.from(v.keys()).forEach(function(h){f.unobserve(h)})},loadSection:function(d,h,u){if(typeof d!="string"||!d){console.warn("[VanduoLazyLoad] loadSection() requires a non-empty URL string.");return}if(!(h instanceof Element)){console.warn("[VanduoLazyLoad] loadSection() requires a DOM Element as containerEl.");return}if(!r(d)){console.error("[VanduoLazyLoad] loadSection() blocked cross-origin URL:",d);return}let p=u||{},E=c(p.placeholder);i(h,E),l(h,"lazysection:loading",{url:d}),this.observe(h,function(){let L=new window.AbortController,_=setTimeout(function(){L.abort()},1e4);window.fetch(d,{signal:L.signal}).then(function(m){if(clearTimeout(_),!m.ok)throw new Error("HTTP "+m.status);return m.text()}).then(function(m){i(h,m),l(h,"lazysection:loaded",{url:d}),typeof window.Vanduo<"u"&&window.Vanduo.init(h),typeof p.onLoaded=="function"&&p.onLoaded(h)}).catch(function(m){let C=document.createElement("div");C.className="vd-alert vd-alert-error",C.setAttribute("role","alert");let S=document.createElement("span");S.textContent="Failed to load content. ";let w=document.createElement("small");for(w.style.opacity="0.7",w.textContent=m.message,C.appendChild(S),C.appendChild(w);h.firstChild;)h.removeChild(h.firstChild);h.appendChild(C),l(h,"lazysection:error",{url:d,error:m}),console.error("[VanduoLazyLoad] loadSection failed:",m),typeof p.onError=="function"&&p.onError(m)})},{threshold:p.threshold,rootMargin:p.rootMargin})},init:function(d){let h=this;s(d,"[data-vd-lazy]").forEach(function(p){if(v.has(p)||p.dataset.vdLazyState==="loading"||p.dataset.vdLazyState==="loaded")return;let E=p.getAttribute("data-vd-lazy");if(!E)return;p.dataset.vdLazyState="loading";let L=p.getAttribute("data-vd-lazy-placeholder")||"skeleton";h.loadSection(E,p,{placeholder:L,onLoaded:function(){p.dataset.vdLazyState="loaded"},onError:function(){p.dataset.vdLazyState="error"}})})},destroy:function(d){this.unobserve(d)},destroyAll:function(d){let h=t(d);if(h===document){this.unobserveAll();return}Array.from(v.keys()).forEach(p=>{n(h,p)&&this.unobserve(p)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("lazyLoad",f,{aliases:["LazyLoad"]}),window.VanduoLazyLoad=f})();(function(){"use strict";let v={observers:new Map,init:function(e){window.Vanduo.queryAll(e,"[data-glass-scroll]").forEach(t=>{this.observers.has(t)||this.initElement(t)})},initElement:function(e){let t=e.dataset.glassSentinel,n;if(t&&(n=document.querySelector(t)),n||(n=e.previousElementSibling),!n){e.classList.add("is-glass-active");return}let s=new IntersectionObserver(r=>{r.forEach(i=>{e.classList.toggle("is-glass-active",!i.isIntersecting)})},{threshold:0,rootMargin:"0px"});s.observe(n),this.observers.set(e,s)},destroy:function(e){let t=this.observers.get(e);t&&(t.disconnect(),this.observers.delete(e))},destroyAll:function(){this.observers.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("glassScroll",v),window.VanduoGlassScroll=v})();(function(){"use strict";let e={instances:new Map,init:function(t){window.Vanduo.queryAll(t,".vd-morph, [data-vd-morph]").forEach(function(s){e.instances.has(s)||s.getAttribute("data-vd-morph")!=="manual"&&e.initInstance(s)})},initInstance:function(t){e._ensureLayers(t);let n=[],s=!1,r=function(i){s||(e._runMorph(t,i,function(){s=!1}),s=!0)};t.addEventListener("click",r),n.push(function(){t.removeEventListener("click",r)}),this.instances.set(t,{cleanup:n})},morph:function(t){t&&(this.instances.has(t)||this.initInstance(t),this._runMorph(t,null,null))},destroy:function(t){let n=this.instances.get(t);n&&(n.cleanup.forEach(function(s){s()}),this.instances.delete(t))},destroyAll:function(){this.instances.forEach(function(t,n){e.destroy(n)})},_ensureLayers:function(t){if(!t.querySelector(".vd-morph-wave")){let n=document.createElement("span");n.className="vd-morph-wave",n.setAttribute("aria-hidden","true"),t.insertBefore(n,t.firstChild)}if(!t.querySelector(".vd-morph-shine")){let n=document.createElement("span");n.className="vd-morph-shine",n.setAttribute("aria-hidden","true");let s=t.querySelector(".vd-morph-wave");s&&s.nextSibling?t.insertBefore(n,s.nextSibling):t.insertBefore(n,t.firstChild)}},_runMorph:function(t,n,s){let r=t.querySelector(".vd-morph-wave");if(r){let a=t.getBoundingClientRect(),c=a.left+a.width/2,l=a.top+a.height/2,f=n&&n.clientX||c,d=n&&n.clientY||l;r.style.left=f-a.left+"px",r.style.top=d-a.top+"px"}t.classList.add("is-morphing");let i=750,o=getComputedStyle(t).getPropertyValue("--vd-morph-duration");if(o){let a=parseFloat(o);isNaN(a)||(i=a*(o.indexOf("ms")!==-1?1:1e3))}setTimeout(function(){t.classList.remove("is-morphing");let a=t.querySelector(".vd-morph-current"),c=t.querySelector(".vd-morph-next");a&&c&&(a.classList.remove("vd-morph-current"),a.classList.add("vd-morph-next"),c.classList.remove("vd-morph-next"),c.classList.add("vd-morph-current")),typeof s=="function"&&s()},i)}};typeof window.Vanduo<"u"&&window.Vanduo.register("morph",e),window.VanduoMorph=e})();(function(){"use strict";let v={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-expanding-cards").forEach(function(t){t.getAttribute("data-vd-expanding-cards")!=="manual"&&(v.instances.has(t)||v.initContainer(t))})},initContainer:function(e){let t=[],n=function(){return Array.prototype.slice.call(e.querySelectorAll(".vd-expanding-card"))},s=function(c){let l=n();!c||l.indexOf(c)===-1||(l.forEach(function(f){f.classList.toggle("is-active",f===c)}),c.focus({preventScroll:!0}))},r=function(c){let l=c.target,f=l.closest?l.closest(".vd-expanding-card"):null;!f||!e.contains(f)||s(f)},i=function(c){if(c.key!=="ArrowLeft"&&c.key!=="ArrowRight"&&c.key!=="Home"&&c.key!=="End")return;let l=n().filter(function(h){return h.offsetParent!==null||h.getClientRects().length>0});if(!l.length)return;let f=document.activeElement,d=l.indexOf(f);d<0&&(d=l.findIndex(function(h){return h.classList.contains("is-active")})),d<0&&(d=0),c.key==="ArrowLeft"?(c.preventDefault(),s(l[Math.max(0,d-1)])):c.key==="ArrowRight"?(c.preventDefault(),s(l[Math.min(l.length-1,d+1)])):c.key==="Home"?(c.preventDefault(),s(l[0])):c.key==="End"&&(c.preventDefault(),s(l[l.length-1]))};e.addEventListener("click",r),t.push(function(){e.removeEventListener("click",r)}),e.addEventListener("keydown",i),t.push(function(){e.removeEventListener("keydown",i)}),n().forEach(function(c){c.hasAttribute("tabindex")||c.setAttribute("tabindex","0"),c.setAttribute("role","button"),c.hasAttribute("aria-pressed")||c.setAttribute("aria-pressed",c.classList.contains("is-active")?"true":"false")});let o=function(){n().forEach(function(c){c.setAttribute("aria-pressed",c.classList.contains("is-active")?"true":"false")})},a=new MutationObserver(o);a.observe(e,{attributes:!0,subtree:!0,attributeFilter:["class"]}),t.push(function(){a.disconnect()}),o(),v.instances.set(e,{cleanup:t})},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(function(n){n()}),this.instances.delete(e))},destroyAll:function(){this.instances.forEach(function(e,t){v.destroy(t)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("expandingCards",v),window.VanduoExpandingCards=v})();(function(){"use strict";function n(o){let a=0;for(let c=0;c<o.length&&o[c].classList.contains("is-revealed");c++)a++;return a}function s(o){return o.parentElement||document.body}function r(o,a,c){a.forEach(function(I){I.classList.remove("is-revealed")});let l=s(o),f=l.querySelector("[data-vd-timeline-prev]"),d=l.querySelector("[data-vd-timeline-next]"),h=l.querySelector("[data-vd-timeline-play]"),u=l.querySelector("[data-vd-timeline-pause]"),p=null,E=!1,L=0;function _(){let I=n(a),q=a.length;if(f){let M=I===0;f.disabled=M,f.setAttribute("aria-disabled",M?"true":"false")}if(d){let M=I>=q;d.disabled=M,d.setAttribute("aria-disabled",M?"true":"false")}h&&h.setAttribute("aria-pressed",E?"true":"false"),u&&(u.disabled=!E)}function m(){let I=n(a);I<a.length&&a[I].classList.add("is-revealed"),_()}function C(){let I=n(a);I>0&&a[I-1].classList.remove("is-revealed"),_()}function S(){let I=++L;p=setTimeout(function(){if(p=null,!(!E||I!==L)){if(n(a)>=a.length){b();return}if(m(),n(a)>=a.length){b();return}S()}},800)}function w(){E||(E=!0,S(),_())}function b(){E=!1,L++,p&&(clearTimeout(p),p=null),_()}function V(I,q){if(!I)return;let M=function(g){g.preventDefault(),q()};I.addEventListener("click",M),c.push(function(){I.removeEventListener("click",M)})}return V(f,C),V(d,m),V(h,w),V(u,b),c.push(function(){b()}),_(),{stepNext:m,stepPrev:C,play:w,pause:b}}let i={instances:new Map,init:function(o){window.Vanduo.queryAll(o,".vd-timeline.vd-timeline-animated").forEach(function(a){i.instances.has(a)||i.initInstance(a)})},reinit:function(o){i.destroyAll(o),i.init(o)},initInstance:function(o){let a=[],c=Array.prototype.filter.call(o.children,function(h){return h.classList&&h.classList.contains("vd-timeline-item")});if(c.forEach(function(h,u){let p=Math.min(u,7);h.style.setProperty("--vd-timeline-reveal-delay",p*140+"ms")}),typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches){c.forEach(function(h){h.classList.add("is-revealed")}),i.instances.set(o,{cleanup:a});return}if(o.classList&&o.classList.contains("vd-timeline-playback")){let h=r(o,c,a);i.instances.set(o,{cleanup:a,playback:h});return}if(typeof IntersectionObserver>"u"){c.forEach(function(h){h.classList.add("is-revealed")}),i.instances.set(o,{cleanup:a});return}let d=new IntersectionObserver(function(h){h.forEach(function(u){u.isIntersecting&&(u.target.classList.add("is-revealed"),d.unobserve(u.target))})},{root:null,rootMargin:"0px 0px -10% 0px",threshold:.15});c.forEach(function(h){d.observe(h)}),a.push(function(){d.disconnect()}),i.instances.set(o,{cleanup:a})},destroy:function(o){let a=this.instances.get(o);a&&(a.cleanup.forEach(function(c){c()}),this.instances.delete(o))},destroyAll:function(o){let a=window.Vanduo&&typeof window.Vanduo._normalizeRoot=="function"?window.Vanduo._normalizeRoot(o):document;this.instances.forEach(function(c,l){a!==document&&a!==l&&(!a.contains||!a.contains(l))||i.destroy(l)})}};typeof window.Vanduo<"u"&&window.Vanduo.register("timeline",i),window.VanduoTimeline=i})();(function(){"use strict";let v={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-flow, .vd-carousel").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=e.querySelector(".vd-flow-track");if(!t)return;let n=Array.from(t.querySelectorAll(".vd-flow-slide"));if(n.length===0)return;let s=e.classList.contains("vd-flow-fade"),r=e.hasAttribute("data-vd-autoplay"),i=parseInt(e.getAttribute("data-vd-interval"),10)||5e3,o=e.getAttribute("data-vd-loop")!=="false",a={current:0,total:n.length,autoplayTimer:null,isFade:s,loop:o,isDragging:!1,startX:0,currentX:0,threshold:50},c=[];n.forEach((b,V)=>{b.setAttribute("role","group"),b.setAttribute("aria-roledescription","slide"),b.setAttribute("aria-label","Slide "+(V+1)+" of "+n.length),V===0&&b.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 f=(b,V)=>{V===void 0&&(V=!0);let I=b;a.loop?I=(b%a.total+a.total)%a.total:I=Math.max(0,Math.min(b,a.total-1));let q=a.current;a.current=I,a.isFade?n.forEach((g,P)=>{g.classList.toggle("is-active",P===I)}):t.style.transform="translateX(-"+I*100+"%)",e.querySelectorAll(".vd-flow-indicator").forEach((g,P)=>{g.classList.toggle("is-active",P===I),g.setAttribute("aria-selected",P===I?"true":"false")}),n.forEach((g,P)=>{g.setAttribute("aria-hidden",P!==I?"true":"false")}),V&&(l.textContent="Slide "+(I+1)+" of "+a.total),e.dispatchEvent(new CustomEvent("flow:change",{detail:{current:I,previous:q,total:a.total}}))},d=()=>f(a.current+1),h=()=>f(a.current-1),u=e.querySelector(".vd-flow-prev"),p=e.querySelector(".vd-flow-next");if(u){let b=()=>h();u.addEventListener("click",b),c.push(()=>u.removeEventListener("click",b))}if(p){let b=()=>d();p.addEventListener("click",b),c.push(()=>p.removeEventListener("click",b))}e.querySelectorAll(".vd-flow-indicator").forEach((b,V)=>{b.setAttribute("role","tab"),b.setAttribute("aria-selected",V===0?"true":"false"),b.setAttribute("aria-label","Go to slide "+(V+1));let I=()=>f(V);b.addEventListener("click",I),c.push(()=>b.removeEventListener("click",I))});let L=b=>{b.key==="ArrowLeft"&&(h(),b.preventDefault()),b.key==="ArrowRight"&&(d(),b.preventDefault())};e.setAttribute("tabindex","0"),e.addEventListener("keydown",L),c.push(()=>e.removeEventListener("keydown",L));let _=b=>{a.isDragging=!0,a.startX=b.clientX||b.touches&&b.touches[0].clientX||0,a.currentX=a.startX,e.classList.add("is-dragging")},m=b=>{a.isDragging&&(a.currentX=b.clientX||b.touches&&b.touches[0].clientX||0)},C=()=>{if(!a.isDragging)return;a.isDragging=!1,e.classList.remove("is-dragging");let b=a.startX-a.currentX;Math.abs(b)>a.threshold&&(b>0?d():h())};e.addEventListener("mousedown",_),e.addEventListener("mousemove",m),e.addEventListener("mouseup",C),e.addEventListener("mouseleave",C),e.addEventListener("touchstart",_,{passive:!0}),e.addEventListener("touchmove",m,{passive:!0}),e.addEventListener("touchend",C),c.push(()=>e.removeEventListener("mousedown",_),()=>e.removeEventListener("mousemove",m),()=>e.removeEventListener("mouseup",C),()=>e.removeEventListener("mouseleave",C),()=>e.removeEventListener("touchstart",_),()=>e.removeEventListener("touchmove",m),()=>e.removeEventListener("touchend",C));let S=()=>{w(),a.autoplayTimer=setInterval(d,i)},w=()=>{a.autoplayTimer&&(clearInterval(a.autoplayTimer),a.autoplayTimer=null)};if(r){S();let b=()=>w(),V=()=>S();e.addEventListener("mouseenter",b),e.addEventListener("mouseleave",V),e.addEventListener("focusin",b),e.addEventListener("focusout",V),c.push(()=>e.removeEventListener("mouseenter",b),()=>e.removeEventListener("mouseleave",V),()=>e.removeEventListener("focusin",b),()=>e.removeEventListener("focusout",V),()=>w())}f(0,!1),this.instances.set(e,{cleanup:c,goTo:f,next:d,prev:h,getState:()=>({...a})})},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",v),window.VanduoFlow=v})();(function(){"use strict";let v={instances:new Map,_globalCleanups:[],init:function(e){if(window.Vanduo.queryAll(e,"[data-vd-bubble], [data-vd-popover]").forEach(n=>{this.instances.has(n)||this.initInstance(n)}),this._globalCleanups.length===0){let n=r=>{this.instances.forEach((i,o)=>{!i.popover.contains(r.target)&&!o.contains(r.target)&&this.hide(o)})},s=r=>{r.key==="Escape"&&this.instances.forEach((i,o)=>this.hide(o))};document.addEventListener("click",n,!0),document.addEventListener("keydown",s),this._globalCleanups.push(()=>document.removeEventListener("click",n,!0),()=>document.removeEventListener("keydown",s))}},initInstance:function(e){let t=[],n=e.getAttribute("data-vd-bubble-placement")||e.getAttribute("data-vd-popover-placement")||"bottom",s=document.createElement("div");s.className="vd-bubble-content",s.setAttribute("role","dialog"),s.setAttribute("aria-modal","false"),s.setAttribute("data-placement",n);let r=e.getAttribute("data-vd-bubble-title")||e.getAttribute("data-vd-popover-title"),i=e.getAttribute("data-vd-bubble")||e.getAttribute("data-vd-popover")||"",o=e.getAttribute("data-vd-bubble-html")||e.getAttribute("data-vd-popover-html"),a=e.hasAttribute("data-vd-bubble-allow-svg")||e.hasAttribute("data-vd-popover-allow-svg");if(r){let d=document.createElement("div");d.className="vd-bubble-header";let h=document.createElement("span");h.textContent=r;let u=document.createElement("button");u.className="vd-bubble-close",u.setAttribute("aria-label","Close"),u.innerHTML="&times;",d.appendChild(h),d.appendChild(u),s.appendChild(d);let p=E=>{E.stopPropagation(),this.hide(e)};u.addEventListener("click",p),t.push(()=>u.removeEventListener("click",p))}let c=document.createElement("div");c.className="vd-bubble-body",o?typeof sanitizeHtml=="function"?c.innerHTML=sanitizeHtml(o,{allowSvg:a,allowStyle:!1}):c.textContent=o:c.textContent=i,s.appendChild(c),document.body.appendChild(s);let l="vd-bubble-"+Math.random().toString(36).slice(2,9);s.id=l,e.setAttribute("aria-haspopup","dialog"),e.setAttribute("aria-expanded","false"),e.setAttribute("aria-controls",l);let f=d=>{d.stopPropagation(),s.classList.contains("is-visible")?this.hide(e):(this.hideAll(),this.show(e))};e.addEventListener("click",f),t.push(()=>e.removeEventListener("click",f)),this.instances.set(e,{popover:s,cleanup:t,placement:n})},position:function(e,t,n){let s=e.getBoundingClientRect(),r=t.getBoundingClientRect(),i=10,o,a;switch(n){case"top":o=s.top-r.height-i+window.scrollY,a=s.left+(s.width-r.width)/2+window.scrollX;break;case"left":o=s.top+(s.height-r.height)/2+window.scrollY,a=s.left-r.width-i+window.scrollX;break;case"right":o=s.top+(s.height-r.height)/2+window.scrollY,a=s.right+i+window.scrollX;break;default:o=s.bottom+i+window.scrollY,a=s.left+(s.width-r.width)/2+window.scrollX}a=Math.max(8,Math.min(a,window.innerWidth-r.width-8)),o=Math.max(8,o),t.style.top=o+"px",t.style.left=a+"px"},show:function(e){let t=this.instances.get(e);if(!t)return;let{popover:n,placement:s}=t;n.style.display="block",n.classList.add("is-visible"),e.setAttribute("aria-expanded","true"),requestAnimationFrame(()=>{this.position(e,n,s)}),e.dispatchEvent(new CustomEvent("bubble:show",{bubbles:!0,detail:{trigger:e,placement:s}}))},hide:function(e){let t=this.instances.get(e);t&&(t.popover.classList.remove("is-visible"),e.setAttribute("aria-expanded","false"),e.dispatchEvent(new CustomEvent("bubble:hide",{bubbles:!0,detail:{trigger:e}})))},hideAll:function(){this.instances.forEach((e,t)=>this.hide(t))},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),t.popover.parentNode&&t.popover.parentNode.removeChild(t.popover),e.removeAttribute("aria-haspopup"),e.removeAttribute("aria-expanded"),e.removeAttribute("aria-controls"),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t)),this._globalCleanups.forEach(e=>e()),this._globalCleanups=[]}};typeof window.Vanduo<"u"&&window.Vanduo.register("bubble",v),window.VanduoBubble=v})();(function(){"use strict";let v={instances:new Map,init:function(e){window.Vanduo.queryAll(e,"[data-vd-waypoint-nav], [data-vd-scrollspy-nav]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=Array.from(e.querySelectorAll('a[href^="#"]'));if(t.length===0)return;let n=[],s=parseInt(e.getAttribute("data-vd-waypoint-offset")||"80",10),r=[];if(t.forEach(l=>{let f=l.getAttribute("href").slice(1),d=document.getElementById(f);d&&(d.setAttribute("data-vd-waypoint-section",""),r.push({id:f,link:l,section:d}))}),r.length===0)return;let i=new Set,o=l=>{t.forEach(d=>d.classList.remove("is-active"));let f=t.find(d=>d.getAttribute("href")==="#"+l);f&&(f.classList.add("is-active"),e.dispatchEvent(new CustomEvent("waypoint:change",{detail:{activeId:l,link:f}})))},a="-"+s+"px 0px -40% 0px",c=new IntersectionObserver(l=>{l.forEach(f=>{f.isIntersecting?i.add(f.target.id):i.delete(f.target.id)});for(let f=0;f<r.length;f++)if(i.has(r[f].id)){o(r[f].id);return}},{rootMargin:a,threshold:0});r.forEach(l=>c.observe(l.section)),t.forEach(l=>{let f=d=>{d.preventDefault();let h=l.getAttribute("href").slice(1),u=document.getElementById(h);u&&(u.scrollIntoView({behavior:"smooth"}),o(h))};l.addEventListener("click",f),n.push(()=>l.removeEventListener("click",f))}),n.push(()=>c.disconnect()),this.instances.set(e,{observer:c,cleanup:n,sections:r,setActive:o})},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",v),window.VanduoWaypoint=v})();(function(){"use strict";let v={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-ripple, [data-vd-ripple]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[],n=s=>{let r=e.getBoundingClientRect(),i=Math.max(r.width,r.height),o=(s.clientX||s.touches&&s.touches[0].clientX||r.left+r.width/2)-r.left-i/2,a=(s.clientY||s.touches&&s.touches[0].clientY||r.top+r.height/2)-r.top-i/2,c=document.createElement("span");c.className="vd-ripple-wave",c.style.width=i+"px",c.style.height=i+"px",c.style.left=o+"px",c.style.top=a+"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",v),window.VanduoRipple=v})();(function(){"use strict";function v(n){if(!n||n===document.body)return!1;let s=window.getComputedStyle(n),r=s.overflowY,i=s.overflowX,o=/(auto|scroll|overlay)/.test(r)&&n.scrollHeight>n.clientHeight,a=/(auto|scroll|overlay)/.test(i)&&n.scrollWidth>n.clientWidth;return o||a}function e(n){let s=n.parentElement;for(;s&&s!==document.body&&s!==document.documentElement;){if(v(s))return s;s=s.parentElement}return null}let t={instances:new Map,init:function(n){window.Vanduo.queryAll(n,".vd-affix, .vd-sticky, [data-vd-affix]").forEach(r=>{this.instances.has(r)||this.initInstance(r)})},initInstance:function(n){let s=[],r=parseInt(n.getAttribute("data-vd-affix-offset")||"0",10),i=Number.isNaN(r)?0:r,o=e(n),a=!1,c=document.createElement("div");c.style.cssText="display:block;height:1px;margin-bottom:-1px;visibility:hidden;pointer-events:none;",n.parentNode.insertBefore(c,n),n.style.setProperty("--vd-affix-top-offset",i+"px");function l(){a||(a=!0,n.classList.add("is-stuck"),n.dispatchEvent(new CustomEvent("affix:stuck",{bubbles:!0,detail:{offset:i,root:o||window}})))}function f(){a&&(a=!1,n.classList.remove("is-stuck"),n.dispatchEvent(new CustomEvent("affix:unstuck",{bubbles:!0,detail:{offset:i,root:o||window}})))}let d=new IntersectionObserver(function(h){h.forEach(u=>{u.isIntersecting?f():l()})},{root:o,rootMargin:"-"+i+"px 0px 0px 0px",threshold:0});d.observe(c),s.push(()=>d.disconnect(),()=>{c.parentNode&&c.parentNode.removeChild(c)},()=>{n.classList.remove("is-stuck"),n.style.removeProperty("--vd-affix-top-offset")}),this.instances.set(n,{cleanup:s,observer:d,sentinel:c,scrollParent:o})},destroy:function(n){let s=this.instances.get(n);s&&(s.cleanup.forEach(r=>r()),n.classList.remove("is-stuck"),this.instances.delete(n))},destroyAll:function(){this.instances.forEach((n,s)=>this.destroy(s))}};typeof window.Vanduo<"u"&&window.Vanduo.register("affix",t),window.VanduoAffix=t})();(function(){"use strict";function v(n){let s=document.createElement("div");return s.textContent=n,s.innerHTML}function e(n,s){try{let r=new URL(n,window.location.href);return r.origin===window.location.origin?!0:s.includes(r.origin)}catch{return!1}}let t={instances:new Map,init:function(n){window.Vanduo.queryAll(n,"[data-vd-suggest], [data-vd-autocomplete]").forEach(r=>{this.instances.has(r)||this.initInstance(r)})},initInstance:function(n){let s=[],r=parseInt(n.getAttribute("data-vd-suggest-min-chars")||"1",10),i=n.getAttribute("data-vd-suggest-url")||"",a=(n.getAttribute("data-vd-suggest-allowlist")||"").split(",").map(M=>M.trim()).filter(Boolean),c=n.getAttribute("data-vd-suggest")||n.getAttribute("data-vd-autocomplete")||"",l=[];try{l=JSON.parse(c)}catch{l=c.split(",").map(g=>g.trim()).filter(Boolean)}let f=n.closest(".vd-suggest-wrapper, .vd-autocomplete-wrapper");f||(f=document.createElement("div"),f.className="vd-suggest-wrapper",n.parentNode.insertBefore(f,n),f.appendChild(n));let d=document.createElement("ul");d.className="vd-suggest-list",d.setAttribute("role","listbox");let h="vd-suggest-"+Math.random().toString(36).slice(2,9);d.id=h,f.appendChild(d),n.setAttribute("role","combobox"),n.setAttribute("aria-autocomplete","list"),n.setAttribute("aria-expanded","false"),n.setAttribute("aria-controls",h),n.setAttribute("autocomplete","off");let u=-1,p=[],E=null,L=(M,g)=>{if(d.innerHTML="",p=M,u=-1,M.length===0){let P=document.createElement("li");P.className="vd-suggest-empty",P.textContent="No results",d.appendChild(P);return}M.forEach((P,N)=>{let F=document.createElement("li");F.className="vd-suggest-item",F.setAttribute("role","option"),F.id=h+"-item-"+N;let H=typeof P=="object"&&(P.label||P.text)||String(P);if(g){let $=v(H),K=new RegExp("("+g.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+")","gi");F.innerHTML=$.replace(K,'<span class="vd-suggest-match">$1</span>')}else F.textContent=H;F.addEventListener("click",()=>C(N)),d.appendChild(F)})},_=()=>{d.classList.add("is-open"),n.setAttribute("aria-expanded","true")},m=()=>{d.classList.remove("is-open"),n.setAttribute("aria-expanded","false"),u=-1,n.removeAttribute("aria-activedescendant")},C=M=>{let g=p[M],P=typeof g=="object"&&(g.value||g.label)||String(g);n.value=P,m(),n.dispatchEvent(new CustomEvent("suggest:select",{detail:{value:P,item:g,index:M},bubbles:!0}))},S=M=>{let g=d.querySelectorAll(".vd-suggest-item");g.forEach(P=>P.classList.remove("is-highlighted")),M>=0&&M<g.length&&(u=M,g[M].classList.add("is-highlighted"),n.setAttribute("aria-activedescendant",g[M].id),g[M].scrollIntoView({block:"nearest"}))},w=async M=>{if(M.length<r){m();return}let g;if(i)try{if(!e(i,a))console.warn("[VanduoSuggest] Blocked non-allowlisted URL:",i),g=[];else{let P=i.includes("?")?"&":"?";g=await(await window.fetch(i+P+"q="+encodeURIComponent(M))).json()}}catch{g=[]}else{let P=M.toLowerCase();g=l.filter(N=>(typeof N=="object"&&(N.label||N.text)||String(N)).toLowerCase().includes(P))}L(g,M),g.length>0,_()},b=()=>{clearTimeout(E),E=setTimeout(()=>w(n.value),200)},V=M=>{if(!d.classList.contains("is-open")){M.key==="ArrowDown"&&(w(n.value),M.preventDefault());return}let g=p.length;switch(M.key){case"ArrowDown":M.preventDefault(),S(u<g-1?u+1:0);break;case"ArrowUp":M.preventDefault(),S(u>0?u-1:g-1);break;case"Enter":M.preventDefault(),u>=0&&C(u);break;case"Escape":m();break}},I=()=>{setTimeout(m,200)},q=()=>{n.value.length>=r&&w(n.value)};n.addEventListener("input",b),n.addEventListener("keydown",V),n.addEventListener("blur",I),n.addEventListener("focus",q),s.push(()=>n.removeEventListener("input",b),()=>n.removeEventListener("keydown",V),()=>n.removeEventListener("blur",I),()=>n.removeEventListener("focus",q),()=>clearTimeout(E),()=>{d.parentNode&&d.parentNode.removeChild(d)}),this.instances.set(n,{cleanup:s,list:d,close:m})},destroy:function(n){let s=this.instances.get(n);s&&(s.cleanup.forEach(r=>r()),this.instances.delete(n))},destroyAll:function(){this.instances.forEach((n,s)=>this.destroy(s))}};typeof window.Vanduo<"u"&&window.Vanduo.register("suggest",t),window.VanduoSuggest=t})();(function(){"use strict";let v={instances:new Map,rules:{required:e=>e.trim().length>0,email:e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e),url:e=>{try{return new URL(e),!0}catch{return!1}},number:e=>!isNaN(parseFloat(e))&&isFinite(e),min:(e,t)=>e.length>=parseInt(t,10),max:(e,t)=>e.length<=parseInt(t,10),minVal:(e,t)=>parseFloat(e)>=parseFloat(t),maxVal:(e,t)=>parseFloat(e)<=parseFloat(t),pattern:(e,t)=>{try{return t.length>100?!1:new RegExp(t).test(e)}catch{return!1}},match:(e,t)=>{try{let n=typeof CSS<"u"&&CSS.escape?CSS.escape(t):t,s=document.querySelector('[name="'+n+'"]');return s?e===s.value:!1}catch{return!1}}},messages:{required:"This field is required",email:"Please enter a valid email address",url:"Please enter a valid URL",number:"Please enter a valid number",min:"Minimum {0} characters required",max:"Maximum {0} characters allowed",minVal:"Value must be at least {0}",maxVal:"Value must be at most {0}",pattern:"Invalid format",match:"Fields do not match"},init:function(e){window.Vanduo.queryAll(e,"[data-vd-validate], .vd-validate").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[],n=e.getAttribute("data-vd-validate-mode")||"blur",s=e.querySelectorAll("[data-vd-rules]"),r=a=>{let l=(a.getAttribute("data-vd-rules")||"").split("|").map(h=>h.trim()).filter(Boolean),f=a.value,d=[];for(let h of l){let[u,...p]=h.split(":"),E=p.join(":"),L=this.rules[u];if(L&&!L(f,E)){let m=a.getAttribute("data-vd-msg-"+u)||this.messages[u]||"Invalid";E&&(m=m.replace("{0}",E)),d.push(m);break}}return this.setFieldState(a,d),d.length===0},i=()=>{let a=!0;return s.forEach(c=>{r(c)||(a=!1)}),a};s.forEach(a=>{if(n==="input"||n==="blur"){let c=n==="input"?"input":"blur",l=()=>r(a);if(a.addEventListener(c,l),t.push(()=>a.removeEventListener(c,l)),n==="blur"){let f=()=>{(a.classList.contains("is-invalid")||a.classList.contains("is-valid"))&&r(a)};a.addEventListener("input",f),t.push(()=>a.removeEventListener("input",f))}}});let o=a=>{let c=i();if(!c){a.preventDefault(),a.stopPropagation();let l=e.querySelector(".is-invalid");l&&l.focus()}e.dispatchEvent(new CustomEvent("validate:submit",{detail:{valid:c},bubbles:!0}))};e.addEventListener("submit",o),t.push(()=>e.removeEventListener("submit",o)),this.instances.set(e,{cleanup:t,validateAll:i,validateField:r})},setFieldState:function(e,t){let n=e.closest(".vd-form-group")||e.parentElement,s=n.querySelector(".vd-validate-error");e.classList.remove("is-valid","is-invalid"),t.length>0?(e.classList.add("is-invalid"),e.setAttribute("aria-invalid","true"),s||(s=document.createElement("div"),s.className="vd-validate-error",s.id="vd-err-"+Math.random().toString(36).slice(2,9),s.setAttribute("role","alert"),n.appendChild(s)),s.textContent=t[0],s.style.display="",e.setAttribute("aria-describedby",s.id)):e.value.trim()?(e.classList.add("is-valid"),e.removeAttribute("aria-invalid"),s&&(s.style.display="none")):(e.removeAttribute("aria-invalid"),s&&(s.style.display="none"))},validateForm:function(e){let t=this.instances.get(e);return t?t.validateAll():!1},addRule:function(e,t,n){this.rules[e]=t,n&&(this.messages[e]=n)},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("validate",v),window.VanduoValidate=v})();(function(){"use strict";let v=["Su","Mo","Tu","We","Th","Fr","Sa"],e=["January","February","March","April","May","June","July","August","September","October","November","December"];function t(u){return u.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function n(u){let p="^",E=[],L=0;for(;L<u.length;){let _=u.slice(L);_.toLowerCase().startsWith("yyyy")?(p+="(\\d{4})",E.push("y"),L+=4):_.toLowerCase().startsWith("mm")?(p+="(\\d{2})",E.push("m"),L+=2):_.toLowerCase().startsWith("dd")?(p+="(\\d{2})",E.push("d"),L+=2):(p+=t(u[L]),L++)}return p+="$",{regex:new RegExp(p),order:E}}function s(u,p){if(!u||!p)return null;let{regex:E,order:L}=n(p),_=u.trim().match(E);if(!_)return null;let m,C,S,w=1;for(let V=0;V<L.length;V++){let I=L[V],q=parseInt(_[w++],10);if(Number.isNaN(q))return null;I==="y"?m=q:I==="m"?C=q-1:I==="d"&&(S=q)}if(m===void 0||C===void 0||S===void 0)return null;let b=new Date(m,C,S);return b.getFullYear()!==m||b.getMonth()!==C||b.getDate()!==S?null:b}function r(u,p){let E=String(u.getFullYear()),L=String(u.getMonth()+1).padStart(2,"0"),_=String(u.getDate()).padStart(2,"0"),m="",C=0;for(;C<p.length;){let S=p.slice(C);S.toLowerCase().startsWith("yyyy")?(m+=E,C+=4):S.toLowerCase().startsWith("mm")?(m+=L,C+=2):S.toLowerCase().startsWith("dd")?(m+=_,C+=2):(m+=p[C],C++)}return m}function i(u){return u.getFullYear()+"-"+String(u.getMonth()+1).padStart(2,"0")+"-"+String(u.getDate()).padStart(2,"0")}function o(u,p){let E=new Date(u.getFullYear(),u.getMonth(),u.getDate());return E.setDate(E.getDate()+p),E}function a(u,p){return new Date(u.getFullYear(),u.getMonth()+p,u.getDate())}function c(u){if(!u||typeof u!="string")return null;let p=/^(\d{4})-(\d{2})-(\d{2})$/.exec(u.trim());if(!p)return null;let E=+p[1],L=+p[2]-1,_=+p[3],m=new Date(E,L,_);return m.getFullYear()!==E||m.getMonth()!==L||m.getDate()!==_?null:m}function l(u){let p=new Date(u.getFullYear(),u.getMonth(),u.getDate()),E=p.getDay();return p.setDate(p.getDate()-E),p}function f(u){let p=new Date(u.getFullYear(),u.getMonth(),u.getDate()),E=p.getDay();return p.setDate(p.getDate()+(6-E)),p}function d(u,p,E){let _=E??4,m=u.getBoundingClientRect();p.style.minWidth=Math.max(m.width,0)+"px";let C=m.bottom+_,S=m.left;p.style.top=C+"px",p.style.left=S+"px";let w=p.getBoundingClientRect();w.bottom>window.innerHeight-8&&m.top-w.height>8&&(C=m.top-w.height-_,p.style.top=C+"px");let b=p.getBoundingClientRect();S=m.left,S+b.width>window.innerWidth-8&&(S=window.innerWidth-b.width-8),p.style.left=Math.max(8,S)+"px"}let h={instances:new Map,init:function(u){window.Vanduo.queryAll(u,"[data-vd-datepicker]").forEach(E=>{this.instances.has(E)||this.initInstance(E)})},initInstance:function(u){let p=[],E=u.getAttribute("data-vd-datepicker-format")||"YYYY-MM-DD",L=u.getAttribute("data-vd-datepicker-min"),_=u.getAttribute("data-vd-datepicker-max"),m=L?c(L):null,C=_?c(_):null,S=new Date,w=S.getFullYear(),b=S.getMonth(),V=null,I="days",q=null,M=!1,g=y=>!!(m&&new Date(y.getFullYear(),y.getMonth(),y.getDate()).getTime()<m.getTime()||C&&new Date(y.getFullYear(),y.getMonth(),y.getDate()).getTime()>C.getTime()),P=(y,T)=>{if(!m&&!C)return{y,m:T};let A=new Date(y,T,1),k=new Date(y,T+1,0);return m&&k.getTime()<m.getTime()?{y:m.getFullYear(),m:m.getMonth()}:C&&A.getTime()>C.getTime()?{y:C.getFullYear(),m:C.getMonth()}:{y,m:T}},N=(y,T)=>{let A=new Date(y,T+1,0).getDate();for(let k=1;k<=A;k++){let z=new Date(y,T,k);if(!g(z))return z}return new Date(y,T,1)};if(u.value){let y=u.value.trim(),T=s(y,E);if(!T){let A=new Date(y);isNaN(A.getTime())||(T=A)}T&&(V=T,w=T.getFullYear(),b=T.getMonth())}let F=P(w,b);w=F.y,b=F.m;let H=document.createElement("div");H.className="vd-datepicker-popup",H.setAttribute("role","dialog"),H.setAttribute("aria-label","Choose date"),H.tabIndex=-1;let $=document.createElement("div");$.className="vd-suggest-wrapper",$.style.position="relative",$.style.display="inline-block",u.parentNode.insertBefore($,u),$.appendChild(u),document.body.appendChild(H);let K=(y,T)=>y&&T&&y.getFullYear()===T.getFullYear()&&y.getMonth()===T.getMonth()&&y.getDate()===T.getDate(),ae=y=>{V=y,w=y.getFullYear(),b=y.getMonth(),u.value=r(y,E),M=!0,j(),u.dispatchEvent(new CustomEvent("datepicker:select",{detail:{date:y,formatted:u.value},bubbles:!0})),u.dispatchEvent(new Event("change",{bubbles:!0})),u.focus()},Z=()=>{if(I!=="days"||!q)return;let y=i(q),T=H.querySelector('[data-vd-date="'+y+'"]');T&&!T.classList.contains("is-outside")&&T.getAttribute("aria-disabled")!=="true"&&T.focus()},re=(y,T,A)=>{let k=new Date(y.getFullYear(),y.getMonth(),y.getDate()),z=T>0?1:-1;for(let R=0;R<A;R++){if(!g(k))return k;k=o(k,z)}return y},J=(y,T,A)=>{let k=document.createElement("button");if(k.type="button",k.className="vd-datepicker-day",k.textContent=y,k.setAttribute("role","gridcell"),T)return k.classList.add("is-outside"),k.tabIndex=-1,k.setAttribute("aria-disabled","true"),k;if(k.setAttribute("data-vd-date",i(A)),A&&K(A,S)&&k.classList.add("is-today"),A&&K(A,V)&&k.classList.add("is-selected"),A&&g(A))return k.classList.add("is-disabled"),k.setAttribute("aria-disabled","true"),k.tabIndex=-1,k;if(A){let z=q&&K(A,q);k.tabIndex=z?0:-1,k.addEventListener("click",()=>{V=A,w=A.getFullYear(),b=A.getMonth(),q=new Date(A.getFullYear(),A.getMonth(),A.getDate()),u.value=r(A,E),M=!0,j(),u.dispatchEvent(new CustomEvent("datepicker:select",{detail:{date:A,formatted:u.value},bubbles:!0})),u.dispatchEvent(new Event("change",{bubbles:!0})),u.focus()})}return k},U=()=>{H.innerHTML="";let y=document.createElement("div");y.className="vd-datepicker-header";let T=document.createElement("button");T.type="button",T.className="vd-datepicker-prev",T.innerHTML="&#8249;",T.setAttribute("aria-label","Previous");let A=document.createElement("button");A.type="button",A.className="vd-datepicker-next",A.innerHTML="&#8250;",A.setAttribute("aria-label","Next");let k=document.createElement("span");if(k.className="vd-datepicker-title",I==="days")k.textContent=e[b]+" "+w,k.addEventListener("click",()=>{I="months",U()}),T.addEventListener("click",()=>{b--,b<0&&(b=11,w--),U()}),A.addEventListener("click",()=>{b++,b>11&&(b=0,w++),U()});else if(I==="months")k.textContent=String(w),k.addEventListener("click",()=>{I="years",U()}),T.addEventListener("click",()=>{w--,U()}),A.addEventListener("click",()=>{w++,U()});else{let z=Math.floor(w/10)*10;k.textContent=z+" - "+(z+9),T.addEventListener("click",()=>{w-=10,U()}),A.addEventListener("click",()=>{w+=10,U()})}if(y.appendChild(T),y.appendChild(k),y.appendChild(A),H.appendChild(y),I==="days"){let z=document.createElement("div");z.className="vd-datepicker-grid",z.setAttribute("role","grid"),z.setAttribute("aria-label","Calendar");let R=document.createElement("div");R.className="vd-datepicker-weekdays",R.setAttribute("role","row"),v.forEach(function(Y){let W=document.createElement("span");W.setAttribute("role","columnheader"),W.setAttribute("aria-label",Y),W.textContent=Y,R.appendChild(W)}),z.appendChild(R);let O=new Date(w,b,1).getDay(),B=new Date(w,b+1,0).getDate(),X=new Date(w,b,0).getDate(),G=[];for(let Y=O-1;Y>=0;Y--){let W=X-Y,ne=b===0?11:b-1,se=b===0?w-1:w,de=new Date(se,ne,W);G.push({day:W,outside:!0,date:de})}for(let Y=1;Y<=B;Y++){let W=new Date(w,b,Y);G.push({day:Y,outside:!1,date:W})}let ce=O+B,le=ce%7===0?0:7-ce%7;for(let Y=1;Y<=le;Y++){let W=new Date(w,b+1,Y);G.push({day:Y,outside:!0,date:W})}for(let Y=0;Y<G.length;Y+=7){let W=document.createElement("div");W.className="vd-datepicker-row",W.setAttribute("role","row");for(let ne=0;ne<7;ne++){let se=G[Y+ne];W.appendChild(J(se.day,se.outside,se.date))}z.appendChild(W)}H.appendChild(z)}else if(I==="months"){let z=document.createElement("div");z.className="vd-datepicker-months",e.forEach((R,O)=>{let B=document.createElement("button");B.type="button",B.className="vd-datepicker-month-btn",B.textContent=R.slice(0,3),V&&V.getFullYear()===w&&V.getMonth()===O&&B.classList.add("is-selected"),B.addEventListener("click",()=>{b=O,I="days",U()}),z.appendChild(B)}),H.appendChild(z)}else{let z=document.createElement("div");z.className="vd-datepicker-years";let R=Math.floor(w/10)*10;for(let O=R-1;O<=R+10;O++){let B=document.createElement("button");B.type="button",B.className="vd-datepicker-year-btn",B.textContent=O,V&&V.getFullYear()===O&&B.classList.add("is-selected"),(O<R||O>R+9)&&(B.style.opacity="0.4"),B.addEventListener("click",()=>{w=O,I="months",U()}),z.appendChild(B)}H.appendChild(z)}H.classList.contains("is-open")&&requestAnimationFrame(te)},ie=y=>{if(!H.classList.contains("is-open")||I!=="days")return;let T=H.querySelector(".vd-datepicker-grid");if(!T||!T.contains(y.target))return;let A=y.key;if(A!=="ArrowLeft"&&A!=="ArrowRight"&&A!=="ArrowUp"&&A!=="ArrowDown"&&A!=="Home"&&A!=="End"&&A!=="PageUp"&&A!=="PageDown"&&A!=="Enter"&&A!==" "&&A!=="Escape")return;if(A==="Escape"){y.preventDefault(),y.stopPropagation(),M=!0,j(),u.focus();return}if(q||(q=N(w,b)),A==="Enter"||A===" "){y.preventDefault(),q&&!g(q)&&ae(new Date(q.getFullYear(),q.getMonth(),q.getDate()));return}y.preventDefault();let k=new Date(q.getFullYear(),q.getMonth(),q.getDate()),z=1;if(A==="ArrowLeft"?(k=o(k,-1),z=-1):A==="ArrowRight"?(k=o(k,1),z=1):A==="ArrowUp"?(k=o(k,-7),z=-1):A==="ArrowDown"?(k=o(k,7),z=1):A==="Home"?(k=l(k),z=1):A==="End"?(k=f(k),z=-1):A==="PageUp"?(k=a(k,-1),z=-1):A==="PageDown"&&(k=a(k,1),z=1),k=re(k,z,400),k.getMonth()!==b||k.getFullYear()!==w){w=k.getFullYear(),b=k.getMonth();let R=P(w,b);w=R.y,b=R.m}q=k,U(),requestAnimationFrame(Z)},te=()=>{H.classList.contains("is-open")&&d(u,H)},Q=()=>{te()},oe=()=>{I="days",V&&(w=V.getFullYear(),b=V.getMonth());let y=P(w,b);w=y.y,b=y.m,V?q=new Date(V.getFullYear(),V.getMonth(),V.getDate()):q=N(w,b),U(),H.classList.add("is-open"),u.setAttribute("aria-expanded","true"),requestAnimationFrame(()=>{te(),Z()})},j=()=>{H.classList.remove("is-open"),u.setAttribute("aria-expanded","false"),I="days"},ee=()=>{if(M){M=!1;return}oe()},x=y=>{!u.contains(y.target)&&!H.contains(y.target)&&j()},D=y=>{y.key==="Escape"&&H.classList.contains("is-open")&&(M=!0,j(),u.focus())};u.addEventListener("focus",ee),document.addEventListener("click",x,!0),document.addEventListener("keydown",D),H.addEventListener("keydown",ie),window.addEventListener("resize",Q),window.addEventListener("scroll",Q,!0),u.setAttribute("aria-haspopup","dialog"),u.setAttribute("aria-expanded","false"),u.setAttribute("autocomplete","off"),p.push(()=>u.removeEventListener("focus",ee),()=>document.removeEventListener("click",x,!0),()=>document.removeEventListener("keydown",D),()=>H.removeEventListener("keydown",ie),()=>window.removeEventListener("resize",Q),()=>window.removeEventListener("scroll",Q,!0),()=>H.remove()),this.instances.set(u,{cleanup:p,open:oe,close:j,popup:H})},destroy:function(u){let p=this.instances.get(u);p&&(p.cleanup.forEach(E=>E()),this.instances.delete(u))},destroyAll:function(){this.instances.forEach((u,p)=>this.destroy(p))}};typeof window.Vanduo<"u"&&window.Vanduo.register("datepicker",h),window.VanduoDatepicker=h})();(function(){"use strict";function v(t,n,s){let i=s??4,o=t.getBoundingClientRect();n.style.minWidth=Math.max(o.width,0)+"px";let a=o.bottom+i,c=o.left;n.style.top=a+"px",n.style.left=c+"px";let l=n.getBoundingClientRect();l.bottom>window.innerHeight-8&&o.top-l.height>8&&(a=o.top-l.height-i,n.style.top=a+"px");let f=n.getBoundingClientRect();c=o.left,c+f.width>window.innerWidth-8&&(c=window.innerWidth-f.width-8),n.style.left=Math.max(8,c)+"px"}let e={instances:new Map,init:function(t){window.Vanduo.queryAll(t,"[data-vd-timepicker]").forEach(s=>{this.instances.has(s)||this.initInstance(s)})},initInstance:function(t){let n=[],s=t.getAttribute("data-vd-timepicker-format")==="24h",r=parseInt(t.getAttribute("data-vd-timepicker-step")||"30",10),i=t.closest(".vd-suggest-wrapper");i||(i=document.createElement("div"),i.style.position="relative",i.style.display="inline-block",t.parentNode.insertBefore(i,t),i.appendChild(t));let o=document.createElement("div");o.className="vd-timepicker-popup",o.setAttribute("role","listbox"),document.body.appendChild(o);let a=[];for(let L=0;L<24;L++)for(let _=0;_<60;_+=r){let m=String(L).padStart(2,"0"),C=String(_).padStart(2,"0");if(s)a.push({display:m+":"+C,value:m+":"+C});else{let S=L<12?"AM":"PM",b=(L===0?12:L>12?L-12:L)+":"+C+" "+S;a.push({display:b,value:m+":"+C})}}let c=()=>{o.innerHTML="",a.forEach(L=>{let _=document.createElement("div");_.className="vd-timepicker-item",_.setAttribute("role","option"),_.textContent=L.display,(t.value===L.value||t.value===L.display)&&_.classList.add("is-selected"),_.addEventListener("click",()=>{t.value=L.display,o.querySelectorAll(".vd-timepicker-item").forEach(m=>m.classList.remove("is-selected")),_.classList.add("is-selected"),h(),t.dispatchEvent(new CustomEvent("timepicker:select",{detail:{display:L.display,value:L.value},bubbles:!0})),t.dispatchEvent(new Event("change",{bubbles:!0}))}),o.appendChild(_)})},l=()=>{o.classList.contains("is-open")&&v(t,o)},f=()=>{l()},d=()=>{c(),o.classList.add("is-open"),t.setAttribute("aria-expanded","true"),requestAnimationFrame(()=>{l();let L=o.querySelector(".is-selected");L&&L.scrollIntoView({block:"center"})})},h=()=>{o.classList.remove("is-open"),t.setAttribute("aria-expanded","false")},u=()=>d(),p=L=>{!t.contains(L.target)&&!o.contains(L.target)&&h()},E=L=>{L.key==="Escape"&&h()};t.addEventListener("focus",u),document.addEventListener("click",p,!0),document.addEventListener("keydown",E),window.addEventListener("resize",f),window.addEventListener("scroll",f,!0),t.setAttribute("aria-haspopup","listbox"),t.setAttribute("aria-expanded","false"),t.setAttribute("autocomplete","off"),t.readOnly=!0,n.push(()=>t.removeEventListener("focus",u),()=>document.removeEventListener("click",p,!0),()=>document.removeEventListener("keydown",E),()=>window.removeEventListener("resize",f),()=>window.removeEventListener("scroll",f,!0),()=>o.remove()),this.instances.set(t,{cleanup:n,open:d,close:h})},destroy:function(t){let n=this.instances.get(t);n&&(n.cleanup.forEach(s=>s()),this.instances.delete(t))},destroyAll:function(){this.instances.forEach((t,n)=>this.destroy(n))}};typeof window.Vanduo<"u"&&window.Vanduo.register("timepicker",e),window.VanduoTimepicker=e})();(function(){"use strict";let v={instances:new Map,init:function(e){window.Vanduo.queryAll(e,".vd-stepper").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[],n=Array.from(e.querySelectorAll(".vd-stepper-item")),s=e.classList.contains("vd-stepper-clickable"),r=n.findIndex(o=>o.classList.contains("is-active"));r===-1&&(r=0);let i=o=>{if(o<0||o>=n.length)return;let a=r;r=o,n.forEach((c,l)=>{c.classList.remove("is-active","is-completed"),l<o?c.classList.add("is-completed"):l===o&&c.classList.add("is-active")}),e.dispatchEvent(new CustomEvent("stepper:change",{detail:{current:o,previous:a,total:n.length},bubbles:!0}))};s&&n.forEach((o,a)=>{let c=()=>i(a);o.addEventListener("click",c),t.push(()=>o.removeEventListener("click",c))}),i(r),this.instances.set(e,{cleanup:t,setStep:i,next:()=>i(r+1),prev:()=>i(r-1),getCurrent:()=>r})},setStep:function(e,t){let n=this.instances.get(e);n&&n.setStep(t)},next:function(e){let t=this.instances.get(e);t&&t.next()},prev:function(e){let t=this.instances.get(e);t&&t.prev()},destroy:function(e){let t=this.instances.get(e);t&&(t.cleanup.forEach(n=>n()),this.instances.delete(e))},destroyAll:function(){this.instances.forEach((e,t)=>this.destroy(t))}};typeof window.Vanduo<"u"&&window.Vanduo.register("stepper",v),window.VanduoStepper=v})();(function(){"use strict";let v={instances:new Map,init:function(e){window.Vanduo.queryAll(e,"[data-vd-rating]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[],n=parseInt(e.getAttribute("data-vd-rating-max")||"5",10),s=parseFloat(e.getAttribute("data-vd-rating-value")||"0"),r=e.classList.contains("vd-rating-readonly")||e.hasAttribute("data-vd-rating-readonly"),i=s;e.classList.add("vd-rating"),e.setAttribute("role","radiogroup"),e.setAttribute("aria-label",e.getAttribute("aria-label")||"Rating"),e.innerHTML="";let o=[];for(let l=1;l<=n;l++){let f=document.createElement("button");f.type="button",f.className="vd-rating-star",f.setAttribute("role","radio"),f.setAttribute("aria-label",l+" star"+(l>1?"s":"")),f.setAttribute("aria-checked",l<=i?"true":"false"),r&&(f.tabIndex=-1),o.push(f),e.appendChild(f)}let a=document.createElement("span");a.className="vd-rating-value",a.textContent=i>0?i.toString():"",e.appendChild(a);let c=l=>{o.forEach((f,d)=>{f.classList.remove("is-active","is-half");let h=d+1;h<=Math.floor(l)?f.classList.add("is-active"):h-.5<=l&&f.classList.add("is-half"),f.setAttribute("aria-checked",h<=l?"true":"false")}),a.textContent=l>0?l.toString():""};if(c(i),!r){o.forEach((f,d)=>{let h=()=>{o.forEach((E,L)=>{E.classList.toggle("is-hovered",L<=d)})},u=()=>{o.forEach(E=>E.classList.remove("is-hovered"))},p=()=>{i=d+1,e.setAttribute("data-vd-rating-value",i),c(i),e.dispatchEvent(new CustomEvent("rating:change",{detail:{value:i,max:n},bubbles:!0}))};f.addEventListener("mouseenter",h),f.addEventListener("mouseleave",u),f.addEventListener("click",p),t.push(()=>f.removeEventListener("mouseenter",h),()=>f.removeEventListener("mouseleave",u),()=>f.removeEventListener("click",p))});let l=f=>{f.key==="ArrowRight"||f.key==="ArrowUp"?(f.preventDefault(),i<n&&(i++,c(i),o[i-1].focus(),e.dispatchEvent(new CustomEvent("rating:change",{detail:{value:i,max:n},bubbles:!0})))):(f.key==="ArrowLeft"||f.key==="ArrowDown")&&(f.preventDefault(),i>1&&(i--,c(i),o[i-1].focus(),e.dispatchEvent(new CustomEvent("rating:change",{detail:{value:i,max:n},bubbles:!0}))))};e.addEventListener("keydown",l),t.push(()=>e.removeEventListener("keydown",l))}this.instances.set(e,{cleanup:t,getValue:()=>i,setValue:l=>{i=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",v),window.VanduoRating=v})();(function(){"use strict";let v={instances:new Map,init:function(e){window.Vanduo.queryAll(e,"[data-vd-transfer]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[];e.classList.add("vd-transfer");let n,s;try{n=JSON.parse(e.getAttribute("data-vd-transfer")||"[]").map((h,u)=>({id:h.id||"item-"+u,label:h.label||h.text||String(h),selected:!1}))}catch{n=[]}s=[];let r=new Set,i=new Set,o=()=>{e.innerHTML="";let d=a("Source",n,r,"source"),h=document.createElement("div");h.className="vd-transfer-actions";let u=document.createElement("button");u.type="button",u.className="vd-transfer-btn",u.innerHTML="&#8250;",u.setAttribute("aria-label","Move to target"),u.disabled=r.size===0,u.addEventListener("click",()=>c());let p=document.createElement("button");p.type="button",p.className="vd-transfer-btn",p.innerHTML="&#8249;",p.setAttribute("aria-label","Move to source"),p.disabled=i.size===0,p.addEventListener("click",()=>l()),h.appendChild(u),h.appendChild(p);let E=a("Target",s,i,"target");e.appendChild(d),e.appendChild(h),e.appendChild(E)},a=(d,h,u,p)=>{let E=document.createElement("div");E.className="vd-transfer-panel";let L=document.createElement("div");L.className="vd-transfer-header";let _=document.createElement("span");_.textContent=d;let m=document.createElement("span");m.className="vd-transfer-count",m.textContent=u.size+"/"+h.length,L.appendChild(_),L.appendChild(m),E.appendChild(L);let C=document.createElement("div");C.className="vd-transfer-search";let S=document.createElement("input");S.type="text",S.placeholder="Search...",S.setAttribute("aria-label","Search "+d.toLowerCase()),C.appendChild(S),E.appendChild(C);let w=document.createElement("ul");w.className="vd-transfer-list",w.setAttribute("role","listbox");let b=V=>{w.innerHTML="",(V?h.filter(q=>(q.label||q.text||String(q)).toLowerCase().includes(V.toLowerCase())):h).forEach(q=>{let M=document.createElement("li");M.className="vd-transfer-item",M.setAttribute("role","option"),u.has(q.id)&&M.classList.add("is-selected");let g=document.createElement("input");g.type="checkbox",g.checked=u.has(q.id),g.setAttribute("aria-label",q.label);let P=document.createElement("span");P.textContent=q.label,M.addEventListener("click",()=>{u.has(q.id)?u.delete(q.id):u.add(q.id),o()}),M.appendChild(g),M.appendChild(P),w.appendChild(M)})};return S.addEventListener("input",()=>b(S.value)),b(""),E.appendChild(w),E},c=()=>{let d=n.filter(h=>r.has(h.id));n=n.filter(h=>!r.has(h.id)),s=s.concat(d),r.clear(),o(),f()},l=()=>{let d=s.filter(h=>i.has(h.id));s=s.filter(h=>!i.has(h.id)),n=n.concat(d),i.clear(),o(),f()},f=()=>{e.dispatchEvent(new CustomEvent("transfer:change",{detail:{source:n.map(d=>d.id),target:s.map(d=>d.id)},bubbles:!0}))};o(),this.instances.set(e,{cleanup:t,getTarget:()=>s.map(d=>d.id),getSource:()=>n.map(d=>d.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",v),window.VanduoTransfer=v})();(function(){"use strict";let v={instances:new Map,init:function(e){window.Vanduo.queryAll(e,"[data-vd-tree]").forEach(n=>{this.instances.has(n)||this.initInstance(n)})},initInstance:function(e){let t=[],n=e.getAttribute("data-vd-tree-cascade")!=="false",s;try{s=JSON.parse(e.getAttribute("data-vd-tree")||"[]")}catch{s=[]}e.classList.add("vd-tree"),e.setAttribute("role","tree");let r=(a,c)=>{c.innerHTML="",a.forEach(l=>{let f=document.createElement("li");f.className="vd-tree-node",f.setAttribute("role","treeitem"),f.setAttribute("aria-expanded",l.open?"true":"false"),l.open&&f.classList.add("is-open");let d=document.createElement("div");if(d.className="vd-tree-node-content",l.children&&l.children.length>0){let u=document.createElement("button");u.type="button",u.className="vd-tree-toggle",u.setAttribute("aria-label","Toggle"),u.addEventListener("click",p=>{p.stopPropagation(),l.open=!l.open,f.classList.toggle("is-open"),f.setAttribute("aria-expanded",l.open?"true":"false")}),d.appendChild(u)}else{let u=document.createElement("span");u.className="vd-tree-toggle-placeholder",d.appendChild(u)}if(e.hasAttribute("data-vd-tree-checkbox")){let u=document.createElement("input");u.type="checkbox",u.className="vd-tree-checkbox",u.checked=!!l.checked,u.setAttribute("aria-label",l.label),u.addEventListener("change",p=>{p.stopPropagation(),l.checked=u.checked,n&&l.children&&(i(l.children,u.checked),r(s,e)),e.dispatchEvent(new CustomEvent("tree:check",{detail:{id:l.id,checked:u.checked,label:l.label},bubbles:!0}))}),d.appendChild(u)}if(l.icon){let u=document.createElement("span");u.className="vd-tree-icon "+l.icon,d.appendChild(u)}let h=document.createElement("span");if(h.className="vd-tree-label",h.textContent=l.label||"",d.appendChild(h),f.appendChild(d),l.children&&l.children.length>0){let u=document.createElement("ul");u.className="vd-tree-children",u.setAttribute("role","group"),r(l.children,u),f.appendChild(u)}c.appendChild(f)})},i=(a,c)=>{a.forEach(l=>{l.checked=c,l.children&&i(l.children,c)})},o=a=>{let c=document.activeElement;if(!e.contains(c))return;let l=Array.from(e.querySelectorAll(".vd-tree-node-content")),f=l.indexOf(c.closest(".vd-tree-node-content"));if(f!==-1)switch(a.key){case"ArrowDown":if(a.preventDefault(),f<l.length-1){let d=l[f+1].querySelector(".vd-tree-toggle, .vd-tree-label");d&&d.focus()}break;case"ArrowUp":if(a.preventDefault(),f>0){let d=l[f-1].querySelector(".vd-tree-toggle, .vd-tree-label");d&&d.focus()}break}};e.addEventListener("keydown",o),t.push(()=>e.removeEventListener("keydown",o)),r(s,e),this.instances.set(e,{cleanup:t,getData:()=>s,getChecked:()=>{let a=[],c=l=>{l.forEach(f=>{f.checked&&a.push(f.id||f.label),f.children&&c(f.children)})};return c(s),a}})},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",v),window.VanduoTree=v})();(function(){"use strict";let v={_active:!1,_steps:[],_currentStep:0,_elements:{},_cleanup:[],_boundTriggers:new WeakMap,_triggerElement:null,init:function(e){window.Vanduo.queryAll(e,"[data-vd-spotlight]").forEach(n=>{if(this._boundTriggers.has(n))return;let s=r=>{r.preventDefault();let i=this._parseSteps(n.getAttribute("data-vd-spotlight"));i.length!==0&&this.start(i,{trigger:n})};n.addEventListener("click",s),this._boundTriggers.set(n,s)})},_parseSteps:function(e){if(typeof e!="string"||e.trim()==="")return[];try{let t=JSON.parse(e);return this._normalizeSteps(t)}catch(t){return console.error("VanduoSpotlight: invalid data-vd-spotlight payload.",t),[]}},_normalizeStep:function(e){if(!e||typeof e!="object")return null;let t=e.target,n=typeof t=="string"&&t.trim()!=="",s=typeof Element<"u"&&t instanceof Element;if(!n&&!s)return null;let r=typeof e.title=="string"?e.title:"",i=typeof e.description=="string"?e.description:typeof e.content=="string"?e.content:"";return{target:t,title:r,description:i}},_normalizeSteps:function(e){return Array.isArray(e)?e.map(t=>this._normalizeStep(t)).filter(Boolean):[]},start:function(e,t){this._active&&this.stop();let n=this._normalizeSteps(e);if(n.length===0)return;let s=t||{};this._steps=n,this._currentStep=0,this._active=!0,this._triggerElement=s.trigger||(document.activeElement instanceof HTMLElement?document.activeElement:null);let r=document.createElement("div");r.className="vd-spotlight-overlay",r.setAttribute("aria-hidden","true"),document.body.appendChild(r);let i=document.createElement("div");i.className="vd-spotlight-tooltip",i.setAttribute("role","dialog"),i.setAttribute("aria-modal","true"),i.tabIndex=-1,document.body.appendChild(i),this._elements={overlay:r,tooltip:i};let o=a=>{a.key==="Escape"&&this.stop()};document.addEventListener("keydown",o),this._cleanup.push(()=>document.removeEventListener("keydown",o)),r.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 r=this._steps.length;if(s.innerHTML="",s.removeAttribute("aria-labelledby"),s.removeAttribute("aria-describedby"),t.title){let l=document.createElement("h4");l.className="vd-spotlight-title",l.id="vd-spotlight-title-"+e+"-"+Date.now(),l.textContent=t.title,s.appendChild(l),s.setAttribute("aria-labelledby",l.id)}if(t.description){let l=document.createElement("p");l.className="vd-spotlight-description",l.id="vd-spotlight-description-"+e+"-"+Date.now(),l.textContent=t.description,s.appendChild(l),s.setAttribute("aria-describedby",l.id)}let i=document.createElement("div");i.className="vd-spotlight-footer",i.setAttribute("aria-label","Step "+(e+1)+" of "+r);let o=document.createElement("span");o.className="vd-spotlight-counter",o.textContent=e+1+" / "+r;let a=document.createElement("div");if(a.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()),a.appendChild(l)}let c=document.createElement("button");if(c.type="button",c.className="vd-spotlight-btn",c.textContent="Skip",c.addEventListener("click",()=>this.stop()),a.appendChild(c),e<r-1){let l=document.createElement("button");l.type="button",l.className="vd-spotlight-btn vd-spotlight-btn-primary",l.textContent="Next",l.addEventListener("click",()=>this.next()),a.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()),a.appendChild(l)}i.appendChild(o),i.appendChild(a),s.appendChild(i),n&&requestAnimationFrame(()=>{let l=n.getBoundingClientRect(),f=s.getBoundingClientRect(),d=l.bottom+12+window.scrollY,h=l.left+(l.width-f.width)/2+window.scrollX;h=Math.max(8,Math.min(h,window.innerWidth-f.width-8)),d+f.height>window.innerHeight+window.scrollY&&(d=l.top-f.height-12+window.scrollY),s.style.top=d+"px",s.style.left=h+"px"}),document.dispatchEvent(new CustomEvent("spotlight:step",{detail:{index:e,step:e,total:r,data:t}}))},next:function(){this._currentStep<this._steps.length-1&&(this._currentStep++,this._showStep(this._currentStep))},prev:function(){this._currentStep>0&&(this._currentStep--,this._showStep(this._currentStep))},stop:function(){if(!this._active)return;let e=this._steps.length,t={completedSteps:e===0?0:Math.min(this._currentStep+1,e),total:e,completed:e>0&&this._currentStep>=e-1};this._active=!1,document.querySelectorAll(".vd-spotlight-target").forEach(n=>{n.classList.remove("vd-spotlight-target")}),this._elements.overlay&&this._elements.overlay.parentNode&&this._elements.overlay.parentNode.removeChild(this._elements.overlay),this._elements.tooltip&&this._elements.tooltip.parentNode&&this._elements.tooltip.parentNode.removeChild(this._elements.tooltip),this._cleanup.forEach(n=>n()),this._cleanup=[],this._elements={},this._steps=[],this._currentStep=0,this._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",v),window.VanduoSpotlight=v})();(function(){"use strict";function v(i){let o=i.slice();for(let a=o.length-1;a>0;a--){let c=Math.floor(Math.random()*(a+1)),l=o[a];o[a]=o[c],o[c]=l}return o}function e(i){if(!isFinite(i)||i<0)return"0:00";let o=Math.floor(i/60),a=Math.floor(i%60);return o+":"+(a<10?"0":"")+a}function t(i){return"vanduo:music-player:"+(i&&i.trim()?i.trim():"default")+":pos"}function n(i){let o=parseFloat(i.min)||0,a=parseFloat(i.max)||1,l=((parseFloat(i.value)||0)-o)/(a-o)*100;i.style.setProperty("--vd-fill",l+"%"),i.style.backgroundImage="linear-gradient(to right, var(--vd-music-player-track-fill, currentColor) 0%, var(--vd-music-player-track-fill, currentColor) "+l+"%, var(--vd-music-player-track-bg, #ccc) "+l+"%, var(--vd-music-player-track-bg, #ccc) 100%)"}function s(i){let o=document.createElement("i");return o.className="ph ph-"+i,o.setAttribute("aria-hidden","true"),o}let r={instances:new Map,defaults:{tracks:[],volume:.5,shuffle:!1,showProgress:!1,showPlaylist:!1,autoAdvance:!0,glass:!1,detachable:!1,floatingPosition:null,draggable:!1,minimizable:!1,startMinimized:!1,persistPosition:!1,persistKey:""},init:function(i){window.Vanduo.queryAll(i,".vd-music-player, [data-music-player]").forEach(o=>{if(this.instances.has(o))return;let a={},c=o.getAttribute("data-music-player-options");if(c)try{a=JSON.parse(c)}catch{}this.initPlayer(o,a)})},initPlayer:function(i,o){let a=Object.assign({},this.defaults,o||{}),l=(Array.isArray(a.tracks)?a.tracks:[]).filter(g=>g&&typeof g.url=="string"&&g.url.trim()),d={tracks:a.shuffle?v(l):l.slice(),originalTracks:l.slice(),currentIndex:0,isPlaying:!1,volume:Math.max(0,Math.min(1,a.volume)),shuffle:a.shuffle,showProgress:a.showProgress,showPlaylist:a.showPlaylist,autoAdvance:a.autoAdvance,audio:null,glass:!!a.glass,detachable:!!a.detachable,floatingPosition:a.floatingPosition||"bottom-right",draggable:!!a.draggable&&!!a.detachable,minimizable:!!a.minimizable,startMinimized:!!a.startMinimized,persistPosition:!!a.persistPosition,persistKey:typeof a.persistKey=="string"?a.persistKey:"",isDetached:!1,isMinimized:!1,_startMinimizeApplied:!1},h=new Audio;h.volume=d.volume,h.preload="metadata",d.audio=h,this._buildDOM(i,d);let u={btnPlay:i.querySelector(".vd-music-player-btn-play"),btnPrev:i.querySelector(".vd-music-player-btn-prev"),btnNext:i.querySelector(".vd-music-player-btn-next"),btnShuffle:i.querySelector(".vd-music-player-btn-shuffle"),btnPlaylist:i.querySelector(".vd-music-player-btn-playlist"),btnDetach:i.querySelector(".vd-music-player-btn-detach"),btnAttach:i.querySelector(".vd-music-player-btn-attach"),btnMinimize:i.querySelector(".vd-music-player-btn-minimize"),dragHandle:i.querySelector(".vd-music-player-drag-handle"),trackName:i.querySelector(".vd-music-player-track-name"),volumeSlider:i.querySelector(".vd-music-player-volume-slider"),volumeIcon:i.querySelector(".vd-music-player-volume-icon"),progressBar:i.querySelector(".vd-music-player-progress-bar"),timeElapsed:i.querySelector(".vd-music-player-time-elapsed"),timeDuration:i.querySelector(".vd-music-player-time-duration"),playlistPanel:i.querySelector(".vd-music-player-playlist")},p=()=>{let g=u.btnPlay;g&&(g.innerHTML="",g.appendChild(s(d.isPlaying?"pause":"play")),g.setAttribute("aria-label",d.isPlaying?"Pause":"Play"),g.classList.toggle("is-active",d.isPlaying))},E=()=>{let g=u.trackName;if(!g)return;let P=d.tracks[d.currentIndex];P?(g.textContent=P.name||"Unknown Track",g.classList.remove("is-idle")):(g.textContent="No tracks loaded",g.classList.add("is-idle"))},L=()=>{let g=u.volumeIcon;if(!g)return;g.innerHTML="";let P=d.volume,N=P===0?"speaker-none":P<.5?"speaker-low":"speaker-high";g.appendChild(s(N))},_=()=>{let g=u.btnShuffle;g&&(g.classList.toggle("is-active",d.shuffle),g.setAttribute("aria-pressed",d.shuffle?"true":"false"))},m=()=>{let g=u.playlistPanel;g&&(g.innerHTML="",d.tracks.forEach((P,N)=>{let F=document.createElement("button");F.className="vd-music-player-playlist-item"+(N===d.currentIndex?" is-active":""),F.type="button",F.setAttribute("data-index",String(N)),F.setAttribute("aria-current",N===d.currentIndex?"true":"false");let H=document.createElement("span");H.className="vd-music-player-playlist-num",H.textContent=String(N+1);let $=document.createElement("span");$.className="vd-music-player-playlist-name",$.textContent=P.name||"Track "+(N+1),F.appendChild(H),F.appendChild($),g.appendChild(F)}))},C=()=>{let g=u.progressBar;if(!g||!h.duration)return;let P=h.currentTime/h.duration*100;g.value=String(P),n(g),u.timeElapsed&&(u.timeElapsed.textContent=e(h.currentTime)),u.timeDuration&&(u.timeDuration.textContent=e(h.duration))},S=(g,P)=>{let N=d.tracks[g];N&&(d.currentIndex=g,h.src=N.url,E(),m(),u.progressBar&&(u.progressBar.value="0",n(u.progressBar)),u.timeElapsed&&(u.timeElapsed.textContent="0:00"),u.timeDuration&&(u.timeDuration.textContent="0:00"),i.dispatchEvent(new CustomEvent("musicplayer:trackchange",{bubbles:!0,detail:{index:g,name:N.name,url:N.url}})),P&&h.play().catch(()=>{}))},w=[],b=()=>{d.isPlaying=!0,p(),i.dispatchEvent(new CustomEvent("musicplayer:play",{bubbles:!0}))},V=()=>{d.isPlaying=!1,p(),i.dispatchEvent(new CustomEvent("musicplayer:pause",{bubbles:!0}))},I=()=>{if(d.autoAdvance&&d.tracks.length>1){let g=(d.currentIndex+1)%d.tracks.length;S(g,!0)}else d.isPlaying=!1,p(),i.dispatchEvent(new CustomEvent("musicplayer:ended",{bubbles:!0}))},q=()=>{d.showProgress&&C()},M=()=>{u.timeDuration&&(u.timeDuration.textContent=e(h.duration)),u.progressBar&&(u.progressBar.max="100",n(u.progressBar))};if(h.addEventListener("play",b),h.addEventListener("pause",V),h.addEventListener("ended",I),h.addEventListener("timeupdate",q),h.addEventListener("loadedmetadata",M),w.push(()=>{h.removeEventListener("play",b),h.removeEventListener("pause",V),h.removeEventListener("ended",I),h.removeEventListener("timeupdate",q),h.removeEventListener("loadedmetadata",M),h.pause(),h.src=""}),u.btnPlay){let g=()=>{!h.src&&d.tracks.length&&S(d.currentIndex,!1),d.isPlaying?h.pause():h.play().catch(()=>{})};u.btnPlay.addEventListener("click",g),w.push(()=>u.btnPlay.removeEventListener("click",g));let P=N=>{(N.key===" "||N.key==="Enter")&&(N.preventDefault(),g())};u.btnPlay.addEventListener("keydown",P),w.push(()=>u.btnPlay.removeEventListener("keydown",P))}if(u.btnPrev){let g=()=>{if(d.tracks.length)if(h.currentTime>3)h.currentTime=0;else{let P=d.currentIndex===0?d.tracks.length-1:d.currentIndex-1;S(P,d.isPlaying)}};u.btnPrev.addEventListener("click",g),w.push(()=>u.btnPrev.removeEventListener("click",g))}if(u.btnNext){let g=()=>{if(!d.tracks.length)return;let P=(d.currentIndex+1)%d.tracks.length;S(P,d.isPlaying)};u.btnNext.addEventListener("click",g),w.push(()=>u.btnNext.removeEventListener("click",g))}if(u.btnShuffle){let g=()=>{if(d.shuffle=!d.shuffle,d.shuffle){let P=d.tracks[d.currentIndex];d.tracks=v(d.tracks);let N=d.tracks.findIndex(F=>F===P);N>0&&(d.tracks.splice(N,1),d.tracks.unshift(P)),d.currentIndex=0}else{let P=d.tracks[d.currentIndex];d.tracks=d.originalTracks.slice(),d.currentIndex=d.tracks.findIndex(N=>N===P),d.currentIndex<0&&(d.currentIndex=0)}_(),m()};u.btnShuffle.addEventListener("click",g),w.push(()=>u.btnShuffle.removeEventListener("click",g))}if(u.btnPlaylist){let g=()=>{let P=u.playlistPanel;if(!P)return;let N=P.classList.toggle("is-open");u.btnPlaylist.classList.toggle("is-active",N),u.btnPlaylist.setAttribute("aria-expanded",N?"true":"false")};u.btnPlaylist.addEventListener("click",g),w.push(()=>u.btnPlaylist.removeEventListener("click",g))}if(u.volumeSlider){let g=P=>{let N=parseFloat(P.target.value);d.volume=N,h.volume=N,L(),n(u.volumeSlider),i.dispatchEvent(new CustomEvent("musicplayer:volumechange",{bubbles:!0,detail:{volume:N}}))};u.volumeSlider.addEventListener("input",g),w.push(()=>u.volumeSlider.removeEventListener("input",g)),n(u.volumeSlider)}if(u.progressBar){let g=P=>{if(!h.duration)return;let N=parseFloat(P.target.value);h.currentTime=N/100*h.duration,n(u.progressBar)};u.progressBar.addEventListener("input",g),w.push(()=>u.progressBar.removeEventListener("input",g))}if(u.playlistPanel){let g=P=>{let N=P.target.closest(".vd-music-player-playlist-item");if(!N)return;let F=parseInt(N.getAttribute("data-index"),10);isNaN(F)||S(F,!0)};u.playlistPanel.addEventListener("click",g),w.push(()=>u.playlistPanel.removeEventListener("click",g))}if(u.btnDetach){let g=()=>{this.detach(i)};u.btnDetach.addEventListener("click",g),w.push(()=>u.btnDetach.removeEventListener("click",g))}if(u.btnAttach){let g=()=>{this.attach(i)};u.btnAttach.addEventListener("click",g),w.push(()=>u.btnAttach.removeEventListener("click",g))}if(u.btnMinimize){let g=()=>{this.toggleMinimize(i)};u.btnMinimize.addEventListener("click",g),w.push(()=>u.btnMinimize.removeEventListener("click",g))}p(),E(),L(),a.showPlaylist&&m(),this.instances.set(i,{state:d,audio:h,refs:u,cleanup:w,ui:{restore:null,unbindDrag:null}}),i.setAttribute("data-music-player-initialized","true")},_buildDOM:function(i,o){if(i.querySelector(".vd-music-player-controls"))return;if(i.setAttribute("role","region"),i.setAttribute("aria-label","Music Player"),o.showProgress&&i.classList.add("has-progress"),o.showPlaylist&&i.classList.add("has-playlist"),o.glass&&i.classList.add("vd-music-player-glass"),o.draggable&&i.classList.add("vd-music-player-draggable"),o.detachable||o.minimizable){let m=document.createElement("div");if(m.className="vd-music-player-toolbar",m.setAttribute("role","toolbar"),m.setAttribute("aria-label","Player window"),o.draggable){let S=document.createElement("button");S.type="button",S.className="vd-music-player-drag-handle",S.setAttribute("aria-label","Drag to move player"),S.appendChild(s("dots-six-vertical")),m.appendChild(S)}let C=document.createElement("span");if(C.className="vd-music-player-toolbar-spacer",C.setAttribute("aria-hidden","true"),m.appendChild(C),o.minimizable){let S=document.createElement("button");S.type="button",S.className="vd-music-player-btn vd-music-player-btn-minimize",S.setAttribute("aria-label","Minimize player"),S.setAttribute("aria-expanded","true"),S.appendChild(s("minus")),m.appendChild(S)}if(o.detachable){let S=document.createElement("button");S.type="button",S.className="vd-music-player-btn vd-music-player-btn-detach",S.setAttribute("aria-label","Detach player"),S.appendChild(s("arrows-out")),m.appendChild(S);let w=document.createElement("button");w.type="button",w.className="vd-music-player-btn vd-music-player-btn-attach",w.setAttribute("aria-label","Attach player"),w.appendChild(s("arrows-in")),m.appendChild(w)}i.classList.add("vd-music-player-has-chrome"),i.appendChild(m)}let a=document.createElement("div");a.className="vd-music-player-info";let c=document.createElement("span");c.className="vd-music-player-icon",c.setAttribute("aria-hidden","true"),c.appendChild(s("music-note"));let l=document.createElement("span");l.className="vd-music-player-track-name",l.setAttribute("aria-live","polite"),l.setAttribute("aria-atomic","true"),a.appendChild(c),a.appendChild(l),i.appendChild(a);let f=document.createElement("div");f.className="vd-music-player-controls",f.setAttribute("role","group"),f.setAttribute("aria-label","Playback controls");let d=document.createElement("button");d.type="button",d.className="vd-music-player-btn vd-music-player-btn-prev",d.setAttribute("aria-label","Previous track"),d.appendChild(s("skip-back"));let h=document.createElement("button");h.type="button",h.className="vd-music-player-btn vd-music-player-btn-play",h.setAttribute("aria-label","Play"),h.appendChild(s("play"));let u=document.createElement("button");if(u.type="button",u.className="vd-music-player-btn vd-music-player-btn-next",u.setAttribute("aria-label","Next track"),u.appendChild(s("skip-forward")),f.appendChild(d),f.appendChild(h),f.appendChild(u),o.showPlaylist||o.shuffle!==void 0){let m=document.createElement("button");m.type="button",m.className="vd-music-player-btn vd-music-player-btn-shuffle",m.setAttribute("aria-label","Shuffle"),m.setAttribute("aria-pressed",o.shuffle?"true":"false"),m.appendChild(s("shuffle")),f.appendChild(m)}let p=document.createElement("span");p.className="vd-music-player-spacer",p.setAttribute("aria-hidden","true"),f.appendChild(p);let E=document.createElement("div");E.className="vd-music-player-volume";let L=document.createElement("span");L.className="vd-music-player-volume-icon",L.setAttribute("aria-hidden","true");let _=document.createElement("input");if(_.type="range",_.className="vd-music-player-volume-slider",_.min="0",_.max="1",_.step="0.01",_.value=String(o.volume),_.setAttribute("aria-label","Volume"),E.appendChild(L),E.appendChild(_),f.appendChild(E),o.showPlaylist){let m=document.createElement("button");m.type="button",m.className="vd-music-player-btn vd-music-player-btn-playlist",m.setAttribute("aria-label","Show playlist"),m.setAttribute("aria-expanded","false"),m.appendChild(s("playlist")),f.appendChild(m)}if(i.appendChild(f),o.showProgress){let m=document.createElement("div");m.className="vd-music-player-progress";let C=document.createElement("span");C.className="vd-music-player-time vd-music-player-time-elapsed",C.textContent="0:00",C.setAttribute("aria-hidden","true");let S=document.createElement("input");S.type="range",S.className="vd-music-player-progress-bar",S.min="0",S.max="100",S.step="0.1",S.value="0",S.setAttribute("aria-label","Seek");let w=document.createElement("span");w.className="vd-music-player-time vd-music-player-time-duration",w.textContent="0:00",w.setAttribute("aria-hidden","true"),m.appendChild(C),m.appendChild(S),m.appendChild(w),i.appendChild(m)}if(o.showPlaylist){let m=document.createElement("div");m.className="vd-music-player-playlist",m.setAttribute("aria-label","Playlist"),i.appendChild(m)}},play:function(i){let o=this.instances.get(i);o&&(!o.audio.src&&o.state.tracks.length&&(o.audio.src=o.state.tracks[o.state.currentIndex].url),o.audio.play().catch(()=>{}))},pause:function(i){let o=this.instances.get(i);o&&o.audio.pause()},toggle:function(i){let o=this.instances.get(i);o&&(o.state.isPlaying?this.pause(i):this.play(i))},next:function(i){let o=this.instances.get(i);if(!o||!o.state.tracks.length)return;let a=(o.state.currentIndex+1)%o.state.tracks.length;this._loadTrack(o,a,o.state.isPlaying)},previous:function(i){let o=this.instances.get(i);if(!o||!o.state.tracks.length)return;let a=o.state.tracks.length,c=(o.state.currentIndex-1+a)%a;this._loadTrack(o,c,o.state.isPlaying)},setVolume:function(i,o){let a=this.instances.get(i);if(!a)return;let c=Math.max(0,Math.min(1,o));a.state.volume=c,a.audio.volume=c,a.refs.volumeSlider&&(a.refs.volumeSlider.value=String(c),n(a.refs.volumeSlider)),i.dispatchEvent(new CustomEvent("musicplayer:volumechange",{bubbles:!0,detail:{volume:c}}))},setTrack:function(i,o){let a=this.instances.get(i);a&&this._loadTrack(a,o,a.state.isPlaying)},shuffle:function(i){let o=this.instances.get(i);!o||!o.refs.btnShuffle||o.refs.btnShuffle.click()},detach:function(i,o){let a=this.instances.get(i);if(!a||!a.state.detachable||a.state.isDetached)return;let c=a.state;a.ui=a.ui||{restore:null,unbindDrag:null},c.isDetached=!0,a.ui.restore={parent:i.parentNode,next:i.nextSibling},document.body.appendChild(i),i.classList.add("vd-music-player-floating","vd-music-player-detached");let l=o!=null&&o!==void 0?o:c.floatingPosition;this._setCornerPosition(i,l==="bottom-left"||l==="bottom-right"?l:"bottom-right"),this._loadPersistedPosition(i,a),c.startMinimized&&!c._startMinimizeApplied&&(c._startMinimizeApplied=!0,this.minimize(i)),this._bindFloatingDrag(a),i.dispatchEvent(new CustomEvent("musicplayer:detach",{bubbles:!0}))},attach:function(i){let o=this.instances.get(i);if(!o||!o.state.isDetached)return;this._unbindFloatingDrag(o),o.state.isDetached=!1;let a=o.ui&&o.ui.restore;i.classList.remove("vd-music-player-floating","vd-music-player-detached","vd-music-player-floating-bottom-left","vd-music-player-floating-bottom-right","is-position-custom"),i.style.removeProperty("--vd-music-player-floating-top"),i.style.removeProperty("--vd-music-player-floating-left"),a&&a.parent&&a.parent.isConnected&&a.parent.insertBefore(i,a.next),o.ui&&(o.ui.restore=null,o.ui.unbindDrag=null),i.dispatchEvent(new CustomEvent("musicplayer:attach",{bubbles:!0}))},minimize:function(i){let o=this.instances.get(i);if(!o||!o.state.minimizable||o.state.isMinimized)return;let a=o.state;a.isMinimized=!0,i.classList.add("vd-music-player-minimized"),this._setMinimizeButtonState(o,!0),o.refs.playlistPanel&&o.refs.playlistPanel.classList.contains("is-open")&&o.refs.btnPlaylist&&(o.refs.playlistPanel.classList.remove("is-open"),o.refs.btnPlaylist.classList.remove("is-active"),o.refs.btnPlaylist.setAttribute("aria-expanded","false")),i.dispatchEvent(new CustomEvent("musicplayer:minimize",{bubbles:!0}))},expand:function(i){let o=this.instances.get(i);!o||!o.state.minimizable||!o.state.isMinimized||(o.state.isMinimized=!1,i.classList.remove("vd-music-player-minimized"),this._setMinimizeButtonState(o,!1),i.dispatchEvent(new CustomEvent("musicplayer:expand",{bubbles:!0})))},toggleMinimize:function(i){let o=this.instances.get(i);!o||!o.state.minimizable||(o.state.isMinimized?this.expand(i):this.minimize(i))},setPosition:function(i,o){let a=this.instances.get(i);if(!(!a||!a.state.isDetached)&&(typeof o=="string"?this._setCornerPosition(i,o==="bottom-left"||o==="bottom-right"?o:"bottom-right"):o&&typeof o.x=="number"&&typeof o.y=="number"&&this._setCustomPositionFromRect(i,o.x,o.y),a.state.persistPosition)){let c=i.getBoundingClientRect();this._savePositionPixels(a,c.left,c.top)}},_setMinimizeButtonState:function(i,o){let a=i.refs&&i.refs.btnMinimize;a&&(a.innerHTML="",a.appendChild(s(o?"plus":"minus")),a.setAttribute("aria-label",o?"Expand player":"Minimize player"),a.setAttribute("aria-expanded",o?"false":"true"))},_setCornerPosition:function(i,o){i.classList.remove("is-position-custom","vd-music-player-floating-bottom-left","vd-music-player-floating-bottom-right"),i.style.removeProperty("--vd-music-player-floating-top"),i.style.removeProperty("--vd-music-player-floating-left"),o==="bottom-left"?i.classList.add("vd-music-player-floating-bottom-left"):i.classList.add("vd-music-player-floating-bottom-right")},_setCustomPositionFromRect:function(i,o,a){i.classList.remove("vd-music-player-floating-bottom-left","vd-music-player-floating-bottom-right"),i.classList.add("is-position-custom"),i.style.setProperty("--vd-music-player-floating-left",o+"px"),i.style.setProperty("--vd-music-player-floating-top",a+"px")},_loadPersistedPosition:function(i,o){if(!o.state.persistPosition)return;let a=this._persistKeyForInstance(o,i),c=null;if(typeof window.safeStorageGet=="function")c=window.safeStorageGet(a,null);else try{c=localStorage.getItem(a)}catch{}if(c)try{let l=JSON.parse(c);l&&typeof l.x=="number"&&typeof l.y=="number"&&this._setCustomPositionFromRect(i,l.x,l.y)}catch{}},_savePositionPixels:function(i,o,a){if(!i.state.persistPosition)return;let c=this._containerOf(i);if(!c)return;let l=this._persistKeyForInstance(i,c),f=JSON.stringify({x:o,y:a});if(typeof window.safeStorageSet=="function")window.safeStorageSet(l,f);else try{localStorage.setItem(l,f)}catch{}},_persistKeyForInstance:function(i,o){let a=i.state.persistKey;return a&&String(a).trim()?t(String(a).trim()):t(o.id||"")},_unbindFloatingDrag:function(i){i.ui&&typeof i.ui.unbindDrag=="function"&&(i.ui.unbindDrag(),i.ui.unbindDrag=null)},_bindFloatingDrag:function(i){this._unbindFloatingDrag(i);let o=i.refs&&i.refs.dragHandle;if(!o||!i.state||!i.state.draggable)return;let a=this,c=this._containerOf(i);if(!c)return;let l=0,f=0,d=0,h=0,u=!1,p=function(_){if(_.pointerType==="mouse"&&_.button!==0)return;_.preventDefault(),u=!0;let m=c.getBoundingClientRect();d=m.left,h=m.top,l=_.clientX,f=_.clientY,a._setCustomPositionFromRect(c,d,h);try{o.setPointerCapture(_.pointerId)}catch{}},E=function(_){if(!u)return;let m=_.clientX-l,C=_.clientY-f,S=d+m,w=h+C,b=c.getBoundingClientRect(),V=b.width,I=b.height,q=window.innerWidth,M=window.innerHeight,g=8;S=Math.max(g,Math.min(S,q-V-g)),w=Math.max(g,Math.min(w,M-I-g)),a._setCustomPositionFromRect(c,S,w)},L=function(_){if(u){if(u=!1,typeof o.hasPointerCapture=="function"&&o.hasPointerCapture(_.pointerId))try{o.releasePointerCapture(_.pointerId)}catch{}if(i.state.persistPosition){let m=c.getBoundingClientRect();a._savePositionPixels(i,m.left,m.top)}}};o.addEventListener("pointerdown",p),o.addEventListener("pointermove",E),o.addEventListener("pointerup",L),o.addEventListener("pointercancel",L),i.ui=i.ui||{restore:null,unbindDrag:null},i.ui.unbindDrag=function(){o.removeEventListener("pointerdown",p),o.removeEventListener("pointermove",E),o.removeEventListener("pointerup",L),o.removeEventListener("pointercancel",L)}},getState:function(i){let o=this.instances.get(i);if(!o)return null;let a=o.state;return{isPlaying:a.isPlaying,currentIndex:a.currentIndex,currentTrack:a.tracks[a.currentIndex]||null,volume:a.volume,shuffle:a.shuffle,tracks:a.tracks.slice(),isDetached:!!a.isDetached,isMinimized:!!a.isMinimized}},destroy:function(i){let o=this.instances.get(i);if(o){if(this._unbindFloatingDrag(o),o.state&&o.state.isDetached)try{this.attach(i)}catch{}o.cleanup.forEach(a=>a()),this.instances.delete(i),i.removeAttribute("data-music-player-initialized")}},destroyAll:function(){this.instances.forEach((i,o)=>this.destroy(o))},_loadTrack:function(i,o,a){let c=i.state.tracks[o];if(!c)return;let l=this._containerOf(i);i.state.currentIndex=o,i.audio.src=c.url,i.refs.trackName&&(i.refs.trackName.textContent=c.name||"Unknown Track",i.refs.trackName.classList.remove("is-idle")),i.refs.playlistPanel&&i.refs.playlistPanel.querySelectorAll(".vd-music-player-playlist-item").forEach((f,d)=>{let h=d===o;f.classList.toggle("is-active",h),f.setAttribute("aria-current",h?"true":"false")}),i.refs.progressBar&&(i.refs.progressBar.value="0",n(i.refs.progressBar)),i.refs.timeElapsed&&(i.refs.timeElapsed.textContent="0:00"),i.refs.timeDuration&&(i.refs.timeDuration.textContent="0:00"),l&&l.dispatchEvent(new CustomEvent("musicplayer:trackchange",{bubbles:!0,detail:{index:o,name:c.name,url:c.url}})),a&&i.audio.play().catch(()=>{})},_containerOf:function(i){for(let[o,a]of this.instances)if(a===i)return o;return null}};typeof window.Vanduo<"u"&&window.Vanduo.register("musicPlayer",r),window.VanduoMusicPlayer=r})();var ue=window.Vanduo;var tt=ue;})();
43
43
  //# sourceMappingURL=vanduo.min.js.map