diff --git a/assets/index-606e3d61.js b/assets/index-69d37eac.js similarity index 83% rename from assets/index-606e3d61.js rename to assets/index-69d37eac.js index 20aea5a..255c49f 100644 --- a/assets/index-606e3d61.js +++ b/assets/index-69d37eac.js @@ -1 +1 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))s(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const r of o.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&s(r)}).observe(document,{childList:!0,subtree:!0});function n(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(i){if(i.ep)return;i.ep=!0;const o=n(i);fetch(i.href,o)}})();function Ln(e,t){const n=Object.create(null),s=e.split(",");for(let i=0;i!!n[i.toLowerCase()]:i=>!!n[i]}function Nn(e){if(S(e)){const t={};for(let n=0;n{if(n){const s=n.split(Ki);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function ne(e){let t="";if(Z(e))t=e;else if(S(e))for(let n=0;n{},Ji=()=>!1,Yi=/^on[^a-z]/,Yt=e=>Yi.test(e),jn=e=>e.startsWith("onUpdate:"),se=Object.assign,Rn=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Qi=Object.prototype.hasOwnProperty,R=(e,t)=>Qi.call(e,t),S=Array.isArray,xt=e=>Qt(e)==="[object Map]",Xi=e=>Qt(e)==="[object Set]",F=e=>typeof e=="function",Z=e=>typeof e=="string",Dn=e=>typeof e=="symbol",Q=e=>e!==null&&typeof e=="object",zs=e=>Q(e)&&F(e.then)&&F(e.catch),Gi=Object.prototype.toString,Qt=e=>Gi.call(e),Zi=e=>Qt(e).slice(8,-1),eo=e=>Qt(e)==="[object Object]",Hn=e=>Z(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Bt=Ln(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Xt=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},to=/-(\w)/g,Oe=Xt(e=>e.replace(to,(t,n)=>n?n.toUpperCase():"")),no=/\B([A-Z])/g,ht=Xt(e=>e.replace(no,"-$1").toLowerCase()),Gt=Xt(e=>e.charAt(0).toUpperCase()+e.slice(1)),un=Xt(e=>e?`on${Gt(e)}`:""),It=(e,t)=>!Object.is(e,t),dn=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},so=e=>{const t=parseFloat(e);return isNaN(t)?e:t},io=e=>{const t=Z(e)?Number(e):NaN;return isNaN(t)?e:t};let us;const oo=()=>us||(us=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});let ye;class ro{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=ye,!t&&ye&&(this.index=(ye.scopes||(ye.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=ye;try{return ye=this,t()}finally{ye=n}}}on(){ye=this}off(){ye=this.parent}stop(t){if(this._active){let n,s;for(n=0,s=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},Vs=e=>(e.w&We)>0,qs=e=>(e.n&We)>0,co=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let s=0;s{(p==="length"||p>=f)&&a.push(u)})}else switch(n!==void 0&&a.push(r.get(n)),t){case"add":S(e)?Hn(n)&&a.push(r.get("length")):(a.push(r.get(nt)),xt(e)&&a.push(r.get(xn)));break;case"delete":S(e)||(a.push(r.get(nt)),xt(e)&&a.push(r.get(xn)));break;case"set":xt(e)&&a.push(r.get(nt));break}if(a.length===1)a[0]&&wn(a[0]);else{const f=[];for(const u of a)u&&f.push(...u);wn(Bn(f))}}function wn(e,t){const n=S(e)?e:[...e];for(const s of n)s.computed&&ps(s);for(const s of n)s.computed||ps(s)}function ps(e,t){(e!==Ce||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const uo=Ln("__proto__,__v_isRef,__isVue"),Qs=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Dn)),po=Un(),ho=Un(!1,!0),go=Un(!0),hs=mo();function mo(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=D(this);for(let o=0,r=this.length;o{e[t]=function(...n){gt();const s=D(this)[t].apply(this,n);return mt(),s}}),e}function vo(e){const t=D(this);return de(t,"has",e),t.hasOwnProperty(e)}function Un(e=!1,t=!1){return function(s,i,o){if(i==="__v_isReactive")return!e;if(i==="__v_isReadonly")return e;if(i==="__v_isShallow")return t;if(i==="__v_raw"&&o===(e?t?Fo:ti:t?ei:Zs).get(s))return s;const r=S(s);if(!e){if(r&&R(hs,i))return Reflect.get(hs,i,o);if(i==="hasOwnProperty")return vo}const a=Reflect.get(s,i,o);return(Dn(i)?Qs.has(i):uo(i))||(e||de(s,"get",i),t)?a:re(a)?r&&Hn(i)?a:a.value:Q(a)?e?ni(a):zn(a):a}}const _o=Xs(),bo=Xs(!0);function Xs(e=!1){return function(n,s,i,o){let r=n[s];if(dt(r)&&re(r)&&!re(i))return!1;if(!e&&(!Vt(i)&&!dt(i)&&(r=D(r),i=D(i)),!S(n)&&re(r)&&!re(i)))return r.value=i,!0;const a=S(n)&&Hn(s)?Number(s)e,Zt=e=>Reflect.getPrototypeOf(e);function Lt(e,t,n=!1,s=!1){e=e.__v_raw;const i=D(e),o=D(t);n||(t!==o&&de(i,"get",t),de(i,"get",o));const{has:r}=Zt(i),a=s?Kn:n?qn:Mt;if(r.call(i,t))return a(e.get(t));if(r.call(i,o))return a(e.get(o));e!==i&&e.get(t)}function Nt(e,t=!1){const n=this.__v_raw,s=D(n),i=D(e);return t||(e!==i&&de(s,"has",e),de(s,"has",i)),e===i?n.has(e):n.has(e)||n.has(i)}function jt(e,t=!1){return e=e.__v_raw,!t&&de(D(e),"iterate",nt),Reflect.get(e,"size",e)}function gs(e){e=D(e);const t=D(this);return Zt(t).has.call(t,e)||(t.add(e),Le(t,"add",e,e)),this}function ms(e,t){t=D(t);const n=D(this),{has:s,get:i}=Zt(n);let o=s.call(n,e);o||(e=D(e),o=s.call(n,e));const r=i.call(n,e);return n.set(e,t),o?It(t,r)&&Le(n,"set",e,t):Le(n,"add",e,t),this}function vs(e){const t=D(this),{has:n,get:s}=Zt(t);let i=n.call(t,e);i||(e=D(e),i=n.call(t,e)),s&&s.call(t,e);const o=t.delete(e);return i&&Le(t,"delete",e,void 0),o}function _s(){const e=D(this),t=e.size!==0,n=e.clear();return t&&Le(e,"clear",void 0,void 0),n}function Rt(e,t){return function(s,i){const o=this,r=o.__v_raw,a=D(r),f=t?Kn:e?qn:Mt;return!e&&de(a,"iterate",nt),r.forEach((u,p)=>s.call(i,f(u),f(p),o))}}function Dt(e,t,n){return function(...s){const i=this.__v_raw,o=D(i),r=xt(o),a=e==="entries"||e===Symbol.iterator&&r,f=e==="keys"&&r,u=i[e](...s),p=n?Kn:t?qn:Mt;return!t&&de(o,"iterate",f?xn:nt),{next(){const{value:v,done:y}=u.next();return y?{value:v,done:y}:{value:a?[p(v[0]),p(v[1])]:p(v),done:y}},[Symbol.iterator](){return this}}}}function Re(e){return function(...t){return e==="delete"?!1:this}}function Eo(){const e={get(o){return Lt(this,o)},get size(){return jt(this)},has:Nt,add:gs,set:ms,delete:vs,clear:_s,forEach:Rt(!1,!1)},t={get(o){return Lt(this,o,!1,!0)},get size(){return jt(this)},has:Nt,add:gs,set:ms,delete:vs,clear:_s,forEach:Rt(!1,!0)},n={get(o){return Lt(this,o,!0)},get size(){return jt(this,!0)},has(o){return Nt.call(this,o,!0)},add:Re("add"),set:Re("set"),delete:Re("delete"),clear:Re("clear"),forEach:Rt(!0,!1)},s={get(o){return Lt(this,o,!0,!0)},get size(){return jt(this,!0)},has(o){return Nt.call(this,o,!0)},add:Re("add"),set:Re("set"),delete:Re("delete"),clear:Re("clear"),forEach:Rt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=Dt(o,!1,!1),n[o]=Dt(o,!0,!1),t[o]=Dt(o,!1,!0),s[o]=Dt(o,!0,!0)}),[e,n,t,s]}const[Io,Mo,Ao,$o]=Eo();function Wn(e,t){const n=t?e?$o:Ao:e?Mo:Io;return(s,i,o)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?s:Reflect.get(R(n,i)&&i in s?n:s,i,o)}const Po={get:Wn(!1,!1)},Oo={get:Wn(!1,!0)},So={get:Wn(!0,!1)},Zs=new WeakMap,ei=new WeakMap,ti=new WeakMap,Fo=new WeakMap;function Lo(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function No(e){return e.__v_skip||!Object.isExtensible(e)?0:Lo(Zi(e))}function zn(e){return dt(e)?e:Vn(e,!1,Gs,Po,Zs)}function jo(e){return Vn(e,!1,To,Oo,ei)}function ni(e){return Vn(e,!0,wo,So,ti)}function Vn(e,t,n,s,i){if(!Q(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=i.get(e);if(o)return o;const r=No(e);if(r===0)return e;const a=new Proxy(e,r===2?s:n);return i.set(e,a),a}function ft(e){return dt(e)?ft(e.__v_raw):!!(e&&e.__v_isReactive)}function dt(e){return!!(e&&e.__v_isReadonly)}function Vt(e){return!!(e&&e.__v_isShallow)}function si(e){return ft(e)||dt(e)}function D(e){const t=e&&e.__v_raw;return t?D(t):e}function ii(e){return zt(e,"__v_skip",!0),e}const Mt=e=>Q(e)?zn(e):e,qn=e=>Q(e)?ni(e):e;function oi(e){Ue&&Ce&&(e=D(e),Ys(e.dep||(e.dep=Bn())))}function ri(e,t){e=D(e);const n=e.dep;n&&wn(n)}function re(e){return!!(e&&e.__v_isRef===!0)}function Jn(e){return Ro(e,!1)}function Ro(e,t){return re(e)?e:new Do(e,t)}class Do{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:D(t),this._value=n?t:Mt(t)}get value(){return oi(this),this._value}set value(t){const n=this.__v_isShallow||Vt(t)||dt(t);t=n?t:D(t),It(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:Mt(t),ri(this))}}function Ho(e){return re(e)?e.value:e}const Bo={get:(e,t,n)=>Ho(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const i=e[t];return re(i)&&!re(n)?(i.value=n,!0):Reflect.set(e,t,n,s)}};function li(e){return ft(e)?e:new Proxy(e,Bo)}var ai;class ko{constructor(t,n,s,i){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this[ai]=!1,this._dirty=!0,this.effect=new kn(t,()=>{this._dirty||(this._dirty=!0,ri(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!i,this.__v_isReadonly=s}get value(){const t=D(this);return oi(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}ai="__v_isReadonly";function Uo(e,t,n=!1){let s,i;const o=F(e);return o?(s=e,i=we):(s=e.get,i=e.set),new ko(s,i,o||!i,n)}function Ke(e,t,n,s){let i;try{i=s?e(...s):e()}catch(o){en(o,t,n)}return i}function _e(e,t,n,s){if(F(e)){const o=Ke(e,t,n,s);return o&&zs(o)&&o.catch(r=>{en(r,t,n)}),o}const i=[];for(let o=0;o>>1;$t(oe[s])Pe&&oe.splice(t,1)}function qo(e){S(e)?ut.push(...e):(!Fe||!Fe.includes(e,e.allowRecurse?Ze+1:Ze))&&ut.push(e),fi()}function bs(e,t=At?Pe+1:0){for(;t$t(n)-$t(s)),Ze=0;Zee.id==null?1/0:e.id,Jo=(e,t)=>{const n=$t(e)-$t(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function di(e){Tn=!1,At=!0,oe.sort(Jo);const t=we;try{for(Pe=0;PeZ(A)?A.trim():A)),v&&(i=n.map(so))}let a,f=s[a=un(t)]||s[a=un(Oe(t))];!f&&o&&(f=s[a=un(ht(t))]),f&&_e(f,e,6,i);const u=s[a+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[a])return;e.emitted[a]=!0,_e(u,e,6,i)}}function pi(e,t,n=!1){const s=t.emitsCache,i=s.get(e);if(i!==void 0)return i;const o=e.emits;let r={},a=!1;if(!F(e)){const f=u=>{const p=pi(u,t,!0);p&&(a=!0,se(r,p))};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}return!o&&!a?(Q(e)&&s.set(e,null),null):(S(o)?o.forEach(f=>r[f]=null):se(r,o),Q(e)&&s.set(e,r),r)}function tn(e,t){return!e||!Yt(t)?!1:(t=t.slice(2).replace(/Once$/,""),R(e,t[0].toLowerCase()+t.slice(1))||R(e,ht(t))||R(e,t))}let ve=null,nn=null;function qt(e){const t=ve;return ve=e,nn=e&&e.type.__scopeId||null,t}function Xn(e){nn=e}function Gn(){nn=null}function hi(e,t=ve,n){if(!t||e._n)return e;const s=(...i)=>{s._d&&$s(-1);const o=qt(t);let r;try{r=e(...i)}finally{qt(o),s._d&&$s(1)}return r};return s._n=!0,s._c=!0,s._d=!0,s}function pn(e){const{type:t,vnode:n,proxy:s,withProxy:i,props:o,propsOptions:[r],slots:a,attrs:f,emit:u,render:p,renderCache:v,data:y,setupState:A,ctx:N,inheritAttrs:$}=e;let q,H;const le=qt(e);try{if(n.shapeFlag&4){const K=i||s;q=$e(p.call(K,K,v,o,A,y,N)),H=f}else{const K=t;q=$e(K.length>1?K(o,{attrs:f,slots:a,emit:u}):K(o,null)),H=t.props?f:Qo(f)}}catch(K){Tt.length=0,en(K,e,1),q=fe(Te)}let O=q;if(H&&$!==!1){const K=Object.keys(H),{shapeFlag:ee}=O;K.length&&ee&7&&(r&&K.some(jn)&&(H=Xo(H,r)),O=ze(O,H))}return n.dirs&&(O=ze(O),O.dirs=O.dirs?O.dirs.concat(n.dirs):n.dirs),n.transition&&(O.transition=n.transition),q=O,qt(le),q}const Qo=e=>{let t;for(const n in e)(n==="class"||n==="style"||Yt(n))&&((t||(t={}))[n]=e[n]);return t},Xo=(e,t)=>{const n={};for(const s in e)(!jn(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Go(e,t,n){const{props:s,children:i,component:o}=e,{props:r,children:a,patchFlag:f}=t,u=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&f>=0){if(f&1024)return!0;if(f&16)return s?ys(s,r,u):!!r;if(f&8){const p=t.dynamicProps;for(let v=0;ve.__isSuspense;function tr(e,t){t&&t.pendingBranch?S(e)?t.effects.push(...e):t.effects.push(e):qo(e)}function nr(e,t){if(X){let n=X.provides;const s=X.parent&&X.parent.provides;s===n&&(n=X.provides=Object.create(s)),n[e]=t}}function kt(e,t,n=!1){const s=X||ve;if(s){const i=s.parent==null?s.vnode.appContext&&s.vnode.appContext.provides:s.parent.provides;if(i&&e in i)return i[e];if(arguments.length>1)return n&&F(t)?t.call(s.proxy):t}}const Ht={};function hn(e,t,n){return gi(e,t,n)}function gi(e,t,{immediate:n,deep:s,flush:i,onTrack:o,onTrigger:r}=z){const a=ao()===(X==null?void 0:X.scope)?X:null;let f,u=!1,p=!1;if(re(e)?(f=()=>e.value,u=Vt(e)):ft(e)?(f=()=>e,s=!0):S(e)?(p=!0,u=e.some(O=>ft(O)||Vt(O)),f=()=>e.map(O=>{if(re(O))return O.value;if(ft(O))return at(O);if(F(O))return Ke(O,a,2)})):F(e)?t?f=()=>Ke(e,a,2):f=()=>{if(!(a&&a.isUnmounted))return v&&v(),_e(e,a,3,[y])}:f=we,t&&s){const O=f;f=()=>at(O())}let v,y=O=>{v=H.onStop=()=>{Ke(O,a,4)}},A;if(Ot)if(y=we,t?n&&_e(t,a,3,[f(),p?[]:void 0,y]):f(),i==="sync"){const O=Zr();A=O.__watcherHandles||(O.__watcherHandles=[])}else return we;let N=p?new Array(e.length).fill(Ht):Ht;const $=()=>{if(H.active)if(t){const O=H.run();(s||u||(p?O.some((K,ee)=>It(K,N[ee])):It(O,N)))&&(v&&v(),_e(t,a,3,[O,N===Ht?void 0:p&&N[0]===Ht?[]:N,y]),N=O)}else H.run()};$.allowRecurse=!!t;let q;i==="sync"?q=$:i==="post"?q=()=>ue($,a&&a.suspense):($.pre=!0,a&&($.id=a.uid),q=()=>Qn($));const H=new kn(f,q);t?n?$():N=H.run():i==="post"?ue(H.run.bind(H),a&&a.suspense):H.run();const le=()=>{H.stop(),a&&a.scope&&Rn(a.scope.effects,H)};return A&&A.push(le),le}function sr(e,t,n){const s=this.proxy,i=Z(e)?e.includes(".")?mi(s,e):()=>s[e]:e.bind(s,s);let o;F(t)?o=t:(o=t.handler,n=t);const r=X;pt(this);const a=gi(i,o.bind(s),n);return r?pt(r):st(),a}function mi(e,t){const n=t.split(".");return()=>{let s=e;for(let i=0;i{at(n,t)});else if(eo(e))for(const n in e)at(e[n],t);return e}function ir(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Ci(()=>{e.isMounted=!0}),xi(()=>{e.isUnmounting=!0}),e}const ge=[Function,Array],or={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:ge,onEnter:ge,onAfterEnter:ge,onEnterCancelled:ge,onBeforeLeave:ge,onLeave:ge,onAfterLeave:ge,onLeaveCancelled:ge,onBeforeAppear:ge,onAppear:ge,onAfterAppear:ge,onAppearCancelled:ge},setup(e,{slots:t}){const n=Kr(),s=ir();let i;return()=>{const o=t.default&&bi(t.default(),!0);if(!o||!o.length)return;let r=o[0];if(o.length>1){for(const $ of o)if($.type!==Te){r=$;break}}const a=D(e),{mode:f}=a;if(s.isLeaving)return gn(r);const u=Cs(r);if(!u)return gn(r);const p=En(u,a,s,n);In(u,p);const v=n.subTree,y=v&&Cs(v);let A=!1;const{getTransitionKey:N}=u.type;if(N){const $=N();i===void 0?i=$:$!==i&&(i=$,A=!0)}if(y&&y.type!==Te&&(!et(u,y)||A)){const $=En(y,a,s,n);if(In(y,$),f==="out-in")return s.isLeaving=!0,$.afterLeave=()=>{s.isLeaving=!1,n.update.active!==!1&&n.update()},gn(r);f==="in-out"&&u.type!==Te&&($.delayLeave=(q,H,le)=>{const O=_i(s,y);O[String(y.key)]=y,q._leaveCb=()=>{H(),q._leaveCb=void 0,delete p.delayedLeave},p.delayedLeave=le})}return r}}},vi=or;function _i(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function En(e,t,n,s){const{appear:i,mode:o,persisted:r=!1,onBeforeEnter:a,onEnter:f,onAfterEnter:u,onEnterCancelled:p,onBeforeLeave:v,onLeave:y,onAfterLeave:A,onLeaveCancelled:N,onBeforeAppear:$,onAppear:q,onAfterAppear:H,onAppearCancelled:le}=t,O=String(e.key),K=_i(n,e),ee=(L,J)=>{L&&_e(L,s,9,J)},je=(L,J)=>{const W=J[1];ee(L,J),S(L)?L.every(ie=>ie.length<=1)&&W():L.length<=1&&W()},Ee={mode:o,persisted:r,beforeEnter(L){let J=a;if(!n.isMounted)if(i)J=$||a;else return;L._leaveCb&&L._leaveCb(!0);const W=K[O];W&&et(e,W)&&W.el._leaveCb&&W.el._leaveCb(),ee(J,[L])},enter(L){let J=f,W=u,ie=p;if(!n.isMounted)if(i)J=q||f,W=H||u,ie=le||p;else return;let E=!1;const V=L._enterCb=pe=>{E||(E=!0,pe?ee(ie,[L]):ee(W,[L]),Ee.delayedLeave&&Ee.delayedLeave(),L._enterCb=void 0)};J?je(J,[L,V]):V()},leave(L,J){const W=String(e.key);if(L._enterCb&&L._enterCb(!0),n.isUnmounting)return J();ee(v,[L]);let ie=!1;const E=L._leaveCb=V=>{ie||(ie=!0,J(),V?ee(N,[L]):ee(A,[L]),L._leaveCb=void 0,K[W]===e&&delete K[W])};K[W]=e,y?je(y,[L,E]):E()},clone(L){return En(L,t,n,s)}};return Ee}function gn(e){if(on(e))return e=ze(e),e.children=null,e}function Cs(e){return on(e)?e.children?e.children[0]:void 0:e}function In(e,t){e.shapeFlag&6&&e.component?In(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 bi(e,t=!1,n){let s=[],i=0;for(let o=0;o1)for(let o=0;o!!e.type.__asyncLoader,on=e=>e.type.__isKeepAlive;function rr(e,t){yi(e,"a",t)}function lr(e,t){yi(e,"da",t)}function yi(e,t,n=X){const s=e.__wdc||(e.__wdc=()=>{let i=n;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if(rn(t,s,n),n){let i=n.parent;for(;i&&i.parent;)on(i.parent.vnode)&&ar(s,t,n,i),i=i.parent}}function ar(e,t,n,s){const i=rn(t,e,s,!0);wi(()=>{Rn(s[t],i)},n)}function rn(e,t,n=X,s=!1){if(n){const i=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...r)=>{if(n.isUnmounted)return;gt(),pt(n);const a=_e(t,n,e,r);return st(),mt(),a});return s?i.unshift(o):i.push(o),o}}const Ne=e=>(t,n=X)=>(!Ot||e==="sp")&&rn(e,(...s)=>t(...s),n),cr=Ne("bm"),Ci=Ne("m"),fr=Ne("bu"),ur=Ne("u"),xi=Ne("bum"),wi=Ne("um"),dr=Ne("sp"),pr=Ne("rtg"),hr=Ne("rtc");function gr(e,t=X){rn("ec",e,t)}function Je(e,t,n,s){const i=e.dirs,o=t&&t.dirs;for(let r=0;re?ji(e)?ss(e)||e.proxy:Mn(e.parent):null,wt=se(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=>Mn(e.parent),$root:e=>Mn(e.root),$emit:e=>e.emit,$options:e=>Zn(e),$forceUpdate:e=>e.f||(e.f=()=>Qn(e.update)),$nextTick:e=>e.n||(e.n=Wo.bind(e.proxy)),$watch:e=>sr.bind(e)}),mn=(e,t)=>e!==z&&!e.__isScriptSetup&&R(e,t),_r={get({_:e},t){const{ctx:n,setupState:s,data:i,props:o,accessCache:r,type:a,appContext:f}=e;let u;if(t[0]!=="$"){const A=r[t];if(A!==void 0)switch(A){case 1:return s[t];case 2:return i[t];case 4:return n[t];case 3:return o[t]}else{if(mn(s,t))return r[t]=1,s[t];if(i!==z&&R(i,t))return r[t]=2,i[t];if((u=e.propsOptions[0])&&R(u,t))return r[t]=3,o[t];if(n!==z&&R(n,t))return r[t]=4,n[t];An&&(r[t]=0)}}const p=wt[t];let v,y;if(p)return t==="$attrs"&&de(e,"get",t),p(e);if((v=a.__cssModules)&&(v=v[t]))return v;if(n!==z&&R(n,t))return r[t]=4,n[t];if(y=f.config.globalProperties,R(y,t))return y[t]},set({_:e},t,n){const{data:s,setupState:i,ctx:o}=e;return mn(i,t)?(i[t]=n,!0):s!==z&&R(s,t)?(s[t]=n,!0):R(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:i,propsOptions:o}},r){let a;return!!n[r]||e!==z&&R(e,r)||mn(t,r)||(a=o[0])&&R(a,r)||R(s,r)||R(wt,r)||R(i.config.globalProperties,r)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:R(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};let An=!0;function br(e){const t=Zn(e),n=e.proxy,s=e.ctx;An=!1,t.beforeCreate&&ws(t.beforeCreate,e,"bc");const{data:i,computed:o,methods:r,watch:a,provide:f,inject:u,created:p,beforeMount:v,mounted:y,beforeUpdate:A,updated:N,activated:$,deactivated:q,beforeDestroy:H,beforeUnmount:le,destroyed:O,unmounted:K,render:ee,renderTracked:je,renderTriggered:Ee,errorCaptured:L,serverPrefetch:J,expose:W,inheritAttrs:ie,components:E,directives:V,filters:pe}=t;if(u&&yr(u,s,null,e.appContext.config.unwrapInjectedRef),r)for(const Y in r){const k=r[Y];F(k)&&(s[Y]=k.bind(n))}if(i){const Y=i.call(n,n);Q(Y)&&(e.data=zn(Y))}if(An=!0,o)for(const Y in o){const k=o[Y],Ve=F(k)?k.bind(n,n):F(k.get)?k.get.bind(n,n):we,St=!F(k)&&F(k.set)?k.set.bind(n):we,qe=Qr({get:Ve,set:St});Object.defineProperty(s,Y,{enumerable:!0,configurable:!0,get:()=>qe.value,set:Ie=>qe.value=Ie})}if(a)for(const Y in a)Ii(a[Y],s,n,Y);if(f){const Y=F(f)?f.call(n):f;Reflect.ownKeys(Y).forEach(k=>{nr(k,Y[k])})}p&&ws(p,e,"c");function te(Y,k){S(k)?k.forEach(Ve=>Y(Ve.bind(n))):k&&Y(k.bind(n))}if(te(cr,v),te(Ci,y),te(fr,A),te(ur,N),te(rr,$),te(lr,q),te(gr,L),te(hr,je),te(pr,Ee),te(xi,le),te(wi,K),te(dr,J),S(W))if(W.length){const Y=e.exposed||(e.exposed={});W.forEach(k=>{Object.defineProperty(Y,k,{get:()=>n[k],set:Ve=>n[k]=Ve})})}else e.exposed||(e.exposed={});ee&&e.render===we&&(e.render=ee),ie!=null&&(e.inheritAttrs=ie),E&&(e.components=E),V&&(e.directives=V)}function yr(e,t,n=we,s=!1){S(e)&&(e=$n(e));for(const i in e){const o=e[i];let r;Q(o)?"default"in o?r=kt(o.from||i,o.default,!0):r=kt(o.from||i):r=kt(o),re(r)&&s?Object.defineProperty(t,i,{enumerable:!0,configurable:!0,get:()=>r.value,set:a=>r.value=a}):t[i]=r}}function ws(e,t,n){_e(S(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ii(e,t,n,s){const i=s.includes(".")?mi(n,s):()=>n[s];if(Z(e)){const o=t[e];F(o)&&hn(i,o)}else if(F(e))hn(i,e.bind(n));else if(Q(e))if(S(e))e.forEach(o=>Ii(o,t,n,s));else{const o=F(e.handler)?e.handler.bind(n):t[e.handler];F(o)&&hn(i,o,e)}}function Zn(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:i,optionsCache:o,config:{optionMergeStrategies:r}}=e.appContext,a=o.get(t);let f;return a?f=a:!i.length&&!n&&!s?f=t:(f={},i.length&&i.forEach(u=>Jt(f,u,r,!0)),Jt(f,t,r)),Q(t)&&o.set(t,f),f}function Jt(e,t,n,s=!1){const{mixins:i,extends:o}=t;o&&Jt(e,o,n,!0),i&&i.forEach(r=>Jt(e,r,n,!0));for(const r in t)if(!(s&&r==="expose")){const a=Cr[r]||n&&n[r];e[r]=a?a(e[r],t[r]):t[r]}return e}const Cr={data:Ts,props:Ge,emits:Ge,methods:Ge,computed:Ge,beforeCreate:ae,created:ae,beforeMount:ae,mounted:ae,beforeUpdate:ae,updated:ae,beforeDestroy:ae,beforeUnmount:ae,destroyed:ae,unmounted:ae,activated:ae,deactivated:ae,errorCaptured:ae,serverPrefetch:ae,components:Ge,directives:Ge,watch:wr,provide:Ts,inject:xr};function Ts(e,t){return t?e?function(){return se(F(e)?e.call(this,this):e,F(t)?t.call(this,this):t)}:t:e}function xr(e,t){return Ge($n(e),$n(t))}function $n(e){if(S(e)){const t={};for(let n=0;n0)&&!(r&16)){if(r&8){const p=e.vnode.dynamicProps;for(let v=0;v{f=!0;const[y,A]=Ai(v,t,!0);se(r,y),A&&a.push(...A)};!n&&t.mixins.length&&t.mixins.forEach(p),e.extends&&p(e.extends),e.mixins&&e.mixins.forEach(p)}if(!o&&!f)return Q(e)&&s.set(e,ct),ct;if(S(o))for(let p=0;p-1,A[1]=$<0||N<$,(N>-1||R(A,"default"))&&a.push(v)}}}const u=[r,a];return Q(e)&&s.set(e,u),u}function Es(e){return e[0]!=="$"}function Is(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function Ms(e,t){return Is(e)===Is(t)}function As(e,t){return S(t)?t.findIndex(n=>Ms(n,e)):F(t)&&Ms(t,e)?0:-1}const $i=e=>e[0]==="_"||e==="$stable",es=e=>S(e)?e.map($e):[$e(e)],Ir=(e,t,n)=>{if(t._n)return t;const s=hi((...i)=>es(t(...i)),n);return s._c=!1,s},Pi=(e,t,n)=>{const s=e._ctx;for(const i in e){if($i(i))continue;const o=e[i];if(F(o))t[i]=Ir(i,o,s);else if(o!=null){const r=es(o);t[i]=()=>r}}},Oi=(e,t)=>{const n=es(t);e.slots.default=()=>n},Mr=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=D(t),zt(t,"_",n)):Pi(t,e.slots={})}else e.slots={},t&&Oi(e,t);zt(e.slots,an,1)},Ar=(e,t,n)=>{const{vnode:s,slots:i}=e;let o=!0,r=z;if(s.shapeFlag&32){const a=t._;a?n&&a===1?o=!1:(se(i,t),!n&&a===1&&delete i._):(o=!t.$stable,Pi(t,i)),r=t}else t&&(Oi(e,t),r={default:1});if(o)for(const a in i)!$i(a)&&!(a in r)&&delete i[a]};function Si(){return{app:null,config:{isNativeTag:Ji,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 $r=0;function Pr(e,t){return function(s,i=null){F(s)||(s=Object.assign({},s)),i!=null&&!Q(i)&&(i=null);const o=Si(),r=new Set;let a=!1;const f=o.app={_uid:$r++,_component:s,_props:i,_container:null,_context:o,_instance:null,version:el,get config(){return o.config},set config(u){},use(u,...p){return r.has(u)||(u&&F(u.install)?(r.add(u),u.install(f,...p)):F(u)&&(r.add(u),u(f,...p))),f},mixin(u){return o.mixins.includes(u)||o.mixins.push(u),f},component(u,p){return p?(o.components[u]=p,f):o.components[u]},directive(u,p){return p?(o.directives[u]=p,f):o.directives[u]},mount(u,p,v){if(!a){const y=fe(s,i);return y.appContext=o,p&&t?t(y,u):e(y,u,v),a=!0,f._container=u,u.__vue_app__=f,ss(y.component)||y.component.proxy}},unmount(){a&&(e(null,f._container),delete f._container.__vue_app__)},provide(u,p){return o.provides[u]=p,f}};return f}}function On(e,t,n,s,i=!1){if(S(e)){e.forEach((y,A)=>On(y,t&&(S(t)?t[A]:t),n,s,i));return}if(Ut(s)&&!i)return;const o=s.shapeFlag&4?ss(s.component)||s.component.proxy:s.el,r=i?null:o,{i:a,r:f}=e,u=t&&t.r,p=a.refs===z?a.refs={}:a.refs,v=a.setupState;if(u!=null&&u!==f&&(Z(u)?(p[u]=null,R(v,u)&&(v[u]=null)):re(u)&&(u.value=null)),F(f))Ke(f,a,12,[r,p]);else{const y=Z(f),A=re(f);if(y||A){const N=()=>{if(e.f){const $=y?R(v,f)?v[f]:p[f]:f.value;i?S($)&&Rn($,o):S($)?$.includes(o)||$.push(o):y?(p[f]=[o],R(v,f)&&(v[f]=p[f])):(f.value=[o],e.k&&(p[e.k]=f.value))}else y?(p[f]=r,R(v,f)&&(v[f]=r)):A&&(f.value=r,e.k&&(p[e.k]=r))};r?(N.id=-1,ue(N,n)):N()}}}const ue=tr;function Or(e){return Sr(e)}function Sr(e,t){const n=oo();n.__VUE__=!0;const{insert:s,remove:i,patchProp:o,createElement:r,createText:a,createComment:f,setText:u,setElementText:p,parentNode:v,nextSibling:y,setScopeId:A=we,insertStaticContent:N}=e,$=(l,c,d,g=null,h=null,b=null,x=!1,_=null,C=!!c.dynamicChildren)=>{if(l===c)return;l&&!et(l,c)&&(g=Ft(l),Ie(l,h,b,!0),l=null),c.patchFlag===-2&&(C=!1,c.dynamicChildren=null);const{type:m,ref:I,shapeFlag:T}=c;switch(m){case ln:q(l,c,d,g);break;case Te:H(l,c,d,g);break;case Kt:l==null&&le(c,d,g,x);break;case me:E(l,c,d,g,h,b,x,_,C);break;default:T&1?ee(l,c,d,g,h,b,x,_,C):T&6?V(l,c,d,g,h,b,x,_,C):(T&64||T&128)&&m.process(l,c,d,g,h,b,x,_,C,rt)}I!=null&&h&&On(I,l&&l.ref,b,c||l,!c)},q=(l,c,d,g)=>{if(l==null)s(c.el=a(c.children),d,g);else{const h=c.el=l.el;c.children!==l.children&&u(h,c.children)}},H=(l,c,d,g)=>{l==null?s(c.el=f(c.children||""),d,g):c.el=l.el},le=(l,c,d,g)=>{[l.el,l.anchor]=N(l.children,c,d,g,l.el,l.anchor)},O=({el:l,anchor:c},d,g)=>{let h;for(;l&&l!==c;)h=y(l),s(l,d,g),l=h;s(c,d,g)},K=({el:l,anchor:c})=>{let d;for(;l&&l!==c;)d=y(l),i(l),l=d;i(c)},ee=(l,c,d,g,h,b,x,_,C)=>{x=x||c.type==="svg",l==null?je(c,d,g,h,b,x,_,C):J(l,c,h,b,x,_,C)},je=(l,c,d,g,h,b,x,_)=>{let C,m;const{type:I,props:T,shapeFlag:M,transition:P,dirs:j}=l;if(C=l.el=r(l.type,b,T&&T.is,T),M&8?p(C,l.children):M&16&&L(l.children,C,null,g,h,b&&I!=="foreignObject",x,_),j&&Je(l,null,g,"created"),Ee(C,l,l.scopeId,x,g),T){for(const B in T)B!=="value"&&!Bt(B)&&o(C,B,null,T[B],b,l.children,g,h,Se);"value"in T&&o(C,"value",null,T.value),(m=T.onVnodeBeforeMount)&&Ae(m,g,l)}j&&Je(l,null,g,"beforeMount");const U=(!h||h&&!h.pendingBranch)&&P&&!P.persisted;U&&P.beforeEnter(C),s(C,c,d),((m=T&&T.onVnodeMounted)||U||j)&&ue(()=>{m&&Ae(m,g,l),U&&P.enter(C),j&&Je(l,null,g,"mounted")},h)},Ee=(l,c,d,g,h)=>{if(d&&A(l,d),g)for(let b=0;b{for(let m=C;m{const _=c.el=l.el;let{patchFlag:C,dynamicChildren:m,dirs:I}=c;C|=l.patchFlag&16;const T=l.props||z,M=c.props||z;let P;d&&Ye(d,!1),(P=M.onVnodeBeforeUpdate)&&Ae(P,d,c,l),I&&Je(c,l,d,"beforeUpdate"),d&&Ye(d,!0);const j=h&&c.type!=="foreignObject";if(m?W(l.dynamicChildren,m,_,d,g,j,b):x||k(l,c,_,null,d,g,j,b,!1),C>0){if(C&16)ie(_,c,T,M,d,g,h);else if(C&2&&T.class!==M.class&&o(_,"class",null,M.class,h),C&4&&o(_,"style",T.style,M.style,h),C&8){const U=c.dynamicProps;for(let B=0;B{P&&Ae(P,d,c,l),I&&Je(c,l,d,"updated")},g)},W=(l,c,d,g,h,b,x)=>{for(let _=0;_{if(d!==g){if(d!==z)for(const _ in d)!Bt(_)&&!(_ in g)&&o(l,_,d[_],null,x,c.children,h,b,Se);for(const _ in g){if(Bt(_))continue;const C=g[_],m=d[_];C!==m&&_!=="value"&&o(l,_,m,C,x,c.children,h,b,Se)}"value"in g&&o(l,"value",d.value,g.value)}},E=(l,c,d,g,h,b,x,_,C)=>{const m=c.el=l?l.el:a(""),I=c.anchor=l?l.anchor:a("");let{patchFlag:T,dynamicChildren:M,slotScopeIds:P}=c;P&&(_=_?_.concat(P):P),l==null?(s(m,d,g),s(I,d,g),L(c.children,d,I,h,b,x,_,C)):T>0&&T&64&&M&&l.dynamicChildren?(W(l.dynamicChildren,M,d,h,b,x,_),(c.key!=null||h&&c===h.subTree)&&Fi(l,c,!0)):k(l,c,d,I,h,b,x,_,C)},V=(l,c,d,g,h,b,x,_,C)=>{c.slotScopeIds=_,l==null?c.shapeFlag&512?h.ctx.activate(c,d,g,x,C):pe(c,d,g,h,b,x,C):_t(l,c,C)},pe=(l,c,d,g,h,b,x)=>{const _=l.component=Ur(l,g,h);if(on(l)&&(_.ctx.renderer=rt),Wr(_),_.asyncDep){if(h&&h.registerDep(_,te),!l.el){const C=_.subTree=fe(Te);H(null,C,c,d)}return}te(_,l,c,d,h,b,x)},_t=(l,c,d)=>{const g=c.component=l.component;if(Go(l,c,d))if(g.asyncDep&&!g.asyncResolved){Y(g,c,d);return}else g.next=c,Vo(g.update),g.update();else c.el=l.el,g.vnode=c},te=(l,c,d,g,h,b,x)=>{const _=()=>{if(l.isMounted){let{next:I,bu:T,u:M,parent:P,vnode:j}=l,U=I,B;Ye(l,!1),I?(I.el=j.el,Y(l,I,x)):I=j,T&&dn(T),(B=I.props&&I.props.onVnodeBeforeUpdate)&&Ae(B,P,I,j),Ye(l,!0);const G=pn(l),be=l.subTree;l.subTree=G,$(be,G,v(be.el),Ft(be),l,h,b),I.el=G.el,U===null&&Zo(l,G.el),M&&ue(M,h),(B=I.props&&I.props.onVnodeUpdated)&&ue(()=>Ae(B,P,I,j),h)}else{let I;const{el:T,props:M}=c,{bm:P,m:j,parent:U}=l,B=Ut(c);if(Ye(l,!1),P&&dn(P),!B&&(I=M&&M.onVnodeBeforeMount)&&Ae(I,U,c),Ye(l,!0),T&&fn){const G=()=>{l.subTree=pn(l),fn(T,l.subTree,l,h,null)};B?c.type.__asyncLoader().then(()=>!l.isUnmounted&&G()):G()}else{const G=l.subTree=pn(l);$(null,G,d,g,l,h,b),c.el=G.el}if(j&&ue(j,h),!B&&(I=M&&M.onVnodeMounted)){const G=c;ue(()=>Ae(I,U,G),h)}(c.shapeFlag&256||U&&Ut(U.vnode)&&U.vnode.shapeFlag&256)&&l.a&&ue(l.a,h),l.isMounted=!0,c=d=g=null}},C=l.effect=new kn(_,()=>Qn(m),l.scope),m=l.update=()=>C.run();m.id=l.uid,Ye(l,!0),m()},Y=(l,c,d)=>{c.component=l;const g=l.vnode.props;l.vnode=c,l.next=null,Er(l,c.props,g,d),Ar(l,c.children,d),gt(),bs(),mt()},k=(l,c,d,g,h,b,x,_,C=!1)=>{const m=l&&l.children,I=l?l.shapeFlag:0,T=c.children,{patchFlag:M,shapeFlag:P}=c;if(M>0){if(M&128){St(m,T,d,g,h,b,x,_,C);return}else if(M&256){Ve(m,T,d,g,h,b,x,_,C);return}}P&8?(I&16&&Se(m,h,b),T!==m&&p(d,T)):I&16?P&16?St(m,T,d,g,h,b,x,_,C):Se(m,h,b,!0):(I&8&&p(d,""),P&16&&L(T,d,g,h,b,x,_,C))},Ve=(l,c,d,g,h,b,x,_,C)=>{l=l||ct,c=c||ct;const m=l.length,I=c.length,T=Math.min(m,I);let M;for(M=0;MI?Se(l,h,b,!0,!1,T):L(c,d,g,h,b,x,_,C,T)},St=(l,c,d,g,h,b,x,_,C)=>{let m=0;const I=c.length;let T=l.length-1,M=I-1;for(;m<=T&&m<=M;){const P=l[m],j=c[m]=C?ke(c[m]):$e(c[m]);if(et(P,j))$(P,j,d,null,h,b,x,_,C);else break;m++}for(;m<=T&&m<=M;){const P=l[T],j=c[M]=C?ke(c[M]):$e(c[M]);if(et(P,j))$(P,j,d,null,h,b,x,_,C);else break;T--,M--}if(m>T){if(m<=M){const P=M+1,j=PM)for(;m<=T;)Ie(l[m],h,b,!0),m++;else{const P=m,j=m,U=new Map;for(m=j;m<=M;m++){const he=c[m]=C?ke(c[m]):$e(c[m]);he.key!=null&&U.set(he.key,m)}let B,G=0;const be=M-j+1;let lt=!1,as=0;const bt=new Array(be);for(m=0;m=be){Ie(he,h,b,!0);continue}let Me;if(he.key!=null)Me=U.get(he.key);else for(B=j;B<=M;B++)if(bt[B-j]===0&&et(he,c[B])){Me=B;break}Me===void 0?Ie(he,h,b,!0):(bt[Me-j]=m+1,Me>=as?as=Me:lt=!0,$(he,c[Me],d,null,h,b,x,_,C),G++)}const cs=lt?Fr(bt):ct;for(B=cs.length-1,m=be-1;m>=0;m--){const he=j+m,Me=c[he],fs=he+1{const{el:b,type:x,transition:_,children:C,shapeFlag:m}=l;if(m&6){qe(l.component.subTree,c,d,g);return}if(m&128){l.suspense.move(c,d,g);return}if(m&64){x.move(l,c,d,rt);return}if(x===me){s(b,c,d);for(let T=0;T_.enter(b),h);else{const{leave:T,delayLeave:M,afterLeave:P}=_,j=()=>s(b,c,d),U=()=>{T(b,()=>{j(),P&&P()})};M?M(b,j,U):U()}else s(b,c,d)},Ie=(l,c,d,g=!1,h=!1)=>{const{type:b,props:x,ref:_,children:C,dynamicChildren:m,shapeFlag:I,patchFlag:T,dirs:M}=l;if(_!=null&&On(_,null,d,l,!0),I&256){c.ctx.deactivate(l);return}const P=I&1&&M,j=!Ut(l);let U;if(j&&(U=x&&x.onVnodeBeforeUnmount)&&Ae(U,c,l),I&6)ki(l.component,d,g);else{if(I&128){l.suspense.unmount(d,g);return}P&&Je(l,null,c,"beforeUnmount"),I&64?l.type.remove(l,c,d,h,rt,g):m&&(b!==me||T>0&&T&64)?Se(m,c,d,!1,!0):(b===me&&T&384||!h&&I&16)&&Se(C,c,d),g&&rs(l)}(j&&(U=x&&x.onVnodeUnmounted)||P)&&ue(()=>{U&&Ae(U,c,l),P&&Je(l,null,c,"unmounted")},d)},rs=l=>{const{type:c,el:d,anchor:g,transition:h}=l;if(c===me){Bi(d,g);return}if(c===Kt){K(l);return}const b=()=>{i(d),h&&!h.persisted&&h.afterLeave&&h.afterLeave()};if(l.shapeFlag&1&&h&&!h.persisted){const{leave:x,delayLeave:_}=h,C=()=>x(d,b);_?_(l.el,b,C):C()}else b()},Bi=(l,c)=>{let d;for(;l!==c;)d=y(l),i(l),l=d;i(c)},ki=(l,c,d)=>{const{bum:g,scope:h,update:b,subTree:x,um:_}=l;g&&dn(g),h.stop(),b&&(b.active=!1,Ie(x,l,c,d)),_&&ue(_,c),ue(()=>{l.isUnmounted=!0},c),c&&c.pendingBranch&&!c.isUnmounted&&l.asyncDep&&!l.asyncResolved&&l.suspenseId===c.pendingId&&(c.deps--,c.deps===0&&c.resolve())},Se=(l,c,d,g=!1,h=!1,b=0)=>{for(let x=b;xl.shapeFlag&6?Ft(l.component.subTree):l.shapeFlag&128?l.suspense.next():y(l.anchor||l.el),ls=(l,c,d)=>{l==null?c._vnode&&Ie(c._vnode,null,null,!0):$(c._vnode||null,l,c,null,null,null,d),bs(),ui(),c._vnode=l},rt={p:$,um:Ie,m:qe,r:rs,mt:pe,mc:L,pc:k,pbc:W,n:Ft,o:e};let cn,fn;return t&&([cn,fn]=t(rt)),{render:ls,hydrate:cn,createApp:Pr(ls,cn)}}function Ye({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Fi(e,t,n=!1){const s=e.children,i=t.children;if(S(s)&&S(i))for(let o=0;o>1,e[n[a]]0&&(t[s]=n[o-1]),n[o]=s)}}for(o=n.length,r=n[o-1];o-- >0;)n[o]=r,r=t[r];return n}const Lr=e=>e.__isTeleport,me=Symbol(void 0),ln=Symbol(void 0),Te=Symbol(void 0),Kt=Symbol(void 0),Tt=[];let xe=null;function ce(e=!1){Tt.push(xe=e?null:[])}function Nr(){Tt.pop(),xe=Tt[Tt.length-1]||null}let Pt=1;function $s(e){Pt+=e}function Li(e){return e.dynamicChildren=Pt>0?xe||ct:null,Nr(),Pt>0&&xe&&xe.push(e),e}function it(e,t,n,s,i,o){return Li(w(e,t,n,s,i,o,!0))}function Be(e,t,n,s,i){return Li(fe(e,t,n,s,i,!0))}function Sn(e){return e?e.__v_isVNode===!0:!1}function et(e,t){return e.type===t.type&&e.key===t.key}const an="__vInternal",Ni=({key:e})=>e??null,Wt=({ref:e,ref_key:t,ref_for:n})=>e!=null?Z(e)||re(e)||F(e)?{i:ve,r:e,k:t,f:!!n}:e:null;function w(e,t=null,n=null,s=0,i=null,o=e===me?0:1,r=!1,a=!1){const f={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Ni(t),ref:t&&Wt(t),scopeId:nn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:s,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:ve};return a?(ns(f,n),o&128&&e.normalize(f)):n&&(f.shapeFlag|=Z(n)?8:16),Pt>0&&!r&&xe&&(f.patchFlag>0||o&6)&&f.patchFlag!==32&&xe.push(f),f}const fe=jr;function jr(e,t=null,n=null,s=0,i=null,o=!1){if((!e||e===Ei)&&(e=Te),Sn(e)){const a=ze(e,t,!0);return n&&ns(a,n),Pt>0&&!o&&xe&&(a.shapeFlag&6?xe[xe.indexOf(e)]=a:xe.push(a)),a.patchFlag|=-2,a}if(Yr(e)&&(e=e.__vccOpts),t){t=Rr(t);let{class:a,style:f}=t;a&&!Z(a)&&(t.class=ne(a)),Q(f)&&(si(f)&&!S(f)&&(f=se({},f)),t.style=Nn(f))}const r=Z(e)?1:er(e)?128:Lr(e)?64:Q(e)?4:F(e)?2:0;return w(e,t,n,s,i,r,o,!0)}function Rr(e){return e?si(e)||an in e?se({},e):e:null}function ze(e,t,n=!1){const{props:s,ref:i,patchFlag:o,children:r}=e,a=t?Hr(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:a,key:a&&Ni(a),ref:t&&t.ref?n&&i?S(i)?i.concat(Wt(t)):[i,Wt(t)]:Wt(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:r,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==me?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ze(e.ssContent),ssFallback:e.ssFallback&&ze(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Et(e=" ",t=0){return fe(ln,null,e,t)}function ts(e,t){const n=fe(Kt,null,e);return n.staticCount=t,n}function Dr(e="",t=!1){return t?(ce(),Be(Te,null,e)):fe(Te,null,e)}function $e(e){return e==null||typeof e=="boolean"?fe(Te):S(e)?fe(me,null,e.slice()):typeof e=="object"?ke(e):fe(ln,null,String(e))}function ke(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ze(e)}function ns(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(S(t))n=16;else if(typeof t=="object")if(s&65){const i=t.default;i&&(i._c&&(i._d=!1),ns(e,i()),i._c&&(i._d=!0));return}else{n=32;const i=t._;!i&&!(an in t)?t._ctx=ve:i===3&&ve&&(ve.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else F(t)?(t={default:t,_ctx:ve},n=32):(t=String(t),s&64?(n=16,t=[Et(t)]):n=8);e.children=t,e.shapeFlag|=n}function Hr(...e){const t={};for(let n=0;nX||ve,pt=e=>{X=e,e.scope.on()},st=()=>{X&&X.scope.off(),X=null};function ji(e){return e.vnode.shapeFlag&4}let Ot=!1;function Wr(e,t=!1){Ot=t;const{props:n,children:s}=e.vnode,i=ji(e);Tr(e,n,i,t),Mr(e,s);const o=i?zr(e,t):void 0;return Ot=!1,o}function zr(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=ii(new Proxy(e.ctx,_r));const{setup:s}=n;if(s){const i=e.setupContext=s.length>1?qr(e):null;pt(e),gt();const o=Ke(s,e,0,[e.props,i]);if(mt(),st(),zs(o)){if(o.then(st,st),t)return o.then(r=>{Ps(e,r,t)}).catch(r=>{en(r,e,0)});e.asyncDep=o}else Ps(e,o,t)}else Ri(e,t)}function Ps(e,t,n){F(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Q(t)&&(e.setupState=li(t)),Ri(e,n)}let Os;function Ri(e,t,n){const s=e.type;if(!e.render){if(!t&&Os&&!s.render){const i=s.template||Zn(e).template;if(i){const{isCustomElement:o,compilerOptions:r}=e.appContext.config,{delimiters:a,compilerOptions:f}=s,u=se(se({isCustomElement:o,delimiters:a},r),f);s.render=Os(i,u)}}e.render=s.render||we}pt(e),gt(),br(e),mt(),st()}function Vr(e){return new Proxy(e.attrs,{get(t,n){return de(e,"get","$attrs"),t[n]}})}function qr(e){const t=s=>{e.exposed=s||{}};let n;return{get attrs(){return n||(n=Vr(e))},slots:e.slots,emit:e.emit,expose:t}}function ss(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(li(ii(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in wt)return wt[n](e)},has(t,n){return n in t||n in wt}}))}function Jr(e,t=!0){return F(e)?e.displayName||e.name:e.name||t&&e.__name}function Yr(e){return F(e)&&"__vccOpts"in e}const Qr=(e,t)=>Uo(e,t,Ot);function Xr(e,t,n){const s=arguments.length;return s===2?Q(t)&&!S(t)?Sn(t)?fe(e,null,[t]):fe(e,t):fe(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Sn(n)&&(n=[n]),fe(e,t,n))}const Gr=Symbol(""),Zr=()=>kt(Gr),el="3.2.47",tl="http://www.w3.org/2000/svg",tt=typeof document<"u"?document:null,Ss=tt&&tt.createElement("template"),nl={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const i=t?tt.createElementNS(tl,e):tt.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&i.setAttribute("multiple",s.multiple),i},createText:e=>tt.createTextNode(e),createComment:e=>tt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>tt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,i,o){const r=n?n.previousSibling:t.lastChild;if(i&&(i===o||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),!(i===o||!(i=i.nextSibling)););else{Ss.innerHTML=s?`${e}`:e;const a=Ss.content;if(s){const f=a.firstChild;for(;f.firstChild;)a.appendChild(f.firstChild);a.removeChild(f)}t.insertBefore(a,n)}return[r?r.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function sl(e,t,n){const s=e._vtc;s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function il(e,t,n){const s=e.style,i=Z(n);if(n&&!i){if(t&&!Z(t))for(const o in t)n[o]==null&&Fn(s,o,"");for(const o in n)Fn(s,o,n[o])}else{const o=s.display;i?t!==n&&(s.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(s.display=o)}}const Fs=/\s*!important$/;function Fn(e,t,n){if(S(n))n.forEach(s=>Fn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=ol(e,t);Fs.test(n)?e.setProperty(ht(s),n.replace(Fs,""),"important"):e[s]=n}}const Ls=["Webkit","Moz","ms"],vn={};function ol(e,t){const n=vn[t];if(n)return n;let s=Oe(t);if(s!=="filter"&&s in e)return vn[t]=s;s=Gt(s);for(let i=0;i_n||(dl.then(()=>_n=0),_n=Date.now());function hl(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;_e(gl(s,n.value),t,5,[s])};return n.value=e,n.attached=pl(),n}function gl(e,t){if(S(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>i=>!i._stopped&&s&&s(i))}else return t}const Rs=/^on[a-z]/,ml=(e,t,n,s,i=!1,o,r,a,f)=>{t==="class"?sl(e,s,i):t==="style"?il(e,n,s):Yt(t)?jn(t)||fl(e,t,n,s,r):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):vl(e,t,s,i))?ll(e,t,s,o,r,a,f):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),rl(e,t,s,i))};function vl(e,t,n,s){return s?!!(t==="innerHTML"||t==="textContent"||t in e&&Rs.test(t)&&F(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||Rs.test(t)&&Z(n)?!1:t in e}const De="transition",yt="animation",is=(e,{slots:t})=>Xr(vi,_l(e),t);is.displayName="Transition";const Di={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};is.props=se({},vi.props,Di);const Qe=(e,t=[])=>{S(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ds=e=>e?S(e)?e.some(t=>t.length>1):e.length>1:!1;function _l(e){const t={};for(const E in e)E in Di||(t[E]=e[E]);if(e.css===!1)return t;const{name:n="v",type:s,duration:i,enterFromClass:o=`${n}-enter-from`,enterActiveClass:r=`${n}-enter-active`,enterToClass:a=`${n}-enter-to`,appearFromClass:f=o,appearActiveClass:u=r,appearToClass:p=a,leaveFromClass:v=`${n}-leave-from`,leaveActiveClass:y=`${n}-leave-active`,leaveToClass:A=`${n}-leave-to`}=e,N=bl(i),$=N&&N[0],q=N&&N[1],{onBeforeEnter:H,onEnter:le,onEnterCancelled:O,onLeave:K,onLeaveCancelled:ee,onBeforeAppear:je=H,onAppear:Ee=le,onAppearCancelled:L=O}=t,J=(E,V,pe)=>{Xe(E,V?p:a),Xe(E,V?u:r),pe&&pe()},W=(E,V)=>{E._isLeaving=!1,Xe(E,v),Xe(E,A),Xe(E,y),V&&V()},ie=E=>(V,pe)=>{const _t=E?Ee:le,te=()=>J(V,E,pe);Qe(_t,[V,te]),Hs(()=>{Xe(V,E?f:o),He(V,E?p:a),Ds(_t)||Bs(V,s,$,te)})};return se(t,{onBeforeEnter(E){Qe(H,[E]),He(E,o),He(E,r)},onBeforeAppear(E){Qe(je,[E]),He(E,f),He(E,u)},onEnter:ie(!1),onAppear:ie(!0),onLeave(E,V){E._isLeaving=!0;const pe=()=>W(E,V);He(E,v),xl(),He(E,y),Hs(()=>{E._isLeaving&&(Xe(E,v),He(E,A),Ds(K)||Bs(E,s,q,pe))}),Qe(K,[E,pe])},onEnterCancelled(E){J(E,!1),Qe(O,[E])},onAppearCancelled(E){J(E,!0),Qe(L,[E])},onLeaveCancelled(E){W(E),Qe(ee,[E])}})}function bl(e){if(e==null)return null;if(Q(e))return[bn(e.enter),bn(e.leave)];{const t=bn(e);return[t,t]}}function bn(e){return io(e)}function He(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function Xe(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function Hs(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let yl=0;function Bs(e,t,n,s){const i=e._endId=++yl,o=()=>{i===e._endId&&s()};if(n)return setTimeout(o,n);const{type:r,timeout:a,propCount:f}=Cl(e,t);if(!r)return s();const u=r+"end";let p=0;const v=()=>{e.removeEventListener(u,y),o()},y=A=>{A.target===e&&++p>=f&&v()};setTimeout(()=>{p(n[N]||"").split(", "),i=s(`${De}Delay`),o=s(`${De}Duration`),r=ks(i,o),a=s(`${yt}Delay`),f=s(`${yt}Duration`),u=ks(a,f);let p=null,v=0,y=0;t===De?r>0&&(p=De,v=r,y=o.length):t===yt?u>0&&(p=yt,v=u,y=f.length):(v=Math.max(r,u),p=v>0?r>u?De:yt:null,y=p?p===De?o.length:f.length:0);const A=p===De&&/\b(transform|all)(,|$)/.test(s(`${De}Property`).toString());return{type:p,timeout:v,propCount:y,hasTransform:A}}function ks(e,t){for(;e.lengthUs(n)+Us(e[s])))}function Us(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function xl(){return document.body.offsetHeight}const wl=se({patchProp:ml},nl);let Ks;function Tl(){return Ks||(Ks=Or(wl))}const El=(...e)=>{const t=Tl().createApp(...e),{mount:n}=t;return t.mount=s=>{const i=Il(s);if(!i)return;const o=t._component;!F(o)&&!o.render&&!o.template&&(o.template=i.innerHTML),i.innerHTML="";const r=n(i,!1,i instanceof SVGElement);return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),r},t};function Il(e){return Z(e)?document.querySelector(e):e}const os="/assets/Vue-5532db34.svg",Ml="/assets/Python-3cb5503b.svg",Al="/assets/C-7a16311b.svg",$l="/assets/info-2a702950.svg",Pl="/assets/C.shapes-6ef45937.jpeg",Ol="/assets/C.laplace-207c50c6.jpeg",Sl="/assets/C.mandel-933eaf0f.jpeg",Fl="/assets/C.nbody-f4c5f1bc.jpeg",Hi=e=>(Xn("data-v-27d756da"),e=e(),Gn(),e),Ll=Hi(()=>w("h2",null,"C++ Graphics & Computational Science Projects",-1)),Nl=Hi(()=>w("h5",null,"2011",-1)),jl={class:"text-cell"},Rl={class:"text-cell"},Dl={class:"text-cell"},Hl={class:"text-cell"},Bl=sn({__name:"C",setup(e){const t=Jn("");return(n,s)=>(ce(),it("div",null,[Ll,Nl,w("table",null,[w("tr",null,[w("td",null,[w("img",{src:Pl,onClick:s[0]||(s[0]=i=>t.value="shapes"),onMouseover:s[1]||(s[1]=i=>t.value="shapes")},null,32)]),w("td",jl,[w("h4",{onClick:s[2]||(s[2]=i=>t.value="shapes"),onMouseover:s[3]||(s[3]=i=>t.value="shapes")}," OpenGL Scene ",32),w("p",{class:ne({focused:t.value==="shapes"})}," Draws a lit scene with various rotating objects. Camera can rotate with the mouse. The sphere is created by subdividing a tetrahedron. ",2)])]),w("tr",null,[w("td",null,[w("img",{src:Ol,onClick:s[4]||(s[4]=i=>t.value="laplace"),onMouseover:s[5]||(s[5]=i=>t.value="laplace")},null,32)]),w("td",Rl,[w("h4",{onClick:s[6]||(s[6]=i=>t.value="laplace"),onMouseover:s[7]||(s[7]=i=>t.value="laplace")}," OpenMP Laplace Heatmap ",32),w("p",{class:ne({focused:t.value==="laplace"})}," Simulates a heat distribution map with successive approximations computed in parallel. ",2)])]),w("tr",null,[w("td",null,[w("img",{src:Sl,onClick:s[8]||(s[8]=i=>t.value="mandel"),onMouseover:s[9]||(s[9]=i=>t.value="mandel")},null,32)]),w("td",Dl,[w("h4",{onClick:s[10]||(s[10]=i=>t.value="mandel"),onMouseover:s[11]||(s[11]=i=>t.value="mandel")}," OpenMPI Mandelbrot Set ",32),w("p",{class:ne({focused:t.value==="mandel"})}," Calculates and visualizes the Mandelbrot set in parallel via message passing. ",2)])]),w("tr",null,[w("td",null,[w("img",{src:Fl,onClick:s[12]||(s[12]=i=>t.value="nbody"),onMouseover:s[13]||(s[13]=i=>t.value="nbody")},null,32)]),w("td",Hl,[w("h4",{onClick:s[14]||(s[14]=i=>t.value="nbody"),onMouseover:s[15]||(s[15]=i=>t.value="nbody")}," OpenMPI N-Body Orbits ",32),w("p",{class:ne({focused:t.value==="nbody"})}," Simulates the planetary rotations of our solar system as an n-body problem, calculated in parallel via message passing. Visualized as a ten year orbit of the planets. ",2)])])])]))}});const vt=(e,t)=>{const n=e.__vccOpts||e;for(const[s,i]of t)n[s]=i;return n},kl=vt(Bl,[["__scopeId","data-v-27d756da"]]),Ul="/assets/LinkedIn-7af54eae.svg";const Kl={},Wl=ts('

Skills

Expertise 10+ Years

  • Web Apps
  • JavaScript
  • HTML
  • CSS
  • Clean Coding
  • Documentation

Proficient 3-9 Years

  • Hybrid Apps / Capacitor
  • Web Architecture & APIs
  • Project Management
  • Team Leadership
  • Vue
  • TypeScript
  • Node
  • Django
  • Python
  • Elm
  • Git
  • SQL
  • NoSQL
  • Firebase
  • AJAX
  • Apache
  • UI / UX
  • SDLC & QA
  • Gamification
  • Microservices
  • Custom CMS / LMS
  • Operating Systems
  • Remote Collaboration
  • Agile Development
  • Customer Service
  • Technical Writing & Support

Experienced 1-2 Years

  • Progressive Web Apps
  • GitHub Actions
  • PHP
  • Java
  • Drupal
  • WordPress
  • GCP
  • SVN
  • XState
  • CI / CD
  • TDD
  • SASS

Familiar < 1 year

  • C++
  • Go
  • Rust
  • React
  • Angular
  • AWS
  • WebGL
  • GraphQL
  • Selenium
  • Godot

General Tech Interests

  • Next gen web technologies
  • Interactivity & gamification
  • Cross-platform & hybrid apps
  • Educational & social tools
  • Data visualization, simulation & virtualization
  • Sustainable & open source software
  • Decentralized governance, democracy & blockchains
  • Scientific, concurrent & high performance computing
  • & More

Other Hobbies

  • Reading
  • Gaming
  • Tai Chi
  • Qigong
  • Yoga
  • Jeet Kune Do
  • Hiking
  • Meditation
',14),zl=[Wl];function Vl(e,t){return ce(),it("div",null,zl)}const ql=vt(Kl,[["render",Vl],["__scopeId","data-v-6766f45a"]]),Jl={};function Yl(e,t){return ce(),it("h3",null,"Coming Soon: Godot Project Demo")}const Ql=vt(Jl,[["render",Yl]]),Xl="/assets/Python.brts-3853e43d.png",Gl="/assets/Python.breaker1-8a6f137f.jpeg",Zl="/assets/Python.breaker2-d47a9fff.jpeg";const ea={},ta=ts('

White Label Django Learning Management Platform

2018 ~ 2020

This Python project was inherited when I started working with Oregon Research Institute and Influents Innovations. My team and I maintained and enhanced the existing collection of web apps, servers, databases, and associated native mobile apps for a few years while expanding their scope to support a dozen different research projects.

A few of the many enhancements I worked on included evolving the project into a progressive web app (PWA), implementing custom landing pages configurable by project managers, and enhancing the web servers to support HTTPS encryption with auto-renewing certificates.

Eventually, I became intimately familiar with the existing platform and its limitations relative to future goals for the platform. So I led the successful efforts to propose, architect, and rebuild the LMS platform from scratch using innovative and efficient technologies (see Vue section for details on the successor project).

Learn More

Find more details here in the 'T-BIDS' product section

Block Breaker Game

2010

Breakout style game built using the Pygame library. Extra balls make this version more interesting than the original game.

',13),na=[ta];function sa(e,t){return ce(),it("div",null,na)}const ia=vt(ea,[["render",sa],["__scopeId","data-v-b4ac3716"]]),oa="/assets/Vue.brts-0d07c5b9.png",ra="/assets/Ionic-6dc8eb67.svg",la="/assets/Node-3013b930.svg",aa="/assets/TS-14a00f9d.svg",ca="/assets/Firebase-44a65a5e.svg",fa="/assets/Capacitor-299ab557.svg",ot=e=>(Xn("data-v-8202beaf"),e=e(),Gn(),e),ua=ot(()=>w("h2",null,"White Label Cross-Platform Vue Learning Management Platform",-1)),da=ot(()=>w("h5",null,"2020 ~ 2023",-1)),pa=ot(()=>w("img",{src:oa,class:"banner",alt:"be ready to smile images"},null,-1)),ha=ot(()=>w("p",null," This was a project I initiated after working with Oregon Research Institute and Influents Innovations on their existing LMS platform for a few years and recognizing the limitations holding it back (see Python section for more details on the legacy product). ",-1)),ga=ot(()=>w("p",null," In the first year of the project, I led the proposal, prototyping, and architecture phases of the software rebuild process. Next, my small team and I completed the core project and features over two more years of development, then launched our organization's new flagship product across web and mobile platforms successfully. ",-1)),ma=ot(()=>w("br",null,null,-1)),va=ot(()=>w("h3",null,"Tech Stack",-1)),_a=ts('

Major Enhancements

New Software AdvantagesLegacy Software Limitations
One unified codebase which compiled to native web, iOS & Android versions Three different codebases, one for each platform supported, and each in a different language
A cloud based serverless backend architecture, easily scalable and hosted by Google Firebase Custom Django servers, hosted by our inhouse IT staff, and managed manually by me and our small software team
Modern frontend framework and component libraries for rapid development and supperior visual and interactive quality No frontend framework foundation, all UI/UX design work done from scratch, further hindering our productivity and ability to iterate quickly

Learn More

For a sample of hybrid mobile versions of an app compiled from the unified LMS platform, please check out these App Store and Play Store pages of an associated project.

Find more details about specific projects utilizing the custom LMS platform here in the 'Be Ready To Smile' & 'MomMoodBooster' product sections.

',7),ba=sn({__name:"Vue",setup(e){const t=Jn("");return(n,s)=>(ce(),it("div",null,[ua,da,pa,ha,ga,ma,va,w("img",{src:os,onClick:s[0]||(s[0]=i=>t.value="vue"),onMouseover:s[1]||(s[1]=i=>t.value="vue"),onMouseleave:s[2]||(s[2]=i=>t.value=""),class:"logo",alt:"Vue logo"},null,32),w("img",{src:ra,onClick:s[3]||(s[3]=i=>t.value="ionic"),onMouseover:s[4]||(s[4]=i=>t.value="ionic"),onMouseleave:s[5]||(s[5]=i=>t.value=""),class:"logo",alt:"Ionic logo"},null,32),w("img",{src:la,onClick:s[6]||(s[6]=i=>t.value="node"),onMouseover:s[7]||(s[7]=i=>t.value="node"),onMouseleave:s[8]||(s[8]=i=>t.value=""),class:"logo",alt:"Node logo"},null,32),w("img",{src:aa,onClick:s[9]||(s[9]=i=>t.value="ts"),onMouseover:s[10]||(s[10]=i=>t.value="ts"),onMouseleave:s[11]||(s[11]=i=>t.value=""),class:"logo",alt:"TypeScript logo"},null,32),w("img",{src:ca,onClick:s[12]||(s[12]=i=>t.value="firebase"),onMouseover:s[13]||(s[13]=i=>t.value="firebase"),onMouseleave:s[14]||(s[14]=i=>t.value=""),class:"logo",alt:"Firebase logo"},null,32),w("img",{src:fa,onClick:s[15]||(s[15]=i=>t.value="capacitor"),onMouseover:s[16]||(s[16]=i=>t.value="capacitor"),onMouseleave:s[17]||(s[17]=i=>t.value=""),class:"logo",alt:"Capacitor logo"},null,32),w("p",{class:ne({focused:t.value==="vue"})},"Vue Framework",2),w("p",{class:ne({focused:t.value==="ionic"})},"Ionic Framework",2),w("p",{class:ne({focused:t.value==="node"})},"Node.js",2),w("p",{class:ne({focused:t.value==="ts"})},"TypeScript",2),w("p",{class:ne({focused:t.value==="firebase"})},"Firebase + GCP",2),w("p",{class:ne({focused:t.value==="capacitor"})}," Capacitor (Hybrid Mobile Apps) ",2),_a]))}});const ya=vt(ba,[["__scopeId","data-v-8202beaf"]]),Ca=w("h2",null,"WebGL Benchmark ~ 2012",-1),xa=w("canvas",{id:"canvas",width:"658",height:"410"},null,-1),wa=w("div",{id:"framerate"},null,-1),Ta=w("input",{type:"checkbox",id:"lighting",checked:""},null,-1),Ea=w("input",{type:"checkbox",id:"per-pixel",checked:"",style:{display:"none"}},null,-1),Ia=w("p",null,"A basic benchmark exercise created to experiment with WebGL.",-1),Ma=w("p",null,"The JavaScript and OpenGL source is available in this page.",-1),Aa=w("p",null,"Click & drag to rotate camera.",-1),$a=sn({__name:"WebGL",setup(e){return(t,n)=>(ce(),it(me,null,[Ca,xa,wa,Ta,Et(" Use Lighting "),Ea,Ia,Ma,Aa],64))}}),Pa=e=>(Xn("data-v-9745eb4c"),e=e(),Gn(),e),Oa=Pa(()=>w("footer",null,[Et(" Paul Naylor "),w("br"),Et(" Made with "),w("img",{src:os,class:"icon",alt:"Vue logo"}),Et("ue ")],-1)),Sa=sn({__name:"App",setup(e){const t=Jn("");return(n,s)=>(ce(),it(me,null,[w("div",null,[w("img",{src:os,onClick:s[0]||(s[0]=i=>t.value="Vue"),class:ne(["logo",{active:t.value==="Vue"}]),alt:"Vue logo"},null,2),w("img",{src:Ml,onClick:s[1]||(s[1]=i=>t.value="Python"),class:ne(["logo",{active:t.value==="Python"}]),alt:"Python logo"},null,2),w("img",{src:Al,onClick:s[2]||(s[2]=i=>t.value="C"),class:ne(["logo",{active:t.value==="C"}]),alt:"C++ logo"},null,2),w("img",{src:$l,onClick:s[3]||(s[3]=i=>t.value="Info"),class:ne(["logo",{active:t.value==="Info"}]),alt:"info logo"},null,2)]),fe(is,{name:"fade",mode:"out-in"},{default:hi(()=>[t.value==="C"?(ce(),Be(kl,{key:0})):t.value==="Godot"?(ce(),Be(Ql,{key:1})):t.value==="Python"?(ce(),Be(ia,{key:2})):t.value==="Vue"?(ce(),Be(ya,{key:3})):t.value==="WebGL"?(ce(),Be($a,{key:4})):t.value==="Info"?(ce(),Be(ql,{key:5})):Dr("",!0)]),_:1}),(ce(),Be(mr(t.value))),Oa],64))}});const Fa=vt(Sa,[["__scopeId","data-v-9745eb4c"]]);El(Fa).mount("#app"); +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))s(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const r of o.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&s(r)}).observe(document,{childList:!0,subtree:!0});function n(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(i){if(i.ep)return;i.ep=!0;const o=n(i);fetch(i.href,o)}})();function Ln(e,t){const n=Object.create(null),s=e.split(",");for(let i=0;i!!n[i.toLowerCase()]:i=>!!n[i]}function Nn(e){if(S(e)){const t={};for(let n=0;n{if(n){const s=n.split(Ki);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function ne(e){let t="";if(Z(e))t=e;else if(S(e))for(let n=0;n{},Ji=()=>!1,Yi=/^on[^a-z]/,Yt=e=>Yi.test(e),jn=e=>e.startsWith("onUpdate:"),se=Object.assign,Rn=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Qi=Object.prototype.hasOwnProperty,R=(e,t)=>Qi.call(e,t),S=Array.isArray,xt=e=>Qt(e)==="[object Map]",Xi=e=>Qt(e)==="[object Set]",F=e=>typeof e=="function",Z=e=>typeof e=="string",Dn=e=>typeof e=="symbol",Q=e=>e!==null&&typeof e=="object",zs=e=>Q(e)&&F(e.then)&&F(e.catch),Gi=Object.prototype.toString,Qt=e=>Gi.call(e),Zi=e=>Qt(e).slice(8,-1),eo=e=>Qt(e)==="[object Object]",Hn=e=>Z(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Bt=Ln(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Xt=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},to=/-(\w)/g,Oe=Xt(e=>e.replace(to,(t,n)=>n?n.toUpperCase():"")),no=/\B([A-Z])/g,ht=Xt(e=>e.replace(no,"-$1").toLowerCase()),Gt=Xt(e=>e.charAt(0).toUpperCase()+e.slice(1)),un=Xt(e=>e?`on${Gt(e)}`:""),It=(e,t)=>!Object.is(e,t),dn=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},so=e=>{const t=parseFloat(e);return isNaN(t)?e:t},io=e=>{const t=Z(e)?Number(e):NaN;return isNaN(t)?e:t};let us;const oo=()=>us||(us=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});let ye;class ro{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=ye,!t&&ye&&(this.index=(ye.scopes||(ye.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=ye;try{return ye=this,t()}finally{ye=n}}}on(){ye=this}off(){ye=this.parent}stop(t){if(this._active){let n,s;for(n=0,s=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},Vs=e=>(e.w&We)>0,qs=e=>(e.n&We)>0,co=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let s=0;s{(p==="length"||p>=f)&&a.push(u)})}else switch(n!==void 0&&a.push(r.get(n)),t){case"add":S(e)?Hn(n)&&a.push(r.get("length")):(a.push(r.get(nt)),xt(e)&&a.push(r.get(xn)));break;case"delete":S(e)||(a.push(r.get(nt)),xt(e)&&a.push(r.get(xn)));break;case"set":xt(e)&&a.push(r.get(nt));break}if(a.length===1)a[0]&&wn(a[0]);else{const f=[];for(const u of a)u&&f.push(...u);wn(Bn(f))}}function wn(e,t){const n=S(e)?e:[...e];for(const s of n)s.computed&&ps(s);for(const s of n)s.computed||ps(s)}function ps(e,t){(e!==Ce||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const uo=Ln("__proto__,__v_isRef,__isVue"),Qs=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Dn)),po=Un(),ho=Un(!1,!0),go=Un(!0),hs=mo();function mo(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=D(this);for(let o=0,r=this.length;o{e[t]=function(...n){gt();const s=D(this)[t].apply(this,n);return mt(),s}}),e}function vo(e){const t=D(this);return de(t,"has",e),t.hasOwnProperty(e)}function Un(e=!1,t=!1){return function(s,i,o){if(i==="__v_isReactive")return!e;if(i==="__v_isReadonly")return e;if(i==="__v_isShallow")return t;if(i==="__v_raw"&&o===(e?t?Fo:ti:t?ei:Zs).get(s))return s;const r=S(s);if(!e){if(r&&R(hs,i))return Reflect.get(hs,i,o);if(i==="hasOwnProperty")return vo}const a=Reflect.get(s,i,o);return(Dn(i)?Qs.has(i):uo(i))||(e||de(s,"get",i),t)?a:re(a)?r&&Hn(i)?a:a.value:Q(a)?e?ni(a):zn(a):a}}const _o=Xs(),bo=Xs(!0);function Xs(e=!1){return function(n,s,i,o){let r=n[s];if(dt(r)&&re(r)&&!re(i))return!1;if(!e&&(!Vt(i)&&!dt(i)&&(r=D(r),i=D(i)),!S(n)&&re(r)&&!re(i)))return r.value=i,!0;const a=S(n)&&Hn(s)?Number(s)e,Zt=e=>Reflect.getPrototypeOf(e);function Lt(e,t,n=!1,s=!1){e=e.__v_raw;const i=D(e),o=D(t);n||(t!==o&&de(i,"get",t),de(i,"get",o));const{has:r}=Zt(i),a=s?Kn:n?qn:Mt;if(r.call(i,t))return a(e.get(t));if(r.call(i,o))return a(e.get(o));e!==i&&e.get(t)}function Nt(e,t=!1){const n=this.__v_raw,s=D(n),i=D(e);return t||(e!==i&&de(s,"has",e),de(s,"has",i)),e===i?n.has(e):n.has(e)||n.has(i)}function jt(e,t=!1){return e=e.__v_raw,!t&&de(D(e),"iterate",nt),Reflect.get(e,"size",e)}function gs(e){e=D(e);const t=D(this);return Zt(t).has.call(t,e)||(t.add(e),Le(t,"add",e,e)),this}function ms(e,t){t=D(t);const n=D(this),{has:s,get:i}=Zt(n);let o=s.call(n,e);o||(e=D(e),o=s.call(n,e));const r=i.call(n,e);return n.set(e,t),o?It(t,r)&&Le(n,"set",e,t):Le(n,"add",e,t),this}function vs(e){const t=D(this),{has:n,get:s}=Zt(t);let i=n.call(t,e);i||(e=D(e),i=n.call(t,e)),s&&s.call(t,e);const o=t.delete(e);return i&&Le(t,"delete",e,void 0),o}function _s(){const e=D(this),t=e.size!==0,n=e.clear();return t&&Le(e,"clear",void 0,void 0),n}function Rt(e,t){return function(s,i){const o=this,r=o.__v_raw,a=D(r),f=t?Kn:e?qn:Mt;return!e&&de(a,"iterate",nt),r.forEach((u,p)=>s.call(i,f(u),f(p),o))}}function Dt(e,t,n){return function(...s){const i=this.__v_raw,o=D(i),r=xt(o),a=e==="entries"||e===Symbol.iterator&&r,f=e==="keys"&&r,u=i[e](...s),p=n?Kn:t?qn:Mt;return!t&&de(o,"iterate",f?xn:nt),{next(){const{value:v,done:y}=u.next();return y?{value:v,done:y}:{value:a?[p(v[0]),p(v[1])]:p(v),done:y}},[Symbol.iterator](){return this}}}}function Re(e){return function(...t){return e==="delete"?!1:this}}function Eo(){const e={get(o){return Lt(this,o)},get size(){return jt(this)},has:Nt,add:gs,set:ms,delete:vs,clear:_s,forEach:Rt(!1,!1)},t={get(o){return Lt(this,o,!1,!0)},get size(){return jt(this)},has:Nt,add:gs,set:ms,delete:vs,clear:_s,forEach:Rt(!1,!0)},n={get(o){return Lt(this,o,!0)},get size(){return jt(this,!0)},has(o){return Nt.call(this,o,!0)},add:Re("add"),set:Re("set"),delete:Re("delete"),clear:Re("clear"),forEach:Rt(!0,!1)},s={get(o){return Lt(this,o,!0,!0)},get size(){return jt(this,!0)},has(o){return Nt.call(this,o,!0)},add:Re("add"),set:Re("set"),delete:Re("delete"),clear:Re("clear"),forEach:Rt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=Dt(o,!1,!1),n[o]=Dt(o,!0,!1),t[o]=Dt(o,!1,!0),s[o]=Dt(o,!0,!0)}),[e,n,t,s]}const[Io,Mo,Ao,$o]=Eo();function Wn(e,t){const n=t?e?$o:Ao:e?Mo:Io;return(s,i,o)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?s:Reflect.get(R(n,i)&&i in s?n:s,i,o)}const Po={get:Wn(!1,!1)},Oo={get:Wn(!1,!0)},So={get:Wn(!0,!1)},Zs=new WeakMap,ei=new WeakMap,ti=new WeakMap,Fo=new WeakMap;function Lo(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function No(e){return e.__v_skip||!Object.isExtensible(e)?0:Lo(Zi(e))}function zn(e){return dt(e)?e:Vn(e,!1,Gs,Po,Zs)}function jo(e){return Vn(e,!1,To,Oo,ei)}function ni(e){return Vn(e,!0,wo,So,ti)}function Vn(e,t,n,s,i){if(!Q(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=i.get(e);if(o)return o;const r=No(e);if(r===0)return e;const a=new Proxy(e,r===2?s:n);return i.set(e,a),a}function ft(e){return dt(e)?ft(e.__v_raw):!!(e&&e.__v_isReactive)}function dt(e){return!!(e&&e.__v_isReadonly)}function Vt(e){return!!(e&&e.__v_isShallow)}function si(e){return ft(e)||dt(e)}function D(e){const t=e&&e.__v_raw;return t?D(t):e}function ii(e){return zt(e,"__v_skip",!0),e}const Mt=e=>Q(e)?zn(e):e,qn=e=>Q(e)?ni(e):e;function oi(e){Ue&&Ce&&(e=D(e),Ys(e.dep||(e.dep=Bn())))}function ri(e,t){e=D(e);const n=e.dep;n&&wn(n)}function re(e){return!!(e&&e.__v_isRef===!0)}function Jn(e){return Ro(e,!1)}function Ro(e,t){return re(e)?e:new Do(e,t)}class Do{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:D(t),this._value=n?t:Mt(t)}get value(){return oi(this),this._value}set value(t){const n=this.__v_isShallow||Vt(t)||dt(t);t=n?t:D(t),It(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:Mt(t),ri(this))}}function Ho(e){return re(e)?e.value:e}const Bo={get:(e,t,n)=>Ho(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const i=e[t];return re(i)&&!re(n)?(i.value=n,!0):Reflect.set(e,t,n,s)}};function li(e){return ft(e)?e:new Proxy(e,Bo)}var ai;class ko{constructor(t,n,s,i){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this[ai]=!1,this._dirty=!0,this.effect=new kn(t,()=>{this._dirty||(this._dirty=!0,ri(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!i,this.__v_isReadonly=s}get value(){const t=D(this);return oi(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}ai="__v_isReadonly";function Uo(e,t,n=!1){let s,i;const o=F(e);return o?(s=e,i=we):(s=e.get,i=e.set),new ko(s,i,o||!i,n)}function Ke(e,t,n,s){let i;try{i=s?e(...s):e()}catch(o){en(o,t,n)}return i}function _e(e,t,n,s){if(F(e)){const o=Ke(e,t,n,s);return o&&zs(o)&&o.catch(r=>{en(r,t,n)}),o}const i=[];for(let o=0;o>>1;$t(oe[s])Pe&&oe.splice(t,1)}function qo(e){S(e)?ut.push(...e):(!Fe||!Fe.includes(e,e.allowRecurse?Ze+1:Ze))&&ut.push(e),fi()}function bs(e,t=At?Pe+1:0){for(;t$t(n)-$t(s)),Ze=0;Zee.id==null?1/0:e.id,Jo=(e,t)=>{const n=$t(e)-$t(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function di(e){Tn=!1,At=!0,oe.sort(Jo);const t=we;try{for(Pe=0;PeZ(A)?A.trim():A)),v&&(i=n.map(so))}let a,f=s[a=un(t)]||s[a=un(Oe(t))];!f&&o&&(f=s[a=un(ht(t))]),f&&_e(f,e,6,i);const u=s[a+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[a])return;e.emitted[a]=!0,_e(u,e,6,i)}}function pi(e,t,n=!1){const s=t.emitsCache,i=s.get(e);if(i!==void 0)return i;const o=e.emits;let r={},a=!1;if(!F(e)){const f=u=>{const p=pi(u,t,!0);p&&(a=!0,se(r,p))};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}return!o&&!a?(Q(e)&&s.set(e,null),null):(S(o)?o.forEach(f=>r[f]=null):se(r,o),Q(e)&&s.set(e,r),r)}function tn(e,t){return!e||!Yt(t)?!1:(t=t.slice(2).replace(/Once$/,""),R(e,t[0].toLowerCase()+t.slice(1))||R(e,ht(t))||R(e,t))}let ve=null,nn=null;function qt(e){const t=ve;return ve=e,nn=e&&e.type.__scopeId||null,t}function Xn(e){nn=e}function Gn(){nn=null}function hi(e,t=ve,n){if(!t||e._n)return e;const s=(...i)=>{s._d&&$s(-1);const o=qt(t);let r;try{r=e(...i)}finally{qt(o),s._d&&$s(1)}return r};return s._n=!0,s._c=!0,s._d=!0,s}function pn(e){const{type:t,vnode:n,proxy:s,withProxy:i,props:o,propsOptions:[r],slots:a,attrs:f,emit:u,render:p,renderCache:v,data:y,setupState:A,ctx:N,inheritAttrs:$}=e;let q,H;const le=qt(e);try{if(n.shapeFlag&4){const K=i||s;q=$e(p.call(K,K,v,o,A,y,N)),H=f}else{const K=t;q=$e(K.length>1?K(o,{attrs:f,slots:a,emit:u}):K(o,null)),H=t.props?f:Qo(f)}}catch(K){Tt.length=0,en(K,e,1),q=fe(Te)}let O=q;if(H&&$!==!1){const K=Object.keys(H),{shapeFlag:ee}=O;K.length&&ee&7&&(r&&K.some(jn)&&(H=Xo(H,r)),O=ze(O,H))}return n.dirs&&(O=ze(O),O.dirs=O.dirs?O.dirs.concat(n.dirs):n.dirs),n.transition&&(O.transition=n.transition),q=O,qt(le),q}const Qo=e=>{let t;for(const n in e)(n==="class"||n==="style"||Yt(n))&&((t||(t={}))[n]=e[n]);return t},Xo=(e,t)=>{const n={};for(const s in e)(!jn(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Go(e,t,n){const{props:s,children:i,component:o}=e,{props:r,children:a,patchFlag:f}=t,u=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&f>=0){if(f&1024)return!0;if(f&16)return s?ys(s,r,u):!!r;if(f&8){const p=t.dynamicProps;for(let v=0;ve.__isSuspense;function tr(e,t){t&&t.pendingBranch?S(e)?t.effects.push(...e):t.effects.push(e):qo(e)}function nr(e,t){if(X){let n=X.provides;const s=X.parent&&X.parent.provides;s===n&&(n=X.provides=Object.create(s)),n[e]=t}}function kt(e,t,n=!1){const s=X||ve;if(s){const i=s.parent==null?s.vnode.appContext&&s.vnode.appContext.provides:s.parent.provides;if(i&&e in i)return i[e];if(arguments.length>1)return n&&F(t)?t.call(s.proxy):t}}const Ht={};function hn(e,t,n){return gi(e,t,n)}function gi(e,t,{immediate:n,deep:s,flush:i,onTrack:o,onTrigger:r}=z){const a=ao()===(X==null?void 0:X.scope)?X:null;let f,u=!1,p=!1;if(re(e)?(f=()=>e.value,u=Vt(e)):ft(e)?(f=()=>e,s=!0):S(e)?(p=!0,u=e.some(O=>ft(O)||Vt(O)),f=()=>e.map(O=>{if(re(O))return O.value;if(ft(O))return at(O);if(F(O))return Ke(O,a,2)})):F(e)?t?f=()=>Ke(e,a,2):f=()=>{if(!(a&&a.isUnmounted))return v&&v(),_e(e,a,3,[y])}:f=we,t&&s){const O=f;f=()=>at(O())}let v,y=O=>{v=H.onStop=()=>{Ke(O,a,4)}},A;if(Ot)if(y=we,t?n&&_e(t,a,3,[f(),p?[]:void 0,y]):f(),i==="sync"){const O=Zr();A=O.__watcherHandles||(O.__watcherHandles=[])}else return we;let N=p?new Array(e.length).fill(Ht):Ht;const $=()=>{if(H.active)if(t){const O=H.run();(s||u||(p?O.some((K,ee)=>It(K,N[ee])):It(O,N)))&&(v&&v(),_e(t,a,3,[O,N===Ht?void 0:p&&N[0]===Ht?[]:N,y]),N=O)}else H.run()};$.allowRecurse=!!t;let q;i==="sync"?q=$:i==="post"?q=()=>ue($,a&&a.suspense):($.pre=!0,a&&($.id=a.uid),q=()=>Qn($));const H=new kn(f,q);t?n?$():N=H.run():i==="post"?ue(H.run.bind(H),a&&a.suspense):H.run();const le=()=>{H.stop(),a&&a.scope&&Rn(a.scope.effects,H)};return A&&A.push(le),le}function sr(e,t,n){const s=this.proxy,i=Z(e)?e.includes(".")?mi(s,e):()=>s[e]:e.bind(s,s);let o;F(t)?o=t:(o=t.handler,n=t);const r=X;pt(this);const a=gi(i,o.bind(s),n);return r?pt(r):st(),a}function mi(e,t){const n=t.split(".");return()=>{let s=e;for(let i=0;i{at(n,t)});else if(eo(e))for(const n in e)at(e[n],t);return e}function ir(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Ci(()=>{e.isMounted=!0}),xi(()=>{e.isUnmounting=!0}),e}const ge=[Function,Array],or={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:ge,onEnter:ge,onAfterEnter:ge,onEnterCancelled:ge,onBeforeLeave:ge,onLeave:ge,onAfterLeave:ge,onLeaveCancelled:ge,onBeforeAppear:ge,onAppear:ge,onAfterAppear:ge,onAppearCancelled:ge},setup(e,{slots:t}){const n=Kr(),s=ir();let i;return()=>{const o=t.default&&bi(t.default(),!0);if(!o||!o.length)return;let r=o[0];if(o.length>1){for(const $ of o)if($.type!==Te){r=$;break}}const a=D(e),{mode:f}=a;if(s.isLeaving)return gn(r);const u=Cs(r);if(!u)return gn(r);const p=En(u,a,s,n);In(u,p);const v=n.subTree,y=v&&Cs(v);let A=!1;const{getTransitionKey:N}=u.type;if(N){const $=N();i===void 0?i=$:$!==i&&(i=$,A=!0)}if(y&&y.type!==Te&&(!et(u,y)||A)){const $=En(y,a,s,n);if(In(y,$),f==="out-in")return s.isLeaving=!0,$.afterLeave=()=>{s.isLeaving=!1,n.update.active!==!1&&n.update()},gn(r);f==="in-out"&&u.type!==Te&&($.delayLeave=(q,H,le)=>{const O=_i(s,y);O[String(y.key)]=y,q._leaveCb=()=>{H(),q._leaveCb=void 0,delete p.delayedLeave},p.delayedLeave=le})}return r}}},vi=or;function _i(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function En(e,t,n,s){const{appear:i,mode:o,persisted:r=!1,onBeforeEnter:a,onEnter:f,onAfterEnter:u,onEnterCancelled:p,onBeforeLeave:v,onLeave:y,onAfterLeave:A,onLeaveCancelled:N,onBeforeAppear:$,onAppear:q,onAfterAppear:H,onAppearCancelled:le}=t,O=String(e.key),K=_i(n,e),ee=(L,J)=>{L&&_e(L,s,9,J)},je=(L,J)=>{const W=J[1];ee(L,J),S(L)?L.every(ie=>ie.length<=1)&&W():L.length<=1&&W()},Ee={mode:o,persisted:r,beforeEnter(L){let J=a;if(!n.isMounted)if(i)J=$||a;else return;L._leaveCb&&L._leaveCb(!0);const W=K[O];W&&et(e,W)&&W.el._leaveCb&&W.el._leaveCb(),ee(J,[L])},enter(L){let J=f,W=u,ie=p;if(!n.isMounted)if(i)J=q||f,W=H||u,ie=le||p;else return;let E=!1;const V=L._enterCb=pe=>{E||(E=!0,pe?ee(ie,[L]):ee(W,[L]),Ee.delayedLeave&&Ee.delayedLeave(),L._enterCb=void 0)};J?je(J,[L,V]):V()},leave(L,J){const W=String(e.key);if(L._enterCb&&L._enterCb(!0),n.isUnmounting)return J();ee(v,[L]);let ie=!1;const E=L._leaveCb=V=>{ie||(ie=!0,J(),V?ee(N,[L]):ee(A,[L]),L._leaveCb=void 0,K[W]===e&&delete K[W])};K[W]=e,y?je(y,[L,E]):E()},clone(L){return En(L,t,n,s)}};return Ee}function gn(e){if(on(e))return e=ze(e),e.children=null,e}function Cs(e){return on(e)?e.children?e.children[0]:void 0:e}function In(e,t){e.shapeFlag&6&&e.component?In(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 bi(e,t=!1,n){let s=[],i=0;for(let o=0;o1)for(let o=0;o!!e.type.__asyncLoader,on=e=>e.type.__isKeepAlive;function rr(e,t){yi(e,"a",t)}function lr(e,t){yi(e,"da",t)}function yi(e,t,n=X){const s=e.__wdc||(e.__wdc=()=>{let i=n;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if(rn(t,s,n),n){let i=n.parent;for(;i&&i.parent;)on(i.parent.vnode)&&ar(s,t,n,i),i=i.parent}}function ar(e,t,n,s){const i=rn(t,e,s,!0);wi(()=>{Rn(s[t],i)},n)}function rn(e,t,n=X,s=!1){if(n){const i=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...r)=>{if(n.isUnmounted)return;gt(),pt(n);const a=_e(t,n,e,r);return st(),mt(),a});return s?i.unshift(o):i.push(o),o}}const Ne=e=>(t,n=X)=>(!Ot||e==="sp")&&rn(e,(...s)=>t(...s),n),cr=Ne("bm"),Ci=Ne("m"),fr=Ne("bu"),ur=Ne("u"),xi=Ne("bum"),wi=Ne("um"),dr=Ne("sp"),pr=Ne("rtg"),hr=Ne("rtc");function gr(e,t=X){rn("ec",e,t)}function Je(e,t,n,s){const i=e.dirs,o=t&&t.dirs;for(let r=0;re?ji(e)?ss(e)||e.proxy:Mn(e.parent):null,wt=se(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=>Mn(e.parent),$root:e=>Mn(e.root),$emit:e=>e.emit,$options:e=>Zn(e),$forceUpdate:e=>e.f||(e.f=()=>Qn(e.update)),$nextTick:e=>e.n||(e.n=Wo.bind(e.proxy)),$watch:e=>sr.bind(e)}),mn=(e,t)=>e!==z&&!e.__isScriptSetup&&R(e,t),_r={get({_:e},t){const{ctx:n,setupState:s,data:i,props:o,accessCache:r,type:a,appContext:f}=e;let u;if(t[0]!=="$"){const A=r[t];if(A!==void 0)switch(A){case 1:return s[t];case 2:return i[t];case 4:return n[t];case 3:return o[t]}else{if(mn(s,t))return r[t]=1,s[t];if(i!==z&&R(i,t))return r[t]=2,i[t];if((u=e.propsOptions[0])&&R(u,t))return r[t]=3,o[t];if(n!==z&&R(n,t))return r[t]=4,n[t];An&&(r[t]=0)}}const p=wt[t];let v,y;if(p)return t==="$attrs"&&de(e,"get",t),p(e);if((v=a.__cssModules)&&(v=v[t]))return v;if(n!==z&&R(n,t))return r[t]=4,n[t];if(y=f.config.globalProperties,R(y,t))return y[t]},set({_:e},t,n){const{data:s,setupState:i,ctx:o}=e;return mn(i,t)?(i[t]=n,!0):s!==z&&R(s,t)?(s[t]=n,!0):R(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:i,propsOptions:o}},r){let a;return!!n[r]||e!==z&&R(e,r)||mn(t,r)||(a=o[0])&&R(a,r)||R(s,r)||R(wt,r)||R(i.config.globalProperties,r)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:R(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};let An=!0;function br(e){const t=Zn(e),n=e.proxy,s=e.ctx;An=!1,t.beforeCreate&&ws(t.beforeCreate,e,"bc");const{data:i,computed:o,methods:r,watch:a,provide:f,inject:u,created:p,beforeMount:v,mounted:y,beforeUpdate:A,updated:N,activated:$,deactivated:q,beforeDestroy:H,beforeUnmount:le,destroyed:O,unmounted:K,render:ee,renderTracked:je,renderTriggered:Ee,errorCaptured:L,serverPrefetch:J,expose:W,inheritAttrs:ie,components:E,directives:V,filters:pe}=t;if(u&&yr(u,s,null,e.appContext.config.unwrapInjectedRef),r)for(const Y in r){const k=r[Y];F(k)&&(s[Y]=k.bind(n))}if(i){const Y=i.call(n,n);Q(Y)&&(e.data=zn(Y))}if(An=!0,o)for(const Y in o){const k=o[Y],Ve=F(k)?k.bind(n,n):F(k.get)?k.get.bind(n,n):we,St=!F(k)&&F(k.set)?k.set.bind(n):we,qe=Qr({get:Ve,set:St});Object.defineProperty(s,Y,{enumerable:!0,configurable:!0,get:()=>qe.value,set:Ie=>qe.value=Ie})}if(a)for(const Y in a)Ii(a[Y],s,n,Y);if(f){const Y=F(f)?f.call(n):f;Reflect.ownKeys(Y).forEach(k=>{nr(k,Y[k])})}p&&ws(p,e,"c");function te(Y,k){S(k)?k.forEach(Ve=>Y(Ve.bind(n))):k&&Y(k.bind(n))}if(te(cr,v),te(Ci,y),te(fr,A),te(ur,N),te(rr,$),te(lr,q),te(gr,L),te(hr,je),te(pr,Ee),te(xi,le),te(wi,K),te(dr,J),S(W))if(W.length){const Y=e.exposed||(e.exposed={});W.forEach(k=>{Object.defineProperty(Y,k,{get:()=>n[k],set:Ve=>n[k]=Ve})})}else e.exposed||(e.exposed={});ee&&e.render===we&&(e.render=ee),ie!=null&&(e.inheritAttrs=ie),E&&(e.components=E),V&&(e.directives=V)}function yr(e,t,n=we,s=!1){S(e)&&(e=$n(e));for(const i in e){const o=e[i];let r;Q(o)?"default"in o?r=kt(o.from||i,o.default,!0):r=kt(o.from||i):r=kt(o),re(r)&&s?Object.defineProperty(t,i,{enumerable:!0,configurable:!0,get:()=>r.value,set:a=>r.value=a}):t[i]=r}}function ws(e,t,n){_e(S(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ii(e,t,n,s){const i=s.includes(".")?mi(n,s):()=>n[s];if(Z(e)){const o=t[e];F(o)&&hn(i,o)}else if(F(e))hn(i,e.bind(n));else if(Q(e))if(S(e))e.forEach(o=>Ii(o,t,n,s));else{const o=F(e.handler)?e.handler.bind(n):t[e.handler];F(o)&&hn(i,o,e)}}function Zn(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:i,optionsCache:o,config:{optionMergeStrategies:r}}=e.appContext,a=o.get(t);let f;return a?f=a:!i.length&&!n&&!s?f=t:(f={},i.length&&i.forEach(u=>Jt(f,u,r,!0)),Jt(f,t,r)),Q(t)&&o.set(t,f),f}function Jt(e,t,n,s=!1){const{mixins:i,extends:o}=t;o&&Jt(e,o,n,!0),i&&i.forEach(r=>Jt(e,r,n,!0));for(const r in t)if(!(s&&r==="expose")){const a=Cr[r]||n&&n[r];e[r]=a?a(e[r],t[r]):t[r]}return e}const Cr={data:Ts,props:Ge,emits:Ge,methods:Ge,computed:Ge,beforeCreate:ae,created:ae,beforeMount:ae,mounted:ae,beforeUpdate:ae,updated:ae,beforeDestroy:ae,beforeUnmount:ae,destroyed:ae,unmounted:ae,activated:ae,deactivated:ae,errorCaptured:ae,serverPrefetch:ae,components:Ge,directives:Ge,watch:wr,provide:Ts,inject:xr};function Ts(e,t){return t?e?function(){return se(F(e)?e.call(this,this):e,F(t)?t.call(this,this):t)}:t:e}function xr(e,t){return Ge($n(e),$n(t))}function $n(e){if(S(e)){const t={};for(let n=0;n0)&&!(r&16)){if(r&8){const p=e.vnode.dynamicProps;for(let v=0;v{f=!0;const[y,A]=Ai(v,t,!0);se(r,y),A&&a.push(...A)};!n&&t.mixins.length&&t.mixins.forEach(p),e.extends&&p(e.extends),e.mixins&&e.mixins.forEach(p)}if(!o&&!f)return Q(e)&&s.set(e,ct),ct;if(S(o))for(let p=0;p-1,A[1]=$<0||N<$,(N>-1||R(A,"default"))&&a.push(v)}}}const u=[r,a];return Q(e)&&s.set(e,u),u}function Es(e){return e[0]!=="$"}function Is(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function Ms(e,t){return Is(e)===Is(t)}function As(e,t){return S(t)?t.findIndex(n=>Ms(n,e)):F(t)&&Ms(t,e)?0:-1}const $i=e=>e[0]==="_"||e==="$stable",es=e=>S(e)?e.map($e):[$e(e)],Ir=(e,t,n)=>{if(t._n)return t;const s=hi((...i)=>es(t(...i)),n);return s._c=!1,s},Pi=(e,t,n)=>{const s=e._ctx;for(const i in e){if($i(i))continue;const o=e[i];if(F(o))t[i]=Ir(i,o,s);else if(o!=null){const r=es(o);t[i]=()=>r}}},Oi=(e,t)=>{const n=es(t);e.slots.default=()=>n},Mr=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=D(t),zt(t,"_",n)):Pi(t,e.slots={})}else e.slots={},t&&Oi(e,t);zt(e.slots,an,1)},Ar=(e,t,n)=>{const{vnode:s,slots:i}=e;let o=!0,r=z;if(s.shapeFlag&32){const a=t._;a?n&&a===1?o=!1:(se(i,t),!n&&a===1&&delete i._):(o=!t.$stable,Pi(t,i)),r=t}else t&&(Oi(e,t),r={default:1});if(o)for(const a in i)!$i(a)&&!(a in r)&&delete i[a]};function Si(){return{app:null,config:{isNativeTag:Ji,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 $r=0;function Pr(e,t){return function(s,i=null){F(s)||(s=Object.assign({},s)),i!=null&&!Q(i)&&(i=null);const o=Si(),r=new Set;let a=!1;const f=o.app={_uid:$r++,_component:s,_props:i,_container:null,_context:o,_instance:null,version:el,get config(){return o.config},set config(u){},use(u,...p){return r.has(u)||(u&&F(u.install)?(r.add(u),u.install(f,...p)):F(u)&&(r.add(u),u(f,...p))),f},mixin(u){return o.mixins.includes(u)||o.mixins.push(u),f},component(u,p){return p?(o.components[u]=p,f):o.components[u]},directive(u,p){return p?(o.directives[u]=p,f):o.directives[u]},mount(u,p,v){if(!a){const y=fe(s,i);return y.appContext=o,p&&t?t(y,u):e(y,u,v),a=!0,f._container=u,u.__vue_app__=f,ss(y.component)||y.component.proxy}},unmount(){a&&(e(null,f._container),delete f._container.__vue_app__)},provide(u,p){return o.provides[u]=p,f}};return f}}function On(e,t,n,s,i=!1){if(S(e)){e.forEach((y,A)=>On(y,t&&(S(t)?t[A]:t),n,s,i));return}if(Ut(s)&&!i)return;const o=s.shapeFlag&4?ss(s.component)||s.component.proxy:s.el,r=i?null:o,{i:a,r:f}=e,u=t&&t.r,p=a.refs===z?a.refs={}:a.refs,v=a.setupState;if(u!=null&&u!==f&&(Z(u)?(p[u]=null,R(v,u)&&(v[u]=null)):re(u)&&(u.value=null)),F(f))Ke(f,a,12,[r,p]);else{const y=Z(f),A=re(f);if(y||A){const N=()=>{if(e.f){const $=y?R(v,f)?v[f]:p[f]:f.value;i?S($)&&Rn($,o):S($)?$.includes(o)||$.push(o):y?(p[f]=[o],R(v,f)&&(v[f]=p[f])):(f.value=[o],e.k&&(p[e.k]=f.value))}else y?(p[f]=r,R(v,f)&&(v[f]=r)):A&&(f.value=r,e.k&&(p[e.k]=r))};r?(N.id=-1,ue(N,n)):N()}}}const ue=tr;function Or(e){return Sr(e)}function Sr(e,t){const n=oo();n.__VUE__=!0;const{insert:s,remove:i,patchProp:o,createElement:r,createText:a,createComment:f,setText:u,setElementText:p,parentNode:v,nextSibling:y,setScopeId:A=we,insertStaticContent:N}=e,$=(l,c,d,g=null,h=null,b=null,x=!1,_=null,C=!!c.dynamicChildren)=>{if(l===c)return;l&&!et(l,c)&&(g=Ft(l),Ie(l,h,b,!0),l=null),c.patchFlag===-2&&(C=!1,c.dynamicChildren=null);const{type:m,ref:I,shapeFlag:T}=c;switch(m){case ln:q(l,c,d,g);break;case Te:H(l,c,d,g);break;case Kt:l==null&&le(c,d,g,x);break;case me:E(l,c,d,g,h,b,x,_,C);break;default:T&1?ee(l,c,d,g,h,b,x,_,C):T&6?V(l,c,d,g,h,b,x,_,C):(T&64||T&128)&&m.process(l,c,d,g,h,b,x,_,C,rt)}I!=null&&h&&On(I,l&&l.ref,b,c||l,!c)},q=(l,c,d,g)=>{if(l==null)s(c.el=a(c.children),d,g);else{const h=c.el=l.el;c.children!==l.children&&u(h,c.children)}},H=(l,c,d,g)=>{l==null?s(c.el=f(c.children||""),d,g):c.el=l.el},le=(l,c,d,g)=>{[l.el,l.anchor]=N(l.children,c,d,g,l.el,l.anchor)},O=({el:l,anchor:c},d,g)=>{let h;for(;l&&l!==c;)h=y(l),s(l,d,g),l=h;s(c,d,g)},K=({el:l,anchor:c})=>{let d;for(;l&&l!==c;)d=y(l),i(l),l=d;i(c)},ee=(l,c,d,g,h,b,x,_,C)=>{x=x||c.type==="svg",l==null?je(c,d,g,h,b,x,_,C):J(l,c,h,b,x,_,C)},je=(l,c,d,g,h,b,x,_)=>{let C,m;const{type:I,props:T,shapeFlag:M,transition:P,dirs:j}=l;if(C=l.el=r(l.type,b,T&&T.is,T),M&8?p(C,l.children):M&16&&L(l.children,C,null,g,h,b&&I!=="foreignObject",x,_),j&&Je(l,null,g,"created"),Ee(C,l,l.scopeId,x,g),T){for(const B in T)B!=="value"&&!Bt(B)&&o(C,B,null,T[B],b,l.children,g,h,Se);"value"in T&&o(C,"value",null,T.value),(m=T.onVnodeBeforeMount)&&Ae(m,g,l)}j&&Je(l,null,g,"beforeMount");const U=(!h||h&&!h.pendingBranch)&&P&&!P.persisted;U&&P.beforeEnter(C),s(C,c,d),((m=T&&T.onVnodeMounted)||U||j)&&ue(()=>{m&&Ae(m,g,l),U&&P.enter(C),j&&Je(l,null,g,"mounted")},h)},Ee=(l,c,d,g,h)=>{if(d&&A(l,d),g)for(let b=0;b{for(let m=C;m{const _=c.el=l.el;let{patchFlag:C,dynamicChildren:m,dirs:I}=c;C|=l.patchFlag&16;const T=l.props||z,M=c.props||z;let P;d&&Ye(d,!1),(P=M.onVnodeBeforeUpdate)&&Ae(P,d,c,l),I&&Je(c,l,d,"beforeUpdate"),d&&Ye(d,!0);const j=h&&c.type!=="foreignObject";if(m?W(l.dynamicChildren,m,_,d,g,j,b):x||k(l,c,_,null,d,g,j,b,!1),C>0){if(C&16)ie(_,c,T,M,d,g,h);else if(C&2&&T.class!==M.class&&o(_,"class",null,M.class,h),C&4&&o(_,"style",T.style,M.style,h),C&8){const U=c.dynamicProps;for(let B=0;B{P&&Ae(P,d,c,l),I&&Je(c,l,d,"updated")},g)},W=(l,c,d,g,h,b,x)=>{for(let _=0;_{if(d!==g){if(d!==z)for(const _ in d)!Bt(_)&&!(_ in g)&&o(l,_,d[_],null,x,c.children,h,b,Se);for(const _ in g){if(Bt(_))continue;const C=g[_],m=d[_];C!==m&&_!=="value"&&o(l,_,m,C,x,c.children,h,b,Se)}"value"in g&&o(l,"value",d.value,g.value)}},E=(l,c,d,g,h,b,x,_,C)=>{const m=c.el=l?l.el:a(""),I=c.anchor=l?l.anchor:a("");let{patchFlag:T,dynamicChildren:M,slotScopeIds:P}=c;P&&(_=_?_.concat(P):P),l==null?(s(m,d,g),s(I,d,g),L(c.children,d,I,h,b,x,_,C)):T>0&&T&64&&M&&l.dynamicChildren?(W(l.dynamicChildren,M,d,h,b,x,_),(c.key!=null||h&&c===h.subTree)&&Fi(l,c,!0)):k(l,c,d,I,h,b,x,_,C)},V=(l,c,d,g,h,b,x,_,C)=>{c.slotScopeIds=_,l==null?c.shapeFlag&512?h.ctx.activate(c,d,g,x,C):pe(c,d,g,h,b,x,C):_t(l,c,C)},pe=(l,c,d,g,h,b,x)=>{const _=l.component=Ur(l,g,h);if(on(l)&&(_.ctx.renderer=rt),Wr(_),_.asyncDep){if(h&&h.registerDep(_,te),!l.el){const C=_.subTree=fe(Te);H(null,C,c,d)}return}te(_,l,c,d,h,b,x)},_t=(l,c,d)=>{const g=c.component=l.component;if(Go(l,c,d))if(g.asyncDep&&!g.asyncResolved){Y(g,c,d);return}else g.next=c,Vo(g.update),g.update();else c.el=l.el,g.vnode=c},te=(l,c,d,g,h,b,x)=>{const _=()=>{if(l.isMounted){let{next:I,bu:T,u:M,parent:P,vnode:j}=l,U=I,B;Ye(l,!1),I?(I.el=j.el,Y(l,I,x)):I=j,T&&dn(T),(B=I.props&&I.props.onVnodeBeforeUpdate)&&Ae(B,P,I,j),Ye(l,!0);const G=pn(l),be=l.subTree;l.subTree=G,$(be,G,v(be.el),Ft(be),l,h,b),I.el=G.el,U===null&&Zo(l,G.el),M&&ue(M,h),(B=I.props&&I.props.onVnodeUpdated)&&ue(()=>Ae(B,P,I,j),h)}else{let I;const{el:T,props:M}=c,{bm:P,m:j,parent:U}=l,B=Ut(c);if(Ye(l,!1),P&&dn(P),!B&&(I=M&&M.onVnodeBeforeMount)&&Ae(I,U,c),Ye(l,!0),T&&fn){const G=()=>{l.subTree=pn(l),fn(T,l.subTree,l,h,null)};B?c.type.__asyncLoader().then(()=>!l.isUnmounted&&G()):G()}else{const G=l.subTree=pn(l);$(null,G,d,g,l,h,b),c.el=G.el}if(j&&ue(j,h),!B&&(I=M&&M.onVnodeMounted)){const G=c;ue(()=>Ae(I,U,G),h)}(c.shapeFlag&256||U&&Ut(U.vnode)&&U.vnode.shapeFlag&256)&&l.a&&ue(l.a,h),l.isMounted=!0,c=d=g=null}},C=l.effect=new kn(_,()=>Qn(m),l.scope),m=l.update=()=>C.run();m.id=l.uid,Ye(l,!0),m()},Y=(l,c,d)=>{c.component=l;const g=l.vnode.props;l.vnode=c,l.next=null,Er(l,c.props,g,d),Ar(l,c.children,d),gt(),bs(),mt()},k=(l,c,d,g,h,b,x,_,C=!1)=>{const m=l&&l.children,I=l?l.shapeFlag:0,T=c.children,{patchFlag:M,shapeFlag:P}=c;if(M>0){if(M&128){St(m,T,d,g,h,b,x,_,C);return}else if(M&256){Ve(m,T,d,g,h,b,x,_,C);return}}P&8?(I&16&&Se(m,h,b),T!==m&&p(d,T)):I&16?P&16?St(m,T,d,g,h,b,x,_,C):Se(m,h,b,!0):(I&8&&p(d,""),P&16&&L(T,d,g,h,b,x,_,C))},Ve=(l,c,d,g,h,b,x,_,C)=>{l=l||ct,c=c||ct;const m=l.length,I=c.length,T=Math.min(m,I);let M;for(M=0;MI?Se(l,h,b,!0,!1,T):L(c,d,g,h,b,x,_,C,T)},St=(l,c,d,g,h,b,x,_,C)=>{let m=0;const I=c.length;let T=l.length-1,M=I-1;for(;m<=T&&m<=M;){const P=l[m],j=c[m]=C?ke(c[m]):$e(c[m]);if(et(P,j))$(P,j,d,null,h,b,x,_,C);else break;m++}for(;m<=T&&m<=M;){const P=l[T],j=c[M]=C?ke(c[M]):$e(c[M]);if(et(P,j))$(P,j,d,null,h,b,x,_,C);else break;T--,M--}if(m>T){if(m<=M){const P=M+1,j=PM)for(;m<=T;)Ie(l[m],h,b,!0),m++;else{const P=m,j=m,U=new Map;for(m=j;m<=M;m++){const he=c[m]=C?ke(c[m]):$e(c[m]);he.key!=null&&U.set(he.key,m)}let B,G=0;const be=M-j+1;let lt=!1,as=0;const bt=new Array(be);for(m=0;m=be){Ie(he,h,b,!0);continue}let Me;if(he.key!=null)Me=U.get(he.key);else for(B=j;B<=M;B++)if(bt[B-j]===0&&et(he,c[B])){Me=B;break}Me===void 0?Ie(he,h,b,!0):(bt[Me-j]=m+1,Me>=as?as=Me:lt=!0,$(he,c[Me],d,null,h,b,x,_,C),G++)}const cs=lt?Fr(bt):ct;for(B=cs.length-1,m=be-1;m>=0;m--){const he=j+m,Me=c[he],fs=he+1{const{el:b,type:x,transition:_,children:C,shapeFlag:m}=l;if(m&6){qe(l.component.subTree,c,d,g);return}if(m&128){l.suspense.move(c,d,g);return}if(m&64){x.move(l,c,d,rt);return}if(x===me){s(b,c,d);for(let T=0;T_.enter(b),h);else{const{leave:T,delayLeave:M,afterLeave:P}=_,j=()=>s(b,c,d),U=()=>{T(b,()=>{j(),P&&P()})};M?M(b,j,U):U()}else s(b,c,d)},Ie=(l,c,d,g=!1,h=!1)=>{const{type:b,props:x,ref:_,children:C,dynamicChildren:m,shapeFlag:I,patchFlag:T,dirs:M}=l;if(_!=null&&On(_,null,d,l,!0),I&256){c.ctx.deactivate(l);return}const P=I&1&&M,j=!Ut(l);let U;if(j&&(U=x&&x.onVnodeBeforeUnmount)&&Ae(U,c,l),I&6)ki(l.component,d,g);else{if(I&128){l.suspense.unmount(d,g);return}P&&Je(l,null,c,"beforeUnmount"),I&64?l.type.remove(l,c,d,h,rt,g):m&&(b!==me||T>0&&T&64)?Se(m,c,d,!1,!0):(b===me&&T&384||!h&&I&16)&&Se(C,c,d),g&&rs(l)}(j&&(U=x&&x.onVnodeUnmounted)||P)&&ue(()=>{U&&Ae(U,c,l),P&&Je(l,null,c,"unmounted")},d)},rs=l=>{const{type:c,el:d,anchor:g,transition:h}=l;if(c===me){Bi(d,g);return}if(c===Kt){K(l);return}const b=()=>{i(d),h&&!h.persisted&&h.afterLeave&&h.afterLeave()};if(l.shapeFlag&1&&h&&!h.persisted){const{leave:x,delayLeave:_}=h,C=()=>x(d,b);_?_(l.el,b,C):C()}else b()},Bi=(l,c)=>{let d;for(;l!==c;)d=y(l),i(l),l=d;i(c)},ki=(l,c,d)=>{const{bum:g,scope:h,update:b,subTree:x,um:_}=l;g&&dn(g),h.stop(),b&&(b.active=!1,Ie(x,l,c,d)),_&&ue(_,c),ue(()=>{l.isUnmounted=!0},c),c&&c.pendingBranch&&!c.isUnmounted&&l.asyncDep&&!l.asyncResolved&&l.suspenseId===c.pendingId&&(c.deps--,c.deps===0&&c.resolve())},Se=(l,c,d,g=!1,h=!1,b=0)=>{for(let x=b;xl.shapeFlag&6?Ft(l.component.subTree):l.shapeFlag&128?l.suspense.next():y(l.anchor||l.el),ls=(l,c,d)=>{l==null?c._vnode&&Ie(c._vnode,null,null,!0):$(c._vnode||null,l,c,null,null,null,d),bs(),ui(),c._vnode=l},rt={p:$,um:Ie,m:qe,r:rs,mt:pe,mc:L,pc:k,pbc:W,n:Ft,o:e};let cn,fn;return t&&([cn,fn]=t(rt)),{render:ls,hydrate:cn,createApp:Pr(ls,cn)}}function Ye({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Fi(e,t,n=!1){const s=e.children,i=t.children;if(S(s)&&S(i))for(let o=0;o>1,e[n[a]]0&&(t[s]=n[o-1]),n[o]=s)}}for(o=n.length,r=n[o-1];o-- >0;)n[o]=r,r=t[r];return n}const Lr=e=>e.__isTeleport,me=Symbol(void 0),ln=Symbol(void 0),Te=Symbol(void 0),Kt=Symbol(void 0),Tt=[];let xe=null;function ce(e=!1){Tt.push(xe=e?null:[])}function Nr(){Tt.pop(),xe=Tt[Tt.length-1]||null}let Pt=1;function $s(e){Pt+=e}function Li(e){return e.dynamicChildren=Pt>0?xe||ct:null,Nr(),Pt>0&&xe&&xe.push(e),e}function it(e,t,n,s,i,o){return Li(w(e,t,n,s,i,o,!0))}function Be(e,t,n,s,i){return Li(fe(e,t,n,s,i,!0))}function Sn(e){return e?e.__v_isVNode===!0:!1}function et(e,t){return e.type===t.type&&e.key===t.key}const an="__vInternal",Ni=({key:e})=>e??null,Wt=({ref:e,ref_key:t,ref_for:n})=>e!=null?Z(e)||re(e)||F(e)?{i:ve,r:e,k:t,f:!!n}:e:null;function w(e,t=null,n=null,s=0,i=null,o=e===me?0:1,r=!1,a=!1){const f={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Ni(t),ref:t&&Wt(t),scopeId:nn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:s,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:ve};return a?(ns(f,n),o&128&&e.normalize(f)):n&&(f.shapeFlag|=Z(n)?8:16),Pt>0&&!r&&xe&&(f.patchFlag>0||o&6)&&f.patchFlag!==32&&xe.push(f),f}const fe=jr;function jr(e,t=null,n=null,s=0,i=null,o=!1){if((!e||e===Ei)&&(e=Te),Sn(e)){const a=ze(e,t,!0);return n&&ns(a,n),Pt>0&&!o&&xe&&(a.shapeFlag&6?xe[xe.indexOf(e)]=a:xe.push(a)),a.patchFlag|=-2,a}if(Yr(e)&&(e=e.__vccOpts),t){t=Rr(t);let{class:a,style:f}=t;a&&!Z(a)&&(t.class=ne(a)),Q(f)&&(si(f)&&!S(f)&&(f=se({},f)),t.style=Nn(f))}const r=Z(e)?1:er(e)?128:Lr(e)?64:Q(e)?4:F(e)?2:0;return w(e,t,n,s,i,r,o,!0)}function Rr(e){return e?si(e)||an in e?se({},e):e:null}function ze(e,t,n=!1){const{props:s,ref:i,patchFlag:o,children:r}=e,a=t?Hr(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:a,key:a&&Ni(a),ref:t&&t.ref?n&&i?S(i)?i.concat(Wt(t)):[i,Wt(t)]:Wt(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:r,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==me?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ze(e.ssContent),ssFallback:e.ssFallback&&ze(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Et(e=" ",t=0){return fe(ln,null,e,t)}function ts(e,t){const n=fe(Kt,null,e);return n.staticCount=t,n}function Dr(e="",t=!1){return t?(ce(),Be(Te,null,e)):fe(Te,null,e)}function $e(e){return e==null||typeof e=="boolean"?fe(Te):S(e)?fe(me,null,e.slice()):typeof e=="object"?ke(e):fe(ln,null,String(e))}function ke(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ze(e)}function ns(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(S(t))n=16;else if(typeof t=="object")if(s&65){const i=t.default;i&&(i._c&&(i._d=!1),ns(e,i()),i._c&&(i._d=!0));return}else{n=32;const i=t._;!i&&!(an in t)?t._ctx=ve:i===3&&ve&&(ve.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else F(t)?(t={default:t,_ctx:ve},n=32):(t=String(t),s&64?(n=16,t=[Et(t)]):n=8);e.children=t,e.shapeFlag|=n}function Hr(...e){const t={};for(let n=0;nX||ve,pt=e=>{X=e,e.scope.on()},st=()=>{X&&X.scope.off(),X=null};function ji(e){return e.vnode.shapeFlag&4}let Ot=!1;function Wr(e,t=!1){Ot=t;const{props:n,children:s}=e.vnode,i=ji(e);Tr(e,n,i,t),Mr(e,s);const o=i?zr(e,t):void 0;return Ot=!1,o}function zr(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=ii(new Proxy(e.ctx,_r));const{setup:s}=n;if(s){const i=e.setupContext=s.length>1?qr(e):null;pt(e),gt();const o=Ke(s,e,0,[e.props,i]);if(mt(),st(),zs(o)){if(o.then(st,st),t)return o.then(r=>{Ps(e,r,t)}).catch(r=>{en(r,e,0)});e.asyncDep=o}else Ps(e,o,t)}else Ri(e,t)}function Ps(e,t,n){F(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Q(t)&&(e.setupState=li(t)),Ri(e,n)}let Os;function Ri(e,t,n){const s=e.type;if(!e.render){if(!t&&Os&&!s.render){const i=s.template||Zn(e).template;if(i){const{isCustomElement:o,compilerOptions:r}=e.appContext.config,{delimiters:a,compilerOptions:f}=s,u=se(se({isCustomElement:o,delimiters:a},r),f);s.render=Os(i,u)}}e.render=s.render||we}pt(e),gt(),br(e),mt(),st()}function Vr(e){return new Proxy(e.attrs,{get(t,n){return de(e,"get","$attrs"),t[n]}})}function qr(e){const t=s=>{e.exposed=s||{}};let n;return{get attrs(){return n||(n=Vr(e))},slots:e.slots,emit:e.emit,expose:t}}function ss(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(li(ii(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in wt)return wt[n](e)},has(t,n){return n in t||n in wt}}))}function Jr(e,t=!0){return F(e)?e.displayName||e.name:e.name||t&&e.__name}function Yr(e){return F(e)&&"__vccOpts"in e}const Qr=(e,t)=>Uo(e,t,Ot);function Xr(e,t,n){const s=arguments.length;return s===2?Q(t)&&!S(t)?Sn(t)?fe(e,null,[t]):fe(e,t):fe(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Sn(n)&&(n=[n]),fe(e,t,n))}const Gr=Symbol(""),Zr=()=>kt(Gr),el="3.2.47",tl="http://www.w3.org/2000/svg",tt=typeof document<"u"?document:null,Ss=tt&&tt.createElement("template"),nl={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const i=t?tt.createElementNS(tl,e):tt.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&i.setAttribute("multiple",s.multiple),i},createText:e=>tt.createTextNode(e),createComment:e=>tt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>tt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,i,o){const r=n?n.previousSibling:t.lastChild;if(i&&(i===o||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),!(i===o||!(i=i.nextSibling)););else{Ss.innerHTML=s?`${e}`:e;const a=Ss.content;if(s){const f=a.firstChild;for(;f.firstChild;)a.appendChild(f.firstChild);a.removeChild(f)}t.insertBefore(a,n)}return[r?r.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function sl(e,t,n){const s=e._vtc;s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function il(e,t,n){const s=e.style,i=Z(n);if(n&&!i){if(t&&!Z(t))for(const o in t)n[o]==null&&Fn(s,o,"");for(const o in n)Fn(s,o,n[o])}else{const o=s.display;i?t!==n&&(s.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(s.display=o)}}const Fs=/\s*!important$/;function Fn(e,t,n){if(S(n))n.forEach(s=>Fn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=ol(e,t);Fs.test(n)?e.setProperty(ht(s),n.replace(Fs,""),"important"):e[s]=n}}const Ls=["Webkit","Moz","ms"],vn={};function ol(e,t){const n=vn[t];if(n)return n;let s=Oe(t);if(s!=="filter"&&s in e)return vn[t]=s;s=Gt(s);for(let i=0;i_n||(dl.then(()=>_n=0),_n=Date.now());function hl(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;_e(gl(s,n.value),t,5,[s])};return n.value=e,n.attached=pl(),n}function gl(e,t){if(S(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>i=>!i._stopped&&s&&s(i))}else return t}const Rs=/^on[a-z]/,ml=(e,t,n,s,i=!1,o,r,a,f)=>{t==="class"?sl(e,s,i):t==="style"?il(e,n,s):Yt(t)?jn(t)||fl(e,t,n,s,r):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):vl(e,t,s,i))?ll(e,t,s,o,r,a,f):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),rl(e,t,s,i))};function vl(e,t,n,s){return s?!!(t==="innerHTML"||t==="textContent"||t in e&&Rs.test(t)&&F(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||Rs.test(t)&&Z(n)?!1:t in e}const De="transition",yt="animation",is=(e,{slots:t})=>Xr(vi,_l(e),t);is.displayName="Transition";const Di={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};is.props=se({},vi.props,Di);const Qe=(e,t=[])=>{S(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ds=e=>e?S(e)?e.some(t=>t.length>1):e.length>1:!1;function _l(e){const t={};for(const E in e)E in Di||(t[E]=e[E]);if(e.css===!1)return t;const{name:n="v",type:s,duration:i,enterFromClass:o=`${n}-enter-from`,enterActiveClass:r=`${n}-enter-active`,enterToClass:a=`${n}-enter-to`,appearFromClass:f=o,appearActiveClass:u=r,appearToClass:p=a,leaveFromClass:v=`${n}-leave-from`,leaveActiveClass:y=`${n}-leave-active`,leaveToClass:A=`${n}-leave-to`}=e,N=bl(i),$=N&&N[0],q=N&&N[1],{onBeforeEnter:H,onEnter:le,onEnterCancelled:O,onLeave:K,onLeaveCancelled:ee,onBeforeAppear:je=H,onAppear:Ee=le,onAppearCancelled:L=O}=t,J=(E,V,pe)=>{Xe(E,V?p:a),Xe(E,V?u:r),pe&&pe()},W=(E,V)=>{E._isLeaving=!1,Xe(E,v),Xe(E,A),Xe(E,y),V&&V()},ie=E=>(V,pe)=>{const _t=E?Ee:le,te=()=>J(V,E,pe);Qe(_t,[V,te]),Hs(()=>{Xe(V,E?f:o),He(V,E?p:a),Ds(_t)||Bs(V,s,$,te)})};return se(t,{onBeforeEnter(E){Qe(H,[E]),He(E,o),He(E,r)},onBeforeAppear(E){Qe(je,[E]),He(E,f),He(E,u)},onEnter:ie(!1),onAppear:ie(!0),onLeave(E,V){E._isLeaving=!0;const pe=()=>W(E,V);He(E,v),xl(),He(E,y),Hs(()=>{E._isLeaving&&(Xe(E,v),He(E,A),Ds(K)||Bs(E,s,q,pe))}),Qe(K,[E,pe])},onEnterCancelled(E){J(E,!1),Qe(O,[E])},onAppearCancelled(E){J(E,!0),Qe(L,[E])},onLeaveCancelled(E){W(E),Qe(ee,[E])}})}function bl(e){if(e==null)return null;if(Q(e))return[bn(e.enter),bn(e.leave)];{const t=bn(e);return[t,t]}}function bn(e){return io(e)}function He(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function Xe(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function Hs(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let yl=0;function Bs(e,t,n,s){const i=e._endId=++yl,o=()=>{i===e._endId&&s()};if(n)return setTimeout(o,n);const{type:r,timeout:a,propCount:f}=Cl(e,t);if(!r)return s();const u=r+"end";let p=0;const v=()=>{e.removeEventListener(u,y),o()},y=A=>{A.target===e&&++p>=f&&v()};setTimeout(()=>{p(n[N]||"").split(", "),i=s(`${De}Delay`),o=s(`${De}Duration`),r=ks(i,o),a=s(`${yt}Delay`),f=s(`${yt}Duration`),u=ks(a,f);let p=null,v=0,y=0;t===De?r>0&&(p=De,v=r,y=o.length):t===yt?u>0&&(p=yt,v=u,y=f.length):(v=Math.max(r,u),p=v>0?r>u?De:yt:null,y=p?p===De?o.length:f.length:0);const A=p===De&&/\b(transform|all)(,|$)/.test(s(`${De}Property`).toString());return{type:p,timeout:v,propCount:y,hasTransform:A}}function ks(e,t){for(;e.lengthUs(n)+Us(e[s])))}function Us(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function xl(){return document.body.offsetHeight}const wl=se({patchProp:ml},nl);let Ks;function Tl(){return Ks||(Ks=Or(wl))}const El=(...e)=>{const t=Tl().createApp(...e),{mount:n}=t;return t.mount=s=>{const i=Il(s);if(!i)return;const o=t._component;!F(o)&&!o.render&&!o.template&&(o.template=i.innerHTML),i.innerHTML="";const r=n(i,!1,i instanceof SVGElement);return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),r},t};function Il(e){return Z(e)?document.querySelector(e):e}const os="/assets/Vue-5532db34.svg",Ml="/assets/Python-3cb5503b.svg",Al="/assets/C-7a16311b.svg",$l="/assets/info-2a702950.svg",Pl="/assets/C.shapes-6ef45937.jpeg",Ol="/assets/C.laplace-207c50c6.jpeg",Sl="/assets/C.mandel-933eaf0f.jpeg",Fl="/assets/C.nbody-f4c5f1bc.jpeg",Hi=e=>(Xn("data-v-27d756da"),e=e(),Gn(),e),Ll=Hi(()=>w("h2",null,"C++ Graphics & Computational Science Projects",-1)),Nl=Hi(()=>w("h5",null,"2011",-1)),jl={class:"text-cell"},Rl={class:"text-cell"},Dl={class:"text-cell"},Hl={class:"text-cell"},Bl=sn({__name:"C",setup(e){const t=Jn("");return(n,s)=>(ce(),it("div",null,[Ll,Nl,w("table",null,[w("tr",null,[w("td",null,[w("img",{src:Pl,onClick:s[0]||(s[0]=i=>t.value="shapes"),onMouseover:s[1]||(s[1]=i=>t.value="shapes")},null,32)]),w("td",jl,[w("h4",{onClick:s[2]||(s[2]=i=>t.value="shapes"),onMouseover:s[3]||(s[3]=i=>t.value="shapes")}," OpenGL Scene ",32),w("p",{class:ne({focused:t.value==="shapes"})}," Draws a lit scene with various rotating objects. Camera can rotate with the mouse. The sphere is created by subdividing a tetrahedron. ",2)])]),w("tr",null,[w("td",null,[w("img",{src:Ol,onClick:s[4]||(s[4]=i=>t.value="laplace"),onMouseover:s[5]||(s[5]=i=>t.value="laplace")},null,32)]),w("td",Rl,[w("h4",{onClick:s[6]||(s[6]=i=>t.value="laplace"),onMouseover:s[7]||(s[7]=i=>t.value="laplace")}," OpenMP Laplace Heatmap ",32),w("p",{class:ne({focused:t.value==="laplace"})}," Simulates a heat distribution map with successive approximations computed in parallel. ",2)])]),w("tr",null,[w("td",null,[w("img",{src:Sl,onClick:s[8]||(s[8]=i=>t.value="mandel"),onMouseover:s[9]||(s[9]=i=>t.value="mandel")},null,32)]),w("td",Dl,[w("h4",{onClick:s[10]||(s[10]=i=>t.value="mandel"),onMouseover:s[11]||(s[11]=i=>t.value="mandel")}," OpenMPI Mandelbrot Set ",32),w("p",{class:ne({focused:t.value==="mandel"})}," Calculates and visualizes the Mandelbrot set in parallel via message passing. ",2)])]),w("tr",null,[w("td",null,[w("img",{src:Fl,onClick:s[12]||(s[12]=i=>t.value="nbody"),onMouseover:s[13]||(s[13]=i=>t.value="nbody")},null,32)]),w("td",Hl,[w("h4",{onClick:s[14]||(s[14]=i=>t.value="nbody"),onMouseover:s[15]||(s[15]=i=>t.value="nbody")}," OpenMPI N-Body Orbits ",32),w("p",{class:ne({focused:t.value==="nbody"})}," Simulates the planetary rotations of our solar system as an n-body problem, calculated in parallel via message passing. Visualized as a ten year orbit of the planets. ",2)])])])]))}});const vt=(e,t)=>{const n=e.__vccOpts||e;for(const[s,i]of t)n[s]=i;return n},kl=vt(Bl,[["__scopeId","data-v-27d756da"]]),Ul="/assets/LinkedIn-7af54eae.svg";const Kl={},Wl=ts('

Skills

Expertise 10+ Years

  • Web Apps
  • JavaScript
  • HTML5
  • CSS3
  • Clean Coding
  • Documentation

Proficient 3-9 Years

  • Hybrid Apps / Capacitor
  • Web Architecture & APIs
  • Project Management
  • Team Leadership
  • Vue
  • TypeScript
  • Node
  • Django
  • Python
  • Elm
  • Git
  • SQL
  • NoSQL
  • Firebase
  • AJAX
  • Apache
  • UI / UX
  • VS Code
  • SDLC & QA
  • Gamification
  • Microservices
  • Custom CMS / LMS
  • Operating Systems
  • Remote Collaboration
  • Agile Development
  • Customer Service
  • Technical Writing & Support

Experienced 1-2 Years

  • Progressive Web Apps
  • GitHub Actions
  • PHP
  • Java
  • Drupal
  • GCP
  • WordPress
  • Vite
  • XState
  • CI / CD
  • TDD
  • SVN
  • SASS

Familiar < 1 year

  • C++
  • Go
  • Rust
  • React
  • Angular
  • AWS
  • WebGL
  • GraphQL
  • Selenium
  • Godot

General Tech Interests

  • Next gen web technologies
  • Interactivity & gamification
  • Cross-platform & hybrid apps
  • Educational & social tools
  • Data visualization, simulation & virtualization
  • Sustainable & open source software
  • Decentralized governance, democracy & blockchains
  • Scientific, concurrent & high performance computing
  • & More

Other Hobbies

  • Reading
  • Gaming
  • Tai Chi
  • Qigong
  • Yoga
  • Jeet Kune Do
  • Hiking
  • Meditation
',14),zl=[Wl];function Vl(e,t){return ce(),it("div",null,zl)}const ql=vt(Kl,[["render",Vl],["__scopeId","data-v-a2984283"]]),Jl={};function Yl(e,t){return ce(),it("h3",null,"Coming Soon: Godot Project Demo")}const Ql=vt(Jl,[["render",Yl]]),Xl="/assets/Python.brts-3853e43d.png",Gl="/assets/Python.breaker1-8a6f137f.jpeg",Zl="/assets/Python.breaker2-d47a9fff.jpeg";const ea={},ta=ts('

White Label Django Learning Management Platform

2018 ~ 2020

This Python project was inherited when I started working with Oregon Research Institute and Influents Innovations. My team and I maintained and enhanced the existing collection of web apps, servers, databases, and associated native mobile apps for a few years while expanding their scope to support a dozen different research projects.

A few of the many enhancements I worked on included evolving the project into a progressive web app (PWA), implementing custom landing pages configurable by project managers, and enhancing the web servers to support HTTPS encryption with auto-renewing certificates.

Eventually, I became intimately familiar with the existing platform and its limitations relative to future goals for the platform. So I led the successful efforts to propose, architect, and rebuild the LMS platform from scratch using innovative and efficient technologies (see Vue section for details on the successor project).

Learn More

Find more details here in the 'T-BIDS' product section

Block Breaker Game

2010

Breakout style game built using the Pygame library. Extra balls make this version more interesting than the original game.

',13),na=[ta];function sa(e,t){return ce(),it("div",null,na)}const ia=vt(ea,[["render",sa],["__scopeId","data-v-b4ac3716"]]),oa="/assets/Vue.brts-0d07c5b9.png",ra="/assets/Ionic-6dc8eb67.svg",la="/assets/Node-3013b930.svg",aa="/assets/TS-14a00f9d.svg",ca="/assets/Firebase-44a65a5e.svg",fa="/assets/Capacitor-299ab557.svg",ot=e=>(Xn("data-v-8202beaf"),e=e(),Gn(),e),ua=ot(()=>w("h2",null,"White Label Cross-Platform Vue Learning Management Platform",-1)),da=ot(()=>w("h5",null,"2020 ~ 2023",-1)),pa=ot(()=>w("img",{src:oa,class:"banner",alt:"be ready to smile images"},null,-1)),ha=ot(()=>w("p",null," This was a project I initiated after working with Oregon Research Institute and Influents Innovations on their existing LMS platform for a few years and recognizing the limitations holding it back (see Python section for more details on the legacy product). ",-1)),ga=ot(()=>w("p",null," In the first year of the project, I led the proposal, prototyping, and architecture phases of the software rebuild process. Next, my small team and I completed the core project and features over two more years of development, then launched our organization's new flagship product across web and mobile platforms successfully. ",-1)),ma=ot(()=>w("br",null,null,-1)),va=ot(()=>w("h3",null,"Tech Stack",-1)),_a=ts('

Major Enhancements

New Software AdvantagesLegacy Software Limitations
One unified codebase which compiled to native web, iOS & Android versions Three different codebases, one for each platform supported, and each in a different language
A cloud based serverless backend architecture, easily scalable and hosted by Google Firebase Custom Django servers, hosted by our inhouse IT staff, and managed manually by me and our small software team
Modern frontend framework and component libraries for rapid development and supperior visual and interactive quality No frontend framework foundation, all UI/UX design work done from scratch, further hindering our productivity and ability to iterate quickly

Learn More

For a sample of hybrid mobile versions of an app compiled from the unified LMS platform, please check out these App Store and Play Store pages of an associated project.

Find more details about specific projects utilizing the custom LMS platform here in the 'Be Ready To Smile' & 'MomMoodBooster' product sections.

',7),ba=sn({__name:"Vue",setup(e){const t=Jn("");return(n,s)=>(ce(),it("div",null,[ua,da,pa,ha,ga,ma,va,w("img",{src:os,onClick:s[0]||(s[0]=i=>t.value="vue"),onMouseover:s[1]||(s[1]=i=>t.value="vue"),onMouseleave:s[2]||(s[2]=i=>t.value=""),class:"logo",alt:"Vue logo"},null,32),w("img",{src:ra,onClick:s[3]||(s[3]=i=>t.value="ionic"),onMouseover:s[4]||(s[4]=i=>t.value="ionic"),onMouseleave:s[5]||(s[5]=i=>t.value=""),class:"logo",alt:"Ionic logo"},null,32),w("img",{src:la,onClick:s[6]||(s[6]=i=>t.value="node"),onMouseover:s[7]||(s[7]=i=>t.value="node"),onMouseleave:s[8]||(s[8]=i=>t.value=""),class:"logo",alt:"Node logo"},null,32),w("img",{src:aa,onClick:s[9]||(s[9]=i=>t.value="ts"),onMouseover:s[10]||(s[10]=i=>t.value="ts"),onMouseleave:s[11]||(s[11]=i=>t.value=""),class:"logo",alt:"TypeScript logo"},null,32),w("img",{src:ca,onClick:s[12]||(s[12]=i=>t.value="firebase"),onMouseover:s[13]||(s[13]=i=>t.value="firebase"),onMouseleave:s[14]||(s[14]=i=>t.value=""),class:"logo",alt:"Firebase logo"},null,32),w("img",{src:fa,onClick:s[15]||(s[15]=i=>t.value="capacitor"),onMouseover:s[16]||(s[16]=i=>t.value="capacitor"),onMouseleave:s[17]||(s[17]=i=>t.value=""),class:"logo",alt:"Capacitor logo"},null,32),w("p",{class:ne({focused:t.value==="vue"})},"Vue Framework",2),w("p",{class:ne({focused:t.value==="ionic"})},"Ionic Framework",2),w("p",{class:ne({focused:t.value==="node"})},"Node.js",2),w("p",{class:ne({focused:t.value==="ts"})},"TypeScript",2),w("p",{class:ne({focused:t.value==="firebase"})},"Firebase + GCP",2),w("p",{class:ne({focused:t.value==="capacitor"})}," Capacitor (Hybrid Mobile Apps) ",2),_a]))}});const ya=vt(ba,[["__scopeId","data-v-8202beaf"]]),Ca=w("h2",null,"WebGL Benchmark ~ 2012",-1),xa=w("canvas",{id:"canvas",width:"658",height:"410"},null,-1),wa=w("div",{id:"framerate"},null,-1),Ta=w("input",{type:"checkbox",id:"lighting",checked:""},null,-1),Ea=w("input",{type:"checkbox",id:"per-pixel",checked:"",style:{display:"none"}},null,-1),Ia=w("p",null,"A basic benchmark exercise created to experiment with WebGL.",-1),Ma=w("p",null,"The JavaScript and OpenGL source is available in this page.",-1),Aa=w("p",null,"Click & drag to rotate camera.",-1),$a=sn({__name:"WebGL",setup(e){return(t,n)=>(ce(),it(me,null,[Ca,xa,wa,Ta,Et(" Use Lighting "),Ea,Ia,Ma,Aa],64))}}),Pa=e=>(Xn("data-v-9745eb4c"),e=e(),Gn(),e),Oa=Pa(()=>w("footer",null,[Et(" Paul Naylor "),w("br"),Et(" Made with "),w("img",{src:os,class:"icon",alt:"Vue logo"}),Et("ue ")],-1)),Sa=sn({__name:"App",setup(e){const t=Jn("");return(n,s)=>(ce(),it(me,null,[w("div",null,[w("img",{src:os,onClick:s[0]||(s[0]=i=>t.value="Vue"),class:ne(["logo",{active:t.value==="Vue"}]),alt:"Vue logo"},null,2),w("img",{src:Ml,onClick:s[1]||(s[1]=i=>t.value="Python"),class:ne(["logo",{active:t.value==="Python"}]),alt:"Python logo"},null,2),w("img",{src:Al,onClick:s[2]||(s[2]=i=>t.value="C"),class:ne(["logo",{active:t.value==="C"}]),alt:"C++ logo"},null,2),w("img",{src:$l,onClick:s[3]||(s[3]=i=>t.value="Info"),class:ne(["logo",{active:t.value==="Info"}]),alt:"info logo"},null,2)]),fe(is,{name:"fade",mode:"out-in"},{default:hi(()=>[t.value==="C"?(ce(),Be(kl,{key:0})):t.value==="Godot"?(ce(),Be(Ql,{key:1})):t.value==="Python"?(ce(),Be(ia,{key:2})):t.value==="Vue"?(ce(),Be(ya,{key:3})):t.value==="WebGL"?(ce(),Be($a,{key:4})):t.value==="Info"?(ce(),Be(ql,{key:5})):Dr("",!0)]),_:1}),(ce(),Be(mr(t.value))),Oa],64))}});const Fa=vt(Sa,[["__scopeId","data-v-9745eb4c"]]);El(Fa).mount("#app"); diff --git a/assets/index-1b5fe5d4.css b/assets/index-d2bdc418.css similarity index 93% rename from assets/index-1b5fe5d4.css rename to assets/index-d2bdc418.css index 66c3e6f..31a65cb 100644 --- a/assets/index-1b5fe5d4.css +++ b/assets/index-d2bdc418.css @@ -1 +1 @@ -:root{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;background:linear-gradient(90deg,rgb(20,20,20),#242424 20%,#242424 80%,rgb(20,20,20) 100%);font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%}a{font-weight:500;color:#2fe;text-decoration:inherit}a:hover{color:#7fd}body{margin:0;display:flex;place-items:center;min-width:320px;min-height:100vh}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}h1,h2,h3,h4,h5,h6{color:#08a008;text-shadow:4px 4px 3px black}img{filter:drop-shadow(0 0 1.2em black);transition:transform .4s}img:hover{transform:scale(1.1)}.card{padding:2em}#app{max-width:1280px;margin:0 auto;padding:2rem;text-align:center;text-shadow:2px 2px 2px black}@media (prefers-color-scheme: light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}img[data-v-27d756da]{border-radius:45px;width:8em;padding:1em}p[data-v-27d756da]{opacity:0;font-size:.4em;transition:opacity 1.2s,font-size 1s}table[data-v-27d756da]{margin-left:auto;margin-right:auto;text-align:left;max-width:80%}td[data-v-27d756da]{vertical-align:top}td.text-cell[data-v-27d756da]{width:70%}.focused[data-v-27d756da]{font-size:1em;opacity:1;transition:opacity 2.4s,font-size 1s}ul[data-v-6766f45a]{list-style-type:square;margin-left:18vw;text-align:left}ul.grid[data-v-6766f45a]{display:grid;grid-template-columns:1fr 1fr}h3[data-v-6766f45a]{margin-left:18vw;text-align:left}h4[data-v-6766f45a]{margin-left:20vw;text-align:left}img[data-v-b4ac3716]{padding:.8em}p[data-v-b4ac3716]{width:68vw;margin-left:auto;margin-right:auto}div.fit[data-v-b4ac3716]{height:auto;margin:auto;display:block}.fit img[data-v-b4ac3716]{width:68vw}p[data-v-8202beaf]{width:68vw;margin-left:auto;margin-right:auto;transition:transform .4s}table[data-v-8202beaf]{max-width:80%;margin-left:auto;margin-right:auto}table[data-v-8202beaf],td[data-v-8202beaf]{text-align:left;border:1px solid black}td[data-v-8202beaf]{padding:20px}.banner[data-v-8202beaf]{width:68vw}.focused[data-v-8202beaf]{transform:scale(1.8)}.logo[data-v-8202beaf]{height:4em;padding:1em}.logo[data-v-8202beaf]:hover{transform:scale(1.4)}footer[data-v-9745eb4c]{margin-top:48%}.active[data-v-9745eb4c]{filter:drop-shadow(0 0 1em green)}.fade-enter-active[data-v-9745eb4c],.fade-leave-active[data-v-9745eb4c]{transition:all .4s ease}.fade-enter-from[data-v-9745eb4c]{opacity:0;transform:translateY(-10px)}.fade-leave-to[data-v-9745eb4c]{opacity:0;transform:translateY(10px)}.icon[data-v-9745eb4c]{height:.88em}.logo[data-v-9745eb4c]{height:6em;margin:2.4em;will-change:filter;transition:transform .4s,filter .4s ease-out}.logo[data-v-9745eb4c]:hover{filter:drop-shadow(0 0 1.2em blue)}@media only screen and (max-width: 600px){.logo[data-v-9745eb4c]{height:4em;margin:1.2em}} +:root{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;background:linear-gradient(90deg,rgb(20,20,20),#242424 20%,#242424 80%,rgb(20,20,20) 100%);font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%}a{font-weight:500;color:#2fe;text-decoration:inherit}a:hover{color:#7fd}body{margin:0;display:flex;place-items:center;min-width:320px;min-height:100vh}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}h1,h2,h3,h4,h5,h6{color:#08a008;text-shadow:4px 4px 3px black}img{filter:drop-shadow(0 0 1.2em black);transition:transform .4s}img:hover{transform:scale(1.1)}.card{padding:2em}#app{max-width:1280px;margin:0 auto;padding:2rem;text-align:center;text-shadow:2px 2px 2px black}@media (prefers-color-scheme: light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}img[data-v-27d756da]{border-radius:45px;width:8em;padding:1em}p[data-v-27d756da]{opacity:0;font-size:.4em;transition:opacity 1.2s,font-size 1s}table[data-v-27d756da]{margin-left:auto;margin-right:auto;text-align:left;max-width:80%}td[data-v-27d756da]{vertical-align:top}td.text-cell[data-v-27d756da]{width:70%}.focused[data-v-27d756da]{font-size:1em;opacity:1;transition:opacity 2.4s,font-size 1s}ul[data-v-a2984283]{list-style-type:square;margin-left:18vw;text-align:left}ul.grid[data-v-a2984283]{display:grid;grid-template-columns:1fr 1fr}h3[data-v-a2984283]{margin-left:18vw;text-align:left}h4[data-v-a2984283]{margin-left:20vw;text-align:left}img[data-v-b4ac3716]{padding:.8em}p[data-v-b4ac3716]{width:68vw;margin-left:auto;margin-right:auto}div.fit[data-v-b4ac3716]{height:auto;margin:auto;display:block}.fit img[data-v-b4ac3716]{width:68vw}p[data-v-8202beaf]{width:68vw;margin-left:auto;margin-right:auto;transition:transform .4s}table[data-v-8202beaf]{max-width:80%;margin-left:auto;margin-right:auto}table[data-v-8202beaf],td[data-v-8202beaf]{text-align:left;border:1px solid black}td[data-v-8202beaf]{padding:20px}.banner[data-v-8202beaf]{width:68vw}.focused[data-v-8202beaf]{transform:scale(1.8)}.logo[data-v-8202beaf]{height:4em;padding:1em}.logo[data-v-8202beaf]:hover{transform:scale(1.4)}footer[data-v-9745eb4c]{margin-top:48%}.active[data-v-9745eb4c]{filter:drop-shadow(0 0 1em green)}.fade-enter-active[data-v-9745eb4c],.fade-leave-active[data-v-9745eb4c]{transition:all .4s ease}.fade-enter-from[data-v-9745eb4c]{opacity:0;transform:translateY(-10px)}.fade-leave-to[data-v-9745eb4c]{opacity:0;transform:translateY(10px)}.icon[data-v-9745eb4c]{height:.88em}.logo[data-v-9745eb4c]{height:6em;margin:2.4em;will-change:filter;transition:transform .4s,filter .4s ease-out}.logo[data-v-9745eb4c]:hover{filter:drop-shadow(0 0 1.2em blue)}@media only screen and (max-width: 600px){.logo[data-v-9745eb4c]{height:4em;margin:1.2em}} diff --git a/index.html b/index.html index 2b7182b..890df35 100644 --- a/index.html +++ b/index.html @@ -5,8 +5,8 @@ Paul Naylor - - + +