diff --git a/vnt-web/static/assets/index-JN_O_VQt.js b/vnt-web/static/assets/index-BXMGH-t3.js similarity index 67% rename from vnt-web/static/assets/index-JN_O_VQt.js rename to vnt-web/static/assets/index-BXMGH-t3.js index 9d50c8e..8afadea 100644 --- a/vnt-web/static/assets/index-JN_O_VQt.js +++ b/vnt-web/static/assets/index-BXMGH-t3.js @@ -1,6 +1,6 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))n(o);new MutationObserver(o=>{for(const l of o)if(l.type==="childList")for(const r of l.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function s(o){const l={};return o.integrity&&(l.integrity=o.integrity),o.referrerPolicy&&(l.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?l.credentials="include":o.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function n(o){if(o.ep)return;o.ep=!0;const l=s(o);fetch(o.href,l)}})();function Fo(e){const t=Object.create(null);for(const s of e.split(","))t[s]=1;return s=>s in t}const ke={},vs=[],bt=()=>{},Sr=()=>!1,Tn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),$n=e=>e.startsWith("onUpdate:"),Pe=Object.assign,Uo=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},ka=Object.prototype.hasOwnProperty,ve=(e,t)=>ka.call(e,t),Q=Array.isArray,bs=e=>en(e)==="[object Map]",An=e=>en(e)==="[object Set]",xl=e=>en(e)==="[object Date]",le=e=>typeof e=="function",Ce=e=>typeof e=="string",Xe=e=>typeof e=="symbol",be=e=>e!==null&&typeof e=="object",Er=e=>(be(e)||le(e))&&le(e.then)&&le(e.catch),Tr=Object.prototype.toString,en=e=>Tr.call(e),wa=e=>en(e).slice(8,-1),$r=e=>en(e)==="[object Object]",In=e=>Ce(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Vs=Fo(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Rn=e=>{const t=Object.create(null);return(s=>t[s]||(t[s]=e(s)))},Ca=/-\w/g,Ge=Rn(e=>e.replace(Ca,t=>t.slice(1).toUpperCase())),Sa=/\B([A-Z])/g,is=Rn(e=>e.replace(Sa,"-$1").toLowerCase()),Pn=Rn(e=>e.charAt(0).toUpperCase()+e.slice(1)),Xn=Rn(e=>e?`on${Pn(e)}`:""),vt=(e,t)=>!Object.is(e,t),fn=(e,...t)=>{for(let s=0;s{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:n,value:s})},Ho=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Ea=e=>{const t=Ce(e)?Number(e):NaN;return isNaN(t)?e:t};let _l;const On=()=>_l||(_l=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Mn(e){if(Q(e)){const t={};for(let s=0;s{if(s){const n=s.split($a);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function G(e){let t="";if(Ce(e))t=e;else if(Q(e))for(let s=0;stn(s,t))}const Pr=e=>!!(e&&e.__v_isRef===!0),N=e=>Ce(e)?e:e==null?"":Q(e)||be(e)&&(e.toString===Tr||!le(e.toString))?Pr(e)?N(e.value):JSON.stringify(e,Or,2):String(e),Or=(e,t)=>Pr(t)?Or(e,t.value):bs(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[n,o],l)=>(s[eo(n,l)+" =>"]=o,s),{})}:An(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>eo(s))}:Xe(t)?eo(t):be(t)&&!Q(t)&&!$r(t)?String(t):t,eo=(e,t="")=>{var s;return Xe(e)?`Symbol(${(s=e.description)!=null?s:t})`:e};let Me;class Mr{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&Me&&(Me.active?(this.parent=Me,this.index=(Me.scopes||(Me.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,s;if(this.scopes){const n=this.scopes.slice();for(t=0,s=n.length;t0&&--this._on===0){if(Me===this)Me=this.prevScope;else{let t=Me;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let s,n;for(s=0,n=this.effects.length;s0)return;if(Ds){let t=Ds;for(Ds=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;js;){let t=js;for(js=void 0;t;){const s=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(n){e||(e=n)}t=s}}if(e)throw e}function Br(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Fr(e){let t,s=e.depsTail,n=s;for(;n;){const o=n.prevDep;n.version===-1?(n===s&&(s=o),Go(n),La(n)):t=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=o}e.deps=t,e.depsTail=s}function _o(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ur(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ur(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Ks)||(e.globalVersion=Ks,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!_o(e))))return;e.flags|=2;const t=e.dep,s=we,n=lt;we=e,lt=!0;try{Br(e);const o=e.fn(e._value);(t.version===0||vt(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{we=s,lt=n,Fr(e),e.flags&=-3}}function Go(e,t=!1){const{dep:s,prevSub:n,nextSub:o}=e;if(n&&(n.nextSub=o,e.prevSub=void 0),o&&(o.prevSub=n,e.nextSub=void 0),s.subs===e&&(s.subs=n,!n&&s.computed)){s.computed.flags&=-5;for(let l=s.computed.deps;l;l=l.nextDep)Go(l,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function La(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}let lt=!0;const Hr=[];function At(){Hr.push(lt),lt=!1}function It(){const e=Hr.pop();lt=e===void 0?!0:e}function yl(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=we;we=void 0;try{t()}finally{we=s}}}let Ks=0;class Na{constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class qo{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!we||!lt||we===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==we)s=this.activeLink=new Na(we,this),we.deps?(s.prevDep=we.depsTail,we.depsTail.nextDep=s,we.depsTail=s):we.deps=we.depsTail=s,Wr(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const n=s.nextDep;n.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=n),s.prevDep=we.depsTail,s.nextDep=void 0,we.depsTail.nextDep=s,we.depsTail=s,we.deps===s&&(we.deps=n)}return s}trigger(t){this.version++,Ks++,this.notify(t)}notify(t){Wo();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{Ko()}}}function Wr(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let n=t.deps;n;n=n.nextDep)Wr(n)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const pn=new WeakMap,ns=Symbol(""),yo=Symbol(""),Gs=Symbol("");function je(e,t,s){if(lt&&we){let n=pn.get(e);n||pn.set(e,n=new Map);let o=n.get(s);o||(n.set(s,o=new qo),o.map=n,o.key=s),o.track()}}function St(e,t,s,n,o,l){const r=pn.get(e);if(!r){Ks++;return}const i=c=>{c&&c.trigger()};if(Wo(),t==="clear")r.forEach(i);else{const c=Q(e),f=c&&In(s);if(c&&s==="length"){const u=Number(n);r.forEach((d,g)=>{(g==="length"||g===Gs||!Xe(g)&&g>=u)&&i(d)})}else switch((s!==void 0||r.has(void 0))&&i(r.get(s)),f&&i(r.get(Gs)),t){case"add":c?f&&i(r.get("length")):(i(r.get(ns)),bs(e)&&i(r.get(yo)));break;case"delete":c||(i(r.get(ns)),bs(e)&&i(r.get(yo)));break;case"set":bs(e)&&i(r.get(ns));break}}Ko()}function Va(e,t){const s=pn.get(e);return s&&s.get(t)}function fs(e){const t=pe(e);return t===e?t:(je(t,"iterate",Gs),Ye(e)?t:t.map(rt))}function Ln(e){return je(e=pe(e),"iterate",Gs),e}function mt(e,t){return Rt(e)?ys(Tt(e)?rt(t):t):rt(t)}const ja={__proto__:null,[Symbol.iterator](){return so(this,Symbol.iterator,e=>mt(this,e))},concat(...e){return fs(this).concat(...e.map(t=>Q(t)?fs(t):t))},entries(){return so(this,"entries",e=>(e[1]=mt(this,e[1]),e))},every(e,t){return yt(this,"every",e,t,void 0,arguments)},filter(e,t){return yt(this,"filter",e,t,s=>s.map(n=>mt(this,n)),arguments)},find(e,t){return yt(this,"find",e,t,s=>mt(this,s),arguments)},findIndex(e,t){return yt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return yt(this,"findLast",e,t,s=>mt(this,s),arguments)},findLastIndex(e,t){return yt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return yt(this,"forEach",e,t,void 0,arguments)},includes(...e){return no(this,"includes",e)},indexOf(...e){return no(this,"indexOf",e)},join(e){return fs(this).join(e)},lastIndexOf(...e){return no(this,"lastIndexOf",e)},map(e,t){return yt(this,"map",e,t,void 0,arguments)},pop(){return $s(this,"pop")},push(...e){return $s(this,"push",e)},reduce(e,...t){return kl(this,"reduce",e,t)},reduceRight(e,...t){return kl(this,"reduceRight",e,t)},shift(){return $s(this,"shift")},some(e,t){return yt(this,"some",e,t,void 0,arguments)},splice(...e){return $s(this,"splice",e)},toReversed(){return fs(this).toReversed()},toSorted(e){return fs(this).toSorted(e)},toSpliced(...e){return fs(this).toSpliced(...e)},unshift(...e){return $s(this,"unshift",e)},values(){return so(this,"values",e=>mt(this,e))}};function so(e,t,s){const n=Ln(e),o=n[t]();return n!==e&&!Ye(e)&&(o._next=o.next,o.next=()=>{const l=o._next();return l.done||(l.value=s(l.value)),l}),o}const Da=Array.prototype;function yt(e,t,s,n,o,l){const r=Ln(e),i=r!==e&&!Ye(e),c=r[t];if(c!==Da[t]){const d=c.apply(e,l);return i?rt(d):d}let f=s;r!==e&&(i?f=function(d,g){return s.call(this,mt(e,d),g,e)}:s.length>2&&(f=function(d,g){return s.call(this,d,g,e)}));const u=c.call(r,f,n);return i&&o?o(u):u}function kl(e,t,s,n){const o=Ln(e),l=o!==e&&!Ye(e);let r=s,i=!1;o!==e&&(l?(i=n.length===0,r=function(f,u,d){return i&&(i=!1,f=mt(e,f)),s.call(this,f,mt(e,u),d,e)}):s.length>3&&(r=function(f,u,d){return s.call(this,f,u,d,e)}));const c=o[t](r,...n);return i?mt(e,c):c}function no(e,t,s){const n=pe(e);je(n,"iterate",Gs);const o=n[t](...s);return(o===-1||o===!1)&&Nn(s[0])?(s[0]=pe(s[0]),n[t](...s)):o}function $s(e,t,s=[]){At(),Wo();const n=pe(e)[t].apply(e,s);return Ko(),It(),n}const Ba=Fo("__proto__,__v_isRef,__isVue"),Kr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Xe));function Fa(e){Xe(e)||(e=String(e));const t=pe(this);return je(t,"has",e),t.hasOwnProperty(e)}class Gr{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,n){if(s==="__v_skip")return t.__v_skip;const o=this._isReadonly,l=this._isShallow;if(s==="__v_isReactive")return!o;if(s==="__v_isReadonly")return o;if(s==="__v_isShallow")return l;if(s==="__v_raw")return n===(o?l?Ya:Jr:l?Zr:zr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const r=Q(t);if(!o){let c;if(r&&(c=ja[s]))return c;if(s==="hasOwnProperty")return Fa}const i=Reflect.get(t,s,$e(t)?t:n);if((Xe(s)?Kr.has(s):Ba(s))||(o||je(t,"get",s),l))return i;if($e(i)){const c=r&&In(s)?i:i.value;return o&&be(c)?wo(c):c}return be(i)?o?wo(i):Ht(i):i}}class qr extends Gr{constructor(t=!1){super(!1,t)}set(t,s,n,o){let l=t[s];const r=Q(t)&&In(s);if(!this._isShallow){const f=Rt(l);if(!Ye(n)&&!Rt(n)&&(l=pe(l),n=pe(n)),!r&&$e(l)&&!$e(n))return f||(l.value=n),!0}const i=r?Number(s)e,ln=e=>Reflect.getPrototypeOf(e);function Ga(e,t,s){return function(...n){const o=this.__v_raw,l=pe(o),r=bs(l),i=e==="entries"||e===Symbol.iterator&&r,c=e==="keys"&&r,f=o[e](...n),u=s?ko:t?ys:rt;return!t&&je(l,"iterate",c?yo:ns),Pe(Object.create(f),{next(){const{value:d,done:g}=f.next();return g?{value:d,done:g}:{value:i?[u(d[0]),u(d[1])]:u(d),done:g}}})}}function rn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function qa(e,t){const s={get(o){const l=this.__v_raw,r=pe(l),i=pe(o);e||(vt(o,i)&&je(r,"get",o),je(r,"get",i));const{has:c}=ln(r),f=t?ko:e?ys:rt;if(c.call(r,o))return f(l.get(o));if(c.call(r,i))return f(l.get(i));l!==r&&l.get(o)},get size(){const o=this.__v_raw;return!e&&je(pe(o),"iterate",ns),o.size},has(o){const l=this.__v_raw,r=pe(l),i=pe(o);return e||(vt(o,i)&&je(r,"has",o),je(r,"has",i)),o===i?l.has(o):l.has(o)||l.has(i)},forEach(o,l){const r=this,i=r.__v_raw,c=pe(i),f=t?ko:e?ys:rt;return!e&&je(c,"iterate",ns),i.forEach((u,d)=>o.call(l,f(u),f(d),r))}};return Pe(s,e?{add:rn("add"),set:rn("set"),delete:rn("delete"),clear:rn("clear")}:{add(o){const l=pe(this),r=ln(l),i=pe(o),c=!t&&!Ye(o)&&!Rt(o)?i:o;return r.has.call(l,c)||vt(o,c)&&r.has.call(l,o)||vt(i,c)&&r.has.call(l,i)||(l.add(c),St(l,"add",c,c)),this},set(o,l){!t&&!Ye(l)&&!Rt(l)&&(l=pe(l));const r=pe(this),{has:i,get:c}=ln(r);let f=i.call(r,o);f||(o=pe(o),f=i.call(r,o));const u=c.call(r,o);return r.set(o,l),f?vt(l,u)&&St(r,"set",o,l):St(r,"add",o,l),this},delete(o){const l=pe(this),{has:r,get:i}=ln(l);let c=r.call(l,o);c||(o=pe(o),c=r.call(l,o)),i&&i.call(l,o);const f=l.delete(o);return c&&St(l,"delete",o,void 0),f},clear(){const o=pe(this),l=o.size!==0,r=o.clear();return l&&St(o,"clear",void 0,void 0),r}}),["keys","values","entries",Symbol.iterator].forEach(o=>{s[o]=Ga(o,e,t)}),s}function zo(e,t){const s=qa(e,t);return(n,o,l)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?n:Reflect.get(ve(s,o)&&o in n?s:n,o,l)}const za={get:zo(!1,!1)},Za={get:zo(!1,!0)},Ja={get:zo(!0,!1)};const zr=new WeakMap,Zr=new WeakMap,Jr=new WeakMap,Ya=new WeakMap;function Qa(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Ht(e){return Rt(e)?e:Zo(e,!1,Ha,za,zr)}function Yr(e){return Zo(e,!1,Ka,Za,Zr)}function wo(e){return Zo(e,!0,Wa,Ja,Jr)}function Zo(e,t,s,n,o){if(!be(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const l=o.get(e);if(l)return l;const r=Qa(wa(e));if(r===0)return e;const i=new Proxy(e,r===2?n:s);return o.set(e,i),i}function Tt(e){return Rt(e)?Tt(e.__v_raw):!!(e&&e.__v_isReactive)}function Rt(e){return!!(e&&e.__v_isReadonly)}function Ye(e){return!!(e&&e.__v_isShallow)}function Nn(e){return e?!!e.__v_raw:!1}function pe(e){const t=e&&e.__v_raw;return t?pe(t):e}function Jo(e){return!ve(e,"__v_skip")&&Object.isExtensible(e)&&Ar(e,"__v_skip",!0),e}const rt=e=>be(e)?Ht(e):e,ys=e=>be(e)?wo(e):e;function $e(e){return e?e.__v_isRef===!0:!1}function se(e){return Qr(e,!1)}function Xa(e){return Qr(e,!0)}function Qr(e,t){return $e(e)?e:new ec(e,t)}class ec{constructor(t,s){this.dep=new qo,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:pe(t),this._value=s?t:rt(t),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(t){const s=this._rawValue,n=this.__v_isShallow||Ye(t)||Rt(t);t=n?t:pe(t),vt(t,s)&&(this._rawValue=t,this._value=n?t:rt(t),this.dep.trigger())}}function O(e){return $e(e)?e.value:e}const tc={get:(e,t,s)=>t==="__v_raw"?e:O(Reflect.get(e,t,s)),set:(e,t,s,n)=>{const o=e[t];return $e(o)&&!$e(s)?(o.value=s,!0):Reflect.set(e,t,s,n)}};function Xr(e){return Tt(e)?e:new Proxy(e,tc)}function sc(e){const t=Q(e)?new Array(e.length):{};for(const s in e)t[s]=oc(e,s);return t}class nc{constructor(t,s,n){this._object=t,this._defaultValue=n,this.__v_isRef=!0,this._value=void 0,this._key=Xe(s)?s:String(s),this._raw=pe(t);let o=!0,l=t;if(!Q(t)||Xe(this._key)||!In(this._key))do o=!Nn(l)||Ye(l);while(o&&(l=l.__v_raw));this._shallow=o}get value(){let t=this._object[this._key];return this._shallow&&(t=O(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&$e(this._raw[this._key])){const s=this._object[this._key];if($e(s)){s.value=t;return}}this._object[this._key]=t}get dep(){return Va(this._raw,this._key)}}function oc(e,t,s){return new nc(e,t,s)}class lc{constructor(t,s,n){this.fn=t,this.setter=s,this._value=void 0,this.dep=new qo(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Ks-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&we!==this)return Dr(this,!0),!0}get value(){const t=this.dep.track();return Ur(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function rc(e,t,s=!1){let n,o;return le(e)?n=e:(n=e.get,o=e.set),new lc(n,o,s)}const an={},hn=new WeakMap;let Yt;function ic(e,t=!1,s=Yt){if(s){let n=hn.get(s);n||hn.set(s,n=[]),n.push(e)}}function ac(e,t,s=ke){const{immediate:n,deep:o,once:l,scheduler:r,augmentJob:i,call:c}=s,f=b=>o?b:Ye(b)||o===!1||o===0?Et(b,1):Et(b);let u,d,g,h,C=!1,y=!1;if($e(e)?(d=()=>e.value,C=Ye(e)):Tt(e)?(d=()=>f(e),C=!0):Q(e)?(y=!0,C=e.some(b=>Tt(b)||Ye(b)),d=()=>e.map(b=>{if($e(b))return b.value;if(Tt(b))return f(b);if(le(b))return c?c(b,2):b()})):le(e)?t?d=c?()=>c(e,2):e:d=()=>{if(g){At();try{g()}finally{It()}}const b=Yt;Yt=u;try{return c?c(e,3,[h]):e(h)}finally{Yt=b}}:d=bt,t&&o){const b=d,_=o===!0?1/0:o;d=()=>Et(b(),_)}const L=Nr(),$=()=>{u.stop(),L&&L.active&&Uo(L.effects,u)};if(l&&t){const b=t;t=(..._)=>{const j=b(..._);return $(),j}}let w=y?new Array(e.length).fill(an):an;const p=b=>{if(!(!(u.flags&1)||!u.dirty&&!b))if(t){const _=u.run();if(b||o||C||(y?_.some((j,B)=>vt(j,w[B])):vt(_,w))){g&&g();const j=Yt;Yt=u;try{const B=[_,w===an?void 0:y&&w[0]===an?[]:w,h];w=_,c?c(t,3,B):t(...B)}finally{Yt=j}}}else u.run()};return i&&i(p),u=new Vr(d),u.scheduler=r?()=>r(p,!1):p,h=b=>ic(b,!1,u),g=u.onStop=()=>{const b=hn.get(u);if(b){if(c)c(b,4);else for(const _ of b)_();hn.delete(u)}},t?n?p(!0):w=u.run():r?r(p.bind(null,!0),!0):u.run(),$.pause=u.pause.bind(u),$.resume=u.resume.bind(u),$.stop=$,$}function Et(e,t=1/0,s){if(t<=0||!be(e)||e.__v_skip||(s=s||new Map,(s.get(e)||0)>=t))return e;if(s.set(e,t),t--,$e(e))Et(e.value,t,s);else if(Q(e))for(let n=0;n{Et(n,t,s)});else if($r(e)){for(const n in e)Et(e[n],t,s);for(const n of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,n)&&Et(e[n],t,s)}return e}function sn(e,t,s,n){try{return n?e(...n):e()}catch(o){Vn(o,t,s)}}function nt(e,t,s,n){if(le(e)){const o=sn(e,t,s,n);return o&&Er(o)&&o.catch(l=>{Vn(l,t,s)}),o}if(Q(e)){const o=[];for(let l=0;l>>1,o=Ke[n],l=qs(o);l=qs(s)?Ke.push(e):Ke.splice(uc(t),0,e),e.flags|=1,ti()}}function ti(){mn||(mn=ei.then(ni))}function fc(e){if(!Q(e))Bt&&e.id===-1?Bt.splice(ms+1,0,e):e.flags&1||(xs.push(e),e.flags|=1);else for(let t=0;tqs(s)-qs(n));if(xs.length=0,Bt){for(let s=0;se.id==null?e.flags&2?-1:1/0:e.id;function ni(e){try{for(ht=0;ht{n._d&&_n(-1);const l=gn(t),r=$t.length;let i;try{i=e(...o)}finally{for(let c=$t.length;c>r;c--)nl();gn(l),n._d&&_n(1)}return i};return n._n=!0,n._c=!0,n._d=!0,n}function xe(e,t){if(Ne===null)return e;const s=Kn(Ne),n=e.dirs||(e.dirs=[]);for(let o=0;o1)return s&&le(t)?t.call(n&&n.proxy):t}}function dc(){return!!(Es()||os)}const pc=Symbol.for("v-scx"),hc=()=>Qe(pc);function Ve(e,t,s){return li(e,t,s)}function li(e,t,s=ke){const{immediate:n,deep:o,flush:l,once:r}=s,i=Pe({},s),c=t&&n||!t&&l!=="post";let f;if(Qs){if(l==="sync"){const h=hc();f=h.__watcherHandles||(h.__watcherHandles=[])}else if(!c){const h=()=>{};return h.stop=bt,h.resume=bt,h.pause=bt,h}}const u=Be;i.call=(h,C,y)=>nt(h,u,C,y);let d=!1;l==="post"?i.scheduler=h=>{He(h,u&&u.suspense)}:l!=="sync"&&(d=!0,i.scheduler=(h,C)=>{C?h():Yo(h)}),i.augmentJob=h=>{t&&(h.flags|=4),d&&(h.flags|=2,u&&(h.id=u.uid,h.i=u))};const g=ac(e,t,i);return Qs&&(f?f.push(g):c&&g()),g}function mc(e,t,s){const n=this.proxy,o=Ce(e)?e.includes(".")?ri(n,e):()=>n[e]:e.bind(n,n);let l;le(t)?l=t:(l=t.handler,s=t);const r=nn(this),i=li(o,l.bind(n),s);return r(),i}function ri(e,t){const s=t.split(".");return()=>{let n=e;for(let o=0;oe.__isTeleport,Qt=e=>e&&(e.disabled||e.disabled===""),gc=e=>e&&(e.defer||e.defer===""),Cl=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Sl=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Co=(e,t)=>{const s=e&&e.to;return Ce(s)?t?t(s):null:s},vc={name:"Teleport",__isTeleport:!0,process(e,t,s,n,o,l,r,i,c,f){const{mc:u,pc:d,pbc:g,o:{insert:h,querySelector:C,createText:y,createComment:L,parentNode:$}}=f,w=Qt(t.props);let{dynamicChildren:p}=t;const b=(B,H,M)=>{B.shapeFlag&16&&u(B.children,H,M,o,l,r,i,c)},_=(B=t)=>{const H=Qt(B.props),M=B.target=Co(B.props,C),z=So(M,B,y,h);M&&(r!=="svg"&&Cl(M)?r="svg":r!=="mathml"&&Sl(M)&&(r="mathml"),o&&o.isCE&&(o.ce._teleportTargets||(o.ce._teleportTargets=new Set)).add(M),H||(b(B,M,z),Os(B,!1)))},j=B=>{const H=()=>{if(Vt.get(B)===H){if(Vt.delete(B),Qt(B.props)){const M=$(B.el)||s;b(B,M,B.anchor),Os(B,!0)}_(B)}};Vt.set(B,H),He(H,l)};if(e==null){const B=t.el=y(""),H=t.anchor=y("");if(h(B,s,n),h(H,s,n),gc(t.props)||l&&l.pendingBranch){j(t);return}w&&(b(t,s,H),Os(t,!0)),_()}else{t.el=e.el;const B=t.anchor=e.anchor,H=Vt.get(e);if(H){H.flags|=8,Vt.delete(e),j(t);return}t.targetStart=e.targetStart;const M=t.target=e.target,z=t.targetAnchor=e.targetAnchor,oe=Qt(e.props),F=oe?s:M,Z=oe?B:z;if(r==="svg"||Cl(M)?r="svg":(r==="mathml"||Sl(M))&&(r="mathml"),p?(g(e.dynamicChildren,p,F,o,l,r,i),sl(e,t,!0)):c||d(e,t,F,Z,o,l,r,i,!1),w)oe?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):cn(t,s,B,f,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const R=Co(t.props,C);R&&(t.target=R,cn(t,R,null,f,0))}else oe&&cn(t,M,z,f,1);Os(t,w)}},remove(e,t,s,{um:n,o:{remove:o}},l){const{shapeFlag:r,children:i,anchor:c,targetStart:f,targetAnchor:u,target:d,props:g}=e,h=Qt(g),C=l||!h,y=Vt.get(e);if(y&&(y.flags|=8,Vt.delete(e)),d&&(o(f),o(u)),l&&o(c),!y&&(h||d)&&r&16)for(let L=0;L{e.isMounted=!0}),Fn(()=>{e.isUnmounting=!0}),e}const tt=[Function,Array],ci={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:tt,onEnter:tt,onAfterEnter:tt,onEnterCancelled:tt,onBeforeLeave:tt,onLeave:tt,onAfterLeave:tt,onLeaveCancelled:tt,onBeforeAppear:tt,onAppear:tt,onAfterAppear:tt,onAppearCancelled:tt},ui=e=>{const t=e.subTree;return t.component?ui(t.component):t},xc={name:"BaseTransition",props:ci,setup(e,{slots:t}){const s=Es(),n=ai();return()=>{const o=t.default&&Xo(t.default(),!0),l=o&&o.length?fi(o):s.subTree?fe():void 0;if(!l)return;const r=pe(e),{mode:i}=r;if(n.isLeaving)return oo(l);const c=vn(l);if(!c)return oo(l);let f=zs(c,r,n,s,d=>f=d);c.type!==De&&rs(c,f);let u=s.subTree&&vn(s.subTree);if(u&&u.type!==De&&!Xt(u,c)&&ui(s).type!==De){let d=zs(u,r,n,s);if(rs(u,d),i==="out-in"&&c.type!==De)return n.isLeaving=!0,d.afterLeave=()=>{n.isLeaving=!1,s.job.flags&8||s.update(),delete d.afterLeave,u=void 0},oo(l);i==="in-out"&&c.type!==De?d.delayLeave=(g,h,C)=>{const y=di(n,u);y[String(u.key)]=u,g[st]=()=>{h(),g[st]=void 0,delete f.delayedLeave,u=void 0},f.delayedLeave=()=>{C(),delete f.delayedLeave,u=void 0}}:u=void 0}else u&&(u=void 0);return l}}};function fi(e){let t=e[0];if(e.length>1){for(const s of e)if(s.type!==De){t=s;break}}return t}const _c=xc;function di(e,t){const{leavingVNodes:s}=e;let n=s.get(t.type);return n||(n=Object.create(null),s.set(t.type,n)),n}function zs(e,t,s,n,o){const{appear:l,mode:r,persisted:i=!1,onBeforeEnter:c,onEnter:f,onAfterEnter:u,onEnterCancelled:d,onBeforeLeave:g,onLeave:h,onAfterLeave:C,onLeaveCancelled:y,onBeforeAppear:L,onAppear:$,onAfterAppear:w,onAppearCancelled:p}=t,b=String(e.key),_=di(s,e),j=(M,z)=>{M&&nt(M,n,9,z)},B=(M,z)=>{const oe=z[1];j(M,z),Q(M)?M.every(F=>F.length<=1)&&oe():M.length<=1&&oe()},H={mode:r,persisted:i,beforeEnter(M){let z=c;if(!s.isMounted)if(l)z=L||c;else return;M[st]&&M[st](!0);const oe=_[b];oe&&Xt(e,oe)&&oe.el[st]&&oe.el[st](),j(z,[M])},enter(M){if(_[b]===e)return;let z=f,oe=u,F=d;if(!s.isMounted)if(l)z=$||f,oe=w||u,F=p||d;else return;let Z=!1;M[As]=ee=>{Z||(Z=!0,ee?j(F,[M]):j(oe,[M]),H.delayedLeave&&H.delayedLeave(),M[As]=void 0)};const R=M[As].bind(null,!1);z?B(z,[M,R]):R()},leave(M,z){const oe=String(e.key);if(M[As]&&M[As](!0),s.isUnmounting)return z();j(g,[M]);let F=!1;M[st]=R=>{F||(F=!0,z(),R?j(y,[M]):j(C,[M]),M[st]=void 0,_[oe]===e&&delete _[oe])};const Z=M[st].bind(null,!1);_[oe]=e,h?B(h,[M,Z]):Z()},clone(M){const z=zs(M,t,s,n,o);return o&&o(z),z}};return H}function oo(e){if(Dn(e))return e=Ut(e),e.children=null,e}function vn(e){if(!Dn(e))return jn(e.type)&&e.children?fi(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:s}=e;if(s){if(t&16)return s[0];if(t&32&&le(s.default))return s.default()}}function rs(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const s=e.component.subTree;rs(jn(s.type)&&vn(s)||s,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Xo(e,t=!1,s){let n=[],o=0;for(let l=0;l1)for(let l=0;lFs(y,t&&(Q(t)?t[L]:t),s,n,o));return}if(_s(n)&&!o){n.shapeFlag&512&&n.type.__asyncResolved&&n.component.subTree.component&&Fs(e,t,s,n.component.subTree);return}const l=n.shapeFlag&4?Kn(n.component):n.el,r=o?null:l,{i,r:c}=e,f=t&&t.r,u=i.refs===ke?i.refs={}:i.refs,d=i.setupState,g=pe(d),h=d===ke?Sr:y=>El(u,y)?!1:ve(g,y),C=(y,L)=>!(L&&El(u,L));if(f!=null&&f!==c){if(Tl(t),Ce(f))u[f]=null,h(f)&&(d[f]=null);else if($e(f)){const y=t;C(f,y.k)&&(f.value=null),y.k&&(u[y.k]=null)}}if(le(c))sn(c,i,12,[r,u]);else{const y=Ce(c),L=$e(c);if(y||L){const $=()=>{if(e.f){const w=y?h(c)?d[c]:u[c]:C()||!e.k?c.value:u[e.k];if(o)Q(w)&&Uo(w,l);else if(Q(w))w.includes(l)||w.push(l);else if(y)u[c]=[l],h(c)&&(d[c]=u[c]);else{const p=[l];C(c,e.k)&&(c.value=p),e.k&&(u[e.k]=p)}}else y?(u[c]=r,h(c)&&(d[c]=r)):L&&(C(c,e.k)&&(c.value=r),e.k&&(u[e.k]=r))};if(r){const w=()=>{$(),bn.delete(e)};w.id=-1,bn.set(e,w),He(w,s)}else Tl(e),$()}}}function Tl(e){const t=bn.get(e);t&&(t.flags|=8,bn.delete(e))}On().requestIdleCallback;On().cancelIdleCallback;const _s=e=>!!e.type.__asyncLoader,Dn=e=>e.type.__isKeepAlive;function kc(e,t){mi(e,"a",t)}function wc(e,t){mi(e,"da",t)}function mi(e,t,s=Be){const n=e.__wdc||(e.__wdc=()=>{let o=s;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(Bn(t,n,s),s){let o=s.parent;for(;o&&o.parent;)Dn(o.parent.vnode)&&Cc(n,t,s,o),o=o.parent}}function Cc(e,t,s,n){const o=Bn(t,e,n,!0);Ss(()=>{Uo(n[t],o)},s)}function Bn(e,t,s=Be,n=!1){if(s){const o=s[e]||(s[e]=[]),l=t.__weh||(t.__weh=(...r)=>{At();const i=nn(s),c=nt(t,s,e,r);return i(),It(),c});return n?o.unshift(l):o.push(l),l}}const Pt=e=>(t,s=Be)=>{(!Qs||e==="sp")&&Bn(e,(...n)=>t(...n),s)},Sc=Pt("bm"),_t=Pt("m"),Ec=Pt("bu"),gi=Pt("u"),Fn=Pt("bum"),Ss=Pt("um"),Tc=Pt("sp"),$c=Pt("rtg"),Ac=Pt("rtc");function Ic(e,t=Be){Bn("ec",e,t)}const vi="components";function Un(e,t){return xi(vi,e,!0,t)||e}const bi=Symbol.for("v-ndc");function Rc(e){return Ce(e)?xi(vi,e,!1)||e:e||bi}function xi(e,t,s=!0,n=!1){const o=Ne||Be;if(o){const l=o.type;{const i=pu(l,!1);if(i&&(i===t||i===Ge(t)||i===Pn(Ge(t))))return l}const r=$l(o[e]||l[e],t)||$l(o.appContext[e],t);return!r&&n?l:r}}function $l(e,t){return e&&(e[t]||e[Ge(t)]||e[Pn(Ge(t))])}function Te(e,t,s,n){let o;const l=s,r=Q(e);if(r||Ce(e)){const i=r&&Tt(e);let c=!1,f=!1;i&&(c=!Ye(e),f=Rt(e),e=Ln(e)),o=new Array(e.length);for(let u=0,d=e.length;ut(i,c,void 0,l));else{const i=Object.keys(e);o=new Array(i.length);for(let c=0,f=i.length;c0;return t!=="default"&&(f.name=t),k(),Re(ie,null,[ue("slot",f,n)],u?-2:64)}let r=e[t];r&&r._c&&(r._d=!1);const i=$t.length;k();let c;try{const f=r&&_i(r(s)),u=s.key||l||f&&f.key;c=Re(ie,{key:(u&&!Xe(u)?u:`_${t}`)+(!f&&n?"_fb":"")},f||(n?n():[]),f&&e._===1?64:-2)}catch(f){for(let u=$t.length;u>i;u--)nl();throw f}finally{r&&r._c&&(r._d=!0)}return c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),c}function _i(e){return e.some(t=>Js(t)?!(t.type===De||t.type===ie&&!_i(t.children)):!0)?e:null}const Eo=e=>e?Bi(e)?Kn(e):Eo(e.parent):null,Us=Pe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Eo(e.parent),$root:e=>Eo(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ki(e),$forceUpdate:e=>e.f||(e.f=()=>{Yo(e.update)}),$nextTick:e=>e.n||(e.n=xt.bind(e.proxy)),$watch:e=>mc.bind(e)}),ro=(e,t)=>e!==ke&&!e.__isScriptSetup&&ve(e,t),Pc={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:n,data:o,props:l,accessCache:r,type:i,appContext:c}=e;if(t[0]!=="$"){const g=r[t];if(g!==void 0)switch(g){case 1:return n[t];case 2:return o[t];case 4:return s[t];case 3:return l[t]}else{if(ro(n,t))return r[t]=1,n[t];if(o!==ke&&ve(o,t))return r[t]=2,o[t];if(ve(l,t))return r[t]=3,l[t];if(s!==ke&&ve(s,t))return r[t]=4,s[t];To&&(r[t]=0)}}const f=Us[t];let u,d;if(f)return t==="$attrs"&&je(e.attrs,"get",""),f(e);if((u=i.__cssModules)&&(u=u[t]))return u;if(s!==ke&&ve(s,t))return r[t]=4,s[t];if(d=c.config.globalProperties,ve(d,t))return d[t]},set({_:e},t,s){const{data:n,setupState:o,ctx:l}=e;return ro(o,t)?(o[t]=s,!0):n!==ke&&ve(n,t)?(n[t]=s,!0):ve(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(l[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:n,appContext:o,props:l,type:r}},i){let c;return!!(s[i]||e!==ke&&i[0]!=="$"&&ve(e,i)||ro(t,i)||ve(l,i)||ve(n,i)||ve(Us,i)||ve(o.config.globalProperties,i)||(c=r.__cssModules)&&c[i])},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:ve(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function Al(e){return Q(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let To=!0;function Oc(e){const t=ki(e),s=e.proxy,n=e.ctx;To=!1,t.beforeCreate&&Il(t.beforeCreate,e,"bc");const{data:o,computed:l,methods:r,watch:i,provide:c,inject:f,created:u,beforeMount:d,mounted:g,beforeUpdate:h,updated:C,activated:y,deactivated:L,beforeDestroy:$,beforeUnmount:w,destroyed:p,unmounted:b,render:_,renderTracked:j,renderTriggered:B,errorCaptured:H,serverPrefetch:M,expose:z,inheritAttrs:oe,components:F,directives:Z,filters:R}=t;if(f&&Mc(f,n,null),r)for(const te in r){const re=r[te];le(re)&&(n[te]=re.bind(s))}if(o){const te=o.call(s,s);be(te)&&(e.data=Ht(te))}if(To=!0,l)for(const te in l){const re=l[te],Fe=le(re)?re.bind(s,s):le(re.get)?re.get.bind(s,s):bt,qe=!le(re)&&le(re.set)?re.set.bind(s):bt,at=me({get:Fe,set:qe});Object.defineProperty(n,te,{enumerable:!0,configurable:!0,get:()=>at.value,set:ze=>at.value=ze})}if(i)for(const te in i)yi(i[te],n,s,te);if(c){const te=le(c)?c.call(s):c;Reflect.ownKeys(te).forEach(re=>{Bs(re,te[re])})}u&&Il(u,e,"c");function ce(te,re){Q(re)?re.forEach(Fe=>te(Fe.bind(s))):re&&te(re.bind(s))}if(ce(Sc,d),ce(_t,g),ce(Ec,h),ce(gi,C),ce(kc,y),ce(wc,L),ce(Ic,H),ce(Ac,j),ce($c,B),ce(Fn,w),ce(Ss,b),ce(Tc,M),Q(z))if(z.length){const te=e.exposed||(e.exposed={});z.forEach(re=>{Object.defineProperty(te,re,{get:()=>s[re],set:Fe=>s[re]=Fe,enumerable:!0})})}else e.exposed||(e.exposed={});_&&e.render===bt&&(e.render=_),oe!=null&&(e.inheritAttrs=oe),F&&(e.components=F),Z&&(e.directives=Z),M&&hi(e)}function Mc(e,t,s=bt){Q(e)&&(e=$o(e));for(const n in e){const o=e[n];let l;be(o)?"default"in o?l=Qe(o.from||n,o.default,!0):l=Qe(o.from||n):l=Qe(o),$e(l)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>l.value,set:r=>l.value=r}):t[n]=l}}function Il(e,t,s){nt(Q(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,s)}function yi(e,t,s,n){let o=n.includes(".")?ri(s,n):()=>s[n];if(Ce(e)){const l=t[e];le(l)&&Ve(o,l)}else if(le(e))Ve(o,e.bind(s));else if(be(e))if(Q(e))e.forEach(l=>yi(l,t,s,n));else{const l=le(e.handler)?e.handler.bind(s):t[e.handler];le(l)&&Ve(o,l,e)}}function ki(e){const t=e.type,{mixins:s,extends:n}=t,{mixins:o,optionsCache:l,config:{optionMergeStrategies:r}}=e.appContext,i=l.get(t);let c;return i?c=i:!o.length&&!s&&!n?c=t:(c={},o.length&&o.forEach(f=>xn(c,f,r,!0)),xn(c,t,r)),be(t)&&l.set(t,c),c}function xn(e,t,s,n=!1){const{mixins:o,extends:l}=t;l&&xn(e,l,s,!0),o&&o.forEach(r=>xn(e,r,s,!0));for(const r in t)if(!(n&&r==="expose")){const i=Lc[r]||s&&s[r];e[r]=i?i(e[r],t[r]):t[r]}return e}const Lc={data:Rl,props:Pl,emits:Pl,methods:Ms,computed:Ms,beforeCreate:Ue,created:Ue,beforeMount:Ue,mounted:Ue,beforeUpdate:Ue,updated:Ue,beforeDestroy:Ue,beforeUnmount:Ue,destroyed:Ue,unmounted:Ue,activated:Ue,deactivated:Ue,errorCaptured:Ue,serverPrefetch:Ue,components:Ms,directives:Ms,watch:Vc,provide:Rl,inject:Nc};function Rl(e,t){return t?e?function(){return Pe(le(e)?e.call(this,this):e,le(t)?t.call(this,this):t)}:t:e}function Nc(e,t){return Ms($o(e),$o(t))}function $o(e){if(Q(e)){const t={};for(let s=0;st==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ge(t)}Modifiers`]||e[`${is(t)}Modifiers`];function Fc(e,t,...s){if(e.isUnmounted)return;const n=e.vnode.props||ke;let o=s;const l=t.startsWith("update:"),r=l&&Bc(n,t.slice(7));r&&(r.trim&&(o=s.map(u=>Ce(u)?u.trim():u)),r.number&&(o=s.map(Ho)));let i,c=n[i=Xn(t)]||n[i=Xn(Ge(t))];!c&&l&&(c=n[i=Xn(is(t))]),c&&nt(c,e,6,o);const f=n[i+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[i])return;e.emitted[i]=!0,nt(f,e,6,o)}}const Uc=new WeakMap;function Ci(e,t,s=!1){const n=s?Uc:t.emitsCache,o=n.get(e);if(o!==void 0)return o;const l=e.emits;let r={},i=!1;if(!le(e)){const c=f=>{const u=Ci(f,t,!0);u&&(i=!0,Pe(r,u))};!s&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!l&&!i?(be(e)&&n.set(e,null),null):(Q(l)?l.forEach(c=>r[c]=null):Pe(r,l),be(e)&&n.set(e,r),r)}function Hn(e,t){return!e||!Tn(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),ve(e,t[0].toLowerCase()+t.slice(1))||ve(e,is(t))||ve(e,t))}function Ol(e){const{type:t,vnode:s,proxy:n,withProxy:o,propsOptions:[l],slots:r,attrs:i,emit:c,render:f,renderCache:u,props:d,data:g,setupState:h,ctx:C,inheritAttrs:y}=e,L=gn(e);let $,w;try{if(s.shapeFlag&4){const b=o||n,_=b;$=gt(f.call(_,b,u,d,h,g,C)),w=i}else{const b=t;$=gt(b.length>1?b(d,{attrs:i,slots:r,emit:c}):b(d,null)),w=t.props?i:Hc(i)}}catch(b){$t.length=0,Vn(b,e,1),$=ue(De)}let p=$;if(w&&y!==!1){const b=Object.keys(w),{shapeFlag:_}=p;b.length&&_&7&&(l&&b.some($n)&&(w=Wc(w,l)),p=Ut(p,w,!1,!0))}if(s.dirs&&(p=Ut(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(s.dirs):s.dirs),s.transition){const b=jn(p.type)&&vn(p)||p;rs(b,s.transition)}return $=p,gn(L),$}const Hc=e=>{let t;for(const s in e)(s==="class"||s==="style"||Tn(s))&&((t||(t={}))[s]=e[s]);return t},Wc=(e,t)=>{const s={};for(const n in e)(!$n(n)||!(n.slice(9)in t))&&(s[n]=e[n]);return s};function Kc(e,t,s){const{props:n,children:o,component:l}=e,{props:r,children:i,patchFlag:c}=t,f=l.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&c>=0){if(c&1024)return!0;if(c&16)return n?Ml(n,r,f):!!r;if(c&8){const u=t.dynamicProps;for(let d=0;dObject.create(Ei),$i=e=>Object.getPrototypeOf(e)===Ei;function qc(e,t,s,n=!1){const o={},l=Ti();e.propsDefaults=Object.create(null),Ai(e,t,o,l);for(const r in e.propsOptions[0])r in o||(o[r]=void 0);s?e.props=n?o:Yr(o):e.type.props?e.props=o:e.props=l,e.attrs=l}function zc(e,t,s,n){const{props:o,attrs:l,vnode:{patchFlag:r}}=e,i=pe(o),[c]=e.propsOptions;let f=!1;if((n||r>0)&&!(r&16)){if(r&8){const u=e.vnode.dynamicProps;for(let d=0;d{c=!0;const[g,h]=Ii(d,t,!0);Pe(r,g),h&&i.push(...h)};!s&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!l&&!c)return be(e)&&n.set(e,vs),vs;if(Q(l))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",tl=e=>Q(e)?e.map(gt):[gt(e)],Jc=(e,t,s)=>{if(t._n)return t;const n=Ee((...o)=>tl(t(...o)),s);return n._c=!1,n},Ri=(e,t,s)=>{const n=e._ctx;for(const o in e){if(el(o))continue;const l=e[o];if(le(l))t[o]=Jc(o,l,n);else if(l!=null){const r=tl(l);t[o]=()=>r}}},Pi=(e,t)=>{const s=tl(t);e.slots.default=()=>s},Oi=(e,t,s)=>{for(const n in t)(s||!el(n))&&(e[n]=t[n])},Yc=(e,t,s)=>{const n=e.slots=Ti();if(e.vnode.shapeFlag&32){const o=t._;o?(Oi(n,t,s),s&&Ar(n,"_",o,!0)):Ri(t,n)}else t&&Pi(e,t)},Qc=(e,t,s)=>{const{vnode:n,slots:o}=e;let l=!0,r=ke;if(n.shapeFlag&32){const i=t._;i?s&&i===1?l=!1:Oi(o,t,s):(l=!t.$stable,Ri(t,o)),r=t}else t&&(Pi(e,t),r={default:1});if(l)for(const i in o)!el(i)&&r[i]==null&&delete o[i]},He=nu;function Xc(e){return eu(e)}function eu(e,t){const s=On();s.__VUE__=!0;const{insert:n,remove:o,patchProp:l,createElement:r,createText:i,createComment:c,setText:f,setElementText:u,parentNode:d,nextSibling:g,setScopeId:h=bt,insertStaticContent:C}=e,y=(m,v,x,T=null,I=null,E=null,U=void 0,D=null,V=!!v.dynamicChildren)=>{if(m===v)return;m&&!Xt(m,v)&&(T=A(m),ze(m,I,E,!0),m=null),v.patchFlag===-2&&(V=!1,v.dynamicChildren=null);const{type:P,ref:X,shapeFlag:K}=v;switch(P){case Wn:L(m,v,x,T);break;case De:$(m,v,x,T);break;case ao:m==null&&w(v,x,T,U);break;case ie:F(m,v,x,T,I,E,U,D,V);break;default:K&1?_(m,v,x,T,I,E,U,D,V):K&6?Z(m,v,x,T,I,E,U,D,V):(K&64||K&128)&&P.process(m,v,x,T,I,E,U,D,V,J)}X!=null&&I?Fs(X,m&&m.ref,E,v||m,!v):X==null&&m&&m.ref!=null&&Fs(m.ref,null,E,m,!0)},L=(m,v,x,T)=>{if(m==null)n(v.el=i(v.children),x,T);else{const I=v.el=m.el;v.children!==m.children&&f(I,v.children)}},$=(m,v,x,T)=>{m==null?n(v.el=c(v.children||""),x,T):v.el=m.el},w=(m,v,x,T)=>{[m.el,m.anchor]=C(m.children,v,x,T,m.el,m.anchor)},p=({el:m,anchor:v},x,T)=>{let I;for(;m&&m!==v;)I=g(m),n(m,x,T),m=I;n(v,x,T)},b=({el:m,anchor:v})=>{let x;for(;m&&m!==v;)x=g(m),o(m),m=x;o(v)},_=(m,v,x,T,I,E,U,D,V)=>{if(v.type==="svg"?U="svg":v.type==="math"&&(U="mathml"),m==null)j(v,x,T,I,E,U,D,V);else{const P=m.el&&m.el._isVueCE?m.el:null;try{P&&P._beginPatch(),M(m,v,I,E,U,D,V)}finally{P&&P._endPatch()}}},j=(m,v,x,T,I,E,U,D)=>{let V,P;const{props:X,shapeFlag:K,transition:Y,dirs:ne}=m;if(V=m.el=r(m.type,E,X&&X.is,X),K&8?u(V,m.children):K&16&&H(m.children,V,null,T,I,io(m,E),U,D),ne&&Kt(m,null,T,"created"),B(V,m,m.scopeId,U,T),X){for(const ye in X)ye!=="value"&&!Vs(ye)&&l(V,ye,null,X[ye],E,T);"value"in X&&l(V,"value",null,X.value,E),(P=X.onVnodeBeforeMount)&&dt(P,T,m)}ne&&Kt(m,null,T,"beforeMount");const he=tu(I,Y);he&&Y.beforeEnter(V),n(V,v,x),((P=X&&X.onVnodeMounted)||he||ne)&&He(()=>{P&&dt(P,T,m),he&&Y.enter(V),ne&&Kt(m,null,T,"mounted")},I)},B=(m,v,x,T,I)=>{if(x&&h(m,x),T)for(let E=0;E{for(let P=V;P{const D=v.el=m.el;let{patchFlag:V,dynamicChildren:P,dirs:X}=v;V|=m.patchFlag&16;const K=m.props||ke,Y=v.props||ke;let ne;if(x&&Gt(x,!1),(ne=Y.onVnodeBeforeUpdate)&&dt(ne,x,v,m),X&&Kt(v,m,x,"beforeUpdate"),x&&Gt(x,!0),P&&(!m.dynamicChildren||m.dynamicChildren.length!==P.length)&&(V=0,U=!1,P=null),(K.innerHTML&&Y.innerHTML==null||K.textContent&&Y.textContent==null)&&u(D,""),P?z(m.dynamicChildren,P,D,x,T,io(v,I),E):U||re(m,v,D,null,x,T,io(v,I),E,!1),V>0){if(V&16)oe(D,K,Y,x,I);else if(V&2&&K.class!==Y.class&&l(D,"class",null,Y.class,I),V&4&&l(D,"style",K.style,Y.style,I),V&8){const he=v.dynamicProps;for(let ye=0;ye{ne&&dt(ne,x,v,m),X&&Kt(v,m,x,"updated")},T)},z=(m,v,x,T,I,E,U)=>{for(let D=0;D{if(v!==x){if(v!==ke)for(const E in v)!Vs(E)&&!(E in x)&&l(m,E,v[E],null,I,T);for(const E in x){if(Vs(E))continue;const U=x[E],D=v[E];U!==D&&E!=="value"&&l(m,E,D,U,I,T)}"value"in x&&l(m,"value",v.value,x.value,I)}},F=(m,v,x,T,I,E,U,D,V)=>{const P=v.el=m?m.el:i(""),X=v.anchor=m?m.anchor:i("");let{patchFlag:K,dynamicChildren:Y,slotScopeIds:ne}=v;ne&&(D=D?D.concat(ne):ne),m==null?(n(P,x,T),n(X,x,T),H(v.children||[],x,X,I,E,U,D,V)):K>0&&K&64&&Y&&m.dynamicChildren&&m.dynamicChildren.length===Y.length?(z(m.dynamicChildren,Y,x,I,E,U,D),(v.key!=null||I&&v===I.subTree)&&sl(m,v,!0)):re(m,v,x,X,I,E,U,D,V)},Z=(m,v,x,T,I,E,U,D,V)=>{v.slotScopeIds=D,m==null?v.shapeFlag&512?I.ctx.activate(v,x,T,U,V):R(v,x,T,I,E,U,V):ee(m,v,V)},R=(m,v,x,T,I,E,U)=>{const D=m.component=au(m,T,I);if(Dn(m)&&(D.ctx.renderer=J),cu(D,!1,U),D.asyncDep){if(I&&I.registerDep(D,ce,U),!m.el){const V=D.subTree=ue(De);$(null,V,v,x),m.placeholder=V.el}}else ce(D,m,v,x,I,E,U)},ee=(m,v,x)=>{const T=v.component=m.component;if(Kc(m,v,x))if(T.asyncDep&&!T.asyncResolved){te(T,v,x);return}else T.next=v,T.update();else v.el=m.el,T.vnode=v},ce=(m,v,x,T,I,E,U)=>{const D=()=>{if(m.isMounted){let{next:K,bu:Y,u:ne,parent:he,vnode:ye}=m;{const ut=Mi(m);if(ut){K&&(K.el=ye.el,te(m,K,U)),ut.asyncDep.then(()=>{He(()=>{m.isUnmounted||P()},I)});return}}let _e=K,Ae;Gt(m,!1),K?(K.el=ye.el,te(m,K,U)):K=ye,Y&&fn(Y),(Ae=K.props&&K.props.onVnodeBeforeUpdate)&&dt(Ae,he,K,ye),Gt(m,!0);const Le=Ol(m),ct=m.subTree;m.subTree=Le,y(ct,Le,d(ct.el),A(ct),m,I,E),K.el=Le.el,_e===null&&Gc(m,Le.el),ne&&He(ne,I),(Ae=K.props&&K.props.onVnodeUpdated)&&He(()=>dt(Ae,he,K,ye),I)}else{let K;const{el:Y,props:ne}=v,{bm:he,m:ye,parent:_e,root:Ae,type:Le}=m,ct=_s(v);Gt(m,!1),he&&fn(he),!ct&&(K=ne&&ne.onVnodeBeforeMount)&&dt(K,_e,v),Gt(m,!0);{Ae.ce&&Ae.ce._hasShadowRoot()&&Ae.ce._injectChildStyle(Le,m.parent?m.parent.type:void 0);const ut=m.subTree=Ol(m);y(null,ut,x,T,m,I,E),v.el=ut.el}if(ye&&He(ye,I),!ct&&(K=ne&&ne.onVnodeMounted)){const ut=v;He(()=>dt(K,_e,ut),I)}(v.shapeFlag&256||_e&&_s(_e.vnode)&&_e.vnode.shapeFlag&256)&&m.a&&He(m.a,I),m.isMounted=!0,v=x=T=null}};m.scope.on();const V=m.effect=new Vr(D);m.scope.off();const P=m.update=V.run.bind(V),X=m.job=V.runIfDirty.bind(V);X.i=m,X.id=m.uid,V.scheduler=()=>Yo(X),Gt(m,!0),P()},te=(m,v,x)=>{v.component=m;const T=m.vnode.props;m.vnode=v,m.next=null,zc(m,v.props,T,x),Qc(m,v.children,x),At(),wl(m),It()},re=(m,v,x,T,I,E,U,D,V=!1)=>{const P=m&&m.children,X=m?m.shapeFlag:0,K=v.children,{patchFlag:Y,shapeFlag:ne}=v;if(Y>0){if(Y&128){qe(P,K,x,T,I,E,U,D,V);return}else if(Y&256){Fe(P,K,x,T,I,E,U,D,V);return}}ne&8?(X&16&&et(P,I,E),K!==P&&u(x,K)):X&16?ne&16?qe(P,K,x,T,I,E,U,D,V):et(P,I,E,!0):(X&8&&u(x,""),ne&16&&H(K,x,T,I,E,U,D,V))},Fe=(m,v,x,T,I,E,U,D,V)=>{m=m||vs,v=v||vs;const P=m.length,X=v.length,K=Math.min(P,X);let Y;for(Y=0;YX?et(m,I,E,!0,!1,K):H(v,x,T,I,E,U,D,V,K)},qe=(m,v,x,T,I,E,U,D,V)=>{let P=0;const X=v.length;let K=m.length-1,Y=X-1;for(;P<=K&&P<=Y;){const ne=m[P],he=v[P]=V?Ct(v[P]):gt(v[P]);if(Xt(ne,he))y(ne,he,x,null,I,E,U,D,V);else break;P++}for(;P<=K&&P<=Y;){const ne=m[K],he=v[Y]=V?Ct(v[Y]):gt(v[Y]);if(Xt(ne,he))y(ne,he,x,null,I,E,U,D,V);else break;K--,Y--}if(P>K){if(P<=Y){const ne=Y+1,he=neY)for(;P<=K;)ze(m[P],I,E,!0),P++;else{const ne=P,he=P,ye=new Map;for(P=he;P<=Y;P++){const Ze=v[P]=V?Ct(v[P]):gt(v[P]);Ze.key!=null&&ye.set(Ze.key,P)}let _e,Ae=0;const Le=Y-he+1;let ct=!1,ut=0;const Ts=new Array(Le);for(P=0;P=Le){ze(Ze,I,E,!0);continue}let ft;if(Ze.key!=null)ft=ye.get(Ze.key);else for(_e=he;_e<=Y;_e++)if(Ts[_e-he]===0&&Xt(Ze,v[_e])){ft=_e;break}ft===void 0?ze(Ze,I,E,!0):(Ts[ft-he]=P+1,ft>=ut?ut=ft:ct=!0,y(Ze,v[ft],x,null,I,E,U,D,V),Ae++)}const gl=ct?su(Ts):vs;for(_e=gl.length-1,P=Le-1;P>=0;P--){const Ze=he+P,ft=v[Ze],vl=v[Ze+1],bl=Ze+1{const{el:E,type:U,transition:D,children:V,shapeFlag:P}=m;if(P&6){at(m.component.subTree,v,x,T);return}if(P&128){m.suspense.move(v,x,T);return}if(P&64){U.move(m,v,x,J);return}if(U===ie){n(E,v,x);for(let K=0;KD.enter(E),I));else{const{leave:K,delayLeave:Y,afterLeave:ne}=D,he=()=>{m.ctx.isUnmounted?o(E):n(E,v,x)},ye=()=>{const _e=E._isLeaving||!!E[st];E._isLeaving&&E[st](!0),D.persisted&&!_e?he():K(E,()=>{he(),ne&&ne()})};Y?Y(E,he,ye):ye()}else n(E,v,x)},ze=(m,v,x,T=!1,I=!1)=>{const{type:E,props:U,ref:D,children:V,dynamicChildren:P,shapeFlag:X,patchFlag:K,dirs:Y,cacheIndex:ne,memo:he}=m;if(K===-2&&(I=!1),D!=null&&(At(),Fs(D,null,x,m,!0),It()),ne!=null&&(v.renderCache[ne]=void 0),X&256){v.ctx.deactivate(m);return}const ye=X&1&&Y,_e=!_s(m);let Ae;if(_e&&(Ae=U&&U.onVnodeBeforeUnmount)&&dt(Ae,v,m),X&6)Wt(m.component,x,T);else{if(X&128){m.suspense.unmount(x,T);return}ye&&Kt(m,null,v,"beforeUnmount"),X&64?m.type.remove(m,v,x,J,T):P&&!P.hasOnce&&(E!==ie||K>0&&K&64)?et(P,v,x,!1,!0):(E===ie&&K&384||!I&&X&16)&&et(V,v,x),T&&cs(m)}const Le=he!=null&&ne==null;(_e&&(Ae=U&&U.onVnodeUnmounted)||ye||Le)&&He(()=>{Ae&&dt(Ae,v,m),ye&&Kt(m,null,v,"unmounted"),Le&&(m.el=null)},x)},cs=m=>{const{type:v,el:x,anchor:T,transition:I}=m;if(v===ie){us(x,T);return}if(v===ao){b(m);return}const E=()=>{o(x),I&&!I.persisted&&I.afterLeave&&I.afterLeave()};if(m.shapeFlag&1&&I&&!I.persisted){const{leave:U,delayLeave:D}=I,V=()=>U(x,E);D?D(m.el,E,V):V()}else E()},us=(m,v)=>{let x;for(;m!==v;)x=g(m),o(m),m=x;o(v)},Wt=(m,v,x)=>{const{bum:T,scope:I,job:E,subTree:U,um:D,m:V,a:P}=m;Nl(V),Nl(P),T&&fn(T),I.stop(),E&&(E.flags|=8,ze(U,m,v,x)),D&&He(D,v),He(()=>{m.isUnmounted=!0},v)},et=(m,v,x,T=!1,I=!1,E=0)=>{for(let U=E;U{if(m.shapeFlag&6)return A(m.component.subTree);if(m.shapeFlag&128)return m.suspense.next();const v=g(m.anchor||m.el),x=v&&v[ii];return x?g(x):v};let q=!1;const W=(m,v,x)=>{let T;m==null?v._vnode&&(ze(v._vnode,null,null,!0),T=v._vnode.component):y(v._vnode||null,m,v,null,null,null,x),v._vnode=m,q||(q=!0,wl(T),si(),q=!1)},J={p:y,um:ze,m:at,r:cs,mt:R,mc:H,pc:re,pbc:z,n:A,o:e};return{render:W,hydrate:void 0,createApp:Dc(W)}}function io({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:s}function Gt({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function tu(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function sl(e,t,s=!1){const n=e.children,o=t.children;if(Q(n)&&Q(o))for(let l=0;l>1,e[s[i]]0&&(t[n]=s[l-1]),s[l]=n)}}for(l=s.length,r=s[l-1];l-- >0;)s[l]=r,r=t[r];return s}function Mi(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Mi(t)}function Nl(e){if(e)for(let t=0;te.__isSuspense;function nu(e,t){t&&t.pendingBranch?Q(e)?t.effects.push(...e):t.effects.push(e):fc(e)}const ie=Symbol.for("v-fgt"),Wn=Symbol.for("v-txt"),De=Symbol.for("v-cmt"),ao=Symbol.for("v-stc"),$t=[];let Je=null;function k(e=!1){$t.push(Je=e?null:[])}function nl(){$t.pop(),Je=$t[$t.length-1]||null}let Zs=1;function _n(e,t=!1){Zs+=e,e<0&&Je&&t&&(Je.hasOnce=!0)}function Vi(e){return e.dynamicChildren=Zs>0?Je||vs:null,nl(),Zs>0&&Je&&Je.push(e),e}function S(e,t,s,n,o,l){return Vi(a(e,t,s,n,o,l,!0))}function Re(e,t,s,n,o){return Vi(ue(e,t,s,n,o,!0))}function Js(e){return e?e.__v_isVNode===!0:!1}function Xt(e,t){return e.type===t.type&&e.key===t.key}const ji=({key:e})=>e??null,dn=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?Ce(e)||$e(e)||le(e)?{i:Ne,r:e,k:t,f:!!s}:e:null);function a(e,t=null,s=null,n=0,o=null,l=e===ie?0:1,r=!1,i=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ji(t),ref:t&&dn(t),scopeId:oi,slotScopeIds:null,children:s,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:l,patchFlag:n,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Ne};return i?(yn(c,s),l&128&&e.normalize(c)):s&&(c.shapeFlag|=Ce(s)?8:16),Zs>0&&!r&&Je&&(c.patchFlag>0||l&6)&&c.patchFlag!==32&&Je.push(c),c}const ue=ou;function ou(e,t=null,s=null,n=0,o=null,l=!1){if((!e||e===bi)&&(e=De),Js(e)){const i=Ut(e,t,!0);return s&&yn(i,s),Zs>0&&!l&&Je&&(i.shapeFlag&6?Je[Je.indexOf(e)]=i:Je.push(i)),i.patchFlag=-2,i}if(hu(e)&&(e=e.__vccOpts),t){t=lu(t);let{class:i,style:c}=t;i&&!Ce(i)&&(t.class=G(i)),be(c)&&(Nn(c)&&!Q(c)&&(c=Pe({},c)),t.style=Mn(c))}const r=Ce(e)?1:Ni(e)?128:jn(e)?64:be(e)?4:le(e)?2:0;return a(e,t,s,n,o,r,l,!0)}function lu(e){return e?Nn(e)||$i(e)?Pe({},e):e:null}function Ut(e,t,s=!1,n=!1){const{props:o,ref:l,patchFlag:r,children:i,transition:c}=e,f=t?Di(o||{},t):o,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&ji(f),ref:t&&t.ref?s&&l?Q(l)?l.concat(dn(t)):[l,dn(t)]:dn(t):l,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ie?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Ut(e.ssContent),ssFallback:e.ssFallback&&Ut(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&n&&rs(u,c.clone(u)),u}function ae(e=" ",t=0){return ue(Wn,null,e,t)}function fe(e="",t=!1){return t?(k(),Re(De,null,e)):ue(De,null,e)}function gt(e){return e==null||typeof e=="boolean"?ue(De):Q(e)?ue(ie,null,e.slice()):Js(e)?Ct(e):ue(Wn,null,String(e))}function Ct(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Ut(e)}function yn(e,t){let s=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(Q(t))s=16;else if(typeof t=="object")if(n&65){const o=t.default;o&&(o._c&&(o._d=!1),yn(e,o()),o._c&&(o._d=!0));return}else{s=32;const o=t._;!o&&!$i(t)?t._ctx=Ne:o===3&&Ne&&(Ne.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(le(t)){if(n&65){yn(e,{default:t});return}t={default:t,_ctx:Ne},s=32}else t=String(t),n&64?(s=16,t=[ae(t)]):s=8;e.children=t,e.shapeFlag|=s}function Di(...e){const t={};for(let s=0;sBe||Ne;let kn,Ys;{const e=On(),t=(s,n)=>{let o;return(o=e[s])||(o=e[s]=[]),o.push(n),l=>{o.length>1?o.forEach(r=>r(l)):o[0](l)}};kn=t("__VUE_INSTANCE_SETTERS__",s=>Be=s),Ys=t("__VUE_SSR_SETTERS__",s=>Qs=s)}const nn=e=>{const t=Be;return kn(e),e.scope.on(),()=>{e.scope.off(),kn(t)}},Vl=()=>{Be&&Be.scope.off(),kn(null)};function Bi(e){return e.vnode.shapeFlag&4}let Qs=!1;function cu(e,t=!1,s=!1){t&&Ys(t);const{props:n,children:o}=e.vnode,l=Bi(e);qc(e,n,l,t),Yc(e,o,s||t);const r=l?uu(e,t):void 0;return t&&Ys(!1),r}function uu(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Pc);const{setup:n}=s;if(n){At();const o=e.setupContext=n.length>1?du(e):null,l=nn(e),r=sn(n,e,0,[e.props,o]),i=Er(r);if(It(),l(),(i||e.sp)&&!_s(e)&&hi(e),i){if(r.then(Vl,Vl),t)return r.then(c=>{Ys(!0);try{jl(e,c,t)}finally{Ys(!1)}}).catch(c=>{Vn(c,e,0)});e.asyncDep=r}else jl(e,r)}else Fi(e)}function jl(e,t,s){le(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:be(t)&&(e.setupState=Xr(t)),Fi(e)}function Fi(e,t,s){const n=e.type;e.render||(e.render=n.render||bt);{const o=nn(e);At();try{Oc(e)}finally{It(),o()}}}const fu={get(e,t){return je(e,"get",""),e[t]}};function du(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,fu),slots:e.slots,emit:e.emit,expose:t}}function Kn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Xr(Jo(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in Us)return Us[s](e)},has(t,s){return s in t||s in Us}})):e.proxy}function pu(e,t=!0){return le(e)?e.displayName||e.name:e.name||t&&e.__name}function hu(e){return le(e)&&"__vccOpts"in e}const me=(e,t)=>rc(e,t,Qs);function ol(e,t,s){try{_n(-1);const n=arguments.length;return n===2?be(t)&&!Q(t)?Js(t)?ue(e,null,[t]):ue(e,t):ue(e,null,t):(n>3?s=Array.prototype.slice.call(arguments,2):n===3&&Js(s)&&(s=[s]),ue(e,t,s))}finally{_n(1)}}const mu="3.5.41";let Io;const Dl=typeof window<"u"&&window.trustedTypes;if(Dl)try{Io=Dl.createPolicy("vue",{createHTML:e=>e})}catch{}const Ui=Io?e=>Io.createHTML(e):e=>e,gu="http://www.w3.org/2000/svg",vu="http://www.w3.org/1998/Math/MathML",wt=typeof document<"u"?document:null,Bl=wt&&wt.createElement("template"),bu={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,n)=>{const o=t==="svg"?wt.createElementNS(gu,e):t==="mathml"?wt.createElementNS(vu,e):s?wt.createElement(e,{is:s}):wt.createElement(e);return e==="select"&&n&&n.multiple!=null&&o.setAttribute("multiple",n.multiple),o},createText:e=>wt.createTextNode(e),createComment:e=>wt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>wt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,n,o,l){const r=s?s.previousSibling:t.lastChild;if(o&&(o===l||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),s),!(o===l||!(o=o.nextSibling)););else{Bl.innerHTML=Ui(n==="svg"?`${e}`:n==="mathml"?`${e}`:e);const i=Bl.content;if(n==="svg"||n==="mathml"){const c=i.firstChild;for(;c.firstChild;)i.appendChild(c.firstChild);i.removeChild(c)}t.insertBefore(i,s)}return[r?r.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},Mt="transition",Is="animation",ks=Symbol("_vtc"),Hi={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Wi=Pe({},ci,Hi),xu=e=>(e.displayName="Transition",e.props=Wi,e),wn=xu((e,{slots:t})=>ol(_c,Ki(e),t)),qt=(e,t=[])=>{Q(e)?e.forEach(s=>s(...t)):e&&e(...t)},Fl=e=>e?Q(e)?e.some(t=>t.length>1):e.length>1:!1;function Ki(e){const t={};for(const F in e)F in Hi||(t[F]=e[F]);if(e.css===!1)return t;const{name:s="v",type:n,duration:o,enterFromClass:l=`${s}-enter-from`,enterActiveClass:r=`${s}-enter-active`,enterToClass:i=`${s}-enter-to`,appearFromClass:c=l,appearActiveClass:f=r,appearToClass:u=i,leaveFromClass:d=`${s}-leave-from`,leaveActiveClass:g=`${s}-leave-active`,leaveToClass:h=`${s}-leave-to`}=e,C=_u(o),y=C&&C[0],L=C&&C[1],{onBeforeEnter:$,onEnter:w,onEnterCancelled:p,onLeave:b,onLeaveCancelled:_,onBeforeAppear:j=$,onAppear:B=w,onAppearCancelled:H=p}=t,M=(F,Z,R,ee)=>{F._enterCancelled=ee,jt(F,Z?u:i),jt(F,Z?f:r),R&&R()},z=(F,Z)=>{F._isLeaving=!1,jt(F,d),jt(F,h),jt(F,g),Z&&Z()},oe=F=>(Z,R)=>{const ee=F?B:w,ce=()=>M(Z,F,R);qt(ee,[Z,ce]),Ul(()=>{jt(Z,F?c:l),pt(Z,F?u:i),Fl(ee)||Hl(Z,n,y,ce)})};return Pe(t,{onBeforeEnter(F){qt($,[F]),pt(F,l),pt(F,r)},onBeforeAppear(F){qt(j,[F]),pt(F,c),pt(F,f)},onEnter:oe(!1),onAppear:oe(!0),onLeave(F,Z){F._isLeaving=!0;const R=()=>z(F,Z);pt(F,d),F._enterCancelled?(pt(F,g),Ro(F)):(Ro(F),pt(F,g)),Ul(()=>{F._isLeaving&&(jt(F,d),pt(F,h),Fl(b)||Hl(F,n,L,R))}),qt(b,[F,R])},onEnterCancelled(F){M(F,!1,void 0,!0),qt(p,[F])},onAppearCancelled(F){M(F,!0,void 0,!0),qt(H,[F])},onLeaveCancelled(F){z(F),qt(_,[F])}})}function _u(e){if(e==null)return null;if(be(e))return[co(e.enter),co(e.leave)];{const t=co(e);return[t,t]}}function co(e){return Ea(e)}function pt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.add(s)),(e[ks]||(e[ks]=new Set)).add(t)}function jt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.remove(n));const s=e[ks];s&&(s.delete(t),s.size||(e[ks]=void 0))}function Ul(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let yu=0;function Hl(e,t,s,n){const o=e._endId=++yu,l=()=>{o===e._endId&&n()};if(s!=null)return setTimeout(l,s);const{type:r,timeout:i,propCount:c}=Gi(e,t);if(!r)return n();const f=r+"end";let u=0;const d=()=>{e.removeEventListener(f,g),l()},g=h=>{h.target===e&&++u>=c&&d()};setTimeout(()=>{u(s[C]||"").split(", "),o=n(`${Mt}Delay`),l=n(`${Mt}Duration`),r=Wl(o,l),i=n(`${Is}Delay`),c=n(`${Is}Duration`),f=Wl(i,c);let u=null,d=0,g=0;t===Mt?r>0&&(u=Mt,d=r,g=l.length):t===Is?f>0&&(u=Is,d=f,g=c.length):(d=Math.max(r,f),u=d>0?r>f?Mt:Is:null,g=u?u===Mt?l.length:c.length:0);const h=u===Mt&&/\b(?:transform|all)(?:,|$)/.test(n(`${Mt}Property`).toString());return{type:u,timeout:d,propCount:g,hasTransform:h}}function Wl(e,t){for(;e.lengthKl(s)+Kl(e[n])))}function Kl(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Ro(e){return(e?e.ownerDocument:document).body.offsetHeight}function ku(e,t,s){const n=e[ks];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const Cn=Symbol("_vod"),ll=Symbol("_vsh"),Gl={name:"show",beforeMount(e,{value:t},{transition:s}){e[Cn]=e.style.display==="none"?"":e.style.display,s&&t?s.beforeEnter(e):Rs(e,t)},mounted(e,{value:t},{transition:s}){s&&t&&s.enter(e)},updated(e,{value:t,oldValue:s},{transition:n}){!t!=!s&&(n?t?(n.beforeEnter(e),Rs(e,!0),n.enter(e)):n.leave(e,()=>{Rs(e,!1)}):Rs(e,t))},beforeUnmount(e,{value:t}){Rs(e,t)}};function Rs(e,t){e.style.display=t?e[Cn]:"none",e[ll]=!t}const wu=Symbol(""),Cu=/(?:^|;)\s*display\s*:/;function Su(e,t,s){const n=e.style,o=Ce(s);let l=!1;if(s&&!o){if(t)if(Ce(t))for(const r of t.split(";")){const i=r.slice(0,r.indexOf(":")).trim();s[i]==null&&Ls(n,i,"")}else for(const r in t)s[r]==null&&Ls(n,r,"");for(const r in s){r==="display"&&(l=!0);const i=s[r];i!=null?Tu(e,r,!Ce(t)&&t?t[r]:void 0,i)||Ls(n,r,i):Ls(n,r,"")}}else if(o){if(t!==s){const r=n[wu];r&&(s+=";"+r),n.cssText=s,l=Cu.test(s)}}else t&&e.removeAttribute("style");Cn in e&&(e[Cn]=l?n.display:"",e[ll]&&(n.display="none"))}const ql=/\s*!important$/;function Ls(e,t,s){if(Q(s))s.forEach(n=>Ls(e,t,n));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const n=Eu(e,t);ql.test(s)?e.setProperty(is(n),s.replace(ql,""),"important"):e[n]=s}}const zl=["Webkit","Moz","ms"],uo={};function Eu(e,t){const s=uo[t];if(s)return s;let n=Ge(t);if(n!=="filter"&&n in e)return uo[t]=n;n=Pn(n);for(let o=0;ofo||(Ou.then(()=>fo=0),fo=Date.now());function Lu(e,t){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;const o=s.value;if(Q(o)){const l=n.stopImmediatePropagation;n.stopImmediatePropagation=()=>{l.call(n),n._stopped=!0};const r=o.slice(),i=[n];for(let c=0;ce.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Nu=(e,t,s,n,o,l)=>{const r=o==="svg";t==="class"?ku(e,n,r):t==="style"?Su(e,s,n):Tn(t)?$n(t)||Au(e,t,s,n,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Vu(e,t,n,r))?(Yl(e,t,n),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Jl(e,t,n,r,l,t!=="value")):e._isVueCE&&(ju(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!Ce(n)))?Yl(e,Ge(t),n,l,t):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),Jl(e,t,n,r))};function Vu(e,t,s,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&Xl(t)&&le(s));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return Xl(t)&&Ce(s)?!1:t in e}function ju(e,t){const s=e._def.props;if(!s)return!1;const n=Ge(t);return Array.isArray(s)?s.some(o=>Ge(o)===n):Object.keys(s).some(o=>Ge(o)===n)}const qi=new WeakMap,zi=new WeakMap,Sn=Symbol("_moveCb"),er=Symbol("_enterCb"),Du=e=>(delete e.props.mode,e),Bu=Du({name:"TransitionGroup",props:Pe({},Wi,{tag:String,moveClass:String}),setup(e,{slots:t}){const s=Es(),n=ai();let o,l;return gi(()=>{if(!o.length)return;const r=e.moveClass||`${e.name||"v"}-move`;if(!Wu(o[0].el,s.vnode.el,r)){o=[];return}o.forEach(Fu),o.forEach(Uu);const i=o.filter(Hu);Ro(s.vnode.el),i.forEach(c=>{const f=c.el,u=f.style;pt(f,r),u.transform=u.webkitTransform=u.transitionDuration="";const d=f[Sn]=g=>{g&&g.target!==f||(!g||g.propertyName.endsWith("transform"))&&(f.removeEventListener("transitionend",d),f[Sn]=null,jt(f,r))};f.addEventListener("transitionend",d)}),o=[]}),()=>{const r=pe(e),i=Ki(r);let c=r.tag||ie;if(o=[],l)for(let f=0;f{i.split(/\s+/).forEach(c=>c&&n.classList.remove(c))}),s.split(/\s+/).forEach(i=>i&&n.classList.add(i)),n.style.display="none";const l=t.nodeType===1?t:t.parentNode;l.appendChild(n);const{hasTransform:r}=Gi(n);return l.removeChild(n),r}const En=e=>{const t=e.props["onUpdate:modelValue"]||!1;return Q(t)?s=>fn(t,s):t};function Ku(e){e.target.composing=!0}function tr(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const ts=Symbol("_assign"),un=Symbol("_initialValue");function po(e,t,s){return t&&(e=e.trim()),s&&(e=Ho(e)),e}const Ie={created(e,{modifiers:{lazy:t,trim:s,number:n}},o){e.parentNode&&(e.type==="text"?e[un]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[un]=e.defaultValue.replace(/\r\n?/g,` -`))),e[ts]=En(o);const l=n||o.props&&o.props.type==="number";es(e,t?"change":"input",r=>{r.target.composing||e[ts](po(e.value,s,l))}),(s||l)&&es(e,"change",()=>{e.value=po(e.value,s,l)}),t||(es(e,"compositionstart",Ku),es(e,"compositionend",tr),es(e,"change",tr))},mounted(e,{value:t,modifiers:{trim:s,number:n}}){const o=t??"",l=e[un];delete e[un],l!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==l?e[ts](po(e.value,s,n)):e.value=o},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:n,trim:o,number:l}},r){if(e[ts]=En(r),e.composing)return;const i=(l||e.type==="number")&&!/^0\d/.test(e.value)?Ho(e.value):e.value,c=t??"";if(i===c)return;const f=e.getRootNode();(f instanceof Document||f instanceof ShadowRoot)&&f.activeElement===e&&e.type!=="range"&&(n&&t===s||o&&e.value.trim()===c)||(e.value=c)}},zt={deep:!0,created(e,t,s){e[ts]=En(s),es(e,"change",()=>{const n=e._modelValue,o=Gu(e),l=e.checked,r=e[ts];if(Q(n)){const i=Rr(n,o),c=i!==-1;if(l&&!c)r(n.concat(o));else if(!l&&c){const f=[...n];f.splice(i,1),r(f)}}else if(An(n)){const i=new Set(n);l?i.add(o):i.delete(o),r(i)}else r(Ji(e,l))})},mounted:sr,beforeUpdate(e,t,s){e[ts]=En(s),sr(e,t,s)}};function sr(e,{value:t,oldValue:s},n){e._modelValue=t;let o;if(Q(t))o=Rr(t,n.props.value)>-1;else if(An(t))o=t.has(n.props.value);else{if(t===s)return;o=tn(t,Ji(e,!0))}e.checked!==o&&(e.checked=o)}function Gu(e){return"_value"in e?e._value:e.value}function Ji(e,t){const s=t?"_trueValue":"_falseValue";return s in e?e[s]:t}const qu=["ctrl","shift","alt","meta"],zu={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>qu.some(s=>e[`${s}Key`]&&!t.includes(s))},ls=(e,t)=>{if(!e)return e;const s=e._withMods||(e._withMods={}),n=t.join(".");return s[n]||(s[n]=((o,...l)=>{for(let r=0;r{const t=Ju().createApp(...e),{mount:s}=t;return t.mount=n=>{const o=Xu(n);if(!o)return;const l=t._component;!le(l)&&!l.render&&!l.template&&(l.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const r=s(o,!1,Qu(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),r},t});function Qu(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Xu(e){return Ce(e)?document.querySelector(e):e}let Yi;const Gn=e=>Yi=e,Qi=Symbol();function Po(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var Hs;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(Hs||(Hs={}));function ef(){const e=Lr(!0),t=e.run(()=>se({}));let s=[],n=[];const o=Jo({install(l){Gn(o),o._a=l,l.provide(Qi,o),l.config.globalProperties.$pinia=o,n.forEach(r=>s.push(r)),n=[]},use(l){return this._a?s.push(l):n.push(l),this},_p:s,_a:null,_e:e,_s:new Map,state:t});return o}const Xi=()=>{};function or(e,t,s,n=Xi){e.add(t);const o=()=>{e.delete(t)&&n()};return!s&&Nr()&&Ma(o),o}function ds(e,...t){e.forEach(s=>{s(...t)})}const tf=e=>e(),lr=Symbol(),ho=Symbol();function Oo(e,t){e instanceof Map&&t instanceof Map?t.forEach((s,n)=>e.set(n,s)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const s in t){if(!t.hasOwnProperty(s))continue;const n=t[s],o=e[s];Po(o)&&Po(n)&&e.hasOwnProperty(s)&&!$e(n)&&!Tt(n)?e[s]=Oo(o,n):e[s]=n}return e}const sf=Symbol();function nf(e){return!Po(e)||!Object.prototype.hasOwnProperty.call(e,sf)}const{assign:Dt}=Object;function of(e){return!!($e(e)&&e.effect)}function lf(e,t,s,n){const{state:o,actions:l,getters:r}=t,i=s.state.value[e];let c;function f(){i||(s.state.value[e]=o?o():{});const u=sc(s.state.value[e]);return Dt(u,l,Object.keys(r||{}).reduce((d,g)=>(d[g]=Jo(me(()=>{Gn(s);const h=s._s.get(e);return r[g].call(h,h)})),d),{}))}return c=ea(e,f,t,s,n,!0),c}function ea(e,t,s={},n,o,l){let r;const i=Dt({actions:{}},s),c={deep:!0};let f,u,d=new Set,g=new Set,h;const C=n.state.value[e];!l&&!C&&(n.state.value[e]={});let y;function L(H){let M;f=u=!1,typeof H=="function"?(H(n.state.value[e]),M={type:Hs.patchFunction,storeId:e,events:h}):(Oo(n.state.value[e],H),M={type:Hs.patchObject,payload:H,storeId:e,events:h});const z=y=Symbol();xt().then(()=>{y===z&&(f=!0)}),u=!0,ds(d,M,n.state.value[e])}const $=l?function(){const{state:M}=s,z=M?M():{};this.$patch(oe=>{Dt(oe,z)})}:Xi;function w(){r.stop(),d.clear(),g.clear(),n._s.delete(e)}const p=(H,M="")=>{if(lr in H)return H[ho]=M,H;const z=function(){Gn(n);const oe=Array.from(arguments),F=new Set,Z=new Set;function R(te){F.add(te)}function ee(te){Z.add(te)}ds(g,{args:oe,name:z[ho],store:_,after:R,onError:ee});let ce;try{ce=H.apply(this&&this.$id===e?this:_,oe)}catch(te){throw ds(Z,te),te}return ce instanceof Promise?ce.then(te=>(ds(F,te),te)).catch(te=>(ds(Z,te),Promise.reject(te))):(ds(F,ce),ce)};return z[lr]=!0,z[ho]=M,z},b={_p:n,$id:e,$onAction:or.bind(null,g),$patch:L,$reset:$,$subscribe(H,M={}){const z=or(d,H,M.detached,()=>oe()),oe=r.run(()=>Ve(()=>n.state.value[e],F=>{(M.flush==="sync"?u:f)&&H({storeId:e,type:Hs.direct,events:h},F)},Dt({},c,M)));return z},$dispose:w},_=Ht(b);n._s.set(e,_);const B=(n._a&&n._a.runWithContext||tf)(()=>n._e.run(()=>(r=Lr()).run(()=>t({action:p}))));for(const H in B){const M=B[H];if($e(M)&&!of(M)||Tt(M))l||(C&&nf(M)&&($e(M)?M.value=C[H]:Oo(M,C[H])),n.state.value[e][H]=M);else if(typeof M=="function"){const z=p(M,H);B[H]=z,i.actions[H]=M}}return Dt(_,B),Dt(pe(_),B),Object.defineProperty(_,"$state",{get:()=>n.state.value[e],set:H=>{L(M=>{Dt(M,H)})}}),n._p.forEach(H=>{Dt(_,r.run(()=>H({store:_,app:n._a,pinia:n,options:i})))}),C&&l&&s.hydrate&&s.hydrate(_.$state,C),f=!0,u=!0,_}function il(e,t,s){let n;const o=typeof t=="function";n=o?s:t;function l(r,i){const c=dc();return r=r||(c?Qe(Qi,null):null),r&&Gn(r),r=Yi,r._s.has(e)||(o?ea(e,t,n,r):lf(e,n,r)),r._s.get(e)}return l.$id=e,l}const gs=typeof document<"u";function ta(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function rf(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&ta(e.default)}const ge=Object.assign;function mo(e,t){const s={};for(const n in t){const o=t[n];s[n]=it(o)?o.map(e):e(o)}return s}const Ws=()=>{},it=Array.isArray;function rr(e,t){const s={};for(const n in e)s[n]=n in t?t[n]:e[n];return s}const sa=/#/g,af=/&/g,cf=/\//g,uf=/=/g,ff=/\?/g,na=/\+/g,df=/%5B/g,pf=/%5D/g,oa=/%5E/g,hf=/%60/g,la=/%7B/g,mf=/%7C/g,ra=/%7D/g,gf=/%20/g;function al(e){return e==null?"":encodeURI(""+e).replace(mf,"|").replace(df,"[").replace(pf,"]")}function vf(e){return al(e).replace(la,"{").replace(ra,"}").replace(oa,"^")}function Mo(e){return al(e).replace(na,"%2B").replace(gf,"+").replace(sa,"%23").replace(af,"%26").replace(hf,"`").replace(la,"{").replace(ra,"}").replace(oa,"^")}function bf(e){return Mo(e).replace(uf,"%3D")}function xf(e){return al(e).replace(sa,"%23").replace(ff,"%3F")}function _f(e){return xf(e).replace(cf,"%2F")}function Xs(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const yf=/\/$/,kf=e=>e.replace(yf,"");function go(e,t,s="/"){let n,o={},l="",r="";const i=t.indexOf("#");let c=t.indexOf("?");return c=i>=0&&c>i?-1:c,c>=0&&(n=t.slice(0,c),l=t.slice(c,i>0?i:t.length),o=e(l.slice(1))),i>=0&&(n=n||t.slice(0,i),r=t.slice(i,t.length)),n=Ef(n??t,s),{fullPath:n+l+r,path:n,query:o,hash:Xs(r)}}function wf(e,t){const s=t.query?e(t.query):"";return t.path+(s&&"?")+s+(t.hash||"")}function ir(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Cf(e,t,s){const n=t.matched.length-1,o=s.matched.length-1;return n>-1&&n===o&&ws(t.matched[n],s.matched[o])&&ia(t.params,s.params)&&e(t.query)===e(s.query)&&t.hash===s.hash}function ws(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function ia(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var s in e)if(!Sf(e[s],t[s]))return!1;return!0}function Sf(e,t){return it(e)?ar(e,t):it(t)?ar(t,e):e?.valueOf()===t?.valueOf()}function ar(e,t){return it(t)?e.length===t.length&&e.every((s,n)=>s===t[n]):e.length===1&&e[0]===t}function Ef(e,t){if(e.startsWith("/"))return e;if(!e)return t;const s=t.split("/"),n=e.split("/"),o=n[n.length-1];(o===".."||o===".")&&n.push("");let l=s.length-1,r,i;for(r=0;r1&&l--;else break;return s.slice(0,l).join("/")+"/"+n.slice(r).join("/")}const Lt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let Lo=(function(e){return e.pop="pop",e.push="push",e})({}),vo=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function Tf(e){if(!e)if(gs){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),kf(e)}const $f=/^[^#]+#/;function Af(e,t){return e.replace($f,"#")+t}function If(e,t){const s=document.documentElement.getBoundingClientRect(),n=e.getBoundingClientRect();return{behavior:t.behavior,left:n.left-s.left-(t.left||0),top:n.top-s.top-(t.top||0)}}const qn=()=>({left:window.scrollX,top:window.scrollY});function Rf(e){let t;if("el"in e){const s=e.el,n=typeof s=="string"&&s.startsWith("#"),o=typeof s=="string"?n?document.getElementById(s.slice(1)):document.querySelector(s):s;if(!o)return;t=If(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function cr(e,t){return(history.state?history.state.position-t:-1)+e}const No=new Map;function Pf(e,t){No.set(e,t)}function Of(e){const t=No.get(e);return No.delete(e),t}function Mf(e){return typeof e=="string"||e&&typeof e=="object"}function aa(e){return typeof e=="string"||typeof e=="symbol"}let Se=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const ca=Symbol("");Se.MATCHER_NOT_FOUND+"",Se.NAVIGATION_GUARD_REDIRECT+"",Se.NAVIGATION_ABORTED+"",Se.NAVIGATION_CANCELLED+"",Se.NAVIGATION_DUPLICATED+"";function Cs(e,t){return ge(new Error,{type:e,[ca]:!0},t)}function kt(e,t){return e instanceof Error&&ca in e&&(t==null||!!(e.type&t))}const Lf=["params","query","hash"];function Nf(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const s of Lf)s in e&&(t[s]=e[s]);return JSON.stringify(t,null,2)}function Vf(e){const t={};if(e===""||e==="?")return t;const s=(e[0]==="?"?e.slice(1):e).split("&");for(let n=0;no&&Mo(o)):[n&&Mo(n)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+s,o!=null&&(t+="="+o))})}return t}function jf(e){const t={};for(const s in e){const n=e[s];n!==void 0&&(t[s]=it(n)?n.map(o=>o==null?null:""+o):n==null?n:""+n)}return t}const Df=Symbol(""),fr=Symbol(""),zn=Symbol(""),cl=Symbol(""),Vo=Symbol("");function Ps(){let e=[];function t(n){return e.push(n),()=>{const o=e.indexOf(n);o>-1&&e.splice(o,1)}}function s(){e=[]}return{add:t,list:()=>e.slice(),reset:s}}function Ft(e,t,s,n,o,l=r=>r()){const r=n&&(n.enterCallbacks[o]=n.enterCallbacks[o]||[]);return()=>new Promise((i,c)=>{const f=g=>{g===!1?c(Cs(Se.NAVIGATION_ABORTED,{from:s,to:t})):g instanceof Error?c(g):Mf(g)?c(Cs(Se.NAVIGATION_GUARD_REDIRECT,{from:t,to:g})):(r&&n.enterCallbacks[o]===r&&typeof g=="function"&&r.push(g),i())},u=l(()=>e.call(n&&n.instances[o],t,s,f));let d=Promise.resolve(u);e.length<3&&(d=d.then(f)),d.catch(g=>c(g))})}function bo(e,t,s,n,o=l=>l()){const l=[];for(const r of e)for(const i in r.components){let c=r.components[i];if(!(t!=="beforeRouteEnter"&&!r.instances[i]))if(ta(c)){const f=(c.__vccOpts||c)[t];f&&l.push(Ft(f,s,n,r,i,o))}else{let f=c();l.push(()=>f.then(u=>{if(!u)throw new Error(`Couldn't resolve component "${i}" at "${r.path}"`);const d=rf(u)?u.default:u;r.mods[i]=u,r.components[i]=d;const g=(d.__vccOpts||d)[t];return g&&Ft(g,s,n,r,i,o)()}))}}return l}function Bf(e,t){const s=[],n=[],o=[],l=Math.max(t.matched.length,e.matched.length);for(let r=0;rws(f,i))?n.push(i):s.push(i));const c=e.matched[r];c&&(t.matched.find(f=>ws(f,c))||o.push(c))}return[s,n,o]}let Ff=()=>location.protocol+"//"+location.host;function ua(e,t){const{pathname:s,search:n,hash:o}=t,l=e.indexOf("#");if(l>-1){let r=o.includes(e.slice(l))?e.slice(l).length:1,i=o.slice(r);return i[0]!=="/"&&(i="/"+i),ir(i,"")}return ir(s,e)+n+o}function Uf(e,t,s,n){let o=[],l=[],r=null;const i=({state:g})=>{const h=ua(e,location),C=s.value,y=t.value;let L=0;if(g){if(s.value=h,t.value=g,r&&r===C){r=null;return}L=y?g.position-y.position:0}else n(h);o.forEach($=>{$(s.value,C,{delta:L,type:Lo.pop,direction:L?L>0?vo.forward:vo.back:vo.unknown})})};function c(){r=s.value}function f(g){o.push(g);const h=()=>{const C=o.indexOf(g);C>-1&&o.splice(C,1)};return l.push(h),h}function u(){if(document.visibilityState==="hidden"){const{history:g}=window;if(!g.state)return;g.replaceState(ge({},g.state,{scroll:qn()}),"")}}function d(){for(const g of l)g();l=[],window.removeEventListener("popstate",i),window.removeEventListener("pagehide",u),document.removeEventListener("visibilitychange",u)}return window.addEventListener("popstate",i),window.addEventListener("pagehide",u),document.addEventListener("visibilitychange",u),{pauseListeners:c,listen:f,destroy:d}}function dr(e,t,s,n=!1,o=!1){return{back:e,current:t,forward:s,replaced:n,position:window.history.length,scroll:o?qn():null}}function Hf(e){const{history:t,location:s}=window,n={value:ua(e,s)},o={value:t.state};o.value||l(n.value,{back:null,current:n.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function l(c,f,u){const d=e.indexOf("#"),g=d>-1?(s.host&&document.querySelector("base")?e:e.slice(d))+c:Ff()+e+c;try{t[u?"replaceState":"pushState"](f,"",g),o.value=f}catch(h){console.error(h),s[u?"replace":"assign"](g)}}function r(c,f){l(c,ge({},t.state,dr(o.value.back,c,o.value.forward,!0),f,{position:o.value.position}),!0),n.value=c}function i(c,f){const u=ge({},o.value,t.state,{forward:c,scroll:qn()});l(u.current,u,!0),l(c,ge({},dr(n.value,c,null),{position:u.position+1},f),!1),n.value=c}return{location:n,state:o,push:i,replace:r}}function Wf(e){e=Tf(e);const t=Hf(e),s=Uf(e,t.state,t.location,t.replace);function n(l,r=!0){r||s.pauseListeners(),history.go(l)}const o=ge({location:"",base:e,go:n,createHref:Af.bind(null,e)},t,s);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function Kf(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),Wf(e)}let ss=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var Oe=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(Oe||{});const Gf={type:ss.Static,value:""},qf=/[a-zA-Z0-9_]/;function zf(e){if(!e)return[[]];if(e==="/")return[[Gf]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(h){throw new Error(`ERR (${s})/"${f}": ${h}`)}let s=Oe.Static,n=s;const o=[];let l;function r(){l&&o.push(l),l=[]}let i=0,c,f="",u="";function d(){f&&(s===Oe.Static?l.push({type:ss.Static,value:f}):s===Oe.Param||s===Oe.ParamRegExp||s===Oe.ParamRegExpEnd?(l.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${f}) must be alone in its segment. eg: '/:ids+.`),l.push({type:ss.Param,value:f,regexp:u,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),f="")}function g(){f+=c}for(;it.length?t.length===1&&t[0]===We.Static+We.Segment?1:-1:0}function fa(e,t){let s=0;const n=e.score,o=t.score;for(;s0&&t[t.length-1]<0}const Xf={strict:!1,end:!0,sensitive:!1};function ed(e,t,s){const n=Yf(zf(e.path),s),o=ge(n,{record:e,parent:t,children:[],alias:[]});return t&&!o.record.aliasOf==!t.record.aliasOf&&t.children.push(o),o}function td(e,t){const s=[],n=new Map;t=rr(Xf,t);function o(d){return n.get(d)}function l(d,g,h){const C=!h,y=gr(d);y.aliasOf=h&&h.record;const L=rr(t,d),$=[y];if("alias"in d){const b=typeof d.alias=="string"?[d.alias]:d.alias;for(const _ of b)$.push(gr(ge({},y,{components:h?h.record.components:y.components,path:_,aliasOf:h?h.record:y})))}let w,p;for(const b of $){const{path:_}=b;if(g&&_[0]!=="/"){const j=g.record.path,B=j[j.length-1]==="/"?"":"/";b.path=g.record.path+(_&&B+_)}if(w=ed(b,g,L),h?h.alias.push(w):(p=p||w,p!==w&&p.alias.push(w),C&&d.name&&!vr(w)&&r(d.name)),da(w)&&c(w),y.children){const j=y.children;for(let B=0;B{r(p)}:Ws}function r(d){if(aa(d)){const g=n.get(d);g&&(n.delete(d),s.splice(s.indexOf(g),1),g.children.forEach(r),g.alias.forEach(r))}else{const g=s.indexOf(d);g>-1&&(s.splice(g,1),d.record.name&&n.delete(d.record.name),d.children.forEach(r),d.alias.forEach(r))}}function i(){return s}function c(d){const g=od(d,s);s.splice(g,0,d),d.record.name&&!vr(d)&&n.set(d.record.name,d)}function f(d,g){let h,C={},y,L;if("name"in d&&d.name){if(h=n.get(d.name),!h)throw Cs(Se.MATCHER_NOT_FOUND,{location:d});L=h.record.name,C=ge(mr(g.params,h.keys.filter(p=>!p.optional).concat(h.parent?h.parent.keys.filter(p=>p.optional):[]).map(p=>p.name)),d.params&&mr(d.params,h.keys.map(p=>p.name))),y=h.stringify(C)}else if(d.path!=null)y=d.path,h=s.find(p=>p.re.test(y)),h&&(C=h.parse(y),L=h.record.name);else{if(h=g.name?n.get(g.name):s.find(p=>p.re.test(g.path)),!h)throw Cs(Se.MATCHER_NOT_FOUND,{location:d,currentLocation:g});L=h.record.name,C=ge({},g.params,d.params),y=h.stringify(C)}const $=[];let w=h;for(;w;)$.unshift(w.record),w=w.parent;return{name:L,path:y,params:C,matched:$,meta:nd($)}}e.forEach(d=>l(d));function u(){s.length=0,n.clear()}return{addRoute:l,resolve:f,removeRoute:r,clearRoutes:u,getRoutes:i,getRecordMatcher:o}}function mr(e,t){const s={};for(const n of t)n in e&&(s[n]=e[n]);return s}function gr(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:sd(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function sd(e){const t={},s=e.props||!1;if("component"in e)t.default=s;else for(const n in e.components)t[n]=typeof s=="object"?s[n]:s;return t}function vr(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function nd(e){return e.reduce((t,s)=>ge(t,s.meta),{})}function od(e,t){let s=0,n=t.length;for(;s!==n;){const l=s+n>>1;fa(e,t[l])<0?n=l:s=l+1}const o=ld(e);return o&&(n=t.lastIndexOf(o,n-1)),n}function ld(e){let t=e;for(;t=t.parent;)if(da(t)&&fa(e,t)===0)return t}function da({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function br(e){const t=Qe(zn),s=Qe(cl),n=me(()=>{const c=O(e.to);return t.resolve(c)}),o=me(()=>{const{matched:c}=n.value,{length:f}=c,u=c[f-1],d=s.matched;if(!u||!d.length)return-1;const g=d.findIndex(ws.bind(null,u));if(g>-1)return g;const h=xr(c[f-2]);return f>1&&xr(u)===h&&d[d.length-1].path!==h?d.findIndex(ws.bind(null,c[f-2])):g}),l=me(()=>o.value>-1&&ud(s.params,n.value.params)),r=me(()=>o.value>-1&&o.value===s.matched.length-1&&ia(s.params,n.value.params));function i(c={}){if(cd(c)){const f=t[O(e.replace)?"replace":"push"](O(e.to)).catch(Ws);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>f),f}return Promise.resolve()}return{route:n,href:me(()=>n.value.href),isActive:l,isExactActive:r,navigate:i}}function rd(e){return e.length===1?e[0]:e}const id=pi({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:br,setup(e,{slots:t}){const s=Ht(br(e)),{options:n}=Qe(zn),o=me(()=>({[_r(e.activeClass,n.linkActiveClass,"router-link-active")]:s.isActive,[_r(e.exactActiveClass,n.linkExactActiveClass,"router-link-exact-active")]:s.isExactActive}));return()=>{const l=t.default&&rd(t.default(s));return e.custom?l:ol("a",{"aria-current":s.isExactActive?e.ariaCurrentValue:null,href:s.href,onClick:s.navigate,class:o.value},l)}}}),ad=id;function cd(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function ud(e,t){for(const s in t){const n=t[s],o=e[s];if(typeof n=="string"){if(n!==o)return!1}else if(!it(o)||o.length!==n.length||n.some((l,r)=>l.valueOf()!==o[r].valueOf()))return!1}return!0}function xr(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const _r=(e,t,s)=>e??t??s,fd=pi({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:s}){const n=Qe(Vo),o=me(()=>e.route||n.value),l=Qe(fr,0),r=me(()=>{let f=O(l);const{matched:u}=o.value;let d;for(;(d=u[f])&&!d.components;)f++;return f}),i=me(()=>o.value.matched[r.value]);Bs(fr,me(()=>r.value+1)),Bs(Df,i),Bs(Vo,o);const c=se();return Ve(()=>[c.value,i.value,e.name],([f,u,d],[g,h,C])=>{u&&(u.instances[d]=f,h&&h!==u&&f&&f===g&&(u.leaveGuards.size||(u.leaveGuards=h.leaveGuards),u.updateGuards.size||(u.updateGuards=h.updateGuards))),f&&u&&(!h||!ws(u,h)||!g)&&(u.enterCallbacks[d]||[]).forEach(y=>y(f))},{flush:"post"}),()=>{const f=o.value,u=e.name,d=i.value,g=d&&d.components[u];if(!g)return yr(s.default,{Component:g,route:f});const h=d.props[u],C=h?h===!0?f.params:typeof h=="function"?h(f):h:null,L=ol(g,ge({},C,t,{onVnodeUnmounted:$=>{$.component.isUnmounted&&(d.instances[u]=null)},ref:c}));return yr(s.default,{Component:L,route:f})||L}}});function yr(e,t){if(!e)return null;const s=e(t);return s.length===1?s[0]:s}const dd=fd;function pd(e){const t=td(e.routes,e),s=e.parseQuery||Vf,n=e.stringifyQuery||ur,o=e.history,l=Ps(),r=Ps(),i=Ps(),c=Xa(Lt);let f=Lt;gs&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=mo.bind(null,A=>""+A),d=mo.bind(null,_f),g=mo.bind(null,Xs);function h(A,q){let W,J;return aa(A)?(W=t.getRecordMatcher(A),J=q):J=A,t.addRoute(J,W)}function C(A){const q=t.getRecordMatcher(A);q&&t.removeRoute(q)}function y(){return t.getRoutes().map(A=>A.record)}function L(A){return!!t.getRecordMatcher(A)}function $(A,q){if(q=ge({},q||c.value),typeof A=="string"){const x=go(s,A,q.path),T=t.resolve({path:x.path},q),I=o.createHref(x.fullPath);return ge(x,T,{params:g(T.params),hash:Xs(x.hash),redirectedFrom:void 0,href:I})}let W;if(A.path!=null)W=ge({},A,{path:go(s,A.path,q.path).path});else{const x=ge({},A.params);for(const T in x)x[T]==null&&delete x[T];W=ge({},A,{params:d(x)}),q.params=d(q.params)}const J=t.resolve(W,q),de=A.hash||"";J.params=u(g(J.params));const m=wf(n,ge({},A,{hash:vf(de),path:J.path})),v=o.createHref(m);return ge({fullPath:m,hash:de,query:n===ur?jf(A.query):A.query||{}},J,{redirectedFrom:void 0,href:v})}function w(A){return typeof A=="string"?go(s,A,c.value.path):ge({},A)}function p(A,q){if(f!==A)return Cs(Se.NAVIGATION_CANCELLED,{from:q,to:A})}function b(A){return B(A)}function _(A){return b(ge(w(A),{replace:!0}))}function j(A,q){const W=A.matched[A.matched.length-1];if(W&&W.redirect){const{redirect:J}=W;let de=typeof J=="function"?J(A,q):J;return typeof de=="string"&&(de=de.includes("?")||de.includes("#")?de=w(de):{path:de},de.params={}),ge({query:A.query,hash:A.hash,params:de.path!=null?{}:A.params},de)}}function B(A,q){const W=f=$(A),J=c.value,de=A.state,m=A.force,v=A.replace===!0,x=j(W,J);if(x)return B(ge(w(x),{state:typeof x=="object"?ge({},de,x.state):de,force:m,replace:v}),q||W);const T=W;T.redirectedFrom=q;let I;return!m&&Cf(n,J,W)&&(I=Cs(Se.NAVIGATION_DUPLICATED,{to:T,from:J}),at(J,J,!0,!1)),(I?Promise.resolve(I):z(T,J)).catch(E=>kt(E)?kt(E,Se.NAVIGATION_GUARD_REDIRECT)?E:qe(E):re(E,T,J)).then(E=>{if(E){if(kt(E,Se.NAVIGATION_GUARD_REDIRECT))return B(ge({replace:v},w(E.to),{state:typeof E.to=="object"?ge({},de,E.to.state):de,force:m}),q||T)}else E=F(T,J,!0,v,de);return oe(T,J,E),E})}function H(A,q){const W=p(A,q);return W?Promise.reject(W):Promise.resolve()}function M(A){const q=us.values().next().value;return q&&typeof q.runWithContext=="function"?q.runWithContext(A):A()}function z(A,q){let W;const[J,de,m]=Bf(A,q);W=bo(J.reverse(),"beforeRouteLeave",A,q);for(const x of J)x.leaveGuards.forEach(T=>{W.push(Ft(T,A,q))});const v=H.bind(null,A,q);return W.push(v),et(W).then(()=>{W=[];for(const x of l.list())W.push(Ft(x,A,q));return W.push(v),et(W)}).then(()=>{W=bo(de,"beforeRouteUpdate",A,q);for(const x of de)x.updateGuards.forEach(T=>{W.push(Ft(T,A,q))});return W.push(v),et(W)}).then(()=>{W=[];for(const x of m)if(x.beforeEnter)if(it(x.beforeEnter))for(const T of x.beforeEnter)W.push(Ft(T,A,q));else W.push(Ft(x.beforeEnter,A,q));return W.push(v),et(W)}).then(()=>(A.matched.forEach(x=>x.enterCallbacks={}),W=bo(m,"beforeRouteEnter",A,q,M),W.push(v),et(W))).then(()=>{W=[];for(const x of r.list())W.push(Ft(x,A,q));return W.push(v),et(W)}).catch(x=>kt(x,Se.NAVIGATION_CANCELLED)?x:Promise.reject(x))}function oe(A,q,W){i.list().forEach(J=>M(()=>J(A,q,W)))}function F(A,q,W,J,de){const m=p(A,q);if(m)return m;const v=q===Lt,x=gs?history.state:{};W&&(J||v?o.replace(A.fullPath,ge({scroll:v&&x&&x.scroll},de)):o.push(A.fullPath,de)),c.value=A,at(A,q,W,v),qe()}let Z;function R(){Z||(Z=o.listen((A,q,W)=>{if(!Wt.listening)return;const J=$(A),de=j(J,Wt.currentRoute.value);if(de){B(ge(de,{replace:!0,force:!0}),J).catch(Ws);return}f=J;const m=c.value;gs&&Pf(cr(m.fullPath,W.delta),qn()),z(J,m).catch(v=>kt(v,Se.NAVIGATION_ABORTED|Se.NAVIGATION_CANCELLED)?v:kt(v,Se.NAVIGATION_GUARD_REDIRECT)?(B(ge(w(v.to),{force:!0}),J).then(x=>{kt(x,Se.NAVIGATION_ABORTED|Se.NAVIGATION_DUPLICATED)&&!W.delta&&W.type===Lo.pop&&o.go(-1,!1)}).catch(Ws),Promise.reject()):(W.delta&&o.go(-W.delta,!1),re(v,J,m))).then(v=>{v=v||F(J,m,!1),v&&(W.delta&&!kt(v,Se.NAVIGATION_CANCELLED)?o.go(-W.delta,!1):W.type===Lo.pop&&kt(v,Se.NAVIGATION_ABORTED|Se.NAVIGATION_DUPLICATED)&&o.go(-1,!1)),oe(J,m,v)}).catch(Ws)}))}let ee=Ps(),ce=Ps(),te;function re(A,q,W){qe(A);const J=ce.list();return J.length?J.forEach(de=>de(A,q,W)):console.error(A),Promise.reject(A)}function Fe(){return te&&c.value!==Lt?Promise.resolve():new Promise((A,q)=>{ee.add([A,q])})}function qe(A){return te||(te=!A,R(),ee.list().forEach(([q,W])=>A?W(A):q()),ee.reset()),A}function at(A,q,W,J){const{scrollBehavior:de}=e;if(!gs||!de)return Promise.resolve();const m=!W&&Of(cr(A.fullPath,0))||(J||!W)&&history.state&&history.state.scroll||null;return xt().then(()=>de(A,q,m)).then(v=>v&&Rf(v)).catch(v=>re(v,A,q))}const ze=A=>o.go(A);let cs;const us=new Set,Wt={currentRoute:c,listening:!0,addRoute:h,removeRoute:C,clearRoutes:t.clearRoutes,hasRoute:L,getRoutes:y,resolve:$,options:e,push:b,replace:_,go:ze,back:()=>ze(-1),forward:()=>ze(1),beforeEach:l.add,beforeResolve:r.add,afterEach:i.add,onError:ce.add,isReady:Fe,install(A){A.component("RouterLink",ad),A.component("RouterView",dd),A.config.globalProperties.$router=Wt,Object.defineProperty(A.config.globalProperties,"$route",{enumerable:!0,get:()=>O(c)}),gs&&!cs&&c.value===Lt&&(cs=!0,b(o.location).catch(J=>{}));const q={};for(const J in Lt)Object.defineProperty(q,J,{get:()=>c.value[J],enumerable:!0});A.provide(zn,Wt),A.provide(cl,Yr(q)),A.provide(Vo,c);const W=A.unmount;us.add(A),A.unmount=function(){us.delete(A),us.size<1&&(f=Lt,Z&&Z(),Z=null,c.value=Lt,cs=!1,te=!1),W()}}};function et(A){return A.reduce((q,W)=>q.then(()=>M(W)),Promise.resolve())}return Wt}function hd(){return Qe(zn)}function pa(e){return Qe(cl)}const Zn="vnt-web-access-token",Jn=!!globalThis.__VNT_DESKTOP__,Ns=new URL(window.location.href),jo=Ns.searchParams.get("token")||"";jo&&(localStorage.setItem(Zn,jo),Ns.searchParams.delete("token"),window.history.replaceState({},"",`${Ns.pathname}${Ns.search}${Ns.hash}`));const Yn=se(Jn?"":jo||localStorage.getItem(Zn)||""),ul=se(Jn||!!Yn.value),ha=()=>Yn.value,md=e=>{const t=e.trim();localStorage.setItem(Zn,t),Yn.value=t,ul.value=!!t},gd=()=>{localStorage.removeItem(Zn),Yn.value="",ul.value=!1},ot=async(e,t={})=>{if(globalThis.__VNT_IPC_REQUEST__){const r=await globalThis.__VNT_IPC_REQUEST__({method:t.method||"GET",path:e,body:t.body||null});if(r.code!==0)throw new Error(r.msg||"请求失败");return r.data}const s=new Headers(t.headers||{}),n=ha();n&&s.set("Authorization",`Bearer ${n}`);const o=await fetch(e,{...t,headers:s}),l=await o.json();if(o.status===401&&gd(),l.code!==0)throw new Error(l.msg||"请求失败");return l.data},ma={"Content-Type":"application/json"},vd=e=>ot(`/api/info?file_name=${encodeURIComponent(e)}`),bd=e=>ot(`/api/peers?file_name=${encodeURIComponent(e)}`),xd=e=>ot(`/api/routes?file_name=${encodeURIComponent(e)}`),_d=e=>ot(`/api/start/status?file_name=${encodeURIComponent(e)}`),yd=()=>ot("/api/version"),kd=()=>ot("/api/instances"),wd=e=>ot(`/api/instance?file_name=${encodeURIComponent(e)}`,{method:"DELETE"}),fl=(e,t)=>ot(e,{method:"POST",headers:ma,body:JSON.stringify({file_name:t})}),Cd=e=>fl("/api/start",e),ga=e=>fl("/api/stop",e),Sd=e=>fl("/api/restart",e),Ed=()=>ot("/api/config/list"),Td=e=>ot(`/api/config?file_name=${encodeURIComponent(e)}`),$d=(e,t)=>ot("/api/config",{method:"POST",headers:ma,body:JSON.stringify({file_name:e||null,config:t})}),Ad=e=>ot(`/api/config?file_name=${encodeURIComponent(e)}`,{method:"DELETE"});let Id=0;const as=il("ui",()=>{const e=se([]),t=(i,c,f=3e3)=>{const u=++Id;e.value.push({id:u,type:i,message:c}),setTimeout(()=>{e.value=e.value.filter(d=>d.id!==u)},f)},s={success:i=>t("success",i),error:i=>t("error",i,4500),info:i=>t("info",i)},n=Ht({show:!1,title:"",message:"",danger:!1,confirmText:"确定",resolve:null});return{toasts:e,toast:s,confirmState:n,confirm:({title:i="确认操作",message:c="",danger:f=!1,confirmText:u="确定"}={})=>new Promise(d=>{n.show=!0,n.title=i,n.message=c,n.danger=f,n.confirmText=u,n.resolve=d}),confirmOk:()=>{n.show=!1,n.resolve&&n.resolve(!0),n.resolve=null},confirmCancel:()=>{n.show=!1,n.resolve&&n.resolve(!1),n.resolve=null}}}),va=il("startLog",()=>{const e=se(!1),t=se([]),s=se("stopped"),n=se(null),o=se(null);let l=null,r=null,i=null,c=null;const f=({fetchInstances:$,instanceList:w,configList:p})=>{r=$,i=w,c=p},u=me(()=>{if(!n.value)return"";const $=(i?.value||[]).find(p=>p.file_name===n.value);if($)return $.config_name||$.file_name;const w=(c?.value||[]).find(p=>p.file_name===n.value);return w?w.config_name||w.file_name:n.value}),d=async()=>{if(n.value)try{const $=await _d(n.value);t.value=$.logs||[],s.value=$.status,xt(()=>{o.value&&(o.value.scrollTop=o.value.scrollHeight)}),s.value==="running"?(g(),r&&r(),e.value=!1):s.value==="stopped"&&t.value.length>0&&(g(),r&&r())}catch($){console.error($)}},g=()=>{l&&(clearInterval(l),l=null)},h=()=>{g(),l=setInterval(d,1e3),d()};return{showStartLog:e,startLogs:t,startStatus:s,logFileName:n,logContainer:o,logConfigName:u,bindApp:f,openStartLog:$=>{n.value=$,t.value=[],s.value="starting",e.value=!0,h()},pollStartStatus:d,startPolling:h,stopPolling:g,cancelStart:async()=>{g();const $=n.value;if($)try{await ga($),t.value.push("启动已手动取消")}catch{}s.value="stopped",r&&r()},close:()=>{e.value=!1}}}),Ot=il("app",()=>{const e=as(),t=va(),s=se({}),n=se([]),o=se(null),l=se([]),r=se({}),i=se({}),c=se(!document.hidden),f=()=>{c.value=!document.hidden};let u=null;const d=me(()=>n.value.filter(R=>R.status==="running").length),g=me(()=>n.value.filter(R=>R.status==="starting").length),h=me(()=>d.value>0?`运行中 x${d.value}`:g.value>0?"启动中...":"未启动"),C=me(()=>o.value&&s.value[o.value]||null),y=me(()=>{if(!o.value)return"";const R=n.value.find(ee=>ee.file_name===o.value);return R?R.config_name||R.file_name:o.value}),L=se(""),$=async()=>{try{L.value=await yd()||""}catch(R){console.error("Fetch version error",R)}},w=me(()=>!!(C.value&&C.value.server_info&&C.value.server_info.some(R=>R.connected))),p=me(()=>{const R=C.value;return!R||!R.server_info||!R.server_info.length?"未配置服务器":`${R.server_info.filter(ee=>ee.connected).length} / ${R.server_info.length} 已连接`}),b=R=>s.value[R]||{},_=async R=>{try{s.value[R]=await vd(R)}catch(ee){console.error("Fetch info error",ee)}},j=async()=>{try{const R=await kd()||[];n.value=R;for(const ee of Object.keys(s.value))R.some(ce=>ce.file_name===ee)||delete s.value[ee];for(const ee of Object.keys(i.value)){const ce=R.find(te=>te.file_name===ee);(!ce||ce.status==="stopped")&&delete i.value[ee]}if(!o.value||!R.some(ee=>ee.file_name===o.value)){const ee=R.find(ce=>ce.status==="running");o.value=ee?ee.file_name:R.length>0?R[0].file_name:null}for(const ee of R)ee.status==="running"&&_(ee.file_name)}catch(R){console.error("Fetch instances error",R)}},B=async()=>{try{l.value=await Ed()||[]}catch(R){console.error("Fetch list error",R)}},H=async R=>{if(!R){e.toast.error("请先选择一个配置");return}if(!r.value[R]){r.value[R]=!0;try{await Cd(R),t.openStartLog(R),j()}catch(ee){e.toast.error("启动失败: "+ee.message)}finally{r.value[R]=!1}}},M=async R=>{if(!(!R||r.value[R])){r.value[R]=!0,i.value[R]=!0;try{await ga(R),e.toast.success("已停止"),t.logFileName===R&&(t.stopPolling(),t.showStartLog=!1),j()}catch(ee){e.toast.error("停止失败: "+ee.message),console.error(ee),delete i.value[R]}finally{r.value[R]=!1}}},z=async R=>{if(!(!R||r.value[R])){r.value[R]=!0;try{await Sd(R),t.openStartLog(R),j()}catch(ee){e.toast.error("重启失败: "+ee.message)}finally{r.value[R]=!1}}},oe=async R=>{if(!(!R||r.value[R])){r.value[R]=!0;try{await wd(R),e.toast.success("已移除"),t.logFileName===R&&(t.stopPolling(),t.showStartLog=!1),o.value===R&&(o.value=null),j()}catch(ee){e.toast.error("移除失败: "+ee.message)}finally{r.value[R]=!1}}};t.bindApp({fetchInstances:j,instanceList:n,configList:l});const F=async()=>{if(!Jn&&!ha())return;document.addEventListener("visibilitychange",f),$(),await j(),B();const R=n.value.find(ee=>ee.status==="starting");R&&t.openStartLog(R.file_name),u=setInterval(()=>{c.value&&j()},3e3)},Z=()=>{document.removeEventListener("visibilitychange",f),t.stopPolling(),u&&clearInterval(u)};return Es()&&(_t(F),Ss(Z)),{instances:s,instanceList:n,selectedInstance:o,configList:l,loadingMap:r,stoppingMap:i,isPageVisible:c,runningCount:d,startingCount:g,headerStatusText:h,selectedInfo:C,selectedConfigName:y,version:L,isServerConnected:w,serverStatusText:p,infoOf:b,fetchInstances:j,fetchInstanceInfo:_,fetchConfigList:B,startVnt:H,stopVnt:M,restartVnt:z,dismissInstance:oe}}),Rd=[{to:"/",label:"网络总览",shortLabel:"总览",icon:"M4 4h6v6H4V4Zm10 0h6v6h-6V4ZM4 14h6v6H4v-6Zm10 0h6v6h-6v-6Z"},{to:"/instances",label:"运行实例",shortLabel:"实例",icon:"M4 18V8m5 10V4m6 14v-7m5 7V6"},{to:"/peers",label:"在线设备",shortLabel:"设备",icon:"M15 19a6 6 0 0 0-12 0m18 0a5 5 0 0 0-5-5m-7-3a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm8 0a3 3 0 1 0 0-6"},{to:"/routes",label:"路由表",shortLabel:"路由",icon:"M6 8a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm12 12a2 2 0 1 0 0-4 2 2 0 0 0 0 4ZM8 6h6a4 4 0 0 1 4 4v2m-3-3 3 3 3-3M16 18h-6a4 4 0 0 1-4-4v-2"},{to:"/config",label:"组网配置",shortLabel:"配置",icon:"M12 15.5a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7Zm7.4-.5a1.7 1.7 0 0 0 .3 1.9l.1.1-2.8 2.8-.1-.1a1.7 1.7 0 0 0-1.9-.3A1.7 1.7 0 0 0 14 21v.2h-4V21a1.7 1.7 0 0 0-1-1.6 1.7 1.7 0 0 0-1.9.3l-.1.1L4.2 17l.1-.1a1.7 1.7 0 0 0 .3-1.9A1.7 1.7 0 0 0 3 14h-.2v-4H3a1.7 1.7 0 0 0 1.6-1 1.7 1.7 0 0 0-.3-1.9L4.2 7 7 4.2l.1.1A1.7 1.7 0 0 0 9 4.6 1.7 1.7 0 0 0 10 3v-.2h4V3a1.7 1.7 0 0 0 1 1.6 1.7 1.7 0 0 0 1.9-.3l.1-.1L19.8 7l-.1.1a1.7 1.7 0 0 0-.3 1.9 1.7 1.7 0 0 0 1.6 1h.2v4H21a1.7 1.7 0 0 0-1.6 1Z"},{to:"/web-access",label:"Web 访问",shortLabel:"Web",desktopOnly:!0,icon:"M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18Zm0 0c2.2-2.5 3.3-5.5 3.3-9S14.2 5.5 12 3m0 18c-2.2-2.5-3.3-5.5-3.3-9S9.8 5.5 12 3M3.5 9h17m-17 6h17"}],ba=()=>Rd.filter(e=>!e.desktopOnly||globalThis.__VNT_DESKTOP__),dl="/assets/vnt-icon-CtSHy0mt.png",Pd={class:"flex h-full min-h-0 flex-col bg-white dark:bg-slate-900"},Od={class:"flex h-16 shrink-0 items-center gap-3 border-b border-slate-200 px-5 dark:border-slate-800"},Md=["src"],Ld={class:"mx-3 mt-4 flex items-center gap-3 rounded-xl border border-slate-200 bg-slate-50 px-3 py-3 dark:border-slate-700 dark:bg-slate-800/60"},Nd={class:"min-w-0"},Vd={class:"mt-0.5 truncate text-xs font-medium text-slate-700 dark:text-slate-200"},jd={class:"mt-4 flex min-h-0 flex-1 flex-col gap-1 overflow-y-auto px-3","aria-label":"主导航"},Dd={class:"h-[18px] w-[18px] shrink-0 fill-none stroke-current",viewBox:"0 0 24 24"},Bd=["d"],Fd={class:"mx-3 mt-3 shrink-0 border-t border-slate-200 px-1 py-4 dark:border-slate-800"},Ud={class:"flex items-center gap-2 text-xs text-slate-400"},Hd={class:"ml-auto font-mono text-[10px]"},kr={__name:"AppSidebar",emits:["navigate"],setup(e){const t=pa(),s=Ot(),n=ba();return(o,l)=>{const r=Un("router-link");return k(),S("div",Pd,[a("div",Od,[a("img",{src:O(dl),alt:"",class:"h-8 w-8 shrink-0"},null,8,Md),l[1]||(l[1]=a("div",null,[a("div",{class:"text-sm font-bold tracking-wide text-slate-900 dark:text-white"},"VNT"),a("div",{class:"text-[9px] font-semibold tracking-[0.18em] text-slate-400"},"CONTROL CENTER")],-1))]),a("div",Ld,[a("span",{class:G(["h-2.5 w-2.5 shrink-0 rounded-full",O(s).runningCount>0?"bg-green-500":O(s).startingCount>0?"animate-pulse bg-amber-400":"bg-slate-300 dark:bg-slate-600"])},null,2),a("div",Nd,[l[2]||(l[2]=a("div",{class:"text-[9px] font-semibold tracking-wider text-slate-400"},"虚拟网络",-1)),a("div",Vd,N(O(s).headerStatusText),1)])]),a("nav",jd,[(k(!0),S(ie,null,Te(O(n),i=>(k(),Re(r,{key:i.to,to:i.to,class:G(["flex min-h-10 items-center gap-3 rounded-lg px-3 text-sm font-medium transition-colors",O(t).path===i.to?"bg-indigo-50 text-indigo-700 dark:bg-indigo-500/10 dark:text-indigo-300":"text-slate-500 hover:bg-slate-100 hover:text-slate-900 dark:text-slate-400 dark:hover:bg-slate-800 dark:hover:text-white"]),onClick:l[0]||(l[0]=c=>o.$emit("navigate"))},{default:Ee(()=>[(k(),S("svg",Dd,[a("path",{d:i.icon,"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.7"},null,8,Bd)])),a("span",null,N(i.label),1)]),_:2},1032,["to","class"]))),128))]),a("div",Fd,[a("div",Ud,[a("span",{class:G(["h-1.5 w-1.5 rounded-full",O(s).version?"bg-green-500":"bg-amber-400"])},null,2),a("span",null,N(O(s).version?"本地服务正常":"正在连接服务…"),1),a("span",Hd,"v"+N(O(s).version||"2.0"),1)])])])}}},Wd={key:0,class:"flex shrink-0 items-center justify-between gap-3 border-b border-slate-200 bg-slate-50/60 px-6 py-4 dark:border-slate-700 dark:bg-slate-800/50"},Kd={class:"custom-scrollbar min-h-0 flex-1 overflow-y-auto"},Gd={key:1,class:"flex shrink-0 items-center justify-end gap-3 border-t border-slate-200 bg-slate-50/60 px-6 py-4 dark:border-slate-700 dark:bg-slate-800/50"},pl={__name:"AppModal",props:{show:{type:Boolean,default:!1},maskClosable:{type:Boolean,default:!0},escClosable:{type:Boolean,default:!0},panelClass:{type:String,default:"w-full max-w-2xl"}},emits:["close"],setup(e,{emit:t}){const s=e,n=t,o=r=>{s.escClosable&&r.key==="Escape"&&n("close")};Ve(()=>s.show,r=>{r?window.addEventListener("keydown",o):window.removeEventListener("keydown",o)}),Ss(()=>window.removeEventListener("keydown",o));const l=()=>{s.maskClosable&&n("close")};return(r,i)=>(k(),Re(Qo,{to:"body"},[ue(wn,{name:"modal"},{default:Ee(()=>[e.show?(k(),S("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-slate-900/40 p-4 backdrop-blur-sm",onClick:ls(l,["self"])},[a("div",{class:G(["modal-panel flex max-h-[90vh] flex-col overflow-hidden rounded-xl border border-slate-200 bg-white shadow-2xl dark:border-slate-700 dark:bg-slate-900",e.panelClass])},[r.$slots.header?(k(),S("div",Wd,[lo(r.$slots,"header")])):fe("",!0),a("div",Kd,[lo(r.$slots,"body")]),r.$slots.footer?(k(),S("div",Gd,[lo(r.$slots,"footer")])):fe("",!0)],2)])):fe("",!0)]),_:3})]))}},qd={class:"w-auto min-w-[260px] max-w-[320px] rounded-lg border border-slate-200 bg-white p-4 text-left text-sm text-slate-600 shadow-2xl dark:border-slate-600 dark:bg-slate-800 dark:text-slate-200"},zd={class:"relative z-10 mb-2 flex items-center justify-between border-b border-slate-200 pb-2 dark:border-slate-600"},Zd={class:"badge-green border border-green-200 dark:border-green-800"},Jd={key:0,class:"relative z-10 mb-3"},Yd={class:"flex flex-wrap gap-1"},Qd={key:1,class:"relative z-10"},Xd={class:"whitespace-normal break-all rounded border border-slate-200 bg-slate-50 p-1.5 font-mono text-xs leading-relaxed text-slate-600 dark:border-slate-700/50 dark:bg-slate-900/50 dark:text-slate-200"},ep={__name:"AppTooltip",setup(e,{expose:t}){const s=se({show:!1,x:0,y:0,info:null});let n=null;const o=(c,f)=>{if(!f.nat_info)return;n&&(clearTimeout(n),n=null);const u=c.currentTarget.getBoundingClientRect();s.value={show:!0,x:u.left+u.width/2,y:u.bottom+10,info:f.nat_info}},l=()=>{n=setTimeout(()=>{s.value.show=!1},100)},r=()=>{n&&(clearTimeout(n),n=null)},i=()=>{s.value.show=!1};return t({showPeerTooltip:o,hidePeerTooltip:l}),(c,f)=>(k(),Re(Qo,{to:"body"},[s.value.show?(k(),S("div",{key:0,style:Mn({top:s.value.y+"px",left:s.value.x+"px"}),class:"fixed z-[9999] mt-1 -translate-x-1/2 transform",onMouseenter:r,onMouseleave:i},[a("div",qd,[f[3]||(f[3]=a("div",{class:"absolute -top-2 left-1/2 h-4 w-4 -translate-x-1/2 rotate-45 transform border-l border-t border-slate-200 bg-white dark:border-slate-600 dark:bg-slate-800"},null,-1)),a("div",zd,[f[0]||(f[0]=a("span",{class:"text-xs font-bold uppercase text-slate-400"},"NAT Type",-1)),a("span",Zd,N(s.value.info.nat_type),1)]),s.value.info.public_ips&&s.value.info.public_ips.length>0?(k(),S("div",Jd,[f[1]||(f[1]=a("span",{class:"mb-1 block text-xs text-slate-400"},"Public IPv4:",-1)),a("div",Yd,[(k(!0),S(ie,null,Te(s.value.info.public_ips,u=>(k(),S("span",{key:u,class:"rounded border border-slate-200 bg-slate-100 px-1.5 py-0.5 font-mono text-xs tabular-nums text-slate-600 dark:border-slate-600 dark:bg-slate-700 dark:text-slate-200"},N(u),1))),128))])])):fe("",!0),s.value.info.ipv6?(k(),S("div",Qd,[f[2]||(f[2]=a("span",{class:"mb-1 block text-xs text-slate-400"},"IPv6:",-1)),a("div",Xd,N(s.value.info.ipv6),1)])):fe("",!0)])],36)):fe("",!0)]))}},tp={class:"text-lg font-bold text-slate-900 flex items-center gap-2 dark:text-white"},sp={key:0,class:"w-5 h-5 text-red-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},np={class:"px-6 py-5 text-sm text-slate-600 break-all dark:text-slate-300"},op={__name:"ConfirmHost",setup(e){const t=as();return(s,n)=>(k(),Re(pl,{show:O(t).confirmState.show,"panel-class":"w-full max-w-sm",onClose:O(t).confirmCancel},{header:Ee(()=>[a("h3",tp,[O(t).confirmState.danger?(k(),S("svg",sp,[...n[2]||(n[2]=[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"},null,-1)])])):fe("",!0),ae(" "+N(O(t).confirmState.title),1)])]),body:Ee(()=>[a("p",np,N(O(t).confirmState.message),1)]),footer:Ee(()=>[a("button",{class:"btn-ghost",onClick:n[0]||(n[0]=(...o)=>O(t).confirmCancel&&O(t).confirmCancel(...o))},"取消"),a("button",{class:G(O(t).confirmState.danger?"btn-danger":"btn-primary"),onClick:n[1]||(n[1]=(...o)=>O(t).confirmOk&&O(t).confirmOk(...o))},N(O(t).confirmState.confirmText),3)]),_:1},8,["show","onClose"]))}},lp={class:"pointer-events-none fixed right-4 top-4 z-[100] flex flex-col items-end gap-2"},rp={class:"flex items-center gap-2 px-4 py-2.5"},ip=["d"],ap={class:"break-all text-sm text-slate-700 dark:text-slate-200"},cp={__name:"ToastHost",setup(e){const t=as(),s=l=>l==="success"?"bg-green-500":l==="error"?"bg-red-500":"bg-indigo-500",n=l=>l==="success"?"text-green-500":l==="error"?"text-red-500":"text-indigo-500",o=l=>l==="success"?"M5 13l4 4L19 7":l==="error"?"M6 18L18 6M6 6l12 12":"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z";return(l,r)=>(k(),Re(Qo,{to:"body"},[a("div",lp,[ue(rl,{name:"toast"},{default:Ee(()=>[(k(!0),S(ie,null,Te(O(t).toasts,i=>(k(),S("div",{key:i.id,class:"pointer-events-auto flex max-w-sm items-stretch overflow-hidden rounded-lg border border-slate-200 bg-white shadow-lg dark:border-slate-700 dark:bg-slate-800"},[a("span",{class:G(["w-1 shrink-0",s(i.type)])},null,2),a("div",rp,[(k(),S("svg",{class:G(["h-4 w-4 shrink-0",n(i.type)]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:o(i.type)},null,8,ip)],2)),a("span",ap,N(i.message),1)])]))),128))]),_:1})])]))}},up={class:"grid h-[100dvh] place-items-center overflow-y-auto bg-slate-50 p-4 text-slate-700 dark:bg-slate-950 dark:text-slate-200"},fp={class:"mb-7 flex items-center gap-3"},dp=["src"],pp=["disabled"],hp={__name:"AccessGate",setup(e){const t=se(""),s=()=>{t.value.trim()&&(md(t.value),window.location.reload())};return(n,o)=>(k(),S("main",up,[a("form",{class:"w-full max-w-md rounded-2xl border border-slate-200 bg-white p-6 shadow-sm sm:p-8 dark:border-slate-800 dark:bg-slate-900",onSubmit:ls(s,["prevent"])},[a("div",fp,[a("img",{src:O(dl),alt:"",class:"h-10 w-10 shrink-0"},null,8,dp),o[1]||(o[1]=a("div",null,[a("h1",{class:"text-lg font-bold text-slate-900 dark:text-white"},"访问 VNT 控制台"),a("p",{class:"mt-0.5 text-xs text-slate-400"},"请输入桌面端 Web 访问设置中的令牌")],-1))]),o[2]||(o[2]=a("label",{class:"mb-2 block text-sm font-medium text-slate-700 dark:text-slate-200",for:"access-token"},"访问令牌",-1)),xe(a("input",{id:"access-token","onUpdate:modelValue":o[0]||(o[0]=l=>t.value=l),class:"input font-mono",type:"password",autocomplete:"current-password",autofocus:"",placeholder:"粘贴访问令牌"},null,512),[[Ie,t.value]]),a("button",{class:"btn-primary mt-5 w-full",type:"submit",disabled:!t.value.trim()},"进入控制台",8,pp),o[3]||(o[3]=a("p",{class:"mt-5 text-center text-xs leading-5 text-slate-400"},"令牌只保存在当前浏览器中,可随时在桌面端重新生成。",-1))],32)]))}},mp={key:1,class:"flex h-[100dvh] min-h-0 overflow-hidden bg-slate-50 text-slate-700 dark:bg-slate-950 dark:text-slate-200"},gp={class:"hidden w-60 shrink-0 border-r border-slate-200 dark:border-slate-800 lg:block"},vp={key:0,class:"fixed inset-0 z-40 lg:hidden"},bp={class:"drawer-panel relative h-full w-[min(82vw,288px)] border-r border-slate-200 shadow-2xl dark:border-slate-700"},xp={class:"flex min-w-0 flex-1 flex-col"},_p={class:"flex h-16 shrink-0 items-center gap-3 border-b border-slate-200 bg-white/90 px-4 backdrop-blur lg:px-6 dark:border-slate-800 dark:bg-slate-900/90"},yp={class:"min-w-0"},kp={class:"truncate text-lg font-bold text-slate-900 dark:text-white"},wp={class:"ml-auto flex items-center gap-2"},Cp={class:"flex h-8 items-center gap-2 rounded-lg border border-slate-200 bg-white px-2.5 text-xs font-medium text-slate-500 sm:px-3 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-300"},Sp={class:"hidden sm:inline"},Ep=["title","aria-label"],Tp={key:0,class:"h-4 w-4 fill-none stroke-current",viewBox:"0 0 24 24"},$p={key:1,class:"h-4 w-4 fill-none stroke-current",viewBox:"0 0 24 24"},Ap={class:"custom-scrollbar min-h-0 flex-1 overflow-x-hidden overflow-y-auto"},Ip={class:"mx-auto w-full max-w-7xl px-4 py-5 sm:px-5 lg:px-7 lg:py-6"},Rp={class:"flex min-w-0 items-center gap-3"},Pp={class:"truncate text-base font-bold text-slate-900 sm:text-lg dark:text-white"},Op={class:"max-w-[40%] truncate font-mono text-xs text-indigo-600 dark:text-indigo-400"},Mp={class:"break-all"},Lp={key:0,class:"animate-pulse text-indigo-600 dark:text-indigo-400"},Np={__name:"App",setup(e){const t=Ot(),s=va(),n=pa(),o=hd(),l=se(null);Bs("peerTooltip",l);const r=se(!1),i=ba(),c=me(()=>i.find(C=>C.to===n.path)||i[0]),f=localStorage.getItem("vnt-theme"),u=se(f?f==="dark":window.matchMedia("(prefers-color-scheme: dark)").matches),d=()=>document.documentElement.classList.toggle("dark",u.value),g=()=>{u.value=!u.value,localStorage.setItem("vnt-theme",u.value?"dark":"light"),d()};d(),Ve(()=>n.path,()=>{r.value=!1});const h=C=>{if(!(C.ctrlKey||C.metaKey)||C.altKey)return;const y=Number(C.key)-1;y>=0&&ywindow.addEventListener("keydown",h)),Fn(()=>window.removeEventListener("keydown",h)),(C,y)=>{const L=Un("router-view");return!O(Jn)&&!O(ul)?(k(),Re(hp,{key:0})):(k(),S("div",mp,[a("aside",gp,[ue(kr)]),ue(wn,{name:"drawer"},{default:Ee(()=>[r.value?(k(),S("div",vp,[a("button",{class:"absolute inset-0 bg-slate-950/45 backdrop-blur-[2px]","aria-label":"关闭导航",onClick:y[0]||(y[0]=$=>r.value=!1)}),a("aside",bp,[ue(kr,{onNavigate:y[1]||(y[1]=$=>r.value=!1)})])])):fe("",!0)]),_:1}),a("div",xp,[a("header",_p,[a("button",{class:"grid h-9 w-9 shrink-0 place-items-center rounded-lg text-slate-500 hover:bg-slate-100 hover:text-slate-900 lg:hidden dark:text-slate-400 dark:hover:bg-slate-800 dark:hover:text-white","aria-label":"打开导航",onClick:y[2]||(y[2]=$=>r.value=!0)},[...y[5]||(y[5]=[a("svg",{class:"h-5 w-5 fill-none stroke-current",viewBox:"0 0 24 24"},[a("path",{d:"M4 7h16M4 12h16M4 17h16","stroke-linecap":"round","stroke-width":"2"})],-1)])]),a("div",yp,[a("h1",kp,N(c.value.label),1),y[6]||(y[6]=a("p",{class:"hidden text-xs text-slate-400 sm:block"},"VNT 虚拟局域网管理",-1))]),a("div",wp,[a("div",Cp,[a("span",{class:G(["h-1.5 w-1.5 rounded-full",O(t).runningCount>0?"bg-green-500":O(t).startingCount>0?"animate-pulse bg-amber-400":"bg-slate-300 dark:bg-slate-600"])},null,2),a("span",Sp,N(O(t).headerStatusText),1)]),a("button",{class:"grid h-8 w-8 place-items-center rounded-lg border border-slate-200 bg-white text-slate-500 hover:border-indigo-300 hover:text-indigo-600 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-400 dark:hover:border-indigo-500 dark:hover:text-indigo-400",title:u.value?"切换浅色模式":"切换深色模式","aria-label":u.value?"切换浅色模式":"切换深色模式",onClick:g},[u.value?(k(),S("svg",Tp,[...y[7]||(y[7]=[a("circle",{cx:"12",cy:"12",r:"4"},null,-1),a("path",{d:"M12 2v2m0 16v2M4.9 4.9l1.4 1.4m11.4 11.4 1.4 1.4M2 12h2m16 0h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4","stroke-linecap":"round","stroke-width":"1.7"},null,-1)])])):(k(),S("svg",$p,[...y[8]||(y[8]=[a("path",{d:"M20.5 15.2A8.5 8.5 0 0 1 8.8 3.5 8.5 8.5 0 1 0 20.5 15.2Z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.7"},null,-1)])]))],8,Ep)])]),a("main",Ap,[a("div",Ip,[ue(L,null,{default:Ee(({Component:$})=>[ue(wn,{name:"fade",mode:"out-in"},{default:Ee(()=>[(k(),Re(Rc($)))]),_:2},1024)]),_:1})])])]),ue(pl,{show:O(s).showStartLog,"mask-closable":O(s).startStatus!=="starting","esc-closable":O(s).startStatus!=="starting","panel-class":"w-full max-w-2xl",onClose:O(s).close},{header:Ee(()=>[a("div",Rp,[a("span",{class:G(["h-2 w-2 shrink-0 rounded-full",O(s).startStatus==="starting"?"animate-pulse bg-amber-400":O(s).startStatus==="running"?"bg-green-500":"bg-red-500"])},null,2),a("h3",Pp,N(O(s).startStatus==="starting"?"正在建立虚拟网络":O(s).startStatus==="running"?"网络已连接":"连接未完成"),1)]),a("span",Op,N(O(s).logConfigName),1)]),body:Ee(()=>[a("div",{ref:$=>O(s).logContainer=$,class:"custom-scrollbar h-64 space-y-2 overflow-y-auto border-y border-slate-200 bg-slate-50 p-4 font-mono text-xs text-slate-600 sm:h-80 sm:p-6 dark:border-slate-800 dark:bg-slate-950 dark:text-slate-300"},[(k(!0),S(ie,null,Te(O(s).startLogs,($,w)=>(k(),S("div",{key:w,class:"flex gap-3"},[y[9]||(y[9]=a("span",{class:"text-indigo-600 dark:text-indigo-400"},"›",-1)),a("span",Mp,N($),1)]))),128)),O(s).startStatus==="starting"?(k(),S("div",Lp,"等待下一阶段…")):fe("",!0)],512)]),footer:Ee(()=>[O(s).startStatus==="starting"?(k(),S("button",{key:0,class:"btn-ghost",onClick:y[3]||(y[3]=(...$)=>O(s).cancelStart&&O(s).cancelStart(...$))},"取消连接")):(k(),S("button",{key:1,class:"btn-primary",onClick:y[4]||(y[4]=(...$)=>O(s).close&&O(s).close(...$))},"完成"))]),_:1},8,["show","mask-closable","esc-closable","onClose"]),ue(cp),ue(op),ue(ep,{ref_key:"tooltipRef",ref:l},null,512)]))}}},hl=(e,t)=>{const s=e.__vccOpts||e;for(const[n,o]of t)s[n]=o;return s},Vp=["aria-expanded","disabled"],jp=["aria-selected","disabled","data-option-index","onMouseenter","onClick"],Dp={class:"min-w-0 flex-1 truncate"},Bp={key:0,class:"h-4 w-4 shrink-0 fill-none stroke-current",viewBox:"0 0 24 24","aria-hidden":"true"},Fp={key:0,class:"px-3 py-4 text-center text-xs text-slate-400"},Up=Object.assign({inheritAttrs:!1},{__name:"AppSelect",props:{modelValue:{default:null},options:{type:Array,default:()=>[]},placeholder:{type:String,default:"请选择"},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{emit:t}){const s=e,n=t,o=se(null),l=se(null),r=se(!1),i=se(-1),c=`app-select-${yc().replaceAll(":","")}`,f=me(()=>s.options.findIndex(w=>Object.is(w.value,s.modelValue))),u=me(()=>s.options[f.value]||null),d=(w,p)=>{if(!s.options.length)return-1;let b=w;for(let _=0;_{s.disabled||(r.value=!0,i.value=f.value>=0?f.value:d(-1,1),await xt(),o.value?.querySelector(`[data-option-index="${i.value}"]`)?.scrollIntoView({block:"nearest"}))},h=(w=!1)=>{r.value=!1,w&&l.value?.focus()},C=w=>{w.disabled||(n("update:modelValue",w.value),h(!0))},y=w=>{i.value=d(i.value,w),xt(()=>{o.value?.querySelector(`[data-option-index="${i.value}"]`)?.scrollIntoView({block:"nearest"})})},L=w=>{if(!s.disabled){if(w.key==="ArrowDown"||w.key==="ArrowUp"){w.preventDefault(),r.value?y(w.key==="ArrowDown"?1:-1):g();return}if(w.key==="Enter"||w.key===" "){w.preventDefault(),r.value?i.value>=0&&C(s.options[i.value]):g();return}if(w.key==="Escape"&&r.value){w.preventDefault(),h(!0);return}w.key==="Home"&&r.value?(w.preventDefault(),i.value=d(-1,1)):w.key==="End"&&r.value?(w.preventDefault(),i.value=d(0,-1)):w.key==="Tab"&&h()}},$=w=>{r.value&&!o.value?.contains(w.target)&&h()};return Ve(()=>s.disabled,w=>{w&&h()}),_t(()=>document.addEventListener("pointerdown",$)),Fn(()=>document.removeEventListener("pointerdown",$)),(w,p)=>(k(),S("div",{ref_key:"root",ref:o,class:"relative w-full"},[a("button",Di({ref_key:"trigger",ref:l},w.$attrs,{type:"button",role:"combobox","aria-expanded":r.value,"aria-controls":c,"aria-haspopup":"listbox",disabled:e.disabled,class:["input flex min-h-10 items-center justify-between gap-3 text-left",r.value?"border-indigo-500 ring-2 ring-indigo-500/25":""],onClick:p[0]||(p[0]=b=>r.value?h():g()),onKeydown:L}),[a("span",{class:G(["min-w-0 flex-1 truncate",u.value?"":"text-slate-400 dark:text-slate-500"])},N(u.value?.label||e.placeholder),3),(k(),S("svg",{class:G(["h-4 w-4 shrink-0 fill-none stroke-current text-slate-400 transition-transform duration-150",r.value?"rotate-180 text-indigo-500":""]),viewBox:"0 0 24 24","aria-hidden":"true"},[...p[1]||(p[1]=[a("path",{d:"m7 10 5 5 5-5","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.8"},null,-1)])],2))],16,Vp),ue(wn,{name:"select-menu"},{default:Ee(()=>[r.value?(k(),S("div",{key:0,id:c,role:"listbox",class:"custom-scrollbar absolute z-40 mt-1.5 max-h-60 w-full overflow-y-auto rounded-xl border border-slate-200 bg-white p-1.5 shadow-xl shadow-slate-900/10 dark:border-slate-700 dark:bg-slate-800 dark:shadow-black/30"},[(k(!0),S(ie,null,Te(e.options,(b,_)=>(k(),S("button",{key:`${String(b.value)}-${_}`,type:"button",role:"option","aria-selected":Object.is(b.value,e.modelValue),disabled:b.disabled,"data-option-index":_,class:G(["flex w-full items-center gap-2 rounded-lg px-3 py-2.5 text-left text-sm transition-colors disabled:cursor-not-allowed disabled:opacity-40",[Object.is(b.value,e.modelValue)?"bg-indigo-50 font-medium text-indigo-700 dark:bg-indigo-500/15 dark:text-indigo-300":"text-slate-600 hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-slate-700/70",i.value===_&&!Object.is(b.value,e.modelValue)?"bg-slate-100 dark:bg-slate-700/70":""]]),onMouseenter:j=>i.value=_,onClick:j=>C(b)},[a("span",Dp,N(b.label),1),Object.is(b.value,e.modelValue)?(k(),S("svg",Bp,[...p[2]||(p[2]=[a("path",{d:"m5 12 4 4L19 6","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)])])):fe("",!0)],42,jp))),128)),e.options.length===0?(k(),S("div",Fp,"暂无可选项")):fe("",!0)])):fe("",!0)]),_:1})],512))}}),ml=hl(Up,[["__scopeId","data-v-2fb2198c"]]),Hp={class:"card"},Wp={key:0,class:"flex flex-wrap items-center justify-between gap-3"},Kp={key:1,class:"text-sm muted"},Gp={key:2,class:"flex flex-col gap-3 sm:flex-row sm:items-end"},qp={class:"flex-1"},zp=["disabled"],Zp={key:0,class:"animate-spin"},xa={__name:"StartPanel",setup(e){const t=Ot(),s=as(),n=se(""),o=me(()=>t.configList.filter(i=>!t.instanceList.some(c=>c.file_name===i.file_name))),l=me(()=>o.value.map(i=>({value:i.file_name,label:i.config_name||i.file_name})));Ve(o,i=>{i.some(c=>c.file_name===n.value)||(n.value=i.length?i[0].file_name:"")},{immediate:!0});const r=()=>{if(!n.value){s.toast.error("请先选择一个配置");return}t.startVnt(n.value)};return(i,c)=>{const f=Un("router-link");return k(),S("div",Hp,[c[5]||(c[5]=a("h2",{class:"mb-4 text-base font-bold text-slate-900 dark:text-white"},"启动组网",-1)),O(t).configList.length===0?(k(),S("div",Wp,[c[2]||(c[2]=a("p",{class:"text-sm muted"},"还没有任何配置,先创建一个组网配置吧。",-1)),ue(f,{to:"/config",class:"btn-primary btn-sm"},{default:Ee(()=>[...c[1]||(c[1]=[ae("去新建配置",-1)])]),_:1})])):o.value.length===0?(k(),S("div",Kp," 所有配置均已启动。 ")):(k(),S("div",Gp,[a("div",qp,[c[3]||(c[3]=a("label",{class:"mb-1.5 block text-xs font-medium muted"},"选择配置",-1)),ue(ml,{modelValue:n.value,"onUpdate:modelValue":c[0]||(c[0]=u=>n.value=u),options:l.value,placeholder:"请选择配置…","aria-label":"选择配置"},null,8,["modelValue","options"])]),a("button",{class:"btn-primary px-8",disabled:!n.value||!!O(t).loadingMap[n.value],onClick:r},[O(t).loadingMap[n.value]?(k(),S("span",Zp,"⟳")):fe("",!0),c[4]||(c[4]=ae(" 启动 ",-1))],8,zp)]))])}}},Jp={class:"flex items-center justify-between gap-2"},Yp=["title"],Qp={class:"flex shrink-0 items-center gap-1.5"},Xp={key:0,class:"badge-yellow",title:"配置文件在启动后被修改,重启实例后生效"},e0={class:"mt-2 text-sm"},t0={class:"ml-1 font-mono tabular-nums text-indigo-600 dark:text-indigo-400"},s0={class:"mt-3 flex gap-4 text-xs muted"},n0={class:"font-bold tabular-nums text-blue-600 dark:text-blue-400"},o0={class:"font-bold tabular-nums text-green-600 dark:text-green-400"},l0={class:"font-bold tabular-nums text-slate-400"},r0={class:"mt-4 flex flex-wrap justify-end gap-2"},i0={key:0,class:"flex items-center gap-1.5 text-xs muted"},a0=["disabled"],c0={key:0,class:"animate-spin"},u0=["disabled"],f0={key:0,class:"animate-spin"},d0=["disabled"],p0={key:0,class:"animate-spin"},_a={__name:"InstanceCard",props:{inst:{type:Object,required:!0},selectable:{type:Boolean,default:!1}},setup(e){const t=e,s=Ot(),n=as(),o=me(()=>s.infoOf(t.inst.file_name)),l=me(()=>!!s.loadingMap[t.inst.file_name]),r=me(()=>!!s.stoppingMap[t.inst.file_name]),i=me(()=>t.inst.config_name||t.inst.file_name),c=C=>r.value?"badge-yellow":C==="running"?"badge-green":C==="starting"?"badge-blue":"badge-gray",f=C=>r.value?"停止中":C==="running"?"运行中":C==="starting"?"启动中":"已停止",u=()=>{t.selectable&&(s.selectedInstance=t.inst.file_name)},d=async()=>{await n.confirm({title:"停止组网",message:`确定要停止 ${i.value} 吗?`,danger:!0,confirmText:"停止"})&&s.stopVnt(t.inst.file_name)},g=async()=>{await n.confirm({title:"重启组网",message:`确定要重启 ${i.value} 吗?`})&&s.restartVnt(t.inst.file_name)},h=async()=>{await n.confirm({title:"移除实例",message:`确定要移除已停止的实例 ${i.value} 吗?`,danger:!0,confirmText:"移除"})&&s.dismissInstance(t.inst.file_name)};return(C,y)=>(k(),S("div",{class:G(["card",[e.selectable?"cursor-pointer":"",e.selectable&&O(s).selectedInstance===e.inst.file_name?"ring-2 ring-indigo-500 dark:ring-indigo-400":""]]),onClick:u},[a("div",Jp,[a("h3",{class:"truncate text-base font-bold text-slate-900 dark:text-white",title:e.inst.file_name},N(i.value),9,Yp),a("div",Qp,[o.value.config_changed?(k(),S("span",Xp," 配置发生变化 ")):fe("",!0),a("span",{class:G([c(e.inst.status),r.value?"animate-pulse":""])},N(f(e.inst.status)),3)])]),a("div",e0,[y[0]||(y[0]=a("span",{class:"muted"},"虚拟 IP:",-1)),a("span",t0,N(o.value.ip||"-"),1)]),a("div",s0,[a("span",null,[y[1]||(y[1]=ae(" 在线 ",-1)),a("span",n0,N(o.value.online_client_num||0),1)]),a("span",null,[y[2]||(y[2]=ae(" 直连 ",-1)),a("span",o0,N(o.value.direct_client_num||0),1)]),a("span",null,[y[3]||(y[3]=ae(" 离线 ",-1)),a("span",l0,N(o.value.offline_client_num||0),1)])]),a("div",r0,[r.value?(k(),S("span",i0,[...y[4]||(y[4]=[a("span",{class:"inline-block animate-spin"},"⟳",-1),ae(" 正在停止,请稍候... ",-1)])])):(k(),S(ie,{key:1},[e.inst.status==="running"||e.inst.status==="stopped"?(k(),S("button",{key:0,class:"btn-primary btn-sm",disabled:l.value,onClick:ls(g,["stop"])},[l.value?(k(),S("span",c0,"⟳")):fe("",!0),ae(" "+N(e.inst.status==="stopped"?"重新启动":"重启"),1)],8,a0)):fe("",!0),e.inst.status!=="stopped"?(k(),S("button",{key:1,class:"btn-danger btn-sm",disabled:l.value,onClick:ls(d,["stop"])},[l.value?(k(),S("span",f0,"⟳")):fe("",!0),y[5]||(y[5]=ae(" 停止 ",-1))],8,u0)):fe("",!0),e.inst.status==="stopped"?(k(),S("button",{key:2,class:"btn-ghost btn-sm",disabled:l.value,onClick:ls(h,["stop"])},[l.value?(k(),S("span",p0,"⟳")):fe("",!0),y[6]||(y[6]=ae(" 移除 ",-1))],8,d0)):fe("",!0)],64))])],2))}},h0={class:"card p-12 text-center text-slate-500 dark:text-slate-400"},on={__name:"EmptyState",props:{text:{type:String,default:"暂无数据"}},setup(e){return(t,s)=>(k(),S("div",h0,[s[0]||(s[0]=a("svg",{class:"w-12 h-12 mx-auto mb-3 text-slate-300 dark:text-slate-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.5",d:"M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4"})],-1)),a("p",null,N(e.text),1)]))}},m0={class:"space-y-6"},g0={class:"flex flex-wrap items-end justify-between gap-4"},v0={class:"page-subtitle"},b0={class:"grid grid-cols-2 gap-4 lg:grid-cols-4"},x0={class:"card"},_0={class:"mt-2 text-2xl font-bold tabular-nums text-slate-900 dark:text-white"},y0={class:"ml-1 text-sm font-normal muted"},k0={class:"card"},w0={class:"mt-2 text-2xl font-bold tabular-nums text-slate-900 dark:text-white"},C0={class:"card"},S0={class:"mt-2 text-2xl font-bold tabular-nums text-slate-900 dark:text-white"},E0={class:"card"},T0={class:"mt-2 text-2xl font-bold tabular-nums text-slate-900 dark:text-white"},$0={class:"text-sm font-normal muted"},A0={key:1,class:"muted"},I0={class:"mb-3 flex items-center justify-between"},R0={__name:"DashboardView",setup(e){const t=Ot(),s=me(()=>Object.values(t.instances).reduce((l,r)=>l+(r?.online_client_num||0),0)),n=me(()=>{const l=t.instanceList.filter(i=>i.status==="running");return{connected:l.filter(i=>t.instances[i.file_name]?.server_info?.some(f=>f.connected)).length,total:l.length}}),o=me(()=>t.runningCount>0?`运行中 ${t.runningCount} 个实例`:t.startingCount>0?"有实例正在启动...":"全部实例已停止");return(l,r)=>{const i=Un("router-link");return k(),S("div",m0,[a("div",g0,[a("div",null,[r[0]||(r[0]=a("h1",{class:"page-title"},"总览",-1)),a("p",v0,N(o.value),1)]),ue(i,{to:"/config",class:"btn-ghost btn-sm"},{default:Ee(()=>[...r[1]||(r[1]=[ae("管理配置",-1)])]),_:1})]),a("div",b0,[a("div",x0,[r[2]||(r[2]=a("div",{class:"text-xs font-medium muted"},"运行实例",-1)),a("div",_0,[ae(N(O(t).runningCount),1),a("span",y0,"/ "+N(O(t).instanceList.length),1)])]),a("div",k0,[r[3]||(r[3]=a("div",{class:"text-xs font-medium muted"},"配置总数",-1)),a("div",w0,N(O(t).configList.length),1)]),a("div",C0,[r[4]||(r[4]=a("div",{class:"text-xs font-medium muted"},"在线设备",-1)),a("div",S0,N(s.value),1)]),a("div",E0,[r[5]||(r[5]=a("div",{class:"text-xs font-medium muted"},"服务器连接",-1)),a("div",T0,[n.value.total>0?(k(),S(ie,{key:0},[a("span",{class:G(n.value.connected>0?"text-green-600 dark:text-green-400":"text-red-500")},N(n.value.connected),3),a("span",$0,"/ "+N(n.value.total)+" 已连接",1)],64)):(k(),S("span",A0,"-"))])])]),ue(xa),a("div",null,[a("div",I0,[r[7]||(r[7]=a("h2",{class:"text-base font-bold text-slate-900 dark:text-white"},"实例概览",-1)),ue(i,{to:"/instances",class:"text-sm font-medium text-indigo-600 hover:text-indigo-500 dark:text-indigo-400"},{default:Ee(()=>[...r[6]||(r[6]=[ae("查看详情 →",-1)])]),_:1})]),O(t).instanceList.length===0?(k(),Re(on,{key:0,text:O(t).configList.length===0?"暂无配置,请先新建配置":"暂无运行中的组网,请在上方选择配置启动"},null,8,["text"])):(k(),Re(rl,{key:1,name:"card-list",tag:"div",class:"grid grid-cols-1 gap-4 md:grid-cols-2"},{default:Ee(()=>[(k(!0),S(ie,null,Te(O(t).instanceList,c=>(k(),Re(_a,{key:c.file_name,inst:c},null,8,["inst"]))),128))]),_:1}))])])}}},P0={class:"space-y-6"},O0={class:"card"},M0={class:"mb-4 text-lg font-bold text-slate-900 dark:text-white"},L0={class:"ml-2 text-sm font-medium text-indigo-600 dark:text-indigo-400"},N0={class:"grid grid-cols-1 gap-4 text-sm md:grid-cols-2"},V0={class:"flex justify-between border-b border-slate-100 pb-2 dark:border-slate-700"},j0={class:"font-mono tabular-nums text-slate-900 dark:text-white"},D0={class:"flex justify-between border-b border-slate-100 pb-2 dark:border-slate-700"},B0={class:"font-mono text-slate-900 dark:text-white"},F0={class:"flex justify-between border-b border-slate-100 pb-2 dark:border-slate-700"},U0={class:"font-mono text-slate-900 dark:text-white"},H0={class:"flex justify-between border-b border-slate-100 pb-2 dark:border-slate-700"},W0={class:"font-mono tabular-nums text-slate-900 dark:text-white"},K0={class:"flex justify-between border-b border-slate-100 pb-2 dark:border-slate-700"},G0={class:"font-mono text-indigo-600 dark:text-indigo-400"},q0={class:"flex justify-between border-b border-slate-100 pb-2 dark:border-slate-700"},z0=["title"],Z0={class:"flex justify-between border-b border-slate-100 pb-2 dark:border-slate-700"},J0={class:"text-slate-900 dark:text-white"},Y0={class:"flex justify-between border-b border-slate-100 pb-2 dark:border-slate-700"},Q0=["title"],X0={class:"mt-4 grid grid-cols-2 gap-3 md:grid-cols-4"},eh={class:"text-sm text-slate-600 dark:text-slate-300"},th={class:"mt-4"},sh={class:"flex flex-wrap gap-2"},nh={key:0,class:"text-xs text-slate-400"},oh={class:"card p-0 overflow-hidden"},lh={class:"custom-scrollbar max-h-[400px] overflow-x-auto"},rh={class:"table"},ih={class:"font-mono"},ah={class:"tabular-nums"},ch={key:0},uh={__name:"InstancesView",setup(e){const t=Ot();return(s,n)=>(k(),S("div",P0,[n[13]||(n[13]=a("div",null,[a("h1",{class:"page-title"},"实例"),a("p",{class:"page-subtitle"},"管理组网实例,点击卡片查看详情")],-1)),ue(xa),O(t).instanceList.length===0?(k(),Re(on,{key:0,text:"暂无运行中的组网,请在上方选择配置启动"})):(k(),Re(rl,{key:1,name:"card-list",tag:"div",class:"grid grid-cols-1 gap-4 md:grid-cols-2"},{default:Ee(()=>[(k(!0),S(ie,null,Te(O(t).instanceList,o=>(k(),Re(_a,{key:o.file_name,inst:o,selectable:""},null,8,["inst"]))),128))]),_:1})),O(t).selectedInstance&&O(t).selectedInfo?(k(),S(ie,{key:2},[a("div",O0,[a("h2",M0,[n[0]||(n[0]=ae(" 网络详情 ",-1)),a("span",L0,N(O(t).selectedConfigName),1)]),a("div",N0,[a("div",V0,[n[1]||(n[1]=a("span",{class:"muted"},"虚拟 IP / 掩码",-1)),a("span",j0,N(O(t).selectedInfo.ip||"-")+" / "+N(O(t).selectedInfo.prefix_len||"-"),1)]),a("div",D0,[n[2]||(n[2]=a("span",{class:"muted"},"网关",-1)),a("span",B0,N(O(t).selectedInfo.gateway||"-"),1)]),a("div",F0,[n[3]||(n[3]=a("span",{class:"muted"},"网络编号",-1)),a("span",U0,N(O(t).selectedInfo.network_code||"-"),1)]),a("div",H0,[n[4]||(n[4]=a("span",{class:"muted"},"MTU",-1)),a("span",W0,N(O(t).selectedInfo.mtu||""),1)]),a("div",K0,[n[5]||(n[5]=a("span",{class:"muted"},"NAT 类型",-1)),a("span",G0,N(O(t).selectedInfo.nat_type||"Unknown"),1)]),a("div",q0,[n[6]||(n[6]=a("span",{class:"muted"},"Public IPv6",-1)),a("span",{class:"max-w-[200px] truncate font-mono text-slate-900 dark:text-white",title:O(t).selectedInfo.public_ipv6},N(O(t).selectedInfo.public_ipv6||"-"),9,z0)]),a("div",Z0,[n[7]||(n[7]=a("span",{class:"muted"},"设备名称",-1)),a("span",J0,N(O(t).selectedInfo.name||"-"),1)]),a("div",Y0,[n[8]||(n[8]=a("span",{class:"muted"},"设备 ID",-1)),a("span",{class:"max-w-[200px] truncate font-mono text-xs text-slate-500 dark:text-slate-400",title:O(t).selectedInfo.device_id},N(O(t).selectedInfo.device_id||"-"),9,Q0)])]),a("div",X0,[(k(),S(ie,null,Te([{key:"encrypt",label:"加密"},{key:"compress",label:"压缩"},{key:"fec",label:"FEC纠错"},{key:"rtx",label:"QUIC传输"}],o=>a("div",{key:o.key,class:"flex items-center gap-2 rounded-lg bg-slate-50 px-3 py-2 dark:bg-slate-800/50"},[a("span",{class:G(["h-2 w-2 rounded-full",O(t).selectedInfo[o.key]?"bg-green-500":"bg-slate-300 dark:bg-slate-600"])},null,2),a("span",eh,N(o.label),1)])),64))]),a("div",th,[n[9]||(n[9]=a("span",{class:"mb-2 block text-sm muted"},"Public IPv4s",-1)),a("div",sh,[(k(!0),S(ie,null,Te(O(t).selectedInfo.public_ipv4s,o=>(k(),S("span",{key:o,class:"rounded border border-slate-200 bg-slate-50 px-2 py-1 font-mono text-xs tabular-nums text-green-700 dark:border-slate-600 dark:bg-slate-800 dark:text-green-300"},N(o),1))),128)),!O(t).selectedInfo.public_ipv4s||O(t).selectedInfo.public_ipv4s.length===0?(k(),S("span",nh,"无")):fe("",!0)])])]),a("div",oh,[n[12]||(n[12]=a("div",{class:"border-b border-slate-200 px-6 py-4 dark:border-slate-700"},[a("h2",{class:"text-lg font-bold text-slate-900 dark:text-white"},"服务器连接列表")],-1)),a("div",lh,[a("table",rh,[n[11]||(n[11]=a("thead",null,[a("tr",null,[a("th",null,"地址"),a("th",null,"状态"),a("th",null,"延迟"),a("th",null,"版本")])],-1)),a("tbody",null,[(k(!0),S(ie,null,Te(O(t).selectedInfo.server_info,(o,l)=>(k(),S("tr",{key:l},[a("td",ih,N(o.server),1),a("td",null,[a("span",{class:G(o.connected?"badge-green":"badge-red")},N(o.connected?"已连接":"未连接"),3)]),a("td",ah,N(o.server_rtt?o.server_rtt+" ms":"-"),1),a("td",null,N(o.server_version||"-"),1)]))),128)),!O(t).selectedInfo.server_info||O(t).selectedInfo.server_info.length===0?(k(),S("tr",ch,[...n[10]||(n[10]=[a("td",{colspan:"4",class:"text-center text-slate-400"},"暂无数据",-1)])])):fe("",!0)])])])])],64)):fe("",!0)]))}},Do=()=>({config_name:"",network_code:"",server:[""],ip:"",mtu:null,rtx:!1,fec:!1,compress:!1,no_punch:!1,input:[],output:[],no_nat:!1,no_tun:!1,port_mapping:[],allow_mapping:!1,device_name:"",device_id:"",tun_name:"",outbound_interface:"",password:"",cert_mode:"skip",fingerprint:"",udp_stun:[],tcp_stun:[],tunnel_port:null}),wr=e=>{const t=Do(),s=e.split(` -`);for(const n of s){const o=n.trim();if(!(!o||o.startsWith("#"))){if(o.includes("config_name")){const l=o.match(/config_name\s*=\s*"([^"]*)"/);l&&(t.config_name=l[1])}else if(o.includes("network_code")){const l=o.match(/network_code\s*=\s*"([^"]*)"/);l&&(t.network_code=l[1])}else if(o.startsWith("server")){const l=o.match(/server\s*=\s*\[(.*)\]/);if(l){const r=l[1].match(/"([^"]*)"/g);r&&(t.server=r.map(i=>i.replace(/"/g,"")))}}else if(o.includes("ip =")){const l=o.match(/ip\s*=\s*"([^"]*)"/);l&&(t.ip=l[1])}else if(o.includes("mtu =")){const l=o.match(/mtu\s*=\s*(\d+)/);l&&(t.mtu=parseInt(l[1]))}else if(o.match(/^rtx\s*=/))t.rtx=o.includes("true");else if(o.match(/^fec\s*=/))t.fec=o.includes("true");else if(o.match(/^compress\s*=/))t.compress=o.includes("true");else if(o.match(/^no_punch\s*=/))t.no_punch=o.includes("true");else if(o.startsWith("input")){const l=o.match(/input\s*=\s*\[(.*)\]/);if(l){const r=l[1].match(/"([^"]*)"/g);r&&(t.input=r.map(i=>i.replace(/"/g,"")))}}else if(o.startsWith("output")){const l=o.match(/output\s*=\s*\[(.*)\]/);if(l){const r=l[1].match(/"([^"]*)"/g);r&&(t.output=r.map(i=>i.replace(/"/g,"")))}}else if(o.match(/^no_nat\s*=/))t.no_nat=o.includes("true");else if(o.match(/^no_tun\s*=/))t.no_tun=o.includes("true");else if(o.startsWith("port_mapping")){const l=o.match(/port_mapping\s*=\s*\[(.*)\]/);if(l){const r=l[1].match(/"([^"]*)"/g);r&&(t.port_mapping=r.map(i=>i.replace(/"/g,"")))}}else if(o.match(/^allow_mapping\s*=/))t.allow_mapping=o.includes("true");else if(o.includes("device_name")){const l=o.match(/device_name\s*=\s*"([^"]*)"/);l&&(t.device_name=l[1])}else if(o.includes("device_id")){const l=o.match(/device_id\s*=\s*"([^"]*)"/);l&&(t.device_id=l[1])}else if(o.includes("tun_name")){const l=o.match(/tun_name\s*=\s*"([^"]*)"/);l&&(t.tun_name=l[1])}else if(o.includes("outbound_interface")){const l=o.match(/outbound_interface\s*=\s*"([^"]*)"/);l&&(t.outbound_interface=l[1])}else if(o.includes("password =")){const l=o.match(/password\s*=\s*"([^"]*)"/);l&&(t.password=l[1])}else if(o.includes("cert_mode")){const l=o.match(/cert_mode\s*=\s*"([^"]*)"/);if(l){const r=l[1];r.startsWith("finger:")?(t.cert_mode="finger",t.fingerprint=r.substring(7)):t.cert_mode=r}}else if(o.startsWith("udp_stun")){const l=o.match(/udp_stun\s*=\s*\[(.*)\]/);if(l){const r=l[1].match(/"([^"]*)"/g);r&&(t.udp_stun=r.map(i=>i.replace(/"/g,"")))}}else if(o.startsWith("tcp_stun")){const l=o.match(/tcp_stun\s*=\s*\[(.*)\]/);if(l){const r=l[1].match(/"([^"]*)"/g);r&&(t.tcp_stun=r.map(i=>i.replace(/"/g,"")))}}}}return t},xo=e=>{let t="";e.config_name&&(t+=`# 配置名称 +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))n(o);new MutationObserver(o=>{for(const l of o)if(l.type==="childList")for(const r of l.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function s(o){const l={};return o.integrity&&(l.integrity=o.integrity),o.referrerPolicy&&(l.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?l.credentials="include":o.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function n(o){if(o.ep)return;o.ep=!0;const l=s(o);fetch(o.href,l)}})();function Uo(e){const t=Object.create(null);for(const s of e.split(","))t[s]=1;return s=>s in t}const ke={},vs=[],bt=()=>{},Sr=()=>!1,Tn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),An=e=>e.startsWith("onUpdate:"),Pe=Object.assign,Ho=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},ka=Object.prototype.hasOwnProperty,ve=(e,t)=>ka.call(e,t),Q=Array.isArray,bs=e=>en(e)==="[object Map]",$n=e=>en(e)==="[object Set]",xl=e=>en(e)==="[object Date]",le=e=>typeof e=="function",Ce=e=>typeof e=="string",Xe=e=>typeof e=="symbol",be=e=>e!==null&&typeof e=="object",Er=e=>(be(e)||le(e))&&le(e.then)&&le(e.catch),Tr=Object.prototype.toString,en=e=>Tr.call(e),wa=e=>en(e).slice(8,-1),Ar=e=>en(e)==="[object Object]",In=e=>Ce(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Vs=Uo(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Rn=e=>{const t=Object.create(null);return(s=>t[s]||(t[s]=e(s)))},Ca=/-\w/g,Ge=Rn(e=>e.replace(Ca,t=>t.slice(1).toUpperCase())),Sa=/\B([A-Z])/g,is=Rn(e=>e.replace(Sa,"-$1").toLowerCase()),Pn=Rn(e=>e.charAt(0).toUpperCase()+e.slice(1)),eo=Rn(e=>e?`on${Pn(e)}`:""),vt=(e,t)=>!Object.is(e,t),fn=(e,...t)=>{for(let s=0;s{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:n,value:s})},Wo=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Ea=e=>{const t=Ce(e)?Number(e):NaN;return isNaN(t)?e:t};let _l;const On=()=>_l||(_l=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Mn(e){if(Q(e)){const t={};for(let s=0;s{if(s){const n=s.split(Aa);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function G(e){let t="";if(Ce(e))t=e;else if(Q(e))for(let s=0;stn(s,t))}const Pr=e=>!!(e&&e.__v_isRef===!0),N=e=>Ce(e)?e:e==null?"":Q(e)||be(e)&&(e.toString===Tr||!le(e.toString))?Pr(e)?N(e.value):JSON.stringify(e,Or,2):String(e),Or=(e,t)=>Pr(t)?Or(e,t.value):bs(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[n,o],l)=>(s[to(n,l)+" =>"]=o,s),{})}:$n(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>to(s))}:Xe(t)?to(t):be(t)&&!Q(t)&&!Ar(t)?String(t):t,to=(e,t="")=>{var s;return Xe(e)?`Symbol(${(s=e.description)!=null?s:t})`:e};let Me;class Mr{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&Me&&(Me.active?(this.parent=Me,this.index=(Me.scopes||(Me.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,s;if(this.scopes){const n=this.scopes.slice();for(t=0,s=n.length;t0&&--this._on===0){if(Me===this)Me=this.prevScope;else{let t=Me;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let s,n;for(s=0,n=this.effects.length;s0)return;if(Ds){let t=Ds;for(Ds=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;js;){let t=js;for(js=void 0;t;){const s=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(n){e||(e=n)}t=s}}if(e)throw e}function Br(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Fr(e){let t,s=e.depsTail,n=s;for(;n;){const o=n.prevDep;n.version===-1?(n===s&&(s=o),qo(n),La(n)):t=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=o}e.deps=t,e.depsTail=s}function yo(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ur(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ur(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Ks)||(e.globalVersion=Ks,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!yo(e))))return;e.flags|=2;const t=e.dep,s=we,n=lt;we=e,lt=!0;try{Br(e);const o=e.fn(e._value);(t.version===0||vt(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{we=s,lt=n,Fr(e),e.flags&=-3}}function qo(e,t=!1){const{dep:s,prevSub:n,nextSub:o}=e;if(n&&(n.nextSub=o,e.prevSub=void 0),o&&(o.prevSub=n,e.nextSub=void 0),s.subs===e&&(s.subs=n,!n&&s.computed)){s.computed.flags&=-5;for(let l=s.computed.deps;l;l=l.nextDep)qo(l,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function La(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}let lt=!0;const Hr=[];function $t(){Hr.push(lt),lt=!1}function It(){const e=Hr.pop();lt=e===void 0?!0:e}function yl(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=we;we=void 0;try{t()}finally{we=s}}}let Ks=0;class Na{constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class zo{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!we||!lt||we===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==we)s=this.activeLink=new Na(we,this),we.deps?(s.prevDep=we.depsTail,we.depsTail.nextDep=s,we.depsTail=s):we.deps=we.depsTail=s,Wr(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const n=s.nextDep;n.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=n),s.prevDep=we.depsTail,s.nextDep=void 0,we.depsTail.nextDep=s,we.depsTail=s,we.deps===s&&(we.deps=n)}return s}trigger(t){this.version++,Ks++,this.notify(t)}notify(t){Ko();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{Go()}}}function Wr(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let n=t.deps;n;n=n.nextDep)Wr(n)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const pn=new WeakMap,ns=Symbol(""),ko=Symbol(""),Gs=Symbol("");function je(e,t,s){if(lt&&we){let n=pn.get(e);n||pn.set(e,n=new Map);let o=n.get(s);o||(n.set(s,o=new zo),o.map=n,o.key=s),o.track()}}function St(e,t,s,n,o,l){const r=pn.get(e);if(!r){Ks++;return}const i=c=>{c&&c.trigger()};if(Ko(),t==="clear")r.forEach(i);else{const c=Q(e),f=c&&In(s);if(c&&s==="length"){const u=Number(n);r.forEach((d,g)=>{(g==="length"||g===Gs||!Xe(g)&&g>=u)&&i(d)})}else switch((s!==void 0||r.has(void 0))&&i(r.get(s)),f&&i(r.get(Gs)),t){case"add":c?f&&i(r.get("length")):(i(r.get(ns)),bs(e)&&i(r.get(ko)));break;case"delete":c||(i(r.get(ns)),bs(e)&&i(r.get(ko)));break;case"set":bs(e)&&i(r.get(ns));break}}Go()}function Va(e,t){const s=pn.get(e);return s&&s.get(t)}function fs(e){const t=pe(e);return t===e?t:(je(t,"iterate",Gs),Ye(e)?t:t.map(rt))}function Ln(e){return je(e=pe(e),"iterate",Gs),e}function mt(e,t){return Pt(e)?ys(Tt(e)?rt(t):t):rt(t)}const ja={__proto__:null,[Symbol.iterator](){return no(this,Symbol.iterator,e=>mt(this,e))},concat(...e){return fs(this).concat(...e.map(t=>Q(t)?fs(t):t))},entries(){return no(this,"entries",e=>(e[1]=mt(this,e[1]),e))},every(e,t){return yt(this,"every",e,t,void 0,arguments)},filter(e,t){return yt(this,"filter",e,t,s=>s.map(n=>mt(this,n)),arguments)},find(e,t){return yt(this,"find",e,t,s=>mt(this,s),arguments)},findIndex(e,t){return yt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return yt(this,"findLast",e,t,s=>mt(this,s),arguments)},findLastIndex(e,t){return yt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return yt(this,"forEach",e,t,void 0,arguments)},includes(...e){return oo(this,"includes",e)},indexOf(...e){return oo(this,"indexOf",e)},join(e){return fs(this).join(e)},lastIndexOf(...e){return oo(this,"lastIndexOf",e)},map(e,t){return yt(this,"map",e,t,void 0,arguments)},pop(){return As(this,"pop")},push(...e){return As(this,"push",e)},reduce(e,...t){return kl(this,"reduce",e,t)},reduceRight(e,...t){return kl(this,"reduceRight",e,t)},shift(){return As(this,"shift")},some(e,t){return yt(this,"some",e,t,void 0,arguments)},splice(...e){return As(this,"splice",e)},toReversed(){return fs(this).toReversed()},toSorted(e){return fs(this).toSorted(e)},toSpliced(...e){return fs(this).toSpliced(...e)},unshift(...e){return As(this,"unshift",e)},values(){return no(this,"values",e=>mt(this,e))}};function no(e,t,s){const n=Ln(e),o=n[t]();return n!==e&&!Ye(e)&&(o._next=o.next,o.next=()=>{const l=o._next();return l.done||(l.value=s(l.value)),l}),o}const Da=Array.prototype;function yt(e,t,s,n,o,l){const r=Ln(e),i=r!==e&&!Ye(e),c=r[t];if(c!==Da[t]){const d=c.apply(e,l);return i?rt(d):d}let f=s;r!==e&&(i?f=function(d,g){return s.call(this,mt(e,d),g,e)}:s.length>2&&(f=function(d,g){return s.call(this,d,g,e)}));const u=c.call(r,f,n);return i&&o?o(u):u}function kl(e,t,s,n){const o=Ln(e),l=o!==e&&!Ye(e);let r=s,i=!1;o!==e&&(l?(i=n.length===0,r=function(f,u,d){return i&&(i=!1,f=mt(e,f)),s.call(this,f,mt(e,u),d,e)}):s.length>3&&(r=function(f,u,d){return s.call(this,f,u,d,e)}));const c=o[t](r,...n);return i?mt(e,c):c}function oo(e,t,s){const n=pe(e);je(n,"iterate",Gs);const o=n[t](...s);return(o===-1||o===!1)&&Nn(s[0])?(s[0]=pe(s[0]),n[t](...s)):o}function As(e,t,s=[]){$t(),Ko();const n=pe(e)[t].apply(e,s);return Go(),It(),n}const Ba=Uo("__proto__,__v_isRef,__isVue"),Kr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Xe));function Fa(e){Xe(e)||(e=String(e));const t=pe(this);return je(t,"has",e),t.hasOwnProperty(e)}class Gr{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,n){if(s==="__v_skip")return t.__v_skip;const o=this._isReadonly,l=this._isShallow;if(s==="__v_isReactive")return!o;if(s==="__v_isReadonly")return o;if(s==="__v_isShallow")return l;if(s==="__v_raw")return n===(o?l?Ya:Jr:l?Zr:zr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const r=Q(t);if(!o){let c;if(r&&(c=ja[s]))return c;if(s==="hasOwnProperty")return Fa}const i=Reflect.get(t,s,Ae(t)?t:n);if((Xe(s)?Kr.has(s):Ba(s))||(o||je(t,"get",s),l))return i;if(Ae(i)){const c=r&&In(s)?i:i.value;return o&&be(c)?Co(c):c}return be(i)?o?Co(i):Rt(i):i}}class qr extends Gr{constructor(t=!1){super(!1,t)}set(t,s,n,o){let l=t[s];const r=Q(t)&&In(s);if(!this._isShallow){const f=Pt(l);if(!Ye(n)&&!Pt(n)&&(l=pe(l),n=pe(n)),!r&&Ae(l)&&!Ae(n))return f||(l.value=n),!0}const i=r?Number(s)e,ln=e=>Reflect.getPrototypeOf(e);function Ga(e,t,s){return function(...n){const o=this.__v_raw,l=pe(o),r=bs(l),i=e==="entries"||e===Symbol.iterator&&r,c=e==="keys"&&r,f=o[e](...n),u=s?wo:t?ys:rt;return!t&&je(l,"iterate",c?ko:ns),Pe(Object.create(f),{next(){const{value:d,done:g}=f.next();return g?{value:d,done:g}:{value:i?[u(d[0]),u(d[1])]:u(d),done:g}}})}}function rn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function qa(e,t){const s={get(o){const l=this.__v_raw,r=pe(l),i=pe(o);e||(vt(o,i)&&je(r,"get",o),je(r,"get",i));const{has:c}=ln(r),f=t?wo:e?ys:rt;if(c.call(r,o))return f(l.get(o));if(c.call(r,i))return f(l.get(i));l!==r&&l.get(o)},get size(){const o=this.__v_raw;return!e&&je(pe(o),"iterate",ns),o.size},has(o){const l=this.__v_raw,r=pe(l),i=pe(o);return e||(vt(o,i)&&je(r,"has",o),je(r,"has",i)),o===i?l.has(o):l.has(o)||l.has(i)},forEach(o,l){const r=this,i=r.__v_raw,c=pe(i),f=t?wo:e?ys:rt;return!e&&je(c,"iterate",ns),i.forEach((u,d)=>o.call(l,f(u),f(d),r))}};return Pe(s,e?{add:rn("add"),set:rn("set"),delete:rn("delete"),clear:rn("clear")}:{add(o){const l=pe(this),r=ln(l),i=pe(o),c=!t&&!Ye(o)&&!Pt(o)?i:o;return r.has.call(l,c)||vt(o,c)&&r.has.call(l,o)||vt(i,c)&&r.has.call(l,i)||(l.add(c),St(l,"add",c,c)),this},set(o,l){!t&&!Ye(l)&&!Pt(l)&&(l=pe(l));const r=pe(this),{has:i,get:c}=ln(r);let f=i.call(r,o);f||(o=pe(o),f=i.call(r,o));const u=c.call(r,o);return r.set(o,l),f?vt(l,u)&&St(r,"set",o,l):St(r,"add",o,l),this},delete(o){const l=pe(this),{has:r,get:i}=ln(l);let c=r.call(l,o);c||(o=pe(o),c=r.call(l,o)),i&&i.call(l,o);const f=l.delete(o);return c&&St(l,"delete",o,void 0),f},clear(){const o=pe(this),l=o.size!==0,r=o.clear();return l&&St(o,"clear",void 0,void 0),r}}),["keys","values","entries",Symbol.iterator].forEach(o=>{s[o]=Ga(o,e,t)}),s}function Zo(e,t){const s=qa(e,t);return(n,o,l)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?n:Reflect.get(ve(s,o)&&o in n?s:n,o,l)}const za={get:Zo(!1,!1)},Za={get:Zo(!1,!0)},Ja={get:Zo(!0,!1)};const zr=new WeakMap,Zr=new WeakMap,Jr=new WeakMap,Ya=new WeakMap;function Qa(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Rt(e){return Pt(e)?e:Jo(e,!1,Ha,za,zr)}function Yr(e){return Jo(e,!1,Ka,Za,Zr)}function Co(e){return Jo(e,!0,Wa,Ja,Jr)}function Jo(e,t,s,n,o){if(!be(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const l=o.get(e);if(l)return l;const r=Qa(wa(e));if(r===0)return e;const i=new Proxy(e,r===2?n:s);return o.set(e,i),i}function Tt(e){return Pt(e)?Tt(e.__v_raw):!!(e&&e.__v_isReactive)}function Pt(e){return!!(e&&e.__v_isReadonly)}function Ye(e){return!!(e&&e.__v_isShallow)}function Nn(e){return e?!!e.__v_raw:!1}function pe(e){const t=e&&e.__v_raw;return t?pe(t):e}function Yo(e){return!ve(e,"__v_skip")&&Object.isExtensible(e)&&$r(e,"__v_skip",!0),e}const rt=e=>be(e)?Rt(e):e,ys=e=>be(e)?Co(e):e;function Ae(e){return e?e.__v_isRef===!0:!1}function se(e){return Qr(e,!1)}function Xa(e){return Qr(e,!0)}function Qr(e,t){return Ae(e)?e:new ec(e,t)}class ec{constructor(t,s){this.dep=new zo,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:pe(t),this._value=s?t:rt(t),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(t){const s=this._rawValue,n=this.__v_isShallow||Ye(t)||Pt(t);t=n?t:pe(t),vt(t,s)&&(this._rawValue=t,this._value=n?t:rt(t),this.dep.trigger())}}function O(e){return Ae(e)?e.value:e}const tc={get:(e,t,s)=>t==="__v_raw"?e:O(Reflect.get(e,t,s)),set:(e,t,s,n)=>{const o=e[t];return Ae(o)&&!Ae(s)?(o.value=s,!0):Reflect.set(e,t,s,n)}};function Xr(e){return Tt(e)?e:new Proxy(e,tc)}function sc(e){const t=Q(e)?new Array(e.length):{};for(const s in e)t[s]=oc(e,s);return t}class nc{constructor(t,s,n){this._object=t,this._defaultValue=n,this.__v_isRef=!0,this._value=void 0,this._key=Xe(s)?s:String(s),this._raw=pe(t);let o=!0,l=t;if(!Q(t)||Xe(this._key)||!In(this._key))do o=!Nn(l)||Ye(l);while(o&&(l=l.__v_raw));this._shallow=o}get value(){let t=this._object[this._key];return this._shallow&&(t=O(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&Ae(this._raw[this._key])){const s=this._object[this._key];if(Ae(s)){s.value=t;return}}this._object[this._key]=t}get dep(){return Va(this._raw,this._key)}}function oc(e,t,s){return new nc(e,t,s)}class lc{constructor(t,s,n){this.fn=t,this.setter=s,this._value=void 0,this.dep=new zo(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Ks-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&we!==this)return Dr(this,!0),!0}get value(){const t=this.dep.track();return Ur(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function rc(e,t,s=!1){let n,o;return le(e)?n=e:(n=e.get,o=e.set),new lc(n,o,s)}const an={},hn=new WeakMap;let Yt;function ic(e,t=!1,s=Yt){if(s){let n=hn.get(s);n||hn.set(s,n=[]),n.push(e)}}function ac(e,t,s=ke){const{immediate:n,deep:o,once:l,scheduler:r,augmentJob:i,call:c}=s,f=b=>o?b:Ye(b)||o===!1||o===0?Et(b,1):Et(b);let u,d,g,h,C=!1,k=!1;if(Ae(e)?(d=()=>e.value,C=Ye(e)):Tt(e)?(d=()=>f(e),C=!0):Q(e)?(k=!0,C=e.some(b=>Tt(b)||Ye(b)),d=()=>e.map(b=>{if(Ae(b))return b.value;if(Tt(b))return f(b);if(le(b))return c?c(b,2):b()})):le(e)?t?d=c?()=>c(e,2):e:d=()=>{if(g){$t();try{g()}finally{It()}}const b=Yt;Yt=u;try{return c?c(e,3,[h]):e(h)}finally{Yt=b}}:d=bt,t&&o){const b=d,y=o===!0?1/0:o;d=()=>Et(b(),y)}const L=Nr(),A=()=>{u.stop(),L&&L.active&&Ho(L.effects,u)};if(l&&t){const b=t;t=(...y)=>{const D=b(...y);return A(),D}}let _=k?new Array(e.length).fill(an):an;const p=b=>{if(!(!(u.flags&1)||!u.dirty&&!b))if(t){const y=u.run();if(b||o||C||(k?y.some((D,B)=>vt(D,_[B])):vt(y,_))){g&&g();const D=Yt;Yt=u;try{const B=[y,_===an?void 0:k&&_[0]===an?[]:_,h];_=y,c?c(t,3,B):t(...B)}finally{Yt=D}}}else u.run()};return i&&i(p),u=new Vr(d),u.scheduler=r?()=>r(p,!1):p,h=b=>ic(b,!1,u),g=u.onStop=()=>{const b=hn.get(u);if(b){if(c)c(b,4);else for(const y of b)y();hn.delete(u)}},t?n?p(!0):_=u.run():r?r(p.bind(null,!0),!0):u.run(),A.pause=u.pause.bind(u),A.resume=u.resume.bind(u),A.stop=A,A}function Et(e,t=1/0,s){if(t<=0||!be(e)||e.__v_skip||(s=s||new Map,(s.get(e)||0)>=t))return e;if(s.set(e,t),t--,Ae(e))Et(e.value,t,s);else if(Q(e))for(let n=0;n{Et(n,t,s)});else if(Ar(e)){for(const n in e)Et(e[n],t,s);for(const n of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,n)&&Et(e[n],t,s)}return e}function sn(e,t,s,n){try{return n?e(...n):e()}catch(o){Vn(o,t,s)}}function nt(e,t,s,n){if(le(e)){const o=sn(e,t,s,n);return o&&Er(o)&&o.catch(l=>{Vn(l,t,s)}),o}if(Q(e)){const o=[];for(let l=0;l>>1,o=Ke[n],l=qs(o);l=qs(s)?Ke.push(e):Ke.splice(uc(t),0,e),e.flags|=1,ti()}}function ti(){mn||(mn=ei.then(ni))}function fc(e){if(!Q(e))Ft&&e.id===-1?Ft.splice(ms+1,0,e):e.flags&1||(xs.push(e),e.flags|=1);else for(let t=0;tqs(s)-qs(n));if(xs.length=0,Ft){for(let s=0;se.id==null?e.flags&2?-1:1/0:e.id;function ni(e){try{for(ht=0;ht{n._d&&_n(-1);const l=gn(t),r=At.length;let i;try{i=e(...o)}finally{for(let c=At.length;c>r;c--)ol();gn(l),n._d&&_n(1)}return i};return n._n=!0,n._c=!0,n._d=!0,n}function xe(e,t){if(Ne===null)return e;const s=Kn(Ne),n=e.dirs||(e.dirs=[]);for(let o=0;o1)return s&&le(t)?t.call(n&&n.proxy):t}}function dc(){return!!(Es()||os)}const pc=Symbol.for("v-scx"),hc=()=>Qe(pc);function Ve(e,t,s){return li(e,t,s)}function li(e,t,s=ke){const{immediate:n,deep:o,flush:l,once:r}=s,i=Pe({},s),c=t&&n||!t&&l!=="post";let f;if(Qs){if(l==="sync"){const h=hc();f=h.__watcherHandles||(h.__watcherHandles=[])}else if(!c){const h=()=>{};return h.stop=bt,h.resume=bt,h.pause=bt,h}}const u=Be;i.call=(h,C,k)=>nt(h,u,C,k);let d=!1;l==="post"?i.scheduler=h=>{He(h,u&&u.suspense)}:l!=="sync"&&(d=!0,i.scheduler=(h,C)=>{C?h():Qo(h)}),i.augmentJob=h=>{t&&(h.flags|=4),d&&(h.flags|=2,u&&(h.id=u.uid,h.i=u))};const g=ac(e,t,i);return Qs&&(f?f.push(g):c&&g()),g}function mc(e,t,s){const n=this.proxy,o=Ce(e)?e.includes(".")?ri(n,e):()=>n[e]:e.bind(n,n);let l;le(t)?l=t:(l=t.handler,s=t);const r=nn(this),i=li(o,l.bind(n),s);return r(),i}function ri(e,t){const s=t.split(".");return()=>{let n=e;for(let o=0;oe.__isTeleport,Qt=e=>e&&(e.disabled||e.disabled===""),gc=e=>e&&(e.defer||e.defer===""),Cl=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Sl=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,So=(e,t)=>{const s=e&&e.to;return Ce(s)?t?t(s):null:s},vc={name:"Teleport",__isTeleport:!0,process(e,t,s,n,o,l,r,i,c,f){const{mc:u,pc:d,pbc:g,o:{insert:h,querySelector:C,createText:k,createComment:L,parentNode:A}}=f,_=Qt(t.props);let{dynamicChildren:p}=t;const b=(B,H,M)=>{B.shapeFlag&16&&u(B.children,H,M,o,l,r,i,c)},y=(B=t)=>{const H=Qt(B.props),M=B.target=So(B.props,C),z=Eo(M,B,k,h);M&&(r!=="svg"&&Cl(M)?r="svg":r!=="mathml"&&Sl(M)&&(r="mathml"),o&&o.isCE&&(o.ce._teleportTargets||(o.ce._teleportTargets=new Set)).add(M),H||(b(B,M,z),Os(B,!1)))},D=B=>{const H=()=>{if(jt.get(B)===H){if(jt.delete(B),Qt(B.props)){const M=A(B.el)||s;b(B,M,B.anchor),Os(B,!0)}y(B)}};jt.set(B,H),He(H,l)};if(e==null){const B=t.el=k(""),H=t.anchor=k("");if(h(B,s,n),h(H,s,n),gc(t.props)||l&&l.pendingBranch){D(t);return}_&&(b(t,s,H),Os(t,!0)),y()}else{t.el=e.el;const B=t.anchor=e.anchor,H=jt.get(e);if(H){H.flags|=8,jt.delete(e),D(t);return}t.targetStart=e.targetStart;const M=t.target=e.target,z=t.targetAnchor=e.targetAnchor,oe=Qt(e.props),F=oe?s:M,Z=oe?B:z;if(r==="svg"||Cl(M)?r="svg":(r==="mathml"||Sl(M))&&(r="mathml"),p?(g(e.dynamicChildren,p,F,o,l,r,i),nl(e,t,!0)):c||d(e,t,F,Z,o,l,r,i,!1),_)oe?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):cn(t,s,B,f,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const R=So(t.props,C);R&&(t.target=R,cn(t,R,null,f,0))}else oe&&cn(t,M,z,f,1);Os(t,_)}},remove(e,t,s,{um:n,o:{remove:o}},l){const{shapeFlag:r,children:i,anchor:c,targetStart:f,targetAnchor:u,target:d,props:g}=e,h=Qt(g),C=l||!h,k=jt.get(e);if(k&&(k.flags|=8,jt.delete(e)),d&&(o(f),o(u)),l&&o(c),!k&&(h||d)&&r&16)for(let L=0;L{e.isMounted=!0}),Fn(()=>{e.isUnmounting=!0}),e}const tt=[Function,Array],ci={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:tt,onEnter:tt,onAfterEnter:tt,onEnterCancelled:tt,onBeforeLeave:tt,onLeave:tt,onAfterLeave:tt,onLeaveCancelled:tt,onBeforeAppear:tt,onAppear:tt,onAfterAppear:tt,onAppearCancelled:tt},ui=e=>{const t=e.subTree;return t.component?ui(t.component):t},xc={name:"BaseTransition",props:ci,setup(e,{slots:t}){const s=Es(),n=ai();return()=>{const o=t.default&&el(t.default(),!0),l=o&&o.length?fi(o):s.subTree?fe():void 0;if(!l)return;const r=pe(e),{mode:i}=r;if(n.isLeaving)return lo(l);const c=vn(l);if(!c)return lo(l);let f=zs(c,r,n,s,d=>f=d);c.type!==De&&rs(c,f);let u=s.subTree&&vn(s.subTree);if(u&&u.type!==De&&!Xt(u,c)&&ui(s).type!==De){let d=zs(u,r,n,s);if(rs(u,d),i==="out-in"&&c.type!==De)return n.isLeaving=!0,d.afterLeave=()=>{n.isLeaving=!1,s.job.flags&8||s.update(),delete d.afterLeave,u=void 0},lo(l);i==="in-out"&&c.type!==De?d.delayLeave=(g,h,C)=>{const k=di(n,u);k[String(u.key)]=u,g[st]=()=>{h(),g[st]=void 0,delete f.delayedLeave,u=void 0},f.delayedLeave=()=>{C(),delete f.delayedLeave,u=void 0}}:u=void 0}else u&&(u=void 0);return l}}};function fi(e){let t=e[0];if(e.length>1){for(const s of e)if(s.type!==De){t=s;break}}return t}const _c=xc;function di(e,t){const{leavingVNodes:s}=e;let n=s.get(t.type);return n||(n=Object.create(null),s.set(t.type,n)),n}function zs(e,t,s,n,o){const{appear:l,mode:r,persisted:i=!1,onBeforeEnter:c,onEnter:f,onAfterEnter:u,onEnterCancelled:d,onBeforeLeave:g,onLeave:h,onAfterLeave:C,onLeaveCancelled:k,onBeforeAppear:L,onAppear:A,onAfterAppear:_,onAppearCancelled:p}=t,b=String(e.key),y=di(s,e),D=(M,z)=>{M&&nt(M,n,9,z)},B=(M,z)=>{const oe=z[1];D(M,z),Q(M)?M.every(F=>F.length<=1)&&oe():M.length<=1&&oe()},H={mode:r,persisted:i,beforeEnter(M){let z=c;if(!s.isMounted)if(l)z=L||c;else return;M[st]&&M[st](!0);const oe=y[b];oe&&Xt(e,oe)&&oe.el[st]&&oe.el[st](),D(z,[M])},enter(M){if(y[b]===e)return;let z=f,oe=u,F=d;if(!s.isMounted)if(l)z=A||f,oe=_||u,F=p||d;else return;let Z=!1;M[$s]=ee=>{Z||(Z=!0,ee?D(F,[M]):D(oe,[M]),H.delayedLeave&&H.delayedLeave(),M[$s]=void 0)};const R=M[$s].bind(null,!1);z?B(z,[M,R]):R()},leave(M,z){const oe=String(e.key);if(M[$s]&&M[$s](!0),s.isUnmounting)return z();D(g,[M]);let F=!1;M[st]=R=>{F||(F=!0,z(),R?D(k,[M]):D(C,[M]),M[st]=void 0,y[oe]===e&&delete y[oe])};const Z=M[st].bind(null,!1);y[oe]=e,h?B(h,[M,Z]):Z()},clone(M){const z=zs(M,t,s,n,o);return o&&o(z),z}};return H}function lo(e){if(Dn(e))return e=Ht(e),e.children=null,e}function vn(e){if(!Dn(e))return jn(e.type)&&e.children?fi(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:s}=e;if(s){if(t&16)return s[0];if(t&32&&le(s.default))return s.default()}}function rs(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const s=e.component.subTree;rs(jn(s.type)&&vn(s)||s,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function el(e,t=!1,s){let n=[],o=0;for(let l=0;l1)for(let l=0;lFs(k,t&&(Q(t)?t[L]:t),s,n,o));return}if(_s(n)&&!o){n.shapeFlag&512&&n.type.__asyncResolved&&n.component.subTree.component&&Fs(e,t,s,n.component.subTree);return}const l=n.shapeFlag&4?Kn(n.component):n.el,r=o?null:l,{i,r:c}=e,f=t&&t.r,u=i.refs===ke?i.refs={}:i.refs,d=i.setupState,g=pe(d),h=d===ke?Sr:k=>El(u,k)?!1:ve(g,k),C=(k,L)=>!(L&&El(u,L));if(f!=null&&f!==c){if(Tl(t),Ce(f))u[f]=null,h(f)&&(d[f]=null);else if(Ae(f)){const k=t;C(f,k.k)&&(f.value=null),k.k&&(u[k.k]=null)}}if(le(c))sn(c,i,12,[r,u]);else{const k=Ce(c),L=Ae(c);if(k||L){const A=()=>{if(e.f){const _=k?h(c)?d[c]:u[c]:C()||!e.k?c.value:u[e.k];if(o)Q(_)&&Ho(_,l);else if(Q(_))_.includes(l)||_.push(l);else if(k)u[c]=[l],h(c)&&(d[c]=u[c]);else{const p=[l];C(c,e.k)&&(c.value=p),e.k&&(u[e.k]=p)}}else k?(u[c]=r,h(c)&&(d[c]=r)):L&&(C(c,e.k)&&(c.value=r),e.k&&(u[e.k]=r))};if(r){const _=()=>{A(),bn.delete(e)};_.id=-1,bn.set(e,_),He(_,s)}else Tl(e),A()}}}function Tl(e){const t=bn.get(e);t&&(t.flags|=8,bn.delete(e))}On().requestIdleCallback;On().cancelIdleCallback;const _s=e=>!!e.type.__asyncLoader,Dn=e=>e.type.__isKeepAlive;function kc(e,t){mi(e,"a",t)}function wc(e,t){mi(e,"da",t)}function mi(e,t,s=Be){const n=e.__wdc||(e.__wdc=()=>{let o=s;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(Bn(t,n,s),s){let o=s.parent;for(;o&&o.parent;)Dn(o.parent.vnode)&&Cc(n,t,s,o),o=o.parent}}function Cc(e,t,s,n){const o=Bn(t,e,n,!0);Ss(()=>{Ho(n[t],o)},s)}function Bn(e,t,s=Be,n=!1){if(s){const o=s[e]||(s[e]=[]),l=t.__weh||(t.__weh=(...r)=>{$t();const i=nn(s),c=nt(t,s,e,r);return i(),It(),c});return n?o.unshift(l):o.push(l),l}}const Ot=e=>(t,s=Be)=>{(!Qs||e==="sp")&&Bn(e,(...n)=>t(...n),s)},Sc=Ot("bm"),_t=Ot("m"),Ec=Ot("bu"),gi=Ot("u"),Fn=Ot("bum"),Ss=Ot("um"),Tc=Ot("sp"),Ac=Ot("rtg"),$c=Ot("rtc");function Ic(e,t=Be){Bn("ec",e,t)}const vi="components";function Un(e,t){return xi(vi,e,!0,t)||e}const bi=Symbol.for("v-ndc");function Rc(e){return Ce(e)?xi(vi,e,!1)||e:e||bi}function xi(e,t,s=!0,n=!1){const o=Ne||Be;if(o){const l=o.type;{const i=pu(l,!1);if(i&&(i===t||i===Ge(t)||i===Pn(Ge(t))))return l}const r=Al(o[e]||l[e],t)||Al(o.appContext[e],t);return!r&&n?l:r}}function Al(e,t){return e&&(e[t]||e[Ge(t)]||e[Pn(Ge(t))])}function Te(e,t,s,n){let o;const l=s,r=Q(e);if(r||Ce(e)){const i=r&&Tt(e);let c=!1,f=!1;i&&(c=!Ye(e),f=Pt(e),e=Ln(e)),o=new Array(e.length);for(let u=0,d=e.length;ut(i,c,void 0,l));else{const i=Object.keys(e);o=new Array(i.length);for(let c=0,f=i.length;c0;return t!=="default"&&(f.name=t),w(),Re(ie,null,[ue("slot",f,n)],u?-2:64)}let r=e[t];r&&r._c&&(r._d=!1);const i=At.length;w();let c;try{const f=r&&_i(r(s)),u=s.key||l||f&&f.key;c=Re(ie,{key:(u&&!Xe(u)?u:`_${t}`)+(!f&&n?"_fb":"")},f||(n?n():[]),f&&e._===1?64:-2)}catch(f){for(let u=At.length;u>i;u--)ol();throw f}finally{r&&r._c&&(r._d=!0)}return c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),c}function _i(e){return e.some(t=>Js(t)?!(t.type===De||t.type===ie&&!_i(t.children)):!0)?e:null}const To=e=>e?Bi(e)?Kn(e):To(e.parent):null,Us=Pe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>To(e.parent),$root:e=>To(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ki(e),$forceUpdate:e=>e.f||(e.f=()=>{Qo(e.update)}),$nextTick:e=>e.n||(e.n=xt.bind(e.proxy)),$watch:e=>mc.bind(e)}),io=(e,t)=>e!==ke&&!e.__isScriptSetup&&ve(e,t),Pc={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:n,data:o,props:l,accessCache:r,type:i,appContext:c}=e;if(t[0]!=="$"){const g=r[t];if(g!==void 0)switch(g){case 1:return n[t];case 2:return o[t];case 4:return s[t];case 3:return l[t]}else{if(io(n,t))return r[t]=1,n[t];if(o!==ke&&ve(o,t))return r[t]=2,o[t];if(ve(l,t))return r[t]=3,l[t];if(s!==ke&&ve(s,t))return r[t]=4,s[t];Ao&&(r[t]=0)}}const f=Us[t];let u,d;if(f)return t==="$attrs"&&je(e.attrs,"get",""),f(e);if((u=i.__cssModules)&&(u=u[t]))return u;if(s!==ke&&ve(s,t))return r[t]=4,s[t];if(d=c.config.globalProperties,ve(d,t))return d[t]},set({_:e},t,s){const{data:n,setupState:o,ctx:l}=e;return io(o,t)?(o[t]=s,!0):n!==ke&&ve(n,t)?(n[t]=s,!0):ve(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(l[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:n,appContext:o,props:l,type:r}},i){let c;return!!(s[i]||e!==ke&&i[0]!=="$"&&ve(e,i)||io(t,i)||ve(l,i)||ve(n,i)||ve(Us,i)||ve(o.config.globalProperties,i)||(c=r.__cssModules)&&c[i])},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:ve(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function $l(e){return Q(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let Ao=!0;function Oc(e){const t=ki(e),s=e.proxy,n=e.ctx;Ao=!1,t.beforeCreate&&Il(t.beforeCreate,e,"bc");const{data:o,computed:l,methods:r,watch:i,provide:c,inject:f,created:u,beforeMount:d,mounted:g,beforeUpdate:h,updated:C,activated:k,deactivated:L,beforeDestroy:A,beforeUnmount:_,destroyed:p,unmounted:b,render:y,renderTracked:D,renderTriggered:B,errorCaptured:H,serverPrefetch:M,expose:z,inheritAttrs:oe,components:F,directives:Z,filters:R}=t;if(f&&Mc(f,n,null),r)for(const te in r){const re=r[te];le(re)&&(n[te]=re.bind(s))}if(o){const te=o.call(s,s);be(te)&&(e.data=Rt(te))}if(Ao=!0,l)for(const te in l){const re=l[te],Fe=le(re)?re.bind(s,s):le(re.get)?re.get.bind(s,s):bt,qe=!le(re)&&le(re.set)?re.set.bind(s):bt,at=me({get:Fe,set:qe});Object.defineProperty(n,te,{enumerable:!0,configurable:!0,get:()=>at.value,set:ze=>at.value=ze})}if(i)for(const te in i)yi(i[te],n,s,te);if(c){const te=le(c)?c.call(s):c;Reflect.ownKeys(te).forEach(re=>{Bs(re,te[re])})}u&&Il(u,e,"c");function ce(te,re){Q(re)?re.forEach(Fe=>te(Fe.bind(s))):re&&te(re.bind(s))}if(ce(Sc,d),ce(_t,g),ce(Ec,h),ce(gi,C),ce(kc,k),ce(wc,L),ce(Ic,H),ce($c,D),ce(Ac,B),ce(Fn,_),ce(Ss,b),ce(Tc,M),Q(z))if(z.length){const te=e.exposed||(e.exposed={});z.forEach(re=>{Object.defineProperty(te,re,{get:()=>s[re],set:Fe=>s[re]=Fe,enumerable:!0})})}else e.exposed||(e.exposed={});y&&e.render===bt&&(e.render=y),oe!=null&&(e.inheritAttrs=oe),F&&(e.components=F),Z&&(e.directives=Z),M&&hi(e)}function Mc(e,t,s=bt){Q(e)&&(e=$o(e));for(const n in e){const o=e[n];let l;be(o)?"default"in o?l=Qe(o.from||n,o.default,!0):l=Qe(o.from||n):l=Qe(o),Ae(l)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>l.value,set:r=>l.value=r}):t[n]=l}}function Il(e,t,s){nt(Q(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,s)}function yi(e,t,s,n){let o=n.includes(".")?ri(s,n):()=>s[n];if(Ce(e)){const l=t[e];le(l)&&Ve(o,l)}else if(le(e))Ve(o,e.bind(s));else if(be(e))if(Q(e))e.forEach(l=>yi(l,t,s,n));else{const l=le(e.handler)?e.handler.bind(s):t[e.handler];le(l)&&Ve(o,l,e)}}function ki(e){const t=e.type,{mixins:s,extends:n}=t,{mixins:o,optionsCache:l,config:{optionMergeStrategies:r}}=e.appContext,i=l.get(t);let c;return i?c=i:!o.length&&!s&&!n?c=t:(c={},o.length&&o.forEach(f=>xn(c,f,r,!0)),xn(c,t,r)),be(t)&&l.set(t,c),c}function xn(e,t,s,n=!1){const{mixins:o,extends:l}=t;l&&xn(e,l,s,!0),o&&o.forEach(r=>xn(e,r,s,!0));for(const r in t)if(!(n&&r==="expose")){const i=Lc[r]||s&&s[r];e[r]=i?i(e[r],t[r]):t[r]}return e}const Lc={data:Rl,props:Pl,emits:Pl,methods:Ms,computed:Ms,beforeCreate:Ue,created:Ue,beforeMount:Ue,mounted:Ue,beforeUpdate:Ue,updated:Ue,beforeDestroy:Ue,beforeUnmount:Ue,destroyed:Ue,unmounted:Ue,activated:Ue,deactivated:Ue,errorCaptured:Ue,serverPrefetch:Ue,components:Ms,directives:Ms,watch:Vc,provide:Rl,inject:Nc};function Rl(e,t){return t?e?function(){return Pe(le(e)?e.call(this,this):e,le(t)?t.call(this,this):t)}:t:e}function Nc(e,t){return Ms($o(e),$o(t))}function $o(e){if(Q(e)){const t={};for(let s=0;st==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ge(t)}Modifiers`]||e[`${is(t)}Modifiers`];function Fc(e,t,...s){if(e.isUnmounted)return;const n=e.vnode.props||ke;let o=s;const l=t.startsWith("update:"),r=l&&Bc(n,t.slice(7));r&&(r.trim&&(o=s.map(u=>Ce(u)?u.trim():u)),r.number&&(o=s.map(Wo)));let i,c=n[i=eo(t)]||n[i=eo(Ge(t))];!c&&l&&(c=n[i=eo(is(t))]),c&&nt(c,e,6,o);const f=n[i+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[i])return;e.emitted[i]=!0,nt(f,e,6,o)}}const Uc=new WeakMap;function Ci(e,t,s=!1){const n=s?Uc:t.emitsCache,o=n.get(e);if(o!==void 0)return o;const l=e.emits;let r={},i=!1;if(!le(e)){const c=f=>{const u=Ci(f,t,!0);u&&(i=!0,Pe(r,u))};!s&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!l&&!i?(be(e)&&n.set(e,null),null):(Q(l)?l.forEach(c=>r[c]=null):Pe(r,l),be(e)&&n.set(e,r),r)}function Hn(e,t){return!e||!Tn(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),ve(e,t[0].toLowerCase()+t.slice(1))||ve(e,is(t))||ve(e,t))}function Ol(e){const{type:t,vnode:s,proxy:n,withProxy:o,propsOptions:[l],slots:r,attrs:i,emit:c,render:f,renderCache:u,props:d,data:g,setupState:h,ctx:C,inheritAttrs:k}=e,L=gn(e);let A,_;try{if(s.shapeFlag&4){const b=o||n,y=b;A=gt(f.call(y,b,u,d,h,g,C)),_=i}else{const b=t;A=gt(b.length>1?b(d,{attrs:i,slots:r,emit:c}):b(d,null)),_=t.props?i:Hc(i)}}catch(b){At.length=0,Vn(b,e,1),A=ue(De)}let p=A;if(_&&k!==!1){const b=Object.keys(_),{shapeFlag:y}=p;b.length&&y&7&&(l&&b.some(An)&&(_=Wc(_,l)),p=Ht(p,_,!1,!0))}if(s.dirs&&(p=Ht(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(s.dirs):s.dirs),s.transition){const b=jn(p.type)&&vn(p)||p;rs(b,s.transition)}return A=p,gn(L),A}const Hc=e=>{let t;for(const s in e)(s==="class"||s==="style"||Tn(s))&&((t||(t={}))[s]=e[s]);return t},Wc=(e,t)=>{const s={};for(const n in e)(!An(n)||!(n.slice(9)in t))&&(s[n]=e[n]);return s};function Kc(e,t,s){const{props:n,children:o,component:l}=e,{props:r,children:i,patchFlag:c}=t,f=l.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&c>=0){if(c&1024)return!0;if(c&16)return n?Ml(n,r,f):!!r;if(c&8){const u=t.dynamicProps;for(let d=0;dObject.create(Ei),Ai=e=>Object.getPrototypeOf(e)===Ei;function qc(e,t,s,n=!1){const o={},l=Ti();e.propsDefaults=Object.create(null),$i(e,t,o,l);for(const r in e.propsOptions[0])r in o||(o[r]=void 0);s?e.props=n?o:Yr(o):e.type.props?e.props=o:e.props=l,e.attrs=l}function zc(e,t,s,n){const{props:o,attrs:l,vnode:{patchFlag:r}}=e,i=pe(o),[c]=e.propsOptions;let f=!1;if((n||r>0)&&!(r&16)){if(r&8){const u=e.vnode.dynamicProps;for(let d=0;d{c=!0;const[g,h]=Ii(d,t,!0);Pe(r,g),h&&i.push(...h)};!s&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!l&&!c)return be(e)&&n.set(e,vs),vs;if(Q(l))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",sl=e=>Q(e)?e.map(gt):[gt(e)],Jc=(e,t,s)=>{if(t._n)return t;const n=Ee((...o)=>sl(t(...o)),s);return n._c=!1,n},Ri=(e,t,s)=>{const n=e._ctx;for(const o in e){if(tl(o))continue;const l=e[o];if(le(l))t[o]=Jc(o,l,n);else if(l!=null){const r=sl(l);t[o]=()=>r}}},Pi=(e,t)=>{const s=sl(t);e.slots.default=()=>s},Oi=(e,t,s)=>{for(const n in t)(s||!tl(n))&&(e[n]=t[n])},Yc=(e,t,s)=>{const n=e.slots=Ti();if(e.vnode.shapeFlag&32){const o=t._;o?(Oi(n,t,s),s&&$r(n,"_",o,!0)):Ri(t,n)}else t&&Pi(e,t)},Qc=(e,t,s)=>{const{vnode:n,slots:o}=e;let l=!0,r=ke;if(n.shapeFlag&32){const i=t._;i?s&&i===1?l=!1:Oi(o,t,s):(l=!t.$stable,Ri(t,o)),r=t}else t&&(Pi(e,t),r={default:1});if(l)for(const i in o)!tl(i)&&r[i]==null&&delete o[i]},He=nu;function Xc(e){return eu(e)}function eu(e,t){const s=On();s.__VUE__=!0;const{insert:n,remove:o,patchProp:l,createElement:r,createText:i,createComment:c,setText:f,setElementText:u,parentNode:d,nextSibling:g,setScopeId:h=bt,insertStaticContent:C}=e,k=(m,v,x,T=null,I=null,E=null,U=void 0,j=null,V=!!v.dynamicChildren)=>{if(m===v)return;m&&!Xt(m,v)&&(T=$(m),ze(m,I,E,!0),m=null),v.patchFlag===-2&&(V=!1,v.dynamicChildren=null);const{type:P,ref:X,shapeFlag:K}=v;switch(P){case Wn:L(m,v,x,T);break;case De:A(m,v,x,T);break;case co:m==null&&_(v,x,T,U);break;case ie:F(m,v,x,T,I,E,U,j,V);break;default:K&1?y(m,v,x,T,I,E,U,j,V):K&6?Z(m,v,x,T,I,E,U,j,V):(K&64||K&128)&&P.process(m,v,x,T,I,E,U,j,V,J)}X!=null&&I?Fs(X,m&&m.ref,E,v||m,!v):X==null&&m&&m.ref!=null&&Fs(m.ref,null,E,m,!0)},L=(m,v,x,T)=>{if(m==null)n(v.el=i(v.children),x,T);else{const I=v.el=m.el;v.children!==m.children&&f(I,v.children)}},A=(m,v,x,T)=>{m==null?n(v.el=c(v.children||""),x,T):v.el=m.el},_=(m,v,x,T)=>{[m.el,m.anchor]=C(m.children,v,x,T,m.el,m.anchor)},p=({el:m,anchor:v},x,T)=>{let I;for(;m&&m!==v;)I=g(m),n(m,x,T),m=I;n(v,x,T)},b=({el:m,anchor:v})=>{let x;for(;m&&m!==v;)x=g(m),o(m),m=x;o(v)},y=(m,v,x,T,I,E,U,j,V)=>{if(v.type==="svg"?U="svg":v.type==="math"&&(U="mathml"),m==null)D(v,x,T,I,E,U,j,V);else{const P=m.el&&m.el._isVueCE?m.el:null;try{P&&P._beginPatch(),M(m,v,I,E,U,j,V)}finally{P&&P._endPatch()}}},D=(m,v,x,T,I,E,U,j)=>{let V,P;const{props:X,shapeFlag:K,transition:Y,dirs:ne}=m;if(V=m.el=r(m.type,E,X&&X.is,X),K&8?u(V,m.children):K&16&&H(m.children,V,null,T,I,ao(m,E),U,j),ne&&Kt(m,null,T,"created"),B(V,m,m.scopeId,U,T),X){for(const ye in X)ye!=="value"&&!Vs(ye)&&l(V,ye,null,X[ye],E,T);"value"in X&&l(V,"value",null,X.value,E),(P=X.onVnodeBeforeMount)&&dt(P,T,m)}ne&&Kt(m,null,T,"beforeMount");const he=tu(I,Y);he&&Y.beforeEnter(V),n(V,v,x),((P=X&&X.onVnodeMounted)||he||ne)&&He(()=>{P&&dt(P,T,m),he&&Y.enter(V),ne&&Kt(m,null,T,"mounted")},I)},B=(m,v,x,T,I)=>{if(x&&h(m,x),T)for(let E=0;E{for(let P=V;P{const j=v.el=m.el;let{patchFlag:V,dynamicChildren:P,dirs:X}=v;V|=m.patchFlag&16;const K=m.props||ke,Y=v.props||ke;let ne;if(x&&Gt(x,!1),(ne=Y.onVnodeBeforeUpdate)&&dt(ne,x,v,m),X&&Kt(v,m,x,"beforeUpdate"),x&&Gt(x,!0),P&&(!m.dynamicChildren||m.dynamicChildren.length!==P.length)&&(V=0,U=!1,P=null),(K.innerHTML&&Y.innerHTML==null||K.textContent&&Y.textContent==null)&&u(j,""),P?z(m.dynamicChildren,P,j,x,T,ao(v,I),E):U||re(m,v,j,null,x,T,ao(v,I),E,!1),V>0){if(V&16)oe(j,K,Y,x,I);else if(V&2&&K.class!==Y.class&&l(j,"class",null,Y.class,I),V&4&&l(j,"style",K.style,Y.style,I),V&8){const he=v.dynamicProps;for(let ye=0;ye{ne&&dt(ne,x,v,m),X&&Kt(v,m,x,"updated")},T)},z=(m,v,x,T,I,E,U)=>{for(let j=0;j{if(v!==x){if(v!==ke)for(const E in v)!Vs(E)&&!(E in x)&&l(m,E,v[E],null,I,T);for(const E in x){if(Vs(E))continue;const U=x[E],j=v[E];U!==j&&E!=="value"&&l(m,E,j,U,I,T)}"value"in x&&l(m,"value",v.value,x.value,I)}},F=(m,v,x,T,I,E,U,j,V)=>{const P=v.el=m?m.el:i(""),X=v.anchor=m?m.anchor:i("");let{patchFlag:K,dynamicChildren:Y,slotScopeIds:ne}=v;ne&&(j=j?j.concat(ne):ne),m==null?(n(P,x,T),n(X,x,T),H(v.children||[],x,X,I,E,U,j,V)):K>0&&K&64&&Y&&m.dynamicChildren&&m.dynamicChildren.length===Y.length?(z(m.dynamicChildren,Y,x,I,E,U,j),(v.key!=null||I&&v===I.subTree)&&nl(m,v,!0)):re(m,v,x,X,I,E,U,j,V)},Z=(m,v,x,T,I,E,U,j,V)=>{v.slotScopeIds=j,m==null?v.shapeFlag&512?I.ctx.activate(v,x,T,U,V):R(v,x,T,I,E,U,V):ee(m,v,V)},R=(m,v,x,T,I,E,U)=>{const j=m.component=au(m,T,I);if(Dn(m)&&(j.ctx.renderer=J),cu(j,!1,U),j.asyncDep){if(I&&I.registerDep(j,ce,U),!m.el){const V=j.subTree=ue(De);A(null,V,v,x),m.placeholder=V.el}}else ce(j,m,v,x,I,E,U)},ee=(m,v,x)=>{const T=v.component=m.component;if(Kc(m,v,x))if(T.asyncDep&&!T.asyncResolved){te(T,v,x);return}else T.next=v,T.update();else v.el=m.el,T.vnode=v},ce=(m,v,x,T,I,E,U)=>{const j=()=>{if(m.isMounted){let{next:K,bu:Y,u:ne,parent:he,vnode:ye}=m;{const ut=Mi(m);if(ut){K&&(K.el=ye.el,te(m,K,U)),ut.asyncDep.then(()=>{He(()=>{m.isUnmounted||P()},I)});return}}let _e=K,$e;Gt(m,!1),K?(K.el=ye.el,te(m,K,U)):K=ye,Y&&fn(Y),($e=K.props&&K.props.onVnodeBeforeUpdate)&&dt($e,he,K,ye),Gt(m,!0);const Le=Ol(m),ct=m.subTree;m.subTree=Le,k(ct,Le,d(ct.el),$(ct),m,I,E),K.el=Le.el,_e===null&&Gc(m,Le.el),ne&&He(ne,I),($e=K.props&&K.props.onVnodeUpdated)&&He(()=>dt($e,he,K,ye),I)}else{let K;const{el:Y,props:ne}=v,{bm:he,m:ye,parent:_e,root:$e,type:Le}=m,ct=_s(v);Gt(m,!1),he&&fn(he),!ct&&(K=ne&&ne.onVnodeBeforeMount)&&dt(K,_e,v),Gt(m,!0);{$e.ce&&$e.ce._hasShadowRoot()&&$e.ce._injectChildStyle(Le,m.parent?m.parent.type:void 0);const ut=m.subTree=Ol(m);k(null,ut,x,T,m,I,E),v.el=ut.el}if(ye&&He(ye,I),!ct&&(K=ne&&ne.onVnodeMounted)){const ut=v;He(()=>dt(K,_e,ut),I)}(v.shapeFlag&256||_e&&_s(_e.vnode)&&_e.vnode.shapeFlag&256)&&m.a&&He(m.a,I),m.isMounted=!0,v=x=T=null}};m.scope.on();const V=m.effect=new Vr(j);m.scope.off();const P=m.update=V.run.bind(V),X=m.job=V.runIfDirty.bind(V);X.i=m,X.id=m.uid,V.scheduler=()=>Qo(X),Gt(m,!0),P()},te=(m,v,x)=>{v.component=m;const T=m.vnode.props;m.vnode=v,m.next=null,zc(m,v.props,T,x),Qc(m,v.children,x),$t(),wl(m),It()},re=(m,v,x,T,I,E,U,j,V=!1)=>{const P=m&&m.children,X=m?m.shapeFlag:0,K=v.children,{patchFlag:Y,shapeFlag:ne}=v;if(Y>0){if(Y&128){qe(P,K,x,T,I,E,U,j,V);return}else if(Y&256){Fe(P,K,x,T,I,E,U,j,V);return}}ne&8?(X&16&&et(P,I,E),K!==P&&u(x,K)):X&16?ne&16?qe(P,K,x,T,I,E,U,j,V):et(P,I,E,!0):(X&8&&u(x,""),ne&16&&H(K,x,T,I,E,U,j,V))},Fe=(m,v,x,T,I,E,U,j,V)=>{m=m||vs,v=v||vs;const P=m.length,X=v.length,K=Math.min(P,X);let Y;for(Y=0;YX?et(m,I,E,!0,!1,K):H(v,x,T,I,E,U,j,V,K)},qe=(m,v,x,T,I,E,U,j,V)=>{let P=0;const X=v.length;let K=m.length-1,Y=X-1;for(;P<=K&&P<=Y;){const ne=m[P],he=v[P]=V?Ct(v[P]):gt(v[P]);if(Xt(ne,he))k(ne,he,x,null,I,E,U,j,V);else break;P++}for(;P<=K&&P<=Y;){const ne=m[K],he=v[Y]=V?Ct(v[Y]):gt(v[Y]);if(Xt(ne,he))k(ne,he,x,null,I,E,U,j,V);else break;K--,Y--}if(P>K){if(P<=Y){const ne=Y+1,he=neY)for(;P<=K;)ze(m[P],I,E,!0),P++;else{const ne=P,he=P,ye=new Map;for(P=he;P<=Y;P++){const Ze=v[P]=V?Ct(v[P]):gt(v[P]);Ze.key!=null&&ye.set(Ze.key,P)}let _e,$e=0;const Le=Y-he+1;let ct=!1,ut=0;const Ts=new Array(Le);for(P=0;P=Le){ze(Ze,I,E,!0);continue}let ft;if(Ze.key!=null)ft=ye.get(Ze.key);else for(_e=he;_e<=Y;_e++)if(Ts[_e-he]===0&&Xt(Ze,v[_e])){ft=_e;break}ft===void 0?ze(Ze,I,E,!0):(Ts[ft-he]=P+1,ft>=ut?ut=ft:ct=!0,k(Ze,v[ft],x,null,I,E,U,j,V),$e++)}const gl=ct?su(Ts):vs;for(_e=gl.length-1,P=Le-1;P>=0;P--){const Ze=he+P,ft=v[Ze],vl=v[Ze+1],bl=Ze+1{const{el:E,type:U,transition:j,children:V,shapeFlag:P}=m;if(P&6){at(m.component.subTree,v,x,T);return}if(P&128){m.suspense.move(v,x,T);return}if(P&64){U.move(m,v,x,J);return}if(U===ie){n(E,v,x);for(let K=0;Kj.enter(E),I));else{const{leave:K,delayLeave:Y,afterLeave:ne}=j,he=()=>{m.ctx.isUnmounted?o(E):n(E,v,x)},ye=()=>{const _e=E._isLeaving||!!E[st];E._isLeaving&&E[st](!0),j.persisted&&!_e?he():K(E,()=>{he(),ne&&ne()})};Y?Y(E,he,ye):ye()}else n(E,v,x)},ze=(m,v,x,T=!1,I=!1)=>{const{type:E,props:U,ref:j,children:V,dynamicChildren:P,shapeFlag:X,patchFlag:K,dirs:Y,cacheIndex:ne,memo:he}=m;if(K===-2&&(I=!1),j!=null&&($t(),Fs(j,null,x,m,!0),It()),ne!=null&&(v.renderCache[ne]=void 0),X&256){v.ctx.deactivate(m);return}const ye=X&1&&Y,_e=!_s(m);let $e;if(_e&&($e=U&&U.onVnodeBeforeUnmount)&&dt($e,v,m),X&6)Wt(m.component,x,T);else{if(X&128){m.suspense.unmount(x,T);return}ye&&Kt(m,null,v,"beforeUnmount"),X&64?m.type.remove(m,v,x,J,T):P&&!P.hasOnce&&(E!==ie||K>0&&K&64)?et(P,v,x,!1,!0):(E===ie&&K&384||!I&&X&16)&&et(V,v,x),T&&cs(m)}const Le=he!=null&&ne==null;(_e&&($e=U&&U.onVnodeUnmounted)||ye||Le)&&He(()=>{$e&&dt($e,v,m),ye&&Kt(m,null,v,"unmounted"),Le&&(m.el=null)},x)},cs=m=>{const{type:v,el:x,anchor:T,transition:I}=m;if(v===ie){us(x,T);return}if(v===co){b(m);return}const E=()=>{o(x),I&&!I.persisted&&I.afterLeave&&I.afterLeave()};if(m.shapeFlag&1&&I&&!I.persisted){const{leave:U,delayLeave:j}=I,V=()=>U(x,E);j?j(m.el,E,V):V()}else E()},us=(m,v)=>{let x;for(;m!==v;)x=g(m),o(m),m=x;o(v)},Wt=(m,v,x)=>{const{bum:T,scope:I,job:E,subTree:U,um:j,m:V,a:P}=m;Nl(V),Nl(P),T&&fn(T),I.stop(),E&&(E.flags|=8,ze(U,m,v,x)),j&&He(j,v),He(()=>{m.isUnmounted=!0},v)},et=(m,v,x,T=!1,I=!1,E=0)=>{for(let U=E;U{if(m.shapeFlag&6)return $(m.component.subTree);if(m.shapeFlag&128)return m.suspense.next();const v=g(m.anchor||m.el),x=v&&v[ii];return x?g(x):v};let q=!1;const W=(m,v,x)=>{let T;m==null?v._vnode&&(ze(v._vnode,null,null,!0),T=v._vnode.component):k(v._vnode||null,m,v,null,null,null,x),v._vnode=m,q||(q=!0,wl(T),si(),q=!1)},J={p:k,um:ze,m:at,r:cs,mt:R,mc:H,pc:re,pbc:z,n:$,o:e};return{render:W,hydrate:void 0,createApp:Dc(W)}}function ao({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:s}function Gt({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function tu(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function nl(e,t,s=!1){const n=e.children,o=t.children;if(Q(n)&&Q(o))for(let l=0;l>1,e[s[i]]0&&(t[n]=s[l-1]),s[l]=n)}}for(l=s.length,r=s[l-1];l-- >0;)s[l]=r,r=t[r];return s}function Mi(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Mi(t)}function Nl(e){if(e)for(let t=0;te.__isSuspense;function nu(e,t){t&&t.pendingBranch?Q(e)?t.effects.push(...e):t.effects.push(e):fc(e)}const ie=Symbol.for("v-fgt"),Wn=Symbol.for("v-txt"),De=Symbol.for("v-cmt"),co=Symbol.for("v-stc"),At=[];let Je=null;function w(e=!1){At.push(Je=e?null:[])}function ol(){At.pop(),Je=At[At.length-1]||null}let Zs=1;function _n(e,t=!1){Zs+=e,e<0&&Je&&t&&(Je.hasOnce=!0)}function Vi(e){return e.dynamicChildren=Zs>0?Je||vs:null,ol(),Zs>0&&Je&&Je.push(e),e}function S(e,t,s,n,o,l){return Vi(a(e,t,s,n,o,l,!0))}function Re(e,t,s,n,o){return Vi(ue(e,t,s,n,o,!0))}function Js(e){return e?e.__v_isVNode===!0:!1}function Xt(e,t){return e.type===t.type&&e.key===t.key}const ji=({key:e})=>e??null,dn=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?Ce(e)||Ae(e)||le(e)?{i:Ne,r:e,k:t,f:!!s}:e:null);function a(e,t=null,s=null,n=0,o=null,l=e===ie?0:1,r=!1,i=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ji(t),ref:t&&dn(t),scopeId:oi,slotScopeIds:null,children:s,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:l,patchFlag:n,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Ne};return i?(yn(c,s),l&128&&e.normalize(c)):s&&(c.shapeFlag|=Ce(s)?8:16),Zs>0&&!r&&Je&&(c.patchFlag>0||l&6)&&c.patchFlag!==32&&Je.push(c),c}const ue=ou;function ou(e,t=null,s=null,n=0,o=null,l=!1){if((!e||e===bi)&&(e=De),Js(e)){const i=Ht(e,t,!0);return s&&yn(i,s),Zs>0&&!l&&Je&&(i.shapeFlag&6?Je[Je.indexOf(e)]=i:Je.push(i)),i.patchFlag=-2,i}if(hu(e)&&(e=e.__vccOpts),t){t=lu(t);let{class:i,style:c}=t;i&&!Ce(i)&&(t.class=G(i)),be(c)&&(Nn(c)&&!Q(c)&&(c=Pe({},c)),t.style=Mn(c))}const r=Ce(e)?1:Ni(e)?128:jn(e)?64:be(e)?4:le(e)?2:0;return a(e,t,s,n,o,r,l,!0)}function lu(e){return e?Nn(e)||Ai(e)?Pe({},e):e:null}function Ht(e,t,s=!1,n=!1){const{props:o,ref:l,patchFlag:r,children:i,transition:c}=e,f=t?Di(o||{},t):o,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&ji(f),ref:t&&t.ref?s&&l?Q(l)?l.concat(dn(t)):[l,dn(t)]:dn(t):l,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ie?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Ht(e.ssContent),ssFallback:e.ssFallback&&Ht(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&n&&rs(u,c.clone(u)),u}function ae(e=" ",t=0){return ue(Wn,null,e,t)}function fe(e="",t=!1){return t?(w(),Re(De,null,e)):ue(De,null,e)}function gt(e){return e==null||typeof e=="boolean"?ue(De):Q(e)?ue(ie,null,e.slice()):Js(e)?Ct(e):ue(Wn,null,String(e))}function Ct(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Ht(e)}function yn(e,t){let s=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(Q(t))s=16;else if(typeof t=="object")if(n&65){const o=t.default;o&&(o._c&&(o._d=!1),yn(e,o()),o._c&&(o._d=!0));return}else{s=32;const o=t._;!o&&!Ai(t)?t._ctx=Ne:o===3&&Ne&&(Ne.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(le(t)){if(n&65){yn(e,{default:t});return}t={default:t,_ctx:Ne},s=32}else t=String(t),n&64?(s=16,t=[ae(t)]):s=8;e.children=t,e.shapeFlag|=s}function Di(...e){const t={};for(let s=0;sBe||Ne;let kn,Ys;{const e=On(),t=(s,n)=>{let o;return(o=e[s])||(o=e[s]=[]),o.push(n),l=>{o.length>1?o.forEach(r=>r(l)):o[0](l)}};kn=t("__VUE_INSTANCE_SETTERS__",s=>Be=s),Ys=t("__VUE_SSR_SETTERS__",s=>Qs=s)}const nn=e=>{const t=Be;return kn(e),e.scope.on(),()=>{e.scope.off(),kn(t)}},Vl=()=>{Be&&Be.scope.off(),kn(null)};function Bi(e){return e.vnode.shapeFlag&4}let Qs=!1;function cu(e,t=!1,s=!1){t&&Ys(t);const{props:n,children:o}=e.vnode,l=Bi(e);qc(e,n,l,t),Yc(e,o,s||t);const r=l?uu(e,t):void 0;return t&&Ys(!1),r}function uu(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Pc);const{setup:n}=s;if(n){$t();const o=e.setupContext=n.length>1?du(e):null,l=nn(e),r=sn(n,e,0,[e.props,o]),i=Er(r);if(It(),l(),(i||e.sp)&&!_s(e)&&hi(e),i){if(r.then(Vl,Vl),t)return r.then(c=>{Ys(!0);try{jl(e,c,t)}finally{Ys(!1)}}).catch(c=>{Vn(c,e,0)});e.asyncDep=r}else jl(e,r)}else Fi(e)}function jl(e,t,s){le(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:be(t)&&(e.setupState=Xr(t)),Fi(e)}function Fi(e,t,s){const n=e.type;e.render||(e.render=n.render||bt);{const o=nn(e);$t();try{Oc(e)}finally{It(),o()}}}const fu={get(e,t){return je(e,"get",""),e[t]}};function du(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,fu),slots:e.slots,emit:e.emit,expose:t}}function Kn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Xr(Yo(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in Us)return Us[s](e)},has(t,s){return s in t||s in Us}})):e.proxy}function pu(e,t=!0){return le(e)?e.displayName||e.name:e.name||t&&e.__name}function hu(e){return le(e)&&"__vccOpts"in e}const me=(e,t)=>rc(e,t,Qs);function ll(e,t,s){try{_n(-1);const n=arguments.length;return n===2?be(t)&&!Q(t)?Js(t)?ue(e,null,[t]):ue(e,t):ue(e,null,t):(n>3?s=Array.prototype.slice.call(arguments,2):n===3&&Js(s)&&(s=[s]),ue(e,t,s))}finally{_n(1)}}const mu="3.5.41";let Ro;const Dl=typeof window<"u"&&window.trustedTypes;if(Dl)try{Ro=Dl.createPolicy("vue",{createHTML:e=>e})}catch{}const Ui=Ro?e=>Ro.createHTML(e):e=>e,gu="http://www.w3.org/2000/svg",vu="http://www.w3.org/1998/Math/MathML",wt=typeof document<"u"?document:null,Bl=wt&&wt.createElement("template"),bu={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,n)=>{const o=t==="svg"?wt.createElementNS(gu,e):t==="mathml"?wt.createElementNS(vu,e):s?wt.createElement(e,{is:s}):wt.createElement(e);return e==="select"&&n&&n.multiple!=null&&o.setAttribute("multiple",n.multiple),o},createText:e=>wt.createTextNode(e),createComment:e=>wt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>wt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,n,o,l){const r=s?s.previousSibling:t.lastChild;if(o&&(o===l||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),s),!(o===l||!(o=o.nextSibling)););else{Bl.innerHTML=Ui(n==="svg"?`${e}`:n==="mathml"?`${e}`:e);const i=Bl.content;if(n==="svg"||n==="mathml"){const c=i.firstChild;for(;c.firstChild;)i.appendChild(c.firstChild);i.removeChild(c)}t.insertBefore(i,s)}return[r?r.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},Lt="transition",Is="animation",ks=Symbol("_vtc"),Hi={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Wi=Pe({},ci,Hi),xu=e=>(e.displayName="Transition",e.props=Wi,e),wn=xu((e,{slots:t})=>ll(_c,Ki(e),t)),qt=(e,t=[])=>{Q(e)?e.forEach(s=>s(...t)):e&&e(...t)},Fl=e=>e?Q(e)?e.some(t=>t.length>1):e.length>1:!1;function Ki(e){const t={};for(const F in e)F in Hi||(t[F]=e[F]);if(e.css===!1)return t;const{name:s="v",type:n,duration:o,enterFromClass:l=`${s}-enter-from`,enterActiveClass:r=`${s}-enter-active`,enterToClass:i=`${s}-enter-to`,appearFromClass:c=l,appearActiveClass:f=r,appearToClass:u=i,leaveFromClass:d=`${s}-leave-from`,leaveActiveClass:g=`${s}-leave-active`,leaveToClass:h=`${s}-leave-to`}=e,C=_u(o),k=C&&C[0],L=C&&C[1],{onBeforeEnter:A,onEnter:_,onEnterCancelled:p,onLeave:b,onLeaveCancelled:y,onBeforeAppear:D=A,onAppear:B=_,onAppearCancelled:H=p}=t,M=(F,Z,R,ee)=>{F._enterCancelled=ee,Dt(F,Z?u:i),Dt(F,Z?f:r),R&&R()},z=(F,Z)=>{F._isLeaving=!1,Dt(F,d),Dt(F,h),Dt(F,g),Z&&Z()},oe=F=>(Z,R)=>{const ee=F?B:_,ce=()=>M(Z,F,R);qt(ee,[Z,ce]),Ul(()=>{Dt(Z,F?c:l),pt(Z,F?u:i),Fl(ee)||Hl(Z,n,k,ce)})};return Pe(t,{onBeforeEnter(F){qt(A,[F]),pt(F,l),pt(F,r)},onBeforeAppear(F){qt(D,[F]),pt(F,c),pt(F,f)},onEnter:oe(!1),onAppear:oe(!0),onLeave(F,Z){F._isLeaving=!0;const R=()=>z(F,Z);pt(F,d),F._enterCancelled?(pt(F,g),Po(F)):(Po(F),pt(F,g)),Ul(()=>{F._isLeaving&&(Dt(F,d),pt(F,h),Fl(b)||Hl(F,n,L,R))}),qt(b,[F,R])},onEnterCancelled(F){M(F,!1,void 0,!0),qt(p,[F])},onAppearCancelled(F){M(F,!0,void 0,!0),qt(H,[F])},onLeaveCancelled(F){z(F),qt(y,[F])}})}function _u(e){if(e==null)return null;if(be(e))return[uo(e.enter),uo(e.leave)];{const t=uo(e);return[t,t]}}function uo(e){return Ea(e)}function pt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.add(s)),(e[ks]||(e[ks]=new Set)).add(t)}function Dt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.remove(n));const s=e[ks];s&&(s.delete(t),s.size||(e[ks]=void 0))}function Ul(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let yu=0;function Hl(e,t,s,n){const o=e._endId=++yu,l=()=>{o===e._endId&&n()};if(s!=null)return setTimeout(l,s);const{type:r,timeout:i,propCount:c}=Gi(e,t);if(!r)return n();const f=r+"end";let u=0;const d=()=>{e.removeEventListener(f,g),l()},g=h=>{h.target===e&&++u>=c&&d()};setTimeout(()=>{u(s[C]||"").split(", "),o=n(`${Lt}Delay`),l=n(`${Lt}Duration`),r=Wl(o,l),i=n(`${Is}Delay`),c=n(`${Is}Duration`),f=Wl(i,c);let u=null,d=0,g=0;t===Lt?r>0&&(u=Lt,d=r,g=l.length):t===Is?f>0&&(u=Is,d=f,g=c.length):(d=Math.max(r,f),u=d>0?r>f?Lt:Is:null,g=u?u===Lt?l.length:c.length:0);const h=u===Lt&&/\b(?:transform|all)(?:,|$)/.test(n(`${Lt}Property`).toString());return{type:u,timeout:d,propCount:g,hasTransform:h}}function Wl(e,t){for(;e.lengthKl(s)+Kl(e[n])))}function Kl(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Po(e){return(e?e.ownerDocument:document).body.offsetHeight}function ku(e,t,s){const n=e[ks];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const Cn=Symbol("_vod"),rl=Symbol("_vsh"),Gl={name:"show",beforeMount(e,{value:t},{transition:s}){e[Cn]=e.style.display==="none"?"":e.style.display,s&&t?s.beforeEnter(e):Rs(e,t)},mounted(e,{value:t},{transition:s}){s&&t&&s.enter(e)},updated(e,{value:t,oldValue:s},{transition:n}){!t!=!s&&(n?t?(n.beforeEnter(e),Rs(e,!0),n.enter(e)):n.leave(e,()=>{Rs(e,!1)}):Rs(e,t))},beforeUnmount(e,{value:t}){Rs(e,t)}};function Rs(e,t){e.style.display=t?e[Cn]:"none",e[rl]=!t}const wu=Symbol(""),Cu=/(?:^|;)\s*display\s*:/;function Su(e,t,s){const n=e.style,o=Ce(s);let l=!1;if(s&&!o){if(t)if(Ce(t))for(const r of t.split(";")){const i=r.slice(0,r.indexOf(":")).trim();s[i]==null&&Ls(n,i,"")}else for(const r in t)s[r]==null&&Ls(n,r,"");for(const r in s){r==="display"&&(l=!0);const i=s[r];i!=null?Tu(e,r,!Ce(t)&&t?t[r]:void 0,i)||Ls(n,r,i):Ls(n,r,"")}}else if(o){if(t!==s){const r=n[wu];r&&(s+=";"+r),n.cssText=s,l=Cu.test(s)}}else t&&e.removeAttribute("style");Cn in e&&(e[Cn]=l?n.display:"",e[rl]&&(n.display="none"))}const ql=/\s*!important$/;function Ls(e,t,s){if(Q(s))s.forEach(n=>Ls(e,t,n));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const n=Eu(e,t);ql.test(s)?e.setProperty(is(n),s.replace(ql,""),"important"):e[n]=s}}const zl=["Webkit","Moz","ms"],fo={};function Eu(e,t){const s=fo[t];if(s)return s;let n=Ge(t);if(n!=="filter"&&n in e)return fo[t]=n;n=Pn(n);for(let o=0;opo||(Ou.then(()=>po=0),po=Date.now());function Lu(e,t){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;const o=s.value;if(Q(o)){const l=n.stopImmediatePropagation;n.stopImmediatePropagation=()=>{l.call(n),n._stopped=!0};const r=o.slice(),i=[n];for(let c=0;ce.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Nu=(e,t,s,n,o,l)=>{const r=o==="svg";t==="class"?ku(e,n,r):t==="style"?Su(e,s,n):Tn(t)?An(t)||$u(e,t,s,n,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Vu(e,t,n,r))?(Yl(e,t,n),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Jl(e,t,n,r,l,t!=="value")):e._isVueCE&&(ju(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!Ce(n)))?Yl(e,Ge(t),n,l,t):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),Jl(e,t,n,r))};function Vu(e,t,s,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&Xl(t)&&le(s));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return Xl(t)&&Ce(s)?!1:t in e}function ju(e,t){const s=e._def.props;if(!s)return!1;const n=Ge(t);return Array.isArray(s)?s.some(o=>Ge(o)===n):Object.keys(s).some(o=>Ge(o)===n)}const qi=new WeakMap,zi=new WeakMap,Sn=Symbol("_moveCb"),er=Symbol("_enterCb"),Du=e=>(delete e.props.mode,e),Bu=Du({name:"TransitionGroup",props:Pe({},Wi,{tag:String,moveClass:String}),setup(e,{slots:t}){const s=Es(),n=ai();let o,l;return gi(()=>{if(!o.length)return;const r=e.moveClass||`${e.name||"v"}-move`;if(!Wu(o[0].el,s.vnode.el,r)){o=[];return}o.forEach(Fu),o.forEach(Uu);const i=o.filter(Hu);Po(s.vnode.el),i.forEach(c=>{const f=c.el,u=f.style;pt(f,r),u.transform=u.webkitTransform=u.transitionDuration="";const d=f[Sn]=g=>{g&&g.target!==f||(!g||g.propertyName.endsWith("transform"))&&(f.removeEventListener("transitionend",d),f[Sn]=null,Dt(f,r))};f.addEventListener("transitionend",d)}),o=[]}),()=>{const r=pe(e),i=Ki(r);let c=r.tag||ie;if(o=[],l)for(let f=0;f{i.split(/\s+/).forEach(c=>c&&n.classList.remove(c))}),s.split(/\s+/).forEach(i=>i&&n.classList.add(i)),n.style.display="none";const l=t.nodeType===1?t:t.parentNode;l.appendChild(n);const{hasTransform:r}=Gi(n);return l.removeChild(n),r}const En=e=>{const t=e.props["onUpdate:modelValue"]||!1;return Q(t)?s=>fn(t,s):t};function Ku(e){e.target.composing=!0}function tr(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const ts=Symbol("_assign"),un=Symbol("_initialValue");function ho(e,t,s){return t&&(e=e.trim()),s&&(e=Wo(e)),e}const Ie={created(e,{modifiers:{lazy:t,trim:s,number:n}},o){e.parentNode&&(e.type==="text"?e[un]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[un]=e.defaultValue.replace(/\r\n?/g,` +`))),e[ts]=En(o);const l=n||o.props&&o.props.type==="number";es(e,t?"change":"input",r=>{r.target.composing||e[ts](ho(e.value,s,l))}),(s||l)&&es(e,"change",()=>{e.value=ho(e.value,s,l)}),t||(es(e,"compositionstart",Ku),es(e,"compositionend",tr),es(e,"change",tr))},mounted(e,{value:t,modifiers:{trim:s,number:n}}){const o=t??"",l=e[un];delete e[un],l!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==l?e[ts](ho(e.value,s,n)):e.value=o},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:n,trim:o,number:l}},r){if(e[ts]=En(r),e.composing)return;const i=(l||e.type==="number")&&!/^0\d/.test(e.value)?Wo(e.value):e.value,c=t??"";if(i===c)return;const f=e.getRootNode();(f instanceof Document||f instanceof ShadowRoot)&&f.activeElement===e&&e.type!=="range"&&(n&&t===s||o&&e.value.trim()===c)||(e.value=c)}},zt={deep:!0,created(e,t,s){e[ts]=En(s),es(e,"change",()=>{const n=e._modelValue,o=Gu(e),l=e.checked,r=e[ts];if(Q(n)){const i=Rr(n,o),c=i!==-1;if(l&&!c)r(n.concat(o));else if(!l&&c){const f=[...n];f.splice(i,1),r(f)}}else if($n(n)){const i=new Set(n);l?i.add(o):i.delete(o),r(i)}else r(Ji(e,l))})},mounted:sr,beforeUpdate(e,t,s){e[ts]=En(s),sr(e,t,s)}};function sr(e,{value:t,oldValue:s},n){e._modelValue=t;let o;if(Q(t))o=Rr(t,n.props.value)>-1;else if($n(t))o=t.has(n.props.value);else{if(t===s)return;o=tn(t,Ji(e,!0))}e.checked!==o&&(e.checked=o)}function Gu(e){return"_value"in e?e._value:e.value}function Ji(e,t){const s=t?"_trueValue":"_falseValue";return s in e?e[s]:t}const qu=["ctrl","shift","alt","meta"],zu={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>qu.some(s=>e[`${s}Key`]&&!t.includes(s))},ls=(e,t)=>{if(!e)return e;const s=e._withMods||(e._withMods={}),n=t.join(".");return s[n]||(s[n]=((o,...l)=>{for(let r=0;r{const t=Ju().createApp(...e),{mount:s}=t;return t.mount=n=>{const o=Xu(n);if(!o)return;const l=t._component;!le(l)&&!l.render&&!l.template&&(l.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const r=s(o,!1,Qu(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),r},t});function Qu(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Xu(e){return Ce(e)?document.querySelector(e):e}let Yi;const Gn=e=>Yi=e,Qi=Symbol();function Oo(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var Hs;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(Hs||(Hs={}));function ef(){const e=Lr(!0),t=e.run(()=>se({}));let s=[],n=[];const o=Yo({install(l){Gn(o),o._a=l,l.provide(Qi,o),l.config.globalProperties.$pinia=o,n.forEach(r=>s.push(r)),n=[]},use(l){return this._a?s.push(l):n.push(l),this},_p:s,_a:null,_e:e,_s:new Map,state:t});return o}const Xi=()=>{};function or(e,t,s,n=Xi){e.add(t);const o=()=>{e.delete(t)&&n()};return!s&&Nr()&&Ma(o),o}function ds(e,...t){e.forEach(s=>{s(...t)})}const tf=e=>e(),lr=Symbol(),mo=Symbol();function Mo(e,t){e instanceof Map&&t instanceof Map?t.forEach((s,n)=>e.set(n,s)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const s in t){if(!t.hasOwnProperty(s))continue;const n=t[s],o=e[s];Oo(o)&&Oo(n)&&e.hasOwnProperty(s)&&!Ae(n)&&!Tt(n)?e[s]=Mo(o,n):e[s]=n}return e}const sf=Symbol();function nf(e){return!Oo(e)||!Object.prototype.hasOwnProperty.call(e,sf)}const{assign:Bt}=Object;function of(e){return!!(Ae(e)&&e.effect)}function lf(e,t,s,n){const{state:o,actions:l,getters:r}=t,i=s.state.value[e];let c;function f(){i||(s.state.value[e]=o?o():{});const u=sc(s.state.value[e]);return Bt(u,l,Object.keys(r||{}).reduce((d,g)=>(d[g]=Yo(me(()=>{Gn(s);const h=s._s.get(e);return r[g].call(h,h)})),d),{}))}return c=ea(e,f,t,s,n,!0),c}function ea(e,t,s={},n,o,l){let r;const i=Bt({actions:{}},s),c={deep:!0};let f,u,d=new Set,g=new Set,h;const C=n.state.value[e];!l&&!C&&(n.state.value[e]={});let k;function L(H){let M;f=u=!1,typeof H=="function"?(H(n.state.value[e]),M={type:Hs.patchFunction,storeId:e,events:h}):(Mo(n.state.value[e],H),M={type:Hs.patchObject,payload:H,storeId:e,events:h});const z=k=Symbol();xt().then(()=>{k===z&&(f=!0)}),u=!0,ds(d,M,n.state.value[e])}const A=l?function(){const{state:M}=s,z=M?M():{};this.$patch(oe=>{Bt(oe,z)})}:Xi;function _(){r.stop(),d.clear(),g.clear(),n._s.delete(e)}const p=(H,M="")=>{if(lr in H)return H[mo]=M,H;const z=function(){Gn(n);const oe=Array.from(arguments),F=new Set,Z=new Set;function R(te){F.add(te)}function ee(te){Z.add(te)}ds(g,{args:oe,name:z[mo],store:y,after:R,onError:ee});let ce;try{ce=H.apply(this&&this.$id===e?this:y,oe)}catch(te){throw ds(Z,te),te}return ce instanceof Promise?ce.then(te=>(ds(F,te),te)).catch(te=>(ds(Z,te),Promise.reject(te))):(ds(F,ce),ce)};return z[lr]=!0,z[mo]=M,z},b={_p:n,$id:e,$onAction:or.bind(null,g),$patch:L,$reset:A,$subscribe(H,M={}){const z=or(d,H,M.detached,()=>oe()),oe=r.run(()=>Ve(()=>n.state.value[e],F=>{(M.flush==="sync"?u:f)&&H({storeId:e,type:Hs.direct,events:h},F)},Bt({},c,M)));return z},$dispose:_},y=Rt(b);n._s.set(e,y);const B=(n._a&&n._a.runWithContext||tf)(()=>n._e.run(()=>(r=Lr()).run(()=>t({action:p}))));for(const H in B){const M=B[H];if(Ae(M)&&!of(M)||Tt(M))l||(C&&nf(M)&&(Ae(M)?M.value=C[H]:Mo(M,C[H])),n.state.value[e][H]=M);else if(typeof M=="function"){const z=p(M,H);B[H]=z,i.actions[H]=M}}return Bt(y,B),Bt(pe(y),B),Object.defineProperty(y,"$state",{get:()=>n.state.value[e],set:H=>{L(M=>{Bt(M,H)})}}),n._p.forEach(H=>{Bt(y,r.run(()=>H({store:y,app:n._a,pinia:n,options:i})))}),C&&l&&s.hydrate&&s.hydrate(y.$state,C),f=!0,u=!0,y}function al(e,t,s){let n;const o=typeof t=="function";n=o?s:t;function l(r,i){const c=dc();return r=r||(c?Qe(Qi,null):null),r&&Gn(r),r=Yi,r._s.has(e)||(o?ea(e,t,n,r):lf(e,n,r)),r._s.get(e)}return l.$id=e,l}const gs=typeof document<"u";function ta(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function rf(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&ta(e.default)}const ge=Object.assign;function go(e,t){const s={};for(const n in t){const o=t[n];s[n]=it(o)?o.map(e):e(o)}return s}const Ws=()=>{},it=Array.isArray;function rr(e,t){const s={};for(const n in e)s[n]=n in t?t[n]:e[n];return s}const sa=/#/g,af=/&/g,cf=/\//g,uf=/=/g,ff=/\?/g,na=/\+/g,df=/%5B/g,pf=/%5D/g,oa=/%5E/g,hf=/%60/g,la=/%7B/g,mf=/%7C/g,ra=/%7D/g,gf=/%20/g;function cl(e){return e==null?"":encodeURI(""+e).replace(mf,"|").replace(df,"[").replace(pf,"]")}function vf(e){return cl(e).replace(la,"{").replace(ra,"}").replace(oa,"^")}function Lo(e){return cl(e).replace(na,"%2B").replace(gf,"+").replace(sa,"%23").replace(af,"%26").replace(hf,"`").replace(la,"{").replace(ra,"}").replace(oa,"^")}function bf(e){return Lo(e).replace(uf,"%3D")}function xf(e){return cl(e).replace(sa,"%23").replace(ff,"%3F")}function _f(e){return xf(e).replace(cf,"%2F")}function Xs(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const yf=/\/$/,kf=e=>e.replace(yf,"");function vo(e,t,s="/"){let n,o={},l="",r="";const i=t.indexOf("#");let c=t.indexOf("?");return c=i>=0&&c>i?-1:c,c>=0&&(n=t.slice(0,c),l=t.slice(c,i>0?i:t.length),o=e(l.slice(1))),i>=0&&(n=n||t.slice(0,i),r=t.slice(i,t.length)),n=Ef(n??t,s),{fullPath:n+l+r,path:n,query:o,hash:Xs(r)}}function wf(e,t){const s=t.query?e(t.query):"";return t.path+(s&&"?")+s+(t.hash||"")}function ir(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Cf(e,t,s){const n=t.matched.length-1,o=s.matched.length-1;return n>-1&&n===o&&ws(t.matched[n],s.matched[o])&&ia(t.params,s.params)&&e(t.query)===e(s.query)&&t.hash===s.hash}function ws(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function ia(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var s in e)if(!Sf(e[s],t[s]))return!1;return!0}function Sf(e,t){return it(e)?ar(e,t):it(t)?ar(t,e):e?.valueOf()===t?.valueOf()}function ar(e,t){return it(t)?e.length===t.length&&e.every((s,n)=>s===t[n]):e.length===1&&e[0]===t}function Ef(e,t){if(e.startsWith("/"))return e;if(!e)return t;const s=t.split("/"),n=e.split("/"),o=n[n.length-1];(o===".."||o===".")&&n.push("");let l=s.length-1,r,i;for(r=0;r1&&l--;else break;return s.slice(0,l).join("/")+"/"+n.slice(r).join("/")}const Nt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let No=(function(e){return e.pop="pop",e.push="push",e})({}),bo=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function Tf(e){if(!e)if(gs){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),kf(e)}const Af=/^[^#]+#/;function $f(e,t){return e.replace(Af,"#")+t}function If(e,t){const s=document.documentElement.getBoundingClientRect(),n=e.getBoundingClientRect();return{behavior:t.behavior,left:n.left-s.left-(t.left||0),top:n.top-s.top-(t.top||0)}}const qn=()=>({left:window.scrollX,top:window.scrollY});function Rf(e){let t;if("el"in e){const s=e.el,n=typeof s=="string"&&s.startsWith("#"),o=typeof s=="string"?n?document.getElementById(s.slice(1)):document.querySelector(s):s;if(!o)return;t=If(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function cr(e,t){return(history.state?history.state.position-t:-1)+e}const Vo=new Map;function Pf(e,t){Vo.set(e,t)}function Of(e){const t=Vo.get(e);return Vo.delete(e),t}function Mf(e){return typeof e=="string"||e&&typeof e=="object"}function aa(e){return typeof e=="string"||typeof e=="symbol"}let Se=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const ca=Symbol("");Se.MATCHER_NOT_FOUND+"",Se.NAVIGATION_GUARD_REDIRECT+"",Se.NAVIGATION_ABORTED+"",Se.NAVIGATION_CANCELLED+"",Se.NAVIGATION_DUPLICATED+"";function Cs(e,t){return ge(new Error,{type:e,[ca]:!0},t)}function kt(e,t){return e instanceof Error&&ca in e&&(t==null||!!(e.type&t))}const Lf=["params","query","hash"];function Nf(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const s of Lf)s in e&&(t[s]=e[s]);return JSON.stringify(t,null,2)}function Vf(e){const t={};if(e===""||e==="?")return t;const s=(e[0]==="?"?e.slice(1):e).split("&");for(let n=0;no&&Lo(o)):[n&&Lo(n)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+s,o!=null&&(t+="="+o))})}return t}function jf(e){const t={};for(const s in e){const n=e[s];n!==void 0&&(t[s]=it(n)?n.map(o=>o==null?null:""+o):n==null?n:""+n)}return t}const Df=Symbol(""),fr=Symbol(""),zn=Symbol(""),ul=Symbol(""),jo=Symbol("");function Ps(){let e=[];function t(n){return e.push(n),()=>{const o=e.indexOf(n);o>-1&&e.splice(o,1)}}function s(){e=[]}return{add:t,list:()=>e.slice(),reset:s}}function Ut(e,t,s,n,o,l=r=>r()){const r=n&&(n.enterCallbacks[o]=n.enterCallbacks[o]||[]);return()=>new Promise((i,c)=>{const f=g=>{g===!1?c(Cs(Se.NAVIGATION_ABORTED,{from:s,to:t})):g instanceof Error?c(g):Mf(g)?c(Cs(Se.NAVIGATION_GUARD_REDIRECT,{from:t,to:g})):(r&&n.enterCallbacks[o]===r&&typeof g=="function"&&r.push(g),i())},u=l(()=>e.call(n&&n.instances[o],t,s,f));let d=Promise.resolve(u);e.length<3&&(d=d.then(f)),d.catch(g=>c(g))})}function xo(e,t,s,n,o=l=>l()){const l=[];for(const r of e)for(const i in r.components){let c=r.components[i];if(!(t!=="beforeRouteEnter"&&!r.instances[i]))if(ta(c)){const f=(c.__vccOpts||c)[t];f&&l.push(Ut(f,s,n,r,i,o))}else{let f=c();l.push(()=>f.then(u=>{if(!u)throw new Error(`Couldn't resolve component "${i}" at "${r.path}"`);const d=rf(u)?u.default:u;r.mods[i]=u,r.components[i]=d;const g=(d.__vccOpts||d)[t];return g&&Ut(g,s,n,r,i,o)()}))}}return l}function Bf(e,t){const s=[],n=[],o=[],l=Math.max(t.matched.length,e.matched.length);for(let r=0;rws(f,i))?n.push(i):s.push(i));const c=e.matched[r];c&&(t.matched.find(f=>ws(f,c))||o.push(c))}return[s,n,o]}let Ff=()=>location.protocol+"//"+location.host;function ua(e,t){const{pathname:s,search:n,hash:o}=t,l=e.indexOf("#");if(l>-1){let r=o.includes(e.slice(l))?e.slice(l).length:1,i=o.slice(r);return i[0]!=="/"&&(i="/"+i),ir(i,"")}return ir(s,e)+n+o}function Uf(e,t,s,n){let o=[],l=[],r=null;const i=({state:g})=>{const h=ua(e,location),C=s.value,k=t.value;let L=0;if(g){if(s.value=h,t.value=g,r&&r===C){r=null;return}L=k?g.position-k.position:0}else n(h);o.forEach(A=>{A(s.value,C,{delta:L,type:No.pop,direction:L?L>0?bo.forward:bo.back:bo.unknown})})};function c(){r=s.value}function f(g){o.push(g);const h=()=>{const C=o.indexOf(g);C>-1&&o.splice(C,1)};return l.push(h),h}function u(){if(document.visibilityState==="hidden"){const{history:g}=window;if(!g.state)return;g.replaceState(ge({},g.state,{scroll:qn()}),"")}}function d(){for(const g of l)g();l=[],window.removeEventListener("popstate",i),window.removeEventListener("pagehide",u),document.removeEventListener("visibilitychange",u)}return window.addEventListener("popstate",i),window.addEventListener("pagehide",u),document.addEventListener("visibilitychange",u),{pauseListeners:c,listen:f,destroy:d}}function dr(e,t,s,n=!1,o=!1){return{back:e,current:t,forward:s,replaced:n,position:window.history.length,scroll:o?qn():null}}function Hf(e){const{history:t,location:s}=window,n={value:ua(e,s)},o={value:t.state};o.value||l(n.value,{back:null,current:n.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function l(c,f,u){const d=e.indexOf("#"),g=d>-1?(s.host&&document.querySelector("base")?e:e.slice(d))+c:Ff()+e+c;try{t[u?"replaceState":"pushState"](f,"",g),o.value=f}catch(h){console.error(h),s[u?"replace":"assign"](g)}}function r(c,f){l(c,ge({},t.state,dr(o.value.back,c,o.value.forward,!0),f,{position:o.value.position}),!0),n.value=c}function i(c,f){const u=ge({},o.value,t.state,{forward:c,scroll:qn()});l(u.current,u,!0),l(c,ge({},dr(n.value,c,null),{position:u.position+1},f),!1),n.value=c}return{location:n,state:o,push:i,replace:r}}function Wf(e){e=Tf(e);const t=Hf(e),s=Uf(e,t.state,t.location,t.replace);function n(l,r=!0){r||s.pauseListeners(),history.go(l)}const o=ge({location:"",base:e,go:n,createHref:$f.bind(null,e)},t,s);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function Kf(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),Wf(e)}let ss=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var Oe=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(Oe||{});const Gf={type:ss.Static,value:""},qf=/[a-zA-Z0-9_]/;function zf(e){if(!e)return[[]];if(e==="/")return[[Gf]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(h){throw new Error(`ERR (${s})/"${f}": ${h}`)}let s=Oe.Static,n=s;const o=[];let l;function r(){l&&o.push(l),l=[]}let i=0,c,f="",u="";function d(){f&&(s===Oe.Static?l.push({type:ss.Static,value:f}):s===Oe.Param||s===Oe.ParamRegExp||s===Oe.ParamRegExpEnd?(l.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${f}) must be alone in its segment. eg: '/:ids+.`),l.push({type:ss.Param,value:f,regexp:u,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),f="")}function g(){f+=c}for(;it.length?t.length===1&&t[0]===We.Static+We.Segment?1:-1:0}function fa(e,t){let s=0;const n=e.score,o=t.score;for(;s0&&t[t.length-1]<0}const Xf={strict:!1,end:!0,sensitive:!1};function ed(e,t,s){const n=Yf(zf(e.path),s),o=ge(n,{record:e,parent:t,children:[],alias:[]});return t&&!o.record.aliasOf==!t.record.aliasOf&&t.children.push(o),o}function td(e,t){const s=[],n=new Map;t=rr(Xf,t);function o(d){return n.get(d)}function l(d,g,h){const C=!h,k=gr(d);k.aliasOf=h&&h.record;const L=rr(t,d),A=[k];if("alias"in d){const b=typeof d.alias=="string"?[d.alias]:d.alias;for(const y of b)A.push(gr(ge({},k,{components:h?h.record.components:k.components,path:y,aliasOf:h?h.record:k})))}let _,p;for(const b of A){const{path:y}=b;if(g&&y[0]!=="/"){const D=g.record.path,B=D[D.length-1]==="/"?"":"/";b.path=g.record.path+(y&&B+y)}if(_=ed(b,g,L),h?h.alias.push(_):(p=p||_,p!==_&&p.alias.push(_),C&&d.name&&!vr(_)&&r(d.name)),da(_)&&c(_),k.children){const D=k.children;for(let B=0;B{r(p)}:Ws}function r(d){if(aa(d)){const g=n.get(d);g&&(n.delete(d),s.splice(s.indexOf(g),1),g.children.forEach(r),g.alias.forEach(r))}else{const g=s.indexOf(d);g>-1&&(s.splice(g,1),d.record.name&&n.delete(d.record.name),d.children.forEach(r),d.alias.forEach(r))}}function i(){return s}function c(d){const g=od(d,s);s.splice(g,0,d),d.record.name&&!vr(d)&&n.set(d.record.name,d)}function f(d,g){let h,C={},k,L;if("name"in d&&d.name){if(h=n.get(d.name),!h)throw Cs(Se.MATCHER_NOT_FOUND,{location:d});L=h.record.name,C=ge(mr(g.params,h.keys.filter(p=>!p.optional).concat(h.parent?h.parent.keys.filter(p=>p.optional):[]).map(p=>p.name)),d.params&&mr(d.params,h.keys.map(p=>p.name))),k=h.stringify(C)}else if(d.path!=null)k=d.path,h=s.find(p=>p.re.test(k)),h&&(C=h.parse(k),L=h.record.name);else{if(h=g.name?n.get(g.name):s.find(p=>p.re.test(g.path)),!h)throw Cs(Se.MATCHER_NOT_FOUND,{location:d,currentLocation:g});L=h.record.name,C=ge({},g.params,d.params),k=h.stringify(C)}const A=[];let _=h;for(;_;)A.unshift(_.record),_=_.parent;return{name:L,path:k,params:C,matched:A,meta:nd(A)}}e.forEach(d=>l(d));function u(){s.length=0,n.clear()}return{addRoute:l,resolve:f,removeRoute:r,clearRoutes:u,getRoutes:i,getRecordMatcher:o}}function mr(e,t){const s={};for(const n of t)n in e&&(s[n]=e[n]);return s}function gr(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:sd(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function sd(e){const t={},s=e.props||!1;if("component"in e)t.default=s;else for(const n in e.components)t[n]=typeof s=="object"?s[n]:s;return t}function vr(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function nd(e){return e.reduce((t,s)=>ge(t,s.meta),{})}function od(e,t){let s=0,n=t.length;for(;s!==n;){const l=s+n>>1;fa(e,t[l])<0?n=l:s=l+1}const o=ld(e);return o&&(n=t.lastIndexOf(o,n-1)),n}function ld(e){let t=e;for(;t=t.parent;)if(da(t)&&fa(e,t)===0)return t}function da({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function br(e){const t=Qe(zn),s=Qe(ul),n=me(()=>{const c=O(e.to);return t.resolve(c)}),o=me(()=>{const{matched:c}=n.value,{length:f}=c,u=c[f-1],d=s.matched;if(!u||!d.length)return-1;const g=d.findIndex(ws.bind(null,u));if(g>-1)return g;const h=xr(c[f-2]);return f>1&&xr(u)===h&&d[d.length-1].path!==h?d.findIndex(ws.bind(null,c[f-2])):g}),l=me(()=>o.value>-1&&ud(s.params,n.value.params)),r=me(()=>o.value>-1&&o.value===s.matched.length-1&&ia(s.params,n.value.params));function i(c={}){if(cd(c)){const f=t[O(e.replace)?"replace":"push"](O(e.to)).catch(Ws);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>f),f}return Promise.resolve()}return{route:n,href:me(()=>n.value.href),isActive:l,isExactActive:r,navigate:i}}function rd(e){return e.length===1?e[0]:e}const id=pi({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:br,setup(e,{slots:t}){const s=Rt(br(e)),{options:n}=Qe(zn),o=me(()=>({[_r(e.activeClass,n.linkActiveClass,"router-link-active")]:s.isActive,[_r(e.exactActiveClass,n.linkExactActiveClass,"router-link-exact-active")]:s.isExactActive}));return()=>{const l=t.default&&rd(t.default(s));return e.custom?l:ll("a",{"aria-current":s.isExactActive?e.ariaCurrentValue:null,href:s.href,onClick:s.navigate,class:o.value},l)}}}),ad=id;function cd(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function ud(e,t){for(const s in t){const n=t[s],o=e[s];if(typeof n=="string"){if(n!==o)return!1}else if(!it(o)||o.length!==n.length||n.some((l,r)=>l.valueOf()!==o[r].valueOf()))return!1}return!0}function xr(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const _r=(e,t,s)=>e??t??s,fd=pi({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:s}){const n=Qe(jo),o=me(()=>e.route||n.value),l=Qe(fr,0),r=me(()=>{let f=O(l);const{matched:u}=o.value;let d;for(;(d=u[f])&&!d.components;)f++;return f}),i=me(()=>o.value.matched[r.value]);Bs(fr,me(()=>r.value+1)),Bs(Df,i),Bs(jo,o);const c=se();return Ve(()=>[c.value,i.value,e.name],([f,u,d],[g,h,C])=>{u&&(u.instances[d]=f,h&&h!==u&&f&&f===g&&(u.leaveGuards.size||(u.leaveGuards=h.leaveGuards),u.updateGuards.size||(u.updateGuards=h.updateGuards))),f&&u&&(!h||!ws(u,h)||!g)&&(u.enterCallbacks[d]||[]).forEach(k=>k(f))},{flush:"post"}),()=>{const f=o.value,u=e.name,d=i.value,g=d&&d.components[u];if(!g)return yr(s.default,{Component:g,route:f});const h=d.props[u],C=h?h===!0?f.params:typeof h=="function"?h(f):h:null,L=ll(g,ge({},C,t,{onVnodeUnmounted:A=>{A.component.isUnmounted&&(d.instances[u]=null)},ref:c}));return yr(s.default,{Component:L,route:f})||L}}});function yr(e,t){if(!e)return null;const s=e(t);return s.length===1?s[0]:s}const dd=fd;function pd(e){const t=td(e.routes,e),s=e.parseQuery||Vf,n=e.stringifyQuery||ur,o=e.history,l=Ps(),r=Ps(),i=Ps(),c=Xa(Nt);let f=Nt;gs&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=go.bind(null,$=>""+$),d=go.bind(null,_f),g=go.bind(null,Xs);function h($,q){let W,J;return aa($)?(W=t.getRecordMatcher($),J=q):J=$,t.addRoute(J,W)}function C($){const q=t.getRecordMatcher($);q&&t.removeRoute(q)}function k(){return t.getRoutes().map($=>$.record)}function L($){return!!t.getRecordMatcher($)}function A($,q){if(q=ge({},q||c.value),typeof $=="string"){const x=vo(s,$,q.path),T=t.resolve({path:x.path},q),I=o.createHref(x.fullPath);return ge(x,T,{params:g(T.params),hash:Xs(x.hash),redirectedFrom:void 0,href:I})}let W;if($.path!=null)W=ge({},$,{path:vo(s,$.path,q.path).path});else{const x=ge({},$.params);for(const T in x)x[T]==null&&delete x[T];W=ge({},$,{params:d(x)}),q.params=d(q.params)}const J=t.resolve(W,q),de=$.hash||"";J.params=u(g(J.params));const m=wf(n,ge({},$,{hash:vf(de),path:J.path})),v=o.createHref(m);return ge({fullPath:m,hash:de,query:n===ur?jf($.query):$.query||{}},J,{redirectedFrom:void 0,href:v})}function _($){return typeof $=="string"?vo(s,$,c.value.path):ge({},$)}function p($,q){if(f!==$)return Cs(Se.NAVIGATION_CANCELLED,{from:q,to:$})}function b($){return B($)}function y($){return b(ge(_($),{replace:!0}))}function D($,q){const W=$.matched[$.matched.length-1];if(W&&W.redirect){const{redirect:J}=W;let de=typeof J=="function"?J($,q):J;return typeof de=="string"&&(de=de.includes("?")||de.includes("#")?de=_(de):{path:de},de.params={}),ge({query:$.query,hash:$.hash,params:de.path!=null?{}:$.params},de)}}function B($,q){const W=f=A($),J=c.value,de=$.state,m=$.force,v=$.replace===!0,x=D(W,J);if(x)return B(ge(_(x),{state:typeof x=="object"?ge({},de,x.state):de,force:m,replace:v}),q||W);const T=W;T.redirectedFrom=q;let I;return!m&&Cf(n,J,W)&&(I=Cs(Se.NAVIGATION_DUPLICATED,{to:T,from:J}),at(J,J,!0,!1)),(I?Promise.resolve(I):z(T,J)).catch(E=>kt(E)?kt(E,Se.NAVIGATION_GUARD_REDIRECT)?E:qe(E):re(E,T,J)).then(E=>{if(E){if(kt(E,Se.NAVIGATION_GUARD_REDIRECT))return B(ge({replace:v},_(E.to),{state:typeof E.to=="object"?ge({},de,E.to.state):de,force:m}),q||T)}else E=F(T,J,!0,v,de);return oe(T,J,E),E})}function H($,q){const W=p($,q);return W?Promise.reject(W):Promise.resolve()}function M($){const q=us.values().next().value;return q&&typeof q.runWithContext=="function"?q.runWithContext($):$()}function z($,q){let W;const[J,de,m]=Bf($,q);W=xo(J.reverse(),"beforeRouteLeave",$,q);for(const x of J)x.leaveGuards.forEach(T=>{W.push(Ut(T,$,q))});const v=H.bind(null,$,q);return W.push(v),et(W).then(()=>{W=[];for(const x of l.list())W.push(Ut(x,$,q));return W.push(v),et(W)}).then(()=>{W=xo(de,"beforeRouteUpdate",$,q);for(const x of de)x.updateGuards.forEach(T=>{W.push(Ut(T,$,q))});return W.push(v),et(W)}).then(()=>{W=[];for(const x of m)if(x.beforeEnter)if(it(x.beforeEnter))for(const T of x.beforeEnter)W.push(Ut(T,$,q));else W.push(Ut(x.beforeEnter,$,q));return W.push(v),et(W)}).then(()=>($.matched.forEach(x=>x.enterCallbacks={}),W=xo(m,"beforeRouteEnter",$,q,M),W.push(v),et(W))).then(()=>{W=[];for(const x of r.list())W.push(Ut(x,$,q));return W.push(v),et(W)}).catch(x=>kt(x,Se.NAVIGATION_CANCELLED)?x:Promise.reject(x))}function oe($,q,W){i.list().forEach(J=>M(()=>J($,q,W)))}function F($,q,W,J,de){const m=p($,q);if(m)return m;const v=q===Nt,x=gs?history.state:{};W&&(J||v?o.replace($.fullPath,ge({scroll:v&&x&&x.scroll},de)):o.push($.fullPath,de)),c.value=$,at($,q,W,v),qe()}let Z;function R(){Z||(Z=o.listen(($,q,W)=>{if(!Wt.listening)return;const J=A($),de=D(J,Wt.currentRoute.value);if(de){B(ge(de,{replace:!0,force:!0}),J).catch(Ws);return}f=J;const m=c.value;gs&&Pf(cr(m.fullPath,W.delta),qn()),z(J,m).catch(v=>kt(v,Se.NAVIGATION_ABORTED|Se.NAVIGATION_CANCELLED)?v:kt(v,Se.NAVIGATION_GUARD_REDIRECT)?(B(ge(_(v.to),{force:!0}),J).then(x=>{kt(x,Se.NAVIGATION_ABORTED|Se.NAVIGATION_DUPLICATED)&&!W.delta&&W.type===No.pop&&o.go(-1,!1)}).catch(Ws),Promise.reject()):(W.delta&&o.go(-W.delta,!1),re(v,J,m))).then(v=>{v=v||F(J,m,!1),v&&(W.delta&&!kt(v,Se.NAVIGATION_CANCELLED)?o.go(-W.delta,!1):W.type===No.pop&&kt(v,Se.NAVIGATION_ABORTED|Se.NAVIGATION_DUPLICATED)&&o.go(-1,!1)),oe(J,m,v)}).catch(Ws)}))}let ee=Ps(),ce=Ps(),te;function re($,q,W){qe($);const J=ce.list();return J.length?J.forEach(de=>de($,q,W)):console.error($),Promise.reject($)}function Fe(){return te&&c.value!==Nt?Promise.resolve():new Promise(($,q)=>{ee.add([$,q])})}function qe($){return te||(te=!$,R(),ee.list().forEach(([q,W])=>$?W($):q()),ee.reset()),$}function at($,q,W,J){const{scrollBehavior:de}=e;if(!gs||!de)return Promise.resolve();const m=!W&&Of(cr($.fullPath,0))||(J||!W)&&history.state&&history.state.scroll||null;return xt().then(()=>de($,q,m)).then(v=>v&&Rf(v)).catch(v=>re(v,$,q))}const ze=$=>o.go($);let cs;const us=new Set,Wt={currentRoute:c,listening:!0,addRoute:h,removeRoute:C,clearRoutes:t.clearRoutes,hasRoute:L,getRoutes:k,resolve:A,options:e,push:b,replace:y,go:ze,back:()=>ze(-1),forward:()=>ze(1),beforeEach:l.add,beforeResolve:r.add,afterEach:i.add,onError:ce.add,isReady:Fe,install($){$.component("RouterLink",ad),$.component("RouterView",dd),$.config.globalProperties.$router=Wt,Object.defineProperty($.config.globalProperties,"$route",{enumerable:!0,get:()=>O(c)}),gs&&!cs&&c.value===Nt&&(cs=!0,b(o.location).catch(J=>{}));const q={};for(const J in Nt)Object.defineProperty(q,J,{get:()=>c.value[J],enumerable:!0});$.provide(zn,Wt),$.provide(ul,Yr(q)),$.provide(jo,c);const W=$.unmount;us.add($),$.unmount=function(){us.delete($),us.size<1&&(f=Nt,Z&&Z(),Z=null,c.value=Nt,cs=!1,te=!1),W()}}};function et($){return $.reduce((q,W)=>q.then(()=>M(W)),Promise.resolve())}return Wt}function hd(){return Qe(zn)}function pa(e){return Qe(ul)}const Zn="vnt-web-access-token",Jn=!!globalThis.__VNT_DESKTOP__,Ns=new URL(window.location.href),Do=Ns.searchParams.get("token")||"";Do&&(localStorage.setItem(Zn,Do),Ns.searchParams.delete("token"),window.history.replaceState({},"",`${Ns.pathname}${Ns.search}${Ns.hash}`));const Yn=se(Jn?"":Do||localStorage.getItem(Zn)||""),fl=se(Jn||!!Yn.value),ha=()=>Yn.value,md=e=>{const t=e.trim();localStorage.setItem(Zn,t),Yn.value=t,fl.value=!!t},gd=()=>{localStorage.removeItem(Zn),Yn.value="",fl.value=!1},ot=async(e,t={})=>{if(globalThis.__VNT_IPC_REQUEST__){const r=await globalThis.__VNT_IPC_REQUEST__({method:t.method||"GET",path:e,body:t.body||null});if(r.code!==0)throw new Error(r.msg||"请求失败");return r.data}const s=new Headers(t.headers||{}),n=ha();n&&s.set("Authorization",`Bearer ${n}`);const o=await fetch(e,{...t,headers:s}),l=await o.json();if(o.status===401&&gd(),l.code!==0)throw new Error(l.msg||"请求失败");return l.data},ma={"Content-Type":"application/json"},vd=e=>ot(`/api/info?file_name=${encodeURIComponent(e)}`),bd=e=>ot(`/api/peers?file_name=${encodeURIComponent(e)}`),xd=e=>ot(`/api/routes?file_name=${encodeURIComponent(e)}`),_d=e=>ot(`/api/start/status?file_name=${encodeURIComponent(e)}`),yd=()=>ot("/api/version"),kd=()=>ot("/api/instances"),wd=e=>ot(`/api/instance?file_name=${encodeURIComponent(e)}`,{method:"DELETE"}),dl=(e,t)=>ot(e,{method:"POST",headers:ma,body:JSON.stringify({file_name:t})}),Cd=e=>dl("/api/start",e),ga=e=>dl("/api/stop",e),Sd=e=>dl("/api/restart",e),Ed=()=>ot("/api/config/list"),Td=e=>ot(`/api/config?file_name=${encodeURIComponent(e)}`),Ad=(e,t)=>ot("/api/config",{method:"POST",headers:ma,body:JSON.stringify({file_name:e||null,config:t})}),$d=e=>ot(`/api/config?file_name=${encodeURIComponent(e)}`,{method:"DELETE"});let Id=0;const as=al("ui",()=>{const e=se([]),t=(i,c,f=3e3)=>{const u=++Id;e.value.push({id:u,type:i,message:c}),setTimeout(()=>{e.value=e.value.filter(d=>d.id!==u)},f)},s={success:i=>t("success",i),error:i=>t("error",i,4500),info:i=>t("info",i)},n=Rt({show:!1,title:"",message:"",danger:!1,confirmText:"确定",resolve:null});return{toasts:e,toast:s,confirmState:n,confirm:({title:i="确认操作",message:c="",danger:f=!1,confirmText:u="确定"}={})=>new Promise(d=>{n.show=!0,n.title=i,n.message=c,n.danger=f,n.confirmText=u,n.resolve=d}),confirmOk:()=>{n.show=!1,n.resolve&&n.resolve(!0),n.resolve=null},confirmCancel:()=>{n.show=!1,n.resolve&&n.resolve(!1),n.resolve=null}}}),va=al("startLog",()=>{const e=se(!1),t=se([]),s=se("stopped"),n=se(null),o=se(null);let l=null,r=null,i=null,c=null;const f=({fetchInstances:A,instanceList:_,configList:p})=>{r=A,i=_,c=p},u=me(()=>{if(!n.value)return"";const A=(i?.value||[]).find(p=>p.file_name===n.value);if(A)return A.config_name||A.file_name;const _=(c?.value||[]).find(p=>p.file_name===n.value);return _?_.config_name||_.file_name:n.value}),d=async()=>{if(n.value)try{const A=await _d(n.value);t.value=A.logs||[],s.value=A.status,xt(()=>{o.value&&(o.value.scrollTop=o.value.scrollHeight)}),s.value==="running"?(g(),r&&r(),e.value=!1):s.value==="stopped"&&t.value.length>0&&(g(),r&&r())}catch(A){console.error(A)}},g=()=>{l&&(clearInterval(l),l=null)},h=()=>{g(),l=setInterval(d,1e3),d()};return{showStartLog:e,startLogs:t,startStatus:s,logFileName:n,logContainer:o,logConfigName:u,bindApp:f,openStartLog:A=>{n.value=A,t.value=[],s.value="starting",e.value=!0,h()},pollStartStatus:d,startPolling:h,stopPolling:g,cancelStart:async()=>{g();const A=n.value;if(A)try{await ga(A),t.value.push("启动已手动取消")}catch{}s.value="stopped",r&&r()},close:()=>{e.value=!1}}}),Mt=al("app",()=>{const e=as(),t=va(),s=se({}),n=se([]),o=se(null),l=se([]),r=se({}),i=se({}),c=se(!document.hidden),f=()=>{c.value=!document.hidden};let u=null;const d=me(()=>n.value.filter(R=>R.status==="running").length),g=me(()=>n.value.filter(R=>R.status==="starting").length),h=me(()=>d.value>0?`运行中 x${d.value}`:g.value>0?"启动中...":"未启动"),C=me(()=>o.value&&s.value[o.value]||null),k=me(()=>{if(!o.value)return"";const R=n.value.find(ee=>ee.file_name===o.value);return R?R.config_name||R.file_name:o.value}),L=se(""),A=async()=>{try{L.value=await yd()||""}catch(R){console.error("Fetch version error",R)}},_=me(()=>!!(C.value&&C.value.server_info&&C.value.server_info.some(R=>R.connected))),p=me(()=>{const R=C.value;return!R||!R.server_info||!R.server_info.length?"未配置服务器":`${R.server_info.filter(ee=>ee.connected).length} / ${R.server_info.length} 已连接`}),b=R=>s.value[R]||{},y=async R=>{try{s.value[R]=await vd(R)}catch(ee){console.error("Fetch info error",ee)}},D=async()=>{try{const R=await kd()||[];n.value=R;for(const ee of Object.keys(s.value))R.some(ce=>ce.file_name===ee)||delete s.value[ee];for(const ee of Object.keys(i.value)){const ce=R.find(te=>te.file_name===ee);(!ce||ce.status==="stopped")&&delete i.value[ee]}if(!o.value||!R.some(ee=>ee.file_name===o.value)){const ee=R.find(ce=>ce.status==="running");o.value=ee?ee.file_name:R.length>0?R[0].file_name:null}for(const ee of R)ee.status==="running"&&y(ee.file_name)}catch(R){console.error("Fetch instances error",R)}},B=async()=>{try{l.value=await Ed()||[]}catch(R){console.error("Fetch list error",R)}},H=async R=>{if(!R){e.toast.error("请先选择一个配置");return}if(!r.value[R]){r.value[R]=!0;try{await Cd(R),t.openStartLog(R),D()}catch(ee){e.toast.error("启动失败: "+ee.message)}finally{r.value[R]=!1}}},M=async R=>{if(!(!R||r.value[R])){r.value[R]=!0,i.value[R]=!0;try{await ga(R),e.toast.success("已停止"),t.logFileName===R&&(t.stopPolling(),t.showStartLog=!1),D()}catch(ee){e.toast.error("停止失败: "+ee.message),console.error(ee),delete i.value[R]}finally{r.value[R]=!1}}},z=async R=>{if(!(!R||r.value[R])){r.value[R]=!0;try{await Sd(R),t.openStartLog(R),D()}catch(ee){e.toast.error("重启失败: "+ee.message)}finally{r.value[R]=!1}}},oe=async R=>{if(!(!R||r.value[R])){r.value[R]=!0;try{await wd(R),e.toast.success("已移除"),t.logFileName===R&&(t.stopPolling(),t.showStartLog=!1),o.value===R&&(o.value=null),D()}catch(ee){e.toast.error("移除失败: "+ee.message)}finally{r.value[R]=!1}}};t.bindApp({fetchInstances:D,instanceList:n,configList:l});const F=async()=>{if(!Jn&&!ha())return;document.addEventListener("visibilitychange",f),A(),await D(),B();const R=n.value.find(ee=>ee.status==="starting");R&&t.openStartLog(R.file_name),u=setInterval(()=>{c.value&&D()},3e3)},Z=()=>{document.removeEventListener("visibilitychange",f),t.stopPolling(),u&&clearInterval(u)};return Es()&&(_t(F),Ss(Z)),{instances:s,instanceList:n,selectedInstance:o,configList:l,loadingMap:r,stoppingMap:i,isPageVisible:c,runningCount:d,startingCount:g,headerStatusText:h,selectedInfo:C,selectedConfigName:k,version:L,isServerConnected:_,serverStatusText:p,infoOf:b,fetchInstances:D,fetchInstanceInfo:y,fetchConfigList:B,startVnt:H,stopVnt:M,restartVnt:z,dismissInstance:oe}}),Rd=[{to:"/",label:"网络总览",shortLabel:"总览",icon:"M4 4h6v6H4V4Zm10 0h6v6h-6V4ZM4 14h6v6H4v-6Zm10 0h6v6h-6v-6Z"},{to:"/instances",label:"运行实例",shortLabel:"实例",icon:"M4 18V8m5 10V4m6 14v-7m5 7V6"},{to:"/peers",label:"在线设备",shortLabel:"设备",icon:"M15 19a6 6 0 0 0-12 0m18 0a5 5 0 0 0-5-5m-7-3a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm8 0a3 3 0 1 0 0-6"},{to:"/routes",label:"路由表",shortLabel:"路由",icon:"M6 8a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm12 12a2 2 0 1 0 0-4 2 2 0 0 0 0 4ZM8 6h6a4 4 0 0 1 4 4v2m-3-3 3 3 3-3M16 18h-6a4 4 0 0 1-4-4v-2"},{to:"/config",label:"组网配置",shortLabel:"配置",icon:"M12 15.5a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7Zm7.4-.5a1.7 1.7 0 0 0 .3 1.9l.1.1-2.8 2.8-.1-.1a1.7 1.7 0 0 0-1.9-.3A1.7 1.7 0 0 0 14 21v.2h-4V21a1.7 1.7 0 0 0-1-1.6 1.7 1.7 0 0 0-1.9.3l-.1.1L4.2 17l.1-.1a1.7 1.7 0 0 0 .3-1.9A1.7 1.7 0 0 0 3 14h-.2v-4H3a1.7 1.7 0 0 0 1.6-1 1.7 1.7 0 0 0-.3-1.9L4.2 7 7 4.2l.1.1A1.7 1.7 0 0 0 9 4.6 1.7 1.7 0 0 0 10 3v-.2h4V3a1.7 1.7 0 0 0 1 1.6 1.7 1.7 0 0 0 1.9-.3l.1-.1L19.8 7l-.1.1a1.7 1.7 0 0 0-.3 1.9 1.7 1.7 0 0 0 1.6 1h.2v4H21a1.7 1.7 0 0 0-1.6 1Z"},{to:"/web-access",label:"Web 访问",shortLabel:"Web",desktopOnly:!0,icon:"M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18Zm0 0c2.2-2.5 3.3-5.5 3.3-9S14.2 5.5 12 3m0 18c-2.2-2.5-3.3-5.5-3.3-9S9.8 5.5 12 3M3.5 9h17m-17 6h17"}],ba=()=>Rd.filter(e=>!e.desktopOnly||globalThis.__VNT_DESKTOP__),pl="/assets/vnt-icon-CtSHy0mt.png",Pd={class:"flex h-full min-h-0 flex-col bg-white dark:bg-slate-900"},Od={class:"flex h-16 shrink-0 items-center gap-3 border-b border-slate-200 px-5 dark:border-slate-800"},Md=["src"],Ld={class:"mx-3 mt-4 flex items-center gap-3 rounded-xl border border-slate-200 bg-slate-50 px-3 py-3 dark:border-slate-700 dark:bg-slate-800/60"},Nd={class:"min-w-0"},Vd={class:"mt-0.5 truncate text-xs font-medium text-slate-700 dark:text-slate-200"},jd={class:"mt-4 flex min-h-0 flex-1 flex-col gap-1 overflow-y-auto px-3","aria-label":"主导航"},Dd={class:"h-[18px] w-[18px] shrink-0 fill-none stroke-current",viewBox:"0 0 24 24"},Bd=["d"],Fd={class:"mx-3 mt-3 shrink-0 border-t border-slate-200 px-1 py-4 dark:border-slate-800"},Ud={class:"flex items-center gap-2 text-xs text-slate-400"},Hd={class:"ml-auto font-mono text-[10px]"},kr={__name:"AppSidebar",emits:["navigate"],setup(e){const t=pa(),s=Mt(),n=ba();return(o,l)=>{const r=Un("router-link");return w(),S("div",Pd,[a("div",Od,[a("img",{src:O(pl),alt:"",class:"h-8 w-8 shrink-0"},null,8,Md),l[1]||(l[1]=a("div",null,[a("div",{class:"text-sm font-bold tracking-wide text-slate-900 dark:text-white"},"VNT"),a("div",{class:"text-[9px] font-semibold tracking-[0.18em] text-slate-400"},"CONTROL CENTER")],-1))]),a("div",Ld,[a("span",{class:G(["h-2.5 w-2.5 shrink-0 rounded-full",O(s).runningCount>0?"bg-green-500":O(s).startingCount>0?"animate-pulse bg-amber-400":"bg-slate-300 dark:bg-slate-600"])},null,2),a("div",Nd,[l[2]||(l[2]=a("div",{class:"text-[9px] font-semibold tracking-wider text-slate-400"},"虚拟网络",-1)),a("div",Vd,N(O(s).headerStatusText),1)])]),a("nav",jd,[(w(!0),S(ie,null,Te(O(n),i=>(w(),Re(r,{key:i.to,to:i.to,class:G(["flex min-h-10 items-center gap-3 rounded-lg px-3 text-sm font-medium transition-colors",O(t).path===i.to?"bg-indigo-50 text-indigo-700 dark:bg-indigo-500/10 dark:text-indigo-300":"text-slate-500 hover:bg-slate-100 hover:text-slate-900 dark:text-slate-400 dark:hover:bg-slate-800 dark:hover:text-white"]),onClick:l[0]||(l[0]=c=>o.$emit("navigate"))},{default:Ee(()=>[(w(),S("svg",Dd,[a("path",{d:i.icon,"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.7"},null,8,Bd)])),a("span",null,N(i.label),1)]),_:2},1032,["to","class"]))),128))]),a("div",Fd,[a("div",Ud,[a("span",{class:G(["h-1.5 w-1.5 rounded-full",O(s).version?"bg-green-500":"bg-amber-400"])},null,2),a("span",null,N(O(s).version?"本地服务正常":"正在连接服务…"),1),a("span",Hd,"v"+N(O(s).version||"2.0"),1)])])])}}},Wd={key:0,class:"flex shrink-0 items-center justify-between gap-3 border-b border-slate-200 bg-slate-50/60 px-6 py-4 dark:border-slate-700 dark:bg-slate-800/50"},Kd={class:"custom-scrollbar min-h-0 flex-1 overflow-y-auto"},Gd={key:1,class:"flex shrink-0 items-center justify-end gap-3 border-t border-slate-200 bg-slate-50/60 px-6 py-4 dark:border-slate-700 dark:bg-slate-800/50"},hl={__name:"AppModal",props:{show:{type:Boolean,default:!1},maskClosable:{type:Boolean,default:!0},escClosable:{type:Boolean,default:!0},panelClass:{type:String,default:"w-full max-w-2xl"}},emits:["close"],setup(e,{emit:t}){const s=e,n=t,o=r=>{s.escClosable&&r.key==="Escape"&&n("close")};Ve(()=>s.show,r=>{r?window.addEventListener("keydown",o):window.removeEventListener("keydown",o)}),Ss(()=>window.removeEventListener("keydown",o));const l=()=>{s.maskClosable&&n("close")};return(r,i)=>(w(),Re(Xo,{to:"body"},[ue(wn,{name:"modal"},{default:Ee(()=>[e.show?(w(),S("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-slate-900/40 p-4 backdrop-blur-sm",onClick:ls(l,["self"])},[a("div",{class:G(["modal-panel flex max-h-[90vh] flex-col overflow-hidden rounded-xl border border-slate-200 bg-white shadow-2xl dark:border-slate-700 dark:bg-slate-900",e.panelClass])},[r.$slots.header?(w(),S("div",Wd,[ro(r.$slots,"header")])):fe("",!0),a("div",Kd,[ro(r.$slots,"body")]),r.$slots.footer?(w(),S("div",Gd,[ro(r.$slots,"footer")])):fe("",!0)],2)])):fe("",!0)]),_:3})]))}},qd={class:"w-auto min-w-[260px] max-w-[320px] rounded-lg border border-slate-200 bg-white p-4 text-left text-sm text-slate-600 shadow-2xl dark:border-slate-600 dark:bg-slate-800 dark:text-slate-200"},zd={class:"relative z-10 mb-2 flex items-center justify-between border-b border-slate-200 pb-2 dark:border-slate-600"},Zd={class:"badge-green border border-green-200 dark:border-green-800"},Jd={key:0,class:"relative z-10 mb-3"},Yd={class:"flex flex-wrap gap-1"},Qd={key:1,class:"relative z-10"},Xd={class:"whitespace-normal break-all rounded border border-slate-200 bg-slate-50 p-1.5 font-mono text-xs leading-relaxed text-slate-600 dark:border-slate-700/50 dark:bg-slate-900/50 dark:text-slate-200"},ep={__name:"AppTooltip",setup(e,{expose:t}){const s=se({show:!1,x:0,y:0,info:null});let n=null;const o=(c,f)=>{if(!f.nat_info)return;n&&(clearTimeout(n),n=null);const u=c.currentTarget.getBoundingClientRect();s.value={show:!0,x:u.left+u.width/2,y:u.bottom+10,info:f.nat_info}},l=()=>{n=setTimeout(()=>{s.value.show=!1},100)},r=()=>{n&&(clearTimeout(n),n=null)},i=()=>{s.value.show=!1};return t({showPeerTooltip:o,hidePeerTooltip:l}),(c,f)=>(w(),Re(Xo,{to:"body"},[s.value.show?(w(),S("div",{key:0,style:Mn({top:s.value.y+"px",left:s.value.x+"px"}),class:"fixed z-[9999] mt-1 -translate-x-1/2 transform",onMouseenter:r,onMouseleave:i},[a("div",qd,[f[3]||(f[3]=a("div",{class:"absolute -top-2 left-1/2 h-4 w-4 -translate-x-1/2 rotate-45 transform border-l border-t border-slate-200 bg-white dark:border-slate-600 dark:bg-slate-800"},null,-1)),a("div",zd,[f[0]||(f[0]=a("span",{class:"text-xs font-bold uppercase text-slate-400"},"NAT Type",-1)),a("span",Zd,N(s.value.info.nat_type),1)]),s.value.info.public_ips&&s.value.info.public_ips.length>0?(w(),S("div",Jd,[f[1]||(f[1]=a("span",{class:"mb-1 block text-xs text-slate-400"},"Public IPv4:",-1)),a("div",Yd,[(w(!0),S(ie,null,Te(s.value.info.public_ips,u=>(w(),S("span",{key:u,class:"rounded border border-slate-200 bg-slate-100 px-1.5 py-0.5 font-mono text-xs tabular-nums text-slate-600 dark:border-slate-600 dark:bg-slate-700 dark:text-slate-200"},N(u),1))),128))])])):fe("",!0),s.value.info.ipv6?(w(),S("div",Qd,[f[2]||(f[2]=a("span",{class:"mb-1 block text-xs text-slate-400"},"IPv6:",-1)),a("div",Xd,N(s.value.info.ipv6),1)])):fe("",!0)])],36)):fe("",!0)]))}},tp={class:"text-lg font-bold text-slate-900 flex items-center gap-2 dark:text-white"},sp={key:0,class:"w-5 h-5 text-red-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},np={class:"px-6 py-5 text-sm text-slate-600 break-all dark:text-slate-300"},op={__name:"ConfirmHost",setup(e){const t=as();return(s,n)=>(w(),Re(hl,{show:O(t).confirmState.show,"panel-class":"w-full max-w-sm",onClose:O(t).confirmCancel},{header:Ee(()=>[a("h3",tp,[O(t).confirmState.danger?(w(),S("svg",sp,[...n[2]||(n[2]=[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"},null,-1)])])):fe("",!0),ae(" "+N(O(t).confirmState.title),1)])]),body:Ee(()=>[a("p",np,N(O(t).confirmState.message),1)]),footer:Ee(()=>[a("button",{class:"btn-ghost",onClick:n[0]||(n[0]=(...o)=>O(t).confirmCancel&&O(t).confirmCancel(...o))},"取消"),a("button",{class:G(O(t).confirmState.danger?"btn-danger":"btn-primary"),onClick:n[1]||(n[1]=(...o)=>O(t).confirmOk&&O(t).confirmOk(...o))},N(O(t).confirmState.confirmText),3)]),_:1},8,["show","onClose"]))}},lp={class:"pointer-events-none fixed right-4 top-4 z-[100] flex flex-col items-end gap-2"},rp={class:"flex items-center gap-2 px-4 py-2.5"},ip=["d"],ap={class:"break-all text-sm text-slate-700 dark:text-slate-200"},cp={__name:"ToastHost",setup(e){const t=as(),s=l=>l==="success"?"bg-green-500":l==="error"?"bg-red-500":"bg-indigo-500",n=l=>l==="success"?"text-green-500":l==="error"?"text-red-500":"text-indigo-500",o=l=>l==="success"?"M5 13l4 4L19 7":l==="error"?"M6 18L18 6M6 6l12 12":"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z";return(l,r)=>(w(),Re(Xo,{to:"body"},[a("div",lp,[ue(il,{name:"toast"},{default:Ee(()=>[(w(!0),S(ie,null,Te(O(t).toasts,i=>(w(),S("div",{key:i.id,class:"pointer-events-auto flex max-w-sm items-stretch overflow-hidden rounded-lg border border-slate-200 bg-white shadow-lg dark:border-slate-700 dark:bg-slate-800"},[a("span",{class:G(["w-1 shrink-0",s(i.type)])},null,2),a("div",rp,[(w(),S("svg",{class:G(["h-4 w-4 shrink-0",n(i.type)]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:o(i.type)},null,8,ip)],2)),a("span",ap,N(i.message),1)])]))),128))]),_:1})])]))}},up={class:"grid h-[100dvh] place-items-center overflow-y-auto bg-slate-50 p-4 text-slate-700 dark:bg-slate-950 dark:text-slate-200"},fp={class:"mb-7 flex items-center gap-3"},dp=["src"],pp=["disabled"],hp={__name:"AccessGate",setup(e){const t=se(""),s=()=>{t.value.trim()&&(md(t.value),window.location.reload())};return(n,o)=>(w(),S("main",up,[a("form",{class:"w-full max-w-md rounded-2xl border border-slate-200 bg-white p-6 shadow-sm sm:p-8 dark:border-slate-800 dark:bg-slate-900",onSubmit:ls(s,["prevent"])},[a("div",fp,[a("img",{src:O(pl),alt:"",class:"h-10 w-10 shrink-0"},null,8,dp),o[1]||(o[1]=a("div",null,[a("h1",{class:"text-lg font-bold text-slate-900 dark:text-white"},"访问 VNT 控制台"),a("p",{class:"mt-0.5 text-xs text-slate-400"},"请输入桌面端 Web 访问设置中的令牌")],-1))]),o[2]||(o[2]=a("label",{class:"mb-2 block text-sm font-medium text-slate-700 dark:text-slate-200",for:"access-token"},"访问令牌",-1)),xe(a("input",{id:"access-token","onUpdate:modelValue":o[0]||(o[0]=l=>t.value=l),class:"input font-mono",type:"password",autocomplete:"current-password",autofocus:"",placeholder:"粘贴访问令牌"},null,512),[[Ie,t.value]]),a("button",{class:"btn-primary mt-5 w-full",type:"submit",disabled:!t.value.trim()},"进入控制台",8,pp),o[3]||(o[3]=a("p",{class:"mt-5 text-center text-xs leading-5 text-slate-400"},"令牌只保存在当前浏览器中,可随时在桌面端重新生成。",-1))],32)]))}},mp={key:1,class:"flex h-[100dvh] min-h-0 overflow-hidden bg-slate-50 text-slate-700 dark:bg-slate-950 dark:text-slate-200"},gp={class:"hidden w-60 shrink-0 border-r border-slate-200 dark:border-slate-800 lg:block"},vp={key:0,class:"fixed inset-0 z-40 lg:hidden"},bp={class:"drawer-panel relative h-full w-[min(82vw,288px)] border-r border-slate-200 shadow-2xl dark:border-slate-700"},xp={class:"flex min-w-0 flex-1 flex-col"},_p={class:"flex h-16 shrink-0 items-center gap-3 border-b border-slate-200 bg-white/90 px-4 backdrop-blur lg:px-6 dark:border-slate-800 dark:bg-slate-900/90"},yp={class:"min-w-0"},kp={class:"truncate text-lg font-bold text-slate-900 dark:text-white"},wp={class:"ml-auto flex items-center gap-2"},Cp={class:"flex h-8 items-center gap-2 rounded-lg border border-slate-200 bg-white px-2.5 text-xs font-medium text-slate-500 sm:px-3 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-300"},Sp={class:"hidden sm:inline"},Ep=["title","aria-label"],Tp={key:0,class:"h-4 w-4 fill-none stroke-current",viewBox:"0 0 24 24"},Ap={key:1,class:"h-4 w-4 fill-none stroke-current",viewBox:"0 0 24 24"},$p={class:"custom-scrollbar min-h-0 flex-1 overflow-x-hidden overflow-y-auto"},Ip={class:"mx-auto w-full max-w-7xl px-4 py-5 sm:px-5 lg:px-7 lg:py-6"},Rp={class:"flex min-w-0 items-center gap-3"},Pp={class:"truncate text-base font-bold text-slate-900 sm:text-lg dark:text-white"},Op={class:"max-w-[40%] truncate font-mono text-xs text-indigo-600 dark:text-indigo-400"},Mp={class:"break-all"},Lp={key:0,class:"animate-pulse text-indigo-600 dark:text-indigo-400"},Np={__name:"App",setup(e){const t=Mt(),s=va(),n=pa(),o=hd(),l=se(null);Bs("peerTooltip",l);const r=se(!1),i=ba(),c=me(()=>i.find(C=>C.to===n.path)||i[0]),f=localStorage.getItem("vnt-theme"),u=se(f?f==="dark":window.matchMedia("(prefers-color-scheme: dark)").matches),d=()=>document.documentElement.classList.toggle("dark",u.value),g=()=>{u.value=!u.value,localStorage.setItem("vnt-theme",u.value?"dark":"light"),d()};d(),Ve(()=>n.path,()=>{r.value=!1});const h=C=>{if(!(C.ctrlKey||C.metaKey)||C.altKey)return;const k=Number(C.key)-1;k>=0&&kwindow.addEventListener("keydown",h)),Fn(()=>window.removeEventListener("keydown",h)),(C,k)=>{const L=Un("router-view");return!O(Jn)&&!O(fl)?(w(),Re(hp,{key:0})):(w(),S("div",mp,[a("aside",gp,[ue(kr)]),ue(wn,{name:"drawer"},{default:Ee(()=>[r.value?(w(),S("div",vp,[a("button",{class:"absolute inset-0 bg-slate-950/45 backdrop-blur-[2px]","aria-label":"关闭导航",onClick:k[0]||(k[0]=A=>r.value=!1)}),a("aside",bp,[ue(kr,{onNavigate:k[1]||(k[1]=A=>r.value=!1)})])])):fe("",!0)]),_:1}),a("div",xp,[a("header",_p,[a("button",{class:"grid h-9 w-9 shrink-0 place-items-center rounded-lg text-slate-500 hover:bg-slate-100 hover:text-slate-900 lg:hidden dark:text-slate-400 dark:hover:bg-slate-800 dark:hover:text-white","aria-label":"打开导航",onClick:k[2]||(k[2]=A=>r.value=!0)},[...k[5]||(k[5]=[a("svg",{class:"h-5 w-5 fill-none stroke-current",viewBox:"0 0 24 24"},[a("path",{d:"M4 7h16M4 12h16M4 17h16","stroke-linecap":"round","stroke-width":"2"})],-1)])]),a("div",yp,[a("h1",kp,N(c.value.label),1),k[6]||(k[6]=a("p",{class:"hidden text-xs text-slate-400 sm:block"},"VNT 虚拟局域网管理",-1))]),a("div",wp,[a("div",Cp,[a("span",{class:G(["h-1.5 w-1.5 rounded-full",O(t).runningCount>0?"bg-green-500":O(t).startingCount>0?"animate-pulse bg-amber-400":"bg-slate-300 dark:bg-slate-600"])},null,2),a("span",Sp,N(O(t).headerStatusText),1)]),a("button",{class:"grid h-8 w-8 place-items-center rounded-lg border border-slate-200 bg-white text-slate-500 hover:border-indigo-300 hover:text-indigo-600 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-400 dark:hover:border-indigo-500 dark:hover:text-indigo-400",title:u.value?"切换浅色模式":"切换深色模式","aria-label":u.value?"切换浅色模式":"切换深色模式",onClick:g},[u.value?(w(),S("svg",Tp,[...k[7]||(k[7]=[a("circle",{cx:"12",cy:"12",r:"4"},null,-1),a("path",{d:"M12 2v2m0 16v2M4.9 4.9l1.4 1.4m11.4 11.4 1.4 1.4M2 12h2m16 0h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4","stroke-linecap":"round","stroke-width":"1.7"},null,-1)])])):(w(),S("svg",Ap,[...k[8]||(k[8]=[a("path",{d:"M20.5 15.2A8.5 8.5 0 0 1 8.8 3.5 8.5 8.5 0 1 0 20.5 15.2Z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.7"},null,-1)])]))],8,Ep)])]),a("main",$p,[a("div",Ip,[ue(L,null,{default:Ee(({Component:A})=>[ue(wn,{name:"fade",mode:"out-in"},{default:Ee(()=>[(w(),Re(Rc(A)))]),_:2},1024)]),_:1})])])]),ue(hl,{show:O(s).showStartLog,"mask-closable":O(s).startStatus!=="starting","esc-closable":O(s).startStatus!=="starting","panel-class":"w-full max-w-2xl",onClose:O(s).close},{header:Ee(()=>[a("div",Rp,[a("span",{class:G(["h-2 w-2 shrink-0 rounded-full",O(s).startStatus==="starting"?"animate-pulse bg-amber-400":O(s).startStatus==="running"?"bg-green-500":"bg-red-500"])},null,2),a("h3",Pp,N(O(s).startStatus==="starting"?"正在建立虚拟网络":O(s).startStatus==="running"?"网络已连接":"连接未完成"),1)]),a("span",Op,N(O(s).logConfigName),1)]),body:Ee(()=>[a("div",{ref:A=>O(s).logContainer=A,class:"custom-scrollbar h-64 space-y-2 overflow-y-auto border-y border-slate-200 bg-slate-50 p-4 font-mono text-xs text-slate-600 sm:h-80 sm:p-6 dark:border-slate-800 dark:bg-slate-950 dark:text-slate-300"},[(w(!0),S(ie,null,Te(O(s).startLogs,(A,_)=>(w(),S("div",{key:_,class:"flex gap-3"},[k[9]||(k[9]=a("span",{class:"text-indigo-600 dark:text-indigo-400"},"›",-1)),a("span",Mp,N(A),1)]))),128)),O(s).startStatus==="starting"?(w(),S("div",Lp,"等待下一阶段…")):fe("",!0)],512)]),footer:Ee(()=>[O(s).startStatus==="starting"?(w(),S("button",{key:0,class:"btn-ghost",onClick:k[3]||(k[3]=(...A)=>O(s).cancelStart&&O(s).cancelStart(...A))},"取消连接")):(w(),S("button",{key:1,class:"btn-primary",onClick:k[4]||(k[4]=(...A)=>O(s).close&&O(s).close(...A))},"完成"))]),_:1},8,["show","mask-closable","esc-closable","onClose"]),ue(cp),ue(op),ue(ep,{ref_key:"tooltipRef",ref:l},null,512)]))}}},Qn=(e,t)=>{const s=e.__vccOpts||e;for(const[n,o]of t)s[n]=o;return s},Vp=["aria-expanded","disabled"],jp=["aria-selected","disabled","data-option-index","onMouseenter","onClick"],Dp={class:"min-w-0 flex-1 truncate"},Bp={key:0,class:"h-4 w-4 shrink-0 fill-none stroke-current",viewBox:"0 0 24 24","aria-hidden":"true"},Fp={key:0,class:"px-3 py-4 text-center text-xs text-slate-400"},Up=Object.assign({inheritAttrs:!1},{__name:"AppSelect",props:{modelValue:{default:null},options:{type:Array,default:()=>[]},placeholder:{type:String,default:"请选择"},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{emit:t}){const s=e,n=t,o=se(null),l=se(null),r=se(!1),i=se(-1),c=`app-select-${yc().replaceAll(":","")}`,f=me(()=>s.options.findIndex(_=>Object.is(_.value,s.modelValue))),u=me(()=>s.options[f.value]||null),d=(_,p)=>{if(!s.options.length)return-1;let b=_;for(let y=0;y{s.disabled||(r.value=!0,i.value=f.value>=0?f.value:d(-1,1),await xt(),o.value?.querySelector(`[data-option-index="${i.value}"]`)?.scrollIntoView({block:"nearest"}))},h=(_=!1)=>{r.value=!1,_&&l.value?.focus()},C=_=>{_.disabled||(n("update:modelValue",_.value),h(!0))},k=_=>{i.value=d(i.value,_),xt(()=>{o.value?.querySelector(`[data-option-index="${i.value}"]`)?.scrollIntoView({block:"nearest"})})},L=_=>{if(!s.disabled){if(_.key==="ArrowDown"||_.key==="ArrowUp"){_.preventDefault(),r.value?k(_.key==="ArrowDown"?1:-1):g();return}if(_.key==="Enter"||_.key===" "){_.preventDefault(),r.value?i.value>=0&&C(s.options[i.value]):g();return}if(_.key==="Escape"&&r.value){_.preventDefault(),h(!0);return}_.key==="Home"&&r.value?(_.preventDefault(),i.value=d(-1,1)):_.key==="End"&&r.value?(_.preventDefault(),i.value=d(0,-1)):_.key==="Tab"&&h()}},A=_=>{r.value&&!o.value?.contains(_.target)&&h()};return Ve(()=>s.disabled,_=>{_&&h()}),_t(()=>document.addEventListener("pointerdown",A)),Fn(()=>document.removeEventListener("pointerdown",A)),(_,p)=>(w(),S("div",{ref_key:"root",ref:o,class:"relative w-full"},[a("button",Di({ref_key:"trigger",ref:l},_.$attrs,{type:"button",role:"combobox","aria-expanded":r.value,"aria-controls":c,"aria-haspopup":"listbox",disabled:e.disabled,class:["input flex min-h-10 items-center justify-between gap-3 text-left",r.value?"border-indigo-500 ring-2 ring-indigo-500/25":""],onClick:p[0]||(p[0]=b=>r.value?h():g()),onKeydown:L}),[a("span",{class:G(["min-w-0 flex-1 truncate",u.value?"":"text-slate-400 dark:text-slate-500"])},N(u.value?.label||e.placeholder),3),(w(),S("svg",{class:G(["h-4 w-4 shrink-0 fill-none stroke-current text-slate-400 transition-transform duration-150",r.value?"rotate-180 text-indigo-500":""]),viewBox:"0 0 24 24","aria-hidden":"true"},[...p[1]||(p[1]=[a("path",{d:"m7 10 5 5 5-5","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.8"},null,-1)])],2))],16,Vp),ue(wn,{name:"select-menu"},{default:Ee(()=>[r.value?(w(),S("div",{key:0,id:c,role:"listbox",class:"custom-scrollbar absolute z-40 mt-1.5 max-h-60 w-full overflow-y-auto rounded-xl border border-slate-200 bg-white p-1.5 shadow-xl shadow-slate-900/10 dark:border-slate-700 dark:bg-slate-800 dark:shadow-black/30"},[(w(!0),S(ie,null,Te(e.options,(b,y)=>(w(),S("button",{key:`${String(b.value)}-${y}`,type:"button",role:"option","aria-selected":Object.is(b.value,e.modelValue),disabled:b.disabled,"data-option-index":y,class:G(["flex w-full items-center gap-2 rounded-lg px-3 py-2.5 text-left text-sm transition-colors disabled:cursor-not-allowed disabled:opacity-40",[Object.is(b.value,e.modelValue)?"bg-indigo-50 font-medium text-indigo-700 dark:bg-indigo-500/15 dark:text-indigo-300":"text-slate-600 hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-slate-700/70",i.value===y&&!Object.is(b.value,e.modelValue)?"bg-slate-100 dark:bg-slate-700/70":""]]),onMouseenter:D=>i.value=y,onClick:D=>C(b)},[a("span",Dp,N(b.label),1),Object.is(b.value,e.modelValue)?(w(),S("svg",Bp,[...p[2]||(p[2]=[a("path",{d:"m5 12 4 4L19 6","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)])])):fe("",!0)],42,jp))),128)),e.options.length===0?(w(),S("div",Fp,"暂无可选项")):fe("",!0)])):fe("",!0)]),_:1})],512))}}),ml=Qn(Up,[["__scopeId","data-v-2fb2198c"]]),Hp={class:"card"},Wp={key:0,class:"flex flex-wrap items-center justify-between gap-3"},Kp={key:1,class:"text-sm muted"},Gp={key:2,class:"flex flex-col gap-3 sm:flex-row sm:items-end"},qp={class:"flex-1"},zp=["disabled"],Zp={key:0,class:"animate-spin"},xa={__name:"StartPanel",setup(e){const t=Mt(),s=as(),n=se(""),o=me(()=>t.configList.filter(i=>!t.instanceList.some(c=>c.file_name===i.file_name))),l=me(()=>o.value.map(i=>({value:i.file_name,label:i.config_name||i.file_name})));Ve(o,i=>{i.some(c=>c.file_name===n.value)||(n.value=i.length?i[0].file_name:"")},{immediate:!0});const r=()=>{if(!n.value){s.toast.error("请先选择一个配置");return}t.startVnt(n.value)};return(i,c)=>{const f=Un("router-link");return w(),S("div",Hp,[c[5]||(c[5]=a("h2",{class:"mb-4 text-base font-bold text-slate-900 dark:text-white"},"启动组网",-1)),O(t).configList.length===0?(w(),S("div",Wp,[c[2]||(c[2]=a("p",{class:"text-sm muted"},"还没有任何配置,先创建一个组网配置吧。",-1)),ue(f,{to:"/config",class:"btn-primary btn-sm"},{default:Ee(()=>[...c[1]||(c[1]=[ae("去新建配置",-1)])]),_:1})])):o.value.length===0?(w(),S("div",Kp," 所有配置均已启动。 ")):(w(),S("div",Gp,[a("div",qp,[c[3]||(c[3]=a("label",{class:"mb-1.5 block text-xs font-medium muted"},"选择配置",-1)),ue(ml,{modelValue:n.value,"onUpdate:modelValue":c[0]||(c[0]=u=>n.value=u),options:l.value,placeholder:"请选择配置…","aria-label":"选择配置"},null,8,["modelValue","options"])]),a("button",{class:"btn-primary px-8",disabled:!n.value||!!O(t).loadingMap[n.value],onClick:r},[O(t).loadingMap[n.value]?(w(),S("span",Zp,"⟳")):fe("",!0),c[4]||(c[4]=ae(" 启动 ",-1))],8,zp)]))])}}},Jp={class:"flex items-center justify-between gap-2"},Yp=["title"],Qp={class:"flex shrink-0 items-center gap-1.5"},Xp={key:0,class:"badge-yellow",title:"配置文件在启动后被修改,重启实例后生效"},e0={class:"mt-2 text-sm"},t0={class:"ml-1 font-mono tabular-nums text-indigo-600 dark:text-indigo-400"},s0={class:"mt-3 flex gap-4 text-xs muted"},n0={class:"font-bold tabular-nums text-blue-600 dark:text-blue-400"},o0={class:"font-bold tabular-nums text-green-600 dark:text-green-400"},l0={class:"font-bold tabular-nums text-slate-400"},r0={class:"mt-4 flex flex-wrap justify-end gap-2"},i0={key:0,class:"flex items-center gap-1.5 text-xs muted"},a0=["disabled"],c0={key:0,class:"animate-spin"},u0=["disabled"],f0={key:0,class:"animate-spin"},d0=["disabled"],p0={key:0,class:"animate-spin"},_a={__name:"InstanceCard",props:{inst:{type:Object,required:!0},selectable:{type:Boolean,default:!1}},setup(e){const t=e,s=Mt(),n=as(),o=me(()=>s.infoOf(t.inst.file_name)),l=me(()=>!!s.loadingMap[t.inst.file_name]),r=me(()=>!!s.stoppingMap[t.inst.file_name]),i=me(()=>t.inst.config_name||t.inst.file_name),c=C=>r.value?"badge-yellow":C==="running"?"badge-green":C==="starting"?"badge-blue":"badge-gray",f=C=>r.value?"停止中":C==="running"?"运行中":C==="starting"?"启动中":"已停止",u=()=>{t.selectable&&(s.selectedInstance=t.inst.file_name)},d=async()=>{await n.confirm({title:"停止组网",message:`确定要停止 ${i.value} 吗?`,danger:!0,confirmText:"停止"})&&s.stopVnt(t.inst.file_name)},g=async()=>{await n.confirm({title:"重启组网",message:`确定要重启 ${i.value} 吗?`})&&s.restartVnt(t.inst.file_name)},h=async()=>{await n.confirm({title:"移除实例",message:`确定要移除已停止的实例 ${i.value} 吗?`,danger:!0,confirmText:"移除"})&&s.dismissInstance(t.inst.file_name)};return(C,k)=>(w(),S("div",{class:G(["card",[e.selectable?"cursor-pointer":"",e.selectable&&O(s).selectedInstance===e.inst.file_name?"ring-2 ring-indigo-500 dark:ring-indigo-400":""]]),onClick:u},[a("div",Jp,[a("h3",{class:"truncate text-base font-bold text-slate-900 dark:text-white",title:e.inst.file_name},N(i.value),9,Yp),a("div",Qp,[o.value.config_changed?(w(),S("span",Xp," 配置发生变化 ")):fe("",!0),a("span",{class:G([c(e.inst.status),r.value?"animate-pulse":""])},N(f(e.inst.status)),3)])]),a("div",e0,[k[0]||(k[0]=a("span",{class:"muted"},"虚拟 IP:",-1)),a("span",t0,N(o.value.ip||"-"),1)]),a("div",s0,[a("span",null,[k[1]||(k[1]=ae(" 在线 ",-1)),a("span",n0,N(o.value.online_client_num||0),1)]),a("span",null,[k[2]||(k[2]=ae(" 直连 ",-1)),a("span",o0,N(o.value.direct_client_num||0),1)]),a("span",null,[k[3]||(k[3]=ae(" 离线 ",-1)),a("span",l0,N(o.value.offline_client_num||0),1)])]),a("div",r0,[r.value?(w(),S("span",i0,[...k[4]||(k[4]=[a("span",{class:"inline-block animate-spin"},"⟳",-1),ae(" 正在停止,请稍候... ",-1)])])):(w(),S(ie,{key:1},[e.inst.status==="running"||e.inst.status==="stopped"?(w(),S("button",{key:0,class:"btn-primary btn-sm",disabled:l.value,onClick:ls(g,["stop"])},[l.value?(w(),S("span",c0,"⟳")):fe("",!0),ae(" "+N(e.inst.status==="stopped"?"重新启动":"重启"),1)],8,a0)):fe("",!0),e.inst.status!=="stopped"?(w(),S("button",{key:1,class:"btn-danger btn-sm",disabled:l.value,onClick:ls(d,["stop"])},[l.value?(w(),S("span",f0,"⟳")):fe("",!0),k[5]||(k[5]=ae(" 停止 ",-1))],8,u0)):fe("",!0),e.inst.status==="stopped"?(w(),S("button",{key:2,class:"btn-ghost btn-sm",disabled:l.value,onClick:ls(h,["stop"])},[l.value?(w(),S("span",p0,"⟳")):fe("",!0),k[6]||(k[6]=ae(" 移除 ",-1))],8,d0)):fe("",!0)],64))])],2))}},h0={class:"card p-12 text-center text-slate-500 dark:text-slate-400"},on={__name:"EmptyState",props:{text:{type:String,default:"暂无数据"}},setup(e){return(t,s)=>(w(),S("div",h0,[s[0]||(s[0]=a("svg",{class:"w-12 h-12 mx-auto mb-3 text-slate-300 dark:text-slate-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.5",d:"M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4"})],-1)),a("p",null,N(e.text),1)]))}},m0={class:"space-y-6"},g0={class:"flex flex-wrap items-end justify-between gap-4"},v0={class:"page-subtitle"},b0={class:"grid grid-cols-2 gap-4 lg:grid-cols-4"},x0={class:"card"},_0={class:"mt-2 text-2xl font-bold tabular-nums text-slate-900 dark:text-white"},y0={class:"ml-1 text-sm font-normal muted"},k0={class:"card"},w0={class:"mt-2 text-2xl font-bold tabular-nums text-slate-900 dark:text-white"},C0={class:"card"},S0={class:"mt-2 text-2xl font-bold tabular-nums text-slate-900 dark:text-white"},E0={class:"card"},T0={class:"mt-2 text-2xl font-bold tabular-nums text-slate-900 dark:text-white"},A0={class:"text-sm font-normal muted"},$0={key:1,class:"muted"},I0={class:"mb-3 flex items-center justify-between"},R0={__name:"DashboardView",setup(e){const t=Mt(),s=me(()=>Object.values(t.instances).reduce((l,r)=>l+(r?.online_client_num||0),0)),n=me(()=>{const l=t.instanceList.filter(i=>i.status==="running");return{connected:l.filter(i=>t.instances[i.file_name]?.server_info?.some(f=>f.connected)).length,total:l.length}}),o=me(()=>t.runningCount>0?`运行中 ${t.runningCount} 个实例`:t.startingCount>0?"有实例正在启动...":"全部实例已停止");return(l,r)=>{const i=Un("router-link");return w(),S("div",m0,[a("div",g0,[a("div",null,[r[0]||(r[0]=a("h1",{class:"page-title"},"总览",-1)),a("p",v0,N(o.value),1)]),ue(i,{to:"/config",class:"btn-ghost btn-sm"},{default:Ee(()=>[...r[1]||(r[1]=[ae("管理配置",-1)])]),_:1})]),a("div",b0,[a("div",x0,[r[2]||(r[2]=a("div",{class:"text-xs font-medium muted"},"运行实例",-1)),a("div",_0,[ae(N(O(t).runningCount),1),a("span",y0,"/ "+N(O(t).instanceList.length),1)])]),a("div",k0,[r[3]||(r[3]=a("div",{class:"text-xs font-medium muted"},"配置总数",-1)),a("div",w0,N(O(t).configList.length),1)]),a("div",C0,[r[4]||(r[4]=a("div",{class:"text-xs font-medium muted"},"在线设备",-1)),a("div",S0,N(s.value),1)]),a("div",E0,[r[5]||(r[5]=a("div",{class:"text-xs font-medium muted"},"服务器连接",-1)),a("div",T0,[n.value.total>0?(w(),S(ie,{key:0},[a("span",{class:G(n.value.connected>0?"text-green-600 dark:text-green-400":"text-red-500")},N(n.value.connected),3),a("span",A0,"/ "+N(n.value.total)+" 已连接",1)],64)):(w(),S("span",$0,"-"))])])]),ue(xa),a("div",null,[a("div",I0,[r[7]||(r[7]=a("h2",{class:"text-base font-bold text-slate-900 dark:text-white"},"实例概览",-1)),ue(i,{to:"/instances",class:"text-sm font-medium text-indigo-600 hover:text-indigo-500 dark:text-indigo-400"},{default:Ee(()=>[...r[6]||(r[6]=[ae("查看详情 →",-1)])]),_:1})]),O(t).instanceList.length===0?(w(),Re(on,{key:0,text:O(t).configList.length===0?"暂无配置,请先新建配置":"暂无运行中的组网,请在上方选择配置启动"},null,8,["text"])):(w(),Re(il,{key:1,name:"card-list",tag:"div",class:"grid grid-cols-1 gap-4 md:grid-cols-2"},{default:Ee(()=>[(w(!0),S(ie,null,Te(O(t).instanceList,c=>(w(),Re(_a,{key:c.file_name,inst:c},null,8,["inst"]))),128))]),_:1}))])])}}},P0={class:"space-y-6"},O0={class:"card"},M0={class:"mb-4 text-lg font-bold text-slate-900 dark:text-white"},L0={class:"ml-2 text-sm font-medium text-indigo-600 dark:text-indigo-400"},N0={class:"grid grid-cols-1 gap-4 text-sm md:grid-cols-2"},V0={class:"flex justify-between border-b border-slate-100 pb-2 dark:border-slate-700"},j0={class:"font-mono tabular-nums text-slate-900 dark:text-white"},D0={class:"flex justify-between border-b border-slate-100 pb-2 dark:border-slate-700"},B0={class:"font-mono text-slate-900 dark:text-white"},F0={class:"flex justify-between border-b border-slate-100 pb-2 dark:border-slate-700"},U0={class:"font-mono text-slate-900 dark:text-white"},H0={class:"flex justify-between border-b border-slate-100 pb-2 dark:border-slate-700"},W0={class:"font-mono tabular-nums text-slate-900 dark:text-white"},K0={class:"flex justify-between border-b border-slate-100 pb-2 dark:border-slate-700"},G0={class:"font-mono text-indigo-600 dark:text-indigo-400"},q0={class:"flex justify-between border-b border-slate-100 pb-2 dark:border-slate-700"},z0=["title"],Z0={class:"flex justify-between border-b border-slate-100 pb-2 dark:border-slate-700"},J0={class:"text-slate-900 dark:text-white"},Y0={class:"flex justify-between border-b border-slate-100 pb-2 dark:border-slate-700"},Q0=["title"],X0={class:"mt-4 grid grid-cols-2 gap-3 md:grid-cols-4"},eh={class:"text-sm text-slate-600 dark:text-slate-300"},th={class:"mt-4"},sh={class:"flex flex-wrap gap-2"},nh={key:0,class:"text-xs text-slate-400"},oh={class:"card p-0 overflow-hidden"},lh={class:"custom-scrollbar max-h-[400px] overflow-x-auto"},rh={class:"table"},ih={class:"font-mono"},ah={class:"tabular-nums"},ch={key:0},uh={__name:"InstancesView",setup(e){const t=Mt();return(s,n)=>(w(),S("div",P0,[n[13]||(n[13]=a("div",null,[a("h1",{class:"page-title"},"实例"),a("p",{class:"page-subtitle"},"管理组网实例,点击卡片查看详情")],-1)),ue(xa),O(t).instanceList.length===0?(w(),Re(on,{key:0,text:"暂无运行中的组网,请在上方选择配置启动"})):(w(),Re(il,{key:1,name:"card-list",tag:"div",class:"grid grid-cols-1 gap-4 md:grid-cols-2"},{default:Ee(()=>[(w(!0),S(ie,null,Te(O(t).instanceList,o=>(w(),Re(_a,{key:o.file_name,inst:o,selectable:""},null,8,["inst"]))),128))]),_:1})),O(t).selectedInstance&&O(t).selectedInfo?(w(),S(ie,{key:2},[a("div",O0,[a("h2",M0,[n[0]||(n[0]=ae(" 网络详情 ",-1)),a("span",L0,N(O(t).selectedConfigName),1)]),a("div",N0,[a("div",V0,[n[1]||(n[1]=a("span",{class:"muted"},"虚拟 IP / 掩码",-1)),a("span",j0,N(O(t).selectedInfo.ip||"-")+" / "+N(O(t).selectedInfo.prefix_len||"-"),1)]),a("div",D0,[n[2]||(n[2]=a("span",{class:"muted"},"网关",-1)),a("span",B0,N(O(t).selectedInfo.gateway||"-"),1)]),a("div",F0,[n[3]||(n[3]=a("span",{class:"muted"},"网络编号",-1)),a("span",U0,N(O(t).selectedInfo.network_code||"-"),1)]),a("div",H0,[n[4]||(n[4]=a("span",{class:"muted"},"MTU",-1)),a("span",W0,N(O(t).selectedInfo.mtu||""),1)]),a("div",K0,[n[5]||(n[5]=a("span",{class:"muted"},"NAT 类型",-1)),a("span",G0,N(O(t).selectedInfo.nat_type||"Unknown"),1)]),a("div",q0,[n[6]||(n[6]=a("span",{class:"muted"},"Public IPv6",-1)),a("span",{class:"max-w-[200px] truncate font-mono text-slate-900 dark:text-white",title:O(t).selectedInfo.public_ipv6},N(O(t).selectedInfo.public_ipv6||"-"),9,z0)]),a("div",Z0,[n[7]||(n[7]=a("span",{class:"muted"},"设备名称",-1)),a("span",J0,N(O(t).selectedInfo.name||"-"),1)]),a("div",Y0,[n[8]||(n[8]=a("span",{class:"muted"},"设备 ID",-1)),a("span",{class:"max-w-[200px] truncate font-mono text-xs text-slate-500 dark:text-slate-400",title:O(t).selectedInfo.device_id},N(O(t).selectedInfo.device_id||"-"),9,Q0)])]),a("div",X0,[(w(),S(ie,null,Te([{key:"encrypt",label:"加密"},{key:"compress",label:"压缩"},{key:"fec",label:"FEC纠错"},{key:"rtx",label:"QUIC传输"}],o=>a("div",{key:o.key,class:"flex items-center gap-2 rounded-lg bg-slate-50 px-3 py-2 dark:bg-slate-800/50"},[a("span",{class:G(["h-2 w-2 rounded-full",O(t).selectedInfo[o.key]?"bg-green-500":"bg-slate-300 dark:bg-slate-600"])},null,2),a("span",eh,N(o.label),1)])),64))]),a("div",th,[n[9]||(n[9]=a("span",{class:"mb-2 block text-sm muted"},"Public IPv4s",-1)),a("div",sh,[(w(!0),S(ie,null,Te(O(t).selectedInfo.public_ipv4s,o=>(w(),S("span",{key:o,class:"rounded border border-slate-200 bg-slate-50 px-2 py-1 font-mono text-xs tabular-nums text-green-700 dark:border-slate-600 dark:bg-slate-800 dark:text-green-300"},N(o),1))),128)),!O(t).selectedInfo.public_ipv4s||O(t).selectedInfo.public_ipv4s.length===0?(w(),S("span",nh,"无")):fe("",!0)])])]),a("div",oh,[n[12]||(n[12]=a("div",{class:"border-b border-slate-200 px-6 py-4 dark:border-slate-700"},[a("h2",{class:"text-lg font-bold text-slate-900 dark:text-white"},"服务器连接列表")],-1)),a("div",lh,[a("table",rh,[n[11]||(n[11]=a("thead",null,[a("tr",null,[a("th",null,"地址"),a("th",null,"状态"),a("th",null,"延迟"),a("th",null,"版本")])],-1)),a("tbody",null,[(w(!0),S(ie,null,Te(O(t).selectedInfo.server_info,(o,l)=>(w(),S("tr",{key:l},[a("td",ih,N(o.server),1),a("td",null,[a("span",{class:G(o.connected?"badge-green":"badge-red")},N(o.connected?"已连接":"未连接"),3)]),a("td",ah,N(o.server_rtt?o.server_rtt+" ms":"-"),1),a("td",null,N(o.server_version||"-"),1)]))),128)),!O(t).selectedInfo.server_info||O(t).selectedInfo.server_info.length===0?(w(),S("tr",ch,[...n[10]||(n[10]=[a("td",{colspan:"4",class:"text-center text-slate-400"},"暂无数据",-1)])])):fe("",!0)])])])])],64)):fe("",!0)]))}},Bo=()=>({config_name:"",network_code:"",server:[""],ip:"",mtu:null,rtx:!1,fec:!1,compress:!1,no_punch:!1,input:[],output:[],no_nat:!1,no_tun:!1,port_mapping:[],allow_mapping:!1,device_name:"",device_id:"",tun_name:"",outbound_interface:"",password:"",cert_mode:"skip",fingerprint:"",udp_stun:[],tcp_stun:[],tunnel_port:null}),wr=e=>{const t=Bo(),s=e.split(` +`);for(const n of s){const o=n.trim();if(!(!o||o.startsWith("#"))){if(o.includes("config_name")){const l=o.match(/config_name\s*=\s*"([^"]*)"/);l&&(t.config_name=l[1])}else if(o.includes("network_code")){const l=o.match(/network_code\s*=\s*"([^"]*)"/);l&&(t.network_code=l[1])}else if(o.startsWith("server")){const l=o.match(/server\s*=\s*\[(.*)\]/);if(l){const r=l[1].match(/"([^"]*)"/g);r&&(t.server=r.map(i=>i.replace(/"/g,"")))}}else if(o.includes("ip =")){const l=o.match(/ip\s*=\s*"([^"]*)"/);l&&(t.ip=l[1])}else if(o.includes("mtu =")){const l=o.match(/mtu\s*=\s*(\d+)/);l&&(t.mtu=parseInt(l[1]))}else if(o.match(/^rtx\s*=/))t.rtx=o.includes("true");else if(o.match(/^fec\s*=/))t.fec=o.includes("true");else if(o.match(/^compress\s*=/))t.compress=o.includes("true");else if(o.match(/^no_punch\s*=/))t.no_punch=o.includes("true");else if(o.startsWith("input")){const l=o.match(/input\s*=\s*\[(.*)\]/);if(l){const r=l[1].match(/"([^"]*)"/g);r&&(t.input=r.map(i=>i.replace(/"/g,"")))}}else if(o.startsWith("output")){const l=o.match(/output\s*=\s*\[(.*)\]/);if(l){const r=l[1].match(/"([^"]*)"/g);r&&(t.output=r.map(i=>i.replace(/"/g,"")))}}else if(o.match(/^no_nat\s*=/))t.no_nat=o.includes("true");else if(o.match(/^no_tun\s*=/))t.no_tun=o.includes("true");else if(o.startsWith("port_mapping")){const l=o.match(/port_mapping\s*=\s*\[(.*)\]/);if(l){const r=l[1].match(/"([^"]*)"/g);r&&(t.port_mapping=r.map(i=>i.replace(/"/g,"")))}}else if(o.match(/^allow_mapping\s*=/))t.allow_mapping=o.includes("true");else if(o.includes("device_name")){const l=o.match(/device_name\s*=\s*"([^"]*)"/);l&&(t.device_name=l[1])}else if(o.includes("device_id")){const l=o.match(/device_id\s*=\s*"([^"]*)"/);l&&(t.device_id=l[1])}else if(o.includes("tun_name")){const l=o.match(/tun_name\s*=\s*"([^"]*)"/);l&&(t.tun_name=l[1])}else if(o.includes("outbound_interface")){const l=o.match(/outbound_interface\s*=\s*"([^"]*)"/);l&&(t.outbound_interface=l[1])}else if(o.includes("password =")){const l=o.match(/password\s*=\s*"([^"]*)"/);l&&(t.password=l[1])}else if(o.includes("cert_mode")){const l=o.match(/cert_mode\s*=\s*"([^"]*)"/);if(l){const r=l[1];r.startsWith("finger:")?(t.cert_mode="finger",t.fingerprint=r.substring(7)):t.cert_mode=r}}else if(o.startsWith("udp_stun")){const l=o.match(/udp_stun\s*=\s*\[(.*)\]/);if(l){const r=l[1].match(/"([^"]*)"/g);r&&(t.udp_stun=r.map(i=>i.replace(/"/g,"")))}}else if(o.startsWith("tcp_stun")){const l=o.match(/tcp_stun\s*=\s*\[(.*)\]/);if(l){const r=l[1].match(/"([^"]*)"/g);r&&(t.tcp_stun=r.map(i=>i.replace(/"/g,"")))}}}}return t},_o=e=>{let t="";e.config_name&&(t+=`# 配置名称 config_name = "${e.config_name}" `),t+=` # --- 网络配置 --- @@ -171,4 +171,4 @@ server = ["quic://1.2.3.4:29872"] # --- 其他配置 --- # 自定义stun地址,分别用于udp打洞和tcp打洞,需要单独配置,不设置则用默认stun # udp_stun = ["stun.chat.bilibili.com"] -# tcp_stun = ["stun.nextcloud.com:443"]`,dh={class:"text-lg font-bold text-slate-900 dark:text-white"},ph={class:"flex items-center gap-4"},hh={class:"flex rounded-lg border border-slate-300 bg-slate-100 p-1 dark:border-slate-600 dark:bg-slate-800"},mh={key:0,class:"text-sm text-slate-500 font-mono hidden md:block"},gh={class:"h-full overflow-y-auto scrollbar-hide p-6"},vh={class:"max-w-4xl mx-auto space-y-6"},bh={class:"card"},xh={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},_h={class:"mt-4"},yh={class:"space-y-2"},kh=["onUpdate:modelValue"],wh=["onClick"],Ch={class:"card"},Sh={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Eh={class:"card"},Th={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},$h={class:"card"},Ah={class:"space-y-4"},Ih={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Rh={key:0},Ph={class:"card"},Oh={class:"space-y-4"},Mh={class:"space-y-2"},Lh=["onUpdate:modelValue"],Nh=["onClick"],Vh={class:"space-y-2"},jh=["onUpdate:modelValue"],Dh=["onClick"],Bh={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Fh={class:"card"},Uh={class:"space-y-4"},Hh={class:"space-y-2"},Wh=["onUpdate:modelValue"],Kh=["onClick"],Gh={class:"card"},qh={class:"grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-4"},zh={class:"card"},Zh={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Jh={class:"space-y-2"},Yh=["onUpdate:modelValue"],Qh=["onClick"],Xh={class:"space-y-2"},em=["onUpdate:modelValue"],tm=["onClick"],sm={class:"h-full"},nm={class:"flex-1 text-left text-xs text-slate-500"},om={key:0},lm={key:1},Zt="h-5 w-5 rounded border-slate-300 bg-white text-indigo-600 focus:ring-indigo-500 dark:border-slate-600 dark:bg-slate-700",Jt="flex cursor-pointer items-center justify-between gap-2 rounded-lg border border-slate-200 bg-slate-50 p-3 transition-colors hover:bg-slate-100 dark:border-slate-700 dark:bg-slate-800/50 dark:hover:bg-slate-800",ps="shrink-0 rounded-lg bg-red-50 px-3 py-2 text-red-500 transition-colors hover:bg-red-100 dark:bg-red-900/20 dark:text-red-500 dark:hover:bg-red-900/40",hs="flex w-full items-center justify-center gap-1 rounded-lg bg-slate-100 px-3 py-2 text-sm text-slate-600 transition-colors hover:bg-slate-200 dark:bg-slate-700/50 dark:text-slate-300 dark:hover:bg-slate-700",Nt="text-md mb-4 flex items-center font-bold text-slate-900 dark:text-white",rm={__name:"ConfigEditor",props:{show:{type:Boolean,default:!1},fileName:{type:String,default:null}},emits:["close","saved"],setup(e,{emit:t}){const s=e,n=t,o=as(),l=se(""),r=se(""),i=se("new"),c=se("form"),f=se(""),u=se(!1),d=se(!1),g=se(!1),h=se(Do()),C=[{value:"skip",label:"跳过验证(默认)"},{value:"standard",label:"系统证书验证"},{value:"finger",label:"证书指纹验证"}];Ve(()=>s.show,async w=>{if(w)if(r.value=s.fileName||"",i.value=s.fileName?"edit":"new",c.value="form",u.value=!1,d.value=!1,s.fileName)try{const p=await Td(s.fileName);l.value=p,f.value=p,g.value=!0,h.value=wr(p),xt(()=>{g.value=!1})}catch(p){o.toast.error("获取配置失败: "+p.message),n("close")}else f.value="",h.value=Do(),l.value=fh});const y=()=>{c.value==="toml"?(c.value="form",g.value=!0,h.value=wr(l.value),xt(()=>{g.value=!1})):c.value="form"},L=()=>{c.value==="form"&&(d.value?(l.value=xo(h.value),d.value=!1):f.value&&!u.value?l.value=f.value:l.value=xo(h.value)),c.value="toml"};Ve(l,(w,p)=>{c.value==="toml"&&p!==void 0&&(u.value=!0)}),Ve(h,()=>{c.value==="form"&&s.show&&!g.value&&(d.value=!0)},{deep:!0});const $=async()=>{try{let w=l.value;if(c.value==="form"){if(!h.value.network_code.trim()){o.toast.error("请填写网络编号");return}if(h.value.server.filter(b=>b.trim()).length===0){o.toast.error("请至少填写一个服务器地址");return}w=xo(h.value)}await $d(r.value||null,w),o.toast.success("配置已保存"),n("close"),n("saved")}catch(w){o.toast.error("保存失败: "+w.message)}};return(w,p)=>(k(),Re(pl,{show:e.show,"mask-closable":!1,"panel-class":"w-full max-w-6xl h-[85vh]",onClose:p[27]||(p[27]=b=>n("close"))},{header:Ee(()=>[a("h3",dh,N(i.value==="new"?"新建配置":"编辑配置"),1),a("div",ph,[a("div",hh,[a("button",{onClick:y,class:G([c.value==="form"?"bg-white text-slate-900 shadow-sm dark:bg-indigo-600 dark:text-white":"text-slate-500 hover:text-slate-900 dark:text-slate-400 dark:hover:text-white","px-4 py-1.5 rounded text-sm font-medium transition-colors flex items-center"])},[...p[28]||(p[28]=[a("svg",{class:"w-4 h-4 mr-1.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})],-1),ae(" 表单模式 ",-1)])],2),a("button",{onClick:L,class:G([c.value==="toml"?"bg-white text-slate-900 shadow-sm dark:bg-indigo-600 dark:text-white":"text-slate-500 hover:text-slate-900 dark:text-slate-400 dark:hover:text-white","px-4 py-1.5 rounded text-sm font-medium transition-colors flex items-center"])},[...p[29]||(p[29]=[a("svg",{class:"w-4 h-4 mr-1.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"})],-1),ae(" TOML模式 ",-1)])],2)]),r.value?(k(),S("div",mh,N(r.value),1)):fe("",!0)])]),body:Ee(()=>[xe(a("div",gh,[a("div",vh,[a("div",bh,[a("h4",{class:G(Nt)},[...p[30]||(p[30]=[a("svg",{class:"w-5 h-5 mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13 10V3L4 14h7v7l9-11h-7z"})],-1),ae(" 基础配置 ",-1)])]),a("div",xh,[a("div",null,[p[31]||(p[31]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"配置名称",-1)),xe(a("input",{"onUpdate:modelValue":p[0]||(p[0]=b=>h.value.config_name=b),type:"text",placeholder:"例如: 我的VPN配置",class:"input"},null,512),[[Ie,h.value.config_name]])]),a("div",null,[p[32]||(p[32]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},[ae(" 网络编号 "),a("span",{class:"text-red-500"},"*")],-1)),xe(a("input",{"onUpdate:modelValue":p[1]||(p[1]=b=>h.value.network_code=b),type:"text",placeholder:"例如: my_network",required:"",class:"input"},null,512),[[Ie,h.value.network_code]])])]),a("div",_h,[p[35]||(p[35]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},[ae(" 服务器地址 "),a("span",{class:"text-red-500"},"*"),a("span",{class:"text-xs text-slate-500 ml-2"},"支持 quic:// tcp:// wss:// dynamic://")],-1)),a("div",yh,[(k(!0),S(ie,null,Te(h.value.server,(b,_)=>(k(),S("div",{key:_,class:"flex gap-2"},[xe(a("input",{"onUpdate:modelValue":j=>h.value.server[_]=j,type:"text",placeholder:"例如: quic://1.2.3.4:29872",class:"input flex-1"},null,8,kh),[[Ie,h.value.server[_]]]),h.value.server.length>1?(k(),S("button",{key:0,onClick:j=>h.value.server.splice(_,1),class:G(ps)},[...p[33]||(p[33]=[a("svg",{class:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"})],-1)])],8,wh)):fe("",!0)]))),128)),a("button",{onClick:p[2]||(p[2]=b=>h.value.server.push("")),class:G(hs)},[...p[34]||(p[34]=[a("svg",{class:"w-4 h-4 mr-1",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 4v16m8-8H4"})],-1),ae(" 添加服务器 ",-1)])])])])]),a("div",Ch,[a("h4",{class:G(Nt)},[...p[36]||(p[36]=[a("svg",{class:"w-5 h-5 mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9"})],-1),ae(" 网络设置 ",-1)])]),a("div",Sh,[a("div",null,[p[37]||(p[37]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},[ae(" 自定义虚拟IP "),a("span",{class:"text-xs text-slate-500 ml-1"},"(可选)")],-1)),xe(a("input",{"onUpdate:modelValue":p[3]||(p[3]=b=>h.value.ip=b),type:"text",placeholder:"例如: 10.26.0.2",class:"input"},null,512),[[Ie,h.value.ip]])]),a("div",null,[p[38]||(p[38]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"MTU",-1)),xe(a("input",{"onUpdate:modelValue":p[4]||(p[4]=b=>h.value.mtu=b),type:"number",placeholder:"1380",class:"input"},null,512),[[Ie,h.value.mtu,void 0,{number:!0}]])]),a("div",null,[p[39]||(p[39]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"隧道端口",-1)),xe(a("input",{"onUpdate:modelValue":p[5]||(p[5]=b=>h.value.tunnel_port=b),type:"number",placeholder:"0 (自动分配)",class:"input"},null,512),[[Ie,h.value.tunnel_port,void 0,{number:!0}]])])])]),a("div",Eh,[a("h4",{class:G(Nt)},[...p[40]||(p[40]=[a("svg",{class:"w-5 h-5 mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13 10V3L4 14h7v7l9-11h-7z"})],-1),ae(" 传输优化 ",-1)])]),a("div",Th,[a("label",{class:G(Jt)},[p[41]||(p[41]=a("div",{class:"flex-1"},[a("div",{class:"text-sm font-medium text-slate-800 dark:text-white"},"QUIC传输优化"),a("div",{class:"text-xs text-slate-400 mt-0.5"},"重传丢包")],-1)),xe(a("input",{"onUpdate:modelValue":p[6]||(p[6]=b=>h.value.rtx=b),type:"checkbox",class:G(Zt)},null,512),[[zt,h.value.rtx]])]),a("label",{class:G(Jt)},[p[42]||(p[42]=a("div",{class:"flex-1"},[a("div",{class:"text-sm font-medium text-slate-800 dark:text-white"},"FEC前向纠错"),a("div",{class:"text-xs text-slate-400 mt-0.5"},"损失部分带宽提升稳定性")],-1)),xe(a("input",{"onUpdate:modelValue":p[7]||(p[7]=b=>h.value.fec=b),type:"checkbox",class:G(Zt)},null,512),[[zt,h.value.fec]])]),a("label",{class:G(Jt)},[p[43]||(p[43]=a("div",{class:"flex-1"},[a("div",{class:"text-sm font-medium text-slate-800 dark:text-white"},"LZ4压缩"),a("div",{class:"text-xs text-slate-400 mt-0.5"},"减少传输数据量")],-1)),xe(a("input",{"onUpdate:modelValue":p[8]||(p[8]=b=>h.value.compress=b),type:"checkbox",class:G(Zt)},null,512),[[zt,h.value.compress]])]),a("label",{class:G(Jt)},[p[44]||(p[44]=a("div",{class:"flex-1"},[a("div",{class:"text-sm font-medium text-slate-800 dark:text-white"},"关闭P2P打洞"),a("div",{class:"text-xs text-slate-400 mt-0.5"},"仅通过服务器中转")],-1)),xe(a("input",{"onUpdate:modelValue":p[9]||(p[9]=b=>h.value.no_punch=b),type:"checkbox",class:G(Zt)},null,512),[[zt,h.value.no_punch]])])])]),a("div",$h,[a("h4",{class:G(Nt)},[...p[45]||(p[45]=[a("svg",{class:"w-5 h-5 mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"})],-1),ae(" 安全配置 ",-1)])]),a("div",Ah,[a("div",Ih,[a("div",null,[p[46]||(p[46]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"组网加密密码(连接公共服务器时建议填写,同一组网密码需要相同)",-1)),xe(a("input",{"onUpdate:modelValue":p[10]||(p[10]=b=>h.value.password=b),type:"password",placeholder:"留空则不加密",class:"input"},null,512),[[Ie,h.value.password]])]),a("div",null,[p[47]||(p[47]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"服务端证书校验模式",-1)),ue(ml,{modelValue:h.value.cert_mode,"onUpdate:modelValue":p[11]||(p[11]=b=>h.value.cert_mode=b),options:C,"aria-label":"服务端证书校验模式"},null,8,["modelValue"])])]),h.value.cert_mode==="finger"?(k(),S("div",Rh,[p[48]||(p[48]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},[ae(" 证书指纹 "),a("span",{class:"text-xs text-slate-500 ml-1"},"(服务端启动时日志会输出指纹)")],-1)),xe(a("input",{"onUpdate:modelValue":p[12]||(p[12]=b=>h.value.fingerprint=b),type:"text",placeholder:"例如: 3bdd8675606837cdf95d5e13445606315762315a78555f9da652940a25feaec1",class:"input font-mono text-sm"},null,512),[[Ie,h.value.fingerprint]])])):fe("",!0)])]),a("div",Ph,[a("h4",{class:G(Nt)},[...p[49]||(p[49]=[a("svg",{class:"w-5 h-5 mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 20l-5.447-2.724A1 1 0 013 16.382V5.618a1 1 0 011.447-.894L9 7m0 13l6-3m-6 3V7m6 10l4.553 2.276A1 1 0 0021 18.382V7.618a1 1 0 01-.806-.98L15 9m0 0V7m0 2v6"})],-1),ae(" NAT与路由 (点对网) ",-1)])]),a("div",Oh,[a("div",null,[p[51]||(p[51]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},[ae(" 入栈网段 "),a("span",{class:"text-xs text-slate-500 ml-1"},"格式: CIDR,目标IP")],-1)),a("div",Mh,[(k(!0),S(ie,null,Te(h.value.input,(b,_)=>(k(),S("div",{key:_,class:"flex gap-2"},[xe(a("input",{"onUpdate:modelValue":j=>h.value.input[_]=j,type:"text",placeholder:"例如: 192.168.0.0/24,10.26.0.2",class:"input flex-1"},null,8,Lh),[[Ie,h.value.input[_]]]),a("button",{onClick:j=>h.value.input.splice(_,1),class:G(ps)},[...p[50]||(p[50]=[a("svg",{class:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1)])],8,Nh)]))),128)),a("button",{onClick:p[13]||(p[13]=b=>h.value.input.push("")),class:G(hs)}," + 添加入栈网段 ")])]),a("div",null,[p[53]||(p[53]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},[ae(" 出栈网段 "),a("span",{class:"text-xs text-slate-500 ml-1"},"格式: CIDR (允许转发的网段)")],-1)),a("div",Vh,[(k(!0),S(ie,null,Te(h.value.output,(b,_)=>(k(),S("div",{key:_,class:"flex gap-2"},[xe(a("input",{"onUpdate:modelValue":j=>h.value.output[_]=j,type:"text",placeholder:"例如: 0.0.0.0/0",class:"input flex-1"},null,8,jh),[[Ie,h.value.output[_]]]),a("button",{onClick:j=>h.value.output.splice(_,1),class:G(ps)},[...p[52]||(p[52]=[a("svg",{class:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1)])],8,Dh)]))),128)),a("button",{onClick:p[14]||(p[14]=b=>h.value.output.push("")),class:G(hs)}," + 添加出栈网段 ")])]),a("div",Bh,[a("label",{class:G(Jt)},[p[54]||(p[54]=a("div",{class:"flex-1"},[a("div",{class:"text-sm font-medium text-slate-800 dark:text-white"},"关闭内置NAT"),a("div",{class:"text-xs text-slate-400 mt-0.5"},"使用系统网卡转发")],-1)),xe(a("input",{"onUpdate:modelValue":p[15]||(p[15]=b=>h.value.no_nat=b),type:"checkbox",class:G(Zt)},null,512),[[zt,h.value.no_nat]])]),a("label",{class:G(Jt)},[p[55]||(p[55]=a("div",{class:"flex-1"},[a("div",{class:"text-sm font-medium text-slate-800 dark:text-white"},"关闭TUN网卡"),a("div",{class:"text-xs text-slate-400 mt-0.5"},"仅作流量出口或端口映射")],-1)),xe(a("input",{"onUpdate:modelValue":p[16]||(p[16]=b=>h.value.no_tun=b),type:"checkbox",class:G(Zt)},null,512),[[zt,h.value.no_tun]])])])])]),a("div",Fh,[a("h4",{class:G(Nt)},[...p[56]||(p[56]=[a("svg",{class:"w-5 h-5 mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"})],-1),ae(" 端口映射 ",-1)])]),a("div",Uh,[a("div",null,[p[58]||(p[58]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},[ae(" 映射规则 "),a("span",{class:"text-xs text-slate-500 ml-1"},"格式: 协议://监听地址-虚拟IP-目标地址")],-1)),a("div",Hh,[(k(!0),S(ie,null,Te(h.value.port_mapping,(b,_)=>(k(),S("div",{key:_,class:"flex gap-2"},[xe(a("input",{"onUpdate:modelValue":j=>h.value.port_mapping[_]=j,type:"text",placeholder:"例如: tcp://0.0.0.0:81-10.0.0.2-10.0.0.2:80",class:"input flex-1 font-mono"},null,8,Wh),[[Ie,h.value.port_mapping[_]]]),a("button",{onClick:j=>h.value.port_mapping.splice(_,1),class:G(ps)},[...p[57]||(p[57]=[a("svg",{class:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1)])],8,Kh)]))),128)),a("button",{onClick:p[17]||(p[17]=b=>h.value.port_mapping.push("")),class:G(hs)}," + 添加映射规则 ")])]),a("label",{class:G(Jt)},[p[59]||(p[59]=a("div",{class:"flex-1"},[a("div",{class:"text-sm font-medium text-slate-800 dark:text-white"},"允许作为映射出口"),a("div",{class:"text-xs text-slate-400 mt-0.5"},"允许其他设备使用本机作跳板")],-1)),xe(a("input",{"onUpdate:modelValue":p[18]||(p[18]=b=>h.value.allow_mapping=b),type:"checkbox",class:G(Zt)},null,512),[[zt,h.value.allow_mapping]])])])]),a("div",Gh,[a("h4",{class:G(Nt)},[...p[60]||(p[60]=[a("svg",{class:"w-5 h-5 mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"})],-1),ae(" 设备配置 ",-1)])]),a("div",qh,[a("div",null,[p[61]||(p[61]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"设备名称",-1)),xe(a("input",{"onUpdate:modelValue":p[19]||(p[19]=b=>h.value.device_name=b),type:"text",placeholder:"默认为主机名",class:"input"},null,512),[[Ie,h.value.device_name]])]),a("div",null,[p[62]||(p[62]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"设备ID",-1)),xe(a("input",{"onUpdate:modelValue":p[20]||(p[20]=b=>h.value.device_id=b),type:"text",placeholder:"自动生成",class:"input"},null,512),[[Ie,h.value.device_id]])]),a("div",null,[p[63]||(p[63]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"虚拟网卡名",-1)),xe(a("input",{"onUpdate:modelValue":p[21]||(p[21]=b=>h.value.tun_name=b),type:"text",placeholder:"默认为vnt-tun",class:"input"},null,512),[[Ie,h.value.tun_name]])]),a("div",null,[p[64]||(p[64]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"绑定出口网卡",-1)),xe(a("input",{"onUpdate:modelValue":p[22]||(p[22]=b=>h.value.outbound_interface=b),type:"text",placeholder:"例如 Ethernet、Wi-Fi、eth0",class:"input"},null,512),[[Ie,h.value.outbound_interface]]),p[65]||(p[65]=a("p",{class:"mt-1.5 text-xs leading-5 text-slate-400"},"服务端通信、P2P 打洞及转发流量将使用此网卡",-1))])])]),a("div",zh,[a("h4",{class:G(Nt)},[...p[66]||(p[66]=[a("svg",{class:"w-5 h-5 mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M3.055 11H5a2 2 0 012 2v1a2 2 0 002 2 2 2 0 012 2v2.945M8 3.935V5.5A2.5 2.5 0 0010.5 8h.5a2 2 0 012 2 2 2 0 104 0 2 2 0 012-2h1.064M15 20.488V18a2 2 0 012-2h3.064M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})],-1),ae(" STUN配置 (高级) ",-1)])]),a("div",Zh,[a("div",null,[p[68]||(p[68]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"UDP STUN服务器",-1)),a("div",Jh,[(k(!0),S(ie,null,Te(h.value.udp_stun,(b,_)=>(k(),S("div",{key:_,class:"flex gap-2"},[xe(a("input",{"onUpdate:modelValue":j=>h.value.udp_stun[_]=j,type:"text",placeholder:"例如: stun.l.google.com:19302",class:"input flex-1"},null,8,Yh),[[Ie,h.value.udp_stun[_]]]),a("button",{onClick:j=>h.value.udp_stun.splice(_,1),class:G(ps)},[...p[67]||(p[67]=[a("svg",{class:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1)])],8,Qh)]))),128)),a("button",{onClick:p[23]||(p[23]=b=>h.value.udp_stun.push("")),class:G(hs)}," + 添加UDP STUN ")])]),a("div",null,[p[70]||(p[70]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"TCP STUN服务器",-1)),a("div",Xh,[(k(!0),S(ie,null,Te(h.value.tcp_stun,(b,_)=>(k(),S("div",{key:_,class:"flex gap-2"},[xe(a("input",{"onUpdate:modelValue":j=>h.value.tcp_stun[_]=j,type:"text",placeholder:"例如: stun.nextcloud.com:443",class:"input flex-1"},null,8,em),[[Ie,h.value.tcp_stun[_]]]),a("button",{onClick:j=>h.value.tcp_stun.splice(_,1),class:G(ps)},[...p[69]||(p[69]=[a("svg",{class:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1)])],8,tm)]))),128)),a("button",{onClick:p[24]||(p[24]=b=>h.value.tcp_stun.push("")),class:G(hs)}," + 添加TCP STUN ")])])])])])],512),[[Gl,c.value==="form"]]),xe(a("div",sm,[xe(a("textarea",{"onUpdate:modelValue":p[25]||(p[25]=b=>l.value=b),class:"h-full w-full resize-none bg-slate-50 p-4 font-mono text-sm text-slate-800 focus:outline-none dark:bg-slate-950 dark:text-slate-200",spellcheck:"false",placeholder:"# 在此处输入 TOML 配置..."},null,512),[[Ie,l.value]])],512),[[Gl,c.value==="toml"]])]),footer:Ee(()=>[a("div",nm,[c.value==="form"?(k(),S("span",om,"填写完成后保存即可生成配置文件")):(k(),S("span",lm,"* 请使用标准 TOML 格式"))]),a("button",{class:"btn-ghost",onClick:p[26]||(p[26]=b=>n("close"))},"取消"),a("button",{class:"btn-primary",onClick:$},"保存配置")]),_:1},8,["show"]))}},im={class:"space-y-6"},am={class:"flex items-end justify-between gap-4"},cm={key:1,class:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3"},um=["onClick"],fm={key:0,class:"absolute right-0 top-0 rounded-bl bg-green-500 px-2 py-1 text-xs text-white"},dm={key:1,class:"absolute right-0 top-0 rounded-bl bg-indigo-500 px-2 py-1 text-xs text-white"},pm={class:"flex items-start"},hm={class:"overflow-hidden"},mm=["title"],gm=["title"],vm={class:"config-card-actions mt-4 flex justify-end transition-opacity"},bm=["onClick"],xm=["onClick"],_m={__name:"ConfigView",setup(e){const t=Ot(),s=as(),n=se(!1),o=se(null),l=u=>{const d=t.instanceList.find(g=>g.file_name===u);return d?d.status:null},r=u=>{const d=l(u);return d==="running"?"ring-2 ring-green-500/60":d==="starting"?"ring-2 ring-indigo-500/60":""},i=u=>{o.value=u,n.value=!0},c=()=>{t.fetchConfigList()},f=async u=>{if(await s.confirm({title:"删除配置",message:`确定要删除配置 ${u} 吗?`,danger:!0,confirmText:"删除"}))try{await Ad(u),s.toast.success("配置已删除"),t.fetchConfigList()}catch(g){s.toast.error(g.message)}};return _t(()=>t.fetchConfigList()),(u,d)=>(k(),S("div",im,[a("div",am,[d[3]||(d[3]=a("div",null,[a("h1",{class:"page-title"},"配置"),a("p",{class:"page-subtitle"},"管理组网配置文件")],-1)),a("button",{class:"btn-primary",onClick:d[0]||(d[0]=g=>i(null))},[...d[2]||(d[2]=[a("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 4v16m8-8H4"})],-1),ae(" 新建配置 ",-1)])])]),O(t).configList.length===0?(k(),Re(on,{key:0,text:"暂无配置,点击右上角新建"})):(k(),S("div",cm,[(k(!0),S(ie,null,Te(O(t).configList,g=>(k(),S("div",{key:g.file_name,class:G([r(g.file_name),"card group relative flex min-h-[140px] cursor-pointer flex-col justify-between overflow-hidden"]),onClick:h=>i(g.file_name)},[l(g.file_name)==="running"?(k(),S("div",fm," 运行中 ")):l(g.file_name)==="starting"?(k(),S("div",dm," 启动中 ")):fe("",!0),a("div",pm,[d[4]||(d[4]=a("div",{class:"mr-3 mt-1 rounded-lg bg-indigo-50 p-2 text-indigo-600 dark:bg-indigo-500/10 dark:text-indigo-400"},[a("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})])],-1)),a("div",hm,[a("h3",{class:"truncate text-lg font-bold text-slate-900 dark:text-white",title:g.config_name},N(g.config_name||"Unnamed"),9,mm),a("p",{class:"truncate font-mono text-xs text-slate-400",title:g.file_name},N(g.file_name),9,gm)])]),a("div",vm,[a("button",{class:"mr-4 text-sm text-indigo-600 hover:text-indigo-500 dark:text-indigo-400",onClick:ls(h=>i(g.file_name),["stop"])}," 编辑 ",8,bm),a("button",{class:"text-sm text-red-500 hover:text-red-400",onClick:ls(h=>f(g.file_name),["stop"])}," 删除 ",8,xm)])],10,um))),128))])),ue(rm,{show:n.value,"file-name":o.value,onClose:d[1]||(d[1]=g=>n.value=!1),onSaved:c},null,8,["show","file-name"])]))}},ym=hl(_m,[["__scopeId","data-v-b7dce6ea"]]),km=e=>{if(!e)return"-";const t=new Date(e*1e3),s=n=>n<10?"0"+n:n;return`${t.getFullYear()}-${s(t.getMonth()+1)}-${s(t.getDate())} ${s(t.getHours())}:${s(t.getMinutes())}:${s(t.getSeconds())}`},Cr=e=>{if(e===0||e===void 0||e===null)return"0B";const t=["B","KB","MB","GB","TB"];let s=0,n=e;for(;n>=1024&&s{if(e===0||e===void 0||e===null)return"0B/s";const t=["B/s","KB/s","MB/s","GB/s"];let s=0,n=e;for(;n>=1024&&s{const t=[1024,10240,102400,1048576,10485760,104857600,1073741824];for(const s of t)if(e<=s)return s;return Math.ceil(e/(1024*1024*1024))*1024*1024*1024},ya={__name:"StatusDot",props:{status:{type:String,default:"stopped"},size:{type:String,default:"w-2.5 h-2.5"}},setup(e){const t=s=>s==="running"?"bg-green-500":s==="starting"?"bg-blue-500 animate-pulse":"bg-slate-400 dark:bg-slate-500";return(s,n)=>(k(),S("span",{class:G(["rounded-full inline-block shrink-0",[e.size,t(e.status)]])},null,2))}},Cm={class:"flex items-center gap-4 mb-2 text-xs text-slate-400"},Sm={class:"ml-auto"},Em={__name:"SpeedChart",props:{history:{type:Object,required:!0},size:{type:Number,default:60}},setup(e,{expose:t}){const s=e,n=se(null),o=se(""),l=()=>{const r=n.value;if(!r)return;const i=r.getContext("2d"),c=s.history?s.history.tx:[],f=s.history?s.history.rx:[],u=s.size,d=window.devicePixelRatio||1,g=r.getBoundingClientRect();if(g.width===0)return;r.width=g.width*d,r.height=g.height*d,i.setTransform(d,0,0,d,0,0);const h=g.width,C=g.height,L=document.documentElement.classList.contains("dark")?{bg:"#0c1222",grid:"rgba(71, 85, 105, 0.3)",rx:"#60a5fa",rxFill:"rgba(96, 165, 250, 0.15)",tx:"#4ade80",txFill:"rgba(74, 222, 128, 0.15)"}:{bg:"#f8fafc",grid:"rgba(148, 163, 184, 0.35)",rx:"#3b82f6",rxFill:"rgba(59, 130, 246, 0.12)",tx:"#22c55e",txFill:"rgba(34, 197, 94, 0.12)"},$=8,w=4,p=0,_=h-p-0,j=C-$-w;i.fillStyle=L.bg,i.fillRect(0,0,h,C);const B=[...c,...f];let H=B.length>0?Math.max(...B):0;H<1024&&(H=1024);const M=wm(H);o.value="峰值: "+Bo(M);const z=4;i.strokeStyle=L.grid,i.lineWidth=1;for(let Z=0;Z<=z;Z++){const R=$+j/z*Z;i.beginPath(),i.moveTo(p,R),i.lineTo(p+_,R),i.stroke()}const oe=6;for(let Z=0;Z<=oe;Z++){const R=p+_/oe*Z;i.beginPath(),i.moveTo(R,$),i.lineTo(R,$+j),i.stroke()}const F=(Z,R,ee)=>{if(Z.length<2)return;const ce=_/(u-1),te=u-Z.length;i.beginPath(),i.moveTo(p+te*ce,$+j);for(let re=0;rext(l)),Ve(()=>[s.history?.tx?.length,s.history?.rx?.length,s.history?.tx?.at(-1),s.history?.rx?.at(-1)],()=>xt(l)),t({draw:l}),(r,i)=>(k(),S("div",null,[a("div",Cm,[i[0]||(i[0]=a("span",{class:"flex items-center"},[a("span",{class:"inline-block w-3 h-0.5 bg-green-400 mr-1"}),ae("上传速度")],-1)),i[1]||(i[1]=a("span",{class:"flex items-center"},[a("span",{class:"inline-block w-3 h-0.5 bg-blue-400 mr-1"}),ae("下载速度")],-1)),a("span",Sm,N(o.value),1)]),a("canvas",{ref_key:"canvasRef",ref:n,class:"rounded w-full block h-[150px]"},null,512)]))}},Tm={class:"space-y-4"},$m={key:0,class:"scrollbar-hide flex items-center gap-2 overflow-x-auto"},Am=["onClick"],Im={key:2,class:"card overflow-hidden p-0"},Rm={class:"flex items-center justify-between border-b border-slate-200 px-6 py-4 dark:border-slate-700"},Pm={class:"flex gap-4 text-sm muted"},Om={class:"font-medium tabular-nums text-slate-900 dark:text-white"},Mm={class:"font-medium tabular-nums text-slate-900 dark:text-white"},Lm={class:"custom-scrollbar max-h-[600px] overflow-x-auto"},Nm={class:"table"},Vm={class:"transition-colors hover:bg-slate-50 dark:hover:bg-slate-800/50"},jm=["onClick"],Dm={class:"font-mono tabular-nums text-indigo-600 dark:text-indigo-400"},Bm=["onMouseenter"],Fm={class:"hidden text-xs text-slate-400 md:table-cell"},Um={class:"flex items-center gap-2"},Hm={key:0,class:"tooltip"},Wm={key:1,class:"tooltip"},Km={key:2,class:"tooltip cursor-help"},Gm={class:"tooltip-text"},qm={key:1,class:"text-yellow-600 dark:text-yellow-400"},zm={key:2,class:"text-slate-400"},Zm={class:"tabular-nums"},Jm=["title"],Ym={key:1,class:"text-slate-400"},Qm={class:"text-xs"},Xm={key:0,class:"leading-relaxed"},eg={class:"text-green-600 tabular-nums dark:text-green-400"},tg={class:"text-blue-600 tabular-nums dark:text-blue-400"},sg={key:1,class:"text-slate-400"},ng={class:"hidden font-mono text-xs text-slate-400 md:table-cell"},og={key:0},lg={colspan:"10",class:"p-0"},rg={class:"border-t border-slate-200 bg-slate-50 px-4 py-3 dark:border-slate-700/50 dark:bg-slate-950/60"},ig=60,ag={__name:"PeersView",setup(e){const t=Ot(),s=Qe("peerTooltip"),n=(p,b)=>s.value?.showPeerTooltip(p,b),o=()=>s.value?.hidePeerTooltip(),l=se([]);let r=null,i={},c=0;const f=Ht({}),u={},d=p=>{f[p]=!f[p]},g=()=>{const p=t.instanceList.find(b=>b.file_name===t.selectedInstance);return p?p.status:null},h=()=>{l.value=[],i={},c=0;for(const p in u)delete u[p];for(const p in f)delete f[p]},C=async()=>{if(!t.selectedInstance||g()!=="running"){h();return}try{const p=await bd(t.selectedInstance)||[],b=Date.now(),_=c>0?(b-c)/1e3:0,j={};for(const B of p)if(B.traffic){const H=B.ip,M=i[H];if(M&&_>0){const z=Math.max(0,B.traffic.tx_bytes-M.tx_bytes),oe=Math.max(0,B.traffic.rx_bytes-M.rx_bytes);B.traffic.tx_speed=Math.round(z/_),B.traffic.rx_speed=Math.round(oe/_)}else B.traffic.tx_speed=0,B.traffic.rx_speed=0;j[H]={tx_bytes:B.traffic.tx_bytes,rx_bytes:B.traffic.rx_bytes},u[H]||(u[H]={tx:[],rx:[]}),u[H].tx.push(B.traffic.tx_speed),u[H].rx.push(B.traffic.rx_speed),u[H].tx.length>ig&&(u[H].tx.shift(),u[H].rx.shift())}i=j,c=b,l.value=p}catch(p){console.error(p)}};_t(()=>{C(),r=setInterval(()=>{t.isPageVisible&&C()},3e3)}),Ss(()=>{r&&clearInterval(r)}),Ve(()=>t.selectedInstance,()=>{h(),C()}),Ve(g,p=>{p==="running"&&C()});const y=p=>p.metric===1?"text-purple-600 font-medium dark:text-purple-400":"text-blue-600 dark:text-blue-400",L=p=>{const b=p.metric===1,_=p.protocol.includes("Tcp");return b?_?"打洞TCP直连":"打洞UDP直连":_?"客户端TCP中继":"客户端UDP中继"},$=p=>p===3?"己方加密对方未加密":p===4?"己方未加密对方加密":p===5?"密钥不一致":"未知错误",w=p=>t.selectedInstance===p?"border-indigo-600 bg-indigo-600 text-white dark:border-indigo-500 dark:bg-indigo-500":"border-slate-300 bg-white text-slate-600 hover:bg-slate-50 dark:border-slate-600 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-slate-700";return(p,b)=>(k(),S("div",Tm,[b[8]||(b[8]=a("div",null,[a("h1",{class:"page-title"},"设备列表"),a("p",{class:"page-subtitle"},"查看各实例的设备连接与流量状况")],-1)),O(t).instanceList.length>0?(k(),S("div",$m,[(k(!0),S(ie,null,Te(O(t).instanceList,_=>(k(),S("button",{key:_.file_name,onClick:j=>O(t).selectedInstance=_.file_name,class:G([w(_.file_name),"flex shrink-0 items-center rounded-lg border px-4 py-2 text-sm font-medium transition-colors"])},[ue(ya,{status:_.status,size:"w-2 h-2",class:"mr-2"},null,8,["status"]),ae(" "+N(_.config_name||_.file_name),1)],10,Am))),128))])):fe("",!0),O(t).selectedInstance?(k(),S("div",Im,[a("div",Rm,[b[2]||(b[2]=a("h2",{class:"text-base font-bold text-slate-900 dark:text-white"},"设备列表",-1)),a("div",Pm,[a("span",null,[b[0]||(b[0]=ae(" Online: ",-1)),a("span",Om,N(l.value.filter(_=>_.online).length),1)]),a("span",null,[b[1]||(b[1]=ae(" Total: ",-1)),a("span",Mm,N(l.value.length),1)])])]),a("div",Lm,[a("table",Nm,[b[7]||(b[7]=a("thead",null,[a("tr",null,[a("th",{class:"w-8 px-2"}),a("th",null,"IP地址"),a("th",null,"名称"),a("th",{class:"hidden md:table-cell"},"版本"),a("th",null,"状态"),a("th",null,"模式"),a("th",null,"延迟"),a("th",null,"丢包率"),a("th",null,"流量"),a("th",{class:"hidden md:table-cell"},"最后在线")])],-1)),a("tbody",null,[(k(!0),S(ie,null,Te(l.value,_=>(k(),S(ie,{key:_.ip},[a("tr",Vm,[a("td",{class:"cursor-pointer select-none px-2 text-center",onClick:j=>d(_.ip)},[(k(),S("svg",{class:G(["inline-block h-4 w-4 text-slate-400 transition-transform duration-200",{"rotate-90":f[_.ip]}]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...b[3]||(b[3]=[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 5l7 7-7 7"},null,-1)])],2))],8,jm),a("td",Dm,[a("span",{class:"cursor-help border-b border-dotted border-indigo-400/50 pb-0.5",onMouseenter:j=>n(j,_),onMouseleave:o},N(_.ip),41,Bm)]),a("td",null,N(_.name||"-"),1),a("td",Fm,N(_.version||"-"),1),a("td",null,[a("div",Um,[a("span",{class:G(_.online?"badge-green":"badge-gray")},N(_.online?"Online":"Offline"),3),_.online&&_.key_equal===1?(k(),S("div",Hm,[...b[4]||(b[4]=[a("svg",{class:"h-4 w-4 text-green-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"})],-1),a("span",{class:"tooltip-text"},"双方加密传输",-1)])])):_.online&&_.key_equal===2?(k(),S("div",Wm,[...b[5]||(b[5]=[a("svg",{class:"h-4 w-4 text-yellow-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z"})],-1),a("span",{class:"tooltip-text"},"双方未加密",-1)])])):_.online&&[3,4,5].includes(_.key_equal)?(k(),S("div",Km,[b[6]||(b[6]=a("svg",{class:"h-4 w-4 text-red-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})],-1)),a("span",Gm,N($(_.key_equal)),1)])):fe("",!0)])]),a("td",null,[_.online&&_.route?(k(),S("span",{key:0,class:G(y(_.route))},N(L(_.route)),3)):_.online?(k(),S("span",qm,"服务器中继")):(k(),S("span",zm,"-"))]),a("td",Zm,N(_.route?_.route.rtt+" ms":"-"),1),a("td",null,[_.packet_loss?(k(),S("span",{key:0,class:G(_.packet_loss.loss_rate>10?"text-red-600 dark:text-red-400":_.packet_loss.loss_rate>5?"text-yellow-600 dark:text-yellow-400":"text-green-600 dark:text-green-400"),title:"Sent: "+_.packet_loss.sent+", Received: "+_.packet_loss.received},N(_.packet_loss.loss_rate.toFixed(1))+"%",11,Jm)):(k(),S("span",Ym,"-"))]),a("td",Qm,[_.traffic?(k(),S("div",Xm,[a("div",eg," ↑ "+N(O(Cr)(_.traffic.tx_bytes))+" ("+N(O(Bo)(_.traffic.tx_speed))+") ",1),a("div",tg," ↓ "+N(O(Cr)(_.traffic.rx_bytes))+" ("+N(O(Bo)(_.traffic.rx_speed))+") ",1)])):(k(),S("span",sg,"-"))]),a("td",ng,N(O(km)(_.last_connected_time)),1)]),f[_.ip]?(k(),S("tr",og,[a("td",lg,[a("div",rg,[ue(Em,{history:u[_.ip]||{tx:[],rx:[]},size:60},null,8,["history"])])])])):fe("",!0)],64))),128))])])])])):(k(),Re(on,{key:1,text:"暂无运行中的组网实例"}))]))}},cg={class:"space-y-4"},ug={key:0,class:"scrollbar-hide flex items-center gap-2 overflow-x-auto"},fg=["onClick"],dg={key:2,class:"card overflow-hidden p-0"},pg={class:"custom-scrollbar max-h-[600px] overflow-x-auto"},hg={class:"table"},mg=["rowspan"],gg={class:"font-mono tabular-nums text-yellow-700 dark:text-yellow-300"},vg={class:"tabular-nums"},bg={class:"tabular-nums"},xg={__name:"RoutesView",setup(e){const t=Ot(),s=se([]);let n=null;const o=()=>{const i=t.instanceList.find(c=>c.file_name===t.selectedInstance);return i?i.status:null},l=async()=>{if(!t.selectedInstance||o()!=="running"){s.value=[];return}try{s.value=await xd(t.selectedInstance)||[]}catch(i){console.error(i)}};_t(()=>{l(),n=setInterval(()=>{t.isPageVisible&&l()},3e3)}),Ss(()=>{n&&clearInterval(n)}),Ve(()=>t.selectedInstance,()=>{l()}),Ve(o,i=>{i==="running"&&l()});const r=i=>t.selectedInstance===i?"border-indigo-600 bg-indigo-600 text-white dark:border-indigo-500 dark:bg-indigo-500":"border-slate-300 bg-white text-slate-600 hover:bg-slate-50 dark:border-slate-600 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-slate-700";return(i,c)=>(k(),S("div",cg,[c[2]||(c[2]=a("div",null,[a("h1",{class:"page-title"},"路由"),a("p",{class:"page-subtitle"},"查看各实例的路由表")],-1)),O(t).instanceList.length>0?(k(),S("div",ug,[(k(!0),S(ie,null,Te(O(t).instanceList,f=>(k(),S("button",{key:f.file_name,onClick:u=>O(t).selectedInstance=f.file_name,class:G([r(f.file_name),"flex shrink-0 items-center rounded-lg border px-4 py-2 text-sm font-medium transition-colors"])},[ue(ya,{status:f.status,size:"w-2 h-2",class:"mr-2"},null,8,["status"]),ae(" "+N(f.config_name||f.file_name),1)],10,fg))),128))])):fe("",!0),O(t).selectedInstance?(k(),S("div",dg,[c[1]||(c[1]=a("div",{class:"border-b border-slate-200 px-6 py-4 dark:border-slate-700"},[a("h2",{class:"text-base font-bold text-slate-900 dark:text-white"},"路由表")],-1)),a("div",pg,[a("table",hg,[c[0]||(c[0]=a("thead",null,[a("tr",null,[a("th",null,"目标节点IP"),a("th",null,"目标网络"),a("th",null,"跳数"),a("th",null,"延迟")])],-1)),a("tbody",null,[(k(!0),S(ie,null,Te(s.value,f=>(k(),S(ie,{key:f.ip},[(k(!0),S(ie,null,Te(f.routes,(u,d)=>(k(),S("tr",{key:d,class:"hover:bg-slate-50 dark:hover:bg-slate-800/50"},[d===0?(k(),S("td",{key:0,rowspan:f.routes.length,class:"font-mono tabular-nums text-indigo-600 dark:text-indigo-400"},N(f.ip),9,mg)):fe("",!0),a("td",gg,N(u.addr),1),a("td",vg,N(u.metric),1),a("td",bg,N(u.rtt)+" ms",1)]))),128))],64))),128))])])])])):(k(),Re(on,{key:1,text:"暂无运行中的组网实例"}))]))}},_g={class:"mx-auto max-w-4xl space-y-5"},yg={key:0,class:"card text-sm text-slate-400"},kg={key:1,class:"card border-red-200 text-sm text-red-600 dark:border-red-900 dark:text-red-300"},wg={class:"card space-y-6"},Cg={class:"flex items-start justify-between gap-5"},Sg=["aria-checked","disabled"],Eg={class:"grid gap-5 sm:grid-cols-2"},Tg={class:"block"},$g=["disabled"],Ag={class:"block"},Ig={class:"mb-2 flex items-center justify-between gap-3"},Rg=["disabled"],Pg={class:"flex items-center gap-2"},Og={class:"min-w-0 flex-1 truncate rounded-lg border border-slate-200 bg-slate-50 px-3 py-2.5 text-xs text-slate-600 dark:border-slate-700 dark:bg-slate-950 dark:text-slate-300"},Mg=["disabled"],Lg={key:0,class:"border-t border-slate-200 pt-5 dark:border-slate-800"},Ng={key:0,class:"text-xs text-green-600 dark:text-green-400"},Vg={key:1,class:"text-xs text-red-600 dark:text-red-400"},jg={class:"card"},Dg={class:"flex items-start gap-3"},Bg={class:"min-w-0 flex-1"},Fg={class:"text-sm font-semibold text-slate-900 dark:text-white"},Ug={class:"mt-1 text-xs text-slate-400"},Hg={key:0,class:"mt-4 rounded-lg border border-slate-200 bg-slate-50 px-3 py-2.5 font-mono text-xs text-slate-600 dark:border-slate-700 dark:bg-slate-950 dark:text-slate-300"},Wg={class:"block truncate"},Kg={key:1,class:"mt-3 flex flex-wrap gap-2"},Gg={__name:"WebAccessView",setup(e){const t=globalThis.__VNT_WEB_ACCESS__,s=Ht({enabled:!1,port:19099,global:!1,token:""}),n=se(null),o=se(!0),l=se(!1),r=se(""),i=se(""),c=[{value:!1,label:"仅本机(推荐)"},{value:!0,label:"局域网内所有设备"}],f=p=>{n.value=p,Object.assign(s,{enabled:p.enabled,port:p.port,global:p.global,token:p.token})},u=async()=>{o.value=!0,i.value="";try{if(!t)throw new Error("Web 访问设置仅在桌面客户端中提供");f(await t.status())}catch(p){i.value=p.message||String(p)}finally{o.value=!1}},d=async(p,b)=>{l.value=!0,i.value="",r.value="";try{f(await t.update({...s,...p,port:Number(p.port??s.port)})),r.value=b}catch(_){const j=_.message||String(_);try{f(await t.status())}catch{}i.value=j}finally{l.value=!1}},g=async()=>{const p=!s.enabled;await d({enabled:p},p?"Web 服务已启动":"Web 服务已关闭")},h=async()=>{const p=await t.generateToken();await d({token:p},s.enabled?"新令牌已生效,Web 服务已重新加载":"新令牌已生成")},C=async()=>{s.enabled||await d({},"监听设置已自动保存")},y=async p=>{s.global=p,await C()},L=async()=>{await navigator.clipboard.writeText(s.token),r.value="访问令牌已复制"},$=async()=>{await navigator.clipboard.writeText(n.value.url),r.value="访问地址已复制"},w=async()=>{await t.openUrl(n.value.url)};return _t(u),(p,b)=>(k(),S("div",_g,[b[7]||(b[7]=a("div",{class:"page-title"},[a("div",null,[a("h2",null,"Web 访问"),a("p",null,"从浏览器访问当前 VNT 进程,API 请求由持久访问令牌保护。")])],-1)),o.value?(k(),S("div",yg,"正在读取 Web 服务状态…")):O(t)?(k(),S(ie,{key:2},[a("section",wg,[a("div",Cg,[b[1]||(b[1]=a("div",null,[a("h3",{class:"text-sm font-semibold text-slate-900 dark:text-white"},"启用 Web 服务"),a("p",{class:"mt-1 text-xs leading-5 text-slate-400"},"服务内置于桌面客户端,不会启动单独的 vnt2_web 进程。")],-1)),a("button",{type:"button",role:"switch","aria-label":"启用 Web 服务","aria-checked":s.enabled,disabled:l.value,class:G(["web-switch transition-colors disabled:opacity-50",s.enabled?"bg-indigo-600 dark:bg-indigo-500":"bg-slate-300 dark:bg-slate-600"]),onClick:g},[a("span",{class:G(["web-switch-knob bg-white shadow-sm",{"web-switch-knob-on":s.enabled}])},null,2)],10,Sg)]),a("div",Eg,[a("label",Tg,[b[2]||(b[2]=a("span",{class:"mb-2 block text-sm font-medium text-slate-700 dark:text-slate-200"},"监听端口",-1)),xe(a("input",{"onUpdate:modelValue":b[0]||(b[0]=_=>s.port=_),class:"input font-mono",type:"number",min:"1",max:"65535",disabled:l.value||s.enabled,onChange:C},null,40,$g),[[Ie,s.port,void 0,{number:!0}]])]),a("label",Ag,[b[3]||(b[3]=a("span",{class:"mb-2 block text-sm font-medium text-slate-700 dark:text-slate-200"},"监听范围",-1)),ue(ml,{"model-value":s.global,options:c,disabled:l.value||s.enabled,"aria-label":"监听范围","onUpdate:modelValue":y},null,8,["model-value","disabled"])])]),b[6]||(b[6]=a("p",{class:"-mt-3 text-xs text-slate-400"},"端口和监听范围会自动保存;需要修改时请先关闭 Web 服务。",-1)),a("div",null,[a("div",Ig,[b[4]||(b[4]=a("span",{class:"text-sm font-medium text-slate-700 dark:text-slate-200"},"访问令牌",-1)),a("button",{class:"text-xs font-medium text-indigo-600 hover:text-indigo-500 disabled:opacity-50 dark:text-indigo-400",type:"button",disabled:l.value,onClick:h},"更换令牌",8,Rg)]),a("div",Pg,[a("code",Og,N(s.token),1),a("button",{class:"btn-ghost shrink-0",type:"button",disabled:l.value,onClick:L},"复制令牌",8,Mg)]),b[5]||(b[5]=a("p",{class:"mt-2 text-xs text-slate-400"},"更换令牌后,已登录的浏览器需要使用新令牌重新鉴权。",-1))]),r.value||i.value?(k(),S("div",Lg,[r.value?(k(),S("span",Ng,N(r.value),1)):fe("",!0),i.value?(k(),S("span",Vg,N(i.value),1)):fe("",!0)])):fe("",!0)]),a("section",jg,[a("div",Dg,[a("span",{class:G(["mt-1 h-2.5 w-2.5 shrink-0 rounded-full",n.value?.running?"bg-green-500":"bg-slate-300 dark:bg-slate-600"])},null,2),a("div",Bg,[a("div",Fg,N(n.value?.running?"运行中":"未运行"),1),a("div",Ug,"监听地址:"+N(n.value?.listenAddress),1),n.value?.running?(k(),S("div",Hg,[a("span",Wg,N(n.value.url),1)])):fe("",!0),n.value?.running?(k(),S("div",Kg,[a("button",{class:"btn-primary btn-sm",type:"button",onClick:w},"打开浏览器"),a("button",{class:"btn-ghost btn-sm",type:"button",onClick:$},"复制访问地址")])):fe("",!0)])])])],64)):(k(),S("div",kg,N(i.value),1))]))}},qg=hl(Gg,[["__scopeId","data-v-5cd7f746"]]),zg=[{path:"/",component:R0},{path:"/instances",component:uh},{path:"/general",redirect:"/instances"},{path:"/config",component:ym},{path:"/peers",component:ag},{path:"/routes",component:xg},{path:"/web-access",component:qg}],Zg=pd({history:Kf(),routes:zg}),Qn=document.querySelector('link[rel~="icon"]')||document.createElement("link");Qn.rel="icon";Qn.type="image/png";Qn.href=dl;document.head.appendChild(Qn);Yu(Np).use(ef()).use(Zg).mount("#app"); +# tcp_stun = ["stun.nextcloud.com:443"]`,dh={class:"text-lg font-bold text-slate-900 dark:text-white"},ph={class:"flex items-center gap-4"},hh={class:"flex rounded-lg border border-slate-300 bg-slate-100 p-1 dark:border-slate-600 dark:bg-slate-800"},mh={key:0,class:"text-sm text-slate-500 font-mono hidden md:block"},gh={class:"h-full overflow-y-auto scrollbar-hide p-6"},vh={class:"max-w-4xl mx-auto space-y-6"},bh={class:"card"},xh={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},_h={class:"mt-4"},yh={class:"space-y-2"},kh=["onUpdate:modelValue"],wh=["onClick"],Ch={class:"card"},Sh={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Eh={class:"card"},Th={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Ah={class:"card"},$h={class:"space-y-4"},Ih={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Rh={key:0},Ph={class:"card"},Oh={class:"space-y-4"},Mh={class:"space-y-2"},Lh=["onUpdate:modelValue"],Nh=["onClick"],Vh={class:"space-y-2"},jh=["onUpdate:modelValue"],Dh=["onClick"],Bh={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Fh={class:"card"},Uh={class:"space-y-4"},Hh={class:"space-y-2"},Wh=["onUpdate:modelValue"],Kh=["onClick"],Gh={class:"card"},qh={class:"grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-4"},zh={class:"card"},Zh={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Jh={class:"space-y-2"},Yh=["onUpdate:modelValue"],Qh=["onClick"],Xh={class:"space-y-2"},em=["onUpdate:modelValue"],tm=["onClick"],sm={class:"h-full"},nm={class:"flex-1 text-left text-xs text-slate-500"},om={key:0},lm={key:1},Zt="h-5 w-5 rounded border-slate-300 bg-white text-indigo-600 focus:ring-indigo-500 dark:border-slate-600 dark:bg-slate-700",Jt="flex cursor-pointer items-center justify-between gap-2 rounded-lg border border-slate-200 bg-slate-50 p-3 transition-colors hover:bg-slate-100 dark:border-slate-700 dark:bg-slate-800/50 dark:hover:bg-slate-800",ps="shrink-0 rounded-lg bg-red-50 px-3 py-2 text-red-500 transition-colors hover:bg-red-100 dark:bg-red-900/20 dark:text-red-500 dark:hover:bg-red-900/40",hs="flex w-full items-center justify-center gap-1 rounded-lg bg-slate-100 px-3 py-2 text-sm text-slate-600 transition-colors hover:bg-slate-200 dark:bg-slate-700/50 dark:text-slate-300 dark:hover:bg-slate-700",Vt="text-md mb-4 flex items-center font-bold text-slate-900 dark:text-white",rm={__name:"ConfigEditor",props:{show:{type:Boolean,default:!1},fileName:{type:String,default:null}},emits:["close","saved"],setup(e,{emit:t}){const s=e,n=t,o=as(),l=se(""),r=se(""),i=se("new"),c=se("form"),f=se(""),u=se(!1),d=se(!1),g=se(!1),h=se(Bo()),C=[{value:"skip",label:"跳过验证(默认)"},{value:"standard",label:"系统证书验证"},{value:"finger",label:"证书指纹验证"}];Ve(()=>s.show,async _=>{if(_)if(r.value=s.fileName||"",i.value=s.fileName?"edit":"new",c.value="form",u.value=!1,d.value=!1,s.fileName)try{const p=await Td(s.fileName);l.value=p,f.value=p,g.value=!0,h.value=wr(p),xt(()=>{g.value=!1})}catch(p){o.toast.error("获取配置失败: "+p.message),n("close")}else f.value="",h.value=Bo(),l.value=fh});const k=()=>{c.value==="toml"?(c.value="form",g.value=!0,h.value=wr(l.value),xt(()=>{g.value=!1})):c.value="form"},L=()=>{c.value==="form"&&(d.value?(l.value=_o(h.value),d.value=!1):f.value&&!u.value?l.value=f.value:l.value=_o(h.value)),c.value="toml"};Ve(l,(_,p)=>{c.value==="toml"&&p!==void 0&&(u.value=!0)}),Ve(h,()=>{c.value==="form"&&s.show&&!g.value&&(d.value=!0)},{deep:!0});const A=async()=>{try{let _=l.value;if(c.value==="form"){if(!h.value.network_code.trim()){o.toast.error("请填写网络编号");return}if(h.value.server.filter(b=>b.trim()).length===0){o.toast.error("请至少填写一个服务器地址");return}_=_o(h.value)}await Ad(r.value||null,_),o.toast.success("配置已保存"),n("close"),n("saved")}catch(_){o.toast.error("保存失败: "+_.message)}};return(_,p)=>(w(),Re(hl,{show:e.show,"mask-closable":!1,"panel-class":"w-full max-w-6xl h-[85vh]",onClose:p[27]||(p[27]=b=>n("close"))},{header:Ee(()=>[a("h3",dh,N(i.value==="new"?"新建配置":"编辑配置"),1),a("div",ph,[a("div",hh,[a("button",{onClick:k,class:G([c.value==="form"?"bg-white text-slate-900 shadow-sm dark:bg-indigo-600 dark:text-white":"text-slate-500 hover:text-slate-900 dark:text-slate-400 dark:hover:text-white","px-4 py-1.5 rounded text-sm font-medium transition-colors flex items-center"])},[...p[28]||(p[28]=[a("svg",{class:"w-4 h-4 mr-1.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})],-1),ae(" 表单模式 ",-1)])],2),a("button",{onClick:L,class:G([c.value==="toml"?"bg-white text-slate-900 shadow-sm dark:bg-indigo-600 dark:text-white":"text-slate-500 hover:text-slate-900 dark:text-slate-400 dark:hover:text-white","px-4 py-1.5 rounded text-sm font-medium transition-colors flex items-center"])},[...p[29]||(p[29]=[a("svg",{class:"w-4 h-4 mr-1.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"})],-1),ae(" TOML模式 ",-1)])],2)]),r.value?(w(),S("div",mh,N(r.value),1)):fe("",!0)])]),body:Ee(()=>[xe(a("div",gh,[a("div",vh,[a("div",bh,[a("h4",{class:G(Vt)},[...p[30]||(p[30]=[a("svg",{class:"w-5 h-5 mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13 10V3L4 14h7v7l9-11h-7z"})],-1),ae(" 基础配置 ",-1)])]),a("div",xh,[a("div",null,[p[31]||(p[31]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"配置名称",-1)),xe(a("input",{"onUpdate:modelValue":p[0]||(p[0]=b=>h.value.config_name=b),type:"text",placeholder:"例如: 我的VPN配置",class:"input"},null,512),[[Ie,h.value.config_name]])]),a("div",null,[p[32]||(p[32]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},[ae(" 网络编号 "),a("span",{class:"text-red-500"},"*")],-1)),xe(a("input",{"onUpdate:modelValue":p[1]||(p[1]=b=>h.value.network_code=b),type:"text",placeholder:"例如: my_network",required:"",class:"input"},null,512),[[Ie,h.value.network_code]])])]),a("div",_h,[p[35]||(p[35]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},[ae(" 服务器地址 "),a("span",{class:"text-red-500"},"*"),a("span",{class:"text-xs text-slate-500 ml-2"},"支持 quic:// tcp:// wss:// dynamic://")],-1)),a("div",yh,[(w(!0),S(ie,null,Te(h.value.server,(b,y)=>(w(),S("div",{key:y,class:"flex gap-2"},[xe(a("input",{"onUpdate:modelValue":D=>h.value.server[y]=D,type:"text",placeholder:"例如: quic://1.2.3.4:29872",class:"input flex-1"},null,8,kh),[[Ie,h.value.server[y]]]),h.value.server.length>1?(w(),S("button",{key:0,onClick:D=>h.value.server.splice(y,1),class:G(ps)},[...p[33]||(p[33]=[a("svg",{class:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"})],-1)])],8,wh)):fe("",!0)]))),128)),a("button",{onClick:p[2]||(p[2]=b=>h.value.server.push("")),class:G(hs)},[...p[34]||(p[34]=[a("svg",{class:"w-4 h-4 mr-1",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 4v16m8-8H4"})],-1),ae(" 添加服务器 ",-1)])])])])]),a("div",Ch,[a("h4",{class:G(Vt)},[...p[36]||(p[36]=[a("svg",{class:"w-5 h-5 mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9"})],-1),ae(" 网络设置 ",-1)])]),a("div",Sh,[a("div",null,[p[37]||(p[37]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},[ae(" 自定义虚拟IP "),a("span",{class:"text-xs text-slate-500 ml-1"},"(可选)")],-1)),xe(a("input",{"onUpdate:modelValue":p[3]||(p[3]=b=>h.value.ip=b),type:"text",placeholder:"例如: 10.26.0.2",class:"input"},null,512),[[Ie,h.value.ip]])]),a("div",null,[p[38]||(p[38]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"MTU",-1)),xe(a("input",{"onUpdate:modelValue":p[4]||(p[4]=b=>h.value.mtu=b),type:"number",placeholder:"1380",class:"input"},null,512),[[Ie,h.value.mtu,void 0,{number:!0}]])]),a("div",null,[p[39]||(p[39]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"隧道端口",-1)),xe(a("input",{"onUpdate:modelValue":p[5]||(p[5]=b=>h.value.tunnel_port=b),type:"number",placeholder:"0 (自动分配)",class:"input"},null,512),[[Ie,h.value.tunnel_port,void 0,{number:!0}]])])])]),a("div",Eh,[a("h4",{class:G(Vt)},[...p[40]||(p[40]=[a("svg",{class:"w-5 h-5 mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13 10V3L4 14h7v7l9-11h-7z"})],-1),ae(" 传输优化 ",-1)])]),a("div",Th,[a("label",{class:G(Jt)},[p[41]||(p[41]=a("div",{class:"flex-1"},[a("div",{class:"text-sm font-medium text-slate-800 dark:text-white"},"QUIC传输优化"),a("div",{class:"text-xs text-slate-400 mt-0.5"},"重传丢包")],-1)),xe(a("input",{"onUpdate:modelValue":p[6]||(p[6]=b=>h.value.rtx=b),type:"checkbox",class:G(Zt)},null,512),[[zt,h.value.rtx]])]),a("label",{class:G(Jt)},[p[42]||(p[42]=a("div",{class:"flex-1"},[a("div",{class:"text-sm font-medium text-slate-800 dark:text-white"},"FEC前向纠错"),a("div",{class:"text-xs text-slate-400 mt-0.5"},"损失部分带宽提升稳定性")],-1)),xe(a("input",{"onUpdate:modelValue":p[7]||(p[7]=b=>h.value.fec=b),type:"checkbox",class:G(Zt)},null,512),[[zt,h.value.fec]])]),a("label",{class:G(Jt)},[p[43]||(p[43]=a("div",{class:"flex-1"},[a("div",{class:"text-sm font-medium text-slate-800 dark:text-white"},"LZ4压缩"),a("div",{class:"text-xs text-slate-400 mt-0.5"},"减少传输数据量")],-1)),xe(a("input",{"onUpdate:modelValue":p[8]||(p[8]=b=>h.value.compress=b),type:"checkbox",class:G(Zt)},null,512),[[zt,h.value.compress]])]),a("label",{class:G(Jt)},[p[44]||(p[44]=a("div",{class:"flex-1"},[a("div",{class:"text-sm font-medium text-slate-800 dark:text-white"},"关闭P2P打洞"),a("div",{class:"text-xs text-slate-400 mt-0.5"},"仅通过服务器中转")],-1)),xe(a("input",{"onUpdate:modelValue":p[9]||(p[9]=b=>h.value.no_punch=b),type:"checkbox",class:G(Zt)},null,512),[[zt,h.value.no_punch]])])])]),a("div",Ah,[a("h4",{class:G(Vt)},[...p[45]||(p[45]=[a("svg",{class:"w-5 h-5 mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"})],-1),ae(" 安全配置 ",-1)])]),a("div",$h,[a("div",Ih,[a("div",null,[p[46]||(p[46]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"组网加密密码(连接公共服务器时建议填写,同一组网密码需要相同)",-1)),xe(a("input",{"onUpdate:modelValue":p[10]||(p[10]=b=>h.value.password=b),type:"password",placeholder:"留空则不加密",class:"input"},null,512),[[Ie,h.value.password]])]),a("div",null,[p[47]||(p[47]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"服务端证书校验模式",-1)),ue(ml,{modelValue:h.value.cert_mode,"onUpdate:modelValue":p[11]||(p[11]=b=>h.value.cert_mode=b),options:C,"aria-label":"服务端证书校验模式"},null,8,["modelValue"])])]),h.value.cert_mode==="finger"?(w(),S("div",Rh,[p[48]||(p[48]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},[ae(" 证书指纹 "),a("span",{class:"text-xs text-slate-500 ml-1"},"(服务端启动时日志会输出指纹)")],-1)),xe(a("input",{"onUpdate:modelValue":p[12]||(p[12]=b=>h.value.fingerprint=b),type:"text",placeholder:"例如: 3bdd8675606837cdf95d5e13445606315762315a78555f9da652940a25feaec1",class:"input font-mono text-sm"},null,512),[[Ie,h.value.fingerprint]])])):fe("",!0)])]),a("div",Ph,[a("h4",{class:G(Vt)},[...p[49]||(p[49]=[a("svg",{class:"w-5 h-5 mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 20l-5.447-2.724A1 1 0 013 16.382V5.618a1 1 0 011.447-.894L9 7m0 13l6-3m-6 3V7m6 10l4.553 2.276A1 1 0 0021 18.382V7.618a1 1 0 01-.806-.98L15 9m0 0V7m0 2v6"})],-1),ae(" NAT与路由 (点对网) ",-1)])]),a("div",Oh,[a("div",null,[p[51]||(p[51]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},[ae(" 入栈网段 "),a("span",{class:"text-xs text-slate-500 ml-1"},"格式: CIDR,目标IP")],-1)),a("div",Mh,[(w(!0),S(ie,null,Te(h.value.input,(b,y)=>(w(),S("div",{key:y,class:"flex gap-2"},[xe(a("input",{"onUpdate:modelValue":D=>h.value.input[y]=D,type:"text",placeholder:"例如: 192.168.0.0/24,10.26.0.2",class:"input flex-1"},null,8,Lh),[[Ie,h.value.input[y]]]),a("button",{onClick:D=>h.value.input.splice(y,1),class:G(ps)},[...p[50]||(p[50]=[a("svg",{class:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1)])],8,Nh)]))),128)),a("button",{onClick:p[13]||(p[13]=b=>h.value.input.push("")),class:G(hs)}," + 添加入栈网段 ")])]),a("div",null,[p[53]||(p[53]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},[ae(" 出栈网段 "),a("span",{class:"text-xs text-slate-500 ml-1"},"格式: CIDR (允许转发的网段)")],-1)),a("div",Vh,[(w(!0),S(ie,null,Te(h.value.output,(b,y)=>(w(),S("div",{key:y,class:"flex gap-2"},[xe(a("input",{"onUpdate:modelValue":D=>h.value.output[y]=D,type:"text",placeholder:"例如: 0.0.0.0/0",class:"input flex-1"},null,8,jh),[[Ie,h.value.output[y]]]),a("button",{onClick:D=>h.value.output.splice(y,1),class:G(ps)},[...p[52]||(p[52]=[a("svg",{class:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1)])],8,Dh)]))),128)),a("button",{onClick:p[14]||(p[14]=b=>h.value.output.push("")),class:G(hs)}," + 添加出栈网段 ")])]),a("div",Bh,[a("label",{class:G(Jt)},[p[54]||(p[54]=a("div",{class:"flex-1"},[a("div",{class:"text-sm font-medium text-slate-800 dark:text-white"},"关闭内置NAT"),a("div",{class:"text-xs text-slate-400 mt-0.5"},"使用系统网卡转发")],-1)),xe(a("input",{"onUpdate:modelValue":p[15]||(p[15]=b=>h.value.no_nat=b),type:"checkbox",class:G(Zt)},null,512),[[zt,h.value.no_nat]])]),a("label",{class:G(Jt)},[p[55]||(p[55]=a("div",{class:"flex-1"},[a("div",{class:"text-sm font-medium text-slate-800 dark:text-white"},"关闭TUN网卡"),a("div",{class:"text-xs text-slate-400 mt-0.5"},"仅作流量出口或端口映射")],-1)),xe(a("input",{"onUpdate:modelValue":p[16]||(p[16]=b=>h.value.no_tun=b),type:"checkbox",class:G(Zt)},null,512),[[zt,h.value.no_tun]])])])])]),a("div",Fh,[a("h4",{class:G(Vt)},[...p[56]||(p[56]=[a("svg",{class:"w-5 h-5 mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"})],-1),ae(" 端口映射 ",-1)])]),a("div",Uh,[a("div",null,[p[58]||(p[58]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},[ae(" 映射规则 "),a("span",{class:"text-xs text-slate-500 ml-1"},"格式: 协议://监听地址-虚拟IP-目标地址")],-1)),a("div",Hh,[(w(!0),S(ie,null,Te(h.value.port_mapping,(b,y)=>(w(),S("div",{key:y,class:"flex gap-2"},[xe(a("input",{"onUpdate:modelValue":D=>h.value.port_mapping[y]=D,type:"text",placeholder:"例如: tcp://0.0.0.0:81-10.0.0.2-10.0.0.2:80",class:"input flex-1 font-mono"},null,8,Wh),[[Ie,h.value.port_mapping[y]]]),a("button",{onClick:D=>h.value.port_mapping.splice(y,1),class:G(ps)},[...p[57]||(p[57]=[a("svg",{class:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1)])],8,Kh)]))),128)),a("button",{onClick:p[17]||(p[17]=b=>h.value.port_mapping.push("")),class:G(hs)}," + 添加映射规则 ")])]),a("label",{class:G(Jt)},[p[59]||(p[59]=a("div",{class:"flex-1"},[a("div",{class:"text-sm font-medium text-slate-800 dark:text-white"},"允许作为映射出口"),a("div",{class:"text-xs text-slate-400 mt-0.5"},"允许其他设备使用本机作跳板")],-1)),xe(a("input",{"onUpdate:modelValue":p[18]||(p[18]=b=>h.value.allow_mapping=b),type:"checkbox",class:G(Zt)},null,512),[[zt,h.value.allow_mapping]])])])]),a("div",Gh,[a("h4",{class:G(Vt)},[...p[60]||(p[60]=[a("svg",{class:"w-5 h-5 mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"})],-1),ae(" 设备配置 ",-1)])]),a("div",qh,[a("div",null,[p[61]||(p[61]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"设备名称",-1)),xe(a("input",{"onUpdate:modelValue":p[19]||(p[19]=b=>h.value.device_name=b),type:"text",placeholder:"默认为主机名",class:"input"},null,512),[[Ie,h.value.device_name]])]),a("div",null,[p[62]||(p[62]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"设备ID",-1)),xe(a("input",{"onUpdate:modelValue":p[20]||(p[20]=b=>h.value.device_id=b),type:"text",placeholder:"自动生成",class:"input"},null,512),[[Ie,h.value.device_id]])]),a("div",null,[p[63]||(p[63]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"虚拟网卡名",-1)),xe(a("input",{"onUpdate:modelValue":p[21]||(p[21]=b=>h.value.tun_name=b),type:"text",placeholder:"默认为vnt-tun",class:"input"},null,512),[[Ie,h.value.tun_name]])]),a("div",null,[p[64]||(p[64]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"绑定出口网卡",-1)),xe(a("input",{"onUpdate:modelValue":p[22]||(p[22]=b=>h.value.outbound_interface=b),type:"text",placeholder:"例如 Ethernet、Wi-Fi、eth0",class:"input"},null,512),[[Ie,h.value.outbound_interface]]),p[65]||(p[65]=a("p",{class:"mt-1.5 text-xs leading-5 text-slate-400"},"服务端通信、P2P 打洞及转发流量将使用此网卡",-1))])])]),a("div",zh,[a("h4",{class:G(Vt)},[...p[66]||(p[66]=[a("svg",{class:"w-5 h-5 mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M3.055 11H5a2 2 0 012 2v1a2 2 0 002 2 2 2 0 012 2v2.945M8 3.935V5.5A2.5 2.5 0 0010.5 8h.5a2 2 0 012 2 2 2 0 104 0 2 2 0 012-2h1.064M15 20.488V18a2 2 0 012-2h3.064M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})],-1),ae(" STUN配置 (高级) ",-1)])]),a("div",Zh,[a("div",null,[p[68]||(p[68]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"UDP STUN服务器",-1)),a("div",Jh,[(w(!0),S(ie,null,Te(h.value.udp_stun,(b,y)=>(w(),S("div",{key:y,class:"flex gap-2"},[xe(a("input",{"onUpdate:modelValue":D=>h.value.udp_stun[y]=D,type:"text",placeholder:"例如: stun.l.google.com:19302",class:"input flex-1"},null,8,Yh),[[Ie,h.value.udp_stun[y]]]),a("button",{onClick:D=>h.value.udp_stun.splice(y,1),class:G(ps)},[...p[67]||(p[67]=[a("svg",{class:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1)])],8,Qh)]))),128)),a("button",{onClick:p[23]||(p[23]=b=>h.value.udp_stun.push("")),class:G(hs)}," + 添加UDP STUN ")])]),a("div",null,[p[70]||(p[70]=a("label",{class:"mb-2 block text-sm font-medium text-slate-600 dark:text-slate-300"},"TCP STUN服务器",-1)),a("div",Xh,[(w(!0),S(ie,null,Te(h.value.tcp_stun,(b,y)=>(w(),S("div",{key:y,class:"flex gap-2"},[xe(a("input",{"onUpdate:modelValue":D=>h.value.tcp_stun[y]=D,type:"text",placeholder:"例如: stun.nextcloud.com:443",class:"input flex-1"},null,8,em),[[Ie,h.value.tcp_stun[y]]]),a("button",{onClick:D=>h.value.tcp_stun.splice(y,1),class:G(ps)},[...p[69]||(p[69]=[a("svg",{class:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1)])],8,tm)]))),128)),a("button",{onClick:p[24]||(p[24]=b=>h.value.tcp_stun.push("")),class:G(hs)}," + 添加TCP STUN ")])])])])])],512),[[Gl,c.value==="form"]]),xe(a("div",sm,[xe(a("textarea",{"onUpdate:modelValue":p[25]||(p[25]=b=>l.value=b),class:"h-full w-full resize-none bg-slate-50 p-4 font-mono text-sm text-slate-800 focus:outline-none dark:bg-slate-950 dark:text-slate-200",spellcheck:"false",placeholder:"# 在此处输入 TOML 配置..."},null,512),[[Ie,l.value]])],512),[[Gl,c.value==="toml"]])]),footer:Ee(()=>[a("div",nm,[c.value==="form"?(w(),S("span",om,"填写完成后保存即可生成配置文件")):(w(),S("span",lm,"* 请使用标准 TOML 格式"))]),a("button",{class:"btn-ghost",onClick:p[26]||(p[26]=b=>n("close"))},"取消"),a("button",{class:"btn-primary",onClick:A},"保存配置")]),_:1},8,["show"]))}},im={class:"space-y-6"},am={class:"flex items-end justify-between gap-4"},cm={key:1,class:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3"},um=["onClick"],fm={key:0,class:"absolute right-0 top-0 rounded-bl bg-green-500 px-2 py-1 text-xs text-white"},dm={key:1,class:"absolute right-0 top-0 rounded-bl bg-indigo-500 px-2 py-1 text-xs text-white"},pm={class:"flex items-start"},hm={class:"overflow-hidden"},mm=["title"],gm=["title"],vm={class:"config-card-actions mt-4 flex justify-end transition-opacity"},bm=["onClick"],xm=["onClick"],_m={__name:"ConfigView",setup(e){const t=Mt(),s=as(),n=se(!1),o=se(null),l=u=>{const d=t.instanceList.find(g=>g.file_name===u);return d?d.status:null},r=u=>{const d=l(u);return d==="running"?"ring-2 ring-green-500/60":d==="starting"?"ring-2 ring-indigo-500/60":""},i=u=>{o.value=u,n.value=!0},c=()=>{t.fetchConfigList()},f=async u=>{if(await s.confirm({title:"删除配置",message:`确定要删除配置 ${u} 吗?`,danger:!0,confirmText:"删除"}))try{await $d(u),s.toast.success("配置已删除"),t.fetchConfigList()}catch(g){s.toast.error(g.message)}};return _t(()=>t.fetchConfigList()),(u,d)=>(w(),S("div",im,[a("div",am,[d[3]||(d[3]=a("div",null,[a("h1",{class:"page-title"},"配置"),a("p",{class:"page-subtitle"},"管理组网配置文件")],-1)),a("button",{class:"btn-primary",onClick:d[0]||(d[0]=g=>i(null))},[...d[2]||(d[2]=[a("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 4v16m8-8H4"})],-1),ae(" 新建配置 ",-1)])])]),O(t).configList.length===0?(w(),Re(on,{key:0,text:"暂无配置,点击右上角新建"})):(w(),S("div",cm,[(w(!0),S(ie,null,Te(O(t).configList,g=>(w(),S("div",{key:g.file_name,class:G([r(g.file_name),"card group relative flex min-h-[140px] cursor-pointer flex-col justify-between overflow-hidden"]),onClick:h=>i(g.file_name)},[l(g.file_name)==="running"?(w(),S("div",fm," 运行中 ")):l(g.file_name)==="starting"?(w(),S("div",dm," 启动中 ")):fe("",!0),a("div",pm,[d[4]||(d[4]=a("div",{class:"mr-3 mt-1 rounded-lg bg-indigo-50 p-2 text-indigo-600 dark:bg-indigo-500/10 dark:text-indigo-400"},[a("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})])],-1)),a("div",hm,[a("h3",{class:"truncate text-lg font-bold text-slate-900 dark:text-white",title:g.config_name},N(g.config_name||"Unnamed"),9,mm),a("p",{class:"truncate font-mono text-xs text-slate-400",title:g.file_name},N(g.file_name),9,gm)])]),a("div",vm,[a("button",{class:"mr-4 text-sm text-indigo-600 hover:text-indigo-500 dark:text-indigo-400",onClick:ls(h=>i(g.file_name),["stop"])}," 编辑 ",8,bm),a("button",{class:"text-sm text-red-500 hover:text-red-400",onClick:ls(h=>f(g.file_name),["stop"])}," 删除 ",8,xm)])],10,um))),128))])),ue(rm,{show:n.value,"file-name":o.value,onClose:d[1]||(d[1]=g=>n.value=!1),onSaved:c},null,8,["show","file-name"])]))}},ym=Qn(_m,[["__scopeId","data-v-b7dce6ea"]]),km=e=>{if(!e)return"-";const t=new Date(e*1e3),s=n=>n<10?"0"+n:n;return`${t.getFullYear()}-${s(t.getMonth()+1)}-${s(t.getDate())} ${s(t.getHours())}:${s(t.getMinutes())}:${s(t.getSeconds())}`},Cr=e=>{if(e===0||e===void 0||e===null)return"0B";const t=["B","KB","MB","GB","TB"];let s=0,n=e;for(;n>=1024&&s{if(e===0||e===void 0||e===null)return"0B/s";const t=["B/s","KB/s","MB/s","GB/s"];let s=0,n=e;for(;n>=1024&&s{const t=[1024,10240,102400,1048576,10485760,104857600,1073741824];for(const s of t)if(e<=s)return s;return Math.ceil(e/(1024*1024*1024))*1024*1024*1024},ya={__name:"StatusDot",props:{status:{type:String,default:"stopped"},size:{type:String,default:"w-2.5 h-2.5"}},setup(e){const t=s=>s==="running"?"bg-green-500":s==="starting"?"bg-blue-500 animate-pulse":"bg-slate-400 dark:bg-slate-500";return(s,n)=>(w(),S("span",{class:G(["rounded-full inline-block shrink-0",[e.size,t(e.status)]])},null,2))}},Cm={class:"flex items-center gap-4 mb-2 text-xs text-slate-400"},Sm={class:"ml-auto"},Em={__name:"SpeedChart",props:{history:{type:Object,required:!0},size:{type:Number,default:60}},setup(e,{expose:t}){const s=e,n=se(null),o=se(""),l=()=>{const r=n.value;if(!r)return;const i=r.getContext("2d"),c=s.history?s.history.tx:[],f=s.history?s.history.rx:[],u=s.size,d=window.devicePixelRatio||1,g=r.getBoundingClientRect();if(g.width===0)return;r.width=g.width*d,r.height=g.height*d,i.setTransform(d,0,0,d,0,0);const h=g.width,C=g.height,L=document.documentElement.classList.contains("dark")?{bg:"#0c1222",grid:"rgba(71, 85, 105, 0.3)",rx:"#60a5fa",rxFill:"rgba(96, 165, 250, 0.15)",tx:"#4ade80",txFill:"rgba(74, 222, 128, 0.15)"}:{bg:"#f8fafc",grid:"rgba(148, 163, 184, 0.35)",rx:"#3b82f6",rxFill:"rgba(59, 130, 246, 0.12)",tx:"#22c55e",txFill:"rgba(34, 197, 94, 0.12)"},A=8,_=4,p=0,y=h-p-0,D=C-A-_;i.fillStyle=L.bg,i.fillRect(0,0,h,C);const B=[...c,...f];let H=B.length>0?Math.max(...B):0;H<1024&&(H=1024);const M=wm(H);o.value="峰值: "+Fo(M);const z=4;i.strokeStyle=L.grid,i.lineWidth=1;for(let Z=0;Z<=z;Z++){const R=A+D/z*Z;i.beginPath(),i.moveTo(p,R),i.lineTo(p+y,R),i.stroke()}const oe=6;for(let Z=0;Z<=oe;Z++){const R=p+y/oe*Z;i.beginPath(),i.moveTo(R,A),i.lineTo(R,A+D),i.stroke()}const F=(Z,R,ee)=>{if(Z.length<2)return;const ce=y/(u-1),te=u-Z.length;i.beginPath(),i.moveTo(p+te*ce,A+D);for(let re=0;rext(l)),Ve(()=>[s.history?.tx?.length,s.history?.rx?.length,s.history?.tx?.at(-1),s.history?.rx?.at(-1)],()=>xt(l)),t({draw:l}),(r,i)=>(w(),S("div",null,[a("div",Cm,[i[0]||(i[0]=a("span",{class:"flex items-center"},[a("span",{class:"inline-block w-3 h-0.5 bg-green-400 mr-1"}),ae("上传速度")],-1)),i[1]||(i[1]=a("span",{class:"flex items-center"},[a("span",{class:"inline-block w-3 h-0.5 bg-blue-400 mr-1"}),ae("下载速度")],-1)),a("span",Sm,N(o.value),1)]),a("canvas",{ref_key:"canvasRef",ref:n,class:"rounded w-full block h-[150px]"},null,512)]))}},Tm={class:"space-y-4"},Am={key:0,class:"scrollbar-hide flex items-center gap-2 overflow-x-auto"},$m=["onClick"],Im={key:2,class:"card overflow-hidden p-0"},Rm={class:"flex items-center justify-between border-b border-slate-200 px-6 py-4 dark:border-slate-700"},Pm={class:"flex gap-4 text-sm muted"},Om={class:"font-medium tabular-nums text-slate-900 dark:text-white"},Mm={class:"font-medium tabular-nums text-slate-900 dark:text-white"},Lm={class:"custom-scrollbar max-h-[600px] overflow-x-auto"},Nm={class:"table peer-table"},Vm={class:"transition-colors hover:bg-slate-50 dark:hover:bg-slate-800/50"},jm=["onClick"],Dm={class:"font-mono tabular-nums text-indigo-600 dark:text-indigo-400"},Bm=["onMouseenter"],Fm={class:"hidden text-xs text-slate-400 md:table-cell"},Um={class:"flex items-center gap-2"},Hm={key:0,class:"tooltip"},Wm={key:1,class:"tooltip"},Km={key:2,class:"tooltip cursor-help"},Gm={class:"tooltip-text"},qm={key:1,class:"text-yellow-600 dark:text-yellow-400"},zm={key:2,class:"text-slate-400"},Zm={class:"tabular-nums"},Jm=["title"],Ym={key:1,class:"text-slate-400"},Qm={class:"text-xs"},Xm={key:0,class:"leading-relaxed"},eg={class:"text-green-600 tabular-nums dark:text-green-400"},tg={class:"text-blue-600 tabular-nums dark:text-blue-400"},sg={key:1,class:"text-slate-400"},ng={class:"hidden font-mono text-xs text-slate-400 md:table-cell"},og={key:0},lg={colspan:"10",class:"p-0"},rg={class:"border-t border-slate-200 bg-slate-50 px-4 py-3 dark:border-slate-700/50 dark:bg-slate-950/60"},ig=60,ag={__name:"PeersView",setup(e){const t=Mt(),s=Qe("peerTooltip"),n=(p,b)=>s.value?.showPeerTooltip(p,b),o=()=>s.value?.hidePeerTooltip(),l=se([]);let r=null,i={},c=0;const f=Rt({}),u=Rt({}),d=p=>{f[p]=!f[p]},g=()=>{const p=t.instanceList.find(b=>b.file_name===t.selectedInstance);return p?p.status:null},h=()=>{l.value=[],i={},c=0;for(const p in u)delete u[p];for(const p in f)delete f[p]},C=async()=>{if(!t.selectedInstance||g()!=="running"){h();return}try{const p=await bd(t.selectedInstance)||[],b=Date.now(),y=c>0?(b-c)/1e3:0,D={};for(const B of p)if(B.traffic){const H=B.ip,M=i[H];if(M&&y>0){const z=Math.max(0,B.traffic.tx_bytes-M.tx_bytes),oe=Math.max(0,B.traffic.rx_bytes-M.rx_bytes);B.traffic.tx_speed=Math.round(z/y),B.traffic.rx_speed=Math.round(oe/y)}else B.traffic.tx_speed=0,B.traffic.rx_speed=0;D[H]={tx_bytes:B.traffic.tx_bytes,rx_bytes:B.traffic.rx_bytes},u[H]||(u[H]={tx:[],rx:[]}),u[H].tx.push(B.traffic.tx_speed),u[H].rx.push(B.traffic.rx_speed),u[H].tx.length>ig&&(u[H].tx.shift(),u[H].rx.shift())}i=D,c=b,l.value=p}catch(p){console.error(p)}};_t(()=>{C(),r=setInterval(()=>{t.isPageVisible&&C()},3e3)}),Ss(()=>{r&&clearInterval(r)}),Ve(()=>t.selectedInstance,()=>{h(),C()}),Ve(g,p=>{p==="running"&&C()});const k=p=>p.metric===1?"font-medium text-green-600 dark:text-green-400":"text-blue-600 dark:text-blue-400",L=p=>{const b=p.metric===1,y=p.protocol.includes("Tcp");return b?y?"打洞TCP直连":"打洞UDP直连":y?"客户端TCP中继":"客户端UDP中继"},A=p=>p===3?"己方加密对方未加密":p===4?"己方未加密对方加密":p===5?"密钥不一致":"未知错误",_=p=>t.selectedInstance===p?"border-indigo-600 bg-indigo-600 text-white dark:border-indigo-500 dark:bg-indigo-500":"border-slate-300 bg-white text-slate-600 hover:bg-slate-50 dark:border-slate-600 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-slate-700";return(p,b)=>(w(),S("div",Tm,[b[8]||(b[8]=a("div",null,[a("h1",{class:"page-title"},"设备列表"),a("p",{class:"page-subtitle"},"查看各实例的设备连接与流量状况")],-1)),O(t).instanceList.length>0?(w(),S("div",Am,[(w(!0),S(ie,null,Te(O(t).instanceList,y=>(w(),S("button",{key:y.file_name,onClick:D=>O(t).selectedInstance=y.file_name,class:G([_(y.file_name),"flex shrink-0 items-center rounded-lg border px-4 py-2 text-sm font-medium transition-colors"])},[ue(ya,{status:y.status,size:"w-2 h-2",class:"mr-2"},null,8,["status"]),ae(" "+N(y.config_name||y.file_name),1)],10,$m))),128))])):fe("",!0),O(t).selectedInstance?(w(),S("div",Im,[a("div",Rm,[b[2]||(b[2]=a("h2",{class:"text-base font-bold text-slate-900 dark:text-white"},"设备列表",-1)),a("div",Pm,[a("span",null,[b[0]||(b[0]=ae(" Online: ",-1)),a("span",Om,N(l.value.filter(y=>y.online).length),1)]),a("span",null,[b[1]||(b[1]=ae(" Total: ",-1)),a("span",Mm,N(l.value.length),1)])])]),a("div",Lm,[a("table",Nm,[b[7]||(b[7]=a("thead",null,[a("tr",null,[a("th",{class:"w-8 px-2"}),a("th",null,"IP地址"),a("th",null,"名称"),a("th",{class:"hidden md:table-cell"},"版本"),a("th",null,"状态"),a("th",null,"模式"),a("th",null,"延迟"),a("th",null,"丢包率"),a("th",null,"流量"),a("th",{class:"hidden md:table-cell"},"最后在线")])],-1)),a("tbody",null,[(w(!0),S(ie,null,Te(l.value,y=>(w(),S(ie,{key:y.ip},[a("tr",Vm,[a("td",{class:"cursor-pointer select-none px-2 text-center",onClick:D=>d(y.ip)},[(w(),S("svg",{class:G(["inline-block h-4 w-4 text-slate-400 transition-transform duration-200",{"rotate-90":f[y.ip]}]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...b[3]||(b[3]=[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 5l7 7-7 7"},null,-1)])],2))],8,jm),a("td",Dm,[a("span",{class:"cursor-help border-b border-dotted border-indigo-400/50 pb-0.5",onMouseenter:D=>n(D,y),onMouseleave:o},N(y.ip),41,Bm)]),a("td",null,N(y.name||"-"),1),a("td",Fm,N(y.version||"-"),1),a("td",null,[a("div",Um,[a("span",{class:G(y.online?"badge-green":"badge-gray")},N(y.online?"在线":"离线"),3),y.online&&y.key_equal===1?(w(),S("div",Hm,[...b[4]||(b[4]=[a("svg",{class:"h-4 w-4 text-green-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"})],-1),a("span",{class:"tooltip-text"},"双方加密传输",-1)])])):y.online&&y.key_equal===2?(w(),S("div",Wm,[...b[5]||(b[5]=[a("svg",{class:"h-4 w-4 text-yellow-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z"})],-1),a("span",{class:"tooltip-text"},"双方未加密",-1)])])):y.online&&[3,4,5].includes(y.key_equal)?(w(),S("div",Km,[b[6]||(b[6]=a("svg",{class:"h-4 w-4 text-red-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})],-1)),a("span",Gm,N(A(y.key_equal)),1)])):fe("",!0)])]),a("td",null,[y.online&&y.route?(w(),S("span",{key:0,class:G(k(y.route))},N(L(y.route)),3)):y.online?(w(),S("span",qm,"服务器中继")):(w(),S("span",zm,"-"))]),a("td",Zm,N(y.route?y.route.rtt+" ms":"-"),1),a("td",null,[y.packet_loss?(w(),S("span",{key:0,class:G(y.packet_loss.loss_rate>10?"text-red-600 dark:text-red-400":y.packet_loss.loss_rate>5?"text-yellow-600 dark:text-yellow-400":"text-green-600 dark:text-green-400"),title:"Sent: "+y.packet_loss.sent+", Received: "+y.packet_loss.received},N(y.packet_loss.loss_rate.toFixed(1))+"%",11,Jm)):(w(),S("span",Ym,"-"))]),a("td",Qm,[y.traffic?(w(),S("div",Xm,[a("div",eg," ↑ "+N(O(Cr)(y.traffic.tx_bytes))+" ("+N(O(Fo)(y.traffic.tx_speed))+") ",1),a("div",tg," ↓ "+N(O(Cr)(y.traffic.rx_bytes))+" ("+N(O(Fo)(y.traffic.rx_speed))+") ",1)])):(w(),S("span",sg,"-"))]),a("td",ng,N(O(km)(y.last_connected_time)),1)]),f[y.ip]?(w(),S("tr",og,[a("td",lg,[a("div",rg,[ue(Em,{history:u[y.ip]||{tx:[],rx:[]},size:60},null,8,["history"])])])])):fe("",!0)],64))),128))])])])])):(w(),Re(on,{key:1,text:"暂无运行中的组网实例"}))]))}},cg=Qn(ag,[["__scopeId","data-v-c64dc8e9"]]),ug={class:"space-y-4"},fg={key:0,class:"scrollbar-hide flex items-center gap-2 overflow-x-auto"},dg=["onClick"],pg={key:2,class:"card overflow-hidden p-0"},hg={class:"custom-scrollbar max-h-[600px] overflow-x-auto"},mg={class:"table"},gg=["rowspan"],vg={class:"font-mono tabular-nums text-yellow-700 dark:text-yellow-300"},bg={class:"tabular-nums"},xg={class:"tabular-nums"},_g={__name:"RoutesView",setup(e){const t=Mt(),s=se([]);let n=null;const o=()=>{const i=t.instanceList.find(c=>c.file_name===t.selectedInstance);return i?i.status:null},l=async()=>{if(!t.selectedInstance||o()!=="running"){s.value=[];return}try{s.value=await xd(t.selectedInstance)||[]}catch(i){console.error(i)}};_t(()=>{l(),n=setInterval(()=>{t.isPageVisible&&l()},3e3)}),Ss(()=>{n&&clearInterval(n)}),Ve(()=>t.selectedInstance,()=>{l()}),Ve(o,i=>{i==="running"&&l()});const r=i=>t.selectedInstance===i?"border-indigo-600 bg-indigo-600 text-white dark:border-indigo-500 dark:bg-indigo-500":"border-slate-300 bg-white text-slate-600 hover:bg-slate-50 dark:border-slate-600 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-slate-700";return(i,c)=>(w(),S("div",ug,[c[2]||(c[2]=a("div",null,[a("h1",{class:"page-title"},"路由"),a("p",{class:"page-subtitle"},"查看各实例的路由表")],-1)),O(t).instanceList.length>0?(w(),S("div",fg,[(w(!0),S(ie,null,Te(O(t).instanceList,f=>(w(),S("button",{key:f.file_name,onClick:u=>O(t).selectedInstance=f.file_name,class:G([r(f.file_name),"flex shrink-0 items-center rounded-lg border px-4 py-2 text-sm font-medium transition-colors"])},[ue(ya,{status:f.status,size:"w-2 h-2",class:"mr-2"},null,8,["status"]),ae(" "+N(f.config_name||f.file_name),1)],10,dg))),128))])):fe("",!0),O(t).selectedInstance?(w(),S("div",pg,[c[1]||(c[1]=a("div",{class:"border-b border-slate-200 px-6 py-4 dark:border-slate-700"},[a("h2",{class:"text-base font-bold text-slate-900 dark:text-white"},"路由表")],-1)),a("div",hg,[a("table",mg,[c[0]||(c[0]=a("thead",null,[a("tr",null,[a("th",null,"目标节点IP"),a("th",null,"目标网络"),a("th",null,"跳数"),a("th",null,"延迟")])],-1)),a("tbody",null,[(w(!0),S(ie,null,Te(s.value,f=>(w(),S(ie,{key:f.ip},[(w(!0),S(ie,null,Te(f.routes,(u,d)=>(w(),S("tr",{key:d,class:"hover:bg-slate-50 dark:hover:bg-slate-800/50"},[d===0?(w(),S("td",{key:0,rowspan:f.routes.length,class:"font-mono tabular-nums text-indigo-600 dark:text-indigo-400"},N(f.ip),9,gg)):fe("",!0),a("td",vg,N(u.addr),1),a("td",bg,N(u.metric),1),a("td",xg,N(u.rtt)+" ms",1)]))),128))],64))),128))])])])])):(w(),Re(on,{key:1,text:"暂无运行中的组网实例"}))]))}},yg={class:"mx-auto max-w-4xl space-y-5"},kg={key:0,class:"card text-sm text-slate-400"},wg={key:1,class:"card border-red-200 text-sm text-red-600 dark:border-red-900 dark:text-red-300"},Cg={class:"card space-y-6"},Sg={class:"flex items-start justify-between gap-5"},Eg=["aria-checked","disabled"],Tg={class:"grid gap-5 sm:grid-cols-2"},Ag={class:"block"},$g=["disabled"],Ig={class:"block"},Rg={class:"mb-2 flex items-center justify-between gap-3"},Pg=["disabled"],Og={class:"block min-w-0 truncate rounded-lg border border-slate-200 bg-slate-50 px-3 py-2.5 text-xs text-slate-600 dark:border-slate-700 dark:bg-slate-950 dark:text-slate-300"},Mg={key:0,class:"border-t border-slate-200 pt-5 dark:border-slate-800"},Lg={key:0,class:"text-xs text-green-600 dark:text-green-400"},Ng={key:1,class:"text-xs text-red-600 dark:text-red-400"},Vg={class:"card"},jg={class:"flex items-start gap-3"},Dg={class:"min-w-0 flex-1"},Bg={class:"text-sm font-semibold text-slate-900 dark:text-white"},Fg={class:"mt-1 text-xs text-slate-400"},Ug={key:0,class:"mt-4 rounded-lg border border-slate-200 bg-slate-50 px-3 py-2.5 font-mono text-xs text-slate-600 dark:border-slate-700 dark:bg-slate-950 dark:text-slate-300"},Hg={class:"block truncate"},Wg={key:1,class:"mt-3 flex flex-wrap gap-2"},Kg={__name:"WebAccessView",setup(e){const t=globalThis.__VNT_WEB_ACCESS__,s=Rt({enabled:!1,port:19099,global:!1,token:""}),n=se(null),o=se(!0),l=se(!1),r=se(""),i=se(""),c=[{value:!1,label:"仅本机(推荐)"},{value:!0,label:"局域网内所有设备"}],f=_=>{n.value=_,Object.assign(s,{enabled:_.enabled,port:_.port,global:_.global,token:_.token})},u=async()=>{o.value=!0,i.value="";try{if(!t)throw new Error("Web 访问设置仅在桌面客户端中提供");f(await t.status())}catch(_){i.value=_.message||String(_)}finally{o.value=!1}},d=async(_,p)=>{l.value=!0,i.value="",r.value="";try{f(await t.update({...s,..._,port:Number(_.port??s.port)})),r.value=p}catch(b){const y=b.message||String(b);try{f(await t.status())}catch{}i.value=y}finally{l.value=!1}},g=async()=>{const _=!s.enabled;await d({enabled:_},_?"Web 服务已启动":"Web 服务已关闭")},h=async()=>{const _=await t.generateToken();await d({token:_},s.enabled?"新令牌已生效,Web 服务已重新加载":"新令牌已生成")},C=async()=>{s.enabled||await d({},"监听设置已自动保存")},k=async _=>{s.global=_,await C()},L=async()=>{await navigator.clipboard.writeText(n.value.url),r.value="访问地址已复制"},A=async()=>{await t.openUrl(n.value.url)};return _t(u),(_,p)=>(w(),S("div",yg,[p[7]||(p[7]=a("div",{class:"page-title"},[a("div",null,[a("h2",null,"Web 访问"),a("p",null,"从浏览器访问当前 VNT 进程,API 请求由持久访问令牌保护。")])],-1)),o.value?(w(),S("div",kg,"正在读取 Web 服务状态…")):O(t)?(w(),S(ie,{key:2},[a("section",Cg,[a("div",Sg,[p[1]||(p[1]=a("div",null,[a("h3",{class:"text-sm font-semibold text-slate-900 dark:text-white"},"启用 Web 服务")],-1)),a("button",{type:"button",role:"switch","aria-label":"启用 Web 服务","aria-checked":s.enabled,disabled:l.value,class:G(["web-switch transition-colors disabled:opacity-50",s.enabled?"bg-indigo-600 dark:bg-indigo-500":"bg-slate-300 dark:bg-slate-600"]),onClick:g},[a("span",{class:G(["web-switch-knob bg-white shadow-sm",{"web-switch-knob-on":s.enabled}])},null,2)],10,Eg)]),a("div",Tg,[a("label",Ag,[p[2]||(p[2]=a("span",{class:"mb-2 block text-sm font-medium text-slate-700 dark:text-slate-200"},"监听端口",-1)),xe(a("input",{"onUpdate:modelValue":p[0]||(p[0]=b=>s.port=b),class:"input font-mono",type:"number",min:"1",max:"65535",disabled:l.value||s.enabled,onChange:C},null,40,$g),[[Ie,s.port,void 0,{number:!0}]])]),a("label",Ig,[p[3]||(p[3]=a("span",{class:"mb-2 block text-sm font-medium text-slate-700 dark:text-slate-200"},"监听范围",-1)),ue(ml,{"model-value":s.global,options:c,disabled:l.value||s.enabled,"aria-label":"监听范围","onUpdate:modelValue":k},null,8,["model-value","disabled"])])]),p[6]||(p[6]=a("p",{class:"-mt-3 text-xs text-slate-400"},"端口和监听范围会自动保存;需要修改时请先关闭 Web 服务。",-1)),a("div",null,[a("div",Rg,[p[4]||(p[4]=a("span",{class:"text-sm font-medium text-slate-700 dark:text-slate-200"},"访问令牌",-1)),a("button",{class:"text-xs font-medium text-indigo-600 hover:text-indigo-500 disabled:opacity-50 dark:text-indigo-400",type:"button",disabled:l.value,onClick:h},"更换令牌",8,Pg)]),a("code",Og,N(s.token),1),p[5]||(p[5]=a("p",{class:"mt-2 text-xs text-slate-400"},"更换令牌后,已登录的浏览器需要使用新令牌重新鉴权。",-1))]),r.value||i.value?(w(),S("div",Mg,[r.value?(w(),S("span",Lg,N(r.value),1)):fe("",!0),i.value?(w(),S("span",Ng,N(i.value),1)):fe("",!0)])):fe("",!0)]),a("section",Vg,[a("div",jg,[a("span",{class:G(["mt-1 h-2.5 w-2.5 shrink-0 rounded-full",n.value?.running?"bg-green-500":"bg-slate-300 dark:bg-slate-600"])},null,2),a("div",Dg,[a("div",Bg,N(n.value?.running?"运行中":"未运行"),1),a("div",Fg,"监听地址:"+N(n.value?.listenAddress),1),n.value?.running?(w(),S("div",Ug,[a("span",Hg,N(n.value.url),1)])):fe("",!0),n.value?.running?(w(),S("div",Wg,[a("button",{class:"btn-primary btn-sm",type:"button",onClick:A},"打开浏览器"),a("button",{class:"btn-ghost btn-sm",type:"button",onClick:L},"复制访问地址")])):fe("",!0)])])])],64)):(w(),S("div",wg,N(i.value),1))]))}},Gg=Qn(Kg,[["__scopeId","data-v-a6f46239"]]),qg=[{path:"/",component:R0},{path:"/instances",component:uh},{path:"/general",redirect:"/instances"},{path:"/config",component:ym},{path:"/peers",component:cg},{path:"/routes",component:_g},{path:"/web-access",component:Gg}],zg=pd({history:Kf(),routes:qg}),Xn=document.querySelector('link[rel~="icon"]')||document.createElement("link");Xn.rel="icon";Xn.type="image/png";Xn.href=pl;document.head.appendChild(Xn);Yu(Np).use(ef()).use(zg).mount("#app"); diff --git a/vnt-web/static/assets/index-CusMU-l9.css b/vnt-web/static/assets/index-CusMU-l9.css new file mode 100644 index 0000000..ac8f0ed --- /dev/null +++ b/vnt-web/static/assets/index-CusMU-l9.css @@ -0,0 +1 @@ +.select-menu-enter-active[data-v-2fb2198c],.select-menu-leave-active[data-v-2fb2198c]{transform-origin:top;transition:opacity .12s ease,transform .12s ease}.select-menu-enter-from[data-v-2fb2198c],.select-menu-leave-to[data-v-2fb2198c]{opacity:0;transform:translateY(-4px) scale(.98)}.config-card-actions[data-v-b7dce6ea]{opacity:1}@media(min-width:640px)and (hover:hover)and (pointer:fine){.config-card-actions[data-v-b7dce6ea]{opacity:0}.group:hover .config-card-actions[data-v-b7dce6ea],.group:focus-within .config-card-actions[data-v-b7dce6ea]{opacity:1}}.peer-table[data-v-c64dc8e9] thead th{padding:.5rem;font-size:.6875rem}.peer-table[data-v-c64dc8e9] tbody td{padding:.5rem;font-size:.75rem}.peer-table[data-v-c64dc8e9] th:first-child,.peer-table[data-v-c64dc8e9] td:first-child{padding-left:.25rem;padding-right:0}.web-switch[data-v-a6f46239]{position:relative;display:inline-flex;flex:0 0 44px;align-items:center;width:44px;min-width:44px;height:24px;min-height:24px;padding:2px;border:0;border-radius:9999px;cursor:pointer}.web-switch-knob[data-v-a6f46239]{display:block;width:20px;min-width:20px;height:20px;border-radius:9999px;transform:translate(0);transition:transform .16s ease}.web-switch-knob-on[data-v-a6f46239]{transform:translate(20px)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-divide-y-reverse:0}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-900:oklch(39.6% .141 25.723);--color-amber-400:oklch(82.8% .189 84.429);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-900:oklch(38.1% .176 304.987);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-2xl:42rem;--container-4xl:56rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components{.btn-primary{cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing) * 1.5);border-radius:var(--radius-lg);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;transition-duration:.15s;display:inline-flex}.btn-primary:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#625fff66}@supports (color:color-mix(in lab,red,red)){.btn-primary:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 40%, transparent)}}.btn-primary:focus-visible{--tw-outline-style:none;outline-style:none}.btn-primary:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.btn-primary:disabled{cursor:not-allowed;opacity:.5}.btn-primary:disabled:active{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.btn-primary{background-color:var(--color-indigo-600);color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.btn-primary:hover{background-color:var(--color-indigo-500)}}.btn-primary:where(.dark,.dark *){background-color:var(--color-indigo-500)}@media(hover:hover){.btn-primary:where(.dark,.dark *):hover{background-color:var(--color-indigo-400)}}.btn-ghost{cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing) * 1.5);border-radius:var(--radius-lg);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;transition-duration:.15s;display:inline-flex}.btn-ghost:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#625fff66}@supports (color:color-mix(in lab,red,red)){.btn-ghost:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 40%, transparent)}}.btn-ghost:focus-visible{--tw-outline-style:none;outline-style:none}.btn-ghost:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.btn-ghost:disabled{cursor:not-allowed;opacity:.5}.btn-ghost:disabled:active{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.btn-ghost{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-slate-300);background-color:var(--color-white);color:var(--color-slate-700);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.btn-ghost:hover{background-color:var(--color-slate-50)}}.btn-ghost:where(.dark,.dark *){border-color:var(--color-slate-600);background-color:var(--color-slate-800);color:var(--color-slate-200)}@media(hover:hover){.btn-ghost:where(.dark,.dark *):hover{background-color:var(--color-slate-700)}}.btn-danger{cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing) * 1.5);border-radius:var(--radius-lg);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;transition-duration:.15s;display:inline-flex}.btn-danger:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#625fff66}@supports (color:color-mix(in lab,red,red)){.btn-danger:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 40%, transparent)}}.btn-danger:focus-visible{--tw-outline-style:none;outline-style:none}.btn-danger:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.btn-danger:disabled{cursor:not-allowed;opacity:.5}.btn-danger:disabled:active{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.btn-danger{background-color:var(--color-red-600);color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.btn-danger:hover{background-color:var(--color-red-500)}}.btn-sm{padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 1.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.card{border-radius:var(--radius-xl);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-slate-200);background-color:var(--color-white);padding:calc(var(--spacing) * 5);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}@media(hover:hover){.card:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.card:where(.dark,.dark *){border-color:#314158cc}@supports (color:color-mix(in lab,red,red)){.card:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-slate-700) 80%,transparent)}}.card:where(.dark,.dark *){background-color:var(--color-slate-900)}.input{border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-slate-300);background-color:var(--color-white);width:100%;padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-slate-900)}.input::placeholder{color:var(--color-slate-400)}.input{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.input:focus{border-color:var(--color-indigo-500);--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#625fff40}@supports (color:color-mix(in lab,red,red)){.input:focus{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 25%, transparent)}}.input:focus{--tw-outline-style:none;outline-style:none}.input:disabled{cursor:not-allowed;opacity:.5}.input:where(.dark,.dark *){border-color:var(--color-slate-600);background-color:var(--color-slate-800);color:var(--color-white)}.input:where(.dark,.dark *)::placeholder{color:var(--color-slate-500)}.badge-green{padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);background-color:var(--color-green-100);color:var(--color-green-700);border-radius:3.40282e38px;align-items:center;display:inline-flex}.badge-green:where(.dark,.dark *){background-color:#0d542b66}@supports (color:color-mix(in lab,red,red)){.badge-green:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-green-900) 40%,transparent)}}.badge-green:where(.dark,.dark *){color:var(--color-green-300)}.badge-red{padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);background-color:var(--color-red-100);color:var(--color-red-700);border-radius:3.40282e38px;align-items:center;display:inline-flex}.badge-red:where(.dark,.dark *){background-color:#82181a66}@supports (color:color-mix(in lab,red,red)){.badge-red:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-red-900) 40%,transparent)}}.badge-red:where(.dark,.dark *){color:var(--color-red-300)}.badge-yellow{padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);background-color:var(--color-yellow-100);color:var(--color-yellow-700);border-radius:3.40282e38px;align-items:center;display:inline-flex}.badge-yellow:where(.dark,.dark *){background-color:#733e0a66}@supports (color:color-mix(in lab,red,red)){.badge-yellow:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-yellow-900) 40%,transparent)}}.badge-yellow:where(.dark,.dark *){color:var(--color-yellow-300)}.badge-blue{padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);background-color:var(--color-blue-100);color:var(--color-blue-700);border-radius:3.40282e38px;align-items:center;display:inline-flex}.badge-blue:where(.dark,.dark *){background-color:#1c398e66}@supports (color:color-mix(in lab,red,red)){.badge-blue:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-blue-900) 40%,transparent)}}.badge-blue:where(.dark,.dark *){color:var(--color-blue-300)}.badge-purple{padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);background-color:var(--color-purple-100);color:var(--color-purple-700);border-radius:3.40282e38px;align-items:center;display:inline-flex}.badge-purple:where(.dark,.dark *){background-color:#59168b66}@supports (color:color-mix(in lab,red,red)){.badge-purple:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-purple-900) 40%,transparent)}}.badge-purple:where(.dark,.dark *){color:var(--color-purple-300)}.badge-gray{padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);background-color:var(--color-slate-100);color:var(--color-slate-500);border-radius:3.40282e38px;align-items:center;display:inline-flex}.badge-gray:where(.dark,.dark *){background-color:var(--color-slate-700);color:var(--color-slate-300)}.table{min-width:100%}:where(.table>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-color:var(--color-slate-200)}:where(.table:where(.dark,.dark *)>:not(:last-child)){border-color:var(--color-slate-700)}.table thead{background-color:var(--color-slate-50)}.table thead:where(.dark,.dark *){background-color:#1d293d99}@supports (color:color-mix(in lab,red,red)){.table thead:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-800) 60%,transparent)}}.table thead th{padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);text-align:left;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider);white-space:nowrap;color:var(--color-slate-500);text-transform:uppercase}.table thead th:where(.dark,.dark *){color:var(--color-slate-400)}:where(.table tbody>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-color:var(--color-slate-200)}.table tbody{background-color:var(--color-white)}:where(.table tbody:where(.dark,.dark *)>:not(:last-child)){border-color:var(--color-slate-700)}.table tbody:where(.dark,.dark *){background-color:#0000}.table tbody td{padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));white-space:nowrap;color:var(--color-slate-600)}.table tbody td:where(.dark,.dark *){color:var(--color-slate-300)}.tooltip{justify-content:center;align-items:center;display:inline-flex;position:relative}.tooltip .tooltip-text{pointer-events:none;visibility:hidden;z-index:10;width:calc(var(--spacing) * 36);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-slate-200);background-color:var(--color-white);padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 1.5);text-align:center;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-slate-600);opacity:0;--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;transition-duration:.3s;position:absolute;bottom:125%;left:50%}.tooltip .tooltip-text:where(.dark,.dark *){border-color:var(--color-slate-600);background-color:var(--color-slate-800);color:var(--color-slate-200)}.tooltip:hover .tooltip-text{visibility:visible;opacity:1}.page-title{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);color:var(--color-slate-900)}.page-title:where(.dark,.dark *){color:var(--color-white)}.page-subtitle{margin-top:var(--spacing);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-slate-500)}.page-subtitle:where(.dark,.dark *){color:var(--color-slate-400)}.page-title,.page-subtitle{display:none}.muted{color:var(--color-slate-500)}.muted:where(.dark,.dark *){color:var(--color-slate-400)}}@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:0}.-top-2{top:calc(var(--spacing) * -2)}.top-0{top:0}.top-4{top:calc(var(--spacing) * 4)}.right-0{right:0}.right-4{right:calc(var(--spacing) * 4)}.left-1\/2{left:50%}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.z-\[9999\]{z-index:9999}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mx-auto{margin-inline:auto}.-mt-3{margin-top:calc(var(--spacing) * -3)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mr-1{margin-right:var(--spacing)}.mr-1\.5{margin-right:calc(var(--spacing) * 1.5)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-3{margin-right:calc(var(--spacing) * 3)}.mr-4{margin-right:calc(var(--spacing) * 4)}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-7{margin-bottom:calc(var(--spacing) * 7)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.table{display:table}.h-0\.5{height:calc(var(--spacing) * .5)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-16{height:calc(var(--spacing) * 16)}.h-64{height:calc(var(--spacing) * 64)}.h-\[18px\]{height:18px}.h-\[85vh\]{height:85vh}.h-\[100dvh\]{height:100dvh}.h-\[150px\]{height:150px}.h-full{height:100%}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-\[90vh\]{max-height:90vh}.max-h-\[400px\]{max-height:400px}.max-h-\[600px\]{max-height:600px}.min-h-0{min-height:0}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-\[140px\]{min-height:140px}.w-1{width:var(--spacing)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-60{width:calc(var(--spacing) * 60)}.w-\[18px\]{width:18px}.w-\[min\(82vw\,288px\)\]{width:min(82vw,288px)}.w-auto{width:auto}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-\[40\%\]{max-width:40%}.max-w-\[200px\]{max-width:200px}.max-w-\[320px\]{max-width:320px}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:0}.min-w-\[260px\]{min-width:260px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-help{cursor:help}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-green-200{border-color:var(--color-green-200)}.border-indigo-400\/50{border-color:#7d87ff80}@supports (color:color-mix(in lab,red,red)){.border-indigo-400\/50{border-color:color-mix(in oklab,var(--color-indigo-400) 50%,transparent)}}.border-indigo-500{border-color:var(--color-indigo-500)}.border-indigo-600{border-color:var(--color-indigo-600)}.border-red-200{border-color:var(--color-red-200)}.border-slate-100{border-color:var(--color-slate-100)}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-300{border-color:var(--color-slate-300)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-blue-400{background-color:var(--color-blue-400)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-500{background-color:var(--color-indigo-500)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-500{background-color:var(--color-red-500)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-50\/60{background-color:#f8fafc99}@supports (color:color-mix(in lab,red,red)){.bg-slate-50\/60{background-color:color-mix(in oklab,var(--color-slate-50) 60%,transparent)}}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-300{background-color:var(--color-slate-300)}.bg-slate-400{background-color:var(--color-slate-400)}.bg-slate-900\/40{background-color:#0f172b66}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/40{background-color:color-mix(in oklab,var(--color-slate-900) 40%,transparent)}}.bg-slate-950\/45{background-color:#02061873}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/45{background-color:color-mix(in oklab,var(--color-slate-950) 45%,transparent)}}.bg-white{background-color:var(--color-white)}.bg-white\/90{background-color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.bg-white\/90{background-color:color-mix(in oklab,var(--color-white) 90%,transparent)}}.fill-none{fill:none}.stroke-current{stroke:currentColor}.p-0{padding:0}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.p-12{padding:calc(var(--spacing) * 12)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pb-0\.5{padding-bottom:calc(var(--spacing) * .5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-all{word-break:break-all}.whitespace-normal{white-space:normal}.text-blue-600{color:var(--color-blue-600)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-indigo-500{color:var(--color-indigo-500)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-800{color:var(--color-slate-800)}.text-slate-900{color:var(--color-slate-900)}.text-white{color:var(--color-white)}.text-yellow-500{color:var(--color-yellow-500)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-slate-900\/10{--tw-shadow-color:#0f172b1a}@supports (color:color-mix(in lab,red,red)){.shadow-slate-900\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-slate-900) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-green-500\/60{--tw-ring-color:#00c75899}@supports (color:color-mix(in lab,red,red)){.ring-green-500\/60{--tw-ring-color:color-mix(in oklab, var(--color-green-500) 60%, transparent)}}.ring-indigo-500{--tw-ring-color:var(--color-indigo-500)}.ring-indigo-500\/25{--tw-ring-color:#625fff40}@supports (color:color-mix(in lab,red,red)){.ring-indigo-500\/25{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 25%, transparent)}}.ring-indigo-500\/60{--tw-ring-color:#625fff99}@supports (color:color-mix(in lab,red,red)){.ring-indigo-500\/60{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 60%, transparent)}}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-\[2px\]{--tw-backdrop-blur:blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.hover\:border-indigo-300:hover{border-color:var(--color-indigo-300)}.hover\:bg-red-100:hover{background-color:var(--color-red-100)}.hover\:bg-slate-50:hover{background-color:var(--color-slate-50)}.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\:bg-slate-200:hover{background-color:var(--color-slate-200)}.hover\:text-indigo-500:hover{color:var(--color-indigo-500)}.hover\:text-indigo-600:hover{color:var(--color-indigo-600)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-slate-900:hover{color:var(--color-slate-900)}}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:block{display:block}.sm\:inline{display:inline}.sm\:h-80{height:calc(var(--spacing) * 80)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-end{align-items:flex-end}.sm\:p-6{padding:calc(var(--spacing) * 6)}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:px-3{padding-inline:calc(var(--spacing) * 3)}.sm\:px-5{padding-inline:calc(var(--spacing) * 5)}.sm\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}}@media(min-width:48rem){.md\:block{display:block}.md\:table-cell{display:table-cell}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(min-width:64rem){.lg\:block{display:block}.lg\:hidden{display:none}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:px-6{padding-inline:calc(var(--spacing) * 6)}.lg\:px-7{padding-inline:calc(var(--spacing) * 7)}.lg\:py-6{padding-block:calc(var(--spacing) * 6)}}@media(min-width:80rem){.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.dark\:border-green-800:where(.dark,.dark *){border-color:var(--color-green-800)}.dark\:border-indigo-500:where(.dark,.dark *){border-color:var(--color-indigo-500)}.dark\:border-red-900:where(.dark,.dark *){border-color:var(--color-red-900)}.dark\:border-slate-600:where(.dark,.dark *){border-color:var(--color-slate-600)}.dark\:border-slate-700:where(.dark,.dark *){border-color:var(--color-slate-700)}.dark\:border-slate-700\/50:where(.dark,.dark *){border-color:#31415880}@supports (color:color-mix(in lab,red,red)){.dark\:border-slate-700\/50:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-slate-700) 50%,transparent)}}.dark\:border-slate-800:where(.dark,.dark *){border-color:var(--color-slate-800)}.dark\:bg-indigo-500:where(.dark,.dark *){background-color:var(--color-indigo-500)}.dark\:bg-indigo-500\/10:where(.dark,.dark *){background-color:#625fff1a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-indigo-500\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-indigo-500) 10%,transparent)}}.dark\:bg-indigo-500\/15:where(.dark,.dark *){background-color:#625fff26}@supports (color:color-mix(in lab,red,red)){.dark\:bg-indigo-500\/15:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-indigo-500) 15%,transparent)}}.dark\:bg-indigo-600:where(.dark,.dark *){background-color:var(--color-indigo-600)}.dark\:bg-red-900\/20:where(.dark,.dark *){background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-red-900) 20%,transparent)}}.dark\:bg-slate-500:where(.dark,.dark *){background-color:var(--color-slate-500)}.dark\:bg-slate-600:where(.dark,.dark *){background-color:var(--color-slate-600)}.dark\:bg-slate-700:where(.dark,.dark *){background-color:var(--color-slate-700)}.dark\:bg-slate-700\/50:where(.dark,.dark *){background-color:#31415880}@supports (color:color-mix(in lab,red,red)){.dark\:bg-slate-700\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-700) 50%,transparent)}}.dark\:bg-slate-700\/70:where(.dark,.dark *){background-color:#314158b3}@supports (color:color-mix(in lab,red,red)){.dark\:bg-slate-700\/70:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-700) 70%,transparent)}}.dark\:bg-slate-800:where(.dark,.dark *){background-color:var(--color-slate-800)}.dark\:bg-slate-800\/50:where(.dark,.dark *){background-color:#1d293d80}@supports (color:color-mix(in lab,red,red)){.dark\:bg-slate-800\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-800) 50%,transparent)}}.dark\:bg-slate-800\/60:where(.dark,.dark *){background-color:#1d293d99}@supports (color:color-mix(in lab,red,red)){.dark\:bg-slate-800\/60:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-800) 60%,transparent)}}.dark\:bg-slate-900:where(.dark,.dark *){background-color:var(--color-slate-900)}.dark\:bg-slate-900\/50:where(.dark,.dark *){background-color:#0f172b80}@supports (color:color-mix(in lab,red,red)){.dark\:bg-slate-900\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-900) 50%,transparent)}}.dark\:bg-slate-900\/90:where(.dark,.dark *){background-color:#0f172be6}@supports (color:color-mix(in lab,red,red)){.dark\:bg-slate-900\/90:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-900) 90%,transparent)}}.dark\:bg-slate-950:where(.dark,.dark *){background-color:var(--color-slate-950)}.dark\:bg-slate-950\/60:where(.dark,.dark *){background-color:#02061899}@supports (color:color-mix(in lab,red,red)){.dark\:bg-slate-950\/60:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-950) 60%,transparent)}}.dark\:text-blue-400:where(.dark,.dark *){color:var(--color-blue-400)}.dark\:text-green-300:where(.dark,.dark *){color:var(--color-green-300)}.dark\:text-green-400:where(.dark,.dark *){color:var(--color-green-400)}.dark\:text-indigo-300:where(.dark,.dark *){color:var(--color-indigo-300)}.dark\:text-indigo-400:where(.dark,.dark *){color:var(--color-indigo-400)}.dark\:text-red-300:where(.dark,.dark *){color:var(--color-red-300)}.dark\:text-red-400:where(.dark,.dark *){color:var(--color-red-400)}.dark\:text-red-500:where(.dark,.dark *){color:var(--color-red-500)}.dark\:text-slate-200:where(.dark,.dark *){color:var(--color-slate-200)}.dark\:text-slate-300:where(.dark,.dark *){color:var(--color-slate-300)}.dark\:text-slate-400:where(.dark,.dark *){color:var(--color-slate-400)}.dark\:text-slate-500:where(.dark,.dark *){color:var(--color-slate-500)}.dark\:text-slate-600:where(.dark,.dark *){color:var(--color-slate-600)}.dark\:text-white:where(.dark,.dark *){color:var(--color-white)}.dark\:text-yellow-300:where(.dark,.dark *){color:var(--color-yellow-300)}.dark\:text-yellow-400:where(.dark,.dark *){color:var(--color-yellow-400)}.dark\:shadow-black\/30:where(.dark,.dark *){--tw-shadow-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.dark\:shadow-black\/30:where(.dark,.dark *){--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 30%, transparent) var(--tw-shadow-alpha), transparent)}}.dark\:ring-indigo-400:where(.dark,.dark *){--tw-ring-color:var(--color-indigo-400)}@media(hover:hover){.dark\:hover\:border-indigo-500:where(.dark,.dark *):hover{border-color:var(--color-indigo-500)}.dark\:hover\:bg-red-900\/40:where(.dark,.dark *):hover{background-color:#82181a66}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-red-900\/40:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-red-900) 40%,transparent)}}.dark\:hover\:bg-slate-700:where(.dark,.dark *):hover{background-color:var(--color-slate-700)}.dark\:hover\:bg-slate-700\/70:where(.dark,.dark *):hover{background-color:#314158b3}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-slate-700\/70:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-slate-700) 70%,transparent)}}.dark\:hover\:bg-slate-800:where(.dark,.dark *):hover{background-color:var(--color-slate-800)}.dark\:hover\:bg-slate-800\/50:where(.dark,.dark *):hover{background-color:#1d293d80}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-slate-800\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-slate-800) 50%,transparent)}}.dark\:hover\:text-indigo-400:where(.dark,.dark *):hover{color:var(--color-indigo-400)}.dark\:hover\:text-white:where(.dark,.dark *):hover{color:var(--color-white)}}}body{background-color:var(--color-slate-50);color:var(--color-slate-700);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body:where(.dark,.dark *){background-color:var(--color-slate-950);color:var(--color-slate-200)}html,body,#app{height:100%;overflow:hidden}.scrollbar-hide::-webkit-scrollbar{display:none}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.custom-scrollbar::-webkit-scrollbar{width:8px;height:8px}.custom-scrollbar::-webkit-scrollbar-track{background:0 0}.custom-scrollbar::-webkit-scrollbar-thumb{background-color:var(--color-slate-300);border-radius:.25rem}.custom-scrollbar::-webkit-scrollbar-thumb:hover{background-color:var(--color-slate-400)}.custom-scrollbar{scrollbar-width:thin;scrollbar-color:var(--color-slate-300) transparent}.dark .custom-scrollbar{scrollbar-color:var(--color-slate-600) transparent}.fade-enter-active,.fade-leave-active{transition:opacity .2s}.fade-enter-from,.fade-leave-to{opacity:0}.card-list-enter-active,.card-list-leave-active{transition:opacity .3s,transform .3s}.card-list-enter-from,.card-list-leave-to{opacity:0;transform:scale(.96)}.modal-enter-active,.modal-leave-active{transition:opacity .2s}.modal-enter-active .modal-panel,.modal-leave-active .modal-panel{transition:transform .2s,opacity .2s}.modal-enter-from,.modal-leave-to{opacity:0}.modal-enter-from .modal-panel,.modal-leave-to .modal-panel{opacity:0;transform:scale(.96)}.toast-enter-active,.toast-leave-active{transition:opacity .25s,transform .25s}.toast-enter-from{opacity:0;transform:translateY(-10px)}.toast-leave-to{opacity:0;transform:translate(20px)}.navdrop-enter-active,.navdrop-leave-active{transition:opacity .2s,transform .2s}.navdrop-enter-from,.navdrop-leave-to{opacity:0;transform:translateY(-6px)}.drawer-enter-active,.drawer-leave-active{transition:opacity .2s}.drawer-enter-active .drawer-panel,.drawer-leave-active .drawer-panel{transition:transform .2s}.drawer-enter-from,.drawer-leave-to{opacity:0}.drawer-enter-from .drawer-panel,.drawer-leave-to .drawer-panel{transform:translate(-100%)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}} diff --git a/vnt-web/static/assets/index-DviShRor.css b/vnt-web/static/assets/index-DviShRor.css deleted file mode 100644 index 8c613f6..0000000 --- a/vnt-web/static/assets/index-DviShRor.css +++ /dev/null @@ -1 +0,0 @@ -.select-menu-enter-active[data-v-2fb2198c],.select-menu-leave-active[data-v-2fb2198c]{transform-origin:top;transition:opacity .12s ease,transform .12s ease}.select-menu-enter-from[data-v-2fb2198c],.select-menu-leave-to[data-v-2fb2198c]{opacity:0;transform:translateY(-4px) scale(.98)}.config-card-actions[data-v-b7dce6ea]{opacity:1}@media(min-width:640px)and (hover:hover)and (pointer:fine){.config-card-actions[data-v-b7dce6ea]{opacity:0}.group:hover .config-card-actions[data-v-b7dce6ea],.group:focus-within .config-card-actions[data-v-b7dce6ea]{opacity:1}}.web-switch[data-v-5cd7f746]{position:relative;display:inline-flex;flex:0 0 44px;align-items:center;width:44px;min-width:44px;height:24px;min-height:24px;padding:2px;border:0;border-radius:9999px;cursor:pointer}.web-switch-knob[data-v-5cd7f746]{display:block;width:20px;min-width:20px;height:20px;border-radius:9999px;transform:translate(0);transition:transform .16s ease}.web-switch-knob-on[data-v-5cd7f746]{transform:translate(20px)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-divide-y-reverse:0}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-900:oklch(39.6% .141 25.723);--color-amber-400:oklch(82.8% .189 84.429);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-900:oklch(38.1% .176 304.987);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-2xl:42rem;--container-4xl:56rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components{.btn-primary{cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing) * 1.5);border-radius:var(--radius-lg);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;transition-duration:.15s;display:inline-flex}.btn-primary:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#625fff66}@supports (color:color-mix(in lab,red,red)){.btn-primary:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 40%, transparent)}}.btn-primary:focus-visible{--tw-outline-style:none;outline-style:none}.btn-primary:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.btn-primary:disabled{cursor:not-allowed;opacity:.5}.btn-primary:disabled:active{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.btn-primary{background-color:var(--color-indigo-600);color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.btn-primary:hover{background-color:var(--color-indigo-500)}}.btn-primary:where(.dark,.dark *){background-color:var(--color-indigo-500)}@media(hover:hover){.btn-primary:where(.dark,.dark *):hover{background-color:var(--color-indigo-400)}}.btn-ghost{cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing) * 1.5);border-radius:var(--radius-lg);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;transition-duration:.15s;display:inline-flex}.btn-ghost:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#625fff66}@supports (color:color-mix(in lab,red,red)){.btn-ghost:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 40%, transparent)}}.btn-ghost:focus-visible{--tw-outline-style:none;outline-style:none}.btn-ghost:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.btn-ghost:disabled{cursor:not-allowed;opacity:.5}.btn-ghost:disabled:active{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.btn-ghost{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-slate-300);background-color:var(--color-white);color:var(--color-slate-700);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.btn-ghost:hover{background-color:var(--color-slate-50)}}.btn-ghost:where(.dark,.dark *){border-color:var(--color-slate-600);background-color:var(--color-slate-800);color:var(--color-slate-200)}@media(hover:hover){.btn-ghost:where(.dark,.dark *):hover{background-color:var(--color-slate-700)}}.btn-danger{cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing) * 1.5);border-radius:var(--radius-lg);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;transition-duration:.15s;display:inline-flex}.btn-danger:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#625fff66}@supports (color:color-mix(in lab,red,red)){.btn-danger:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 40%, transparent)}}.btn-danger:focus-visible{--tw-outline-style:none;outline-style:none}.btn-danger:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.btn-danger:disabled{cursor:not-allowed;opacity:.5}.btn-danger:disabled:active{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.btn-danger{background-color:var(--color-red-600);color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.btn-danger:hover{background-color:var(--color-red-500)}}.btn-sm{padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 1.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.card{border-radius:var(--radius-xl);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-slate-200);background-color:var(--color-white);padding:calc(var(--spacing) * 5);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}@media(hover:hover){.card:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.card:where(.dark,.dark *){border-color:#314158cc}@supports (color:color-mix(in lab,red,red)){.card:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-slate-700) 80%,transparent)}}.card:where(.dark,.dark *){background-color:var(--color-slate-900)}.input{border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-slate-300);background-color:var(--color-white);width:100%;padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-slate-900)}.input::placeholder{color:var(--color-slate-400)}.input{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.input:focus{border-color:var(--color-indigo-500);--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#625fff40}@supports (color:color-mix(in lab,red,red)){.input:focus{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 25%, transparent)}}.input:focus{--tw-outline-style:none;outline-style:none}.input:disabled{cursor:not-allowed;opacity:.5}.input:where(.dark,.dark *){border-color:var(--color-slate-600);background-color:var(--color-slate-800);color:var(--color-white)}.input:where(.dark,.dark *)::placeholder{color:var(--color-slate-500)}.badge-green{padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);background-color:var(--color-green-100);color:var(--color-green-700);border-radius:3.40282e38px;align-items:center;display:inline-flex}.badge-green:where(.dark,.dark *){background-color:#0d542b66}@supports (color:color-mix(in lab,red,red)){.badge-green:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-green-900) 40%,transparent)}}.badge-green:where(.dark,.dark *){color:var(--color-green-300)}.badge-red{padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);background-color:var(--color-red-100);color:var(--color-red-700);border-radius:3.40282e38px;align-items:center;display:inline-flex}.badge-red:where(.dark,.dark *){background-color:#82181a66}@supports (color:color-mix(in lab,red,red)){.badge-red:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-red-900) 40%,transparent)}}.badge-red:where(.dark,.dark *){color:var(--color-red-300)}.badge-yellow{padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);background-color:var(--color-yellow-100);color:var(--color-yellow-700);border-radius:3.40282e38px;align-items:center;display:inline-flex}.badge-yellow:where(.dark,.dark *){background-color:#733e0a66}@supports (color:color-mix(in lab,red,red)){.badge-yellow:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-yellow-900) 40%,transparent)}}.badge-yellow:where(.dark,.dark *){color:var(--color-yellow-300)}.badge-blue{padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);background-color:var(--color-blue-100);color:var(--color-blue-700);border-radius:3.40282e38px;align-items:center;display:inline-flex}.badge-blue:where(.dark,.dark *){background-color:#1c398e66}@supports (color:color-mix(in lab,red,red)){.badge-blue:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-blue-900) 40%,transparent)}}.badge-blue:where(.dark,.dark *){color:var(--color-blue-300)}.badge-purple{padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);background-color:var(--color-purple-100);color:var(--color-purple-700);border-radius:3.40282e38px;align-items:center;display:inline-flex}.badge-purple:where(.dark,.dark *){background-color:#59168b66}@supports (color:color-mix(in lab,red,red)){.badge-purple:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-purple-900) 40%,transparent)}}.badge-purple:where(.dark,.dark *){color:var(--color-purple-300)}.badge-gray{padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);background-color:var(--color-slate-100);color:var(--color-slate-500);border-radius:3.40282e38px;align-items:center;display:inline-flex}.badge-gray:where(.dark,.dark *){background-color:var(--color-slate-700);color:var(--color-slate-300)}.table{min-width:100%}:where(.table>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-color:var(--color-slate-200)}:where(.table:where(.dark,.dark *)>:not(:last-child)){border-color:var(--color-slate-700)}.table thead{background-color:var(--color-slate-50)}.table thead:where(.dark,.dark *){background-color:#1d293d99}@supports (color:color-mix(in lab,red,red)){.table thead:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-800) 60%,transparent)}}.table thead th{padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);text-align:left;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider);white-space:nowrap;color:var(--color-slate-500);text-transform:uppercase}.table thead th:where(.dark,.dark *){color:var(--color-slate-400)}:where(.table tbody>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-color:var(--color-slate-200)}.table tbody{background-color:var(--color-white)}:where(.table tbody:where(.dark,.dark *)>:not(:last-child)){border-color:var(--color-slate-700)}.table tbody:where(.dark,.dark *){background-color:#0000}.table tbody td{padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));white-space:nowrap;color:var(--color-slate-600)}.table tbody td:where(.dark,.dark *){color:var(--color-slate-300)}.tooltip{justify-content:center;align-items:center;display:inline-flex;position:relative}.tooltip .tooltip-text{pointer-events:none;visibility:hidden;z-index:10;width:calc(var(--spacing) * 36);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-slate-200);background-color:var(--color-white);padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 1.5);text-align:center;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-slate-600);opacity:0;--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;transition-duration:.3s;position:absolute;bottom:125%;left:50%}.tooltip .tooltip-text:where(.dark,.dark *){border-color:var(--color-slate-600);background-color:var(--color-slate-800);color:var(--color-slate-200)}.tooltip:hover .tooltip-text{visibility:visible;opacity:1}.page-title{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);color:var(--color-slate-900)}.page-title:where(.dark,.dark *){color:var(--color-white)}.page-subtitle{margin-top:var(--spacing);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-slate-500)}.page-subtitle:where(.dark,.dark *){color:var(--color-slate-400)}.page-title,.page-subtitle{display:none}.muted{color:var(--color-slate-500)}.muted:where(.dark,.dark *){color:var(--color-slate-400)}}@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:0}.-top-2{top:calc(var(--spacing) * -2)}.top-0{top:0}.top-4{top:calc(var(--spacing) * 4)}.right-0{right:0}.right-4{right:calc(var(--spacing) * 4)}.left-1\/2{left:50%}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.z-\[9999\]{z-index:9999}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mx-auto{margin-inline:auto}.-mt-3{margin-top:calc(var(--spacing) * -3)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mr-1{margin-right:var(--spacing)}.mr-1\.5{margin-right:calc(var(--spacing) * 1.5)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-3{margin-right:calc(var(--spacing) * 3)}.mr-4{margin-right:calc(var(--spacing) * 4)}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-7{margin-bottom:calc(var(--spacing) * 7)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.table{display:table}.h-0\.5{height:calc(var(--spacing) * .5)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-16{height:calc(var(--spacing) * 16)}.h-64{height:calc(var(--spacing) * 64)}.h-\[18px\]{height:18px}.h-\[85vh\]{height:85vh}.h-\[100dvh\]{height:100dvh}.h-\[150px\]{height:150px}.h-full{height:100%}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-\[90vh\]{max-height:90vh}.max-h-\[400px\]{max-height:400px}.max-h-\[600px\]{max-height:600px}.min-h-0{min-height:0}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-\[140px\]{min-height:140px}.w-1{width:var(--spacing)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-60{width:calc(var(--spacing) * 60)}.w-\[18px\]{width:18px}.w-\[min\(82vw\,288px\)\]{width:min(82vw,288px)}.w-auto{width:auto}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-\[40\%\]{max-width:40%}.max-w-\[200px\]{max-width:200px}.max-w-\[320px\]{max-width:320px}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:0}.min-w-\[260px\]{min-width:260px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-help{cursor:help}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-green-200{border-color:var(--color-green-200)}.border-indigo-400\/50{border-color:#7d87ff80}@supports (color:color-mix(in lab,red,red)){.border-indigo-400\/50{border-color:color-mix(in oklab,var(--color-indigo-400) 50%,transparent)}}.border-indigo-500{border-color:var(--color-indigo-500)}.border-indigo-600{border-color:var(--color-indigo-600)}.border-red-200{border-color:var(--color-red-200)}.border-slate-100{border-color:var(--color-slate-100)}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-300{border-color:var(--color-slate-300)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-blue-400{background-color:var(--color-blue-400)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-500{background-color:var(--color-indigo-500)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-500{background-color:var(--color-red-500)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-50\/60{background-color:#f8fafc99}@supports (color:color-mix(in lab,red,red)){.bg-slate-50\/60{background-color:color-mix(in oklab,var(--color-slate-50) 60%,transparent)}}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-300{background-color:var(--color-slate-300)}.bg-slate-400{background-color:var(--color-slate-400)}.bg-slate-900\/40{background-color:#0f172b66}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/40{background-color:color-mix(in oklab,var(--color-slate-900) 40%,transparent)}}.bg-slate-950\/45{background-color:#02061873}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/45{background-color:color-mix(in oklab,var(--color-slate-950) 45%,transparent)}}.bg-white{background-color:var(--color-white)}.bg-white\/90{background-color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.bg-white\/90{background-color:color-mix(in oklab,var(--color-white) 90%,transparent)}}.fill-none{fill:none}.stroke-current{stroke:currentColor}.p-0{padding:0}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.p-12{padding:calc(var(--spacing) * 12)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pb-0\.5{padding-bottom:calc(var(--spacing) * .5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-all{word-break:break-all}.whitespace-normal{white-space:normal}.text-blue-600{color:var(--color-blue-600)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-indigo-500{color:var(--color-indigo-500)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-purple-600{color:var(--color-purple-600)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-800{color:var(--color-slate-800)}.text-slate-900{color:var(--color-slate-900)}.text-white{color:var(--color-white)}.text-yellow-500{color:var(--color-yellow-500)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-slate-900\/10{--tw-shadow-color:#0f172b1a}@supports (color:color-mix(in lab,red,red)){.shadow-slate-900\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-slate-900) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-green-500\/60{--tw-ring-color:#00c75899}@supports (color:color-mix(in lab,red,red)){.ring-green-500\/60{--tw-ring-color:color-mix(in oklab, var(--color-green-500) 60%, transparent)}}.ring-indigo-500{--tw-ring-color:var(--color-indigo-500)}.ring-indigo-500\/25{--tw-ring-color:#625fff40}@supports (color:color-mix(in lab,red,red)){.ring-indigo-500\/25{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 25%, transparent)}}.ring-indigo-500\/60{--tw-ring-color:#625fff99}@supports (color:color-mix(in lab,red,red)){.ring-indigo-500\/60{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 60%, transparent)}}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-\[2px\]{--tw-backdrop-blur:blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.hover\:border-indigo-300:hover{border-color:var(--color-indigo-300)}.hover\:bg-red-100:hover{background-color:var(--color-red-100)}.hover\:bg-slate-50:hover{background-color:var(--color-slate-50)}.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\:bg-slate-200:hover{background-color:var(--color-slate-200)}.hover\:text-indigo-500:hover{color:var(--color-indigo-500)}.hover\:text-indigo-600:hover{color:var(--color-indigo-600)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-slate-900:hover{color:var(--color-slate-900)}}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:block{display:block}.sm\:inline{display:inline}.sm\:h-80{height:calc(var(--spacing) * 80)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-end{align-items:flex-end}.sm\:p-6{padding:calc(var(--spacing) * 6)}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:px-3{padding-inline:calc(var(--spacing) * 3)}.sm\:px-5{padding-inline:calc(var(--spacing) * 5)}.sm\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}}@media(min-width:48rem){.md\:block{display:block}.md\:table-cell{display:table-cell}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(min-width:64rem){.lg\:block{display:block}.lg\:hidden{display:none}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:px-6{padding-inline:calc(var(--spacing) * 6)}.lg\:px-7{padding-inline:calc(var(--spacing) * 7)}.lg\:py-6{padding-block:calc(var(--spacing) * 6)}}@media(min-width:80rem){.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.dark\:border-green-800:where(.dark,.dark *){border-color:var(--color-green-800)}.dark\:border-indigo-500:where(.dark,.dark *){border-color:var(--color-indigo-500)}.dark\:border-red-900:where(.dark,.dark *){border-color:var(--color-red-900)}.dark\:border-slate-600:where(.dark,.dark *){border-color:var(--color-slate-600)}.dark\:border-slate-700:where(.dark,.dark *){border-color:var(--color-slate-700)}.dark\:border-slate-700\/50:where(.dark,.dark *){border-color:#31415880}@supports (color:color-mix(in lab,red,red)){.dark\:border-slate-700\/50:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-slate-700) 50%,transparent)}}.dark\:border-slate-800:where(.dark,.dark *){border-color:var(--color-slate-800)}.dark\:bg-indigo-500:where(.dark,.dark *){background-color:var(--color-indigo-500)}.dark\:bg-indigo-500\/10:where(.dark,.dark *){background-color:#625fff1a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-indigo-500\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-indigo-500) 10%,transparent)}}.dark\:bg-indigo-500\/15:where(.dark,.dark *){background-color:#625fff26}@supports (color:color-mix(in lab,red,red)){.dark\:bg-indigo-500\/15:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-indigo-500) 15%,transparent)}}.dark\:bg-indigo-600:where(.dark,.dark *){background-color:var(--color-indigo-600)}.dark\:bg-red-900\/20:where(.dark,.dark *){background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-red-900) 20%,transparent)}}.dark\:bg-slate-500:where(.dark,.dark *){background-color:var(--color-slate-500)}.dark\:bg-slate-600:where(.dark,.dark *){background-color:var(--color-slate-600)}.dark\:bg-slate-700:where(.dark,.dark *){background-color:var(--color-slate-700)}.dark\:bg-slate-700\/50:where(.dark,.dark *){background-color:#31415880}@supports (color:color-mix(in lab,red,red)){.dark\:bg-slate-700\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-700) 50%,transparent)}}.dark\:bg-slate-700\/70:where(.dark,.dark *){background-color:#314158b3}@supports (color:color-mix(in lab,red,red)){.dark\:bg-slate-700\/70:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-700) 70%,transparent)}}.dark\:bg-slate-800:where(.dark,.dark *){background-color:var(--color-slate-800)}.dark\:bg-slate-800\/50:where(.dark,.dark *){background-color:#1d293d80}@supports (color:color-mix(in lab,red,red)){.dark\:bg-slate-800\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-800) 50%,transparent)}}.dark\:bg-slate-800\/60:where(.dark,.dark *){background-color:#1d293d99}@supports (color:color-mix(in lab,red,red)){.dark\:bg-slate-800\/60:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-800) 60%,transparent)}}.dark\:bg-slate-900:where(.dark,.dark *){background-color:var(--color-slate-900)}.dark\:bg-slate-900\/50:where(.dark,.dark *){background-color:#0f172b80}@supports (color:color-mix(in lab,red,red)){.dark\:bg-slate-900\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-900) 50%,transparent)}}.dark\:bg-slate-900\/90:where(.dark,.dark *){background-color:#0f172be6}@supports (color:color-mix(in lab,red,red)){.dark\:bg-slate-900\/90:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-900) 90%,transparent)}}.dark\:bg-slate-950:where(.dark,.dark *){background-color:var(--color-slate-950)}.dark\:bg-slate-950\/60:where(.dark,.dark *){background-color:#02061899}@supports (color:color-mix(in lab,red,red)){.dark\:bg-slate-950\/60:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-950) 60%,transparent)}}.dark\:text-blue-400:where(.dark,.dark *){color:var(--color-blue-400)}.dark\:text-green-300:where(.dark,.dark *){color:var(--color-green-300)}.dark\:text-green-400:where(.dark,.dark *){color:var(--color-green-400)}.dark\:text-indigo-300:where(.dark,.dark *){color:var(--color-indigo-300)}.dark\:text-indigo-400:where(.dark,.dark *){color:var(--color-indigo-400)}.dark\:text-purple-400:where(.dark,.dark *){color:var(--color-purple-400)}.dark\:text-red-300:where(.dark,.dark *){color:var(--color-red-300)}.dark\:text-red-400:where(.dark,.dark *){color:var(--color-red-400)}.dark\:text-red-500:where(.dark,.dark *){color:var(--color-red-500)}.dark\:text-slate-200:where(.dark,.dark *){color:var(--color-slate-200)}.dark\:text-slate-300:where(.dark,.dark *){color:var(--color-slate-300)}.dark\:text-slate-400:where(.dark,.dark *){color:var(--color-slate-400)}.dark\:text-slate-500:where(.dark,.dark *){color:var(--color-slate-500)}.dark\:text-slate-600:where(.dark,.dark *){color:var(--color-slate-600)}.dark\:text-white:where(.dark,.dark *){color:var(--color-white)}.dark\:text-yellow-300:where(.dark,.dark *){color:var(--color-yellow-300)}.dark\:text-yellow-400:where(.dark,.dark *){color:var(--color-yellow-400)}.dark\:shadow-black\/30:where(.dark,.dark *){--tw-shadow-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.dark\:shadow-black\/30:where(.dark,.dark *){--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 30%, transparent) var(--tw-shadow-alpha), transparent)}}.dark\:ring-indigo-400:where(.dark,.dark *){--tw-ring-color:var(--color-indigo-400)}@media(hover:hover){.dark\:hover\:border-indigo-500:where(.dark,.dark *):hover{border-color:var(--color-indigo-500)}.dark\:hover\:bg-red-900\/40:where(.dark,.dark *):hover{background-color:#82181a66}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-red-900\/40:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-red-900) 40%,transparent)}}.dark\:hover\:bg-slate-700:where(.dark,.dark *):hover{background-color:var(--color-slate-700)}.dark\:hover\:bg-slate-700\/70:where(.dark,.dark *):hover{background-color:#314158b3}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-slate-700\/70:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-slate-700) 70%,transparent)}}.dark\:hover\:bg-slate-800:where(.dark,.dark *):hover{background-color:var(--color-slate-800)}.dark\:hover\:bg-slate-800\/50:where(.dark,.dark *):hover{background-color:#1d293d80}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-slate-800\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-slate-800) 50%,transparent)}}.dark\:hover\:text-indigo-400:where(.dark,.dark *):hover{color:var(--color-indigo-400)}.dark\:hover\:text-white:where(.dark,.dark *):hover{color:var(--color-white)}}}body{background-color:var(--color-slate-50);color:var(--color-slate-700);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body:where(.dark,.dark *){background-color:var(--color-slate-950);color:var(--color-slate-200)}html,body,#app{height:100%;overflow:hidden}.scrollbar-hide::-webkit-scrollbar{display:none}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.custom-scrollbar::-webkit-scrollbar{width:8px;height:8px}.custom-scrollbar::-webkit-scrollbar-track{background:0 0}.custom-scrollbar::-webkit-scrollbar-thumb{background-color:var(--color-slate-300);border-radius:.25rem}.custom-scrollbar::-webkit-scrollbar-thumb:hover{background-color:var(--color-slate-400)}.custom-scrollbar{scrollbar-width:thin;scrollbar-color:var(--color-slate-300) transparent}.dark .custom-scrollbar{scrollbar-color:var(--color-slate-600) transparent}.fade-enter-active,.fade-leave-active{transition:opacity .2s}.fade-enter-from,.fade-leave-to{opacity:0}.card-list-enter-active,.card-list-leave-active{transition:opacity .3s,transform .3s}.card-list-enter-from,.card-list-leave-to{opacity:0;transform:scale(.96)}.modal-enter-active,.modal-leave-active{transition:opacity .2s}.modal-enter-active .modal-panel,.modal-leave-active .modal-panel{transition:transform .2s,opacity .2s}.modal-enter-from,.modal-leave-to{opacity:0}.modal-enter-from .modal-panel,.modal-leave-to .modal-panel{opacity:0;transform:scale(.96)}.toast-enter-active,.toast-leave-active{transition:opacity .25s,transform .25s}.toast-enter-from{opacity:0;transform:translateY(-10px)}.toast-leave-to{opacity:0;transform:translate(20px)}.navdrop-enter-active,.navdrop-leave-active{transition:opacity .2s,transform .2s}.navdrop-enter-from,.navdrop-leave-to{opacity:0;transform:translateY(-6px)}.drawer-enter-active,.drawer-leave-active{transition:opacity .2s}.drawer-enter-active .drawer-panel,.drawer-leave-active .drawer-panel{transition:transform .2s}.drawer-enter-from,.drawer-leave-to{opacity:0}.drawer-enter-from .drawer-panel,.drawer-leave-to .drawer-panel{transform:translate(-100%)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}} diff --git a/vnt-web/static/index.html b/vnt-web/static/index.html index 01cad4f..6f90322 100644 --- a/vnt-web/static/index.html +++ b/vnt-web/static/index.html @@ -19,8 +19,8 @@ if (dark) document.documentElement.classList.add("dark"); })(); - - + +
diff --git a/vnt-web/ui/src/views/PeersView.vue b/vnt-web/ui/src/views/PeersView.vue index b321870..400b45e 100644 --- a/vnt-web/ui/src/views/PeersView.vue +++ b/vnt-web/ui/src/views/PeersView.vue @@ -19,7 +19,7 @@ let lastTrafficMap = {}; let lastFetchTime = 0; // 展开状态和网速历史 const expandedPeers = reactive({}); -const speedHistoryMap = {}; +const speedHistoryMap = reactive({}); const HISTORY_SIZE = 60; const toggleExpand = (ip) => { @@ -112,9 +112,9 @@ const getRouteModeClass = (route) => { // 判断是否直连:metric === 1 const isDirect = route.metric === 1; if (isDirect) { - return "text-purple-600 font-medium dark:text-purple-400"; // 直连 - 紫色 + return "font-medium text-green-600 dark:text-green-400"; } else { - return "text-blue-600 dark:text-blue-400"; // 客户端中继 - 蓝色 + return "text-blue-600 dark:text-blue-400"; } }; @@ -183,7 +183,7 @@ const switcherClass = (fileName) =>
- +
@@ -226,7 +226,7 @@ const switcherClass = (fileName) =>
{{ - peer.online ? "Online" : "Offline" + peer.online ? "在线" : "离线" }}
@@ -316,3 +316,21 @@ const switcherClass = (fileName) =>
+ + diff --git a/vnt-web/ui/src/views/WebAccessView.vue b/vnt-web/ui/src/views/WebAccessView.vue index 617c65d..4221f2c 100644 --- a/vnt-web/ui/src/views/WebAccessView.vue +++ b/vnt-web/ui/src/views/WebAccessView.vue @@ -87,11 +87,6 @@ const updateListenScope = async (value) => { await saveNetworkSettings(); }; -const copyToken = async () => { - await navigator.clipboard.writeText(draft.token); - notice.value = "访问令牌已复制"; -}; - const copyUrl = async () => { await navigator.clipboard.writeText(status.value.url); notice.value = "访问地址已复制"; @@ -120,7 +115,6 @@ onMounted(load);

启用 Web 服务

-

服务内置于桌面客户端,不会启动单独的 vnt2_web 进程。

-
- {{ draft.token }} - -
+ {{ draft.token }}

更换令牌后,已登录的浏览器需要使用新令牌重新鉴权。