vendor: 82,671 bytes, lines 1-3
1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./5wPEOH3O.js","./CbRiTwk7.js","./MarketingInstallSignup.CJ_vntlt.css","./DlpZVe3l.js","./CA1mzkxz.js","./DKPx6ygt.js","./ProductShot.COOhyZp6.css","./Bh5P54qs.js","./MarketingBuyingPaths.0OeAaFaZ.css","./CoOz7Tex.js","./DSJv3tj1.js","./MarketingShell.B6ETGuwy.css","./CXrURUDB.js","./index.Dkpjdav_.css","./Bjc4h941.js","./DB-Qoxcv.js","./BjPbrmO9.js","./DoU4Hje7.js","./MarketingChangelogPage.qAJLIwdS.css","./Ce-IScT0.js","./request-human.DvmGMJCI.css","./fae0-Gm1.js","./n6n99HxY.js","./AfterTheyShipShareLinks.CeIGzxS4.css","./_slug_.DtmpCGPd.css","./fD6o0Dha.js","./_slug_.Th15kqYn.css"])))=>i.map(i=>d[i]); 2(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))o(s);new MutationObserver(s=>{for(const r of s)if(r.type==="childList")for(const i of r.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&o(i)}).observe(document,{childList:!0,subtree:!0});function n(s){const r={};return s.integrity&&(r.integrity=s.integrity),s.referrerPolicy&&(r.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?r.credentials="include":s.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function o(s){if(s.ep)return;s.ep=!0;const r=n(s);fetch(s.href,r)}})();function Li(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ve={},Xn=[],Mt=()=>{},qf=()=>!1,Ko=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ri=e=>e.startsWith("onUpdate:"),Ge=Object.assign,Oi=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Yf=Object.prototype.hasOwnProperty,ge=(e,t)=>Yf.call(e,t),Z=Array.isArray,Jn=e=>qo(e)==="[object Map]",Lc=e=>qo(e)==="[object Set]",Xf=e=>qo(e)==="[object RegExp]",oe=e=>typeof e=="function",Te=e=>typeof e=="string",en=e=>typeof e=="symbol",Se=e=>e!==null&&typeof e=="object",Di=e=>(Se(e)||oe(e))&&oe(e.then)&&oe(e.catch),Rc=Object.prototype.toString,qo=e=>Rc.call(e),Jf=e=>qo(e).slice(8,-1),Oc=e=>qo(e)==="[object Object]",Ni=e=>Te(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Qn=Li(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Fs=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Qf=/-(\w)/g,_t=Fs(e=>e.replace(Qf,(t,n)=>n?n.toUpperCase():"")),zf=/\B([A-Z])/g,vn=Fs(e=>e.replace(zf,"-$1").toLowerCase()),Us=Fs(e=>e.charAt(0).toUpperCase()+e.slice(1)),sr=Fs(e=>e?`on${Us(e)}`:""),fn=(e,t)=>!Object.is(e,t),zn=(e,...t)=>{for(let n=0;n<e.length;n++)e[n](...t)},Dc=(e,t,n,o=!1)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:o,value:n})},Fr=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Nc=e=>{const t=Te(e)?Number(e):NaN;return isNaN(t)?e:t};let _a;const Hs=()=>_a||(_a=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function xi(e){if(Z(e)){const t={};for(let n=0;n<e.length;n++){const o=e[n],s=Te(o)?np(o):xi(o);if(s)for(const r in s)t[r]=s[r]}return t}else if(Te(e)||Se(e))return e}const Zf=/;(?![^(]*\))/g,ep=/:([^]+)/,tp=/\/\*[^]*?\*\//g;function np(e){const t={};return e.replace(tp,"").split(Zf).forEach(n=>{if(n){const o=n.split(ep);o.length>1&&(t[o[0].trim()]=o[1].trim())}}),t}function Mi(e){let t="";if(Te(e))t=e;else if(Z(e))for(let n=0;n<e.length;n++){const o=Mi(e[n]);o&&(t+=o+" ")}else if(Se(e))for(const n in e)e[n]&&(t+=n+" ");return t.trim()}const op="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",sp=Li(op);function xc(e){return!!e||e===""}const Mc=e=>!!(e&&e.__v_isRef===!0),fs=e=>Te(e)?e:e==null?"":Z(e)||Se(e)&&(e.toString===Rc||!oe(e.toString))?Mc(e)?fs(e.value):JSON.stringify(e,Fc,2):String(e),Fc=(e,t)=>Mc(t)?Fc(e,t.value):Jn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[o,s],r)=>(n[rr(o,r)+" =>"]=s,n),{})}:Lc(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>rr(n))}:en(t)?rr(t):Se(t)&&!Z(t)&&!Oc(t)?String(t):t,rr=(e,t="")=>{var n;return en(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};let Xe;class Uc{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=Xe,!t&&Xe&&(this.index=(Xe.scopes||(Xe.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].pause();for(t=0,n=this.effects.length;t<n;t++)this.effects[t].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].resume();for(t=0,n=this.effects.length;t<n;t++)this.effects[t].resume()}}run(t){if(this._active){const n=Xe;try{return Xe=this,t()}finally{Xe=n}}}on(){++this._on===1&&(this.prevScope=Xe,Xe=this)}off(){this._on>0&&--this._on===0&&(Xe=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,o;for(n=0,o=this.effects.length;n<o;n++)this.effects[n].stop();for(this.effects.length=0,n=0,o=this.cleanups.length;n<o;n++)this.cleanups[n]();if(this.cleanups.length=0,this.scopes){for(n=0,o=this.scopes.length;n<o;n++)this.scopes[n].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!t){const s=this.parent.scopes.pop();s&&s!==this&&(this.parent.scopes[this.index]=s,s.index=this.index)}this.parent=void 0}}}function Hc(e){return new Uc(e)}function Yo(){return Xe}function rp(e,t=!1){Xe&&Xe.cleanups.push(e)}let be;const ir=new WeakSet;class $c{constructor(t){this.fn=t,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,Xe&&Xe.active&&Xe.effects.push(this)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,ir.has(this)&&(ir.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||Wc(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,ka(this),Vc(this);const t=be,n=Pt;be=this,Pt=!0;try{return this.fn()}finally{jc(this),be=t,Pt=n,this.flags&=-3}}stop(){if(this.flags&1){for(let t=this.deps;t;t=t.nextDep)Hi(t);this.deps=this.depsTail=void 0,ka(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?ir.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){Ur(this)&&this.run()}get dirty(){return Ur(this)}}let Bc=0,Eo,Co;function Wc(e,t=!1){if(e.flags|=8,t){e.next=Co,Co=e;return}e.next=Eo,Eo=e}function Fi(){Bc++}function Ui(){if(--Bc>0)return;if(Co){let t=Co;for(Co=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Eo;){let t=Eo;for(Eo=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(o){e||(e=o)}t=n}}if(e)throw e}function Vc(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function jc(e){let t,n=e.depsTail,o=n;for(;o;){const s=o.prevDep;o.version===-1?(o===n&&(n=s),Hi(o),ip(o)):t=o,o.dep.activeLink=o.prevActiveLink,o.prevActiveLink=void 0,o=s}e.deps=t,e.depsTail=n}function Ur(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Gc(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Gc(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Oo)||(e.globalVersion=Oo,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Ur(e))))return;e.flags|=2;const t=e.dep,n=be,o=Pt;be=e,Pt=!0;try{Vc(e);const s=e.fn(e._value);(t.version===0||fn(s,e._value))&&(e.flags|=128,e._value=s,t.version++)}catch(s){throw t.version++,s}finally{be=n,Pt=o,jc(e),e.flags&=-3}}function Hi(e,t=!1){const{dep:n,prevSub:o,nextSub:s}=e;if(o&&(o.nextSub=s,e.prevSub=void 0),s&&(s.prevSub=o,e.nextSub=void 0),n.subs===e&&(n.subs=o,!o&&n.computed)){n.computed.flags&=-5;for(let r=n.computed.deps;r;r=r.nextDep)Hi(r,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function ip(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Pt=!0;const Kc=[];function Qt(){Kc.push(Pt),Pt=!1}function zt(){const e=Kc.pop();Pt=e===void 0?!0:e}function ka(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=be;be=void 0;try{t()}finally{be=n}}}let Oo=0;class ap{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class $i{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}track(t){if(!be||!Pt||be===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==be)n=this.activeLink=new ap(be,this),be.deps?(n.prevDep=be.depsTail,be.depsTail.nextDep=n,be.depsTail=n):be.deps=be.depsTail=n,qc(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const o=n.nextDep;o.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=o),n.prevDep=be.depsTail,n.nextDep=void 0,be.depsTail.nextDep=n,be.depsTail=n,be.deps===n&&(be.deps=o)}return n}trigger(t){this.version++,Oo++,this.notify(t)}notify(t){Fi();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Ui()}}}function qc(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let o=t.deps;o;o=o.nextDep)qc(o)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const ys=new WeakMap,On=Symbol(""),Hr=Symbol(""),Do=Symbol("");function Je(e,t,n){if(Pt&&be){let o=ys.get(e);o||ys.set(e,o=new Map);let s=o.get(n);s||(o.set(n,s=new $i),s.map=o,s.key=n),s.track()}}function Gt(e,t,n,o,s,r){const i=ys.get(e);if(!i){Oo++;return}const a=l=>{l&&l.trigger()};if(Fi(),t==="clear")i.forEach(a);else{const l=Z(e),u=l&&Ni(n);if(l&&n==="length"){const c=Number(o);i.forEach((d,p)=>{(p==="length"||p===Do||!en(p)&&p>=c)&&a(d)})}else switch((n!==void 0||i.has(void 0))&&a(i.get(n)),u&&a(i.get(Do)),t){case"add":l?u&&a(i.get("length")):(a(i.get(On)),Jn(e)&&a(i.get(Hr)));break;case"delete":l||(a(i.get(On)),Jn(e)&&a(i.get(Hr)));break;case"set":Jn(e)&&a(i.get(On));break}}Ui()}function lp(e,t){const n=ys.get(e);return n&&n.get(t)}function Bn(e){const t=de(e);return t===e?t:(Je(t,"iterate",Do),bt(e)?t:t.map(qe))}function $s(e){return Je(e=de(e),"iterate",Do),e}const cp={__proto__:null,[Symbol.iterator](){return ar(this,Symbol.iterator,qe)},concat(...e){return Bn(this).concat(...e.map(t=>Z(t)?Bn(t):t))},entries(){return ar(this,"entries",e=>(e[1]=qe(e[1]),e))},every(e,t){return Ut(this,"every",e,t,void 0,arguments)},filter(e,t){return Ut(this,"filter",e,t,n=>n.map(qe),arguments)},find(e,t){return Ut(this,"find",e,t,qe,arguments)},findIndex(e,t){return Ut(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ut(this,"findLast",e,t,qe,arguments)},findLastIndex(e,t){return Ut(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ut(this,"forEach",e,t,void 0,arguments)},includes(...e){return lr(this,"includes",e)},indexOf(...e){return lr(this,"indexOf",e)},join(e){return Bn(this).join(e)},lastIndexOf(...e){return lr(this,"lastIndexOf",e)},map(e,t){return Ut(this,"map",e,t,void 0,arguments)},pop(){return go(this,"pop")},push(...e){return go(this,"push",e)},reduce(e,...t){return Sa(this,"reduce",e,t)},reduceRight(e,...t){return Sa(this,"reduceRight",e,t)},shift(){return go(this,"shift")},some(e,t){return Ut(this,"some",e,t,void 0,arguments)},splice(...e){return go(this,"splice",e)},toReversed(){return Bn(this).toReversed()},toSorted(e){return Bn(this).toSorted(e)},toSpliced(...e){return Bn(this).toSpliced(...e)},unshift(...e){return go(this,"unshift",e)},values(){return ar(this,"values",qe)}};function ar(e,t,n){const o=$s(e),s=o[t]();return o!==e&&!bt(e)&&(s._next=s.next,s.next=()=>{const r=s._next();return r.value&&(r.value=n(r.value)),r}),s}const up=Array.prototype;function Ut(e,t,n,o,s,r){const i=$s(e),a=i!==e&&!bt(e),l=i[t];if(l!==up[t]){const d=l.apply(e,r);return a?qe(d):d}let u=n;i!==e&&(a?u=function(d,p){return n.call(this,qe(d),p,e)}:n.length>2&&(u=function(d,p){return n.call(this,d,p,e)}));const c=l.call(i,u,o);return a&&s?s(c):c}function Sa(e,t,n,o){const s=$s(e);let r=n;return s!==e&&(bt(e)?n.length>3&&(r=function(i,a,l){return n.call(this,i,a,l,e)}):r=function(i,a,l){return n.call(this,i,qe(a),l,e)}),s[t](r,...o)}function lr(e,t,n){const o=de(e);Je(o,"iterate",Do);const s=o[t](...n);return(s===-1||s===!1)&&Vi(n[0])?(n[0]=de(n[0]),o[t](...n)):s}function go(e,t,n=[]){Qt(),Fi();const o=de(e)[t].apply(e,n);return Ui(),zt(),o}const dp=Li("__proto__,__v_isRef,__isVue"),Yc=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(en));function fp(e){en(e)||(e=String(e));const t=de(this);return Je(t,"has",e),t.hasOwnProperty(e)}class Xc{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,o){if(n==="__v_skip")return t.__v_skip;const s=this._isReadonly,r=this._isShallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return r;if(n==="__v_raw")return o===(s?r?kp:Zc:r?zc:Qc).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(o)?t:void 0;const i=Z(t);if(!s){let l;if(i&&(l=cp[n]))return l;if(n==="hasOwnProperty")return fp}const a=Reflect.get(t,n,xe(t)?t:o);return(en(n)?Yc.has(n):dp(n))||(s||Je(t,"get",n),r)?a:xe(a)?i&&Ni(n)?a:a.value:Se(a)?s?eu(a):bn(a):a}}class Jc extends Xc{constructor(t=!1){super(!1,t)}set(t,n,o,s){let r=t[n];if(!this._isShallow){const l=Zt(r);if(!bt(o)&&!Zt(o)&&(r=de(r),o=de(o)),!Z(t)&&xe(r)&&!xe(o))return l?!1:(r.value=o,!0)}const i=Z(t)&&Ni(n)?Number(n)<t.length:ge(t,n),a=Reflect.set(t,n,o,xe(t)?t:s);return t===de(s)&&(i?fn(o,r)&&Gt(t,"set",n,o):Gt(t,"add",n,o)),a}deleteProperty(t,n){const o=ge(t,n);t[n];const s=Reflect.deleteProperty(t,n);return s&&o&&Gt(t,"delete",n,void 0),s}has(t,n){const o=Reflect.has(t,n);return(!en(n)||!Yc.has(n))&&Je(t,"has",n),o}ownKeys(t){return Je(t,"iterate",Z(t)?"length":On),Reflect.ownKeys(t)}}class pp extends Xc{constructor(t=!1){super(!0,t)}set(t,n){return!0}deleteProperty(t,n){return!0}}const hp=new Jc,mp=new pp,gp=new Jc(!0);const $r=e=>e,zo=e=>Reflect.getPrototypeOf(e);function yp(e,t,n){return function(...o){const s=this.__v_raw,r=de(s),i=Jn(r),a=e==="entries"||e===Symbol.iterator&&i,l=e==="keys"&&i,u=s[e](...o),c=n?$r:t?vs:qe;return!t&&Je(r,"iterate",l?Hr:On),{next(){const{value:d,done:p}=u.next();return p?{value:d,done:p}:{value:a?[c(d[0]),c(d[1])]:c(d),done:p}},[Symbol.iterator](){return this}}}}function Zo(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function vp(e,t){const n={get(s){const r=this.__v_raw,i=de(r),a=de(s);e||(fn(s,a)&&Je(i,"get",s),Je(i,"get",a));const{has:l}=zo(i),u=t?$r:e?vs:qe;if(l.call(i,s))return u(r.get(s));if(l.call(i,a))return u(r.get(a));r!==i&&r.get(s)},get size(){const s=this.__v_raw;return!e&&Je(de(s),"iterate",On),Reflect.get(s,"size",s)},has(s){const r=this.__v_raw,i=de(r),a=de(s);return e||(fn(s,a)&&Je(i,"has",s),Je(i,"has",a)),s===a?r.has(s):r.has(s)||r.has(a)},forEach(s,r){const i=this,a=i.__v_raw,l=de(a),u=t?$r:e?vs:qe;return!e&&Je(l,"iterate",On),a.forEach((c,d)=>s.call(r,u(c),u(d),i))}};return Ge(n,e?{add:Zo("add"),set:Zo("set"),delete:Zo("delete"),clear:Zo("clear")}:{add(s){!t&&!bt(s)&&!Zt(s)&&(s=de(s));const r=de(this);return zo(r).has.call(r,s)||(r.add(s),Gt(r,"add",s,s)),this},set(s,r){!t&&!bt(r)&&!Zt(r)&&(r=de(r));const i=de(this),{has:a,get:l}=zo(i);let u=a.call(i,s);u||(s=de(s),u=a.call(i,s));const c=l.call(i,s);return i.set(s,r),u?fn(r,c)&&Gt(i,"set",s,r):Gt(i,"add",s,r),this},delete(s){const r=de(this),{has:i,get:a}=zo(r);let l=i.call(r,s);l||(s=de(s),l=i.call(r,s)),a&&a.call(r,s);const u=r.delete(s);return l&&Gt(r,"delete",s,void 0),u},clear(){const s=de(this),r=s.size!==0,i=s.clear();return r&&Gt(s,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(s=>{n[s]=yp(s,e,t)}),n}function Bi(e,t){const n=vp(e,t);return(o,s,r)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?o:Reflect.get(ge(n,s)&&s in o?n:o,s,r)}const bp={get:Bi(!1,!1)},wp={get:Bi(!1,!0)},_p={get:Bi(!0,!1)};const Qc=new WeakMap,zc=new WeakMap,Zc=new WeakMap,kp=new WeakMap;function Sp(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Ep(e){return e.__v_skip||!Object.isExtensible(e)?0:Sp(Jf(e))}function bn(e){return Zt(e)?e:Wi(e,!1,hp,bp,Qc)}function Nt(e){return Wi(e,!1,gp,wp,zc)}function eu(e){return Wi(e,!0,mp,_p,Zc)}function Wi(e,t,n,o,s){if(!Se(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const r=Ep(e);if(r===0)return e;const i=s.get(e);if(i)return i;const a=new Proxy(e,r===2?o:n);return s.set(e,a),a}function Dn(e){return Zt(e)?Dn(e.__v_raw):!!(e&&e.__v_isReactive)}function Zt(e){return!!(e&&e.__v_isReadonly)}function bt(e){return!!(e&&e.__v_isShallow)}function Vi(e){return e?!!e.__v_raw:!1}function de(e){const t=e&&e.__v_raw;return t?de(t):e}function Cp(e){return!ge(e,"__v_skip")&&Object.isExtensible(e)&&Dc(e,"__v_skip",!0),e}const qe=e=>Se(e)?bn(e):e,vs=e=>Se(e)?eu(e):e;function xe(e){return e?e.__v_isRef===!0:!1}function Qe(e){return tu(e,!1)}function kt(e){return tu(e,!0)}function tu(e,t){return xe(e)?e:new Tp(e,t)}class Tp{constructor(t,n){this.dep=new $i,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:de(t),this._value=n?t:qe(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,o=this.__v_isShallow||bt(t)||Zt(t);t=o?t:de(t),fn(t,n)&&(this._rawValue=t,this._value=o?t:qe(t),this.dep.trigger())}}function ce(e){return xe(e)?e.value:e}function Ap(e){return oe(e)?e():ce(e)}const Pp={get:(e,t,n)=>t==="__v_raw"?e:ce(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const s=e[t];return xe(s)&&!xe(n)?(s.value=n,!0):Reflect.set(e,t,n,o)}};function nu(e){return Dn(e)?e:new Proxy(e,Pp)}class Ip{constructor(t,n,o){this._object=t,this._key=n,this._defaultValue=o,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return lp(de(this._object),this._key)}}class Lp{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Rp(e,t,n){return xe(e)?e:oe(e)?new Lp(e):Se(e)&&arguments.length>1?Op(e,t,n):Qe(e)}function Op(e,t,n){const o=e[t];return xe(o)?o:new Ip(e,t,n)}class Dp{constructor(t,n,o){this.fn=t,this.setter=n,this._value=void 0,this.dep=new $i(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Oo-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=o}notify(){if(this.flags|=16,!(this.flags&8)&&be!==this)return Wc(this,!0),!0}get value(){const t=this.dep.track();return Gc(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Np(e,t,n=!1){let o,s;return oe(e)?o=e:(o=e.get,s=e.set),new Dp(o,s,n)}const es={},bs=new WeakMap;let In;function xp(e,t=!1,n=In){if(n){let o=bs.get(n);o||bs.set(n,o=[]),o.push(e)}}function Mp(e,t,n=ve){const{immediate:o,deep:s,once:r,scheduler:i,augmentJob:a,call:l}=n,u=m=>s?m:bt(m)||s===!1||s===0?Kt(m,1):Kt(m);let c,d,p,f,b=!1,_=!1;if(xe(e)?(d=()=>e.value,b=bt(e)):Dn(e)?(d=()=>u(e),b=!0):Z(e)?(_=!0,b=e.some(m=>Dn(m)||bt(m)),d=()=>e.map(m=>{if(xe(m))return m.value;if(Dn(m))return u(m);if(oe(m))return l?l(m,2):m()})):oe(e)?t?d=l?()=>l(e,2):e:d=()=>{if(p){Qt();try{p()}finally{zt()}}const m=In;In=c;try{return l?l(e,3,[f]):e(f)}finally{In=m}}:d=Mt,t&&s){const m=d,k=s===!0?1/0:s;d=()=>Kt(m(),k)}const A=Yo(),E=()=>{c.stop(),A&&A.active&&Oi(A.effects,c)};if(r&&t){const m=t;t=(...k)=>{m(...k),E()}}let C=_?new Array(e.length).fill(es):es;const h=m=>{if(!(!(c.flags&1)||!c.dirty&&!m))if(t){const k=c.run();if(s||b||(_?k.some((S,L)=>fn(S,C[L])):fn(k,C))){p&&p();const S=In;In=c;try{const L=[k,C===es?void 0:_&&C[0]===es?[]:C,f];l?l(t,3,L):t(...L),C=k}finally{In=S}}}else c.run()};return a&&a(h),c=new $c(d),c.scheduler=i?()=>i(h,!1):h,f=m=>xp(m,!1,c),p=c.onStop=()=>{const m=bs.get(c);if(m){if(l)l(m,4);else for(const k of m)k();bs.delete(c)}},t?o?h(!0):C=c.run():i?i(h.bind(null,!0),!0):c.run(),E.pause=c.pause.bind(c),E.resume=c.resume.bind(c),E.stop=E,E}function Kt(e,t=1/0,n){if(t<=0||!Se(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,xe(e))Kt(e.value,t,n);else if(Z(e))for(let o=0;o<e.length;o++)Kt(e[o],t,n);else if(Lc(e)||Jn(e))e.forEach(o=>{Kt(o,t,n)});else if(Oc(e)){for(const o in e)Kt(e[o],t,n);for(const o of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,o)&&Kt(e[o],t,n)}return e}function Xo(e,t,n,o){try{return o?e(...o):e()}catch(s){uo(s,t,n)}}function It(e,t,n,o){if(oe(e)){const s=Xo(e,t,n,o);return s&&Di(s)&&s.catch(r=>{uo(r,t,n)}),s}if(Z(e)){const s=[];for(let r=0;r<e.length;r++)s.push(It(e[r],t,n,o));return s}}function uo(e,t,n,o=!0){const s=t?t.vnode:null,{errorHandler:r,throwUnhandledErrorInProduction:i}=t&&t.appContext.config||ve;if(t){let a=t.parent;const l=t.proxy,u=`https://vuejs.org/error-reference/#runtime-${n}`;for(;a;){const c=a.ec;if(c){for(let d=0;d<c.length;d++)if(c[d](e,l,u)===!1)return}a=a.parent}if(r){Qt(),Xo(r,null,10,[e,l,u]),zt();return}}Fp(e,n,s,o,i)}function Fp(e,t,n,o=!0,s=!1){if(s)throw e;console.error(e)}const nt=[];let Ot=-1;const Zn=[];let rn=null,Vn=0;const ou=Promise.resolve();let ws=null;function no(e){const t=ws||ou;return e?t.then(this?e.bind(this):e):t}function Up(e){let t=Ot+1,n=nt.length;for(;t<n;){const o=t+n>>>1,s=nt[o],r=No(s);r<e||r===e&&s.flags&2?t=o+1:n=o}return t}function ji(e){if(!(e.flags&1)){const t=No(e),n=nt[nt.length-1];!n||!(e.flags&2)&&t>=No(n)?nt.push(e):nt.splice(Up(t),0,e),e.flags|=1,su()}}function su(){ws||(ws=ou.then(ru))}function Br(e){Z(e)?Zn.push(...e):rn&&e.id===-1?rn.splice(Vn+1,0,e):e.flags&1||(Zn.push(e),e.flags|=1),su()}function Ea(e,t,n=Ot+1){for(;n<nt.length;n++){const o=nt[n];if(o&&o.flags&2){if(e&&o.id!==e.uid)continue;nt.splice(n,1),n--,o.flags&4&&(o.flags&=-2),o(),o.flags&4||(o.flags&=-2)}}}function _s(e){if(Zn.length){const t=[...new Set(Zn)].sort((n,o)=>No(n)-No(o));if(Zn.length=0,rn){rn.push(...t);return}for(rn=t,Vn=0;Vn<rn.length;Vn++){const n=rn[Vn];n.flags&4&&(n.flags&=-2),n.flags&8||n(),n.flags&=-2}rn=null,Vn=0}}const No=e=>e.id==null?e.flags&2?-1:1/0:e.id;function ru(e){try{for(Ot=0;Ot<nt.length;Ot++){const t=nt[Ot];t&&!(t.flags&8)&&(t.flags&4&&(t.flags&=-2),Xo(t,t.i,t.i?15:14),t.flags&4||(t.flags&=-2))}}finally{for(;Ot<nt.length;Ot++){const t=nt[Ot];t&&(t.flags&=-2)}Ot=-1,nt.length=0,_s(),ws=null,(nt.length||Zn.length)&&ru()}}let Ue=null,iu=null;function ks(e){const t=Ue;return Ue=e,iu=e&&e.type.__scopeId||null,t}function Bs(e,t=Ue,n){if(!t||e._n)return e;const o=(...s)=>{o._d&&Fa(-1);const r=ks(t);let i;try{i=e(...s)}finally{ks(r),o._d&&Fa(1)}return i};return o._n=!0,o._c=!0,o._d=!0,o}function fS(e,t){if(Ue===null)return e;const n=Ks(Ue),o=e.dirs||(e.dirs=[]);for(let s=0;s<t.length;s++){let[r,i,a,l=ve]=t[s];r&&(oe(r)&&(r={mounted:r,updated:r}),r.deep&&Kt(i),o.push({dir:r,instance:n,value:i,oldValue:void 0,arg:a,modifiers:l}))}return e}function Dt(e,t,n,o){const s=e.dirs,r=t&&t.dirs;for(let i=0;i<s.length;i++){const a=s[i];r&&(a.oldValue=r[i].value);let l=a.dir[o];l&&(Qt(),It(l,n,8,[e.el,a,e,t]),zt())}}const Hp=Symbol("_vte"),au=e=>e.__isTeleport,an=Symbol("_leaveCb"),ts=Symbol("_enterCb");function $p(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Mn(()=>{e.isMounted=!0}),fo(()=>{e.isUnmounting=!0}),e}const mt=[Function,Array],lu={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:mt,onEnter:mt,onAfterEnter:mt,onEnterCancelled:mt,onBeforeLeave:mt,onLeave:mt,onAfterLeave:mt,onLeaveCancelled:mt,onBeforeAppear:mt,onAppear:mt,onAfterAppear:mt,onAppearCancelled:mt},cu=e=>{const t=e.subTree;return t.component?cu(t.component):t},Bp={name:"BaseTransition",props:lu,setup(e,{slots:t}){const n=pt(),o=$p();return()=>{const s=t.default&&fu(t.default(),!0);if(!s||!s.length)return;const r=uu(s),i=de(e),{mode:a}=i;if(o.isLeaving)return cr(r);const l=Ca(r);if(!l)return cr(r);let u=Wr(l,i,o,n,d=>u=d);l.type!==Ne&&oo(l,u);let c=n.subTree&&Ca(n.subTree);if(c&&c.type!==Ne&&!Ct(l,c)&&cu(n).type!==Ne){let d=Wr(c,i,o,n);if(oo(c,d),a==="out-in"&&l.type!==Ne)return o.isLeaving=!0,d.afterLeave=()=>{o.isLeaving=!1,n.job.flags&8||n.update(),delete d.afterLeave,c=void 0},cr(r);a==="in-out"&&l.type!==Ne?d.delayLeave=(p,f,b)=>{const _=du(o,c);_[String(c.key)]=c,p[an]=()=>{f(),p[an]=void 0,delete u.delayedLeave,c=void 0},u.delayedLeave=()=>{b(),delete u.delayedLeave,c=void 0}}:c=void 0}else c&&(c=void 0);return r}}};function uu(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==Ne){t=n;break}}return t}const Wp=Bp;function du(e,t){const{leavingVNodes:n}=e;let o=n.get(t.type);return o||(o=Object.create(null),n.set(t.type,o)),o}function Wr(e,t,n,o,s){const{appear:r,mode:i,persisted:a=!1,onBeforeEnter:l,onEnter:u,onAfterEnter:c,onEnterCancelled:d,onBeforeLeave:p,onLeave:f,onAfterLeave:b,onLeaveCancelled:_,onBeforeAppear:A,onAppear:E,onAfterAppear:C,onAppearCancelled:h}=t,m=String(e.key),k=du(n,e),S=(I,M)=>{I&&It(I,o,9,M)},L=(I,M)=>{const K=M[1];S(I,M),Z(I)?I.every(N=>N.length<=1)&&K():I.length<=1&&K()},O={mode:i,persisted:a,beforeEnter(I){let M=l;if(!n.isMounted)if(r)M=A||l;else return;I[an]&&I[an](!0);const K=k[m];K&&Ct(e,K)&&K.el[an]&&K.el[an](),S(M,[I])},enter(I){let M=u,K=c,N=d;if(!n.isMounted)if(r)M=E||u,K=C||c,N=h||d;else return;let V=!1;const se=I[ts]=ae=>{V||(V=!0,ae?S(N,[I]):S(K,[I]),O.delayedLeave&&O.delayedLeave(),I[ts]=void 0)};M?L(M,[I,se]):se()},leave(I,M){const K=String(e.key);if(I[ts]&&I[ts](!0),n.isUnmounting)return M();S(p,[I]);let N=!1;const V=I[an]=se=>{N||(N=!0,M(),se?S(_,[I]):S(b,[I]),I[an]=void 0,k[K]===e&&delete k[K])};k[K]=e,f?L(f,[I,V]):V()},clone(I){const M=Wr(I,t,n,o,s);return s&&s(M),M}};return O}function cr(e){if(Jo(e))return e=wt(e),e.children=null,e}function Ca(e){if(!Jo(e))return au(e.type)&&e.children?uu(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&oe(n.default))return n.default()}}function oo(e,t){e.shapeFlag&6&&e.component?(e.transition=t,oo(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function fu(e,t=!1,n){let o=[],s=0;for(let r=0;r<e.length;r++){let i=e[r];const a=n==null?i.key:String(n)+String(i.key!=null?i.key:r);i.type===Ve?(i.patchFlag&128&&s++,o=o.concat(fu(i.children,t,a))):(t||i.type!==Ne)&&o.push(a!=null?wt(i,{key:a}):i)}if(s>1)for(let r=0;r<o.length;r++)o[r].patchFlag=-2;return o}function lt(e,t){return oe(e)?Ge({name:e.name},t,{setup:e}):e}function Gi(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function xo(e,t,n,o,s=!1){if(Z(e)){e.forEach((b,_)=>xo(b,t&&(Z(t)?t[_]:t),n,o,s));return}if(pn(o)&&!s){o.shapeFlag&512&&o.type.__asyncResolved&&o.component.subTree.component&&xo(e,t,n,o.component.subTree);return}const r=o.shapeFlag&4?Ks(o.component):o.el,i=s?null:r,{i:a,r:l}=e,u=t&&t.r,c=a.refs===ve?a.refs={}:a.refs,d=a.setupState,p=de(d),f=d===ve?()=>!1:b=>ge(p,b);if(u!=null&&u!==l&&(Te(u)?(c[u]=null,f(u)&&(d[u]=null)):xe(u)&&(u.value=null)),oe(l))Xo(l,a,12,[i,c]);else{const b=Te(l),_=xe(l);if(b||_){const A=()=>{if(e.f){const E=b?f(l)?d[l]:c[l]:l.value;s?Z(E)&&Oi(E,r):Z(E)?E.includes(r)||E.push(r):b?(c[l]=[r],f(l)&&(d[l]=c[l])):(l.value=[r],e.k&&(c[e.k]=l.value))}else b?(c[l]=i,f(l)&&(d[l]=i)):_&&(l.value=i,e.k&&(c[e.k]=i))};i?(A.id=-1,Ke(A,n)):A()}}}let Ta=!1;const Wn=()=>{Ta||(console.error("Hydration completed but contains mismatches."),Ta=!0)},Vp=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",jp=e=>e.namespaceURI.includes("MathML"),ns=e=>{if(e.nodeType===1){if(Vp(e))return"svg";if(jp(e))return"mathml"}},qn=e=>e.nodeType===8;function Gp(e){const{mt:t,p:n,o:{patchProp:o,createText:s,nextSibling:r,parentNode:i,remove:a,insert:l,createComment:u}}=e,c=(h,m)=>{if(!m.hasChildNodes()){n(null,h,m),_s(),m._vnode=h;return}d(m.firstChild,h,null,null,null),_s(),m._vnode=h},d=(h,m,k,S,L,O=!1)=>{O=O||!!m.dynamicChildren;const I=qn(h)&&h.data==="[",M=()=>_(h,m,k,S,L,I),{type:K,ref:N,shapeFlag:V,patchFlag:se}=m;let ae=h.nodeType;m.el=h,se===-2&&(O=!1,m.dynamicChildren=null);let Y=null;switch(K){case mn:ae!==3?m.children===""?(l(m.el=s(""),i(h),h),Y=h):Y=M():(h.data!==m.children&&(Wn(),h.data=m.children),Y=r(h));break;case Ne:C(h)?(Y=r(h),E(m.el=h.content.firstChild,h,k)):ae!==8||I?Y=M():Y=r(h);break;case Ao:if(I&&(h=r(h),ae=h.nodeType),ae===1||ae===3){Y=h;const te=!m.children.length;for(let J=0;J<m.staticCount;J++)te&&(m.children+=Y.nodeType===1?Y.outerHTML:Y.data),J===m.staticCount-1&&(m.anchor=Y),Y=r(Y);return I?r(Y):Y}else M();break;case Ve:I?Y=b(h,m,k,S,L,O):Y=M();break;default:if(V&1)(ae!==1||m.type.toLowerCase()!==h.tagName.toLowerCase())&&!C(h)?Y=M():Y=p(h,m,k,S,L,O);else if(V&6){m.slotScopeIds=L;const te=i(h);if(I?Y=A(h):qn(h)&&h.data==="teleport start"?Y=A(h,h.data,"teleport end"):Y=r(h),t(m,te,null,k,S,ns(te),O),pn(m)&&!m.type.__asyncResolved){let J;I?(J=_e(Ve),J.anchor=Y?Y.previousSibling:te.lastChild):J=h.nodeType===3?Qi(""):_e("div"),J.el=h,m.component.subTree=J}}else V&64?ae!==8?Y=M():Y=m.type.hydrate(h,m,k,S,L,O,e,f):V&128&&(Y=m.type.hydrate(h,m,k,S,ns(i(h)),L,O,e,d))}return N!=null&&xo(N,null,S,m),Y},p=(h,m,k,S,L,O)=>{O=O||!!m.dynamicChildren;const{type:I,props:M,patchFlag:K,shapeFlag:N,dirs:V,transition:se}=m,ae=I==="input"||I==="option";if(ae||K!==-1){V&&Dt(m,null,k,"created");let Y=!1;if(C(h)){Y=xu(null,se)&&k&&k.vnode.props&&k.vnode.props.appear;const J=h.content.firstChild;Y&&se.beforeEnter(J),E(J,h,k),m.el=h=J}if(N&16&&!(M&&(M.innerHTML||M.textContent))){let J=f(h.firstChild,m,h,k,S,L,O);for(;J;){os(h,1)||Wn();const Ee=J;J=J.nextSibling,a(Ee)}}else if(N&8){let J=m.children;J[0]===` 3`&&(h.tagName==="PRE"||h.tagName==="TEXTAREA")&&(J=J.slice(1)),h.textContent!==J&&(os(h,0)||Wn(),h.textContent=m.children)}if(M){if(ae||!O||K&48){const J=h.tagName.includes("-");for(const Ee in M)(ae&&(Ee.endsWith("value")||Ee==="indeterminate")||Ko(Ee)&&!Qn(Ee)||Ee[0]==="."||J)&&o(h,Ee,null,M[Ee],void 0,k)}else if(M.onClick)o(h,"onClick",null,M.onClick,void 0,k);else if(K&4&&Dn(M.style))for(const J in M.style)M.style[J]}let te;(te=M&&M.onVnodeBeforeMount)&&it(te,k,m),V&&Dt(m,null,k,"beforeMount"),((te=M&&M.onVnodeMounted)||V||Y)&&Bu(()=>{te&&it(te,k,m),Y&&se.enter(h),V&&Dt(m,null,k,"mounted")},S)}return h.nextSibling},f=(h,m,k,S,L,O,I)=>{I=I||!!m.dynamicChildren;const M=m.children,K=M.length;for(let N=0;N<K;N++){const V=I?M[N]:M[N]=ft(M[N]),se=V.type===mn;h?(se&&!I&&N+1<K&&ft(M[N+1]).type===mn&&(l(s(h.data.slice(V.children.length)),k,r(h)),h.data=V.children),h=d(h,V,S,L,O,I)):se&&!V.children?l(V.el=s(""),k):(os(k,1)||Wn(),n(null,V,k,null,S,L,ns(k),O))}return h},b=(h,m,k,S,L,O)=>{const{slotScopeIds:I}=m;I&&(L=L?L.concat(I):I);const M=i(h),K=f(r(h),m,M,k,S,L,O);return K&&qn(K)&&K.data==="]"?r(m.anchor=K):(Wn(),l(m.anchor=u("]"),M,K),K)},_=(h,m,k,S,L,O)=>{if(os(h.parentElement,1)||Wn(),m.el=null,O){const K=A(h);for(;;){const N=r(h);if(N&&N!==K)a(N);else break}}const I=r(h),M=i(h);return a(h),n(null,m,M,I,k,S,ns(M),L),k&&(k.vnode.el=m.el,Gs(k,m.el)),I},A=(h,m="[",k="]")=>{let S=0;for(;h;)if(h=r(h),h&&qn(h)&&(h.data===m&&S++,h.data===k)){if(S===0)return r(h);S--}return h},E=(h,m,k)=>{const S=m.parentNode;S&&S.replaceChild(h,m);let L=k;for(;L;)L.vnode.el===m&&(L.vnode.el=L.subTree.el=h),L=L.parent},C=h=>h.nodeType===1&&h.tagName==="TEMPLATE";return[c,d]}const Aa="data-allow-mismatch",Kp={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function os(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(Aa);)e=e.parentElement;const n=e&&e.getAttribute(Aa);if(n==null)return!1;if(n==="")return!0;{const o=n.split(",");return t===0&&o.includes("children")?!0:n.split(",").includes(Kp[t])}}Hs().requestIdleCallback;Hs().cancelIdleCallback;function qp(e){const{top:t,left:n,bottom:o,right:s}=e.getBoundingClientRect(),{innerHeight:r,innerWidth:i}=window;return(t>0&&t<r||o>0&&o<r)&&(n>0&&n<i||s>0&&s<i)}const pS=e=>(t,n)=>{const o=new IntersectionObserver(s=>{for(const r of s)if(r.isIntersecting){o.disconnect(),t();break}},e);return n(s=>{if(s instanceof Element){if(qp(s))return t(),o.disconnect(),!1;o.observe(s)}}),()=>o.disconnect()};function Yp(e,t){if(qn(e)&&e.data==="["){let n=1,o=e.nextSibling;for(;o;){if(o.nodeType===1){if(t(o)===!1)break}else if(qn(o))if(o.data==="]"){if(--n===0)break}else o.data==="["&&n++;o=o.nextSibling}}else t(e)}const pn=e=>!!e.type.__asyncLoader;function hS(e){oe(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:o,delay:s=200,hydrate:r,timeout:i,suspensible:a=!0,onError:l}=e;let u=null,c,d=0;const p=()=>(d++,u=null,f()),f=()=>{let b;return u||(b=u=t().catch(_=>{if(_=_ instanceof Error?_:new Error(String(_)),l)return new Promise((A,E)=>{l(_,()=>A(p()),()=>E(_),d+1)});throw _}).then(_=>b!==u&&u?u:(_&&(_.__esModule||_[Symbol.toStringTag]==="Module")&&(_=_.default),c=_,_)))};return lt({name:"AsyncComponentWrapper",__asyncLoader:f,__asyncHydrate(b,_,A){const E=r?()=>{const C=r(A,h=>Yp(b,h));C&&(_.bum||(_.bum=[])).push(C)}:A;c?E():f().then(()=>!_.isUnmounted&&E())},get __asyncResolved(){return c},setup(){const b=Fe;if(Gi(b),c)return()=>ur(c,b);const _=h=>{u=null,uo(h,b,13,!o)};if(a&&b.suspense||ro)return f().then(h=>()=>ur(h,b)).catch(h=>(_(h),()=>o?_e(o,{error:h}):null));const A=Qe(!1),E=Qe(),C=Qe(!!s);return s&&setTimeout(()=>{C.value=!1},s),i!=null&&setTimeout(()=>{if(!A.value&&!E.value){const h=new Error(`Async component timed out after ${i}ms.`);_(h),E.value=h}},i),f().then(()=>{A.value=!0,b.parent&&Jo(b.parent.vnode)&&b.parent.update()}).catch(h=>{_(h),E.value=h}),()=>{if(A.value&&c)return ur(c,b);if(E.value&&o)return _e(o,{error:E.value});if(n&&!C.value)return _e(n)}}})}function ur(e,t){const{ref:n,props:o,children:s,ce:r}=t.vnode,i=_e(e,o,s);return i.ref=n,i.ce=r,delete t.vnode.ce,i}const Jo=e=>e.type.__isKeepAlive,Xp={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=pt(),o=n.ctx;if(!o.renderer)return()=>{const C=t.default&&t.default();return C&&C.length===1?C[0]:C};const s=new Map,r=new Set;let i=null;const a=n.suspense,{renderer:{p:l,m:u,um:c,o:{createElement:d}}}=o,p=d("div");o.activate=(C,h,m,k,S)=>{const L=C.component;u(C,h,m,0,a),l(L.vnode,C,h,m,L,a,k,C.slotScopeIds,S),Ke(()=>{L.isDeactivated=!1,L.a&&zn(L.a);const O=C.props&&C.props.onVnodeMounted;O&&it(O,L.parent,C)},a)},o.deactivate=C=>{const h=C.component;Es(h.m),Es(h.a),u(C,p,null,1,a),Ke(()=>{h.da&&zn(h.da);const m=C.props&&C.props.onVnodeUnmounted;m&&it(m,h.parent,C),h.isDeactivated=!0},a)};function f(C){dr(C),c(C,n,a,!0)}function b(C){s.forEach((h,m)=>{const k=Qr(h.type);k&&!C(k)&&_(m)})}function _(C){const h=s.get(C);h&&(!i||!Ct(h,i))?f(h):i&&dr(i),s.delete(C),r.delete(C)}Jt(()=>[e.include,e.exclude],([C,h])=>{C&&b(m=>ko(C,m)),h&&b(m=>!ko(h,m))},{flush:"post",deep:!0});let A=null;const E=()=>{A!=null&&(Cs(n.subTree.type)?Ke(()=>{s.set(A,ss(n.subTree))},n.subTree.suspense):s.set(A,ss(n.subTree)))};return Mn(E),yu(E),fo(()=>{s.forEach(C=>{const{subTree:h,suspense:m}=n,k=ss(h);if(C.type===k.type&&C.key===k.key){dr(k);const S=k.component.da;S&&Ke(S,m);return}f(C)})}),()=>{if(A=null,!t.default)return i=null;const C=t.default(),h=C[0];if(C.length>1)return i=null,C;if(!gn(h)||!(h.shapeFlag&4)&&!(h.shapeFlag&128))return i=null,h;let m=ss(h);if(m.type===Ne)return i=null,m;const k=m.type,S=Qr(pn(m)?m.type.__asyncResolved||{}:k),{include:L,exclude:O,max:I}=e;if(L&&(!S||!ko(L,S))||O&&S&&ko(O,S))return m.shapeFlag&=-257,i=m,h;const M=m.key==null?k:m.key,K=s.get(M);return m.el&&(m=wt(m),h.shapeFlag&128&&(h.ssContent=m)),A=M,K?(m.el=K.el,m.component=K.component,m.transition&&oo(m,m.transition),m.shapeFlag|=512,r.delete(M),r.add(M)):(r.add(M),I&&r.size>parseInt(I,10)&&_(r.values().next().value)),m.shapeFlag|=256,i=m,Cs(h.type)?h:m}}},Jp=Xp;function ko(e,t){return Z(e)?e.some(n=>ko(n,t)):Te(e)?e.split(",").includes(t):Xf(e)?(e.lastIndex=0,e.test(t)):!1}function pu(e,t){mu(e,"a",t)}function hu(e,t){mu(e,"da",t)}function mu(e,t,n=Fe){const o=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(Ws(t,o,n),n){let s=n.parent;for(;s&&s.parent;)Jo(s.parent.vnode)&&Qp(o,t,n,s),s=s.parent}}function Qp(e,t,n,o){const s=Ws(t,e,o,!0);Ki(()=>{Oi(o[t],s)},n)}function dr(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function ss(e){return e.shapeFlag&128?e.ssContent:e}function Ws(e,t,n=Fe,o=!1){if(n){const s=n[e]||(n[e]=[]),r=t.__weh||(t.__weh=(...i)=>{Qt();const a=Fn(n),l=It(t,n,e,i);return a(),zt(),l});return o?s.unshift(r):s.push(r),r}}const tn=e=>(t,n=Fe)=>{(!ro||e==="sp")&&Ws(e,(...o)=>t(...o),n)},gu=tn("bm"),Mn=tn("m"),zp=tn("bu"),yu=tn("u"),fo=tn("bum"),Ki=tn("um"),Zp=tn("sp"),eh=tn("rtg"),th=tn("rtc");function vu(e,t=Fe){Ws("ec",e,t)}const bu="components";function Pa(e,t){return _u(bu,e,!0,t)||e}const wu=Symbol.for("v-ndc");function nh(e){return Te(e)?_u(bu,e,!1)||e:e||wu}function _u(e,t,n=!0,o=!1){const s=Ue||Fe;if(s){const r=s.type;{const a=Qr(r,!1);if(a&&(a===t||a===_t(t)||a===Us(_t(t))))return r}const i=Ia(s[e]||r[e],t)||Ia(s.appContext[e],t);return!i&&o?r:i}}function Ia(e,t){return e&&(e[t]||e[_t(t)]||e[Us(_t(t))])}function mS(e,t,n,o){let s;const r=n,i=Z(e);if(i||Te(e)){const a=i&&Dn(e);let l=!1,u=!1;a&&(l=!bt(e),u=Zt(e),e=$s(e)),s=new Array(e.length);for(let c=0,d=e.length;c<d;c++)s[c]=t(l?u?vs(qe(e[c])):qe(e[c]):e[c],c,void 0,r)}else if(typeof e=="number"){s=new Array(e);for(let a=0;a<e;a++)s[a]=t(a+1,a,void 0,r)}else if(Se(e))if(e[Symbol.iterator])s=Array.from(e,(a,l)=>t(a,l,void 0,r));else{const a=Object.keys(e);s=new Array(a.length);for(let l=0,u=a.length;l<u;l++){const c=a[l];s[l]=t(e[c],c,l,r)}}else s=[];return s}function gS(e,t){for(let n=0;n<t.length;n++){const o=t[n];if(Z(o))for(let s=0;s<o.length;s++)e[o[s].name]=o[s].fn;else o&&(e[o.name]=o.key?(...s)=>{const r=o.fn(...s);return r&&(r.key=o.key),r}:o.fn)}return e}function yS(e,t,n={},o,s){if(Ue.ce||Ue.parent&&pn(Ue.parent)&&Ue.parent.ce)return t!=="default"&&(n.name=t),yt(),qt(Ve,null,[_e("slot",n,o&&o())],64);let r=e[t];r&&r._c&&(r._d=!1),yt();const i=r&&ku(r(n)),a=n.key||i&&i.key,l=qt(Ve,{key:(a&&!en(a)?a:`_${t}`)+(!i&&o?"_fb":"")},i||(o?o():[]),i&&e._===1?64:-2);return!s&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),r&&r._c&&(r._d=!0),l}function ku(e){return e.some(t=>gn(t)?!(t.type===Ne||t.type===Ve&&!ku(t.children)):!0)?e:null}const Vr=e=>e?qu(e)?Ks(e):Vr(e.parent):null,To=Ge(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=>Vr(e.parent),$root:e=>Vr(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Eu(e),$forceUpdate:e=>e.f||(e.f=()=>{ji(e.update)}),$nextTick:e=>e.n||(e.n=no.bind(e.proxy)),$watch:e=>Eh.bind(e)}),fr=(e,t)=>e!==ve&&!e.__isScriptSetup&&ge(e,t),oh={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:o,data:s,props:r,accessCache:i,type:a,appContext:l}=e;let u;if(t[0]!=="$"){const f=i[t];if(f!==void 0)switch(f){case 1:return o[t];case 2:return s[t];case 4:return n[t];case 3:return r[t]}else{if(fr(o,t))return i[t]=1,o[t];if(s!==ve&&ge(s,t))return i[t]=2,s[t];if((u=e.propsOptions[0])&&ge(u,t))return i[t]=3,r[t];if(n!==ve&&ge(n,t))return i[t]=4,n[t];jr&&(i[t]=0)}}const c=To[t];let d,p;if(c)return t==="$attrs"&&Je(e.attrs,"get",""),c(e);if((d=a.__cssModules)&&(d=d[t]))return d;if(n!==ve&&ge(n,t))return i[t]=4,n[t];if(p=l.config.globalProperties,ge(p,t))return p[t]},set({_:e},t,n){const{data:o,setupState:s,ctx:r}=e;return fr(s,t)?(s[t]=n,!0):o!==ve&&ge(o,t)?(o[t]=n,!0):ge(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(r[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:o,appContext:s,propsOptions:r}},i){let a;return!!n[i]||e!==ve&&ge(e,i)||fr(t,i)||(a=r[0])&&ge(a,i)||ge(o,i)||ge(To,i)||ge(s.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ge(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function vS(){return sh().slots}function sh(){const e=pt();return e.setupContext||(e.setupContext=Xu(e))}function La(e){return Z(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}function bS(e){const t=pt();let n=e();return Xr(),Di(n)&&(n=n.catch(o=>{throw Fn(t),o})),[n,()=>Fn(t)]}let jr=!0;function rh(e){const t=Eu(e),n=e.proxy,o=e.ctx;jr=!1,t.beforeCreate&&Ra(t.beforeCreate,e,"bc");const{data:s,computed:r,methods:i,watch:a,provide:l,inject:u,created:c,beforeMount:d,mounted:p,beforeUpdate:f,updated:b,activated:_,deactivated:A,beforeDestroy:E,beforeUnmount:C,destroyed:h,unmounted:m,render:k,renderTracked:S,renderTriggered:L,errorCaptured:O,serverPrefetch:I,expose:M,inheritAttrs:K,components:N,directives:V,filters:se}=t;if(u&&ih(u,o,null),i)for(const te in i){const J=i[te];oe(J)&&(o[te]=J.bind(n))}if(s){const te=s.call(n,n);Se(te)&&(e.data=bn(te))}if(jr=!0,r)for(const te in r){const J=r[te],Ee=oe(J)?J.bind(n,n):oe(J.get)?J.get.bind(n,n):Mt,st=!oe(J)&&oe(J.set)?J.set.bind(n):Mt,Pe=ue({get:Ee,set:st});Object.defineProperty(o,te,{enumerable:!0,configurable:!0,get:()=>Pe.value,set:Ie=>Pe.value=Ie})}if(a)for(const te in a)Su(a[te],o,n,te);if(l){const te=oe(l)?l.call(n):l;Reflect.ownKeys(te).forEach(J=>{hn(J,te[J])})}c&&Ra(c,e,"c");function Y(te,J){Z(J)?J.forEach(Ee=>te(Ee.bind(n))):J&&te(J.bind(n))}if(Y(gu,d),Y(Mn,p),Y(zp,f),Y(yu,b),Y(pu,_),Y(hu,A),Y(vu,O),Y(th,S),Y(eh,L),Y(fo,C),Y(Ki,m),Y(Zp,I),Z(M))if(M.length){const te=e.exposed||(e.exposed={});M.forEach(J=>{Object.defineProperty(te,J,{get:()=>n[J],set:Ee=>n[J]=Ee})})}else e.exposed||(e.exposed={});k&&e.render===Mt&&(e.render=k),K!=null&&(e.inheritAttrs=K),N&&(e.components=N),V&&(e.directives=V),I&&Gi(e)}function ih(e,t,n=Mt){Z(e)&&(e=Gr(e));for(const o in e){const s=e[o];let r;Se(s)?"default"in s?r=He(s.from||o,s.default,!0):r=He(s.from||o):r=He(s),xe(r)?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>r.value,set:i=>r.value=i}):t[o]=r}}function Ra(e,t,n){It(Z(e)?e.map(o=>o.bind(t.proxy)):e.bind(t.proxy),t,n)}function Su(e,t,n,o){let s=o.includes(".")?Uu(n,o):()=>n[o];if(Te(e)){const r=t[e];oe(r)&&Jt(s,r)}else if(oe(e))Jt(s,e.bind(n));else if(Se(e))if(Z(e))e.forEach(r=>Su(r,t,n,o));else{const r=oe(e.handler)?e.handler.bind(n):t[e.handler];oe(r)&&Jt(s,r,e)}}function Eu(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:s,optionsCache:r,config:{optionMergeStrategies:i}}=e.appContext,a=r.get(t);let l;return a?l=a:!s.length&&!n&&!o?l=t:(l={},s.length&&s.forEach(u=>Ss(l,u,i,!0)),Ss(l,t,i)),Se(t)&&r.set(t,l),l}function Ss(e,t,n,o=!1){const{mixins:s,extends:r}=t;r&&Ss(e,r,n,!0),s&&s.forEach(i=>Ss(e,i,n,!0));for(const i in t)if(!(o&&i==="expose")){const a=ah[i]||n&&n[i];e[i]=a?a(e[i],t[i]):t[i]}return e}const ah={data:Oa,props:Da,emits:Da,methods:So,computed:So,beforeCreate:Ze,created:Ze,beforeMount:Ze,mounted:Ze,beforeUpdate:Ze,updated:Ze,beforeDestroy:Ze,beforeUnmount:Ze,destroyed:Ze,unmounted:Ze,activated:Ze,deactivated:Ze,errorCaptured:Ze,serverPrefetch:Ze,components:So,directives:So,watch:ch,provide:Oa,inject:lh};function Oa(e,t){return t?e?function(){return Ge(oe(e)?e.call(this,this):e,oe(t)?t.call(this,this):t)}:t:e}function lh(e,t){return So(Gr(e),Gr(t))}function Gr(e){if(Z(e)){const t={};for(let n=0;n<e.length;n++)t[e[n]]=e[n];return t}return e}function Ze(e,t){return e?[...new Set([].concat(e,t))]:t}function So(e,t){return e?Ge(Object.create(null),e,t):t}function Da(e,t){return e?Z(e)&&Z(t)?[...new Set([...e,...t])]:Ge(Object.create(null),La(e),La(t??{})):t}function ch(e,t){if(!e)return t;if(!t)return e;const n=Ge(Object.create(null),e);for(const o in t)n[o]=Ze(e[o],t[o]);return n}function Cu(){return{app:null,config:{isNativeTag:qf,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let uh=0;function dh(e,t){return function(o,s=null){oe(o)||(o=Ge({},o)),s!=null&&!Se(s)&&(s=null);const r=Cu(),i=new WeakSet,a=[];let l=!1;const u=r.app={_uid:uh++,_component:o,_props:s,_container:null,_context:r,_instance:null,version:Yh,get config(){return r.config},set config(c){},use(c,...d){return i.has(c)||(c&&oe(c.install)?(i.add(c),c.install(u,...d)):oe(c)&&(i.add(c),c(u,...d))),u},mixin(c){return r.mixins.includes(c)||r.mixins.push(c),u},component(c,d){return d?(r.components[c]=d,u):r.components[c]},directive(c,d){return d?(r.directives[c]=d,u):r.directives[c]},mount(c,d,p){if(!l){const f=u._ceVNode||_e(o,s);return f.appContext=r,p===!0?p="svg":p===!1&&(p=void 0),d&&t?t(f,c):e(f,c,p),l=!0,u._container=c,c.__vue_app__=u,Ks(f.component)}},onUnmount(c){a.push(c)},unmount(){l&&(It(a,u._instance,16),e(null,u._container),delete u._container.__vue_app__)},provide(c,d){return r.provides[c]=d,u},runWithContext(c){const d=Nn;Nn=u;try{return c()}finally{Nn=d}}};return u}}let Nn=null;function hn(e,t){if(Fe){let n=Fe.provides;const o=Fe.parent&&Fe.parent.provides;o===n&&(n=Fe.provides=Object.create(o)),n[e]=t}}function He(e,t,n=!1){const o=Fe||Ue;if(o||Nn){const s=Nn?Nn._context.provides:o?o.parent==null?o.vnode.appContext&&o.vnode.appContext.provides:o.parent.provides:void 0;if(s&&e in s)return s[e];if(arguments.length>1)return n&&oe(t)?t.call(o&&o.proxy):t}}function Vs(){return!!(Fe||Ue||Nn)}const Tu={},Au=()=>Object.create(Tu),Pu=e=>Object.getPrototypeOf(e)===Tu;function fh(e,t,n,o=!1){const s={},r=Au();e.propsDefaults=Object.create(null),Iu(e,t,s,r);for(const i in e.propsOptions[0])i in s||(s[i]=void 0);n?e.props=o?s:Nt(s):e.type.props?e.props=s:e.props=r,e.attrs=r}function ph(e,t,n,o){const{props:s,attrs:r,vnode:{patchFlag:i}}=e,a=de(s),[l]=e.propsOptions;let u=!1;if((o||i>0)&&!(i&16)){if(i&8){const c=e.vnode.dynamicProps;for(let d=0;d<c.length;d++){let p=c[d];if(js(e.emitsOptions,p))continue;const f=t[p];if(l)if(ge(r,p))f!==r[p]&&(r[p]=f,u=!0);else{const b=_t(p);s[b]=Kr(l,a,b,f,e,!1)}else f!==r[p]&&(r[p]=f,u=!0)}}}else{Iu(e,t,s,r)&&(u=!0);let c;for(const d in a)(!t||!ge(t,d)&&((c=vn(d))===d||!ge(t,c)))&&(l?n&&(n[d]!==void 0||n[c]!==void 0)&&(s[d]=Kr(l,a,d,void 0,e,!0)):delete s[d]);if(r!==a)for(const d in r)(!t||!ge(t,d))&&(delete r[d],u=!0)}u&&Gt(e.attrs,"set","")}function Iu(e,t,n,o){const[s,r]=e.propsOptions;let i=!1,a;if(t)for(let l in t){if(Qn(l))continue;const u=t[l];let c;s&&ge(s,c=_t(l))?!r||!r.includes(c)?n[c]=u:(a||(a={}))[c]=u:js(e.emitsOptions,l)||(!(l in o)||u!==o[l])&&(o[l]=u,i=!0)}if(r){const l=de(n),u=a||ve;for(let c=0;c<r.length;c++){const d=r[c];n[d]=Kr(s,l,d,u[d],e,!ge(u,d))}}return i}function Kr(e,t,n,o,s,r){const i=e[n];if(i!=null){const a=ge(i,"default");if(a&&o===void 0){const l=i.default;if(i.type!==Function&&!i.skipFactory&&oe(l)){const{propsDefaults:u}=s;if(n in u)o=u[n];else{const c=Fn(s);o=u[n]=l.call(null,t),c()}}else o=l;s.ce&&s.ce._setProp(n,o)}i[0]&&(r&&!a?o=!1:i[1]&&(o===""||o===vn(n))&&(o=!0))}return o}const hh=new WeakMap;function Lu(e,t,n=!1){const o=n?hh:t.propsCache,s=o.get(e);if(s)return s;const r=e.props,i={},a=[];let l=!1;if(!oe(e)){const c=d=>{l=!0;const[p,f]=Lu(d,t,!0);Ge(i,p),f&&a.push(...f)};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}if(!r&&!l)return Se(e)&&o.set(e,Xn),Xn;if(Z(r))for(let c=0;c<r.length;c++){const d=_t(r[c]);Na(d)&&(i[d]=ve)}else if(r)for(const c in r){const d=_t(c);if(Na(d)){const p=r[c],f=i[d]=Z(p)||oe(p)?{type:p}:Ge({},p),b=f.type;let _=!1,A=!0;if(Z(b))for(let E=0;E<b.length;++E){const C=b[E],h=oe(C)&&C.name;if(h==="Boolean"){_=!0;break}else h==="String"&&(A=!1)}else _=oe(b)&&b.name==="Boolean";f[0]=_,f[1]=A,(_||ge(f,"default"))&&a.push(d)}}const u=[i,a];return Se(e)&&o.set(e,u),u}function Na(e){return e[0]!=="$"&&!Qn(e)}const qi=e=>e[0]==="_"||e==="$stable",Yi=e=>Z(e)?e.map(ft):[ft(e)],mh=(e,t,n)=>{if(t._n)return t;const o=Bs((...s)=>Yi(t(...s)),n);return o._c=!1,o},Ru=(e,t,n)=>{const o=e._ctx;for(const s in e){if(qi(s))continue;const r=e[s];if(oe(r))t[s]=mh(s,r,o);else if(r!=null){const i=Yi(r);t[s]=()=>i}}},Ou=(e,t)=>{const n=Yi(t);e.slots.default=()=>n},Du=(e,t,n)=>{for(const o in t)(n||!qi(o))&&(e[o]=t[o])},gh=(e,t,n)=>{const o=e.slots=Au();if(e.vnode.shapeFlag&32){const s=t._;s?(Du(o,t,n),n&&Dc(o,"_",s,!0)):Ru(t,o)}else t&&Ou(e,t)},yh=(e,t,n)=>{const{vnode:o,slots:s}=e;let r=!0,i=ve;if(o.shapeFlag&32){const a=t._;a?n&&a===1?r=!1:Du(s,t,n):(r=!t.$stable,Ru(t,s)),i=t}else t&&(Ou(e,t),i={default:1});if(r)for(const a in s)!qi(a)&&i[a]==null&&delete s[a]},Ke=Bu;function vh(e){return Nu(e)}function bh(e){return Nu(e,Gp)}function Nu(e,t){const n=Hs();n.__VUE__=!0;const{insert:o,remove:s,patchProp:r,createElement:i,createText:a,createComment:l,setText:u,setElementText:c,parentNode:d,nextSibling:p,setScopeId:f=Mt,insertStaticContent:b}=e,_=(w,g,P,H=null,x=null,B=null,G=void 0,y=null,v=!!g.dynamicChildren)=>{if(w===g)return;w&&!Ct(w,g)&&(H=F(w),Ie(w,x,B,!0),w=null),g.patchFlag===-2&&(v=!1,g.dynamicChildren=null);const{type:T,ref:U,shapeFlag:W}=g;switch(T){case mn:A(w,g,P,H);break;case Ne:E(w,g,P,H);break;case Ao:w==null&&C(g,P,H,G);break;case Ve:N(w,g,P,H,x,B,G,y,v);break;default:W&1?k(w,g,P,H,x,B,G,y,v):W&6?V(w,g,P,H,x,B,G,y,v):(W&64||W&128)&&T.process(w,g,P,H,x,B,G,y,v,Q)}U!=null&&x&&xo(U,w&&w.ref,B,g||w,!g)},A=(w,g,P,H)=>{if(w==null)o(g.el=a(g.children),P,H);else{const x=g.el=w.el;g.children!==w.children&&u(x,g.children)}},E=(w,g,P,H)=>{w==null?o(g.el=l(g.children||""),P,H):g.el=w.el},C=(w,g,P,H)=>{[w.el,w.anchor]=b(w.children,g,P,H,w.el,w.anchor)},h=({el:w,anchor:g},P,H)=>{let x;for(;w&&w!==g;)x=p(w),o(w,P,H),w=x;o(g,P,H)},m=({el:w,anchor:g})=>{let P;for(;w&&w!==g;)P=p(w),s(w),w=P;s(g)},k=(w,g,P,H,x,B,G,y,v)=>{g.type==="svg"?G="svg":g.type==="math"&&(G="mathml"),w==null?S(g,P,H,x,B,G,y,v):I(w,g,x,B,G,y,v)},S=(w,g,P,H,x,B,G,y)=>{let v,T;const{props:U,shapeFlag:W,transition:$,dirs:R}=w;if(v=w.el=i(w.type,B,U&&U.is,U),W&8?c(v,w.children):W&16&&O(w.children,v,null,H,x,pr(w,B),G,y),R&&Dt(w,null,H,"created"),L(v,w,w.scopeId,G,H),U){for(const z in U)z!=="value"&&!Qn(z)&&r(v,z,null,U[z],B,H);"value"in U&&r(v,"value",null,U.value,B),(T=U.onVnodeBeforeMount)&&it(T,H,w)}R&&Dt(w,null,H,"beforeMount");const D=xu(x,$);D&&$.beforeEnter(v),o(v,g,P),((T=U&&U.onVnodeMounted)||D||R)&&Ke(()=>{T&&it(T,H,w),D&&$.enter(v),R&&Dt(w,null,H,"mounted")},x)},L=(w,g,P,H,x)=>{if(P&&f(w,P),H)for(let B=0;B<H.length;B++)f(w,H[B]);if(x){let B=x.subTree;if(g===B||Cs(B.type)&&(B.ssContent===g||B.ssFallback===g)){const G=x.vnode;L(w,G,G.scopeId,G.slotScopeIds,x.parent)}}},O=(w,g,P,H,x,B,G,y,v=0)=>{for(let T=v;T<w.length;T++){const U=w[T]=y?cn(w[T]):ft(w[T]);_(null,U,g,P,H,x,B,G,y)}},I=(w,g,P,H,x,B,G)=>{const y=g.el=w.el;let{patchFlag:v,dynamicChildren:T,dirs:U}=g;v|=w.patchFlag&16;const W=w.props||ve,$=g.props||ve;let R;if(P&&Sn(P,!1),(R=$.onVnodeBeforeUpdate)&&it(R,P,g,w),U&&Dt(g,w,P,"beforeUpdate"),P&&Sn(P,!0),(W.innerHTML&&$.innerHTML==null||W.textContent&&$.textContent==null)&&c(y,""),T?M(w.dynamicChildren,T,y,P,H,pr(g,x),B):G||J(w,g,y,null,P,H,pr(g,x),B,!1),v>0){if(v&16)K(y,W,$,P,x);else if(v&2&&W.class!==$.class&&r(y,"class",null,$.class,x),v&4&&r(y,"style",W.style,$.style,x),v&8){const D=g.dynamicProps;for(let z=0;z<D.length;z++){const ee=D[z],Le=W[ee],Oe=$[ee];(Oe!==Le||ee==="value")&&r(y,ee,Le,Oe,x,P)}}v&1&&w.children!==g.children&&c(y,g.children)}else!G&&T==null&&K(y,W,$,P,x);((R=$.onVnodeUpdated)||U)&&Ke(()=>{R&&it(R,P,g,w),U&&Dt(g,w,P,"updated")},H)},M=(w,g,P,H,x,B,G)=>{for(let y=0;y<g.length;y++){const v=w[y],T=g[y],U=v.el&&(v.type===Ve||!Ct(v,T)||v.shapeFlag&70)?d(v.el):P;_(v,T,U,null,H,x,B,G,!0)}},K=(w,g,P,H,x)=>{if(g!==P){if(g!==ve)for(const B in g)!Qn(B)&&!(B in P)&&r(w,B,g[B],null,x,H);for(const B in P){if(Qn(B))continue;const G=P[B],y=g[B];G!==y&&B!=="value"&&r(w,B,y,G,x,H)}"value"in P&&r(w,"value",g.value,P.value,x)}},N=(w,g,P,H,x,B,G,y,v)=>{const T=g.el=w?w.el:a(""),U=g.anchor=w?w.anchor:a("");let{patchFlag:W,dynamicChildren:$,slotScopeIds:R}=g;R&&(y=y?y.concat(R):R),w==null?(o(T,P,H),o(U,P,H),O(g.children||[],P,U,x,B,G,y,v)):W>0&&W&64&&$&&w.dynamicChildren?(M(w.dynamicChildren,$,P,x,B,G,y),(g.key!=null||x&&g===x.subTree)&&Mu(w,g,!0)):J(w,g,P,U,x,B,G,y,v)},V=(w,g,P,H,x,B,G,y,v)=>{g.slotScopeIds=y,w==null?g.shapeFlag&512?x.ctx.activate(g,P,H,G,v):se(g,P,H,x,B,G,v):ae(w,g,v)},se=(w,g,P,H,x,B,G)=>{const y=w.component=Vh(w,H,x);if(Jo(w)&&(y.ctx.renderer=Q),jh(y,!1,G),y.asyncDep){if(x&&x.registerDep(y,Y,G),!w.el){const v=y.subTree=_e(Ne);E(null,v,g,P)}}else Y(y,w,g,P,x,B,G)},ae=(w,g,P)=>{const H=g.component=w.component;if(Lh(w,g,P))if(H.asyncDep&&!H.asyncResolved){te(H,g,P);return}else H.next=g,H.update();else g.el=w.el,H.vnode=g},Y=(w,g,P,H,x,B,G)=>{const y=()=>{if(w.isMounted){let{next:W,bu:$,u:R,parent:D,vnode:z}=w;{const ze=Fu(w);if(ze){W&&(W.el=z.el,te(w,W,G)),ze.asyncDep.then(()=>{w.isUnmounted||y()});return}}let ee=W,Le;Sn(w,!1),W?(W.el=z.el,te(w,W,G)):W=z,$&&zn($),(Le=W.props&&W.props.onVnodeBeforeUpdate)&&it(Le,D,W,z),Sn(w,!0);const Oe=hr(w),We=w.subTree;w.subTree=Oe,_(We,Oe,d(We.el),F(We),w,x,B),W.el=Oe.el,ee===null&&Gs(w,Oe.el),R&&Ke(R,x),(Le=W.props&&W.props.onVnodeUpdated)&&Ke(()=>it(Le,D,W,z),x)}else{let W;const{el:$,props:R}=g,{bm:D,m:z,parent:ee,root:Le,type:Oe}=w,We=pn(g);if(Sn(w,!1),D&&zn(D),!We&&(W=R&&R.onVnodeBeforeMount)&&it(W,ee,g),Sn(w,!0),$&&he){const ze=()=>{w.subTree=hr(w),he($,w.subTree,w,x,null)};We&&Oe.__asyncHydrate?Oe.__asyncHydrate($,w,ze):ze()}else{Le.ce&&Le.ce._injectChildStyle(Oe);const ze=w.subTree=hr(w);_(null,ze,P,H,w,x,B),g.el=ze.el}if(z&&Ke(z,x),!We&&(W=R&&R.onVnodeMounted)){const ze=g;Ke(()=>it(W,ee,ze),x)}(g.shapeFlag&256||ee&&pn(ee.vnode)&&ee.vnode.shapeFlag&256)&&w.a&&Ke(w.a,x),w.isMounted=!0,g=P=H=null}};w.scope.on();const v=w.effect=new $c(y);w.scope.off();const T=w.update=v.run.bind(v),U=w.job=v.runIfDirty.bind(v);U.i=w,U.id=w.uid,v.scheduler=()=>ji(U),Sn(w,!0),T()},te=(w,g,P)=>{g.component=w;const H=w.vnode.props;w.vnode=g,w.next=null,ph(w,g.props,H,P),yh(w,g.children,P),Qt(),Ea(w),zt()},J=(w,g,P,H,x,B,G,y,v=!1)=>{const T=w&&w.children,U=w?w.shapeFlag:0,W=g.children,{patchFlag:$,shapeFlag:R}=g;if($>0){if($&128){st(T,W,P,H,x,B,G,y,v);return}else if($&256){Ee(T,W,P,H,x,B,G,y,v);return}}R&8?(U&16&&Be(T,x,B),W!==T&&c(P,W)):U&16?R&16?st(T,W,P,H,x,B,G,y,v):Be(T,x,B,!0):(U&8&&c(P,""),R&16&&O(W,P,H,x,B,G,y,v))},Ee=(w,g,P,H,x,B,G,y,v)=>{w=w||Xn,g=g||Xn;const T=w.length,U=g.length,W=Math.min(T,U);let $;for($=0;$<W;$++){const R=g[$]=v?cn(g[$]):ft(g[$]);_(w[$],R,P,null,x,B,G,y,v)}T>U?Be(w,x,B,!0,!1,W):O(g,P,H,x,B,G,y,v,W)},st=(w,g,P,H,x,B,G,y,v)=>{let T=0;const U=g.length;let W=w.length-1,$=U-1;for(;T<=W&&T<=$;){const R=w[T],D=g[T]=v?cn(g[T]):ft(g[T]);if(Ct(R,D))_(R,D,P,null,x,B,G,y,v);else break;T++}for(;T<=W&&T<=$;){const R=w[W],D=g[$]=v?cn(g[$]):ft(g[$]);if(Ct(R,D))_(R,D,P,null,x,B,G,y,v);else break;W--,$--}if(T>W){if(T<=$){const R=$+1,D=R<U?g[R].el:H;for(;T<=$;)_(null,g[T]=v?cn(g[T]):ft(g[T]),P,D,x,B,G,y,v),T++}}else if(T>$)for(;T<=W;)Ie(w[T],x,B,!0),T++;else{const R=T,D=T,z=new Map;for(T=D;T<=$;T++){const dt=g[T]=v?cn(g[T]):ft(g[T]);dt.key!=null&&z.set(dt.key,T)}let ee,Le=0;const Oe=$-D+1;let We=!1,ze=0;const $n=new Array(Oe);for(T=0;T<Oe;T++)$n[T]=0;for(T=R;T<=W;T++){const dt=w[T];if(Le>=Oe){Ie(dt,x,B,!0);continue}let Rt;if(dt.key!=null)Rt=z.get(dt.key);else for(ee=D;ee<=$;ee++)if($n[ee-D]===0&&Ct(dt,g[ee])){Rt=ee;break}Rt===void 0?Ie(dt,x,B,!0):($n[Rt-D]=T+1,Rt>=ze?ze=Rt:We=!0,_(dt,g[Rt],P,null,x,B,G,y,v),Le++)}const ba=We?wh($n):Xn;for(ee=ba.length-1,T=Oe-1;T>=0;T--){const dt=D+T,Rt=g[dt],wa=dt+1<U?g[dt+1].el:H;$n[T]===0?_(null,Rt,P,wa,x,B,G,y,v):We&&(ee<0||T!==ba[ee]?Pe(Rt,P,wa,2):ee--)}}},Pe=(w,g,P,H,x=null)=>{const{el:B,type:G,transition:y,children:v,shapeFlag:T}=w;if(T&6){Pe(w.component.subTree,g,P,H);return}if(T&128){w.suspense.move(g,P,H);return}if(T&64){G.move(w,g,P,Q);return}if(G===Ve){o(B,g,P);for(let W=0;W<v.length;W++)Pe(v[W],g,P,H);o(w.anchor,g,P);return}if(G===Ao){h(w,g,P);return}if(H!==2&&T&1&&y)if(H===0)y.beforeEnter(B),o(B,g,P),Ke(()=>y.enter(B),x);else{const{leave:W,delayLeave:$,afterLeave:R}=y,D=()=>{w.ctx.isUnmounted?s(B):o(B,g,P)},z=()=>{W(B,()=>{D(),R&&R()})};$?$(B,D,z):z()}else o(B,g,P)},Ie=(w,g,P,H=!1,x=!1)=>{const{type:B,props:G,ref:y,children:v,dynamicChildren:T,shapeFlag:U,patchFlag:W,dirs:$,cacheIndex:R}=w;if(W===-2&&(x=!1),y!=null&&(Qt(),xo(y,null,P,w,!0),zt()),R!=null&&(g.renderCache[R]=void 0),U&256){g.ctx.deactivate(w);return}const D=U&1&&$,z=!pn(w);let ee;if(z&&(ee=G&&G.onVnodeBeforeUnmount)&&it(ee,g,w),U&6)ut(w.component,P,H);else{if(U&128){w.suspense.unmount(P,H);return}D&&Dt(w,null,g,"beforeUnmount"),U&64?w.type.remove(w,g,P,Q,H):T&&!T.hasOnce&&(B!==Ve||W>0&&W&64)?Be(T,g,P,!1,!0):(B===Ve&&W&384||!x&&U&16)&&Be(v,g,P),H&&ht(w)}(z&&(ee=G&&G.onVnodeUnmounted)||D)&&Ke(()=>{ee&&it(ee,g,w),D&&Dt(w,null,g,"unmounted")},P)},ht=w=>{const{type:g,el:P,anchor:H,transition:x}=w;if(g===Ve){ct(P,H);return}if(g===Ao){m(w);return}const B=()=>{s(P),x&&!x.persisted&&x.afterLeave&&x.afterLeave()};if(w.shapeFlag&1&&x&&!x.persisted){const{leave:G,delayLeave:y}=x,v=()=>G(P,B);y?y(w.el,B,v):v()}else B()},ct=(w,g)=>{let P;for(;w!==g;)P=p(w),s(w),w=P;s(g)},ut=(w,g,P)=>{const{bum:H,scope:x,job:B,subTree:G,um:y,m:v,a:T,parent:U,slots:{__:W}}=w;Es(v),Es(T),H&&zn(H),U&&Z(W)&&W.forEach($=>{U.renderCache[$]=void 0}),x.stop(),B&&(B.flags|=8,Ie(G,w,g,P)),y&&Ke(y,g),Ke(()=>{w.isUnmounted=!0},g),g&&g.pendingBranch&&!g.isUnmounted&&w.asyncDep&&!w.asyncResolved&&w.suspenseId===g.pendingId&&(g.deps--,g.deps===0&&g.resolve())},Be=(w,g,P,H=!1,x=!1,B=0)=>{for(let G=B;G<w.length;G++)Ie(w[G],g,P,H,x)},F=w=>{if(w.shapeFlag&6)return F(w.component.subTree);if(w.shapeFlag&128)return w.suspense.next();const g=p(w.anchor||w.el),P=g&&g[Hp];return P?p(P):g};let X=!1;const j=(w,g,P)=>{w==null?g._vnode&&Ie(g._vnode,null,null,!0):_(g._vnode||null,w,g,null,null,null,P),g._vnode=w,X||(X=!0,Ea(),_s(),X=!1)},Q={p:_,um:Ie,m:Pe,r:ht,mt:se,mc:O,pc:J,pbc:M,n:F,o:e};let ie,he;return t&&([ie,he]=t(Q)),{render:j,hydrate:ie,createApp:dh(j,ie)}}function pr({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Sn({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function xu(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Mu(e,t,n=!1){const o=e.children,s=t.children;if(Z(o)&&Z(s))for(let r=0;r<o.length;r++){const i=o[r];let a=s[r];a.shapeFlag&1&&!a.dynamicChildren&&((a.patchFlag<=0||a.patchFlag===32)&&(a=s[r]=cn(s[r]),a.el=i.el),!n&&a.patchFlag!==-2&&Mu(i,a)),a.type===mn&&(a.el=i.el),a.type===Ne&&!a.el&&(a.el=i.el)}}function wh(e){const t=e.slice(),n=[0];let o,s,r,i,a;const l=e.length;for(o=0;o<l;o++){const u=e[o];if(u!==0){if(s=n[n.length-1],e[s]<u){t[o]=s,n.push(o);continue}for(r=0,i=n.length-1;r<i;)a=r+i>>1,e[n[a]]<u?r=a+1:i=a;u<e[n[r]]&&(r>0&&(t[o]=n[r-1]),n[r]=o)}}for(r=n.length,i=n[r-1];r-- >0;)n[r]=i,i=t[i];return n}function Fu(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Fu(t)}function Es(e){if(e)for(let t=0;t<e.length;t++)e[t].flags|=8}const _h=Symbol.for("v-scx"),kh=()=>He(_h);function Sh(e,t){return Xi(e,null,t)}function Jt(e,t,n){return Xi(e,t,n)}function Xi(e,t,n=ve){const{immediate:o,deep:s,flush:r,once:i}=n,a=Ge({},n),l=t&&o||!t&&r!=="post";let u;if(ro){if(r==="sync"){const f=kh();u=f.__watcherHandles||(f.__watcherHandles=[])}else if(!l){const f=()=>{};return f.stop=Mt,f.resume=Mt,f.pause=Mt,f}}const c=Fe;a.call=(f,b,_)=>It(f,c,b,_);let d=!1;r==="post"?a.scheduler=f=>{Ke(f,c&&c.suspense)}:r!=="sync"&&(d=!0,a.scheduler=(f,b)=>{b?f():ji(f)}),a.augmentJob=f=>{t&&(f.flags|=4),d&&(f.flags|=2,c&&(f.id=c.uid,f.i=c))};const p=Mp(e,t,a);return ro&&(u?u.push(p):l&&p()),p}function Eh(e,t,n){const o=this.proxy,s=Te(e)?e.includes(".")?Uu(o,e):()=>o[e]:e.bind(o,o);let r;oe(t)?r=t:(r=t.handler,n=t);const i=Fn(this),a=Xi(s,r.bind(o),n);return i(),a}function Uu(e,t){const n=t.split(".");return()=>{let o=e;for(let s=0;s<n.length&&o;s++)o=o[n[s]];return o}}const Ch=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${_t(t)}Modifiers`]||e[`${vn(t)}Modifiers`];function Th(e,t,...n){if(e.isUnmounted)return;const o=e.vnode.props||ve;let s=n;const r=t.startsWith("update:"),i=r&&Ch(o,t.slice(7));i&&(i.trim&&(s=n.map(c=>Te(c)?c.trim():c)),i.number&&(s=n.map(Fr)));let a,l=o[a=sr(t)]||o[a=sr(_t(t))];!l&&r&&(l=o[a=sr(vn(t))]),l&&It(l,e,6,s);const u=o[a+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[a])return;e.emitted[a]=!0,It(u,e,6,s)}}function Hu(e,t,n=!1){const o=t.emitsCache,s=o.get(e);if(s!==void 0)return s;const r=e.emits;let i={},a=!1;if(!oe(e)){const l=u=>{const c=Hu(u,t,!0);c&&(a=!0,Ge(i,c))};!n&&t.mixins.length&&t.mixins.forEach(l),e.extends&&l(e.extends),e.mixins&&e.mixins.forEach(l)}return!r&&!a?(Se(e)&&o.set(e,null),null):(Z(r)?r.forEach(l=>i[l]=null):Ge(i,r),Se(e)&&o.set(e,i),i)}function js(e,t){return!e||!Ko(t)?!1:(t=t.slice(2).replace(/Once$/,""),ge(e,t[0].toLowerCase()+t.slice(1))||ge(e,vn(t))||ge(e,t))}function hr(e){const{type:t,vnode:n,proxy:o,withProxy:s,propsOptions:[r],slots:i,attrs:a,emit:l,render:u,renderCache:c,props:d,data:p,setupState:f,ctx:b,inheritAttrs:_}=e,A=ks(e);let E,C;try{if(n.shapeFlag&4){const m=s||o,k=m;E=ft(u.call(k,m,c,d,f,p,b)),C=a}else{const m=t;E=ft(m.length>1?m(d,{attrs:a,slots:i,emit:l}):m(d,null)),C=t.props?a:Ph(a)}}catch(m){Po.length=0,uo(m,e,1),E=_e(Ne)}let h=E;if(C&&_!==!1){const m=Object.keys(C),{shapeFlag:k}=h;m.length&&k&7&&(r&&m.some(Ri)&&(C=Ih(C,r)),h=wt(h,C,!1,!0))}return n.dirs&&(h=wt(h,null,!1,!0),h.dirs=h.dirs?h.dirs.concat(n.dirs):n.dirs),n.transition&&oo(h,n.transition),E=h,ks(A),E}function Ah(e,t=!0){let n;for(let o=0;o<e.length;o++){const s=e[o];if(gn(s)){if(s.type!==Ne||s.children==="v-if"){if(n)return;n=s}}else return}return n}const Ph=e=>{let t;for(const n in e)(n==="class"||n==="style"||Ko(n))&&((t||(t={}))[n]=e[n]);return t},Ih=(e,t)=>{const n={};for(const o in e)(!Ri(o)||!(o.slice(9)in t))&&(n[o]=e[o]);return n};function Lh(e,t,n){const{props:o,children:s,component:r}=e,{props:i,children:a,patchFlag:l}=t,u=r.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&l>=0){if(l&1024)return!0;if(l&16)return o?xa(o,i,u):!!i;if(l&8){const c=t.dynamicProps;for(let d=0;d<c.length;d++){const p=c[d];if(i[p]!==o[p]&&!js(u,p))return!0}}}else return(s||a)&&(!a||!a.$stable)?!0:o===i?!1:o?i?xa(o,i,u):!0:!!i;return!1}function xa(e,t,n){const o=Object.keys(t);if(o.length!==Object.keys(e).length)return!0;for(let s=0;s<o.length;s++){const r=o[s];if(t[r]!==e[r]&&!js(n,r))return!0}return!1}function Gs({vnode:e,parent:t},n){for(;t;){const o=t.subTree;if(o.suspense&&o.suspense.activeBranch===e&&(o.el=e.el),o===e)(e=t.vnode).el=n,t=t.parent;else break}}const Cs=e=>e.__isSuspense;let qr=0;const Rh={name:"Suspense",__isSuspense:!0,process(e,t,n,o,s,r,i,a,l,u){if(e==null)Oh(t,n,o,s,r,i,a,l,u);else{if(r&&r.deps>0&&!e.suspense.isInFallback){t.suspense=e.suspense,t.suspense.vnode=t,t.el=e.el;return}Dh(e,t,n,o,s,i,a,l,u)}},hydrate:Nh,normalize:xh},Ji=Rh;function Mo(e,t){const n=e.props&&e.props[t];oe(n)&&n()}function Oh(e,t,n,o,s,r,i,a,l){const{p:u,o:{createElement:c}}=l,d=c("div"),p=e.suspense=$u(e,s,o,t,d,n,r,i,a,l);u(null,p.pendingBranch=e.ssContent,d,null,o,p,r,i),p.deps>0?(Mo(e,"onPending"),Mo(e,"onFallback"),u(null,e.ssFallback,t,n,o,null,r,i),eo(p,e.ssFallback)):p.resolve(!1,!0)}function Dh(e,t,n,o,s,r,i,a,{p:l,um:u,o:{createElement:c}}){const d=t.suspense=e.suspense;d.vnode=t,t.el=e.el;const p=t.ssContent,f=t.ssFallback,{activeBranch:b,pendingBranch:_,isInFallback:A,isHydrating:E}=d;if(_)d.pendingBranch=p,Ct(p,_)?(l(_,p,d.hiddenContainer,null,s,d,r,i,a),d.deps<=0?d.resolve():A&&(E||(l(b,f,n,o,s,null,r,i,a),eo(d,f)))):(d.pendingId=qr++,E?(d.isHydrating=!1,d.activeBranch=_):u(_,s,d),d.deps=0,d.effects.length=0,d.hiddenContainer=c("div"),A?(l(null,p,d.hiddenContainer,null,s,d,r,i,a),d.deps<=0?d.resolve():(l(b,f,n,o,s,null,r,i,a),eo(d,f))):b&&Ct(p,b)?(l(b,p,n,o,s,d,r,i,a),d.resolve(!0)):(l(null,p,d.hiddenContainer,null,s,d,r,i,a),d.deps<=0&&d.resolve()));else if(b&&Ct(p,b))l(b,p,n,o,s,d,r,i,a),eo(d,p);else if(Mo(t,"onPending"),d.pendingBranch=p,p.shapeFlag&512?d.pendingId=p.component.suspenseId:d.pendingId=qr++,l(null,p,d.hiddenContainer,null,s,d,r,i,a),d.deps<=0)d.resolve();else{const{timeout:C,pendingId:h}=d;C>0?setTimeout(()=>{d.pendingId===h&&d.fallback(f)},C):C===0&&d.fallback(f)}}function $u(e,t,n,o,s,r,i,a,l,u,c=!1){const{p:d,m:p,um:f,n:b,o:{parentNode:_,remove:A}}=u;let E;const C=Mh(e);C&&t&&t.pendingBranch&&(E=t.pendingId,t.deps++);const h=e.props?Nc(e.props.timeout):void 0,m=r,k={vnode:e,parent:t,parentComponent:n,namespace:i,container:o,hiddenContainer:s,deps:0,pendingId:qr++,timeout:typeof h=="number"?h:-1,activeBranch:null,pendingBranch:null,isInFallback:!c,isHydrating:c,isUnmounted:!1,effects:[],resolve(S=!1,L=!1){const{vnode:O,activeBranch:I,pendingBranch:M,pendingId:K,effects:N,parentComponent:V,container:se}=k;let ae=!1;k.isHydrating?k.isHydrating=!1:S||(ae=I&&M.transition&&M.transition.mode==="out-in",ae&&(I.transition.afterLeave=()=>{K===k.pendingId&&(p(M,se,r===m?b(I):r,0),Br(N))}),I&&(_(I.el)===se&&(r=b(I)),f(I,V,k,!0)),ae||p(M,se,r,0)),eo(k,M),k.pendingBranch=null,k.isInFallback=!1;let Y=k.parent,te=!1;for(;Y;){if(Y.pendingBranch){Y.effects.push(...N),te=!0;break}Y=Y.parent}!te&&!ae&&Br(N),k.effects=[],C&&t&&t.pendingBranch&&E===t.pendingId&&(t.deps--,t.deps===0&&!L&&t.resolve()),Mo(O,"onResolve")},fallback(S){if(!k.pendingBranch)return;const{vnode:L,activeBranch:O,parentComponent:I,container:M,namespace:K}=k;Mo(L,"onFallback");const N=b(O),V=()=>{k.isInFallback&&(d(null,S,M,N,I,null,K,a,l),eo(k,S))},se=S.transition&&S.transition.mode==="out-in";se&&(O.transition.afterLeave=V),k.isInFallback=!0,f(O,I,null,!0),se||V()},move(S,L,O){k.activeBranch&&p(k.activeBranch,S,L,O),k.container=S},next(){return k.activeBranch&&b(k.activeBranch)},registerDep(S,L,O){const I=!!k.pendingBranch;I&&k.deps++;const M=S.vnode.el;S.asyncDep.catch(K=>{uo(K,S,0)}).then(K=>{if(S.isUnmounted||k.isUnmounted||k.pendingId!==S.suspenseId)return;S.asyncResolved=!0;const{vnode:N}=S;Jr(S,K),M&&(N.el=M);const V=!M&&S.subTree.el;L(S,N,_(M||S.subTree.el),M?null:b(S.subTree),k,i,O),V&&A(V),Gs(S,N.el),I&&--k.deps===0&&k.resolve()})},unmount(S,L){k.isUnmounted=!0,k.activeBranch&&f(k.activeBranch,n,S,L),k.pendingBranch&&f(k.pendingBranch,n,S,L)}};return k}function Nh(e,t,n,o,s,r,i,a,l){const u=t.suspense=$u(t,o,n,e.parentNode,document.createElement("div"),null,s,r,i,a,!0),c=l(e,u.pendingBranch=t.ssContent,n,u,r,i);return u.deps===0&&u.resolve(!1,!0),c}function xh(e){const{shapeFlag:t,children:n}=e,o=t&32;e.ssContent=Ma(o?n.default:n),e.ssFallback=o?Ma(n.fallback):_e(Ne)}function Ma(e){let t;if(oe(e)){const n=so&&e._c;n&&(e._d=!1,yt()),e=e(),n&&(e._d=!0,t=at,Wu())}return Z(e)&&(e=Ah(e)),e=ft(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter(n=>n!==e)),e}function Bu(e,t){t&&t.pendingBranch?Z(e)?t.effects.push(...e):t.effects.push(e):Br(e)}function eo(e,t){e.activeBranch=t;const{vnode:n,parentComponent:o}=e;let s=t.el;for(;!s&&t.component;)t=t.component.subTree,s=t.el;n.el=s,o&&o.subTree===n&&(o.vnode.el=s,Gs(o,s))}function Mh(e){const t=e.props&&e.props.suspensible;return t!=null&&t!==!1}const Ve=Symbol.for("v-fgt"),mn=Symbol.for("v-txt"),Ne=Symbol.for("v-cmt"),Ao=Symbol.for("v-stc"),Po=[];let at=null;function yt(e=!1){Po.push(at=e?null:[])}function Wu(){Po.pop(),at=Po[Po.length-1]||null}let so=1;function Fa(e,t=!1){so+=e,e<0&&at&&t&&(at.hasOnce=!0)}function Vu(e){return e.dynamicChildren=so>0?at||Xn:null,Wu(),so>0&&at&&at.push(e),e}function ju(e,t,n,o,s,r){return Vu(ln(e,t,n,o,s,r,!0))}function qt(e,t,n,o,s){return Vu(_e(e,t,n,o,s,!0))}function gn(e){return e?e.__v_isVNode===!0:!1}function Ct(e,t){return e.type===t.type&&e.key===t.key}const Gu=({key:e})=>e??null,ps=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Te(e)||xe(e)||oe(e)?{i:Ue,r:e,k:t,f:!!n}:e:null);function ln(e,t=null,n=null,o=0,s=null,r=e===Ve?0:1,i=!1,a=!1){const l={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Gu(t),ref:t&&ps(t),scopeId:iu,slotScopeIds:null,children:n,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:r,patchFlag:o,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:Ue};return a?(zi(l,n),r&128&&e.normalize(l)):n&&(l.shapeFlag|=Te(n)?8:16),so>0&&!i&&at&&(l.patchFlag>0||r&6)&&l.patchFlag!==32&&at.push(l),l}const _e=Fh;function Fh(e,t=null,n=null,o=0,s=null,r=!1){if((!e||e===wu)&&(e=Ne),gn(e)){const a=wt(e,t,!0);return n&&zi(a,n),so>0&&!r&&at&&(a.shapeFlag&6?at[at.indexOf(e)]=a:at.push(a)),a.patchFlag=-2,a}if(qh(e)&&(e=e.__vccOpts),t){t=Uh(t);let{class:a,style:l}=t;a&&!Te(a)&&(t.class=Mi(a)),Se(l)&&(Vi(l)&&!Z(l)&&(l=Ge({},l)),t.style=xi(l))}const i=Te(e)?1:Cs(e)?128:au(e)?64:Se(e)?4:oe(e)?2:0;return ln(e,t,n,o,s,i,r,!0)}function Uh(e){return e?Vi(e)||Pu(e)?Ge({},e):e:null}function wt(e,t,n=!1,o=!1){const{props:s,ref:r,patchFlag:i,children:a,transition:l}=e,u=t?Ku(s||{},t):s,c={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&Gu(u),ref:t&&t.ref?n&&r?Z(r)?r.concat(ps(t)):[r,ps(t)]:ps(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ve?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:l,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&wt(e.ssContent),ssFallback:e.ssFallback&&wt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return l&&o&&oo(c,l.clone(c)),c}function Qi(e=" ",t=0){return _e(mn,null,e,t)}function Hh(e,t){const n=_e(Ao,null,e);return n.staticCount=t,n}function $h(e="",t=!1){return t?(yt(),qt(Ne,null,e)):_e(Ne,null,e)}function ft(e){return e==null||typeof e=="boolean"?_e(Ne):Z(e)?_e(Ve,null,e.slice()):gn(e)?cn(e):_e(mn,null,String(e))}function cn(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:wt(e)}function zi(e,t){let n=0;const{shapeFlag:o}=e;if(t==null)t=null;else if(Z(t))n=16;else if(typeof t=="object")if(o&65){const s=t.default;s&&(s._c&&(s._d=!1),zi(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!Pu(t)?t._ctx=Ue:s===3&&Ue&&(Ue.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else oe(t)?(t={default:t,_ctx:Ue},n=32):(t=String(t),o&64?(n=16,t=[Qi(t)]):n=8);e.children=t,e.shapeFlag|=n}function Ku(...e){const t={};for(let n=0;n<e.length;n++){const o=e[n];for(const s in o)if(s==="class")t.class!==o.class&&(t.class=Mi([t.class,o.class]));else if(s==="style")t.style=xi([t.style,o.style]);else if(Ko(s)){const r=t[s],i=o[s];i&&r!==i&&!(Z(r)&&r.includes(i))&&(t[s]=r?[].concat(r,i):i)}else s!==""&&(t[s]=o[s])}return t}function it(e,t,n,o=null){It(e,t,7,[n,o])}const Bh=Cu();let Wh=0;function Vh(e,t,n){const o=e.type,s=(t?t.appContext:e.appContext)||Bh,r={uid:Wh++,vnode:e,type:o,parent:t,appContext:s,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new Uc(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(s.provides),ids:t?t.ids:["",0,0],accessCache:null,renderCache:[],components:null,directives:null,propsOptions:Lu(o,s),emitsOptions:Hu(o,s),emit:null,emitted:null,propsDefaults:ve,inheritAttrs:o.inheritAttrs,ctx:ve,data:ve,props:ve,attrs:ve,slots:ve,refs:ve,setupState:ve,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return r.ctx={_:r},r.root=t?t.root:r,r.emit=Th.bind(null,r),e.ce&&e.ce(r),r}let Fe=null;const pt=()=>Fe||Ue;let Ts,Yr;{const e=Hs(),t=(n,o)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(o),r=>{s.length>1?s.forEach(i=>i(r)):s[0](r)}};Ts=t("__VUE_INSTANCE_SETTERS__",n=>Fe=n),Yr=t("__VUE_SSR_SETTERS__",n=>ro=n)}const Fn=e=>{const t=Fe;return Ts(e),e.scope.on(),()=>{e.scope.off(),Ts(t)}},Xr=()=>{Fe&&Fe.scope.off(),Ts(null)};function qu(e){return e.vnode.shapeFlag&4}let ro=!1;function jh(e,t=!1,n=!1){t&&Yr(t);const{props:o,children:s}=e.vnode,r=qu(e);fh(e,o,r,t),gh(e,s,n||t);const i=r?Gh(e,t):void 0;return t&&Yr(!1),i}function Gh(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,oh);const{setup:o}=n;if(o){Qt();const s=e.setupContext=o.length>1?Xu(e):null,r=Fn(e),i=Xo(o,e,0,[e.props,s]),a=Di(i);if(zt(),r(),(a||e.sp)&&!pn(e)&&Gi(e),a){if(i.then(Xr,Xr),t)return i.then(l=>{Jr(e,l)}).catch(l=>{uo(l,e,0)});e.asyncDep=i}else Jr(e,i)}else Yu(e)}function Jr(e,t,n){oe(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Se(t)&&(e.setupState=nu(t)),Yu(e)}function Yu(e,t,n){const o=e.type;e.render||(e.render=o.render||Mt);{const s=Fn(e);Qt();try{rh(e)}finally{zt(),s()}}}const Kh={get(e,t){return Je(e,"get",""),e[t]}};function Xu(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Kh),slots:e.slots,emit:e.emit,expose:t}}function Ks(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(nu(Cp(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in To)return To[n](e)},has(t,n){return n in t||n in To}})):e.proxy}function Qr(e,t=!0){return oe(e)?e.displayName||e.name:e.name||t&&e.__name}function qh(e){return oe(e)&&"__vccOpts"in e}const ue=(e,t)=>Np(e,t,ro);function ke(e,t,n){const o=arguments.length;return o===2?Se(t)&&!Z(t)?gn(t)?_e(e,null,[t]):_e(e,t):_e(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):o===3&&gn(n)&&(n=[n]),_e(e,t,n))}const Yh="3.5.14";let zr;const Ua=typeof window<"u"&&window.trustedTypes;if(Ua)try{zr=Ua.createPolicy("vue",{createHTML:e=>e})}catch{}const Ju=zr?e=>zr.createHTML(e):e=>e,Xh="http://www.w3.org/2000/svg",Jh="http://www.w3.org/1998/Math/MathML",jt=typeof document<"u"?document:null,Ha=jt&&jt.createElement("template"),Qh={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const s=t==="svg"?jt.createElementNS(Xh,e):t==="mathml"?jt.createElementNS(Jh,e):n?jt.createElement(e,{is:n}):jt.createElement(e);return e==="select"&&o&&o.multiple!=null&&s.setAttribute("multiple",o.multiple),s},createText:e=>jt.createTextNode(e),createComment:e=>jt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>jt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,o,s,r){const i=n?n.previousSibling:t.lastChild;if(s&&(s===r||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===r||!(s=s.nextSibling)););else{Ha.innerHTML=Ju(o==="svg"?`<svg>${e}</svg>`:o==="mathml"?`<math>${e}</math>`:e);const a=Ha.content;if(o==="svg"||o==="mathml"){const l=a.firstChild;for(;l.firstChild;)a.appendChild(l.firstChild);a.removeChild(l)}t.insertBefore(a,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},on="transition",yo="animation",Fo=Symbol("_vtc"),Qu={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},zh=Ge({},lu,Qu),Zh=e=>(e.displayName="Transition",e.props=zh,e),em=Zh((e,{slots:t})=>ke(Wp,tm(e),t)),En=(e,t=[])=>{Z(e)?e.forEach(n=>n(...t)):e&&e(...t)},$a=e=>e?Z(e)?e.some(t=>t.length>1):e.length>1:!1;function tm(e){const t={};for(const N in e)N in Qu||(t[N]=e[N]);if(e.css===!1)return t;const{name:n="v",type:o,duration:s,enterFromClass:r=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:a=`${n}-enter-to`,appearFromClass:l=r,appearActiveClass:u=i,appearToClass:c=a,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:f=`${n}-leave-to`}=e,b=nm(s),_=b&&b[0],A=b&&b[1],{onBeforeEnter:E,onEnter:C,onEnterCancelled:h,onLeave:m,onLeaveCancelled:k,onBeforeAppear:S=E,onAppear:L=C,onAppearCancelled:O=h}=t,I=(N,V,se,ae)=>{N._enterCancelled=ae,Cn(N,V?c:a),Cn(N,V?u:i),se&&se()},M=(N,V)=>{N._isLeaving=!1,Cn(N,d),Cn(N,f),Cn(N,p),V&&V()},K=N=>(V,se)=>{const ae=N?L:C,Y=()=>I(V,N,se);En(ae,[V,Y]),Ba(()=>{Cn(V,N?l:r),Ht(V,N?c:a),$a(ae)||Wa(V,o,_,Y)})};return Ge(t,{onBeforeEnter(N){En(E,[N]),Ht(N,r),Ht(N,i)},onBeforeAppear(N){En(S,[N]),Ht(N,l),Ht(N,u)},onEnter:K(!1),onAppear:K(!0),onLeave(N,V){N._isLeaving=!0;const se=()=>M(N,V);Ht(N,d),N._enterCancelled?(Ht(N,p),Ga()):(Ga(),Ht(N,p)),Ba(()=>{N._isLeaving&&(Cn(N,d),Ht(N,f),$a(m)||Wa(N,o,A,se))}),En(m,[N,se])},onEnterCancelled(N){I(N,!1,void 0,!0),En(h,[N])},onAppearCancelled(N){I(N,!0,void 0,!0),En(O,[N])},onLeaveCancelled(N){M(N),En(k,[N])}})}function nm(e){if(e==null)return null;if(Se(e))return[mr(e.enter),mr(e.leave)];{const t=mr(e);return[t,t]}}function mr(e){return Nc(e)}function Ht(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Fo]||(e[Fo]=new Set)).add(t)}function Cn(e,t){t.split(/\s+/).forEach(o=>o&&e.classList.remove(o));const n=e[Fo];n&&(n.delete(t),n.size||(e[Fo]=void 0))}function Ba(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let om=0;function Wa(e,t,n,o){const s=e._endId=++om,r=()=>{s===e._endId&&o()};if(n!=null)return setTimeout(r,n);const{type:i,timeout:a,propCount:l}=sm(e,t);if(!i)return o();const u=i+"end";let c=0;const d=()=>{e.removeEventListener(u,p),r()},p=f=>{f.target===e&&++c>=l&&d()};setTimeout(()=>{c<l&&d()},a+1),e.addEventListener(u,p)}function sm(e,t){const n=window.getComputedStyle(e),o=b=>(n[b]||"").split(", "),s=o(`${on}Delay`),r=o(`${on}Duration`),i=Va(s,r),a=o(`${yo}Delay`),l=o(`${yo}Duration`),u=Va(a,l);let c=null,d=0,p=0;t===on?i>0&&(c=on,d=i,p=r.length):t===yo?u>0&&(c=yo,d=u,p=l.length):(d=Math.max(i,u),c=d>0?i>u?on:yo:null,p=c?c===on?r.length:l.length:0);const f=c===on&&/\b(transform|all)(,|$)/.test(o(`${on}Property`).toString());return{type:c,timeout:d,propCount:p,hasTransform:f}}function Va(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max(...t.map((n,o)=>ja(n)+ja(e[o])))}function ja(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Ga(){return document.body.offsetHeight}function rm(e,t,n){const o=e[Fo];o&&(t=(t?[t,...o]:[...o]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const As=Symbol("_vod"),zu=Symbol("_vsh"),wS={beforeMount(e,{value:t},{transition:n}){e[As]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):vo(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:o}){!t!=!n&&(o?t?(o.beforeEnter(e),vo(e,!0),o.enter(e)):o.leave(e,()=>{vo(e,!1)}):vo(e,t))},beforeUnmount(e,{value:t}){vo(e,t)}};function vo(e,t){e.style.display=t?e[As]:"none",e[zu]=!t}const im=Symbol(""),am=/(^|;)\s*display\s*:/;function lm(e,t,n){const o=e.style,s=Te(n);let r=!1;if(n&&!s){if(t)if(Te(t))for(const i of t.split(";")){const a=i.slice(0,i.indexOf(":")).trim();n[a]==null&&hs(o,a,"")}else for(const i in t)n[i]==null&&hs(o,i,"");for(const i in n)i==="display"&&(r=!0),hs(o,i,n[i])}else if(s){if(t!==n){const i=o[im];i&&(n+=";"+i),o.cssText=n,r=am.test(n)}}else t&&e.removeAttribute("style");As in e&&(e[As]=r?o.display:"",e[zu]&&(o.display="none"))}const Ka=/\s*!important$/;function hs(e,t,n){if(Z(n))n.forEach(o=>hs(e,t,o));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const o=cm(e,t);Ka.test(n)?e.setProperty(vn(o),n.replace(Ka,""),"important"):e[o]=n}}const qa=["Webkit","Moz","ms"],gr={};function cm(e,t){const n=gr[t];if(n)return n;let o=_t(t);if(o!=="filter"&&o in e)return gr[t]=o;o=Us(o);for(let s=0;s<qa.length;s++){const r=qa[s]+o;if(r in e)return gr[t]=r}return t}const Ya="http://www.w3.org/1999/xlink";function Xa(e,t,n,o,s,r=sp(t)){o&&t.startsWith("xlink:")?n==null?e.removeAttributeNS(Ya,t.slice(6,t.length)):e.setAttributeNS(Ya,t,n):n==null||r&&!xc(n)?e.removeAttribute(t):e.setAttribute(t,r?"":en(n)?String(n):n)}function Ja(e,t,n,o,s){if(t==="innerHTML"||t==="textContent"){n!=null&&(e[t]=t==="innerHTML"?Ju(n):n);return}const r=e.tagName;if(t==="value"&&r!=="PROGRESS"&&!r.includes("-")){const a=r==="OPTION"?e.getAttribute("value")||"":e.value,l=n==null?e.type==="checkbox"?"on":"":String(n);(a!==l||!("_value"in e))&&(e.value=l),n==null&&e.removeAttribute(t),e._value=n;return}let i=!1;if(n===""||n==null){const a=typeof e[t];a==="boolean"?n=xc(n):n==null&&a==="string"?(n="",i=!0):a==="number"&&(n=0,i=!0)}try{e[t]=n}catch{}i&&e.removeAttribute(s||t)}function jn(e,t,n,o){e.addEventListener(t,n,o)}function um(e,t,n,o){e.removeEventListener(t,n,o)}const Qa=Symbol("_vei");function dm(e,t,n,o,s=null){const r=e[Qa]||(e[Qa]={}),i=r[t];if(o&&i)i.value=o;else{const[a,l]=fm(t);if(o){const u=r[t]=mm(o,s);jn(e,a,u,l)}else i&&(um(e,a,i,l),r[t]=void 0)}}const za=/(?:Once|Passive|Capture)$/;function fm(e){let t;if(za.test(e)){t={};let o;for(;o=e.match(za);)e=e.slice(0,e.length-o[0].length),t[o[0].toLowerCase()]=!0}return[e[2]===":"?e.slice(3):vn(e.slice(2)),t]}let yr=0;const pm=Promise.resolve(),hm=()=>yr||(pm.then(()=>yr=0),yr=Date.now());function mm(e,t){const n=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=n.attached)return;It(gm(o,n.value),t,5,[o])};return n.value=e,n.attached=hm(),n}function gm(e,t){if(Z(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(o=>s=>!s._stopped&&o&&o(s))}else return t}const Za=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,ym=(e,t,n,o,s,r)=>{const i=s==="svg";t==="class"?rm(e,o,i):t==="style"?lm(e,n,o):Ko(t)?Ri(t)||dm(e,t,n,o,r):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):vm(e,t,o,i))?(Ja(e,t,o),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Xa(e,t,o,i,r,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!Te(o))?Ja(e,_t(t),o,r,t):(t==="true-value"?e._trueValue=o:t==="false-value"&&(e._falseValue=o),Xa(e,t,o,i))};function vm(e,t,n,o){if(o)return!!(t==="innerHTML"||t==="textContent"||t in e&&Za(t)&&oe(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const s=e.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return Za(t)&&Te(n)?!1:t in e}const el=e=>{const t=e.props["onUpdate:modelValue"]||!1;return Z(t)?n=>zn(t,n):t};function bm(e){e.target.composing=!0}function tl(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const vr=Symbol("_assign"),_S={created(e,{modifiers:{lazy:t,trim:n,number:o}}
3,s){e[vr]=el(s);const r=o||s.props&&s.props.type==="number";jn(e,t?"change":"input",i=>{if(i.target.composing)return;let a=e.value;n&&(a=a.trim()),r&&(a=Fr(a)),e[vr](a)}),n&&jn(e,"change",()=>{e.value=e.value.trim()}),t||(jn(e,"compositionstart",bm),jn(e,"compositionend",tl),jn(e,"change",tl))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:o,trim:s,number:r}},i){if(e[vr]=el(i),e.composing)return;const a=(r||e.type==="number")&&!/^0\d/.test(e.value)?Fr(e.value):e.value,l=t??"";a!==l&&(document.activeElement===e&&e.type!=="range"&&(o&&t===n||s&&e.value.trim()===l)||(e.value=l))}},wm=["ctrl","shift","alt","meta"],_m={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)=>wm.some(n=>e[`${n}Key`]&&!t.includes(n))},kS=(e,t)=>{const n=e._withMods||(e._withMods={}),o=t.join(".");return n[o]||(n[o]=(s,...r)=>{for(let i=0;i<t.length;i++){const a=_m[t[i]];if(a&&a(s,t))return}return e(s,...r)})},km={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},SS=(e,t)=>{const n=e._withKeys||(e._withKeys={}),o=t.join(".");return n[o]||(n[o]=s=>{if(!("key"in s))return;const r=vn(s.key);if(t.some(i=>i===r||km[i]===r))return e(s)})},Zu=Ge({patchProp:ym},Qh);let Io,nl=!1;function Sm(){return Io||(Io=vh(Zu))}function Em(){return Io=nl?Io:bh(Zu),nl=!0,Io}const Cm=(...e)=>{const t=Sm().createApp(...e),{mount:n}=t;return t.mount=o=>{const s=td(o);if(!s)return;const r=t._component;!oe(r)&&!r.render&&!r.template&&(r.template=s.innerHTML),s.nodeType===1&&(s.textContent="");const i=n(s,!1,ed(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),i},t},Tm=(...e)=>{const t=Em().createApp(...e),{mount:n}=t;return t.mount=o=>{const s=td(o);if(s)return n(s,!0,ed(s))},t};function ed(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function td(e){return Te(e)?document.querySelector(e):e}const Am=/"(?:_|\\u0{2}5[Ff]){2}(?:p|\\u0{2}70)(?:r|\\u0{2}72)(?:o|\\u0{2}6[Ff])(?:t|\\u0{2}74)(?:o|\\u0{2}6[Ff])(?:_|\\u0{2}5[Ff]){2}"\s*:/,Pm=/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/,Im=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/;function Lm(e,t){if(e==="__proto__"||e==="constructor"&&t&&typeof t=="object"&&"prototype"in t){Rm(e);return}return t}function Rm(e){console.warn(`[destr] Dropping "${e}" key to prevent prototype pollution.`)}function Ps(e,t={}){if(typeof e!="string")return e;if(e[0]==='"'&&e[e.length-1]==='"'&&e.indexOf("\\")===-1)return e.slice(1,-1);const n=e.trim();if(n.length<=9)switch(n.toLowerCase()){case"true":return!0;case"false":return!1;case"undefined":return;case"null":return null;case"nan":return Number.NaN;case"infinity":return Number.POSITIVE_INFINITY;case"-infinity":return Number.NEGATIVE_INFINITY}if(!Im.test(e)){if(t.strict)throw new SyntaxError("[destr] Invalid JSON");return e}try{if(Am.test(e)||Pm.test(e)){if(t.strict)throw new Error("[destr] Possible prototype pollution");return JSON.parse(e,Lm)}return JSON.parse(e)}catch(o){if(t.strict)throw o;return e}}const nd=/#/g,od=/&/g,Om=/\//g,Dm=/=/g,Nm=/\?/g,qs=/\+/g,xm=/%5e/gi,Mm=/%60/gi,Fm=/%7c/gi,Um=/%20/gi,Hm=/%2f/gi,$m=/%252f/gi;function sd(e){return encodeURI(""+e).replace(Fm,"|")}function Zr(e){return sd(typeof e=="string"?e:JSON.stringify(e)).replace(qs,"%2B").replace(Um,"+").replace(nd,"%23").replace(od,"%26").replace(Mm,"`").replace(xm,"^").replace(Om,"%2F")}function br(e){return Zr(e).replace(Dm,"%3D")}function Bm(e){return sd(e).replace(nd,"%23").replace(Nm,"%3F").replace($m,"%2F").replace(od,"%26").replace(qs,"%2B")}function Uo(e=""){try{return decodeURIComponent(""+e)}catch{return""+e}}function Wm(e){return Uo(e.replace(Hm,"%252F"))}function Vm(e){return Uo(e.replace(qs," "))}function jm(e){return Uo(e.replace(qs," "))}function Zi(e=""){const t=Object.create(null);e[0]==="?"&&(e=e.slice(1));for(const n of e.split("&")){const o=n.match(/([^=]+)=?(.*)/)||[];if(o.length<2)continue;const s=Vm(o[1]);if(s==="__proto__"||s==="constructor")continue;const r=jm(o[2]||"");t[s]===void 0?t[s]=r:Array.isArray(t[s])?t[s].push(r):t[s]=[t[s],r]}return t}function Gm(e,t){return(typeof t=="number"||typeof t=="boolean")&&(t=String(t)),t?Array.isArray(t)?t.map(n=>`${br(e)}=${Zr(n)}`).join("&"):`${br(e)}=${Zr(t)}`:br(e)}function Km(e){return Object.keys(e).filter(t=>e[t]!==void 0).map(t=>
3Gm(t,e[t])).filter(Boolean).join("&")}const qm=/^[\s\w\0+.-]{2,}:([/\\]{1,2})/,Ym=/^[\s\w\0+.-]{2,}:([/\\]{2})?/,Xm=/^([/\\]\s*){2,}[^/\\]/,Jm=/^[\s\0]*(blob|data|javascript|vbscript):$/i,Qm=/\/$|\/\?|\/#/,zm=/^\.?\//;function nn(e,t={}){return typeof t=="boolean"&&(t={acceptRelative:t}),t.strict?qm.test(e):Ym.test(e)||(t.acceptRelative?Xm.test(e):!1)}function Is(e){return!!e&&Jm.test(e)}function ei(e="",t){return t?Qm.test(e):e.endsWith("/")}function Ho(e="",t){if(!t)return(ei(e)?e.slice(0,-1):e)||"/";if(!ei(e,!0))return e||"/";let n=e,o="";const s=e.indexOf("#");s!==-1&&(n=e.slice(0,s),o=e.slice(s));const[r,...i]=n.split("?");return((r.endsWith("/")?r.slice(0,-1):r)||"/")+(i.length>0?`?${i.join("?")}`:"")+o}function rd(e="",t){if(!t)return e.endsWith("/")?e:e+"/";if(ei(e,!0))return e||"/";let n=e,o="";const s=e.indexOf("#");if(s!==-1&&(n=e.slice(0,s),o=e.slice(s),!n))return o;const[r,...i]=n.split("?");return r+"/"+(i.length>0?`?${i.join("?")}`:"")+o}function Zm(e,t){if(ad(t)||nn(e))return e;const n=Ho(t);if(e.startsWith(n)){const o=e[n.length];if(!o||o==="/"||o==="?")return e}return Ys(n,e)}function ol(e,t){if(ad(t))return e;const n=Ho(t);if(!e.startsWith(n))return e;const o=e[n.length];return o&&o!=="/"&&o!=="?"?e:"/"+e.slice(n.length).replace(/^\/+/,"")}function id(e,t){const n=Xs(e),o={...Zi(n.search),...t};return n.search=Km(o),dd(n)}function ad(e){return!e||e==="/"}function eg(e){return e&&e!=="/"}function Ys(e,...t){let n=e||"";for(const o of t.filter(s=>eg(s)))if(n){const s=o.replace(zm,"");n=rd(n)+s}else n=o;return n}function ld(...e){const t=/\/(?!\/)/,n=e.filter(Boolean),o=[];let s=0;for(const i of n)if(!(!i||i==="/")){for(const[a,l]of i.split(t).entries())if(!(!l||l===".")){if(l===".."){if(o.length===1&&nn(o[0]))continue;o.pop(),s--;continue}if(a===1&&o[o.length-1]?.endsWith(":/")){o[o.length-1]+="/"+l;continue}o.push(l),s++}}let r=o.join("/");return s>=0?n[0]?.startsWith("/")&&!r.startsWith("/")?r="/"+r:n[0]?.startsWith("./")&&!r.startsWith("./")&&(r="./"+r):r="../".repeat(-1*s)+r,n[n.length-1]?.endsWith("/")&&!r.endsWith("/")&&(r+="/"),r}function cd(e,t){return Uo(Ho(e))===Uo(Ho(t))}function sl(e){return dd({...Xs(e),hash:""})}const ud=Symbol.for("ufo:protocolRelative");function Xs(e="",t){const n=e.match(/^[\s\0]*(blob:|data:|javascript:|vbscript:)(.*)/i);if(n){const[,d,p=""]=n;return{protocol:d.toLowerCase(),pathname:p,href:d+p,auth:"",host:"",search:"",hash:""}}if(!nn(e,{acceptRelative:!0}))return rl(e);const[,o="",s,r=""]=e.replace(/\\/g,"/").match(/^[\s\0]*([\w+.-]{2,}:)?\/\/([^/@]+@)?(.*)/)||[];let[,i="",a=""]=r.match(/([^#/?]*)(.*)?/)||[];o==="file:"&&(a=a.replace(/\/(?=[A-Za-z]:)/,""));const{pathname:l,search:u,hash:c}=rl(a);return{protocol:o.toLowerCase(),auth:s?s.slice(0,Math.max(0,s.length-1)):"",host:i,pathname:l,search:u,hash:c,[ud]:!o}}function rl(e=""){const[t="",n="",o=""]=(e.match(/([^#?]*)(\?[^#]*)?(#.*)?/)||[]).splice(1);return{pathname:t,search:n,hash:o}}function dd(e){const t=e.pathname||"",n=e.search?(e.search.startsWith("?")?"":"?")+e.search:"",o=e.hash||"",s=e.auth?e.auth+"@":"",r=e.host||"";return(e.protocol||e[ud]?(e.protocol||"")+"//":"")+s+r+t+n+o}class tg extends Error{constructor(t,n){super(t,n),this.name="FetchError",n?.cause&&!this.cause&&(this.cause=n.cause)}}function ng(e){const t=e.error?.message||e.error?.toString()||"",n=e.request?.method||e.options?.method||"GET",o=e.request?.url||String(e.request)||"/",s=`[${n}] ${JSON.stringify(o)}`,r=e.response?`${e.response.status} ${e.response.statusText}`:"<no response>",i=`${s}: ${r}${t?` ${t}`:""}`,a=new tg(i,e.error?{cause:e.error}:void 0);for(const l of["request","options","response"])Object.defineProperty(a,l,{get(){return e[l]}});for(const[l,u]of[["data","_data"],["status","status"],["statusCode","status"],["statusText","statusText"],["statusMessage","statusText"]])Object.defineProperty(a,l,{get(){return e.response&&e.response[u]}});return a}const og=new Set(Object.freeze(["PATCH","POST","PUT","DELETE"]));function il(e="GET"){return og.has(e.toUpperCase())}function sg(e){if(e===void 0)return!1;const t=typeof e;return t==="string"||t==="number"||t==="boolean"||t===null?!0:t!=="object"?!1:Array.isArray(e)?!0:e.buffer||e instanceof FormData||e instanceof URLSearchParams?!1:e.constructor&&e.constructor.name==="Object"||typeof e.toJSON=="function"}const rg=new Set(["image/svg","application/xml","application/xhtml","application/html"]),ig=/^application\/(?:[\w!#$%&*.^`~-]*\+)?json(;.+)?$/i;function ag(e=""){if(!e)return"json";const t=e.split(";").shift()||"";return ig.test(t)?"json":t==="text/event-stream"?"stream":rg.has(t)||t.startsWith("text/")?"text":"blob"}function lg(e,t,n,o){const s=cg(t?.headers??e?.headers,n?.headers,o);let r;return(n?.query||n?.params||t?.params||t?.query)&&(r={...n?.params,...n?.query,...t?.params,...t?.query}),{...n,...t,query:r,params:r,headers:s}}function cg(e,t,n){if(!t)return new n(e);const o=new n(t);if(e)for(const[s,r]of Symbol.iterator in e||Array.isArray(e)?e:new n(e))o.set(s,r);return o}async function rs(e,t){if(t)if(Array.isArray(t))for(const n of t)await n(e);else await t(e)}const ug=new Set([408,409,425,429,500,502,503,504]),dg=new Set([101,204,205,304]);function fd(e={}){const{fetch:t=globalThis.fetch,Headers:n=globalThis.Headers,AbortController:o=globalThis.AbortController}=e;async function s(a){const l=a.error&&a.error.name==="AbortError"&&!a.options.timeout||!1;if(a.options.retry!==!1&&!l){let c;typeof a.options.retry=="number"?c=a.options.retry:c=il(a.options.method)?0:1;const d=a.response&&a.response.status||500;if(c>0&&(Array.isArray(a.options.retryStatusCodes)?a.options.retryStatusCodes.includes(d):ug.has(d))){const p=typeof a.options.retryDelay=="function"?a.options.retryDelay(a):a.options.retryDelay||0;return p>0&&await new Promise(f=>setTimeout(f,p)),r(a.request,{...a.options,retry:c-1})}}const u=ng(a);throw Error.captureStackTrace&&Error.captureStackTrace(u,r),u}const r=async function(l,u={}){const c={request:l,options:lg(l,u,e.defaults,n),response:void 0,error:void 0};if(c.options.method&&(c.options.method=c.options.method.toUpperCase()),c.options.onRequest&&(await rs(c,c.options.onRequest),c.options.headers instanceof n||(c.options.headers=new n(c.options.headers||{}))),typeof c.request=="string"&&(c.options.baseURL&&(c.request=Zm(c.request,c.options.baseURL)),c.options.query&&(c.request=id(c.request,c.options.query),delete c.options.query),"query"in c.options&&delete c.options.query,"params"in c.options&&delete c.options.params),c.options.body&&il(c.options.method))if(sg(c.options.body)){const f=c.options.headers.get("content-type");typeof c.options.body!="string"&&(c.options.body=f==="application/x-www-form-urlencoded"?new URLSearchParams(c.options.body).toString():JSON.stringify(c.options.body)),f||c.options.headers.set("content-type","application/json"),c.options.headers.has("accept")||c.options.headers.set("accept","application/json")}else("pipeTo"in c.options.body&&typeof c.options.body.pipeTo=="function"||typeof c.options.body.pipe=="function")&&("duplex"in c.options||(c.options.duplex="half"));let d;if(!c.options.signal&&c.options.timeout){const f=new o;d=setTimeout(()=>{const b=new Error("[TimeoutError]: The operation was aborted due to timeout");b.name="TimeoutError",b.code=23,f.abort(b)}
3,c.options.timeout),c.options.signal=f.signal}try{c.response=await t(c.request,c.options)}catch(f){return c.error=f,c.options.onRequestError&&await rs(c,c.options.onRequestError),await s(c)}finally{d&&clearTimeout(d)}if((c.response.body||c.response._bodyInit)&&!dg.has(c.response.status)&&c.options.method!=="HEAD"){const f=(c.options.parseResponse?"json":c.options.responseType)||ag(c.response.headers.get("content-type")||"");switch(f){case"json":{const b=await c.response.text(),_=c.options.parseResponse||Ps;c.response._data=_(b);break}case"stream":{c.response._data=c.response.body||c.response._bodyInit;break}default:c.response._data=await c.response[f]()}}return c.options.onResponse&&await rs(c,c.options.onResponse),!c.options.ignoreResponseError&&c.response.status>=400&&c.response.status<600?(c.options.onResponseError&&await rs(c,c.options.onResponseError),await s(c)):c.response},i=async function(l,u){return(await r(l,u))._data};return i.raw=r,i.native=(...a)=>t(...a),i.create=(a={},l={})=>fd({...e,...l,defaults:{...e.defaults,...l.defaults,...a}}),i}const Ls=(function(){if(typeof globalThis<"u")return globalThis;if(typeof self<"u")return self;if(typeof window<"u")return window;if(typeof global<"u")return global;throw new Error("unable to locate global object")})(),fg=Ls.fetch?(...e)=>Ls.fetch(...e):()=>Promise.reject(new Error("[ofetch] global.fetch is not supported!")),pg=Ls.Headers,hg=Ls.AbortController,mg=fd({fetch:fg,Headers:pg,AbortController:hg}),gg=mg,yg=()=>window?.__NUXT__?.config||{},ea=()=>yg().app,vg=()=>ea().baseURL,bg=()=>ea().buildAssetsDir,ta=(...e)=>ld(pd(),bg(),...e),pd=(...e)=>{const t=ea(),n=t.cdnURL||t.baseURL;return e.length?ld(n,...e):n};globalThis.__buildAssetsURL=ta,globalThis.__publicAssetsURL=pd;globalThis.$fetch||(globalThis.$fetch=gg.create({baseURL:vg()}));"global"in globalThis||(globalThis.global=globalThis);function ti(e,t={},n){for(const o in e){const s=e[o],r=n?`${n}:${o}`:o;typeof s=="object"&&s!==null?ti(s,t,r):typeof s=="function"&&(t[r]=s)}return t}const wg={run:e=>e()},_g=()=>wg,hd=typeof console.createTask<"u"?console.createTask:_g;function kg(e,t){const n=t.shift(),o=hd(n);return e.reduce((s,r)=>s.then(()=>o.run(()=>r(...t))),Promise.resolve())}function Sg(e,t){const n=t.shift(),o=hd(n);return Promise.all(e.map(s=>o.run(()=>s(...t))))}function wr(e,t){for(const n of[...e])n(t)}let Eg=class{constructor(){this._hooks={},this._before=void 0,this._after=void 0,this._deprecatedMessages=void 0,this._deprecatedHooks={},this.hook=this.hook.bind(this),this.callHook=this.callHook.bind(this),this.callHookWith=this.callHookWith.bind(this)}hook(t,n,o={}){if(!t||typeof n!="function")return()=>{};const s=t;let r;for(;this._deprecatedHooks[t];)r=this._deprecatedHooks[t],t=r.to;if(r&&!o.allowDeprecated){let i=r.message;i||(i=`${s} hook has been deprecated`+(r.to?`, please use ${r.to}`:"")),this._deprecatedMessages||(this._deprecatedMessages=new Set),this._deprecatedMessages.has(i)||(console.warn(i),this._deprecatedMessages.add(i))}if(!n.name)try{Object.defineProperty(n,"name",{get:()=>"_"+t.replace(/\W+/g,"_")+"_hook_cb",configurable:!0})}catch{}return this._hooks[t]=this._hooks[t]||[],this._hooks[t].push(n),()=>{n&&(this.removeHook(t,n),n=void 0)}}hookOnce(t,n){let o,s=(...r)=>(typeof o=="function"&&o(),o=void 0,s=void 0,n(...r));return o=this.hook(t,s),o}removeHook(t,n){if(this._hooks[t]){const o=this._hooks[t].indexOf(n);o!==-1&&this._hooks[t].splice(o,1),this._hooks[t].length===0&&delete this._hooks[t]}}deprecateHook(t,n){this._deprecatedHooks[t]=typeof n=="string"?{to:n}:n;const o=this._hooks[t]||[];delete this._hooks[t];for(const s of o)this.hook(t,s)}deprecateHooks(t){Object.assign(this._deprecatedHooks,t);for(const n in t)this.deprecateHook(n,t[n])}addHooks(t){const n=ti(t),o=Object.keys(n).map(s=>this.hook(s,n[s]));return()=>{for(const s of o.splice(0,o.length))s()}}removeHooks(t){const n=ti(t);for(const o in n)this.removeHook(o,n[o])}removeAllHooks(){for(const t in this._hooks)delete this._hooks[t]}callHook(t,...n){return n.unshift(t),this.callHookWith(kg,t,...n)}callHookParallel(t,...n){return n.unshift(t),this.callHookWith(Sg,t,...n)}callHookWith(t,n,...o){const s=this._before||this._after?{name:n,args:o,context:{}}:void 0;
3this._before&&wr(this._before,s);const r=t(n in this._hooks?[...this._hooks[n]]:[],o);return r instanceof Promise?r.finally(()=>{this._after&&s&&wr(this._after,s)}):(this._after&&s&&wr(this._after,s),r)}beforeEach(t){return this._before=this._before||[],this._before.push(t),()=>{if(this._before!==void 0){const n=this._before.indexOf(t);n!==-1&&this._before.splice(n,1)}}}afterEach(t){return this._after=this._after||[],this._after.push(t),()=>{if(this._after!==void 0){const n=this._after.indexOf(t);n!==-1&&this._after.splice(n,1)}}}};function Cg(){return new Eg}function Tg(e={}){let t,n=!1;const o=i=>{if(t&&t!==i)throw new Error("Context conflict")};let s;if(e.asyncContext){const i=e.AsyncLocalStorage||globalThis.AsyncLocalStorage;i?s=new i:console.warn("[unctx] `AsyncLocalStorage` is not provided.")}const r=()=>{if(s){const i=s.getStore();if(i!==void 0)return i}return t};return{use:()=>{const i=r();if(i===void 0)throw new Error("Context is not available");return i},tryUse:()=>r(),set:(i,a)=>{a||o(i),t=i,n=!0},unset:()=>{t=void 0,n=!1},call:(i,a)=>{o(i),t=i;try{return s?s.run(i,a):a()}finally{n||(t=void 0)}},async callAsync(i,a){t=i;const l=()=>{t=i},u=()=>t===i?l:void 0;ni.add(u);try{const c=s?s.run(i,a):a();return n||(t=void 0),await c}finally{ni.delete(u)}}}}function Ag(e={}){const t={};return{get(n,o={}){return t[n]||(t[n]=Tg({...e,...o})),t[n]}}}const Rs=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof global<"u"?global:typeof window<"u"?window:{},al="__unctx__",Pg=Rs[al]||(Rs[al]=Ag()),Ig=(e,t={})=>Pg.get(e,t),ll="__unctx_async_handlers__",ni=Rs[ll]||(Rs[ll]=new Set);function Lo(e){const t=[];for(const s of ni){const r=s();r&&t.push(r)}const n=()=>{for(const s of t)s()};let o=e();return o&&typeof o=="object"&&"catch"in o&&(o=o.catch(s=>{throw n(),s})),[o,n]}const cl=!1,ul=!1,Lg=!1,Rg=!0,Og={componentName:"NuxtLink",prefetch:!0,prefetchOn:{visibility:!0}},CS={value:null,errorValue:null,deep:!0},Dg=null,Ng="#__nuxt",md="nuxt-app",dl=36e5,xg="vite:preloadError";function gd(e=md){return Ig(e,{asyncContext:!1})}const Mg="__nuxt_plugin";function Fg(e){let t=0;const n={_id:e.id||md||"nuxt-app",_scope:Hc(),provide:void 0,globalName:"nuxt",versions:{get nuxt(){return"3.21.11"},get vue(){return n.vueApp.version}},payload:Nt({...e.ssrContext?.payload||{},data:Nt({}),state:bn({}),once:new Set,_errors:Nt({})}),static:{data:{}},runWithContext(s){return n._scope.active&&!Yo()?n._scope.run(()=>fl(n,s)):fl(n,s)},isHydrating:!0,deferHydration(){if(!n.isHydrating)return()=>{};t++;let s=!1;return()=>{if(!s&&(s=!0,t--,t===0))return n.isHydrating=!1,n.callHook("app:suspense:resolve")}},_asyncDataPromises:{},_asyncData:Nt({}),_payloadRevivers:{},...e};{const s=window.__NUXT__;if(s)for(const r in s)switch(r){case"data":case"state":case"_errors":Object.assign(n.payload[r],s[r]);break;default:n.payload[r]=s[r]}}n.hooks=Cg(),n.hook=n.hooks.hook,n.callHook=n.hooks.callHook,n.provide=(s,r)=>{const i="$"+s;is(n,i,r),is(n.vueApp.config.globalProperties,i,r)},is(n.vueApp,"$nuxt",n),is(n.vueApp.config.globalProperties,"$nuxt",n);{window.addEventListener(xg,r=>{n.callHook("app:chunkError",{error:r.payload}),r.payload?.message?.includes("Unable to preload CSS")&&r.preventDefault()}),window.useNuxtApp||=Ae;const s=n.hook("app:error",(...r)=>{console.error("[nuxt] error caught during app initialization",...r)});n.hook("app:mounted",s)}const o=n.payload.config;return n.provide("config",o),n}function Ug(e,t){t.hooks&&e.hooks.addHooks(t.hooks)}async function Hg(e,t){if(typeof t=="function"){const{provide:n}=await e.runWithContext(()=>t(e))||{};if(n&&typeof n=="object")for(const o in n)e.provide(o,n[o])}}async function $g(e,t){const n=new Set,o=[],s=[];let r,i=0;async function a(l){const u=l.dependsOn?.filter(c=>t.some(d=>d._name===c)&&!n.has(c))??[];if(u.length>0)o.push([new Set(u),l]);else{const c=Hg(e,l).then(async()=>{l._name&&(n.add(l._name),await Promise.all(o.map(async([d,p])=>{d.has(l._name)&&(d.delete(l._name),d.size===0&&(i++,await a(p)))})))}).catch(d=>{if(!l.parallel&&!e.payload.error)throw d;r||=d});l.parallel?s.push(c):await c}}for(const l of t)Ug(e,l);for(const l of t)await a(l);if(await Promise.all(s),i)for(let l=0;l<i;l++)await Promise.all(s);if(r)throw e.payload.error||r}function St(e){if(typeof e=="function")return e;const t=e._name||e.name;return delete e.name,Object.assign(e.setup||(()=>{}),e,{[Mg]:!0,_name:t})}function fl(e,t,n){const o=()=>t();return gd(e._id).set(e),e.vueApp.runWithContext(o)}function yd(e){let t;return Vs()&&(t=pt()?.appContext.app.$nuxt),t||=gd(e).tryUse(),t||null}function Ae(e){const t=yd(e);if(!t)throw new Error("[nuxt] instance unavailable");return t}function po(e){return Ae().$config}function is(e,t,n){Object.defineProperty(e,t,{get:()=>n})}function _r(e){if(e===null||typeof e!="object")return!1;const t=Object.getPrototypeOf(e);return t!==null&&t!==Object.prototype&&Object.getPrototypeOf(t)!==null||Symbol.iterator in e?!1:Symbol.toStringTag in e?Object.prototype.toString.call(e)==="[object Module]":!0}function oi(e,t,n=".",o){if(!_r(t))return oi(e,{},n,o);const s={...t};for(const r of Object.keys(e)){if(r==="__proto__"||r==="constructor")continue;const i=e[r];i!=null&&(o&&o(s,r,i,n)||(Array.isArray(i)&&Array.isArray(s[r])?s[r]=[...i,...s[r]]:_r(i)&&_r(s[r])?s[r]=oi(i,s[r],(n?`${n}.`:"")+r.toString(),o):s[r]=i))}return s}function Bg(e){return(...t)=>t.reduce((n,o)=>oi(n,o,"",e),{})}const si=Bg();function Wg(e,t){try{return t in e}catch{return!1}}
3class pl extends Error{static __h3_error__=!0;statusCode=500;fatal=!1;unhandled=!1;statusMessage;data;cause;constructor(t,n={}){super(t,n),n.cause&&!this.cause&&(this.cause=n.cause)}toJSON(){const t={message:this.message,statusCode:ri(this.statusCode,500)};return this.statusMessage&&(t.statusMessage=vd(this.statusMessage)),this.data!==void 0&&(t.data=this.data),t}}function Vg(e){if(typeof e=="string")return new pl(e);if(jg(e))return e;const t=new pl(e.message??e.statusMessage??"",{cause:e.cause||e});if(Wg(e,"stack"))try{Object.defineProperty(t,"stack",{get(){return e.stack}})}catch{try{t.stack=e.stack}catch{}}if(e.data&&(t.data=e.data),e.statusCode?t.statusCode=ri(e.statusCode,t.statusCode):e.status&&(t.statusCode=ri(e.status,t.statusCode)),e.statusMessage?t.statusMessage=e.statusMessage:e.statusText&&(t.statusMessage=e.statusText),t.statusMessage){const n=t.statusMessage;vd(t.statusMessage)!==n&&console.warn("[h3] Please prefer using `message` for longer error messages instead of `statusMessage`. In the future, `statusMessage` will be sanitized by default.")}return e.fatal!==void 0&&(t.fatal=e.fatal),e.unhandled!==void 0&&(t.unhandled=e.unhandled),t}function jg(e){return e?.constructor?.__h3_error__===!0}const Gg=/[^\u0009\u0020-\u007E]/g;function vd(e=""){return e.replace(Gg,"")}function ri(e,t=200){return!e||(typeof e=="string"&&(e=Number.parseInt(e,10)),e<100||e>999)?t:e}const ii=Symbol("layout-meta"),Un=Symbol("route");import.meta.url.replace(/\/app\/.*$/,"/");const ot=()=>Ae()?.$router;function Kg(e){const t=e.scope;let n=Yo();for(;n;){if(n===t)return!0;n=n.parent}return!1}const ho=()=>{if(Vs()){const e=pt();if(!e||Kg(e))return He(Un,Ae()._route)}return Ae()._route};const qg=()=>{try{if(Ae()._processingMiddleware)return!0}catch{return!1}return!1},Yg=(e,t)=>{e||="/";const n=typeof e=="string"?e:"path"in e?ai(e):ot().resolve(e).href;if(t?.open){const{protocol:u}=new URL(n,window.location.href);if(u&&Is(u))throw new Error(`Cannot navigate to a URL with '${u}' protocol.`);const{target:c="_blank",windowFeatures:d={}}=t.open,p=[];for(const[f,b]of Object.entries(d))b!==void 0&&p.push(`${f.toLowerCase()}=${b}`);return open(n,c,p.join(", ")),Promise.resolve()}const o=nn(n,{acceptRelative:!0}),s=t?.external||o;if(s){if(!t?.external)throw new Error("Navigating to an external URL is not allowed by default. Use `navigateTo(url, { external: true })`.");const{protocol:u}=new URL(n,window.location.href);if(u&&Is(u))throw new Error(`Cannot navigate to a URL with '${u}' protocol.`)}const r=qg();if(!s&&r){if(t?.replace){if(typeof e=="string"){const{pathname:u,search:c,hash:d}=Xs(e);return{path:u,...c&&{query:Zi(c)},...d&&{hash:d},replace:!0}}return{...e,replace:!0}}return e}const i=ot(),a=Ae();if(s)return a._scope.stop(),t?.replace?location.replace(n):location.href=n,r?a.isHydrating?new Promise(()=>{}):!1:Promise.resolve();const l=typeof e=="string"?bd(e):e;return t?.replace?i.replace(l):i.push(l)};function ai(e){return id(e.path||"",e.query||{})+(e.hash||"")}function bd(e){const t=Xs(e);return Bm(Wm(t.pathname))+t.search+t.hash}const wd="__nuxt_error",Js=()=>Rp(Ae().payload,"error"),Ln=e=>{const t=xn(e);try{const n=Js();Ae().hooks.callHook("app:error",t),n.value||=t}catch{throw t}return t},Xg=async(e={})=>{const t=Ae(),n=Js();t.callHook("app:error:cleared",e),e.redirect&&await ot().replace(e.redirect),n.value=Dg},_d=e=>!!e&&typeof e=="object"&&wd in e,xn=e=>{typeof e!="string"&&e.statusText&&(e.message??=e.statusText);const t=Vg(e);return Object.defineProperty(t,wd,{value:!0,configurable:!1,writable:!1}),Object.defineProperty(t,"status",{get:()=>t.statusCode,configurable:!0}),Object.defineProperty(t,"statusText",{get:()=>t.statusMessage,configurable:!0}),t},Jg=-1,Qg=-2,zg=-3,Zg=-4,ey=-5,ty=-6,ny=-7,kd=2**32-1,li=kd-1;function oy(e){return!(!Number.isInteger(e)||e<0||e>li)}function sy(e){return!(!Number.isInteger(e)||e<0||e>kd)}function ry(e){return Uint8Array.fromBase64(e).buffer}function iy(e){return Uint8Array.from(Buffer.from(e,"base64")).buffer}function ay(e){const t=atob(e),n=t.length,o=new Uint8Array(n);for(let s=0;s<n;s++)o[s]=t.charCodeAt(s);return o.buffer}const ly=typeof Uint8Array.fromBase64=="function",cy=typeof process=="object"&&process.versions?.n
3ode!==void 0,uy=ly?ry:cy?iy:ay;function dy(e,t){return e}const fy={fromPrimitive:e=>e,fromISOString:e=>new Date(e),fromStringValue:(e,t)=>e==="URL"?new URL(t):e==="URLSearchParams"?new URLSearchParams(t):Temporal[e.slice(9)].from(t),fromArrayBuffer:e=>e,fromRegExpInfo:(e,t)=>new RegExp(e,t),fromViewInfo:(e,t,n,o)=>{const s=globalThis[e];return n!==void 0?new s(t,n,o):new s(t)},box:e=>Object(e),createArray:e=>new Array(e),createSparseArray:e=>{const t=[];return t[li]=void 0,delete t[li],t.length=e,t},createObject:()=>({}),createNullPrototypeObject:()=>Object.create(null),createSet:()=>new Set,createMap:()=>new Map,set:(e,t,n)=>{e[t]=n},addValue:(e,t)=>{e.add(t)},addEntry:(e,t,n)=>{e.set(t,n)}},py=Object.freeze(fy);function hy(e,t,n){return my(JSON.parse(e),t)}function my(e,t,n){const o=dy(py);if(typeof e=="number")return a(e,!0);if(!Array.isArray(e)||e.length===0)throw new Error("Invalid input");const s=e,r=Array(s.length);let i=null;function a(l,u=!1){if(l===Jg)return o.fromPrimitive(void 0);if(l===zg)return o.fromPrimitive(NaN);if(l===Zg)return o.fromPrimitive(1/0);if(l===ey)return o.fromPrimitive(-1/0);if(l===ty)return o.fromPrimitive(-0);if(u||typeof l!="number")throw new Error("Invalid input");if(l in r)return r[l];const c=s[l];if(!c||typeof c!="object")r[l]=o.fromPrimitive(c);else if(Array.isArray(c))if(typeof c[0]=="string"){const d=c[0],p=t&&Object.hasOwn(t,d)?t[d]:void 0;if(p){let f=c[1];if(typeof f!="number"&&(f=s.push(c[1])-1),Object.hasOwn(r,f))return r[l]=p(r[f]);if(i??=new Set,i.has(f))throw new Error("Invalid circular reference");return i.add(f),r[l]=p(a(f)),i.delete(f),r[l]}switch(d){case"Date":r[l]=o.fromISOString(c[1]);break;case"Set":const f=o.createSet();r[l]=f;for(let A=1;A<c.length;A+=1)o.addValue(f,a(c[A]));break;case"Map":const b=o.createMap();r[l]=b;for(let A=1;A<c.length;A+=2)o.addEntry(b,a(c[A]),a(c[A+1]));break;case"RegExp":r[l]=o.fromRegExpInfo(c[1],c[2]);break;case"Object":{const A=c[1];if(typeof s[A]=="object"&&s[A][0]!=="BigInt")throw new Error("Invalid input");r[l]=o.box(a(A));break}case"BigInt":r[l]=o.fromPrimitive(BigInt(c[1]));break;case"null":const _=o.createNullPrototypeObject();r[l]=_;for(let A=1;A<c.length;A+=2){if(c[A]==="__proto__")throw new Error("Cannot parse an object with a `__proto__` property");o.set(_,c[A],a(c[A+1]))}break;case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Float16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"BigInt64Array":case"BigUint64Array":case"DataView":{if(s[c[1]][0]!=="ArrayBuffer")throw new Error("Invalid data");const A=a(c[1]);r[l]=o.fromViewInfo(d,A,c[2],c[3]);break}case"ArrayBuffer":{const A=c[1];if(typeof A!="string")throw new Error("Invalid ArrayBuffer encoding");r[l]=o.fromArrayBuffer(uy(A));break}case"URL":case"URLSearchParams":case"Temporal.Duration":case"Temporal.Instant":case"Temporal.PlainDate":case"Temporal.PlainTime":case"Temporal.PlainDateTime":case"Temporal.PlainMonthDay":case"Temporal.PlainYearMonth":case"Temporal.ZonedDateTime":{r[l]=o.fromStringValue(d,c[1]);break}default:throw new Error(`Unknown type ${d}`)}}else if(c[0]===ny){const d=c[1];if(!sy(d))throw new Error("Invalid input");const p=o.createSparseArray(d);r[l]=p;for(let f=2;f<c.length;f+=2){const b=c[f];if(!oy(b)||b>=d)throw new Error("Invalid input");o.set(p,b,a(c[f+1]))}}else{const d=o.createArray(c.length);r[l]=d;for(let p=0;p<c.length;p+=1){const f=c[p];f!==Qg&&o.set(d,p,a(f))}}else{const d=o.createObject();r[l]=d;for(const p of Object.keys(c)){if(p==="__proto__")throw new Error("Cannot parse an object with a `__proto__` property");o.set(d,p,a(c[p]))}}return r[l]}return a(0)}const gy=new Set(["link","style","script","noscript"]),yy=new Set(["title","titleTemplate","script","style","noscript"]),ci=new Set(["base","meta","link","style","script","noscript"]),vy=new Set(["title","base","htmlAttrs","bodyAttrs","meta","link","style","script","noscript"]),by=new Set(["base","title","titleTemplate","bodyAttrs","htmlAttrs","templateParams"]),hl=new Set(["key","tagPosition","tagPriority","tagDuplicateStrategy","innerHTML","textContent","processTemplateParams"]),wy=new Set(["templateParams","htmlAttrs","bodyAttrs"]),na=new Set(["theme-color","google-site-verification","og","article","book","profile","twitter","author"]),kr=e=>typeof e=="number"?Number.isFinite(e):e,$o={META:new Set(["twitter"]),OG:new Set(["og","book","article","profile","fb"]),MEDIA:new Set(["ogImage","ogVideo","ogAudio","twitterImage"]),HTTP_EQUIV:new Set(["contentType","defaultStyle","xUaCompatible"])},_y={articleExpirationTime:"article:expiration_time",articleModifiedTime:"article:modified_time",articlePublishedTime:"article:published_time",bookReleaseDate:"book:release_date",fbAppId:"fb:app_id",ogAudioSecureUrl:"og:audio:secure_url",ogAudioUrl:"og:audio",ogImageSecureUrl:"og:image:secure_url",ogImageUrl:"og:image",ogSiteName:"og:site_name",ogVideoSecureUrl:"og:video:secure_url",ogVideoUrl:"og:video",profileFirstName:"profile:first_name",profileLastName:"profile:last_name",profileUsername:"profile:username",msapplicationConfig:"msapplication-Config",msapplicationTileColor:"msapplication-TileColor",msapplicationTileImage:"msapplication-TileImage"},Sd={appleItunesApp:{unpack:{entrySeparator:", ",resolve:({key:e,value:t})=>`${Xt(e)}=${t}`}},refresh:{metaKey:"http-equiv",unpack:{entrySeparator:";",resolve:({key:e,value:t})=>e==="seconds"?`${t}`:void 0}},robots:{unpack:{entrySeparator:", ",resolve:({key:e,value:t})=>typeof t=="boolean"?Xt(e):`${Xt(e)}:${t}`}},contentSecurityPolicy:{metaKey:"http-equiv",unpack:{entrySeparator:"; ",resolve:({key:e,value:t})=>`${Xt(e)} ${t}`}},charset:{}};function Xt(e){const t=e.replace(/([A-Z])/g,"-$1").toLowerCase(),n=t.indexOf("-");return n===-1?t:$o.META.has(t.slice(0,n))||$o.OG.has(t.slice(0,n))?e.replace(/([A-Z])/g,":$1").toLowerCase():t}function Ed(e){return Object.fromEntries(Object.entries(e).filter(([t,n])=>String(n)!=="false"&&t))}function ui(e){return Array.isArray(e)?e.map(ui):!e||typeof e!="object"?e:Object.fromEntries(Object.entries(e).map(([t,n])=>[Xt(t),ui(n)]))}function Cd(e,t={}){const{entrySeparator:n="",keyValueSeparator:o="",wrapValue:s,resolve:r}=t;return Object.entries(e).map(([i,a])=>{if(r){const u=r({key:i,value:a});if(u!==void 0)return u}const l=typeof a=="object"?Cd(a,t):typeof a=="number"?a.toString():typeof a=="str
3ing"&&s?`${s}${a.replace(new RegExp(s,"g"),`\\${s}`)}${s}`:a;return`${i}${o}${l}`}).join(n)}function ml(e,t){const n=Ed(t),o=Xt(e),s=Td(o);if(!na.has(o))return[{[s]:o,...n}];const r=Object.fromEntries(Object.entries(n).map(([i,a])=>[`${e}${i==="url"?"":`${i[0].toUpperCase()}${i.slice(1)}`}`,a]));return Os(r||{}).sort((i,a)=>(i[s]?.length||0)-(a[s]?.length||0))}function Td(e){if(Sd[e]?.metaKey==="http-equiv"||$o.HTTP_EQUIV.has(e))return"http-equiv";const t=Xt(e),n=t.indexOf(":");return n===-1?"name":$o.OG.has(t.slice(0,n))?"property":"name"}function ky(e){return _y[e]||Xt(e)}function Sy(e,t){return t==="refresh"?`${e.seconds};url=${e.url}`:Cd(ui(e),{keyValueSeparator:"=",entrySeparator:", ",resolve:({value:n,key:o})=>n===null?"":typeof n=="boolean"?o:void 0,...Sd[t]?.unpack})}function Os(e){const t=[],n={};for(const[s,r]of Object.entries(e)){if(Array.isArray(r)){if(s==="themeColor"){r.forEach(i=>{typeof i=="object"&&i!==null&&t.push({name:"theme-color",...i})});continue}for(const i of r)if(typeof i=="object"&&i!==null){const a=[],l=[];for(const[u,c]of Object.entries(i)){const d=`${s}${u==="url"?"":`:${u}`}`,p=Os({[d]:c});(u==="url"?a:l).push(...p)}t.push(...a,...l)}else t.push(...typeof i=="string"?Os({[s]:i}):ml(s,i));continue}if(typeof r=="object"&&r)if($o.MEDIA.has(s)){const i=s.startsWith("twitter")?"twitter":"og",a=s.replace(/^(og|twitter)/,"").toLowerCase(),l=i==="twitter"?"name":"property";r.url&&t.push({[l]:`${i}:${a}`,content:r.url}),r.secureUrl&&t.push({[l]:`${i}:${a}:secure_url`,content:r.secureUrl});for(const[u,c]of Object.entries(r))u!=="url"&&u!=="secureUrl"&&t.push({[l]:`${i}:${a}:${u}`,content:c})}else na.has(Xt(s))?t.push(...ml(s,r)):n[s]=Ed(r);else n[s]=r}const o=Object.entries(n).map(([s,r])=>{if(s==="charset")return{charset:r===null?"_null":r};const i=Td(s),a=ky(s),l=r===null?"_null":typeof r=="object"?Sy(r,s):typeof r=="number"?r.toString():r;return i==="http-equiv"?{"http-equiv":a,content:l}:{[i]:a,content:l}});return[...t,...o].map(s=>"content"in s&&s.content==="_null"?{...s,content:null}:s)}function Ad(e){return e==="__proto__"||e==="constructor"||e==="prototype"}const di=(e,t)=>e._w===t._w?e._p-t._p:e._w-t._w,gl={base:-10,title:10},Ey={critical:-8,high:-1,low:2},yl={meta:{"content-security-policy":-30,charset:-20,viewport:-15},link:{preconnect:20,stylesheet:60,preload:70,modulepreload:70,prefetch:90,"dns-prefetch":90,prerender:90},script:{async:30,defer:80,sync:50},style:{imported:40,sync:60}},Cy=/@import/,bo=e=>e===""||e===!0;function Ty(e,t){if(typeof t.tagPriority=="number")return t.tagPriority;let n=100;const o=Ey[t.tagPriority]||0,s=e.resolvedOptions.disableCapoSorting?{link:{},script:{},style:{}}:yl;if(t.tag in gl)n=gl[t.tag];else if(t.tag==="meta"){const r=t.props["http-equiv"]==="content-security-policy"?"content-security-policy":t.props.charset?"charset":t.props.name==="viewport"?"viewport":null;r&&(n=yl.meta[r])}else if(t.tag==="link"&&t.props.rel)n=s.link[t.props.rel];else if(t.tag==="script"){const r=String(t.props.type);bo(t.props.async)?n=s.script.async:t.props.src&&!bo(t.props.defer)&&!bo(t.props.async)&&r!=="module"&&!r.endsWith("json")||t.innerHTML&&!r.endsWith("json")?n=s.script.sync:(bo(t.props.defer)&&t.props.src&&!bo(t.props.async)||r==="module")&&(n=s.script.defer)}else t.tag==="style"&&(n=t.innerHTML&&Cy.test(t.innerHTML)?s.style.imported:s.style.sync);return(n||100)+o}const Ay={key:"flatMeta",hooks:{"entries:normalize":e=>{const t=[];e.tags=e.tags.map(n=>n.tag!=="_flatMeta"?n:(t.push(Os(n.props).map(o=>({...n,tag:"meta",props:o}))),!1)).filter(Boolean).concat(...t)}}};function fi(e,t={},n){for(const o in e){const s=e[o],r=n?`${n}:${o}`:o;typeof s=="object"&&s!==null?fi(s,t,r):typeof s=="function"&&(t[r]=s)}return t}const Pd=(()=>{if(console.createTask)return console.createTask;const e={run:t=>t()};return()=>e})();function Id(e,t,n,o){for(let s=n;s<e.length;s+=1)try{const r=o?o.run(()=>e[s](...t)):e[s](...t);if(r&&typeof r.then=="function")return Promise.resolve(r).then(()=>Id(e,t,s+1,o))}catch(r){return Promise.reject(r)}}function Py(e,t,n){if(e.length>0)return Id(e,t,0,Pd(n))}function Iy(e,t,n){if(e.length>0){const o=Pd(n);return Promise.all(e.map(s=>o.run(()=>s(...t))))}}function Sr(e,t){for(const n of[...e])n(t)}var Ly=class{_hooks;_before;_after;_deprecatedHooks;_deprecatedMessages;constructor(){this._hooks={},this._before=void 0,this._after=void 0,this._deprecatedMessages=void 0,this._deprecatedHooks={},this.hook=this.hook.bind(this),this.callHook=this.callHook.bind(this),this.callHookWith=this.callHookWith.bind(this)}hook(e,t,n={}){if(!e||typeof t!="function")return()=>{};const o=e;let s;for(;this._deprecatedHooks[e];)s=this._deprecatedHooks[e],e=s.to;if(s&&!n.allowDeprecated){let r=s.message;r||(r=`${o} hook has been deprecated`+(s.to?`, please use ${s.to}`:"")),this._deprecatedMessages||(this._deprecatedMessages=new Set),this._deprecatedMessages.has(r)||(console.warn(r),this._deprecatedMessages.add(r))}if(!t.name)try{Object.defineProperty(t,"name",{get:()=>"_"+e.replace(/\W+/g,"_")+"_hook_cb",configurable:!0})}catch{}return this._hooks[e]=this._hooks[e]||[],this._hooks[e].push(t),()=>{t&&(this.removeHook(e,t),t=void 0)}}hookOnce(e,t){let n,o=(...s)=>(typeof n=="function"&&n(),n=void 0,o=void 0,t(...s));return n=this.hook(e,o),n}removeHook(e,t){const n=this._hooks[e];if(n){const o=n.indexOf(t);o!==-1&&n.splice(o,1),n.length===0&&(this._hooks[e]=void 0)}}clearHook(e){this._hooks[e]=void 0}deprecateHook(e,t){this._deprecatedHooks[e]=typeof t=="string"?{to:t}:t;const n=this._hooks[e]||[];this._hooks[e]=void 0;for(const o of n)this.hook(e,o)}deprecateHooks(e){for(const t in e)this.deprecateHook(t,e[t])}addHooks(e){const t=fi(e),n=Object.keys(t).map(o=>this.hook(o,t[o]));return()=>{for(const o of n)o();n.length=0}}removeHooks(e){const t=fi(e);for(const n in t)this.removeHook(n,t[n])}removeAllHooks(){this._hooks={}}callHook(e,...t){return this.callHookWith(Py,e,t)}callHookParallel(e,...t){return this.callHookWith(Iy,e,t)}callHookWith(e,t,n){const o=this._before||this._after?{name:t,args:n,context:{}}:void 0;this._before&&Sr(this._before,o);const s=e(this._hooks[t]?[...this._hooks[t]]:[],n,t);return s instanceof Promise?s.finally(()=>{this._after&&o&&Sr(this._after,o)}):(this._after&&o&&Sr(this._after,o),s)}beforeEach(e){return this._before=this._before||[],this._before.push(e),()=>{if(this._before!==void 0){const t=this._before.indexOf(e);t!==-1&&this._before.splice(t,1)}}}afterEach(e){return this._after=this._after||[],this._after.push(e),()=>{if(this._after!==void 0){const t=this._after.indexOf(e);t!==-1&&this._after.splice(t,1)}}}};function Ry(){return new Ly}const Oy=["name","property","http-equiv"],Dy=new Set(["viewport","description","keywords","robots"]);function Ld(e){const t=e.indexOf(":");if(t===-1)return!1;const n=e.indexOf(":",t+1),o=e.slice(t+1,n===-1?e.length:n);return o==="twitter"?e==="meta:twitter:image"||e.startsWith("meta:twitter:image:"):na.has(o)}function pi(e){const{props:t,tag:n}=e;if(by.has(n))return n;if(n==="link"&&t.rel==="canonical")return"canonical";if(n==="link"&&t.rel==="alternate"){if(t.hreflang)return`alternate:${t.hreflang}`;if(t.type)return`alternate:${t.type}:${t.href||""}`}if(t.charset)return"charset";if(e.tag==="meta"){for(const o of Oy)if(t[o]!==void 0){const s=t[o],r=s&&typeof s=="string"&&s.includes(":"),i=s&&Dy.has(s),l=!(r||i)&&e.key?`:key:${e.key}`:"";return`${n}:${s}${l}`}}if(e.key)return`${n}:key:${e.key}`;if(t.id)return`${n}:id:${t.id}`;if(n==="link"&&t.rel==="alternate")return`alternate:${t.href||""}`;if(yy.has(n)){const o=e.textContent||e.innerHTML;if(o)return`${n}:content:${o}`}}function Rd(e){const t=e._h||e._d;if(t)return t;const n=e.textContent||e.innerHTML;if(n)return n;const o=Object.keys(e.props).sort();return`${e.tag}:${o.map(s=>`${s}:${String(e.props[s])}`).join(",")}`}function Ds(e,t,n){typeof e==="function"&&(!n||n!=="titleTemplate"&&!(n[0]==="o"&&n[1]==="n"))&&(e=e());const s=t?t(n,e):e;if(Array.isArray(s)){let r;for(let i=0;i<s.length;i++){const a=Ds(s[i],t);
3r?r[i]=a:a!==s[i]&&(r=s.slice(0,i),r[i]=a)}return r||s}if(s?.constructor===Object){let r;for(const i in s){const a=Ad(i),l=a?void 0:Ds(s[i],t,i);if(!r&&(a||i==="_resolver"||l!==s[i])){r={};for(const c in s){if(c===i)break;r[c]=s[c]}}r&&!a&&(r[i]=l)}return r||s}return s}const Ny=/[\s"'<>/=\x00-\x1F\x7F]/;function xy(e,t){const n=e==="style"?new Map:new Set;function o(s){if(s==null||s===void 0)return;const r=String(s).trim();if(r)if(e==="style"){const[i,...a]=r.split(":").map(l=>l?l.trim():"");i&&a.length&&n.set(i,a.join(":"))}else r.split(" ").filter(Boolean).forEach(i=>n.add(i))}return typeof t=="string"?e==="style"?t.split(";").forEach(o):o(t):Array.isArray(t)?t.forEach(s=>o(s)):t&&typeof t=="object"&&Object.entries(t).forEach(([s,r])=>{r&&r!=="false"&&(e==="style"?n.set(String(s).trim(),String(r)):o(s))}),n}function Od(e,t){if(e.props=e.props||{},!t)return e;if(e.tag==="templateParams")return e.props=t,e;const n=ci.has(e.tag)||e.tag==="htmlAttrs"||e.tag==="bodyAttrs";for(const o of Object.keys(t)){if(Ad(o))continue;const s=o.startsWith("data-"),r=n&&!hl.has(o),i=r&&!s?o.toLowerCase():o;if(r&&(!i||Ny.test(i)))continue;const a=t[o];if(a===null){e.props[i]=null;continue}if(o==="class"||o==="style"){e.props[o]=xy(o,a);continue}if(hl.has(o)){if((o==="textContent"||o==="innerHTML")&&typeof a=="object"){let c=t.type;if(t.type||(c="application/json"),!c?.endsWith("json")&&c!=="speculationrules")continue;t.type=c,e.props.type=c,e[o]=JSON.stringify(a)}else e[o]=a;continue}const l=String(a),u=e.tag==="meta"&&i==="content";l==="true"||l===""?e.props[i]=s||u?l:!0:!a&&s&&l==="false"?e.props[i]="false":a!==void 0&&(e.props[i]=a)}return e}function My(e,t){const n=typeof t=="object"&&typeof t!="function"?t:{[e==="script"||e==="noscript"||e==="style"?"innerHTML":"textContent"]:t},o=Od({tag:e,props:{}},n);return o.key&&gy.has(o.tag)&&(o.props["data-hid"]=o._h=o.key),o.tag==="script"&&typeof o.innerHTML=="object"&&(o.innerHTML=JSON.stringify(o.innerHTML),o.props.type=o.props.type||"application/json"),Array.isArray(o.props.content)?o.props.content.map(s=>({...o,props:{...o.props,content:s}})):o}function Fy(e,t){if(!e)return[];typeof e=="function"&&(e=e());const n=(s,r)=>{for(let i=0;i<t.length;i++)r=t[i](s,r);return r};e=n(void 0,e);const o=[];return e=Ds(e,n),Object.entries(e||{}).forEach(([s,r])=>{if(r!==void 0)for(const i of Array.isArray(r)?r:[r])o.push(My(s,i))}),o.flat()}function vl(e,t){const n=typeof t=="function"?t(e):t,o=n.key||String(e.plugins.size+1);e.plugins.get(o)||(e.plugins.set(o,n),e.hooks.addHooks(n.hooks||{}))}function Uy(e={}){const t=Ry();t.addHooks(e.hooks||{});const n=!e.document,o=new Map,s=new Map,r=new Set,i={_entryCount:1,plugins:s,dirty:!1,resolvedOptions:e,hooks:t,ssr:n,entries:o,headEntries(){return[...o.values()]},use:a=>vl(i,a),push(a,l){const u={...l||{}};delete u.head;const c=u._index??i._entryCount++,d={_i:c,input:a,options:u},p={_poll(f=!1){i.dirty=!0,!f&&r.add(c),t.callHook("entries:updated",i)},dispose(){o.delete(c)&&i.invalidate()},patch(f){(!u.mode||u.mode==="server"&&n||u.mode==="client"&&!n)&&(d.input=f,o.set(c,d),p._poll())}};return p.patch(a),p},async resolveTags(){const a={tagMap:new Map,tags:[],entries:[...i.entries.values()]};for(await t.callHook("entries:resolve",a);r.size;){const p=r.values().next().value;r.delete(p);const f=o.get(p);if(f){const b={tags:Fy(f.input,e.propResolvers||[]).map(_=>Object.assign(_,f.options)),entry:f};await t.callHook("entries:normalize",b),f._tags=b.tags.map((_,A)=>(_._w=Ty(i,_),_._p=(f._i<<10)+A,_._d=pi(_),_._d||(_._h=Rd(_)),_))}}let l=!1;a.entries.flatMap(p=>(p._tags||[]).map(f=>({...f,props:{...f.props}}))).sort(di).reduce((p,f)=>{const b=f._d||f._h;if(!p.has(b))return p.set(b,f);const _=p.get(b);if((f?.tagDuplicateStrategy||(wy.has(f.tag)?"merge":null)||(f.key&&f.key===_.key?"merge":null))==="merge"){const E={..._.props};Object.entries(f.props).forEach(([C,h])=>E[C]=C==="style"?new Map([..._.props.style||new Map,...h]):C==="class"?new Set([..._.props.class||new Set,...h]):h),p.set(b,{...f,props:E})}else f._p>>10===_._p>>10&&f.tag==="meta"&&Ld(b)?(p.set(b,Object.assign([...Array.isArray(_)?_:[_],f],f)),l=!0):(f._w===_._w?f._p>_._p:f?._w<_?._w)&&p.set(b,f);return p},a.tagMap);const u=a.tagMap.get("title"),c=a.tagMap.get("titleTemplate");if(i._title=u?.textContent,c){const p=c?.textContent;if(i._titleTemplate=p,p){let f=typeof p=="function"?p(u?.textContent):p;typeof f=="string"&&!i.plugins.has("template-params")&&(f=f.replace("%s",u?.textContent||"")),u?f===null?a.tagMap.delete("title"):a.tagMap.set("title",{...u,textContent:f}):(c.tag="title",c.textContent=f)}}a.tags=Array.from(a.tagMap.values()),l&&(a.tags=a.tags.flat().sort(di)),await t.callHook("tags:beforeResolve",a),await t.callHook("tags:resolve",a),await t.callHook("tags:afterResolve",a);const d=[];for(const p of a.tags){const{innerHTML:f,tag:b,props:_}=p;if(vy.has(b)&&!(Object.keys(_).length===0&&!kr(p.innerHTML)&&!kr(p.textContent))&&!(b==="meta"&&!kr(_.content)&&!_["http-equiv"]&&!_.charset)){if(b==="script"&&f){if(String(_.type).endsWith("json")){const A=typeof f=="string"?f:JSON.stringify(f);p.innerHTML=A.replace(/</g,"\\u003C")}else typeof f=="string"&&(p.innerHTML=f.replace(new RegExp(`</${b}`,"g"),`<\\/${b}`));p._d=pi(p)}d.push(p)}}return d},invalidate(){for(const a of o.values())r.add(a._i);i.dirty=!0,t.callHook("entries:updated",i)}};
3return(e?.plugins||[]).forEach(a=>vl(i,a)),i.hooks.callHook("init",i),e.init?.forEach(a=>a&&i.push(a)),i}const Er="%separator";function Hy(e,t,n=!1){let o;if(t==="s"||t==="pageTitle")o=e.pageTitle;else if(t.includes(".")){const s=t.indexOf(".");o=e[t.substring(0,s)]?.[t.substring(s+1)]}else o=e[t];if(o!==void 0)return n?(o||"").replace(/\\/g,"\\\\").replace(/</g,"\\u003C").replace(/"/g,'\\"'):o||""}function as(e,t,n,o=!1){if(typeof e!="string"||!e.includes("%"))return e;let s=e;try{s=decodeURI(e)}catch{}const r=s.match(/%\w+(?:\.\w+)?/g);if(!r)return e;const i=e.includes(Er);return e=e.replace(/%\w+(?:\.\w+)?/g,a=>{if(a===Er||!r.includes(a))return a;const l=Hy(t,a.slice(1),o);return l!==void 0?l:a}).trim(),i&&(e=e.split(Er).map(a=>a.trim()).filter(a=>a!=="").join(n?` ${n} `:" ")),e}const bl=e=>e.includes(":key")?e:e.split(":").join(":key:"),$y={key:"aliasSorting",hooks:{"tags:resolve":e=>{let t=!1;for(const n of e.tags){const o=n.tagPriority;if(!o)continue;const s=String(o);if(s.startsWith("before:")){const r=bl(s.slice(7)),i=e.tagMap.get(r);i&&(typeof i.tagPriority=="number"&&(n.tagPriority=i.tagPriority),n._p=i._p-1,t=!0)}else if(s.startsWith("after:")){const r=bl(s.slice(6)),i=e.tagMap.get(r);i&&(typeof i.tagPriority=="number"&&(n.tagPriority=i.tagPriority),n._p=i._p+1,t=!0)}}t&&(e.tags=e.tags.sort(di))}}},By={key:"deprecations",hooks:{"entries:normalize":({tags:e})=>{for(const t of e)t.props.children&&(t.innerHTML=t.props.children,delete t.props.children),t.props.hid&&(t.key=t.props.hid,delete t.props.hid),t.props.vmid&&(t.key=t.props.vmid,delete t.props.vmid),t.props.body&&(t.tagPosition="bodyClose",delete t.props.body)}}};async function hi(e){if(typeof e==="function")return e;if(e instanceof Promise)return await e;if(Array.isArray(e))return await Promise.all(e.map(n=>hi(n)));if(e?.constructor===Object){const n={};for(const o of Object.keys(e))n[o]=await hi(e[o]);return n}return e}const Wy={key:"promises",hooks:{"entries:resolve":async e=>{const t=[];for(const n in e.entries)e.entries[n]._promisesProcessed||t.push(hi(e.entries[n].input).then(o=>{e.entries[n].input=o,e.entries[n]._promisesProcessed=!0}));await Promise.all(t)}}},Vy={meta:"content",link:"href",htmlAttrs:"lang"},jy=["innerHTML","textContent"],Gy=e=>({key:"template-params",hooks:{"entries:normalize":t=>{const n=t.tags.filter(o=>o.tag==="templateParams"&&o.mode==="server")?.[0]?.props||{};Object.keys(n).length&&(e._ssrPayload={templateParams:{...e._ssrPayload?.templateParams||{},...n}})},"tags:resolve":({tagMap:t,tags:n})=>{const o=t.get("templateParams")?.props||{},s=o.separator||"|";delete o.separator,o.pageTitle=as(o.pageTitle||e._title||"",o,s);for(const r of n){if(r.processTemplateParams===!1)continue;const i=Vy[r.tag];if(i&&typeof r.props[i]=="string")r.props[i]=as(r.props[i],o,s);else if(r.processTemplateParams||r.tag==="titleTemplate"||r.tag==="title")for(const a of jy)typeof r[a]=="string"&&(r[a]=as(r[a],o,s,r.tag==="script"&&r.props.type.endsWith("json")))}e._templateParams=o,e._separator=s},"tags:afterResolve":({tagMap:t})=>{const n=t.get("title");n?.textContent&&n.processTemplateParams!==!1&&(n.textContent=as(n.textContent,e._templateParams,e._separator))}}}),Ky=(e,t)=>xe(t)?Ap(t):t,oa="usehead";function qy(e){return{install(n){n.config.globalProperties.$unhead=e,n.config.globalProperties.$head=e,n.provide(oa,e)}}.install}function Dd(){if(Vs()){const e=He(oa);if(e)return e}throw new Error("useHead() was called without provide context, ensure you call it through the setup() function.")}function Nd(e,t={}){const n=t.head||Dd();return n.ssr?n.push(e||{},t):Yy(n,e,t)}function Yy(e,t,n={}){const o=Yo();if(o&&!o.active)return{patch(){},dispose(){},_poll(){}};const s=Qe(!1);let r;return Sh(()=>{const a=s.value?{}:Ds(t,Ky);r?r.patch(a):r=e.push(a,n)}),pt()&&(fo(()=>{r.dispose()}),hu(()=>{s.value=!0}),pu(()=>{s.value=!1})),r}function Xy(e={},t={}){(t.head||Dd()).use(Ay);const o=Nd(wl(e),t),s=o.patch;return o.patch=r=>s(wl(r)),o}function wl(e){if(e._flatMeta)return e;const t={};for(const n in e)!Object.prototype.hasOwnProperty.call(e,n)||n==="title"||n==="titleTemplate"||(t[n]=e[n]);return{title:e.title,titleTemplate:e.titleTemplate,_flatMeta:t}}function sa(e){const t=e||yd();return t?.ssrContext?.head||t?.runWithContext(()=>{if(Vs())return He(oa)})}function Jy(e,t={}){const n=sa(t.nuxt);if(n)return Nd(e,{head:n,...t})}function TS(e,t={}){const n=sa(t.nuxt);if(n)return Xy(e,{head:n,...t})}const Gn=typeof document<"u";function xd(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}
vendor: 24,383 bytes, line 3
3function Qy(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&xd(e.default)}const me=Object.assign;function Cr(e,t){const n={};for(const o in t){const s=t[o];n[o]=Lt(s)?s.map(e):e(s)}return n}const Ro=()=>{},Lt=Array.isArray;function _l(e,t){const n={};for(const o in e)n[o]=o in t?t[o]:e[o];return n}const Md=/#/g,zy=/&/g,Zy=/\//g,ev=/=/g,tv=/\?/g,Fd=/\+/g,nv=/%5B/g,ov=/%5D/g,Ud=/%5E/g,sv=/%60/g,Hd=/%7B/g,rv=/%7C/g,$d=/%7D/g,iv=/%20/g;function ra(e){return e==null?"":encodeURI(""+e).replace(rv,"|").replace(nv,"[").replace(ov,"]")}function av(e){return ra(e).replace(Hd,"{").replace($d,"}").replace(Ud,"^")}function mi(e){return ra(e).replace(Fd,"%2B").replace(iv,"+").replace(Md,"%23").replace(zy,"%26").replace(sv,"`").replace(Hd,"{").replace($d,"}").replace(Ud,"^")}function lv(e){return mi(e).replace(ev,"%3D")}function cv(e){return ra(e).replace(Md,"%23").replace(tv,"%3F")}function uv(e){return cv(e).replace(Zy,"%2F")}function Bo(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const dv=/\/$/,fv=e=>e.replace(dv,"");function Tr(e,t,n="/"){let o,s={},r="",i="";const a=t.indexOf("#");let l=t.indexOf("?");return l=a>=0&&l>a?-1:l,l>=0&&(o=t.slice(0,l),r=t.slice(l,a>0?a:t.length),s=e(r.slice(1))),a>=0&&(o=o||t.slice(0,a),i=t.slice(a,t.length)),o=gv(o??t,n),{fullPath:o+r+i,path:o,query:s,hash:Bo(i)}}function pv(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function kl(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function hv(e,t,n){const o=t.matched.length-1,s=n.matched.length-1;return o>-1&&o===s&&io(t.matched[o],n.matched[s])&&Bd(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function io(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Bd(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!mv(e[n],t[n]))return!1;return!0}function mv(e,t){return Lt(e)?Sl(e,t):Lt(t)?Sl(t,e):e?.valueOf()===t?.valueOf()}function Sl(e,t){return Lt(t)?e.length===t.length&&e.every((n,o)=>n===t[o]):e.length===1&&e[0]===t}function gv(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),o=e.split("/"),s=o[o.length-1];(s===".."||s===".")&&o.push("");let r=n.length-1,i,a;for(i=0;i<o.length;i++)if(a=o[i],a!==".")if(a==="..")r>1&&r--;else break;return n.slice(0,r).join("/")+"/"+o.slice(i).join("/")}const gt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let gi=(function(e){return e.pop="pop",e.push="push",e})({}),Ar=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function yv(e){if(!e)if(Gn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),fv(e)}const vv=/^[^#]+#/;function bv(e,t){return e.replace(vv,"#")+t}function wv(e,t){const n=document.documentElement.getBoundingClientRect(),o=e.getBoundingClientRect();return{behavior:t.behavior,left:o.left-n.left-(t.left||0),top:o.top-n.top-(t.top||0)}}const Qs=()=>({left:window.scrollX,top:window.scrollY});function _v(e){let t;if("el"in e){const n=e.el,o=typeof n=="string"&&n.startsWith("#"),s=typeof n=="string"?o?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!s)return;t=wv(s,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 El(e,t){return(history.state?history.state.position-t:-1)+e}const yi=new Map;function kv(e,t){yi.set(e,t)}function Sv(e){const t=yi.get(e);return yi.delete(e),t}function Ev(e){return typeof e=="string"||e&&typeof e=="object"}function Wd(e){return typeof e=="string"||typeof e=="symbol"}let Re=(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 Vd=Symbol("");Re.MATCHER_NOT_FOUND+"",Re.NAVIGATION_GUARD_REDIRECT+"",Re.NAVIGATION_ABORTED+"",Re.NAVIGATION_CANCELLED+"",Re.NAVIGATION_DUPLICATED+"";function ao(e,t){return me(new Error,{type:e,[Vd]:!0},t)}function $t(e,t){return e instanceof Error&&Vd in e&&(t==null||!!(e.type&t))}const Cv=["params","query","hash"];function Tv(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of Cv)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function Av(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;o<n.length;++o){const s=n[o].replace(Fd," "),r=s.indexOf("="),i=Bo(r<0?s:s.slice(0,r)),a=r<0?null:Bo(s.slice(r+1));if(i in t){let l=t[i];Lt(l)||(l=t[i]=[l]),l.push(a)}else t[i]=a}return t}function Cl(e){let t="";for(let n in e){const o=e[n];if(n=lv(n),o==null){o!==void 0&&(t+=(t.length?"&":"")+n);continue}(Lt(o)?o.map(s=>s&&mi(s)):[o&&mi(o)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function Pv(e){const t={};for(const n in e){const o=e[n];o!==void 0&&(t[n]=Lt(o)?o.map(s=>s==null?null:""+s):o==null?o:""+o)}return t}const Iv=Symbol(""),Tl=Symbol(""),ia=Symbol(""),aa=Symbol(""),vi=Symbol("");function wo(){let e=[];function t(o){return e.push(o),()=>{const s=e.indexOf(o);s>-1&&e.splice(s,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function un(e,t,n,o,s,r=i=>i()){const i=o&&(o.enterCallbacks[s]=o.enterCallbacks[s]||[]);return()=>new Promise((a,l)=>{const u=p=>{p===!1?l(ao(Re.NAVIGATION_ABORTED,{from:n,to:t})):p instanceof Error?l(p):Ev(p)?l(ao(Re.NAVIGATION_GUARD_REDIRECT,{from:t,to:p})):(i&&o.enterCallbacks[s]===i&&typeof p=="function"&&i.push(p),a())},c=r(()=>e.call(o&&o.instances[s],t,n,u));let d=Promise.resolve(c);e.length<3&&(d=d.then(u)),d.catch(p=>l(p))})}function Pr(e,t,n,o,s=r=>r()){const r=[];for(const i of e)for(const a in i.components){let l=i.components[a];if(!(t!=="beforeRouteEnter"&&!i.instances[a]))if(xd(l)){const u=(l.__vccOpts||l)[t];u&&r.push(un(u,n,o,i,a,s))}else{let u=l();r.push(()=>u.then(c=>{if(!c)throw new Error(`Couldn't resolve component "${a}" at "${i.path}"`);const d=Qy(c)?c.default:c;i.mods[a]=c,i.components[a]=d;const p=(d.__vccOpts||d)[t];return p&&un(p,n,o,i,a,s)()}))}}return r}function Lv(e,t){const n=[],o=[],s=[],r=Math.max(t.matched.length,e.matched.length);for(let i=0;i<r;i++){const a=t.matched[i];a&&(e.matched.find(u=>io(u,a))?o.push(a):n.push(a));const l=e.matched[i];l&&(t.matched.find(u=>io(u,l))||s.push(l))}return[n,o,s]}let Rv=()=>location.protocol+"//"+location.host;function jd(e,t){const{pathname:n,search:o,hash:s}=t,r=e.indexOf("#");if(r>-1){let i=s.includes(e.slice(r))?e.slice(r).length:1,a=s.slice(i);return a[0]!=="/"&&(a="/"+a),kl(a,"")}return kl(n,e)+o+s}function Ov(e,t,n,o){let s=[],r=[],i=null;const a=({state:p})=>{const f=jd(e,location),b=n.value,_=t.value;let A=0;if(p){if(n.value=f,t.value=p,i&&i===b){i=null;return}A=_?p.position-_.position:0}else o(f);s.forEach(E=>{E(n.value,b,{delta:A,type:gi.pop,direction:A?A>0?Ar.forward:Ar.back:Ar.unknown})})};function l(){i=n.value}function u(p){s.push(p);const f=()=>{const b=s.indexOf(p);b>-1&&s.splice(b,1)};return r.push(f),f}function c(){if(document.visibilityState==="hidden"){const{history:p}=window;if(!p.state)return;p.replaceState(me({},p.state,{scroll:Qs()}),"")}}function d(){for(const p of r)p();r=[],window.removeEventListener("popstate",a),window.removeEventListener("pagehide",c),document.removeEventListener("visibilitychange",c)}return window.addEventListener("popstate",a),window.addEventListener("pagehide",c),document.addEventListener("visibilitychange",c),{pauseListeners:l,listen:u,destroy:d}}function Al(e,t,n,o=!1,s=!1){return{back:e,current:t,forward:n,replaced:o,position:window.history.length,scroll:s?Qs():null}}function Dv(e){const{history:t,location:n}=window,o={value:jd(e,n)},s={value:t.state};s.value||r(o.value,{back:null,current:o.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function r(l,u,c){const d=e.indexOf("#"),p=d>-1?(n.host&&document.querySelector("base")?e:e.slice(d))+l:Rv()+e+l;try{t[c?"replaceState":"pushState"](u,"",p),s.value=u}catch(f){console.error(f),n[c?"replace":"assign"](p)}}function i(l,u){r(l,me({},t.state,Al(s.value.back,l,s.value.forward,!0),u,{position:s.value.position}),!0),o.value=l}function a(l,u){const c=me({},s.value,t.state,{forward:l,scroll:Qs()});r(c.current,c,!0),r(l,me({},Al(o.value,l,null),{position:c.position+1},u),!1),o.value=l}return{location:o,state:s,push:a,replace:i}}function Nv(e){e=yv(e);const t=Dv(e),n=Ov(e,t.state,t.location,t.replace);function o(r,i=!0){i||n.pauseListeners(),history.go(r)}const s=me({location:"",base:e,go:o,createHref:bv.bind(null,e)},t,n);return Object.defineProperty(s,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(s,"state",{enumerable:!0,get:()=>t.state.value}),s}let Rn=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var Me=(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})(Me||{});const xv={type:Rn.Static,value:""},Mv=/[a-zA-Z0-9_]/;function Fv(e){if(!e)return[[]];if(e==="/")return[[xv]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(f){throw new Error(`ERR (${n})/"${u}": ${f}`)}let n=Me.Static,o=n;const s=[];let r;function i(){r&&s.push(r),r=[]}let a=0,l,u="",c="";function d(){u&&(n===Me.Static?r.push({type:Rn.Static,value:u}):n===Me.Param||n===Me.ParamRegExp||n===Me.ParamRegExpEnd?(r.length>1&&(l==="*"||l==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),r.push({type:Rn.Param,value:u,regexp:c,repeatable:l==="*"||l==="+",optional:l==="*"||l==="?"})):t("Invalid state to consume buffer"),u="")}function p(){u+=l}for(;a<e.length;){if(l=e[a++],l==="\\"&&n!==Me.ParamRegExp){o=n,n=Me.EscapeNext;continue}switch(n){case Me.Static:l==="/"?(u&&d(),i()):l===":"?(d(),n=Me.Param):p();break;case Me.EscapeNext:p(),n=o;break;case Me.Param:l==="("?n=Me.ParamRegExp:Mv.test(l)?p():(d(),n=Me.Static,l!=="*"&&l!=="?"&&l!=="+"&&a--);break;case Me.ParamRegExp:l===")"?c[c.length-1]=="\\"?c=c.slice(0,-1)+l:n=Me.ParamRegExpEnd:c+=l;break;case Me.ParamRegExpEnd:d(),n=Me.Static,l!=="*"&&l!=="?"&&l!=="+"&&a--,c="";break;default:t("Unknown state");break}}return n===Me.ParamRegExp&&t(`Unfinished custom RegExp for param "${u}"`),d(),i(),s}const Pl="[^/]+?",Uv={sensitive:!1,strict:!1,start:!0,end:!0};var tt=(function(e){return e[e._multiplier=10]="_multiplier",e[e.Root=90]="Root",e[e.Segment=40]="Segment",e[e.SubSegment=30]="SubSegment",e[e.Static=40]="Static",e[e.Dynamic=20]="Dynamic",e[e.BonusCustomRegExp=10]="BonusCustomRegExp",e[e.BonusWildcard=-50]="BonusWildcard",e[e.BonusRepeatable=-20]="BonusRepeatable",e[e.BonusOptional=-8]="BonusOptional",e[e.BonusStrict=.7000000000000001]="BonusStrict",e[e.BonusCaseSensitive=.25]="BonusCaseSensitive",e})(tt||{});const Hv=/[.+*?^${}()[\]/\\]/g;function $v(e,t){const n=me({},Uv,t),o=[];let s=n.start?"^":"";const r=[];for(const u of e){const c=u.length?[]:[tt.Root];n.strict&&!u.length&&(s+="/");for(let d=0;d<u.length;d++){const p=u[d];let f=tt.Segment+(n.sensitive?tt.BonusCaseSensitive:0);if(p.type===Rn.Static)d||(s+="/"),s+=p.value.replace(Hv,"\\$&"),f+=tt.Static;else if(p.type===Rn.Param){const{value:b,repeatable:_,optional:A,regexp:E}=p;r.push({name:b,repeatable:_,optional:A});const C=E||Pl;if(C!==Pl){f+=tt.BonusCustomRegExp;try{`${C}`}catch(m){throw new Error(`Invalid custom RegExp for param "${b}" (${C}): `+m.message)}}let h=_?`((?:${C})(?:/(?:${C}))*)`:`(${C})`;d||(h=A&&u.length<2?`(?:/${h})`:"/"+h),A&&(h+="?"),s+=h,f+=tt.Dynamic,A&&(f+=tt.BonusOptional),_&&(f+=tt.BonusRepeatable),C===".*"&&(f+=tt.BonusWildcard)}c.push(f)}o.push(c)}if(n.strict&&n.end){const u=o.length-1;o[u][o[u].length-1]+=tt.BonusStrict}n.strict||(s+="/?"),n.end?s+="$":n.strict&&!s.endsWith("/")&&(s+="(?:/|$)");const i=new RegExp(s,n.sensitive?"":"i");function a(u){const c=u.match(i),d={};if(!c)return null;for(let p=1;p<c.length;p++){const f=c[p]||"",b=r[p-1];d[b.name]=f&&b.repeatable?f.split("/"):f}return d}function l(u){let c="",d=!1;for(const p of e){(!d||!c.endsWith("/"))&&(c+="/"),d=!1;for(const f of p)if(f.type===Rn.Static)c+=f.value;else if(f.type===Rn.Param){const{value:b,repeatable:_,optional:A}=f,E=b in u?u[b]:"";if(Lt(E)&&!_)throw new Error(`Provided param "${b}" is an array but it is not repeatable (* or + modifiers)`);const C=Lt(E)?E.join("/"):E;if(!C)if(A)p.length<2&&(c.endsWith("/")?c=c.slice(0,-1):d=!0);else throw new Error(`Missing required param "${b}"`);c+=C}}return c||"/"}return{re:i,score:o,keys:r,parse:a,stringify:l}}function Bv(e,t){let n=0;for(;n<e.length&&n<t.length;){const o=t[n]-e[n];if(o)return o;n++}return e.length<t.length?e.length===1&&e[0]===tt.Static+tt.Segment?-1:1:e.length>t.length?t.length===1&&t[0]===tt.Static+tt.Segment?1:-1:0}function Gd(e,t){let n=0;const o=e.score,s=t.score;for(;n<o.length&&n<s.length;){const r=Bv(o[n],s[n]);if(r)return r;n++}if(Math.abs(s.length-o.length)===1){if(Il(o))return 1;if(Il(s))return-1}return s.length-o.length}function Il(e){const t=e[e.length-1];return e.length>0&&t[t.length-1]<0}const Wv={strict:!1,end:!0,sensitive:!1};function Vv(e,t,n){const o=$v(Fv(e.path),n),s=me(o,{record:e,parent:t,children:[],alias:[]});return t&&!s.record.aliasOf==!t.record.aliasOf&&t.children.push(s),s}function jv(e,t){const n=[],o=new Map;t=_l(Wv,t);function s(d){return o.get(d)}function r(d,p,f){const b=!f,_=Rl(d);_.aliasOf=f&&f.record;const A=_l(t,d),E=[_];if("alias"in d){const m=typeof d.alias=="string"?[d.alias]:d.alias;for(const k of m)E.push(Rl(me({},_,{components:f?f.record.components:_.components,path:k,aliasOf:f?f.record:_})))}let C,h;for(const m of E){const{path:k}=m;if(p&&k[0]!=="/"){const S=p.record.path,L=S[S.length-1]==="/"?"":"/";m.path=p.record.path+(k&&L+k)}if(C=Vv(m,p,A),f?f.alias.push(C):(h=h||C,h!==C&&h.alias.push(C),b&&d.name&&!Ol(C)&&i(d.name)),Kd(C)&&l(C),_.children){const S=_.children;for(let L=0;L<S.length;L++)r(S[L],C,f&&f.children[L])}f=f||C}return h?()=>{i(h)}:Ro}function i(d){if(Wd(d)){const p=o.get(d);p&&(o.delete(d),n.splice(n.indexOf(p),1),p.children.forEach(i),p.alias.forEach(i))}else{const p=n.indexOf(d);p>-1&&(n.splice(p,1),d.record.name&&o.delete(d.record.name),d.children.forEach(i),d.alias.forEach(i))}}function a(){return n}function l(d){const p=qv(d,n);n.splice(p,0,d),d.record.name&&!Ol(d)&&o.set(d.record.name,d)}function u(d,p){let f,b={},_,A;if("name"in d&&d.name){if(f=o.get(d.name),!f)throw ao(Re.MATCHER_NOT_FOUND,{location:d});A=f.record.name,b=me(Ll(p.params,f.keys.filter(h=>!h.optional).concat(f.parent?f.parent.keys.filter(h=>h.optional):[]).map(h=>h.name)),d.params&&Ll(d.params,f.keys.map(h=>h.name))),_=f.stringify(b)}else if(d.path!=null)_=d.path,f=n.find(h=>h.re.test(_)),f&&(b=f.parse(_),A=f.record.name);else{if(f=p.name?o.get(p.name):n.find(h=>h.re.test(p.path)),!f)throw ao(Re.MATCHER_NOT_FOUND,{location:d,currentLocation:p});A=f.record.name,b=me({},p.params,d.params),_=f.stringify(b)}const E=[];let C=f;for(;C;)E.unshift(C.record),C=C.parent;return{name:A,path:_,params:b,matched:E,meta:Kv(E)}}e.forEach(d=>r(d));function c(){n.length=0,o.clear()}return{addRoute:r,resolve:u,removeRoute:i,clearRoutes:c,getRoutes:a,getRecordMatcher:s}}function Ll(e,t){const n={};for(const o of t)o in e&&(n[o]=e[o]);return n}function Rl(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Gv(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 Gv(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const o in e.components)t[o]=typeof n=="object"?n[o]:n;return t}function Ol(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Kv(e){return e.reduce((t,n)=>me(t,n.meta),{})}function qv(e,t){let n=0,o=t.length;for(;n!==o;){const r=n+o>>1;Gd(e,t[r])<0?o=r:n=r+1}const s=Yv(e);return s&&(o=t.lastIndexOf(s,o-1)),o}function Yv(e){let t=e;for(;t=t.parent;)if(Kd(t)&&Gd(e,t)===0)return t}function Kd({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Dl(e){const t=He(ia),n=He(aa),o=ue(()=>{const l=ce(e.to);return t.resolve(l)}),s=ue(()=>{const{matched:l}=o.value,{length:u}=l,c=l[u-1],d=n.matched;if(!c||!d.length)return-1;const p=d.findIndex(io.bind(null,c));if(p>-1)return p;const f=Nl(l[u-2]);return u>1&&Nl(c)===f&&d[d.length-1].path!==f?d.findIndex(io.bind(null,l[u-2])):p}),r=ue(()=>s.value>-1&&Zv(n.params,o.value.params)),i=ue(()=>s.value>-1&&s.value===n.matched.length-1&&Bd(n.params,o.value.params));function a(l={}){if(zv(l)){const u=t[ce(e.replace)?"replace":"push"](ce(e.to)).catch(Ro);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>u),u}return Promise.resolve()}return{route:o,href:ue(()=>o.value.href),isActive:r,isExactActive:i,navigate:a}}function Xv(e){return e.length===1?e[0]:e}const Jv=lt({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:Dl,setup(e,{slots:t}){const n=bn(Dl(e)),{options:o}=He(ia),s=ue(()=>({[xl(e.activeClass,o.linkActiveClass,"router-link-active")]:n.isActive,[xl(e.exactActiveClass,o.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const r=t.default&&Xv(t.default(n));return e.custom?r:ke("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:s.value},r)}}}),Qv=Jv;function zv(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 Zv(e,t){for(const n in t){const o=t[n],s=e[n];if(typeof o=="string"){if(o!==s)return!1}else if(!Lt(s)||s.length!==o.length||o.some((r,i)=>r.valueOf()!==s[i].valueOf()))return!1}return!0}function Nl(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const xl=(e,t,n)=>e??t??n,eb=lt({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const o=He(vi),s=ue(()=>e.route||o.value),r=He(Tl,0),i=ue(()=>{let u=ce(r);const{matched:c}=s.value;let d;for(;(d=c[u])&&!d.components;)u++;return u}),a=ue(()=>s.value.matched[i.value]);hn(Tl,ue(()=>i.value+1)),hn(Iv,a),hn(vi,s);const l=Qe();return Jt(()=>[l.value,a.value,e.name],([u,c,d],[p,f,b])=>{c&&(c.instances[d]=u,f&&f!==c&&u&&u===p&&(c.leaveGuards.size||(c.leaveGuards=f.leaveGuards),c.updateGuards.size||(c.updateGuards=f.updateGuards))),u&&c&&(!f||!io(c,f)||!p)&&(c.enterCallbacks[d]||[]).forEach(_=>_(u))},{flush:"post"}),()=>{const u=s.value,c=e.name,d=a.value,p=d&&d.components[c];if(!p)return Ml(n.default,{Component:p,route:u});const f=d.props[c],b=f?f===!0?u.params:typeof f=="function"?f(u):f:null,A=ke(p,me({},b,t,{onVnodeUnmounted:E=>{E.component.isUnmounted&&(d.instances[c]=null)},ref:l}));return Ml(n.default,{Component:A,route:u})||A}}});function Ml(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const qd=eb;function tb(e){const t=jv(e.routes,e),n=e.parseQuery||Av,o=e.stringifyQuery||Cl,s=e.history,r=wo(),i=wo(),a=wo(),l=kt(gt);let u=gt;Gn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const c=Cr.bind(null,F=>""+F),d=Cr.bind(null,uv),p=Cr.bind(null,Bo);function f(F,X){let j,Q;return Wd(F)?(j=t.getRecordMatcher(F),Q=X):Q=F,t.addRoute(Q,j)}function b(F){const X=t.getRecordMatcher(F);X&&t.removeRoute(X)}function _(){return t.getRoutes().map(F=>F.record)}function A(F){return!!t.getRecordMatcher(F)}function E(F,X){if(X=me({},X||l.value),typeof F=="string"){const g=Tr(n,F,X.path),P=t.resolve({path:g.path},X),H=s.createHref(g.fullPath);return me(g,P,{params:p(P.params),hash:Bo(g.hash),redirectedFrom:void 0,href:H})}let j;if(F.path!=null)j=me({},F,{path:Tr(n,F.path,X.path).path});else{const g=me({},F.params);for(const P in g)g[P]==null&&delete g[P];j=me({},F,{params:d(g)}),X.params=d(X.params)}const Q=t.resolve(j,X),ie=F.hash||"";Q.params=c(p(Q.params));const he=pv(o,me({},F,{hash:av(ie),path:Q.path})),w=s.createHref(he);return me({fullPath:he,hash:ie,query:o===Cl?Pv(F.query):F.query||{}},Q,{redirectedFrom:void 0,href:w})}function C(F){return typeof F=="string"?Tr(n,F,l.value.path):me({},F)}function h(F,X){if(u!==F)return ao(Re.NAVIGATION_CANCELLED,{from:X,to:F})}function m(F){return L(F)}function k(F){return m(me(C(F),{replace:!0}))}function S(F,X){const j=F.matched[F.matched.length-1];if(j&&j.redirect){const{redirect:Q}=j;let ie=typeof Q=="function"?Q(F,X):Q;return typeof ie=="string"&&(ie=ie.includes("?")||ie.includes("#")?ie=C(ie):{path:ie},ie.params={}),me({query:F.query,hash:F.hash,params:ie.path!=null?{}:F.params},ie)}}function L(F,X){const j=u=E(F),Q=l.value,ie=F.state,he=F.force,w=F.replace===!0,g=S(j,Q);if(g)return L(me(C(g),{state:typeof g=="object"?me({},ie,g.state):ie,force:he,replace:w}),X||j);const P=j;P.redirectedFrom=X;let H;return!he&&hv(o,Q,j)&&(H=ao(Re.NAVIGATION_DUPLICATED,{to:P,from:Q}),Pe(Q,Q,!0,!1)),(H?Promise.resolve(H):M(P,Q)).catch(x=>$t(x)?$t(x,Re.NAVIGATION_GUARD_REDIRECT)?x:st(x):J(x,P,Q)).then(x=>{if(x){if($t(x,Re.NAVIGATION_GUARD_REDIRECT))return L(me({replace:w},C(x.to),{state:typeof x.to=="object"?me({},ie,x.to.state):ie,force:he}),X||P)}else x=N(P,Q,!0,w,ie);return K(P,Q,x),x})}function O(F,X){const j=h(F,X);return j?Promise.reject(j):Promise.resolve()}function I(F){const X=ct.values().next().value;return X&&typeof X.runWithContext=="function"?X.runWithContext(F):F()}function M(F,X){let j;const[Q,ie,he]=Lv(F,X);j=Pr(Q.reverse(),"beforeRouteLeave",F,X);for(const g of Q)g.leaveGuards.forEach(P=>{j.push(un(P,F,X))});const w=O.bind(null,F,X);return j.push(w),Be(j).then(()=>{j=[];for(const g of r.list())j.push(un(g,F,X));return j.push(w),Be(j)}).then(()=>{j=Pr(ie,"beforeRouteUpdate",F,X);for(const g of ie)g.updateGuards.forEach(P=>{j.push(un(P,F,X))});return j.push(w),Be(j)}).then(()=>{j=[];for(const g of he)if(g.beforeEnter)if(Lt(g.beforeEnter))for(const P of g.beforeEnter)j.push(un(P,F,X));else j.push(un(g.beforeEnter,F,X));return j.push(w),Be(j)}).then(()=>(F.matched.forEach(g=>g.enterCallbacks={}),j=Pr(he,"beforeRouteEnter",F,X,I),j.push(w),Be(j))).then(()=>{j=[];for(const g of i.list())j.push(un(g,F,X));return j.push(w),Be(j)}).catch(g=>$t(g,Re.NAVIGATION_CANCELLED)?g:Promise.reject(g))}function K(F,X,j){a.list().forEach(Q=>I(()=>Q(F,X,j)))}function N(F,X,j,Q,ie){const he=h(F,X);if(he)return he;const w=X===gt,g=Gn?history.state:{};j&&(Q||w?s.replace(F.fullPath,me({scroll:w&&g&&g.scroll},ie)):s.push(F.fullPath,ie)),l.value=F,Pe(F,X,j,w),st()}let V;function se(){V||(V=s.listen((F,X,j)=>{if(!ut.listening)return;const Q=E(F),ie=S(Q,ut.currentRoute.value);if(ie){L(me(ie,{replace:!0,force:!0}),Q).catch(Ro);return}u=Q;const he=l.value;Gn&&kv(El(he.fullPath,j.delta),Qs()),M(Q,he).catch(w=>$t(w,Re.NAVIGATION_ABORTED|Re.NAVIGATION_CANCELLED)?w:$t(w,Re.NAVIGATION_GUARD_REDIRECT)?(L(me(C(w.to),{force:!0}),Q).then(g=>{$t(g,Re.NAVIGATION_ABORTED|Re.NAVIGATION_DUPLICATED)&&!j.delta&&j.type===gi.pop&&s.go(-1,!1)}).catch(Ro),Promise.reject()):(j.delta&&s.go(-j.delta,!1),J(w,Q,he))).then(w=>{w=w||N(Q,he,!1),w&&(j.delta&&!$t(w,Re.NAVIGATION_CANCELLED)?s.go(-j.delta,!1):j.type===gi.pop&&$t(w,Re.NAVIGATION_ABORTED|Re.NAVIGATION_DUPLICATED)&&s.go(-1,!1)),K(Q,he,w)}).catch(Ro)}))}let ae=wo(),Y=wo(),te;function J(F,X,j){st(F);const Q=Y.list();return Q.length?Q.forEach(ie=>ie(F,X,j)):console.error(F),Promise.reject(F)}function Ee(){return te&&l.value!==gt?Promise.resolve():new Promise((F,X)=>{ae.add([F,X])})}function st(F){return te||(te=!F,se(),ae.list().forEach(([X,j])=>F?j(F):X()),ae.reset()),F}function Pe(F,X,j,Q){const{scrollBehavior:ie}=e;if(!Gn||!ie)return Promise.resolve();
3const he=!j&&Sv(El(F.fullPath,0))||(Q||!j)&&history.state&&history.state.scroll||null;return no().then(()=>ie(F,X,he)).then(w=>w&&_v(w)).catch(w=>J(w,F,X))}const Ie=F=>s.go(F);let ht;const ct=new Set,ut={currentRoute:l,listening:!0,addRoute:f,removeRoute:b,clearRoutes:t.clearRoutes,hasRoute:A,getRoutes:_,resolve:E,options:e,push:m,replace:k,go:Ie,back:()=>Ie(-1),forward:()=>Ie(1),beforeEach:r.add,beforeResolve:i.add,afterEach:a.add,onError:Y.add,isReady:Ee,install(F){F.component("RouterLink",Qv),F.component("RouterView",qd),F.config.globalProperties.$router=ut,Object.defineProperty(F.config.globalProperties,"$route",{enumerable:!0,get:()=>ce(l)}),Gn&&!ht&&l.value===gt&&(ht=!0,m(s.location).catch(Q=>{}));const X={};for(const Q in gt)Object.defineProperty(X,Q,{get:()=>l.value[Q],enumerable:!0});F.provide(ia,ut),F.provide(aa,Nt(X)),F.provide(vi,l);const j=F.unmount;ct.add(F),F.unmount=function(){ct.delete(F),ct.size<1&&(u=gt,V&&V(),V=null,l.value=gt,ht=!1,te=!1),j()}}};function Be(F){return F.reduce((X,j)=>X.then(()=>I(j)),Promise.resolve())}return ut}function Yd(e){return He(aa)}const Ir=e=>typeof e=="function",nb=e=>e!==null&&typeof e=="object",ob=e=>(nb(e)||Ir(e))&&Ir(e.then)&&Ir(e.catch),Xd=(e,t)=>({default:()=>e?ke(em,e===!0?{}:e,t):t.default?.()}),sb=/(:\w+)\([^)]+\)/g,rb=/(:\w+)[?+*]/g,ib=/:\w+/g;function Fl(e){const t=e?.meta.key??e.path.replace(sb,"$1").replace(rb,"$1").replace(ib,n=>e.params[n.slice(1)]?.toString()||"");return typeof t=="function"?t(e):t}function ab(e,t){return e===t||t===gt?!1:Fl(e)!==Fl(t)?!0:!e.matched.every((o,s)=>o.components&&o.components.default===t.matched[s]?.components?.default)}function lb(e,t=!1){if(e){if(e.nodeName==="#comment"&&e.nodeValue==="[")return Jd(e,[],t);if(t){const n=e.cloneNode(!0);return n.querySelectorAll("[data-island-slot]").forEach(o=>{o.innerHTML=""}),[n.outerHTML]}return[e.outerHTML]}}function Jd(e,t=[],n=!1){if(e&&e.nodeName){if(ub(e))return t;if(!cb(e)){const o=e.cloneNode(!0);n&&o.querySelectorAll?.("[data-island-slot]").forEach(s=>{s.innerHTML=""}),t.push(o.outerHTML)}Jd(e.nextSibling,t,n)}return t}function Lr(e,t){const n=e?lb(e):[t];return n?Hh(n.join(""),n.length):ke("div")}function cb(e){return e.nodeName==="#comment"&&e.nodeValue==="["}function ub(e){return e.nodeName==="#comment"&&e.nodeValue==="]"}function Ul(e){return Array.isArray(e)?e:[e]}function Qd(e){const t=[];for(const n of e)n&&t.push({...n,onAfterLeave:n.onAfterLeave?Ul(n.onAfterLeave):void 0,onBeforeLeave:n.onBeforeLeave?Ul(n.onBeforeLeave):void 0});return si(...t)}const db={scrollBehavior(e,t,n){const o=Ae(),s=ot(),r=s.options?.scrollBehaviorType??"auto";return e.path.replace(/\/$/,"")===t.path.replace(/\/$/,"")?t.hash&&!e.hash?{left:0,top:0}:e.hash?{el:e.hash,top:zd(e.hash),behavior:r}:!1:(typeof e.meta.scrollToTop=="function"?e.meta.scrollToTop(e,t):e.meta.scrollToTop)===!1?!1:t===gt?Hl(e,t,n,r):new Promise(a=>{const l=()=>{requestAnimationFrame(()=>{if(s.currentRoute.value.fullPath!==e.fullPath){a(!1);return}a(Hl(e,t,n,r))})};o.hooks.hookOnce("page:loading:end",()=>{const u=o["~transitionPromise"];u?u.then(l):l()})})}};function zd(e){try{const t=document.querySelector(e);if(t)return(Number.parseFloat(getComputedStyle(t).scrollMarginTop)||0)+(Number.parseFloat(getComputedStyle(document.documentElement).scrollPaddingTop)||0)}catch{}return 0}function Hl(e,t,n,o){return n||(e.hash?{el:e.hash,top:zd(e.hash),behavior:ab(e,t)?o:"instant"}:{left:0,top:0})}const fb={hashMode:!1,scrollBehaviorType:"auto"},Vt={...fb,...db},Zd=(()=>{const e={prerender:!0},t={redirect:"/"};return(n,o)=>{let s=[];return o.charCodeAt(o.length-1)===47&&(o=o.slice(0,-1)),o===""?s.push({data:e}):o==="/home"?s.push({data:t}):o.charCodeAt(o.length-1)===47&&(o==="/"?s.push({data:e}):o==="/home/"&&s.push({data:t})),s.reverse()}})(),pb=Zd,hb=function(t){if(!t.includes("%"))return t;const n=t.indexOf("?"),o=n===-1?t:t.slice(0,n);try{return n===-1?decodeURI(o):decodeURI(o)+t.slice(n)}catch{return t}},$l=(e,t)=>{if(typeof e!="string")return e;const n=hb(e);return t?n.toLowerCase():n},ef=e=>Vt.sensitive?si({},...Zd("",$l(e,!1)).map(t=>t.data).reverse()):si({},...pb("",$l(e,!0)).map(t=>t.data).reverse()),mb=ef;let ms;function gb(){let e;return e=$fetch(ta(`builds/meta/${po().app.buildId}.json`),{responseType:"json"}).then(t=>{if(!t||typeof t!="object"||!Array.isArray(t.prerendered))throw new Error("[nuxt] Received malformed app manifest. Ensure that `builds/meta/*.json` is served as JSON by your hosting/proxy and not rewritten to an HTML fallback.");return t}),ms=e,e.catch(t=>{ms===e&&(ms=void 0),console.error("[nuxt] Error fetching app manifest.",t)}),e}function la(){return ms||gb()}function Qo(e){const t=typeof e=="string"?e:e.path;try{return mb(t)}catch(n){return console.error("[nuxt] Error matching route rules.",n),{}}}async function Bl(e,t={}){if(await wb(e)){const n=await bb(e,t),o=ca(e)?"default":"force-cache";return await tf(n,o)||null}return null}const yb="_payload.json",vb="_b";async function bb(e,t={}){const n=new URL(e,"http://localhost");if(n.host!=="localhost"||nn(n.pathname,{acceptRelative:!0}))throw new Error("Payload URL must not include hostname: "+e);
3const o=po(),s=t.hash||(t.fresh?Date.now():o.app.buildId),r=o.app.cdnURL,i=r&&await _b(e)?r:o.app.baseURL,a=Ys(i,n.pathname,yb);return ca(e)||(n.search=""),s&&n.searchParams.set(vb,String(s)),a+n.search}async function tf(e,t){try{if(Rg){const n=await fetch(e,{cache:t});return n.ok?await sf(await n.text()):null}}catch(n){console.warn("[nuxt] Cannot load payload ",e,n)}return null}function nf(e){if(e.redirect)return!1;if(e.prerender)return!0}function zs(e){return new URL(e,"http://localhost").pathname}function ca(e){return!!Qo({path:zs(e)}).payload}async function of(e){e=zs(e),e=e==="/"?e:e.replace(/\/$/,"");try{return(await la()).prerendered.includes(e)}catch{return!1}}async function wb(e=ho().path){const t=Qo({path:zs(e)});if(t.ssr===!1)return!1;const n=nf(t);return n!==void 0?n:t.payload?!0:await of(e)}async function _b(e=ho().path){const t=nf(Qo({path:zs(e)}));return t!==void 0?t:await of(e)}let Tn=null;async function kb(){if(Tn)return Tn;const e=document.getElementById("__NUXT_DATA__");if(!e)return{};const t=await sf(e.textContent||""),n=e.dataset.src?await tf(e.dataset.src,t.prerenderedAt?"force-cache":"no-cache"):void 0;return Tn={...t,...n,...window.__NUXT__},Tn.config?.public&&(Tn.config.public=bn(Tn.config.public)),Tn}async function sf(e){return await hy(e,Ae()._payloadRevivers)}function Sb(e,t){Ae()._payloadRevivers[e]=t}const Eb=[["NuxtError",e=>xn(e)],["EmptyShallowRef",e=>kt(e==="_"?void 0:e==="0n"?BigInt(0):Ps(e))],["EmptyRef",e=>Qe(e==="_"?void 0:e==="0n"?BigInt(0):Ps(e))],["ShallowRef",e=>kt(e)],["ShallowReactive",e=>Nt(e)],["Ref",e=>Qe(e)],["Reactive",e=>bn(e)]],Cb=St({name:"nuxt:revive-payload:client",order:-30,async setup(e){let t,n;for(const[o,s]of Eb)Sb(o,s);Object.assign(e.payload,([t,n]=Lo(()=>e.runWithContext(kb)),t=await t,n(),t)),window.__NUXT__=e.payload}});async function ua(e,t={}){const n=t.document||e.resolvedOptions.document;if(!n||!e.dirty)return;const o={shouldRender:!0,tags:[]};if(await e.hooks.callHook("dom:beforeRender",o),!!o.shouldRender)return e._domUpdatePromise||(e._domUpdatePromise=new Promise(async s=>{const r=new Map,i=new Promise(f=>{e.resolveTags().then(b=>{f(b.map(_=>{const A=r.get(_._d)||0,E={tag:_,id:(A?`${_._d}:${A}`:_._d)||_._h,shouldRender:!0};return _._d&&Ld(_._d)&&r.set(_._d,A+1),E}))})});let a=e._dom;if(!a){a={title:n.title,elMap:new Map().set("htmlAttrs",n.documentElement).set("bodyAttrs",n.body)};for(const f of["body","head"]){const b=n[f]?.children;for(const _ of b){const A=_.tagName.toLowerCase();if(!ci.has(A))continue;const E=Od({tag:A,props:{}},{innerHTML:_.innerHTML,..._.getAttributeNames().reduce((C,h)=>(C[h]=_.getAttribute(h),C),{})||{}});if(E.key=_.getAttribute("data-hid")||void 0,E._d=pi(E)||Rd(E),a.elMap.has(E._d)){let C=1,h=E._d;for(;a.elMap.has(h);)h=`${E._d}:${C++}`;a.elMap.set(h,_)}else a.elMap.set(E._d,_)}}}a.pendingSideEffects={...a.sideEffects},a.sideEffects={};function l(f,b,_){const A=`${f}:${b}`;a.sideEffects[A]=_,delete a.pendingSideEffects[A]}function u({id:f,$el:b,tag:_}){const A=_.tag.endsWith("Attrs");a.elMap.set(f,b),A||(_.textContent&&_.textContent!==b.textContent&&(b.textContent=_.textContent),_.innerHTML&&_.innerHTML!==b.innerHTML&&(b.innerHTML=_.innerHTML),l(f,"el",()=>{b?.remove(),a.elMap.delete(f)}));for(const E in _.props){if(!Object.prototype.hasOwnProperty.call(_.props,E))continue;const C=_.props[E];if(E.startsWith("on")&&typeof C=="function"){const m=b?.dataset;if(m&&m[`${E}fired`]){const k=E.slice(0,-5);C.call(b,new Event(k.substring(2)))}b.getAttribute(`data-${E}`)!==""&&((_.tag==="bodyAttrs"?n.defaultView:b).addEventListener(E.substring(2),C.bind(b)),b.setAttribute(`data-${E}`,""));continue}const h=`attr:${E}`;if(E==="class"){if(!C)continue;for(const m of C)A&&l(f,`${h}:${m}`,()=>b.classList.remove(m)),!b.classList.contains(m)&&b.classList.add(m)}else if(E==="style"){if(!C)continue;for(const[m,k]of C)l(f,`${h}:${m}`,()=>{b.style.removeProperty(m)}),b.style.setProperty(m,k)}else C!==!1&&C!==null&&(b.getAttribute(E)!==C&&b.setAttribute(E,C===!0?"":String(C)),A&&l(f,h,()=>b.removeAttribute(E)))}}const c=[],d={bodyClose:void 0,bodyOpen:void 0,head:void 0},p=await i;for(const f of p){const{tag:b,shouldRender:_,id:A}=f;if(_){if(b.tag==="title"){n.title=b.textContent,l("title","",()=>n.title=a.title);continue}f.$el=f.$el||a.elMap.get(A),f.$el?u(f):ci.has(b.tag)&&c.push(f)}}for(const f of c){const b=f.tag.tagPosition||"head";f.$el=n.createElement(f.tag.tag),u(f),d[b]=d[b]||n.createDocumentFragment(),d[b].appendChild(f.$el)}for(const f of p)await e.hooks.callHook("dom:renderTag",f,n,l);d.head&&n.head.appendChild(d.head),d.bodyOpen&&n.body.insertBefore(d.bodyOpen,n.body.firstChild),d.bodyClose&&n.body.appendChild(d.bodyClose);for(const f in a.pendingSideEffects)a.pendingSideEffects[f]();e._dom=a,await e.hooks.callHook("dom:rendered",{renders:p}),s()}).finally(()=>{e._domUpdatePromise=void 0,e.dirty=!1})),e._domUpdatePromise}function Tb(e={}){const t=e.domOptions?.render||ua;e.document=e.document||(typeof window<"u"?document:void 0);const n=e.document?.head.querySelector('script[id="unhead:payload"]')?.innerHTML||!1,o=Uy({...e,plugins:[...e.plugins||[],{key:"client",hooks:{"entries:updated":t}}],init:[n?JSON.parse(n):!1,...e.init||[]]});return o.ssr=!1,o}function Ab(e,t){let n=0;return()=>{const o=++n;t(()=>{n===o&&e()})}}function Pb(e={}){const t=Tb({domOptions:{render:Ab(()=>ua(t),n=>setTimeout(n,0))},...e});return t.install=qy(t),t}const Ib={disableDefaults:!0,disableCapoSorting:!1,plugins:[By,Wy,Gy,$y]},Lb=St({name:"nuxt:head",enforce:"pre",setup(e){const t=Pb(Ib);e.vueApp.use(t);{let n=!0;const o=async()=>{n=!1,await ua(t)};t.hooks.hook("dom:beforeRender",r=>{r.shouldRender=!n}),e.hooks.hook("page:start",()=>{n=!0}),e.hooks.hook("page:finish",()=>{e.isHydrating||o()}),e.hooks.hook("app:error",o),e.hooks.hook("app:suspense:resolve",o);const s=t.push.bind(t);t.push=((r,i)=>{const a=s(r,i),l=a.dispose.bind(a);return a.dispose=()=>{const u=e["~transitionPromise"];u?u.then(l):l()},a})}}}),Rb=/(:\w+)\([^)]+\)/g,Ob=/(:\w+)[?+*]/g,Db=/:\w+/g,Nb=(e,t)=>
3t.path.replace(Rb,"$1").replace(Ob,"$1").replace(Db,n=>e.params[n.slice(1)]?.toString()||""),Wo=(e,t)=>{const n=e.route.matched.find(s=>s.components?.default===e.Component.type),o=t??n?.meta.key??(n&&Nb(e.route,n));return typeof o=="function"?o(e.route):o},xb=(e,t)=>({default:()=>e?ke(Jp,e===!0?{}:e,t):t});function rf(e){return Array.isArray(e)?e:[e]}const Mb="modulepreload",Fb=function(e,t){return new URL(e,t).href},Wl={},pe=function(t,n,o){let s=Promise.resolve();if(n&&n.length>0){let u=function(c){return Promise.all(c.map(d=>Promise.resolve(d).then(p=>({status:"fulfilled",value:p}),p=>({status:"rejected",reason:p}))))};const i=document.getElementsByTagName("link"),a=document.querySelector("meta[property=csp-nonce]"),l=a?.nonce||a?.getAttribute("nonce");s=u(n.map(c=>{if(c=Fb(c,o),c in Wl)return;Wl[c]=!0;const d=c.endsWith(".css"),p=d?'[rel="stylesheet"]':"";if(o)for(let b=i.length-1;b>=0;b--){const _=i[b];if(_.href===c&&(!d||_.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${c}"]${p}`))return;const f=document.createElement("link");if(f.rel=d?"stylesheet":Mb,d||(f.as="script"),f.crossOrigin="",f.href=c,l&&f.setAttribute("nonce",l),document.head.appendChild(f),d)return new Promise((b,_)=>{f.addEventListener("load",b),f.addEventListener("error",()=>_(new Error(`Unable to preload CSS for ${c}`)))})}))}function r(i){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=i,window.dispatchEvent(a),!a.defaultPrevented)throw i}return s.then(i=>{for(const a of i||[])a.status==="rejected"&&r(a.reason);return t().catch(r)})},Ub=null,Hb={},Rr=[{name:"index",path:"/",component:()=>pe(()=>import("./5wPEOH3O.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13]),import.meta.url)},{name:"path",path:"/:path(.*)*",component:()=>pe(()=>import("./Bjc4h941.js").then(e=>e._),__vite__mapDeps([14,12,5,10]),import.meta.url)},{name:"changelog-page-page",path:"/changelog/page/:page()",component:()=>pe(()=>import("./DB-Qoxcv.js"),__vite__mapDeps([15,16,9,10,11,17,18]),import.meta.url)},{name:"support-request-human",path:"/support/request-human",component:()=>pe(()=>import("./Ce-IScT0.js"),__vite__mapDeps([19,9,10,11,20]),import.meta.url)},{name:"after-they-ship-slug",path:"/after-they-ship/:slug()",component:()=>pe(()=>import("./fae0-Gm1.js"),__vite__mapDeps([21,22,5,23,9,10,11,17,24]),import.meta.url)},{name:"after-they-ship-articles-slug",path:"/after-they-ship/articles/:slug()",component:()=>pe(()=>import("./fD6o0Dha.js"),__vite__mapDeps([25,22,5,23,9,10,11,17,26]),import.meta.url)},{name:Ub?.name,path:"/home",component:Hb}],$b=async e=>{let t,n;if(!e.meta?.validate)return;const o=([t,n]=Lo(()=>Promise.resolve(e.meta.validate(e))),t=await t,n(),t);return o===!0?void 0:xn({fatal:!0,status:o&&(o.status||o.statusCode)||404,statusText:o&&(o.statusText||o.statusMessage)||`Page Not Found: ${e.fullPath}`,data:{path:e.fullPath}})},Bb=e=>{const t=Qo({path:e.path});if(t.redirect){const n=t.redirect.includes("#")?t.redirect:t.redirect+e.hash;return nn(n,{acceptRelative:!0})?(window.location.href=n,!1):n}},Wb=[$b,Bb],bi={};function Vl(e,t,n){const{pathname:o,search:s,hash:r}=t,i=e.indexOf("#");if(i>-1){const u=r.includes(e.slice(i))?e.slice(i).length:1;let c=r.slice(u);return c[0]!=="/"&&(c="/"+c),ol(c,"")}const a=ol(o,e),l=!n||cd(a,n)?a:n;return l+(l.includes("?")?"":s)+r}const Vb=St({name:"nuxt:router",enforce:"pre",async setup(e){let t,n,o=po().app.baseURL;const s=Vt.history?.(o)??Nv(o),r=Vt.routes?([t,n]=Lo(()=>Vt.routes(Rr)),t=await t,n(),t??Rr):Rr;let i;const a=tb({...Vt,scrollBehavior:(h,m,k)=>{if(m===gt){i=k;return}if(Vt.scrollBehavior){if(a.options.scrollBehavior=Vt.scrollBehavior,"scrollRestoration"in window.history){const S=a.beforeEach(()=>{S(),window.history.scrollRestoration="manual"})}return Vt.scrollBehavior(h,gt,i||k)}},history:s,routes:r});"scrollRestoration"in window.history&&(window.history.scrollRestoration="auto"),e.vueApp.use(a);const l=kt(a.currentRoute.value);a.afterEach((h,m)=>{l.value=m}),Object.defineProperty(e.vueApp.config.globalProperties,"previousRoute",{get:()=>l.value});const u=Vl(o,window.location,e.payload.path),c=kt(a.currentRoute.value),d=()=>{c.value=a.currentRoute.value};
3a.afterEach((h,m)=>{const k=h.matched.at(-1)?.components?.default,S=m.matched.at(-1)?.components?.default;if(k===S){const L=Wo({route:h,Component:{type:k}}),O=Wo({route:m,Component:{type:S}});L===O&&d();return}h.matched.length<m.matched.length&&h.matched.every((L,O)=>L.components?.default===m.matched[O]?.components?.default)&&d()});const p={sync:d};for(const h in c.value)Object.defineProperty(p,h,{get:()=>c.value[h],enumerable:!0});e._route=Nt(p),e._middleware||={global:[],named:{}};const f=Js();a.afterEach(async(h,m,k)=>{delete e._processingMiddleware,!e.isHydrating&&f.value&&await e.runWithContext(Xg),k&&await e.callHook("page:loading:end")});try{[t,n]=Lo(()=>a.isReady()),await t,n()}catch(h){[t,n]=Lo(()=>e.runWithContext(()=>Ln(h))),await t,n()}const b=u!==a.currentRoute.value.fullPath?a.resolve(u):a.currentRoute.value,_=a.currentRoute.value.fullPath,A=e.isHydrating&&e.payload.prerenderedAt&&e.payload.path&&u!==e.payload.path&&cd(a.currentRoute.value.path,e.payload.path);d();function E(h){!e.isHydrating&&h.fullPath!==Vl(o,window.location)&&s.push(h.fullPath)}const C=e.payload.state._layout;return a.beforeEach(async(h,m)=>{await e.callHook("page:loading:start"),h.meta=bn(h.meta),e.isHydrating&&C&&!Zt(h.meta.layout)&&(h.meta.layout=C),e._processingMiddleware=!0;{const k=new Set([...Wb,...e._middleware.global]);for(const L of h.matched){const O=L.meta.middleware;if(O)for(const I of rf(O))k.add(I)}const S=Qo({path:h.path});if(S.appMiddleware)for(const L in S.appMiddleware)S.appMiddleware[L]?k.add(L):k.delete(L);for(const L of k){const O=typeof L=="string"?e._middleware.named[L]||await bi[L]?.().then(I=>I.default||I):L;if(!O)throw new Error(`Unknown route middleware: '${L}'.`);try{const I=await e.runWithContext(()=>O(h,m));if(!e.payload.serverRendered&&e.isHydrating&&(I===!1||I instanceof Error)){const M=I||xn({status:404,statusText:`Page Not Found: ${u}`});return await e.runWithContext(()=>Ln(M)),!1}if(I===!0)continue;if(I===!1)return I;if(I)return _d(I)&&I.fatal&&(await e.runWithContext(()=>Ln(I)),E(h)),I}catch(I){const M=xn(I);return M.fatal&&(await e.runWithContext(()=>Ln(M)),E(h)),M}}}}),a.onError(async()=>{delete e._processingMiddleware,await e.callHook("page:loading:end")}),a.afterEach(h=>{if(h.matched.length===0&&!f.value)return e.runWithContext(()=>Ln(xn({status:404,fatal:!1,statusText:`Page not found: ${h.fullPath}`,data:{path:h.fullPath}})))}),e.hooks.hookOnce("app:created",async()=>{try{if("name"in b&&(b.name=void 0),!(a.currentRoute.value.fullPath!==_))if(A){const m=a.resolve(e.payload.path);"name"in m&&(m.name=void 0),await a.replace({...m,force:!0});const k=()=>{e["~restoreDeferredRoute"]&&(e["~restoreDeferredRoute"]=void 0,a.currentRoute.value=a.resolve(u),d(),a.replace({...b,force:!0}).catch(()=>{}))};e["~restoreDeferredRoute"]=k,e.hooks.hookOnce("app:suspense:resolve",k)}else await a.replace({...b,force:!0});a.options.scrollBehavior=Vt.scrollBehavior}catch(h){await e.runWithContext(()=>Ln(h))}}),{provide:{router:a}}}});function jb(e,t){typeof console<"u"&&(console.warn("[intlify] "+e),t&&console.warn(t.stack))}const Ns=typeof window<"u",wn=(e,t=!1)=>t?Symbol.for(e):Symbol(e),Gb=(e,t,n)=>Kb({l:e,k:t,s:n}),Kb=e=>JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029").replace(/\u0027/g,"\\u0027"),De=e=>typeof e=="number"&&isFinite(e),qb=e=>lf(e)==="[object Date]",yn=e=>lf(e)==="[object RegExp]",Zs=e=>re(e)&&Object.keys(e).length===0,Ye=Object.assign,Yb=Object.create,ye=(e=null)=>Yb(e);let jl;const Yt=()=>jl||(jl=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:ye());function Gl(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/").replace(/=/g,"=")}function Kl(e){return e.replace(/&(?![a-zA-Z0-9#]{2,6};)/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")}function Xb(e){return e=e.replace(/(\w+)\s*=\s*"([^"]*)"/g,(o,s,r)=>`${s}="${Kl(r)}"`),e=e.replace(/(\w+)\s*=\s*'([^']*)'/g,(o,s,r)=>`${s}='${Kl(r)}'`),/\s*on\w+\s*=\s*["']?[^"'>]+["']?/gi.test(e)&&(e=e.replace(/(\s+)(on)(\w+\s*=)/gi,"$1on$3")),[/(\s+(?:href|src|action|formaction)\s*=\s*["']?)\s*javascript:/gi,/(style\s*=\s*["'][^"']*url\s*\(\s*)javascript:/gi].forEac
3h(o=>{e=e.replace(o,"$1javascript:")}),e}const Jb=Object.prototype.hasOwnProperty;function Tt(e,t){return Jb.call(e,t)}const Ce=Array.isArray,we=e=>typeof e=="function",q=e=>typeof e=="string",le=e=>typeof e=="boolean",fe=e=>e!==null&&typeof e=="object",Qb=e=>fe(e)&&we(e.then)&&we(e.catch),af=Object.prototype.toString,lf=e=>af.call(e),re=e=>{if(!fe(e))return!1;const t=Object.getPrototypeOf(e);return t===null||t.constructor===Object},zb=e=>e==null?"":Ce(e)||re(e)&&e.toString===af?JSON.stringify(e,null,2):String(e);function Zb(e,t=""){return e.reduce((n,o,s)=>s===0?n+o:n+t+o,"")}function er(e){let t=e;return()=>++t}const ls=e=>!fe(e)||Ce(e);function gs(e,t){if(ls(e)||ls(t))throw new Error("Invalid value");const n=[{src:e,des:t}];for(;n.length;){const{src:o,des:s}=n.pop();Object.keys(o).forEach(r=>{r!=="__proto__"&&(fe(o[r])&&!fe(s[r])&&(s[r]=Array.isArray(o[r])?[]:ye()),ls(s[r])||ls(o[r])?s[r]=o[r]:n.push({src:o[r],des:s[r]}))})}}function ew(e,t,n){return{line:e,column:t,offset:n}}function xs(e,t,n){return{start:e,end:t}}const tw=/\{([0-9a-zA-Z]+)\}/g;function cf(e,...t){return t.length===1&&nw(t[0])&&(t=t[0]),(!t||!t.hasOwnProperty)&&(t={}),e.replace(tw,(n,o)=>t.hasOwnProperty(o)?t[o]:"")}const uf=Object.assign,ql=e=>typeof e=="string",nw=e=>e!==null&&typeof e=="object";function df(e,t=""){return e.reduce((n,o,s)=>s===0?n+o:n+t+o,"")}const da={USE_MODULO_SYNTAX:1,__EXTEND_POINT__:2},ow={[da.USE_MODULO_SYNTAX]:"Use modulo before '{{0}}'."};function sw(e,t,...n){const o=cf(ow[e],...n||[]),s={message:String(o),code:e};return t&&(s.location=t),s}const ne={EXPECTED_TOKEN:1,INVALID_TOKEN_IN_PLACEHOLDER:2,UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER:3,UNKNOWN_ESCAPE_SEQUENCE:4,INVALID_UNICODE_ESCAPE_SEQUENCE:5,UNBALANCED_CLOSING_BRACE:6,UNTERMINATED_CLOSING_BRACE:7,EMPTY_PLACEHOLDER:8,NOT_ALLOW_NEST_PLACEHOLDER:9,INVALID_LINKED_FORMAT:10,MUST_HAVE_MESSAGES_IN_PLURAL:11,UNEXPECTED_EMPTY_LINKED_MODIFIER:12,UNEXPECTED_EMPTY_LINKED_KEY:13,UNEXPECTED_LEXICAL_ANALYSIS:14,UNHANDLED_CODEGEN_NODE_TYPE:15,UNHANDLED_MINIFIER_NODE_TYPE:16,__EXTEND_POINT__:17},rw={[ne.EXPECTED_TOKEN]:"Expected token: '{0}'",[ne.INVALID_TOKEN_IN_PLACEHOLDER]:"Invalid token in placeholder: '{0}'",[ne.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER]:"Unterminated single quote in placeholder",[ne.UNKNOWN_ESCAPE_SEQUENCE]:"Unknown escape sequence: \\{0}",[ne.INVALID_UNICODE_ESCAPE_SEQUENCE]:"Invalid unicode escape sequence: {0}",[ne.UNBALANCED_CLOSING_BRACE]:"Unbalanced closing brace",[ne.UNTERMINATED_CLOSING_BRACE]:"Unterminated closing brace",[ne.EMPTY_PLACEHOLDER]:"Empty placeholder",[ne.NOT_ALLOW_NEST_PLACEHOLDER]:"Not allowed nest placeholder",[ne.INVALID_LINKED_FORMAT]:"Invalid linked format",[ne.MUST_HAVE_MESSAGES_IN_PLURAL]:"Plural must have messages",[ne.UNEXPECTED_EMPTY_LINKED_MODIFIER]:"Unexpected empty linked modifier",[ne.UNEXPECTED_EMPTY_LINKED_KEY]:"Unexpected empty linked key",[ne.UNEXPECTED_LEXICAL_ANALYSIS]:"Unexpected lexical analysis in token: '{0}'",[ne.UNHANDLED_CODEGEN_NODE_TYPE]:"unhandled codegen node type: '{0}'",[ne.UNHANDLED_MINIFIER_NODE_TYPE]:"unhandled mimifier node type: '{0}'"};function mo(e,t,n={}){const{domain:o,messages:s,args:r}=n,i=cf((s||rw)[e]||"",...r||[]),a=new SyntaxError(String(i));return a.code=e,t&&(a.location=t),a.domain=o,a}function iw(e){throw e}const Bt=" ",aw="\r",et=` 4`,lw="\u2028",cw="\u2029";function uw(e){const t=e;let n=0,o=1,s=1,r=0;const i=L=>t[L]===aw&&t[L+1]===et,a=L=>t[L]===et,l=L=>t[L]===cw,u=L=>t[L]===lw,c=L=>i(L)||a(L)||l(L)||u(L),d=()=>n,p=()=>o,f=()=>s,b=()=>r,_=L=>i(L)||l(L)||u(L)?et:t[L],A=()=>_(n),E=()=>_(n+r);function C(){return r=0,c(n)&&(o++,s=0),i(n)&&n++,n++,s++,t[n]}function h(){return i(n+r)&&r++,r++,t[n+r]}function m(){n=0,o=1,s=1,r=0}function k(L=0){r=L}function S(){const L=n+r;for(;L!==n;)C();r=0}return{index:d,line:p,column:f,peekOffset:b,charAt:_,currentChar:A,currentPeek:E,next:C,peek:h,reset:m,resetPeek:k,skipToPeek:S}}const sn=void 0,dw=".",Yl="'",fw="tokenizer";function pw(e,t={}){const n=t.location!==!1,o=uw(e),s=()=>o.index(),r=()=>ew(o.line(),o.column(),o.index()),i=r(),a=s(),l={currentType:14,offset:a,startLoc:i,endLoc:i,lastType:14,lastOffset:a,lastStartLoc:i,lastEndLoc:i,braceNest:0,inLinked:!1,text:""},u=()=>l,{onError:c}=t;function d(y,v,T,...U){const W=u();if(v.column+=T,v.offset+=T,c){const $=n?xs(W.startLoc,v):null,R=mo(y,$,{domain:fw,args:U});c(R)}}function p(y,v,T){y.endLoc=r(),y.currentType=v;const U={type:v};return n&&(U.loc=xs(y.startLoc,y.endLoc)),T!=null&&(U.value=T),U}const f=y=>p(y,14);function b(y,v){return y.currentChar()===v?(y.next(),v):(d(ne.EXPECTED_TOKEN,r(),0,v),"")}function _(y){let v="";for(;y.currentPeek()===Bt||y.currentPeek()===et;)v+=y.currentPeek(),y.peek();return v}function A(y){const v=_(y);return y.skipToPeek(),v}function E(y){if(y===sn)return!1;const v=y.charCodeAt(0);return v>=97&&v<=122||v>=65&&v<=90||v===95}function C(y){if(y===sn)return!1;const v=y.charCodeAt(0);return v>=48&&v<=57}function h(y,v){const{currentType:T}=v;if(T!==2)return!1;_(y);const U=E(y.currentPeek());return y.resetPeek(),U}function m(y,v){const{currentType:T}=v;if(T!==2)return!1;_(y);const U=y.currentPeek()==="-"?y.peek():y.currentPeek(),W=C(U);return y.resetPeek(),W}function k(y,v){const{currentType:T}=v;if(T!==2)return!1;_(y);const U=y.currentPeek()===Yl;return y.resetPeek(),U}function S(y,v){const{currentType:T}=v;if(T!==8)return!1;_(y);const U=y.currentPeek()===".";return y.resetPeek(),U}function L(y,v){const{currentType:T}=v;if(T!==9)return!1;_(y);const U=E(y.currentPeek());return y.resetPeek(),U}function O(y,v){const{currentType:T}=v;if(!(T===8||T===12))return!1;_(y);const U=y.currentPeek()===":";return y.resetPeek(),U}function I(y,v){const{currentType:T}=v;if(T!==10)return!1;const U=()=>{const $=y.currentPeek();return $==="{"?E(y.peek()):$==="@"||$==="%"||$==="|"||$===":"||$==="."||$===Bt||!$?!1:$===et?(y.peek(),U()):N(y,!1)},W=U();return y.resetPeek(),W}function M(y){_(y);const v=y.currentPeek()==="|";return y.resetPeek(),v}function K(y){const v=_(y),T=y.currentPeek()==="%"&&y.peek()==="{";return y.resetPeek(),{isModulo:T,hasSpace:v.length>0}}function N(y,v=!0){const T=(W=!1,$="",R=!1)=>{const D=y.currentPeek();return D==="{"?$==="%"?!1:W:D==="@"||!D?$==="%"?!0:W:D==="%"?(y.peek(),T(W,"%",!0)):D==="|"?$==="%"||R?!0:!($===Bt||$===et):D===Bt?(y.peek(),T(!0,Bt,R)):D===et?(y.peek(),T(!0,et,R)):!0},U=T();return v&&y.resetPeek(),U}function V(y,v){const T=y.currentChar();return T===sn?sn:v(T)?(y.next(),T):null}function se(y){const v=y.charCodeAt(0);return v>=97&&v<=122||v>=65&&v<=90||v>=48&&v<=57||v===95||v===36}function ae(y){return V(y,se)}function Y(y){const v=y.charCodeAt(0);return v>=97&&v<=122||v>=65&&v<=90||v>=48&&v<=57||v===95||v===36||v===45}function te(y){return V(y,Y)}function J(y){const v=y.charCodeAt(0);return v>=48&&v<=57}function Ee(y){return V(y,J)}function st(y){const v=y.charCodeAt(0);return v>=48&&v<=57||v>=65&&v<=70||v>=97&&v<=102}function Pe(y){return V(y,st)}function Ie(y){let v="",T="";for(;v=Ee(y);)T+=v;return T}function ht(y){A(y);const v=y.currentChar();return v!=="%"&&d(ne.EXPECTED_TOKEN,r(),0,v),y.next(),"%"}function ct(y){let v="";for(;;){const T=y.currentChar();if(T==="{"||T==="}"||T==="@"||T==="|"||!T)break;if(T==="%")if(N(y))v+=T,y.next();else break;else if(T===Bt||T===et)if(N(y))v+=T,y.next();else{if(M(y))break;v+=T,y.next()}else v+=T,y.next()}return v}function ut(y){A(y);let v="",T="";for(;v=te(y);)T+=v;return y.currentChar()===sn&&d(ne.UNTERMINATED_CLOSING_BRACE,r(),0),T}function Be(y){A(y);let v="";return y.currentChar()==="-"?(y.next(),v+=`-${Ie(y)}`):v+=Ie(y),y.currentChar()===sn&&d(ne.UNTERMINATED_CLOSING_BRACE,r(),0),v}function F(y){return y!==Yl&&y!==et}function X(y){A(y),b(y,"'");let v="",T="";for(;v=V(y,F);)v==="\\"?T+=j(y):T+=v;const U=y.currentChar();return U===et||U===sn?(d(ne.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER,r(),0),U===et&&(y.next(),b(y,"'")),T):(b(y,"'"),T)}function j(y){const v=y.currentChar();switch(v){case"\\":case"'":return y.next(),`\\${v}`;case"u":return Q(y,v,4);case"U":return Q(y,v,6);default:return d(ne.UNKNOWN_ESCAPE_SEQUENCE,r(),0,v),""}}function Q(y,v,T){b(y,v);let U="";for(let W=0;W<T;W++){const $=Pe(y);
4if(!$){d(ne.INVALID_UNICODE_ESCAPE_SEQUENCE,r(),0,`\\${v}${U}${y.currentChar()}`);break}U+=$}return`\\${v}${U}`}function ie(y){return y!=="{"&&y!=="}"&&y!==Bt&&y!==et}function he(y){A(y);let v="",T="";for(;v=V(y,ie);)T+=v;return T}function w(y){let v="",T="";for(;v=ae(y);)T+=v;return T}function g(y){const v=T=>{const U=y.currentChar();return U==="{"||U==="%"||U==="@"||U==="|"||U==="("||U===")"||!U||U===Bt?T:(T+=U,y.next(),v(T))};return v("")}function P(y){A(y);const v=b(y,"|");return A(y),v}function H(y,v){let T=null;switch(y.currentChar()){case"{":return v.braceNest>=1&&d(ne.NOT_ALLOW_NEST_PLACEHOLDER,r(),0),y.next(),T=p(v,2,"{"),A(y),v.braceNest++,T;case"}":return v.braceNest>0&&v.currentType===2&&d(ne.EMPTY_PLACEHOLDER,r(),0),y.next(),T=p(v,3,"}"),v.braceNest--,v.braceNest>0&&A(y),v.inLinked&&v.braceNest===0&&(v.inLinked=!1),T;case"@":return v.braceNest>0&&d(ne.UNTERMINATED_CLOSING_BRACE,r(),0),T=x(y,v)||f(v),v.braceNest=0,T;default:{let W=!0,$=!0,R=!0;if(M(y))return v.braceNest>0&&d(ne.UNTERMINATED_CLOSING_BRACE,r(),0),T=p(v,1,P(y)),v.braceNest=0,v.inLinked=!1,T;if(v.braceNest>0&&(v.currentType===5||v.currentType===6||v.currentType===7))return d(ne.UNTERMINATED_CLOSING_BRACE,r(),0),v.braceNest=0,B(y,v);if(W=h(y,v))return T=p(v,5,ut(y)),A(y),T;if($=m(y,v))return T=p(v,6,Be(y)),A(y),T;if(R=k(y,v))return T=p(v,7,X(y)),A(y),T;if(!W&&!$&&!R)return T=p(v,13,he(y)),d(ne.INVALID_TOKEN_IN_PLACEHOLDER,r(),0,T.value),A(y),T;break}}return T}function x(y,v){const{currentType:T}=v;let U=null;const W=y.currentChar();switch((T===8||T===9||T===12||T===10)&&(W===et||W===Bt)&&d(ne.INVALID_LINKED_FORMAT,r(),0),W){case"@":return y.next(),U=p(v,8,"@"),v.inLinked=!0,U;case".":return A(y),y.next(),p(v,9,".");case":":return A(y),y.next(),p(v,10,":");default:return M(y)?(U=p(v,1,P(y)),v.braceNest=0,v.inLinked=!1,U):S(y,v)||O(y,v)?(A(y),x(y,v)):L(y,v)?(A(y),p(v,12,w(y))):I(y,v)?(A(y),W==="{"?H(y,v)||U:p(v,11,g(y))):(T===8&&d(ne.INVALID_LINKED_FORMAT,r(),0),v.braceNest=0,v.inLinked=!1,B(y,v))}}function B(y,v){let T={type:14};if(v.braceNest>0)return H(y,v)||f(v);if(v.inLinked)return x(y,v)||f(v);switch(y.currentChar()){case"{":return H(y,v)||f(v);case"}":return d(ne.UNBALANCED_CLOSING_BRACE,r(),0),y.next(),p(v,3,"}");case"@":return x(y,v)||f(v);default:{if(M(y))return T=p(v,1,P(y)),v.braceNest=0,v.inLinked=!1,T;const{isModulo:W,hasSpace:$}=K(y);if(W)return $?p(v,0,ct(y)):p(v,4,ht(y));if(N(y))return p(v,0,ct(y));break}}return T}function G(){const{currentType:y,offset:v,startLoc:T,endLoc:U}=l;return l.lastType=y,l.lastOffset=v,l.lastStartLoc=T,l.lastEndLoc=U,l.offset=s(),l.startLoc=r(),o.currentChar()===sn?p(l,14):B(o,l)}return{nextToken:G,currentOffset:s,currentPosition:r,context:u}}const hw="parser",mw=/(?:\\\\|\\'|\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{6}))/g;function gw(e,t,n){switch(e){case"\\\\":return"\\";case"\\'":return"'";default:{const o=parseInt(t||n,16);return o<=55295||o>=57344?String.fromCodePoint(o):"�"}}}function yw(e={}){const t=e.location!==!1,{onError:n,onWarn:o}=e;function s(h,m,k,S,...L){const O=h.currentPosition();if(O.offset+=S,O.column+=S,n){const I=t?xs(k,O):null,M=mo(m,I,{domain:hw,args:L});n(M)}}function r(h,m,k,S,...L){const O=h.currentPosition();if(O.offset+=S,O.column+=S,o){const I=t?xs(k,O):null;o(sw(m,I,L))}}function i(h,m,k){const S={type:h};return t&&(S.start=m,S.end=m,S.loc={start:k,end:k}),S}function a(h,m,k,S){t&&(h.end=m,h.loc&&(h.loc.end=k))}function l(h,m){const k=h.context(),S=i(3,k.offset,k.startLoc);return S.value=m,a(S,h.currentOffset(),h.currentPosition()),S}function u(h,m){const k=h.context(),{lastOffset:S,lastStartLoc:L}=k,O=i(5,S,L);return O.index=parseInt(m,10),h.nextToken(),a(O,h.currentOffset(),h.currentPosition()),O}function c(h,m,k){const S=h.context(),{lastOffset:L,lastStartLoc:O}=S,I=i(4,L,O);return I.key=m,k===!0&&(I.modulo=!0),h.nextToken(),a(I,h.currentOffset(),h.currentPosition()),I}function d(h,m){const k=h.context(),{lastOffset:S,lastStartLoc:L}=k,O=i(9,S,L);return O.value=m.replace(mw,gw),h.nextToken(),a(O,h.currentOffset(),h.currentPosition()),O}function p(h){const m=h.nextToken(),k=h.context(),{lastOffset:S,lastStartLoc:L}=k,O=i(8,S,L);return m.type!==12?(s(h,ne.UNEXPECTED_EMPTY_LINKED_MODIFIER,k.lastStartLoc,0),O.value="",a(O,S,L),{nextConsumeToken:m,node:O}):(m.value==null&&s(h,ne.UNEXPECTED_LEXICAL_ANALYSIS,k.lastStartLoc,0,Et
4(m)),O.value=m.value||"",a(O,h.currentOffset(),h.currentPosition()),{node:O})}function f(h,m){const k=h.context(),S=i(7,k.offset,k.startLoc);return S.value=m,a(S,h.currentOffset(),h.currentPosition()),S}function b(h){const m=h.context(),k=i(6,m.offset,m.startLoc);let S=h.nextToken();if(S.type===9){const L=p(h);k.modifier=L.node,S=L.nextConsumeToken||h.nextToken()}switch(S.type!==10&&s(h,ne.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,Et(S)),S=h.nextToken(),S.type===2&&(S=h.nextToken()),S.type){case 11:S.value==null&&s(h,ne.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,Et(S)),k.key=f(h,S.value||"");break;case 5:S.value==null&&s(h,ne.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,Et(S)),k.key=c(h,S.value||"");break;case 6:S.value==null&&s(h,ne.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,Et(S)),k.key=u(h,S.value||"");break;case 7:S.value==null&&s(h,ne.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,Et(S)),k.key=d(h,S.value||"");break;default:{s(h,ne.UNEXPECTED_EMPTY_LINKED_KEY,m.lastStartLoc,0);const L=h.context(),O=i(7,L.offset,L.startLoc);return O.value="",a(O,L.offset,L.startLoc),k.key=O,a(k,L.offset,L.startLoc),{nextConsumeToken:S,node:k}}}return a(k,h.currentOffset(),h.currentPosition()),{node:k}}function _(h){const m=h.context(),k=m.currentType===1?h.currentOffset():m.offset,S=m.currentType===1?m.endLoc:m.startLoc,L=i(2,k,S);L.items=[];let O=null,I=null;do{const N=O||h.nextToken();switch(O=null,N.type){case 0:N.value==null&&s(h,ne.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,Et(N)),L.items.push(l(h,N.value||""));break;case 6:N.value==null&&s(h,ne.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,Et(N)),L.items.push(u(h,N.value||""));break;case 4:I=!0;break;case 5:N.value==null&&s(h,ne.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,Et(N)),L.items.push(c(h,N.value||"",!!I)),I&&(r(h,da.USE_MODULO_SYNTAX,m.lastStartLoc,0,Et(N)),I=null);break;case 7:N.value==null&&s(h,ne.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,Et(N)),L.items.push(d(h,N.value||""));break;case 8:{const V=b(h);L.items.push(V.node),O=V.nextConsumeToken||null;break}}}while(m.currentType!==14&&m.currentType!==1);const M=m.currentType===1?m.lastOffset:h.currentOffset(),K=m.currentType===1?m.lastEndLoc:h.currentPosition();return a(L,M,K),L}function A(h,m,k,S){const L=h.context();let O=S.items.length===0;const I=i(1,m,k);I.cases=[],I.cases.push(S);do{const M=_(h);O||(O=M.items.length===0),I.cases.push(M)}while(L.currentType!==14);return O&&s(h,ne.MUST_HAVE_MESSAGES_IN_PLURAL,k,0),a(I,h.currentOffset(),h.currentPosition()),I}function E(h){const m=h.context(),{offset:k,startLoc:S}=m,L=_(h);return m.currentType===14?L:A(h,k,S,L)}function C(h){const m=pw(h,uf({},e)),k=m.context(),S=i(0,k.offset,k.startLoc);return t&&S.loc&&(S.loc.source=h),S.body=E(m),e.onCacheKey&&(S.cacheKey=e.onCacheKey(h)),k.currentType!==14&&s(m,ne.UNEXPECTED_LEXICAL_ANALYSIS,k.lastStartLoc,0,h[k.offset]||""),a(S,m.currentOffset(),m.currentPosition()),S}return{parse:C}}function Et(e){if(e.type===14)return"EOF";const t=(e.value||"").replace(/\r?\n/gu,"\\n");return t.length>10?t.slice(0,9)+"â¦":t}function vw(e,t={}){const n={ast:e,helpers:new Set};return{context:()=>n,helper:r=>(n.helpers.add(r),r)}}function Xl(e,t){for(let n=0;n<e.length;n++)fa(e[n],t)}function fa(e,t){switch(e.type){case 1:Xl(e.cases,t),t.helper("plural");break;case 2:Xl(e.items,t);break;case 6:{fa(e.key,t),t.helper("linked"),t.helper("type");break}case 5:t.helper("interpolate"),t.helper("list");break;case 4:t.helper("interpolate"),t.helper("named");break}}function bw(e,t={}){const n=vw(e);n.helper("normalize"),e.body&&fa(e.body,n);const o=n.context();e.helpers=Array.from(o.helpers)}function ww(e){const t=e.body;return t.type===2?Jl(t):t.cases.forEach(n=>Jl(n)),e}function Jl(e){if(e.items.length===1){const t=e.items[0];(t.type===3||t.type===9)&&(e.static=t.value,delete t.value)}else{const t=[];for(let n=0;n<e.items.length;n++){const o=e.items[n];if(!(o.type===3||o.type===9)||o.value==null)break;t.push(o.value)}if(t.length===e.items.length){e.static=df(t);for(let n=0;n<e.items.length;n++){const o=e.items[n];(o.type===3||o.type===9)&&delete o.value}}}}const _w="minifier";function Kn(e){switch(e.t=e.type,e.type){case 0:{const t=e;Kn(t.body),t.b=t.body,delete t.body;break}case 1:{const t=e,n=t.cases;for(let o=0;o<n.length;o++)Kn(n[o]);t.c=n,delete t.cases;break}case 2:{const t=e,n=t.items;for(let o=0;o<n.length;o++)Kn(n[o]);t.i=n,delete t.items,t.static&&(t.s=t.static,delete t.static);break}case 3:case 9:case 8:case 7:{const t=e;t.value&&(t.v=t.value,delete t.value);break}case 6:{const t=e;Kn(t.key),t.k=t.key,delete t.key,t.modifier&&(Kn(t.modifier),t.m=t.modifier,delete t.modifier);break}case 5:{const t=e;t.i=t.index,delete t.index;break}case 4:{const t=e;t.k=t.key,delete t.key;break}default:throw mo(ne.UNHANDLED_MINIFIER_NODE_TYPE,null,{domain:_w,args:[e.type]})}delete e.type}const kw="parser";function Sw(e,t){const{filename:n,breakLineCode:o,needIndent:s}=t,r=t.location!==!1,i={filename:n,code:"",column:1,line:1,offset:0,map:void 0,breakLineCode:o,needIndent:s,indentLevel:0};r&&e.loc&&(i.source=e.loc.source);const a=()=>i;function l(_,A){i.code+=_}function u(_,A=!0){const E=A?o:"";l(s?E+" ".repeat(_):E)}function c(_=!0){const A=++i.indentLevel;_&&u(A)}function d(_=!0){const A=--i.indentLevel;_&&u(A)}function p(){u(i.indentLevel)}return{context:a,push:l,indent:c,deindent:d,newline:p,helper:_=>`_${_}`,needIndent:()=>i.needIndent}}function Ew(e,t){const{helper:n}=e;e.push(`${n("linked")}(`),lo(e,t.key),t.modifier?(e.push(", "),lo(e,t.modifier),e.push(", _type")):e.push(", undefined, _type"),e.push(")")}function Cw(e,t){const{helper:n,needIndent:o}=e;e.push(`${n("normalize")}([`),e.indent(o());const s=t.items.length;for(let r=0;r<s&&(lo(e,t.items[r]),r!==s-1);r++)e.push(", ");e.deindent(o()),e.push("])")}function Tw(e,t){const{helper:n,needIndent:o}=e;if(t.cases.length>1){e.push(`${n("plural")}([`),e.indent(o());const s=t.cases.length;for(let r=0;r<s&&(lo(e,t.cases[r]),r!==s-1);r++)e.push(", ");e.deindent(o()),e.push("])")}}function Aw(e,t){t.body?lo(e,t.body):e.push("null")}function lo(e,t){const{helper:n}=e;switch(t.type){case 0:Aw(e,t);break;case 1:Tw(e,t);break;case 2:Cw(e,t);break;case 6:Ew(e,t);break;case 8:e.push(JSON.stringify(t.value),t);break;case 7:e.push(JSON.stringify(t.value),t);break;case 5:e.push(`${n("interpolate")}(${n("list")}(${t.index}))`,t);break;case 4:e.push(`${n("interpolate")}(${n("named")}(${JSON.stringify(t.key)}))`,t);break;case 9:e.push(JSON.stringify(t.value),t);break;case 3:e.push(JSON.stringify(t.value),t);break;default:throw mo(ne.UNHANDLED_CODEGEN_NODE_TYPE,null,{domain:kw,args:[t.type]})}}const Pw=(e,t={})=>{const n=ql(t.mode)?t.mode:"normal",o=ql(t.filename)?t.filename:"message.intl";t.sourceMap;const s=t.breakLineCode!=null?t.breakLineCode:n==="arrow"?";":` 5`,r=t.needIndent?t.needIndent:n!=="arrow",i=e.helpers||[],a=Sw(e,{filename:o,breakLineCode:s,needIndent:r});a.push(n==="normal"?"function __msg__ (ctx) {":"(ctx) => {"),a.indent(r),i.length>0&&(a.push(`const { ${df(i.map(c=>`${c}: _${c}`),", ")} } = ctx`),a.newline()),a.push("return "),lo(a,e),a.deindent(r),a.push("}"),delete e.helpers;const{code:l,map:u}=a.context();return{ast:e,code:l,map:u?u.toJSON():void 0}};function Iw(e,t={}){const n=uf({},t),o=!!n.jit,s=!!n.minify,r=n.optimize==null?!0:n.optimize,a=yw(n).parse(e);return o?(r&&ww(a),s&&Kn(a),{ast:a,code:""}):(bw(a,n),Pw(a,n))}function Lw(){typeof __INTLIFY_PROD_DEVTOOLS__!="boolean"&&(Yt().__INTLIFY_PROD_DEVTOOLS__=!1),typeof __INTLIFY_JIT_COMPILATION__!="boolean"&&(Yt().__INTLIFY_JIT_COMPILATION__=!1),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!="boolean"&&(Yt().__INTLIFY_DROP_MESSAGE_COMPILER__=!1)}function Ft(e){return fe(e)&&pa(e)===0&&(Tt(e,"b")||Tt(e,"body"))}const ff=["b","body"];function Rw(e){return _n(e,ff)}const pf=["c","cases"];function Ow(e){return _n(e,pf,[])}const hf=["s","static"];function Dw(e){return _n(e,hf)}const mf=["i","items"];function Nw(e){return _n(e,mf,[])}const gf=["t","type"];function pa(e){return _n(e,gf)}const yf=["v","value"];function cs(e,t){const n=_n(e,yf);if(n!=null)return n;throw Vo(t)}const vf=["m","modifier"];function xw(e){return _n(e,vf)}const bf=["k","key"];function Mw(e){const t=_n(e,bf);if(t)return t;throw Vo(6)}
5function _n(e,t,n){for(let o=0;o<t.length;o++){const s=t[o];if(Tt(e,s)&&e[s]!=null)return e[s]}return n}const wf=[...ff,...pf,...hf,...mf,...bf,...vf,...yf,...gf];function Vo(e){return new Error(`unhandled node type: ${e}`)}const kn=[];kn[0]={w:[0],i:[3,0],"[":[4],o:[7]};kn[1]={w:[1],".":[2],"[":[4],o:[7]};kn[2]={w:[2],i:[3,0],0:[3,0]};kn[3]={i:[3,0],0:[3,0],w:[1,1],".":[2,1],"[":[4,1],o:[7,1]};kn[4]={"'":[5,0],'"':[6,0],"[":[4,2],"]":[1,3],o:8,l:[4,0]};kn[5]={"'":[4,0],o:8,l:[5,0]};kn[6]={'"':[4,0],o:8,l:[6,0]};const Fw=/^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;function Uw(e){return Fw.test(e)}function Hw(e){const t=e.charCodeAt(0),n=e.charCodeAt(e.length-1);return t===n&&(t===34||t===39)?e.slice(1,-1):e}function $w(e){if(e==null)return"o";switch(e.charCodeAt(0)){case 91:case 93:case 46:case 34:case 39:return e;case 95:case 36:case 45:return"i";case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"w"}return"i"}function Bw(e){const t=e.trim();return e.charAt(0)==="0"&&isNaN(parseInt(e))?!1:Uw(t)?Hw(t):"*"+t}function Ww(e){const t=[];let n=-1,o=0,s=0,r,i,a,l,u,c,d;const p=[];p[0]=()=>{i===void 0?i=a:i+=a},p[1]=()=>{i!==void 0&&(t.push(i),i=void 0)},p[2]=()=>{p[0](),s++},p[3]=()=>{if(s>0)s--,o=4,p[0]();else{if(s=0,i===void 0||(i=Bw(i),i===!1))return!1;p[1]()}};function f(){const b=e[n+1];if(o===5&&b==="'"||o===6&&b==='"')return n++,a="\\"+b,p[0](),!0}for(;o!==null;)if(n++,r=e[n],!(r==="\\"&&f())){if(l=$w(r),d=kn[o],u=d[l]||d.l||8,u===8||(o=u[0],u[1]!==void 0&&(c=p[u[1]],c&&(a=r,c()===!1))))return;if(o===7)return t}}const Ql=new Map;function Vw(e,t){return fe(e)?e[t]:null}function jw(e,t){if(!fe(e))return null;let n=Ql.get(t);if(n||(n=Ww(t),n&&Ql.set(t,n)),!n)return null;const o=n.length;let s=e,r=0;for(;r<o;){const i=n[r];if(wf.includes(i)&&Ft(s))return null;const a=s[i];if(a===void 0||we(s))return null;s=a,r++}return s}const Gw=e=>e,Kw=e=>"",qw="text",Yw=e=>e.length===0?"":Zb(e),Xw=zb;function zl(e,t){return e=Math.abs(e),t===2?e?e>1?1:0:1:e?Math.min(e,2):0}function Jw(e){const t=De(e.pluralIndex)?e.pluralIndex:-1;return e.named&&(De(e.named.count)||De(e.named.n))?De(e.named.count)?e.named.count:De(e.named.n)?e.named.n:t:t}function Qw(e,t){t.count||(t.count=e),t.n||(t.n=e)}function zw(e={}){const t=e.locale,n=Jw(e),o=fe(e.pluralRules)&&q(t)&&we(e.pluralRules[t])?e.pluralRules[t]:zl,s=fe(e.pluralRules)&&q(t)&&we(e.pluralRules[t])?zl:void 0,r=E=>E[o(n,E.length,s)],i=e.list||[],a=E=>i[E],l=e.named||ye();De(e.pluralIndex)&&Qw(n,l);const u=E=>l[E];function c(E){const C=we(e.messages)?e.messages(E):fe(e.messages)?e.messages[E]:!1;return C||(e.parent?e.parent.message(E):Kw)}const d=E=>e.modifiers?e.modifiers[E]:Gw,p=re(e.processor)&&we(e.processor.normalize)?e.processor.normalize:Yw,f=re(e.processor)&&we(e.processor.interpolate)?e.processor.interpolate:Xw,b=re(e.processor)&&q(e.processor.type)?e.processor.type:qw,A={list:a,named:u,plural:r,linked:(E,...C)=>{const[h,m]=C;let k="text",S="";C.length===1?fe(h)?(S=h.modifier||S,k=h.type||k):q(h)&&(S=h||S):C.length===2&&(q(h)&&(S=h||S),q(m)&&(k=m||k));const L=c(E)(A),O=k==="vnode"&&Ce(L)&&S?L[0]:L;return S?d(S)(O,k):O},message:c,type:b,interpolate:f,normalize:p,values:Ye(ye(),i,l)};return A}let jo=null;function Zw(e){jo=e}function e_(e,t,n){jo&&jo.emit("i18n:init",{timestamp:Date.now(),i18n:e,version:t,meta:n})}const t_=n_("function:translate");function n_(e){return t=>jo&&jo.emit(e,t)}const o_=da.__EXTEND_POINT__,An=er(o_),s_={FALLBACK_TO_TRANSLATE:An(),CANNOT_FORMAT_NUMBER:An(),FALLBACK_TO_NUMBER_FORMAT:An(),CANNOT_FORMAT_DATE:An(),FALLBACK_TO_DATE_FORMAT:An(),EXPERIMENTAL_CUSTOM_MESSAGE_COMPILER:An(),__EXTEND_POINT__:An()},_f=ne.__EXTEND_POINT__,Pn=er(_f),At={INVALID_ARGUMENT:_f,INVALID_DATE_ARGUMENT:Pn(),INVALID_ISO_DATE_ARGUMENT:Pn(),NOT_SUPPORT_NON_STRING_MESSAGE:Pn(),NOT_SUPPORT_LOCALE_PROMISE_VALUE:Pn(),NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:Pn(),NOT_SUPPORT_LOCALE_TYPE:Pn(),__EXTEND_POINT__:Pn()};function xt(e){return mo(e,null,void 0)}function ha(e,t){return t.locale!=null?Zl(t.locale):Zl(e.locale)}let Or;function Zl(e){if(q(e))return e;if(we(e)){if(e.resolvedOnce&&Or!=null)return Or;if(e.constructor.name==="Function"){const t=e();if(Qb(t))throw xt(At.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return Or=t}else throw xt(At.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}else throw xt(At.NOT_SUPPORT_LOCALE_TYPE)}function r_(e,t,n){return[...new Set([n,...Ce(t)?t:fe(t)?Object.keys(t):q(t)?[t]:[n]])]}function kf(e,t,n){const o=q(n)?n:co,s=e;s.__localeChainCache||(s.__localeChainCache=new Map);let r=s.__localeChainCache.get(o);if(!r){r=[];let i=[n];for(;Ce(i);)i=ec(r,i,t);const a=Ce(t)||!re(t)?t:t.default?t.default:null;i=q(a)?[a]:a,Ce(i)&&ec(r,i,!1),s.__localeChainCache.set(o,r)}return r}function ec(e,t,n){let o=!0;for(let s=0;s<t.length&&le(o);s++){const r=t[s];q(r)&&(o=i_(e,t[s],n))}return o}function i_(e,t,n){let o;const s=t.split("-");do{const r=s.join("-");o=a_(e,r,n),s.splice(-1,1)}while(s.length&&o===!0);return o}function a_(e,t,n){let o=!1;if(!e.includes(t)&&(o=!0,t)){o=t[t.length-1]!=="!";const s=t.replace(/!/g,"");e.push(s),(Ce(n)||re(n))&&n[s]&&(o=n[s])}return o}const l_="9.14.5",tr=-1,co="en-US",tc="",nc=e=>`${e.charAt(0).toLocaleUpperCase()}${e.substr(1)}`;function c_(){return{upper:(e,t)=>t==="text"&&q(e)?e.toUpperCase():t==="vnode"&&fe(e)&&"__v_isVNode"in e?e.children.toUpperCase():e,lower:(e,t)=>t==="text"&&q(e)?e.toLowerCase():t==="vnode"&&fe(e)&&"__v_isVNode"in e?e.children.toLowerCase():e,capitalize:(e,t)=>
5t==="text"&&q(e)?nc(e):t==="vnode"&&fe(e)&&"__v_isVNode"in e?nc(e.children):e}}let Sf;function oc(e){Sf=e}let Ef;function u_(e){Ef=e}let Cf;function d_(e){Cf=e}let Tf=null;const f_=e=>{Tf=e},p_=()=>Tf;let Af=null;const sc=e=>{Af=e},h_=()=>Af;let rc=0;function m_(e={}){const t=we(e.onWarn)?e.onWarn:jb,n=q(e.version)?e.version:l_,o=q(e.locale)||we(e.locale)?e.locale:co,s=we(o)?co:o,r=Ce(e.fallbackLocale)||re(e.fallbackLocale)||q(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:s,i=re(e.messages)?e.messages:Dr(s),a=re(e.datetimeFormats)?e.datetimeFormats:Dr(s),l=re(e.numberFormats)?e.numberFormats:Dr(s),u=Ye(ye(),e.modifiers,c_()),c=e.pluralRules||ye(),d=we(e.missing)?e.missing:null,p=le(e.missingWarn)||yn(e.missingWarn)?e.missingWarn:!0,f=le(e.fallbackWarn)||yn(e.fallbackWarn)?e.fallbackWarn:!0,b=!!e.fallbackFormat,_=!!e.unresolving,A=we(e.postTranslation)?e.postTranslation:null,E=re(e.processor)?e.processor:null,C=le(e.warnHtmlMessage)?e.warnHtmlMessage:!0,h=!!e.escapeParameter,m=we(e.messageCompiler)?e.messageCompiler:Sf,k=we(e.messageResolver)?e.messageResolver:Ef||Vw,S=we(e.localeFallbacker)?e.localeFallbacker:Cf||r_,L=fe(e.fallbackContext)?e.fallbackContext:void 0,O=e,I=fe(O.__datetimeFormatters)?O.__datetimeFormatters:new Map,M=fe(O.__numberFormatters)?O.__numberFormatters:new Map,K=fe(O.__meta)?O.__meta:{};rc++;const N={version:n,cid:rc,locale:o,fallbackLocale:r,messages:i,modifiers:u,pluralRules:c,missing:d,missingWarn:p,fallbackWarn:f,fallbackFormat:b,unresolving:_,postTranslation:A,processor:E,warnHtmlMessage:C,escapeParameter:h,messageCompiler:m,messageResolver:k,localeFallbacker:S,fallbackContext:L,onWarn:t,__meta:K};return N.datetimeFormats=a,N.numberFormats=l,N.__datetimeFormatters=I,N.__numberFormatters=M,__INTLIFY_PROD_DEVTOOLS__&&e_(N,n,K),N}const Dr=e=>({[e]:ye()});function ma(e,t,n,o,s){const{missing:r,onWarn:i}=e;if(r!==null){const a=r(e,n,t,s);return q(a)?a:t}else return t}function _o(e,t,n){const o=e;o.__localeChainCache=new Map,e.localeFallbacker(e,n,t)}function g_(e,t){return e===t?!1:e.split("-")[0]===t.split("-")[0]}function y_(e,t){const n=t.indexOf(e);if(n===-1)return!1;for(let o=n+1;o<t.length;o++)if(g_(e,t[o]))return!0;return!1}function Nr(e){return n=>v_(n,e)}function v_(e,t){const n=Rw(t);if(n==null)throw Vo(0);if(pa(n)===1){const r=Ow(n);return e.plural(r.reduce((i,a)=>[...i,ic(e,a)],[]))}else return ic(e,n)}function ic(e,t){const n=Dw(t);if(n!=null)return e.type==="text"?n:e.normalize([n]);{const o=Nw(t).reduce((s,r)=>[...s,wi(e,r)],[]);return e.normalize(o)}}function wi(e,t){const n=pa(t);switch(n){case 3:return cs(t,n);case 9:return cs(t,n);case 4:{const o=t;if(Tt(o,"k")&&o.k)return e.interpolate(e.named(o.k));if(Tt(o,"key")&&o.key)return e.interpolate(e.named(o.key));throw Vo(n)}case 5:{const o=t;if(Tt(o,"i")&&De(o.i))return e.interpolate(e.list(o.i));if(Tt(o,"index")&&De(o.index))return e.interpolate(e.list(o.index));throw Vo(n)}case 6:{const o=t,s=xw(o),r=Mw(o);return e.linked(wi(e,r),s?wi(e,s):void 0,e.type)}case 7:return cs(t,n);case 8:return cs(t,n);default:throw new Error(`unhandled node on format message part: ${n}`)}}const Pf=e=>e;let Yn=ye();function If(e,t={}){let n=!1;const o=t.onError||iw;return t.onError=s=>{n=!0,o(s)},{...Iw(e,t),detectError:n}}const b_=(e,t)=>{if(!q(e))throw xt(At.NOT_SUPPORT_NON_STRING_MESSAGE);{le(t.warnHtmlMessage)&&t.warnHtmlMessage;const o=(t.onCacheKey||Pf)(e),s=Yn[o];if(s)return s;const{code:r,detectError:i}=If(e,t),a=new Function(`return ${r}`)();return i?a:Yn[o]=a}};function w_(e,t){if(__INTLIFY_JIT_COMPILATION__&&!__INTLIFY_DROP_MESSAGE_COMPILER__&&q(e)){le(t.warnHtmlMessage)&&t.warnHtmlMessage;const o=(t.onCacheKey||Pf)(e),s=Yn[o];if(s)return s;const{ast:r,detectError:i}=If(e,{...t,location:!1,jit:!0}),a=Nr(r);return i?a:Yn[o]=a}else{const n=e.cacheKey;if(n){const o=Yn[n];return o||(Yn[n]=Nr(e))}else return Nr(e)}}const ac=()=>"",vt=e=>we(e);function lc(e,...t){const{fallbackFormat:n,postTranslation:o,unresolving:s,messageCompiler:r,fallbackLocale:i,messages:a}=e,[l,u]=_i(...t),c=le(u.missingWarn)?u.missingWarn:e.missingWarn,d=le(u.fallbackWarn)?u.fallbackWarn:e.fallbackWarn,p=le(u.escapeParameter)?u.escapeParameter:e.escapeParameter,f=!!u.resolvedMessage,b=q(u.default)||le(u.default)?le(u.default)?r?l:()=>l:u.default:n?r?l:()=>l:"",_=n||b!=="",A=ha(e,u);p&&__(u);let[E,C,h]=f?[l,A,a[A]||ye()]:Lf(e,l,A,i,d,c),m=E,k=l;if(!f&&!(q(m)||Ft(m)||vt(m))&&_&&(m=b,k=m),!f&&(!(q(m)||Ft(m)||vt(m))||!q(C)))return s?tr:l;let S=!1;const L=()=>{S=!0},O=vt(m)?m:Rf(e,l,C,m,k,L);if(S)return m;const I=E_(e,C,h,u),M=zw(I),K=k_(e,O,M);let N=o?o(K,l):K;if(p&&q(N)&&(N=Xb(N)),__INTLIFY_PROD_DEVTOOLS__){const V={timestamp:Date.now(),key:q(l)?l:vt(m)?m.key:"",locale:C||(vt(m)?m.locale:""),format:q(m)?m:vt(m)?m.source:"",message:N};V.meta=Ye({},e.__meta,p_()||{}),t_(V)}return N}function __(e){Ce(e.list)?e.list=e.list.map(t=>
5q(t)?Gl(t):t):fe(e.named)&&Object.keys(e.named).forEach(t=>{q(e.named[t])&&(e.named[t]=Gl(e.named[t]))})}function Lf(e,t,n,o,s,r){const{messages:i,onWarn:a,messageResolver:l,localeFallbacker:u}=e,c=u(e,o,n);let d=ye(),p,f=null;const b="translate";for(let _=0;_<c.length&&(p=c[_],d=i[p]||ye(),(f=l(d,t))===null&&(f=d[t]),!(q(f)||Ft(f)||vt(f)));_++)if(!y_(p,c)){const A=ma(e,t,p,r,b);A!==t&&(f=A)}return[f,p,d]}function Rf(e,t,n,o,s,r){const{messageCompiler:i,warnHtmlMessage:a}=e;if(vt(o)){const u=o;return u.locale=u.locale||n,u.key=u.key||t,u}if(i==null){const u=(()=>o);return u.locale=n,u.key=t,u}const l=i(o,S_(e,n,s,o,a,r));return l.locale=n,l.key=t,l.source=o,l}function k_(e,t,n){return t(n)}function _i(...e){const[t,n,o]=e,s=ye();if(!q(t)&&!De(t)&&!vt(t)&&!Ft(t))throw xt(At.INVALID_ARGUMENT);const r=De(t)?String(t):(vt(t),t);return De(n)?s.plural=n:q(n)?s.default=n:re(n)&&!Zs(n)?s.named=n:Ce(n)&&(s.list=n),De(o)?s.plural=o:q(o)?s.default=o:re(o)&&Ye(s,o),[r,s]}function S_(e,t,n,o,s,r){return{locale:t,key:n,warnHtmlMessage:s,onError:i=>{throw r&&r(i),i},onCacheKey:i=>Gb(t,n,i)}}function E_(e,t,n,o){const{modifiers:s,pluralRules:r,messageResolver:i,fallbackLocale:a,fallbackWarn:l,missingWarn:u,fallbackContext:c}=e,p={locale:t,modifiers:s,pluralRules:r,messages:f=>{let b=i(n,f);if(b==null&&c){const[,,_]=Lf(c,f,t,a,l,u);b=i(_,f)}if(q(b)||Ft(b)){let _=!1;const E=Rf(e,f,t,b,f,()=>{_=!0});return _?ac:E}else return vt(b)?b:ac}};return e.processor&&(p.processor=e.processor),o.list&&(p.list=o.list),o.named&&(p.named=o.named),De(o.plural)&&(p.pluralIndex=o.plural),p}function cc(e,...t){const{datetimeFormats:n,unresolving:o,fallbackLocale:s,onWarn:r,localeFallbacker:i}=e,{__datetimeFormatters:a}=e,[l,u,c,d]=ki(...t),p=le(c.missingWarn)?c.missingWarn:e.missingWarn;le(c.fallbackWarn)?c.fallbackWarn:e.fallbackWarn;const f=!!c.part,b=ha(e,c),_=i(e,s,b);if(!q(l)||l==="")return new Intl.DateTimeFormat(b,d).format(u);let A={},E,C=null;const h="datetime format";for(let S=0;S<_.length&&(E=_[S],A=n[E]||{},C=A[l],!re(C));S++)ma(e,l,E,p,h);if(!re(C)||!q(E))return o?tr:l;let m=`${E}__${l}`;Zs(d)||(m=`${m}__${JSON.stringify(d)}`);let k=a.get(m);return k||(k=new Intl.DateTimeFormat(E,Ye({},C,d)),a.set(m,k)),f?k.formatToParts(u):k.format(u)}const Of=["localeMatcher","weekday","era","year","month","day","hour","minute","second","timeZoneName","formatMatcher","hour12","timeZone","dateStyle","timeStyle","calendar","dayPeriod","numberingSystem","hourCycle","fractionalSecondDigits"];function ki(...e){const[t,n,o,s]=e,r=ye();let i=ye(),a;if(q(t)){const l=t.match(/(\d{4}-\d{2}-\d{2})(T|\s)?(.*)/);if(!l)throw xt(At.INVALID_ISO_DATE_ARGUMENT);const u=l[3]?l[3].trim().startsWith("T")?`${l[1].trim()}${l[3].trim()}`:`${l[1].trim()}T${l[3].trim()}`:l[1].trim();a=new Date(u);try{a.toISOString()}catch{throw xt(At.INVALID_ISO_DATE_ARGUMENT)}}else if(qb(t)){if(isNaN(t.getTime()))throw xt(At.INVALID_DATE_ARGUMENT);a=t}else if(De(t))a=t;else throw xt(At.INVALID_ARGUMENT);return q(n)?r.key=n:re(n)&&Object.keys(n).forEach(l=>{Of.includes(l)?i[l]=n[l]:r[l]=n[l]}),q(o)?r.locale=o:re(o)&&(i=o),re(s)&&(i=s),[r.key||"",a,r,i]}function uc(e,t,n){const o=e;for(const s in n){const r=`${t}__${s}`;o.__datetimeFormatters.has(r)&&o.__datetimeFormatters.delete(r)}}function dc(e,...t){const{numberFormats:n,unresolving:o,fallbackLocale:s,onWarn:r,localeFallbacker:i}=e,{__numberFormatters:a}=e,[l,u,c,d]=Si(...t),p=le(c.missingWarn)?c.missingWarn:e.missingWarn;le(c.fallbackWarn)?c.fallbackWarn:e.fallbackWarn;const f=!!c.part,b=ha(e,c),_=i(e,s,b);if(!q(l)||l==="")return new Intl.NumberFormat(b,d).format(u);let A={},E,C=null;const h="number format";for(let S=0;S<_.length&&(E=_[S],A=n[E]||{},C=A[l],!re(C));S++)ma(e,l,E,p,h);if(!re(C)||!q(E))return o?tr:l;let m=`${E}__${l}`;Zs(d)||(m=`${m}__${JSON.stringify(d)}`);let k=a.get(m);return k||(k=new Intl.NumberFormat(E,Ye({},C,d)),a.set(m,k)),f?k.formatToParts(u):k.format(u)}const Df=["localeMatcher","style","currency","currencyDisplay","currencySign","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","compactDisplay","notation","signDisplay","unit","unitDisplay","roundingMode","roundingPriority","roundingIncrement","trailingZeroDisplay"];function Si(...e){const[t,n,o,s]=e,r=ye();let i=ye();
5if(!De(t))throw xt(At.INVALID_ARGUMENT);const a=t;return q(n)?r.key=n:re(n)&&Object.keys(n).forEach(l=>{Df.includes(l)?i[l]=n[l]:r[l]=n[l]}),q(o)?r.locale=o:re(o)&&(i=o),re(s)&&(i=s),[r.key||"",a,r,i]}function fc(e,t,n){const o=e;for(const s in n){const r=`${t}__${s}`;o.__numberFormatters.has(r)&&o.__numberFormatters.delete(r)}}Lw();const C_="9.14.5";function T_(){typeof __VUE_I18N_FULL_INSTALL__!="boolean"&&(Yt().__VUE_I18N_FULL_INSTALL__=!0),typeof __VUE_I18N_LEGACY_API__!="boolean"&&(Yt().__VUE_I18N_LEGACY_API__=!0),typeof __INTLIFY_JIT_COMPILATION__!="boolean"&&(Yt().__INTLIFY_JIT_COMPILATION__=!1),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!="boolean"&&(Yt().__INTLIFY_DROP_MESSAGE_COMPILER__=!1),typeof __INTLIFY_PROD_DEVTOOLS__!="boolean"&&(Yt().__INTLIFY_PROD_DEVTOOLS__=!1)}const A_=s_.__EXTEND_POINT__,Wt=er(A_);Wt(),Wt(),Wt(),Wt(),Wt(),Wt(),Wt(),Wt(),Wt();const Nf=At.__EXTEND_POINT__,rt=er(Nf),$e={UNEXPECTED_RETURN_TYPE:Nf,INVALID_ARGUMENT:rt(),MUST_BE_CALL_SETUP_TOP:rt(),NOT_INSTALLED:rt(),NOT_AVAILABLE_IN_LEGACY_MODE:rt(),REQUIRED_VALUE:rt(),INVALID_VALUE:rt(),CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN:rt(),NOT_INSTALLED_WITH_PROVIDE:rt(),UNEXPECTED_ERROR:rt(),NOT_COMPATIBLE_LEGACY_VUE_I18N:rt(),BRIDGE_SUPPORT_VUE_2_ONLY:rt(),MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION:rt(),NOT_AVAILABLE_COMPOSITION_IN_LEGACY:rt(),__EXTEND_POINT__:rt()};function je(e,...t){return mo(e,null,void 0)}const Ei=wn("__translateVNode"),Ci=wn("__datetimeParts"),Ti=wn("__numberParts"),xf=wn("__setPluralRules"),Mf=wn("__injectWithOption"),Ai=wn("__dispose");function Go(e){if(!fe(e)||Ft(e))return e;for(const t in e)if(Tt(e,t))if(!t.includes("."))fe(e[t])&&Go(e[t]);else{const n=t.split("."),o=n.length-1;let s=e,r=!1;for(let i=0;i<o;i++){if(n[i]==="__proto__")throw new Error(`unsafe key: ${n[i]}`);if(n[i]in s||(s[n[i]]=ye()),!fe(s[n[i]])){r=!0;break}s=s[n[i]]}if(r||(Ft(s)?wf.includes(n[o])||delete e[t]:(s[n[o]]=e[t],delete e[t])),!Ft(s)){const i=s[n[o]];fe(i)&&Go(i)}}return e}function nr(e,t){const{messages:n,__i18n:o,messageResolver:s,flatJson:r}=t,i=re(n)?n:Ce(o)?ye():{[e]:ye()};if(Ce(o)&&o.forEach(a=>{if("locale"in a&&"resource"in a){const{locale:l,resource:u}=a;l?(i[l]=i[l]||ye(),gs(u,i[l])):gs(u,i)}else q(a)&&gs(JSON.parse(a),i)}),s==null&&r)for(const a in i)Tt(i,a)&&Go(i[a]);return i}function Ff(e){return e.type}function Uf(e,t,n){let o=fe(t.messages)?t.messages:ye();"__i18nGlobal"in n&&(o=nr(e.locale.value,{messages:o,__i18n:n.__i18nGlobal}));const s=Object.keys(o);s.length&&s.forEach(r=>{e.mergeLocaleMessage(r,o[r])});{if(fe(t.datetimeFormats)){const r=Object.keys(t.datetimeFormats);r.length&&r.forEach(i=>{e.mergeDateTimeFormat(i,t.datetimeFormats[i])})}if(fe(t.numberFormats)){const r=Object.keys(t.numberFormats);r.length&&r.forEach(i=>{e.mergeNumberFormat(i,t.numberFormats[i])})}}}function pc(e){return _e(mn,null,e,0)}const hc="__INTLIFY_META__",mc=()=>[],P_=()=>!1;let gc=0;function yc(e){return((t,n,o,s)=>e(n,o,pt()||void 0,s))}const I_=()=>{const e=pt();let t=null;return e&&(t=Ff(e)[hc])?{[hc]:t}:null};function ga(e={},t){const{__root:n,__injectWithOption:o}=e,s=n===void 0,r=e.flatJson,i=Ns?Qe:kt,a=!!e.translateExistCompatible;let l=le(e.inheritLocale)?e.inheritLocale:!0;const u=i(n&&l?n.locale.value:q(e.locale)?e.locale:co),c=i(n&&l?n.fallbackLocale.value:q(e.fallbackLocale)||Ce(e.fallbackLocale)||re(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:u.value),d=i(nr(u.value,e)),p=i(re(e.datetimeFormats)?e.datetimeFormats:{[u.value]:{}}),f=i(re(e.numberFormats)?e.numberFormats:{[u.value]:{}});let b=n?n.missingWarn:le(e.missingWarn)||yn(e.missingWarn)?e.missingWarn:!0,_=n?n.fallbackWarn:le(e.fallbackWarn)||yn(e.fallbackWarn)?e.fallbackWarn:!0,A=n?n.fallbackRoot:le(e.fallbackRoot)?e.fallbackRoot:!0,E=!!e.fallbackFormat,C=we(e.missing)?e.missing:null,h=we(e.missing)?yc(e.missing):null,m=we(e.postTranslation)?e.postTranslation:null,k=n?n.warnHtmlMessage:le(e.warnHtmlMessage)?e.warnHtmlMessage:!0,S=!!e.escapeParameter;const L=n?n.modifiers:re(e.modifiers)?e.modifiers:{};let O=e.pluralRules||n&&n.pluralRules,I;I=(()=>{s&&sc(null);const R={version:C_,locale:u.value,fallbackLocale:c.value,messages:d.value,modifiers:L,pluralRules:O,missing:h===null?void 0:h,missingWarn:b,fallbackWarn:_,fallbackFormat:E,unresolving:!0,postTranslation:m===null?void 0:m,warnHtmlMessage:k,escapeParameter:S,messageResolver:e.messageResolver,messageCompiler:e.messageCompiler,__meta:{framework:"vue"}};R.datetimeFormats=p.value,R.numberFormats=f.value,R.__datetimeFormatters=re(I)?I.__datetimeFormatters:void 0,R.__numberFormatters=re(I)?I.__numberFormatters:void 0;const D=m_(R);return s&&sc(D),D})(),_o(I,u.value,c.value);function K(){return[u.value,c.value,d.value,p.value,f.value]}const N=ue({get:()=>u.value,set:R=>{u.value=R,I.locale=u.value}}),V=ue({get:()=>c.value,set:R=>{c.value=R,I.fallbackLocale=c.value,_o(I,u.value,R)}}),se=ue(()=>d.value),ae=ue(()=>p.value),Y=ue(()=>f.value);function te(){return we(m)?m:null}function J(R){m=R,I.postTranslation=R}function Ee(){return C}function st(R){R!==null&&(h=yc(R)),C=R,I.missing=h}const Pe=(R,D,z,ee,Le,Oe)=>{K();let We;try{__INTLIFY_PROD_DEVTOOLS__,s||(I.fallbackContext=n?h_():void 0),We=R(I)}finally{__INTLIFY_PROD_DEVTOOLS__,s||(I.fallbackContext=void 0)}if(z!=="translate exists"&&De(We)&&We===tr||z==="translate exists"&&!We){const[ze,$n]=D();return n&&A?ee(n):Le(ze)}else{if(Oe(We))return We;throw je($e.UNEXPECTED_RETURN_TYPE)}};function Ie(...R){return Pe(D=>Reflect.apply(lc,null,[D,...R]),()=>_i(...R),"translate",D=>Reflect.apply(D.t,D,[...R]),D=>D,D=>q(D))}function ht(...R){const[D,z,ee]=R;if(ee&&!fe(ee))throw je($e.INVALID_ARGUMENT);return Ie(D,z,Ye({resolvedMessage:!0},ee||{}))}function ct(...R){return Pe(D=>Reflect.apply(cc,null,[D,...R]),()=>ki(...R),"datetime format",D=>Reflect.apply(D.d,D,[...R]),()=>tc,D=>q(D))}function ut(...R){return Pe(D=>Reflect.apply(dc,null,[D,...R]),()=>Si(...R),"number format",D=>Reflect.apply(D.n,D,[...R]),()=>tc,D=>q(D))}function Be(R){return R.map(D=>q(D)||De(D)||le(D)?pc(String(D)):D)}const X={normalize:Be,interpolate:R=>R,type:"vnode"};function j(...R){return Pe(D=>{let z;const ee=D;try{ee.processor=X,z=Reflect.apply(lc,null,[ee,...R])}finally{ee.processor=null}return z},()=>_i(...R),"translate",D=>D[Ei](...R),D=>[pc(D)],D=>Ce(D))}function Q(...R){return Pe(D=>Reflect.apply(dc,null,[D,...R]),()=>Si(...R),"number format",D=>D[Ti](...R),mc,D=>q(D)||Ce(D))}function ie(...R){return Pe(D=>Reflect.apply(cc,null,[D,...R]),()=>ki(...R),"datetime format",D=>D[Ci](...R),mc,D=>q(D)||Ce(D))}function he(R){O=R,I.pluralRules=O}function w(R,D){return Pe(()=>{if(!R)return!1;const z=q(D)?D:u.value,ee=H(z),Le=I.messageResolver(ee,R);return a?Le!=null:Ft(Le)||vt(Le)||q(Le)},()=>[R],"translate exists",z=>Reflect.apply(z.te,z,[R,D]),P_,z=>le(z))}function g(R){let D=null;const z=kf(I,c.value,u.value);for(let ee=0;ee<z.length;ee++){const Le=d.value[z[ee]]||{},Oe=I.messageResolver(Le,R);if(Oe!=null){D=Oe;break}}return D}function P(R){const D=g(R);return D??(n?n.tm(R)||{}:{})}function H(R){return d.value[R]||{}}function x(R,D){if(r){const z={[R]:D};for(const ee in z)Tt(z,ee)&&Go(z[ee]);D=z[R]}d.value[R]=D,I.messages=d.value}function B(R,D){d.value[R]=d.value[R]||{};const z={[R]:D};if(r)for(const ee in z)Tt(z,ee)&&Go(z[ee]);D=z[R],gs(D,d.value[R]),I.messages=d.value}function G(R){return p.value[R]||{}}function y(R,D){p.value[R]=D,I.datetimeFormats=p.value,uc(I,R,D)}function v(R,D){p.value[R]=Ye(p.value[R]||{},D),I.datetimeFormats=p.value,uc(I,R,D)}function T(R){return f.value[R]||{}}function U(R,D){f.value[R]=D,I.numberFormats=f.value,fc(I,R,D)}function W(R,D){f.value[R]=Ye(f.value[R]||{},D),I.numberFormats=f.value,fc(I,R,D)}gc++,n&&Ns&&(Jt(n.locale,R=>{l&&(u.value=R,I.locale=R,_o(I,u.value,c.value))}),Jt(n.fallbackLocale,R=>{l&&(c.value=R,I.fallbackLocale=R,_o(I,u.value,c.value))}));const $={id:gc,locale:N,fallbackLocale:V,get inheritLocale(){return l},set inheritLocale(R){l=R,R&&n&&(u.value=n.locale.value,c.value=n.fallbackLocale.value,_o(I,u.value,c.value))},get availableLocales(){return Object.keys(d.value).sort()},messages:se,get modifiers(){return L},get pluralRules(){return O||{}},get isGlobal(){return s},get missingWarn(){return b}
5,set missingWarn(R){b=R,I.missingWarn=b},get fallbackWarn(){return _},set fallbackWarn(R){_=R,I.fallbackWarn=_},get fallbackRoot(){return A},set fallbackRoot(R){A=R},get fallbackFormat(){return E},set fallbackFormat(R){E=R,I.fallbackFormat=E},get warnHtmlMessage(){return k},set warnHtmlMessage(R){k=R,I.warnHtmlMessage=R},get escapeParameter(){return S},set escapeParameter(R){S=R,I.escapeParameter=R},t:Ie,getLocaleMessage:H,setLocaleMessage:x,mergeLocaleMessage:B,getPostTranslationHandler:te,setPostTranslationHandler:J,getMissingHandler:Ee,setMissingHandler:st,[xf]:he};return $.datetimeFormats=ae,$.numberFormats=Y,$.rt=ht,$.te=w,$.tm=P,$.d=ct,$.n=ut,$.getDateTimeFormat=G,$.setDateTimeFormat=y,$.mergeDateTimeFormat=v,$.getNumberFormat=T,$.setNumberFormat=U,$.mergeNumberFormat=W,$[Mf]=o,$[Ei]=j,$[Ci]=ie,$[Ti]=Q,$}function L_(e){const t=q(e.locale)?e.locale:co,n=q(e.fallbackLocale)||Ce(e.fallbackLocale)||re(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:t,o=we(e.missing)?e.missing:void 0,s=le(e.silentTranslationWarn)||yn(e.silentTranslationWarn)?!e.silentTranslationWarn:!0,r=le(e.silentFallbackWarn)||yn(e.silentFallbackWarn)?!e.silentFallbackWarn:!0,i=le(e.fallbackRoot)?e.fallbackRoot:!0,a=!!e.formatFallbackMessages,l=re(e.modifiers)?e.modifiers:{},u=e.pluralizationRules,c=we(e.postTranslation)?e.postTranslation:void 0,d=q(e.warnHtmlInMessage)?e.warnHtmlInMessage!=="off":!0,p=!!e.escapeParameterHtml,f=le(e.sync)?e.sync:!0;let b=e.messages;if(re(e.sharedMessages)){const S=e.sharedMessages;b=Object.keys(S).reduce((O,I)=>{const M=O[I]||(O[I]={});return Ye(M,S[I]),O},b||{})}const{__i18n:_,__root:A,__injectWithOption:E}=e,C=e.datetimeFormats,h=e.numberFormats,m=e.flatJson,k=e.translateExistCompatible;return{locale:t,fallbackLocale:n,messages:b,flatJson:m,datetimeFormats:C,numberFormats:h,missing:o,missingWarn:s,fallbackWarn:r,fallbackRoot:i,fallbackFormat:a,modifiers:l,pluralRules:u,postTranslation:c,warnHtmlMessage:d,escapeParameter:p,messageResolver:e.messageResolver,inheritLocale:f,translateExistCompatible:k,__i18n:_,__root:A,__injectWithOption:E}}function Pi(e={},t){{const n=ga(L_(e)),{__extender:o}=e,s={id:n.id,get locale(){return n.locale.value},set locale(r){n.locale.value=r},get fallbackLocale(){return n.fallbackLocale.value},set fallbackLocale(r){n.fallbackLocale.value=r},get messages(){return n.messages.value},get datetimeFormats(){return n.datetimeFormats.value},get numberFormats(){return n.numberFormats.value},get availableLocales(){return n.availableLocales},get formatter(){return{interpolate(){return[]}}},set formatter(r){},get missing(){return n.getMissingHandler()},set missing(r){n.setMissingHandler(r)},get silentTranslationWarn(){return le(n.missingWarn)?!n.missingWarn:n.missingWarn},set silentTranslationWarn(r){n.missingWarn=le(r)?!r:r},get silentFallbackWarn(){return le(n.fallbackWarn)?!n.fallbackWarn:n.fallbackWarn},set silentFallbackWarn(r){n.fallbackWarn=le(r)?!r:r},get modifiers(){return n.modifiers},get formatFallbackMessages(){return n.fallbackFormat},set formatFallbackMessages(r){n.fallbackFormat=r},get postTranslation(){return n.getPostTranslationHandler()},set postTranslation(r){n.setPostTranslationHandler(r)},get sync(){return n.inheritLocale},set sync(r){n.inheritLocale=r},get warnHtmlInMessage(){return n.warnHtmlMessage?"warn":"off"},set warnHtmlInMessage(r){n.warnHtmlMessage=r!=="off"},get escapeParameterHtml(){return n.escapeParameter},set escapeParameterHtml(r){n.escapeParameter=r},get preserveDirectiveContent(){return!0},set preserveDirectiveContent(r){},get pluralizationRules(){return n.pluralRules||{}},__composer:n,t(...r){const[i,a,l]=r,u={};let c=null,d=null;if(!q(i))throw je($e.INVALID_ARGUMENT);const p=i;return q(a)?u.locale=a:Ce(a)?c=a:re(a)&&(d=a),Ce(l)?c=l:re(l)&&(d=l),Reflect.apply(n.t,n,[p,c||d||{},u])},rt(...r){return Reflect.apply(n.rt,n,[...r])},tc(...r){const[i,a,l]=r,u={plural:1};let c=null,d=null;if(!q(i))throw je($e.INVALID_ARGUMENT);const p=i;return q(a)?u.locale=a:De(a)?u.plural=a:Ce(a)?c=a:re(a)&&(d=a),q(l)?u.locale=l:Ce(l)?c=l:re(l)&&(d=l),Reflect.apply(n.t,n,[p,c||d||{},u])},te(r,i){return n.te(r,i)},tm(r){return n.tm(r)},getLocaleMessage(r){return n.getLocaleMessage(r)},setLocaleMessage(r,i){n.setLocaleMessage(r,i)},mergeLocaleMessage(r,i){n.mergeLocaleMessage(r,i)},d(...r){return Reflect.apply(n.d,n,[...r])},getDateTimeFormat(r){return n.getDateTimeFormat(r)},setDateTimeFormat(r,i){n.setDateTimeFormat(r,i)},mergeDateTimeFormat(r,i){n.mergeDateTimeFormat(r,i)},n(...r){return Reflect.apply(n.n,n,[...r])},getNumberFormat(r){return n.getNumberFormat(r)},setNumberFormat(r,i){n.setNumberFormat(r,i)},mergeNumberFormat(r,i){n.mergeNumberFormat(r,i)},getChoiceIndex(r,i){return-1}};return s.__extender=o,s}}const ya={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:e=>e==="parent"||e==="global",default:"parent"},i18n:{type:Object}};function R_({slots:e},t){return t.length===1&&t[0]==="default"?(e.default?e.default():[]).reduce((o,s)=>[...o,...s.type===Ve?s.children:[s]],[]):t.reduce((n,o)=>{const s=e[o];return s&&(n[o]=s()),n},ye())}function Hf(e){return Ve}const O_=lt({name:"i18n-t",props:Ye({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:e=>De(e)||!isNaN(e)}},ya),setup(e,t){const{slots:n,attrs:o}=t,s=e.i18n||va({useScope:e.scope,__useComponent:!0});return()=>{const r=Object.keys(n).filter(d=>d!=="_"),i=ye();e.locale&&(i.locale=e.locale),e.plural!==void 0&&(i.plural=q(e.plural)?+e.plural:e.plural);const a=R_(t,r),l=s[Ei](e.keypath,a,i),u=Ye(ye(),o),c=q(e.tag)||fe(e.tag)?e.tag:Hf();return ke(c,u,l)}}}),vc=O_;function D_(e){return Ce(e)&&!q(e[0])}function $f(e,t,n,o){const{slots:s,attrs:r}=t;return()=>{const i={part:!0};let a=ye();e.locale&&(i.locale=e.locale),q(e.format)?i.key=e.format:fe(e.format)&&(q(e.format.key)&&(i.key=e.format.key),a=Object.keys(e.format).reduce((p,f)=>n.includes(f)?Ye(ye(),p,{[f]:e.format[f]}):p,ye()));const l=o(e.value,i,a);let u=[i.key];Ce(l)?u=l.map((p,f)=>{const b=s[p.type],_=b?b({[p.type]:p.value,index:f,parts:l}):[p.value];return D_(_)&&(_[0].key=`${p.type}-${f}`),_}):q(l)&&(u=[l]);const c=Ye(ye(),r),d=q(e.tag)||fe(e.tag)?e.tag:Hf();return ke(d,c,u)}}const N_=lt({name:"i18n-n",props:Ye({value:{type:Number,required:!0},format:{type:[String,Object]}},ya),setup(e,t){const n=e.i18n||va({useScope:e.scope,__useComponent:!0});return $f(e,t,Df,(...o)=>n[Ti](...o))}}),bc=N_,x_=lt({name:"i18n-d",props:Ye({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},ya),setup(e,t){const n=e.i18n||va({useScope:e.scope,__useComponent:!0});return $f(e,t,Of,(...o)=>n[Ci](...o))}}),wc=x_;function M_(e,t){const n=e;if(e.mode==="composition")return n.__getInstance(t)||e.global;{const o=n.__getInstance(t);return o!=null?o.__composer:e.global.__composer}}function F_(e){const t=i=>{const{instance:a,modifiers:l,value:u}=i;if(!a||!a.$)throw je($e.UNEXPECTED_ERROR);const c=M_(e,a.$),d=_c(u);return[Reflect.apply(c.t,c,[...kc(d)]),c]};return{created:(i,a)=>{const[l,u]=t(a);Ns&&e.global===u&&(i.__i18nWatcher=Jt(u.locale,()=>{a.instance&&a.instance.$forceUpdate()})),i.__composer=u,i.textContent=l},unmounted:i=>{Ns&&i.__i18nWatcher&&(i.__i18nWatcher(),i.__i18nWatcher=void 0,delete i.__i18nWatcher),i.__composer&&(i.__composer=void 0,delete i.__composer)},beforeUpdate:(i,{value:a})=>{if(i.__composer){const l=i.__composer,u=_c(a);i.textContent=Reflect.apply(l.t,l,[...kc(u)])}},getSSRProps:i=>{const[a]=t(i);return{textContent:a}}}}function _c(e){if(q(e))return{path:e};if(re(e)){if(!("path"in e))throw je($e.REQUIRED_VALUE,"path");return e}else throw je($e.INVALID_VALUE)}function kc(e){const{path:t,locale:n,args:o,choice:s,plural:r}=e,i={},a=o||{};return q(n)&&(i.locale=n),De(s)&&(i.plural=s),De(r)&&(i.plural=r),[t,a,i]}function U_(e,t,...n){const o=re(n[0])?n[0]:{},s=!!o.useI18nComponentName;(!le(o.globalInstall)||o.globalInstall)&&([s?"i18n":vc.name,"I18nT"].forEach(i=>
5e.component(i,vc)),[bc.name,"I18nN"].forEach(i=>e.component(i,bc)),[wc.name,"I18nD"].forEach(i=>e.component(i,wc))),e.directive("t",F_(t))}function H_(e,t,n){return{beforeCreate(){const o=pt();if(!o)throw je($e.UNEXPECTED_ERROR);const s=this.$options;if(s.i18n){const r=s.i18n;if(s.__i18n&&(r.__i18n=s.__i18n),r.__root=t,this===this.$root)this.$i18n=Sc(e,r);else{r.__injectWithOption=!0,r.__extender=n.__vueI18nExtend,this.$i18n=Pi(r);const i=this.$i18n;i.__extender&&(i.__disposer=i.__extender(this.$i18n))}}else if(s.__i18n)if(this===this.$root)this.$i18n=Sc(e,s);else{this.$i18n=Pi({__i18n:s.__i18n,__injectWithOption:!0,__extender:n.__vueI18nExtend,__root:t});const r=this.$i18n;r.__extender&&(r.__disposer=r.__extender(this.$i18n))}else this.$i18n=e;s.__i18nGlobal&&Uf(t,s,s),this.$t=(...r)=>this.$i18n.t(...r),this.$rt=(...r)=>this.$i18n.rt(...r),this.$tc=(...r)=>this.$i18n.tc(...r),this.$te=(r,i)=>this.$i18n.te(r,i),this.$d=(...r)=>this.$i18n.d(...r),this.$n=(...r)=>this.$i18n.n(...r),this.$tm=r=>this.$i18n.tm(r),n.__setInstance(o,this.$i18n)},mounted(){},unmounted(){const o=pt();if(!o)throw je($e.UNEXPECTED_ERROR);const s=this.$i18n;delete this.$t,delete this.$rt,delete this.$tc,delete this.$te,delete this.$d,delete this.$n,delete this.$tm,s.__disposer&&(s.__disposer(),delete s.__disposer,delete s.__extender),n.__deleteInstance(o),delete this.$i18n}}}function Sc(e,t){e.locale=t.locale||e.locale,e.fallbackLocale=t.fallbackLocale||e.fallbackLocale,e.missing=t.missing||e.missing,e.silentTranslationWarn=t.silentTranslationWarn||e.silentFallbackWarn,e.silentFallbackWarn=t.silentFallbackWarn||e.silentFallbackWarn,e.formatFallbackMessages=t.formatFallbackMessages||e.formatFallbackMessages,e.postTranslation=t.postTranslation||e.postTranslation,e.warnHtmlInMessage=t.warnHtmlInMessage||e.warnHtmlInMessage,e.escapeParameterHtml=t.escapeParameterHtml||e.escapeParameterHtml,e.sync=t.sync||e.sync,e.__composer[xf](t.pluralizationRules||e.pluralizationRules);const n=nr(e.locale,{messages:t.messages,__i18n:t.__i18n});return Object.keys(n).forEach(o=>e.mergeLocaleMessage(o,n[o])),t.datetimeFormats&&Object.keys(t.datetimeFormats).forEach(o=>e.mergeDateTimeFormat(o,t.datetimeFormats[o])),t.numberFormats&&Object.keys(t.numberFormats).forEach(o=>e.mergeNumberFormat(o,t.numberFormats[o])),e}const $_=wn("global-vue-i18n");function B_(e={},t){const n=__VUE_I18N_LEGACY_API__&&le(e.legacy)?e.legacy:__VUE_I18N_LEGACY_API__,o=le(e.globalInjection)?e.globalInjection:!0,s=__VUE_I18N_LEGACY_API__&&n?!!e.allowComposition:!0,r=new Map,[i,a]=W_(e,n),l=wn("");function u(p){return r.get(p)||null}function c(p,f){r.set(p,f)}function d(p){r.delete(p)}{const p={get mode(){return __VUE_I18N_LEGACY_API__&&n?"legacy":"composition"},get allowComposition(){return s},async install(f,...b){if(f.__VUE_I18N_SYMBOL__=l,f.provide(f.__VUE_I18N_SYMBOL__,p),re(b[0])){const E=b[0];p.__composerExtend=E.__composerExtend,p.__vueI18nExtend=E.__vueI18nExtend}let _=null;!n&&o&&(_=Q_(f,p.global)),__VUE_I18N_FULL_INSTALL__&&U_(f,p,...b),__VUE_I18N_LEGACY_API__&&n&&f.mixin(H_(a,a.__composer,p));const A=f.unmount;f.unmount=()=>{_&&_(),p.dispose(),A()}},get global(){return a},dispose(){i.stop()},__instances:r,__getInstance:u,__setInstance:c,__deleteInstance:d};return p}}function va(e={}){const t=pt();if(t==null)throw je($e.MUST_BE_CALL_SETUP_TOP);if(!t.isCE&&t.appContext.app!=null&&!t.appContext.app.__VUE_I18N_SYMBOL__)throw je($e.NOT_INSTALLED);const n=V_(t),o=G_(n),s=Ff(t),r=j_(e,s);if(__VUE_I18N_LEGACY_API__&&n.mode==="legacy"&&!e.__useComponent){if(!n.allowComposition)throw je($e.NOT_AVAILABLE_IN_LEGACY_MODE);return X_(t,r,o,e)}if(r==="global")return Uf(o,e,s),o;if(r==="parent"){let l=K_(n,t,e.__useComponent);return l==null&&(l=o),l}const i=n;let a=i.__getInstance(t);if(a==null){const l=Ye({},e);"__i18n"in s&&(l.__i18n=s.__i18n),o&&(l.__root=o),a=ga(l),i.__composerExtend&&(a[Ai]=i.__composerExtend(a)),Y_(i,t,a),i.__setInstance(t,a)}return a}function W_(e,t,n){const o=Hc();{const s=__VUE_I18N_LEGACY_API__&&t?o.run(()=>Pi(e)):o.run(()=>ga(e));if(s==null)throw je($e.UNEXPECTED_ERROR);return[o,s]}}function V_(e){{const t=He(e.isCE?$_:e.appContext.app.__VUE_I18N_SYMBOL__);if(!t)throw je(e.isCE?$e.NOT_INSTALLED_WITH_PROVIDE:$e.UNEXPECTED_ERROR);return t}}function j_(e,t){return Zs(e)?"__i18n"in t?"local":"global":e.useScope?e.useScope:"local"}function G_(e){return e.mode==="composition"?e.global:e.global.__composer}function K_(e,t,n=!1){let o=null;const s=t.root;let r=q_(t,n);for(;r!=null;){const i=e;if(e.mode==="composition")o=i.__getInstance(r);else if(__VUE_I18N_LEGACY_API__){const a=i.__getInstance(r);a!=null&&(o=a.__composer,n&&o&&!o[Mf]&&(o=null))}if(o!=null||s===r)break;r=r.parent}return o}function q_(e,t=!1){return e==null?null:t&&e.vnode.ctx||e.parent}function Y_(e,t,n){Mn(()=>{},t),Ki(()=>{const o=n;e.__deleteInstance(t);const s=o[Ai];s&&(s(),delete o[Ai])},t)}function X_(e,t,n,o={}){const s=t==="local",r=kt(null);if(s&&e.proxy&&!(e.proxy.$options.i18n||e.proxy.$options.__i18n))throw je($e.MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION);const i=le(o.inheritLocale)?o.inheritLocale:!q(o.locale),a=Qe(!s||i?n.locale.value:q(o.locale)?o.locale:co),l=Qe(!s||i?n.fallbackLocale.value:q(o.fallbackLocale)||Ce(o.fallbackLocale)||re(o.fallbackLocale)||o.fallbackLocale===!1?o.fallbackLocale:a.value),u=Qe(nr(a.value,o)),c=Qe(re(o.datetimeFormats)?o.datetimeFormats:{[a.value]:{}}),d=Qe(re(o.numberFormats)?o.numberFormats:{[a.value]:{}}),p=s?n.missingWarn:le(o.missingWarn)||yn(o.missingWarn)?o.missingWarn:!0,f=s?n.fallbackWarn:le(o.fallbackWarn)||yn(o.fallbackWarn)?o.fallbackWarn:!0,b=s?n.fallbackRoot:le(o.fallbackRoot)?o.fallbackRoot:!0,_=!!o.fallbackFormat,A=we(o.missing)?o.missing:null,E=we(o.postTranslation)?o.postTranslation:null,C=s?n.warnHtmlMessage:le(o.warnHtmlMessage)?o.warnHtmlMessage:!0,h=!!o.escapeParameter,m=s?n.modifiers:re(o.modifiers)?o.modifiers:{},k=o.pluralRules||s&&n.pluralRules;function S(){return[a.value,l.value,u.value,c.value,d.value]}
5const L=ue({get:()=>r.value?r.value.locale.value:a.value,set:g=>{r.value&&(r.value.locale.value=g),a.value=g}}),O=ue({get:()=>r.value?r.value.fallbackLocale.value:l.value,set:g=>{r.value&&(r.value.fallbackLocale.value=g),l.value=g}}),I=ue(()=>r.value?r.value.messages.value:u.value),M=ue(()=>c.value),K=ue(()=>d.value);function N(){return r.value?r.value.getPostTranslationHandler():E}function V(g){r.value&&r.value.setPostTranslationHandler(g)}function se(){return r.value?r.value.getMissingHandler():A}function ae(g){r.value&&r.value.setMissingHandler(g)}function Y(g){return S(),g()}function te(...g){return r.value?Y(()=>Reflect.apply(r.value.t,null,[...g])):Y(()=>"")}function J(...g){return r.value?Reflect.apply(r.value.rt,null,[...g]):""}function Ee(...g){return r.value?Y(()=>Reflect.apply(r.value.d,null,[...g])):Y(()=>"")}function st(...g){return r.value?Y(()=>Reflect.apply(r.value.n,null,[...g])):Y(()=>"")}function Pe(g){return r.value?r.value.tm(g):{}}function Ie(g,P){return r.value?r.value.te(g,P):!1}function ht(g){return r.value?r.value.getLocaleMessage(g):{}}function ct(g,P){r.value&&(r.value.setLocaleMessage(g,P),u.value[g]=P)}function ut(g,P){r.value&&r.value.mergeLocaleMessage(g,P)}function Be(g){return r.value?r.value.getDateTimeFormat(g):{}}function F(g,P){r.value&&(r.value.setDateTimeFormat(g,P),c.value[g]=P)}function X(g,P){r.value&&r.value.mergeDateTimeFormat(g,P)}function j(g){return r.value?r.value.getNumberFormat(g):{}}function Q(g,P){r.value&&(r.value.setNumberFormat(g,P),d.value[g]=P)}function ie(g,P){r.value&&r.value.mergeNumberFormat(g,P)}const he={get id(){return r.value?r.value.id:-1},locale:L,fallbackLocale:O,messages:I,datetimeFormats:M,numberFormats:K,get inheritLocale(){return r.value?r.value.inheritLocale:i},set inheritLocale(g){r.value&&(r.value.inheritLocale=g)},get availableLocales(){return r.value?r.value.availableLocales:Object.keys(u.value)},get modifiers(){return r.value?r.value.modifiers:m},get pluralRules(){return r.value?r.value.pluralRules:k},get isGlobal(){return r.value?r.value.isGlobal:!1},get missingWarn(){return r.value?r.value.missingWarn:p},set missingWarn(g){r.value&&(r.value.missingWarn=g)},get fallbackWarn(){return r.value?r.value.fallbackWarn:f},set fallbackWarn(g){r.value&&(r.value.missingWarn=g)},get fallbackRoot(){return r.value?r.value.fallbackRoot:b},set fallbackRoot(g){r.value&&(r.value.fallbackRoot=g)},get fallbackFormat(){return r.value?r.value.fallbackFormat:_},set fallbackFormat(g){r.value&&(r.value.fallbackFormat=g)},get warnHtmlMessage(){return r.value?r.value.warnHtmlMessage:C},set warnHtmlMessage(g){r.value&&(r.value.warnHtmlMessage=g)},get escapeParameter(){return r.value?r.value.escapeParameter:h},set escapeParameter(g){r.value&&(r.value.escapeParameter=g)},t:te,getPostTranslationHandler:N,setPostTranslationHandler:V,getMissingHandler:se,setMissingHandler:ae,rt:J,d:Ee,n:st,tm:Pe,te:Ie,getLocaleMessage:ht,setLocaleMessage:ct,mergeLocaleMessage:ut,getDateTimeFormat:Be,setDateTimeFormat:F,mergeDateTimeFormat:X,getNumberFormat:j,setNumberFormat:Q,mergeNumberFormat:ie};function w(g){g.locale.value=a.value,g.fallbackLocale.value=l.value,Object.keys(u.value).forEach(P=>{g.mergeLocaleMessage(P,u.value[P])}),Object.keys(c.value).forEach(P=>{g.mergeDateTimeFormat(P,c.value[P])}),Object.keys(d.value).forEach(P=>{g.mergeNumberFormat(P,d.value[P])}),g.escapeParameter=h,g.fallbackFormat=_,g.fallbackRoot=b,g.fallbackWarn=f,g.missingWarn=p,g.warnHtmlMessage=C}return gu(()=>{if(e.proxy==null||e.proxy.$i18n==null)throw je($e.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);const g=r.value=e.proxy.$i18n.__composer;t==="global"?(a.value=g.locale.value,l.value=g.fallbackLocale.value,u.value=g.messages.value,c.value=g.datetimeFormats.value,d.value=g.numberFormats.value):s&&w(g)}),he}const J_=["locale","fallbackLocale","availableLocales"],Ec=["t","rt","d","n","tm","te"];function Q_(e,t){const n=Object.create(null);return J_.forEach(s=>{const r=Object.getOwnPropertyDescriptor(t,s);if(!r)throw je($e.UNEXPECTED_ERROR);const i=xe(r.value)?{get(){return r.value.value},set(a){r.value.value=a}}:{get(){return r.get&&r.get()}};Object.defineProperty(n,s,i)}),e.config.globalProperties.$i18n=n,Ec.forEach(s=>{const r=Object.getOwnPropertyDescriptor(t,s);if(!r||!r.value)throw je($e.UNEXPECTED_ERROR);Object.defineProperty(e.config.globalProperties,`$${s}`,r)}),()=>{delete e.config.globalProperties.$i18n,Ec.forEach(s=>{delete e.config.globalProperties[`$${s}`]})}}T_();__INTLIFY_JIT_COMPILATION__?oc(w_):oc(b_);u_(jw);d_(kf);if(__INTLIFY_PROD_DEVTOOLS__){const e=Yt();e.__INTLIFY__=!0,Zw(e.__INTLIFY_DEVTOOLS_GLOBAL_HOOK__)}const z_=JSON.parse(`{"common":{"learnMore":"Learn more","getInstallCommand":"Get install c
5ommand","platformOverview":"Platform overview","browseModules":"Browse modules","browseResources":"Browse resources","backToComparisons":"Back to comparisons","viewModule":"View module"},"nav":{"platform":"Platform","playbooks":"Playbooks","modules":"Modules","apps":"Apps","resources":"Resources","changelog":"Changelog","pricing":"Pricing","comparison":"Comparison","solutions":"Solutions","useCases":"Use cases","security":"Security"},"shell":{"login":"Login","logoAlt":"Dataplicity","toggleNavigation":"Toggle navigation","navAria":"Marketing pages"},"footer":{"logoAlt":"Dataplicity","penguinAlt":"Dataplicity penguin logo","contact":"Contact","links":"Links","apps":"Apps","documentation":"Documentation","status":"Service status","legalLink":"Legal","silosentryExample":"SiloSentry","contactFooterAria":"Dataplicity contact footer","afterTheyShipEgg":"After They Ship comic series","afterTheyShipEggTitle":"After They Ship","addressLines":["Prama House","267 Banbury Road","Oxford, OX2 7HT","United Kingdom"],"product":"Product","operations":"Fleet operations","applications":"Customer applications","gettingStarted":"Getting started"},"apps":{"hero":{"eyebrow":"Apps","title":"Take device alerts and remote access with you.","lead":"Use the Dataplicity apps on iOS and Android to review device alerts and reach your fleet. For on-call incidents, the notification includes the device, severity and escalation stage.","highlights":["Device, severity, and escalation tier in the notification itself","Critical pages break through silent mode and Focus","Remote terminal access when you need to go deeper"],"window":{"title":"Available platforms","subtitle":"Official app stores","items":["Apple iOS","Android"],"footer":"Download the Dataplicity app for your device."}},"cli":{"eyebrow":"Command line","title":"Dataplicity CLI","copy":"Install the Dataplicity command line on macOS with Homebrew for SSH, port forwarding, logs, and fleet jobs from your terminal.","installLabel":"Install with Homebrew","copyCommand":"Copy command","copied":"Copied","copyFailed":"Copy failed"},"downloads":{"title":"Downloadable versions","subtitle":"Download your preferred application directly from the official stores.","items":[{"label":"iOS","title":"Dataplicity for iOS","copy":"Compatibility: Apple iOS 10 or later.","cta":"Open App Store"},{"label":"Android","title":"Dataplicity for Android","copy":"Compatibility: Android 8.0 (Oreo) or later.","cta":"Open Google Play"}]}},"landing":{"hero":{"eyebrow":"Connected-product operating layer for Linux hardware companies","audience":"For OEM and fleet ops teams after devices ship","title":"Remote device management for Linux IoT fleets, after they ship.","titlePrefix":"Remote device management for Linux IoT fleets,","titleHighlight":"after they ship.","panelTitle":"Most IoT support toolchains were built by accident.","lead":"Secure remote access, monitoring, logs, and alerts for Linux edge fleets â without VPN or inbound ports â on one device record after shipment.","body":"A canary here, a pager there, a VPN shell, a war room, a status page - bolted together over years until an incident has more tools than people left to fix it. Dataplicity is the designed alternative: alerts, monitors, terminals, incidents, and customer status on one device record.","panelNote":"Individual sites flake all the time. When every currently-running Starlink device drops at once, bolted-together stacks almost never alert on it.","panelCta":"See the integrated workflow","cockpitPanelTitle":"A fast reaction cockpit for whatever goes wrong.","cockpitPanelBody":"Everything you need to identify and resolve a problem - alerts, monitors, logs, shell, incident, and status - contextually relevant and in one place. Open the device record and work the outage without rebuilding context in the next tool.","cockpitCta":"Explore remote access","displayPanelTitle":"Generic dashboards have no idea what your devices are doing.","displayPanelBody":"Not when they are healthy, and not when they fail. Hook a monitor to a Pi or kiosk, run Dataplicity full screen, and the wall shows live endpoint and fleet monitors from the same device records as the terminal."},"typewriter":{"prefix":"Control your ","suffix":"from anywhere.","words":["Raspberry Pi","Orange Pi","Banana Pi","Rock Pi","BeagleBone","Jetson Nano"]},"steps":{"step1":{"title":"Step 1 â secure your workspace"},"signInPrompt":"or","signInLink":"Sign in","signInSuffix":"if you've already got an account.","step2":{"title":"Step 2 â install when you're ready","copy":"Enter your email above and a line of code will appear here. Copy it into your device terminal to activate remote access."}},"highlights":{"title":"Linux IoT fleet operations in one platform","subtitle":"Inventory, monitoring, logs, provisioning, and remote access share one device model.","cta":"See the full platform overview","cards":{"inventory":{"label":"Inventory","title":"Fleet inventory and provisioning","copy":"Track device identity, owner, site, tags, class, and provisioning data on the same record."},"operations":{"label":"Operations","title":"Alerts, logs, and incidents in one place","copy":"When the war room has more tabs open than people on the call, the stack is the outage. Keep health, syslog, alerts, and response on the same device record."},"automation":{"label":"Automation","title":"Secure remote access and tasks","copy":"Open a browser terminal without VPN or port forwarding, then run repeatable jobs against devices or cohorts."},"customerSurfaces":{"label":"Displays","title":"Full-screen fleet status on any monitor","copy":"Hook a Pi or kiosk to a screen and run Dataplicity full screen - endpoint and fleet monitors, not a detached BI chart that never met the fleet."},"security":{"label":"Security","title":"SSO, MFA, detections","copy":"Security activity, detections, and access controls are first-class modules."}}},"cta":{"title":"Connect your first Linux device with one command.","body":"Enter your work email to create a provisional workspace and get the agent install c
5ommand."},"story":{"ariaLabel":"Why Dataplicity exists","title":"Built by people who lived the accidental stack.","body":"Dataplicity comes from manufacturing, developing, managing, and supporting connected devices in the field. Remote access, fleet visibility, logs, alerts, and customer status were not a roadmap wishlist - they were what support teams needed when the bolted-together toolchain failed."},"deepLinks":{"ariaLabel":"Explore Dataplicity","platform":{"label":"Platform","copy":"Inventory, monitors, logs, remote access, and customer surfaces."},"deviceCheck":{"label":"Device Check","copy":"Free Linux diagnostics in twenty minutes â no account required."},"example":{"label":"SiloSentry example","copy":"Picture a silo level monitor OEM: devices, ops wall, incidents, and fleet fixes."},"pricing":{"label":"Pricing","copy":"Start free on one device, then scale by fleet size."}},"visual":{"device":{"title":"Factory floor gateway","meta":"Raspberry Pi Model A · Sydney AU","status":"Online","stats":{"latency":"Latency","agent":"Agent","alerts":"Alerts"}},"rollout":{"title":"Remote support","meta":"Shell, logs, and wormhole access ready","status":"Healthy"}}},"outcomes":{"fleetVisibility":{"title":"Track every deployed device.","body":"Dataplicity keeps tags, ownership, last check-in, and status together so ops teams jump straight to the failing Raspberry Pi - no spreadsheets, no guesswork."},"remoteOps":{"title":"A fast reaction cockpit, not another VPN hop.","body":"Open the device record and work the problem with alerts, monitors, logs, and a secure shell already in context - so the people on the call are fixing the outage, not rebuilding it across tools.","visual":{"title":"Remote terminal","subtitle":"atlas-lab - prod","logs":{"line1":"$ ssh dataplicity{'@'}atlas-lab-001","line2":"dataplicity{'@'}atlas-lab-001:~$ tail -f /var/log/syslog","line3":"[12:04:11] dockerd: API listen on /run/docker.sock","line4":"dataplicity{'@'}atlas-lab-001:~$ systemctl restart docker","line5":"service restarted - docker"},"footer":["Terminal","Log search","Access record"]}},"securityOps":{"title":"Enforce access with SSO, MFA, and audit trails.","body":"Keep remote access governed by role-based access controls, audit every device session that gets opened, and surface suspicious activity without bolting on separate security tooling."},"wormhole":{"title":"Publish device UIs through secure wormholes.","body":"Expose device-hosted admin panels, energy dashboards, or APIs behind one outbound tunnel. Each device gets a fixed URL with policy-scoped access and audit history.","visual":{"title":"Wormhole session","subtitle":"atlas-lab-001","urlLabel":"Fixed URL","url":"https://ping.dataplicity.io/","items":["Admin UI · /settings","EmonPi dashboard · /energy","Device API · /v1/control"],"footer":["Wormhole","Access policy","Audit trail"]}},"customerTrust":{"title":"Give customers proof you're on top of incidents.","body":"Dataplicity ships status pages, read-only dashboards, and documentation so enterprise buyers see uptime and context without waiting for a PDF.","visual":{"subtitle":"Status page","notice":"Maintenance in progress","items":["Customer portal","Telemetry ingest","Alert routing"],"footer":[{"title":"Latest incident","copy":"Aug 16 - Routed alerts to backup NOC."},{"title":"Customer dashboard","copy":"Scoped to retail pilot."}]}}},"visual":{"pills":{"alert":"ALERT","log":"LOG","logs":"LOGS","event":"EVENT","incident":"INCIDENT","task":"TASK","script":"SCRIPT","sso":"SSO","detect":"DETECT","admin":"ADMIN","bundle":"GROUP","class":"CLASS","claim":"CLAIM","key":"KEY","doc":"DOC","identity":"IDENTITY","signals":"SIGNALS","workflow":"WORKFLOW","surfaces":"SURFACES","syslog":"SYSLOG","data":"DATA","events":"EVENTS"},"status":{"online":"online","offline":"offline","pending":"pending","degraded":"degraded","onlineLabel":"Online","offlineLabel":"Offline"}},"visuals":{"meta":{"fleet":{"title":"Fleet inventory","subtitle":"devices / cohorts / status"},"ops":{"title":"Ops timeline","subtitle":"logs + context"},"automation":{"title":"Automation","subtitle":"terminal + tasks"},"status":{"title":"Customer portal","subtitle":"status + dashboards"},"dashboard":{"title":"Fleet dashboard","subtitle":"metrics + status"},"display":{"title":"Display output","subtitle":"full screen"},"portal":{"title":"Whitelabel portal","subtitle":"branded access"},"security":{"title":"Security activity","subtitle":"auth + audit"},"firmware":{"title":"Device context","subtitle":"tags + cohorts"},"provisioning":{"title":"Provisioning","subtitle":"device classes"},"docs":{"title":"Documentation","subtitle":"git-backed"},"architecture":{"title":"Control plane","subtitle":"identity + signals"},"terminal":{"title":"Remote shell","subtitle":"secure access"}
5,"integrations":{"title":"Integrated workflows","subtitle":"one platform"}},"ops":{"rows":["kernel: eth0 link down on atlas-lab-001","systemd[1]: restarted docker.service","app[2481]: retrying connection to mqtt broker","device=beacon-retail-042 status=offline"]},"automation":{"terminal":["$ sudo systemctl restart edge-agent","status: active (running)"],"list":["nightly log archive","weekly health report","push config to pilot group"]},"status":{"items":["Customer portal","Telemetry ingest","Alert routing"],"footer":"Latest incident - routed alerts to backup NOC"},"dashboard":{"kpis":[{"label":"Online devices","meta":"+3.4% today"},{"label":"Alerts open","meta":"2 critical"},{"label":"Uptime","meta":"last 7d"}],"table":{"headers":{"device":"Device","status":"Status","firmware":"Device context"}}},"display":{"header":"Fleet status","labels":{"fleetMonitor":"Fleet monitor","endpointMonitor":"Endpoint","starlink":"Starlink cohort","starlinkValue":"DOWN","apiGateway":"API gateway","apiGatewayValue":"OK","freezers":"Freezer endpoints","freezersValue":"48/48","heartbeats":"Device heartbeats","heartbeatsValue":"1,257"},"footer":"Live from endpoint + fleet monitors","mini":{"endpointMonitors":"Endpoint monitors","fleetMonitors":"Fleet monitors","checks":"checks","cohorts":"cohorts","failing":"failing","watching":"watching"}},"portal":{"brand":"Acme Fleet Portal","role":"customer","cards":{"devices":{"title":"Devices"},"sites":{"title":"Sites","items":["Retail - East","Retail - West","Warehouse"]},"access":{"title":"Access","roles":{"viewer":"Viewer","operator":"Operator"},"permissions":{"viewer":"devices, sites","operator":"incidents, notes"}}},"footer":"Branded domain + SSO ready"},"security":{"rows":["login - jane{'@'}acme.com","token used from new ASN","role change - support -> admin"]},"firmware":{"row":"atlas-lab-001 - online","list":["lab - all online","pilot - 82% healthy","field - 12 alerts open"]},"provisioning":{"rows":["kiosk-v2 - default config","retail-pilot - 120 licenses","install key - expires in 24h"]},"docs":{"rows":["Installation - updated 2h ago","Warranty policy - updated yesterday","Runbook - updated 4d ago"]},"architecture":{"rows":["device <-> network <-> customer","metrics / logs / events","alerts / incidents / status","dashboards / docs / portals"]},"terminal":{"rows":["$ tail -n 50 /var/log/syslog","12:05:42 alert routed to robotics{'@'}","device online - 2ms latency"]},"integrations":{"rows":["phone alert: Starlink cohort offline","monitor + customer context attached","terminal beside endpoint evidence"],"infographic":{"before":"Without Dataplicity","after":"With Dataplicity","missKicker":"Usual case","miss":"No fleet-cohort alert â you find out when users complain.","or":"Or a bolted-together chain","alert":"All running Starlink devices dropped offline","chain":["Pingdom canary","PagerDuty","VPN shell","incident.io","Statuspage"],"platform":"One designed workflow","platformCopy":"Fleet cohort monitor, phone alert, terminal, incident, and status share one device record.","parts":["Monitor","Alert","Terminal","Incident","Status"],"statusLabel":"Status page","statusTitle":"Investigating Starlink connectivity","statusBody":"There is an issue with devices operating on Starlink. Engineers are already working on it.","alertKicker":"Fleet condition","chainLabel":"Bolted-together chain","collapse":"Same incident. One device record.","recordLabel":"Device record"}}},"fleetVisual":{"window":{"title":"Fleet inventory","subtitle":"lab - pilot - field"},"default":{"rows":[{"device":"atlas-lab-001","tag":"#lab"},{"device":"beacon-retail-042","tag":"#retail"},{"device":"telemetry-boreal-17","tag":"#field"},{"device":"kiosk-west-220","tag":"#pilot"}]},"hero":{"steps":{"device":"Device","alert":"Status","logs":"Logs","terminal":"Terminal"},"deviceMeta":"Neon Signs - remote signage","alert":{"title":"Status change","meta":"Last check-in 2 min ago"},"logs":["12:04:10 neon-player: render queue stalled","12:04:11 led-bus: timeout on frame 92"],"terminal":["$ sudo systemctl restart neon-player","â active (running)"]}},"featureView":{"internalBadge":"Alpha","loading":{"title":"Loading page...","copy":"Gathering the latest Dataplicity details."},"fallback":{"title":"Ready to validate the workflow?","copy":"Install the agent and see inventory and logs in one place.","secondary":"Back to platform"}},"modulesIndex":{"hero":{"eyebrow":"Modules overview","title":"Choose the tools to operate your devices.","lead":"Find the capability you need: remote access, logs, alerts, recurring tasks or customer views. Each page explains the job it does and how to start; pricing shows what your plan includes."}
5,"workflows":{"0":{"title":"Detect and route network incidents early","copy":"Network incidents can be detected early and routed to the right incident response team with fleet context attached."},"1":{"title":"Alert ops, then launch a corrective fleet job","copy":"Endpoint monitors can alert operations, who can ask AI to launch a corrective fleet job across affected devices."},"2":{"title":"Keep the whole runbook connected","copy":"Alerts, logs, remote actions, incidents, and customer-facing updates stay natively connected in one operational runbook."}},"core":{"title":"What do you need to do?","subtitle":"Browse by category, then open a tool for its capabilities and requirements."},"cards":{"devices":{"label":"Lifecycle","title":"Devices","copy":"Identity, ownership, warranty, status, and deployment context for every unit."},"logs":{"label":"Operations","title":"Log search","copy":"Searchable device and backend logs tied to device records and incidents."},"terminal":{"label":"Remote support","title":"Terminal","copy":"Secure remote shell access when support needs to diagnose or repair a device."},"wormhole":{"label":"Remote support","title":"Wormhole","copy":"Fixed URLs for device-hosted admin tools, dashboards, and APIs."},"alerts":{"label":"Availability","title":"Alert rules","copy":"Heartbeat, threshold, and fleet-level alerts for availability and health."},"firmware":{"label":"Lifecycle","title":"Device metadata","copy":"Firmware, hardware profile, tags, cohorts, and lifecycle context."},"statusPages":{"label":"Customer trust","title":"Status pages","copy":"Customer-facing availability pages driven by monitors and incidents."},"dashboards":{"label":"Analytics","title":"Dashboards","copy":"Read-only fleet, service, and customer dashboards from live data."},"docs":{"label":"Customer trust","title":"Documentation","copy":"Published docs and runbooks that sit beside operational workflows."},"securityActivity":{"label":"Security","title":"Security activity","copy":"Audit trails, access evidence, and detections for fleet support."},"scheduledTasks":{"label":"Automation","title":"Scheduled tasks","copy":"Recurring maintenance, reporting, and support jobs across cohorts."}}},"platformOverview":{"hero":{"eyebrow":"Platform overview","tagline":"Connected-product operating layer for Linux hardware companies.","title":"Remote management for every Linux device through one shared record.","lead":"Dataplicity connects fleet inventory, provisioning, device monitoring, logs, alerts, secure remote access, service history, and customer visibility in one connected-product operations platform.","highlights":["Track lifecycle, ownership, warranty, class, and last check-in on each device record.","Investigate device metrics, syslog, alerts, and operational events in context.","Open a secure browser terminal without a VPN, static IP, or inbound firewall rule.","Publish scoped status pages and dashboards from the operational data your team already uses."],"ctaSecondary":"See playbooks"},"sections":{"identity":{"title":"Fleet identity","subtitle":"Keep every device record tied to tags and status history."},"ops":{"title":"Operations and log search","subtitle":"Logs and device context land in one workflow for troubleshooting.","window":{"title":"Log search","subtitle":"logs + device context","rows":["kernel: eth0 link down on atlas-lab-001","systemd[1]: restarted docker.service","app[2481]: retrying connection to mqtt broker","device=beacon-retail-042 status=offline"]}},"automation":{"title":"Automation and tooling","subtitle":"Remote access and automation live next to the fleet data they operate on.","window":{"title":"Automation","subtitle":"terminal + tasks","terminal":["$ sudo systemctl restart edge-agent","â active (running)"],"tasks":["Nightly log archive","Weekly health report","push config to pilot group"]}},"customerSurfaces":{"title":"Customer surfaces and reporting","subtitle":"Publish read-only views for customers without exporting data to other systems.","window":{"title":"Customer portal","subtitle":"status + dashboards","status":["Customer portal","Telemetry ingest","Alert routing"],"footer":"Latest incident - routed alerts to backup NOC"}},"whitelabel":{"title":"Whitelabel sites for your customers","subtitle":"Give customers a branded portal with scoped access, dashboards, and status views."},"security":{"title":"Security and governance","subtitle":"Security activity, SSO, and access controls ship as first-class modules.","window":{"title":"Security activity","subtitle":"auth + audit","rows":["login - jane{'@'}acme.com","token used from new ASN","role change - support -> admin"]}}},"cta":{"title":"Test the IoT operations workflow on a real device.","body":"Enter your email, copy the agent install c
5ommand, and validate inventory, check-in status, logs, and secure remote access from one device record."},"workedExample":{"eyebrow":"Worked example","title":"Picture an OEM running on Dataplicity.","body":"SiloSentry is a fictional grain silo level monitor OEM used as a screenshot walkthrough of post-shipment ops - devices, ops wall, incidents, and fleet fixes on the same records. Illustrative, not a real customer product.","cta":"Open the SiloSentry walkthrough"},"tryDeviceCheck":{"eyebrow":"Try without signup","title":"Diagnose a difficult device in twenty minutes.","body":"Device Check streams health, network path, clock skew, and process evidence into a shareable report. No account and no permanent agent install â a low-friction first look at how Dataplicity turns a failing device into evidence.","cta":"Open Device Check"},"cards":{"fleet":[{"label":"Inventory","title":"Devices view","copy":"Live registry with tags, owner metadata, health status, and last check-in."},{"label":"Topology","title":"Customer accounts","copy":"Bind devices to customer accounts and entitlements without spreadsheets."},{"label":"Cohorts","title":"Groups and tags","copy":"Saved cohorts for lab, pilot, and field support workflows."},{"label":"Provisioning","title":"Device classes","copy":"Per-SKU provisioning defaults and configuration."},{"label":"Context","title":"Device metadata","copy":"Capture tags, ownership, and hardware profile details by device class."},{"label":"Customer ownership","title":"Customers, licenses, warranty","copy":"Bind hardware to customers and entitlements; warranty windows start on first check-in."}],"ops":[{"label":"Telemetry","title":"Ops dashboard","copy":"CPU, memory, disk, and service metrics per device and fleet."},{"label":"Logs","title":"Syslog search","copy":"Live tail and search across device and backend logs."},{"label":"Events","title":"Event history","copy":"Timeline of deploys, restarts, alerts, and operator changes."},{"label":"Alerts","title":"Alert rules","copy":"Threshold, heartbeat, and expression rules with routing."},{"label":"Monitors","title":"User impact, service, heartbeat","copy":"Fleet-level monitors for availability and SLA tracking."},{"label":"Incidents","title":"Incident response","copy":"On-call escalations, incident notes, and resolution tracking."}],"tooling":[{"label":"Remote access","title":"Terminal and scripts","copy":"Secure shell access plus saved scripts without VPN tunnels."},{"label":"Automation","title":"Scheduled tasks","copy":"Recurring jobs for maintenance and reporting."}],"customer":[{"label":"Status","title":"Status pages","copy":"Read-only status pages driven by monitors and incidents."},{"label":"Dashboards","title":"Dashboard designer","copy":"Build customer-facing dashboards with scoped metrics."},{"label":"Displays","title":"Displays","copy":"Read-only dashboards for NOC or customer kiosks."},{"label":"Data","title":"Data sources","copy":"Connect device and service data to dashboards."}],"whitelabel":[{"label":"Branding","title":"Custom domains","copy":"Publish customer portals on your branded domain."},{"label":"Access","title":"Customer roles","copy":"Scope access by customer role, site, or cohort."},{"label":"Portals","title":"Customer sites","copy":"Organize fleets by customer site inside the whitelabel portal."}],"security":[{"label":"Audit","title":"Security activity","copy":"Audit timeline for auth events and admin actions."},{"label":"Detections","title":"Security detections","copy":"Detection rules surface suspicious access patterns."},{"label":"SSO","title":"SAML and SCIM","copy":"Centralized authentication and user provisioning."},{"label":"Access","title":"Users, groups, domain claims","copy":"Role-based access with verified domains and group scopes."},{"label":"MFA","title":"MFA enforcement","copy":"Require MFA for org access alongside SSO."}]}},"solutionsIndex":{"hero":{"eyebrow":"Dataplicity playbooks","title":"Work through a fault before it becomes a site visit.","lead":"Worked scenarios for investigating device drift, rollout faults and support requests. Follow the available evidence to a decision, then check the result on your own fleet.","primaryCta":"Choose an investigation","secondaryCta":"See how it fits with your stack"},"differentiators":{"title":"Two ways to narrow an investigation.","subtitle":"A device capture shows what happened during a specific window. A comparison with similar devices helps reveal unexpected differences.","deviceCheck":{"eyebrow":"Device Check · in the app","title":"Capture diagnostics from one device.","copy":"From a device record, run about fifteen to twenty minutes of health, network path, clock skew, and process evidence - then analyse that window.","cta":"See remote diagnostics","note":"In-app Device Check is attached to a device. Separate from free public Device Check (no account).","noteLink":"Open public Device Check","visualAria":"Illustration of an in-app Device Check capture window collecting diagnostics for analysis","visualTitle":"Device Check","visualSubtitle":"Device · atlas-lab-001","visualStatus":"Capture in progress","visualWindow":"~20 min window","visualProgress":"Analysing this capture - not a continuous feed","visualFinding":"Clock skew +187s · TLS failing after TCP"},"pulse":{"eyebrow":"Device Class Pulse","title":"Compare a device with its peers.","copy":"Pulse compares devices in the same Device Class, a group for a product type. It flags differences to investigate. Evaluation needs comparable devices on a paid plan and time for evidence to accumulate.","cta":"See how to evaluate Pulse","visualAria":"Illustration of Pulse learning class normal from peer devices and flagging one that drifted","visualTitle":"Pulse","visualSubtitle":"Device class · Probe gateway","classNormal":"Class normal","findingTitle":"South-14 stopped looking like its peers","findingDetail":"Root disk 91% · packages diverged · no gold baseline required"}},"examples":{"title":"Start with the problem in front of you.","cta":"Open playbook","cards":[{"label":"Connectivity","title":"Network outages across a fleet","copy":"Check whether affected devices share a carrier or site, then gather evidence for the next connectivity check."},{"label":"Product quality","title":"A firmware cohort logging the same error","copy":"Correlate repeated syslog signatures with firmware version, device class, and rollout group."},{"label":"Customer trust","title":"Support, status, and warranty share the facts","copy":"Turn device evidence into incident response, customer-facing status, and warranty context."}]},"advantages":{"title":"Why these need one platform","subtitle":"Generic monitoring understands servers. Dataplicity understands shipped devices.","cards":[{"label":"Device Check","copy":"Bounded in-app capture when a unit fails - not a permanent diagnostic firehose from the whole fleet."},{"label":"Pulse","copy":"Peer comparison inside a device class over time - no gold build required to know what normal looks like."},{"label":"One device record","copy":"Customer, site, firmware, warranty, logs, and sessions hang off the same record."},{"label":"Closed loop","copy":"Terminal, Wormhole, incidents, and customer notices sit beside the evidence."}]},"library":{"title":"Guides and walkthroughs","cards":[{"title":"Bring the first fleet online","copy":"Install the agent, register devices, prove the loop."},{"title":"Alerts, monitors, and terminals in one workflow","copy":"Phone alerts, fleet conditions, and live shells on one record."},{"title":"Run incidents from device evidence","copy":"Logs, alerts, remote access, and service history during support."},{"title":"Check the operating requirements","copy":"What Dataplicity replaces, and what it complements."}]},"cta":{"title":"Try a playbook right now.","body":"Add your work email and we hand you the install c
5ommand for the first device.","primaryCta":"Get your install command"}},"wormhole":{"hero":{"eyebrow":"Wormhole · Secure web access","title":"Reach device-hosted web tools without opening inbound ports.","lead":"Dataplicity Wormhole gives a Linux edge device a secure URL for its local admin page, dashboard, or API through an outbound connectionâwithout a VPN, static IP, port forwarding, or inbound firewall rule.","primaryCta":"Why Dataplicity over DIY","secondaryCta":"Talk to us","window":{"title":"Wormhole URL","subtitle":"atlas-lab-001","urlLabel":"Fixed URL","url":"https://ping.dataplicity.io/","items":["Admin UI · /settings","EmonPi + Adopisoft · /dashboards","Secure API · /v1/control"]}},"shipping":{"title":"Remote access for more than shells","subtitle":"Publish the device interfaces your support team, installers, and customers already need, while keeping access governed by Dataplicity.","cards":[{"label":"Wormhole","title":"Fixed device URLs","copy":"Expose a device-hosted UI behind a stable URL that follows the device record."},{"label":"Access","title":"Policy-scoped sharing","copy":"Grant scoped access without handing out SSH keys, VPN credentials, or network exceptions."},{"label":"Ports","title":"Port forwarding","copy":"Forward web, MQTT, diagnostics, or custom ports through the same outbound connection."},{"label":"Audit","title":"Session history","copy":"Every open, share, and close event stays attached to the device for support and security review."}]},"useCases":{"title":"What teams publish through Wormhole","subtitle":"Reach the local tools that matter during installation, support, diagnostics, and customer handover.","cards":[{"label":"Admin UI","title":"Reach device admin pages","copy":"Let support or installers configure a device-local control panel without joining the customer's network."},{"label":"Dashboards","title":"EmonCMS and Adopisoft dashboards","copy":"Share device-local monitoring UIs during commissioning, support, or warranty investigations."},{"label":"API","title":"Secure device APIs for control systems","copy":"Give trusted systems a stable URL for device diagnostics, integration tests, or controlled actions."},{"label":"Apps","title":"Popular tools","copy":"Use the same approach for Home Assistant, WordPress, ESP-IDF tooling, or your own embedded web app."}]},"workflow":{"title":"From device record to governed web access","
5subtitle":"Choose the device and local service, create a scoped Wormhole URL, share it with an approved user or system, then close access with session history preserved.","cards":[{"label":"01 · Open","title":"Create a wormhole session","copy":"Generate a scoped URL from the device record without changing the customer network."},{"label":"02 · Share","title":"Hand off the fixed URL","copy":"Send the link to support, installation teams, or approved systems with the right access policy."},{"label":"03 · Close","title":"Close and audit","copy":"Terminate access when the work is done and keep the session evidence beside logs and support notes."}]},"cta":{"title":"Ready to publish a device URL?","body":"Install the agent and open your first wormhole in minutes.","secondary":"See other playbooks"}},"remoteOps":{"hero":{"eyebrow":"Secure remote access for Linux IoT","title":"Diagnose and repair edge devices without a VPN.","typewriter":{"prefix":"Control your ","suffix":"from anywhere.","words":["Raspberry Pi","Orange Pi","Banana Pi","Rock Pi","BeagleBone","Jetson Nano"]},"lead":"Install the Dataplicity agent on an internet-connected Linux device to open a secure browser shell, stream logs, and reach device-hosted web tools without inbound SSH, port forwarding, or a static IP.","primaryCta":"Why Dataplicity over DIY","secondaryCta":"Talk to us","window":{"title":"Device terminal","subtitle":"atlas-lab-001","events":["dataplicity{'@'}atlas-lab-001:~$ systemctl restart docker","[12:04:33] docker.service restarted"]}},"shipping":{"title":"Remote support without the network theatre","subtitle":"Terminal, logs, Wormhole, device context, and the access record stay linked so support can act without VPNs, static IPs, or site visits.","cards":[{"label":"Terminal","title":"Remote shell","copy":"Open a secure shell from the device record over the outbound Dataplicity connection."},{"label":"Logs","title":"Log search","copy":"Tail syslog and service logs before, during, and after the repair."},{"label":"Context","title":"Device record","copy":"See customer, warranty, firmware, tags, health, and recent alerts beside the access workflow."},{"label":"Audit","title":"Access record","copy":"Session opens, device actions and file transfers stay reviewable for security, warranty and customer follow-up. Session contents and keystrokes are not recorded."}]},"workflow":{"title":"From device alert to verified repair","subtitle":"A repeatable remote-support workflow for Linux devices in customer networks.","example":"Example: a heartbeat alert fires. Check the device's last check-in and firmware, search syslog, open a secure terminal, restart the service, and preserve the action in its history.","cards":[{"label":"01 · Connect","title":"Open a remote terminal","copy":"Launch a secure shell directly from the affected device record."},{"label":"02 · Diagnose","title":"Read logs in context","copy":"Use syslog, alerts, firmware, and customer context to pinpoint the issue."},{"label":"03 · Repair","title":"Run the fix and record it","copy":"Restart services, inspect configuration, collect diagnostics, and leave traceable evidence."}]},"screens":{"title":"Everything stays attached to the device","subtitle":"Remote access works best when support evidence, customer context, and audit history are not scattered across tools.","cards":[{"label":"Device","title":"Device record","copy":"All metadata, ownership, warranty, firmware, and health in one view."},{"label":"Terminal","title":"Remote terminal","copy":"Run commands without VPNs, inbound SSH, static IPs, or firewall exceptions."},{"label":"Logs","title":"Log search","copy":"Searchable syslog with live tailing, filters, and fleet context."},{"label":"Audit","title":"Access record","copy":"See who opened access to the device, which actions they invoked, and when. Session contents and keystrokes are not recorded."}]},"cta":{"title":"Ready to open a remote terminal?","body":"Install the agent and connect your first device in minutes.","secondary":"See other playbooks"}},"fleetVisibility":{"hero":{"eyebrow":"Linux IoT fleet visibility","title":"Find, monitor, and act on the right device.","lead":"Search your IoT device inventory by customer, site, status, tag, or cohort; check last contact and health; then move directly into logs, maintenance, or remote support.","primaryCta":"Compare Dataplicity to DIY","secondaryCta":"Talk to us","window":{"title":"Fleet filters","subtitle":"Devices - Networks - Tags","filters":[{"label":"Filter:","value":"owner:retail + status:offline"},{"label":"Groups:","value":"lab - pilot - field"},{"label":"Export:","value":"CSV - API"}]}},"shipping":{"title":"The fleet data behind each decision","subtitle":"Inventory, customer networks, cohorts, and device classes keep Linux edge operations consistent from provisioning through support.","cards":[{"label":"Inventory","title":"Devices view","copy":"Searchable list of every unit with tags, owner metadata, last check-in, and connectivity."},{"label":"Customer context","title":"Networks & sites","copy":"Group hardware by customer, geography, or topology without leaving Dataplicity."},{"label":"Cohorts","title":"Groups & tags","copy":"Build \\"lab\\", \\"pilot\\", or \\"field\\" cohorts and save the filters for ops, support, and success teams."}
5,{"label":"Provisioning","title":"Device classes","copy":"Store hardware profiles, config templates, and provisioning settings once per SKU."}]},"workflow":{"title":"Filter â inspect â act","subtitle":"Move from a fleet question or offline alert to a device-level action without reconciling spreadsheets.","cards":[{"label":"01 · Filter","title":"Zero-in by owner or status","copy":"Use Devices + Networks to slice by customer, status, or tag."},{"label":"02 · Inspect","title":"Confirm health without SSH","copy":"See telemetry, last check-in, and provisioning data inline."},{"label":"03 · Act","title":"Assign the next move","copy":"Move the device to a maintenance group, escalation queue, or field visit queue."}]},"screens":{"title":"Screens used in this playbook","subtitle":"Inventory, networks, groups, and device classes in one flow.","cards":[{"label":"Inventory","title":"Devices view","copy":"Live inventory with bulk actions, tags, and CSV export."},{"label":"Customer context","title":"Networks view","copy":"Context on customers, locations, and connectivity without leaving the browser."},{"label":"Cohorts","title":"Groups view","copy":"Saved cohorts for labs, pilots, and field fleets with one-click selection."},{"label":"Provisioning","title":"Device classes","copy":"Metadata and configuration defaults that keep provisioning consistent."}]},"cta":{"title":"Ready to sync your inventory?","body":"Enter your email, we create the workspace + default device class, and hand you the install command for your first device.","secondary":"Back to playbooks"}},"customerTrust":{"hero":{"eyebrow":"Playbook · Customer trust","title":"Publish customer updates alongside incident response.","titleNoDocs":"Publish customer updates alongside incident response.","lead":"Turn internal incident notes into status pages, dashboards, and docs so customers see the same truth.","leadNoDocs":"Turn internal incident notes into status pages and dashboards so customers see the same truth.","primaryCta":"Show the evidence","secondaryCta":"Talk to us","window":{"title":"Branded status page","subtitle":"Status page","notice":"Maintenance in progress","items":["Customer portal","Telemetry ingest","Alert routing"]}},"shipping":{"title":"Tools used in this playbook","subtitle":"Status pages, dashboards, docs, and access controls stay aligned.","cards":[{"label":"Status","title":"Status pages","copy":"Public uptime + incident comms at your domain with historical timelines and annotations."},{"label":"Dashboards","title":"Read-only dashboards","copy":"Dashboard Designer and Displays let you expose scoped metrics to customers without sharing credentials."},{"label":"Access","title":"Access control","copy":"Organisation settings enforce SAML, MFA, SCIM, and domain claims so buyers trust the portal."}]},"workflow":{"title":"Publish â explain â prove","subtitle":"Keep external comms synced with ops decisions.","cards":[{"label":"01 · Publish","title":"Surface the change","copy":"Status page and dashboards update automatically when you tag an incident public."},{"label":"02 · Explain","title":"Give context once","copy":"Attach impact + mitigation notes once; they appear everywhere customers look."},{"label":"03 · Prove","title":"Leave evidence behind","copy":"Share docs and historical uptime so procurement teams self-serve proof.","copyNoDocs":"Share historical uptime and incident context so procurement teams self-serve proof."}]},"screens":{"title":"Screens used in this playbook","subtitle":"Status page, dashboards, and org settings in one flow.","cards":[{"label":"Status","title":"Status page","copy":"Public uptime with component health, incident posts, and subscribe options."},{"label":"Dashboards","title":"Dashboard Designer","copy":"Curate customer-facing dashboards with read-only displays for kiosks or portals."},{"label":"Governance","title":"Organisation settings","copy":"Enforce SAML, MFA, SCIM, and branded domains so the experience feels first-party."}]},"cta":{"title":"Want to publish a branded status page?","body":"Enter your email, run the install c
5ommand, and you'll have a live device feeding Dataplicity status pages in minutes.","secondary":"Back to playbooks"}},"resourcesIndex":{"hero":{"eyebrow":"Resources","title":"Connect, investigate and support your Linux devices.","lead":"Start with installation, follow an investigation or work through a support decision. These guides explain the steps and the evidence to check.","highlights":["Deployment guidance for the first device.","How alerts, monitors, and terminals stay in context.","Runbooks tied to ops timelines."]},"section":{"title":"Engineering resources","subtitle":"Short, concrete guides tied to real Dataplicity modules.","cta":"Open guide"},"cards":[{"label":"Deployment","title":"Connect your first device","copy":"Install the agent, confirm a check-in and verify the device record."},{"label":"Workflows","title":"Investigate a fleet outage","copy":"Follow a shared connectivity problem from the affected group to the next action."},{"label":"Runbooks","title":"Build a support runbook","copy":"Collect device evidence before deciding whether a site visit is needed."},{"label":"FAQ","title":"Check the requirements","copy":"Find answers about installation, access and operating the product."}]},"pricing":{"hero":{"eyebrow":"Pricing","title":"Choose a plan for your fleet.","lead":"Remote access is free on one device. Calculate the cost for your fleet, then compare the operating and customer application capabilities included in each paid plan.","highlights":["Free plan for one device","Published per-device volume tiers","Monitors and scheduled tasks included"],"titlePrefix":"Choose a plan","titleHighlight":"for your fleet."},"notes":{"estimates":"Prices exclude taxes and may change before launch."},"calculator":{"title":"Estimate your monthly IoT fleet cost","subtitle":"Choose a plan and device count. That estimate is usually enough - monitors and scheduled tasks are already bundled.","planLabel":"Plan level","planJobs":{"free":"Evaluate Dataplicity on one device.","standard":"Operate your device fleet.","pro":"Run advanced fleet operations and, when needed, serve multiple customers.","enterprise":"Manage the installed-base lifecycle and governance."},"plans":{"free":"Free","standard":"Standard","pro":"Business+","enterprise":"Enterprise"},"groups":{"core":"Devices","coreIntro":"Pick a plan and how many devices you operate. No other maths required for a normal fleet.","bundleIncluded":"Included with this plan: {items}.","bundleItemMonitors":"{count} monitors","bundleItemTasks":"{count} scheduled tasks","bundleItemStatusPages":"{count} status page(s)","extras":"Extras","extrasIntro":"Most fleets can skip this. Use it for add-ons or anything beyond the included allowance.","extrasToggleShow":"Add extras","extrasToggleHide":"Hide extras","monitoring":"Monitoring + ops","usage":"Usage inputs"},"inputs":{"devices":{"label":"Devices","labelStandard":"Devices (tiered from $3/device)","labelPro":"Advanced device management (tiered from $4/device)","help":{"free":"Free includes 1 device.","enterprise":"Enterprise has a minimum commitment of 100 devices.","standard":"Standard has a minimum commitment of 3 devices.","pro":"Business+ has a minimum commitment of 25 devices."}},"statusPages":{"label":"Status pages","labelStandard":"Status pages ($10/page)","labelPro":"Additional status pages ($10/page)","labelEnterprise":"Additional status pages ($10/page)","help":{"free":"Status pages are not available on Free.","standard":"None included. Purchase any you need at $10/page.","pro":"1 status page included. Leave at 0 unless you need more.","enterprise":"2 status pages included. Leave at 0 unless you need more."}},"dashboards":{"label":"Dashboards","labelFree":"Dashboards (included)","labelStandard":"Dashboards (included)","labelPro":"Dashboards (included)","help":{"free":"Included in your plan.","standard":"","pro":""}},"displays":{"label":"Displays","labelFree":"Displays (included)","labelStandard":"Displays (included)","labelPro":"Displays (included)","help":{"free":"Included in your plan.","standard":"","pro":""}},"monitors":{"label":"Additional monitors","labelStandard":"Additional monitors ($3.00/10)","labelPro":"Additional fast monitors ($5.00/10)","labelEnterprise":"Additional fast monitors ($5.00/10)","help":{"free":"Free includes 1 monitor (limited features).","standard":"Leave at 0 unless you need more than the 25 included.","pro":"Leave at 0 unless you need more than the 50 included.","enterprise":"Leave at 0 unless you need more than the 100 included."}}
5,"incidents":{"label":"New incidents","labelStandard":"New incidents (Business+)","labelPro":"New incidents (included)","help":{"free":"Incidents are available on Business and Enterprise.","standard":"Incidents are available on Business and Enterprise.","pro":"Incident management is included on Business."}},"oncall":{"label":"On-call responders","labelStandard":"On-call responders (Business+)","labelPro":"On-call responders ($10/responder)","help":{"free":"On-call is available on Business and Enterprise.","standard":"On-call is available on Business and Enterprise.","pro":"Add on-call responders for paging and escalation."}},"scheduledTasks":{"label":"Additional scheduled tasks","labelStandard":"Additional scheduled tasks ($5.00/10)","labelPro":"Additional scheduled tasks ($5.00/10)","labelEnterprise":"Additional scheduled tasks ($5.00/10)","help":{"free":"Free includes 1 scheduled task (limited features).","standard":"Leave at 0 unless you need more than the 25 included.","pro":"Leave at 0 unless you need more than the 50 included.","enterprise":"Leave at 0 unless you need more than the 100 included."}}
5,"logs":{"label":"Log ingest (GB per month)","labelStandard":"Log ingest (GB/mo, $1.50/GB)","labelPro":"Log ingest + analytics (GB/mo, $2.25/GB)","labelEnterprise":"Log ingest + analytics (GB/mo, $2.25/GB)","help":{"free":"Not available on Free.","standard":"Includes the first 1GB/month free.","pro":"Minimum commitment is 5GB/month with analytics included. Includes the first 1GB/month free.","enterprise":"Minimum commitment is 10GB/month with analytics included. Includes the first 1GB/month free."}},"videoTransfer":{"label":"Video transfer (GB per month)","labelStandard":"Video transfer (5 GB included, then $0.20/GB)","labelPro":"Video transfer (5 GB included, then $0.20/GB)","labelEnterprise":"Video transfer (5 GB included, then $0.20/GB)","help":{"free":"Free includes a small trial cap only. Camera fleets need a paid plan.","standard":"Includes the first 5GB/month. Then $0.20/GB (~2à AWS transfer).","pro":"Includes the first 5GB/month. Then $0.20/GB (~2à AWS transfer).","enterprise":"Includes the first 5GB/month. Then $0.20/GB (~2à AWS transfer)."}},"videoStorage":{"label":"Video storage (GB-month)","labelStandard":"Video storage (5 GB included, then $0.05/GB)","labelPro":"Video storage (5 GB included, then $0.05/GB)","labelEnterprise":"Video storage (5 GB included, then $0.05/GB)","help":{"free":"Free includes a small trial cap only.","standard":"Includes the first 5GB-month. Then $0.05/GB-month (~2à AWS S3).","pro":"Includes the first 5GB-month. Then $0.05/GB-month (~2à AWS S3).","enterprise":"Includes the first 5GB-month. Then $0.05/GB-month (~2à AWS S3)."}},"videoTranscode":{"label":"Video transcode (minutes per month)","labelStandard":"Video transcode (min/mo, $0.05/min)","labelPro":"Video transcode (min/mo, $0.05/min)","labelEnterprise":"Video transcode (min/mo, $0.05/min)","help":{"free":"Free includes a small trial cap only.","standard":"Managed HLS packaging and scrub thumbs. About 2à AWS MediaConvert.","pro":"Managed HLS packaging and scrub thumbs. About 2à AWS MediaConvert.","enterprise":"Managed HLS packaging and scrub thumbs. About 2à AWS MediaConvert."}},"aiCredits":{"label":"AI credits","labelStandard":"AI credits ($30/mo minimum, 3M included)","labelPro":"AI credits ($30/mo minimum, 3M included)","labelEnterprise":"AI credits ($30/mo minimum, 3M included)","help":{"free":"Not available on Free.","standard":"Includes the terminal assistant. Credits abstract underlying token usage; additional credits are available in 1M increments.","pro":"Includes the terminal assistant and Pingüino fleet assistant. Credits abstract underlying token usage; additional credits are available in 1M increments.","enterprise":"Includes terminal and fleet AI with custom governance options. Credits abstract underlying token usage; additional credits are available in 1M increments."}},"sentinel":{"label":"Sentinel export","labelEnterprise":"Sentinel export (included)","help":{"free":"Not available on Free.","standard":"Enterprise only.","pro":"Enterprise only.","enterprise":"Included on Enterprise."},"onLabel":"On","offLabel":"Off"}},"summary":{"title":"Estimated monthly total","devicesLabel":"Devices","monitorsLabel":"Monitors","incidentsLabel":"Incidents","oncallLabel":"On-call responders","scheduledTasksLabel":"Scheduled tasks","logsLabel":"Log ingest","videoTransferLabel":"Video transfer","videoStorageLabel":"Video storage","videoTranscodeLabel":"Video transcode","aiCreditsLabel":"AI credits","sentinelLabel":"Sentinel export","statusPagesLabel":"Status pages","deviceTierLabel":"{start}â{end} devices","deviceTierLabelOpen":"{start}+ devices","deviceTierCalc":"{count} à {rate}","included":"Included","notAvailable":"Not available","talkToUs":"Talk to us","talkToUsNote":"At this scale, we will tailor pricing for you. Speak with us for a custom quote.","perMonth":"/ month","taxNote":"Pricing is in USD and exclusive of any applicable taxes."},"notes":{"freeDevices":"Free includes 1 device. Choose Standard or Business+ for more.","freeLogs":"Logging is not available on Free. Choose Standard, Business+, or Enterprise for log ingest.","freeVideo":"Camera video is limited on Free. Choose a paid plan for production streams.","freeAiCredits":"AI credits are not available on Free. Choose Standard, Business+, or Enterprise for AI credits.","freeSentinel":"Sentinel export is available as a $200/month add-on on Enterprise."},"note":"This is an estimate based on the calculator inputs and published rates. Your bill may go up or down as those inputs change and is subject to billing."},"featureComparison":{"title":"Feature comparison","subtitle":"Compare what's included once you know
5which job you are buying for.","columns":{"feature":"Feature","free":"Free","standard":"Standard","pro":"Business+","enterprise":"Enterprise"},"jobs":{"free":"Evaluate on one device","standard":"Remote access and everyday device operations","pro":"Advanced fleet operations and customer applications","enterprise":"Installed-base lifecycle"},"groups":{"core":"Core platform","connectedProduct":"Connected product capabilities","surfaces":"Customer surfaces","monitoring":"Monitoring","ops":"Operations","logs":"Logs","video":"Video","security":"Security"},"buyerCases":{"title":"Answer these without speaking to sales","lead":"Choose the operating capabilities you need. Both paid plans work independently of a Customer Portal; customer applications are available when you need them.","items":[{"title":"Operate your devices on Standard","copy":"Evaluate remote access on one device, then use Standard for Device Classes, remote access, diagnostics, logs and Pulse. No Customer Portal required."},{"title":"Run advanced fleet operations on Business+","copy":"Add fleet jobs, log analytics, saved investigations, incidents and on-call escalation. These capabilities work for your team whether or not you use customer applications."},{"title":"Give customers their own application","copy":"Standard includes one Customer Portal and one downstream customer organisation with portal branding. Business+ supports multiple portals and organisations, subject to published platform limits."}]},"rows":{"remoteTerminal":{"label":"Remote terminal","free":"Limited to 1 device","standard":"","pro":""},"wormholeAccess":{"label":"Wormhole access","free":"Limited to 1 device","standard":"","pro":""},"portForwardingStandard":{"label":"Port forwarding (standard ports)","free":"Limited to 1 device","standard":"","pro":""},"portForwardingCustom":{"label":"Port forwarding (custom ports)","pro":""},"remoteDiagnostics":{"label":"Remote diagnostics","standard":"","pro":""},"deviceLifecycle":{"label":"Device lifecycle","enterprise":"Included"},"deviceHistory":{"label":"Device history","pro":"Included"},"deviceAdvancedHistory":{"label":"Device advanced history","note":"Automatically populates history from lifecycle events.","enterprise":"Included"},"deviceClasses":{"label":"Device Classes","standard":"Included","pro":"Included"},"productUiDesigner":{"label":"Product UI Designer and Controls","standard":"Included","pro":"Included"},"whitelabel":{"label":"Customer Portal","free":"Not included","standard":"1 portal","pro":"Unlimited*"},"downstreamCustomers":{"label":"Downstream customer organisations","free":"Not included","standard":"1 organisation","pro":"Unlimited*"},"networksPlacement":{"label":"Networks and device placement","standard":"Included","pro":"Included"},"productApplications":{"label":"Product Applications","note":"Versioned customer workflow apps. Capability may still be gated while the suite ships.","standard":"Included when enabled","pro":"Included when enabled"},"productInstances":{"label":"Product Instances","standard":"Per customer","pro":"Per customer"},"nativeKits":{"label":"Native application kits","standard":"Included when enabled","pro":"Included when enabled"},"offlineDatasets":{"label":"Offline datasets","standard":"Included when enabled","pro":"Included when enabled"},"oemAuthoringApis":{"label":"OEM authoring APIs","standard":"Included","pro":"Included"},"dashboards":{"label":"Dashboards","free":"Limited to 1","standard":"","pro":""},"displays":{"label":"Displays","free":"Limited to 1","standard":"","pro":""},"statusPages":{"label":"Status pages","note":"Publish incident updates to selected pages from the incident workflow.","free":"Not included","standard":"Purchasable","pro":"1 included","enterprise":"2 included"},"fileRequests":{"label":"File requests","note":"Public upload links for customers and field techs to send logs, dumps, and configs.","pro":"5 GB included"},"users":{"label":"Users","note":"Free is single-account only.","free":"Limited to 1","standard":"","pro":""},"customBranding":{"label":"Custom branding and domains","note":"Portal branding on Standard. Custom domains on Business+ when shipped.","standard":"Portal branding","pro":"Branding + custom domains"},"customDomains":{"label":"Custom domains","pro":""},"polling5":{"label":"5âminute polling","free":"","standard":""},"polling1":{"label":"1âminute polling","pro":""},"connectionStability":{"label":"Connection stability monitoring","pro":""},"wormhole":{"label":"Custom wormhole URLs","pro":""},"alerts":{"label":"Alerts","pro":"Included"},"alertRules":{"label":"Alert rules","note":"Compose monitors into rules that raise incidents when every condition matches.","pro":"Included"},"monitors":{"label":"Monitors","note":"Includes fleet checks plus single-device canary monitors for critical boxes.","free":"Limited to 1","standard":"25 included","pro":"50 included","enterprise":"100 included"},"fleetMap":{"label":"Fleet map","note":"Last-known device geography with tag filters and a dashboard widget.","pro":"Included"},"fleetJobs":{"label":"Fleet jobs","note":"Run or schedule guarded commands across tagged fleets with per-device results.","pro":"Included"},"incidents":{"label":"Incidents","pro":"Included"},"oncall":{"label":"Onâcall escalations","pro":"Included"},"scheduledTasks":{"label":"Scheduled tasks","free":"Limited to 1","standard":"25 included","pro":"50 included","enterprise":"100 included"},"retention24":{"label":"24âhour retention","free":""},"retention7":{"label":"7âday retention","standard":"","pro":""},"retention90":{"label":"90âday retention","pro":""},"logAnalytics":{"label":"Log analytics","pro":"Included","enterprise":"Included"},"logInvestigations":{"label":"Saved log investigations","note":"Save and rerun recurring fleet log checks.","pro":"Included"},"logArchive":{"label":"Archive option","pro":"","enterprise":"Included"},"logIngest":{"label":"Usageâbased log ingest","standard":"","pro":"Includes analytics"},"videoTransfer":{"label":"Video transfer","note":"Live and recorded camera upload/playback. Priced at about 2Ã AWS data transfer.","free":"Trial cap only","standard":"5 GB included, then $0.20/GB","pro":"5 GB included, then $0.20/GB"},"videoStorage":{"label":"Video storage","note":"Retained camera footage. Priced at about 2Ã AWS S3 storage.","free":"Trial cap only","standard":"5 GB included, then $0.05/GB-month","pro":"5 GB included, then $0.05/GB-month"},"videoTranscode":{"label":"Video transcode","note":"Managed HLS packaging and scrub thumbs. Priced at about 2Ã AWS MediaConvert.","free":"Trial cap only","standard":"$0.05/min","pro":"$0.05/min"},"sentinel":{"label":"Sentinel export","note":"Built for SOC teams that need SIEM pipelines at scale.","standard":"","pro":"","enterprise":"Included"},"craAssuranceWorkspace":{"label":"CRA Assurance Workspace","note":"Internal preview; enterprise positioning.","enterprise":"Included"},"sso":{"label":"SAML/SSO","note":"SAML SSO is standard, not a premium add-on.","free":"","standard":"","pro":""},"scimProvisioning":{"label":"SCIM provisioning","note":"Orphaned accounts are a security risk. SCIM keeps access in sync.","free":"","standard":"","pro":""},"securityAuditTrail":{"label":"Security activity","note":"Sign-ins, access changes, remote sessions, and fleet events in one audit view.","enterprise":"Included"},"securityDetections":{"label":"Security detections","note":"Because security isn't optional.","free":"","standard":"","pro":""}},"note":"","includedLabel":"Included","notIncludedLabel":"Not included"},"footnote":{"title":"Need Enterprise or a custom quote?","link":"Drop us a message","body":"for installed-base lifecycle, governance, or tailored fleet pricing. Tell us your fleet size, support expectations, and deployment model."}},"comparison":{"hero":{"eyebrow":"OEM CONTROL PLANE","title":"Dataplicity unknots the OEM stack.","lead":"Every device company we talk to ends up wiring VPNs, Grafana, spreadsheets, and status pages into a Gordian knot. Dataplicity is the integrated
5workflow built from that experience: inventory, remote access, logs, security, support, and customer trust in one system.","highlights":["Device inventory, logs, telemetry, and remote ops live together","Tenancy, SSO, warranties, and customer surfaces are built in","Dataplicity ingests your runtimes so the business layer stops fragmenting"],"primaryCta":"Start with your email","secondaryCta":"Browse playbooks","aside":{"title":"Built for OEM reality","copy":"Dataplicity pulls together the jobs your team already does: tagging devices from the factory line, watching security events, opening remote access, publishing dashboards, and giving customers status without handing them cloud keys."}},"knot":{"title":"Why the OEM stack turns into a knot","subtitle":"Small device teams glue tools together to keep up. The result: five consoles, brittle scripts, and no shared source of truth.","cards":[{"label":"Factory -> field","title":"Inventory stitched across spreadsheets","copy":"Devices ship before the software stack exists, so ownership and warranty data spread across ERP exports and shared sheets.","list":["ERP exports","Airtable / Sheets","Custom scripts"]},{"label":"Operate & fix","title":"VPNs + portals for every team","copy":"Support needs wormholes, engineering needs telemetry, security needs audit - but each tool solves only one slice.","list":["WireGuard / OpenVPN","Grafana & Loki","balena / Greengrass consoles","TeamViewer / VNC"]},{"label":"Customer comms","title":"Manual status + docs","copy":"Status pages and dashboards live outside the device stack, so updates require copy/pasting data and hoping it stays in sync.","list":["Statuspage","Pingdom","Geckoboard","Static sites"]},{"label":"Revenue & governance","title":"Policy bolted on later","copy":"SSO, domain claims, warranties, and billing happen in separate systems, so nothing shares the same device identity.","list":["Custom IAM glue","Zendesk / service tools","Billing spreadsheets"]}]},"workflow":{"title":"Dataplicity brings the workflow together","subtitle":"Inventory, remote ops, customer comms, and OEM security live in one control plane instead of scattered scripts.","cards":[{"label":"01 · Ship smarter","title":"Inventory + provisioning in one pass","copy":"Dataplicity tracks every unit from factory through customer activation with default device classes and provisioning keys.","list":["Device classes + hash IDs generated automatically","Drop-ship onboarding emails and install scripts","Warranty windows start the second a device checks in"]},{"label":"02 · Operate & secure","title":"Telemetry, logs, and remote ops","copy":"Engineers see fleet health, open wormholes, search logs, and record incidents without juggling consoles.","list":["Ops dashboard with alerts + metrics","Log streaming with device context","Wormholes + log streaming with full audit"]},{"label":"03 · Commercial layer","title":"Customer surfaces + policy enforcement","copy":"Dataplicity publishes dashboards, status pages, documentation, and SSO-protected portals using the same dataset OEM teams trust.","list":["Status pages fed by real heartbeats","Read-only dashboards + full-screen displays","SAML/MFA + domain claims front to back"]}]},"integrations":{"title":"One platform in the middle of the workflow","subtitle":"Often there is no fleet-aware alert at all until customers complain. If you bolt Pingdom, PagerDuty, Tailscale, incident.io, and Statuspage together, you still paste context between logins. Dataplicity designs that start-to-finish loop on one device record.","cards":[{"title":"Fleet conditions as first-class alerts","copy":"Among devices running right now, have all the Starlink ones dropped together? One site flaking is noise. A whole connectivity cohort dropping at once is a different - and usually more important - fault.","list":["Alert on live fleet cohorts, not single-host checks","Phone alerts open into the same control plane","Catch provider, account, or network faults before customers escalate"]},{"title":"Terminals that keep evidence on screen","copy":"Remote shells sit beside endpoint monitors and connectivity context - the response stays in the moment of the outage.","list":["Endpoint monitors next to the live session","Same device record as the alert that fired","No serial-number paste between pager and VPN"]},{"title":"Incident and status without leaving the loop","copy":"When it is a big one, the war room and customer update stay on the same record as the monitor and the shell.","list":["Incident timeline attached to the devices","Customer status fed by the same heartbeats","Still escalate to specialist tools when a human must drive"]}]},"comparisons":{"title":"Detailed comparisons","subtitle":"Technical breakdowns for c
5ommon OEM stacks.","cta":"View comparison"},"cards":[{"label":"Runtime","title":"Dataplicity vs Greengrass","copy":"Greengrass runs workloads. Dataplicity adds inventory, ops workflows, and customer surfaces."},{"label":"Runtime","title":"Dataplicity vs balena","copy":"balena handles containers. Dataplicity adds fleet identity, incidents, and customer comms."},{"label":"Ops stack","title":"Dataplicity vs status stack","copy":"Replace Statuspage + Grafana + VPN with one control plane."}],"fit":{"title":"Signals Dataplicity is the right layer","subtitle":"Use Dataplicity when the OEM business, not just the device team, needs leverage.","cards":[{"title":"You sell warranties or service plans","copy":"Dataplicity tracks coverage windows, renewals, and upsell signals - edge runtimes do not."},{"title":"Enterprise customers demand SSO + policy","copy":"Dataplicity ships SAML, domain claims, MFA, and role scoping without custom engineering."},{"title":"Multiple device classes share customers","copy":"One control plane spans cameras, relays, and sensors with consistent inventory, telemetry, and support UX."},{"title":"Ops teams need one audit trail","copy":"Dataplicity unifies alerts, commands, remote sessions, and support notes under hashed identifiers."}]},"cta":{"title":"Prove it alongside your current stack.","body":"Enter your email, copy the install command, and run Dataplicity next to balena, Greengrass, or TeamViewer today. You'll see the first device in the default class in minutes.","primaryCta":"Get your install command"}},"changelog":{"eyebrow":"Changelog","title":"Product updates","lead":"Recent improvements to the platform, modules, remote support, and customer-facing operations.","visual":{"badge":"Release stream","date":"Latest","items":["Device monitors","Fleet Map widget","Security Activity"]},"loading":"Loading updatesâ¦","error":"Could not load updates right now.","empty":"No updates published yet.","paginationAria":"Changelog pagination","newer":"Newer updates","older":"Older updates","page":"Page {current} of {total}"},"installSignup":{"emailPlaceholder":"Enter your email address","sending":"Sending...","linkExpires":"Link expires {date}","viewInstallCommand":"View install command","heroPitch":"Enter your email above and a line of code will appear here.","submit":"Get started","activationSent":"Check {email} for your setup link.","dialog":{"title":"Install your first device","copy":"Copy install command","commandHelp":"Step 1: Run this on the device you want to add.","empty":"Your install command will appear once the workspace finishes provisioning.","copied":"Copied","copyFailed":"Copy failed","goToDashboard":"Skip","status":{"awaitingTitle":"Step 2: Waiting for your device to register","awaitingConnection":"Run the install command on your device to register it.","provisionedTitle":"Step 3: Waiting for your device to come online","provisionedAwaiting":"Device registered. Waiting for it to come online. Devices registered: {count}.","terminalReadyTitle":"Device online","terminalReady":"Device online. Opening terminal...","terminalReadyNamed":"{device} is online. Opening terminal..."},"awaitingConnection":"We are waiting for your device to register.","provisionedAwaiting":"Your first device has been provisioned, awaiting connection.","terminalReady":"Device online. Opening terminal...","hideScript":"Hide install script","viewScript":"View install script","loadingScript":"Loading install script...","note":"We'll stay here and connect as soon as your device comes online. You can skip directly to your dashboard at any time.","terminalTitle":"Terminal"},"errors":{"invalidEmail":"Enter a valid work email to start.","domainManaged":"This email domain is managed by an existing organisation.","passwordSetupBlocked":"Check your email to finish setup.","unexpectedResponse":"Unexpected response. Please try again.","unavailable":"Unable to start onboarding right now.","passwordSetupEmail":"Unable to send password setup email.","copyCommand":"Unable to copy command.","scriptUnavailable":"Install script is not available yet.","loadScript":"Unable to load install script."}
5,"notifications":{"copied":"Install command copied to clipboard."}},"moduleSignup":{"default":{"title":"Start your Dataplicity workspace.","copy":"Enter your work email to create a workspace and jump into this module.","submit":"Get started","heroCta":"Get started","nameLabel":"Name","namePlaceholder":"Workspace name"},"statusPages":{"title":"Create your status page.","copy":"Claim a customer-facing URL, then add the monitors, incidents, and guidance customers should see.","submit":"Create status page","heroCta":"Create status page","nameLabel":"Status page URL","namePlaceholder":"acme-status","urlHelper":"Your page will be at {url}"},"logs":{"title":"Create your log collectors.","copy":"Set up syslog and HTTPS collectors so you can start sending logs right away.","submit":"Create log collectors","heroCta":"Create log collectors","emailLabel":"Email","emailPlaceholder":"you{'@'}company.com","emailHelper":"Enter your email to provision your collectors.","previewSyslogTitle":"Syslog collector","previewSyslogCopy":"Send RFC5424 syslog over TCP/TLS from servers, gateways, or forwarders.","previewHttpsTitle":"HTTPS collector","previewHttpsCopy":"Post JSON logs over HTTPS from apps and services."},"alerts":{"title":"Create alert rules.","copy":"Create alert rules and start getting notified.","submit":"Open alert rules","heroCta":"Open alert rules"},"firmware":{"title":"Review device context.","copy":"Open the device inventory and inspect live status.","submit":"Open devices","heroCta":"Open devices"},"securityActivity":{"title":"Review security activity.","copy":"See security activity across your workspace.","submit":"Open security activity","heroCta":"Open security activity"},"scheduledTasks":{"title":"Create scheduled tasks.","copy":"Schedule your first task.","submit":"Open scheduled tasks","heroCta":"Open scheduled tasks"},"projectBoards":{"title":"Open Project Boards.","copy":"Create a board and link fleet records to the work.","submit":"Open Project Boards","heroCta":"Open Project Boards"},"dashboards":{"title":"Design a dashboard.","copy":"Create your workspace and design your first dashboard.","submit":"Open dashboards","heroCta":"Open dashboards","seedName":"Operations dashboard","previewDataplicityTitle":"Dataplicity data","previewDataplicityCopy":"Endpoint monitors and device status at a glance.","previewAwsTitle":"AWS sources","previewAwsCopy":"CloudWatch metrics and AWS status signals.","previewLinearTitle":"Linear sources","previewLinearCopy":"Issues, SLAs, and incident updates.","previewTvTitle":"TV mode","previewTvCopy":"Display on a wallboard or operations TV."},"terminal":{"title":"Open a remote terminal.","copy":"Get a terminal on your device.","submit":"Get terminal command","heroCta":"Get terminal command"},"devices":{"title":"Register your first device.","copy":"Register your first device and bring it online.","submit":"Get device install command","heroCta":"Get device install command"},"wormhole":{"title":"Create a wormhole link.","copy":"Create a wormhole link to reach a device.","submit":"Get wormhole command","heroCta":"Get wormhole command","secondaryLabel":"View solutions","dialogTitle":"Install wormhole on a device","dialogCopy":"Paste this line into your device terminal to activate a wormhole."},"errors":{"invalidEmail":"Enter a valid work email to continue.","missingName":"Add a status page URL to continue.","statusPageCreate":"Unable to create the status page yet.","missingOrg":"We could not find your workspace. Try again.","unexpected":"Unexpected response. Please try again.","unavailable":"Unable to start onboarding right now."},"close":"Close"},"buyingPaths":{"title":"Your team needs control. Your customers may need an application.","lead":"Operate your Linux devices, build a customer application, or do both.","shared":"Use either independently, or combine them around the same connected devices.","applicationGuide":"Explore Product Applications","nav":{"menu":"Toggle navigation","product":"Product","overview":"Product overview","operations":"Remote access & fleet operations","applications":"Customer portals & applications","playbooks":"Playbooks & guides"}
5,"operate":{"audience":"For your team","title":"Operate your Linux devices","lead":"Reach devices remotely. Spot unexpected changes with Pulse. Search logs and investigate problems with the device context in front of you.","detail":"From the prototype on your desk to equipment already in the field. Keep your existing application and use Dataplicity to operate it.","cta":"Explore remote access & fleet operations","caption":"Dataplicity fleet workspace: device inventory and a live Linux terminal."},"portal":{"audience":"For your customers","title":"Give customers an application of their own","lead":"Give customers their devices, data and controls in your brand. Add records, rules and workflows when your product needs them.","detail":"Your team keeps the engineering tools. Your customers get an application built around the job they need to do.","cta":"Explore customer portals & applications","caption":"Example customer application: silo levels, reading history and device controls."},"sso":{"title":"SSO on every paid plan.","copy":"No Enterprise upgrade required. Use your identity provider with SSO and SCIM on Standard, Business+ or Enterprise.","link":"Security and access controls"}},"fleetOperations":{"title":"Find a fault. Reach the device. Check the fix.","lead":"Reach devices behind customer networks, spot unex
5pected changes with Pulse, and investigate problems through logs and diagnostics. Keep control from the first prototype to the fleet already in the field.","connect":"Connect a device","seeWorkflow":"See the operating workflow","independent":"A complete workspace for your team. No customer portal required.","reach":{"eyebrow":"Reach the device","title":"Get to the box. Keep the fleet in view.","copy":"Open a Linux terminal from the device record. Reach its web interface with Wormhole, or forward a service port for your own tools. The agent connects outbound, so devices behind NAT and cellular networks can stay within reach.","shell":{"title":"Your Linux. Your application.","copy":"Install the agent alongside the software you already run. Keep your hardware and supported Linux distribution."},"network":{"title":"An outbound connection","copy":"Live access requires an online agent that can reach Dataplicity. No inbound port or customer VPN is needed; outbound network policies still apply."},"context":{"title":"The right device, with context","copy":"Move from fleet inventory to the selected device, its diagnostics and its terminal in the same workspace."},"link":"Explore remote access"},"pulse":{"eyebrow":"Spot unexpected changes","title":"Which device stopped looking like its peers?","copy":"Pulse compares a device with others in its Device Class, a group for a product type. Review differences in disk use, packages and agent versions to decide what needs investigation.","action":"A finding gives your team a place to investigate. Compare the affected device with its peers, then use diagnostics and logs to understand the change.","class":"Probe gateways · 12 peers","caption":"Illustrative Pulse finding from the SiloSentry worked reference. A difference is a reason to investigate, not proof of a fault.","link":"See how to evaluate fleet visibility","evaluation":"One device can prove remote access. To evaluate Pulse, connect comparable devices in a Device Class on a paid plan and allow evidence to accumulate. Start with a representative cohort you can already reach."}
5,"logs":{"eyebrow":"Investigate and act","title":"Find the evidence before you make the fix.","copy":"Search device logs around the affected time, inspect diagnostics and use remote access to check the service. Work from the evidence available for that device instead of asking someone on site to copy and send files.","caption":"Dataplicity logging console, shown with a demo fleet. Retention and analytics depend on your plan; only collected logs are available for review.","investigate":{"title":"Narrow the investigation","copy":"Filter the collected logs by device and time. Look for repeated errors or changes around the reported problem."},"act":{"title":"Take the next action","copy":"Use a live terminal for an online device, or guarded fleet jobs on Business+ when the same action needs to reach a selected cohort."},"verify":{"title":"Check the result","copy":"Review fresh logs and device health after the action. Keep incident ownership and follow-up together with Business+ incident handling."},"link":"Explore logging"},"lifecycle":{"title":"Useful wherever you are in the lifecycle.","copy":"You do not have to wait for a new hardware design or a customer application project to improve how you operate devices.","prototype":{"title":"On your desk","copy":"Connect a development device and prove remote access before choosing how to roll out."},"production":{"title":"Entering production","copy":"Include agent installation in provisioning and organise devices into classes as the fleet grows."},"deployed":{"title":"Already in the field","copy":"Install through your existing remote management, software update or on-site process. Start with a reachable cohort; Dataplicity access begins once the agent is installed and connected."},"link":"Choose your lifecycle starting point"},"team":{"title":"Bring the team. Keep access under control.","copy":"Use role-based access and review security activity across sign-ins, access changes and device sessions. Remote session opens are recorded as access events; terminal contents and keystrokes are not recorded.","standard":"Remote access, diagnostics, logging and Pulse for everyday device operations. A customer portal is optional.","business":"Add advanced log investigations, fleet jobs, incidents and on-call escalation. These are useful for operations teams whether or not customers need an application.","link":"Compare plans and calculate your fleet cost"},"end":{"title":"Start with a device you can reach today.","copy":"Get the install command, connect your Linux device and open its remote terminal. Evaluate on one device, then choose the paid plan for the operating capabilities you need.","optional":"If customers need their own application, the same connected devices can support it."}},"connectedProduct":{"walkthroughLabels":{"featured":"Featured walkthrough","moreJourneys":"More product journeys","youBring":"You bring","weSupply":"Dataplicity supplies","youKeep":"You keep","responsibilities":"See the responsibility split","readGuide":"Read the guide"},"seo":{"title":"Dataplicity | Fleet software and customer apps for Linux products","description":"Connect and operate Linux devices without a Customer Portal, then add a branded portal and Product Applications when customers need them. See the complete SiloSentry walkthrough."},"hero":{"titleLine1":"You make the hardware.","titleLine2":"We provide the SaaS.","lead":"Remote access, Pulse fleet health and logging for your Linux devices, from the first prototype to equipment already in the field. Give your customers a branded application when your product needs one.","submitLabel":"Connect a device","seeWhatYouGet":"See what you get â","operatorAlt":"Worked SiloSentry reference: Pulse comparing probe gateways in a device class and flagging one that drifted from class normal","operatorCaptionStrong":"OEM fleet view","operatorCaptionSpan":"SiloSentry worked reference · Pulse attention","operatorClass":"Device class · Probe gateway","operatorClassMeta":"12 peers","operatorClasses":["Probe gateway","Site gateway","Feed sensor"],"customerAppAri
5a":"Worked SiloSentry reference showing three customer silos, levels and attention state","customerBrand":"SiloSentry","customerOrg":"Acme Grain","customerHeading":"My silos","customerUpdated":"Updated just now","customerAttention":"1 needs attention","siloNorth":"North silo","siloNorthMeta":"8.2 days remaining","siloSouth":"South silo","siloSouthMeta":"Reorder soon","siloFeed":"Feed bin","siloFeedMeta":"12.6 days remaining","customerCaptionStrong":"Customer portal view","customerCaptionSpan":"Worked SiloSentry reference · branded Customer Portal"},"paths":{"title":"Choose how far you need to go.","lead":"Start with the Linux device you already ship. Add fleet operations, a customer portal and product workflows as you need them. Fleet operations do not require a Customer Portal.","items":[{"id":"operate","eyebrow":"Operate my devices","title":"Connect and operate one device","copy":"Identity, Remote Shell, diagnostics, monitoring, logs and fleet operations. Outcome: a supportable installed base. No Customer Portal required.","cta":"Connect and operate one device","href":"https://docs.dataplicity.com/product/turn-your-linux-device-into-a-product"},{"id":"portal","eyebrow":"Give customers a portal","title":"Build a customer product","copy":"Customer accounts, sites, devices, data and permitted controls in the OEM's brand. Add a Customer Portal when downstream users need one.","cta":"Build a customer product","href":"/use-cases"},{"id":"workflows","eyebrow":"Build product workflows","title":"Explore Product Applications","copy":"Records, rules, durable processes, commands, offline datasets and native application kits when the product needs customer workflow.","cta":"Explore Product Applications","href":"https://docs.dataplicity.com/product/product-applications"}]},"exchangeV2":{"title":"Bring the product you already make.","lead":"Dataplicity starts with the Linux device inside it. You keep the hardware, software, data and brand that make the product yours.","evidenceNote":"Illustrated example: a grain-level monitor that reports how much grain is left in a silo.","productTitle":"What you bring","productItems":["Your Linux device or gateway","Sensors and measurement software","Installation and field expertise","Your brand and customer relationships"],"resultsTitle":"What Dataplicity adds","fleetTitle":"Fleet operations for your team","fleetCopy":"Connect to devices remotely, monitor their health, inspect logs and diagnose problems across your fleet.","customerTitle":"A customer application, when you need it","customerCopy":"Give customers a branded place to see their devices, check readings and manage service requests."},"depth":{"title":"See the fleet. Then get all the way into a device.","lead":"Open a live terminal from any device record, investigate the problem and make the fix. The same system handles the work around it, from fleet-wide jobs and monitoring to incidents, customers, warranties and returns.","screenAlt":"Dataplicity showing a fleet device list, a selected device and its live Linux terminal in one workspace","systemsAria":"Systems provided by Dataplicity","onDeviceTitle":"Work on the device","onDeviceCopy":"Live terminal, remote access, logs and diagnostics.","acrossFleetTitle":"Work across the fleet","acrossFleetCopy":"Monitoring, releases and guarded jobs across groups.","incidentTitle":"Handle the incident","incidentCopy":"Alerts, on-call, ownership and a complete audit history.","installedBaseTitle":"Manage the installed base","installedBaseCopy":"Customers, licences, warranty and RMA tied to the hardware."},"pulse":{"title":"Fleets diverge. You shouldnât have to invent a gold image.","lead1":"IoT devices are not homogeneous, and they never stay identical. Chasing a gold design is a mugâs game.","lead2":"Pulse learns normal from the whole Device Class â with no prior knowledge, no coding, and no baseline from you â then flags the ones that stop looking like their peers.","visualAria":"Illustration of Pulse learning class normal from peer devices and flagging one that has drifted","visualTitle":"Pulse","visualSubtitle":"SiloSentry gateways","classNormal":"Class normal","findingTitle":"South-14 stopped looking like its peers","findingDetail":"Root disk 91% · packages diverged · no gold baseline required","point1Title":"No prior knowledge","point1Copy":"Turn Pulse on. It fingerprints the class as devices run.","point2Title":"Peer-learned normal","point2Copy":"The baseline is what the fleet actually looks like, not a manifesto.","point3Title":"Divergence, flagged","point3Copy":"When units stop matching their peers, you hear about it first."},"incidents":{"title":"Know when the fleet crosses the line.","lead":"Set thresholds on impaired devices â offline, unreachable, or failing checks. When enough of the fleet is affected, Dataplicity opens an incident, pages on-call, and escalates until someone owns it.","visualAria":"Illustration of a fleet impairment threshold crossing, incident creation, and on-call escalation","visualTitle":"Fleet incident","visualSubtitle":"SiloSentry gateways","ruleLabel":"Alert rule","ruleDetail":">5% of class impaired for 10 min","fleetHealthLabel":"Fleet health","fleetImpaired":"7.8% impaired","fleetMeta":"312 online · 26 impaired","timelineAria":"Incident escalation timeline","timelineSteps":[{"title":"Alert fired","detail":"7.8% of gateways impaired"},{"title":"Incident #1042 opened","detail":"Gateway reachability · Sev 2"},{"title":"Paged Alex","detail":"Primary on-call · mobile app"},{"title":"Escalated to Platform","detail":"No acknowledgement in 15 min"}],"point1Title":"Fleet-wide thresholds","point1Copy":"Alert when a share of devices goes offline, stops checking in, or fails monitored signals â not one device at a time.","point2Title":"Wake the right people","point2Copy":"On-call schedules, push to mobile apps, and escalation if nobody acknowledges in time.","point3Title":"Owned through resolution","point3Copy":"Incidents carry device context, notes, and audit history so the next engineer picks up where you left off."},"buildVsBuy":{"title":"The job starts when the hardware ships.","lead":"Devices need managing whether or not customers need a portal. Dataplicity provides fleet operations first, then an optional customer application and product workflows when the product requires them.","complexityAria":"Dataplicity handles the many identity, fleet, support, security and optional customer application concerns behind a connected product"},"walkthroughs":{"title":"Build around the job your customer needs to do.","lead":"These worked applications show what your team integrates and what Dataplicity provides. Open a guide for the device contract, customer view and workflow.","items":[{"title":"Existing Linux product, no portal","oem":"Your Linux device and application","dataplicity":"Identity, Remote Shell, diagnostics, monitoring and fleet ops","proves":"A supportable installed base without a Customer Portal","oemKeeps":"Hardware, OS, calibration and field qualification","href":"https://docs.dataplicity.c
5om/product/turn-your-linux-device-into-a-product"},{"title":"SiloSentry level monitoring","oem":"Probes, gateways, sensing stack and SiloSentry brand","dataplicity":"Device Class, OEM fleet view, branded portal and Product Application workflow","proves":"Let customers check silo levels while your team supports the equipment.","oemKeeps":"Sensing method, calibration and physical install","href":"https://docs.dataplicity.com/product/build-a-level-monitor-product","exampleHref":"https://silosentry.com/","exampleLabel":"Open SiloSentry"},{"title":"Industrial gateway","oem":"Gateway hardware and protocol mappings","dataplicity":"Health vs attention, protocol workbench, remote support and portal","proves":"Support a gateway and give customers its readings and status.","oemKeeps":"Protocol correctness and field wiring","href":"https://docs.dataplicity.com/product/operate-an-industrial-gateway"},{"title":"CCTV","oem":"Linux camera hardware, optics and algorithms","dataplicity":"Live and recorded video surfaces plus branded Customer Portal","proves":"Give customers live video, recordings and camera events.","oemKeeps":"Capture pipeline and detection models","href":"https://docs.dataplicity.com/product/build-a-cctv-product-ready-to-sell"},{"title":"Offline silo outload","oem":"Site process, tickets and driver workflow","dataplicity":"Product Application records, offline datasets and reconnect handling","proves":"Build an outload workflow for sites with intermittent connectivity.","oemKeeps":"Weighbridge and yard process rules","href":"https://docs.dataplicity.com/product/build-a-silo-outload-application"},{"title":"HVAC scheduling","oem":"Controllers and zone model","dataplicity":"Schedules, applied-state records and Customer Portal workplace","proves":"Let customers schedule equipment across a building.","oemKeeps":"Controller integration and building safety logic","href":"https://docs.dataplicity.com/product/build-an-hvac-scheduling-application"}]},"facts":{"title":"Start with the device on your desk.","keepTitle":"Keep your hardware","keepCopy":"No Dataplicity board or replacement Linux distribution.","agentTitle":"Install one agent","agentCopy":"Outbound only, so it works behind NAT, LTE and customer firewalls.","proveTitle":"Prove it before rollout","proveCopy":"Connect one device, reach it remotely and build from there.","deviceCheckNote":"Not ready to install the agent?","deviceCheckLink":"Try Device Check â free, no account"},"start":{"title":"Connect your first device.","lead":"Enter your email to get the install command. Run it on your Linux device and watch it appear in Dataplicity.","submitLabel":"Get the install command"}},"security":{"hero":{"titleLine1":"Control who can reach your fleet.","titleLine2":"Review security activity.","lead":"Use your own identity provider on any paid plan, manage team access and review security events. See the detection and audit scope below, including what is recorded and which export options need Enterprise.","chips":["SSO on any paid plan","SCIM provisioning","MFA enforcement","Verified domains"]},"visuals":{"entitlement":{"aria":"One identity policy protects Standard, Business+ and Enterprise plans alike.","idpTitle":"Your identity provider","idpCopy":"One policy for the whole fleet","verified":"Connected","platformLabel":"Dataplicity identity","platformTitle":"The policy follows every paid plan","included":"Included","plans":["Standard","Business+","Enterprise"],"protected":"SSO protected"},"activity":{"aria":"A sample security activity feed combining identity and device access events.","title":"Security activity","subtitle":"Identity and device access in one record","live":"Recording","all":"All activity","device":"Device access","identity":"Identity","events":[{"icon":">_","title":"Terminal session opened","subject":"Northstar Gateway 07","actor":"A. Engineer","time":"Just now"},{"icon":"â»","title":"API key rotated","subject":"Service integration","actor":"Platform admin","time":"4 min ago"},{"icon":"ID","title":"Organisation role changed","subject":"Operations group","actor":"M. Admin","time":"12 min ago"},{"icon":"â","title":"Port-forward session opened","subject":"Cold Store Controller 12","actor":"A. Engineer","time":"19 min ago"}],"footer":"Actor, organisation, device and time","export":"Export filtered view"}},"detections":{"title":"Built around how accounts actually get taken.","lead":"Account takeover follows a
5small number of well-worn routes, and almost none of them look like an alarm going off. We watch all three shapes continuously, enriching each detection with fleet context, device access history and normal device access patterns that a generic security tool cannot see on its own.","shapes":[{"title":"Credentials nobody is watching","copy":"Keys and accounts that have gone quiet, and the ones that suddenly start working much harder than usual."},{"title":"Movement that does not add up","copy":"Sign-ins from places, and at intervals, that do not fit how your organisation actually works."},{"title":"Unusual flows once someone is inside","copy":"Access and data movement weighed against the shape of your own normal traffic, not a fixed ceiling."}]},"audit":{"title":"The record covers the devices, not just the console.","lead":"Most platforms audit their own admin panel and stop there. The interesting question is not who changed a setting, it is who reached into a customer's hardware, and what they did when they got there.","consoleTitle":"Platform access","consoleItems":["Sign-ins, failures and lockouts","MFA registration and removal","Users, groups and role changes","API keys, SSO and SCIM configuration"],"deviceTitle":"Device access and control","deviceItems":["Terminal, port-forward and remote-file sessions opened","File transfers queued and started, with paths hashed","Device actions invoked, reboots and intents requested","Fleet jobs and remediation playbooks dispatched","Provisioning, claiming and wormhole configuration changes"]},"staff":{"title":"High-risk support actions leave a record.","copy":"Sensitive account and access changes carried out by Dataplicity support are written to the same audit stream and raise a security detection. The record covers those high-risk actions without pretending every support interaction is one.","wormholeTitle":"Published device endpoints are actively monitored","wormholeCopy":"Devices exposed through Wormhole are monitored for signs of compromise, including a unit serving content it has no business serving. Matches raise an alert against the device, and what we watch for grows over time."},"export":{"title":"Somewhere you will actually see it.","items":[{"title":"In the product","copy":"Detections land in a security workspace where they can be reviewed, suppressed as accepted risk, and restored. Suppressions survive the rule firing again."},{"title":"Webhook on first raise","copy":"A newly raised detection posts to your endpoint with the rule, title and severity, so it can open a ticket without anyone watching a dashboard."},{"title":"The activity record, exportable","copy":"Filter the audit trail by user, action, source IP, device or time window, and export what you filtered as CSV for whoever asked."},{"title":"Your SIEM, on Enterprise","copy":"Sentinel export streams the same events into Microsoft Sentinel on a normalised schema. This is the one part of security that is genuinely an Enterprise capability, because it exists for teams who already run a SOC."}]},"cta":{"title":"Connect your first device.","lead":"Enter your email to get the install command. Security activity starts recording from the first sign-in."}},"platform":{"hero":{"titleLine1":"Most platforms want you to change your hardware.","titleLine2":"Yours already works.","lead":"Keep your board, your distribution and your application. Install one agent. Operate the fleet from the first device, and add a branded customer portal only when someone asks for one.","submitLabel":"Connect a device","chips":["No new hardware","No custom Linux","No reflashing","Portal optional"]},"install":{"title":"Start from the device you already ship.","lead":"Dataplicity is additive. You do not replace the board, the distribution or the application to get started.","command":"curl -fsSL https://install.dataplicity.com/your_provisioning_key.sh | sudo bash","facts":[{"title":"Your existing Linux","copy":"Debian, Ubuntu and Raspberry Pi OS 11+, plus armv7, arm64 and x86_64. Your application keeps running as-is."},{"title":"Outbound only","copy":"Works behind NAT, cellular and the customer firewall. No inbound ports and no VPN plumbing."},{"title":"Nothing to reflash","copy":"No Dataplicity board and no custom image. Run the install c
5ommand on a live system."}]},"layers":{"title":"Fleet operations, with customer applications when you need them.","lead":"Operate your devices as a complete product in its own right. Customer portals and workflows share the same device foundation when you choose to add them.","foundation":{"title":"Shared foundation","items":["Outbound agent","Durable device identity","Customer and site association","Device Class","Operational history"]},"groups":[{"title":"Fleet operations for your team","optional":"A complete operating workspace","items":["Remote access","Logs and diagnostics","Monitoring and incidents","Pulse","Fleet jobs and software releases","Installed-base records"],"visual":"device-inventory"},{"title":"Customer product surface","optional":"Add when customers need a product surface","items":["Branded Customer Portal","Customer organisations","Networks and locations","Product-specific Controls","Roles and tenant isolation"],"visual":"portal-silo"},{"title":"Product workflow","optional":"Add when the product needs workflow","items":["Customer records and forms","Rules and durable processes","Device commands","Offline datasets","Native application kits"],"visual":"customers"}],"definitionLabel":"Silo Level Monitor · Device Class","definitionRows":[{"label":"Telemetry","value":"Level · temperature · battery"},{"label":"Controls","value":"Calibrate · reboot"},{"label":"Customer UI","value":"Gauge · history · status"},{"label":"Fleet","value":"487 deployed"}]},"split":{"title":"Your engineers should not see what your customers see.","lead":"The operational system stays deep because your team needs terminals, rollouts, logs and diagnostics. When you add a Customer Portal, it stays product-focused because customers need their devices, their data and their controls â not your engineering machinery.","oemLabel":"Dataplicity control plane","oemTitle":"For the OEM","oemItems":["Fleet health","Remote support","Logs + incidents","Customer assignment"],"customerLabel":"Your branded customer portal","customerTitle":"For the buyer of your product","customerItems":["My devices","My sites","Telemetry","Controls + video","Users + access"]},"depth":{"title":"See the fleet. Then get all the way into a device.","lead":"Open a live terminal from any device record, investigate the problem and make the fix. The same system handles the work around it - from monitoring and incidents to customers and the installed base.","screenAlt":"Dataplicity showing a fleet device list, a selected device and its live Linux terminal in one workspace","systems":[{"title":"Work on the device","copy":"Live terminal, remote access, logs and diagnostics."},{"title":"Work across the fleet","copy":"Monitoring, alerts and guarded jobs across groups."},{"title":"Handle the incident","copy":"Alerts, on-call, ownership and a complete audit history."},{"title":"Manage the installed base","copy":"Customers, product applications and claiming tied to the hardware."}]},"cta":{"title":"Connect your first device.","lead":"Enter your email to get the install command. Run it on your Linux device and watch it appear in Dataplicity.","submitLabel":"Get the install command"},"securityStrip":{"title":"Security is not the Enterprise tier.","copy":"SSO, SCIM and the full detection set on every paid plan.","link":"See what we detect"}},"useCases":{"hero":{"title":"Nobody buys your hardware for the dashboard. They won't buy it without one.","lead":"Fleet operations, a branded customer portal, or a full product application with records and workflows. Same agent, same device record. Ship the one your market actually pays for.","submitLabel":"Connect a device","platformLink":"See how the platform works"},"cases":[{"label":"Fleet operations only","title":"Operate the Linux product you already ship.","copy":"For manufacturers whose customers do not need another portal. Connect devices behind customer networks, identify and search the installed base, investigate through logs, diagnostics and Remote Shell, monitor customer-impacting signals, and run guarded maintenance across a cohort. Add a Customer Portal later without reconnecting the fleet.","bringTitle":"You bring","bringItems":["Linux products already in the field","Your support and maintenance process","Your brand relationship with buyers"],"getTitle":"Dataplicity provides","getItems":["Outbound connection and durable identity","Searchable installed-base inventory","Logs, diagnostics and Remote Shell","Monitoring, Pulse and fleet jobs"],"visual":"fleet","shot":"terminal-cockpit","docsHref":"https://docs.dataplicity.c
5om/product/turn-your-linux-device-into-a-product","docsLabel":"Operate without a Customer Portal"},{"label":"Cloud camera","title":"Build your own cloud camera.","copy":"Ship the Linux camera you already make - including one with a bespoke algorithm the shelf CCTV market does not offer. Time-lapse construction sites, vehicle tracking at a yard gate, plate-based authorisation, or a detector tuned to your process. Dataplicity gives you live video, recording and a branded customer portal so you can sell the camera as a connected product without inventing a full cloud CCTV stack.","bringTitle":"You bring","bringItems":["Linux camera or gateway hardware","Your optics, capture and algorithms","Your brand"],"getTitle":"Dataplicity provides","getItems":["Agent + outbound tunnel","Live and recorded video surfaces","Sites, cameras and capture events","Branded customer portal"],"visual":"camera","shot":"portal-camera-detail","docsHref":"https://docs.dataplicity.com/product/build-a-cctv-product-ready-to-sell","docsLabel":"Read the cloud camera guide"},{"label":"Industrial gateway","title":"Operate a mixed-protocol gateway fleet.","copy":"Each gateway is a product instance with health, attention state and last reading. Customers see the boxes they own; your team reaches any unit for diagnostics - including protocol capture, traffic charts and debug traces - without asking them to open inbound ports.","bringTitle":"You bring","bringItems":["Your industrial gateway hardware","Protocol interfaces and mappings","Your brand"],"getTitle":"Dataplicity provides","getItems":["Gateway health vs attention","Protocol analysis workbench","Remote support on the box","Branded customer portal"],"visual":"gateway","shot":"portal-gateway-detail","docsHref":"https://docs.dataplicity.com/product/operate-an-industrial-gateway","docsLabel":"Read the industrial gateway guide"},{"label":"Remote signage","title":"Run screens in the field from one portal.","copy":"Group screens by venue, manage the media library and review playback events. Customers operate the signage product they bought - without your team handing over the engineering control plane.","bringTitle":"You bring","bringItems":["Linux signage players","Your media and layouts","Your brand"],"getTitle":"Dataplicity provides","getItems":["Screens and venues","Media library","Playback events","Branded customer portal"],"visual":"signage","shot":"portal-signage-detail","docsHref":"https://docs.dataplicity.com/product/build-a-remote-signage-application","docsLabel":"Read the remote signage guide"},{"label":"Silo level monitor","title":"Ship a grain silo level monitor as a connected product.","copy":"Probes and site gateways on elevators connect outbound. Co-ops see bin levels in your branded portal. Your team keeps fleet ops, incidents and remote support in Dataplicity. SiloSentry is the canonical worked reference for the complete operating model.","bringTitle":"You bring","bringItems":["Linux probes and site gateways","Your grain level sensing stack","Your brand"],"getTitle":"Dataplicity provides","getItems":["Agent + device class","Product application","Branded customer portal","Fleet ops for your team"],"visual":"silo","shot":"portal-silo-detail","docsHref":"https://docs.dataplicity.com/product/build-a-level-monitor-product","docsLabel":"Read the level monitor guide","exampleHref":"https://silosentry.com/","exampleLabel":"See the SiloSentry walkthrough"}],"cta":{"title":"Connect a device and decide what to add next.","lead":"Start with a Linux device you can reach. Remote access is free on one device. Add the operating tools and customer application capabilities your product needs.","submitLabel":"Get the install command"}},"lifecycleHome":{"titleLine1":"Your Linux devices.","titleLine2":"Connected, operated, supported.","lead":"Remote access, Pulse fleet health and logging, from the first prototype to equipment already in the field. Keep your hardware and application. Give customers an application of their own when your product needs one."},"lifecycleProduct":{"titleLine1":"Keep the product you have.","titleLine2":"Add the softw
5are to operate it.","lead":"Install one agent alongside your existing Linux application. Give your team remote access, fleet health and logs. Add a branded customer application when it serves your product."},"lifecycleUseCases":{"title":"Solve the problem your product has today.","lead":"Find an operating problem or a customer application similar to yours. These are worked reference scenarios to help you assess the fit and engineering work, not customer deployment claims.","operationsTitle":"Operate the product you already ship.","operationsLead":"Follow a problem from the first sign of trouble to the evidence you need for the next decision. No customer portal required.","applicationsTitle":"When customers need an application of their own.","applicationsLead":"These reference products show possible customer experiences and the responsibility split. Use the application guide to understand the engineering work behind them."},"lifecycle":{"nav":"Find your starting point","title":"Where are you starting?","lead":"A prototype, a first batch or an established fleet. Start where the work is.","link":"Explore the full product lifecycle","picker":{"stage":"By product stage","situation":"By the problem you have"},"prototype":{"title":"On your desk","copy":"Prove remote access on a development device, or investigate a fault with Device Check.","link":"Start with one device"},"production":{"title":"Preparing a production run","copy":"Make installation and device identity repeatable before the first batch goes out.","link":"Prepare the first batch"},"deployed":{"title":"Already in the field","copy":"Use your existing installation or update process to connect a reachable cohort. Keep your customer application.","link":"Operate an existing fleet"}},"workflowExamples":{"title":"Follow the evidence through to the result.","lead":"Illustrative operating scenarios, not measured customer outcomes. Use the linked playbooks to reproduce the investigation with your own devices.","scenario":"Starting condition","investigate":"Investigation and action","verify":"Evidence to check afterwards","link":"Read the worked playbook","pulse":{"title":"One gateway has changed","start":"Pulse flags a gateway whose disk usage and packages differ from its peers.","action":"Review the difference, inspect collected logs and reach the online device to check the service. Decide whether the change is expected before acting.","result":"Check fresh logs, disk use and the next health observation. Record what changed and whether further work remains.","link":"Explore the fleet investigation"},"release":{"title":"A pilot release starts generating errors","start":"Support receives repeated timeout reports after a pilot firmware release.","action":"Search the signature and compare versions and cohorts. Preserve the evidence and decide whether to pause the rollout or test a corrective change.","result":"Compare fresh errors and expected readings in the pilot cohort before expanding. An action being sent is not proof of recovery.","link":"Read the release investigation"},"support":{"title":"A customer asks for a replacement","start":"A unit is reported as faulty and someone must decide whether to send a technician.","action":"Identify the unit and customer. Review available coverage and service history, collected evidence and live diagnostics where the device is online.","result":"Confirm current device behaviour after any remote action. If a visit or replacement is still needed, leave the findings and remaining work for the next responder.","link":"Read the support investigation"}},"customerHome":{"hero":{"title":"Reach your Linux devices. Resolve problems remotely.","lead":"Reach equipment behind customer networks, investigate faults and manage your fleet. Keep your hardware and software. Add a branded customer application when you need one.","submit":"Connect your first device","signupHelp":"Enter your email to get the install command.","next":"See what your team and customers get","screenAlt":"Dataplicity device list beside a selected device and its remote Linux terminal, shown with demo data","caption":"Your fleet and a remote Linux terminal in one workspace. Shown with demo data."},"setup":{"title":"Connect one device. Open its terminal.","keep":{"title":"Keep your product","copy":"Use the Linux device and application you already have, from a prototype to equipment in the field."},"install":{"title":"Install the agent","copy":"Run the install c
5ommand on a device you can reach. The agent runs alongside your existing software."},"connect":{"title":"Open Dataplicity","copy":"Once the device connects, open its terminal in your browser and try remote access."},"network":"The agent connects outbound. No inbound ports or customer VPN needed; your network must allow the connection.","deviceCheck":"Not ready to install? Try Device Check, free with no account"},"paths":{"operate":{"lead":"Reach devices, spot unexpected changes and investigate faults with logs and diagnostics.","detail":"Use Dataplicity for your engineering and support team. Keep your existing customer application."},"portal":{"lead":"Let customers see their equipment, check readings and use permitted controls in your brand.","detail":"Your team connects the device data and controls. Add schedules, service requests or other workflows as your product needs them."}},"investigation":{"title":"One device looks wrong. Follow it through to the result.","lead":"Keep the device, site and operating evidence together as you investigate and act.","example":"Illustrative investigation, not a measured customer result.","device":"Gateway-14","context":"North site · 12 comparable gateways · Online","spot":{"title":"Spot the change","copy":"Pulse flags a gateway whose disk use and installed packages differ from similar devices. Decide whether the difference needs investigation.","evidence":"Finding: disk 91% full; packages differ"},"inspect":{"title":"Inspect the logs","copy":"Open the collected logs for that device and time. In this example, repeated retries are filling a service log.","evidence":"Evidence: retries and a growing log file"},"act":{"title":"Reach the device","copy":"Open its remote terminal. Your engineer checks the service and corrects the configuration causing the retries.","evidence":"Action: check and correct the service"},"verify":{"title":"Check the result","copy":"Review fresh logs and readings. Confirm retries have stopped and disk use is stable before treating the problem as resolved.","evidence":"Check: fresh readings; no further retries"},"customer":"If you add a customer application, customers can see readings from this same equipment. Your engineers keep the diagnostics and remote access tools.","more":"Explore fleet operations","pulseRequirements":"One device is enough to try remote access. To evaluate Pulse, connect comparable devices in a Device Class (a group of the same device type) on a paid plan and allow evidence to accumulate."},"explore":{"title":"Start where your product is.","lead":"Connect a prototype, prepare your first batch, or add Dataplicity through the installation or update process you already use in the field.","lifecycle":"Find your starting point","operations":{"title":"Explore operating capabilities","copy":"Fleet health, logs, remote access, jobs and incident handling."},"applications":{"title":"Plan a customer application","copy":"See what your team builds and what Dataplicity provides."},"guides":{"title":"Browse product walkthroughs","copy":"Worked examples, from Linux fleet support to customer workflows."}},"start":{"title":"Try it on a device you can reach.","lead":"Prove remote access on one device, then choose the operating capabilities your team needs."}},"siteClarity":{"onThisPage":"On this page","browseGuides":"Browse guides","browseApplications":"Explore customer applications","howItFits":"See how it fits","startNote":"Get the install command by email. Remote access is free on one device.","signageOwnership":"Your player software, media, layouts and customer relationship.","calculateCost":"Calculate your fleet cost","compareFeatures":"Compare plan features","auditScope":"See what is recorded","required":"Required","notNeeded":"Not needed","platform":{"fitTitle":"One agent on your device. One workspace for your team.","fitLead":"Dataplicity connects your Linux equipment to the people who operate it. Start with remote access, then add the capabilities your product needs.","device":{"title":"Your product stays yours","copy":"Keep your hardware, supported Linux distribution and application. Your team owns sensing, control logic and the safety checks that run on the device."},"agent":{"title":"The agent connects the device","copy":"Install the Dataplicity agent through a local command, your factory setup or an existing update process. It runs alongside your application and connects outbound."}
5,"workspace":{"title":"Your team works from the device record","copy":"Find the unit, see its health and collected logs, and open a remote terminal. Keep customer and site context with the equipment you support."},"network":"Installation needs access to the device. Live remote access begins once the agent is online and able to reach Dataplicity; outbound network policies still apply.","architecture":"Explore the architecture","toolsTitle":"Add the tools for the next job.","toolsLead":"Use these capabilities together around the same devices. Check plan availability before choosing your rollout.","identify":{"title":"Find the right device","copy":"Organise equipment by product type, customer and site. Keep the context your support team needs.","link":"Device inventory and ownership"},"provision":{"title":"Bring the next batch online","copy":"Define a Device Class for a product type and use the right installation settings across a batch.","link":"Device provisioning"},"investigate":{"title":"Understand a fault","copy":"Compare device health, search collected logs and reach an online device to investigate.","link":"Fleet operations"},"maintain":{"title":"Repeat a maintenance task","copy":"Schedule recurring jobs and review execution history. Use the controls appropriate to the devices you target.","link":"Scripts and schedules"},"customers":{"title":"Give customers their own application","copy":"Show customers their equipment, data and permitted actions under your brand. Your engineers define and test the product workflow.","link":"Customer applications"},"access":{"title":"Control and review access","copy":"Use team roles, identity controls and security activity to understand who accessed the system.","link":"Security and audit scope"},"startTitle":"A prototype, a production batch or an existing fleet?","startLead":"Choose a starting point that matches how you can reach your devices today. Prove the connection and one useful task before expanding.","lifecycle":"Find your starting point","examples":"Explore worked examples"},"existingProductGuide":"Read the guide to operating an existing Linux product"}}`),Z_={marketing:z_},ek=JSON.parse(`{"navChildren":{"home":"Home","platformOverview":"Platform overview","platformArchitecture":"Architecture & data model","platformFleetIdentity":"Fleet identity","platformProvisioning":"IoT device provisioning","platformFirmware":"Firmware","platformRemoteOps":"Secure remote access","platformAutomation":"Automation","platformSecurity":"IoT fleet security","platformCustomerSurfaces":"Customer surfaces","platformWhitelabelSites":"Whitelabel sites","fleetVisibility":"Fleet visibility","remoteOps":"Remote access","customerTrust":"Customer trust","playbooksIndex":"All playbooks","starlinkOutage":"Network outages","firmwareLogAnalytics":"Firmware log analytics","customerWarrantyIncident":"Customer status + warranty","allModules":"All modules","moduleDevices":"Devices","moduleLogs":"Device log search","moduleAlerts":"Alert rules","moduleFirmware":"Firmware bundles","moduleStatusPages":"Status pages","moduleDashboards":"Dashboards","moduleSecurityActivity":"Security activity","moduleTerminal":"Terminal","moduleWormhole":"Wormhole","moduleScheduledTasks":"Scheduled tasks","moduleProjectBoards":"Project Boards","comparisonOverview":"Overview","comparisonGreengrass":"Dataplicity vs Greengrass","comparisonBalena":"Dataplicity vs balena","comparisonStatusStack":"Dataplicity vs status stack","resourcesIndex":"Resources index","resourceDeployment":"Deployment guide","resourceIntegrations":"Integrated workflows","resourceRunbooks":"Incident runbooks","resourceFaq":"OEM engineer FAQ"},"pages":{"platformArchitecture":{"eyebrow":"Platform - Architecture","title":"Control plane architecture for OEM fleets.","lead":"Dataplicity keeps device identity, signals, and customer surfaces in one data model so engineering teams stop stitching together five consoles.","highlights":["Device identity is the primary key for telemetry, logs, and firmware.","Events, alerts, and incidents share the same timeline.","Customer status and dashboards read from the same dataset.","Security activity and access policies live alongside fleet data."],"sections":{"identity-graph":{"title":"Identity graph","subtitle":"A single device record ties hardware, customer ownership, and firmware lineage together.","items":[{"label":"Inventory","title":"Devices + customers","copy":"Devices, customer accounts, and cohorts share consistent IDs and metadata."}
5,{"label":"Provisioning","title":"Device classes","copy":"Per-SKU configuration and provisioning defaults stay linked to devices."},{"label":"Ownership","title":"Customers + entitlements","copy":"Customer accounts and licenses bind hardware to the right account."},{"label":"Firmware","title":"Version lineage","copy":"Firmware bundles and rollout status stay attached to each device."}]},"signals":{"title":"Signal pipeline","subtitle":"Telemetry, logs, and alerts run through one workflow instead of separate tools.","items":[{"label":"Telemetry","title":"Ops dashboard","copy":"Metrics arrive over the same outbound connection as logs."},{"label":"Logs","title":"Syslog search","copy":"Device and backend logs land in one searchable timeline."},{"label":"Events","title":"Event history","copy":"Deploys, restarts, and config changes are correlated automatically."},{"label":"Response","title":"Alerts + incidents","copy":"Rules, routing, and incident tracking stay in one UI."}]},"surfaces":{"title":"Customer surfaces","subtitle":"Status pages and dashboards reuse the same source of truth.","items":[{"label":"Status","title":"Status pages","copy":"Public uptime surfaces are driven by live monitors."},{"label":"Dashboards","title":"Read-only dashboards","copy":"Expose metrics without handing out credentials."},{"label":"Portals","title":"Whitelabel access","copy":"Brand the customer portal without forking the product."}]}},"cta":{"title":"See the full platform overview.","copy":"Browse the modules that ship with Dataplicity today.","primaryLabel":"Platform overview","secondaryLabel":"View modules index"}},"platformFleetIdentity":{"eyebrow":"Platform - Fleet identity","title":"Find every device and the customer it belongs to.","lead":"Keep device health, product type, customer and site context together. Give support a reliable starting point when a customer reports a problem.","highlights":["Inventory stays tied to customer and warranty data.","Groups and tags drive rollout cohorts.","Device classes define provisioning defaults per SKU.","Fleet search uses the same metadata across modules."],"sections":{"inventory":{"title":"Inventory model","subtitle":"Every device record carries ownership, firmware, and health metadata.","items":[{"label":"Devices","title":"Devices view","copy":"Track last check-in, firmware, tags, and status in one table."},{"label":"Customers","title":"Customer accounts","copy":"Bind devices to customer accounts and entitlements without spreadsheets."},{"label":"Cohorts","title":"Groups + tags","copy":"Saved cohorts for lab, pilot, and field rollouts."},{"label":"Ownership","title":"Customer metadata","copy":"Keep customer records attached to every deployed unit."}]},"segmentation":{"title":"Group devices for the job","subtitle":"Use customer, product type and tags to narrow an investigation or maintenance task.","details":["Cohorts drive firmware targeting and alert routing.","Customer segmentation stays consistent across ops views.","Entitlements and warranty context follow the cohort."],"items":[{"label":"Filters","title":"Saved cohort filters","copy":"Reuse the same tag logic across alerts, rollouts, and ops."},{"label":"Ownership","title":"Customer scoping","copy":"Slice fleets by customer without exporting data."},{"label":"Lifecycle","title":"Warranty windows","copy":"Warranty and license context stays visible in ops workflows."}]},"lifecycle":{"title":"Lifecycle context","subtitle":"Provisioning, ownership, and licensing stay tied to inventory from day one.","items":[{"label":"Provisioning","title":"Device classes","copy":"Standardize metadata and config per device SKU."},{"label":"Ownership","title":"Customer accounts","copy":"Bind devices to customer accounts without spreadsheets."},{"label":"Licensing","title":"License bundles","copy":"Track entitlements and coverage windows inside Dataplicity."}]}}},"platformProvisioning":{"eyebrow":"Platform - IoT device provisioning","title":"Bring the next batch of Linux devices online.","lead":"Define a Device Class for each product type, then use the appropriate install c
5ommand in your factory or field process. Confirm the connection and customer assignment before expanding.","highlights":["Define hardware metadata, tags, and configuration defaults once per device class.","Bind claimed hardware to the correct customer account and entitlements.","Issue install commands for the appropriate organisation and device class.","Carry provisioning, ownership, and activation history into monitoring and support."],"sections":{"device-classes":{"title":"Define a product type once","subtitle":"A Device Class groups similar devices and holds the settings for that product type.","items":[{"label":"Metadata","title":"Hardware profiles","copy":"Capture hardware specs, firmware targets, and tags per SKU."},{"label":"Config","title":"Provisioning defaults","copy":"Set baseline config and policy for each class."},{"label":"Inventory","title":"Default assignments","copy":"New devices inherit class metadata on first check-in."}]},"ownership":{"title":"Ownership, licenses, and warranty","subtitle":"Customer onboarding and entitlements live next to provisioning.","items":[{"label":"Ownership","title":"Customer accounts","copy":"Bind a device to the right customer account."},{"label":"Licenses","title":"License bundles","copy":"Track entitlement counts and coverage windows."},{"label":"Warranty","title":"Warranty tracking","copy":"Warranty starts on first check-in, not on a spreadsheet."}]},"activation":{"title":"From install command to monitored device","subtitle":"Use the same repeatable workflow for a Raspberry Pi pilot, factory image, or field-installed Linux gateway.","details":["Generate the install command for the intended organisation and device class.","Run it on an internet-connected Linux device and confirm its first check-in.","Verify customer assignment, tags, monitoring, and activation events before scaling."],"items":[{"label":"Install","title":"Provisioning command","copy":"Install command is generated from the login flow."},{"label":"First check-in","title":"Confirm the first check-in","copy":"Check that the installed agent connects and the device appears in inventory."},{"label":"Ownership","title":"Customer assignment","copy":"Assign devices to the right customer during activation."}]}}},"platformFirmware":{"eyebrow":"Platform - Firmware","title":"Ship firmware rollouts with inventory context.","lead":"Firmware bundles, device classes, and cohorts keep upgrades scoped and auditable.","highlights":["Firmware bundles attach to device classes.","Rollouts are scoped by cohort, not guesswork.","Version history stays tied to device records.","Ops can correlate firmware changes with incidents."],"sections":{"bundles":{"title":"Firmware bundles","subtitle":"Store and track firmware artifacts per device class.","
5items":[{"label":"Artifacts","title":"Bundle uploads","copy":"Attach firmware artifacts to a specific device class."},{"label":"Metadata","title":"Version tracking","copy":"Track firmware versions against the inventory record."},{"label":"Visibility","title":"Rollout context","copy":"Expose firmware state in the device record and ops views."}]},"rollouts":{"title":"Rollout stages","subtitle":"Promote firmware through lab, pilot, and field cohorts.","items":[{"label":"Cohorts","title":"Staged rollout","copy":"Target firmware by cohort rather than by CSV imports."},{"label":"Signals","title":"Health gating","copy":"Use telemetry and alerts to confirm rollout safety."},{"label":"Audit","title":"Change history","copy":"Firmware changes are recorded in event history."}]},"ops-context":{"title":"Firmware in ops workflows","subtitle":"On-call engineers see firmware context alongside alerts and logs.","details":["Alerts and incidents show the active firmware version.","Event history captures rollout stages and promotions.","Cohort health ties directly to version decisions."],"items":[{"label":"Ops","title":"Incident correlation","copy":"See firmware version next to alert spikes."},{"label":"Logs","title":"Root cause visibility","copy":"Compare log patterns across versions during rollouts."},{"label":"Inventory","title":"Cohort targeting","copy":"Filter devices by firmware and cohort in inventory."}]}}},"platformRemoteOps":{"eyebrow":"Platform - Secure remote access","title":"Reach a Linux device behind a customer network.","lead":"Open a browser terminal over the agentâs outbound connection. Investigate with device health and collected logs. Live access requires an online agent that can reach Dataplicity; outbound network policies still apply.","highlights":["Reach internet-connected devices even behind firewalls or private networks.","Correlate telemetry, logs, alerts, and incidents in a single timeline.","Open remote shell sessions with role-based access and an access-event audit history.","Keep on-call response and customer updates in one control plane."],"requirements":{"title":"Remote access requirements","subtitle":"Install the Dataplicity agent on an internet-connected Linux edge device. Terminal, Wormhole web access, and port forwarding use the outbound connection, so the customer network needs no inbound port, VPN, static IP, or DynDNS.","items":[{"label":"Port forwarding"},{"label":"VPN"},{"label":"Static IPs"},{"label":"Edge device"},{"label":"Internet access"},{"label":"DynDNS"},{"label":"Firewall exceptions"},{"label":"On-site visits"}],"benefits":[{"title":"Works anywhere","copy":"If the device can reach the internet, you can reach it too, even behind firewalls or private networks."},{"title":"Easy access via browser","copy":"Log in, pick a device, and open the remote terminal or web UI right in your browser."},{"title":"Simple and secure","copy":"Connections are outbound-only and encrypted, so you don't need VPN clients or firewall changes."}]},"sections":{"telemetry":{"title":"Telemetry and logs","subtitle":"Metrics and syslog arrive over the same outbound connection.","items":[{"label":"Telemetry","title":"Ops dashboard","copy":"Fleet health metrics and per-device drill-down."},{"label":"Logs","title":"Log search","copy":"Tail and search syslog across devices and servers."},{"label":"Events","title":"Event history","copy":"Deploys, restarts, and config changes in one timeline."}]},"response":{"title":"Alerts and incidents","subtitle":"Route alerts and document incidents without leaving the ops view.","items":[{"label":"Alerts","title":"Alert rules","copy":"Thresholds, heartbeats, and expression-based alerts."},{"label":"Routing","title":"On-call escalation","copy":"Route alerts to the right rota and log the response."},{"label":"Incidents","title":"Incident management","copy":"Attach notes and resolution steps to each incident."}]},"access":{"title":"Remote access","subtitle":"Open a secure shell without poking holes in the network.","details":["Outbound-only access keeps customer infrastructure closed.","Session opens and device actions are logged with device and incident context.","Access respects org roles and cohort scopes."],"items":[{"label":"Terminal","title":"Remote shell","copy":"Open secure shells on devices through Dataplicity."},{"label":"Scripts","title":"Saved commands","copy":"Run repeatable commands on target cohorts."},{"label":"Audit","title":"Access record","copy":"Review remote session opens as access events. Terminal contents and ke
5ystrokes are not recorded."}]}}},"platformAutomation":{"eyebrow":"Platform - Automation","title":"Run routine maintenance without visiting each device.","lead":"Save commands, schedule recurring tasks and review execution history. Select the devices or groups you intend to work on before running a job.","highlights":["Scheduled tasks keep recurring jobs in one place.","Remote scripts run without opening VPN tunnels.","Automation actions are tracked in execution history."],"sections":{"scheduled-tasks":{"title":"Scheduled tasks","subtitle":"Run recurring jobs across devices and cohorts.","items":[{"label":"Maintenance","title":"Recurring jobs","copy":"Automate log rotation, health checks, and reporting."},{"label":"Scope","title":"Targeted execution","copy":"Run tasks per cohort or device class."},{"label":"Tracking","title":"Execution history","copy":"Task runs are recorded in execution history."}]},"scripts":{"title":"Remote scripts","subtitle":"Execute repeatable fixes without opening tunnels.","details":["Scripts target cohorts to avoid manual device lists.","Execution results are recorded in execution history.","Permissions enforce who can run automation."],"items":[{"label":"Commands","title":"Saved scripts","copy":"Save and reuse commands for repeatable fixes."},{"label":"Ops","title":"On-demand execution","copy":"Run scripts during troubleshooting and maintenance."},{"label":"History","title":"Audit trails","copy":"Track who executed each script and when."}]}}},"platformSecurity":{"eyebrow":"Platform - IoT fleet security","title":"Govern remote access and fleet operations in one place.","lead":"Apply SAML SSO, MFA, SCIM provisioning, role scopes, security detections, and activity history to the same platform engineers use to access and operate devices.","highlights":["SSO, MFA, and SCIM govern access across the org.","Security activity and detections surface suspicious behavior.","Audit trails cover remote access and admin actions.","Sentinel export streams events to your SIEM."],"sections":{"access-control":{"title":"Access control","subtitle":"Keep fleet access behind SSO, MFA, and SCIM policies.","items":[{"label":"SSO","title":"SAML enforcement","copy":"Centralize authentication and role access."},{"label":"MFA","title":"Multi-factor policies","copy":"Require MFA for privileged access."},{"label":"SCIM","title":"SCIM provisioning","copy":"Sync users and deprovision access automatically."},{"label":"Roles","title":"Role scoping","copy":"Limit access by role and group."}]},"security-activity":{"title":"Security activity and detections","subtitle":"Monitor auth events, detections, and SIEM exports.","items":[{"label":"Audit","title":"Security activity","copy":"Track logins, token usage, and admin actions."},{"label":"Detections","title":"Security detections","copy":"Surface suspicious access patterns."},{"label":"SIEM","title":"Sentinel export","copy":"Stream security events to Microsoft Sentinel."},{"label":"Ops","title":"Incident response","copy":"Tie security events to incident workflows."}]},"governance":{"title":"Reviewable access for device operations","subtitle":"Keep authentication, admin changes, remote actions, and device identity connected for security review.","details":["Audit exports provide compliance evidence on demand.","Domain claims and roles enforce access boundaries.","Security context stays linked to device identity."],"items":[{"label":"Audit","title":"Compliance evidence","copy":"Export activity logs for audit requirements."},{"label":"Access","title":"Domain claims","copy":"Restrict access to verified domains."},{"label":"Visibility","title":"Security context","copy":"Security signals live next to ops telemetry."}]}}},"platformCustomerSurfaces":{"eyebrow":"Platform - Customer surfaces","title":"Publish customer-facing views without exporting data.","lead":"Status pages and dashboards stay connected to live device signals.","highlights":["Status pages read from live monitors.","Dashboards and displays are read-only by default.","Shared views stay read-only and scoped."],"sections":{"status-pages":{"title":"Status pages","subtitle":"Expose component health without manual updates.","details":["Status reflects live monitor health and incidents.","Updates publish from the same ops timeline.","Historical uptime remains available for customers."],"items":[{"label":"Public","title":"Status pages","copy":"Public status pages reflect live monitor health."},{"label":"Incidents","title":"Incident updates","copy":"Publish incident notes directly from ops."},{"label":"History","title":"Status history","copy":"Maintain a historical timeline for customers."}]},"dashboards":{"title":"Dashboards and displays","subtitle":"Expose live metrics without sharing credentials.","details":["Dashboards are scoped per customer and role.","Displays run read-only on TVs and kiosks.","Data sources stay aligned with ops telemetry."],"items":[{"label":"Dashboards","title":"Dashboard designer","copy":"Curate customer-facing dashboards."},{"label":"Displays","title":"Displays","copy":"Publish read-only dashboards for kiosks and NOCs."},{"label":"Data","title":"Data sources","copy":"Connect device signals to dashboards."}]}}},"platformWhitelabelSites":{"eyebrow":"Platform - Whitelabel sites","title":"Whitelabel portals that keep your brand on every customer screen.","lead":"Give customers a branded portal with scoped access to their devices and sites while your ops team keeps the control plane centralized.","highlights":["Customer portals run on your domain and branding.","Role-based access keeps each customer scoped to their fleet.","Customer sites organize fleets by account and location.","OEMs package the portal as a managed service layer."],"sections":{"branding":{"title":"Branded customer portal","subtitle":"Give buyers a home for their fleet without exposing internal tooling.","items":[{"label":"Devices","title":"Customer device view","copy":"Let customers browse device status, ownership, and health in their portal."},{"label":"Branding","title":"Custom domains","copy":"Serve the portal from your branded domain and logo."},{"label":"Experience","title":"Customer navigation","copy":"Keep customer views focused on their sites and assets."}]},"customer-dashboards":{"title":"Customer access controls","subtitle":"Keep every customer scoped to their people, devices, and sites.","details":["Roles define what customers can see and manage.","Access stays scoped to assigned sites and devices.","OEM teams retain admin control across customers."],"items":[{"label":"Roles","title":"Customer roles","copy":"Assign viewer, operator, or admin access per
5customer."},{"label":"Scope","title":"Scoped data access","copy":"Keep each customer limited to their sites and devices."},{"label":"Admin","title":"OEM control","copy":"Maintain full oversight while customers work in their own portal."}]},"customer-status":{"title":"Customer sites and hierarchy","subtitle":"Organize fleets by customer account, site, or location.","details":["Sites roll up fleets and device cohorts.","Customer teams jump between sites and regions.","Site scoping keeps data separated by customer."],"items":[{"label":"Sites","title":"Customer sites","copy":"Group devices by site to match how customers operate."},{"label":"Cohorts","title":"Site cohorts","copy":"Segment fleets by region, rollout, or customer org."},{"label":"Rollups","title":"Portfolio views","copy":"Roll up site-level views for customer leadership."}]}}},"moduleDevices":{"eyebrow":"Module - Devices","title":"Find the device you need to support.","lead":"Search your device inventory and check its status, customer and product context before opening diagnostics or remote access.","highlights":["Every device record holds tags and status context.","Device status and check-in history are always visible.","Device metadata stays attached to each unit."],"sections":{"inventory-records":{"title":"Inventory records","subtitle":"See device identity and health in one place.","items":[{"label":"Status","title":"Live health","copy":"See online/offline state with last check-in."},{"label":"Tags","title":"Fleet context","copy":"Group devices with tags for faster filtering."},{"label":"Notes","title":"Operational metadata","copy":"Keep device notes alongside status signals."}]},"ops-actions":{"title":"Ops actions","subtitle":"Device records drive remote workflows.","details":["Device records are the launchpad for remote actions.","Tags keep fleet segmentation consistent.","Actions and changes are captured for review."],"items":[{"label":"Terminal","title":"Remote access","copy":"Open a secure shell directly from the device record."},{"label":"Tags","title":"Cohort targeting","copy":"Group devices into cohorts for easier filtering."},{"label":"Check-ins","title":"Recent updates","copy":"Track recent check-ins and status changes."}]}}},"moduleLogs":{"eyebrow":"Module - IoT device logs","title":"Find the errors around a device fault.","lead":"Search collected device and backend logs by time and device context. Investigate what changed and check fresh logs after a fix. Retention and analysis capabilities depen
5d on your plan.","highlights":["Tail and search syslog from devices, gateways, applications, and backend services.","Keep each log stream tied to device identity, status, and operational history.","Compare error signatures across tags, device classes, firmware versions, and cohorts."],"sections":{"log-ingest":{"title":"Linux device and service log ingestion","subtitle":"Send syslog through the device connection or configured collectors, then search it from the shared operations timeline.","items":[{"label":"Syslog","title":"Unified streams","copy":"Device, SaaS, and backend logs land in one view."},{"label":"Search","title":"Fast filtering","copy":"Search by device, cohort, or error signature."},{"label":"Context","title":"Device metadata","copy":"Logs carry device tags and metadata."}]},"correlation":{"title":"Operational context","subtitle":"Logs from devices and services stay tied to device identity so ops can act fast.","items":[{"label":"Devices","title":"Device context","copy":"Open the device record to review ownership, status, and alerts, then launch remote access."},{"label":"Tags","title":"Fleet filters","copy":"Use tags and cohorts to isolate issues and target the right fix."},{"label":"Timeline","title":"Recent activity","copy":"Review log history alongside alerts, deploys, and incident notes."}]}}},"moduleAlerts":{"eyebrow":"Module - Alert rules","title":"Know when a device needs attention.","lead":"Set conditions for device health and availability, then route notifications to the people responsible. Check the affected devices and evidence before deciding what to do.","highlights":["Threshold, heartbeat, and expression rules.","Routing and on-call escalation in the same UI.","Alerts stay tied to device identity."],"sections":{"alert-rules":{"title":"Alert rules","subtitle":"Define alert policies once and reuse them across cohorts.","items":[{"label":"Thresholds","title":"Metric thresholds","copy":"Trigger alerts on CPU, memory, or custom metrics."},{"label":"Heartbeats","title":"Offline detection","copy":"Alert when devices stop checking in."},{"label":"Expressions","title":"Fleet ratios","copy":"Alert on fleet-wide ratios or availability."}]},"routing":{"title":"Routing and incidents","subtitle":"Route alerts into incident workflows.","items":[{"label":"Routing","title":"On-call escalation","copy":"Route alerts to the correct rota."},{"label":"Incidents","title":"Incident management","copy":"Attach notes and resolution steps."},{"label":"Audit","title":"Alert history","copy":"Track alert history against the device."}]}}},"moduleFirmware":{"eyebrow":"Module - Firmware","title":"Rollouts tied to device cohorts.","lead":"Bundle firmware and stage rollouts by cohort, with version history visible in inventory.","highlights":["Firmware bundles attach to device classes.","Rollouts are scoped by cohort.","Version tracking stays tied to device records."],"sections":{"bundles":{"title":"Firmware bundles","subtitle":"Track firmware artifacts and versions per device class.","
5items":[{"label":"Bundles","title":"Versioned artifacts","copy":"Upload and track firmware artifacts per SKU."},{"label":"Inventory","title":"Version visibility","copy":"Firmware versions display in the device record."},{"label":"Events","title":"Change tracking","copy":"Rollouts are recorded in event history."}]},"rollouts":{"title":"Staged rollouts","subtitle":"Promote firmware by lab, pilot, and field cohorts.","items":[{"label":"Cohorts","title":"Targeted rollout","copy":"Stage releases by cohort rather than manual lists."},{"label":"Signals","title":"Telemetry checks","copy":"Watch metrics as rollout progresses."},{"label":"Ops","title":"Incident correlation","copy":"Spot regressions quickly in ops workflows."}]}}},"moduleStatusPages":{"eyebrow":"Module - Status pages","title":"Keep customers informed during a service issue.","lead":"Publish customer-facing service status and incident updates. Give customers a place to check progress while your team investigates.","highlights":["Show customer-facing health from service endpoints, heartbeats, user-impact monitors, and incidents.","Publish incident and maintenance context from the ops workflow while keeping internal detail private.","Use pages, custom domains, markdown guidance, and history as support and trust evidence."],"sections":{"customer-answer":{"title":"A useful first answer for customers","subtitle":"When something feels wrong, customers need to know whether it is you, them, or a planned change.","details":["Build separate pages for products, regions, enterprise accounts, or support tiers.","Show only customer-safe health signals while keeping internal diagnostics in Dataplicity.","Give support a single link to share before a ticket turns into a status chase."],"items":[{"label":"Endpoints","title":"Service availability","copy":"Expose API, portal, tunnel, or integration checks from the same endpoint monitors ops already watches."},{"label":"Heartbeats","title":"Field connectivity","copy":"Show whether critical gateways, sites, or appliances are checking in without exposing device consoles."},{"label":"Impact","title":"Customer-facing state","copy":"Translate internal monitor failures into plain-language impact for the audiences affected."}]},"incident-comms":{"title":"Incident communication that follows ops","subtitle":"Give support and customer success a place to send customers while engineering works the problem.","details":["Open incidents can appear on the page when customers need visibility.","Resolved incidents create a timestamped record for follow-up conversations.","Markdown widgets add temporary guidance, workaround notes, or escalation instructions."],"items":[{"label":"Triage","title":"Decide what customers should see","copy":"Start from alerts, monitors, or customer reports, then publish only the safe summary."},{"label":"Updates","title":"Keep everyone aligned","copy":"Post clear progress notes that support, account teams, and customers can all reference."},{"label":"Resolution","title":"Close the loop","copy":"Preserve timestamps, mitigation notes, and recovery evidence for post-incident reviews."}]},"published-surface":{"title":"Publish under your brand","subtitle":"Make the page feel like part of your customer experience, not a bolt-on monitoring tool.","details":["Custom domains put status pages on your own customer-facing URL.","Public visibility can be controlled per page so drafts and internal views stay hidden.","Pages can sit beside dashboards, displays, docs, and portals for deeper customer context."],"items":[{"label":"Pages","title":"Audience-specific pages","copy":"Create pages for products, regions, customer cohorts, or named accounts instead of one noisy global page."},{"label":"Domains","title":"Customer-ready URLs","copy":"Map pages to a trusted domain such as status.example.com with verification tracked in Dataplicity."},{"label":"Context","title":"Docs and dashboards","copy":"Link status to customer docs or read-only dashboards when a simple green/red answer is not enough."}]},"customer-workflows":{"title":"Fit it into daily customer work","subtitle":"A status page is most useful when it reduces repeated conversations across support, success, and enterprise reviews.","items":[{"label":"Support","title":"Deflect avoidable tickets","copy":"Use the status page as the first support response when customers ask whether a service, site, or integration is healthy.","list":["Link it from support macros and help-center articles.","Confirm live monitor state before escalating.","Add customer-safe workaround notes while the incident is active."]},{"label":"Success","title":"Explain reliability with evidence","copy":"Bring uptime history and resolved
5incidents into account reviews instead of reconstructing what happened from chat logs.","list":["Review incidents by product or customer-facing surface.","Show maintenance windows and recovery times.","Pair with dashboards for deeper operational proof."]},{"label":"Operations","title":"Communicate without leaving ops","copy":"Keep the public story attached to the monitors, incidents, and device context your team already uses.","list":["Use widgets backed by existing monitors.","Separate internal diagnosis from customer-safe updates.","Keep a reusable trail for retrospectives and compliance evidence."]}]}}},"moduleDashboards":{"eyebrow":"Module - Dashboards","title":"Give customers a view of the metrics that matter.","lead":"Share read-only metric dashboards with the intended audience. Choose the data and access settings appropriate to the customer.","highlights":["Dashboard Designer curates metrics for audiences.","Displays publish read-only dashboards for kiosks.","Data sources connect device and service signals."],"sections":{"designer":{"title":"Dashboard designer","subtitle":"Build dashboards for customers or internal teams.","items":[{"label":"Designer","title":"Dashboard builder","copy":"Compose dashboards from data sources."},{"label":"Scopes","title":"Audience scoping","copy":"Limit dashboards to customer or team views."},{"label":"Publishing","title":"Read-only outputs","copy":"Publish dashboards without exposing credentials."}]},"displays":{"title":"Displays","subtitle":"Publish dashboards to wall displays or customer portals.","details":["Display tokens are read-only and scoped.","Wallboards auto-refresh without logins.","Data sources stay aligned with ops telemetry."],"items":[{"label":"Displays","title":"TV output","copy":"Run dashboards on NOC screens or customer sites."},{"label":"Data","title":"Data sources","copy":"Drive dashboards with device metrics and logs."},{"label":"Access","title":"Read-only delivery","copy":"Publish dashboards without user accounts."}]}}},"moduleSecurityActivity":{"eyebrow":"Module - Security activity","title":"Review who accessed your fleet.","lead":"Review sign-ins, access changes and device session events. Remote session opens are recorded; terminal contents and keystrokes are not.","highlights":["Security activity logs auth and admin events.","Detections surface suspicious behavior.","Audit trails stay tied to the same org context."],"sections":{"activity":{"title":"Security activity timeline","subtitle":"See auth events and admin actions in one timeline.","items":[{"label":"Auth","title":"Login visibility","copy":"Track logins and token usage."},{"label":"Admin","title":"Admin changes","copy":"Monitor role changes and policy updates."},{"label":"Audit","title":"Exportable logs","copy":"Use activity logs for compliance evidence."}]},"detections":{"title":"Security detections","subtitle":"Detect suspicious activity without a separate SIEM.","items":[{"label":"Detections","title":"Suspicious access","copy":"Detect unexpected access patterns."},{"label":"Ops","title":"Incident workflow","copy":"Tie detections into incident response."},{"label":"Policy","title":"Access policy checks","copy":"Enforce policy when detections trigger."}]}}},"moduleTerminal":{"eyebrow":"Module - Linux remote terminal","title":"Open a remote Linux terminal in your browser.","lead":"Reach an online device through its outbound Dataplicity agent connection. No inbound SSH port or customer VPN is needed. The device must be able to reach Dataplicity under the customerâs outbound network policy.","highlights":["Open a shell from the device record.","Use role-based access for your team.","Session opens are recorded; terminal contents and keystrokes are not."],"requirements":{"title":"Remote terminal requirements","subtitle":"Install the Dataplicity agent on an internet-connected Linux device. The remote terminal uses its outbound connection, so you do not need an inbound port, VPN, static IP, DynDNS, or on-site network access.","items":[{"label":"Port forwarding"},{"label":"VPN"},{"label":"Static IPs"},{"label":"Edge device"},{"label":"Internet access"},{"label":"DynDNS"},{"label":"Firewall exceptions"},{"label":"On-site visits"}
5],"benefits":[{"title":"Works anywhere","copy":"If the device can reach the internet, you can reach it too, even behind firewalls or private networks."},{"title":"Easy access via browser","copy":"Log in, pick a device, and open the remote terminal or web UI right in your browser."},{"title":"Simple and secure","copy":"Connections are outbound-only and encrypted, so you don't need VPN clients or firewall changes."}]},"sections":{"access":{"title":"Secure access","subtitle":"Open shells from the same UI used for alerts and inventory.","items":[{"label":"Shell","title":"Remote access","copy":"Launch a secure shell over the outbound connection."},{"label":"Context","title":"Device metadata","copy":"Stay in context with inventory and logs."},{"label":"Policy","title":"Access controls","copy":"Restrict access by role and cohort."}]},"audit":{"title":"Audit history","subtitle":"Review access events. Terminal contents and keystrokes are not recorded.","items":[{"label":"Audit","title":"Access record","copy":"See who opened access and which device actions they invoked."},{"label":"Incidents","title":"Incident notes","copy":"Record your investigation and resolution steps in incident notes."},{"label":"Security","title":"Access review","copy":"Review terminal usage in security activity."}]}}},"moduleScheduledTasks":{"eyebrow":"Module - Scheduled tasks","title":"Schedule recurring work on your devices.","lead":"Run maintenance commands on a schedule and review the recorded results. Choose the intended devices and test the command before applying it more widely.","highlights":["Scheduled tasks run across cohorts.","Task history is tracked in event logs.","Tasks live alongside fleet operations."],"sections":{"tasks":{"title":"Recurring jobs","subtitle":"Automate routine tasks across devices.","items":[{"label":"Maintenance","title":"Recurring jobs","copy":"Rotate logs, check health, or publish reports."},{"label":"Scope","title":"Cohort targeting","copy":"Run tasks for the right cohorts."},{"label":"Ops","title":"Operational context","copy":"Tasks run alongside inventory and ops workflows."}]},"audit":{"title":"Task history","subtitle":"Know what ran, where, and when.","items":[{"label":"History","title":"Execution logs","copy":"Track each run in execution logs."},{"label":"Alerts","title":"Failure visibility","copy":"Surface failures in execution logs."},{"label":"Security","title":"Audit support","copy":"Export task history for compliance."}]}}},"moduleProjectBoards":{"eyebrow":"Module - Project Boards","title":"Keep device work and its owner in view.","lead":"Track tasks on a shared board and link work to the relevant devices and incidents. Help the next person understand what needs doing and what has already happened.","highlights":["Boards and cards live next to inventory, logs, and incidents.","Link devices, events, incidents, and monitors on any card.","Initiatives and projects derive status from linked board cards."],"sections":{"boards":{"title":"Boards for ops delivery","subtitle":"Organise corridor and site work without leaving the ops console.","items":[{"label":"Kanban","title":"Columns that match your process","copy":"Backlog, investigating, waiting on site, done â or your own lists."},{"label":"Cards","title":"Checklists and labels","copy":"Track checklists, labels, and tagged users on each card."},{"label":"Archive","title":"Keep boards scannable","copy":"Archive finished work to keep active boards focused."}]},"fleet-links":{"title":"Wired to Dataplicity","subtitle":"Cards can link to devices, events, incidents, monitors, docs, and URLs.","items":[{"label":"Devices","title":"Live device links","copy":"Jump from a card to the freezer sensor, gateway, or kiosk."},{"label":"Add to board","title":"Start from fleet surfaces","copy":"Create a card from device, incident, or event surfaces."},{"label":"Visibility","title":"Internal or private","copy":"Restrict private boards to groups whose board access tags match a board label."}]}}},"comparisonGreengrass":{"eyebrow":"Comparison - AWS Greengrass","title":"Dataplicity + Greengrass: runtime plus control plane.","lead":"Greengrass runs workloads on devices; Dataplicity adds fleet identity, ops workflows, and customer surfaces.","highlights":["Greengrass handles runtime and deployment.","Dataplicity handles inventory, alerts, incidents, and customer portals.","Both can run side-by-side without replacing existing workloads."],"sections":{"greengrass-strengths":{"title":"What Greengrass covers","subtitle":"Edge runtime and workload orchestration.","items":[{"label":"Runtime","title":"Edge components","copy":"Deploy and manage device-side workloads."},{"label":"IoT","title":"AWS IoT Core","copy":"Leverage AWS IoT Core for device messaging."}
5,{"label":"OTA","title":"Workload updates","copy":"Ship workload updates to edge devices."}]},"prelude-layer":{"title":"What Dataplicity adds","subtitle":"Control plane, fleet ops, and customer visibility.","details":["Inventory, ownership, and warranty live in Dataplicity.","Ops workflows unify alerts, logs, and incidents.","Customer surfaces publish from the same data."],"items":[{"label":"Identity","title":"Inventory + ownership","copy":"Track devices, customers, and warranties."},{"label":"Ops","title":"Logs + incidents","copy":"Operate fleets with unified telemetry and incident response."},{"label":"Surfaces","title":"Status + dashboards","copy":"Expose customer-facing uptime and dashboards."}]},"integration":{"title":"How they integrate","subtitle":"Keep Greengrass for runtime; pipe signals into Dataplicity.","details":["Runtime stays in Greengrass; Dataplicity stays the control plane.","Device IDs map cleanly to Dataplicity inventory.","Telemetry and alerts flow into Dataplicity ops."],"items":[{"label":"Signals","title":"Telemetry and logs","copy":"Send Greengrass metrics and logs into Dataplicity."},{"label":"Identity","title":"Device mapping","copy":"Map Greengrass device IDs to Dataplicity inventory."},{"label":"Ops","title":"Incident workflow","copy":"Route alerts through Dataplicity ops workflows."}]}},"cta":{"title":"Evaluate Dataplicity alongside Greengrass.","copy":"Install the agent and see inventory, logs, and alerts in one place.","primaryLabel":"Get install command","secondaryLabel":"Back to comparisons"}},"comparisonBalena":{"eyebrow":"Comparison - balena","title":"Dataplicity + balena: fleet ops beyond container updates.","lead":"balena handles container lifecycle; Dataplicity adds fleet identity, incident workflows, and customer surfaces.","highlights":["balena handles container scheduling and OTA.","Dataplicity handles inventory, ops, and customer comms.","Both can run side-by-side without rewriting fleets."],"sections":{"balena-strengths":{"title":"What balena covers","subtitle":"Container runtime and update orchestration.","items":[{"label":"Containers","title":"Runtime orchestration","copy":"Deploy and manage container workloads."},{"label":"Updates","title":"OTA updates","copy":"Ship container updates across fleets."},{"label":"Fleet","title":"Device management","copy":"Basic fleet management for containers."}]},"prelude-layer":{"title":"What Dataplicity adds","subtitle":"Control plane, telemetry, incidents, and customer surfaces.","details":["Inventory, ownership, and warranty live in Dataplicity.","Ops workflows unify alerts, logs, and incidents.","Customer surfaces publish from the same data."],"items":[{"label":"Identity","title":"Inventory + ownership","copy":"Track customers, warranties, and entitlements."},{"label":"Ops","title":"Logs + incidents","copy":"Unified logs, alerts, and incident response."},{"label":"Surfaces","title":"Status + dashboards","copy":"Customer-facing status pages and dashboards."}]},"integration":{"title":"How they integrate","subtitle":"Keep balena for containers; pipe fleet signals into Dataplicity.","details":["Runtime stays in balena; Dataplicity stays the control plane.","Device IDs map cleanly to Dataplicity inventory.","Telemetry and alerts flow into Dataplicity ops."],"items":[{"label":"Signals","title":"Telemetry and logs","copy":"Stream balena device signals into Dataplicity."},{"label":"Identity","title":"Device mapping","copy":"Tie balena device IDs to Dataplicity inventory."},{"label":"Ops","title":"Incident workflow","copy":"Route alerts through Dataplicity incident response."}]}},"cta":{"title":"Run Dataplicity alongside balena.","copy":"Install the Dataplicity agent and compare operational workflows.","primaryLabel":"Get install command","secondaryLabel":"Back to comparisons"}},"comparisonStatusStack":{"eyebrow":"Comparison - Statuspage + Grafana + VPN","title":"Dataplicity replaces a fragmented ops stack.","lead":"Instead of stitching Statuspage, Grafana, and VPN access, Dataplicity keeps ops, incidents, and customer comms together.","highlights":["Dataplicity unifies logs, alerts, and incidents.","Status pages read from the same data as ops.","Remote access is built-in, not a separate VPN.","Customer dashboards ship without extra tooling."],"sections":{"stack-pain":{"title":"Where the stack breaks","subtitle":"Separate tools create inconsistent data and slow response.","items":[{"label":"Monitoring","title":"Disconnected telemetry","copy":"Metrics and logs live in separate tools."},{"label":"Incidents","title":"Manual status updates","copy":"Status updates require copy/paste between systems."},{"label":"Access","title":"VPN overhead","copy":"Remote access is a separate VPN workflow."}]},"prelude":{"title":"What Dataplicity replaces","subtitle":"One workflow from telemetry to customer status.","details":["Ops and customer comms share a single data source.","Incidents automatically update status surfaces.","No copy/paste between monitoring and status tools."],"items":[{"label":"Ops","title":"Unified telemetry","copy":"Metrics, logs, and events in one view."},{"label":"Incidents","title":"Incident response","copy":"Alert routing and notes in one timeline."},{"label":"Surfaces","title":"Status pages","copy":"Customer status shares the same data source."}]},"access":{"title":"Remote access built-in","subtitle":"Terminal access ships with the platform.","details":["Outbound-only access keeps infrastru
5cture closed.","Session opens and device actions are retained for audit.","Access links directly to incident context."],"items":[{"label":"Terminal","title":"Secure shell","copy":"Remote access without VPN tunnels."},{"label":"Audit","title":"Audit history","copy":"Session opens and device actions are tracked and reviewable."},{"label":"Ops","title":"Incident context","copy":"Access is tied to alerts and incidents."}]}},"cta":{"title":"Replace the fragmented stack.","copy":"Install Dataplicity and see the unified ops workflow.","primaryLabel":"Get install command","secondaryLabel":"Back to comparisons"}},"resourceDeployment":{"eyebrow":"Resource - Deployment guide","title":"Connect and check your first Linux device.","lead":"Run the agent install command on a device you can access. Confirm its check-in, check the device record and prove remote access before repeating the setup across a fleet.","highlights":["Install the agent using your generated command.","Confirm that the device checks in and appears in inventory.","Check the signals required for your use case.","Test the relevant alert routing before production."],"sections":{"install":{"title":"Install and register","subtitle":"Use the install command from the login flow.","items":[{"label":"Install","title":"Agent install","copy":"Run the provisioning command for the first device."},{"label":"Identity","title":"Inventory record","copy":"Device appears in inventory with default metadata."},{"label":"Provisioning","title":"Device class","copy":"Assign the device to the right class and cohort."}]},"validate":{"title":"Validate signals","subtitle":"Confirm metrics, logs, and events are arriving.","details":["Confirm telemetry, logs, and events in one place.","Check that cohorts and tags are correct.","Validate alert routing before production."],"items":[{"label":"Telemetry","title":"Ops dashboard","copy":"Confirm metrics stream in for the device."},{"label":"Logs","title":"Log search","copy":"Tail syslog to ensure logs are flowing."},{"label":"Events","title":"Event history","copy":"See install and heartbeat events in the timeline."}]},"alerts":{"title":"Set the first alert","subtitle":"Create a heartbeat or threshold alert to test response.","items":[{"label":"Alert rules","title":"Create alerts","copy":"Add threshold or heartbeat alerts for the cohort."},{"label":"Routing","title":"On-call routing","copy":"Verify alerts route to the correct rota."},{"label":"Incidents","title":"Incident notes","copy":"Capture mitigation steps for audit."}]}},"cta":{"title":"Deploy the first managed device.","copy":"Install the agent to get the first unit online. For agent options, device APIs, and day-two operations, open the documentation.","primaryLabel":"Get install command","secondaryLabel":"Open documentation"}},"resourceIntegrations":{"eyebrow":"Playbook - Integrated workflows","title":"Without one platform, you stitch five tools - or hear about it from a customer.","lead":"Individual sites flake all the time. When every currently-running Starlink device in the fleet drops at once, that is a different class of fault - and bolted-together stacks almost never alert on it. Dataplicity makes that fleet condition a first-class workflow.","highlights":[],"sections":{"scenario":{"title":"You already know this story","subtitle":"The night where every tool is âworking,â and somehow you still do not know what is true.","items":[{"title":"How did we miss the alert?","copy":"Nobody fired on the fleet condition. Host checks and single-site uptime never asked whether every currently-running Starlink device dropped together. Customers found it first."},{"title":"Why is the canary fine?","copy":"Pingdom is green on the one box you remembered to watch. Everything else on that network is dark. The canary did its job. It just was not the job you needed."},{"title":"PagerDuty will not stop","copy":"Your phone has been bleating for an hour. Half of it is noise, half of it is the same symptom with a different name, and you cannot tell which is a false alarm without opening three other products."},{"title":"Who forgot Statuspage?","copy":"incident.io is open. The war room is loud. Customers are already posting. Somewhere between the pager and the shell, nobody updated the page - again."}]},"device-hunt":{"title":"Then it narrows to one device","subtitle":"The fleet question becomes a person question - and the stack still does not answer.","items":[{"title":"Where is it?","copy":"You have a serial, or a hostname, or a guess from a ticket. Inventory is in another tab. The map is somewhere else. The shell needs a different login again."},{"title":"Who owns it, and who do I call?","copy":"Customer, site, account manager, on-call engineer - the ownership chain is not on the alert. It is in a CRM, a spreadsheet, or someone's head."},{"title":"What happened yesterday?","copy":"Maintenance history, last healthy check-in, recent firmware, last remote session. Without that timeline you are debugging the present with no memory."}]},"integrated-response":{"title":"One designed story instead","subtitle":"Same device record from the fleet cohort through the phone, the shell, the incident, and the status customers see.","items":[{"title":"The fleet condition is the alert","copy":"Among devices running right now, the whole Starlink cohort dropped. That is the page - not a lonely canary, and not a customer tweet."},{"title":"The phone opens into context","copy":"Affected devices, ownership, and site path are already on the notification. You do not rebuild the outage from scratch in the next tool."},{"title":"The shell, the incident, and the status stay together","copy":"Endpoint monitors beside the terminal. The war room on the same record. Statuspage language that matches what engineering already knows - because it is the same story."}]}},"cta":{"title":"Run the outage in one designed workflow.","copy":"Install the agent and see fleet monitors, phone alerts, terminals, and customer status share one device record.","primaryLabel":"Get install c
5ommand","secondaryLabel":"Back to playbooks"}},"resourceRunbooks":{"eyebrow":"Resource - Runbooks","title":"Decide whether a field fault needs a site visit.","lead":"Work through a support scenario using device health, collected logs and customer context. Record what you checked, the action taken and the evidence needed to verify the result.","highlights":["Start from the reported fault and affected devices.","Review the evidence available before choosing an action.","Record the result and any follow-up needed."],"sections":{"incident-runbooks":{"title":"Incident runbooks","subtitle":"Keep mitigation steps alongside alerts and logs.","items":[{"label":"Incidents","title":"Incident notes","copy":"Attach runbook steps to each incident."},{"label":"Logs","title":"Evidence","copy":"Keep log evidence next to runbook steps."},{"label":"Audit","title":"History","copy":"Preserve the response history for audits."}]},"maintenance":{"title":"Maintenance playbooks","subtitle":"Standardize routine maintenance across fleets.","details":["Playbooks link tasks, scripts, and docs together.","Reuse maintenance steps across cohorts.","Outcomes stay visible in ops history."],"items":[{"label":"Tasks","title":"Scheduled tasks","copy":"Automate recurring maintenance steps."},{"label":"Scripts","title":"Saved scripts","copy":"Reuse scripts across cohorts."},{"label":"Docs","title":"Documentation","copy":"Publish playbooks alongside the ops UI."}]}},"cta":{"title":"Connect runbooks to ops.","copy":"Keep incident response steps tied to telemetry and logs.","primaryLabel":"Get install command","secondaryLabel":"Back to resources"}},"resourceFaq":{"eyebrow":"Playbook - FAQ","title":"Check the requirements before you connect.","lead":"Answers to common questions about installing the agent, reaching devices and fitting Dataplicity into your existing product and support process.","highlights":["What Dataplicity adds beyond a runtime.","How provisioning, logs, and remote access tie to one device record.","What data is collected and how access is governed.","Which playbooks to run first with a real device."],"sections":{"faq-core":{"title":"Platform fit","subtitle":"How Dataplicity sits alongside Greengrass, balena, systemd, containers, or your own supervisor.","items":[{"title":"Does Dataplicity replace our runtime?","copy":"No. Keep your existing runtime and application stack. Dataplicity provides the operational layer: inventory, logs, alerts, incidents, remote access, customer context, and audit history tied to each device record."},{"title":"Which stacks does it work with?","copy":"Any Linux device that can run the agent and reach the internet. Most teams pair Dataplicity with Greengrass, balena, systemd services, Docker, or custom supervisors â the agent adds fleet identity and ops without replacing how you ship software."},{"title":"What does the CLI give us that a dashboard does not?","copy":"The CLI lets on-call move from an alert to the exact device, customer, class, logs, event history, and remote diagnostic command in one flow â without clicking through separate tools."},{"title":"What data does Dataplicity collect?","copy":"Device identity, status, heartbeats, logs, events, and operator actions you configure â all tied to customer, class, warranty, and incident context. You control what is forwarded from customer applications and backend services."}]},"faq-deployment":{"title":"Deployment and provisioning","subtitle":"From the first pilot device to repeatable factory or field rollout.","items":[{"title":"How do we onboard the first device?","copy":"Run the install command on a device, confirm it appears in inventory with a recent heartbeat, then attach class and customer metadata before scaling the same process to production cohorts."},{"title":"Can we embed the agent in factory images?","copy":"Yes. Bake the install command or provisioning key into image build, Mender, balena fleet deploy, or your own first-boot script. Device classes carry per-SKU defaults so each product line gets the right tags and collectors automatically."},{"title":"How do device classes and customer context propagate?","copy":"Classes define provisioning defaults, log collectors, and alert templates. Customer and site metadata attach to each device record so support, warranty, and status pages can scope evidence correctly from day one."}]},"faq-operations":{"title":"Day-two operations","subtitle":"Logs, remote access, and fleet-wide patterns after devices are in the field.","items":[{"title":"How does remote access work without VPN or inbound ports?","copy":"The agent opens an outbound connection to Dataplicity. Support opens a secure shell or forwarded port from the browser â no static IP, DynDNS, or firewall exceptions on the device."},{"title":"How do logs tie back to device identity?","copy":"Collectors and ingest paths attach logs to class, customer, and device records. Search and tail operations scope by cohort instead of dumping IoT syslog into a server-centric log platform."},{"title":"What if many devices go offline at once?","copy":"Group by network tag, region, or customer before dispatching technicians. Heartbeat alerts plus cohort filters help distinguish provider outages from isolated hardware faults â see the network outages playbook for a worked example."}]}
5,"faq-security":{"title":"Security and access","subtitle":"Remote access and evidence should be governed from the same platform.","items":[{"title":"Do you support SSO, MFA, and SCIM?","copy":"Yes. SAML SSO, MFA enforcement, and SCIM provisioning are built into org settings so fleet access follows the same policies as the rest of your tooling."},{"title":"Can we restrict CLI and terminal access?","copy":"Yes. CLI and terminal actions are governed by org roles and group scopes, so responders get the access they need without sharing VPN credentials or SSH keys."},{"title":"Is there an audit trail?","copy":"Yes. Security activity, remote-access and device-action records, incident notes, and event history provide evidence for support, warranty, and compliance review. Sessions are recorded as access events rather than keystroke transcripts."},{"title":"Can customers see status without internal access?","copy":"Yes. Status pages and read-only dashboards publish uptime and incident updates from live monitors â customers get transparency without credentials to your internal ops tools."}]},"faq-start":{"title":"Getting started","subtitle":"A practical path from evaluation to repeatable operations.","items":[{"title":"Where should we start?","copy":"Install one real device, confirm inventory and metadata, then tail customer-app logs and open a remote session. That validates the management channel before you scale provisioning."},{"title":"Which playbooks should we read next?","copy":"Use the deployment guide for first-device rollout, the integration guide to wire app logs into the device model, the incident runbooks for on-call response, and the case-study playbooks for network outages, log analytics, and customer warranty workflows."}]}},"cta":{"title":"Try the CLI flow with a real device.","copy":"Start with an install command, then validate inventory, logs, alerts, and remote access from one device record.","primaryLabel":"Get install command","secondaryLabel":"Back to playbooks"}}}}`),tk={marketing:ek},nk={legalIndex:{title:"The legal stuff",intro:"Our terms and policies cover things like how we use your data, what you can expect from us, and what we expect from you in return.",disclaimer:"It's not an exciting read, but we have to do it to protect you and to protect ourselves, and to ensure we're able to provide you with the best service we can for a long time to come.",terms:"Terms & conditions",privacy:"Privacy policy"},comparison:{ctaBody:"Enter your email, copy the install command, and run Dataplicity next to your existing tooling today. You'll see the first device in the default class in minutes.",heroLead:"Dataplicity is the integrated workflow for OEM fleets: inventory, firmware, security, support, and customer trust in one system.",knot:{runtimeConsoles:"Runtime and remote-access consoles"},price:{annualSavings:"Annual savings",enterpriseStack:"Enterprise stack",note:"Prices reflect publicly posted enterprise tiers as of Dec 2025. Prelude charges on connected devices, so SSO, SCIM, and additional operators do not change the bill.",preludeStack:"Prelude (500 devices, unlimited SSO)",subtitle:"A five-person team on enterprise seats usually runs three vendors before they ever touch devices. Prelude folds that spend into one control plane.",title:"Prelude replaces PagerDuty + Pingdom + Statuspage"},security:{note:"SAML, SCIM, domain claims, MFA, and complete audit trails ship on every Prelude organisation â no per-user surcharge.",subtitle:"SSO is how OEM teams keep fleets safe, so Prelude treats it as table stakes instead of an enterprise upsell.",title:"Identity and safety are baseline requirements"}},pricingCalculator:{deviceTierAriaLabel:"Show device tier pricing breakdown",deviceTierRange:"{min}-{max} devices",deviceTierRangePlus:"{count}+ devices",summary:{fixedTotalTitle:"Monthly total"},deviceTierTooltip:{freeTitle:"Free plan device pricing",tierTitle:"Device tier calculation",freeIntro:"Free includes a single device.",tierIntro:"{count} devices are priced across tiers:"}}},ok={app:nk},sk={save:"Save",cancel:"Cancel",delete:"Delete",edit:"Edit",create:"Create",loading:"Loading...",error:"Error",success:"Success"},rk={language:"Language",switchLanguage:"Switch language"},ik={required:"Required"},ak={login:"Login",register:"Register",logout:"Logout",username:"Username",password:"Password",email:"Email",confirmPassword:"Confirm Password"},lk={title:"Devices",create:"Create Device",edit:"Edit Device",delete:"Delete Device",name:"Device Name",status:"Status",network:"Network",location:"Location",description:"Description",form:{title:{create:"Create Device",edit:"Edit Device"},nameLabel:"Device Name",namePlaceholder:"Enter device name",networkLabel:"Network",networkPlaceholder:"Select network",deviceClassLabel:"Device Class",deviceClassPlaceholder:"Select device class",locationLabel:"Location",locationPlaceholder:"e.g. Rack A1",tagsLabel:"Tags",tagsPlaceholder:"Add tags",descriptionLabel:"Description",descriptionPlaceholder:"Optional description",outputPortsTitle:"Output Ports",portTitle:"Port {number}",portEnabled:"Enabled",portName:"Name",portDescription:"Description",saveEdit:"Save Changes",saveCreate:"Create Device",loadError:"Failed to load form data",saveSuccessEdit:"Device updated successfully",saveSuccessCreate:"Device created successfully",saveErrorEdit:"Failed to update device",saveErrorCreate:"Failed to create device"}},ck={title:"Networks",create:"Create Network",edit:"Edit Network",delete:"Delete Network",name:"Network Name",description:"Description"},uk={title:"Alerts",active:"Active Alerts",history:"Alert History",severity:"Severity",message:"Message",timestamp:"Timestamp"},dk={productApplications:{presentation:{businessObjectLabel:"What should this page show?",businessObjectHint:"Choose the business data customers should see. Dataplicity keeps the underlying model mapping for you.",groupByLabel:"Group by",groupByHint:"Choose the field that defines the stages or columns customers see.",dateToUseLabel:"Date to use",dateToUseHint:"Choose which date places each item on the timeline.",whoCanSeeRoleKeys:"Who can see this? (role keys)"},behaviour:{actionIntentLabel:"What should this action do?",actionIntentHint:"Choose the outcome. Dataplicity keeps the execution type underneath.",actionImplementationLabel:"How should it work?",actionImplementationHint:"This choice only appears when the same outcome can be implemented in more than one way.",businessObjectLabel:"Business object",advancedActionDefinition:"Advanced action definition",advancedActionHint:"Engine type and raw action JSON are available here for unusual integrations and troubleshooting.",processOutcomePrompt:"What should happen?",processApprovalOutcome:"Ask for approval",processApprovalSeparateHint:"Configure approval rules on the Action that starts or advances this process.",addAdvancedStep:"Advanced step",addAdvancedStepHint:"Add a runtime primitive directly.",generatedDeviceRecoveryHint:"Dataplicity waits for the device result and sends failures or timeouts to Needs attention automatically.",generatedWaitForDeviceHint:"This wait is generated
5with the device Action so acknowledgement, failure and timeout are handled durably.",generatedNeedsAttentionHint:"Device failures and timeouts arrive here instead of silently ending the process.",advancedProcessStep:"Advanced step definition",advancedProcessStepLabel:"Advanced step"}}},fk={common:sk,i18n:rk,validation:ik,auth:ak,devices:lk,networks:ck,alerts:uk,app:dk},pk=["en","es","de","pl","pt","zh","ko"],AS=[{value:"en",label:"English"},{value:"es",label:"Español"},{value:"de",label:"Deutsch"},{value:"pl",label:"Polski"},{value:"pt",label:"Português (Portugal)"},{value:"zh",label:"䏿"},{value:"ko",label:"íêµì´"}],Hn="en",Bf="locale";function Ms(e){const t=(e||"").trim().toLowerCase();return t&&pk.find(o=>t===o||t.startsWith(`${o}-`))||Hn}function hk(){if(typeof window<"u"){try{const t=localStorage.getItem(Bf);if(t)return Ms(t)}catch{}const e=typeof navigator<"u"?navigator.languages&&navigator.languages[0]||navigator.language:null;if(e)return Ms(e)}return Hn}function PS(e){const t=Ms(e);if(typeof window<"u")try{localStorage.setItem(Bf,t)}catch{}return t}function Wf(e,t,n=ok,o=fk){const s={...e.marketing,pages:{...e.marketing?.pages||{},...t.marketing?.pages||{}},navChildren:{...e.marketing?.navChildren||{},...t.marketing?.navChildren||{}}},r=n.app??{};return{...e,marketing:s,app:{legalIndex:r.legalIndex,comparison:r.comparison,pricingCalculator:r.pricingCalculator},i18n:o.i18n??{language:"Language",switchLanguage:"Switch language"}}}const mk={es:()=>Promise.all([pe(()=>import("./CJllqPz2.js"),[],import.meta.url),pe(()=>import("./BXtuATlF.js"),[],import.meta.url),pe(()=>import("./BUqbvKGb.js"),[],import.meta.url),pe(()=>import("./DAcLxTlS.js"),[],import.meta.url)]),de:()=>Promise.all([pe(()=>import("./DUCxKcNM.js"),[],import.meta.url),pe(()=>import("./OQU5Tryf.js"),[],import.meta.url),pe(()=>import("./B5hDJgIW.js"),[],import.meta.url),pe(()=>import("./BzFy96jM.js"),[],import.meta.url)]),pl:()=>Promise.all([pe(()=>import("./P4ykmwNu.js"),[],import.meta.url),pe(()=>import("./B6-Lxxqg.js"),[],import.meta.url),pe(()=>import("./ixjmIN8z.js"),[],import.meta.url),pe(()=>import("./vzRXC1DL.js"),[],import.meta.url)]),pt:()=>Promise.all([pe(()=>import("./CVcuQWqs.js"),[],import.meta.url),pe(()=>import("./mKaY402N.js"),[],import.meta.url),pe(()=>import("./CKhVmABT.js"),[],import.meta.url),pe(()=>import("./XYhceMne.js"),[],import.meta.url)]),zh:()=>Promise.all([pe(()=>import("./D8T_9QEE.js"),[],import.meta.url),pe(()=>import("./A2lzdZXZ.js"),[],import.meta.url),pe(()=>import("./KJcANfWk.js"),[],import.meta.url),pe(()=>import("./CzTU941R.js"),[],import.meta.url)]),ko:()=>Promise.all([pe(()=>import("./6mo-3rgE.js"),[],import.meta.url),pe(()=>import("./B63hvXo2.js"),[],import.meta.url),pe(()=>import("./B8s6nHfW.js"),[],import.meta.url),pe(()=>import("./BL6YpjYv.js"),[],import.meta.url)])},Cc=new Set(["en"]);let to=null;function gk(e){to=e}function yk(){return B_({legacy:!1,globalInjection:!0,locale:Hn,fallbackLocale:Hn,messages:{en:Wf(Z_,tk)}})}async function vk(e){const t=Ms(e);if(!to||Cc.has(t))return t;const n=mk[t];if(!n)return Hn;const[o,s,r,i]=await n();return to.global.setLocaleMessage(t,Wf(o.default,s.default,r.default,i.default)),Cc.add(t),t}async function bk(){if(!to)return;const e=hk();if(e===Hn){to.global.locale.value=e;return}await vk(e),to.global.locale.value=e}const wk=St({name:"marketing-i18n",enforce:"pre",setup(e){const t=yk();gk(t),e.vueApp.use(t);{const n=()=>{bk()};"requestIdleCallback"in window?window.requestIdleCallback(n,{timeout:2e3}):window.setTimeout(n,1)}}}),Ii=globalThis.requestIdleCallback||(e=>{const t=Date.now(),n={didTimeout:!1,timeRemaining:()=>Math.max(0,50-(Date.now()-t))};return setTimeout(()=>{e(n)},1)}),_k=globalThis.cancelIdleCallback||(e=>{clearTimeout(e)}),or=e=>{const t=Ae();t.isHydrating?t.hooks.hookOnce("app:suspense:resolve",()=>{Ii(()=>e())}):Ii(()=>e())},kk=St({name:"nuxt:payload",setup(e){const t=new Set;ot().beforeResolve(async(n,o)=>{const s=ca(n.path),r=s?sl(n.fullPath):n.path,i=s?sl(o.fullPath):o.path;if(r===i)return;const a=await Bl(r);if(a){for(const l of t)delete e.static.data[l];for(const l in a.data)l in e.static.data||t.add(l),e.static.data[l]=a.data[l]}}),or(()=>{e.hooks.hook("link:prefetch",async n=>{const{hostname:o}=new URL(n,window.location.href);o===window.location.hostname&&await Bl(n).catch(()=>{console.warn("[nuxt] Error preloading payload for",n)})}),navigator.connection?.effectiveType!=="slow-2g"&&setTimeout(la,1e3)})}}),Sk=St(()=>{const e=ot();or(()=>
5{e.beforeResolve(async()=>{await new Promise(t=>{setTimeout(t,100),requestAnimationFrame(()=>{setTimeout(t,0)})})})})}),Ek=St(e=>{let t;async function n(){let o;try{o=await la()}catch(s){const r=s;if(!("status"in r&&(r.status===404||r.status===403)))throw r}t&&clearTimeout(t),t=setTimeout(n,dl);try{const s=await $fetch(ta("builds/latest.json")+`?${Date.now()}`);s.id!==o?.id&&(e.hooks.callHook("app:manifest:update",s),t&&clearTimeout(t))}catch{}}or(()=>{t=setTimeout(n,dl)})});function Ck(e={}){const t=e.path||window.location.pathname,n=new URL(t,window.location.href);if(n.host!==window.location.host)throw new Error(`Cannot navigate to a URL with a different host: '${t}'.`);if(n.protocol&&Is(n.protocol))throw new Error(`Cannot navigate to a URL with '${n.protocol}' protocol.`);let o={};try{o=Ps(sessionStorage.getItem("nuxt:reload")||"{}")}catch{}if(e.force||o?.path!==t||o?.expires<Date.now()){try{sessionStorage.setItem("nuxt:reload",JSON.stringify({path:t,expires:Date.now()+(e.ttl??1e4)}))}catch{}if(e.persistState)try{sessionStorage.setItem("nuxt:reload:state",JSON.stringify({state:Ae().payload.state}))}catch{}window.location.pathname!==t?window.location.href=t:window.location.reload()}}const Tk=St({name:"nuxt:chunk-reload",setup(e){const t=ot(),n=po(),o=new Set;t.beforeEach(()=>{o.clear()}),e.hook("app:chunkError",({error:r})=>{o.add(r)});function s(r){const i=Ys(n.app.baseURL,r.fullPath);Ck({path:i,persistState:!0})}e.hook("app:manifest:update",()=>{t.beforeResolve(s)}),t.onError((r,i)=>{o.has(r)&&s(i)})}});function Ak(e){if(e?.__asyncLoader&&!e.__asyncResolved)return e.__asyncLoader()}async function Vf(e,t=ot()){const{path:n,matched:o}=t.resolve(e);if(!o.length||(t._routePreloaded||=new Set,t._routePreloaded.has(n)))return;const s=t._preloadPromises||=[];if(s.length>4)return Promise.all(s).then(()=>Vf(e,t));t._routePreloaded.add(n);for(const r of o){const i=r.components?.default;if(typeof i!="function")continue;const a=Promise.resolve(i()).catch(()=>{}).finally(()=>s.splice(s.indexOf(a),1));s.push(a)}await Promise.all(s)}const Pk=(...e)=>e.find(t=>t!==void 0);function Tc(e){let t=e.replace(/[\u0000-\u001f\s]+/g,"");for(;t.toLowerCase().startsWith("view-source:");)t=t.slice(12);const n=t.indexOf(":");return n>0&&Is(t.slice(0,n+1))?null:e}function Ik(e){const t=e.componentName||"NuxtLink";function n(r){return typeof r=="string"&&r.startsWith("#")}function o(r,i,a){const l=a??e.trailingSlash;if(!r||l!=="append"&&l!=="remove")return r;if(typeof r=="string")return us(r,l);const u="path"in r&&r.path!==void 0?r.path:i(r).path;return{...r,name:void 0,path:us(u,l)}}function s(r){const i=ot(),a=po(),l=ue(()=>!!ce(r.target)&&ce(r.target)!=="_self"),u=ue(()=>{const A=ce(r.to)||ce(r.href)||"";return typeof A=="string"&&nn(A,{acceptRelative:!0})}),c=Pa("RouterLink"),d=typeof c!="string"?c.useLink:void 0,p=ue(()=>{if(ce(r.external))return!0;const A=ce(r.to)||ce(r.href)||"";return typeof A=="object"?!1:A===""||u.value}),f=ue(()=>{const A=ce(r.to)||ce(r.href)||"";return p.value?A:o(A,i.resolve,ce(r.trailingSlash))}),b=p.value?void 0:d?.({...r,to:f,viewTransition:ce(r.viewTransition)}),_=ue(()=>{const A=ce(r.trailingSlash)??e.trailingSlash;if(!f.value||u.value||n(f.value)){const E=f.value;return typeof E=="string"?Tc(E):E}if(p.value){const E=typeof f.value=="object"&&"path"in f.value?ai(f.value):f.value,C=typeof E=="object"?i.resolve(E).href:E,h=typeof C=="string"?Tc(C):C;return h===null?null:us(h,A)}return typeof f.value=="object"?i.resolve(f.value)?.href??null:us(Ys(a.app.baseURL,f.value),A)});return{to:f,hasTarget:l,isAbsoluteUrl:u,isExternal:p,href:_,isActive:b?.isActive??ue(()=>f.value===i.currentRoute.value.path),isExactActive:b?.isExactActive??ue(()=>f.value===i.currentRoute.value.path),route:b?.route??ue(()=>i.resolve(f.value)),async navigate(A){_.value!==null&&await Yg(_.value,{replace:ce(r.replace),external:p.value||l.value})}}}return lt({name:t,props:{to:{type:[String,Object],default:void 0,required:!1},href:{type:[String,Object],default:void 0,required:!1},target:{type:String,default:void 0,required:!1},rel:{type:String,default:void 0,required:!1},noRel:{type:Boolean,default:void 0,required:!1},prefetch:{type:Boolean,default:void 0,required:!1},prefetchOn:{type:[String,Object],default:void 0,required:!1},noPrefetch:{type:Boolean,default:void 0,required:!1},activeClass:{type:String,default:void 0,required:!1},exactActiveClass:{type:String,default:void 0,required:!1},prefetchedClass:{type:String,default:void 0,required:!1},replace:{type:Boolean,default:void 0,required:!1},ariaCurrentValue:{type:String,default:void 0,required:!1},external:{type:Boolean,default:void 0,required:!1},custom:{type:Boolean,default:void 0,required:!1},trailingSlash:{type:String,default:void 0,required:!1}},useLink:s,setup(r,{slots:i}){const a=ot(),{to:l,href:u,navigate:c,isExternal:d,hasTarget:p,isAbsoluteUrl:f}=s(r),b=kt(!1),_=Qe(null),A=h=>{_.value=r.custom?h?.$el?.nextElementSibling:h?.$el};function E(h){return!b.value&&(typeof r.prefetchOn=="string"?r.prefetchOn===h:r.prefetchOn?.[h]??e.prefetchOn?.[h])&&(r.prefetch??e.prefetch)!==!1&&r.noPrefetch!==!0&&r.target!=="_blank"&&!Dk()}async function C(h=Ae()){if(b.value||u.value===null)return;b.value=!0;const m=typeof l.value=="string"?l.value:d.value?ai(l.value):a.resolve(l.value).fullPath,k=d.value?new URL(m,window.location.href).href:m;await Promise.all([h.hooks.callHook("link:prefetch",k).catch(()=>{}),!d.value&&!p.value&&Vf(l.value,a).catch(()=>{})])}if(E("visibility")){const h=Ae();let m,k=null;Mn(()=>{const S=Rk();or(()=>{m=Ii(()=>{_?.value?.tagName&&(k=S.observe(_.value,async()=>{k?.(),k=null,await C(h)}))})})}),fo(()=>{m&&_k(m),k?.(),k=null})}return()=>{if(!d.value&&!p.value&&!n(l.value)){const k={ref:A,to:l.value,activeClass:r.activeClass||e.activeClass,exactActiveClass:r.exactActiveClass||e.exactActiveClass,replace:r.replace,ariaCurrentValue:r.ariaCurrentValue,custom:r.custom};
5return r.custom||(E("interaction")&&(k.onPointerenter=C.bind(null,void 0),k.onFocus=C.bind(null,void 0)),b.value&&(k.class=r.prefetchedClass||e.prefetchedClass),k.rel=r.rel||void 0),ke(Pa("RouterLink"),k,i.default)}const h=r.target||null,m=Pk(r.noRel?"":r.rel,e.externalRelAttribute,f.value||p.value?"noopener noreferrer":"")||null;return r.custom?i.default?i.default({href:u.value,navigate:c,prefetch:C,get route(){if(!u.value)return;const k=new URL(u.value,window.location.href);return{path:k.pathname,fullPath:k.pathname,get query(){return Zi(k.search)},hash:k.hash,params:{},name:void 0,matched:[],redirectedFrom:void 0,meta:{},href:u.value}},rel:m,target:h,isExternal:d.value||p.value,isActive:!1,isExactActive:!1}):null:ke("a",{ref:_,href:u.value||null,rel:m,target:h,onClick:async k=>{if(!(d.value||p.value)){k.preventDefault();try{const S=bd(u.value??"");return await(r.replace?a.replace(S):a.push(S))}finally{if(n(l.value)){const S=l.value.slice(1);let L=S;try{L=decodeURIComponent(S)}catch{}document.getElementById(L)?.focus()}}}}},i.default?.())}}})}const Lk=Ik(Og);function us(e,t){if(t!=="append"&&t!=="remove")return e;const n=t==="append"?rd:Ho;return nn(e)&&!e.startsWith("http")?e:n(e,!0)}function Rk(){const e=Ae();if(e._observer)return e._observer;let t=null;const n=new Map,o=(r,i)=>(t||=new IntersectionObserver(a=>{for(const l of a){const u=n.get(l.target);(l.isIntersecting||l.intersectionRatio>0)&&u&&u()}}),n.set(r,i),t.observe(r),()=>{n.delete(r),t?.unobserve(r),n.size===0&&(t?.disconnect(),t=null)});return e._observer={observe:o}}const Ok=/2g/;function Dk(){const e=navigator.connection;return!!(e&&(e.saveData||Ok.test(e.effectiveType)))}const Nk=St({name:"nuxt:island-link-navigation",setup(e){}}),xk=St({name:"nuxt:global-components"}),dn={},Mk=St({name:"nuxt:prefetch",setup(e){const t=ot();e.hooks.hook("app:mounted",()=>{t.beforeEach(async n=>{const o=n?.meta?.layout;o&&typeof dn[o]=="function"&&await dn[o]()})}),e.hooks.hook("link:prefetch",n=>{if(nn(n))return;const o=t.resolve(n);if(!o)return;const s=o.meta.layout;let r=rf(o.meta.middleware);r=r.filter(i=>typeof i=="string");for(const i of r)typeof bi[i]=="function"&&bi[i]();typeof s=="string"&&s in dn&&Ak(dn[s])})}});function Fk(){const e=po();function t(){return typeof window.gtag!="function"||window.location.hostname!=="www.dataplicity.com"?!1:!!(e.public.ga4MeasurementId||e.public.googleAdsId)}function n(r,i={}){t()&&window.gtag?.("event",r,i)}function o(r,i){n("page_view",{page_path:r,page_title:i||document.title,page_location:window.location.href})}function s(r,i="provisional"){const a=r||"marketing";n("generate_lead",{currency:"USD",value:0,lead_source:a,method:i}),n("sign_up",{method:i,signup_source:a})}return{trackEvent:n,trackLead:s,trackPageView:o}}const Uk=St(e=>{const{trackPageView:t}=Fk();e.hook("page:finish",()=>{const n=ho();t(n.fullPath),pe(async()=>{const{recordMarketingPageview:o}=await import("./o7aGXGa8.js");return{recordMarketingPageview:o}},[],import.meta.url).then(({recordMarketingPageview:o})=>{o(n.path)})})}),Hk=[Cb,Lb,Vb,wk,kk,Sk,Ek,Tk,Nk,xk,Mk,Uk],IS=Symbol.for("nuxt:client-only"),ds="<div></div>",xr=new WeakMap;function $k(e){if(xr.has(e))return xr.get(e);const t={...e};return t.render?t.render=(n,o,s,r,i,a)=>{if(r.mounted$??n.mounted$){const l=e.render?.bind(n)(n,o,s,r,i,a);return l.children===null||typeof l.children=="string"?wt(l):ke(l)}return Lr(n._.vnode.el,ds)}:t.template&&=` 6 <template v-if="mounted$">${e.template}</template> 7 <template v-else>${ds}</template> 8 `,t.setup=(n,o)=>{const s=Ae(),r=kt(s.isHydrating===!1),i=pt();if(s.isHydrating){const l={...i.attrs},u=Bk(i);for(const c in l)delete i.attrs[c];Mn(()=>{Object.assign(i.attrs,l),i.vnode.dirs=u})}Mn(()=>{r.value=!0});const a=e.setup?.(n,o)||{};return ob(a)?Promise.resolve(a).then(l=>typeof l!="function"?(l||={},l.mounted$=r,l):(...u)=>{if(r.value||!s.isHydrating){const c=l(...u);return c.children===null||typeof c.children=="string"?wt(c):ke(c)}return Lr(i?.vnode.el,ds)}):typeof a=="function"?(...l)=>{if(r.value){const u=a(...l),c=t.inheritAttrs!==!1?o.attrs:void 0;return u.children===null||typeof u.children=="string"?wt(u,c):ke(u,c)}return Lr(i?.vnode.el,ds)}:Object.assign(a,{mounted$:r})},xr.set(e,t),t}function Bk(e){if(!e||!e.vnode.dirs)return null;const t=e.vnode.dirs;return e.vnode.dirs=null,t}function Wk(e={}){const t=kt(""),n=kt(e.politeness||"polite"),o=sa();function s(u="",c="polite"){t.value=u,n.value=c}function r(u){return s(u,"polite")}function i(u){return s(u,"assertive")}function a(){s(document?.title?.trim(),n.value)}function l(){o?.hooks?.removeHook("dom:rendered",a)}return a(),o?.hooks?.hook("dom:rendered",a),{_cleanup:l,message:t,politeness:n,set:s,polite:r,assertive:i}}function Vk(e={}){const t=Ae(),n=t._routeAnnouncer||=Wk(e);return e.politeness!==n.politeness.value&&(n.politeness.value=e.politeness||"polite"),Yo()&&(t._routeAnnouncerDeps||=0,t._routeAnnouncerDeps++,rp(()=>{t._routeAnnouncerDeps--,t._routeAnnouncerDeps===0&&(n._cleanup(),delete t._routeAnnouncer)}
8)),n}const jk=lt({name:"NuxtRouteAnnouncer",props:{atomic:{type:Boolean,default:!1},politeness:{type:String,default:"polite"}},setup(e,{slots:t,expose:n}){const{set:o,polite:s,assertive:r,message:i,politeness:a}=Vk({politeness:e.politeness});return n({set:o,polite:s,assertive:r,message:i,politeness:a}),()=>ke("span",{class:"nuxt-route-announcer",style:{position:"absolute"}},ke("span",{role:"alert","aria-live":a.value,"aria-atomic":e.atomic,style:{border:"0",clip:"rect(0 0 0 0)","clip-path":"inset(50%)",height:"1px",width:"1px",overflow:"hidden",position:"absolute","white-space":"nowrap","word-wrap":"normal",margin:"-1px",padding:"0"}},t.default?t.default({message:i.value}):i.value))}}),jf=(e="RouteProvider")=>lt({name:e,props:{route:{type:Object,required:!0},vnode:Object,vnodeRef:Object,renderKey:String,trackRootNodes:Boolean},setup(t){const n=t.renderKey,o=t.route,s={};for(const r in t.route)Object.defineProperty(s,r,{get:()=>n===t.renderKey?t.route[r]:o[r],enumerable:!0});return hn(Un,Nt(s)),()=>t.vnode?ke(t.vnode,{ref:t.vnodeRef}):t.vnode}}),Gk=jf(),Ac=new WeakMap,Kk=lt({name:"NuxtPage",inheritAttrs:!1,props:{name:{type:String},transition:{type:[Boolean,Object],default:void 0},keepalive:{type:[Boolean,Object],default:void 0},route:{type:Object},pageKey:{type:[Function,String],default:null}},setup(e,{attrs:t,slots:n,expose:o}){const s=Ae(),r=Qe(),i=He(Un,null),a=new Set;let l;o({pageRef:r});const u=He(ii,null);let c;const d=s.deferHydration();let p=!1,f=!1,b,_=0;if(s.isHydrating){const E=s.hooks.hookOnce("app:error",d),C=ot().beforeEach(()=>{E(),C()})}e.pageKey&&Jt(()=>e.pageKey,(E,C)=>{E!==C&&s.callHook("page:loading:start")});let A=!1;{const E=ot().beforeResolve(()=>{A=!1});fo(()=>{E(),d()})}return()=>ke(qd,{name:e.name,route:e.route,...t},{default:Xk(E=>{const C=qk(i,E.route,E.Component),h=i&&i.matched.length===E.route.matched.length;if(!E.Component){if(c&&!h&&!Mr(c))return c;d();return}if(c&&u&&!Mr(c)&&!u.isCurrent(E.route))return c;if(C&&i&&(!u||u?.isCurrent(i)))return(h||c)&&!Mr(c)?c:null;const m=Wo(E,e.pageKey),k=Yk(i,E.route,E.Component);!s.isHydrating&&l===m&&!k&&no(()=>{A||(A=!0,s.callHook("page:loading:end"))}),p&&l!==m&&f&&_++,l=m;const S=!!(e.transition??E.route.meta.pageTransition??ul),L=S&&Qd([e.transition,E.route.meta.pageTransition,ul,{onAfterLeave(){s["~transitionFinish"]?.(),delete s["~transitionFinish"],delete s["~transitionPromise"],s.callHook("page:transition:finish",E.Component)}}]),O=e.keepalive??E.route.meta.keepalive??Lg,I=E.Component.type,M=I.name||I.__name;E.route.meta.keepalive&&M&&a.add(M);let K;if(a.size>0&&e.keepalive==null&&(!O||typeof O=="object"&&O&&O.include)){const V=typeof O=="object"&&O?{...O}:{},se=V.include?Array.isArray(V.include)?V.include:[V.include]:[];K={...V,include:Array.from(new Set([...se,...a]))}}else K=O;return c=Xd(S&&L,xb(K,ke(Ji,{key:_,suspensible:!0,onPending:()=>{p=!0,S&&!s["~transitionPromise"]&&(s["~transitionPromise"]=new Promise(V=>{s["~transitionFinish"]=V})),b=s.callHook("page:start",E.Component)}
8,onResolve:async()=>{p=!1,f=!0,s.isHydrating&&s["~restoreDeferredRoute"]?.();try{await no(),s._route.sync?.(),await b,await s.callHook("page:finish",E.Component),!A&&!k&&(A=!0,await s.callHook("page:loading:end"))}finally{d()}}},{default:()=>{const V={key:m||void 0,vnode:n.default?Jk(n.default,E):E.Component,route:E.route,renderKey:m||void 0,trackRootNodes:S,vnodeRef:r};if(!K)return ke(Gk,V);const se=I;let ae=Ac.get(se);return ae||(ae=jf(M),Ac.set(se,ae)),ke(ae,V)}}))).default(),c})})}});function qk(e,t,n){if(!e)return!1;const o=t.matched.findIndex(i=>i.components?.default===n?.type);if(o===-1)return!1;const s=t.matched.slice(0,o).filter(i=>i.components?.default);if(!s.length)return!1;const r=e.matched.filter(i=>i.components?.default);return s.some((i,a)=>i.components?.default!==r[a]?.components?.default)||n&&Wo({route:t,Component:n})!==Wo({route:e,Component:n})}function Yk(e,t,n){return e?t.matched.findIndex(s=>s.components?.default===n?.type)<t.matched.length-1:!1}function Xk(e){const t=(n=>{const o=e(n);return Array.isArray(o)?o:o==null||!gn(o)?[$h()]:[o]});return t._n=!0,t}function Jk(e,t){const n=e(t);return n.length===1?ke(n[0]):ke(Ve,void 0,n)}function Mr(e){return!!e&&(!!e.suspense?.isUnmounted||!!e.component?.isUnmounted)}const Gf=ef,Qk=lt({name:"LayoutLoader",inheritAttrs:!1,props:{name:String,layoutProps:Object},setup(e,t){return()=>ke(dn[e.name],e.layoutProps,t.slots)}}),zk={name:{type:[String,Boolean,Object],default:null},fallback:{type:[String,Object],default:null}},Zk=lt({name:"NuxtLayout",inheritAttrs:!1,props:zk,setup(e,t){const n=Ae(),o=He(Un),r=!o||o===ho()?Yd():o,i=ue(()=>{let c=ce(e.name)??r?.meta.layout??Gf(r?.path).appLayout??"default";return c&&!(c in dn)&&e.fallback&&(c=ce(e.fallback)),c}),a=kt();t.expose({layoutRef:a});const l=n.deferHydration();if(n.isHydrating){const c=n.hooks.hookOnce("app:error",l),d=ot().beforeEach(()=>{c(),d()})}let u;return()=>{const d=!!i.value&&i.value in dn&&!!(r?.meta.layoutTransition??cl),p=d&&Qd([r?.meta.layoutTransition,cl,{onBeforeLeave(){n["~transitionPromise"]=new Promise(b=>{n["~transitionFinish"]=b})},onAfterLeave(){n["~transitionFinish"]?.(),delete n["~transitionFinish"],delete n["~transitionPromise"]}}]),f=u;return u=i.value,Xd(p,{default:()=>ke(Ji,{suspensible:!0,onResolve:async()=>{await no(l)}},{default:()=>ke(eS,{layoutProps:Ku(t.attrs,r.meta.layoutProps??{},{ref:a}),key:i.value||void 0,name:i.value,shouldProvide:!e.name,isRenderingNewLayout:b=>b!==f&&b===i.value,hasTransition:d},t.slots)})}).default()}}}),eS=lt({name:"NuxtLayoutProvider",inheritAttrs:!1,props:{name:{type:[String,Boolean]},layoutProps:{type:Object},hasTransition:{type:Boolean},shouldProvide:{type:Boolean},isRenderingNewLayout:{type:Function,required:!0}},setup(e,t){const n=e.name;e.shouldProvide&&hn(ii,{isCurrent:i=>n===!1||n===(i.meta.layout??Gf(i.path).appLayout??"default")});const o=He(Un),s=o&&o===ho(),r=He(ii,null);if(s){const i=Yd(),a={};for(const l in i){const u=l;Object.defineProperty(a,u,{enumerable:!0,get:()=>e.isRenderingNewLayout(e.name)&&(!r||r.isCurrent(i))?i[u]:o[u]})}hn(Un,Nt(a))}return()=>!n||typeof n=="string"&&!(n in dn)?t.slots.default?.():ke(Qk,{key:n,layoutProps:e.layoutProps,name:n},t.slots)}}),Kf=(e,t)=>{const n=e.__vccOpts||e;for(const[o,s]of t)n[o]=s;return n},tS=$k(jk),nS={};function oS(e,t){const n=tS,o=Kk,s=Zk;return yt(),qt(s,null,{default:Bs(()=>[_e(n),_e(o)]),_:1})}const sS=Kf(nS,[["render",oS]]),rS={class:"marketing-error"},iS={class:"marketing-error__card"},aS={class:"marketing-error__eyebrow"},lS={class:"marketing-error__actions"},cS=lt({__name:"error",props:{error:{}},setup(e){const t=e,n=ue(()=>Number(t.error?.statusCode||404)),o=ue(()=>n.value===404?"Page not found":"Something went wrong"),s=ue(()=>n.value===404?"That URL is not a Dataplicity page. It may have moved, or the link may be incorrect.":t.error?.statusMessage||t.error?.message||"Please try again from the homepage.");return Jy(()=>({title:`${o.value} | Dataplicity`,meta:[{name:"robots",content:"noindex, follow"},{name:"description",content:s.value}]})),(r,i)=>{const a=Lk;return yt(),ju("div",rS,[ln("main",iS,[ln("span",aS,fs(ce(n)),1),ln("h1",null,fs(ce(o
8)),1),ln("p",null,fs(ce(s)),1),ln("div",lS,[_e(a,{class:"marketing-error__primary",to:"/"},{default:Bs(()=>i[0]||(i[0]=[Qi("Go to homepage")])),_:1,__:[0]}),i[1]||(i[1]=ln("a",{class:"marketing-error__secondary",href:"https://docs.dataplicity.com"},"Open docs",-1))])])])}}}),uS=Kf(cS,[["__scopeId","data-v-311a4f5a"]]),dS={key:0},Pc={__name:"nuxt-root",setup(e){const t=()=>null,n=Ae(),o=n.deferHydration();if(n.isHydrating){const c=n.hooks.hookOnce("app:error",o),d=ot().beforeEach(()=>{c(),d()})}const s=!1;hn(Un,ho()),n.hooks.callHookWith(c=>c.map(d=>d()),"vue:setup",[]);const r=Js(),i=!1,a=/bot\b|chrome-lighthouse|facebookexternalhit|google\b/i;function l(c,d,p){const f=n.vueApp.config.errorHandler;if(f&&!f.__nuxt_default)try{f(c,d,p)}catch(b){console.error("[nuxt] Error in `app.config.errorHandler`",b)}}vu((c,d,p)=>{if(n.hooks.callHook("vue:error",c,d,p).catch(f=>console.error("[nuxt] Error in `vue:error` hook",f)),a.test(navigator.userAgent))return n.hooks.callHook("app:error",c),console.error(`[nuxt] Not rendering error page for bot with user agent \`${navigator.userAgent}\`:`,c),!1;if(_d(c)&&(c.fatal||c.unhandled))return n.runWithContext(()=>Ln(c)),l(c,d,p),!1});const u=!1;return(c,d)=>(yt(),qt(Ji,{onResolve:ce(o)},{default:Bs(()=>[ce(i)?(yt(),ju("div",dS)):ce(r)?(yt(),qt(ce(uS),{key:1,error:ce(r)},null,8,["error"])):ce(u)?(yt(),qt(ce(t),{key:2,context:ce(u)},null,8,["context"])):ce(s)?(yt(),qt(nh(ce(s)),{key:3})):(yt(),qt(ce(sS),{key:4}))]),_:1},8,["onResolve"]))}};let Ic;{let e;Ic=async function(){if(e)return e;const o=!!(window.__NUXT__?.serverRendered??document.getElementById("__NUXT_DATA__")?.dataset.ssr==="true")?Tm(Pc):Cm(Pc),s=Fg({vueApp:o});async function r(i){await s.callHook("app:error",i),s.payload.error||=xn(i)}r.__nuxt_default=!0,o.config.errorHandler=r,s.hook("app:suspense:resolve",()=>{o.config.errorHandler===r&&(o.config.errorHandler=void 0)});try{await $g(s,Hk)}catch(i){r(i)}try{await s.hooks.callHook("app:created",o),await s.hooks.callHook("app:beforeMount",o),o.mount(Ng),await s.hooks.callHook("app:mounted",o),await no()}catch(i){r(i)}return o},e=Ic().catch(t=>{throw console.error("Error while mounting app:",t),t})}export{rp as $,kS as A,$h as B,fS as C,xe as D,_S as E,Ve as F,Mn as G,Ki as H,Jt as I,tk as J,Ae as K,Rp as L,Fk as M,no as N,xi as O,fo as P,SS as Q,ke as R,Ku as S,pS as T,pd as U,eu as V,pt as W,wS as X,yS as Y,CS as Z,Lk as _,va as a,Yo as a0,kt as a1,gu as a2,He as a3,IS as a4,Br as a5,AS as a6,vk as a7,PS as a8,gS as a9,vS as aa,ln as b,qt as c,lt as d,ce as e,_e as f,Qi as g,ju as h,Kf as i,ue as j,ho as k,bS as l,xn as m,Mi as n,yt as o,hS as p,pe as q,mS as r,Yg as s,fs as t,po as u,TS as v,Bs as w,Jy as x,Ap as y,Qe as z};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.