diff --git a/frontend/dist/assets/DatasetPage-CoWjms-D.js b/frontend/dist/assets/DatasetPage-5Q1m8WuT.js similarity index 99% rename from frontend/dist/assets/DatasetPage-CoWjms-D.js rename to frontend/dist/assets/DatasetPage-5Q1m8WuT.js index 4ed85090..cbbd4d07 100644 --- a/frontend/dist/assets/DatasetPage-CoWjms-D.js +++ b/frontend/dist/assets/DatasetPage-5Q1m8WuT.js @@ -1 +1 @@ -import{G as Ue,d as me,u as be,s as p,k as Te,y as Pe,c as m,F as V,a as e,t as l,b as t,f,B as h,E as C,H as ue,q as pe,C as H,r as L,I as D,e as ge,w as ve,p as he,h as U,i as Me,o as g,m as _e,A as X,J as Je,K as je,x as Ge,l as He,n as $e,D as Qe,j as Se}from"./index-BlvrX0Zy.js";import{E as x}from"./index-DNZgQ1o0.js";import{E as Ye}from"./index-DILr9bpz.js";import{s as Fe}from"./schemas-BVh9ipN3.js";const R=(c,o)=>Ue(c,{method:"POST",body:JSON.stringify(o)}),j={scan:c=>R("/api/dataset-editor/scan",{path:c}),save:(c,o,r)=>R("/api/dataset-editor/caption",{root:c,image:o,caption:r}),batch:c=>R("/api/dataset-editor/batch",c),undo:c=>R("/api/dataset-editor/undo",{root:c}),redo:c=>R("/api/dataset-editor/redo",{root:c}),history:c=>R("/api/dataset-editor/history",{root:c})};function fe(c){return c.split(",").map(o=>o.trim()).filter(Boolean)}function Ze(c,o){const r=o.trim(),b=fe(c);return!r||b.includes(r)?b.join(", "):[...b,r].join(", ")}function We(c,o){const r=o.trim();return fe(c).filter(b=>b!==r).join(", ")}const Xe={class:"dataset-page"},et={class:"dataset-side"},tt={class:"path-row"},at=["disabled"],lt=["disabled"],ot={value:""},st=["value"],nt={class:"batch-box"},rt=["placeholder"],it=["aria-label"],dt={value:"back"},ut={value:"front"},ct=["placeholder"],pt={class:"replace-row"},gt=["placeholder"],vt=["placeholder"],ht={class:"quick-tag-box"},_t=["onClick","onContextmenu"],mt=["onClick"],bt=["placeholder"],ft={class:"dataset-gallery"},yt=["disabled"],Et=["disabled"],kt=["disabled"],wt=["disabled"],Ct={key:0,class:"dataset-empty"},xt={key:1,class:"image-grid"},Tt=["onClick"],$t={key:0},St=["src","alt"],Vt={class:"dataset-pager"},Ut=["disabled"],Pt=["disabled"],Mt=["disabled"],Ft=["disabled"],Lt=["value"],Dt={class:"caption-panel"},At={key:0},It=["src","alt"],qt={class:"caption-editor"},Kt={class:"caption-count"},Ot={class:"caption-chips"},Nt=["aria-label","onClick"],Bt={class:"chip-add"},Rt=["placeholder"],zt={key:1},Jt={class:"dataset-history"},jt={key:0},ce="dataset-editor-quick-tags",Ve="dataset-editor-page-size",Gt=me({__name:"DatasetEditorPage",setup(c){const{t:o}=be(),r=p(""),b=p(""),v=p([]),S=p([]),y=p([]),P=p(""),i=p(""),O=p(""),E=p(new Set),N=p(),T=p(""),M=p(""),I=p(""),B=p(""),k=p(""),d=p(!1),u=p(!1),ee=p(!1),te=p(!1),Q=p(!1),ae=p(!1),le=p("back"),Y=p(""),Z=p(""),F=p([]),w=p(1),q=p(Number(localStorage.getItem(Ve))||48),oe=p(!1),z=p({can_undo:!1,can_redo:!1,changes:[]}),K=U(()=>v.value.filter(n=>(!P.value||n.category===P.value)&&(!i.value||n.caption.toLowerCase().includes(i.value.toLowerCase())||n.name.toLowerCase().includes(i.value.toLowerCase())))),J=U(()=>Math.max(1,Math.ceil(K.value.length/q.value))),se=U(()=>K.value.slice((w.value-1)*q.value,w.value*q.value)),A=U(()=>v.value.find(n=>n.relative_path===O.value)),ne=U(()=>E.value.size?v.value.filter(n=>E.value.has(n.relative_path)):K.value),Le=U(()=>S.value.slice(0,24)),De=U(()=>fe(T.value));function ye(){const n=Ze(T.value,Z.value);n!==T.value&&(T.value=n),Z.value=""}function Ae(n){T.value=We(T.value,n)}function Ee(n,s){if(O.value=n.relative_path,T.value=n.caption,!s)return;const _=K.value.findIndex($=>$.relative_path===n.relative_path),a=new Set(s.ctrlKey||s.metaKey||s.shiftKey?E.value:[]);if(s.shiftKey&&N.value!==void 0){const[$,Re]=[N.value,_].sort((de,ze)=>de-ze);K.value.slice($,Re+1).forEach(de=>a.add(de.relative_path))}else(s.ctrlKey||s.metaKey)&&a.has(n.relative_path)?a.delete(n.relative_path):a.add(n.relative_path);E.value=a,N.value=_}function re(n){const s=new Map(n.map(_=>[_.image,_]));v.value=v.value.map(_=>{const a=s.get(_.relative_path);return a?{..._,caption:a.caption,tags:a.tags,caption_exists:a.caption_exists}:_}),A.value&&(T.value=A.value.caption),Ie()}function Ie(){const n=new Map;v.value.forEach(s=>s.tags.forEach(_=>n.set(_,(n.get(_)||0)+1))),S.value=[...n].map(([s,_])=>({tag:s,count:_})).sort((s,_)=>_.count-s.count||s.tag.localeCompare(_.tag))}async function W(){b.value&&(z.value=await j.history(b.value))}async function ke(){if(r.value.trim()){Q.value=!0;try{const n=await j.scan(r.value);b.value=n.root,r.value=n.root,v.value=n.items,S.value=n.tags.sort((s,_)=>_.count-s.count),y.value=n.categories,E.value=new Set,w.value=1,n.items[0]&&Ee(n.items[0]),await W(),x.success(o("datasetEditor.scanMsg.loaded",{n:n.total}))}catch(n){x.error(n instanceof Error?n.message:o("datasetEditor.scanMsg.fail"))}finally{Q.value=!1}}}async function qe(){if(A.value)try{re([await j.save(b.value,A.value.relative_path,T.value)]),await W(),x.success(o("datasetEditor.caption.saved"))}catch(n){x.error(n instanceof Error?n.message:o("datasetEditor.caption.saveFail"))}}function ie(n){return n.split(/[,,\n]/).map(s=>s.trim()).filter(Boolean)}async function Ke(){ae.value=!0;try{r.value=(await Fe.pickFile("folder")).path.replaceAll("\\","/")}catch(n){x.error(n instanceof Error?n.message:o("schemaForm.pickFail"))}finally{ae.value=!1}}async function Oe(){if(ne.value.length)try{await Ye.confirm(o("datasetEditor.batch.confirm",{n:ne.value.length}),E.value.size?o("datasetEditor.batch.confirmSelected"):o("datasetEditor.batch.confirmFiltered"));const n=B.value.trim()?[{from:B.value.trim(),to:k.value.trim()}]:[],s=await j.batch({root:b.value,images:ne.value.map(_=>_.relative_path),append:ie(M.value),append_position:le.value,remove:ie(I.value),replace:n,clean:d.value,sort:u.value,underscore_to_space:ee.value,strip_escape_chars:te.value});re(s.items),await W(),x.success(o("datasetEditor.batch.done",{n:s.changed}))}catch(n){n!=="cancel"&&n!=="close"&&x.error(n instanceof Error?n.message:o("datasetEditor.batch.fail"))}}async function we(n){try{const s=await j[n](b.value);re(s.items),await W(),x.success(s.changed?o(n==="undo"?"datasetEditor.historyMsg.undone":"datasetEditor.historyMsg.redone"):o("datasetEditor.historyMsg.none"))}catch(s){x.error(s instanceof Error?s.message:o("datasetEditor.historyMsg.fail"))}}function Ne(){const n=new Set(E.value),s=se.value.every(_=>n.has(_.relative_path));se.value.forEach(_=>s?n.delete(_.relative_path):n.add(_.relative_path)),E.value=n}function Ce(n){const s=new Set(ie(M.value));s.add(n),M.value=[...s].join(", ")}function xe(){const n=Y.value.trim();!n||F.value.includes(n)||(F.value.push(n),Y.value="",localStorage.setItem(ce,JSON.stringify(F.value)))}function Be(n){F.value=F.value.filter(s=>s!==n),localStorage.setItem(ce,JSON.stringify(F.value))}return Te([P,i,q],()=>{w.value=1,localStorage.setItem(Ve,String(q.value))}),Te(J,n=>{w.value>n&&(w.value=n)}),Pe(()=>{try{F.value=JSON.parse(localStorage.getItem(ce)||"[]")}catch{F.value=[]}}),(n,s)=>{const _=Me("el-dialog");return g(),m(V,null,[e("div",Xe,[e("aside",et,[s[24]||(s[24]=e("span",{class:"eyebrow"},"DATASET EDITOR",-1)),e("h1",null,l(t(o)("datasetEditor.title")),1),e("label",null,[f(l(t(o)("datasetEditor.pathLabel")),1),e("span",tt,[h(e("input",{"onUpdate:modelValue":s[0]||(s[0]=a=>r.value=a),onKeyup:ue(ke,["enter"])},null,544),[[C,r.value]]),e("button",{disabled:ae.value,onClick:pe(Ke,["prevent"])},l(t(o)("schemaForm.browse")),9,at)])]),e("button",{class:"primary-action",disabled:Q.value,onClick:ke},l(Q.value?t(o)("datasetEditor.scanning"):t(o)("datasetEditor.scan")),9,lt),e("label",null,[f(l(t(o)("datasetEditor.categoryLabel")),1),h(e("select",{"onUpdate:modelValue":s[1]||(s[1]=a=>P.value=a)},[e("option",ot,l(t(o)("datasetEditor.allCategories")),1),(g(!0),m(V,null,L(y.value,a=>(g(),m("option",{key:a.value,value:a.value},l(a.name)+" ("+l(a.count)+")",9,st))),128))],512),[[H,P.value]])]),e("label",null,[f(l(t(o)("datasetEditor.queryLabel")),1),h(e("input",{"onUpdate:modelValue":s[2]||(s[2]=a=>i.value=a)},null,512),[[C,i.value]])]),e("div",nt,[e("strong",null,l(t(o)("datasetEditor.batch.title"))+" "+l(E.value.size?t(o)("datasetEditor.batch.selected",{n:E.value.size}):t(o)("datasetEditor.batch.filtered",{n:K.value.length})),1),h(e("input",{"onUpdate:modelValue":s[3]||(s[3]=a=>M.value=a),placeholder:t(o)("datasetEditor.batch.appendPlaceholder")},null,8,rt),[[C,M.value]]),h(e("select",{"onUpdate:modelValue":s[4]||(s[4]=a=>le.value=a),"aria-label":t(o)("datasetEditor.batch.position")},[e("option",dt,l(t(o)("datasetEditor.batch.positionBack")),1),e("option",ut,l(t(o)("datasetEditor.batch.positionFront")),1)],8,it),[[H,le.value]]),h(e("input",{"onUpdate:modelValue":s[5]||(s[5]=a=>I.value=a),placeholder:t(o)("datasetEditor.batch.removePlaceholder")},null,8,ct),[[C,I.value]]),e("div",pt,[h(e("input",{"onUpdate:modelValue":s[6]||(s[6]=a=>B.value=a),placeholder:t(o)("datasetEditor.batch.replaceFrom")},null,8,gt),[[C,B.value]]),h(e("input",{"onUpdate:modelValue":s[7]||(s[7]=a=>k.value=a),placeholder:t(o)("datasetEditor.batch.replaceTo")},null,8,vt),[[C,k.value]])]),e("label",null,[h(e("input",{"onUpdate:modelValue":s[8]||(s[8]=a=>d.value=a),type:"checkbox"},null,512),[[D,d.value]]),f(l(t(o)("datasetEditor.batch.clean")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":s[9]||(s[9]=a=>ee.value=a),type:"checkbox"},null,512),[[D,ee.value]]),f(l(t(o)("datasetEditor.batch.underscore")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":s[10]||(s[10]=a=>te.value=a),type:"checkbox"},null,512),[[D,te.value]]),f(l(t(o)("datasetEditor.batch.stripEscape")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":s[11]||(s[11]=a=>u.value=a),type:"checkbox"},null,512),[[D,u.value]]),f(l(t(o)("datasetEditor.batch.sort")),1)]),e("button",{onClick:Oe},l(t(o)("datasetEditor.batch.apply")),1)]),e("div",ht,[e("strong",null,l(t(o)("datasetEditor.quickTag.title")),1),e("div",null,[(g(!0),m(V,null,L(F.value,a=>(g(),m("button",{key:a,onClick:$=>Ce(a),onContextmenu:pe($=>Be(a),["prevent"])},l(a),41,_t))),128)),(g(!0),m(V,null,L(Le.value,a=>(g(),m("button",{key:a.tag,class:"suggested",onClick:$=>Ce(a.tag)},[f(l(a.tag)+" ",1),e("small",null,l(a.count),1)],8,mt))),128))]),e("span",null,[h(e("input",{"onUpdate:modelValue":s[12]||(s[12]=a=>Y.value=a),placeholder:t(o)("datasetEditor.quickTag.addPlaceholder"),onKeyup:ue(xe,["enter"])},null,40,bt),[[C,Y.value]]),e("button",{onClick:xe},l(t(o)("datasetEditor.quickTag.add")),1)]),e("small",null,l(t(o)("datasetEditor.quickTag.hint")),1)])]),e("main",ft,[e("header",null,[e("strong",null,l(t(o)("datasetEditor.gallery.count",{filtered:K.value.length,total:v.value.length,selected:E.value.size})),1),e("div",null,[e("button",{disabled:!b.value,onClick:Ne},l(t(o)("datasetEditor.gallery.togglePage")),9,yt),e("button",{disabled:!z.value.can_undo,onClick:s[13]||(s[13]=a=>we("undo"))},l(t(o)("datasetEditor.gallery.undo")),9,Et),e("button",{disabled:!z.value.can_redo,onClick:s[14]||(s[14]=a=>we("redo"))},l(t(o)("datasetEditor.gallery.redo")),9,kt),e("button",{disabled:!b.value,onClick:s[15]||(s[15]=a=>oe.value=!0)},l(t(o)("datasetEditor.gallery.history")),9,wt)])]),b.value?(g(),m("div",xt,[(g(!0),m(V,null,L(se.value,a=>(g(),m("button",{key:a.relative_path,class:_e({active:O.value===a.relative_path,checked:E.value.has(a.relative_path)}),onClick:$=>Ee(a,$)},[E.value.has(a.relative_path)?(g(),m("i",$t,"✓")):he("",!0),e("img",{src:a.image_url,alt:a.name,loading:"lazy"},null,8,St),e("span",null,l(a.name),1)],10,Tt))),128))])):(g(),m("div",Ct,[e("strong",null,l(t(o)("datasetEditor.gallery.emptyTitle")),1),e("span",null,l(t(o)("datasetEditor.gallery.emptyHint")),1)])),e("footer",Vt,[e("button",{disabled:w.value===1,onClick:s[16]||(s[16]=a=>w.value=1)},l(t(o)("datasetEditor.pager.first")),9,Ut),e("button",{disabled:w.value===1,onClick:s[17]||(s[17]=a=>w.value--)},l(t(o)("datasetEditor.pager.prev")),9,Pt),e("span",null,l(w.value)+" / "+l(J.value),1),e("button",{disabled:w.value===J.value,onClick:s[18]||(s[18]=a=>w.value++)},l(t(o)("datasetEditor.pager.next")),9,Mt),e("button",{disabled:w.value===J.value,onClick:s[19]||(s[19]=a=>w.value=J.value)},l(t(o)("datasetEditor.pager.last")),9,Ft),h(e("select",{"onUpdate:modelValue":s[20]||(s[20]=a=>q.value=a)},[(g(),m(V,null,L([24,48,96,192],a=>e("option",{key:a,value:a},l(t(o)("datasetEditor.pager.perPage",{size:a})),9,Lt)),64))],512),[[H,q.value,void 0,{number:!0}]])])]),e("aside",Dt,[A.value?(g(),m("div",At,[e("img",{src:A.value.image_url,alt:A.value.name},null,8,It),e("strong",null,l(A.value.relative_path),1),e("div",qt,[h(e("textarea",{"onUpdate:modelValue":s[21]||(s[21]=a=>T.value=a),rows:"10"},null,512),[[C,T.value]]),e("small",Kt,l(t(o)("datasetEditor.caption.chars",{n:T.value.length})),1)]),e("div",Ot,[(g(!0),m(V,null,L(De.value,a=>(g(),m("span",{key:a,class:"chip"},[f(l(a),1),e("button",{"aria-label":t(o)("datasetEditor.caption.removeAria",{tag:a}),onClick:$=>Ae(a)},"×",8,Nt)]))),128)),e("span",Bt,[h(e("input",{"onUpdate:modelValue":s[22]||(s[22]=a=>Z.value=a),placeholder:t(o)("datasetEditor.caption.addPlaceholder"),onKeyup:ue(ye,["enter"])},null,40,Rt),[[C,Z.value]]),e("button",{onClick:ye},l(t(o)("datasetEditor.caption.add")),1)])]),e("button",{class:"primary-action",onClick:qe},l(t(o)("datasetEditor.caption.save")),1)])):(g(),m("p",zt,l(t(o)("datasetEditor.caption.empty")),1))])]),ge(_,{modelValue:oe.value,"onUpdate:modelValue":s[23]||(s[23]=a=>oe.value=a),title:t(o)("datasetEditor.historyDialog.title"),width:"min(820px, 94vw)"},{default:ve(()=>[e("div",Jt,[(g(!0),m(V,null,L(z.value.changes,a=>(g(),m("article",{key:`${a.label}-${a.items[0]?.image}`},[e("header",null,[e("strong",null,l(a.label),1),e("span",null,l(t(o)("datasetEditor.historyDialog.count",{n:a.count})),1)]),e("details",null,[e("summary",null,l(t(o)("datasetEditor.historyDialog.detail")),1),(g(!0),m(V,null,L(a.items,$=>(g(),m("div",{key:$.image},[e("code",null,l($.image),1),e("del",null,l($.before||t(o)("datasetEditor.historyDialog.noCaption")),1),e("ins",null,l($.after||t(o)("datasetEditor.historyDialog.noCaption")),1)]))),128))])]))),128)),z.value.changes.length?he("",!0):(g(),m("p",jt,l(t(o)("datasetEditor.historyDialog.empty")),1))])]),_:1},8,["modelValue","title"])],64)}}}),G={status:()=>Ue("/api/tagger/status"),start:c=>X("/api/interrogate",{method:"POST",body:JSON.stringify(c)}),prefetch:(c,o)=>X("/api/tagger/prefetch",{method:"POST",body:JSON.stringify({interrogator_model:c,download_endpoint:o})}),cancel:()=>X("/api/tagger/cancel",{method:"POST"}),reset:()=>X("/api/tagger/reset",{method:"POST"})},Ht={phase:"idle",message:"",model:"",download:{current:0,total:0,filename:"",bytes_current:0,bytes_total:0,percent:0},tagging:{current:0,total:0,filename:"",bytes_current:0,bytes_total:0,percent:0},updated_at:0},Qt=Je("tagger",()=>{const c=p(Ht),o=p(""),r=p(!1),b=U(()=>["downloading","tagging","pending","cancelling"].includes(c.value.phase));async function v(){try{c.value=await G.status(),o.value=""}catch(y){o.value=y instanceof Error?y.message:je.global.t("tagger.msg.statusFail")}}async function S(y){r.value=!0;try{await y(),await v()}finally{r.value=!1}}return{status:c,error:o,submitting:r,busy:b,refresh:v,start:y=>S(()=>G.start(y)),prefetch:(y,P)=>S(()=>G.prefetch(y,P)),cancel:()=>S(G.cancel),reset:()=>S(G.reset)}}),Yt={class:"tagger-page"},Zt={class:"tagger-form"},Wt={class:"tagger-grid"},Xt={class:"path-row"},ea=["disabled"],ta=["placeholder"],aa={value:"ignore"},la={value:"copy"},oa={value:"prepend"},sa={class:"check-row"},na={class:"tagger-status"},ra={class:"task-status"},ia={key:0},da={class:"meter"},ua={class:"meter"},ca={class:"tagger-actions"},pa=["disabled"],ga=["disabled"],va=["disabled"],ha=["disabled"],_a=me({__name:"TaggerPage",setup(c){const o=["wd14-convnextv2-v2","wd-convnext-v3","wd-swinv2-v3","wd-vit-v3","wd14-swinv2-v2","wd14-vit-v2","wd14-moat-v2","wd-eva02-large-tagger-v3","wd-vit-large-tagger-v3","cl_tagger_1_01"],r=Qe({path:"",interrogator_model:o[0],threshold:.35,character_threshold:.6,add_rating_tag:!1,add_model_tag:!1,additional_tags:"",exclude_tags:"",escape_tag:!0,batch_input_recursive:!1,batch_output_action_on_conflict:"copy",replace_underscore:!0,download_endpoint:"",replace_underscore_excludes:"0_0, (o)_(o), +_+, +_-, ._., _, <|>_<|>, =_=, >_<, 3_3, 6_9, >_o, @_@, ^_^, o_o, u_u, x_x, |_|, ||_||"}),b=Qt(),{status:v,error:S,submitting:y,busy:P}=Ge(b),{t:i}=be(),O=U(()=>v.value.download.percent||(v.value.download.total?Math.round(v.value.download.current/v.value.download.total*100):0)),E=U(()=>v.value.tagging.total?Math.round(v.value.tagging.current/v.value.tagging.total*100):0);let N;async function T(){if(!r.path.trim())return x.error(i("tagger.msg.pathRequired"));try{await b.start({...r,path:r.path.replaceAll("\\","/")}),x.success(i("tagger.msg.submitted"))}catch(k){x.error(k instanceof Error?k.message:i("tagger.msg.submitFail"))}}async function M(k){try{k==="prefetch"?await b.prefetch(r.interrogator_model,r.download_endpoint):await b[k](),x.success(i(k==="cancel"?"tagger.msg.cancelRequested":k==="reset"?"tagger.msg.resetDone":"tagger.msg.prefetchStarted"))}catch(d){x.error(d instanceof Error?d.message:i("tagger.msg.actionFail"))}}const I=p(!1);async function B(){I.value=!0;try{r.path=(await Fe.pickFile("folder")).path.replaceAll("\\","/")}catch(k){x.error(k instanceof Error?k.message:i("schemaForm.pickFail"))}finally{I.value=!1}}return Pe(async()=>{await b.refresh(),N=window.setInterval(b.refresh,1200)}),He(()=>window.clearInterval(N)),(k,d)=>(g(),m("div",Yt,[e("section",Zt,[e("header",null,[d[16]||(d[16]=e("span",{class:"eyebrow"},"DATASET TAGGER",-1)),e("h1",null,l(t(i)("tagger.title")),1),e("p",null,l(t(i)("tagger.subtitle")),1)]),e("div",Wt,[e("label",null,[f(l(t(i)("tagger.modelLabel")),1),h(e("select",{"onUpdate:modelValue":d[0]||(d[0]=u=>r.interrogator_model=u)},[(g(),m(V,null,L(o,u=>e("option",{key:u},l(u),1)),64))],512),[[H,r.interrogator_model]])]),e("label",null,[f(l(t(i)("tagger.pathLabel")),1),e("span",Xt,[h(e("input",{"onUpdate:modelValue":d[1]||(d[1]=u=>r.path=u),placeholder:"D:/datasets/images"},null,512),[[C,r.path]]),e("button",{disabled:I.value,onClick:pe(B,["prevent"])},l(t(i)("schemaForm.browse")),9,ea)])]),e("label",null,[f(l(t(i)("tagger.thresholdLabel")),1),h(e("input",{"onUpdate:modelValue":d[2]||(d[2]=u=>r.threshold=u),type:"number",min:"0",max:"1",step:"0.05"},null,512),[[C,r.threshold,void 0,{number:!0}]])]),e("label",null,[f(l(t(i)("tagger.characterThresholdLabel")),1),h(e("input",{"onUpdate:modelValue":d[3]||(d[3]=u=>r.character_threshold=u),type:"number",min:"0",max:"1",step:"0.05"},null,512),[[C,r.character_threshold,void 0,{number:!0}]])]),e("label",null,[f(l(t(i)("tagger.additionalTagsLabel")),1),h(e("input",{"onUpdate:modelValue":d[4]||(d[4]=u=>r.additional_tags=u)},null,512),[[C,r.additional_tags]])]),e("label",null,[f(l(t(i)("tagger.excludeTagsLabel")),1),h(e("input",{"onUpdate:modelValue":d[5]||(d[5]=u=>r.exclude_tags=u)},null,512),[[C,r.exclude_tags]])]),e("label",null,[f(l(t(i)("tagger.endpointLabel")),1),h(e("input",{"onUpdate:modelValue":d[6]||(d[6]=u=>r.download_endpoint=u),placeholder:t(i)("tagger.endpointPlaceholder")},null,8,ta),[[C,r.download_endpoint]])]),e("label",null,[f(l(t(i)("tagger.conflictLabel")),1),h(e("select",{"onUpdate:modelValue":d[7]||(d[7]=u=>r.batch_output_action_on_conflict=u)},[e("option",aa,l(t(i)("tagger.conflict.ignore")),1),e("option",la,l(t(i)("tagger.conflict.copy")),1),e("option",oa,l(t(i)("tagger.conflict.prepend")),1)],512),[[H,r.batch_output_action_on_conflict]])])]),e("div",sa,[e("label",null,[h(e("input",{"onUpdate:modelValue":d[8]||(d[8]=u=>r.batch_input_recursive=u),type:"checkbox"},null,512),[[D,r.batch_input_recursive]]),f(l(t(i)("tagger.recursive")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":d[9]||(d[9]=u=>r.replace_underscore=u),type:"checkbox"},null,512),[[D,r.replace_underscore]]),f(l(t(i)("tagger.replaceUnderscore")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":d[10]||(d[10]=u=>r.escape_tag=u),type:"checkbox"},null,512),[[D,r.escape_tag]]),f(l(t(i)("tagger.escapeTag")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":d[11]||(d[11]=u=>r.add_rating_tag=u),type:"checkbox"},null,512),[[D,r.add_rating_tag]]),f(l(t(i)("tagger.addRatingTag")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":d[12]||(d[12]=u=>r.add_model_tag=u),type:"checkbox"},null,512),[[D,r.add_model_tag]]),f(l(t(i)("tagger.addModelTag")),1)])])]),e("aside",na,[e("span",ra,l(t(v).phase),1),e("h2",null,l(t(v).message||t(i)("tagger.idle")),1),t(S)?(g(),m("p",ia,l(t(S)),1)):he("",!0),e("div",da,[e("header",null,[e("span",null,l(t(i)("tagger.downloadMeter")),1),e("b",null,l(O.value)+"%",1)]),e("div",null,[e("i",{style:$e({width:`${O.value}%`})},null,4)]),e("small",null,l(t(v).download.filename||t(i)("tagger.downloadIdle")),1)]),e("div",ua,[e("header",null,[e("span",null,l(t(i)("tagger.taggingMeter")),1),e("b",null,l(E.value)+"%",1)]),e("div",null,[e("i",{style:$e({width:`${E.value}%`})},null,4)]),e("small",null,l(t(v).tagging.current)+" / "+l(t(v).tagging.total)+" "+l(t(v).tagging.filename),1)]),e("div",ca,[t(P)?(g(),m("button",{key:0,class:"danger-action",disabled:t(y),onClick:d[13]||(d[13]=u=>M("cancel"))},l(t(i)("tagger.cancel")),9,pa)):(g(),m("button",{key:1,class:"primary-action",disabled:t(y),onClick:T},l(t(i)("tagger.start")),9,ga)),e("button",{class:"secondary-action",disabled:t(y)||t(v).phase==="tagging",onClick:d[14]||(d[14]=u=>M("prefetch"))},l(t(i)("tagger.prefetch")),9,va),e("button",{class:"secondary-action",disabled:t(y),onClick:d[15]||(d[15]=u=>M("reset"))},l(t(i)("tagger.reset")),9,ha)])])]))}}),ma={class:"dataset-section"},ba={class:"dataset-section-header"},fa=["aria-label"],Ca=me({__name:"DatasetPage",props:{tab:{}},setup(c){const{t:o}=be();return(r,b)=>{const v=Me("RouterLink");return g(),m("div",ma,[e("header",ba,[e("h1",null,l(t(o)("dataset.title")),1),e("div",{class:"segmented dataset-switch",role:"group","aria-label":t(o)("dataset.switchAria")},[ge(v,{to:"/dataset/tagger",class:_e({active:c.tab==="tagger"})},{default:ve(()=>[f(l(t(o)("dataset.tab.tagger")),1)]),_:1},8,["class"]),ge(v,{to:"/dataset/editor",class:_e({active:c.tab==="editor"})},{default:ve(()=>[f(l(t(o)("dataset.tab.editor")),1)]),_:1},8,["class"])],8,fa)]),c.tab==="editor"?(g(),Se(Gt,{key:0})):(g(),Se(_a,{key:1}))])}}});export{Ca as default}; +import{G as Ue,d as me,u as be,s as p,k as Te,y as Pe,c as m,F as V,a as e,t as l,b as t,f,B as h,E as C,H as ue,q as pe,C as H,r as L,I as D,e as ge,w as ve,p as he,h as U,i as Me,o as g,m as _e,A as X,J as Je,K as je,x as Ge,l as He,n as $e,D as Qe,j as Se}from"./index-jfqf0I3j.js";import{E as x}from"./index-tjV5EgBi.js";import{E as Ye}from"./index-CfMd9kCx.js";import{s as Fe}from"./schemas-D72H6mWJ.js";const R=(c,o)=>Ue(c,{method:"POST",body:JSON.stringify(o)}),j={scan:c=>R("/api/dataset-editor/scan",{path:c}),save:(c,o,r)=>R("/api/dataset-editor/caption",{root:c,image:o,caption:r}),batch:c=>R("/api/dataset-editor/batch",c),undo:c=>R("/api/dataset-editor/undo",{root:c}),redo:c=>R("/api/dataset-editor/redo",{root:c}),history:c=>R("/api/dataset-editor/history",{root:c})};function fe(c){return c.split(",").map(o=>o.trim()).filter(Boolean)}function Ze(c,o){const r=o.trim(),b=fe(c);return!r||b.includes(r)?b.join(", "):[...b,r].join(", ")}function We(c,o){const r=o.trim();return fe(c).filter(b=>b!==r).join(", ")}const Xe={class:"dataset-page"},et={class:"dataset-side"},tt={class:"path-row"},at=["disabled"],lt=["disabled"],ot={value:""},st=["value"],nt={class:"batch-box"},rt=["placeholder"],it=["aria-label"],dt={value:"back"},ut={value:"front"},ct=["placeholder"],pt={class:"replace-row"},gt=["placeholder"],vt=["placeholder"],ht={class:"quick-tag-box"},_t=["onClick","onContextmenu"],mt=["onClick"],bt=["placeholder"],ft={class:"dataset-gallery"},yt=["disabled"],Et=["disabled"],kt=["disabled"],wt=["disabled"],Ct={key:0,class:"dataset-empty"},xt={key:1,class:"image-grid"},Tt=["onClick"],$t={key:0},St=["src","alt"],Vt={class:"dataset-pager"},Ut=["disabled"],Pt=["disabled"],Mt=["disabled"],Ft=["disabled"],Lt=["value"],Dt={class:"caption-panel"},At={key:0},It=["src","alt"],qt={class:"caption-editor"},Kt={class:"caption-count"},Ot={class:"caption-chips"},Nt=["aria-label","onClick"],Bt={class:"chip-add"},Rt=["placeholder"],zt={key:1},Jt={class:"dataset-history"},jt={key:0},ce="dataset-editor-quick-tags",Ve="dataset-editor-page-size",Gt=me({__name:"DatasetEditorPage",setup(c){const{t:o}=be(),r=p(""),b=p(""),v=p([]),S=p([]),y=p([]),P=p(""),i=p(""),O=p(""),E=p(new Set),N=p(),T=p(""),M=p(""),I=p(""),B=p(""),k=p(""),d=p(!1),u=p(!1),ee=p(!1),te=p(!1),Q=p(!1),ae=p(!1),le=p("back"),Y=p(""),Z=p(""),F=p([]),w=p(1),q=p(Number(localStorage.getItem(Ve))||48),oe=p(!1),z=p({can_undo:!1,can_redo:!1,changes:[]}),K=U(()=>v.value.filter(n=>(!P.value||n.category===P.value)&&(!i.value||n.caption.toLowerCase().includes(i.value.toLowerCase())||n.name.toLowerCase().includes(i.value.toLowerCase())))),J=U(()=>Math.max(1,Math.ceil(K.value.length/q.value))),se=U(()=>K.value.slice((w.value-1)*q.value,w.value*q.value)),A=U(()=>v.value.find(n=>n.relative_path===O.value)),ne=U(()=>E.value.size?v.value.filter(n=>E.value.has(n.relative_path)):K.value),Le=U(()=>S.value.slice(0,24)),De=U(()=>fe(T.value));function ye(){const n=Ze(T.value,Z.value);n!==T.value&&(T.value=n),Z.value=""}function Ae(n){T.value=We(T.value,n)}function Ee(n,s){if(O.value=n.relative_path,T.value=n.caption,!s)return;const _=K.value.findIndex($=>$.relative_path===n.relative_path),a=new Set(s.ctrlKey||s.metaKey||s.shiftKey?E.value:[]);if(s.shiftKey&&N.value!==void 0){const[$,Re]=[N.value,_].sort((de,ze)=>de-ze);K.value.slice($,Re+1).forEach(de=>a.add(de.relative_path))}else(s.ctrlKey||s.metaKey)&&a.has(n.relative_path)?a.delete(n.relative_path):a.add(n.relative_path);E.value=a,N.value=_}function re(n){const s=new Map(n.map(_=>[_.image,_]));v.value=v.value.map(_=>{const a=s.get(_.relative_path);return a?{..._,caption:a.caption,tags:a.tags,caption_exists:a.caption_exists}:_}),A.value&&(T.value=A.value.caption),Ie()}function Ie(){const n=new Map;v.value.forEach(s=>s.tags.forEach(_=>n.set(_,(n.get(_)||0)+1))),S.value=[...n].map(([s,_])=>({tag:s,count:_})).sort((s,_)=>_.count-s.count||s.tag.localeCompare(_.tag))}async function W(){b.value&&(z.value=await j.history(b.value))}async function ke(){if(r.value.trim()){Q.value=!0;try{const n=await j.scan(r.value);b.value=n.root,r.value=n.root,v.value=n.items,S.value=n.tags.sort((s,_)=>_.count-s.count),y.value=n.categories,E.value=new Set,w.value=1,n.items[0]&&Ee(n.items[0]),await W(),x.success(o("datasetEditor.scanMsg.loaded",{n:n.total}))}catch(n){x.error(n instanceof Error?n.message:o("datasetEditor.scanMsg.fail"))}finally{Q.value=!1}}}async function qe(){if(A.value)try{re([await j.save(b.value,A.value.relative_path,T.value)]),await W(),x.success(o("datasetEditor.caption.saved"))}catch(n){x.error(n instanceof Error?n.message:o("datasetEditor.caption.saveFail"))}}function ie(n){return n.split(/[,,\n]/).map(s=>s.trim()).filter(Boolean)}async function Ke(){ae.value=!0;try{r.value=(await Fe.pickFile("folder")).path.replaceAll("\\","/")}catch(n){x.error(n instanceof Error?n.message:o("schemaForm.pickFail"))}finally{ae.value=!1}}async function Oe(){if(ne.value.length)try{await Ye.confirm(o("datasetEditor.batch.confirm",{n:ne.value.length}),E.value.size?o("datasetEditor.batch.confirmSelected"):o("datasetEditor.batch.confirmFiltered"));const n=B.value.trim()?[{from:B.value.trim(),to:k.value.trim()}]:[],s=await j.batch({root:b.value,images:ne.value.map(_=>_.relative_path),append:ie(M.value),append_position:le.value,remove:ie(I.value),replace:n,clean:d.value,sort:u.value,underscore_to_space:ee.value,strip_escape_chars:te.value});re(s.items),await W(),x.success(o("datasetEditor.batch.done",{n:s.changed}))}catch(n){n!=="cancel"&&n!=="close"&&x.error(n instanceof Error?n.message:o("datasetEditor.batch.fail"))}}async function we(n){try{const s=await j[n](b.value);re(s.items),await W(),x.success(s.changed?o(n==="undo"?"datasetEditor.historyMsg.undone":"datasetEditor.historyMsg.redone"):o("datasetEditor.historyMsg.none"))}catch(s){x.error(s instanceof Error?s.message:o("datasetEditor.historyMsg.fail"))}}function Ne(){const n=new Set(E.value),s=se.value.every(_=>n.has(_.relative_path));se.value.forEach(_=>s?n.delete(_.relative_path):n.add(_.relative_path)),E.value=n}function Ce(n){const s=new Set(ie(M.value));s.add(n),M.value=[...s].join(", ")}function xe(){const n=Y.value.trim();!n||F.value.includes(n)||(F.value.push(n),Y.value="",localStorage.setItem(ce,JSON.stringify(F.value)))}function Be(n){F.value=F.value.filter(s=>s!==n),localStorage.setItem(ce,JSON.stringify(F.value))}return Te([P,i,q],()=>{w.value=1,localStorage.setItem(Ve,String(q.value))}),Te(J,n=>{w.value>n&&(w.value=n)}),Pe(()=>{try{F.value=JSON.parse(localStorage.getItem(ce)||"[]")}catch{F.value=[]}}),(n,s)=>{const _=Me("el-dialog");return g(),m(V,null,[e("div",Xe,[e("aside",et,[s[24]||(s[24]=e("span",{class:"eyebrow"},"DATASET EDITOR",-1)),e("h1",null,l(t(o)("datasetEditor.title")),1),e("label",null,[f(l(t(o)("datasetEditor.pathLabel")),1),e("span",tt,[h(e("input",{"onUpdate:modelValue":s[0]||(s[0]=a=>r.value=a),onKeyup:ue(ke,["enter"])},null,544),[[C,r.value]]),e("button",{disabled:ae.value,onClick:pe(Ke,["prevent"])},l(t(o)("schemaForm.browse")),9,at)])]),e("button",{class:"primary-action",disabled:Q.value,onClick:ke},l(Q.value?t(o)("datasetEditor.scanning"):t(o)("datasetEditor.scan")),9,lt),e("label",null,[f(l(t(o)("datasetEditor.categoryLabel")),1),h(e("select",{"onUpdate:modelValue":s[1]||(s[1]=a=>P.value=a)},[e("option",ot,l(t(o)("datasetEditor.allCategories")),1),(g(!0),m(V,null,L(y.value,a=>(g(),m("option",{key:a.value,value:a.value},l(a.name)+" ("+l(a.count)+")",9,st))),128))],512),[[H,P.value]])]),e("label",null,[f(l(t(o)("datasetEditor.queryLabel")),1),h(e("input",{"onUpdate:modelValue":s[2]||(s[2]=a=>i.value=a)},null,512),[[C,i.value]])]),e("div",nt,[e("strong",null,l(t(o)("datasetEditor.batch.title"))+" "+l(E.value.size?t(o)("datasetEditor.batch.selected",{n:E.value.size}):t(o)("datasetEditor.batch.filtered",{n:K.value.length})),1),h(e("input",{"onUpdate:modelValue":s[3]||(s[3]=a=>M.value=a),placeholder:t(o)("datasetEditor.batch.appendPlaceholder")},null,8,rt),[[C,M.value]]),h(e("select",{"onUpdate:modelValue":s[4]||(s[4]=a=>le.value=a),"aria-label":t(o)("datasetEditor.batch.position")},[e("option",dt,l(t(o)("datasetEditor.batch.positionBack")),1),e("option",ut,l(t(o)("datasetEditor.batch.positionFront")),1)],8,it),[[H,le.value]]),h(e("input",{"onUpdate:modelValue":s[5]||(s[5]=a=>I.value=a),placeholder:t(o)("datasetEditor.batch.removePlaceholder")},null,8,ct),[[C,I.value]]),e("div",pt,[h(e("input",{"onUpdate:modelValue":s[6]||(s[6]=a=>B.value=a),placeholder:t(o)("datasetEditor.batch.replaceFrom")},null,8,gt),[[C,B.value]]),h(e("input",{"onUpdate:modelValue":s[7]||(s[7]=a=>k.value=a),placeholder:t(o)("datasetEditor.batch.replaceTo")},null,8,vt),[[C,k.value]])]),e("label",null,[h(e("input",{"onUpdate:modelValue":s[8]||(s[8]=a=>d.value=a),type:"checkbox"},null,512),[[D,d.value]]),f(l(t(o)("datasetEditor.batch.clean")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":s[9]||(s[9]=a=>ee.value=a),type:"checkbox"},null,512),[[D,ee.value]]),f(l(t(o)("datasetEditor.batch.underscore")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":s[10]||(s[10]=a=>te.value=a),type:"checkbox"},null,512),[[D,te.value]]),f(l(t(o)("datasetEditor.batch.stripEscape")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":s[11]||(s[11]=a=>u.value=a),type:"checkbox"},null,512),[[D,u.value]]),f(l(t(o)("datasetEditor.batch.sort")),1)]),e("button",{onClick:Oe},l(t(o)("datasetEditor.batch.apply")),1)]),e("div",ht,[e("strong",null,l(t(o)("datasetEditor.quickTag.title")),1),e("div",null,[(g(!0),m(V,null,L(F.value,a=>(g(),m("button",{key:a,onClick:$=>Ce(a),onContextmenu:pe($=>Be(a),["prevent"])},l(a),41,_t))),128)),(g(!0),m(V,null,L(Le.value,a=>(g(),m("button",{key:a.tag,class:"suggested",onClick:$=>Ce(a.tag)},[f(l(a.tag)+" ",1),e("small",null,l(a.count),1)],8,mt))),128))]),e("span",null,[h(e("input",{"onUpdate:modelValue":s[12]||(s[12]=a=>Y.value=a),placeholder:t(o)("datasetEditor.quickTag.addPlaceholder"),onKeyup:ue(xe,["enter"])},null,40,bt),[[C,Y.value]]),e("button",{onClick:xe},l(t(o)("datasetEditor.quickTag.add")),1)]),e("small",null,l(t(o)("datasetEditor.quickTag.hint")),1)])]),e("main",ft,[e("header",null,[e("strong",null,l(t(o)("datasetEditor.gallery.count",{filtered:K.value.length,total:v.value.length,selected:E.value.size})),1),e("div",null,[e("button",{disabled:!b.value,onClick:Ne},l(t(o)("datasetEditor.gallery.togglePage")),9,yt),e("button",{disabled:!z.value.can_undo,onClick:s[13]||(s[13]=a=>we("undo"))},l(t(o)("datasetEditor.gallery.undo")),9,Et),e("button",{disabled:!z.value.can_redo,onClick:s[14]||(s[14]=a=>we("redo"))},l(t(o)("datasetEditor.gallery.redo")),9,kt),e("button",{disabled:!b.value,onClick:s[15]||(s[15]=a=>oe.value=!0)},l(t(o)("datasetEditor.gallery.history")),9,wt)])]),b.value?(g(),m("div",xt,[(g(!0),m(V,null,L(se.value,a=>(g(),m("button",{key:a.relative_path,class:_e({active:O.value===a.relative_path,checked:E.value.has(a.relative_path)}),onClick:$=>Ee(a,$)},[E.value.has(a.relative_path)?(g(),m("i",$t,"✓")):he("",!0),e("img",{src:a.image_url,alt:a.name,loading:"lazy"},null,8,St),e("span",null,l(a.name),1)],10,Tt))),128))])):(g(),m("div",Ct,[e("strong",null,l(t(o)("datasetEditor.gallery.emptyTitle")),1),e("span",null,l(t(o)("datasetEditor.gallery.emptyHint")),1)])),e("footer",Vt,[e("button",{disabled:w.value===1,onClick:s[16]||(s[16]=a=>w.value=1)},l(t(o)("datasetEditor.pager.first")),9,Ut),e("button",{disabled:w.value===1,onClick:s[17]||(s[17]=a=>w.value--)},l(t(o)("datasetEditor.pager.prev")),9,Pt),e("span",null,l(w.value)+" / "+l(J.value),1),e("button",{disabled:w.value===J.value,onClick:s[18]||(s[18]=a=>w.value++)},l(t(o)("datasetEditor.pager.next")),9,Mt),e("button",{disabled:w.value===J.value,onClick:s[19]||(s[19]=a=>w.value=J.value)},l(t(o)("datasetEditor.pager.last")),9,Ft),h(e("select",{"onUpdate:modelValue":s[20]||(s[20]=a=>q.value=a)},[(g(),m(V,null,L([24,48,96,192],a=>e("option",{key:a,value:a},l(t(o)("datasetEditor.pager.perPage",{size:a})),9,Lt)),64))],512),[[H,q.value,void 0,{number:!0}]])])]),e("aside",Dt,[A.value?(g(),m("div",At,[e("img",{src:A.value.image_url,alt:A.value.name},null,8,It),e("strong",null,l(A.value.relative_path),1),e("div",qt,[h(e("textarea",{"onUpdate:modelValue":s[21]||(s[21]=a=>T.value=a),rows:"10"},null,512),[[C,T.value]]),e("small",Kt,l(t(o)("datasetEditor.caption.chars",{n:T.value.length})),1)]),e("div",Ot,[(g(!0),m(V,null,L(De.value,a=>(g(),m("span",{key:a,class:"chip"},[f(l(a),1),e("button",{"aria-label":t(o)("datasetEditor.caption.removeAria",{tag:a}),onClick:$=>Ae(a)},"×",8,Nt)]))),128)),e("span",Bt,[h(e("input",{"onUpdate:modelValue":s[22]||(s[22]=a=>Z.value=a),placeholder:t(o)("datasetEditor.caption.addPlaceholder"),onKeyup:ue(ye,["enter"])},null,40,Rt),[[C,Z.value]]),e("button",{onClick:ye},l(t(o)("datasetEditor.caption.add")),1)])]),e("button",{class:"primary-action",onClick:qe},l(t(o)("datasetEditor.caption.save")),1)])):(g(),m("p",zt,l(t(o)("datasetEditor.caption.empty")),1))])]),ge(_,{modelValue:oe.value,"onUpdate:modelValue":s[23]||(s[23]=a=>oe.value=a),title:t(o)("datasetEditor.historyDialog.title"),width:"min(820px, 94vw)"},{default:ve(()=>[e("div",Jt,[(g(!0),m(V,null,L(z.value.changes,a=>(g(),m("article",{key:`${a.label}-${a.items[0]?.image}`},[e("header",null,[e("strong",null,l(a.label),1),e("span",null,l(t(o)("datasetEditor.historyDialog.count",{n:a.count})),1)]),e("details",null,[e("summary",null,l(t(o)("datasetEditor.historyDialog.detail")),1),(g(!0),m(V,null,L(a.items,$=>(g(),m("div",{key:$.image},[e("code",null,l($.image),1),e("del",null,l($.before||t(o)("datasetEditor.historyDialog.noCaption")),1),e("ins",null,l($.after||t(o)("datasetEditor.historyDialog.noCaption")),1)]))),128))])]))),128)),z.value.changes.length?he("",!0):(g(),m("p",jt,l(t(o)("datasetEditor.historyDialog.empty")),1))])]),_:1},8,["modelValue","title"])],64)}}}),G={status:()=>Ue("/api/tagger/status"),start:c=>X("/api/interrogate",{method:"POST",body:JSON.stringify(c)}),prefetch:(c,o)=>X("/api/tagger/prefetch",{method:"POST",body:JSON.stringify({interrogator_model:c,download_endpoint:o})}),cancel:()=>X("/api/tagger/cancel",{method:"POST"}),reset:()=>X("/api/tagger/reset",{method:"POST"})},Ht={phase:"idle",message:"",model:"",download:{current:0,total:0,filename:"",bytes_current:0,bytes_total:0,percent:0},tagging:{current:0,total:0,filename:"",bytes_current:0,bytes_total:0,percent:0},updated_at:0},Qt=Je("tagger",()=>{const c=p(Ht),o=p(""),r=p(!1),b=U(()=>["downloading","tagging","pending","cancelling"].includes(c.value.phase));async function v(){try{c.value=await G.status(),o.value=""}catch(y){o.value=y instanceof Error?y.message:je.global.t("tagger.msg.statusFail")}}async function S(y){r.value=!0;try{await y(),await v()}finally{r.value=!1}}return{status:c,error:o,submitting:r,busy:b,refresh:v,start:y=>S(()=>G.start(y)),prefetch:(y,P)=>S(()=>G.prefetch(y,P)),cancel:()=>S(G.cancel),reset:()=>S(G.reset)}}),Yt={class:"tagger-page"},Zt={class:"tagger-form"},Wt={class:"tagger-grid"},Xt={class:"path-row"},ea=["disabled"],ta=["placeholder"],aa={value:"ignore"},la={value:"copy"},oa={value:"prepend"},sa={class:"check-row"},na={class:"tagger-status"},ra={class:"task-status"},ia={key:0},da={class:"meter"},ua={class:"meter"},ca={class:"tagger-actions"},pa=["disabled"],ga=["disabled"],va=["disabled"],ha=["disabled"],_a=me({__name:"TaggerPage",setup(c){const o=["wd14-convnextv2-v2","wd-convnext-v3","wd-swinv2-v3","wd-vit-v3","wd14-swinv2-v2","wd14-vit-v2","wd14-moat-v2","wd-eva02-large-tagger-v3","wd-vit-large-tagger-v3","cl_tagger_1_01"],r=Qe({path:"",interrogator_model:o[0],threshold:.35,character_threshold:.6,add_rating_tag:!1,add_model_tag:!1,additional_tags:"",exclude_tags:"",escape_tag:!0,batch_input_recursive:!1,batch_output_action_on_conflict:"copy",replace_underscore:!0,download_endpoint:"",replace_underscore_excludes:"0_0, (o)_(o), +_+, +_-, ._., _, <|>_<|>, =_=, >_<, 3_3, 6_9, >_o, @_@, ^_^, o_o, u_u, x_x, |_|, ||_||"}),b=Qt(),{status:v,error:S,submitting:y,busy:P}=Ge(b),{t:i}=be(),O=U(()=>v.value.download.percent||(v.value.download.total?Math.round(v.value.download.current/v.value.download.total*100):0)),E=U(()=>v.value.tagging.total?Math.round(v.value.tagging.current/v.value.tagging.total*100):0);let N;async function T(){if(!r.path.trim())return x.error(i("tagger.msg.pathRequired"));try{await b.start({...r,path:r.path.replaceAll("\\","/")}),x.success(i("tagger.msg.submitted"))}catch(k){x.error(k instanceof Error?k.message:i("tagger.msg.submitFail"))}}async function M(k){try{k==="prefetch"?await b.prefetch(r.interrogator_model,r.download_endpoint):await b[k](),x.success(i(k==="cancel"?"tagger.msg.cancelRequested":k==="reset"?"tagger.msg.resetDone":"tagger.msg.prefetchStarted"))}catch(d){x.error(d instanceof Error?d.message:i("tagger.msg.actionFail"))}}const I=p(!1);async function B(){I.value=!0;try{r.path=(await Fe.pickFile("folder")).path.replaceAll("\\","/")}catch(k){x.error(k instanceof Error?k.message:i("schemaForm.pickFail"))}finally{I.value=!1}}return Pe(async()=>{await b.refresh(),N=window.setInterval(b.refresh,1200)}),He(()=>window.clearInterval(N)),(k,d)=>(g(),m("div",Yt,[e("section",Zt,[e("header",null,[d[16]||(d[16]=e("span",{class:"eyebrow"},"DATASET TAGGER",-1)),e("h1",null,l(t(i)("tagger.title")),1),e("p",null,l(t(i)("tagger.subtitle")),1)]),e("div",Wt,[e("label",null,[f(l(t(i)("tagger.modelLabel")),1),h(e("select",{"onUpdate:modelValue":d[0]||(d[0]=u=>r.interrogator_model=u)},[(g(),m(V,null,L(o,u=>e("option",{key:u},l(u),1)),64))],512),[[H,r.interrogator_model]])]),e("label",null,[f(l(t(i)("tagger.pathLabel")),1),e("span",Xt,[h(e("input",{"onUpdate:modelValue":d[1]||(d[1]=u=>r.path=u),placeholder:"D:/datasets/images"},null,512),[[C,r.path]]),e("button",{disabled:I.value,onClick:pe(B,["prevent"])},l(t(i)("schemaForm.browse")),9,ea)])]),e("label",null,[f(l(t(i)("tagger.thresholdLabel")),1),h(e("input",{"onUpdate:modelValue":d[2]||(d[2]=u=>r.threshold=u),type:"number",min:"0",max:"1",step:"0.05"},null,512),[[C,r.threshold,void 0,{number:!0}]])]),e("label",null,[f(l(t(i)("tagger.characterThresholdLabel")),1),h(e("input",{"onUpdate:modelValue":d[3]||(d[3]=u=>r.character_threshold=u),type:"number",min:"0",max:"1",step:"0.05"},null,512),[[C,r.character_threshold,void 0,{number:!0}]])]),e("label",null,[f(l(t(i)("tagger.additionalTagsLabel")),1),h(e("input",{"onUpdate:modelValue":d[4]||(d[4]=u=>r.additional_tags=u)},null,512),[[C,r.additional_tags]])]),e("label",null,[f(l(t(i)("tagger.excludeTagsLabel")),1),h(e("input",{"onUpdate:modelValue":d[5]||(d[5]=u=>r.exclude_tags=u)},null,512),[[C,r.exclude_tags]])]),e("label",null,[f(l(t(i)("tagger.endpointLabel")),1),h(e("input",{"onUpdate:modelValue":d[6]||(d[6]=u=>r.download_endpoint=u),placeholder:t(i)("tagger.endpointPlaceholder")},null,8,ta),[[C,r.download_endpoint]])]),e("label",null,[f(l(t(i)("tagger.conflictLabel")),1),h(e("select",{"onUpdate:modelValue":d[7]||(d[7]=u=>r.batch_output_action_on_conflict=u)},[e("option",aa,l(t(i)("tagger.conflict.ignore")),1),e("option",la,l(t(i)("tagger.conflict.copy")),1),e("option",oa,l(t(i)("tagger.conflict.prepend")),1)],512),[[H,r.batch_output_action_on_conflict]])])]),e("div",sa,[e("label",null,[h(e("input",{"onUpdate:modelValue":d[8]||(d[8]=u=>r.batch_input_recursive=u),type:"checkbox"},null,512),[[D,r.batch_input_recursive]]),f(l(t(i)("tagger.recursive")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":d[9]||(d[9]=u=>r.replace_underscore=u),type:"checkbox"},null,512),[[D,r.replace_underscore]]),f(l(t(i)("tagger.replaceUnderscore")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":d[10]||(d[10]=u=>r.escape_tag=u),type:"checkbox"},null,512),[[D,r.escape_tag]]),f(l(t(i)("tagger.escapeTag")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":d[11]||(d[11]=u=>r.add_rating_tag=u),type:"checkbox"},null,512),[[D,r.add_rating_tag]]),f(l(t(i)("tagger.addRatingTag")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":d[12]||(d[12]=u=>r.add_model_tag=u),type:"checkbox"},null,512),[[D,r.add_model_tag]]),f(l(t(i)("tagger.addModelTag")),1)])])]),e("aside",na,[e("span",ra,l(t(v).phase),1),e("h2",null,l(t(v).message||t(i)("tagger.idle")),1),t(S)?(g(),m("p",ia,l(t(S)),1)):he("",!0),e("div",da,[e("header",null,[e("span",null,l(t(i)("tagger.downloadMeter")),1),e("b",null,l(O.value)+"%",1)]),e("div",null,[e("i",{style:$e({width:`${O.value}%`})},null,4)]),e("small",null,l(t(v).download.filename||t(i)("tagger.downloadIdle")),1)]),e("div",ua,[e("header",null,[e("span",null,l(t(i)("tagger.taggingMeter")),1),e("b",null,l(E.value)+"%",1)]),e("div",null,[e("i",{style:$e({width:`${E.value}%`})},null,4)]),e("small",null,l(t(v).tagging.current)+" / "+l(t(v).tagging.total)+" "+l(t(v).tagging.filename),1)]),e("div",ca,[t(P)?(g(),m("button",{key:0,class:"danger-action",disabled:t(y),onClick:d[13]||(d[13]=u=>M("cancel"))},l(t(i)("tagger.cancel")),9,pa)):(g(),m("button",{key:1,class:"primary-action",disabled:t(y),onClick:T},l(t(i)("tagger.start")),9,ga)),e("button",{class:"secondary-action",disabled:t(y)||t(v).phase==="tagging",onClick:d[14]||(d[14]=u=>M("prefetch"))},l(t(i)("tagger.prefetch")),9,va),e("button",{class:"secondary-action",disabled:t(y),onClick:d[15]||(d[15]=u=>M("reset"))},l(t(i)("tagger.reset")),9,ha)])])]))}}),ma={class:"dataset-section"},ba={class:"dataset-section-header"},fa=["aria-label"],Ca=me({__name:"DatasetPage",props:{tab:{}},setup(c){const{t:o}=be();return(r,b)=>{const v=Me("RouterLink");return g(),m("div",ma,[e("header",ba,[e("h1",null,l(t(o)("dataset.title")),1),e("div",{class:"segmented dataset-switch",role:"group","aria-label":t(o)("dataset.switchAria")},[ge(v,{to:"/dataset/tagger",class:_e({active:c.tab==="tagger"})},{default:ve(()=>[f(l(t(o)("dataset.tab.tagger")),1)]),_:1},8,["class"]),ge(v,{to:"/dataset/editor",class:_e({active:c.tab==="editor"})},{default:ve(()=>[f(l(t(o)("dataset.tab.editor")),1)]),_:1},8,["class"])],8,fa)]),c.tab==="editor"?(g(),Se(Gt,{key:0})):(g(),Se(_a,{key:1}))])}}});export{Ca as default}; diff --git a/frontend/dist/assets/GuidePage-Ds9mS5xC.js b/frontend/dist/assets/GuidePage-CKrZjddG.js similarity index 97% rename from frontend/dist/assets/GuidePage-Ds9mS5xC.js rename to frontend/dist/assets/GuidePage-CKrZjddG.js index 9610843e..a3e7182e 100644 --- a/frontend/dist/assets/GuidePage-Ds9mS5xC.js +++ b/frontend/dist/assets/GuidePage-CKrZjddG.js @@ -1 +1 @@ -import{d as r,u as p,c,a as e,t as n,b as l,e as o,w as i,f as u,i as g,o as m}from"./index-BlvrX0Zy.js";const _="/assets/guide-mascot.webp",h={class:"content-page"},k={class:"content-hero content-hero-split"},f=["alt"],b={class:"content-cards"},v=r({__name:"GuidePage",setup(T){const{t}=p();return(x,a)=>{const s=g("RouterLink"),d=g("i18n-t");return m(),c("article",h,[e("header",k,[e("div",null,[a[0]||(a[0]=e("span",{class:"eyebrow"},"GETTING STARTED",-1)),e("h1",null,n(l(t)("guide.title")),1),e("p",null,n(l(t)("guide.subtitle")),1)]),e("img",{src:_,alt:l(t)("guide.mascotAlt")},null,8,f)]),e("section",null,[e("h2",null,n(l(t)("guide.step1Title")),1),o(d,{keypath:"guide.step1",tag:"p",scope:"global"},{ext:i(()=>[...a[1]||(a[1]=[e("code",null,".txt",-1)])]),tagger:i(()=>[o(s,{to:"/dataset/tagger"},{default:i(()=>[u(n(l(t)("guide.link.tagger")),1)]),_:1})]),editor:i(()=>[o(s,{to:"/dataset/editor"},{default:i(()=>[u(n(l(t)("guide.link.editor")),1)]),_:1})]),_:1})]),e("section",null,[e("h2",null,n(l(t)("guide.step2Title")),1),e("div",b,[e("div",null,[e("h3",null,n(l(t)("guide.loraTitle")),1),o(d,{keypath:"guide.loraDesc",tag:"p",scope:"global"},{page:i(()=>[o(s,{to:"/training"},{default:i(()=>[u(n(l(t)("guide.link.trainingPage")),1)]),_:1})]),_:1})]),e("div",null,[e("h3",null,n(l(t)("guide.finetuneTitle")),1),o(d,{keypath:"guide.finetuneDesc",tag:"p",scope:"global"},{anima:i(()=>[o(s,{to:"/training?model=anima&engine=kohya&target=finetune"},{default:i(()=>[u(n(l(t)("guide.link.animaFinetune")),1)]),_:1})]),dreambooth:i(()=>[o(s,{to:"/dreambooth/index.html"},{default:i(()=>[...a[2]||(a[2]=[u("Dreambooth",-1)])]),_:1})]),_:1})])])]),e("section",null,[e("h2",null,n(l(t)("guide.step3Title")),1),e("ol",null,[e("li",null,n(l(t)("guide.step3a")),1),e("li",null,n(l(t)("guide.step3b")),1),e("li",null,n(l(t)("guide.step3c")),1)])]),e("section",null,[e("h2",null,n(l(t)("guide.step4Title")),1),o(d,{keypath:"guide.step4",tag:"p",scope:"global"},{tasks:i(()=>[o(s,{to:"/tasks"},{default:i(()=>[u(n(l(t)("guide.link.tasks")),1)]),_:1})]),tensorboard:i(()=>[o(s,{to:"/tensorboard.html"},{default:i(()=>[...a[3]||(a[3]=[u("TensorBoard",-1)])]),_:1})]),_:1})]),e("section",null,[e("h2",null,n(l(t)("guide.migrateTitle")),1),e("ul",null,[e("li",null,n(l(t)("guide.migrate1")),1),e("li",null,n(l(t)("guide.migrate2")),1),e("li",null,n(l(t)("guide.migrate3")),1)])])])}}});export{v as default}; +import{d as r,u as p,c,a as e,t as n,b as l,e as o,w as i,f as u,i as g,o as m}from"./index-jfqf0I3j.js";const _="/assets/guide-mascot.webp",h={class:"content-page"},k={class:"content-hero content-hero-split"},f=["alt"],b={class:"content-cards"},v=r({__name:"GuidePage",setup(T){const{t}=p();return(x,a)=>{const s=g("RouterLink"),d=g("i18n-t");return m(),c("article",h,[e("header",k,[e("div",null,[a[0]||(a[0]=e("span",{class:"eyebrow"},"GETTING STARTED",-1)),e("h1",null,n(l(t)("guide.title")),1),e("p",null,n(l(t)("guide.subtitle")),1)]),e("img",{src:_,alt:l(t)("guide.mascotAlt")},null,8,f)]),e("section",null,[e("h2",null,n(l(t)("guide.step1Title")),1),o(d,{keypath:"guide.step1",tag:"p",scope:"global"},{ext:i(()=>[...a[1]||(a[1]=[e("code",null,".txt",-1)])]),tagger:i(()=>[o(s,{to:"/dataset/tagger"},{default:i(()=>[u(n(l(t)("guide.link.tagger")),1)]),_:1})]),editor:i(()=>[o(s,{to:"/dataset/editor"},{default:i(()=>[u(n(l(t)("guide.link.editor")),1)]),_:1})]),_:1})]),e("section",null,[e("h2",null,n(l(t)("guide.step2Title")),1),e("div",b,[e("div",null,[e("h3",null,n(l(t)("guide.loraTitle")),1),o(d,{keypath:"guide.loraDesc",tag:"p",scope:"global"},{page:i(()=>[o(s,{to:"/training"},{default:i(()=>[u(n(l(t)("guide.link.trainingPage")),1)]),_:1})]),_:1})]),e("div",null,[e("h3",null,n(l(t)("guide.finetuneTitle")),1),o(d,{keypath:"guide.finetuneDesc",tag:"p",scope:"global"},{anima:i(()=>[o(s,{to:"/training?model=anima&engine=kohya&target=finetune"},{default:i(()=>[u(n(l(t)("guide.link.animaFinetune")),1)]),_:1})]),dreambooth:i(()=>[o(s,{to:"/dreambooth/index.html"},{default:i(()=>[...a[2]||(a[2]=[u("Dreambooth",-1)])]),_:1})]),_:1})])])]),e("section",null,[e("h2",null,n(l(t)("guide.step3Title")),1),e("ol",null,[e("li",null,n(l(t)("guide.step3a")),1),e("li",null,n(l(t)("guide.step3b")),1),e("li",null,n(l(t)("guide.step3c")),1)])]),e("section",null,[e("h2",null,n(l(t)("guide.step4Title")),1),o(d,{keypath:"guide.step4",tag:"p",scope:"global"},{tasks:i(()=>[o(s,{to:"/tasks"},{default:i(()=>[u(n(l(t)("guide.link.tasks")),1)]),_:1})]),tensorboard:i(()=>[o(s,{to:"/tensorboard.html"},{default:i(()=>[...a[3]||(a[3]=[u("TensorBoard",-1)])]),_:1})]),_:1})]),e("section",null,[e("h2",null,n(l(t)("guide.migrateTitle")),1),e("ul",null,[e("li",null,n(l(t)("guide.migrate1")),1),e("li",null,n(l(t)("guide.migrate2")),1),e("li",null,n(l(t)("guide.migrate3")),1)])])])}}});export{v as default}; diff --git a/frontend/dist/assets/HomePage-ChxMX_IM.js b/frontend/dist/assets/HomePage-DZc_8_wk.js similarity index 97% rename from frontend/dist/assets/HomePage-ChxMX_IM.js rename to frontend/dist/assets/HomePage-DZc_8_wk.js index 6b8c4ae2..71d87e4a 100644 --- a/frontend/dist/assets/HomePage-ChxMX_IM.js +++ b/frontend/dist/assets/HomePage-DZc_8_wk.js @@ -1 +1 @@ -import{_ as g}from"./home-logo-Bq2pf2HD.js";import{d as b,u as v,c as u,a as t,t as s,b as a,e as d,w as n,f as i,g as x,F as f,r as k,h as N,i as p,o as c,j as y}from"./index-BlvrX0Zy.js";const C={class:"home-page"},T={class:"hero"},w={class:"hero-copy"},I={class:"hero-actions"},L=["aria-label"],A={class:"portal-index"},B={class:"portal-link"},E={class:"status-strip"},O={class:"home-credit"},G=b({__name:"HomePage",setup(R){const{t:e}=v(),m=N(()=>[{title:e("home.portals.training.title"),text:e("home.portals.training.text"),to:"/training",tone:"blue"},{title:e("home.portals.dataset.title"),text:e("home.portals.dataset.text"),to:"/dataset",tone:"violet"},{title:e("home.portals.tasks.title"),text:e("home.portals.tasks.text"),to:"/tasks",tone:"cyan"}]);return(S,o)=>{const r=p("RouterLink"),h=p("i18n-t");return c(),u("div",C,[t("section",T,[t("div",w,[o[0]||(o[0]=t("span",{class:"eyebrow"},"LOCAL TRAINING WORKSPACE",-1)),t("h1",null,s(a(e)("home.heroTitle")),1),t("p",null,s(a(e)("home.heroSubtitle")),1),t("div",I,[d(r,{class:"primary-action",to:"/training"},{default:n(()=>[i(s(a(e)("home.startTraining")),1)]),_:1}),d(r,{class:"secondary-action",to:"/help/guide.html"},{default:n(()=>[i(s(a(e)("home.readGuide")),1)]),_:1})])]),o[1]||(o[1]=x('
Next Trainer
',1))]),t("section",{class:"portal-grid","aria-label":a(e)("home.portalAria")},[(c(!0),u(f,null,k(m.value,(l,_)=>(c(),y(r,{key:l.to,to:l.to,class:"portal-card","data-tone":l.tone},{default:n(()=>[t("span",A,"0"+s(_+1),1),t("h2",null,s(l.title),1),t("p",null,s(l.text),1),t("span",B,[i(s(a(e)("home.enter"))+" ",1),o[2]||(o[2]=t("b",null,"→",-1))])]),_:2},1032,["to","data-tone"]))),128))],8,L),t("section",E,[t("span",null,[o[3]||(o[3]=t("i",{class:"status-dot"},null,-1)),i(" "+s(a(e)("home.status.local")),1)]),t("span",null,s(a(e)("home.status.vue")),1),t("span",null,s(a(e)("home.status.models")),1)]),t("p",O,[d(h,{keypath:"home.credit",tag:"span",scope:"global"},{about:n(()=>[d(r,{to:"/settings/about"},{default:n(()=>[i(s(a(e)("settings.nav.about")),1)]),_:1})]),notice:n(()=>[...o[4]||(o[4]=[t("a",{href:"https://github.com/wochenlong/lora-scripts-next/blob/dev/NOTICE.md",target:"_blank",rel:"noreferrer"},"NOTICE.md",-1)])]),_:1})])])}}});export{G as default}; +import{_ as g}from"./home-logo-Bq2pf2HD.js";import{d as b,u as v,c as u,a as t,t as s,b as a,e as d,w as n,f as i,g as x,F as f,r as k,h as N,i as p,o as c,j as y}from"./index-jfqf0I3j.js";const C={class:"home-page"},T={class:"hero"},w={class:"hero-copy"},I={class:"hero-actions"},L=["aria-label"],A={class:"portal-index"},B={class:"portal-link"},E={class:"status-strip"},O={class:"home-credit"},G=b({__name:"HomePage",setup(R){const{t:e}=v(),m=N(()=>[{title:e("home.portals.training.title"),text:e("home.portals.training.text"),to:"/training",tone:"blue"},{title:e("home.portals.dataset.title"),text:e("home.portals.dataset.text"),to:"/dataset",tone:"violet"},{title:e("home.portals.tasks.title"),text:e("home.portals.tasks.text"),to:"/tasks",tone:"cyan"}]);return(S,o)=>{const r=p("RouterLink"),h=p("i18n-t");return c(),u("div",C,[t("section",T,[t("div",w,[o[0]||(o[0]=t("span",{class:"eyebrow"},"LOCAL TRAINING WORKSPACE",-1)),t("h1",null,s(a(e)("home.heroTitle")),1),t("p",null,s(a(e)("home.heroSubtitle")),1),t("div",I,[d(r,{class:"primary-action",to:"/training"},{default:n(()=>[i(s(a(e)("home.startTraining")),1)]),_:1}),d(r,{class:"secondary-action",to:"/help/guide.html"},{default:n(()=>[i(s(a(e)("home.readGuide")),1)]),_:1})])]),o[1]||(o[1]=x('
Next Trainer
',1))]),t("section",{class:"portal-grid","aria-label":a(e)("home.portalAria")},[(c(!0),u(f,null,k(m.value,(l,_)=>(c(),y(r,{key:l.to,to:l.to,class:"portal-card","data-tone":l.tone},{default:n(()=>[t("span",A,"0"+s(_+1),1),t("h2",null,s(l.title),1),t("p",null,s(l.text),1),t("span",B,[i(s(a(e)("home.enter"))+" ",1),o[2]||(o[2]=t("b",null,"→",-1))])]),_:2},1032,["to","data-tone"]))),128))],8,L),t("section",E,[t("span",null,[o[3]||(o[3]=t("i",{class:"status-dot"},null,-1)),i(" "+s(a(e)("home.status.local")),1)]),t("span",null,s(a(e)("home.status.vue")),1),t("span",null,s(a(e)("home.status.models")),1)]),t("p",O,[d(h,{keypath:"home.credit",tag:"span",scope:"global"},{about:n(()=>[d(r,{to:"/settings/about"},{default:n(()=>[i(s(a(e)("settings.nav.about")),1)]),_:1})]),notice:n(()=>[...o[4]||(o[4]=[t("a",{href:"https://github.com/wochenlong/lora-scripts-next/blob/dev/NOTICE.md",target:"_blank",rel:"noreferrer"},"NOTICE.md",-1)])]),_:1})])])}}});export{G as default}; diff --git a/frontend/dist/assets/IntegrationPage-DlxzcFZI.js b/frontend/dist/assets/IntegrationPage-CjVYiEx4.js similarity index 92% rename from frontend/dist/assets/IntegrationPage-DlxzcFZI.js rename to frontend/dist/assets/IntegrationPage-CjVYiEx4.js index 4d840bf1..755a3bb6 100644 --- a/frontend/dist/assets/IntegrationPage-DlxzcFZI.js +++ b/frontend/dist/assets/IntegrationPage-CjVYiEx4.js @@ -1 +1 @@ -import{d as u,u as p,c as d,a as t,t as o,b as g,h as l,o as f}from"./index-BlvrX0Zy.js";const _={class:"integration-page"},m=["href"],h=["title","src"],v=u({__name:"IntegrationPage",props:{title:{},titleKey:{},src:{},configurable:{type:Boolean}},setup(i){const e=i,{t:r}=p(),s=l(()=>e.titleKey?r(e.titleKey):e.title??""),n=l(()=>{if(!e.configurable)return e.src;try{return JSON.parse(localStorage.getItem("ui-configs")||"{}").tensorboard_url?.trim()||e.src}catch{return e.src}});return(c,a)=>(f(),d("div",_,[t("header",null,[t("div",null,[a[0]||(a[0]=t("span",{class:"eyebrow"},"INTEGRATED SERVICE",-1)),t("h1",null,o(s.value),1)]),t("a",{href:n.value,target:"_blank",rel:"noreferrer"},o(g(r)("integration.openExternal")),9,m)]),t("iframe",{title:s.value,src:n.value},null,8,h)]))}});export{v as default}; +import{d as u,u as p,c as d,a as t,t as o,b as g,h as l,o as f}from"./index-jfqf0I3j.js";const _={class:"integration-page"},m=["href"],h=["title","src"],v=u({__name:"IntegrationPage",props:{title:{},titleKey:{},src:{},configurable:{type:Boolean}},setup(i){const e=i,{t:r}=p(),s=l(()=>e.titleKey?r(e.titleKey):e.title??""),n=l(()=>{if(!e.configurable)return e.src;try{return JSON.parse(localStorage.getItem("ui-configs")||"{}").tensorboard_url?.trim()||e.src}catch{return e.src}});return(c,a)=>(f(),d("div",_,[t("header",null,[t("div",null,[a[0]||(a[0]=t("span",{class:"eyebrow"},"INTEGRATED SERVICE",-1)),t("h1",null,o(s.value),1)]),t("a",{href:n.value,target:"_blank",rel:"noreferrer"},o(g(r)("integration.openExternal")),9,m)]),t("iframe",{title:s.value,src:n.value},null,8,h)]))}});export{v as default}; diff --git a/frontend/dist/assets/NotFoundPage-8auRhUvD.js b/frontend/dist/assets/NotFoundPage-DZ0namWc.js similarity index 87% rename from frontend/dist/assets/NotFoundPage-8auRhUvD.js rename to frontend/dist/assets/NotFoundPage-DZ0namWc.js index 6d671469..973ce9b1 100644 --- a/frontend/dist/assets/NotFoundPage-8auRhUvD.js +++ b/frontend/dist/assets/NotFoundPage-DZ0namWc.js @@ -1 +1 @@ -import{d as r,u as c,c as u,a as o,t,b as n,e as d,w as i,f as l,i as p,o as _}from"./index-BlvrX0Zy.js";const m={class:"migration-page"},x=r({__name:"NotFoundPage",setup(f){const{t:e}=c();return(k,s)=>{const a=p("RouterLink");return _(),u("div",m,[s[0]||(s[0]=o("span",{class:"eyebrow"},"404",-1)),o("h1",null,t(n(e)("notFound.title")),1),o("p",null,t(n(e)("notFound.desc")),1),d(a,{class:"secondary-action",to:"/"},{default:i(()=>[l(t(n(e)("notFound.back")),1)]),_:1})])}}});export{x as default}; +import{d as r,u as c,c as u,a as o,t,b as n,e as d,w as i,f as l,i as p,o as _}from"./index-jfqf0I3j.js";const m={class:"migration-page"},x=r({__name:"NotFoundPage",setup(f){const{t:e}=c();return(k,s)=>{const a=p("RouterLink");return _(),u("div",m,[s[0]||(s[0]=o("span",{class:"eyebrow"},"404",-1)),o("h1",null,t(n(e)("notFound.title")),1),o("p",null,t(n(e)("notFound.desc")),1),d(a,{class:"secondary-action",to:"/"},{default:i(()=>[l(t(n(e)("notFound.back")),1)]),_:1})])}}});export{x as default}; diff --git a/frontend/dist/assets/ParamsPage-BkK-W4SI.js b/frontend/dist/assets/ParamsPage-qEBl9le4.js similarity index 95% rename from frontend/dist/assets/ParamsPage-BkK-W4SI.js rename to frontend/dist/assets/ParamsPage-qEBl9le4.js index 8822e05e..9cb3ee4e 100644 --- a/frontend/dist/assets/ParamsPage-BkK-W4SI.js +++ b/frontend/dist/assets/ParamsPage-qEBl9le4.js @@ -1 +1 @@ -import{d as t,u as o,c as r,a,t as l,b as e,f as p,o as u}from"./index-BlvrX0Zy.js";const i={class:"content-page"},m={class:"content-hero"},g={class:"content-table"},b=t({__name:"ParamsPage",setup(P){const{t:s}=o();return(c,n)=>(u(),r("article",i,[a("header",m,[n[0]||(n[0]=a("span",{class:"eyebrow"},"TRAINING REFERENCE",-1)),a("h1",null,l(e(s)("paramsPage.title")),1),a("p",null,l(e(s)("paramsPage.subtitle")),1)]),a("section",null,[a("h2",null,l(e(s)("paramsPage.s1Title")),1),a("h3",null,l(e(s)("paramsPage.baseModel")),1),a("p",null,l(e(s)("paramsPage.baseModelDesc")),1),a("h3",null,l(e(s)("paramsPage.resolution")),1),a("p",null,l(e(s)("paramsPage.resolutionDesc")),1)]),a("section",null,[a("h2",null,l(e(s)("paramsPage.s2Title")),1),a("div",g,[a("div",null,[n[1]||(n[1]=a("strong",null,"Epoch / Step",-1)),a("span",null,l(e(s)("paramsPage.epochDesc")),1)]),a("div",null,[n[2]||(n[2]=a("strong",null,"Batch size",-1)),a("span",null,l(e(s)("paramsPage.batchDesc")),1)]),a("div",null,[n[3]||(n[3]=a("strong",null,"Learning rate",-1)),a("span",null,l(e(s)("paramsPage.lrDesc")),1)])])]),a("section",null,[a("h2",null,l(e(s)("paramsPage.s3Title")),1),a("p",null,[n[4]||(n[4]=a("code",null,"network_dim",-1)),p(" "+l(e(s)("paramsPage.s3a")),1)]),a("p",null,l(e(s)("paramsPage.s3b")),1)]),a("section",null,[a("h2",null,l(e(s)("paramsPage.s4Title")),1),a("p",null,l(e(s)("paramsPage.s4a")),1)])]))}});export{b as default}; +import{d as t,u as o,c as r,a,t as l,b as e,f as p,o as u}from"./index-jfqf0I3j.js";const i={class:"content-page"},m={class:"content-hero"},g={class:"content-table"},b=t({__name:"ParamsPage",setup(P){const{t:s}=o();return(c,n)=>(u(),r("article",i,[a("header",m,[n[0]||(n[0]=a("span",{class:"eyebrow"},"TRAINING REFERENCE",-1)),a("h1",null,l(e(s)("paramsPage.title")),1),a("p",null,l(e(s)("paramsPage.subtitle")),1)]),a("section",null,[a("h2",null,l(e(s)("paramsPage.s1Title")),1),a("h3",null,l(e(s)("paramsPage.baseModel")),1),a("p",null,l(e(s)("paramsPage.baseModelDesc")),1),a("h3",null,l(e(s)("paramsPage.resolution")),1),a("p",null,l(e(s)("paramsPage.resolutionDesc")),1)]),a("section",null,[a("h2",null,l(e(s)("paramsPage.s2Title")),1),a("div",g,[a("div",null,[n[1]||(n[1]=a("strong",null,"Epoch / Step",-1)),a("span",null,l(e(s)("paramsPage.epochDesc")),1)]),a("div",null,[n[2]||(n[2]=a("strong",null,"Batch size",-1)),a("span",null,l(e(s)("paramsPage.batchDesc")),1)]),a("div",null,[n[3]||(n[3]=a("strong",null,"Learning rate",-1)),a("span",null,l(e(s)("paramsPage.lrDesc")),1)])])]),a("section",null,[a("h2",null,l(e(s)("paramsPage.s3Title")),1),a("p",null,[n[4]||(n[4]=a("code",null,"network_dim",-1)),p(" "+l(e(s)("paramsPage.s3a")),1)]),a("p",null,l(e(s)("paramsPage.s3b")),1)]),a("section",null,[a("h2",null,l(e(s)("paramsPage.s4Title")),1),a("p",null,l(e(s)("paramsPage.s4a")),1)])]))}});export{b as default}; diff --git a/frontend/dist/assets/SettingsContainerPage-9zJ1w2a2.js b/frontend/dist/assets/SettingsContainerPage-kvrxRBXq.js similarity index 98% rename from frontend/dist/assets/SettingsContainerPage-9zJ1w2a2.js rename to frontend/dist/assets/SettingsContainerPage-kvrxRBXq.js index dc0a3c9d..da06c352 100644 --- a/frontend/dist/assets/SettingsContainerPage-9zJ1w2a2.js +++ b/frontend/dist/assets/SettingsContainerPage-kvrxRBXq.js @@ -1,2 +1,2 @@ -import{d as R,u as H,c,a as e,t,b as s,e as K,w as E,F as C,r as I,i as V,o as r,s as S,y as Z,l as ee,B as J,I as te,h as z,p as w,n as se,U as ne,x as ae,V as ie,D as oe,f as T,W as le,m as G,E as re,j as P,X as U,Y as ue}from"./index-BlvrX0Zy.js";import{E as $}from"./index-DNZgQ1o0.js";import{_ as ce}from"./home-logo-Bq2pf2HD.js";import{E as M}from"./index-DILr9bpz.js";import{a as j,e as D,w as ge}from"./prefs-L1LFxgf4.js";const de={class:"content-page"},me={class:"content-hero content-hero-split"},he={class:"about-credits"},pe=["href"],be={class:"content-links"},fe={href:"https://github.com/wochenlong/lora-scripts-next",target:"_blank",rel:"noreferrer"},_e={href:"https://github.com/wochenlong/lora-scripts-next/releases",target:"_blank",rel:"noreferrer"},ve={href:"https://github.com/wochenlong/lora-scripts-next/issues",target:"_blank",rel:"noreferrer"},ye=R({__name:"AboutPage",setup(x){const{t:n}=H(),a=[{name:"Akegarasu / lora-scripts",href:"https://github.com/Akegarasu/lora-scripts",noteKey:"about.credits.akegarasu"},{name:"kohya-ss / sd-scripts",href:"https://github.com/kohya-ss/sd-scripts",noteKey:"about.credits.kohya"},{name:"sorryhyun / anima_lora",href:"https://github.com/sorryhyun/anima_lora",noteKey:"about.credits.animaFast"},{name:"KohakuBlueleaf / LyCORIS",href:"https://github.com/KohakuBlueleaf/LyCORIS",noteKey:"about.credits.lycoris"},{name:"SmilingWolf / WD Tagger",href:"https://huggingface.co/SmilingWolf/wd-v1-4-convnextv2-tagger-v2",noteKey:"about.credits.tagger"},{name:"shigma / schemastery",href:"https://github.com/shigma/schemastery",noteKey:"about.credits.schemastery"}];return(h,u)=>{const m=V("i18n-t");return r(),c("article",de,[e("header",me,[e("div",null,[u[0]||(u[0]=e("span",{class:"eyebrow"},"ABOUT",-1)),u[1]||(u[1]=e("h1",null,"Next Trainer",-1)),e("p",null,t(s(n)("about.tagline")),1)]),u[2]||(u[2]=e("img",{class:"about-logo",src:ce,alt:"Next Trainer"},null,-1))]),e("section",null,[e("h2",null,t(s(n)("about.projectTitle")),1),K(m,{keypath:"about.projectDesc",tag:"p",scope:"global"},{schemastery:E(()=>[...u[3]||(u[3]=[e("a",{href:"https://github.com/shigma/schemastery",target:"_blank",rel:"noreferrer"},"Schemastery",-1)])]),_:1})]),e("section",null,[e("h2",null,t(s(n)("about.creditsTitle")),1),e("p",null,t(s(n)("about.creditsIntro")),1),e("ul",he,[(r(),c(C,null,I(a,p=>e("li",{key:p.href},[e("a",{href:p.href,target:"_blank",rel:"noreferrer"},t(p.name),9,pe),e("span",null,t(s(n)(p.noteKey)),1)])),64))]),e("p",null,[K(m,{keypath:"about.creditsNotice",tag:"span",scope:"global"},{notice:E(()=>[...u[4]||(u[4]=[e("a",{href:"https://github.com/wochenlong/lora-scripts-next/blob/dev/NOTICE.md",target:"_blank",rel:"noreferrer"},"NOTICE.md",-1)])]),license:E(()=>[...u[5]||(u[5]=[e("a",{href:"https://github.com/wochenlong/lora-scripts-next/blob/dev/LICENSE",target:"_blank",rel:"noreferrer"},"LICENSE",-1)])]),_:1})])]),e("section",null,[e("h2",null,t(s(n)("about.feedbackTitle")),1),K(m,{keypath:"about.feedbackDesc",tag:"p",scope:"global"},{issues:E(()=>[...u[6]||(u[6]=[e("a",{href:"https://github.com/wochenlong/lora-scripts-next/issues",target:"_blank",rel:"noreferrer"},"GitHub Issues",-1)])]),_:1})]),e("section",null,[e("h2",null,t(s(n)("about.linksTitle")),1),e("div",be,[e("a",fe,t(s(n)("about.source")),1),e("a",_e,t(s(n)("about.releases")),1),e("a",ve,t(s(n)("about.issues")),1)])])])}}}),ke="/assets/changelog-banner.webp",q=[{version:"v2.9.2-beta.2",date:"2026-08-07",items:["修复启动时打开空白训练监控页(6008 连接被拒绝)","仅在监控就绪后打开浏览器标签;可用 /train-monitor"]},{version:"v2.9.2-beta.1",date:"2026-08-07",items:["Vue3 四栏 IA 内测线(训练 / 数据集 / 任务 / 设置)","品牌统一为 Next Trainer(内测版本号走 2.9.x)","训练引擎管理与 Fast 就绪态","开源致谢页与 lite/full 双整合包","钉死 protobuf==3.20.3(Flux/SD3)"]},{version:"v2.9.0",date:"2026-07-22",items:["Anima Fast 高分辨率 bucket 参数与训练前检查","Anima 标准模式 LoKr 无效参数清理","本地 WD 打标模型加载与 CUDA/CPU 回退改进","Windows 整合包数据目录和 junction 修复"]},{version:"v2.8.35",date:"2026-06-28",items:["修复 Windows 更新脚本路径、换行与 PowerShell 5.1 编码兼容","新增 Fix-Portable-Bats.bat"]},{version:"v2.8.3",date:"2026-06-28",items:["新增配置导出规范化 API","改善整合包 Hugging Face、ModelScope 与文件选择器路径"]},{version:"v2.8.2",date:"2026-06-27",items:["修复 SDXL 训练路由与离线 tokenizer","默认 WD 打标模型开箱即用","修复预览图和训练配置导入"]}],$e={class:"content-page"},we={class:"content-hero content-hero-split"},Se=["alt"],Ee={class:"release-list"},Ce={class:"secondary-action",href:"https://github.com/wochenlong/lora-scripts-next/blob/master/CHANGELOG.md",target:"_blank",rel:"noreferrer"},xe=R({__name:"ChangelogPage",setup(x){const{t:n}=H();return(a,h)=>{const u=V("i18n-t");return r(),c("article",$e,[e("header",we,[e("div",null,[h[1]||(h[1]=e("span",{class:"eyebrow"},"RELEASE NOTES",-1)),e("h1",null,t(s(n)("changelog.title")),1),K(u,{keypath:"changelog.subtitle",tag:"p",scope:"global"},{file:E(()=>[...h[0]||(h[0]=[e("code",null,"CHANGELOG.md",-1)])]),_:1})]),e("img",{src:ke,alt:s(n)("changelog.bannerAlt")},null,8,Se)]),e("section",Ee,[(r(!0),c(C,null,I(s(q),m=>(r(),c("article",{key:m.version},[e("header",null,[e("h2",null,t(m.version),1),e("time",null,t(m.date),1)]),e("ul",null,[(r(!0),c(C,null,I(m.items,p=>(r(),c("li",{key:p},t(p),1))),128))])]))),128))]),e("a",Ce,t(s(n)("changelog.full")),1)])}}}),Le=[{id:"kohya",kind:"builtin",nameKey:"settings.engines.catalog.kohya.name",summaryKey:"settings.engines.catalog.kohya.summary",managesRuntime:!1},{id:"anima-fast",kind:"optional",nameKey:"settings.engines.catalog.anima-fast.name",summaryKey:"settings.engines.catalog.anima-fast.summary",sizeHintKey:"settings.engines.catalog.anima-fast.sizeHint",requiresGpu:!0,managesRuntime:!0},{id:"musubi",kind:"planned",nameKey:"settings.engines.catalog.musubi.name",summaryKey:"settings.engines.catalog.musubi.summary",managesRuntime:!1}],Ie={class:"engines-settings"},Ke={class:"settings-card"},Ne={class:"engines-lead"},Te={class:"engines-policy"},Ae={class:"engines-toggle"},Oe=["data-engine","data-state"],Pe={class:"engine-card-header"},De=["data-state"],Re={key:0,class:"engine-meta"},He={key:0},Be={key:1},Fe={key:2},Ge={key:3},Ue={key:1,class:"engine-path"},ze={key:2,class:"engine-card-actions"},Ve=["disabled"],We=["disabled","title"],Me=["disabled"],je=["disabled"],Je={key:3,class:"engine-console"},qe={class:"install-progress"},Ye=R({__name:"EnginesSettingsPage",setup(x){const{t:n}=H(),a=S(null),h=S({}),u=S([]),m=S(0),p=S(""),N=S(j().rememberLast);let y,v,L;const B=z(()=>Le.map(o=>({engine:o,status:h.value[o.id]||A(o)})));function A(o){return o.kind==="builtin"?{id:o.id,state:"ready",featureEnabled:!0}:o.kind==="planned"?{id:o.id,state:"coming_soon",featureEnabled:!1}:{id:o.id,state:"unknown",featureEnabled:!0}}function F(o){const l=`settings.engines.state.${o}`,i=n(l);return i===l?o:i}function O(){v?.close(),L?.close(),v=void 0,L=void 0}function d(){y!==void 0&&(window.clearInterval(y),y=void 0)}function b(o,l,i){O(),v=new EventSource(l||`/api/plugins/anima-lora/install/log/stream/${o}`),v.onmessage=_=>{try{const f=JSON.parse(_.data);f.text&&u.value.push(f.text),f.done&&v?.close()}catch{u.value.push(_.data)}},L=new EventSource(i||`/api/plugins/anima-lora/install/progress/stream/${o}`),L.onmessage=_=>{try{const f=JSON.parse(_.data);f.type==="progress"&&(m.value=Number(f.percent||0),p.value=f.message||f.phase||""),(f.done||f.type==="done")&&L?.close()}catch{}}}async function k(o=!0){try{const l=await D.list(),i={};for(const W of l)i[W.id]=W;h.value=i;const _=i["anima-fast"],f=_&&["installing","auditing"].includes(_.state);f&&_.facts?.task_id&&!v&&b(_.facts.task_id),f||d()}catch(l){o&&$.error(l instanceof Error?l.message:n("settings.engines.msg.statusFail"))}}async function g(o=!1){try{await M.confirm(n(o?"settings.engines.confirm.reinstall":"settings.engines.confirm.animaFast"),n(o?"settings.engines.actions.reinstall":"settings.engines.actions.install"),{type:"warning"}),a.value="anima-fast",u.value=[],m.value=0,p.value="";const l=o?await D.repair("anima-fast"):await D.install("anima-fast");if(l.alreadyReady){l.status&&(h.value={...h.value,"anima-fast":l.status}),$.success(n("settings.engines.msg.ready"));return}l.taskId&&(b(l.taskId,l.logStream,l.progressStream),y||(y=window.setInterval(()=>k(!1),2e3))),await k(!1),$.success(n("settings.engines.msg.started"))}catch(l){l!=="cancel"&&l!=="close"&&$.error(l instanceof Error?l.message:n("settings.engines.msg.fail"))}finally{a.value=null}}async function X(){try{await M.confirm(n("settings.engines.confirm.uninstall"),n("settings.engines.actions.uninstall"),{type:"warning"}),a.value="anima-fast";const o=await D.uninstall("anima-fast");h.value={...h.value,"anima-fast":o},u.value=[],m.value=0,$.success(n("settings.engines.msg.uninstalled"))}catch(o){o!=="cancel"&&o!=="close"&&$.error(o instanceof Error?o.message:n("settings.engines.msg.fail"))}finally{a.value=null}}function Q(){const o=j();o.rememberLast=N.value,ge(o),$.success(n("settings.engines.msg.prefsSaved"))}return Z(async()=>{await k();const o=h.value["anima-fast"];o&&["installing","auditing"].includes(o.state)&&(y=window.setInterval(()=>k(!1),2e3))}),ee(()=>{d(),O()}),(o,l)=>(r(),c("div",Ie,[e("section",Ke,[e("h2",null,t(s(n)("settings.engines.title")),1),e("p",Ne,t(s(n)("settings.engines.lead")),1),e("div",Te,[e("strong",null,t(s(n)("settings.engines.defaultPolicy.title")),1),e("p",null,t(s(n)("settings.engines.defaultPolicy.body")),1)]),e("label",Ae,[J(e("input",{"onUpdate:modelValue":l[0]||(l[0]=i=>N.value=i),type:"checkbox",onChange:Q},null,544),[[te,N.value]]),e("span",null,[e("b",null,t(s(n)("settings.engines.rememberLast.label")),1),e("small",null,t(s(n)("settings.engines.rememberLast.hint")),1)])])]),(r(!0),c(C,null,I(B.value,i=>(r(),c("section",{key:i.engine.id,class:"settings-card engine-card","data-engine":i.engine.id,"data-state":i.status.state},[e("header",Pe,[e("div",null,[e("h2",null,t(s(n)(i.engine.nameKey)),1),e("p",null,t(s(n)(i.engine.summaryKey)),1)]),e("span",{class:"engine-state-pill","data-state":i.status.state},t(F(i.status.state)),9,De)]),i.engine.sizeHintKey||i.engine.requiresGpu||i.engine.kind==="builtin"?(r(),c("ul",Re,[i.engine.kind==="builtin"?(r(),c("li",He,t(s(n)("settings.engines.meta.builtin")),1)):w("",!0),i.engine.sizeHintKey?(r(),c("li",Be,t(s(n)(i.engine.sizeHintKey)),1)):w("",!0),i.engine.requiresGpu?(r(),c("li",Fe,t(s(n)("settings.engines.meta.gpu")),1)):w("",!0),i.engine.kind==="planned"?(r(),c("li",Ge,t(s(n)("settings.engines.meta.planned")),1)):w("",!0)])):w("",!0),i.status.runtime?.animaRoot?(r(),c("p",Ue,[e("span",null,t(s(n)("settings.engines.meta.path")),1),e("code",null,t(i.status.runtime.animaRoot),1)])):w("",!0),i.engine.id==="anima-fast"?(r(),c("div",ze,[e("button",{class:"primary-action",disabled:a.value==="anima-fast"||["installing","auditing","ready"].includes(i.status.state)||!i.status.featureEnabled,onClick:l[1]||(l[1]=_=>g(!1))},t(["installing","auditing"].includes(i.status.state)?s(n)("settings.engines.actions.installing"):s(n)("settings.engines.actions.install")),9,Ve),e("button",{class:"secondary-action",disabled:a.value==="anima-fast"||!["broken","installed_unverified"].includes(i.status.state),title:s(n)("settings.engines.actions.reinstallHint"),onClick:l[2]||(l[2]=_=>g(!0))},t(s(n)("settings.engines.actions.reinstall")),9,We),e("button",{class:"secondary-action",disabled:a.value==="anima-fast"||["installing","auditing","not_installed","coming_soon"].includes(i.status.state),onClick:X},t(s(n)("settings.engines.actions.uninstall")),9,Me),e("button",{class:"ghost-button",disabled:a.value==="anima-fast",onClick:l[3]||(l[3]=_=>k())},t(s(n)("settings.engines.actions.refresh")),9,je)])):w("",!0),i.engine.id==="anima-fast"&&(u.value.length||["installing","auditing"].includes(i.status.state))?(r(),c("div",Je,[e("header",null,[e("span",null,t(p.value||s(n)("settings.engines.console.idle")),1),e("b",null,t(m.value)+"%",1)]),e("div",qe,[e("i",{style:se({width:`${m.value}%`})},null,4)]),e("pre",null,t(u.value.length?u.value.join(` +import{d as R,u as H,c,a as e,t,b as s,e as K,w as E,F as C,r as I,i as V,o as r,s as S,y as Z,l as ee,B as J,I as te,h as z,p as w,n as se,U as ne,x as ae,V as ie,D as oe,f as T,W as le,m as G,E as re,j as P,X as U,Y as ue}from"./index-jfqf0I3j.js";import{E as $}from"./index-tjV5EgBi.js";import{_ as ce}from"./home-logo-Bq2pf2HD.js";import{E as M}from"./index-CfMd9kCx.js";import{b as j,e as D,w as ge}from"./prefs-DCZCUQjC.js";const de={class:"content-page"},me={class:"content-hero content-hero-split"},he={class:"about-credits"},pe=["href"],be={class:"content-links"},fe={href:"https://github.com/wochenlong/lora-scripts-next",target:"_blank",rel:"noreferrer"},_e={href:"https://github.com/wochenlong/lora-scripts-next/releases",target:"_blank",rel:"noreferrer"},ve={href:"https://github.com/wochenlong/lora-scripts-next/issues",target:"_blank",rel:"noreferrer"},ye=R({__name:"AboutPage",setup(x){const{t:n}=H(),a=[{name:"Akegarasu / lora-scripts",href:"https://github.com/Akegarasu/lora-scripts",noteKey:"about.credits.akegarasu"},{name:"kohya-ss / sd-scripts",href:"https://github.com/kohya-ss/sd-scripts",noteKey:"about.credits.kohya"},{name:"sorryhyun / anima_lora",href:"https://github.com/sorryhyun/anima_lora",noteKey:"about.credits.animaFast"},{name:"KohakuBlueleaf / LyCORIS",href:"https://github.com/KohakuBlueleaf/LyCORIS",noteKey:"about.credits.lycoris"},{name:"SmilingWolf / WD Tagger",href:"https://huggingface.co/SmilingWolf/wd-v1-4-convnextv2-tagger-v2",noteKey:"about.credits.tagger"},{name:"shigma / schemastery",href:"https://github.com/shigma/schemastery",noteKey:"about.credits.schemastery"}];return(h,u)=>{const m=V("i18n-t");return r(),c("article",de,[e("header",me,[e("div",null,[u[0]||(u[0]=e("span",{class:"eyebrow"},"ABOUT",-1)),u[1]||(u[1]=e("h1",null,"Next Trainer",-1)),e("p",null,t(s(n)("about.tagline")),1)]),u[2]||(u[2]=e("img",{class:"about-logo",src:ce,alt:"Next Trainer"},null,-1))]),e("section",null,[e("h2",null,t(s(n)("about.projectTitle")),1),K(m,{keypath:"about.projectDesc",tag:"p",scope:"global"},{schemastery:E(()=>[...u[3]||(u[3]=[e("a",{href:"https://github.com/shigma/schemastery",target:"_blank",rel:"noreferrer"},"Schemastery",-1)])]),_:1})]),e("section",null,[e("h2",null,t(s(n)("about.creditsTitle")),1),e("p",null,t(s(n)("about.creditsIntro")),1),e("ul",he,[(r(),c(C,null,I(a,p=>e("li",{key:p.href},[e("a",{href:p.href,target:"_blank",rel:"noreferrer"},t(p.name),9,pe),e("span",null,t(s(n)(p.noteKey)),1)])),64))]),e("p",null,[K(m,{keypath:"about.creditsNotice",tag:"span",scope:"global"},{notice:E(()=>[...u[4]||(u[4]=[e("a",{href:"https://github.com/wochenlong/lora-scripts-next/blob/dev/NOTICE.md",target:"_blank",rel:"noreferrer"},"NOTICE.md",-1)])]),license:E(()=>[...u[5]||(u[5]=[e("a",{href:"https://github.com/wochenlong/lora-scripts-next/blob/dev/LICENSE",target:"_blank",rel:"noreferrer"},"LICENSE",-1)])]),_:1})])]),e("section",null,[e("h2",null,t(s(n)("about.feedbackTitle")),1),K(m,{keypath:"about.feedbackDesc",tag:"p",scope:"global"},{issues:E(()=>[...u[6]||(u[6]=[e("a",{href:"https://github.com/wochenlong/lora-scripts-next/issues",target:"_blank",rel:"noreferrer"},"GitHub Issues",-1)])]),_:1})]),e("section",null,[e("h2",null,t(s(n)("about.linksTitle")),1),e("div",be,[e("a",fe,t(s(n)("about.source")),1),e("a",_e,t(s(n)("about.releases")),1),e("a",ve,t(s(n)("about.issues")),1)])])])}}}),ke="/assets/changelog-banner.webp",q=[{version:"v2.9.2-beta.2",date:"2026-08-07",items:["修复启动时打开空白训练监控页(6008 连接被拒绝)","仅在监控就绪后打开浏览器标签;可用 /train-monitor"]},{version:"v2.9.2-beta.1",date:"2026-08-07",items:["Vue3 四栏 IA 内测线(训练 / 数据集 / 任务 / 设置)","品牌统一为 Next Trainer(内测版本号走 2.9.x)","训练引擎管理与 Fast 就绪态","开源致谢页与 lite/full 双整合包","钉死 protobuf==3.20.3(Flux/SD3)"]},{version:"v2.9.0",date:"2026-07-22",items:["Anima Fast 高分辨率 bucket 参数与训练前检查","Anima 标准模式 LoKr 无效参数清理","本地 WD 打标模型加载与 CUDA/CPU 回退改进","Windows 整合包数据目录和 junction 修复"]},{version:"v2.8.35",date:"2026-06-28",items:["修复 Windows 更新脚本路径、换行与 PowerShell 5.1 编码兼容","新增 Fix-Portable-Bats.bat"]},{version:"v2.8.3",date:"2026-06-28",items:["新增配置导出规范化 API","改善整合包 Hugging Face、ModelScope 与文件选择器路径"]},{version:"v2.8.2",date:"2026-06-27",items:["修复 SDXL 训练路由与离线 tokenizer","默认 WD 打标模型开箱即用","修复预览图和训练配置导入"]}],$e={class:"content-page"},we={class:"content-hero content-hero-split"},Se=["alt"],Ee={class:"release-list"},Ce={class:"secondary-action",href:"https://github.com/wochenlong/lora-scripts-next/blob/master/CHANGELOG.md",target:"_blank",rel:"noreferrer"},xe=R({__name:"ChangelogPage",setup(x){const{t:n}=H();return(a,h)=>{const u=V("i18n-t");return r(),c("article",$e,[e("header",we,[e("div",null,[h[1]||(h[1]=e("span",{class:"eyebrow"},"RELEASE NOTES",-1)),e("h1",null,t(s(n)("changelog.title")),1),K(u,{keypath:"changelog.subtitle",tag:"p",scope:"global"},{file:E(()=>[...h[0]||(h[0]=[e("code",null,"CHANGELOG.md",-1)])]),_:1})]),e("img",{src:ke,alt:s(n)("changelog.bannerAlt")},null,8,Se)]),e("section",Ee,[(r(!0),c(C,null,I(s(q),m=>(r(),c("article",{key:m.version},[e("header",null,[e("h2",null,t(m.version),1),e("time",null,t(m.date),1)]),e("ul",null,[(r(!0),c(C,null,I(m.items,p=>(r(),c("li",{key:p},t(p),1))),128))])]))),128))]),e("a",Ce,t(s(n)("changelog.full")),1)])}}}),Le=[{id:"kohya",kind:"builtin",nameKey:"settings.engines.catalog.kohya.name",summaryKey:"settings.engines.catalog.kohya.summary",managesRuntime:!1},{id:"anima-fast",kind:"optional",nameKey:"settings.engines.catalog.anima-fast.name",summaryKey:"settings.engines.catalog.anima-fast.summary",sizeHintKey:"settings.engines.catalog.anima-fast.sizeHint",requiresGpu:!0,managesRuntime:!0},{id:"musubi",kind:"planned",nameKey:"settings.engines.catalog.musubi.name",summaryKey:"settings.engines.catalog.musubi.summary",managesRuntime:!1}],Ie={class:"engines-settings"},Ke={class:"settings-card"},Ne={class:"engines-lead"},Te={class:"engines-policy"},Ae={class:"engines-toggle"},Oe=["data-engine","data-state"],Pe={class:"engine-card-header"},De=["data-state"],Re={key:0,class:"engine-meta"},He={key:0},Be={key:1},Fe={key:2},Ge={key:3},Ue={key:1,class:"engine-path"},ze={key:2,class:"engine-card-actions"},Ve=["disabled"],We=["disabled","title"],Me=["disabled"],je=["disabled"],Je={key:3,class:"engine-console"},qe={class:"install-progress"},Ye=R({__name:"EnginesSettingsPage",setup(x){const{t:n}=H(),a=S(null),h=S({}),u=S([]),m=S(0),p=S(""),N=S(j().rememberLast);let y,v,L;const B=z(()=>Le.map(o=>({engine:o,status:h.value[o.id]||A(o)})));function A(o){return o.kind==="builtin"?{id:o.id,state:"ready",featureEnabled:!0}:o.kind==="planned"?{id:o.id,state:"coming_soon",featureEnabled:!1}:{id:o.id,state:"unknown",featureEnabled:!0}}function F(o){const l=`settings.engines.state.${o}`,i=n(l);return i===l?o:i}function O(){v?.close(),L?.close(),v=void 0,L=void 0}function d(){y!==void 0&&(window.clearInterval(y),y=void 0)}function b(o,l,i){O(),v=new EventSource(l||`/api/plugins/anima-lora/install/log/stream/${o}`),v.onmessage=_=>{try{const f=JSON.parse(_.data);f.text&&u.value.push(f.text),f.done&&v?.close()}catch{u.value.push(_.data)}},L=new EventSource(i||`/api/plugins/anima-lora/install/progress/stream/${o}`),L.onmessage=_=>{try{const f=JSON.parse(_.data);f.type==="progress"&&(m.value=Number(f.percent||0),p.value=f.message||f.phase||""),(f.done||f.type==="done")&&L?.close()}catch{}}}async function k(o=!0){try{const l=await D.list(),i={};for(const W of l)i[W.id]=W;h.value=i;const _=i["anima-fast"],f=_&&["installing","auditing"].includes(_.state);f&&_.facts?.task_id&&!v&&b(_.facts.task_id),f||d()}catch(l){o&&$.error(l instanceof Error?l.message:n("settings.engines.msg.statusFail"))}}async function g(o=!1){try{await M.confirm(n(o?"settings.engines.confirm.reinstall":"settings.engines.confirm.animaFast"),n(o?"settings.engines.actions.reinstall":"settings.engines.actions.install"),{type:"warning"}),a.value="anima-fast",u.value=[],m.value=0,p.value="";const l=o?await D.repair("anima-fast"):await D.install("anima-fast");if(l.alreadyReady){l.status&&(h.value={...h.value,"anima-fast":l.status}),$.success(n("settings.engines.msg.ready"));return}l.taskId&&(b(l.taskId,l.logStream,l.progressStream),y||(y=window.setInterval(()=>k(!1),2e3))),await k(!1),$.success(n("settings.engines.msg.started"))}catch(l){l!=="cancel"&&l!=="close"&&$.error(l instanceof Error?l.message:n("settings.engines.msg.fail"))}finally{a.value=null}}async function X(){try{await M.confirm(n("settings.engines.confirm.uninstall"),n("settings.engines.actions.uninstall"),{type:"warning"}),a.value="anima-fast";const o=await D.uninstall("anima-fast");h.value={...h.value,"anima-fast":o},u.value=[],m.value=0,$.success(n("settings.engines.msg.uninstalled"))}catch(o){o!=="cancel"&&o!=="close"&&$.error(o instanceof Error?o.message:n("settings.engines.msg.fail"))}finally{a.value=null}}function Q(){const o=j();o.rememberLast=N.value,ge(o),$.success(n("settings.engines.msg.prefsSaved"))}return Z(async()=>{await k();const o=h.value["anima-fast"];o&&["installing","auditing"].includes(o.state)&&(y=window.setInterval(()=>k(!1),2e3))}),ee(()=>{d(),O()}),(o,l)=>(r(),c("div",Ie,[e("section",Ke,[e("h2",null,t(s(n)("settings.engines.title")),1),e("p",Ne,t(s(n)("settings.engines.lead")),1),e("div",Te,[e("strong",null,t(s(n)("settings.engines.defaultPolicy.title")),1),e("p",null,t(s(n)("settings.engines.defaultPolicy.body")),1)]),e("label",Ae,[J(e("input",{"onUpdate:modelValue":l[0]||(l[0]=i=>N.value=i),type:"checkbox",onChange:Q},null,544),[[te,N.value]]),e("span",null,[e("b",null,t(s(n)("settings.engines.rememberLast.label")),1),e("small",null,t(s(n)("settings.engines.rememberLast.hint")),1)])])]),(r(!0),c(C,null,I(B.value,i=>(r(),c("section",{key:i.engine.id,class:"settings-card engine-card","data-engine":i.engine.id,"data-state":i.status.state},[e("header",Pe,[e("div",null,[e("h2",null,t(s(n)(i.engine.nameKey)),1),e("p",null,t(s(n)(i.engine.summaryKey)),1)]),e("span",{class:"engine-state-pill","data-state":i.status.state},t(F(i.status.state)),9,De)]),i.engine.sizeHintKey||i.engine.requiresGpu||i.engine.kind==="builtin"?(r(),c("ul",Re,[i.engine.kind==="builtin"?(r(),c("li",He,t(s(n)("settings.engines.meta.builtin")),1)):w("",!0),i.engine.sizeHintKey?(r(),c("li",Be,t(s(n)(i.engine.sizeHintKey)),1)):w("",!0),i.engine.requiresGpu?(r(),c("li",Fe,t(s(n)("settings.engines.meta.gpu")),1)):w("",!0),i.engine.kind==="planned"?(r(),c("li",Ge,t(s(n)("settings.engines.meta.planned")),1)):w("",!0)])):w("",!0),i.status.runtime?.animaRoot?(r(),c("p",Ue,[e("span",null,t(s(n)("settings.engines.meta.path")),1),e("code",null,t(i.status.runtime.animaRoot),1)])):w("",!0),i.engine.id==="anima-fast"?(r(),c("div",ze,[e("button",{class:"primary-action",disabled:a.value==="anima-fast"||["installing","auditing","ready"].includes(i.status.state)||!i.status.featureEnabled,onClick:l[1]||(l[1]=_=>g(!1))},t(["installing","auditing"].includes(i.status.state)?s(n)("settings.engines.actions.installing"):s(n)("settings.engines.actions.install")),9,Ve),e("button",{class:"secondary-action",disabled:a.value==="anima-fast"||!["broken","installed_unverified"].includes(i.status.state),title:s(n)("settings.engines.actions.reinstallHint"),onClick:l[2]||(l[2]=_=>g(!0))},t(s(n)("settings.engines.actions.reinstall")),9,We),e("button",{class:"secondary-action",disabled:a.value==="anima-fast"||["installing","auditing","not_installed","coming_soon"].includes(i.status.state),onClick:X},t(s(n)("settings.engines.actions.uninstall")),9,Me),e("button",{class:"ghost-button",disabled:a.value==="anima-fast",onClick:l[3]||(l[3]=_=>k())},t(s(n)("settings.engines.actions.refresh")),9,je)])):w("",!0),i.engine.id==="anima-fast"&&(u.value.length||["installing","auditing"].includes(i.status.state))?(r(),c("div",Je,[e("header",null,[e("span",null,t(p.value||s(n)("settings.engines.console.idle")),1),e("b",null,t(m.value)+"%",1)]),e("div",qe,[e("i",{style:se({width:`${m.value}%`})},null,4)]),e("pre",null,t(u.value.length?u.value.join(` `):s(n)("settings.engines.console.waiting")),1)])):w("",!0)],8,Oe))),128))]))}}),Y="vuepress-color-scheme";function Xe(){if(typeof document<"u"&&document.documentElement.classList.contains("dark"))return"dark";try{return localStorage.getItem(Y)==="dark"?"dark":"light"}catch{return"light"}}function Qe(x){document.documentElement.classList.toggle("dark",x==="dark");try{localStorage.setItem(Y,x)}catch{}}const Ze={class:"settings-page"},et={class:"settings-page-header"},tt={class:"settings-body"},st=["aria-label"],nt={class:"settings-content"},at={class:"settings-card"},it=["value"],ot=["value"],lt={class:"settings-field"},rt={class:"settings-field-label"},ut=["aria-label"],ct={for:"tensorboard-url"},gt=["placeholder"],dt={class:"form-actions"},mt={class:"settings-card"},ht={class:"settings-preview"},pt={class:"settings-preview-grid"},bt={class:"settings-preview-col"},ft={class:"settings-about-line"},_t={class:"version-badge"},vt={class:"settings-about-desc"},yt={class:"settings-preview-col"},kt={class:"settings-release-list"},xt=R({__name:"SettingsContainerPage",props:{tab:{}},setup(x){const n=x,{t:a}=H(),h=ne(),{version:u}=ae(h),m=S(ie()),p=S(Xe()),N=z(()=>q.slice(0,3));function y(){try{const d=JSON.parse(localStorage.getItem(U)||"{}");return d&&typeof d=="object"?d:{}}catch{return{}}}const v=oe({tensorboard_url:String(y().tensorboard_url??"")}),L=z(()=>[{key:"ui",to:"/settings/ui",label:a("settings.nav.ui")},{key:"engines",to:"/settings/engines",label:a("settings.nav.engines")},{key:"about",to:"/settings/about",label:a("settings.nav.about")},{key:"changelog",to:"/settings/changelog",label:a("settings.nav.changelog")}]);function B(d){m.value=d,ue(d)}function A(d){p.value=d,Qe(d)}function F(){const d=y();d.tensorboard_url=v.tensorboard_url.trim(),localStorage.setItem(U,JSON.stringify(d)),$.success(a("settings.ui.saved"))}function O(){v.tensorboard_url="";const d=y();delete d.tensorboard_url,localStorage.setItem(U,JSON.stringify(d)),$.success(a("settings.ui.resetDone"))}return(d,b)=>{const k=V("RouterLink");return r(),c("div",Ze,[e("header",et,[e("h1",null,t(s(a)("settings.title")),1),e("p",null,t(s(a)("settings.subtitle")),1)]),e("div",tt,[e("nav",{class:"settings-nav","aria-label":s(a)("settings.navAria")},[(r(!0),c(C,null,I(L.value,g=>(r(),P(k,{key:g.key,to:g.to,class:G(["settings-nav-link",{active:n.tab===g.key}])},{default:E(()=>[T(t(g.label),1)]),_:2},1032,["to","class"]))),128))],8,st),e("main",nt,[n.tab==="ui"?(r(),c(C,{key:0},[e("section",at,[e("h2",null,t(s(a)("settings.nav.ui")),1),e("label",null,[T(t(s(a)("settings.ui.language"))+" ",1),e("select",{value:m.value,onChange:b[0]||(b[0]=g=>B(g.target.value))},[(r(!0),c(C,null,I(s(le),g=>(r(),c("option",{key:g.value,value:g.value},t(g.label),9,ot))),128))],40,it)]),e("div",lt,[e("span",rt,t(s(a)("settings.ui.theme")),1),e("div",{class:"segmented theme-switch",role:"group","aria-label":s(a)("settings.ui.theme")},[e("button",{class:G({active:p.value==="light"}),onClick:b[1]||(b[1]=g=>A("light"))},t(s(a)("settings.ui.themeLight")),3),e("button",{class:G({active:p.value==="dark"}),onClick:b[2]||(b[2]=g=>A("dark"))},t(s(a)("settings.ui.themeDark")),3)],8,ut)]),e("label",ct,t(s(a)("settings.ui.tensorboardUrl")),1),J(e("input",{id:"tensorboard-url","onUpdate:modelValue":b[3]||(b[3]=g=>v.tensorboard_url=g),placeholder:s(a)("settings.ui.tensorboardPlaceholder")},null,8,gt),[[re,v.tensorboard_url]]),e("small",null,t(s(a)("settings.ui.tensorboardHint")),1),e("div",dt,[e("button",{class:"primary-action",onClick:F},t(s(a)("settings.ui.save")),1),e("button",{class:"secondary-action",onClick:O},t(s(a)("settings.ui.reset")),1)])]),e("section",mt,[e("h2",null,t(s(a)("settings.tools.title")),1),e("small",null,t(s(a)("settings.tools.note")),1)]),e("section",ht,[e("header",null,t(s(a)("settings.preview")),1),e("div",pt,[e("div",bt,[e("h3",null,t(s(a)("settings.nav.about")),1),e("p",ft,[e("strong",null,t(s(a)("app.brand")),1),b[4]||(b[4]=T()),e("span",_t,t(s(u)?`v${s(u)}`:"dev"),1)]),e("p",vt,t(s(a)("settings.aboutDesc")),1),K(k,{class:"settings-more-link",to:"/settings/about"},{default:E(()=>[T(t(s(a)("settings.nav.about"))+" →",1)]),_:1})]),e("div",yt,[e("h3",null,t(s(a)("settings.nav.changelog")),1),e("ul",kt,[(r(!0),c(C,null,I(N.value,g=>(r(),c("li",{key:g.version},[e("time",null,t(g.date),1),e("strong",null,t(g.version),1),e("span",null,t(g.items[0]),1)]))),128))]),K(k,{class:"settings-more-link",to:"/settings/changelog"},{default:E(()=>[T(t(s(a)("settings.moreChangelog")),1)]),_:1})])])])],64)):n.tab==="engines"?(r(),P(Ye,{key:1})):n.tab==="about"?(r(),P(ye,{key:2})):(r(),P(xe,{key:3}))])])])}}});export{xt as default}; diff --git a/frontend/dist/assets/TasksPage-CeWYr9Xg.js b/frontend/dist/assets/TasksPage-KdDODzEE.js similarity index 98% rename from frontend/dist/assets/TasksPage-CeWYr9Xg.js rename to frontend/dist/assets/TasksPage-KdDODzEE.js index 25d42dff..ef933bea 100644 --- a/frontend/dist/assets/TasksPage-CeWYr9Xg.js +++ b/frontend/dist/assets/TasksPage-KdDODzEE.js @@ -1,2 +1,2 @@ -import{E as Z}from"./index-DNZgQ1o0.js";import{E as ut}from"./index-DILr9bpz.js";import{d as lt,c as i,a as t,t as s,F as tt,r as et,h as E,o as n,n as it,f as O,u as rt,k as Q,l as ct,m as B,b as l,p as M,q as J,s as T,v as dt,x as vt,y as ht,e as W,w as ot,z as pt,j as kt,i as nt}from"./index-BlvrX0Zy.js";import{t as mt,a as st,u as _t}from"./tasks-CTZb2r1_.js";const ft={class:"loss-chart"},gt=["viewBox"],bt=["x1","y1","x2","y2"],yt=["x1","y1","x2","y2"],wt=["y"],xt=["y"],Et=["x","y"],Tt=["x","y"],$t=["d","stroke"],It={class:"loss-legend"},K=600,A=170,Nt=lt({__name:"LossChart",props:{series:{}},setup(U){const b=U,o={top:14,right:14,bottom:24,left:52},y=E(()=>{const p=b.series.flatMap(d=>d.points);if(!p.length)return{minX:0,maxX:1,minY:0,maxY:1};const k=Math.min(...p.map(d=>d.step)),v=Math.max(...p.map(d=>d.step)),_=Math.min(...p.map(d=>d.value)),h=Math.max(...p.map(d=>d.value));return{minX:k,maxX:v===k?k+1:v,minY:_,maxY:h===_?_+1:h}});function w(p){const{minX:k,maxX:v,minY:_,maxY:h}=y.value;return p.map((d,S)=>{const I=o.left+(d.step-k)/(v-k)*(K-o.left-o.right),R=o.top+(1-(d.value-_)/(h-_))*(A-o.top-o.bottom);return`${S===0?"M":"L"}${I.toFixed(1)},${R.toFixed(1)}`}).join(" ")}function f(p){const k=p.points[p.points.length-1];return k?k.value.toPrecision(4):"-"}function a(p){return Math.abs(p)<.01?p.toExponential(1):String(Number(p.toPrecision(3)))}return(p,k)=>(n(),i("div",ft,[(n(),i("svg",{viewBox:`0 0 ${K} ${A}`,role:"img"},[t("line",{x1:o.left,y1:o.top,x2:o.left,y2:A-o.bottom,class:"axis"},null,8,bt),t("line",{x1:o.left,y1:A-o.bottom,x2:K-o.right,y2:A-o.bottom,class:"axis"},null,8,yt),t("text",{x:4,y:o.top+8,class:"tick"},s(a(y.value.maxY)),9,wt),t("text",{x:4,y:A-o.bottom,class:"tick"},s(a(y.value.minY)),9,xt),t("text",{x:o.left,y:A-6,class:"tick"},s(y.value.minX),9,Et),t("text",{x:K-o.right,y:A-6,class:"tick","text-anchor":"end"},s(y.value.maxX),9,Tt),(n(!0),i(tt,null,et(U.series,v=>(n(),i("path",{key:v.name,d:w(v.points),stroke:v.color,class:"line"},null,8,$t))),128))],8,gt)),t("div",It,[(n(!0),i(tt,null,et(U.series,v=>(n(),i("span",{key:v.name},[t("i",{style:it({background:v.color})},null,4),O(s(v.name)+" ",1),t("b",null,s(f(v)),1)]))),128))])]))}}),Rt={class:"log-title"},Ct=["title"],Lt={class:"log-toggle"},At={key:0,class:"log-body"},St={class:"log-toolbar"},Dt=["disabled"],Bt=["disabled"],Mt=["disabled"],Ut={class:"log-count"},jt={key:0,class:"log-hint"},Pt={key:1,class:"log-hint"},Ot=4e3,Ht=2e3,Ft=lt({__name:"TaskLogPanel",props:{taskId:{},status:{}},setup(U){const b=U,{t:o}=rt(),y=/\berror\b|\btraceback\b|out of memory|\boom\b/i,w=T(!1),f=T([]),a=T(!1),p=T(!1),k=T(!0),v=T();let _,h,d;const S=E(()=>b.status==="FAILED"||a.value),I=E(()=>f.value.join(` +import{E as Z}from"./index-tjV5EgBi.js";import{E as ut}from"./index-CfMd9kCx.js";import{d as lt,c as i,a as t,t as s,F as tt,r as et,h as E,o as n,n as it,f as O,u as rt,k as Q,l as ct,m as B,b as l,p as M,q as J,s as T,v as dt,x as vt,y as ht,e as W,w as ot,z as pt,j as kt,i as nt}from"./index-jfqf0I3j.js";import{t as mt,a as st,u as _t}from"./tasks-C7eKb6HN.js";const ft={class:"loss-chart"},gt=["viewBox"],bt=["x1","y1","x2","y2"],yt=["x1","y1","x2","y2"],wt=["y"],xt=["y"],Et=["x","y"],Tt=["x","y"],$t=["d","stroke"],It={class:"loss-legend"},K=600,A=170,Nt=lt({__name:"LossChart",props:{series:{}},setup(U){const b=U,o={top:14,right:14,bottom:24,left:52},y=E(()=>{const p=b.series.flatMap(d=>d.points);if(!p.length)return{minX:0,maxX:1,minY:0,maxY:1};const k=Math.min(...p.map(d=>d.step)),v=Math.max(...p.map(d=>d.step)),_=Math.min(...p.map(d=>d.value)),h=Math.max(...p.map(d=>d.value));return{minX:k,maxX:v===k?k+1:v,minY:_,maxY:h===_?_+1:h}});function w(p){const{minX:k,maxX:v,minY:_,maxY:h}=y.value;return p.map((d,S)=>{const I=o.left+(d.step-k)/(v-k)*(K-o.left-o.right),R=o.top+(1-(d.value-_)/(h-_))*(A-o.top-o.bottom);return`${S===0?"M":"L"}${I.toFixed(1)},${R.toFixed(1)}`}).join(" ")}function f(p){const k=p.points[p.points.length-1];return k?k.value.toPrecision(4):"-"}function a(p){return Math.abs(p)<.01?p.toExponential(1):String(Number(p.toPrecision(3)))}return(p,k)=>(n(),i("div",ft,[(n(),i("svg",{viewBox:`0 0 ${K} ${A}`,role:"img"},[t("line",{x1:o.left,y1:o.top,x2:o.left,y2:A-o.bottom,class:"axis"},null,8,bt),t("line",{x1:o.left,y1:A-o.bottom,x2:K-o.right,y2:A-o.bottom,class:"axis"},null,8,yt),t("text",{x:4,y:o.top+8,class:"tick"},s(a(y.value.maxY)),9,wt),t("text",{x:4,y:A-o.bottom,class:"tick"},s(a(y.value.minY)),9,xt),t("text",{x:o.left,y:A-6,class:"tick"},s(y.value.minX),9,Et),t("text",{x:K-o.right,y:A-6,class:"tick","text-anchor":"end"},s(y.value.maxX),9,Tt),(n(!0),i(tt,null,et(U.series,v=>(n(),i("path",{key:v.name,d:w(v.points),stroke:v.color,class:"line"},null,8,$t))),128))],8,gt)),t("div",It,[(n(!0),i(tt,null,et(U.series,v=>(n(),i("span",{key:v.name},[t("i",{style:it({background:v.color})},null,4),O(s(v.name)+" ",1),t("b",null,s(f(v)),1)]))),128))])]))}}),Rt={class:"log-title"},Ct=["title"],Lt={class:"log-toggle"},At={key:0,class:"log-body"},St={class:"log-toolbar"},Dt=["disabled"],Bt=["disabled"],Mt=["disabled"],Ut={class:"log-count"},jt={key:0,class:"log-hint"},Pt={key:1,class:"log-hint"},Ot=4e3,Ht=2e3,Ft=lt({__name:"TaskLogPanel",props:{taskId:{},status:{}},setup(U){const b=U,{t:o}=rt(),y=/\berror\b|\btraceback\b|out of memory|\boom\b/i,w=T(!1),f=T([]),a=T(!1),p=T(!1),k=T(!0),v=T();let _,h,d;const S=E(()=>b.status==="FAILED"||a.value),I=E(()=>f.value.join(` `)),R=E(()=>{for(let r=f.value.length-1;r>=0;r--)if(y.test(f.value[r]))return r;return-1});function D(){h!==void 0&&(window.clearInterval(h),h=void 0),d!==void 0&&(window.clearInterval(d),d=void 0)}function j(){_?.close(),_=void 0}async function P(){try{const r=await st.logTail(b.taskId,240);p.value=!1,r.lines.some(g=>y.test(g))&&(a.value=!0),r.done&&h!==void 0&&(window.clearInterval(h),h=void 0)}catch{p.value=!0,h!==void 0&&(window.clearInterval(h),h=void 0)}}function H(){D(),j(),P(),h=window.setInterval(P,Ot)}function N(){!k.value||!w.value||dt(()=>{v.value&&(v.value.scrollTop=v.value.scrollHeight)})}async function $(){try{const r=await st.logTail(b.taskId,1e3);p.value=!1,f.value=r.lines,r.lines.some(g=>y.test(g))&&(a.value=!0),N(),r.done&&d!==void 0&&(window.clearInterval(d),d=void 0)}catch{p.value=!0,d!==void 0&&(window.clearInterval(d),d=void 0)}}function F(){D(),$(),d=window.setInterval($,Ht)}function X(){if(D(),f.value=[],typeof EventSource>"u"){F();return}const r=new EventSource(mt(b.taskId));_=r,r.onmessage=g=>{try{const e=JSON.parse(g.data);if(e.done){j();return}typeof e.text=="string"&&(f.value.push(e.text),!a.value&&y.test(e.text)&&(a.value=!0),N())}catch{}},r.onerror=()=>{j(),F()}}function Y(){w.value=!w.value,w.value?X():H()}function G(){const r=v.value;r&&(k.value=r.scrollTop+r.clientHeight>=r.scrollHeight-8)}function m(){const r=v.value;if(!r||R.value<0)return;k.value=!1;const g=parseFloat(getComputedStyle(r).lineHeight)||18;r.scrollTop=Math.max(0,R.value*g-r.clientHeight/3)}async function V(){try{await navigator.clipboard.writeText(I.value),Z.success(o("tasks.log.copied"))}catch{Z.error(o("tasks.log.copyFail"))}}function z(){const r=URL.createObjectURL(new Blob([I.value],{type:"text/plain;charset=utf-8"})),g=document.createElement("a");g.href=r,g.download=`train-log-${b.taskId}.txt`,g.click(),URL.revokeObjectURL(r)}return Q(()=>b.taskId,()=>{w.value=!1,f.value=[],a.value=!1,p.value=!1,k.value=!0,H()},{immediate:!0}),ct(()=>{D(),j()}),(r,g)=>(n(),i("section",{class:B(["task-log-panel",{open:w.value}])},[t("header",{class:"log-header",onClick:Y},[t("span",Rt,[O(s(l(o)("tasks.log.title")),1),S.value?(n(),i("i",{key:0,class:"log-alert",title:l(o)("tasks.log.errorBadge")},null,8,Ct)):M("",!0)]),t("button",Lt,s(w.value?l(o)("tasks.log.collapse"):l(o)("tasks.log.expand")),1)]),w.value?(n(),i("div",At,[t("div",St,[t("button",{class:B({active:k.value}),onClick:g[0]||(g[0]=J(e=>{k.value=!k.value,N()},["stop"]))},s(l(o)("tasks.log.follow")),3),t("button",{disabled:R.value<0,onClick:J(m,["stop"])},s(l(o)("tasks.log.jumpToError")),9,Dt),t("button",{disabled:!f.value.length,onClick:J(V,["stop"])},s(l(o)("tasks.log.copy")),9,Bt),t("button",{disabled:!f.value.length,onClick:J(z,["stop"])},s(l(o)("tasks.log.download")),9,Mt),t("span",Ut,s(l(o)("tasks.log.count",{n:f.value.length})),1)]),p.value?(n(),i("p",jt,s(l(o)("tasks.log.unavailable")),1)):f.value.length?(n(),i("pre",{key:2,ref_key:"logBody",ref:v,class:"log-lines",onScrollPassive:G},s(I.value),545)):(n(),i("p",Pt,s(l(o)("tasks.log.empty")),1))])):M("",!0)],2))}}),Gt={class:"tasks-board"},Xt={class:"tasks-board-header"},Yt=["disabled"],Vt={key:0,class:"task-error"},zt={key:1,class:"task-empty"},qt={key:2,class:"task-empty"},Jt={key:3,class:"tasks-columns"},Wt={class:"tasks-list-panel"},Kt=["aria-label"],Qt={key:0,class:"tasks-tab-empty"},Zt=["data-status","onClick"],te={class:"task-status"},ee={class:"task-row-main"},se=["data-status"],ae={class:"task-detail-header"},le={class:"task-detail-title"},oe={class:"task-status"},ne=["disabled"],ie={key:0,class:"task-progress"},re={class:"task-progress-meta"},ce={key:0},ue={class:"task-progress-track"},de={class:"task-meta-grid"},ve=["title"],he={class:"task-detail-actions"},pe=["href"],ke={key:0,class:"preview-scroll"},me=["href"],_e=["src","alt"],fe={key:0},ge={key:1},be={key:2},ye={key:1},we={key:1,class:"task-detail task-detail-empty"},Ie=lt({__name:"TasksPage",setup(U){const b=_t(),{tasks:o,loading:y,error:w,terminatingId:f}=vt(b),{t:a}=rt();let p,k=0;const v=T([]),_=T({}),h=T({}),d=T(!0);let S="",I="";function R(e){return e.epoch!=null?a("tasks.detail.epochLabel",{n:e.epoch}):e.step!=null?a("tasks.detail.stepLabel",{n:e.step}):""}const D=E(()=>Object.values(_.value).some(e=>e.length>0)),j=E(()=>{const e=[],c=_.value["loss/average"],x=_.value["loss/current"];if(c?.length&&e.push({name:"loss/average",color:"#2563eb",points:c}),x?.length&&e.push({name:"loss/current",color:"#d97706",points:x}),!e.length)for(const[C,u]of Object.entries(_.value))u.length&&e.push({name:C,color:e.length?"#d97706":"#2563eb",points:u});return e});async function P(e){try{const[c,x]=await Promise.all([st.previews(e),st.metrics(e)]);d.value=c.preview_enabled!==!1;const C=c.images;if(C.length>0){const L=C.map(q=>`${q.name}:${q.mtime}`).join("|");L!==S&&(S=L,v.value=C)}const u=x.tags;if(Object.values(u).some(L=>L.length>0)){const L=Object.entries(u).map(([q,at])=>`${q}:${at.length}:${at[at.length-1]?.step??0}`).join("|");L!==I&&(I=L,_.value=u)}x.progress&&Object.keys(x.progress).length>0&&(h.value=x.progress)}catch{}}const H=E(()=>({CREATED:a("tasks.status.created"),RUNNING:a("tasks.status.running"),FINISHED:a("tasks.status.finished"),TERMINATED:a("tasks.status.terminated"),FAILED:a("tasks.status.failed")})),N=T("running"),$=T(""),F=E(()=>[...o.value].reverse()),X=E(()=>F.value.filter(e=>e.status==="RUNNING"||e.status==="CREATED")),Y=E(()=>F.value.filter(e=>e.status!=="RUNNING"&&e.status!=="CREATED")),G=E(()=>N.value==="running"?X.value:Y.value),m=E(()=>o.value.find(e=>e.id===$.value));function V(e){return String(e.metadata.output_name||e.metadata.trainer_file||e.metadata.backend||a("tasks.defaultName"))}function z(e){return String(e.metadata.config_path||e.metadata.command||a("tasks.noDetail"))}function r(e){$.value=e.id}Q(G,e=>{e.some(c=>c.id===$.value)||($.value=e[0]?.id??"")},{immediate:!0}),Q($,e=>{v.value=[],_.value={},h.value={},d.value=!0,S="",I="",e&&P(e)}),Q(()=>m.value?.status,(e,c)=>{(c==="RUNNING"||c==="CREATED")&&e&&!(e==="RUNNING"||e==="CREATED")&&$.value&&P($.value)});async function g(e){try{await ut.confirm(a("tasks.terminate.confirm",{id:e.id}),a("tasks.terminate.title"),{confirmButtonText:a("tasks.terminate.confirmButton"),cancelButtonText:a("tasks.terminate.cancel"),type:"warning"}),await b.terminate(e.id),Z.success(a("tasks.terminate.success"))}catch(c){c!=="cancel"&&c!=="close"&&Z.error(c instanceof Error?c.message:a("tasks.terminate.fail"))}}return ht(async()=>{await b.refresh(),p=window.setInterval(()=>{if(!o.value.some(x=>x.status==="RUNNING"||x.status==="CREATED"))return;b.refresh({silent:!0}),k+=1;const c=m.value;c&&(c.status==="RUNNING"||c.status==="CREATED")&&k%4===0&&P(c.id)},2e3)}),ct(()=>window.clearInterval(p)),(e,c)=>{const x=nt("el-icon"),C=nt("RouterLink");return n(),i("div",Gt,[t("header",Xt,[t("h1",null,s(l(a)("tasks.title")),1),t("button",{class:"ghost-button",disabled:l(y),onClick:c[0]||(c[0]=u=>l(b).refresh())},[W(x,null,{default:ot(()=>[W(l(pt))]),_:1}),O(s(l(a)("tasks.refresh")),1)],8,Yt)]),l(w)?(n(),i("div",Vt,[t("strong",null,s(l(a)("tasks.loadError")),1),t("span",null,s(l(w)),1),t("button",{onClick:c[1]||(c[1]=u=>l(b).refresh())},s(l(a)("tasks.retry")),1)])):l(y)&&!l(o).length?(n(),i("div",zt,s(l(a)("tasks.loading")),1)):l(o).length?(n(),i("div",Jt,[t("aside",Wt,[t("div",{class:"tasks-tabs",role:"group","aria-label":l(a)("tasks.filterAria")},[t("button",{class:B({active:N.value==="running"}),onClick:c[2]||(c[2]=u=>N.value="running")},[O(s(l(a)("tasks.tabs.running")),1),t("b",null,s(X.value.length),1)],2),t("button",{class:B({active:N.value==="recent"}),onClick:c[3]||(c[3]=u=>N.value="recent")},[O(s(l(a)("tasks.tabs.recent")),1),t("b",null,s(Y.value.length),1)],2)],8,Kt),G.value.length?M("",!0):(n(),i("p",Qt,s(l(a)("tasks.tabEmpty")),1)),(n(!0),i(tt,null,et(G.value,u=>(n(),i("article",{key:u.id,class:B(["task-row",{selected:u.id===$.value}]),"data-status":u.status.toLowerCase(),onClick:L=>r(u)},[t("span",te,s(H.value[u.status]||u.status),1),t("div",ee,[t("h2",null,s(V(u)),1),t("code",null,s(u.id),1)])],10,Zt))),128))]),m.value?(n(),i("section",{key:0,class:"task-detail","data-status":m.value.status.toLowerCase()},[t("header",ae,[t("div",le,[t("h2",null,s(V(m.value)),1),t("span",oe,s(H.value[m.value.status]||m.value.status),1)]),m.value.status==="RUNNING"?(n(),i("button",{key:0,class:"danger-action",disabled:l(f)===m.value.id,onClick:c[4]||(c[4]=u=>g(m.value))},s(l(f)===m.value.id?l(a)("tasks.detail.stopping"):l(a)("tasks.detail.stop")),9,ne)):M("",!0)]),h.value.total_steps?(n(),i("div",ie,[t("div",re,[t("span",null,s(l(a)("tasks.detail.stepProgress",{step:h.value.step,total:h.value.total_steps})),1),h.value.total_epochs?(n(),i("span",ce,s(l(a)("tasks.detail.epochProgress",{epoch:h.value.epoch,total:h.value.total_epochs})),1)):M("",!0),t("b",null,s(h.value.percent)+"%",1)]),t("div",ue,[t("i",{style:it({width:`${h.value.percent}%`})},null,4)])])):M("",!0),t("dl",de,[t("div",null,[t("dt",null,s(l(a)("tasks.detail.taskId")),1),t("dd",null,[t("code",null,s(m.value.id),1)])]),t("div",null,[t("dt",null,s(l(a)("tasks.detail.config")),1),t("dd",{title:z(m.value)},s(z(m.value)),9,ve)]),t("div",null,[t("dt",null,s(l(a)("tasks.detail.returncode")),1),t("dd",null,s(m.value.returncode??"-"),1)])]),t("div",he,[t("a",{class:"ghost-button",href:`/train-log?task_id=${encodeURIComponent(m.value.id)}`,target:"_blank",rel:"noreferrer"},s(l(a)("tasks.detail.viewLog")),9,pe),W(C,{class:"ghost-button",to:"/tensorboard.html"},{default:ot(()=>[O(s(l(a)("tasks.detail.tensorboard")),1)]),_:1})]),t("section",{class:B(["task-preview-strip task-placeholder",{"has-data":v.value.length>0}])},[t("header",null,s(l(a)("tasks.detail.previewTitle")),1),v.value.length?(n(),i("div",ke,[(n(!0),i(tt,null,et(v.value,u=>(n(),i("div",{key:u.name,class:"preview-item"},[t("a",{href:u.url,target:"_blank",rel:"noreferrer"},[t("img",{src:u.thumb_url||u.url,alt:u.name,loading:"lazy"},null,8,_e)],8,me),R(u)?(n(),i("span",fe,s(R(u)),1)):M("",!0)]))),128))])):d.value?(n(),i("p",be,s(l(a)("tasks.detail.previewEmpty")),1)):(n(),i("p",ge,s(l(a)("tasks.detail.previewDisabled")),1))],2),t("section",{class:B(["task-loss-panel task-placeholder",{"has-data":D.value}])},[t("header",null,s(l(a)("tasks.detail.lossTitle")),1),D.value?(n(),kt(Nt,{key:0,series:j.value},null,8,["series"])):(n(),i("p",ye,s(l(a)("tasks.detail.lossEmpty")),1))],2),W(Ft,{"task-id":m.value.id,status:m.value.status},null,8,["task-id","status"])],8,se)):(n(),i("section",we,[t("p",null,s(l(a)("tasks.detail.empty")),1)]))])):(n(),i("div",qt,[t("strong",null,s(l(a)("tasks.emptyTitle")),1),t("span",null,s(l(a)("tasks.emptyDesc")),1)]))])}}});export{Ie as default}; diff --git a/frontend/dist/assets/ToolsPage-DH5QX7Cd.js b/frontend/dist/assets/ToolsPage-DXtU4veE.js similarity index 94% rename from frontend/dist/assets/ToolsPage-DH5QX7Cd.js rename to frontend/dist/assets/ToolsPage-DXtU4veE.js index 79a418a5..f5c37682 100644 --- a/frontend/dist/assets/ToolsPage-DH5QX7Cd.js +++ b/frontend/dist/assets/ToolsPage-DXtU4veE.js @@ -1 +1 @@ -import{A as S,d as T,u as E,c as i,a as e,t as r,b as a,B as m,C as P,F as y,r as h,s as v,D as B,o as u,E as b}from"./index-BlvrX0Zy.js";import{E as k}from"./index-DNZgQ1o0.js";const V=["networks/extract_lora_from_models.py","networks/extract_lora_from_dylora.py","networks/merge_lora.py","tools/merge_models.py"],L={run:(_,t)=>S("/api/run_script",{method:"POST",body:JSON.stringify({script_name:_,...t})})},R={class:"simple-page"},U={class:"settings-card"},x={for:"tool-script"},F=["value"],I={class:"argument-heading"},N=["onUpdate:modelValue","placeholder"],O=["onUpdate:modelValue","placeholder"],D=["aria-label","onClick"],M={class:"form-actions"},q=["disabled"],$=T({__name:"ToolsPage",setup(_){const{t}=E(),p=v(V[0]),n=B([{key:"",value:""}]),c=v(!1);function f(){n.push({key:"",value:""})}function w(l){n.splice(l,1),n.length||f()}function A(l){if(l==="true")return!0;if(l==="false")return!1;const o=Number(l);return l!==""&&Number.isFinite(o)?o:l}async function C(){const l={};for(const o of n){const s=o.key.trim().replace(/^--/,"");s&&(l[s]=A(o.value.trim()))}c.value=!0;try{await L.run(p.value,l),k.success(t("tools.msg.submitted"))}catch(o){k.error(o instanceof Error?o.message:t("tools.msg.submitFail"))}finally{c.value=!1}}return(l,o)=>(u(),i("div",R,[e("header",null,[o[1]||(o[1]=e("span",{class:"eyebrow"},"SCRIPT TOOLS",-1)),e("h1",null,r(a(t)("tools.title")),1),e("p",null,r(a(t)("tools.subtitle")),1)]),e("section",U,[e("label",x,r(a(t)("tools.scriptLabel")),1),m(e("select",{id:"tool-script","onUpdate:modelValue":o[0]||(o[0]=s=>p.value=s)},[(u(!0),i(y,null,h(a(V),s=>(u(),i("option",{key:s,value:s},r(s),9,F))),128))],512),[[P,p.value]]),e("div",I,[e("strong",null,r(a(t)("tools.argsTitle")),1),e("button",{onClick:f},r(a(t)("tools.addArg")),1)]),(u(!0),i(y,null,h(n,(s,g)=>(u(),i("div",{key:g,class:"argument-row"},[m(e("input",{"onUpdate:modelValue":d=>s.key=d,placeholder:a(t)("tools.argKeyPlaceholder")},null,8,N),[[b,s.key]]),m(e("input",{"onUpdate:modelValue":d=>s.value=d,placeholder:a(t)("tools.argValuePlaceholder")},null,8,O),[[b,s.value]]),e("button",{"aria-label":a(t)("tools.removeArgAria"),onClick:d=>w(g)},"×",8,D)]))),128)),e("div",M,[e("button",{class:"primary-action",disabled:c.value,onClick:C},r(c.value?a(t)("tools.submitting"):a(t)("tools.run")),9,q)])])]))}});export{$ as default}; +import{A as S,d as T,u as E,c as i,a as e,t as r,b as a,B as m,C as P,F as y,r as h,s as v,D as B,o as u,E as b}from"./index-jfqf0I3j.js";import{E as k}from"./index-tjV5EgBi.js";const V=["networks/extract_lora_from_models.py","networks/extract_lora_from_dylora.py","networks/merge_lora.py","tools/merge_models.py"],L={run:(_,t)=>S("/api/run_script",{method:"POST",body:JSON.stringify({script_name:_,...t})})},R={class:"simple-page"},U={class:"settings-card"},x={for:"tool-script"},F=["value"],I={class:"argument-heading"},N=["onUpdate:modelValue","placeholder"],O=["onUpdate:modelValue","placeholder"],D=["aria-label","onClick"],M={class:"form-actions"},q=["disabled"],$=T({__name:"ToolsPage",setup(_){const{t}=E(),p=v(V[0]),n=B([{key:"",value:""}]),c=v(!1);function f(){n.push({key:"",value:""})}function w(l){n.splice(l,1),n.length||f()}function A(l){if(l==="true")return!0;if(l==="false")return!1;const o=Number(l);return l!==""&&Number.isFinite(o)?o:l}async function C(){const l={};for(const o of n){const s=o.key.trim().replace(/^--/,"");s&&(l[s]=A(o.value.trim()))}c.value=!0;try{await L.run(p.value,l),k.success(t("tools.msg.submitted"))}catch(o){k.error(o instanceof Error?o.message:t("tools.msg.submitFail"))}finally{c.value=!1}}return(l,o)=>(u(),i("div",R,[e("header",null,[o[1]||(o[1]=e("span",{class:"eyebrow"},"SCRIPT TOOLS",-1)),e("h1",null,r(a(t)("tools.title")),1),e("p",null,r(a(t)("tools.subtitle")),1)]),e("section",U,[e("label",x,r(a(t)("tools.scriptLabel")),1),m(e("select",{id:"tool-script","onUpdate:modelValue":o[0]||(o[0]=s=>p.value=s)},[(u(!0),i(y,null,h(a(V),s=>(u(),i("option",{key:s,value:s},r(s),9,F))),128))],512),[[P,p.value]]),e("div",I,[e("strong",null,r(a(t)("tools.argsTitle")),1),e("button",{onClick:f},r(a(t)("tools.addArg")),1)]),(u(!0),i(y,null,h(n,(s,g)=>(u(),i("div",{key:g,class:"argument-row"},[m(e("input",{"onUpdate:modelValue":d=>s.key=d,placeholder:a(t)("tools.argKeyPlaceholder")},null,8,N),[[b,s.key]]),m(e("input",{"onUpdate:modelValue":d=>s.value=d,placeholder:a(t)("tools.argValuePlaceholder")},null,8,O),[[b,s.value]]),e("button",{"aria-label":a(t)("tools.removeArgAria"),onClick:d=>w(g)},"×",8,D)]))),128)),e("div",M,[e("button",{class:"primary-action",disabled:c.value,onClick:C},r(c.value?a(t)("tools.submitting"):a(t)("tools.run")),9,q)])])]))}});export{$ as default}; diff --git a/frontend/dist/assets/TrainingWorkbenchPage-ByP70JIG.js b/frontend/dist/assets/TrainingWorkbenchPage-ByP70JIG.js deleted file mode 100644 index 65b91153..00000000 --- a/frontend/dist/assets/TrainingWorkbenchPage-ByP70JIG.js +++ /dev/null @@ -1,34 +0,0 @@ -import{d as ee,u as te,c as $,a as m,t as b,p as P,F as U,b as y,e as L,R as pt,w as K,f as ie,h as z,o as k,K as Y,i as G,m as Z,j as J,r as H,q as lt,s as F,B as de,L as ht,y as Ge,k as ce,l as Ze,M as Bt,N as zt,G as yt,O as Ue,P as vt,Q as Lt,n as Kt,S as Pe,C as ut,T as Ut}from"./index-BlvrX0Zy.js";import{E as R}from"./index-DNZgQ1o0.js";import{E as ue}from"./index-DILr9bpz.js";import{e as Re,l as Jt,r as qt}from"./prefs-L1LFxgf4.js";import{s as ge}from"./schemas-BVh9ipN3.js";import{u as Ht}from"./tasks-CTZb2r1_.js";const Wt=["data-state"],Gt={class:"engine-status-copy"},Zt={key:0},Yt={class:"engine-status-actions"},Xt=["disabled"],Qt=["disabled"],en=["disabled"],tn=ee({__name:"EngineStatusBar",props:{state:{},title:{},hint:{},loading:{type:Boolean},showInstall:{type:Boolean},showReinstall:{type:Boolean},showRefresh:{type:Boolean,default:!1},manageOnly:{type:Boolean,default:!1},manageTo:{default:"/settings/engines"}},emits:["refresh","install","reinstall"],setup(e,{emit:t}){const n=e,r=t,{t:a}=te(),i=z(()=>{if(n.title)return n.title;const g=`settings.engines.state.${n.state}`,f=a(g);return f===g?n.state:f}),u=z(()=>{if(n.hint)return n.hint;const g=`settings.engines.hint.${n.state}`,f=a(g);return f===g?"":f});return(g,f)=>(k(),$("div",{class:"engine-status-bar","data-state":e.state,"data-testid":"engine-status-bar"},[m("div",Gt,[m("b",null,b(i.value),1),u.value?(k(),$("span",Zt,b(u.value),1)):P("",!0)]),m("div",Yt,[e.manageOnly?P("",!0):(k(),$(U,{key:0},[e.showRefresh?(k(),$("button",{key:0,type:"button",class:"ghost-button",disabled:e.loading,onClick:f[0]||(f[0]=c=>r("refresh"))},b(y(a)("settings.engines.actions.refresh")),9,Xt)):P("",!0),e.showInstall?(k(),$("button",{key:1,type:"button",class:"ghost-button",disabled:e.loading,onClick:f[1]||(f[1]=c=>r("install"))},b(y(a)("settings.engines.actions.install")),9,Qt)):P("",!0),e.showReinstall?(k(),$("button",{key:2,type:"button",class:"ghost-button",disabled:e.loading,onClick:f[2]||(f[2]=c=>r("reinstall"))},b(y(a)("settings.engines.actions.reinstall")),9,en)):P("",!0)],64)),L(y(pt),{class:"ghost-button",to:e.manageTo},{default:K(()=>[ie(b(y(a)("settings.engines.actions.manage")),1)]),_:1},8,["to"])])],8,Wt))}});let nn=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i;class se extends Date{#t=!1;#n=!1;#e=null;constructor(t){let n=!0,r=!0,a="Z";if(typeof t=="string"){let i=t.match(nn);i?(i[1]||(n=!1,t=`0000-01-01T${t}`),r=!!i[2],r&&t[10]===" "&&(t=t.replace(" ","T")),i[2]&&+i[2]>23?t="":(a=i[3]||null,t=t.toUpperCase(),!a&&r&&(t+="Z"))):t=""}super(t),isNaN(this.getTime())||(this.#t=n,this.#n=r,this.#e=a)}isDateTime(){return this.#t&&this.#n}isLocal(){return!this.#t||!this.#n||!this.#e}isDate(){return this.#t&&!this.#n}isTime(){return this.#n&&!this.#t}isValid(){return this.#t||this.#n}toISOString(){let t=super.toISOString();if(this.isDate())return t.slice(0,10);if(this.isTime())return t.slice(11,23);if(this.#e===null)return t.slice(0,-1);if(this.#e==="Z")return t;let n=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return n=this.#e[0]==="-"?n:-n,new Date(this.getTime()-n*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(t,n="Z"){let r=new se(t);return r.#e=n,r}static wrapAsLocalDateTime(t){let n=new se(t);return n.#e=null,n}static wrapAsLocalDate(t){let n=new se(t);return n.#n=!1,n.#e=null,n}static wrapAsLocalTime(t){let n=new se(t);return n.#t=!1,n.#e=null,n}}function rn(e,t){let n=e.slice(0,t).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function an(e,t,n){let r=e.split(/\r\n|\n|\r/g),a="",i=(Math.log10(t+1)|0)+1;for(let u=t-1;u<=t+1;u++){let g=r[u-1];g&&(a+=u.toString().padEnd(i," "),a+=": ",a+=g,a+=` -`,u===t&&(a+=" ".repeat(i+n+2),a+=`^ -`))}return a}class j extends Error{line;column;codeblock;constructor(t,n){const[r,a]=rn(n.toml,n.ptr),i=an(n.toml,r,a);super(`Invalid TOML document: ${t} - -${i}`,n),this.line=r,this.column=a,this.codeblock=i}}let on=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,sn=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,ln=/^[+-]?0[0-9_]/;function bt(e,t){let n=e[t++],r=n,a=n==="'",i=n===e[t]&&n===e[t+1];i&&(e[t+=2]===` -`?t++:e[t]==="\r"&&e[t+1]===` -`&&(t+=2));let u="",g=t,f=0;for(let c=t;c=48&&_<=57?_-48:_>=65&&_<=70?_-65+10:_>=97&&_<=102?_-97+10:-1;if(v<0)throw new j("invalid non-hex character in unicode escape",{toml:e,ptr:c+1});w=w<<4|v}if(w<0||w>1114111||w>=55296&&w<=57343)throw new j("invalid unicode escape",{toml:e,ptr:c});u+=String.fromCodePoint(w),g=c+1,f=0}else if(n===" "||n===" ")f=2;else{if(n==="b")u+="\b";else if(n==="t")u+=" ";else if(n==="n")u+=` -`;else if(n==="f")u+="\f";else if(n==="r")u+="\r";else if(n==="e")u+="\x1B";else if(n==='"')u+='"';else if(n==="\\")u+="\\";else throw new j("unrecognized escape sequence",{toml:e,ptr:c});g=c+1,f=0}else if(n!==" "&&n!==" "){if(f===2)throw new j("invalid escape: only line-ending whitespace may be escaped",{toml:e,ptr:g});f=!a&&n==="\\"?1:0,g=c}}throw new j("unfinished string",{toml:e,ptr:t})}function un(e,t,n,r){if(e==="true")return!0;if(e==="false")return!1;if(e==="-inf")return-1/0;if(e==="inf"||e==="+inf")return 1/0;if(e==="nan"||e==="+nan"||e==="-nan")return NaN;if(e==="-0")return r?0n:0;let a=on.test(e);if(a||sn.test(e)){if(ln.test(e))throw new j("leading zeroes are not allowed",{toml:t,ptr:n});e=e.replace(/_/g,"");let u=+e;if(isNaN(u))throw new j("invalid number",{toml:t,ptr:n});if(a){if((a=!Number.isSafeInteger(u))&&!r)throw new j("integer value cannot be represented losslessly",{toml:t,ptr:n});(a||r===!0)&&(u=BigInt(e))}return u}const i=new se(e);if(!i.isValid())throw new j("invalid value",{toml:t,ptr:n});return i}function Je(e,t=0,n=e.length){let r=e.indexOf(` -`,t);return e[r-1]==="\r"&&r--,r<=n?r:-1}function Ie(e,t){for(let n=t;n-1&&(Ie(e,a),r=r.slice(0,a)),[r.trimEnd(),a]}function Ye(e,t,n,r,a){if(r===0)throw new j("document contains excessively nested structures. aborting.",{toml:e,ptr:t});let i=e[t];if(i==="["||i==="{"){let[f,c]=i==="["?mn(e,t,r,a):gn(e,t,r,a);if(n){if(c=re(e,c),e[c]===",")c++;else if(e[c]!==n)throw new j("expected comma or end of structure",{toml:e,ptr:c})}return[f,c]}if(i==='"'||i==="'"){let[f,c]=bt(e,t);if(n){if(c=re(e,c),e[c]&&e[c]!==","&&e[c]!==n&&e[c]!==` -`&&e[c]!=="\r")throw new j("unexpected character encountered",{toml:e,ptr:c});e[c]===","&&c++}return[f,c]}let u=cn(e,t,",",n),g=fn(e,t,u-(e[u-1]===","?1:0));if(!g[0])throw new j("incomplete key-value declaration: no value specified",{toml:e,ptr:t});return n&&g[1]>-1&&(u=re(e,t+g[1]),e[u]===","&&u++),[un(g[0],e,t,a),u]}let dn=/^[a-zA-Z0-9-_]+[ \t]*$/;function qe(e,t,n="="){let r=t-1,a=[],i=e.indexOf(n,t);if(i<0)throw new j("incomplete key-value: cannot find end of key",{toml:e,ptr:t});do{let u=e[t=++r];if(u!==" "&&u!==" ")if(u==='"'||u==="'"){if(u===e[t+1]&&u===e[t+2])throw new j("multiline strings are not allowed in keys",{toml:e,ptr:t});let[g,f]=bt(e,t);r=e.indexOf(".",f);let c=e.slice(f,r<0||r>i?i:r),w=Je(c);if(w>-1)throw new j("newlines are not allowed in keys",{toml:e,ptr:t+r+w});if(c.trimStart())throw new j("found extra tokens after the string part",{toml:e,ptr:f});if(ii?i:r);if(!dn.test(g))throw new j("only letter, numbers, dashes and underscores are allowed in keys",{toml:e,ptr:t});a.push(g.trimEnd())}}while(r+1&&rt(n,r)))}function ne(e,t){return Object.fromEntries(Object.entries(e).map(([n,r])=>[n,t(r,n)]))}function _n(e,t,n){if(!t)return{...e};const r={};for(const a of t)e[a]!==void 0&&(r[a]=e[a]);return r}function ae(e,t){return arguments.length===1?n=>ae(e,n):e in globalThis&&t instanceof globalThis[e]||Object.prototype.toString.call(t).slice(8,-1)===e}function Te(e){return ae("ArrayBuffer",e)||ae("SharedArrayBuffer",e)}function wn(e){return Te(e)||ArrayBuffer.isView(e)}var X;(e=>{e.is=Te,e.isSource=wn;function t(u){return ArrayBuffer.isView(u)?u.buffer.slice(u.byteOffset,u.byteOffset+u.byteLength):u}e.fromSource=t;function n(u){if(u=t(u),typeof Buffer<"u")return Buffer.from(u).toString("base64");let g="";const f=new Uint8Array(u);for(let c=0;cg.charCodeAt(0))}e.fromBase64=r;function a(u){return u=t(u),typeof Buffer<"u"?Buffer.from(u).toString("hex"):Array.from(new Uint8Array(u),g=>g.toString(16).padStart(2,"0")).join("")}e.toHex=a;function i(u){if(typeof Buffer<"u")return t(Buffer.from(u,"hex"));const g=u.length%2===0?u:u.slice(0,u.length-1),f=[];for(let c=0;c{a[u]=Reflect.apply(He,null,[i,t])}),a}const r=Object.create(Object.getPrototypeOf(e));t.set(e,r);for(const a of Reflect.ownKeys(e)){const i={...Reflect.getOwnPropertyDescriptor(e,a)};"value"in i&&(i.value=Reflect.apply(He,null,[i.value,t])),Reflect.defineProperty(r,a,i)}return r}function fe(e,t,n){if(e===t||!n&&q(e)&&q(t))return!0;if(typeof e!=typeof t||typeof e!="object"||!e||!t)return!1;function r(a,i){return a(e)?a(t)?i(e,t):!1:a(t)?!1:void 0}return r(Array.isArray,(a,i)=>a.length===i.length&&a.every((u,g)=>fe(u,i[g])))??r(ae("Date"),(a,i)=>a.valueOf()===i.valueOf())??r(ae("RegExp"),(a,i)=>a.source===i.source&&a.flags===i.flags)??r(Te,(a,i)=>{if(a.byteLength!==i.byteLength)return!1;const u=new Uint8Array(a),g=new Uint8Array(i);for(let f=0;ffe(e[a],t[a],n))}var dt;(e=>{e.millisecond=1,e.second=1e3,e.minute=e.second*60,e.hour=e.minute*60,e.day=e.hour*24,e.week=e.day*7;let t=new Date().getTimezoneOffset();function n(_){t=_}e.setTimezoneOffset=n;function r(){return t}e.getTimezoneOffset=r;function a(_=new Date,v){return typeof _=="number"&&(_=new Date(_)),v===void 0&&(v=t),Math.floor((_.valueOf()/e.minute-v)/1440)}e.getDateNumber=a;function i(_,v){const I=new Date(_*e.day);return v===void 0&&(v=t),new Date(+I+v*e.minute)}e.fromDateNumber=i;const u=/\d+(?:\.\d+)?/.source,g=new RegExp(`^${["w(?:eek(?:s)?)?","d(?:ay(?:s)?)?","h(?:our(?:s)?)?","m(?:in(?:ute)?(?:s)?)?","s(?:ec(?:ond)?(?:s)?)?"].map(_=>`(${u}${_})?`).join("")}$`);function f(_){const v=g.exec(_);return v?(parseFloat(v[1])*e.week||0)+(parseFloat(v[2])*e.day||0)+(parseFloat(v[3])*e.hour||0)+(parseFloat(v[4])*e.minute||0)+(parseFloat(v[5])*e.second||0):0}e.parseTime=f;function c(_){const v=f(_);return v?_=Date.now()+v:/^\d{1,2}(:\d{1,2}){1,2}$/.test(_)?_=`${new Date().toLocaleDateString()}-${_}`:/^\d{1,2}-\d{1,2}-\d{1,2}(:\d{1,2}){1,2}$/.test(_)&&(_=`${new Date().getFullYear()}-${_}`),_?new Date(_):new Date}e.parseDate=c;function w(_){const v=Math.abs(_);return v>=e.day-e.hour/2?Math.round(_/e.day)+"d":v>=e.hour-e.minute/2?Math.round(_/e.hour)+"h":v>=e.minute-e.second/2?Math.round(_/e.minute)+"m":v>=e.second?Math.round(_/e.second)+"s":_+"ms"}e.format=w;function O(_,v=2){return _.toString().padStart(v,"0")}e.toDigits=O;function A(_,v=new Date){return _.replace("yyyy",v.getFullYear().toString()).replace("yy",v.getFullYear().toString().slice(2)).replace("MM",O(v.getMonth()+1)).replace("dd",O(v.getDate())).replace("hh",O(v.getHours())).replace("mm",O(v.getMinutes())).replace("ss",O(v.getSeconds())).replace("SSS",O(v.getMilliseconds(),3))}e.template=A})(dt||(dt={}));var kn=Object.defineProperty,xn=Object.getOwnPropertyNames,M=(e,t)=>kn(e,"name",{value:t,configurable:!0}),Sn=(e,t)=>function(){return t||(0,e[xn(e)[0]])((t={exports:{}}).exports,t),t.exports},$n=Sn({"src/index.ts"(e,t){var D;var n=Symbol.for("schemastery"),r=Symbol.for("ValidationError");globalThis.__schemastery_index__??=0,globalThis.__schemastery_refs__=void 0;var a=(D=class extends TypeError{constructor(s,o){let d="$";for(const p of o.path||[])typeof p=="string"?d+="."+p:typeof p=="number"?d+="["+p+"]":typeof p=="symbol"&&(d+=`[Symbol(${p.toString()})]`);d.startsWith(".")&&(d=d.slice(1)),super((d==="$"?"":`${d} `)+s),this.options=o}name="ValidationError";static is(s){return!!s?.[r]}},M(D,"ValidationError"),D);Object.defineProperty(a.prototype,r,{value:!0});var i=M(function(l){const s=M(function(o,d={}){return i.resolve(o,s,d)[0]},"schema");if(l.refs){const o=ne(l.refs,p=>new i(p)),d=M(p=>o[p],"getRef");for(const p in o){const h=o[p];h.sKey=d(h.sKey),h.inner=d(h.inner),h.list=h.list&&h.list.map(d),h.dict=h.dict&&ne(h.dict,d)}return o[l.uid]}if(Object.assign(s,l),typeof s.callback=="string")try{s.callback=new Function("return "+s.callback)()}catch{}return Object.defineProperty(s,"uid",{value:globalThis.__schemastery_index__++}),Object.setPrototypeOf(s,i.prototype),s.meta||={},s.toString=s.toString.bind(s),s},"Schema");i.prototype=Object.create(Function.prototype),i.prototype[n]=!0,Object.defineProperty(i.prototype,"~standard",{get(){return{version:1,vendor:"schemastery",validate:M(l=>{try{return{value:i.resolve(l,this,{})[0]}}catch(s){if(a.is(s))return{issues:[{message:s.message,path:s.options.path}]};throw s}},"validate")}}}),i.ValidationError=a,i.prototype.toJSON=M(function(){if(globalThis.__schemastery_refs__)return globalThis.__schemastery_refs__[this.uid]??=JSON.parse(JSON.stringify({...this})),this.uid;globalThis.__schemastery_refs__={[this.uid]:{...this}},globalThis.__schemastery_refs__[this.uid]=JSON.parse(JSON.stringify({...this}));const s={uid:this.uid,refs:globalThis.__schemastery_refs__};return globalThis.__schemastery_refs__=void 0,s},"toJSON"),i.prototype.set=M(function(s,o){return this.dict[s]=o,this},"set"),i.prototype.push=M(function(s){return this.list.push(s),this},"push");function u(l,s){const o=typeof l=="string"?{"":l}:{...l};for(const d in s){const p=s[d];p?.$description||p?.$desc?o[d]=p.$description||p.$desc:typeof p=="string"&&(o[d]=p)}return o}M(u,"mergeDesc");function g(l){return l?.$value??l?.$inner}M(g,"getInner");function f(l){return bn(l??{},s=>!s.startsWith("$"))}M(f,"extractKeys"),i.prototype.i18n=M(function(s){const o=i(this),d=u(o.meta.description,s);return Object.keys(d).length&&(o.meta.description=d),o.dict&&(o.dict=ne(o.dict,(p,h)=>p.i18n(ne(s,S=>g(S)?.[h]??S?.[h])))),o.list&&(o.list=o.list.map((p,h)=>p.i18n(ne(s,(S={})=>Array.isArray(g(S))?g(S)[h]:Array.isArray(S)?S[h]:f(S))))),o.inner&&(o.inner=o.inner.i18n(ne(s,p=>g(p)?g(p):f(p)))),o.sKey&&(o.sKey=o.sKey.i18n(ne(s,p=>p?.$key))),o},"i18n"),i.prototype.extra=M(function(s,o){const d=i(this);return d.meta={...d.meta,[s]:o},d},"extra");for(const l of["required","disabled","collapse","hidden","loose"])Object.assign(i.prototype,{[l](s=!0){const o=i(this);return o.meta={...o.meta,[l]:s},o}});i.prototype.deprecated=M(function(){const s=i(this);return s.meta.badges||=[],s.meta.badges.push({text:"deprecated",type:"danger"}),s},"deprecated"),i.prototype.experimental=M(function(){const s=i(this);return s.meta.badges||=[],s.meta.badges.push({text:"experimental",type:"warning"}),s},"experimental"),i.prototype.pattern=M(function(s){const o=i(this),d=_n(s,["source","flags"]);return o.meta={...o.meta,pattern:d},o},"pattern"),i.prototype.simplify=M(function(s){if(fe(s,this.meta.default,this.type==="dict"))return null;if(q(s))return s;if(this.type==="object"||this.type==="dict"){const o={};for(const d in s){const h=(this.type==="object"?this.dict[d]:this.inner)?.simplify(s[d]);(this.type==="dict"||!q(h))&&(o[d]=h)}return fe(o,this.meta.default,this.type==="dict")?null:o}else if(this.type==="array"||this.type==="tuple"){const o=[];return s.forEach((d,p)=>{const h=this.type==="array"?this.inner:this.list[p],S=h?h.simplify(d):d;o.push(S)}),o}else if(this.type==="intersect"){const o={};for(const d of this.list)Object.assign(o,d.simplify(s));return o}else if(this.type==="union")for(const o of this.list)try{return i.resolve(s,o,{}),o.simplify(s)}catch{}return s},"simplify"),i.prototype.toString=M(function(s){return I[this.type]?.(this,s)??`Schema<${this.type}>`},"toString"),i.prototype.role=M(function(l,s){const o=i(this);return o.meta={...o.meta,role:l,extra:s},o},"role");for(const l of["default","link","comment","description","max","min","step"])Object.assign(i.prototype,{[l](s){const o=i(this);return o.meta={...o.meta,[l]:s},o}});var c={};i.extend=M(function(s,o){c[s]=o},"extend"),i.resolve=M(function(s,o,d={},p=!1){if(!o)return[s];if(d.ignore?.(s,o))return[s];if(q(s)&&o.type!=="lazy"){if(o.meta.required)throw new a("missing required value",d);let S=o,C=o.meta.default;for(;S?.type==="intersect"&&q(C);)S=S.list[0],C=S?.meta.default;if(q(C))return[s];s=He(C)}const h=c[o.type];if(!h)throw new a(`unsupported type "${o.type}"`,d);try{return h(s,o,d,p)}catch(S){if(!o.meta.loose)throw S;return[o.meta.default]}},"resolve"),i.from=M(function(s){if(q(s))return i.any();if(["string","number","boolean"].includes(typeof s))return i.const(s).required();if(s[n])return s;if(typeof s=="function")switch(s){case String:return i.string().required();case Number:return i.number().required();case Boolean:return i.boolean().required();case Function:return i.function().required();default:return i.is(s).required()}else throw new TypeError(`cannot infer schema from ${s}`)},"from"),i.lazy=M(function(s){const o=M(()=>(d.inner[n]||(d.inner=d.builder(),d.inner.meta={...d.meta,...d.inner.meta}),d.inner.toJSON()),"toJSON"),d=new i({type:"lazy",builder:s,inner:{toJSON:o}});return d},"lazy"),i.natural=M(function(){return i.number().step(1).min(0)},"natural"),i.percent=M(function(){return i.number().step(.01).min(0).max(1).role("slider")},"percent"),i.date=M(function(){return i.union([i.is(Date),i.transform(i.string().role("datetime"),(s,o)=>{const d=new Date(s);if(isNaN(+d))throw new a(`invalid date "${s}"`,o);return d},!0)])},"date"),i.regExp=M(function(s=""){return i.union([i.is(RegExp),i.transform(i.string().role("regexp",{flag:s}),(o,d)=>{try{return new RegExp(o,s)}catch(p){throw new a(p.message,d)}},!0)])},"regExp"),i.arrayBuffer=M(function(s){return i.union([i.is(ArrayBuffer),i.is(SharedArrayBuffer),i.transform(i.any(),(o,d)=>{if(X.isSource(o))return X.fromSource(o);throw new a(`expected ArrayBufferSource but got ${o}`,d)},!0),...s?[i.transform(i.string(),(o,d)=>{try{return s==="base64"?X.fromBase64(o):X.fromHex(o)}catch(p){throw new a(p.message,d)}},!0)]:[]])},"arrayBuffer"),i.extend("lazy",(l,s,o,d)=>(s.inner[n]||(s.inner=s.builder(),s.inner.meta={...s.meta,...s.inner.meta}),i.resolve(l,s.inner,o,d))),i.extend("any",l=>[l]),i.extend("never",(l,s,o)=>{throw new a(`expected nullable but got ${l}`,o)}),i.extend("const",(l,{value:s},o)=>{if(fe(l,s))return[s];throw new a(`expected ${s} but got ${l}`,o)});function w(l,s,o,d,p=!1){const{max:h=1/0,min:S=-1/0}=s;if(l>h)throw new a(`expected ${o} <= ${h} but got ${l}`,d);if(l= ${S} but got ${l}`,d)}M(w,"checkWithinRange"),i.extend("string",(l,{meta:s},o)=>{if(typeof l!="string")throw new a(`expected string but got ${l}`,o);if(s.pattern){const d=new RegExp(s.pattern.source,s.pattern.flags);if(!d.test(l))throw new a(`expect string to match regexp ${d}`,o)}return w(l.length,s,"string length",o),[l]});function O(l,s){const o=l.toString();if(o.includes("e"))return l*Math.pow(10,s);const d=o.indexOf(".");if(d===-1)return l*Math.pow(10,s);const p=o.slice(d+1),h=o.slice(0,d);return p.length<=s?+(h+p.padEnd(s,"0")):+(h+p.slice(0,s)+"."+p.slice(s))}M(O,"decimalShift");function A(l,s,o){if(o=Math.abs(o),!/^\d+\.\d+$/.test(o.toString()))return(l-s)%o===0;const d=o.toString().indexOf("."),p=o.toString().slice(d+1).length;return Math.abs(O(l,p)-O(s,p))%O(o,p)===0}M(A,"isMultipleOf"),i.extend("number",(l,{meta:s},o)=>{if(typeof l!="number")throw new a(`expected number but got ${l}`,o);w(l,s,"number",o);const{step:d}=s;if(d&&!A(l,s.min??0,d))throw new a(`expected number multiple of ${d} but got ${l}`,o);return[l]}),i.extend("boolean",(l,s,o)=>{if(typeof l=="boolean")return[l];throw new a(`expected boolean but got ${l}`,o)}),i.extend("bitset",(l,{bits:s,meta:o},d)=>{let p=0,h=[];if(typeof l=="number"){p=l;for(const S in s)l&s[S]&&h.push(S)}else if(Array.isArray(l)){h=l;for(const S of h){if(typeof S!="string")throw new a(`expected string but got ${S}`,d);S in s&&(p|=s[S])}}else throw new a(`expected number or array but got ${l}`,d);return p===o.default?[p]:[p,h]}),i.extend("function",(l,s,o)=>{if(typeof l=="function")return[l];throw new a(`expected function but got ${l}`,o)}),i.extend("is",(l,{constructor:s},o)=>{if(typeof s=="function"){if(l instanceof s)return[l];throw new a(`expected ${s.name} but got ${l}`,o)}else{if(q(l))throw new a(`expected ${s} but got ${l}`,o);let d=Object.getPrototypeOf(l);for(;d;){if(d.constructor?.name===s)return[l];d=Object.getPrototypeOf(d)}throw new a(`expected ${s} but got ${l}`,o)}});function _(l,s,o,d){try{const[p,h]=i.resolve(l[s],o,{...d,path:[...d.path||[],s]});return h!==void 0&&(l[s]=h),p}catch(p){if(!d?.autofix)throw p;return delete l[s],o.meta.default}}M(_,"property"),i.extend("array",(l,{inner:s,meta:o},d)=>{if(!Array.isArray(l))throw new a(`expected array but got ${l}`,d);return w(l.length,o,"array length",d,!q(s.meta.default)),[l.map((p,h)=>_(l,h,s,d))]}),i.extend("dict",(l,{inner:s,sKey:o},d,p)=>{if(!Be(l))throw new a(`expected object but got ${l}`,d);const h={};for(const S in l){let C;try{C=i.resolve(S,o,d)[0]}catch(ve){if(p)continue;throw ve}h[C]=_(l,S,s,d),l[C]=l[S],S!==C&&delete l[S]}return[h]}),i.extend("tuple",(l,{list:s},o,d)=>{if(!Array.isArray(l))throw new a(`expected array but got ${l}`,o);const p=s.map((h,S)=>_(l,S,h,o));return d?[p]:(p.push(...l.slice(s.length)),[p])});function v(l,s){for(const o in s)o in l||(l[o]=s[o])}M(v,"merge"),i.extend("object",(l,{dict:s},o,d)=>{if(!Be(l))throw new a(`expected object but got ${l}`,o);const p={};for(const h in s){const S=_(l,h,s[h],o);(!q(S)||h in l)&&(p[h]=S)}return d||v(p,l),[p]}),i.extend("union",(l,{list:s,toString:o},d,p)=>{for(const h of s)try{return i.resolve(l,h,d,p)}catch{}throw new a(`expected ${o()} but got ${JSON.stringify(l)}`,d)}),i.extend("intersect",(l,{list:s,toString:o},d,p)=>{if(!s.length)return[l];let h;for(const S of s){const C=i.resolve(l,S,d,!0)[0];if(!q(C))if(q(h))h=C;else{if(typeof h!=typeof C)throw new a(`expected ${o()} but got ${JSON.stringify(l)}`,d);if(typeof C=="object")v(h??={},C);else if(h!==C)throw new a(`expected ${o()} but got ${JSON.stringify(l)}`,d)}}return!p&&Be(l)&&v(h,l),[h]}),i.extend("transform",(l,{inner:s,callback:o,preserve:d},p)=>{const[h,S=l]=i.resolve(l,s,p,!0);return d?[o(h)]:[o(h),o(S)]});var I={};function E(l,s,o){I[l]=o,Object.assign(i,{[l](...d){const p=new i({type:l});return s.forEach((h,S)=>{switch(h){case"sKey":p.sKey=d[S]??i.string();break;case"inner":p.inner=i.from(d[S]);break;case"list":p.list=d[S].map(i.from);break;case"dict":p.dict=ne(d[S],i.from);break;case"bits":{p.bits={};for(const C in d[S])typeof d[S][C]=="number"&&(p.bits[C]=d[S][C]);break}case"callback":{const C=p.callback=d[S];C.toJSON||=()=>C.toString();break}case"constructor":{const C=p.constructor=d[S];typeof C=="function"&&(C.toJSON||=()=>C.name);break}default:p[h]=d[S]}}),l==="object"||l==="dict"?p.meta.default={}:l==="array"||l==="tuple"?p.meta.default=[]:l==="bitset"&&(p.meta.default=0),p}})}M(E,"defineMethod"),E("is",["constructor"],({constructor:l})=>typeof l=="function"?l.name:l),E("any",[],()=>"any"),E("never",[],()=>"never"),E("const",["value"],({value:l})=>typeof l=="string"?JSON.stringify(l):l),E("string",[],()=>"string"),E("number",[],()=>"number"),E("boolean",[],()=>"boolean"),E("bitset",["bits"],()=>"bitset"),E("function",[],()=>"function"),E("array",["inner"],({inner:l})=>`${l.toString(!0)}[]`),E("dict",["inner","sKey"],({inner:l,sKey:s})=>`{ [key: ${s.toString()}]: ${l.toString()} }`),E("tuple",["list"],({list:l})=>`[${l.map(s=>s.toString()).join(", ")}]`),E("object",["dict"],({dict:l})=>Object.keys(l).length===0?"{}":`{ ${Object.entries(l).map(([s,o])=>`${s}${o.meta.required?"":"?"}: ${o.toString()}`).join(", ")} }`),E("union",["list"],({list:l},s)=>{const o=l.map(({toString:d})=>d()).join(" | ");return s?`(${o})`:o}),E("intersect",["list"],({list:l})=>`${l.map(s=>s.toString(!0)).join(" & ")}`),E("transform",["inner","callback","preserve"],({inner:l},s)=>l.toString(s)),t.exports=i}});const On=$n();function tt(e){return Array.isArray(e)?[...e]:e}function Ee(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,tt(n)]))}const An="(masterpiece, best quality:1.2), 1girl, solo, --n lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, --w 512 --h 768 --l 7 --s 24 --d 1337";function En(e,t,n){const r={...e,...t};return n?.forEach(a=>delete r[a]),r}function gt(e,t){const n={__MIKAZUKI__:{SAMPLE_PROMPTS_DEFAULT:An,SAMPLE_PROMPTS_DESCRIPTION:Y.global.t("schema.samplePromptsDescription")}},r=e.trim().replace(/;\s*$/,"");return new Function("Schema","SHARED_SCHEMAS","UpdateSchema","window",`"use strict"; return (${r});`)(On,t,En,n)}function Nn(e,t){const n=e.find(u=>u.name==="shared"),r=e.find(u=>u.name===t);if(!r)throw new Error(Y.global.t("schema.notProvided",{name:t}));const a=n?gt(n.schema):void 0,i=gt(r.schema,a);if(typeof i!="function"||!i.type)throw new Error(Y.global.t("schema.invalid",{name:t}));return{name:t,hash:r.hash,schema:i,sections:In(i)}}function We(e){return typeof e?.description=="string"?e.description:e?.description?.["zh-CN"]||e?.description?.[""]}function kt(e){return e.type==="object"?Object.entries(e.dict??{}).filter(([,t])=>t.type==="const"&&!t.meta.hidden).map(([t,n])=>({key:t,value:n.value})):e.type==="intersect"?(e.list??[]).flatMap(kt):[]}function Cn(e,t,n){if(t.type==="union"&&t.list?.every(r=>r.type==="const"))return{key:e,type:"string",description:We(t.meta),defaultValue:t.meta.default,required:t.meta.required,hidden:t.meta.hidden,disabled:t.meta.disabled,options:t.list.map(r=>r.value),conditions:n};if(["string","number","boolean","array","const"].includes(t.type))return{key:e,type:t.type,description:We(t.meta),role:t.meta.role,extra:t.meta.extra,defaultValue:t.meta.default??(t.type==="array"?[]:void 0),constValue:t.value,required:t.meta.required,hidden:t.meta.hidden,disabled:t.meta.disabled,min:t.meta.min,max:t.meta.max,step:t.meta.step,conditions:n}}function Ae(e,t=[]){return e.type==="object"?Object.entries(e.dict??{}).flatMap(([n,r])=>{const a=Cn(n,r,t);return a?[a]:Ae(r,t)}):e.type==="intersect"?(e.list??[]).flatMap(n=>Ae(n,t)):e.type==="union"?(e.list??[]).flatMap(n=>{const r=kt(n),a=new Set(r.map(i=>i.key));return Ae(n,[...t,...r]).filter(i=>!a.has(i.key))}):[]}function In(e){const t=e.type==="intersect"?e.list??[]:[e],n=[];let r=0;const a=(u,g)=>{if(!g.length)return;const f=n.at(-1);if(!u&&f){f.fields.push(...g);return}const c=u||Y.global.t("schema.advancedSection");n.push({id:`${c}-${r++}`,title:c,fields:g})},i=u=>{const g=We(u.meta);if(!g&&u.type==="intersect"){for(const f of u.list??[])i(f);return}a(g,Ae(u))};for(const u of t)i(u);return n}function Me(e,t){return e.conditions.every(n=>t[n.key]===n.value)}function xe(e){const t={};for(const n of e.sections.flatMap(r=>r.fields)){const r=n.defaultValue??n.constValue;r!==void 0&&t[n.key]===void 0&&(t[n.key]=tt(r))}return t}function Tn(e,t){const n={};for(const r of e.sections.flatMap(a=>a.fields)){if(!Me(r,t))continue;const a=r.type==="const"?r.constValue:t[r.key];a===void 0||a===""||Array.isArray(a)&&!a.length||(n[r.key]=tt(a))}return n}function Mn(e,t){const n={};for(const r of e.sections.flatMap(a=>a.fields)){if(!Me(r,t)||r.hidden)continue;const a=t[r.key];r.required&&(a===void 0||a===""||Array.isArray(a)&&!a.length)?n[r.key]=Y.global.t("schema.required"):typeof a=="number"&&r.min!==void 0&&ar.max&&(n[r.key]=Y.global.t("schema.tooLarge",{max:r.max}))}return n}const jn={class:"field-text"},Dn={class:"field-label"},Vn={key:0},Fn={key:0,class:"field-description"},Pn={class:"field-control"},Rn={key:5,class:"filepicker-control"},Bn={key:0,class:"field-error"},zn={class:"picker-list"},Ln=["onClick"],Kn={key:0},Un=ee({__name:"SchemaField",props:{field:{},modelValue:{type:[String,Number,Boolean,Array]},error:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,r=t,{t:a}=te(),i=F([]),u=F(!1),g=F(!1),f=z(()=>String(n.field.extra?.type||"folder")),c=z(()=>n.field.extra?.internal?String(n.field.extra.internal):""),w=z({get:()=>Array.isArray(n.modelValue)?n.modelValue.join(` -`):"",set:v=>r("update:modelValue",v.split(/\r?\n/).filter(Boolean))}),O=z(()=>n.field.type==="boolean"||n.field.type==="number"||n.field.options?!0:n.field.type==="string"&&!n.field.role);async function A(){g.value=!0;try{const v=await ge.pickFile(f.value);r("update:modelValue",v.path.replaceAll("\\","/"))}catch(v){R.error(v instanceof Error?v.message:a("schemaForm.pickFail"))}finally{g.value=!1}}async function _(){try{i.value=(await ge.files(c.value)).files,u.value=!0}catch(v){R.error(v instanceof Error?v.message:a("schemaForm.catalogFail"))}}return(v,I)=>{const E=G("el-switch"),D=G("el-option"),l=G("el-select"),s=G("el-input-number"),o=G("el-input"),d=G("el-button"),p=G("el-dialog");return k(),$(U,null,[m("label",{class:Z(["schema-field",{"has-error":e.error,"schema-field--compact":O.value}])},[m("span",jn,[m("span",Dn,[m("code",null,b(e.field.key),1),e.field.required?(k(),$("b",Vn,b(y(a)("schemaForm.required")),1)):P("",!0)]),e.field.description?(k(),$("span",Fn,b(e.field.description),1)):P("",!0)]),m("span",Pn,[e.field.type==="boolean"?(k(),J(E,{key:0,"model-value":!!e.modelValue,disabled:e.field.disabled,"onUpdate:modelValue":I[0]||(I[0]=h=>r("update:modelValue",h))},null,8,["model-value","disabled"])):e.field.options?(k(),J(l,{key:1,"model-value":e.modelValue,disabled:e.field.disabled,multiple:e.field.type==="array",clearable:"","onUpdate:modelValue":I[1]||(I[1]=h=>r("update:modelValue",h))},{default:K(()=>[(k(!0),$(U,null,H(e.field.options,h=>(k(),J(D,{key:String(h),label:String(h)||y(a)("schemaForm.emptyOption"),value:h??""},null,8,["label","value"]))),128))]),_:1},8,["model-value","disabled","multiple"])):e.field.type==="number"?(k(),J(s,{key:2,"model-value":e.modelValue,disabled:e.field.disabled,min:e.field.min,max:e.field.max,step:e.field.step||1,"controls-position":"right","onUpdate:modelValue":I[2]||(I[2]=h=>r("update:modelValue",h??void 0))},null,8,["model-value","disabled","min","max","step"])):e.field.type==="array"||e.field.role==="table"?(k(),J(o,{key:3,modelValue:w.value,"onUpdate:modelValue":I[3]||(I[3]=h=>w.value=h),type:"textarea",rows:4,disabled:e.field.disabled,placeholder:y(a)("schemaForm.arrayPlaceholder")},null,8,["modelValue","disabled","placeholder"])):e.field.role==="textarea"?(k(),J(o,{key:4,"model-value":e.modelValue,type:"textarea",rows:5,disabled:e.field.disabled,"onUpdate:modelValue":I[4]||(I[4]=h=>r("update:modelValue",h))},null,8,["model-value","disabled"])):e.field.role==="filepicker"?(k(),$("span",Rn,[L(o,{"model-value":e.modelValue,disabled:e.field.disabled,"onUpdate:modelValue":I[5]||(I[5]=h=>r("update:modelValue",h))},null,8,["model-value","disabled"]),L(d,{loading:g.value,disabled:e.field.disabled,onClick:lt(A,["prevent"])},{default:K(()=>[ie(b(y(a)("schemaForm.browse")),1)]),_:1},8,["loading","disabled"]),c.value?(k(),J(d,{key:0,disabled:e.field.disabled,onClick:lt(_,["prevent"])},{default:K(()=>[ie(b(y(a)("schemaForm.commonPaths")),1)]),_:1},8,["disabled"])):P("",!0)])):(k(),J(o,{key:6,"model-value":e.modelValue,disabled:e.field.disabled||e.field.type==="const","onUpdate:modelValue":I[6]||(I[6]=h=>r("update:modelValue",h))},null,8,["model-value","disabled"]))]),e.error?(k(),$("span",Bn,b(e.error),1)):P("",!0)],2),L(p,{modelValue:u.value,"onUpdate:modelValue":I[7]||(I[7]=h=>u.value=h),title:y(a)("schemaForm.catalogTitle"),width:"min(680px, 92vw)"},{default:K(()=>[m("div",zn,[(k(!0),$(U,null,H(i.value,h=>(k(),$("button",{key:h.path,onClick:S=>{r("update:modelValue",h.path),u.value=!1}},[m("strong",null,b(h.name),1),m("span",null,b(h.path),1),h.size?(k(),$("small",Kn,b(h.size),1)):P("",!0)],8,Ln))),128))])]),_:1},8,["modelValue","title"])],64)}}}),Jn={class:"schema-form"},qn=["id"],Hn={class:"schema-fields"},Wn=ee({__name:"DynamicSchemaForm",props:{schema:{},modelValue:{},errors:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,r=t,{t:a}=te(),i=z(()=>{const f=new Map;for(const c of n.schema.sections)for(const w of c.fields)Me(w,n.modelValue)&&f.set(w.key,w);return f});function u(f){return f.filter(c=>!c.hidden&&i.value.get(c.key)===c)}function g(f,c){r("update:modelValue",{...n.modelValue,[f]:c})}return(f,c)=>(k(),$("div",Jn,[(k(!0),$(U,null,H(e.schema.sections,w=>de((k(),$("section",{id:`sec-${w.id}`,key:w.id,class:"schema-section"},[m("header",null,[m("h2",null,b(w.title),1),m("span",null,b(y(a)("schemaForm.fieldCount",{n:u(w.fields).length})),1)]),m("div",Hn,[(k(!0),$(U,null,H(u(w.fields),O=>(k(),J(Un,{key:O.key,field:O,"model-value":e.modelValue[O.key],error:e.errors[O.key],"onUpdate:modelValue":A=>g(O.key,A)},null,8,["field","model-value","error","onUpdate:modelValue"]))),128))])],8,qn)),[[ht,u(w.fields).length]])),128))]))}}),Gn=["aria-label"],Zn=["title","aria-label","aria-expanded"],Yn=["aria-hidden"],Xn={class:"schema-toc-head"},Qn={class:"schema-toc-caption"},er=["title","aria-label"],tr={class:"schema-toc-list"},nr=["title","onClick"],rr=3500,ir=ee({__name:"SectionToc",props:{sections:{}},setup(e){const t=e,{t:n}=te(),r=F(!1),a=F("");let i,u;function g(I){return`sec-${I}`}function f(){u!==void 0&&(window.clearTimeout(u),u=void 0)}function c(){f(),r.value&&(u=window.setTimeout(()=>{r.value=!1,u=void 0},rr))}function w(){r.value=!0,c()}function O(){f(),r.value=!1}function A(){f(),r.value=!0}function _(I){a.value=I,document.getElementById(g(I))?.scrollIntoView({behavior:"smooth",block:"start"}),r.value=!0,c()}function v(){if(i?.disconnect(),typeof IntersectionObserver>"u"){!a.value&&t.sections[0]&&(a.value=t.sections[0].id);return}i=new IntersectionObserver(I=>{const E=I.filter(D=>D.isIntersecting).sort((D,l)=>D.boundingClientRect.top-l.boundingClientRect.top)[0];E?.target instanceof HTMLElement&&(a.value=E.target.id.replace(/^sec-/,""))},{rootMargin:"-15% 0px -75% 0px",threshold:[0,.12,.4]});for(const I of t.sections){const E=document.getElementById(g(I.id));E&&i.observe(E)}!a.value&&t.sections[0]&&(a.value=t.sections[0].id)}return Ge(v),ce(()=>t.sections,v),Ze(()=>{f(),i?.disconnect()}),(I,E)=>{const D=G("el-icon");return k(),$("aside",{class:Z(["section-toc schema-toc",{open:r.value,collapsed:!r.value}]),"aria-label":y(n)("training.toc.title")},[m("button",{type:"button",class:"toc-seam schema-toc-seam",title:y(n)("training.toc.expand"),"aria-label":y(n)("training.toc.expand"),"aria-expanded":r.value?"true":"false",onMouseenter:w,onClick:E[0]||(E[0]=l=>r.value?O():w())},[L(D,{class:"schema-toc-seam-icon",size:12},{default:K(()=>[L(y(Bt))]),_:1})],40,Zn),m("div",{class:"toc-panel schema-toc-panel","aria-hidden":r.value?"false":"true",onMouseenter:A,onMouseleave:c},[m("header",Xn,[m("p",Qn,b(y(n)("training.toc.title")),1),m("button",{type:"button",class:"schema-toc-toggle icon-btn",title:y(n)("training.toc.collapse"),"aria-label":y(n)("training.toc.collapse"),onClick:O},[L(D,{size:14},{default:K(()=>[L(y(zt))]),_:1})],8,er)]),m("div",tr,[(k(!0),$(U,null,H(e.sections,l=>(k(),$("button",{key:l.id,type:"button",class:Z(["toc-item schema-toc-tab",{active:a.value===l.id}]),title:l.title,onClick:s=>_(l.id)},[E[1]||(E[1]=m("i",{"aria-hidden":"true"},null,-1)),m("span",null,b(l.title),1)],10,nr))),128))])],40,Yn)],10,Gn)}}});function Se(e,t){return yt(e,{method:"POST",body:JSON.stringify(t)})}const le={presets:async()=>(await yt("/api/presets")).presets,validateImport:(e,t)=>Se("/api/config/validate-import",{page_train_type:e,config:t}),normalizeExport:(e,t)=>Se("/api/config/normalize-for-export",{page_train_type:e,config:t}),run:e=>Se("/api/run",e),animaFastPreflight:e=>Se("/api/anima-fast/preflight",e)},xt="schemas";function ar(){try{const e=JSON.parse(localStorage.getItem(xt)||"[]");return Array.isArray(e)?e:[]}catch{return[]}}async function or(e){let t=ar();try{const{schemas:n}=await ge.hashes(),r=new Map(t.map(i=>[i.name,i.hash]));(n.length!==t.length||n.some(i=>r.get(i.name)!==i.hash))&&(t=(await ge.all()).schemas,localStorage.setItem(xt,JSON.stringify(t)))}catch(n){if(!t.length)throw n}return Nn(t,e)}const St=["learning_rate","unet_lr","text_encoder_lr","learning_rate_te","learning_rate_te1","learning_rate_te2","sigmoid_scale","guidance_scale"],sr=["vae","reg_data_dir","network_weights","noise_offset","multires_noise_iterations","multires_noise_discount","caption_dropout_rate","network_dropout","scale_weight_norms","gpu_ids"],lr=["pretrained_model_name_or_path","vae","qwen3","llm_adapter_path","t5_tokenizer_path","resume","train_data_dir","reg_data_dir","output_dir","logging_dir","network_weights","sample_prompts"],ur=["lycoris_algo","conv_dim","conv_alpha","dropout","dylora_unit","lokr_factor","train_norm","down_lr_weight","mid_lr_weight","up_lr_weight","block_lr_zero_threshold","enable_block_weights","network_args_custom","optimizer_args_custom","enable_base_weight","prodigy_d0","prodigy_d_coef","ui_custom_params"],cr=["v2","v_parameterization","scale_v_pred_loss_like_noise_pred","clip_skip","learning_rate_te","stop_text_encoder_training"],fr=["learning_rate_te1","learning_rate_te2"],mt=["prompt_file","sample_width","sample_height","sample_cfg","sample_seed","sample_steps","sample_sampler","randomly_choice_prompt","sample_at_first","sample_every_n_epochs","sample_every_n_steps","positive_prompts","negative_prompts","sample_prompts"],dr={model_train_type:"sd-lora",enable_bucket:!0,min_bucket_reso:256,max_bucket_reso:1024,save_model_as:"safetensors",network_train_unet_only:!1,network_train_text_encoder_only:!1,learning_rate:1e-4,network_module:"networks.lora",logging_dir:"./logs",caption_extension:".txt",max_token_length:255,seed:1337,prior_loss_weight:1,clip_skip:2,save_precision:"fp16",persistent_data_loader_workers:!0};function $e(e){return Array.isArray(e)?e:[]}function Oe(e,t){t.forEach(n=>delete e[n])}function gr(e,t){const n=t==="lora-basic"?{...dr,...Ee(e)}:Ee(e);let r=[],a=[];n.network_module==="lycoris.kohya"?(r.push(`conv_dim=${n.conv_dim}`,`conv_alpha=${n.conv_alpha}`,`dropout=${n.dropout}`,`algo=${n.lycoris_algo}`),n.lokr_factor&&r.push(`factor=${n.lokr_factor}`),n.train_norm&&r.push("train_norm=True")):n.network_module==="networks.dylora"&&r.push(`unit=${n.dylora_unit}`);const i=String(n.optimizer_type||"");i.toLowerCase().startsWith("dada")?(["DAdaptation","DAdaptAdam"].includes(i)&&(a=["decouple=True","weight_decay=0.01"]),n.learning_rate=1,n.unet_lr=1,n.text_encoder_lr=1):i.toLowerCase()==="prodigy"&&(a=["decouple=True","weight_decay=0.01","use_bias_correction=True",`d_coef=${n.prodigy_d_coef}`],n.lr_warmup_steps&&a.push("safeguard_warmup=True"),n.prodigy_d0&&a.push(`d0=${n.prodigy_d0}`)),n.enable_block_weights&&r.push(`down_lr_weight=${n.down_lr_weight}`,`mid_lr_weight=${n.mid_lr_weight}`,`up_lr_weight=${n.up_lr_weight}`,`block_lr_zero_threshold=${n.block_lr_zero_threshold}`),n.enable_base_weight?(typeof n.base_weights=="string"&&(n.base_weights=n.base_weights.split(/\r?\n/).filter(Boolean)),typeof n.base_weights_multiplier=="string"&&(n.base_weights_multiplier=n.base_weights_multiplier.split(/\r?\n/).filter(Boolean).map(Number))):Oe(n,["base_weights","base_weights_multiplier"]),r.push(...$e(n.network_args).map(String),...$e(n.network_args_custom).map(String)),a.push(...$e(n.optimizer_args).map(String),...$e(n.optimizer_args_custom).map(String)),r.length?n.network_args=r:delete n.network_args,a.length?n.optimizer_args=a:delete n.optimizer_args,mt.some(f=>{const c=n[f];return c!==void 0&&c!==""&&(!Array.isArray(c)||c.length>0)})&&(n.enable_preview=!0),n.enable_preview||Oe(n,mt);for(const f of St){if(n[f]===void 0)continue;const c=Number.parseFloat(String(n[f]));n[f]=Number.isNaN(c)?0:c}for(const f of sr){const c=n[f];(c===0||c===""||Array.isArray(c)&&!c.length)&&delete n[f]}for(const f of lr)typeof n[f]=="string"&&(n[f]=n[f].replaceAll("\\","/"));typeof e.ui_custom_params=="string"&&e.ui_custom_params.trim()&&Object.assign(n,_t(e.ui_custom_params));const g=String(n.model_train_type||"").startsWith("sdxl");return g&&(n.learning_rate_te1||n.learning_rate_te2)&&(n.train_text_encoder=!0),Oe(n,g?cr:fr),Oe(n,ur),Array.isArray(n.gpu_ids)&&(n.gpu_ids=n.gpu_ids.map(f=>String(f).match(/GPU (\d+):/)?.[1]||String(f)).filter(Boolean)),n}function mr(e){const t=Ee(e);for(const n of St){const r=t[n];if(typeof r!="number")continue;const a=r.toExponential();t[n]=a.length<=6?a:String(r)}if(Array.isArray(t.network_args)){for(const n of t.network_args){const[r,...a]=String(n).split("="),i=a.join("=");r&&(t[r==="algo"?"lycoris_algo":r]=i)}delete t.network_args}return Array.isArray(t.optimizer_args)&&(t.optimizer_args_custom=t.optimizer_args,delete t.optimizer_args),t}function pr(e){const t=[],n=[],r=String(e.optimizer_type||"");r.startsWith("DAdapt")&&e.lr_scheduler!=="constant"&&t.push(Y.global.t("training.diagnostics.dadaptScheduler")),r.toLowerCase().startsWith("prodigy")&&(e.unet_lr!==1||e.text_encoder_lr!==1)&&t.push(Y.global.t("training.diagnostics.prodigyLr")),e.network_module==="networks.oft"&&e.model_train_type!=="sdxl-lora"&&n.push(Y.global.t("training.diagnostics.oftSdxl"));for(const[a,i]of[["cache_text_encoder_outputs","shuffle_caption"],["noise_offset","multires_noise_iterations"],["cache_latents","color_aug"],["cache_latents","random_crop"]])e[a]&&e[i]&&n.push(Y.global.t("training.diagnostics.conflict",{left:a,right:i}));return{warnings:t,errors:n}}const $t=["anima","sd15","sdxl","flux","lumina"],Ne=["kohya","anima-fast","musubi"],Ce=["lora","finetune"],ze={model:"anima",engine:"kohya",target:"lora"},me=[{model:"anima",engine:"kohya",target:"lora",schemaName:"sd3-lora"},{model:"anima",engine:"anima-fast",target:"lora",schemaName:"anima-lora-fast"},{model:"anima",engine:"kohya",target:"finetune",schemaName:"anima-finetune"},{model:"sdxl",engine:"kohya",target:"lora",schemaName:"lora-master",defaults:{model_train_type:"sdxl-lora"},storageKey:"sdxl-lora",legacyStorageKey:"lora-master"},{model:"sd15",engine:"kohya",target:"lora",schemaName:"lora-master",defaults:{model_train_type:"sd-lora"},storageKey:"sd15-lora"},{model:"sdxl",engine:"kohya",target:"finetune",schemaName:"dreambooth",defaults:{model_train_type:"sdxl-finetune"},storageKey:"sdxl-dreambooth",legacyStorageKey:"dreambooth"},{model:"sd15",engine:"kohya",target:"finetune",schemaName:"dreambooth",defaults:{model_train_type:"sd-dreambooth"},storageKey:"sd15-dreambooth"},{model:"flux",engine:"kohya",target:"lora",schemaName:"flux-lora"},{model:"lumina",engine:"kohya",target:"lora",schemaName:"lumina2-lora"}],hr={"sd3-lora":{titleKey:"training.schemas.sd3-lora.title",areaKey:"training.schemas.sd3-lora.area"},"anima-lora-fast":{titleKey:"training.schemas.anima-lora-fast.title",areaKey:"training.schemas.anima-lora-fast.area"},"anima-finetune":{titleKey:"training.schemas.anima-finetune.title",areaKey:"training.schemas.anima-finetune.area"},"lora-master":{titleKey:"training.schemas.lora-master.title",areaKey:"training.schemas.lora-master.area"},dreambooth:{titleKey:"training.schemas.dreambooth.title",areaKey:"training.schemas.dreambooth.area"},"flux-lora":{titleKey:"training.schemas.flux-lora.title",areaKey:"training.schemas.flux-lora.area"},"lumina2-lora":{titleKey:"training.schemas.lumina2-lora.title",areaKey:"training.schemas.lumina2-lora.area"}};function yr(e){return e==="sd"?"sdxl":$t.includes(e)?e:void 0}function Ot(e,t,n){return me.find(r=>r.model===e&&r.engine===t&&r.target===n)}function vr(e){return me.find(t=>t.schemaName===e)}function br(e){if(!(typeof e!="string"||!e))return me.find(t=>t.defaults?.model_train_type===e)??me.find(t=>t.schemaName===e)}function pe(e,t){return me.some(n=>n.model===e&&n.engine===t)}function he(e,t,n){return!!Ot(e,t,n)}function _r(e){return Ne.find(t=>pe(e,t))}function wr(e,t){return Ce.find(n=>he(e,t,n))}const kr={class:"schema-form-binder"},xr={key:0,class:"section-heading"},Sr={key:1,class:"schema-state"},$r={key:2,class:"schema-state schema-error"},Or={class:"panel-rail"},Ar={class:"rail-label"},Er=["disabled"],Nr=["disabled"],Cr={class:"panel-full"},Ir={key:0,class:"panel-copy"},Tr={key:1,class:"param-diagnostics"},Mr={key:2,class:"started-task"},jr=["href"],Dr={class:"preview-actions"},Vr=["title","aria-label"],Fr={class:"panel-actions"},Pr=["disabled"],Rr={class:"submit-row"},Br=["disabled"],zr=["disabled"],Lr={class:"config-list"},Kr=["onClick"],Ur=["onClick"],Jr={key:0},qr={class:"config-list"},Hr=["onClick"],Wr={key:0},At=ee({__name:"TrainingPage",props:{title:{},area:{},schemaName:{},bare:{type:Boolean,default:!1},fieldDefaults:{default:void 0},storageKey:{default:void 0},legacyStorageKey:{default:void 0}},setup(e){const t=e,n=vt(),{t:r}=te(),a=F(),i=F({}),u=F(!0),g=F(""),f=F({}),c=F(!1),w=F(!1),O=Ht(),A=z(()=>O.runningTasks.at(-1));let _;function v(){try{const x=JSON.parse(localStorage.getItem("ui-configs")||"{}");return!!(x&&typeof x=="object"&&x.training_preview_collapsed)}catch{return!1}}function I(x){try{const N=JSON.parse(localStorage.getItem("ui-configs")||"{}"),T=N&&typeof N=="object"?N:{};localStorage.setItem("ui-configs",JSON.stringify({...T,training_preview_collapsed:x}))}catch{}}const E=F(!1),D=F([]),l=F([]),s=F(!1),o=F(),d=F(v()),p=F(),h=z(()=>a.value?Tn(a.value,i.value):{}),S=z(()=>gr(h.value,t.schemaName)),C=z(()=>pr(S.value)),ve=z(()=>ft(S.value)),nt=z(()=>l.value.filter(x=>!x.metadata.train_type||x.metadata.train_type===t.schemaName)),be=z(()=>{if(!a.value)return[];const x=new Map;for(const N of a.value.sections)for(const T of N.fields)Me(T,i.value)&&x.set(T.key,T);return a.value.sections.filter(N=>N.fields.some(T=>!T.hidden&&x.get(T.key)===T)).map(N=>({id:N.id,title:N.title}))}),Et=z(()=>o.value?`${o.value.train_log_path||"/train-log"}?${o.value.train_log_query||`task_id=${encodeURIComponent(o.value.task_id)}`}`:"");function _e(){return t.storageKey||t.schemaName}function we(){return`configs-${_e()}-autosave`}function je(){return`configs-${_e()}`}function Nt(){if(!(!t.legacyStorageKey||t.legacyStorageKey===_e()))for(const x of["","-autosave"]){const N=`configs-${t.legacyStorageKey}${x}`,T=`configs-${_e()}${x}`,B=localStorage.getItem(N);B!==null&&localStorage.getItem(T)===null&&localStorage.setItem(T,B)}}function rt(){try{D.value=JSON.parse(localStorage.getItem(je())||"[]")}catch{D.value=[]}}async function it(x,N){const T=await le.validateImport(t.schemaName,x);if(T.result==="reject")throw new Error(T.errors?.join(` -`)||T.message||r("training.importMsg.reject"));if(T.result==="redirect"&&T.target_path){await ue.confirm(T.message||r("training.importMsg.mismatchConfirm"),r("training.importMsg.mismatchTitle"),{confirmButtonText:r("training.importMsg.jump"),cancelButtonText:r("training.importMsg.cancel"),type:"warning"}),sessionStorage.setItem("mikazuki-pending-import",JSON.stringify(T.config||x));const B=br((T.config||x).model_train_type);B?await n.push({path:"/training",query:{model:B.model,engine:B.engine,target:B.target}}):await n.push(T.target_path);return}i.value={...xe(a.value),...mr(T.config||x)},T.notice&&R.info(T.notice),R.success(N??r("training.importMsg.imported"))}function Ct(){try{const x=JSON.parse(sessionStorage.getItem("mikazuki-carry-over")||"null");return x&&typeof x=="object"?x:{}}catch{return{}}}async function De(){u.value=!0,g.value="";try{const x=await or(t.schemaName),N={...xe(x),...t.fieldDefaults},T=Ct();sessionStorage.removeItem("mikazuki-carry-over");const B={};for(const[W,Fe]of Object.entries(T))W in N&&!(t.fieldDefaults&&W in t.fieldDefaults)&&(B[W]=Fe);const Q={...N,...B};try{const W=JSON.parse(localStorage.getItem(we())||"null");i.value=W&&typeof W=="object"?{...Q,...W}:Q}catch{i.value=Q}const V=await ge.graphicCards();if(V.length>1){const W=V.map((ke,Rt)=>typeof ke=="object"?ke.value??ke.label??Rt:ke),Fe={key:"gpu_ids",type:"array",role:"select",description:r("training.gpu.fieldDescription"),options:W,conditions:[]};x.sections.push({id:"gpu-settings",title:r("training.gpu.sectionTitle"),fields:[Fe]})}a.value=x;const oe=sessionStorage.getItem("mikazuki-pending-import");oe&&(sessionStorage.removeItem("mikazuki-pending-import"),await it(JSON.parse(oe),r("training.importMsg.importedRedirect")))}catch(x){g.value=x instanceof Error?x.message:r("training.schemaLoadFail")}finally{u.value=!1}}function Ve(){if(!a.value)return!1;f.value=Mn(a.value,i.value);const x=[...Object.values(f.value),...C.value.errors];return x.length?(R.error(x[0]),!1):(C.value.warnings.length?R.warning(C.value.warnings[0]):R.success(r("training.validatePassed")),!0)}function at(){const x={time:new Date().toLocaleString(),value:Ee(i.value)};typeof i.value.output_name=="string"&&(x.name=i.value.output_name),D.value.push(x),localStorage.setItem(je(),JSON.stringify(D.value)),R.success(r("training.historyDialog.saved"))}function It(x){D.value.splice(x,1),localStorage.setItem(je(),JSON.stringify(D.value))}async function Tt(){if(E.value=!0,!l.value.length){s.value=!0;try{l.value=await le.presets()}catch(x){R.error(x instanceof Error?x.message:r("training.presetsDialog.loadFail"))}finally{s.value=!1}}}function Mt(x){i.value={...i.value,...x.data},E.value=!1,R.success(r("training.presetsDialog.applied",{name:x.metadata.name}))}async function jt(x){const N=x.target,T=N.files?.[0];if(N.value="",!!T)try{const B=await T.text(),Q=T.name.toLowerCase().endsWith(".json")?JSON.parse(B):_t(B);await it(Q)}catch(B){B!=="cancel"&&B!=="close"&&R.error(B instanceof Error?B.message:r("training.importMsg.fail"))}}async function Dt(){if(Ve())try{const x=await le.normalizeExport(t.schemaName,S.value),N=new Blob([ft(x.config)],{type:"application/toml;charset=utf-8"}),T=URL.createObjectURL(N),B=document.createElement("a");B.href=T,B.download=`${String(x.config.output_name||t.schemaName)}.toml`,B.click(),URL.revokeObjectURL(T),x.warnings.forEach(Q=>R.warning(Q))}catch(x){R.error(x instanceof Error?x.message:r("training.exportFail"))}}async function ot(){if(!(!Ve()||c.value))try{if(await ue.confirm(r("training.submitConfirm.message"),r("training.submitConfirm.title"),{confirmButtonText:r("training.submitConfirm.confirm"),cancelButtonText:r("training.submitConfirm.cancel"),type:"warning"}),c.value=!0,t.schemaName==="anima-lora-fast"){const x=await le.animaFastPreflight(S.value);if(!x.ok)throw new Error(x.errors?.join(` -`)||r("training.submitConfirm.preflightFail"));x.warnings?.forEach(N=>R.warning(N))}o.value=await le.run(S.value),O.refresh({silent:!0}),at(),R.success(r("training.submitConfirm.started",{id:o.value.task_id}))}catch(x){x!=="cancel"&&x!=="close"&&R.error(x instanceof Error?x.message:r("training.submitConfirm.fail"))}finally{c.value=!1}}async function Vt(){if(a.value){try{await ue.confirm(r("training.actions.resetConfirm"),r("training.resetDialog.title"),{confirmButtonText:r("training.actions.reset"),cancelButtonText:r("training.resetDialog.cancel"),type:"warning"})}catch{return}localStorage.removeItem(we()),i.value={...xe(a.value),...t.fieldDefaults},R.success(r("training.actions.resetDone"))}}async function Ft(){try{await navigator.clipboard.writeText(ve.value),R.success(r("training.preview.copied"))}catch{R.error(r("training.preview.copyFail"))}}function Pt(){p.value?.click()}async function st(){const x=A.value;if(x)try{await ue.confirm(r("tasks.terminate.confirm",{id:x.id}),r("tasks.terminate.title"),{confirmButtonText:r("tasks.terminate.confirmButton"),cancelButtonText:r("tasks.terminate.cancel"),type:"warning"}),await O.terminate(x.id),R.success(r("tasks.terminate.success"))}catch(N){N!=="cancel"&&N!=="close"&&R.error(N instanceof Error?N.message:r("tasks.terminate.fail"))}}return ce(()=>t.schemaName,()=>{o.value=void 0,rt(),De()}),ce(i,x=>localStorage.setItem(we(),JSON.stringify(x)),{deep:!0}),ce(d,x=>I(x)),Ge(()=>{Nt(),rt(),De(),O.refresh(),_=window.setInterval(()=>O.refresh({silent:!0}),2e3)}),Ze(()=>{window.clearInterval(_),localStorage.setItem(we(),JSON.stringify(i.value)),sessionStorage.setItem("mikazuki-carry-over",JSON.stringify(i.value))}),(x,N)=>{const T=G("RouterLink"),B=G("el-dialog"),Q=Lt("loading");return k(),$(U,null,[m("div",{class:Z(["training-layout schema-training-layout",{bare:e.bare,"preview-docked":d.value}])},[m("section",{class:Z(["form-canvas",{"with-schema-toc":be.value.length>1}])},[m("div",{class:Z(["schema-form-shell",{"has-toc":be.value.length>1}])},[be.value.length>1?(k(),J(ir,{key:0,sections:be.value},null,8,["sections"])):P("",!0),m("div",kr,[e.bare?P("",!0):(k(),$("div",xr,[m("span",null,b(e.area),1),m("h1",null,b(e.title),1),m("p",null,b(y(r)("training.intro")),1)])),m("input",{ref_key:"importInput",ref:p,class:"visually-hidden",type:"file",accept:".toml,.json",onChange:jt},null,544),Ue(x.$slots,"form-top"),u.value?(k(),$("div",Sr,[m("strong",null,b(y(r)("training.loadingSchema")),1),m("span",null,b(y(r)("training.loadingSchemaHint")),1)])):g.value?(k(),$("div",$r,[m("strong",null,b(y(r)("training.schemaError")),1),m("span",null,b(g.value),1),m("button",{onClick:De},b(y(r)("training.retry")),1)])):a.value?(k(),J(Wn,{key:3,modelValue:i.value,"onUpdate:modelValue":N[0]||(N[0]=V=>i.value=V),schema:a.value,errors:f.value},null,8,["modelValue","schema","errors"])):P("",!0)])],2)],2),m("aside",{class:Z(["control-panel",{collapsed:d.value}])},[m("div",Or,[m("button",{class:"rail-handle",onClick:N[1]||(N[1]=V=>d.value=!1)},[N[6]||(N[6]=m("span",{class:"rail-arrow","aria-hidden":"true"},"←",-1)),C.value.errors.length||C.value.warnings.length?(k(),$("span",{key:0,class:Z(["rail-alert",{error:C.value.errors.length>0}])},null,2)):P("",!0),m("span",Ar,b(y(r)("training.preview.railTitle")),1),m("b",null,b(y(r)("training.preview.count",{n:Object.keys(S.value).length})),1)]),m("button",{class:"primary-action rail-submit",disabled:!a.value||c.value||C.value.errors.length>0,onClick:ot},b(c.value?y(r)("training.railSubmitting"):y(r)("training.railStart")),9,Er),m("button",{class:"danger-action rail-stop",disabled:!A.value||!!y(O).terminatingId,onClick:st},b(y(r)("training.railStop")),9,Nr)]),m("div",Cr,[e.bare?P("",!0):(k(),$("div",Ir,[N[7]||(N[7]=m("span",{class:"eyebrow"},"TRAINING CONTROL",-1)),m("h2",null,b(e.title),1),m("p",null,b(y(r)("training.panelHint")),1)])),C.value.errors.length||C.value.warnings.length?(k(),$("div",Tr,[(k(!0),$(U,null,H(C.value.errors,V=>(k(),$("p",{key:V,class:"error"},b(V),1))),128)),(k(!0),$(U,null,H(C.value.warnings,V=>(k(),$("p",{key:V},b(V),1))),128))])):P("",!0),o.value?(k(),$("div",Mr,[m("strong",null,b(y(r)("training.startedTask")),1),m("code",null,b(o.value.task_id),1),m("a",{href:Et.value,target:"_blank",rel:"noreferrer"},b(y(r)("training.openLog")),9,jr),L(T,{to:"/tasks"},{default:K(()=>[ie(b(y(r)("training.viewTasks")),1)]),_:1})])):P("",!0),m("section",{class:Z(["preview-panel",{collapsed:d.value}])},[m("header",null,[m("span",null,b(y(r)("training.preview.panelTitle")),1),m("b",null,b(y(r)("training.preview.count",{n:Object.keys(S.value).length})),1),m("span",Dr,[m("button",{class:"preview-collapse",title:d.value?y(r)("training.preview.expand"):y(r)("training.preview.collapse"),"aria-label":d.value?y(r)("training.preview.expand"):y(r)("training.preview.collapse"),onClick:N[2]||(N[2]=V=>d.value=!d.value)},b(d.value?"←":"→"),9,Vr),m("button",{onClick:Ft},b(y(r)("training.preview.copy")),1)])]),de(m("pre",null,b(ve.value),513),[[ht,!d.value]])],2),m("div",Fr,[m("button",{onClick:Tt},b(y(r)("training.toolbar.presets")),1),m("button",{onClick:at},b(y(r)("training.toolbar.save")),1),m("button",{onClick:Pt},b(y(r)("training.toolbar.import")),1),m("button",{onClick:N[3]||(N[3]=V=>w.value=!0)},b(y(r)("training.toolbar.history")),1),m("button",{onClick:Dt},b(y(r)("training.toolbar.export")),1),m("button",{onClick:Vt},b(y(r)("training.toolbar.reset")),1)]),m("button",{class:"secondary-action schema-validate",disabled:!a.value,onClick:Ve},b(y(r)("training.validate")),9,Pr),m("div",Rr,[m("button",{class:"primary-action train-submit",disabled:!a.value||c.value||C.value.errors.length>0,onClick:ot},b(c.value?y(r)("training.submitting"):y(r)("training.start")),9,Br),m("button",{class:"danger-action stop-training",disabled:!A.value||!!y(O).terminatingId,onClick:st},b(y(O).terminatingId?y(r)("tasks.detail.stopping"):y(r)("training.stop")),9,zr)])])],2)],2),L(B,{modelValue:w.value,"onUpdate:modelValue":N[4]||(N[4]=V=>w.value=V),title:y(r)("training.historyDialog.title"),width:"min(760px, 92vw)"},{default:K(()=>[m("div",Lr,[(k(!0),$(U,null,H(D.value,(V,oe)=>(k(),$("article",{key:`${V.time}-${oe}`},[m("div",null,[m("strong",null,b(V.name||y(r)("training.historyDialog.unnamed")),1),m("span",null,b(V.time),1)]),m("button",{onClick:W=>{i.value={...y(xe)(a.value),...V.value},w.value=!1}},b(y(r)("training.historyDialog.use")),9,Kr),m("button",{class:"danger",onClick:W=>It(oe)},b(y(r)("training.historyDialog.delete")),9,Ur)]))),128)),D.value.length?P("",!0):(k(),$("p",Jr,b(y(r)("training.historyDialog.empty")),1))])]),_:1},8,["modelValue","title"]),L(B,{modelValue:E.value,"onUpdate:modelValue":N[5]||(N[5]=V=>E.value=V),title:y(r)("training.presetsDialog.title"),width:"min(760px, 92vw)"},{default:K(()=>[de((k(),$("div",qr,[(k(!0),$(U,null,H(nt.value,V=>(k(),$("article",{key:V.metadata.name},[m("div",null,[m("strong",null,b(V.metadata.name),1),m("span",null,b(V.metadata.description||`${V.metadata.author||""} ${V.metadata.version||""}`),1)]),m("button",{onClick:oe=>Mt(V)},b(y(r)("training.presetsDialog.apply")),9,Hr)]))),128)),!s.value&&!nt.value.length?(k(),$("p",Wr,b(y(r)("training.presetsDialog.empty")),1)):P("",!0)])),[[Q,s.value]])]),_:1},8,["modelValue","title"])],64)}}}),Gr=["title"],Zr={class:"engine-credit","data-testid":"anima-fast-credit"},Yr={class:"fast-main"},Xr={class:"fast-intro"},Qr={key:0,class:"eyebrow"},ei={key:1},ti={key:2},ni={class:"engine-credit","data-testid":"anima-fast-credit"},ri=["data-state"],ii={key:3,class:"audit-errors"},ai={class:"fast-actions"},oi=["disabled"],si=["disabled"],li={class:"install-console"},ui={class:"install-progress"},ci=ee({__name:"AnimaFastPage",props:{bare:{type:Boolean,default:!1}},setup(e){const t=F({id:"anima-fast",state:"unknown",featureEnabled:!0}),n=F(!1),r=F([]),a=F(0),i=F("");let u,g,f;const{t:c}=te(),w=z(()=>t.value.state==="ready"),O=z(()=>["installing","auditing"].includes(t.value.state)),A=z(()=>{const s=`settings.engines.state.${t.value.state}`,o=c(s);return o===s?t.value.state:o}),_=z(()=>{if(!t.value.featureEnabled||t.value.state==="disabled")return c("settings.engines.hint.disabled");const s=`settings.engines.hint.${t.value.state}`,o=c(s);return o===s?c("settings.engines.hint.unknown"):o});function v(){u!==void 0&&(window.clearInterval(u),u=void 0)}function I(){g?.close(),f?.close(),g=void 0,f=void 0}function E(s,o,d){I(),g=new EventSource(o||`/api/plugins/anima-lora/install/log/stream/${s}`),g.onmessage=p=>{try{const h=JSON.parse(p.data);h.text&&r.value.push(h.text),h.done&&g?.close()}catch{r.value.push(p.data)}},f=new EventSource(d||`/api/plugins/anima-lora/install/progress/stream/${s}`),f.onmessage=p=>{try{const h=JSON.parse(p.data);h.type==="progress"&&(a.value=Number(h.percent||0),i.value=h.message||h.phase||""),(h.done||h.type==="done")&&f?.close()}catch{}}}async function D(s=!0){try{t.value=await Re.status("anima-fast"),w.value&&v();const o=t.value.facts?.task_id;o&&O.value&&!g&&E(o)}catch(o){s&&R.error(o instanceof Error?o.message:c("settings.engines.msg.statusFail"))}}async function l(s=!1){try{await ue.confirm(c(s?"settings.engines.confirm.reinstall":"settings.engines.confirm.animaFast"),c(s?"settings.engines.actions.reinstall":"settings.engines.actions.install"),{type:"warning"}),n.value=!0,r.value=[],a.value=0;const o=s?await Re.repair("anima-fast"):await Re.install("anima-fast");if(o.alreadyReady)return t.value=o.status||t.value,w.value&&v(),R.success(c("settings.engines.msg.ready"));o.taskId&&(E(o.taskId,o.logStream,o.progressStream),u||(u=window.setInterval(()=>D(!1),2e3))),await D(),R.success(c("settings.engines.msg.started"))}catch(o){o!=="cancel"&&o!=="close"&&R.error(o instanceof Error?o.message:c("settings.engines.msg.fail"))}finally{n.value=!1}}return Ge(async()=>{await D(),w.value||(u=window.setInterval(()=>D(!1),2e3))}),Ze(()=>{v(),I()}),(s,o)=>{const d=G("i18n-t");return w.value?(k(),J(At,{key:0,title:"Anima LoRA Fast",area:"anima-lora-fast","schema-name":"anima-lora-fast",bare:e.bare},{"form-top":K(()=>[Ue(s.$slots,"form-top"),m("p",{class:"engine-ready-chip","data-testid":"engine-ready-chip",title:y(c)("settings.engines.hint.ready")},[o[4]||(o[4]=m("i",{"aria-hidden":"true"},null,-1)),m("span",null,b(y(c)("settings.engines.readyChip")),1)],8,Gr),m("p",Zr,[L(d,{keypath:"animaFast.credit",tag:"span",scope:"global"},{upstream:K(()=>[...o[5]||(o[5]=[m("a",{href:"https://github.com/sorryhyun/anima_lora",target:"_blank",rel:"noreferrer"},"sorryhyun/anima_lora",-1)])]),notice:K(()=>[...o[6]||(o[6]=[m("a",{href:"https://github.com/wochenlong/lora-scripts-next/blob/dev/NOTICE.md",target:"_blank",rel:"noreferrer"},"NOTICE.md",-1)])]),_:1})])]),_:3},8,["bare"])):(k(),$("div",{key:1,class:Z(["fast-page",{bare:e.bare}])},[m("div",Yr,[Ue(s.$slots,"form-top"),L(tn,{state:t.value.state,title:A.value,hint:_.value,loading:n.value,"show-install":t.value.featureEnabled&&!O.value,"show-reinstall":t.value.state==="broken",onInstall:o[0]||(o[0]=p=>l(!1)),onReinstall:o[1]||(o[1]=p=>l(!0))},null,8,["state","title","hint","loading","show-install","show-reinstall"]),m("section",Xr,[e.bare?P("",!0):(k(),$("span",Qr,"ANIMA FAST RUNTIME")),e.bare?P("",!0):(k(),$("h1",ei,"Anima LoRA Fast")),e.bare?P("",!0):(k(),$("p",ti,b(y(c)("animaFast.intro")),1)),m("p",ni,[L(d,{keypath:"animaFast.credit",tag:"span",scope:"global"},{upstream:K(()=>[...o[7]||(o[7]=[m("a",{href:"https://github.com/sorryhyun/anima_lora",target:"_blank",rel:"noreferrer"},"sorryhyun/anima_lora",-1)])]),notice:K(()=>[...o[8]||(o[8]=[m("a",{href:"https://github.com/wochenlong/lora-scripts-next/blob/dev/NOTICE.md",target:"_blank",rel:"noreferrer"},"NOTICE.md",-1)])]),_:1})]),m("div",{class:"fast-state","data-state":t.value.state},[m("span",null,b(A.value),1),m("strong",null,b(t.value.state),1)],8,ri),t.value.facts?.audit?.errors?.length?(k(),$("div",ii,[m("strong",null,b(y(c)("animaFast.auditTitle")),1),(k(!0),$(U,null,H(t.value.facts.audit.errors,p=>(k(),$("p",{key:p},b(p),1))),128))])):P("",!0),m("div",ai,[m("button",{class:"primary-action",disabled:n.value||O.value||!t.value.featureEnabled,onClick:o[2]||(o[2]=p=>l(!1))},b(O.value?y(c)("animaFast.installWorking"):y(c)("animaFast.install")),9,oi),t.value.state==="broken"?(k(),$("button",{key:0,class:"secondary-action",disabled:n.value,onClick:o[3]||(o[3]=p=>l(!0))},b(y(c)("settings.engines.actions.reinstall")),9,si)):P("",!0),L(y(pt),{class:"secondary-action",to:"/settings/engines"},{default:K(()=>[ie(b(y(c)("settings.engines.actions.manage")),1)]),_:1})])])]),m("aside",li,[m("header",null,[m("span",null,b(i.value||y(c)("animaFast.consoleIdle")),1),m("b",null,b(a.value)+"%",1)]),m("div",ui,[m("i",{style:Kt({width:`${a.value}%`})},null,4)]),m("pre",null,b(r.value.length?r.value.join(` -`):y(c)("animaFast.consoleWaiting")),1)])],2))}}}),fi={class:"workbench-selector"},di={class:"selector-card"},gi={class:"selector-grid"},mi=["value"],pi=["value","disabled"],hi={key:0,class:"selector-hint"},yi={class:"selector-card"},vi=["aria-label"],bi=["disabled","onClick"],_i={key:0,class:"selector-hint"},Le=ee({__name:"TrainingSelector",props:{model:{required:!0},modelModifiers:{},engine:{required:!0},engineModifiers:{},target:{required:!0},targetModifiers:{}},emits:["update:model","update:engine","update:target"],setup(e){const t=Pe(e,"model"),n=Pe(e,"engine"),r=Pe(e,"target"),{t:a}=te(),i=z(()=>Ne.filter(g=>!pe(t.value,g))),u=z(()=>Ce.filter(g=>!he(t.value,n.value,g)));return(g,f)=>(k(),$("div",fi,[m("div",di,[m("h2",null,b(y(a)("training.selector.group")),1),m("div",gi,[m("label",null,[ie(b(y(a)("training.selector.model"))+" ",1),de(m("select",{"onUpdate:modelValue":f[0]||(f[0]=c=>t.value=c)},[(k(!0),$(U,null,H(y($t),c=>(k(),$("option",{key:c,value:c},b(y(a)(`training.selector.models.${c}`)),9,mi))),128))],512),[[ut,t.value]])]),m("label",null,[ie(b(y(a)("training.selector.engine"))+" ",1),de(m("select",{"onUpdate:modelValue":f[1]||(f[1]=c=>n.value=c)},[(k(!0),$(U,null,H(y(Ne),c=>(k(),$("option",{key:c,value:c,disabled:!y(pe)(t.value,c)},b(y(a)(`training.selector.engines.${c}`)),9,pi))),128))],512),[[ut,n.value]])]),i.value.length?(k(),$("p",hi,b(y(a)("training.selector.unsupportedForModel",{list:i.value.map(c=>y(a)(`training.selector.engines.${c}`)).join(" / ")})),1)):P("",!0)])]),m("div",yi,[m("h2",null,b(y(a)("training.selector.target")),1),m("div",{class:"segmented",role:"group","aria-label":y(a)("training.selector.targetType")},[(k(!0),$(U,null,H(y(Ce),c=>(k(),$("button",{key:c,class:Z({active:r.value===c}),disabled:!y(he)(t.value,n.value,c),onClick:w=>r.value=c},b(y(a)(`training.selector.targets.${c}`)),11,bi))),128))],8,vi),u.value.length?(k(),$("p",_i,b(y(a)("training.selector.unsupportedForModel",{list:u.value.map(c=>y(a)(`training.selector.targets.${c}`)).join(" / ")})),1)):P("",!0)])]))}}),wi={class:"workbench-header"},Ke=ee({__name:"WorkbenchHeader",setup(e){const{t}=te();return(n,r)=>(k(),$("header",wi,[m("div",null,[m("h1",null,b(y(t)("training.title")),1),m("p",null,b(y(t)("training.subtitle")),1)])]))}}),ki={class:"workbench-page"},xi={key:0,class:"workbench-fallback"},Si={class:"unsupported-hint"},Ii=ee({__name:"TrainingWorkbenchPage",setup(e){const t=Ut(),n=vt(),{t:r}=te(),a=F(ze.model),i=F(ze.engine),u=F(ze.target);function g(A){return Ne.includes(A)}function f(A){return Ce.includes(A)}function c(){const A=t.query,_=typeof A.schema=="string"?vr(A.schema):void 0;if(_){a.value=_.model,i.value=_.engine,u.value=_.target;return}const v=!!(A.model||A.engine||A.target),I=yr(A.model);if(I&&(a.value=I),g(A.engine)&&(i.value=A.engine),f(A.target)&&(u.value=A.target),!v){const E=Jt(a.value);E&&(g(E.engine)&&pe(a.value,E.engine)&&(i.value=E.engine),f(E.target)&&he(a.value,i.value,E.target)&&(u.value=E.target))}}c();const w=z(()=>Ot(a.value,i.value,u.value)),O=z(()=>{if(!w.value)return;const A=hr[w.value.schemaName];return{title:r(A.titleKey),area:r(A.areaKey)}});return ce([a,i,u],()=>{let A=!1;pe(a.value,i.value)||(i.value=_r(a.value)??i.value,A=!0),he(a.value,i.value,u.value)||(u.value=wr(a.value,i.value)??u.value,A=!0),A&&R.info(r("training.selector.autoAdjusted")),qt(a.value,i.value,u.value),n.replace({query:{model:a.value,engine:i.value,target:u.value}})}),(A,_)=>(k(),$("div",ki,[w.value?w.value.schemaName==="anima-lora-fast"?(k(),J(ci,{key:1,bare:""},{"form-top":K(()=>[L(Ke),L(Le,{model:a.value,"onUpdate:model":_[3]||(_[3]=v=>a.value=v),engine:i.value,"onUpdate:engine":_[4]||(_[4]=v=>i.value=v),target:u.value,"onUpdate:target":_[5]||(_[5]=v=>u.value=v)},null,8,["model","engine","target"])]),_:1})):O.value?(k(),J(At,{key:w.value.storageKey||w.value.schemaName,bare:"",title:O.value.title,area:O.value.area,"schema-name":w.value.schemaName,"field-defaults":w.value.defaults,"storage-key":w.value.storageKey,"legacy-storage-key":w.value.legacyStorageKey},{"form-top":K(()=>[L(Ke),L(Le,{model:a.value,"onUpdate:model":_[6]||(_[6]=v=>a.value=v),engine:i.value,"onUpdate:engine":_[7]||(_[7]=v=>i.value=v),target:u.value,"onUpdate:target":_[8]||(_[8]=v=>u.value=v)},null,8,["model","engine","target"])]),_:1},8,["title","area","schema-name","field-defaults","storage-key","legacy-storage-key"])):P("",!0):(k(),$("div",xi,[L(Ke),L(Le,{model:a.value,"onUpdate:model":_[0]||(_[0]=v=>a.value=v),engine:i.value,"onUpdate:engine":_[1]||(_[1]=v=>i.value=v),target:u.value,"onUpdate:target":_[2]||(_[2]=v=>u.value=v)},null,8,["model","engine","target"]),m("div",Si,[m("strong",null,b(y(r)("training.selector.unsupported")),1)])]))]))}});export{Ii as default}; diff --git a/frontend/dist/assets/TrainingWorkbenchPage-DotulMGq.js b/frontend/dist/assets/TrainingWorkbenchPage-DotulMGq.js new file mode 100644 index 00000000..81e635f0 --- /dev/null +++ b/frontend/dist/assets/TrainingWorkbenchPage-DotulMGq.js @@ -0,0 +1,34 @@ +import{d as ee,u as te,c as O,a as m,t as v,p as P,F as U,b as y,e as K,R as vt,w as L,f as ie,h as B,o as b,K as Y,i as G,m as Z,j as J,r as H,q as ct,s as F,B as me,L as bt,y as Ze,k as de,l as Ye,M as Lt,N as Ut,G as _t,O as Je,P as wt,Q as Jt,n as qt,S as Pe,C as ft,T as Ht}from"./index-jfqf0I3j.js";import{E as R}from"./index-tjV5EgBi.js";import{E as fe}from"./index-CfMd9kCx.js";import{e as Re,l as Wt,a as Gt,r as Zt}from"./prefs-DCZCUQjC.js";import{s as pe}from"./schemas-D72H6mWJ.js";import{u as Yt}from"./tasks-C7eKb6HN.js";const Xt=["data-state"],Qt={class:"engine-status-copy"},en={key:0},tn={class:"engine-status-actions"},nn=["disabled"],rn=["disabled"],an=["disabled"],on=ee({__name:"EngineStatusBar",props:{state:{},title:{},hint:{},loading:{type:Boolean},showInstall:{type:Boolean},showReinstall:{type:Boolean},showRefresh:{type:Boolean,default:!1},manageOnly:{type:Boolean,default:!1},manageTo:{default:"/settings/engines"}},emits:["refresh","install","reinstall"],setup(e,{emit:t}){const n=e,r=t,{t:a}=te(),i=B(()=>{if(n.title)return n.title;const g=`settings.engines.state.${n.state}`,f=a(g);return f===g?n.state:f}),l=B(()=>{if(n.hint)return n.hint;const g=`settings.engines.hint.${n.state}`,f=a(g);return f===g?"":f});return(g,f)=>(b(),O("div",{class:"engine-status-bar","data-state":e.state,"data-testid":"engine-status-bar"},[m("div",Qt,[m("b",null,v(i.value),1),l.value?(b(),O("span",en,v(l.value),1)):P("",!0)]),m("div",tn,[e.manageOnly?P("",!0):(b(),O(U,{key:0},[e.showRefresh?(b(),O("button",{key:0,type:"button",class:"ghost-button",disabled:e.loading,onClick:f[0]||(f[0]=c=>r("refresh"))},v(y(a)("settings.engines.actions.refresh")),9,nn)):P("",!0),e.showInstall?(b(),O("button",{key:1,type:"button",class:"ghost-button",disabled:e.loading,onClick:f[1]||(f[1]=c=>r("install"))},v(y(a)("settings.engines.actions.install")),9,rn)):P("",!0),e.showReinstall?(b(),O("button",{key:2,type:"button",class:"ghost-button",disabled:e.loading,onClick:f[2]||(f[2]=c=>r("reinstall"))},v(y(a)("settings.engines.actions.reinstall")),9,an)):P("",!0)],64)),K(y(vt),{class:"ghost-button",to:e.manageTo},{default:L(()=>[ie(v(y(a)("settings.engines.actions.manage")),1)]),_:1},8,["to"])])],8,Xt))}});let sn=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i;class se extends Date{#t=!1;#n=!1;#e=null;constructor(t){let n=!0,r=!0,a="Z";if(typeof t=="string"){let i=t.match(sn);i?(i[1]||(n=!1,t=`0000-01-01T${t}`),r=!!i[2],r&&t[10]===" "&&(t=t.replace(" ","T")),i[2]&&+i[2]>23?t="":(a=i[3]||null,t=t.toUpperCase(),!a&&r&&(t+="Z"))):t=""}super(t),isNaN(this.getTime())||(this.#t=n,this.#n=r,this.#e=a)}isDateTime(){return this.#t&&this.#n}isLocal(){return!this.#t||!this.#n||!this.#e}isDate(){return this.#t&&!this.#n}isTime(){return this.#n&&!this.#t}isValid(){return this.#t||this.#n}toISOString(){let t=super.toISOString();if(this.isDate())return t.slice(0,10);if(this.isTime())return t.slice(11,23);if(this.#e===null)return t.slice(0,-1);if(this.#e==="Z")return t;let n=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return n=this.#e[0]==="-"?n:-n,new Date(this.getTime()-n*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(t,n="Z"){let r=new se(t);return r.#e=n,r}static wrapAsLocalDateTime(t){let n=new se(t);return n.#e=null,n}static wrapAsLocalDate(t){let n=new se(t);return n.#n=!1,n.#e=null,n}static wrapAsLocalTime(t){let n=new se(t);return n.#t=!1,n.#e=null,n}}function ln(e,t){let n=e.slice(0,t).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function un(e,t,n){let r=e.split(/\r\n|\n|\r/g),a="",i=(Math.log10(t+1)|0)+1;for(let l=t-1;l<=t+1;l++){let g=r[l-1];g&&(a+=l.toString().padEnd(i," "),a+=": ",a+=g,a+=` +`,l===t&&(a+=" ".repeat(i+n+2),a+=`^ +`))}return a}class D extends Error{line;column;codeblock;constructor(t,n){const[r,a]=ln(n.toml,n.ptr),i=un(n.toml,r,a);super(`Invalid TOML document: ${t} + +${i}`,n),this.line=r,this.column=a,this.codeblock=i}}let cn=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,fn=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,dn=/^[+-]?0[0-9_]/;function kt(e,t){let n=e[t++],r=n,a=n==="'",i=n===e[t]&&n===e[t+1];i&&(e[t+=2]===` +`?t++:e[t]==="\r"&&e[t+1]===` +`&&(t+=2));let l="",g=t,f=0;for(let c=t;c=48&&$<=57?$-48:$>=65&&$<=70?$-65+10:$>=97&&$<=102?$-97+10:-1;if(_<0)throw new D("invalid non-hex character in unicode escape",{toml:e,ptr:c+1});w=w<<4|_}if(w<0||w>1114111||w>=55296&&w<=57343)throw new D("invalid unicode escape",{toml:e,ptr:c});l+=String.fromCodePoint(w),g=c+1,f=0}else if(n===" "||n===" ")f=2;else{if(n==="b")l+="\b";else if(n==="t")l+=" ";else if(n==="n")l+=` +`;else if(n==="f")l+="\f";else if(n==="r")l+="\r";else if(n==="e")l+="\x1B";else if(n==='"')l+='"';else if(n==="\\")l+="\\";else throw new D("unrecognized escape sequence",{toml:e,ptr:c});g=c+1,f=0}else if(n!==" "&&n!==" "){if(f===2)throw new D("invalid escape: only line-ending whitespace may be escaped",{toml:e,ptr:g});f=!a&&n==="\\"?1:0,g=c}}throw new D("unfinished string",{toml:e,ptr:t})}function gn(e,t,n,r){if(e==="true")return!0;if(e==="false")return!1;if(e==="-inf")return-1/0;if(e==="inf"||e==="+inf")return 1/0;if(e==="nan"||e==="+nan"||e==="-nan")return NaN;if(e==="-0")return r?0n:0;let a=cn.test(e);if(a||fn.test(e)){if(dn.test(e))throw new D("leading zeroes are not allowed",{toml:t,ptr:n});e=e.replace(/_/g,"");let l=+e;if(isNaN(l))throw new D("invalid number",{toml:t,ptr:n});if(a){if((a=!Number.isSafeInteger(l))&&!r)throw new D("integer value cannot be represented losslessly",{toml:t,ptr:n});(a||r===!0)&&(l=BigInt(e))}return l}const i=new se(e);if(!i.isValid())throw new D("invalid value",{toml:t,ptr:n});return i}function qe(e,t=0,n=e.length){let r=e.indexOf(` +`,t);return e[r-1]==="\r"&&r--,r<=n?r:-1}function Ce(e,t){for(let n=t;n-1&&(Ce(e,a),r=r.slice(0,a)),[r.trimEnd(),a]}function Xe(e,t,n,r,a){if(r===0)throw new D("document contains excessively nested structures. aborting.",{toml:e,ptr:t});let i=e[t];if(i==="["||i==="{"){let[f,c]=i==="["?vn(e,t,r,a):yn(e,t,r,a);if(n){if(c=re(e,c),e[c]===",")c++;else if(e[c]!==n)throw new D("expected comma or end of structure",{toml:e,ptr:c})}return[f,c]}if(i==='"'||i==="'"){let[f,c]=kt(e,t);if(n){if(c=re(e,c),e[c]&&e[c]!==","&&e[c]!==n&&e[c]!==` +`&&e[c]!=="\r")throw new D("unexpected character encountered",{toml:e,ptr:c});e[c]===","&&c++}return[f,c]}let l=mn(e,t,",",n),g=pn(e,t,l-(e[l-1]===","?1:0));if(!g[0])throw new D("incomplete key-value declaration: no value specified",{toml:e,ptr:t});return n&&g[1]>-1&&(l=re(e,t+g[1]),e[l]===","&&l++),[gn(g[0],e,t,a),l]}let hn=/^[a-zA-Z0-9-_]+[ \t]*$/;function He(e,t,n="="){let r=t-1,a=[],i=e.indexOf(n,t);if(i<0)throw new D("incomplete key-value: cannot find end of key",{toml:e,ptr:t});do{let l=e[t=++r];if(l!==" "&&l!==" ")if(l==='"'||l==="'"){if(l===e[t+1]&&l===e[t+2])throw new D("multiline strings are not allowed in keys",{toml:e,ptr:t});let[g,f]=kt(e,t);r=e.indexOf(".",f);let c=e.slice(f,r<0||r>i?i:r),w=qe(c);if(w>-1)throw new D("newlines are not allowed in keys",{toml:e,ptr:t+r+w});if(c.trimStart())throw new D("found extra tokens after the string part",{toml:e,ptr:f});if(ii?i:r);if(!hn.test(g))throw new D("only letter, numbers, dashes and underscores are allowed in keys",{toml:e,ptr:t});a.push(g.trimEnd())}}while(r+1&&rt(n,r)))}function ne(e,t){return Object.fromEntries(Object.entries(e).map(([n,r])=>[n,t(r,n)]))}function xn(e,t,n){if(!t)return{...e};const r={};for(const a of t)e[a]!==void 0&&(r[a]=e[a]);return r}function ae(e,t){return arguments.length===1?n=>ae(e,n):e in globalThis&&t instanceof globalThis[e]||Object.prototype.toString.call(t).slice(8,-1)===e}function Ie(e){return ae("ArrayBuffer",e)||ae("SharedArrayBuffer",e)}function $n(e){return Ie(e)||ArrayBuffer.isView(e)}var X;(e=>{e.is=Ie,e.isSource=$n;function t(l){return ArrayBuffer.isView(l)?l.buffer.slice(l.byteOffset,l.byteOffset+l.byteLength):l}e.fromSource=t;function n(l){if(l=t(l),typeof Buffer<"u")return Buffer.from(l).toString("base64");let g="";const f=new Uint8Array(l);for(let c=0;cg.charCodeAt(0))}e.fromBase64=r;function a(l){return l=t(l),typeof Buffer<"u"?Buffer.from(l).toString("hex"):Array.from(new Uint8Array(l),g=>g.toString(16).padStart(2,"0")).join("")}e.toHex=a;function i(l){if(typeof Buffer<"u")return t(Buffer.from(l,"hex"));const g=l.length%2===0?l:l.slice(0,l.length-1),f=[];for(let c=0;c{a[l]=Reflect.apply(We,null,[i,t])}),a}const r=Object.create(Object.getPrototypeOf(e));t.set(e,r);for(const a of Reflect.ownKeys(e)){const i={...Reflect.getOwnPropertyDescriptor(e,a)};"value"in i&&(i.value=Reflect.apply(We,null,[i.value,t])),Reflect.defineProperty(r,a,i)}return r}function ge(e,t,n){if(e===t||!n&&q(e)&&q(t))return!0;if(typeof e!=typeof t||typeof e!="object"||!e||!t)return!1;function r(a,i){return a(e)?a(t)?i(e,t):!1:a(t)?!1:void 0}return r(Array.isArray,(a,i)=>a.length===i.length&&a.every((l,g)=>ge(l,i[g])))??r(ae("Date"),(a,i)=>a.valueOf()===i.valueOf())??r(ae("RegExp"),(a,i)=>a.source===i.source&&a.flags===i.flags)??r(Ie,(a,i)=>{if(a.byteLength!==i.byteLength)return!1;const l=new Uint8Array(a),g=new Uint8Array(i);for(let f=0;fge(e[a],t[a],n))}var mt;(e=>{e.millisecond=1,e.second=1e3,e.minute=e.second*60,e.hour=e.minute*60,e.day=e.hour*24,e.week=e.day*7;let t=new Date().getTimezoneOffset();function n($){t=$}e.setTimezoneOffset=n;function r(){return t}e.getTimezoneOffset=r;function a($=new Date,_){return typeof $=="number"&&($=new Date($)),_===void 0&&(_=t),Math.floor(($.valueOf()/e.minute-_)/1440)}e.getDateNumber=a;function i($,_){const C=new Date($*e.day);return _===void 0&&(_=t),new Date(+C+_*e.minute)}e.fromDateNumber=i;const l=/\d+(?:\.\d+)?/.source,g=new RegExp(`^${["w(?:eek(?:s)?)?","d(?:ay(?:s)?)?","h(?:our(?:s)?)?","m(?:in(?:ute)?(?:s)?)?","s(?:ec(?:ond)?(?:s)?)?"].map($=>`(${l}${$})?`).join("")}$`);function f($){const _=g.exec($);return _?(parseFloat(_[1])*e.week||0)+(parseFloat(_[2])*e.day||0)+(parseFloat(_[3])*e.hour||0)+(parseFloat(_[4])*e.minute||0)+(parseFloat(_[5])*e.second||0):0}e.parseTime=f;function c($){const _=f($);return _?$=Date.now()+_:/^\d{1,2}(:\d{1,2}){1,2}$/.test($)?$=`${new Date().toLocaleDateString()}-${$}`:/^\d{1,2}-\d{1,2}-\d{1,2}(:\d{1,2}){1,2}$/.test($)&&($=`${new Date().getFullYear()}-${$}`),$?new Date($):new Date}e.parseDate=c;function w($){const _=Math.abs($);return _>=e.day-e.hour/2?Math.round($/e.day)+"d":_>=e.hour-e.minute/2?Math.round($/e.hour)+"h":_>=e.minute-e.second/2?Math.round($/e.minute)+"m":_>=e.second?Math.round($/e.second)+"s":$+"ms"}e.format=w;function S($,_=2){return $.toString().padStart(_,"0")}e.toDigits=S;function E($,_=new Date){return $.replace("yyyy",_.getFullYear().toString()).replace("yy",_.getFullYear().toString().slice(2)).replace("MM",S(_.getMonth()+1)).replace("dd",S(_.getDate())).replace("hh",S(_.getHours())).replace("mm",S(_.getMinutes())).replace("ss",S(_.getSeconds())).replace("SSS",S(_.getMilliseconds(),3))}e.template=E})(mt||(mt={}));var On=Object.defineProperty,An=Object.getOwnPropertyNames,T=(e,t)=>On(e,"name",{value:t,configurable:!0}),En=(e,t)=>function(){return t||(0,e[An(e)[0]])((t={exports:{}}).exports,t),t.exports},Nn=En({"src/index.ts"(e,t){var j;var n=Symbol.for("schemastery"),r=Symbol.for("ValidationError");globalThis.__schemastery_index__??=0,globalThis.__schemastery_refs__=void 0;var a=(j=class extends TypeError{constructor(s,o){let d="$";for(const p of o.path||[])typeof p=="string"?d+="."+p:typeof p=="number"?d+="["+p+"]":typeof p=="symbol"&&(d+=`[Symbol(${p.toString()})]`);d.startsWith(".")&&(d=d.slice(1)),super((d==="$"?"":`${d} `)+s),this.options=o}name="ValidationError";static is(s){return!!s?.[r]}},T(j,"ValidationError"),j);Object.defineProperty(a.prototype,r,{value:!0});var i=T(function(u){const s=T(function(o,d={}){return i.resolve(o,s,d)[0]},"schema");if(u.refs){const o=ne(u.refs,p=>new i(p)),d=T(p=>o[p],"getRef");for(const p in o){const h=o[p];h.sKey=d(h.sKey),h.inner=d(h.inner),h.list=h.list&&h.list.map(d),h.dict=h.dict&&ne(h.dict,d)}return o[u.uid]}if(Object.assign(s,u),typeof s.callback=="string")try{s.callback=new Function("return "+s.callback)()}catch{}return Object.defineProperty(s,"uid",{value:globalThis.__schemastery_index__++}),Object.setPrototypeOf(s,i.prototype),s.meta||={},s.toString=s.toString.bind(s),s},"Schema");i.prototype=Object.create(Function.prototype),i.prototype[n]=!0,Object.defineProperty(i.prototype,"~standard",{get(){return{version:1,vendor:"schemastery",validate:T(u=>{try{return{value:i.resolve(u,this,{})[0]}}catch(s){if(a.is(s))return{issues:[{message:s.message,path:s.options.path}]};throw s}},"validate")}}}),i.ValidationError=a,i.prototype.toJSON=T(function(){if(globalThis.__schemastery_refs__)return globalThis.__schemastery_refs__[this.uid]??=JSON.parse(JSON.stringify({...this})),this.uid;globalThis.__schemastery_refs__={[this.uid]:{...this}},globalThis.__schemastery_refs__[this.uid]=JSON.parse(JSON.stringify({...this}));const s={uid:this.uid,refs:globalThis.__schemastery_refs__};return globalThis.__schemastery_refs__=void 0,s},"toJSON"),i.prototype.set=T(function(s,o){return this.dict[s]=o,this},"set"),i.prototype.push=T(function(s){return this.list.push(s),this},"push");function l(u,s){const o=typeof u=="string"?{"":u}:{...u};for(const d in s){const p=s[d];p?.$description||p?.$desc?o[d]=p.$description||p.$desc:typeof p=="string"&&(o[d]=p)}return o}T(l,"mergeDesc");function g(u){return u?.$value??u?.$inner}T(g,"getInner");function f(u){return Sn(u??{},s=>!s.startsWith("$"))}T(f,"extractKeys"),i.prototype.i18n=T(function(s){const o=i(this),d=l(o.meta.description,s);return Object.keys(d).length&&(o.meta.description=d),o.dict&&(o.dict=ne(o.dict,(p,h)=>p.i18n(ne(s,x=>g(x)?.[h]??x?.[h])))),o.list&&(o.list=o.list.map((p,h)=>p.i18n(ne(s,(x={})=>Array.isArray(g(x))?g(x)[h]:Array.isArray(x)?x[h]:f(x))))),o.inner&&(o.inner=o.inner.i18n(ne(s,p=>g(p)?g(p):f(p)))),o.sKey&&(o.sKey=o.sKey.i18n(ne(s,p=>p?.$key))),o},"i18n"),i.prototype.extra=T(function(s,o){const d=i(this);return d.meta={...d.meta,[s]:o},d},"extra");for(const u of["required","disabled","collapse","hidden","loose"])Object.assign(i.prototype,{[u](s=!0){const o=i(this);return o.meta={...o.meta,[u]:s},o}});i.prototype.deprecated=T(function(){const s=i(this);return s.meta.badges||=[],s.meta.badges.push({text:"deprecated",type:"danger"}),s},"deprecated"),i.prototype.experimental=T(function(){const s=i(this);return s.meta.badges||=[],s.meta.badges.push({text:"experimental",type:"warning"}),s},"experimental"),i.prototype.pattern=T(function(s){const o=i(this),d=xn(s,["source","flags"]);return o.meta={...o.meta,pattern:d},o},"pattern"),i.prototype.simplify=T(function(s){if(ge(s,this.meta.default,this.type==="dict"))return null;if(q(s))return s;if(this.type==="object"||this.type==="dict"){const o={};for(const d in s){const h=(this.type==="object"?this.dict[d]:this.inner)?.simplify(s[d]);(this.type==="dict"||!q(h))&&(o[d]=h)}return ge(o,this.meta.default,this.type==="dict")?null:o}else if(this.type==="array"||this.type==="tuple"){const o=[];return s.forEach((d,p)=>{const h=this.type==="array"?this.inner:this.list[p],x=h?h.simplify(d):d;o.push(x)}),o}else if(this.type==="intersect"){const o={};for(const d of this.list)Object.assign(o,d.simplify(s));return o}else if(this.type==="union")for(const o of this.list)try{return i.resolve(s,o,{}),o.simplify(s)}catch{}return s},"simplify"),i.prototype.toString=T(function(s){return C[this.type]?.(this,s)??`Schema<${this.type}>`},"toString"),i.prototype.role=T(function(u,s){const o=i(this);return o.meta={...o.meta,role:u,extra:s},o},"role");for(const u of["default","link","comment","description","max","min","step"])Object.assign(i.prototype,{[u](s){const o=i(this);return o.meta={...o.meta,[u]:s},o}});var c={};i.extend=T(function(s,o){c[s]=o},"extend"),i.resolve=T(function(s,o,d={},p=!1){if(!o)return[s];if(d.ignore?.(s,o))return[s];if(q(s)&&o.type!=="lazy"){if(o.meta.required)throw new a("missing required value",d);let x=o,N=o.meta.default;for(;x?.type==="intersect"&&q(N);)x=x.list[0],N=x?.meta.default;if(q(N))return[s];s=We(N)}const h=c[o.type];if(!h)throw new a(`unsupported type "${o.type}"`,d);try{return h(s,o,d,p)}catch(x){if(!o.meta.loose)throw x;return[o.meta.default]}},"resolve"),i.from=T(function(s){if(q(s))return i.any();if(["string","number","boolean"].includes(typeof s))return i.const(s).required();if(s[n])return s;if(typeof s=="function")switch(s){case String:return i.string().required();case Number:return i.number().required();case Boolean:return i.boolean().required();case Function:return i.function().required();default:return i.is(s).required()}else throw new TypeError(`cannot infer schema from ${s}`)},"from"),i.lazy=T(function(s){const o=T(()=>(d.inner[n]||(d.inner=d.builder(),d.inner.meta={...d.meta,...d.inner.meta}),d.inner.toJSON()),"toJSON"),d=new i({type:"lazy",builder:s,inner:{toJSON:o}});return d},"lazy"),i.natural=T(function(){return i.number().step(1).min(0)},"natural"),i.percent=T(function(){return i.number().step(.01).min(0).max(1).role("slider")},"percent"),i.date=T(function(){return i.union([i.is(Date),i.transform(i.string().role("datetime"),(s,o)=>{const d=new Date(s);if(isNaN(+d))throw new a(`invalid date "${s}"`,o);return d},!0)])},"date"),i.regExp=T(function(s=""){return i.union([i.is(RegExp),i.transform(i.string().role("regexp",{flag:s}),(o,d)=>{try{return new RegExp(o,s)}catch(p){throw new a(p.message,d)}},!0)])},"regExp"),i.arrayBuffer=T(function(s){return i.union([i.is(ArrayBuffer),i.is(SharedArrayBuffer),i.transform(i.any(),(o,d)=>{if(X.isSource(o))return X.fromSource(o);throw new a(`expected ArrayBufferSource but got ${o}`,d)},!0),...s?[i.transform(i.string(),(o,d)=>{try{return s==="base64"?X.fromBase64(o):X.fromHex(o)}catch(p){throw new a(p.message,d)}},!0)]:[]])},"arrayBuffer"),i.extend("lazy",(u,s,o,d)=>(s.inner[n]||(s.inner=s.builder(),s.inner.meta={...s.meta,...s.inner.meta}),i.resolve(u,s.inner,o,d))),i.extend("any",u=>[u]),i.extend("never",(u,s,o)=>{throw new a(`expected nullable but got ${u}`,o)}),i.extend("const",(u,{value:s},o)=>{if(ge(u,s))return[s];throw new a(`expected ${s} but got ${u}`,o)});function w(u,s,o,d,p=!1){const{max:h=1/0,min:x=-1/0}=s;if(u>h)throw new a(`expected ${o} <= ${h} but got ${u}`,d);if(u= ${x} but got ${u}`,d)}T(w,"checkWithinRange"),i.extend("string",(u,{meta:s},o)=>{if(typeof u!="string")throw new a(`expected string but got ${u}`,o);if(s.pattern){const d=new RegExp(s.pattern.source,s.pattern.flags);if(!d.test(u))throw new a(`expect string to match regexp ${d}`,o)}return w(u.length,s,"string length",o),[u]});function S(u,s){const o=u.toString();if(o.includes("e"))return u*Math.pow(10,s);const d=o.indexOf(".");if(d===-1)return u*Math.pow(10,s);const p=o.slice(d+1),h=o.slice(0,d);return p.length<=s?+(h+p.padEnd(s,"0")):+(h+p.slice(0,s)+"."+p.slice(s))}T(S,"decimalShift");function E(u,s,o){if(o=Math.abs(o),!/^\d+\.\d+$/.test(o.toString()))return(u-s)%o===0;const d=o.toString().indexOf("."),p=o.toString().slice(d+1).length;return Math.abs(S(u,p)-S(s,p))%S(o,p)===0}T(E,"isMultipleOf"),i.extend("number",(u,{meta:s},o)=>{if(typeof u!="number")throw new a(`expected number but got ${u}`,o);w(u,s,"number",o);const{step:d}=s;if(d&&!E(u,s.min??0,d))throw new a(`expected number multiple of ${d} but got ${u}`,o);return[u]}),i.extend("boolean",(u,s,o)=>{if(typeof u=="boolean")return[u];throw new a(`expected boolean but got ${u}`,o)}),i.extend("bitset",(u,{bits:s,meta:o},d)=>{let p=0,h=[];if(typeof u=="number"){p=u;for(const x in s)u&s[x]&&h.push(x)}else if(Array.isArray(u)){h=u;for(const x of h){if(typeof x!="string")throw new a(`expected string but got ${x}`,d);x in s&&(p|=s[x])}}else throw new a(`expected number or array but got ${u}`,d);return p===o.default?[p]:[p,h]}),i.extend("function",(u,s,o)=>{if(typeof u=="function")return[u];throw new a(`expected function but got ${u}`,o)}),i.extend("is",(u,{constructor:s},o)=>{if(typeof s=="function"){if(u instanceof s)return[u];throw new a(`expected ${s.name} but got ${u}`,o)}else{if(q(u))throw new a(`expected ${s} but got ${u}`,o);let d=Object.getPrototypeOf(u);for(;d;){if(d.constructor?.name===s)return[u];d=Object.getPrototypeOf(d)}throw new a(`expected ${s} but got ${u}`,o)}});function $(u,s,o,d){try{const[p,h]=i.resolve(u[s],o,{...d,path:[...d.path||[],s]});return h!==void 0&&(u[s]=h),p}catch(p){if(!d?.autofix)throw p;return delete u[s],o.meta.default}}T($,"property"),i.extend("array",(u,{inner:s,meta:o},d)=>{if(!Array.isArray(u))throw new a(`expected array but got ${u}`,d);return w(u.length,o,"array length",d,!q(s.meta.default)),[u.map((p,h)=>$(u,h,s,d))]}),i.extend("dict",(u,{inner:s,sKey:o},d,p)=>{if(!Be(u))throw new a(`expected object but got ${u}`,d);const h={};for(const x in u){let N;try{N=i.resolve(x,o,d)[0]}catch(ve){if(p)continue;throw ve}h[N]=$(u,x,s,d),u[N]=u[x],x!==N&&delete u[x]}return[h]}),i.extend("tuple",(u,{list:s},o,d)=>{if(!Array.isArray(u))throw new a(`expected array but got ${u}`,o);const p=s.map((h,x)=>$(u,x,h,o));return d?[p]:(p.push(...u.slice(s.length)),[p])});function _(u,s){for(const o in s)o in u||(u[o]=s[o])}T(_,"merge"),i.extend("object",(u,{dict:s},o,d)=>{if(!Be(u))throw new a(`expected object but got ${u}`,o);const p={};for(const h in s){const x=$(u,h,s[h],o);(!q(x)||h in u)&&(p[h]=x)}return d||_(p,u),[p]}),i.extend("union",(u,{list:s,toString:o},d,p)=>{for(const h of s)try{return i.resolve(u,h,d,p)}catch{}throw new a(`expected ${o()} but got ${JSON.stringify(u)}`,d)}),i.extend("intersect",(u,{list:s,toString:o},d,p)=>{if(!s.length)return[u];let h;for(const x of s){const N=i.resolve(u,x,d,!0)[0];if(!q(N))if(q(h))h=N;else{if(typeof h!=typeof N)throw new a(`expected ${o()} but got ${JSON.stringify(u)}`,d);if(typeof N=="object")_(h??={},N);else if(h!==N)throw new a(`expected ${o()} but got ${JSON.stringify(u)}`,d)}}return!p&&Be(u)&&_(h,u),[h]}),i.extend("transform",(u,{inner:s,callback:o,preserve:d},p)=>{const[h,x=u]=i.resolve(u,s,p,!0);return d?[o(h)]:[o(h),o(x)]});var C={};function M(u,s,o){C[u]=o,Object.assign(i,{[u](...d){const p=new i({type:u});return s.forEach((h,x)=>{switch(h){case"sKey":p.sKey=d[x]??i.string();break;case"inner":p.inner=i.from(d[x]);break;case"list":p.list=d[x].map(i.from);break;case"dict":p.dict=ne(d[x],i.from);break;case"bits":{p.bits={};for(const N in d[x])typeof d[x][N]=="number"&&(p.bits[N]=d[x][N]);break}case"callback":{const N=p.callback=d[x];N.toJSON||=()=>N.toString();break}case"constructor":{const N=p.constructor=d[x];typeof N=="function"&&(N.toJSON||=()=>N.name);break}default:p[h]=d[x]}}),u==="object"||u==="dict"?p.meta.default={}:u==="array"||u==="tuple"?p.meta.default=[]:u==="bitset"&&(p.meta.default=0),p}})}T(M,"defineMethod"),M("is",["constructor"],({constructor:u})=>typeof u=="function"?u.name:u),M("any",[],()=>"any"),M("never",[],()=>"never"),M("const",["value"],({value:u})=>typeof u=="string"?JSON.stringify(u):u),M("string",[],()=>"string"),M("number",[],()=>"number"),M("boolean",[],()=>"boolean"),M("bitset",["bits"],()=>"bitset"),M("function",[],()=>"function"),M("array",["inner"],({inner:u})=>`${u.toString(!0)}[]`),M("dict",["inner","sKey"],({inner:u,sKey:s})=>`{ [key: ${s.toString()}]: ${u.toString()} }`),M("tuple",["list"],({list:u})=>`[${u.map(s=>s.toString()).join(", ")}]`),M("object",["dict"],({dict:u})=>Object.keys(u).length===0?"{}":`{ ${Object.entries(u).map(([s,o])=>`${s}${o.meta.required?"":"?"}: ${o.toString()}`).join(", ")} }`),M("union",["list"],({list:u},s)=>{const o=u.map(({toString:d})=>d()).join(" | ");return s?`(${o})`:o}),M("intersect",["list"],({list:u})=>`${u.map(s=>s.toString(!0)).join(" & ")}`),M("transform",["inner","callback","preserve"],({inner:u},s)=>u.toString(s)),t.exports=i}});const Cn=Nn();function nt(e){return Array.isArray(e)?[...e]:e}function Ae(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,nt(n)]))}const In="(masterpiece, best quality:1.2), 1girl, solo, --n lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, --w 512 --h 768 --l 7 --s 24 --d 1337";function Tn(e,t,n){const r={...e,...t};return n?.forEach(a=>delete r[a]),r}function pt(e,t){const n={__MIKAZUKI__:{SAMPLE_PROMPTS_DEFAULT:In,SAMPLE_PROMPTS_DESCRIPTION:Y.global.t("schema.samplePromptsDescription")}},r=e.trim().replace(/;\s*$/,"");return new Function("Schema","SHARED_SCHEMAS","UpdateSchema","window",`"use strict"; return (${r});`)(Cn,t,Tn,n)}function Mn(e,t){const n=e.find(l=>l.name==="shared"),r=e.find(l=>l.name===t);if(!r)throw new Error(Y.global.t("schema.notProvided",{name:t}));const a=n?pt(n.schema):void 0,i=pt(r.schema,a);if(typeof i!="function"||!i.type)throw new Error(Y.global.t("schema.invalid",{name:t}));return{name:t,hash:r.hash,schema:i,sections:Dn(i)}}function Ge(e){return typeof e?.description=="string"?e.description:e?.description?.["zh-CN"]||e?.description?.[""]}function $t(e){return e.type==="object"?Object.entries(e.dict??{}).filter(([,t])=>t.type==="const"&&!t.meta.hidden).map(([t,n])=>({key:t,value:n.value})):e.type==="intersect"?(e.list??[]).flatMap($t):[]}function jn(e,t,n){if(t.type==="union"&&t.list?.every(r=>r.type==="const"))return{key:e,type:"string",description:Ge(t.meta),defaultValue:t.meta.default,required:t.meta.required,hidden:t.meta.hidden,disabled:t.meta.disabled,options:t.list.map(r=>r.value),conditions:n};if(["string","number","boolean","array","const"].includes(t.type))return{key:e,type:t.type,description:Ge(t.meta),role:t.meta.role,extra:t.meta.extra,defaultValue:t.meta.default??(t.type==="array"?[]:void 0),constValue:t.value,required:t.meta.required,hidden:t.meta.hidden,disabled:t.meta.disabled,min:t.meta.min,max:t.meta.max,step:t.meta.step,conditions:n}}function Oe(e,t=[]){return e.type==="object"?Object.entries(e.dict??{}).flatMap(([n,r])=>{const a=jn(n,r,t);return a?[a]:Oe(r,t)}):e.type==="intersect"?(e.list??[]).flatMap(n=>Oe(n,t)):e.type==="union"?(e.list??[]).flatMap(n=>{const r=$t(n),a=new Set(r.map(i=>i.key));return Oe(n,[...t,...r]).filter(i=>!a.has(i.key))}):[]}function Dn(e){const t=e.type==="intersect"?e.list??[]:[e],n=[];let r=0;const a=(l,g)=>{if(!g.length)return;const f=n.at(-1);if(!l&&f){f.fields.push(...g);return}const c=l||Y.global.t("schema.advancedSection");n.push({id:`${c}-${r++}`,title:c,fields:g})},i=l=>{const g=Ge(l.meta);if(!g&&l.type==="intersect"){for(const f of l.list??[])i(f);return}a(g,Oe(l))};for(const l of t)i(l);return n}function Te(e,t){return e.conditions.every(n=>t[n.key]===n.value)}function ke(e){const t={};for(const n of e.sections.flatMap(r=>r.fields)){const r=n.defaultValue??n.constValue;r!==void 0&&t[n.key]===void 0&&(t[n.key]=nt(r))}return t}function Vn(e,t){const n={};for(const r of e.sections.flatMap(a=>a.fields)){if(!Te(r,t))continue;const a=r.type==="const"?r.constValue:t[r.key];a===void 0||a===""||Array.isArray(a)&&!a.length||(n[r.key]=nt(a))}return n}function Fn(e,t){const n={};for(const r of e.sections.flatMap(a=>a.fields)){if(!Te(r,t)||r.hidden)continue;const a=t[r.key];r.required&&(a===void 0||a===""||Array.isArray(a)&&!a.length)?n[r.key]=Y.global.t("schema.required"):typeof a=="number"&&r.min!==void 0&&ar.max&&(n[r.key]=Y.global.t("schema.tooLarge",{max:r.max}))}return n}const Pn={class:"field-text"},Rn={class:"field-label"},Bn={key:0},zn={key:0,class:"field-description"},Kn={class:"field-control"},Ln={key:5,class:"filepicker-control"},Un={key:0,class:"field-error"},Jn={class:"picker-list"},qn=["onClick"],Hn={key:0},Wn=ee({__name:"SchemaField",props:{field:{},modelValue:{type:[String,Number,Boolean,Array]},error:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,r=t,{t:a}=te(),i=F([]),l=F(!1),g=F(!1),f=B(()=>String(n.field.extra?.type||"folder")),c=B(()=>n.field.extra?.internal?String(n.field.extra.internal):""),w=B({get:()=>Array.isArray(n.modelValue)?n.modelValue.join(` +`):"",set:_=>r("update:modelValue",_.split(/\r?\n/).filter(Boolean))}),S=B(()=>n.field.type==="boolean"||n.field.type==="number"||n.field.options?!0:n.field.type==="string"&&!n.field.role);async function E(){g.value=!0;try{const _=await pe.pickFile(f.value);r("update:modelValue",_.path.replaceAll("\\","/"))}catch(_){R.error(_ instanceof Error?_.message:a("schemaForm.pickFail"))}finally{g.value=!1}}async function $(){try{i.value=(await pe.files(c.value)).files,l.value=!0}catch(_){R.error(_ instanceof Error?_.message:a("schemaForm.catalogFail"))}}return(_,C)=>{const M=G("el-switch"),j=G("el-option"),u=G("el-select"),s=G("el-input-number"),o=G("el-input"),d=G("el-button"),p=G("el-dialog");return b(),O(U,null,[m("label",{class:Z(["schema-field",{"has-error":e.error,"schema-field--compact":S.value}])},[m("span",Pn,[m("span",Rn,[m("code",null,v(e.field.key),1),e.field.required?(b(),O("b",Bn,v(y(a)("schemaForm.required")),1)):P("",!0)]),e.field.description?(b(),O("span",zn,v(e.field.description),1)):P("",!0)]),m("span",Kn,[e.field.type==="boolean"?(b(),J(M,{key:0,"model-value":!!e.modelValue,disabled:e.field.disabled,"onUpdate:modelValue":C[0]||(C[0]=h=>r("update:modelValue",h))},null,8,["model-value","disabled"])):e.field.options?(b(),J(u,{key:1,"model-value":e.modelValue,disabled:e.field.disabled,multiple:e.field.type==="array",clearable:"","onUpdate:modelValue":C[1]||(C[1]=h=>r("update:modelValue",h))},{default:L(()=>[(b(!0),O(U,null,H(e.field.options,h=>(b(),J(j,{key:String(h),label:String(h)||y(a)("schemaForm.emptyOption"),value:h??""},null,8,["label","value"]))),128))]),_:1},8,["model-value","disabled","multiple"])):e.field.type==="number"?(b(),J(s,{key:2,"model-value":e.modelValue,disabled:e.field.disabled,min:e.field.min,max:e.field.max,step:e.field.step||1,"controls-position":"right","onUpdate:modelValue":C[2]||(C[2]=h=>r("update:modelValue",h??void 0))},null,8,["model-value","disabled","min","max","step"])):e.field.type==="array"||e.field.role==="table"?(b(),J(o,{key:3,modelValue:w.value,"onUpdate:modelValue":C[3]||(C[3]=h=>w.value=h),type:"textarea",rows:4,disabled:e.field.disabled,placeholder:y(a)("schemaForm.arrayPlaceholder")},null,8,["modelValue","disabled","placeholder"])):e.field.role==="textarea"?(b(),J(o,{key:4,"model-value":e.modelValue,type:"textarea",rows:5,disabled:e.field.disabled,"onUpdate:modelValue":C[4]||(C[4]=h=>r("update:modelValue",h))},null,8,["model-value","disabled"])):e.field.role==="filepicker"?(b(),O("span",Ln,[K(o,{"model-value":e.modelValue,disabled:e.field.disabled,"onUpdate:modelValue":C[5]||(C[5]=h=>r("update:modelValue",h))},null,8,["model-value","disabled"]),K(d,{loading:g.value,disabled:e.field.disabled,onClick:ct(E,["prevent"])},{default:L(()=>[ie(v(y(a)("schemaForm.browse")),1)]),_:1},8,["loading","disabled"]),c.value?(b(),J(d,{key:0,disabled:e.field.disabled,onClick:ct($,["prevent"])},{default:L(()=>[ie(v(y(a)("schemaForm.commonPaths")),1)]),_:1},8,["disabled"])):P("",!0)])):(b(),J(o,{key:6,"model-value":e.modelValue,disabled:e.field.disabled||e.field.type==="const","onUpdate:modelValue":C[6]||(C[6]=h=>r("update:modelValue",h))},null,8,["model-value","disabled"]))]),e.error?(b(),O("span",Un,v(e.error),1)):P("",!0)],2),K(p,{modelValue:l.value,"onUpdate:modelValue":C[7]||(C[7]=h=>l.value=h),title:y(a)("schemaForm.catalogTitle"),width:"min(680px, 92vw)"},{default:L(()=>[m("div",Jn,[(b(!0),O(U,null,H(i.value,h=>(b(),O("button",{key:h.path,onClick:x=>{r("update:modelValue",h.path),l.value=!1}},[m("strong",null,v(h.name),1),m("span",null,v(h.path),1),h.size?(b(),O("small",Hn,v(h.size),1)):P("",!0)],8,qn))),128))])]),_:1},8,["modelValue","title"])],64)}}}),Gn={class:"schema-form"},Zn=["id"],Yn={class:"schema-fields"},Xn=ee({__name:"DynamicSchemaForm",props:{schema:{},modelValue:{},errors:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,r=t,{t:a}=te(),i=B(()=>{const f=new Map;for(const c of n.schema.sections)for(const w of c.fields)Te(w,n.modelValue)&&f.set(w.key,w);return f});function l(f){return f.filter(c=>!c.hidden&&i.value.get(c.key)===c)}function g(f,c){r("update:modelValue",{...n.modelValue,[f]:c})}return(f,c)=>(b(),O("div",Gn,[(b(!0),O(U,null,H(e.schema.sections,w=>me((b(),O("section",{id:`sec-${w.id}`,key:w.id,class:"schema-section"},[m("header",null,[m("h2",null,v(w.title),1),m("span",null,v(y(a)("schemaForm.fieldCount",{n:l(w.fields).length})),1)]),m("div",Yn,[(b(!0),O(U,null,H(l(w.fields),S=>(b(),J(Wn,{key:S.key,field:S,"model-value":e.modelValue[S.key],error:e.errors[S.key],"onUpdate:modelValue":E=>g(S.key,E)},null,8,["field","model-value","error","onUpdate:modelValue"]))),128))])],8,Zn)),[[bt,l(w.fields).length]])),128))]))}}),Qn=["aria-label"],er=["title","aria-label","aria-expanded","disabled"],tr=["aria-hidden"],nr={class:"schema-toc-head"},rr={class:"schema-toc-caption"},ir=["title","aria-label"],ar={class:"schema-toc-list"},or=["title","onClick"],sr=ee({__name:"SectionToc",props:{sections:{}},setup(e){const t=e,{t:n}=te(),r=F(!1),a=F(!1),i=F("");let l;const g=B(()=>t.sections.length>0),f=B(()=>g.value&&(r.value||a.value));function c(_){return`sec-${_}`}function w(){a.value=!a.value}function S(){a.value=!1,r.value=!1}function E(_){i.value=_,document.getElementById(c(_))?.scrollIntoView({behavior:"smooth",block:"start"})}function $(){if(l?.disconnect(),typeof IntersectionObserver>"u"){!i.value&&t.sections[0]&&(i.value=t.sections[0].id);return}l=new IntersectionObserver(_=>{const C=_.filter(M=>M.isIntersecting).sort((M,j)=>M.boundingClientRect.top-j.boundingClientRect.top)[0];C?.target instanceof HTMLElement&&(i.value=C.target.id.replace(/^sec-/,""))},{rootMargin:"-15% 0px -75% 0px",threshold:[0,.12,.4]});for(const _ of t.sections){const C=document.getElementById(c(_.id));C&&l.observe(C)}!i.value&&t.sections[0]&&(i.value=t.sections[0].id)}return Ze($),de(()=>t.sections,$),Ye(()=>{l?.disconnect()}),(_,C)=>{const M=G("el-icon");return b(),O("aside",{class:Z(["section-toc schema-toc",{open:f.value,collapsed:!f.value,empty:!g.value}]),"aria-label":y(n)("training.toc.title"),onMouseenter:C[0]||(C[0]=j=>r.value=!0),onMouseleave:C[1]||(C[1]=j=>r.value=!1)},[m("button",{type:"button",class:"toc-seam schema-toc-seam",title:y(n)("training.toc.expand"),"aria-label":y(n)("training.toc.expand"),"aria-expanded":f.value?"true":"false",disabled:!g.value,onClick:w},[K(M,{class:"schema-toc-seam-icon",size:12},{default:L(()=>[K(y(Lt))]),_:1})],8,er),m("div",{class:"toc-panel schema-toc-panel","aria-hidden":f.value?"false":"true"},[m("header",nr,[m("p",rr,v(y(n)("training.toc.title")),1),m("button",{type:"button",class:"schema-toc-toggle icon-btn",title:y(n)("training.toc.collapse"),"aria-label":y(n)("training.toc.collapse"),onClick:S},[K(M,{size:14},{default:L(()=>[K(y(Ut))]),_:1})],8,ir)]),m("div",ar,[(b(!0),O(U,null,H(e.sections,j=>(b(),O("button",{key:j.id,type:"button",class:Z(["toc-item schema-toc-tab",{active:i.value===j.id}]),title:j.title,onClick:u=>E(j.id)},[C[2]||(C[2]=m("i",{"aria-hidden":"true"},null,-1)),m("span",null,v(j.title),1)],10,or))),128))])],8,tr)],42,Qn)}}});function Se(e,t){return _t(e,{method:"POST",body:JSON.stringify(t)})}const ce={presets:async()=>(await _t("/api/presets")).presets,validateImport:(e,t)=>Se("/api/config/validate-import",{page_train_type:e,config:t}),normalizeExport:(e,t)=>Se("/api/config/normalize-for-export",{page_train_type:e,config:t}),run:e=>Se("/api/run",e),animaFastPreflight:e=>Se("/api/anima-fast/preflight",e)},Ot="schemas";function lr(){try{const e=JSON.parse(localStorage.getItem(Ot)||"[]");return Array.isArray(e)?e:[]}catch{return[]}}async function ur(e){let t=lr();try{const{schemas:n}=await pe.hashes(),r=new Map(t.map(i=>[i.name,i.hash]));(n.length!==t.length||n.some(i=>r.get(i.name)!==i.hash))&&(t=(await pe.all()).schemas,localStorage.setItem(Ot,JSON.stringify(t)))}catch(n){if(!t.length)throw n}return Mn(t,e)}const At=["learning_rate","unet_lr","text_encoder_lr","learning_rate_te","learning_rate_te1","learning_rate_te2","sigmoid_scale","guidance_scale"],cr=["vae","reg_data_dir","network_weights","noise_offset","multires_noise_iterations","multires_noise_discount","caption_dropout_rate","network_dropout","scale_weight_norms","gpu_ids"],fr=["pretrained_model_name_or_path","vae","qwen3","llm_adapter_path","t5_tokenizer_path","resume","train_data_dir","reg_data_dir","output_dir","logging_dir","network_weights","sample_prompts"],dr=["lycoris_algo","conv_dim","conv_alpha","dropout","dylora_unit","lokr_factor","train_norm","down_lr_weight","mid_lr_weight","up_lr_weight","block_lr_zero_threshold","enable_block_weights","network_args_custom","optimizer_args_custom","enable_base_weight","prodigy_d0","prodigy_d_coef","ui_custom_params"],gr=["v2","v_parameterization","scale_v_pred_loss_like_noise_pred","clip_skip","learning_rate_te","stop_text_encoder_training"],mr=["learning_rate_te1","learning_rate_te2"],ht=["prompt_file","sample_width","sample_height","sample_cfg","sample_seed","sample_steps","sample_sampler","randomly_choice_prompt","sample_at_first","sample_every_n_epochs","sample_every_n_steps","positive_prompts","negative_prompts","sample_prompts"],pr={model_train_type:"sd-lora",enable_bucket:!0,min_bucket_reso:256,max_bucket_reso:1024,save_model_as:"safetensors",network_train_unet_only:!1,network_train_text_encoder_only:!1,learning_rate:1e-4,network_module:"networks.lora",logging_dir:"./logs",caption_extension:".txt",max_token_length:255,seed:1337,prior_loss_weight:1,clip_skip:2,save_precision:"fp16",persistent_data_loader_workers:!0};function xe(e){return Array.isArray(e)?e:[]}function $e(e,t){t.forEach(n=>delete e[n])}function hr(e,t){const n=t==="lora-basic"?{...pr,...Ae(e)}:Ae(e);let r=[],a=[];n.network_module==="lycoris.kohya"?(r.push(`conv_dim=${n.conv_dim}`,`conv_alpha=${n.conv_alpha}`,`dropout=${n.dropout}`,`algo=${n.lycoris_algo}`),n.lokr_factor&&r.push(`factor=${n.lokr_factor}`),n.train_norm&&r.push("train_norm=True")):n.network_module==="networks.dylora"&&r.push(`unit=${n.dylora_unit}`);const i=String(n.optimizer_type||"");i.toLowerCase().startsWith("dada")?(["DAdaptation","DAdaptAdam"].includes(i)&&(a=["decouple=True","weight_decay=0.01"]),n.learning_rate=1,n.unet_lr=1,n.text_encoder_lr=1):i.toLowerCase()==="prodigy"&&(a=["decouple=True","weight_decay=0.01","use_bias_correction=True",`d_coef=${n.prodigy_d_coef}`],n.lr_warmup_steps&&a.push("safeguard_warmup=True"),n.prodigy_d0&&a.push(`d0=${n.prodigy_d0}`)),n.enable_block_weights&&r.push(`down_lr_weight=${n.down_lr_weight}`,`mid_lr_weight=${n.mid_lr_weight}`,`up_lr_weight=${n.up_lr_weight}`,`block_lr_zero_threshold=${n.block_lr_zero_threshold}`),n.enable_base_weight?(typeof n.base_weights=="string"&&(n.base_weights=n.base_weights.split(/\r?\n/).filter(Boolean)),typeof n.base_weights_multiplier=="string"&&(n.base_weights_multiplier=n.base_weights_multiplier.split(/\r?\n/).filter(Boolean).map(Number))):$e(n,["base_weights","base_weights_multiplier"]),r.push(...xe(n.network_args).map(String),...xe(n.network_args_custom).map(String)),a.push(...xe(n.optimizer_args).map(String),...xe(n.optimizer_args_custom).map(String)),r.length?n.network_args=r:delete n.network_args,a.length?n.optimizer_args=a:delete n.optimizer_args,ht.some(f=>{const c=n[f];return c!==void 0&&c!==""&&(!Array.isArray(c)||c.length>0)})&&(n.enable_preview=!0),n.enable_preview||$e(n,ht);for(const f of At){if(n[f]===void 0)continue;const c=Number.parseFloat(String(n[f]));n[f]=Number.isNaN(c)?0:c}for(const f of cr){const c=n[f];(c===0||c===""||Array.isArray(c)&&!c.length)&&delete n[f]}for(const f of fr)typeof n[f]=="string"&&(n[f]=n[f].replaceAll("\\","/"));typeof e.ui_custom_params=="string"&&e.ui_custom_params.trim()&&Object.assign(n,St(e.ui_custom_params));const g=String(n.model_train_type||"").startsWith("sdxl");return g&&(n.learning_rate_te1||n.learning_rate_te2)&&(n.train_text_encoder=!0),$e(n,g?gr:mr),$e(n,dr),Array.isArray(n.gpu_ids)&&(n.gpu_ids=n.gpu_ids.map(f=>String(f).match(/GPU (\d+):/)?.[1]||String(f)).filter(Boolean)),n}function yr(e){const t=Ae(e);for(const n of At){const r=t[n];if(typeof r!="number")continue;const a=r.toExponential();t[n]=a.length<=6?a:String(r)}if(Array.isArray(t.network_args)){for(const n of t.network_args){const[r,...a]=String(n).split("="),i=a.join("=");r&&(t[r==="algo"?"lycoris_algo":r]=i)}delete t.network_args}return Array.isArray(t.optimizer_args)&&(t.optimizer_args_custom=t.optimizer_args,delete t.optimizer_args),t}function vr(e){const t=[],n=[],r=String(e.optimizer_type||"");r.startsWith("DAdapt")&&e.lr_scheduler!=="constant"&&t.push(Y.global.t("training.diagnostics.dadaptScheduler")),r.toLowerCase().startsWith("prodigy")&&(e.unet_lr!==1||e.text_encoder_lr!==1)&&t.push(Y.global.t("training.diagnostics.prodigyLr")),e.network_module==="networks.oft"&&e.model_train_type!=="sdxl-lora"&&n.push(Y.global.t("training.diagnostics.oftSdxl"));for(const[a,i]of[["cache_text_encoder_outputs","shuffle_caption"],["noise_offset","multires_noise_iterations"],["cache_latents","color_aug"],["cache_latents","random_crop"]])e[a]&&e[i]&&n.push(Y.global.t("training.diagnostics.conflict",{left:a,right:i}));return{warnings:t,errors:n}}const Et=["anima","sd15","sdxl","flux","lumina"],Ee=["kohya","anima-fast","musubi"],Ne=["lora","finetune"],br={model:"anima",engine:"kohya",target:"lora"},he=[{model:"anima",engine:"kohya",target:"lora",schemaName:"sd3-lora"},{model:"anima",engine:"anima-fast",target:"lora",schemaName:"anima-lora-fast"},{model:"anima",engine:"kohya",target:"finetune",schemaName:"anima-finetune"},{model:"sdxl",engine:"kohya",target:"lora",schemaName:"lora-master",defaults:{model_train_type:"sdxl-lora"},storageKey:"sdxl-lora",legacyStorageKey:"lora-master"},{model:"sd15",engine:"kohya",target:"lora",schemaName:"lora-master",defaults:{model_train_type:"sd-lora"},storageKey:"sd15-lora"},{model:"sdxl",engine:"kohya",target:"finetune",schemaName:"dreambooth",defaults:{model_train_type:"sdxl-finetune"},storageKey:"sdxl-dreambooth",legacyStorageKey:"dreambooth"},{model:"sd15",engine:"kohya",target:"finetune",schemaName:"dreambooth",defaults:{model_train_type:"sd-dreambooth"},storageKey:"sd15-dreambooth"},{model:"flux",engine:"kohya",target:"lora",schemaName:"flux-lora"},{model:"lumina",engine:"kohya",target:"lora",schemaName:"lumina2-lora"}],_r={"sd3-lora":{titleKey:"training.schemas.sd3-lora.title",areaKey:"training.schemas.sd3-lora.area"},"anima-lora-fast":{titleKey:"training.schemas.anima-lora-fast.title",areaKey:"training.schemas.anima-lora-fast.area"},"anima-finetune":{titleKey:"training.schemas.anima-finetune.title",areaKey:"training.schemas.anima-finetune.area"},"lora-master":{titleKey:"training.schemas.lora-master.title",areaKey:"training.schemas.lora-master.area"},dreambooth:{titleKey:"training.schemas.dreambooth.title",areaKey:"training.schemas.dreambooth.area"},"flux-lora":{titleKey:"training.schemas.flux-lora.title",areaKey:"training.schemas.flux-lora.area"},"lumina2-lora":{titleKey:"training.schemas.lumina2-lora.title",areaKey:"training.schemas.lumina2-lora.area"}};function yt(e){return e==="sd"?"sdxl":Et.includes(e)?e:void 0}function Nt(e,t,n){return he.find(r=>r.model===e&&r.engine===t&&r.target===n)}function wr(e){return he.find(t=>t.schemaName===e)}function kr(e){if(!(typeof e!="string"||!e))return he.find(t=>t.defaults?.model_train_type===e)??he.find(t=>t.schemaName===e)}function le(e,t){return he.some(n=>n.model===e&&n.engine===t)}function ue(e,t,n){return!!Nt(e,t,n)}function Sr(e){return Ee.find(t=>le(e,t))}function xr(e,t){return Ne.find(n=>ue(e,t,n))}const $r={class:"schema-form-binder"},Or={key:0,class:"section-heading"},Ar={key:1,class:"schema-state"},Er={key:2,class:"schema-state schema-error"},Nr={class:"panel-rail"},Cr={class:"rail-label"},Ir=["disabled"],Tr=["disabled"],Mr={class:"panel-full"},jr={key:0,class:"panel-copy"},Dr={key:1,class:"param-diagnostics"},Vr={key:2,class:"started-task"},Fr=["href"],Pr={class:"preview-actions"},Rr=["title","aria-label"],Br={class:"panel-actions"},zr=["disabled"],Kr={class:"submit-row"},Lr=["disabled"],Ur=["disabled"],Jr={class:"config-list"},qr=["onClick"],Hr=["onClick"],Wr={key:0},Gr={class:"config-list"},Zr=["onClick"],Yr={key:0},Ct=ee({__name:"TrainingPage",props:{title:{},area:{},schemaName:{},bare:{type:Boolean,default:!1},fieldDefaults:{default:void 0},storageKey:{default:void 0},legacyStorageKey:{default:void 0}},setup(e){const t=e,n=wt(),{t:r}=te(),a=F(),i=F({}),l=F(!0),g=F(""),f=F({}),c=F(!1),w=F(!1),S=Yt(),E=B(()=>S.runningTasks.at(-1));let $;function _(){try{const k=JSON.parse(localStorage.getItem("ui-configs")||"{}");return!!(k&&typeof k=="object"&&k.training_preview_collapsed)}catch{return!1}}function C(k){try{const A=JSON.parse(localStorage.getItem("ui-configs")||"{}"),I=A&&typeof A=="object"?A:{};localStorage.setItem("ui-configs",JSON.stringify({...I,training_preview_collapsed:k}))}catch{}}const M=F(!1),j=F([]),u=F([]),s=F(!1),o=F(),d=F(_()),p=F(),h=B(()=>a.value?Vn(a.value,i.value):{}),x=B(()=>hr(h.value,t.schemaName)),N=B(()=>vr(x.value)),ve=B(()=>gt(x.value)),rt=B(()=>u.value.filter(k=>!k.metadata.train_type||k.metadata.train_type===t.schemaName)),it=B(()=>{if(!a.value)return[];const k=new Map;for(const A of a.value.sections)for(const I of A.fields)Te(I,i.value)&&k.set(I.key,I);return a.value.sections.filter(A=>A.fields.some(I=>!I.hidden&&k.get(I.key)===I)).map(A=>({id:A.id,title:A.title}))}),Me=B(()=>l.value||!!g.value||it.value.length>1),It=B(()=>o.value?`${o.value.train_log_path||"/train-log"}?${o.value.train_log_query||`task_id=${encodeURIComponent(o.value.task_id)}`}`:"");function be(){return t.storageKey||t.schemaName}function _e(){return`configs-${be()}-autosave`}function je(){return`configs-${be()}`}function Tt(){if(!(!t.legacyStorageKey||t.legacyStorageKey===be()))for(const k of["","-autosave"]){const A=`configs-${t.legacyStorageKey}${k}`,I=`configs-${be()}${k}`,z=localStorage.getItem(A);z!==null&&localStorage.getItem(I)===null&&localStorage.setItem(I,z)}}function at(){try{j.value=JSON.parse(localStorage.getItem(je())||"[]")}catch{j.value=[]}}async function ot(k,A){const I=await ce.validateImport(t.schemaName,k);if(I.result==="reject")throw new Error(I.errors?.join(` +`)||I.message||r("training.importMsg.reject"));if(I.result==="redirect"&&I.target_path){await fe.confirm(I.message||r("training.importMsg.mismatchConfirm"),r("training.importMsg.mismatchTitle"),{confirmButtonText:r("training.importMsg.jump"),cancelButtonText:r("training.importMsg.cancel"),type:"warning"}),sessionStorage.setItem("mikazuki-pending-import",JSON.stringify(I.config||k));const z=kr((I.config||k).model_train_type);z?await n.push({path:"/training",query:{model:z.model,engine:z.engine,target:z.target}}):await n.push(I.target_path);return}i.value={...ke(a.value),...yr(I.config||k)},I.notice&&R.info(I.notice),R.success(A??r("training.importMsg.imported"))}function Mt(){try{const k=JSON.parse(sessionStorage.getItem("mikazuki-carry-over")||"null");return k&&typeof k=="object"?k:{}}catch{return{}}}async function De(){l.value=!0,g.value="";try{const k=await ur(t.schemaName),A={...ke(k),...t.fieldDefaults},I=Mt();sessionStorage.removeItem("mikazuki-carry-over");const z={};for(const[W,Fe]of Object.entries(I))W in A&&!(t.fieldDefaults&&W in t.fieldDefaults)&&(z[W]=Fe);const Q={...A,...z};try{const W=JSON.parse(localStorage.getItem(_e())||"null");i.value=W&&typeof W=="object"?{...Q,...W}:Q}catch{i.value=Q}const V=await pe.graphicCards();if(V.length>1){const W=V.map((we,Kt)=>typeof we=="object"?we.value??we.label??Kt:we),Fe={key:"gpu_ids",type:"array",role:"select",description:r("training.gpu.fieldDescription"),options:W,conditions:[]};k.sections.push({id:"gpu-settings",title:r("training.gpu.sectionTitle"),fields:[Fe]})}a.value=k;const oe=sessionStorage.getItem("mikazuki-pending-import");oe&&(sessionStorage.removeItem("mikazuki-pending-import"),await ot(JSON.parse(oe),r("training.importMsg.importedRedirect")))}catch(k){g.value=k instanceof Error?k.message:r("training.schemaLoadFail")}finally{l.value=!1}}function Ve(){if(!a.value)return!1;f.value=Fn(a.value,i.value);const k=[...Object.values(f.value),...N.value.errors];return k.length?(R.error(k[0]),!1):(N.value.warnings.length?R.warning(N.value.warnings[0]):R.success(r("training.validatePassed")),!0)}function st(){const k={time:new Date().toLocaleString(),value:Ae(i.value)};typeof i.value.output_name=="string"&&(k.name=i.value.output_name),j.value.push(k),localStorage.setItem(je(),JSON.stringify(j.value)),R.success(r("training.historyDialog.saved"))}function jt(k){j.value.splice(k,1),localStorage.setItem(je(),JSON.stringify(j.value))}async function Dt(){if(M.value=!0,!u.value.length){s.value=!0;try{u.value=await ce.presets()}catch(k){R.error(k instanceof Error?k.message:r("training.presetsDialog.loadFail"))}finally{s.value=!1}}}function Vt(k){i.value={...i.value,...k.data},M.value=!1,R.success(r("training.presetsDialog.applied",{name:k.metadata.name}))}async function Ft(k){const A=k.target,I=A.files?.[0];if(A.value="",!!I)try{const z=await I.text(),Q=I.name.toLowerCase().endsWith(".json")?JSON.parse(z):St(z);await ot(Q)}catch(z){z!=="cancel"&&z!=="close"&&R.error(z instanceof Error?z.message:r("training.importMsg.fail"))}}async function Pt(){if(Ve())try{const k=await ce.normalizeExport(t.schemaName,x.value),A=new Blob([gt(k.config)],{type:"application/toml;charset=utf-8"}),I=URL.createObjectURL(A),z=document.createElement("a");z.href=I,z.download=`${String(k.config.output_name||t.schemaName)}.toml`,z.click(),URL.revokeObjectURL(I),k.warnings.forEach(Q=>R.warning(Q))}catch(k){R.error(k instanceof Error?k.message:r("training.exportFail"))}}async function lt(){if(!(!Ve()||c.value))try{if(await fe.confirm(r("training.submitConfirm.message"),r("training.submitConfirm.title"),{confirmButtonText:r("training.submitConfirm.confirm"),cancelButtonText:r("training.submitConfirm.cancel"),type:"warning"}),c.value=!0,t.schemaName==="anima-lora-fast"){const k=await ce.animaFastPreflight(x.value);if(!k.ok)throw new Error(k.errors?.join(` +`)||r("training.submitConfirm.preflightFail"));k.warnings?.forEach(A=>R.warning(A))}o.value=await ce.run(x.value),S.refresh({silent:!0}),st(),R.success(r("training.submitConfirm.started",{id:o.value.task_id}))}catch(k){k!=="cancel"&&k!=="close"&&R.error(k instanceof Error?k.message:r("training.submitConfirm.fail"))}finally{c.value=!1}}async function Rt(){if(a.value){try{await fe.confirm(r("training.actions.resetConfirm"),r("training.resetDialog.title"),{confirmButtonText:r("training.actions.reset"),cancelButtonText:r("training.resetDialog.cancel"),type:"warning"})}catch{return}localStorage.removeItem(_e()),i.value={...ke(a.value),...t.fieldDefaults},R.success(r("training.actions.resetDone"))}}async function Bt(){try{await navigator.clipboard.writeText(ve.value),R.success(r("training.preview.copied"))}catch{R.error(r("training.preview.copyFail"))}}function zt(){p.value?.click()}async function ut(){const k=E.value;if(k)try{await fe.confirm(r("tasks.terminate.confirm",{id:k.id}),r("tasks.terminate.title"),{confirmButtonText:r("tasks.terminate.confirmButton"),cancelButtonText:r("tasks.terminate.cancel"),type:"warning"}),await S.terminate(k.id),R.success(r("tasks.terminate.success"))}catch(A){A!=="cancel"&&A!=="close"&&R.error(A instanceof Error?A.message:r("tasks.terminate.fail"))}}return de(()=>t.schemaName,()=>{o.value=void 0,at(),De()}),de(i,k=>localStorage.setItem(_e(),JSON.stringify(k)),{deep:!0}),de(d,k=>C(k)),Ze(()=>{Tt(),at(),De(),S.refresh(),$=window.setInterval(()=>S.refresh({silent:!0}),2e3)}),Ye(()=>{window.clearInterval($),localStorage.setItem(_e(),JSON.stringify(i.value)),sessionStorage.setItem("mikazuki-carry-over",JSON.stringify(i.value))}),(k,A)=>{const I=G("RouterLink"),z=G("el-dialog"),Q=Jt("loading");return b(),O(U,null,[m("div",{class:Z(["training-layout schema-training-layout",{bare:e.bare,"preview-docked":d.value}])},[m("section",{class:Z(["form-canvas",{"with-schema-toc":Me.value}])},[m("div",{class:Z(["schema-form-shell",{"has-toc":Me.value}])},[Me.value?(b(),J(sr,{key:0,sections:it.value},null,8,["sections"])):P("",!0),m("div",$r,[e.bare?P("",!0):(b(),O("div",Or,[m("span",null,v(e.area),1),m("h1",null,v(e.title),1),m("p",null,v(y(r)("training.intro")),1)])),m("input",{ref_key:"importInput",ref:p,class:"visually-hidden",type:"file",accept:".toml,.json",onChange:Ft},null,544),Je(k.$slots,"form-top"),l.value?(b(),O("div",Ar,[m("strong",null,v(y(r)("training.loadingSchema")),1),m("span",null,v(y(r)("training.loadingSchemaHint")),1)])):g.value?(b(),O("div",Er,[m("strong",null,v(y(r)("training.schemaError")),1),m("span",null,v(g.value),1),m("button",{onClick:De},v(y(r)("training.retry")),1)])):a.value?(b(),J(Xn,{key:3,modelValue:i.value,"onUpdate:modelValue":A[0]||(A[0]=V=>i.value=V),schema:a.value,errors:f.value},null,8,["modelValue","schema","errors"])):P("",!0)])],2)],2),m("aside",{class:Z(["control-panel",{collapsed:d.value}])},[m("div",Nr,[m("button",{class:"rail-handle",onClick:A[1]||(A[1]=V=>d.value=!1)},[A[6]||(A[6]=m("span",{class:"rail-arrow","aria-hidden":"true"},"←",-1)),N.value.errors.length||N.value.warnings.length?(b(),O("span",{key:0,class:Z(["rail-alert",{error:N.value.errors.length>0}])},null,2)):P("",!0),m("span",Cr,v(y(r)("training.preview.railTitle")),1),m("b",null,v(y(r)("training.preview.count",{n:Object.keys(x.value).length})),1)]),m("button",{class:"primary-action rail-submit",disabled:!a.value||c.value||N.value.errors.length>0,onClick:lt},v(c.value?y(r)("training.railSubmitting"):y(r)("training.railStart")),9,Ir),m("button",{class:"danger-action rail-stop",disabled:!E.value||!!y(S).terminatingId,onClick:ut},v(y(r)("training.railStop")),9,Tr)]),m("div",Mr,[e.bare?P("",!0):(b(),O("div",jr,[A[7]||(A[7]=m("span",{class:"eyebrow"},"TRAINING CONTROL",-1)),m("h2",null,v(e.title),1),m("p",null,v(y(r)("training.panelHint")),1)])),N.value.errors.length||N.value.warnings.length?(b(),O("div",Dr,[(b(!0),O(U,null,H(N.value.errors,V=>(b(),O("p",{key:V,class:"error"},v(V),1))),128)),(b(!0),O(U,null,H(N.value.warnings,V=>(b(),O("p",{key:V},v(V),1))),128))])):P("",!0),o.value?(b(),O("div",Vr,[m("strong",null,v(y(r)("training.startedTask")),1),m("code",null,v(o.value.task_id),1),m("a",{href:It.value,target:"_blank",rel:"noreferrer"},v(y(r)("training.openLog")),9,Fr),K(I,{to:"/tasks"},{default:L(()=>[ie(v(y(r)("training.viewTasks")),1)]),_:1})])):P("",!0),m("section",{class:Z(["preview-panel",{collapsed:d.value}])},[m("header",null,[m("span",null,v(y(r)("training.preview.panelTitle")),1),m("b",null,v(y(r)("training.preview.count",{n:Object.keys(x.value).length})),1),m("span",Pr,[m("button",{class:"preview-collapse",title:d.value?y(r)("training.preview.expand"):y(r)("training.preview.collapse"),"aria-label":d.value?y(r)("training.preview.expand"):y(r)("training.preview.collapse"),onClick:A[2]||(A[2]=V=>d.value=!d.value)},v(d.value?"←":"→"),9,Rr),m("button",{onClick:Bt},v(y(r)("training.preview.copy")),1)])]),me(m("pre",null,v(ve.value),513),[[bt,!d.value]])],2),m("div",Br,[m("button",{onClick:Dt},v(y(r)("training.toolbar.presets")),1),m("button",{onClick:st},v(y(r)("training.toolbar.save")),1),m("button",{onClick:zt},v(y(r)("training.toolbar.import")),1),m("button",{onClick:A[3]||(A[3]=V=>w.value=!0)},v(y(r)("training.toolbar.history")),1),m("button",{onClick:Pt},v(y(r)("training.toolbar.export")),1),m("button",{onClick:Rt},v(y(r)("training.toolbar.reset")),1)]),m("button",{class:"secondary-action schema-validate",disabled:!a.value,onClick:Ve},v(y(r)("training.validate")),9,zr),m("div",Kr,[m("button",{class:"primary-action train-submit",disabled:!a.value||c.value||N.value.errors.length>0,onClick:lt},v(c.value?y(r)("training.submitting"):y(r)("training.start")),9,Lr),m("button",{class:"danger-action stop-training",disabled:!E.value||!!y(S).terminatingId,onClick:ut},v(y(S).terminatingId?y(r)("tasks.detail.stopping"):y(r)("training.stop")),9,Ur)])])],2)],2),K(z,{modelValue:w.value,"onUpdate:modelValue":A[4]||(A[4]=V=>w.value=V),title:y(r)("training.historyDialog.title"),width:"min(760px, 92vw)"},{default:L(()=>[m("div",Jr,[(b(!0),O(U,null,H(j.value,(V,oe)=>(b(),O("article",{key:`${V.time}-${oe}`},[m("div",null,[m("strong",null,v(V.name||y(r)("training.historyDialog.unnamed")),1),m("span",null,v(V.time),1)]),m("button",{onClick:W=>{i.value={...y(ke)(a.value),...V.value},w.value=!1}},v(y(r)("training.historyDialog.use")),9,qr),m("button",{class:"danger",onClick:W=>jt(oe)},v(y(r)("training.historyDialog.delete")),9,Hr)]))),128)),j.value.length?P("",!0):(b(),O("p",Wr,v(y(r)("training.historyDialog.empty")),1))])]),_:1},8,["modelValue","title"]),K(z,{modelValue:M.value,"onUpdate:modelValue":A[5]||(A[5]=V=>M.value=V),title:y(r)("training.presetsDialog.title"),width:"min(760px, 92vw)"},{default:L(()=>[me((b(),O("div",Gr,[(b(!0),O(U,null,H(rt.value,V=>(b(),O("article",{key:V.metadata.name},[m("div",null,[m("strong",null,v(V.metadata.name),1),m("span",null,v(V.metadata.description||`${V.metadata.author||""} ${V.metadata.version||""}`),1)]),m("button",{onClick:oe=>Vt(V)},v(y(r)("training.presetsDialog.apply")),9,Zr)]))),128)),!s.value&&!rt.value.length?(b(),O("p",Yr,v(y(r)("training.presetsDialog.empty")),1)):P("",!0)])),[[Q,s.value]])]),_:1},8,["modelValue","title"])],64)}}}),Xr=["title"],Qr={class:"engine-credit","data-testid":"anima-fast-credit"},ei={class:"fast-main"},ti={class:"fast-intro"},ni={key:0,class:"eyebrow"},ri={key:1},ii={key:2},ai={class:"engine-credit","data-testid":"anima-fast-credit"},oi=["data-state"],si={key:3,class:"audit-errors"},li={class:"fast-actions"},ui=["disabled"],ci=["disabled"],fi={class:"install-console"},di={class:"install-progress"},gi=ee({__name:"AnimaFastPage",props:{bare:{type:Boolean,default:!1}},setup(e){const t=F({id:"anima-fast",state:"unknown",featureEnabled:!0}),n=F(!1),r=F([]),a=F(0),i=F("");let l,g,f;const{t:c}=te(),w=B(()=>t.value.state==="ready"),S=B(()=>["installing","auditing"].includes(t.value.state)),E=B(()=>{const s=`settings.engines.state.${t.value.state}`,o=c(s);return o===s?t.value.state:o}),$=B(()=>{if(!t.value.featureEnabled||t.value.state==="disabled")return c("settings.engines.hint.disabled");const s=`settings.engines.hint.${t.value.state}`,o=c(s);return o===s?c("settings.engines.hint.unknown"):o});function _(){l!==void 0&&(window.clearInterval(l),l=void 0)}function C(){g?.close(),f?.close(),g=void 0,f=void 0}function M(s,o,d){C(),g=new EventSource(o||`/api/plugins/anima-lora/install/log/stream/${s}`),g.onmessage=p=>{try{const h=JSON.parse(p.data);h.text&&r.value.push(h.text),h.done&&g?.close()}catch{r.value.push(p.data)}},f=new EventSource(d||`/api/plugins/anima-lora/install/progress/stream/${s}`),f.onmessage=p=>{try{const h=JSON.parse(p.data);h.type==="progress"&&(a.value=Number(h.percent||0),i.value=h.message||h.phase||""),(h.done||h.type==="done")&&f?.close()}catch{}}}async function j(s=!0){try{t.value=await Re.status("anima-fast"),w.value&&_();const o=t.value.facts?.task_id;o&&S.value&&!g&&M(o)}catch(o){s&&R.error(o instanceof Error?o.message:c("settings.engines.msg.statusFail"))}}async function u(s=!1){try{await fe.confirm(c(s?"settings.engines.confirm.reinstall":"settings.engines.confirm.animaFast"),c(s?"settings.engines.actions.reinstall":"settings.engines.actions.install"),{type:"warning"}),n.value=!0,r.value=[],a.value=0;const o=s?await Re.repair("anima-fast"):await Re.install("anima-fast");if(o.alreadyReady)return t.value=o.status||t.value,w.value&&_(),R.success(c("settings.engines.msg.ready"));o.taskId&&(M(o.taskId,o.logStream,o.progressStream),l||(l=window.setInterval(()=>j(!1),2e3))),await j(),R.success(c("settings.engines.msg.started"))}catch(o){o!=="cancel"&&o!=="close"&&R.error(o instanceof Error?o.message:c("settings.engines.msg.fail"))}finally{n.value=!1}}return Ze(async()=>{await j(),w.value||(l=window.setInterval(()=>j(!1),2e3))}),Ye(()=>{_(),C()}),(s,o)=>{const d=G("i18n-t");return w.value?(b(),J(Ct,{key:0,title:"Anima LoRA Fast",area:"anima-lora-fast","schema-name":"anima-lora-fast",bare:e.bare},{"form-top":L(()=>[Je(s.$slots,"form-top"),m("p",{class:"engine-ready-chip","data-testid":"engine-ready-chip",title:y(c)("settings.engines.hint.ready")},[o[4]||(o[4]=m("i",{"aria-hidden":"true"},null,-1)),m("span",null,v(y(c)("settings.engines.readyChip")),1)],8,Xr),m("p",Qr,[K(d,{keypath:"animaFast.credit",tag:"span",scope:"global"},{upstream:L(()=>[...o[5]||(o[5]=[m("a",{href:"https://github.com/sorryhyun/anima_lora",target:"_blank",rel:"noreferrer"},"sorryhyun/anima_lora",-1)])]),notice:L(()=>[...o[6]||(o[6]=[m("a",{href:"https://github.com/wochenlong/lora-scripts-next/blob/dev/NOTICE.md",target:"_blank",rel:"noreferrer"},"NOTICE.md",-1)])]),_:1})])]),_:3},8,["bare"])):(b(),O("div",{key:1,class:Z(["fast-page",{bare:e.bare}])},[m("div",ei,[Je(s.$slots,"form-top"),K(on,{state:t.value.state,title:E.value,hint:$.value,loading:n.value,"show-install":t.value.featureEnabled&&!S.value,"show-reinstall":t.value.state==="broken",onInstall:o[0]||(o[0]=p=>u(!1)),onReinstall:o[1]||(o[1]=p=>u(!0))},null,8,["state","title","hint","loading","show-install","show-reinstall"]),m("section",ti,[e.bare?P("",!0):(b(),O("span",ni,"ANIMA FAST RUNTIME")),e.bare?P("",!0):(b(),O("h1",ri,"Anima LoRA Fast")),e.bare?P("",!0):(b(),O("p",ii,v(y(c)("animaFast.intro")),1)),m("p",ai,[K(d,{keypath:"animaFast.credit",tag:"span",scope:"global"},{upstream:L(()=>[...o[7]||(o[7]=[m("a",{href:"https://github.com/sorryhyun/anima_lora",target:"_blank",rel:"noreferrer"},"sorryhyun/anima_lora",-1)])]),notice:L(()=>[...o[8]||(o[8]=[m("a",{href:"https://github.com/wochenlong/lora-scripts-next/blob/dev/NOTICE.md",target:"_blank",rel:"noreferrer"},"NOTICE.md",-1)])]),_:1})]),m("div",{class:"fast-state","data-state":t.value.state},[m("span",null,v(E.value),1),m("strong",null,v(t.value.state),1)],8,oi),t.value.facts?.audit?.errors?.length?(b(),O("div",si,[m("strong",null,v(y(c)("animaFast.auditTitle")),1),(b(!0),O(U,null,H(t.value.facts.audit.errors,p=>(b(),O("p",{key:p},v(p),1))),128))])):P("",!0),m("div",li,[m("button",{class:"primary-action",disabled:n.value||S.value||!t.value.featureEnabled,onClick:o[2]||(o[2]=p=>u(!1))},v(S.value?y(c)("animaFast.installWorking"):y(c)("animaFast.install")),9,ui),t.value.state==="broken"?(b(),O("button",{key:0,class:"secondary-action",disabled:n.value,onClick:o[3]||(o[3]=p=>u(!0))},v(y(c)("settings.engines.actions.reinstall")),9,ci)):P("",!0),K(y(vt),{class:"secondary-action",to:"/settings/engines"},{default:L(()=>[ie(v(y(c)("settings.engines.actions.manage")),1)]),_:1})])])]),m("aside",fi,[m("header",null,[m("span",null,v(i.value||y(c)("animaFast.consoleIdle")),1),m("b",null,v(a.value)+"%",1)]),m("div",di,[m("i",{style:qt({width:`${a.value}%`})},null,4)]),m("pre",null,v(r.value.length?r.value.join(` +`):y(c)("animaFast.consoleWaiting")),1)])],2))}}}),mi={class:"workbench-selector"},pi={class:"selector-card"},hi={class:"selector-grid"},yi=["value"],vi=["value","disabled"],bi={key:0,class:"selector-hint"},_i={class:"selector-card"},wi=["aria-label"],ki=["disabled","onClick"],Si={key:0,class:"selector-hint"},ze=ee({__name:"TrainingSelector",props:{model:{required:!0},modelModifiers:{},engine:{required:!0},engineModifiers:{},target:{required:!0},targetModifiers:{}},emits:["update:model","update:engine","update:target"],setup(e){const t=Pe(e,"model"),n=Pe(e,"engine"),r=Pe(e,"target"),{t:a}=te(),i=B(()=>Ee.filter(g=>!le(t.value,g))),l=B(()=>Ne.filter(g=>!ue(t.value,n.value,g)));return(g,f)=>(b(),O("div",mi,[m("div",pi,[m("h2",null,v(y(a)("training.selector.group")),1),m("div",hi,[m("label",null,[ie(v(y(a)("training.selector.model"))+" ",1),me(m("select",{"onUpdate:modelValue":f[0]||(f[0]=c=>t.value=c)},[(b(!0),O(U,null,H(y(Et),c=>(b(),O("option",{key:c,value:c},v(y(a)(`training.selector.models.${c}`)),9,yi))),128))],512),[[ft,t.value]])]),m("label",null,[ie(v(y(a)("training.selector.engine"))+" ",1),me(m("select",{"onUpdate:modelValue":f[1]||(f[1]=c=>n.value=c)},[(b(!0),O(U,null,H(y(Ee),c=>(b(),O("option",{key:c,value:c,disabled:!y(le)(t.value,c)},v(y(a)(`training.selector.engines.${c}`)),9,vi))),128))],512),[[ft,n.value]])]),i.value.length?(b(),O("p",bi,v(y(a)("training.selector.unsupportedForModel",{list:i.value.map(c=>y(a)(`training.selector.engines.${c}`)).join(" / ")})),1)):P("",!0)])]),m("div",_i,[m("h2",null,v(y(a)("training.selector.target")),1),m("div",{class:"segmented",role:"group","aria-label":y(a)("training.selector.targetType")},[(b(!0),O(U,null,H(y(Ne),c=>(b(),O("button",{key:c,class:Z({active:r.value===c}),disabled:!y(ue)(t.value,n.value,c),onClick:w=>r.value=c},v(y(a)(`training.selector.targets.${c}`)),11,ki))),128))],8,wi),l.value.length?(b(),O("p",Si,v(y(a)("training.selector.unsupportedForModel",{list:l.value.map(c=>y(a)(`training.selector.targets.${c}`)).join(" / ")})),1)):P("",!0)])]))}}),xi={class:"workbench-header"},Ke=ee({__name:"WorkbenchHeader",setup(e){const{t}=te();return(n,r)=>(b(),O("header",xi,[m("div",null,[m("h1",null,v(y(t)("training.title")),1),m("p",null,v(y(t)("training.subtitle")),1)])]))}}),Le=e=>Ee.includes(e),Ue=e=>Ne.includes(e);function $i(e){const t=typeof e.schema=="string"?wr(e.schema):void 0;if(t)return{model:t.model,engine:t.engine,target:t.target};const n={...br},r=!!(e.model||e.engine||e.target),a=yt(e.model);if(a&&(n.model=a),Le(e.engine)&&(n.engine=e.engine),Ue(e.target)&&(n.target=e.target),r)return n;const i=Wt();if(i){const g=yt(i.model);return g&&(n.model=g,Le(i.engine)&&le(n.model,i.engine)&&(n.engine=i.engine),Ue(i.target)&&ue(n.model,n.engine,i.target)&&(n.target=i.target)),n}const l=Gt(n.model);return l&&(Le(l.engine)&&le(n.model,l.engine)&&(n.engine=l.engine),Ue(l.target)&&ue(n.model,n.engine,l.target)&&(n.target=l.target)),n}const Oi={class:"workbench-page"},Ai={key:0,class:"workbench-fallback"},Ei={class:"unsupported-hint"},Di=ee({__name:"TrainingWorkbenchPage",setup(e){const t=Ht(),n=wt(),{t:r}=te(),a=$i(t.query),i=F(a.model),l=F(a.engine),g=F(a.target),f=B(()=>Nt(i.value,l.value,g.value)),c=B(()=>{if(!f.value)return;const w=_r[f.value.schemaName];return{title:r(w.titleKey),area:r(w.areaKey)}});return de([i,l,g],()=>{let w=!1;le(i.value,l.value)||(l.value=Sr(i.value)??l.value,w=!0),ue(i.value,l.value,g.value)||(g.value=xr(i.value,l.value)??g.value,w=!0),w&&R.info(r("training.selector.autoAdjusted")),Zt(i.value,l.value,g.value),n.replace({query:{model:i.value,engine:l.value,target:g.value}})}),(w,S)=>(b(),O("div",Oi,[f.value?f.value.schemaName==="anima-lora-fast"?(b(),J(gi,{key:1,bare:""},{"form-top":L(()=>[K(Ke),K(ze,{model:i.value,"onUpdate:model":S[3]||(S[3]=E=>i.value=E),engine:l.value,"onUpdate:engine":S[4]||(S[4]=E=>l.value=E),target:g.value,"onUpdate:target":S[5]||(S[5]=E=>g.value=E)},null,8,["model","engine","target"])]),_:1})):c.value?(b(),J(Ct,{key:f.value.storageKey||f.value.schemaName,bare:"",title:c.value.title,area:c.value.area,"schema-name":f.value.schemaName,"field-defaults":f.value.defaults,"storage-key":f.value.storageKey,"legacy-storage-key":f.value.legacyStorageKey},{"form-top":L(()=>[K(Ke),K(ze,{model:i.value,"onUpdate:model":S[6]||(S[6]=E=>i.value=E),engine:l.value,"onUpdate:engine":S[7]||(S[7]=E=>l.value=E),target:g.value,"onUpdate:target":S[8]||(S[8]=E=>g.value=E)},null,8,["model","engine","target"])]),_:1},8,["title","area","schema-name","field-defaults","storage-key","legacy-storage-key"])):P("",!0):(b(),O("div",Ai,[K(Ke),K(ze,{model:i.value,"onUpdate:model":S[0]||(S[0]=E=>i.value=E),engine:l.value,"onUpdate:engine":S[1]||(S[1]=E=>l.value=E),target:g.value,"onUpdate:target":S[2]||(S[2]=E=>g.value=E)},null,8,["model","engine","target"]),m("div",Ei,[m("strong",null,v(y(r)("training.selector.unsupported")),1)])]))]))}});export{Di as default}; diff --git a/frontend/dist/assets/index-BkTyufQV.css b/frontend/dist/assets/index-BGbbaAoh.css similarity index 65% rename from frontend/dist/assets/index-BkTyufQV.css rename to frontend/dist/assets/index-BGbbaAoh.css index 1af1a3f9..9d5b7b17 100644 --- a/frontend/dist/assets/index-BkTyufQV.css +++ b/frontend/dist/assets/index-BGbbaAoh.css @@ -1 +1 @@ -:root{--el-color-white:#fff;--el-color-black:#000;--el-color-primary-rgb:64, 158, 255;--el-color-success-rgb:103, 194, 58;--el-color-warning-rgb:230, 162, 60;--el-color-danger-rgb:245, 108, 108;--el-color-error-rgb:245, 108, 108;--el-color-info-rgb:144, 147, 153;--el-font-size-extra-large:20px;--el-font-size-large:18px;--el-font-size-medium:16px;--el-font-size-base:14px;--el-font-size-small:13px;--el-font-size-extra-small:12px;--el-font-family:"Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif;--el-font-weight-primary:500;--el-font-line-height-primary:24px;--el-index-normal:1;--el-index-top:1000;--el-index-popper:2000;--el-border-radius-base:4px;--el-border-radius-small:2px;--el-border-radius-round:20px;--el-border-radius-circle:100%;--el-transition-duration:.3s;--el-transition-duration-fast:.2s;--el-transition-function-ease-in-out-bezier:cubic-bezier(.645, .045, .355, 1);--el-transition-function-fast-bezier:cubic-bezier(.23, 1, .32, 1);--el-transition-all:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);--el-transition-fade:opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-md-fade:transform var(--el-transition-duration) var(--el-transition-function-fast-bezier), opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-fade-linear:opacity var(--el-transition-duration-fast) linear;--el-transition-border:border-color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-box-shadow:box-shadow var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-color:color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-component-size-large:40px;--el-component-size:32px;--el-component-size-small:24px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--el-color-primary:#409eff;--el-color-primary-light-3:#79bbff;--el-color-primary-light-5:#a0cfff;--el-color-primary-light-7:#c6e2ff;--el-color-primary-light-8:#d9ecff;--el-color-primary-light-9:#ecf5ff;--el-color-primary-dark-2:#337ecc;--el-color-success:#67c23a;--el-color-success-light-3:#95d475;--el-color-success-light-5:#b3e19d;--el-color-success-light-7:#d1edc4;--el-color-success-light-8:#e1f3d8;--el-color-success-light-9:#f0f9eb;--el-color-success-dark-2:#529b2e;--el-color-warning:#e6a23c;--el-color-warning-light-3:#eebe77;--el-color-warning-light-5:#f3d19e;--el-color-warning-light-7:#f8e3c5;--el-color-warning-light-8:#faecd8;--el-color-warning-light-9:#fdf6ec;--el-color-warning-dark-2:#b88230;--el-color-danger:#f56c6c;--el-color-danger-light-3:#f89898;--el-color-danger-light-5:#fab6b6;--el-color-danger-light-7:#fcd3d3;--el-color-danger-light-8:#fde2e2;--el-color-danger-light-9:#fef0f0;--el-color-danger-dark-2:#c45656;--el-color-error:#f56c6c;--el-color-error-light-3:#f89898;--el-color-error-light-5:#fab6b6;--el-color-error-light-7:#fcd3d3;--el-color-error-light-8:#fde2e2;--el-color-error-light-9:#fef0f0;--el-color-error-dark-2:#c45656;--el-color-info:#909399;--el-color-info-light-3:#b1b3b8;--el-color-info-light-5:#c8c9cc;--el-color-info-light-7:#dedfe0;--el-color-info-light-8:#e9e9eb;--el-color-info-light-9:#f4f4f5;--el-color-info-dark-2:#73767a;--el-bg-color:#fff;--el-bg-color-page:#f2f3f5;--el-bg-color-overlay:#fff;--el-text-color-primary:#303133;--el-text-color-regular:#606266;--el-text-color-secondary:#909399;--el-text-color-placeholder:#a8abb2;--el-text-color-disabled:#c0c4cc;--el-border-color:#dcdfe6;--el-border-color-light:#e4e7ed;--el-border-color-lighter:#ebeef5;--el-border-color-extra-light:#f2f6fc;--el-border-color-dark:#d4d7de;--el-border-color-darker:#cdd0d6;--el-fill-color:#f0f2f5;--el-fill-color-light:#f5f7fa;--el-fill-color-lighter:#fafafa;--el-fill-color-extra-light:#fafcff;--el-fill-color-dark:#ebedf0;--el-fill-color-darker:#e6e8eb;--el-fill-color-blank:#fff;--el-box-shadow:0px 12px 32px 4px #0000000a, 0px 8px 20px #00000014;--el-box-shadow-light:0px 0px 12px #0000001f;--el-box-shadow-lighter:0px 0px 6px #0000001f;--el-box-shadow-dark:0px 16px 48px 16px #00000014, 0px 12px 32px #0000001f, 0px 8px 16px -8px #00000029;--el-disabled-bg-color:var(--el-fill-color-light);--el-disabled-text-color:var(--el-text-color-placeholder);--el-disabled-border-color:var(--el-border-color-light);--el-overlay-color:#000c;--el-overlay-color-light:#000000b3;--el-overlay-color-lighter:#00000080;--el-mask-color:#ffffffe6;--el-mask-color-extra-light:#ffffff4d;--el-border-width:1px;--el-border-style:solid;--el-border-color-hover:var(--el-text-color-disabled);--el-border:var(--el-border-width) var(--el-border-style) var(--el-border-color);--el-svg-monochrome-grey:var(--el-border-color)}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.el-fade-in-linear-enter-from,.el-fade-in-linear-leave-to{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-fade-in-enter-from,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-from,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transition:var(--el-transition-md-fade);transform-origin:top;transform:scaleY(1)}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:bottom}.el-zoom-in-top-enter-from,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transition:var(--el-transition-md-fade);transform-origin:bottom;transform:scaleY(1)}.el-zoom-in-bottom-enter-from,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transition:var(--el-transition-md-fade);transform-origin:0 0;transform:scale(1)}.el-zoom-in-left-enter-from,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--el-transition-duration) height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.el-collapse-transition-leave-active,.el-collapse-transition-enter-active{transition:var(--el-transition-duration) max-height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--el-transition-duration) width ease-in-out,var(--el-transition-duration) padding-left ease-in-out,var(--el-transition-duration) padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter-from,.el-list-leave-to{opacity:0;transform:translateY(-30px)}.el-list-leave-active{position:absolute!important}.el-opacity-transition{transition:opacity var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.el-icon{--color:inherit;fill:currentColor;width:1em;height:1em;color:var(--color);line-height:1em;font-size:inherit;justify-content:center;align-items:center;display:inline-flex;position:relative}.el-icon.is-loading{animation:2s linear infinite rotating}.el-icon svg{width:1em;height:1em}.el-button{--el-button-font-weight:var(--el-font-weight-primary);--el-button-border-color:var(--el-border-color);--el-button-bg-color:var(--el-fill-color-blank);--el-button-text-color:var(--el-text-color-regular);--el-button-disabled-text-color:var(--el-disabled-text-color);--el-button-disabled-bg-color:var(--el-fill-color-blank);--el-button-disabled-border-color:var(--el-border-color-light);--el-button-divide-border-color:#ffffff80;--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-color-primary-light-9);--el-button-hover-border-color:var(--el-color-primary-light-7);--el-button-active-text-color:var(--el-button-hover-text-color);--el-button-active-border-color:var(--el-color-primary);--el-button-active-bg-color:var(--el-button-hover-bg-color);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-hover-link-text-color:var(--el-text-color-secondary);--el-button-active-color:var(--el-text-color-primary);white-space:nowrap;cursor:pointer;height:32px;color:var(--el-button-text-color);text-align:center;box-sizing:border-box;line-height:1;font-weight:var(--el-button-font-weight);-webkit-user-select:none;user-select:none;vertical-align:middle;-webkit-appearance:none;background-color:var(--el-button-bg-color);border:var(--el-border);border-color:var(--el-button-border-color);outline:none;justify-content:center;align-items:center;transition:all .1s;display:inline-flex}.el-button:hover{color:var(--el-button-hover-text-color);border-color:var(--el-button-hover-border-color);background-color:var(--el-button-hover-bg-color);outline:none}.el-button:active{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:none}.el-button:focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset,outline}.el-button>span{align-items:center;display:inline-flex}.el-button+.el-button{margin-left:12px}.el-button{font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base);padding:8px 15px}.el-button.is-round{padding:8px 15px}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon]+span{margin-left:6px}.el-button [class*=el-icon] svg{vertical-align:bottom}.el-button.is-plain{--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-fill-color-blank);--el-button-hover-border-color:var(--el-color-primary)}.el-button.is-active{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:none}.el-button.is-disabled,.el-button.is-disabled:hover{color:var(--el-button-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color);border-color:var(--el-button-disabled-border-color)}.el-button.is-loading{pointer-events:none;position:relative}.el-button.is-loading:before{z-index:1;pointer-events:none;content:"";border-radius:inherit;background-color:var(--el-mask-color-extra-light);position:absolute;inset:-1px}.el-button.is-round{border-radius:var(--el-border-radius-round)}.el-button.is-dashed{--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-fill-color-blank);--el-button-hover-border-color:var(--el-color-primary);border-style:dashed}.el-button.is-circle{border-radius:50%;width:32px;padding:8px}.el-button.is-text{color:var(--el-button-text-color);background-color:#0000;border:0 solid #0000}.el-button.is-text.is-disabled{color:var(--el-button-disabled-text-color);background-color:#0000!important}.el-button.is-text:not(.is-disabled):hover{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled):focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset,outline}.el-button.is-text:not(.is-disabled):active{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled).is-has-bg:hover{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg:active{background-color:var(--el-fill-color-dark)}.el-button__text--expand{letter-spacing:.3em;margin-right:-.3em}.el-button.is-link{color:var(--el-button-text-color);background:0 0;border-color:#0000;height:auto;padding:2px}.el-button.is-link:hover{color:var(--el-button-hover-link-text-color)}.el-button.is-link.is-disabled{color:var(--el-button-disabled-text-color);background-color:#0000!important;border-color:#0000!important}.el-button.is-link:not(.is-disabled):hover{background-color:#0000;border-color:#0000}.el-button.is-link:not(.is-disabled):active{color:var(--el-button-active-color);background-color:#0000;border-color:#0000}.el-button--text{color:var(--el-color-primary);background:0 0;border-color:#0000;padding-left:0;padding-right:0}.el-button--text.is-disabled{color:var(--el-button-disabled-text-color);background-color:#0000!important;border-color:#0000!important}.el-button--text:not(.is-disabled):hover{color:var(--el-color-primary-light-3);background-color:#0000;border-color:#0000}.el-button--text:not(.is-disabled):active{color:var(--el-color-primary-dark-2);background-color:#0000;border-color:#0000}.el-button__link--expand{letter-spacing:.3em;margin-right:-.3em}.el-button--primary{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-primary);--el-button-border-color:var(--el-color-primary);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-active-color:var(--el-color-primary-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-primary-light-5);--el-button-hover-bg-color:var(--el-color-primary-light-3);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-bg-color:var(--el-color-primary-dark-2);--el-button-active-border-color:var(--el-color-primary-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-primary-light-5);--el-button-disabled-border-color:var(--el-color-primary-light-5)}.el-button--primary.is-plain,.el-button--primary.is-text,.el-button--primary.is-link{--el-button-text-color:var(--el-color-primary);--el-button-bg-color:var(--el-color-primary-light-9);--el-button-border-color:var(--el-color-primary-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-primary);--el-button-hover-border-color:var(--el-color-primary);--el-button-active-text-color:var(--el-color-white)}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:hover,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-text.is-disabled,.el-button--primary.is-text.is-disabled:hover,.el-button--primary.is-text.is-disabled:focus,.el-button--primary.is-text.is-disabled:active,.el-button--primary.is-link.is-disabled,.el-button--primary.is-link.is-disabled:hover,.el-button--primary.is-link.is-disabled:focus,.el-button--primary.is-link.is-disabled:active{color:var(--el-color-primary-light-5);background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8)}.el-button--primary.is-dashed{--el-button-text-color:var(--el-color-primary);--el-button-bg-color:var(--el-color-primary-light-9);--el-button-border-color:var(--el-color-primary-light-5);--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-color-primary-light-9);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-text-color:var(--el-color-primary-dark-2);--el-button-active-bg-color:var(--el-color-primary-light-9);--el-button-active-border-color:var(--el-color-primary-dark-2)}.el-button--primary.is-dashed.is-disabled,.el-button--primary.is-dashed.is-disabled:hover,.el-button--primary.is-dashed.is-disabled:focus,.el-button--primary.is-dashed.is-disabled:active{color:var(--el-color-primary-light-5);background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8)}.el-button--success{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-success);--el-button-border-color:var(--el-color-success);--el-button-outline-color:var(--el-color-success-light-5);--el-button-active-color:var(--el-color-success-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-success-light-5);--el-button-hover-bg-color:var(--el-color-success-light-3);--el-button-hover-border-color:var(--el-color-success-light-3);--el-button-active-bg-color:var(--el-color-success-dark-2);--el-button-active-border-color:var(--el-color-success-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-success-light-5);--el-button-disabled-border-color:var(--el-color-success-light-5)}.el-button--success.is-plain,.el-button--success.is-text,.el-button--success.is-link{--el-button-text-color:var(--el-color-success);--el-button-bg-color:var(--el-color-success-light-9);--el-button-border-color:var(--el-color-success-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-success);--el-button-hover-border-color:var(--el-color-success);--el-button-active-text-color:var(--el-color-white)}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:hover,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-text.is-disabled,.el-button--success.is-text.is-disabled:hover,.el-button--success.is-text.is-disabled:focus,.el-button--success.is-text.is-disabled:active,.el-button--success.is-link.is-disabled,.el-button--success.is-link.is-disabled:hover,.el-button--success.is-link.is-disabled:focus,.el-button--success.is-link.is-disabled:active{color:var(--el-color-success-light-5);background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8)}.el-button--success.is-dashed{--el-button-text-color:var(--el-color-success);--el-button-bg-color:var(--el-color-success-light-9);--el-button-border-color:var(--el-color-success-light-5);--el-button-hover-text-color:var(--el-color-success);--el-button-hover-bg-color:var(--el-color-success-light-9);--el-button-hover-border-color:var(--el-color-success-light-3);--el-button-active-text-color:var(--el-color-success-dark-2);--el-button-active-bg-color:var(--el-color-success-light-9);--el-button-active-border-color:var(--el-color-success-dark-2)}.el-button--success.is-dashed.is-disabled,.el-button--success.is-dashed.is-disabled:hover,.el-button--success.is-dashed.is-disabled:focus,.el-button--success.is-dashed.is-disabled:active{color:var(--el-color-success-light-5);background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8)}.el-button--warning{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-warning);--el-button-border-color:var(--el-color-warning);--el-button-outline-color:var(--el-color-warning-light-5);--el-button-active-color:var(--el-color-warning-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-warning-light-5);--el-button-hover-bg-color:var(--el-color-warning-light-3);--el-button-hover-border-color:var(--el-color-warning-light-3);--el-button-active-bg-color:var(--el-color-warning-dark-2);--el-button-active-border-color:var(--el-color-warning-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-warning-light-5);--el-button-disabled-border-color:var(--el-color-warning-light-5)}.el-button--warning.is-plain,.el-button--warning.is-text,.el-button--warning.is-link{--el-button-text-color:var(--el-color-warning);--el-button-bg-color:var(--el-color-warning-light-9);--el-button-border-color:var(--el-color-warning-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-warning);--el-button-hover-border-color:var(--el-color-warning);--el-button-active-text-color:var(--el-color-white)}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:hover,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-text.is-disabled,.el-button--warning.is-text.is-disabled:hover,.el-button--warning.is-text.is-disabled:focus,.el-button--warning.is-text.is-disabled:active,.el-button--warning.is-link.is-disabled,.el-button--warning.is-link.is-disabled:hover,.el-button--warning.is-link.is-disabled:focus,.el-button--warning.is-link.is-disabled:active{color:var(--el-color-warning-light-5);background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8)}.el-button--warning.is-dashed{--el-button-text-color:var(--el-color-warning);--el-button-bg-color:var(--el-color-warning-light-9);--el-button-border-color:var(--el-color-warning-light-5);--el-button-hover-text-color:var(--el-color-warning);--el-button-hover-bg-color:var(--el-color-warning-light-9);--el-button-hover-border-color:var(--el-color-warning-light-3);--el-button-active-text-color:var(--el-color-warning-dark-2);--el-button-active-bg-color:var(--el-color-warning-light-9);--el-button-active-border-color:var(--el-color-warning-dark-2)}.el-button--warning.is-dashed.is-disabled,.el-button--warning.is-dashed.is-disabled:hover,.el-button--warning.is-dashed.is-disabled:focus,.el-button--warning.is-dashed.is-disabled:active{color:var(--el-color-warning-light-5);background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8)}.el-button--danger{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-danger);--el-button-border-color:var(--el-color-danger);--el-button-outline-color:var(--el-color-danger-light-5);--el-button-active-color:var(--el-color-danger-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-danger-light-5);--el-button-hover-bg-color:var(--el-color-danger-light-3);--el-button-hover-border-color:var(--el-color-danger-light-3);--el-button-active-bg-color:var(--el-color-danger-dark-2);--el-button-active-border-color:var(--el-color-danger-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-danger-light-5);--el-button-disabled-border-color:var(--el-color-danger-light-5)}.el-button--danger.is-plain,.el-button--danger.is-text,.el-button--danger.is-link{--el-button-text-color:var(--el-color-danger);--el-button-bg-color:var(--el-color-danger-light-9);--el-button-border-color:var(--el-color-danger-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-danger);--el-button-hover-border-color:var(--el-color-danger);--el-button-active-text-color:var(--el-color-white)}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:hover,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-text.is-disabled,.el-button--danger.is-text.is-disabled:hover,.el-button--danger.is-text.is-disabled:focus,.el-button--danger.is-text.is-disabled:active,.el-button--danger.is-link.is-disabled,.el-button--danger.is-link.is-disabled:hover,.el-button--danger.is-link.is-disabled:focus,.el-button--danger.is-link.is-disabled:active{color:var(--el-color-danger-light-5);background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8)}.el-button--danger.is-dashed{--el-button-text-color:var(--el-color-danger);--el-button-bg-color:var(--el-color-danger-light-9);--el-button-border-color:var(--el-color-danger-light-5);--el-button-hover-text-color:var(--el-color-danger);--el-button-hover-bg-color:var(--el-color-danger-light-9);--el-button-hover-border-color:var(--el-color-danger-light-3);--el-button-active-text-color:var(--el-color-danger-dark-2);--el-button-active-bg-color:var(--el-color-danger-light-9);--el-button-active-border-color:var(--el-color-danger-dark-2)}.el-button--danger.is-dashed.is-disabled,.el-button--danger.is-dashed.is-disabled:hover,.el-button--danger.is-dashed.is-disabled:focus,.el-button--danger.is-dashed.is-disabled:active{color:var(--el-color-danger-light-5);background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8)}.el-button--info{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-info);--el-button-border-color:var(--el-color-info);--el-button-outline-color:var(--el-color-info-light-5);--el-button-active-color:var(--el-color-info-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-info-light-5);--el-button-hover-bg-color:var(--el-color-info-light-3);--el-button-hover-border-color:var(--el-color-info-light-3);--el-button-active-bg-color:var(--el-color-info-dark-2);--el-button-active-border-color:var(--el-color-info-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-info-light-5);--el-button-disabled-border-color:var(--el-color-info-light-5)}.el-button--info.is-plain,.el-button--info.is-text,.el-button--info.is-link{--el-button-text-color:var(--el-color-info);--el-button-bg-color:var(--el-color-info-light-9);--el-button-border-color:var(--el-color-info-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-info);--el-button-hover-border-color:var(--el-color-info);--el-button-active-text-color:var(--el-color-white)}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:hover,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-text.is-disabled,.el-button--info.is-text.is-disabled:hover,.el-button--info.is-text.is-disabled:focus,.el-button--info.is-text.is-disabled:active,.el-button--info.is-link.is-disabled,.el-button--info.is-link.is-disabled:hover,.el-button--info.is-link.is-disabled:focus,.el-button--info.is-link.is-disabled:active{color:var(--el-color-info-light-5);background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8)}.el-button--info.is-dashed{--el-button-text-color:var(--el-color-info);--el-button-bg-color:var(--el-color-info-light-9);--el-button-border-color:var(--el-color-info-light-5);--el-button-hover-text-color:var(--el-color-info);--el-button-hover-bg-color:var(--el-color-info-light-9);--el-button-hover-border-color:var(--el-color-info-light-3);--el-button-active-text-color:var(--el-color-info-dark-2);--el-button-active-bg-color:var(--el-color-info-light-9);--el-button-active-border-color:var(--el-color-info-dark-2)}.el-button--info.is-dashed.is-disabled,.el-button--info.is-dashed.is-disabled:hover,.el-button--info.is-dashed.is-disabled:focus,.el-button--info.is-dashed.is-disabled:active{color:var(--el-color-info-light-5);background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8)}.el-button--large{--el-button-size:40px;height:var(--el-button-size)}.el-button--large [class*=el-icon]+span{margin-left:8px}.el-button--large{font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base);padding:12px 19px}.el-button--large.is-round{padding:12px 19px}.el-button--large.is-circle{width:var(--el-button-size);padding:12px}.el-button--small{--el-button-size:24px;height:var(--el-button-size)}.el-button--small [class*=el-icon]+span{margin-left:4px}.el-button--small{border-radius:calc(var(--el-border-radius-base) - 1px);padding:5px 11px;font-size:12px}.el-button--small.is-round{padding:5px 11px}.el-button--small.is-circle{width:var(--el-button-size);padding:5px}.el-overlay{z-index:2000;background-color:var(--el-overlay-color-lighter);height:100%;position:fixed;inset:0;overflow:auto}.el-overlay .el-overlay-root{height:0}.el-dialog{--el-dialog-width:50%;--el-dialog-margin-top:15vh;--el-dialog-bg-color:var(--el-bg-color);--el-dialog-box-shadow:var(--el-box-shadow);--el-dialog-title-font-size:var(--el-font-size-large);--el-dialog-content-font-size:14px;--el-dialog-font-line-height:var(--el-font-line-height-primary);--el-dialog-padding-primary:16px;--el-dialog-border-radius:var(--el-border-radius-base);margin:var(--el-dialog-margin-top,15vh) auto 50px;background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;padding:var(--el-dialog-padding-primary);width:var(--el-dialog-width,50%);overflow-wrap:break-word;position:relative}.el-dialog:focus{outline:none!important}.el-dialog.is-align-center{margin:auto}.el-dialog.is-fullscreen{--el-dialog-width:100%;--el-dialog-margin-top:0;border-radius:0;height:100%;margin-bottom:0;overflow:auto}.el-dialog__wrapper{margin:0;position:fixed;inset:0;overflow:auto}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-user-select:none;user-select:none}.el-dialog__header{padding-bottom:var(--el-dialog-padding-primary)}.el-dialog__header.show-close{padding-right:calc(var(--el-dialog-padding-primary) + var(--el-message-close-size,16px))}.el-dialog__headerbtn{cursor:pointer;width:48px;height:48px;font-size:var(--el-message-close-size,16px);background:0 0;border:none;outline:none;padding:0;position:absolute;top:0;right:0}.el-dialog__headerbtn .el-dialog__close{color:var(--el-color-info);font-size:inherit}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:var(--el-color-primary)}.el-dialog__title{line-height:var(--el-dialog-font-line-height);font-size:var(--el-dialog-title-font-size);color:var(--el-text-color-primary)}.el-dialog__body{color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{padding-top:var(--el-dialog-padding-primary);text-align:right;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial}.el-dialog--center .el-dialog__footer{text-align:inherit}.el-modal-dialog.is-penetrable{pointer-events:none}.el-modal-dialog.is-penetrable .el-dialog{pointer-events:auto}.el-overlay-dialog{position:fixed;inset:0;overflow:auto}.el-overlay-dialog.is-closing .el-dialog{pointer-events:none}.dialog-fade-enter-active{animation:modal-fade-in var(--el-transition-duration)}.dialog-fade-enter-active .el-overlay-dialog{animation:dialog-fade-in var(--el-transition-duration)}.dialog-fade-leave-active{animation:modal-fade-out var(--el-transition-duration)}.dialog-fade-leave-active .el-overlay-dialog{animation:dialog-fade-out var(--el-transition-duration)}@keyframes dialog-fade-in{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translate(0)}}@keyframes dialog-fade-out{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translateY(-20px)}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}.el-textarea{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;vertical-align:bottom;width:100%;font-size:var(--el-font-size-base);display:inline-block;position:relative}.el-textarea__inner{cursor:auto;resize:vertical;box-sizing:border-box;width:100%;line-height:1.5;font-size:inherit;color:var(--el-input-text-color,var(--el-text-color-regular));background-color:var(--el-input-bg-color,var(--el-fill-color-blank));-webkit-appearance:none;box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));transition:var(--el-transition-box-shadow);background-image:none;border:none;padding:5px 11px;font-family:inherit;display:block;position:relative}.el-textarea__inner.is-clearable{padding:5px 26px 5px 11px}.el-textarea__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-textarea__inner:focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset;outline:none}.el-textarea__clear{color:var(--el-input-icon-color);cursor:pointer;font-size:14px;position:absolute;top:15px;right:11px;transform:translateY(-50%)}.el-textarea__clear:hover{color:var(--el-input-clear-hover-color)}.el-textarea .el-input__count{color:var(--el-color-info);background:var(--el-fill-color-blank);font-size:12px;line-height:14px;position:absolute;bottom:5px;right:10px}.el-textarea .el-input__count.is-outside{top:100%;right:0;bottom:unset;background:0 0;padding-top:2px;line-height:1;position:absolute}.el-textarea.is-disabled .el-textarea__inner{box-shadow:0 0 0 1px var(--el-disabled-border-color) inset;background-color:var(--el-disabled-bg-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-exceed .el-textarea__inner{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-textarea.is-exceed .el-input__count{color:var(--el-color-danger)}.el-input{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;--el-input-height:var(--el-component-size);font-size:var(--el-font-size-base);width:var(--el-input-width);line-height:var(--el-input-height);box-sizing:border-box;vertical-align:middle;display:inline-flex;position:relative}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{background:var(--el-text-color-disabled);border-radius:5px;width:6px}.el-input::-webkit-scrollbar-corner{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track-piece{background:var(--el-fill-color-blank);width:6px}.el-input .el-input__clear,.el-input .el-input__password{color:var(--el-input-icon-color);cursor:pointer;font-size:14px}.el-input .el-input__clear:hover,.el-input .el-input__password:hover{color:var(--el-input-clear-hover-color)}.el-input .el-input__count{height:100%;color:var(--el-color-info);align-items:center;font-size:12px;display:inline-flex}.el-input .el-input__count .el-input__count-inner{background:var(--el-fill-color-blank);line-height:initial;padding-left:8px;display:inline-block}.el-input .el-input__count.is-outside{height:unset;padding-top:2px;position:absolute;top:100%;right:0}.el-input .el-input__count.is-outside .el-input__count-inner{background:0 0;padding-left:0;line-height:1}.el-input__wrapper{background-color:var(--el-input-bg-color,var(--el-fill-color-blank));border-radius:var(--el-input-border-radius,var(--el-border-radius-base));cursor:text;transition:var(--el-transition-box-shadow);box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;background-image:none;flex-grow:1;justify-content:center;align-items:center;padding:1px 11px;display:inline-flex;transform:translate(0)}.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-input{--el-input-inner-height:calc(var(--el-input-height,32px) - 2px)}.el-input__inner{-webkit-appearance:none;width:100%;color:var(--el-input-text-color,var(--el-text-color-regular));font-size:inherit;height:var(--el-input-inner-height);line-height:var(--el-input-inner-height);box-sizing:border-box;background:0 0;border:none;outline:none;flex-grow:1;padding:0}.el-input__inner:focus{outline:none}.el-input__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner[type=password]::-ms-reveal{display:none}.el-input__inner[type=number]{line-height:1}.el-input__prefix{white-space:nowrap;height:100%;line-height:var(--el-input-inner-height);text-align:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none;flex-wrap:nowrap;flex-shrink:0;display:inline-flex}.el-input__prefix-inner{pointer-events:all;justify-content:center;align-items:center;display:inline-flex}.el-input__prefix-inner>:last-child{margin-right:8px}.el-input__prefix-inner>:first-child,.el-input__prefix-inner>:first-child.el-input__icon{margin-left:0}.el-input__suffix{white-space:nowrap;height:100%;line-height:var(--el-input-inner-height);text-align:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none;flex-wrap:nowrap;flex-shrink:0;display:inline-flex}.el-input__suffix-inner{pointer-events:all;justify-content:center;align-items:center;display:inline-flex}.el-input__suffix-inner>:first-child{margin-left:8px}.el-input .el-input__icon{height:inherit;line-height:inherit;transition:all var(--el-transition-duration);justify-content:center;align-items:center;margin-left:8px;display:flex}.el-input .el-input__clear{transition:color var(--el-transition-duration)}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-color, ) inset}.el-input.is-disabled{cursor:not-allowed}.el-input.is-disabled .el-input__wrapper{background-color:var(--el-disabled-bg-color);cursor:not-allowed;box-shadow:0 0 0 1px var(--el-disabled-border-color) inset}.el-input.is-disabled .el-input__inner{color:var(--el-disabled-text-color);-webkit-text-fill-color:var(--el-disabled-text-color);cursor:not-allowed}.el-input.is-disabled .el-input__inner::placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-disabled .el-input__prefix-inner,.el-input.is-disabled .el-input__suffix-inner{pointer-events:none}.el-input.is-exceed .el-input__wrapper{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-input.is-exceed .el-input__suffix .el-input__count{color:var(--el-color-danger)}.el-input--large{--el-input-height:var(--el-component-size-large);font-size:14px}.el-input--large .el-input__wrapper{padding:1px 15px}.el-input--large{--el-input-inner-height:calc(var(--el-input-height,40px) - 2px)}.el-input--small{--el-input-height:var(--el-component-size-small);font-size:12px}.el-input--small .el-input__wrapper{padding:1px 7px}.el-input--small{--el-input-inner-height:calc(var(--el-input-height,24px) - 2px)}.el-input-group{align-items:stretch;width:100%;display:inline-flex}.el-input-group__append,.el-input-group__prepend{background-color:var(--el-fill-color-light);color:var(--el-color-info);border-radius:var(--el-input-border-radius);white-space:nowrap;justify-content:center;align-items:center;min-height:100%;padding:0 20px;display:inline-flex;position:relative}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:none}.el-input-group__append .el-select,.el-input-group__append .el-button,.el-input-group__prepend .el-select,.el-input-group__prepend .el-button{flex:1;margin:0 -20px;display:inline-block}.el-input-group__append button.el-button,.el-input-group__append button.el-button:hover,.el-input-group__append div.el-select .el-select__wrapper,.el-input-group__append div.el-select:hover .el-select__wrapper,.el-input-group__prepend button.el-button,.el-input-group__prepend button.el-button:hover,.el-input-group__prepend div.el-select .el-select__wrapper,.el-input-group__prepend div.el-select:hover .el-select__wrapper{color:inherit;background-color:#0000;border-color:#0000}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset;border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset;border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend>.el-input__wrapper{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input-group__prepend .el-select .el-select__wrapper{box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append>.el-input__wrapper{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-input-group__append .el-select .el-select__wrapper{box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-hidden{display:none!important}.el-input-number{vertical-align:middle;width:150px;line-height:30px;display:inline-flex;position:relative}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;text-align:center;line-height:1}.el-input-number .el-input__inner::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.el-input-number .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-input-number.is-left .el-input__inner{text-align:left}.el-input-number.is-right .el-input__inner{text-align:right}.el-input-number.is-center .el-input__inner{text-align:center}.el-input-number__increase,.el-input-number__decrease{z-index:1;background:var(--el-fill-color-light);width:32px;height:auto;color:var(--el-text-color-regular);cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;font-size:13px;display:flex;position:absolute;top:1px;bottom:1px}.el-input-number__increase:hover,.el-input-number__decrease:hover{color:var(--el-color-primary)}.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input__wrapper,.el-input-number__decrease:hover~.el-input:not(.is-disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-input-number__increase.is-disabled,.el-input-number__decrease.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;border-left:var(--el-border);right:1px}.el-input-number__decrease{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);border-right:var(--el-border);left:1px}.el-input-number.is-disabled .el-input-number__increase,.el-input-number.is-disabled .el-input-number__decrease{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__increase:hover,.el-input-number.is-disabled .el-input-number__decrease:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{width:180px;line-height:38px}.el-input-number--large .el-input-number__increase,.el-input-number--large .el-input-number__decrease{width:40px;font-size:14px}.el-input-number--large.is-controls-right .el-input--large .el-input__wrapper{padding-right:47px}.el-input-number--large .el-input--large .el-input__wrapper{padding-left:47px;padding-right:47px}.el-input-number--small{width:120px;line-height:22px}.el-input-number--small .el-input-number__increase,.el-input-number--small .el-input-number__decrease{width:24px;font-size:12px}.el-input-number--small.is-controls-right .el-input--small .el-input__wrapper{padding-right:31px}.el-input-number--small .el-input--small .el-input__wrapper{padding-left:31px;padding-right:31px}.el-input-number--small .el-input-number__increase [class*=el-icon],.el-input-number--small .el-input-number__decrease [class*=el-icon]{transform:scale(.9)}.el-input-number.is-without-controls .el-input__wrapper{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__wrapper{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__increase,.el-input-number.is-controls-right .el-input-number__decrease{--el-input-number-controls-height:15px;height:var(--el-input-number-controls-height);line-height:var(--el-input-number-controls-height)}.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon],.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 var(--el-border-radius-base) 0 0;border-bottom:var(--el-border);bottom:auto;left:auto}.el-input-number.is-controls-right .el-input-number__decrease{border-right:none;border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0;top:auto;left:auto;right:1px}.el-input-number.is-controls-right[class*=large] [class*=increase],.el-input-number.is-controls-right[class*=large] [class*=decrease]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=increase],.el-input-number.is-controls-right[class*=small] [class*=decrease]{--el-input-number-controls-height:11px}.el-badge{--el-badge-bg-color:var(--el-color-danger);--el-badge-radius:10px;--el-badge-font-size:12px;--el-badge-padding:6px;--el-badge-size:18px;vertical-align:middle;width:-moz-fit-content;width:fit-content;display:inline-block;position:relative}.el-badge__content{background-color:var(--el-badge-bg-color);border-radius:var(--el-badge-radius);color:var(--el-color-white);font-size:var(--el-badge-font-size);height:var(--el-badge-size);padding:0 var(--el-badge-padding);white-space:nowrap;border:1px solid var(--el-bg-color);justify-content:center;align-items:center;display:inline-flex}.el-badge__content.is-fixed{top:0;right:calc(1px + var(--el-badge-size) / 2);z-index:var(--el-index-normal);position:absolute;transform:translateY(-50%)translate(100%)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{border-radius:50%;width:8px;height:8px;padding:0;right:0}.el-badge__content.is-hide-zero{display:none}.el-badge__content--primary{background-color:var(--el-color-primary)}.el-badge__content--success{background-color:var(--el-color-success)}.el-badge__content--warning{background-color:var(--el-color-warning)}.el-badge__content--info{background-color:var(--el-color-info)}.el-badge__content--danger{background-color:var(--el-color-danger)}.el-message{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-border-color-lighter);--el-message-padding:11px 15px;--el-message-close-size:16px;--el-message-close-icon-color:var(--el-text-color-placeholder);--el-message-close-hover-color:var(--el-text-color-secondary);box-sizing:border-box;border-radius:var(--el-border-radius-base);border-width:var(--el-border-width);border-style:var(--el-border-style);border-color:var(--el-message-border-color);background-color:var(--el-message-bg-color);width:max-content;max-width:calc(100% - 32px);transition:opacity var(--el-transition-duration),transform .4s,top .4s,bottom .4s;padding:var(--el-message-padding);align-items:center;gap:8px;display:flex;position:fixed}.el-message.is-left{left:16px}.el-message.is-right{right:16px}.el-message.is-center{left:50%;transform:translate(-50%)}.el-message.is-plain{background-color:var(--el-bg-color-overlay);border-color:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-message p{margin:0}.el-message--primary{--el-message-bg-color:var(--el-color-primary-light-9);--el-message-border-color:var(--el-color-primary-light-8);--el-message-text-color:var(--el-color-primary)}.el-message--primary .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--primary{color:var(--el-message-text-color)}.el-message--success{--el-message-bg-color:var(--el-color-success-light-9);--el-message-border-color:var(--el-color-success-light-8);--el-message-text-color:var(--el-color-success)}.el-message--success .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--success{color:var(--el-message-text-color)}.el-message--info{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-color-info-light-8);--el-message-text-color:var(--el-color-info)}.el-message--info .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--info{color:var(--el-message-text-color)}.el-message--warning{--el-message-bg-color:var(--el-color-warning-light-9);--el-message-border-color:var(--el-color-warning-light-8);--el-message-text-color:var(--el-color-warning)}.el-message--warning .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--warning{color:var(--el-message-text-color)}.el-message--error{--el-message-bg-color:var(--el-color-error-light-9);--el-message-border-color:var(--el-color-error-light-8);--el-message-text-color:var(--el-color-error)}.el-message--error .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--error{color:var(--el-message-text-color)}.el-message .el-message__badge{position:absolute;top:-8px;right:-8px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__content:focus{outline-width:0}.el-message .el-message__closeBtn{cursor:pointer;color:var(--el-message-close-icon-color);font-size:var(--el-message-close-size)}.el-message .el-message__closeBtn:focus{outline-width:0}.el-message .el-message__closeBtn:hover{color:var(--el-message-close-hover-color)}.el-message-fade-enter-from,.el-message-fade-leave-to{opacity:0}.el-message-fade-enter-from.is-left,.el-message-fade-enter-from.is-right,.el-message-fade-leave-to.is-left,.el-message-fade-leave-to.is-right{transform:translateY(-100%)}.el-message-fade-enter-from.is-left.is-bottom,.el-message-fade-enter-from.is-right.is-bottom,.el-message-fade-leave-to.is-left.is-bottom,.el-message-fade-leave-to.is-right.is-bottom{transform:translateY(100%)}.el-message-fade-enter-from.is-center,.el-message-fade-leave-to.is-center{transform:translate(-50%,-100%)}.el-message-fade-enter-from.is-center.is-bottom,.el-message-fade-leave-to.is-center.is-bottom{transform:translate(-50%,100%)}:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:.5}.v-modal-enter{animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{width:100%;height:100%;opacity:var(--el-popup-modal-opacity);background:var(--el-popup-modal-bg-color);position:fixed;top:0;left:0}.el-popup-parent--hidden{overflow:hidden}.el-message-box{--el-messagebox-title-color:var(--el-text-color-primary);--el-messagebox-width:420px;--el-messagebox-border-radius:4px;--el-messagebox-box-shadow:var(--el-box-shadow);--el-messagebox-font-size:var(--el-font-size-large);--el-messagebox-content-font-size:var(--el-font-size-base);--el-messagebox-content-color:var(--el-text-color-regular);--el-messagebox-error-font-size:12px;--el-messagebox-padding-primary:12px;--el-messagebox-font-line-height:var(--el-font-line-height-primary);max-width:var(--el-messagebox-width);width:100%;padding:var(--el-messagebox-padding-primary);vertical-align:middle;background-color:var(--el-bg-color);border-radius:var(--el-messagebox-border-radius);font-size:var(--el-messagebox-font-size);box-shadow:var(--el-messagebox-box-shadow);text-align:left;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box;overflow-wrap:break-word;display:inline-block;position:relative;overflow:hidden}.el-message-box:focus{outline:none!important}.is-message-box .el-overlay-message-box{text-align:center;padding:16px;position:fixed;inset:0;overflow:auto}.is-message-box .el-overlay-message-box:after{content:"";vertical-align:middle;width:0;height:100%;display:inline-block}.el-message-box.is-draggable .el-message-box__header{cursor:move;-webkit-user-select:none;user-select:none}.el-message-box__header{padding-bottom:var(--el-messagebox-padding-primary)}.el-message-box__header.show-close{padding-right:calc(var(--el-messagebox-padding-primary) + var(--el-message-close-size,16px))}.el-message-box__title{font-size:var(--el-messagebox-font-size);line-height:var(--el-messagebox-font-line-height);color:var(--el-messagebox-title-color)}.el-message-box__headerbtn{width:40px;height:40px;font-size:var(--el-message-close-size,16px);cursor:pointer;background:0 0;border:none;outline:none;padding:0;position:absolute;top:0;right:0}.el-message-box__headerbtn .el-message-box__close{color:var(--el-color-info);font-size:inherit}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:var(--el-color-primary)}.el-message-box__content{color:var(--el-messagebox-content-color);font-size:var(--el-messagebox-content-font-size)}.el-message-box__container{align-items:center;gap:12px;display:flex}.el-message-box__input{padding-top:12px}.el-message-box__input div.invalid>input,.el-message-box__input div.invalid>input:focus{border-color:var(--el-color-error)}.el-message-box__status{font-size:24px}.el-message-box__status.el-message-box-icon--primary{--el-messagebox-color:var(--el-color-primary);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--success{--el-messagebox-color:var(--el-color-success);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--info{--el-messagebox-color:var(--el-color-info);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--warning{--el-messagebox-color:var(--el-color-warning);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--error{--el-messagebox-color:var(--el-color-error);color:var(--el-messagebox-color)}.el-message-box__message{min-width:0;margin:0}.el-message-box__message p{line-height:var(--el-messagebox-font-line-height);margin:0}.el-message-box__errormsg{color:var(--el-color-error);font-size:var(--el-messagebox-error-font-size);line-height:var(--el-messagebox-font-line-height)}.el-message-box__btns{padding-top:var(--el-messagebox-padding-primary);flex-wrap:wrap;justify-content:flex-end;align-items:center;display:flex}.el-message-box--center .el-message-box__title{justify-content:center;align-items:center;gap:6px;display:flex}.el-message-box--center .el-message-box__status{font-size:inherit}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__container{justify-content:center}.el-message-box-parent--hidden{overflow:hidden}.fade-in-linear-enter-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration)}.fade-in-linear-leave-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration) reverse}@keyframes msgbox-fade-in{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translate(0)}}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-selected:after{content:"";background-position:50%;background-repeat:no-repeat;background-color:var(--el-color-primary);-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") 0 0/100% 100% no-repeat;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") 0 0/100% 100% no-repeat;border-top:none;border-right:none;width:12px;height:12px;position:absolute;top:50%;right:20px;transform:translateY(-50%);-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") 0 0/100% 100% no-repeat}.el-scrollbar{--el-scrollbar-opacity:.3;--el-scrollbar-bg-color:var(--el-text-color-secondary);--el-scrollbar-hover-opacity:.5;--el-scrollbar-hover-bg-color:var(--el-text-color-secondary);height:100%;position:relative;overflow:hidden}.el-scrollbar__wrap{height:100%;overflow:auto}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{display:none}.el-scrollbar__thumb{cursor:pointer;border-radius:inherit;background-color:var(--el-scrollbar-bg-color,var(--el-text-color-secondary));width:0;height:0;transition:var(--el-transition-duration) background-color;opacity:var(--el-scrollbar-opacity,.3);display:block;position:relative}.el-scrollbar__thumb:hover{background-color:var(--el-scrollbar-hover-bg-color,var(--el-text-color-secondary));opacity:var(--el-scrollbar-hover-opacity,.5)}.el-scrollbar__bar{z-index:1;border-radius:4px;position:absolute;bottom:2px;right:2px}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar-fade-enter-active{transition:opacity .34s ease-out}.el-scrollbar-fade-leave-active{transition:opacity .12s ease-out}.el-scrollbar-fade-enter-from,.el-scrollbar-fade-leave-active{opacity:0}.el-popper{--el-popper-border-radius:var(--el-popover-border-radius,4px);--el-popper-bg-color-light:var(--el-bg-color-overlay);--el-popper-bg-color-dark:var(--el-text-color-primary);border-radius:var(--el-popper-border-radius);z-index:2000;overflow-wrap:break-word;word-break:normal;visibility:visible;min-width:10px;padding:5px 11px;font-size:12px;line-height:20px;position:absolute}.el-popper.is-dark{--el-fill-color-blank:var(--el-popper-bg-color-dark);color:var(--el-bg-color);background:var(--el-popper-bg-color-dark);border:1px solid var(--el-text-color-primary)}.el-popper.is-dark>.el-popper__arrow:before{border:1px solid var(--el-text-color-primary);background:var(--el-popper-bg-color-dark);right:0}.el-popper.is-light{--el-fill-color-blank:var(--el-popper-bg-color-light);background:var(--el-popper-bg-color-light);border:1px solid var(--el-border-color-light)}.el-popper.is-light>.el-popper__arrow:before{border:1px solid var(--el-border-color-light);background:var(--el-popper-bg-color-light);right:0}.el-popper.is-pure{padding:0}.el-popper__arrow{z-index:-1;width:10px;height:10px;position:absolute}.el-popper__arrow:before{z-index:-1;content:" ";background:var(--el-text-color-primary);box-sizing:border-box;width:10px;height:10px;position:absolute;transform:rotate(45deg)}.el-popper[data-popper-placement^=top]>.el-popper__arrow{bottom:-5px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-bottom-right-radius:2px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow{top:-5px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-top-left-radius:2px}.el-popper[data-popper-placement^=left]>.el-popper__arrow{right:-5px}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-top-right-radius:2px}.el-popper[data-popper-placement^=right]>.el-popper__arrow{left:-5px}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-bottom-left-radius:2px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-top-color:#0000!important;border-left-color:#0000!important}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-bottom-color:#0000!important;border-right-color:#0000!important}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-bottom-color:#0000!important;border-left-color:#0000!important}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-top-color:#0000!important;border-right-color:#0000!important}.el-tag{--el-tag-font-size:12px;--el-tag-border-radius:4px;--el-tag-border-radius-rounded:9999px;background-color:var(--el-tag-bg-color);border-color:var(--el-tag-border-color);color:var(--el-tag-text-color);vertical-align:middle;height:24px;font-size:var(--el-tag-font-size);border-radius:var(--el-tag-border-radius);box-sizing:border-box;white-space:nowrap;--el-icon-size:14px;--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary);border-style:solid;border-width:1px;justify-content:center;align-items:center;padding:0 9px;line-height:1;display:inline-flex}.el-tag.el-tag--primary{--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-bg-color:var(--el-color-success-light-9);--el-tag-border-color:var(--el-color-success-light-8);--el-tag-hover-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-bg-color:var(--el-color-warning-light-9);--el-tag-border-color:var(--el-color-warning-light-8);--el-tag-hover-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-bg-color:var(--el-color-danger-light-9);--el-tag-border-color:var(--el-color-danger-light-8);--el-tag-hover-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-bg-color:var(--el-color-error-light-9);--el-tag-border-color:var(--el-color-error-light-8);--el-tag-hover-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-bg-color:var(--el-color-info-light-9);--el-tag-border-color:var(--el-color-info-light-8);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-hit{border-color:var(--el-color-primary)}.el-tag.is-round{border-radius:var(--el-tag-border-radius-rounded)}.el-tag .el-tag__close{color:var(--el-tag-text-color);flex-shrink:0}.el-tag .el-tag__close:hover{color:var(--el-color-white);background-color:var(--el-tag-hover-color)}.el-tag.el-tag--primary{--el-tag-text-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-text-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-text-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-text-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-text-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-text-color:var(--el-color-info)}.el-tag .el-icon{cursor:pointer;font-size:calc(var(--el-icon-size) - 2px);height:var(--el-icon-size);width:var(--el-icon-size);border-radius:50%}.el-tag .el-tag__close{background-color:#0000;border:none;border-radius:50%;outline:none;margin-left:6px;padding:0;overflow:hidden}.el-tag .el-tag__close:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-tag .el-tag__close .el-icon{display:flex}.el-tag--dark{--el-tag-text-color:var(--el-color-white);--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3)}.el-tag--dark.el-tag--primary{--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3)}.el-tag--dark.el-tag--success{--el-tag-bg-color:var(--el-color-success);--el-tag-border-color:var(--el-color-success);--el-tag-hover-color:var(--el-color-success-light-3)}.el-tag--dark.el-tag--warning{--el-tag-bg-color:var(--el-color-warning);--el-tag-border-color:var(--el-color-warning);--el-tag-hover-color:var(--el-color-warning-light-3)}.el-tag--dark.el-tag--danger{--el-tag-bg-color:var(--el-color-danger);--el-tag-border-color:var(--el-color-danger);--el-tag-hover-color:var(--el-color-danger-light-3)}.el-tag--dark.el-tag--error{--el-tag-bg-color:var(--el-color-error);--el-tag-border-color:var(--el-color-error);--el-tag-hover-color:var(--el-color-error-light-3)}.el-tag--dark.el-tag--info{--el-tag-bg-color:var(--el-color-info);--el-tag-border-color:var(--el-color-info);--el-tag-hover-color:var(--el-color-info-light-3)}.el-tag--dark.el-tag--primary,.el-tag--dark.el-tag--success,.el-tag--dark.el-tag--warning,.el-tag--dark.el-tag--danger,.el-tag--dark.el-tag--error,.el-tag--dark.el-tag--info{--el-tag-text-color:var(--el-color-white)}.el-tag--plain,.el-tag--plain.el-tag--primary{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-primary-light-5);--el-tag-hover-color:var(--el-color-primary)}.el-tag--plain.el-tag--success{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-success-light-5);--el-tag-hover-color:var(--el-color-success)}.el-tag--plain.el-tag--warning{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-warning-light-5);--el-tag-hover-color:var(--el-color-warning)}.el-tag--plain.el-tag--danger{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-danger-light-5);--el-tag-hover-color:var(--el-color-danger)}.el-tag--plain.el-tag--error{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-error-light-5);--el-tag-hover-color:var(--el-color-error)}.el-tag--plain.el-tag--info{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-info-light-5);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-closable{padding-right:5px}.el-tag--large{--el-icon-size:16px;height:32px;padding:0 11px}.el-tag--large .el-tag__close{margin-left:8px}.el-tag--large.is-closable{padding-right:7px}.el-tag--small{--el-icon-size:12px;height:20px;padding:0 7px}.el-tag--small .el-tag__close{margin-left:4px}.el-tag--small.is-closable{padding-right:3px}.el-tag--small .el-icon-close{transform:scale(.8)}.el-tag.el-tag--primary.is-hit{border-color:var(--el-color-primary)}.el-tag.el-tag--success.is-hit{border-color:var(--el-color-success)}.el-tag.el-tag--warning.is-hit{border-color:var(--el-color-warning)}.el-tag.el-tag--danger.is-hit{border-color:var(--el-color-danger)}.el-tag.el-tag--error.is-hit{border-color:var(--el-color-error)}.el-tag.el-tag--info.is-hit{border-color:var(--el-color-info)}.el-select-dropdown{z-index:calc(var(--el-index-top) + 1);border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__loading,.el-select-dropdown__empty{text-align:center;color:var(--el-text-color-secondary);font-size:var(--el-select-font-size);margin:0;padding:10px 0}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{box-sizing:border-box;margin:0;padding:6px 0;list-style:none}.el-select-dropdown__list.el-vl__window{margin:6px 0;padding:0}.el-select-dropdown__header{border-bottom:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__footer{border-top:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__item{font-size:var(--el-font-size-base);white-space:nowrap;text-overflow:ellipsis;color:var(--el-text-color-regular);box-sizing:border-box;cursor:pointer;height:34px;padding:0 32px 0 20px;line-height:34px;position:relative;overflow:hidden}.el-select-dropdown__item.is-hovering{background-color:var(--el-fill-color-light)}.el-select-dropdown__item.is-selected{color:var(--el-color-primary);font-weight:700}.el-select-dropdown__item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed;background-color:unset}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-selected:after{content:"";background-position:50%;background-repeat:no-repeat;background-color:var(--el-color-primary);-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") 0 0/100% 100% no-repeat;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") 0 0/100% 100% no-repeat;border-top:none;border-right:none;width:12px;height:12px;position:absolute;top:50%;right:20px;transform:translateY(-50%);-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") 0 0/100% 100% no-repeat}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-disabled:after{background-color:var(--el-text-color-placeholder)}.el-select-group{margin:0;padding:0}.el-select-group__wrap{margin:0;padding:0;list-style:none;position:relative}.el-select-group__title{box-sizing:border-box;color:var(--el-color-info);text-overflow:ellipsis;white-space:nowrap;padding:0 20px;font-size:12px;line-height:34px;overflow:hidden}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{--el-select-border-color-hover:var(--el-border-color-hover);--el-select-disabled-color:var(--el-disabled-text-color);--el-select-disabled-border:var(--el-disabled-border-color);--el-select-font-size:var(--el-font-size-base);--el-select-close-hover-color:var(--el-text-color-secondary);--el-select-input-color:var(--el-text-color-placeholder);--el-select-multiple-input-color:var(--el-text-color-regular);--el-select-input-focus-border-color:var(--el-color-primary);--el-select-input-font-size:14px;--el-select-width:100%;vertical-align:middle;width:var(--el-select-width);display:inline-block;position:relative}.el-select__wrapper{box-sizing:border-box;cursor:pointer;text-align:left;border-radius:var(--el-border-radius-base);background-color:var(--el-fill-color-blank);min-height:32px;transition:var(--el-transition-duration);box-shadow:0 0 0 1px var(--el-border-color) inset;align-items:center;gap:6px;padding:4px 12px;font-size:14px;line-height:24px;display:flex;position:relative;transform:translate(0)}.el-select__wrapper.is-filterable{cursor:text}.el-select__wrapper.is-focused{box-shadow:0 0 0 1px var(--el-color-primary) inset}.el-select__wrapper.is-hovering:not(.is-focused){box-shadow:0 0 0 1px var(--el-border-color-hover) inset}.el-select__wrapper.is-disabled{cursor:not-allowed;background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);box-shadow:0 0 0 1px var(--el-select-disabled-border) inset}.el-select__wrapper.is-disabled:hover{box-shadow:0 0 0 1px var(--el-select-disabled-border) inset}.el-select__wrapper.is-disabled.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-select__wrapper.is-disabled .el-select__selected-item{color:var(--el-select-disabled-color)}.el-select__wrapper.is-disabled .el-select__caret,.el-select__wrapper.is-disabled .el-tag,.el-select__wrapper.is-disabled input{cursor:not-allowed}.el-select__wrapper.is-disabled .el-select__prefix,.el-select__wrapper.is-disabled .el-select__suffix{pointer-events:none}.el-select__prefix,.el-select__suffix{color:var(--el-input-icon-color,var(--el-text-color-placeholder));flex-shrink:0;align-items:center;gap:6px;display:flex}.el-select__caret{color:var(--el-select-input-color);font-size:var(--el-select-input-font-size);transition:var(--el-transition-duration);cursor:pointer;transform:rotate(0)}.el-select__caret.is-reverse{transform:rotate(180deg)}.el-select__clear{cursor:pointer}.el-select__clear:hover{color:var(--el-select-close-hover-color)}.el-select__selection{flex-wrap:wrap;flex:1;align-items:center;gap:6px;min-width:0;display:flex;position:relative}.el-select__selection.is-near{margin-left:-8px}.el-select__selection .el-tag{cursor:pointer;border-color:#0000}.el-select__selection .el-tag.el-tag--plain{border-color:var(--el-tag-border-color)}.el-select__selection .el-tag .el-tag__content{min-width:0}.el-select__selected-item{-webkit-user-select:none;user-select:none;flex-wrap:wrap;display:flex}.el-select__tags-text{text-overflow:ellipsis;white-space:nowrap;line-height:normal;display:block;overflow:hidden}.el-select__placeholder{z-index:-1;text-overflow:ellipsis;white-space:nowrap;width:100%;color:var(--el-input-text-color,var(--el-text-color-regular));display:block;position:absolute;top:50%;overflow:hidden;transform:translateY(-50%)}.el-select__placeholder.is-transparent{-webkit-user-select:none;user-select:none;color:var(--el-text-color-placeholder)}.el-select__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.el-select__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-select__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:#0000;border-left-color:#0000}.el-select__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-select__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-select__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.el-select__input-wrapper{flex:1}.el-select__input-wrapper.is-hidden{opacity:0;z-index:-1;position:absolute}.el-select__input{color:var(--el-select-multiple-input-color);font-size:inherit;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#0000;border:none;outline:none;width:100%;height:24px;padding:0;font-family:inherit}.el-select__input-calculator{visibility:hidden;white-space:pre;max-width:100%;position:absolute;top:0;left:0;overflow:hidden}.el-select--large .el-select__wrapper{gap:6px;min-height:40px;padding:8px 16px;font-size:14px;line-height:24px}.el-select--large .el-select__selection{gap:6px}.el-select--large .el-select__selection.is-near{margin-left:-8px}.el-select--large .el-select__prefix,.el-select--large .el-select__suffix{gap:6px}.el-select--large .el-select__input{height:24px}.el-select--small .el-select__wrapper{gap:4px;min-height:24px;padding:2px 8px;font-size:12px;line-height:20px}.el-select--small .el-select__selection{gap:4px}.el-select--small .el-select__selection.is-near{margin-left:-6px}.el-select--small .el-select__prefix,.el-select--small .el-select__suffix{gap:4px}.el-select--small .el-select__input{height:20px}.el-switch{--el-switch-on-color:var(--el-color-primary);--el-switch-off-color:var(--el-border-color);vertical-align:middle;align-items:center;height:32px;font-size:14px;line-height:20px;display:inline-flex;position:relative}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{transition:var(--el-transition-duration-fast);cursor:pointer;vertical-align:middle;height:20px;color:var(--el-text-color-primary);font-size:14px;font-weight:500;display:inline-block}.el-switch__label.is-active{color:var(--el-color-primary)}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{font-size:14px;line-height:1;display:inline-block}.el-switch__label .el-icon{height:inherit}.el-switch__label .el-icon svg{vertical-align:middle}.el-switch__input{opacity:0;width:0;height:0;margin:0;position:absolute}.el-switch__input:focus-visible~.el-switch__core{outline:2px solid var(--el-switch-on-color);outline-offset:1px}.el-switch__core{border:1px solid var(--el-switch-border-color,var(--el-switch-off-color));box-sizing:border-box;background:var(--el-switch-off-color);cursor:pointer;min-width:40px;height:20px;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration);border-radius:10px;outline:none;align-items:center;display:inline-flex;position:relative}.el-switch__core .el-switch__inner{width:100%;transition:all var(--el-transition-duration);justify-content:center;align-items:center;height:16px;padding:0 4px 0 18px;display:flex;overflow:hidden}.el-switch__core .el-switch__inner-wrapper{color:var(--el-color-white);-webkit-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;align-items:center;font-size:12px;display:flex;overflow:hidden}.el-switch__core .el-switch__action{border-radius:var(--el-border-radius-circle);transition:all var(--el-transition-duration);background-color:var(--el-color-white);width:16px;height:16px;color:var(--el-switch-off-color);justify-content:center;align-items:center;display:flex;position:absolute;left:1px}.el-switch.is-checked .el-switch__core{border-color:var(--el-switch-border-color,var(--el-switch-on-color));background-color:var(--el-switch-on-color)}.el-switch.is-checked .el-switch__core .el-switch__action{color:var(--el-switch-on-color);left:calc(100% - 17px)}.el-switch.is-checked .el-switch__core .el-switch__inner{padding:0 18px 0 4px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter-from,.el-switch .label-fade-leave-active{opacity:0}.el-switch--large{height:40px;font-size:14px;line-height:24px}.el-switch--large .el-switch__label{height:24px;font-size:14px}.el-switch--large .el-switch__label *{font-size:14px}.el-switch--large .el-switch__core{border-radius:12px;min-width:50px;height:24px}.el-switch--large .el-switch__core .el-switch__inner{height:20px;padding:0 6px 0 22px}.el-switch--large .el-switch__core .el-switch__action{width:20px;height:20px}.el-switch--large.is-checked .el-switch__core .el-switch__action{left:calc(100% - 21px)}.el-switch--large.is-checked .el-switch__core .el-switch__inner{padding:0 22px 0 6px}.el-switch--small{height:24px;font-size:12px;line-height:16px}.el-switch--small .el-switch__label{height:16px;font-size:12px}.el-switch--small .el-switch__label *{font-size:12px}.el-switch--small .el-switch__core{border-radius:8px;min-width:30px;height:16px}.el-switch--small .el-switch__core .el-switch__inner{height:12px;padding:0 2px 0 14px}.el-switch--small .el-switch__core .el-switch__action{width:12px;height:12px}.el-switch--small.is-checked .el-switch__core .el-switch__action{left:calc(100% - 13px)}.el-switch--small.is-checked .el-switch__core .el-switch__inner{padding:0 14px 0 2px}:root{--el-loading-spinner-size:42px;--el-loading-fullscreen-spinner-size:50px}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{z-index:2000;background-color:var(--el-mask-color);transition:opacity var(--el-transition-duration);margin:0;position:absolute;inset:0}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:calc((0px - var(--el-loading-fullscreen-spinner-size)) / 2)}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:var(--el-loading-fullscreen-spinner-size);width:var(--el-loading-fullscreen-spinner-size)}.el-loading-spinner{margin-top:calc((0px - var(--el-loading-spinner-size)) / 2);text-align:center;width:100%;position:absolute;top:50%}.el-loading-spinner .el-loading-text{color:var(--el-color-primary);margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:var(--el-loading-spinner-size);width:var(--el-loading-spinner-size);animation:2s linear infinite loading-rotate;display:inline}.el-loading-spinner .path{stroke-dasharray:90 150;stroke-dashoffset:0;stroke-width:2px;stroke:var(--el-color-primary);stroke-linecap:round;animation:1.5s ease-in-out infinite loading-dash}.el-loading-spinner i{color:var(--el-color-primary)}.el-loading-fade-enter-from,.el-loading-fade-leave-to{opacity:0}@keyframes loading-rotate{to{transform:rotate(360deg)}}@keyframes loading-dash{0%{stroke-dasharray:1 200;stroke-dashoffset:0}50%{stroke-dasharray:90 150;stroke-dashoffset:-40px}to{stroke-dasharray:90 150;stroke-dashoffset:-120px}}:root{color-scheme:light;font-family:Inter,Segoe UI,Microsoft YaHei,sans-serif;font-size:16px;line-height:1.5;--bg: #f5f7fa;--surface: #fff;--surface-soft: #f8fafc;--surface-inset: #eef2f7;--text: #1f2430;--text-soft: #5b6472;--text-faint: #98a2b3;--border: #e8ecf3;--accent: #2563eb;--accent-dark: #1d4ed8;--accent-soft: rgba(37, 99, 235, .08);--accent-contrast: #fff;--danger: #dc2626;--sidebar: #fff;--radius-sm: 12px;--radius: 14px;--radius-lg: 18px;--radius-xl: 22px;--shadow: 0 1px 2px rgba(16, 24, 40, .03), 0 10px 28px rgba(16, 24, 40, .06);--el-border-radius-base: 12px;--el-border-radius-small: 10px;--el-border-radius-round: 20px}html.dark{color-scheme:dark;--bg: #10141b;--surface: #171d27;--surface-soft: #1c2430;--surface-inset: #10151c;--text: #edf3f8;--text-soft: #a9b5c2;--text-faint: #758292;--border: #2a3442;--accent: #3b82f6;--accent-dark: #60a5fa;--accent-soft: rgba(59, 130, 246, .14);--accent-contrast: #fff;--danger: #f87171;--sidebar: #131922;--shadow: 0 1px 2px rgba(0, 0, 0, .28), 0 10px 28px rgba(0, 0, 0, .26);--el-border-radius-base: 12px;--el-border-radius-small: 10px;--el-border-radius-round: 20px}*{box-sizing:border-box}html,body,#app{min-height:100%;margin:0}body{background:var(--bg);color:var(--text)}a{color:inherit;text-decoration:none}button{font:inherit}.app-shell{min-height:100vh}.sidebar{position:fixed;inset:0 auto 0 0;z-index:20;width:272px;display:flex;flex-direction:column;background:var(--sidebar);border-right:1px solid var(--border)}.brand{display:flex;align-items:center;gap:14px;min-height:96px;padding:22px 20px;border-bottom:1px solid var(--border)}.brand-mark{display:grid;place-items:center;width:44px;height:44px;border-radius:14px;color:#fff;font-size:18px;font-weight:800;background:linear-gradient(145deg,#3b82f6,#1d4ed8);box-shadow:0 8px 20px #2563eb3d}.brand strong,.brand small{display:block}.brand strong{font-size:16px;letter-spacing:-.01em}.brand small{margin-top:4px;color:var(--text-faint);font-size:11px;letter-spacing:.08em;text-transform:uppercase}.navigation{flex:1;overflow:auto;padding:18px 14px}.nav-link{display:flex;align-items:center;gap:12px;margin:4px 0;min-height:50px;padding:12px 14px;border-radius:var(--radius);color:var(--text-soft);font-size:15px;font-weight:600;transition:.18s ease}.nav-link .el-icon{font-size:20px}.nav-link:hover{color:var(--text);background:var(--surface-soft)}.nav-link.active{color:var(--accent-dark);background:var(--accent-soft);font-weight:700}.sidebar-footer{display:flex;flex-direction:column;gap:4px;padding:14px 16px 18px;border-top:1px solid var(--border)}.sidebar-footer .nav-link,.sidebar-footer .help-link{margin:0;min-height:40px;padding:8px 12px;font-size:13px;font-weight:550}.sidebar-footer .nav-link .el-icon{font-size:16px}.sidebar-footer .github-link{padding:0 14px;color:var(--text-faint);font-size:12px}.sidebar-footer .github-link:hover{color:var(--text-soft)}.icon-button{display:grid;place-items:center;width:34px;height:34px;padding:0;color:var(--text-soft);background:transparent;border:1px solid transparent;border-radius:9px;cursor:pointer}.icon-button:hover{background:var(--surface-soft);border-color:var(--border)}.app-content{min-height:100vh;margin-left:272px}.mobile-header{display:none}.home-page{max-width:1240px;margin:0 auto;padding:64px 6vw 38px}.hero{position:relative;display:grid;grid-template-columns:1.3fr .7fr;min-height:430px;overflow:hidden;background:var(--surface);border:1px solid var(--border);border-radius:22px;box-shadow:var(--shadow)}.hero-copy{z-index:2;align-self:center;max-width:680px;padding:62px}.eyebrow{color:var(--accent);font-size:10px;font-weight:750;letter-spacing:.17em}.hero h1{max-width:660px;margin:18px 0;font-size:clamp(38px,5vw,66px);line-height:1.04;letter-spacing:-.045em}.hero p{max-width:570px;margin:0;color:var(--text-soft);font-size:17px;line-height:1.8}.hero-actions{display:flex;gap:12px;margin-top:32px}.primary-action,.secondary-action{display:inline-flex;align-items:center;justify-content:center;min-height:42px;padding:0 18px;border-radius:var(--radius);font-size:13px;font-weight:650}.primary-action{color:#fff;background:var(--accent)}.secondary-action{color:var(--text);background:var(--surface-soft);border:1px solid var(--border)}.hero-visual{position:relative;overflow:hidden;background:#102833}.visual-grid{position:absolute;inset:0;opacity:.25;background-image:linear-gradient(rgba(98,203,225,.3) 1px,transparent 1px),linear-gradient(90deg,rgba(98,203,225,.3) 1px,transparent 1px);background-size:32px 32px;transform:perspective(500px) rotateY(-15deg) scale(1.3)}.core{position:absolute;top:50%;left:50%;display:grid;place-items:center;width:84px;height:84px;transform:translate(-50%,-50%);color:#dff9ff;border:1px solid rgba(134,225,244,.6);border-radius:25px;background:#175968b3;box-shadow:0 0 60px #45cae559;font-size:32px;font-weight:800}.orbit{position:absolute;top:50%;left:50%;border:1px solid rgba(116,216,236,.3);border-radius:50%;transform:translate(-50%,-50%) rotate(-20deg)}.orbit-one{width:240px;height:130px}.orbit-two{width:360px;height:210px;transform:translate(-50%,-50%) rotate(35deg)}.portal-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:18px}.portal-card{position:relative;min-height:220px;padding:28px;overflow:hidden;background:var(--surface);border:1px solid var(--border);border-radius:16px;transition:.2s ease}.portal-card:hover{transform:translateY(-3px);border-color:var(--accent);box-shadow:var(--shadow)}.portal-card:after{content:"";position:absolute;right:-30px;bottom:-45px;width:130px;height:130px;border:26px solid var(--accent-soft);border-radius:50%}.portal-index{color:var(--text-faint);font:11px/1 ui-monospace,monospace}.portal-card h2{margin:34px 0 10px;font-size:20px}.portal-card p{max-width:270px;color:var(--text-soft);font-size:13px;line-height:1.65}.portal-link{position:absolute;bottom:26px;color:var(--accent-dark);font-size:12px;font-weight:700}.portal-link b{margin-left:7px}.status-strip{display:flex;justify-content:space-between;margin-top:18px;padding:14px 18px;color:var(--text-faint);border-top:1px solid var(--border);font-size:11px}.status-dot{display:inline-block;width:7px;height:7px;margin-right:8px;background:#16a085;border-radius:50%}.home-credit{margin:14px 2px 0;color:var(--text-faint);font-size:12px;line-height:1.55}.home-credit a{color:var(--accent-dark);font-weight:650}.training-layout{display:grid;grid-template-columns:minmax(0,1fr) clamp(340px,32%,460px);min-height:100vh}.form-canvas{padding:50px clamp(28px,5vw,72px);background:var(--bg)}.section-heading{margin-bottom:28px}.section-heading>span{color:var(--accent);font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}.section-heading h1{margin:10px 0;font-size:30px}.section-heading p{max-width:700px;color:var(--text-soft);line-height:1.7}.form-skeleton{margin-bottom:16px;padding:22px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg)}.skeleton-title{margin-bottom:18px;padding-bottom:12px;border-bottom:1px solid var(--border);font-size:14px;font-weight:700}.skeleton-row{display:grid;grid-template-columns:130px 1fr;gap:18px;margin:14px 0}.skeleton-row span,.skeleton-row b{height:12px;border-radius:6px;background:var(--surface-inset)}.skeleton-row b{height:38px}.control-panel{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;padding:38px 28px 28px;background:var(--surface);border-left:1px solid var(--border)}.panel-copy h2{margin:12px 0 8px;font-size:26px}.panel-copy p{color:var(--text-soft);font-size:13px;line-height:1.65}.panel-copy code{color:var(--accent)}.preview-panel{flex:1;min-height:180px;margin:26px 0 18px;overflow:hidden;border:1px solid var(--border);border-radius:12px}.preview-panel header{display:flex;align-items:center;gap:8px;padding:13px 16px;border-bottom:1px solid var(--border);font-size:12px;font-weight:700}.preview-panel pre{height:100%;margin:0;padding:18px;color:var(--text);background:var(--surface-inset);font:12px/1.7 ui-monospace,monospace}.disabled-action{min-height:42px;color:var(--text-faint);background:var(--surface-inset);border:1px solid var(--border);border-radius:10px}.training-layout{transition:grid-template-columns .25s ease}.training-layout.preview-docked{grid-template-columns:minmax(0,1fr) 76px}.control-panel.collapsed{padding:16px 8px 18px;background:var(--surface);border-left:1px solid var(--border)}.training-layout.bare .control-panel.collapsed{padding:16px 8px 18px}.panel-full{display:flex;flex:1;min-height:0;flex-direction:column}.panel-rail,.control-panel.collapsed .panel-full{display:none}.control-panel.collapsed .panel-rail{display:flex;flex:1;min-height:0;flex-direction:column;align-items:center;gap:12px}.rail-handle{display:flex;flex-direction:column;align-items:center;gap:8px;width:60px;min-height:200px;padding:12px 6px;color:var(--text-soft);background:var(--surface-soft);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;font-size:13px;font-weight:700;box-shadow:var(--shadow)}.rail-handle:hover{color:var(--accent-dark);border-color:#2563eb59;background:#fff}.rail-label{display:block;writing-mode:horizontal-tb;letter-spacing:0;font-size:13px;font-weight:700;line-height:1.2;text-align:center;white-space:pre-line}.rail-handle b{display:inline-flex;align-items:center;justify-content:center;min-width:28px;min-height:22px;padding:0 6px;color:var(--accent-dark);background:var(--accent-soft);border-radius:999px;font-size:11px;font-weight:700}.rail-alert{width:8px;height:8px;border-radius:50%;background:#d97706}.rail-alert.error{background:#dc2626}.rail-submit{display:inline-flex;align-items:center;justify-content:center;margin-top:auto;width:60px;min-height:76px;padding:10px 6px;border:0;border-radius:var(--radius);cursor:pointer;writing-mode:horizontal-tb;letter-spacing:0;font-size:13px;font-weight:700;line-height:1.25;text-align:center;white-space:pre-line;box-shadow:0 6px 16px #2563eb38}.rail-submit:disabled{opacity:.5;cursor:not-allowed;box-shadow:none}.rail-arrow{font-size:14px;line-height:1;color:var(--accent)}.form-canvas.with-schema-toc{padding-left:0;padding-top:0}.schema-form-shell{display:grid;grid-template-columns:minmax(0,1fr);align-items:stretch;min-height:100%}.schema-form-shell.has-toc{position:relative;grid-template-columns:6px minmax(0,1fr);gap:0;min-height:100vh;transition:grid-template-columns .18s ease}.schema-form-shell.has-toc:has(.schema-toc.open){grid-template-columns:188px minmax(0,1fr)}.schema-toc{position:sticky;top:0;z-index:12;align-self:start;width:100%;height:100vh;max-height:100vh;overflow:visible}.schema-toc-seam{position:absolute;inset:0;z-index:2;display:grid;place-items:start center;width:6px;padding:14px 0 0;border:0;background:linear-gradient(180deg,#2563eb8c,#2563eb2e 42%,#2563eb0f);cursor:pointer}.schema-toc.open .schema-toc-seam{opacity:0;pointer-events:none;background:transparent}.schema-toc-seam-icon{margin-left:1px;color:#fff;filter:drop-shadow(0 0 2px rgba(37,99,235,.65));transition:opacity .15s ease;opacity:.9}.schema-toc-seam:hover{background:linear-gradient(180deg,#2563ebc7,#2563eb47 42%,#2563eb1a)}.schema-toc-panel{position:relative;z-index:3;display:none;flex-direction:column;width:100%;height:100vh;max-height:100vh;color:var(--text);background:var(--surface);border-right:1px solid var(--border)}.schema-toc.open .schema-toc-panel{display:flex}.schema-toc-head{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:52px;padding:14px 12px 10px;border-bottom:1px solid var(--border)}.schema-toc-caption{margin:0;color:var(--text);font-size:12px;font-weight:750;letter-spacing:.04em}.schema-toc-toggle.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;min-width:28px;min-height:28px;padding:0;color:var(--text-soft);background:var(--surface-soft);border:1px solid var(--border);border-radius:7px;cursor:pointer}.schema-toc-toggle.icon-btn:hover{color:var(--accent-dark);border-color:var(--accent)}.schema-toc-list{display:flex;flex:1;flex-direction:column;gap:2px;padding:10px 8px 16px;overflow:auto;overscroll-behavior:contain;scrollbar-width:thin}.schema-toc-tab{display:grid;grid-template-columns:3px minmax(0,1fr);align-items:center;gap:8px;width:100%;min-height:36px;padding:8px 10px;color:var(--text-soft);background:transparent;border:0;border-radius:9px;text-align:left;font-size:12px;font-weight:600;line-height:1.35;cursor:pointer}.schema-toc-tab i{display:block;height:14px;border-radius:99px;background:transparent}.schema-toc-tab span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.schema-toc-tab:hover{color:var(--text);background:var(--surface-soft)}.schema-toc-tab.active{color:var(--accent-dark);background:var(--accent-soft)}.schema-toc-tab.active i{background:var(--accent)}.schema-form-binder{min-width:0}.form-canvas.with-schema-toc .schema-form-binder{padding:42px clamp(28px,5vw,56px) 40px 16px;background:var(--bg)}@media(max-width:900px){.form-canvas.with-schema-toc{padding-left:clamp(28px,5vw,72px);padding-top:50px}.schema-form-shell.has-toc{grid-template-columns:1fr}.schema-toc{display:none}.form-canvas.with-schema-toc .schema-form-binder{padding:0}}@media(max-width:900px){.training-layout.preview-docked{grid-template-columns:1fr}.control-panel.collapsed{padding:38px 28px 28px}.training-layout.bare .control-panel.collapsed{padding:24px}.control-panel.collapsed .panel-rail{display:none}.control-panel.collapsed .panel-full{display:flex}}.migration-page{max-width:780px;margin:0 auto;padding:12vh 40px}.migration-page h1{margin:15px 0;font-size:clamp(36px,6vw,62px);letter-spacing:-.045em}.migration-page>p{max-width:650px;color:var(--text-soft);font-size:17px;line-height:1.8}.migration-note{display:grid;gap:8px;margin:32px 0;padding:20px;background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:10px}.migration-note span{color:var(--text-soft);line-height:1.6}.integration-page{height:100vh;display:flex;flex-direction:column;padding:28px}.integration-page>header{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}.integration-page h1{margin:5px 0 0;font-size:25px}.integration-page header a{color:var(--accent);font-size:12px;font-weight:700}.integration-page iframe{flex:1;width:100%;background:#fff;border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow)}.sidebar-mask{display:none}.tasks-page{max-width:1120px;margin:0 auto;padding:52px clamp(24px,5vw,68px)}.tasks-header{display:flex;align-items:flex-end;justify-content:space-between;gap:24px}.tasks-header h1{margin:10px 0 6px;font-size:36px;letter-spacing:-.04em}.tasks-header p{margin:0;color:var(--text-soft)}.refresh-button{display:flex;align-items:center;gap:8px;padding:10px 14px;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:10px;cursor:pointer}.refresh-button:disabled{opacity:.55}.task-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:30px 0 18px}.task-summary div{display:flex;align-items:baseline;gap:10px;padding:18px 20px;background:var(--surface);border:1px solid var(--border);border-radius:12px}.task-summary strong{font-size:24px}.task-summary span{color:var(--text-faint);font-size:11px;text-transform:uppercase;letter-spacing:.08em}.task-empty,.task-error{display:grid;place-items:center;gap:9px;min-height:260px;padding:30px;text-align:center;color:var(--text-soft);background:var(--surface);border:1px solid var(--border);border-radius:14px}.task-empty strong,.task-error strong{color:var(--text);font-size:18px}.task-error{border-left:3px solid #dc2626}.task-error button{padding:8px 15px;color:#fff;background:#b42318;border:0;border-radius:8px;cursor:pointer}.task-list{display:grid;gap:10px}.task-card{display:grid;grid-template-columns:minmax(0,1fr) 90px auto;align-items:center;gap:22px;padding:20px;background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--text-faint);border-radius:12px}.task-card[data-status=running]{border-left-color:var(--accent)}.task-card[data-status=finished]{border-left-color:#059669}.task-card[data-status=failed]{border-left-color:#dc2626}.task-card[data-status=terminated]{border-left-color:#d97706}.task-title-row{display:flex;align-items:center;gap:10px}.task-title-row h2{margin:0;font-size:15px}.task-status{padding:4px 7px;color:var(--accent-dark);background:var(--accent-soft);border-radius:6px;font-size:10px;font-weight:750}.task-main code{display:block;margin:8px 0 5px;color:var(--text-faint);font-size:10px}.task-main p{overflow:hidden;margin:0;color:var(--text-soft);font-size:12px;text-overflow:ellipsis;white-space:nowrap}.task-meta{display:grid;gap:4px;text-align:center}.task-meta span{color:var(--text-faint);font-size:10px}.task-meta strong{font-size:14px}.task-actions{display:flex;align-items:center;gap:8px}.task-actions a,.task-actions button{padding:8px 11px;border-radius:8px;font-size:11px;font-weight:700}.task-actions a{color:var(--accent-dark);background:var(--accent-soft)}.task-actions button{color:#b42318;background:transparent;border:1px solid rgba(220,38,38,.3);cursor:pointer}.task-actions button:disabled{opacity:.5}@media(max-width:900px){.mobile-header{position:sticky;top:0;z-index:15;height:58px;display:flex;align-items:center;justify-content:space-between;padding:0 14px;background:var(--surface);border-bottom:1px solid var(--border)}.mobile-brand{font-size:14px;font-weight:750}.sidebar{transform:translate(-100%);transition:transform .22s ease}.sidebar.is-open{transform:translate(0)}.sidebar-mask{position:fixed;inset:0;z-index:19;display:block;width:100%;height:100%;background:#080f1873;border:0}.app-content{margin-left:0}.home-page{padding:22px 16px 30px}.hero{grid-template-columns:1fr}.hero-copy{padding:38px 28px}.hero-visual{min-height:220px}.portal-grid{grid-template-columns:1fr}.status-strip{flex-direction:column;gap:8px}.training-layout{grid-template-columns:1fr}.control-panel{position:static;height:auto;min-height:500px;border-top:1px solid var(--border);border-left:0}.integration-page{height:calc(100vh - 58px);padding:14px}.task-card{grid-template-columns:1fr}.task-meta{text-align:left}.task-actions{justify-content:flex-start}}@media(max-width:520px){.hero h1{font-size:39px}.hero-actions{align-items:stretch;flex-direction:column}.form-canvas{padding:30px 18px}.skeleton-row{grid-template-columns:1fr;gap:7px}.migration-page{padding:10vh 22px}.tasks-page{padding:30px 16px}.tasks-header{align-items:flex-start;flex-direction:column}.task-summary{grid-template-columns:1fr}.task-actions{align-items:stretch;flex-direction:column}.task-actions a,.task-actions button{text-align:center}}.section-heading p,.panel-copy p,.hero p,.portal-card p{line-height:1.55}.task-main p,.task-actions a,.task-actions button,.task-status,.task-main code,.task-meta span{font-size:12px}.simple-page{max-width:860px;margin:0 auto;padding:60px clamp(24px,6vw,80px)}.simple-page header h1{margin:10px 0 8px;font-size:38px;letter-spacing:-.04em}.simple-page header p{color:var(--text-soft);line-height:1.7}.settings-card{display:grid;gap:10px;margin-top:30px;padding:26px;background:var(--surface);border:1px solid var(--border);border-radius:14px}.settings-card label,.argument-heading strong{font-size:12px;font-weight:750}.settings-card small{color:var(--text-faint);line-height:1.5}.settings-card input,.settings-card select{width:100%;min-height:40px;padding:0 12px;color:var(--text);background:var(--surface-soft);border:1px solid var(--border);border-radius:9px;outline:none}.settings-card input:focus,.settings-card select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.form-actions{display:flex;gap:10px;margin-top:16px}.form-actions button{border:0;cursor:pointer}.form-actions .secondary-action{border:1px solid var(--border)}.argument-heading{display:flex;align-items:center;justify-content:space-between;margin-top:18px}.argument-heading button{padding:6px 10px;color:var(--accent-dark);background:var(--accent-soft);border:0;border-radius:7px;cursor:pointer}.argument-row{display:grid;grid-template-columns:1fr 1fr 34px;gap:8px}.argument-row button{color:#b42318;background:transparent;border:1px solid var(--border);border-radius:8px;cursor:pointer}.tagger-page{display:grid;grid-template-columns:minmax(0,1fr) 360px;min-height:100vh}.tagger-form{padding:50px clamp(24px,5vw,70px)}.tagger-form header h1{margin:10px 0 8px;font-size:36px}.tagger-form header p{color:var(--text-soft)}.tagger-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:30px;padding:24px;background:var(--surface);border:1px solid var(--border);border-radius:14px}.tagger-grid label{display:grid;gap:7px;color:var(--text-soft);font-size:12px}.tagger-grid input,.tagger-grid select{min-height:39px;padding:0 11px;color:var(--text);background:var(--surface-soft);border:1px solid var(--border);border-radius:8px}.check-row{display:flex;flex-wrap:wrap;gap:12px 22px;margin-top:15px;padding:18px 22px;background:var(--surface);border:1px solid var(--border);border-radius:12px}.check-row label{display:flex;align-items:center;gap:7px;color:var(--text-soft);font-size:12px}.tagger-status{position:sticky;top:0;height:100vh;padding:46px 28px;background:var(--surface);border-left:1px solid var(--border)}.tagger-status h2{min-height:52px;margin:16px 0 8px;font-size:19px;line-height:1.4}.tagger-status>p{color:#dc2626;font-size:12px}.meter{margin-top:28px}.meter header{display:flex;justify-content:space-between;margin-bottom:9px;color:var(--text-soft);font-size:11px}.meter>div{height:7px;overflow:hidden;background:var(--surface-inset);border-radius:99px}.meter i{display:block;height:100%;background:var(--accent);border-radius:inherit;transition:width .25s ease}.meter small{display:block;min-height:17px;margin-top:7px;overflow:hidden;color:var(--text-faint);font-size:10px;text-overflow:ellipsis;white-space:nowrap}.tagger-actions{position:absolute;right:28px;bottom:32px;left:28px;display:grid;gap:9px}.tagger-actions button{border:1px solid var(--border);cursor:pointer}.danger-action{min-height:42px;color:#b42318;background:#dc262612;border-color:#dc262640!important;border-radius:10px;font-weight:700}@media(max-width:520px){.simple-page{padding:34px 18px}.argument-row{grid-template-columns:1fr 1fr}.argument-row button{grid-column:1 / -1;min-height:34px}}@media(max-width:900px){.tagger-page{grid-template-columns:1fr}.tagger-status{position:relative;height:auto;min-height:480px;border-top:1px solid var(--border);border-left:0}}@media(max-width:600px){.tagger-form{padding:30px 16px}.tagger-grid{grid-template-columns:1fr;padding:18px}}.schema-form{display:grid;gap:16px}.schema-section{scroll-margin-top:24px;overflow:hidden;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg)}.schema-section>header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border)}.schema-section h2{margin:0;font-size:17px}.schema-section>header span{color:var(--text-faint);font-size:10px}.schema-fields{display:grid;grid-template-columns:minmax(0,1fr);gap:20px;padding:20px}.schema-field{display:flex;min-width:0;flex-direction:column;gap:7px}.field-label{display:flex;align-items:center;gap:8px}.field-label code{overflow:hidden;color:var(--text);font:650 16px/1.4 Inter,Segoe UI,Microsoft YaHei,sans-serif;letter-spacing:-.01em;text-overflow:ellipsis}.field-label b{padding:2px 5px;color:#b42318;background:#dc262614;border-radius:4px;font-size:9px}.field-description{color:var(--text-soft);font-size:15px;line-height:1.55}.schema-field .el-input-number,.schema-field .el-select{width:100%}.filepicker-control{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:6px}.field-text,.field-control{display:contents}.schema-field--compact{flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 16px}.schema-field--compact .field-text{display:flex;min-width:0;flex:1;flex-direction:column;gap:6px}.schema-field--compact .field-control{display:flex;flex:0 0 auto;align-items:center}.schema-field--compact .el-input-number,.schema-field--compact .el-select,.schema-field--compact .el-input{width:200px}.schema-field--compact .field-error{flex-basis:100%}@media(max-width:900px){.schema-field--compact{flex-direction:column;align-items:stretch}.schema-field--compact .el-input-number,.schema-field--compact .el-select,.schema-field--compact .el-input{width:100%}}.field-error{color:#dc2626;font-size:10px}.schema-field.has-error :is(.el-input__wrapper,.el-textarea__inner,.el-select__wrapper){box-shadow:0 0 0 1px #dc2626 inset}.picker-list{display:grid;max-height:55vh;gap:7px;overflow:auto}.picker-list button{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 12px;padding:12px;text-align:left;color:var(--text);background:var(--surface-soft);border:1px solid var(--border);border-radius:8px;cursor:pointer}.picker-list button:hover{border-color:var(--accent)}.picker-list span{grid-column:1/-1;overflow:hidden;color:var(--text-faint);font-size:10px;text-overflow:ellipsis;white-space:nowrap}.picker-list small{color:var(--text-faint)}.schema-state{display:grid;gap:8px;min-height:180px;place-content:center;text-align:center;color:var(--text-soft);background:var(--surface);border:1px solid var(--border);border-radius:13px}.schema-state strong{color:var(--text)}.schema-state button{justify-self:center;padding:8px 14px;color:#fff;background:var(--accent);border:0;border-radius:8px}.schema-error{border-left:3px solid #dc2626}.schema-training-layout .preview-panel{min-height:0}.schema-training-layout .preview-panel header{display:flex;justify-content:space-between}.schema-training-layout .preview-panel pre{overflow:auto;white-space:pre-wrap}.schema-validate{width:100%;margin-bottom:9px;cursor:pointer}.schema-training-layout .disabled-action{min-height:42px}@media(max-width:720px){.filepicker-control{grid-template-columns:minmax(0,1fr) auto}.filepicker-control .el-button:last-child{grid-column:1/-1;margin-left:0}}.panel-actions{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:18px}.panel-actions button{display:inline-flex;align-items:center;justify-content:center;min-height:34px;padding:0 8px;color:var(--text-soft);background:var(--surface);border:1px solid var(--border);border-radius:8px;font-size:11px;cursor:pointer}.panel-actions button:hover{color:var(--accent-dark);border-color:var(--accent)}.param-diagnostics{max-height:110px;overflow:auto;margin-top:12px;padding:10px 12px;background:#fff8e8;border:1px solid #efd59c;border-radius:9px}.param-diagnostics p{margin:3px 0;color:#8a5a08;font-size:10px;line-height:1.4}.param-diagnostics p.error{color:#b42318}.started-task{display:grid;gap:6px;margin-top:12px;padding:12px;color:var(--text-soft);background:var(--accent-soft);border:1px solid var(--accent);border-radius:9px;font-size:11px}.started-task code{overflow:hidden;color:var(--text);text-overflow:ellipsis}.started-task a{color:var(--accent-dark);font-weight:700}.train-submit{width:100%;border:0;cursor:pointer}.train-submit:disabled{opacity:.5;cursor:not-allowed}.submit-row{display:flex;gap:8px}.submit-row .train-submit,.submit-row .stop-training{flex:1;min-height:42px;margin:0}.submit-row .stop-training{color:#fff;background:#dc2626;border-color:#dc2626!important;border-radius:10px;font-weight:700}.submit-row .stop-training:hover:not(:disabled){background:#b91c1c;border-color:#b91c1c!important}.stop-training{padding:0 14px;border:1px solid;cursor:pointer}.stop-training:disabled{opacity:.5;cursor:not-allowed}.rail-stop{display:inline-flex;align-items:center;justify-content:center;width:60px;min-height:68px;padding:10px 6px;color:#b42318;background:#dc262614;border:1px solid rgba(220,38,38,.28);border-radius:var(--radius);cursor:pointer;writing-mode:horizontal-tb;letter-spacing:0;font-size:13px;font-weight:700;line-height:1.25;text-align:center;white-space:pre-line}.rail-stop:hover:not(:disabled){color:#fff;background:#dc2626;border-color:#dc2626}.rail-stop:disabled{opacity:.45;cursor:not-allowed}.config-list{display:grid;gap:8px;min-height:80px}.config-list article{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:8px;padding:12px;background:var(--surface-soft);border:1px solid var(--border);border-radius:9px}.config-list article>div{display:grid;gap:4px}.config-list span{color:var(--text-faint);font-size:10px;line-height:1.4}.config-list button{padding:6px 10px;color:var(--accent-dark);background:var(--accent-soft);border:0;border-radius:6px;cursor:pointer}.config-list button.danger{color:#b42318;background:#dc262614}.dataset-page{display:grid;grid-template-columns:260px minmax(360px,1fr) 330px;height:100vh}.dataset-side,.caption-panel{overflow:auto;padding:28px 20px;background:var(--surface)}.dataset-side{border-right:1px solid var(--border)}.dataset-side h1{margin:9px 0 24px;font-size:25px}.dataset-side>label,.batch-box{display:grid;gap:7px;margin-bottom:16px;color:var(--text-soft);font-size:11px}.dataset-side input,.dataset-side select,.batch-box input,.caption-panel textarea{width:100%;padding:9px;color:var(--text);background:var(--surface-soft);border:1px solid var(--border);border-radius:8px}.dataset-side>.primary-action{width:100%;margin-bottom:24px;border:0}.batch-box{margin-top:26px;padding-top:20px;border-top:1px solid var(--border)}.batch-box button{min-height:36px;color:var(--accent-dark);background:var(--accent-soft);border:0;border-radius:8px;cursor:pointer}.dataset-gallery{display:flex;min-width:0;flex-direction:column;overflow:auto;padding:24px}.dataset-gallery>header{display:flex;justify-content:space-between;margin-bottom:16px}.dataset-gallery header button{margin-left:7px;padding:6px 10px;color:var(--text-soft);background:var(--surface);border:1px solid var(--border);border-radius:7px}.image-grid{display:grid;flex:1;align-content:start;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}.image-grid button{overflow:hidden;padding:0;text-align:left;background:var(--surface);border:2px solid transparent;border-radius:10px;cursor:pointer}.image-grid button.active{border-color:var(--accent)}.image-grid img{display:block;width:100%;aspect-ratio:1;object-fit:contain;background:var(--surface-inset)}.image-grid span{display:block;overflow:hidden;padding:9px;font-size:10px;text-overflow:ellipsis;white-space:nowrap}.caption-panel{border-left:1px solid var(--border)}.caption-panel>div{display:grid;gap:13px}.caption-panel img{width:100%;max-height:38vh;object-fit:contain;background:var(--surface-inset);border-radius:10px}.caption-panel strong{overflow-wrap:anywhere;font-size:11px}.caption-panel textarea{resize:vertical;line-height:1.6}.caption-panel .primary-action{border:0}.caption-panel>p{color:var(--text-soft);font-size:12px}@media(max-width:1100px){.dataset-page{grid-template-columns:230px 1fr}.caption-panel{grid-column:1/-1;border-top:1px solid var(--border);border-left:0}.caption-panel>div{grid-template-columns:180px 1fr}.caption-panel img{grid-row:1/4}}@media(max-width:700px){.dataset-page{display:block;height:auto}.dataset-side,.dataset-gallery,.caption-panel{overflow:visible}.caption-panel>div{display:grid;grid-template-columns:1fr}.caption-panel img{grid-row:auto}}.replace-row{display:grid;grid-template-columns:1fr 1fr;gap:6px}.path-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px}.path-row button{padding:0 12px;color:var(--accent-dark);background:var(--accent-soft);border:0;border-radius:8px;cursor:pointer}.path-row button:disabled{opacity:.5;cursor:not-allowed}.dataset-empty{display:grid;flex:1;place-content:center;gap:8px;text-align:center;color:var(--text-soft)}.dataset-empty strong{color:var(--text);font-size:14px}.dataset-empty span{max-width:360px;font-size:12px;line-height:1.7}.batch-box>label{display:flex;align-items:center;gap:7px}.batch-box>label input{width:auto}.quick-tag-box{display:grid;gap:8px;padding-top:18px;border-top:1px solid var(--border);font-size:11px}.quick-tag-box>div,.caption-tags{display:flex;flex-wrap:wrap;gap:5px;max-height:170px;overflow:auto}.quick-tag-box button,.caption-tags button{padding:4px 7px;color:var(--accent-dark);background:var(--accent-soft);border:0;border-radius:6px;font-size:10px;cursor:pointer}.quick-tag-box button.suggested{color:var(--text-soft);background:var(--surface-inset)}.quick-tag-box>span{display:grid;grid-template-columns:1fr auto;gap:5px}.quick-tag-box>span button{padding:0 10px}.quick-tag-box>small{color:var(--text-faint)}.image-grid button{position:relative}.image-grid button.checked{box-shadow:0 0 0 2px var(--accent-soft)}.image-grid button>i{position:absolute;top:7px;right:7px;z-index:1;display:grid;width:21px;height:21px;place-items:center;color:#fff;background:var(--accent);border-radius:50%;font-size:11px;font-style:normal}.dataset-pager{display:flex;align-items:center;justify-content:center;gap:7px;margin-top:auto;padding:22px 0}.dataset-pager button,.dataset-pager select{padding:6px 9px;color:var(--text-soft);background:var(--surface);border:1px solid var(--border);border-radius:7px}.dataset-pager button:disabled{opacity:.4}.caption-tags{max-height:110px}.dataset-history{display:grid;gap:9px}.dataset-history article{padding:12px;background:var(--surface-soft);border:1px solid var(--border);border-radius:9px}.dataset-history article>header{display:flex;justify-content:space-between}.dataset-history article>header span{color:var(--text-faint);font-size:10px}.dataset-history summary{margin-top:8px;color:var(--accent-dark);font-size:11px;cursor:pointer}.dataset-history details>div{display:grid;grid-template-columns:1fr 1fr;gap:5px 10px;margin-top:9px;padding-top:9px;border-top:1px solid var(--border);font-size:10px}.dataset-history code{grid-column:1/-1;overflow-wrap:anywhere}.dataset-history del{color:#b42318;text-decoration:none}.dataset-history ins{color:#087f5b;text-decoration:none}.schema-field,.training-toolbar button,.training-toolbar label,.started-task,.config-list,.dataset-side>label,.batch-box,.quick-tag-box{font-size:13px}.field-label code{font-size:16px}.field-description{font-size:15px}.schema-section>header span,.field-error,.config-list span,.picker-list span,.picker-list small{font-size:12px}.field-description{min-height:0;line-height:1.5}.param-diagnostics p,.image-grid span,.dataset-history article>header span,.dataset-history summary,.dataset-history details>div{font-size:12px}.caption-panel strong,.quick-tag-box button,.caption-tags button{font-size:12px}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.workbench-page{min-height:100vh;padding:36px clamp(24px,4vw,56px);background:var(--bg)}.workbench-header{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:22px}.workbench-header h1{margin:0 0 6px;font-size:28px;letter-spacing:-.02em}.workbench-header p{margin:0;color:var(--text-soft);font-size:13px}.ghost-button{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:0 14px;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:9px;font-size:12px;font-weight:600;cursor:pointer;transition:.15s ease}.ghost-button:hover{color:var(--accent);border-color:var(--accent)}.workbench-selector{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:22px}.selector-card{padding:18px 20px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow)}.selector-card h2{margin:0 0 12px;font-size:14px}.selector-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.selector-hint{grid-column:1/-1;margin:10px 0 0;color:var(--text-faint);font-size:11px}.selector-grid label{display:grid;gap:7px;color:var(--text-soft);font-size:12px}.selector-grid select{min-height:38px;padding:0 11px;color:var(--text);background:var(--surface-soft);border:1px solid var(--border);border-radius:8px}.selector-grid select:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 3px var(--accent-soft)}.segmented{display:flex;overflow:hidden;gap:3px;padding:3px;background:var(--surface-inset);border:1px solid transparent;border-radius:999px}.segmented button{flex:1;min-height:38px;padding:0 12px;color:var(--text-soft);background:transparent;border:0;border-radius:999px;font-size:12px;font-weight:600;cursor:pointer;transition:.15s ease}.segmented button.active{color:var(--accent-dark);background:var(--surface);box-shadow:0 1px 3px #10182814}.segmented button:disabled{color:var(--text-faint);cursor:not-allowed;opacity:.55}.unsupported-hint{display:grid;min-height:200px;place-content:center;text-align:center;color:var(--text-soft);background:var(--surface);border:1px dashed var(--border);border-radius:var(--radius-lg)}.preview-actions{display:inline-flex;gap:6px;margin-left:auto}.preview-actions button{padding:4px 9px;color:var(--text-soft);background:var(--surface-soft);border:1px solid var(--border);border-radius:6px;font-size:11px;cursor:pointer}.preview-actions button:hover{color:var(--accent);border-color:var(--accent)}@media(max-width:900px){.workbench-selector{grid-template-columns:1fr}.workbench-header{flex-direction:column}}.dataset-section{min-height:100vh;background:var(--bg)}.dataset-section-header{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:18px;padding:20px clamp(20px,3vw,40px);background:var(--surface);border-bottom:1px solid var(--border)}.dataset-section-header h1{margin:0;font-size:22px;letter-spacing:-.01em}.dataset-switch{min-width:260px;justify-self:center}.segmented a{flex:1;display:inline-flex;align-items:center;justify-content:center;min-height:38px;padding:0 12px;border-radius:999px;color:var(--text-soft);font-size:12px;font-weight:600;transition:.15s ease}.segmented a.active{color:var(--accent-dark);background:var(--surface);box-shadow:0 1px 3px #10182814}.caption-editor{display:grid;gap:4px}.caption-count{justify-self:end;color:var(--text-faint);font-size:11px}.caption-chips{display:flex;flex-wrap:wrap;gap:6px}.chip{display:inline-flex;align-items:center;gap:5px;padding:4px 6px 4px 10px;color:var(--accent-dark);background:var(--accent-soft);border-radius:7px;font-size:12px}.chip button{display:grid;width:16px;height:16px;place-items:center;padding:0;color:inherit;background:transparent;border:0;border-radius:50%;font-size:12px;cursor:pointer}.chip button:hover{background:#2563eb2e}.chip-add{display:inline-flex;gap:5px}.chip-add input{width:90px;min-height:26px;padding:0 8px;color:var(--text);background:var(--surface-soft);border:1px solid var(--border);border-radius:7px;font-size:12px}.chip-add button{padding:0 10px;color:var(--accent-dark);background:var(--accent-soft);border:0;border-radius:7px;font-size:12px;cursor:pointer}@media(max-width:700px){.dataset-section-header{grid-template-columns:1fr;justify-items:stretch}.dataset-switch{min-width:0;justify-self:stretch}}.tasks-board{min-height:100vh;padding:28px clamp(20px,3vw,44px);background:var(--bg)}.tasks-board-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}.tasks-board-header h1{margin:0;font-size:24px;letter-spacing:-.01em}.tasks-columns{display:grid;grid-template-columns:300px minmax(0,1fr);gap:16px;align-items:start}.tasks-list-panel{padding:14px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow)}.tasks-tabs{display:flex;gap:6px;margin-bottom:12px}.tasks-tabs button{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:34px;color:var(--text-soft);background:transparent;border:0;border-radius:8px;font-size:12px;font-weight:600;cursor:pointer}.tasks-tabs button.active{color:var(--accent);background:var(--accent-soft)}.tasks-tabs b{padding:1px 7px;color:var(--text-faint);background:var(--surface-inset);border-radius:99px;font-size:11px;font-weight:600}.tasks-tabs button.active b{color:var(--accent);background:var(--surface)}.tasks-tab-empty{padding:26px 0;text-align:center;color:var(--text-faint);font-size:12px}.task-row{display:grid;gap:6px;padding:12px;border:1px solid transparent;border-radius:10px;cursor:pointer;transition:.15s ease}.task-row:hover{background:var(--surface-soft)}.task-row.selected{border-color:var(--accent);background:var(--accent-soft)}.task-row h2{margin:0;font-size:13px}.task-row code{overflow:hidden;color:var(--text-faint);font-size:11px;text-overflow:ellipsis;white-space:nowrap}.task-row .task-status{justify-self:start}.task-status{display:inline-block;padding:3px 8px;color:var(--accent-dark);background:var(--accent-soft);border-radius:6px;font-size:11px;font-weight:650}.task-row[data-status=finished] .task-status,.task-detail[data-status=finished] .task-status{color:#047857;background:#0596691a}.task-row[data-status=failed] .task-status,.task-detail[data-status=failed] .task-status{color:var(--danger);background:#dc262614}.task-row[data-status=terminated] .task-status,.task-detail[data-status=terminated] .task-status{color:#b45309;background:#d977061a}.task-detail{padding:22px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow)}.task-detail-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:18px}.task-detail-title{display:flex;align-items:center;gap:10px}.task-detail-title h2{margin:0;font-size:20px}.task-detail .danger-action{padding:0 16px;cursor:pointer}.task-meta-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;margin:0 0 18px;padding:16px;background:var(--surface-soft);border:1px solid var(--border);border-radius:10px}.task-meta-grid dt{color:var(--text-faint);font-size:11px}.task-meta-grid dd{overflow:hidden;margin:4px 0 0;font-size:13px;text-overflow:ellipsis;white-space:nowrap}.task-detail-actions{display:flex;gap:8px}.task-placeholder{display:grid;place-content:center;gap:6px;margin-top:18px;padding:16px;text-align:center;color:var(--text-faint);background:var(--surface-soft);border:1px dashed var(--border);border-radius:9px}.task-placeholder header{color:var(--text-soft);font-size:12px;font-weight:650}.task-placeholder p{margin:0;font-size:12px}.task-preview-strip{min-height:130px}.task-loss-panel{min-height:300px}.task-placeholder.has-data{display:block;place-content:unset;text-align:left}.task-placeholder.has-data header{margin-bottom:10px;text-align:left}.task-log-panel{margin-top:18px;background:var(--surface-soft);border:1px solid var(--border);border-radius:9px}.log-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;cursor:pointer;-webkit-user-select:none;user-select:none}.log-title{display:inline-flex;align-items:center;gap:8px;color:var(--text-soft);font-size:12px;font-weight:650}.log-alert{width:7px;height:7px;border-radius:50%;background:#dc2626}.log-toggle{padding:4px 10px;color:var(--text-soft);background:var(--surface);border:1px solid var(--border);border-radius:7px;font-size:11px;cursor:pointer}.log-toggle:hover{color:var(--accent);border-color:var(--accent)}.log-body{padding:0 16px 14px}.log-toolbar{display:flex;align-items:center;gap:7px;margin-bottom:10px}.log-toolbar button{padding:5px 10px;color:var(--text-soft);background:var(--surface);border:1px solid var(--border);border-radius:7px;font-size:11px;cursor:pointer}.log-toolbar button:hover:not(:disabled){color:var(--accent);border-color:var(--accent)}.log-toolbar button.active{color:var(--accent-dark);background:var(--accent-soft);border-color:var(--accent)}.log-toolbar button:disabled{opacity:.45;cursor:not-allowed}.log-count{margin-left:auto;color:var(--text-faint);font-size:10px}.log-hint{margin:0;padding:14px 0;text-align:center;color:var(--text-faint);font-size:12px}.log-lines{max-height:320px;margin:0;padding:12px 14px;overflow:auto;white-space:pre;color:var(--text);background:var(--surface-inset);border:1px solid var(--border);border-radius:8px;font:11px/1.7 ui-monospace,monospace}.preview-scroll{display:flex;gap:8px;overflow-x:auto}.preview-item{display:grid;flex:0 0 auto;gap:4px}.preview-item a{display:block;overflow:hidden;border:1px solid var(--border);border-radius:8px}.preview-item span{max-width:110px;overflow:hidden;color:var(--text-faint);font-size:10px;text-align:center;text-overflow:ellipsis;white-space:nowrap}.task-progress{margin-bottom:18px}.task-progress-meta{display:flex;align-items:baseline;gap:12px;margin-bottom:6px;color:var(--text-soft);font-size:11px}.task-progress-meta b{margin-left:auto;color:var(--text)}.task-progress-track{height:8px;overflow:hidden;background:var(--surface-inset);border-radius:99px}.task-progress-track i{display:block;height:100%;background:var(--accent);border-radius:inherit;transition:width .4s ease}.preview-scroll img{display:block;height:110px}.loss-chart svg{display:block;width:100%;height:auto;max-height:200px}.loss-chart .axis{stroke:var(--border);stroke-width:1}.loss-chart .tick{fill:var(--text-faint);font-size:10px}.loss-chart .line{fill:none;stroke-width:1.6}.loss-legend{display:flex;flex-wrap:wrap;gap:14px;margin-top:8px;color:var(--text-soft);font-size:11px}.loss-legend i{display:inline-block;width:10px;height:3px;margin-right:6px;vertical-align:middle}.loss-legend b{color:var(--text)}.task-detail-empty{display:grid;min-height:280px;place-content:center;color:var(--text-faint);font-size:13px}@media(max-width:900px){.tasks-columns{grid-template-columns:1fr}}.settings-page{min-height:100vh;padding:36px clamp(24px,4vw,56px);background:var(--bg)}.settings-page-header{margin-bottom:22px}.settings-page-header h1{margin:0 0 6px;font-size:28px;letter-spacing:-.02em}.settings-page-header p{margin:0;color:var(--text-soft);font-size:13px}.settings-body{display:grid;grid-template-columns:220px minmax(0,1fr);gap:18px;align-items:start}.settings-nav{display:grid;gap:4px;padding:12px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow)}.settings-nav-link{display:block;padding:10px 12px;color:var(--text-soft);border-radius:9px;font-size:13px;font-weight:600}.settings-nav-link:hover{color:var(--text);background:var(--surface-soft)}.settings-nav-link.active{color:var(--accent);background:var(--accent-soft)}.settings-content{display:grid;gap:16px;min-width:0}.settings-content .settings-card{margin-top:0}.settings-content .settings-card h2{margin:0 0 14px;font-size:18px}.settings-content .settings-card select{margin-top:6px;width:100%;min-height:40px;padding:0 12px;color:var(--text);background:var(--surface-soft);border:1px solid var(--border);border-radius:9px}.settings-field{display:grid;gap:7px}.settings-field-label{font-size:12px;font-weight:750}.theme-switch{max-width:320px}.settings-preview{padding:18px 20px;border:1px dashed var(--border);border-radius:var(--radius-lg)}.settings-preview>header{margin-bottom:14px;color:var(--text-faint);font-size:12px}.settings-preview-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}.settings-preview-col h3{margin:0 0 10px;font-size:14px}.settings-about-line{margin:0 0 8px}.version-badge{display:inline-block;margin-left:6px;padding:2px 8px;color:var(--accent);background:var(--accent-soft);border-radius:99px;font-size:11px;font-weight:650}.settings-about-desc{margin:0 0 10px;color:var(--text-soft);font-size:13px;line-height:1.6}.settings-release-list{display:grid;gap:8px;margin:0 0 10px;padding:0;list-style:none}.settings-release-list li{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:baseline;font-size:12px}.settings-release-list time{color:var(--text-faint)}.settings-release-list span{color:var(--text-soft)}.settings-more-link{color:var(--accent);font-size:12px;font-weight:600}.settings-content .content-page{padding:0}@media(max-width:900px){.settings-body,.settings-preview-grid{grid-template-columns:1fr}}.settings-content .content-page{max-width:none;margin:0;padding:0}.training-layout.bare{min-height:0}.training-layout.bare .form-canvas{padding:0;background:transparent}.training-layout.bare .control-panel{position:sticky;top:20px;height:auto;max-height:calc(100vh - 40px);overflow:auto;padding:24px;background:transparent;border:0;box-shadow:none}.training-layout.bare .preview-panel{margin-top:0}@media(max-width:900px){.training-layout.bare .control-panel{position:static;max-height:none;min-height:0}}.workbench-selector{grid-template-columns:1fr;margin-bottom:18px}.workbench-fallback{display:grid;gap:16px}.workbench-page .fast-page{min-height:0;gap:24px}.fast-page.bare .fast-intro{align-self:start;padding:0}.fast-page.bare .fast-state{margin-top:0}.fast-page.bare{grid-template-columns:minmax(0,1fr) clamp(320px,32%,460px)}.fast-page.bare .install-console{align-self:start;height:min(560px,60vh);min-height:320px;max-height:calc(100vh - 40px)}.workbench-page .install-console{margin:0}.schema-section,.form-skeleton,.schema-state,.selector-card,.settings-card,.tagger-grid,.check-row,.preview-panel,.unsupported-hint{border-radius:var(--radius-lg)}.primary-action,.secondary-action,.danger-action,.train-submit,.stop-training,.schema-validate,.ghost-button,.refresh-button{border-radius:var(--radius)}.panel-actions button,.config-list button,.preview-actions button,.schema-toc-toggle.icon-btn,.schema-toc-tab,.filepicker-control .el-button,.schema-field .el-button{border-radius:var(--radius-sm)}.schema-field :is(.el-input__wrapper,.el-textarea__inner,.el-select__wrapper,.el-input-number){border-radius:var(--radius-sm)}.schema-field .el-input__wrapper,.schema-field .el-select__wrapper{box-shadow:0 0 0 1px var(--border) inset}.schema-field .el-input__wrapper:hover,.schema-field .el-select__wrapper:hover{box-shadow:0 0 0 1px #2563eb59 inset}.nav-link{border-radius:var(--radius)}.chip,.chip-add input,.chip-add button{border-radius:999px}.task-row,.task-detail,.task-placeholder,.task-summary div{border-radius:var(--radius-lg)}.tasks-tabs,.tasks-tabs button{border-radius:999px}.fast-page{display:grid;grid-template-columns:minmax(380px,.8fr) minmax(460px,1.2fr);min-height:100vh}.fast-main{min-width:0}.fast-intro{align-self:center;padding:40px clamp(30px,6vw,90px) 70px}.fast-intro h1{margin:14px 0 10px;font-size:clamp(42px,6vw,72px);line-height:1;letter-spacing:-.055em}.fast-intro>p{color:var(--text-soft);font-size:16px}.fast-state{display:flex;align-items:center;justify-content:space-between;margin:35px 0;padding:18px;background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:10px}.fast-state span{font-weight:700}.fast-state strong{color:var(--text-faint);font:10px/1 ui-monospace,monospace;text-transform:uppercase}.fast-state[data-state=broken]{border-left-color:#dc2626}.audit-errors{padding:17px;color:#b42318;background:#dc26260f;border-radius:10px}.audit-errors p{margin:8px 0;font-size:11px}.fast-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:24px}.fast-actions button,.fast-actions a{border:1px solid var(--border)}.install-console{display:flex;flex-direction:column;min-width:0;margin:32px;padding:24px;background:#101820;border:1px solid #263746;border-radius:18px;box-shadow:var(--shadow)}.install-console>header{display:flex;justify-content:space-between;color:#b8ddea;font-size:12px}.install-progress{height:7px;margin:15px 0;overflow:hidden;background:#24343f;border-radius:99px}.install-progress i{display:block;height:100%;background:#22a5c2}.install-console pre{flex:1;overflow:auto;margin:0;padding:18px;color:#afc7d1;background:#0b1117;border-radius:10px;font:11px/1.65 ui-monospace,monospace;white-space:pre-wrap}@media(max-width:900px){.fast-page{grid-template-columns:1fr}.install-console{min-height:500px;margin:18px}}.engine-ready-chip{display:inline-flex;align-items:center;gap:7px;margin:-4px 0 14px;padding:0;color:#047857;font-size:12px;font-weight:600;line-height:1}.engine-ready-chip i{width:7px;height:7px;border-radius:50%;background:#10b981;box-shadow:0 0 0 3px #10b9812e}.engine-credit{margin:0 0 14px;color:var(--text-soft);font-size:12px;line-height:1.55}.engine-credit a{color:var(--accent-dark);font-weight:650}.engine-status-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:0 0 16px;padding:12px 14px;background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--text-faint);border-radius:var(--radius)}.engine-status-bar[data-state=ready]{border-left-color:#059669;background:#0596690f}.engine-status-bar[data-state=installing],.engine-status-bar[data-state=auditing]{border-left-color:var(--accent);background:var(--accent-soft)}.engine-status-bar[data-state=broken]{border-left-color:#dc2626;background:#dc26260f}.engine-status-bar[data-state=unknown],.engine-status-bar[data-state=not_installed],.engine-status-bar[data-state=installed_unverified],.engine-status-bar[data-state=disabled],.engine-status-bar[data-state=coming_soon]{border-left-color:#d97706;background:#d9770614}.engine-status-copy{display:grid;gap:2px;min-width:0}.engine-status-copy b{color:var(--text);font-size:13px}.engine-status-copy span{color:var(--text-soft);font-size:12px;line-height:1.45}.engine-status-actions{display:flex;flex-shrink:0;flex-wrap:wrap;gap:8px}.engine-status-actions .ghost-button{min-height:32px;padding:0 12px;text-decoration:none}.engines-settings{display:grid;gap:16px}.engines-lead{margin:0 0 12px;color:var(--text-soft);font-size:13px;line-height:1.5}.engines-policy{margin:0 0 16px;padding:12px 14px;background:var(--surface-soft);border:1px solid var(--border);border-radius:var(--radius)}.engines-policy strong{display:block;margin-bottom:4px;font-size:13px}.engines-policy p{margin:0;color:var(--text-soft);font-size:12px;line-height:1.5}.engines-toggle{display:flex;gap:10px;align-items:flex-start;margin:0;cursor:pointer}.engines-toggle input{width:auto;min-height:0;margin-top:3px}.engines-toggle span{display:grid;gap:2px}.engines-toggle b{font-size:13px}.engines-toggle small{color:var(--text-faint);font-size:12px;line-height:1.45}.engine-card-header{display:flex;justify-content:space-between;gap:16px;align-items:flex-start}.engine-card-header h2{margin:0 0 6px}.engine-card-header p{margin:0;color:var(--text-soft);font-size:13px;line-height:1.45}.engine-state-pill{flex-shrink:0;padding:4px 10px;border-radius:999px;font-size:11px;font-weight:700;background:var(--surface-soft);border:1px solid var(--border)}.engine-state-pill[data-state=ready]{color:#047857;border-color:#05966959;background:#05966914}.engine-state-pill[data-state=broken]{color:#b91c1c;border-color:#dc262659;background:#dc262614}.engine-state-pill[data-state=installing],.engine-state-pill[data-state=auditing]{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 35%,transparent);background:var(--accent-soft)}.engine-meta{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0 0;padding:0;list-style:none}.engine-meta li{padding:4px 8px;color:var(--text-soft);background:var(--surface-soft);border:1px solid var(--border);border-radius:8px;font-size:11px}.engine-path{display:grid;gap:4px;margin:12px 0 0;font-size:12px;color:var(--text-soft)}.engine-path code{overflow-wrap:anywhere;color:var(--text);font-size:11px}.engine-card-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}.engine-console{margin-top:16px;padding:14px;background:#101820;border:1px solid #263746;border-radius:12px}.engine-console>header{display:flex;justify-content:space-between;color:#b8ddea;font-size:12px}.engine-console pre{max-height:260px;overflow:auto;margin:0;padding:12px;color:#afc7d1;background:#0b1117;border-radius:8px;font:11px/1.65 ui-monospace,monospace;white-space:pre-wrap}@media(max-width:900px){.engine-status-bar{align-items:flex-start;flex-direction:column}.engine-card-header{flex-direction:column}}.content-page{max-width:900px;margin:0 auto;padding:58px clamp(24px,6vw,76px) 90px}.content-hero{margin-bottom:42px;padding-bottom:32px;border-bottom:1px solid var(--border)}.content-hero-split{display:flex;align-items:center;justify-content:space-between;gap:40px}.content-hero img{width:min(240px,32vw);max-height:220px;object-fit:contain}.content-hero img.about-logo{width:min(180px,28vw)}.content-hero h1{margin:12px 0 10px;font-size:clamp(38px,6vw,60px);letter-spacing:-.045em}.content-hero p{max-width:650px;margin:0;color:var(--text-soft);font-size:16px;line-height:1.6}.content-page>section{margin:34px 0}.content-page h2{margin:0 0 14px;font-size:22px}.content-page h3{margin:22px 0 8px;font-size:15px}.content-page p,.content-page li{color:var(--text-soft);font-size:15px;line-height:1.65}.content-page :is(p,li) a{color:var(--accent-dark);font-weight:650}.about-credits{margin:0;padding-left:1.2em;display:grid;gap:10px}.about-credits li{display:grid;gap:2px}.about-credits a{font-weight:700}.content-page code{padding:2px 5px;color:var(--accent-dark);background:var(--accent-soft);border-radius:4px}.content-cards{display:grid;grid-template-columns:1fr 1fr;gap:12px}.content-cards>div,.content-table>div,.release-list>article{padding:20px;background:var(--surface);border:1px solid var(--border);border-radius:12px}.content-cards h3{margin-top:0}.content-table{display:grid;gap:8px}.content-table>div{display:grid;grid-template-columns:130px 1fr;gap:18px}.content-table span{color:var(--text-soft);font-size:13px;line-height:1.6}.content-links{display:flex;flex-wrap:wrap;gap:10px}.content-links a{padding:10px 14px;color:var(--accent-dark);background:var(--accent-soft);border-radius:8px;font-size:12px;font-weight:700}.release-list{display:grid;gap:12px}.release-list>article>header{display:flex;align-items:baseline;justify-content:space-between;border-bottom:1px solid var(--border)}.release-list h2{font-size:18px}.release-list time{color:var(--text-faint);font-size:11px}.release-list ul{margin-bottom:0;padding-left:20px}.hero-visual>img{position:absolute;top:50%;left:50%;z-index:2;width:min(76%,300px);height:auto;transform:translate(-50%,-50%);filter:drop-shadow(0 20px 35px rgba(0,0,0,.32))}@media(max-width:600px){.content-page{padding:34px 18px 60px}.content-hero-split{align-items:flex-start;flex-direction:column-reverse;gap:20px}.content-hero img{width:150px}.content-cards{grid-template-columns:1fr}.content-table>div{grid-template-columns:1fr;gap:5px}} +:root{--el-color-white:#fff;--el-color-black:#000;--el-color-primary-rgb:64, 158, 255;--el-color-success-rgb:103, 194, 58;--el-color-warning-rgb:230, 162, 60;--el-color-danger-rgb:245, 108, 108;--el-color-error-rgb:245, 108, 108;--el-color-info-rgb:144, 147, 153;--el-font-size-extra-large:20px;--el-font-size-large:18px;--el-font-size-medium:16px;--el-font-size-base:14px;--el-font-size-small:13px;--el-font-size-extra-small:12px;--el-font-family:"Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif;--el-font-weight-primary:500;--el-font-line-height-primary:24px;--el-index-normal:1;--el-index-top:1000;--el-index-popper:2000;--el-border-radius-base:4px;--el-border-radius-small:2px;--el-border-radius-round:20px;--el-border-radius-circle:100%;--el-transition-duration:.3s;--el-transition-duration-fast:.2s;--el-transition-function-ease-in-out-bezier:cubic-bezier(.645, .045, .355, 1);--el-transition-function-fast-bezier:cubic-bezier(.23, 1, .32, 1);--el-transition-all:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);--el-transition-fade:opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-md-fade:transform var(--el-transition-duration) var(--el-transition-function-fast-bezier), opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-fade-linear:opacity var(--el-transition-duration-fast) linear;--el-transition-border:border-color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-box-shadow:box-shadow var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-color:color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-component-size-large:40px;--el-component-size:32px;--el-component-size-small:24px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--el-color-primary:#409eff;--el-color-primary-light-3:#79bbff;--el-color-primary-light-5:#a0cfff;--el-color-primary-light-7:#c6e2ff;--el-color-primary-light-8:#d9ecff;--el-color-primary-light-9:#ecf5ff;--el-color-primary-dark-2:#337ecc;--el-color-success:#67c23a;--el-color-success-light-3:#95d475;--el-color-success-light-5:#b3e19d;--el-color-success-light-7:#d1edc4;--el-color-success-light-8:#e1f3d8;--el-color-success-light-9:#f0f9eb;--el-color-success-dark-2:#529b2e;--el-color-warning:#e6a23c;--el-color-warning-light-3:#eebe77;--el-color-warning-light-5:#f3d19e;--el-color-warning-light-7:#f8e3c5;--el-color-warning-light-8:#faecd8;--el-color-warning-light-9:#fdf6ec;--el-color-warning-dark-2:#b88230;--el-color-danger:#f56c6c;--el-color-danger-light-3:#f89898;--el-color-danger-light-5:#fab6b6;--el-color-danger-light-7:#fcd3d3;--el-color-danger-light-8:#fde2e2;--el-color-danger-light-9:#fef0f0;--el-color-danger-dark-2:#c45656;--el-color-error:#f56c6c;--el-color-error-light-3:#f89898;--el-color-error-light-5:#fab6b6;--el-color-error-light-7:#fcd3d3;--el-color-error-light-8:#fde2e2;--el-color-error-light-9:#fef0f0;--el-color-error-dark-2:#c45656;--el-color-info:#909399;--el-color-info-light-3:#b1b3b8;--el-color-info-light-5:#c8c9cc;--el-color-info-light-7:#dedfe0;--el-color-info-light-8:#e9e9eb;--el-color-info-light-9:#f4f4f5;--el-color-info-dark-2:#73767a;--el-bg-color:#fff;--el-bg-color-page:#f2f3f5;--el-bg-color-overlay:#fff;--el-text-color-primary:#303133;--el-text-color-regular:#606266;--el-text-color-secondary:#909399;--el-text-color-placeholder:#a8abb2;--el-text-color-disabled:#c0c4cc;--el-border-color:#dcdfe6;--el-border-color-light:#e4e7ed;--el-border-color-lighter:#ebeef5;--el-border-color-extra-light:#f2f6fc;--el-border-color-dark:#d4d7de;--el-border-color-darker:#cdd0d6;--el-fill-color:#f0f2f5;--el-fill-color-light:#f5f7fa;--el-fill-color-lighter:#fafafa;--el-fill-color-extra-light:#fafcff;--el-fill-color-dark:#ebedf0;--el-fill-color-darker:#e6e8eb;--el-fill-color-blank:#fff;--el-box-shadow:0px 12px 32px 4px #0000000a, 0px 8px 20px #00000014;--el-box-shadow-light:0px 0px 12px #0000001f;--el-box-shadow-lighter:0px 0px 6px #0000001f;--el-box-shadow-dark:0px 16px 48px 16px #00000014, 0px 12px 32px #0000001f, 0px 8px 16px -8px #00000029;--el-disabled-bg-color:var(--el-fill-color-light);--el-disabled-text-color:var(--el-text-color-placeholder);--el-disabled-border-color:var(--el-border-color-light);--el-overlay-color:#000c;--el-overlay-color-light:#000000b3;--el-overlay-color-lighter:#00000080;--el-mask-color:#ffffffe6;--el-mask-color-extra-light:#ffffff4d;--el-border-width:1px;--el-border-style:solid;--el-border-color-hover:var(--el-text-color-disabled);--el-border:var(--el-border-width) var(--el-border-style) var(--el-border-color);--el-svg-monochrome-grey:var(--el-border-color)}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.el-fade-in-linear-enter-from,.el-fade-in-linear-leave-to{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-fade-in-enter-from,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-from,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transition:var(--el-transition-md-fade);transform-origin:top;transform:scaleY(1)}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:bottom}.el-zoom-in-top-enter-from,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transition:var(--el-transition-md-fade);transform-origin:bottom;transform:scaleY(1)}.el-zoom-in-bottom-enter-from,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transition:var(--el-transition-md-fade);transform-origin:0 0;transform:scale(1)}.el-zoom-in-left-enter-from,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--el-transition-duration) height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.el-collapse-transition-leave-active,.el-collapse-transition-enter-active{transition:var(--el-transition-duration) max-height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--el-transition-duration) width ease-in-out,var(--el-transition-duration) padding-left ease-in-out,var(--el-transition-duration) padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter-from,.el-list-leave-to{opacity:0;transform:translateY(-30px)}.el-list-leave-active{position:absolute!important}.el-opacity-transition{transition:opacity var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.el-icon{--color:inherit;fill:currentColor;width:1em;height:1em;color:var(--color);line-height:1em;font-size:inherit;justify-content:center;align-items:center;display:inline-flex;position:relative}.el-icon.is-loading{animation:2s linear infinite rotating}.el-icon svg{width:1em;height:1em}.el-button{--el-button-font-weight:var(--el-font-weight-primary);--el-button-border-color:var(--el-border-color);--el-button-bg-color:var(--el-fill-color-blank);--el-button-text-color:var(--el-text-color-regular);--el-button-disabled-text-color:var(--el-disabled-text-color);--el-button-disabled-bg-color:var(--el-fill-color-blank);--el-button-disabled-border-color:var(--el-border-color-light);--el-button-divide-border-color:#ffffff80;--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-color-primary-light-9);--el-button-hover-border-color:var(--el-color-primary-light-7);--el-button-active-text-color:var(--el-button-hover-text-color);--el-button-active-border-color:var(--el-color-primary);--el-button-active-bg-color:var(--el-button-hover-bg-color);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-hover-link-text-color:var(--el-text-color-secondary);--el-button-active-color:var(--el-text-color-primary);white-space:nowrap;cursor:pointer;height:32px;color:var(--el-button-text-color);text-align:center;box-sizing:border-box;line-height:1;font-weight:var(--el-button-font-weight);-webkit-user-select:none;user-select:none;vertical-align:middle;-webkit-appearance:none;background-color:var(--el-button-bg-color);border:var(--el-border);border-color:var(--el-button-border-color);outline:none;justify-content:center;align-items:center;transition:all .1s;display:inline-flex}.el-button:hover{color:var(--el-button-hover-text-color);border-color:var(--el-button-hover-border-color);background-color:var(--el-button-hover-bg-color);outline:none}.el-button:active{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:none}.el-button:focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset,outline}.el-button>span{align-items:center;display:inline-flex}.el-button+.el-button{margin-left:12px}.el-button{font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base);padding:8px 15px}.el-button.is-round{padding:8px 15px}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon]+span{margin-left:6px}.el-button [class*=el-icon] svg{vertical-align:bottom}.el-button.is-plain{--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-fill-color-blank);--el-button-hover-border-color:var(--el-color-primary)}.el-button.is-active{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:none}.el-button.is-disabled,.el-button.is-disabled:hover{color:var(--el-button-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color);border-color:var(--el-button-disabled-border-color)}.el-button.is-loading{pointer-events:none;position:relative}.el-button.is-loading:before{z-index:1;pointer-events:none;content:"";border-radius:inherit;background-color:var(--el-mask-color-extra-light);position:absolute;inset:-1px}.el-button.is-round{border-radius:var(--el-border-radius-round)}.el-button.is-dashed{--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-fill-color-blank);--el-button-hover-border-color:var(--el-color-primary);border-style:dashed}.el-button.is-circle{border-radius:50%;width:32px;padding:8px}.el-button.is-text{color:var(--el-button-text-color);background-color:#0000;border:0 solid #0000}.el-button.is-text.is-disabled{color:var(--el-button-disabled-text-color);background-color:#0000!important}.el-button.is-text:not(.is-disabled):hover{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled):focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset,outline}.el-button.is-text:not(.is-disabled):active{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled).is-has-bg:hover{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg:active{background-color:var(--el-fill-color-dark)}.el-button__text--expand{letter-spacing:.3em;margin-right:-.3em}.el-button.is-link{color:var(--el-button-text-color);background:0 0;border-color:#0000;height:auto;padding:2px}.el-button.is-link:hover{color:var(--el-button-hover-link-text-color)}.el-button.is-link.is-disabled{color:var(--el-button-disabled-text-color);background-color:#0000!important;border-color:#0000!important}.el-button.is-link:not(.is-disabled):hover{background-color:#0000;border-color:#0000}.el-button.is-link:not(.is-disabled):active{color:var(--el-button-active-color);background-color:#0000;border-color:#0000}.el-button--text{color:var(--el-color-primary);background:0 0;border-color:#0000;padding-left:0;padding-right:0}.el-button--text.is-disabled{color:var(--el-button-disabled-text-color);background-color:#0000!important;border-color:#0000!important}.el-button--text:not(.is-disabled):hover{color:var(--el-color-primary-light-3);background-color:#0000;border-color:#0000}.el-button--text:not(.is-disabled):active{color:var(--el-color-primary-dark-2);background-color:#0000;border-color:#0000}.el-button__link--expand{letter-spacing:.3em;margin-right:-.3em}.el-button--primary{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-primary);--el-button-border-color:var(--el-color-primary);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-active-color:var(--el-color-primary-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-primary-light-5);--el-button-hover-bg-color:var(--el-color-primary-light-3);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-bg-color:var(--el-color-primary-dark-2);--el-button-active-border-color:var(--el-color-primary-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-primary-light-5);--el-button-disabled-border-color:var(--el-color-primary-light-5)}.el-button--primary.is-plain,.el-button--primary.is-text,.el-button--primary.is-link{--el-button-text-color:var(--el-color-primary);--el-button-bg-color:var(--el-color-primary-light-9);--el-button-border-color:var(--el-color-primary-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-primary);--el-button-hover-border-color:var(--el-color-primary);--el-button-active-text-color:var(--el-color-white)}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:hover,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-text.is-disabled,.el-button--primary.is-text.is-disabled:hover,.el-button--primary.is-text.is-disabled:focus,.el-button--primary.is-text.is-disabled:active,.el-button--primary.is-link.is-disabled,.el-button--primary.is-link.is-disabled:hover,.el-button--primary.is-link.is-disabled:focus,.el-button--primary.is-link.is-disabled:active{color:var(--el-color-primary-light-5);background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8)}.el-button--primary.is-dashed{--el-button-text-color:var(--el-color-primary);--el-button-bg-color:var(--el-color-primary-light-9);--el-button-border-color:var(--el-color-primary-light-5);--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-color-primary-light-9);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-text-color:var(--el-color-primary-dark-2);--el-button-active-bg-color:var(--el-color-primary-light-9);--el-button-active-border-color:var(--el-color-primary-dark-2)}.el-button--primary.is-dashed.is-disabled,.el-button--primary.is-dashed.is-disabled:hover,.el-button--primary.is-dashed.is-disabled:focus,.el-button--primary.is-dashed.is-disabled:active{color:var(--el-color-primary-light-5);background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8)}.el-button--success{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-success);--el-button-border-color:var(--el-color-success);--el-button-outline-color:var(--el-color-success-light-5);--el-button-active-color:var(--el-color-success-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-success-light-5);--el-button-hover-bg-color:var(--el-color-success-light-3);--el-button-hover-border-color:var(--el-color-success-light-3);--el-button-active-bg-color:var(--el-color-success-dark-2);--el-button-active-border-color:var(--el-color-success-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-success-light-5);--el-button-disabled-border-color:var(--el-color-success-light-5)}.el-button--success.is-plain,.el-button--success.is-text,.el-button--success.is-link{--el-button-text-color:var(--el-color-success);--el-button-bg-color:var(--el-color-success-light-9);--el-button-border-color:var(--el-color-success-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-success);--el-button-hover-border-color:var(--el-color-success);--el-button-active-text-color:var(--el-color-white)}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:hover,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-text.is-disabled,.el-button--success.is-text.is-disabled:hover,.el-button--success.is-text.is-disabled:focus,.el-button--success.is-text.is-disabled:active,.el-button--success.is-link.is-disabled,.el-button--success.is-link.is-disabled:hover,.el-button--success.is-link.is-disabled:focus,.el-button--success.is-link.is-disabled:active{color:var(--el-color-success-light-5);background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8)}.el-button--success.is-dashed{--el-button-text-color:var(--el-color-success);--el-button-bg-color:var(--el-color-success-light-9);--el-button-border-color:var(--el-color-success-light-5);--el-button-hover-text-color:var(--el-color-success);--el-button-hover-bg-color:var(--el-color-success-light-9);--el-button-hover-border-color:var(--el-color-success-light-3);--el-button-active-text-color:var(--el-color-success-dark-2);--el-button-active-bg-color:var(--el-color-success-light-9);--el-button-active-border-color:var(--el-color-success-dark-2)}.el-button--success.is-dashed.is-disabled,.el-button--success.is-dashed.is-disabled:hover,.el-button--success.is-dashed.is-disabled:focus,.el-button--success.is-dashed.is-disabled:active{color:var(--el-color-success-light-5);background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8)}.el-button--warning{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-warning);--el-button-border-color:var(--el-color-warning);--el-button-outline-color:var(--el-color-warning-light-5);--el-button-active-color:var(--el-color-warning-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-warning-light-5);--el-button-hover-bg-color:var(--el-color-warning-light-3);--el-button-hover-border-color:var(--el-color-warning-light-3);--el-button-active-bg-color:var(--el-color-warning-dark-2);--el-button-active-border-color:var(--el-color-warning-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-warning-light-5);--el-button-disabled-border-color:var(--el-color-warning-light-5)}.el-button--warning.is-plain,.el-button--warning.is-text,.el-button--warning.is-link{--el-button-text-color:var(--el-color-warning);--el-button-bg-color:var(--el-color-warning-light-9);--el-button-border-color:var(--el-color-warning-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-warning);--el-button-hover-border-color:var(--el-color-warning);--el-button-active-text-color:var(--el-color-white)}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:hover,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-text.is-disabled,.el-button--warning.is-text.is-disabled:hover,.el-button--warning.is-text.is-disabled:focus,.el-button--warning.is-text.is-disabled:active,.el-button--warning.is-link.is-disabled,.el-button--warning.is-link.is-disabled:hover,.el-button--warning.is-link.is-disabled:focus,.el-button--warning.is-link.is-disabled:active{color:var(--el-color-warning-light-5);background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8)}.el-button--warning.is-dashed{--el-button-text-color:var(--el-color-warning);--el-button-bg-color:var(--el-color-warning-light-9);--el-button-border-color:var(--el-color-warning-light-5);--el-button-hover-text-color:var(--el-color-warning);--el-button-hover-bg-color:var(--el-color-warning-light-9);--el-button-hover-border-color:var(--el-color-warning-light-3);--el-button-active-text-color:var(--el-color-warning-dark-2);--el-button-active-bg-color:var(--el-color-warning-light-9);--el-button-active-border-color:var(--el-color-warning-dark-2)}.el-button--warning.is-dashed.is-disabled,.el-button--warning.is-dashed.is-disabled:hover,.el-button--warning.is-dashed.is-disabled:focus,.el-button--warning.is-dashed.is-disabled:active{color:var(--el-color-warning-light-5);background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8)}.el-button--danger{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-danger);--el-button-border-color:var(--el-color-danger);--el-button-outline-color:var(--el-color-danger-light-5);--el-button-active-color:var(--el-color-danger-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-danger-light-5);--el-button-hover-bg-color:var(--el-color-danger-light-3);--el-button-hover-border-color:var(--el-color-danger-light-3);--el-button-active-bg-color:var(--el-color-danger-dark-2);--el-button-active-border-color:var(--el-color-danger-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-danger-light-5);--el-button-disabled-border-color:var(--el-color-danger-light-5)}.el-button--danger.is-plain,.el-button--danger.is-text,.el-button--danger.is-link{--el-button-text-color:var(--el-color-danger);--el-button-bg-color:var(--el-color-danger-light-9);--el-button-border-color:var(--el-color-danger-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-danger);--el-button-hover-border-color:var(--el-color-danger);--el-button-active-text-color:var(--el-color-white)}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:hover,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-text.is-disabled,.el-button--danger.is-text.is-disabled:hover,.el-button--danger.is-text.is-disabled:focus,.el-button--danger.is-text.is-disabled:active,.el-button--danger.is-link.is-disabled,.el-button--danger.is-link.is-disabled:hover,.el-button--danger.is-link.is-disabled:focus,.el-button--danger.is-link.is-disabled:active{color:var(--el-color-danger-light-5);background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8)}.el-button--danger.is-dashed{--el-button-text-color:var(--el-color-danger);--el-button-bg-color:var(--el-color-danger-light-9);--el-button-border-color:var(--el-color-danger-light-5);--el-button-hover-text-color:var(--el-color-danger);--el-button-hover-bg-color:var(--el-color-danger-light-9);--el-button-hover-border-color:var(--el-color-danger-light-3);--el-button-active-text-color:var(--el-color-danger-dark-2);--el-button-active-bg-color:var(--el-color-danger-light-9);--el-button-active-border-color:var(--el-color-danger-dark-2)}.el-button--danger.is-dashed.is-disabled,.el-button--danger.is-dashed.is-disabled:hover,.el-button--danger.is-dashed.is-disabled:focus,.el-button--danger.is-dashed.is-disabled:active{color:var(--el-color-danger-light-5);background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8)}.el-button--info{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-info);--el-button-border-color:var(--el-color-info);--el-button-outline-color:var(--el-color-info-light-5);--el-button-active-color:var(--el-color-info-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-info-light-5);--el-button-hover-bg-color:var(--el-color-info-light-3);--el-button-hover-border-color:var(--el-color-info-light-3);--el-button-active-bg-color:var(--el-color-info-dark-2);--el-button-active-border-color:var(--el-color-info-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-info-light-5);--el-button-disabled-border-color:var(--el-color-info-light-5)}.el-button--info.is-plain,.el-button--info.is-text,.el-button--info.is-link{--el-button-text-color:var(--el-color-info);--el-button-bg-color:var(--el-color-info-light-9);--el-button-border-color:var(--el-color-info-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-info);--el-button-hover-border-color:var(--el-color-info);--el-button-active-text-color:var(--el-color-white)}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:hover,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-text.is-disabled,.el-button--info.is-text.is-disabled:hover,.el-button--info.is-text.is-disabled:focus,.el-button--info.is-text.is-disabled:active,.el-button--info.is-link.is-disabled,.el-button--info.is-link.is-disabled:hover,.el-button--info.is-link.is-disabled:focus,.el-button--info.is-link.is-disabled:active{color:var(--el-color-info-light-5);background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8)}.el-button--info.is-dashed{--el-button-text-color:var(--el-color-info);--el-button-bg-color:var(--el-color-info-light-9);--el-button-border-color:var(--el-color-info-light-5);--el-button-hover-text-color:var(--el-color-info);--el-button-hover-bg-color:var(--el-color-info-light-9);--el-button-hover-border-color:var(--el-color-info-light-3);--el-button-active-text-color:var(--el-color-info-dark-2);--el-button-active-bg-color:var(--el-color-info-light-9);--el-button-active-border-color:var(--el-color-info-dark-2)}.el-button--info.is-dashed.is-disabled,.el-button--info.is-dashed.is-disabled:hover,.el-button--info.is-dashed.is-disabled:focus,.el-button--info.is-dashed.is-disabled:active{color:var(--el-color-info-light-5);background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8)}.el-button--large{--el-button-size:40px;height:var(--el-button-size)}.el-button--large [class*=el-icon]+span{margin-left:8px}.el-button--large{font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base);padding:12px 19px}.el-button--large.is-round{padding:12px 19px}.el-button--large.is-circle{width:var(--el-button-size);padding:12px}.el-button--small{--el-button-size:24px;height:var(--el-button-size)}.el-button--small [class*=el-icon]+span{margin-left:4px}.el-button--small{border-radius:calc(var(--el-border-radius-base) - 1px);padding:5px 11px;font-size:12px}.el-button--small.is-round{padding:5px 11px}.el-button--small.is-circle{width:var(--el-button-size);padding:5px}.el-overlay{z-index:2000;background-color:var(--el-overlay-color-lighter);height:100%;position:fixed;inset:0;overflow:auto}.el-overlay .el-overlay-root{height:0}.el-dialog{--el-dialog-width:50%;--el-dialog-margin-top:15vh;--el-dialog-bg-color:var(--el-bg-color);--el-dialog-box-shadow:var(--el-box-shadow);--el-dialog-title-font-size:var(--el-font-size-large);--el-dialog-content-font-size:14px;--el-dialog-font-line-height:var(--el-font-line-height-primary);--el-dialog-padding-primary:16px;--el-dialog-border-radius:var(--el-border-radius-base);margin:var(--el-dialog-margin-top,15vh) auto 50px;background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;padding:var(--el-dialog-padding-primary);width:var(--el-dialog-width,50%);overflow-wrap:break-word;position:relative}.el-dialog:focus{outline:none!important}.el-dialog.is-align-center{margin:auto}.el-dialog.is-fullscreen{--el-dialog-width:100%;--el-dialog-margin-top:0;border-radius:0;height:100%;margin-bottom:0;overflow:auto}.el-dialog__wrapper{margin:0;position:fixed;inset:0;overflow:auto}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-user-select:none;user-select:none}.el-dialog__header{padding-bottom:var(--el-dialog-padding-primary)}.el-dialog__header.show-close{padding-right:calc(var(--el-dialog-padding-primary) + var(--el-message-close-size,16px))}.el-dialog__headerbtn{cursor:pointer;width:48px;height:48px;font-size:var(--el-message-close-size,16px);background:0 0;border:none;outline:none;padding:0;position:absolute;top:0;right:0}.el-dialog__headerbtn .el-dialog__close{color:var(--el-color-info);font-size:inherit}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:var(--el-color-primary)}.el-dialog__title{line-height:var(--el-dialog-font-line-height);font-size:var(--el-dialog-title-font-size);color:var(--el-text-color-primary)}.el-dialog__body{color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{padding-top:var(--el-dialog-padding-primary);text-align:right;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial}.el-dialog--center .el-dialog__footer{text-align:inherit}.el-modal-dialog.is-penetrable{pointer-events:none}.el-modal-dialog.is-penetrable .el-dialog{pointer-events:auto}.el-overlay-dialog{position:fixed;inset:0;overflow:auto}.el-overlay-dialog.is-closing .el-dialog{pointer-events:none}.dialog-fade-enter-active{animation:modal-fade-in var(--el-transition-duration)}.dialog-fade-enter-active .el-overlay-dialog{animation:dialog-fade-in var(--el-transition-duration)}.dialog-fade-leave-active{animation:modal-fade-out var(--el-transition-duration)}.dialog-fade-leave-active .el-overlay-dialog{animation:dialog-fade-out var(--el-transition-duration)}@keyframes dialog-fade-in{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translate(0)}}@keyframes dialog-fade-out{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translateY(-20px)}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}.el-textarea{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;vertical-align:bottom;width:100%;font-size:var(--el-font-size-base);display:inline-block;position:relative}.el-textarea__inner{cursor:auto;resize:vertical;box-sizing:border-box;width:100%;line-height:1.5;font-size:inherit;color:var(--el-input-text-color,var(--el-text-color-regular));background-color:var(--el-input-bg-color,var(--el-fill-color-blank));-webkit-appearance:none;box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));transition:var(--el-transition-box-shadow);background-image:none;border:none;padding:5px 11px;font-family:inherit;display:block;position:relative}.el-textarea__inner.is-clearable{padding:5px 26px 5px 11px}.el-textarea__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-textarea__inner:focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset;outline:none}.el-textarea__clear{color:var(--el-input-icon-color);cursor:pointer;font-size:14px;position:absolute;top:15px;right:11px;transform:translateY(-50%)}.el-textarea__clear:hover{color:var(--el-input-clear-hover-color)}.el-textarea .el-input__count{color:var(--el-color-info);background:var(--el-fill-color-blank);font-size:12px;line-height:14px;position:absolute;bottom:5px;right:10px}.el-textarea .el-input__count.is-outside{top:100%;right:0;bottom:unset;background:0 0;padding-top:2px;line-height:1;position:absolute}.el-textarea.is-disabled .el-textarea__inner{box-shadow:0 0 0 1px var(--el-disabled-border-color) inset;background-color:var(--el-disabled-bg-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-exceed .el-textarea__inner{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-textarea.is-exceed .el-input__count{color:var(--el-color-danger)}.el-input{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;--el-input-height:var(--el-component-size);font-size:var(--el-font-size-base);width:var(--el-input-width);line-height:var(--el-input-height);box-sizing:border-box;vertical-align:middle;display:inline-flex;position:relative}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{background:var(--el-text-color-disabled);border-radius:5px;width:6px}.el-input::-webkit-scrollbar-corner{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track-piece{background:var(--el-fill-color-blank);width:6px}.el-input .el-input__clear,.el-input .el-input__password{color:var(--el-input-icon-color);cursor:pointer;font-size:14px}.el-input .el-input__clear:hover,.el-input .el-input__password:hover{color:var(--el-input-clear-hover-color)}.el-input .el-input__count{height:100%;color:var(--el-color-info);align-items:center;font-size:12px;display:inline-flex}.el-input .el-input__count .el-input__count-inner{background:var(--el-fill-color-blank);line-height:initial;padding-left:8px;display:inline-block}.el-input .el-input__count.is-outside{height:unset;padding-top:2px;position:absolute;top:100%;right:0}.el-input .el-input__count.is-outside .el-input__count-inner{background:0 0;padding-left:0;line-height:1}.el-input__wrapper{background-color:var(--el-input-bg-color,var(--el-fill-color-blank));border-radius:var(--el-input-border-radius,var(--el-border-radius-base));cursor:text;transition:var(--el-transition-box-shadow);box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;background-image:none;flex-grow:1;justify-content:center;align-items:center;padding:1px 11px;display:inline-flex;transform:translate(0)}.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-input{--el-input-inner-height:calc(var(--el-input-height,32px) - 2px)}.el-input__inner{-webkit-appearance:none;width:100%;color:var(--el-input-text-color,var(--el-text-color-regular));font-size:inherit;height:var(--el-input-inner-height);line-height:var(--el-input-inner-height);box-sizing:border-box;background:0 0;border:none;outline:none;flex-grow:1;padding:0}.el-input__inner:focus{outline:none}.el-input__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner[type=password]::-ms-reveal{display:none}.el-input__inner[type=number]{line-height:1}.el-input__prefix{white-space:nowrap;height:100%;line-height:var(--el-input-inner-height);text-align:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none;flex-wrap:nowrap;flex-shrink:0;display:inline-flex}.el-input__prefix-inner{pointer-events:all;justify-content:center;align-items:center;display:inline-flex}.el-input__prefix-inner>:last-child{margin-right:8px}.el-input__prefix-inner>:first-child,.el-input__prefix-inner>:first-child.el-input__icon{margin-left:0}.el-input__suffix{white-space:nowrap;height:100%;line-height:var(--el-input-inner-height);text-align:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none;flex-wrap:nowrap;flex-shrink:0;display:inline-flex}.el-input__suffix-inner{pointer-events:all;justify-content:center;align-items:center;display:inline-flex}.el-input__suffix-inner>:first-child{margin-left:8px}.el-input .el-input__icon{height:inherit;line-height:inherit;transition:all var(--el-transition-duration);justify-content:center;align-items:center;margin-left:8px;display:flex}.el-input .el-input__clear{transition:color var(--el-transition-duration)}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-color, ) inset}.el-input.is-disabled{cursor:not-allowed}.el-input.is-disabled .el-input__wrapper{background-color:var(--el-disabled-bg-color);cursor:not-allowed;box-shadow:0 0 0 1px var(--el-disabled-border-color) inset}.el-input.is-disabled .el-input__inner{color:var(--el-disabled-text-color);-webkit-text-fill-color:var(--el-disabled-text-color);cursor:not-allowed}.el-input.is-disabled .el-input__inner::placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-disabled .el-input__prefix-inner,.el-input.is-disabled .el-input__suffix-inner{pointer-events:none}.el-input.is-exceed .el-input__wrapper{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-input.is-exceed .el-input__suffix .el-input__count{color:var(--el-color-danger)}.el-input--large{--el-input-height:var(--el-component-size-large);font-size:14px}.el-input--large .el-input__wrapper{padding:1px 15px}.el-input--large{--el-input-inner-height:calc(var(--el-input-height,40px) - 2px)}.el-input--small{--el-input-height:var(--el-component-size-small);font-size:12px}.el-input--small .el-input__wrapper{padding:1px 7px}.el-input--small{--el-input-inner-height:calc(var(--el-input-height,24px) - 2px)}.el-input-group{align-items:stretch;width:100%;display:inline-flex}.el-input-group__append,.el-input-group__prepend{background-color:var(--el-fill-color-light);color:var(--el-color-info);border-radius:var(--el-input-border-radius);white-space:nowrap;justify-content:center;align-items:center;min-height:100%;padding:0 20px;display:inline-flex;position:relative}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:none}.el-input-group__append .el-select,.el-input-group__append .el-button,.el-input-group__prepend .el-select,.el-input-group__prepend .el-button{flex:1;margin:0 -20px;display:inline-block}.el-input-group__append button.el-button,.el-input-group__append button.el-button:hover,.el-input-group__append div.el-select .el-select__wrapper,.el-input-group__append div.el-select:hover .el-select__wrapper,.el-input-group__prepend button.el-button,.el-input-group__prepend button.el-button:hover,.el-input-group__prepend div.el-select .el-select__wrapper,.el-input-group__prepend div.el-select:hover .el-select__wrapper{color:inherit;background-color:#0000;border-color:#0000}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset;border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset;border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend>.el-input__wrapper{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input-group__prepend .el-select .el-select__wrapper{box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append>.el-input__wrapper{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-input-group__append .el-select .el-select__wrapper{box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-hidden{display:none!important}.el-input-number{vertical-align:middle;width:150px;line-height:30px;display:inline-flex;position:relative}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;text-align:center;line-height:1}.el-input-number .el-input__inner::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.el-input-number .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-input-number.is-left .el-input__inner{text-align:left}.el-input-number.is-right .el-input__inner{text-align:right}.el-input-number.is-center .el-input__inner{text-align:center}.el-input-number__increase,.el-input-number__decrease{z-index:1;background:var(--el-fill-color-light);width:32px;height:auto;color:var(--el-text-color-regular);cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;font-size:13px;display:flex;position:absolute;top:1px;bottom:1px}.el-input-number__increase:hover,.el-input-number__decrease:hover{color:var(--el-color-primary)}.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input__wrapper,.el-input-number__decrease:hover~.el-input:not(.is-disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-input-number__increase.is-disabled,.el-input-number__decrease.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;border-left:var(--el-border);right:1px}.el-input-number__decrease{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);border-right:var(--el-border);left:1px}.el-input-number.is-disabled .el-input-number__increase,.el-input-number.is-disabled .el-input-number__decrease{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__increase:hover,.el-input-number.is-disabled .el-input-number__decrease:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{width:180px;line-height:38px}.el-input-number--large .el-input-number__increase,.el-input-number--large .el-input-number__decrease{width:40px;font-size:14px}.el-input-number--large.is-controls-right .el-input--large .el-input__wrapper{padding-right:47px}.el-input-number--large .el-input--large .el-input__wrapper{padding-left:47px;padding-right:47px}.el-input-number--small{width:120px;line-height:22px}.el-input-number--small .el-input-number__increase,.el-input-number--small .el-input-number__decrease{width:24px;font-size:12px}.el-input-number--small.is-controls-right .el-input--small .el-input__wrapper{padding-right:31px}.el-input-number--small .el-input--small .el-input__wrapper{padding-left:31px;padding-right:31px}.el-input-number--small .el-input-number__increase [class*=el-icon],.el-input-number--small .el-input-number__decrease [class*=el-icon]{transform:scale(.9)}.el-input-number.is-without-controls .el-input__wrapper{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__wrapper{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__increase,.el-input-number.is-controls-right .el-input-number__decrease{--el-input-number-controls-height:15px;height:var(--el-input-number-controls-height);line-height:var(--el-input-number-controls-height)}.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon],.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 var(--el-border-radius-base) 0 0;border-bottom:var(--el-border);bottom:auto;left:auto}.el-input-number.is-controls-right .el-input-number__decrease{border-right:none;border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0;top:auto;left:auto;right:1px}.el-input-number.is-controls-right[class*=large] [class*=increase],.el-input-number.is-controls-right[class*=large] [class*=decrease]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=increase],.el-input-number.is-controls-right[class*=small] [class*=decrease]{--el-input-number-controls-height:11px}.el-badge{--el-badge-bg-color:var(--el-color-danger);--el-badge-radius:10px;--el-badge-font-size:12px;--el-badge-padding:6px;--el-badge-size:18px;vertical-align:middle;width:-moz-fit-content;width:fit-content;display:inline-block;position:relative}.el-badge__content{background-color:var(--el-badge-bg-color);border-radius:var(--el-badge-radius);color:var(--el-color-white);font-size:var(--el-badge-font-size);height:var(--el-badge-size);padding:0 var(--el-badge-padding);white-space:nowrap;border:1px solid var(--el-bg-color);justify-content:center;align-items:center;display:inline-flex}.el-badge__content.is-fixed{top:0;right:calc(1px + var(--el-badge-size) / 2);z-index:var(--el-index-normal);position:absolute;transform:translateY(-50%)translate(100%)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{border-radius:50%;width:8px;height:8px;padding:0;right:0}.el-badge__content.is-hide-zero{display:none}.el-badge__content--primary{background-color:var(--el-color-primary)}.el-badge__content--success{background-color:var(--el-color-success)}.el-badge__content--warning{background-color:var(--el-color-warning)}.el-badge__content--info{background-color:var(--el-color-info)}.el-badge__content--danger{background-color:var(--el-color-danger)}.el-message{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-border-color-lighter);--el-message-padding:11px 15px;--el-message-close-size:16px;--el-message-close-icon-color:var(--el-text-color-placeholder);--el-message-close-hover-color:var(--el-text-color-secondary);box-sizing:border-box;border-radius:var(--el-border-radius-base);border-width:var(--el-border-width);border-style:var(--el-border-style);border-color:var(--el-message-border-color);background-color:var(--el-message-bg-color);width:max-content;max-width:calc(100% - 32px);transition:opacity var(--el-transition-duration),transform .4s,top .4s,bottom .4s;padding:var(--el-message-padding);align-items:center;gap:8px;display:flex;position:fixed}.el-message.is-left{left:16px}.el-message.is-right{right:16px}.el-message.is-center{left:50%;transform:translate(-50%)}.el-message.is-plain{background-color:var(--el-bg-color-overlay);border-color:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-message p{margin:0}.el-message--primary{--el-message-bg-color:var(--el-color-primary-light-9);--el-message-border-color:var(--el-color-primary-light-8);--el-message-text-color:var(--el-color-primary)}.el-message--primary .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--primary{color:var(--el-message-text-color)}.el-message--success{--el-message-bg-color:var(--el-color-success-light-9);--el-message-border-color:var(--el-color-success-light-8);--el-message-text-color:var(--el-color-success)}.el-message--success .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--success{color:var(--el-message-text-color)}.el-message--info{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-color-info-light-8);--el-message-text-color:var(--el-color-info)}.el-message--info .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--info{color:var(--el-message-text-color)}.el-message--warning{--el-message-bg-color:var(--el-color-warning-light-9);--el-message-border-color:var(--el-color-warning-light-8);--el-message-text-color:var(--el-color-warning)}.el-message--warning .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--warning{color:var(--el-message-text-color)}.el-message--error{--el-message-bg-color:var(--el-color-error-light-9);--el-message-border-color:var(--el-color-error-light-8);--el-message-text-color:var(--el-color-error)}.el-message--error .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--error{color:var(--el-message-text-color)}.el-message .el-message__badge{position:absolute;top:-8px;right:-8px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__content:focus{outline-width:0}.el-message .el-message__closeBtn{cursor:pointer;color:var(--el-message-close-icon-color);font-size:var(--el-message-close-size)}.el-message .el-message__closeBtn:focus{outline-width:0}.el-message .el-message__closeBtn:hover{color:var(--el-message-close-hover-color)}.el-message-fade-enter-from,.el-message-fade-leave-to{opacity:0}.el-message-fade-enter-from.is-left,.el-message-fade-enter-from.is-right,.el-message-fade-leave-to.is-left,.el-message-fade-leave-to.is-right{transform:translateY(-100%)}.el-message-fade-enter-from.is-left.is-bottom,.el-message-fade-enter-from.is-right.is-bottom,.el-message-fade-leave-to.is-left.is-bottom,.el-message-fade-leave-to.is-right.is-bottom{transform:translateY(100%)}.el-message-fade-enter-from.is-center,.el-message-fade-leave-to.is-center{transform:translate(-50%,-100%)}.el-message-fade-enter-from.is-center.is-bottom,.el-message-fade-leave-to.is-center.is-bottom{transform:translate(-50%,100%)}:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:.5}.v-modal-enter{animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{width:100%;height:100%;opacity:var(--el-popup-modal-opacity);background:var(--el-popup-modal-bg-color);position:fixed;top:0;left:0}.el-popup-parent--hidden{overflow:hidden}.el-message-box{--el-messagebox-title-color:var(--el-text-color-primary);--el-messagebox-width:420px;--el-messagebox-border-radius:4px;--el-messagebox-box-shadow:var(--el-box-shadow);--el-messagebox-font-size:var(--el-font-size-large);--el-messagebox-content-font-size:var(--el-font-size-base);--el-messagebox-content-color:var(--el-text-color-regular);--el-messagebox-error-font-size:12px;--el-messagebox-padding-primary:12px;--el-messagebox-font-line-height:var(--el-font-line-height-primary);max-width:var(--el-messagebox-width);width:100%;padding:var(--el-messagebox-padding-primary);vertical-align:middle;background-color:var(--el-bg-color);border-radius:var(--el-messagebox-border-radius);font-size:var(--el-messagebox-font-size);box-shadow:var(--el-messagebox-box-shadow);text-align:left;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box;overflow-wrap:break-word;display:inline-block;position:relative;overflow:hidden}.el-message-box:focus{outline:none!important}.is-message-box .el-overlay-message-box{text-align:center;padding:16px;position:fixed;inset:0;overflow:auto}.is-message-box .el-overlay-message-box:after{content:"";vertical-align:middle;width:0;height:100%;display:inline-block}.el-message-box.is-draggable .el-message-box__header{cursor:move;-webkit-user-select:none;user-select:none}.el-message-box__header{padding-bottom:var(--el-messagebox-padding-primary)}.el-message-box__header.show-close{padding-right:calc(var(--el-messagebox-padding-primary) + var(--el-message-close-size,16px))}.el-message-box__title{font-size:var(--el-messagebox-font-size);line-height:var(--el-messagebox-font-line-height);color:var(--el-messagebox-title-color)}.el-message-box__headerbtn{width:40px;height:40px;font-size:var(--el-message-close-size,16px);cursor:pointer;background:0 0;border:none;outline:none;padding:0;position:absolute;top:0;right:0}.el-message-box__headerbtn .el-message-box__close{color:var(--el-color-info);font-size:inherit}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:var(--el-color-primary)}.el-message-box__content{color:var(--el-messagebox-content-color);font-size:var(--el-messagebox-content-font-size)}.el-message-box__container{align-items:center;gap:12px;display:flex}.el-message-box__input{padding-top:12px}.el-message-box__input div.invalid>input,.el-message-box__input div.invalid>input:focus{border-color:var(--el-color-error)}.el-message-box__status{font-size:24px}.el-message-box__status.el-message-box-icon--primary{--el-messagebox-color:var(--el-color-primary);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--success{--el-messagebox-color:var(--el-color-success);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--info{--el-messagebox-color:var(--el-color-info);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--warning{--el-messagebox-color:var(--el-color-warning);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--error{--el-messagebox-color:var(--el-color-error);color:var(--el-messagebox-color)}.el-message-box__message{min-width:0;margin:0}.el-message-box__message p{line-height:var(--el-messagebox-font-line-height);margin:0}.el-message-box__errormsg{color:var(--el-color-error);font-size:var(--el-messagebox-error-font-size);line-height:var(--el-messagebox-font-line-height)}.el-message-box__btns{padding-top:var(--el-messagebox-padding-primary);flex-wrap:wrap;justify-content:flex-end;align-items:center;display:flex}.el-message-box--center .el-message-box__title{justify-content:center;align-items:center;gap:6px;display:flex}.el-message-box--center .el-message-box__status{font-size:inherit}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__container{justify-content:center}.el-message-box-parent--hidden{overflow:hidden}.fade-in-linear-enter-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration)}.fade-in-linear-leave-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration) reverse}@keyframes msgbox-fade-in{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translate(0)}}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-selected:after{content:"";background-position:50%;background-repeat:no-repeat;background-color:var(--el-color-primary);-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") 0 0/100% 100% no-repeat;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") 0 0/100% 100% no-repeat;border-top:none;border-right:none;width:12px;height:12px;position:absolute;top:50%;right:20px;transform:translateY(-50%);-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") 0 0/100% 100% no-repeat}.el-scrollbar{--el-scrollbar-opacity:.3;--el-scrollbar-bg-color:var(--el-text-color-secondary);--el-scrollbar-hover-opacity:.5;--el-scrollbar-hover-bg-color:var(--el-text-color-secondary);height:100%;position:relative;overflow:hidden}.el-scrollbar__wrap{height:100%;overflow:auto}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{display:none}.el-scrollbar__thumb{cursor:pointer;border-radius:inherit;background-color:var(--el-scrollbar-bg-color,var(--el-text-color-secondary));width:0;height:0;transition:var(--el-transition-duration) background-color;opacity:var(--el-scrollbar-opacity,.3);display:block;position:relative}.el-scrollbar__thumb:hover{background-color:var(--el-scrollbar-hover-bg-color,var(--el-text-color-secondary));opacity:var(--el-scrollbar-hover-opacity,.5)}.el-scrollbar__bar{z-index:1;border-radius:4px;position:absolute;bottom:2px;right:2px}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar-fade-enter-active{transition:opacity .34s ease-out}.el-scrollbar-fade-leave-active{transition:opacity .12s ease-out}.el-scrollbar-fade-enter-from,.el-scrollbar-fade-leave-active{opacity:0}.el-popper{--el-popper-border-radius:var(--el-popover-border-radius,4px);--el-popper-bg-color-light:var(--el-bg-color-overlay);--el-popper-bg-color-dark:var(--el-text-color-primary);border-radius:var(--el-popper-border-radius);z-index:2000;overflow-wrap:break-word;word-break:normal;visibility:visible;min-width:10px;padding:5px 11px;font-size:12px;line-height:20px;position:absolute}.el-popper.is-dark{--el-fill-color-blank:var(--el-popper-bg-color-dark);color:var(--el-bg-color);background:var(--el-popper-bg-color-dark);border:1px solid var(--el-text-color-primary)}.el-popper.is-dark>.el-popper__arrow:before{border:1px solid var(--el-text-color-primary);background:var(--el-popper-bg-color-dark);right:0}.el-popper.is-light{--el-fill-color-blank:var(--el-popper-bg-color-light);background:var(--el-popper-bg-color-light);border:1px solid var(--el-border-color-light)}.el-popper.is-light>.el-popper__arrow:before{border:1px solid var(--el-border-color-light);background:var(--el-popper-bg-color-light);right:0}.el-popper.is-pure{padding:0}.el-popper__arrow{z-index:-1;width:10px;height:10px;position:absolute}.el-popper__arrow:before{z-index:-1;content:" ";background:var(--el-text-color-primary);box-sizing:border-box;width:10px;height:10px;position:absolute;transform:rotate(45deg)}.el-popper[data-popper-placement^=top]>.el-popper__arrow{bottom:-5px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-bottom-right-radius:2px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow{top:-5px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-top-left-radius:2px}.el-popper[data-popper-placement^=left]>.el-popper__arrow{right:-5px}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-top-right-radius:2px}.el-popper[data-popper-placement^=right]>.el-popper__arrow{left:-5px}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-bottom-left-radius:2px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-top-color:#0000!important;border-left-color:#0000!important}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-bottom-color:#0000!important;border-right-color:#0000!important}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-bottom-color:#0000!important;border-left-color:#0000!important}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-top-color:#0000!important;border-right-color:#0000!important}.el-tag{--el-tag-font-size:12px;--el-tag-border-radius:4px;--el-tag-border-radius-rounded:9999px;background-color:var(--el-tag-bg-color);border-color:var(--el-tag-border-color);color:var(--el-tag-text-color);vertical-align:middle;height:24px;font-size:var(--el-tag-font-size);border-radius:var(--el-tag-border-radius);box-sizing:border-box;white-space:nowrap;--el-icon-size:14px;--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary);border-style:solid;border-width:1px;justify-content:center;align-items:center;padding:0 9px;line-height:1;display:inline-flex}.el-tag.el-tag--primary{--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-bg-color:var(--el-color-success-light-9);--el-tag-border-color:var(--el-color-success-light-8);--el-tag-hover-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-bg-color:var(--el-color-warning-light-9);--el-tag-border-color:var(--el-color-warning-light-8);--el-tag-hover-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-bg-color:var(--el-color-danger-light-9);--el-tag-border-color:var(--el-color-danger-light-8);--el-tag-hover-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-bg-color:var(--el-color-error-light-9);--el-tag-border-color:var(--el-color-error-light-8);--el-tag-hover-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-bg-color:var(--el-color-info-light-9);--el-tag-border-color:var(--el-color-info-light-8);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-hit{border-color:var(--el-color-primary)}.el-tag.is-round{border-radius:var(--el-tag-border-radius-rounded)}.el-tag .el-tag__close{color:var(--el-tag-text-color);flex-shrink:0}.el-tag .el-tag__close:hover{color:var(--el-color-white);background-color:var(--el-tag-hover-color)}.el-tag.el-tag--primary{--el-tag-text-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-text-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-text-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-text-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-text-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-text-color:var(--el-color-info)}.el-tag .el-icon{cursor:pointer;font-size:calc(var(--el-icon-size) - 2px);height:var(--el-icon-size);width:var(--el-icon-size);border-radius:50%}.el-tag .el-tag__close{background-color:#0000;border:none;border-radius:50%;outline:none;margin-left:6px;padding:0;overflow:hidden}.el-tag .el-tag__close:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-tag .el-tag__close .el-icon{display:flex}.el-tag--dark{--el-tag-text-color:var(--el-color-white);--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3)}.el-tag--dark.el-tag--primary{--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3)}.el-tag--dark.el-tag--success{--el-tag-bg-color:var(--el-color-success);--el-tag-border-color:var(--el-color-success);--el-tag-hover-color:var(--el-color-success-light-3)}.el-tag--dark.el-tag--warning{--el-tag-bg-color:var(--el-color-warning);--el-tag-border-color:var(--el-color-warning);--el-tag-hover-color:var(--el-color-warning-light-3)}.el-tag--dark.el-tag--danger{--el-tag-bg-color:var(--el-color-danger);--el-tag-border-color:var(--el-color-danger);--el-tag-hover-color:var(--el-color-danger-light-3)}.el-tag--dark.el-tag--error{--el-tag-bg-color:var(--el-color-error);--el-tag-border-color:var(--el-color-error);--el-tag-hover-color:var(--el-color-error-light-3)}.el-tag--dark.el-tag--info{--el-tag-bg-color:var(--el-color-info);--el-tag-border-color:var(--el-color-info);--el-tag-hover-color:var(--el-color-info-light-3)}.el-tag--dark.el-tag--primary,.el-tag--dark.el-tag--success,.el-tag--dark.el-tag--warning,.el-tag--dark.el-tag--danger,.el-tag--dark.el-tag--error,.el-tag--dark.el-tag--info{--el-tag-text-color:var(--el-color-white)}.el-tag--plain,.el-tag--plain.el-tag--primary{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-primary-light-5);--el-tag-hover-color:var(--el-color-primary)}.el-tag--plain.el-tag--success{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-success-light-5);--el-tag-hover-color:var(--el-color-success)}.el-tag--plain.el-tag--warning{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-warning-light-5);--el-tag-hover-color:var(--el-color-warning)}.el-tag--plain.el-tag--danger{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-danger-light-5);--el-tag-hover-color:var(--el-color-danger)}.el-tag--plain.el-tag--error{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-error-light-5);--el-tag-hover-color:var(--el-color-error)}.el-tag--plain.el-tag--info{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-info-light-5);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-closable{padding-right:5px}.el-tag--large{--el-icon-size:16px;height:32px;padding:0 11px}.el-tag--large .el-tag__close{margin-left:8px}.el-tag--large.is-closable{padding-right:7px}.el-tag--small{--el-icon-size:12px;height:20px;padding:0 7px}.el-tag--small .el-tag__close{margin-left:4px}.el-tag--small.is-closable{padding-right:3px}.el-tag--small .el-icon-close{transform:scale(.8)}.el-tag.el-tag--primary.is-hit{border-color:var(--el-color-primary)}.el-tag.el-tag--success.is-hit{border-color:var(--el-color-success)}.el-tag.el-tag--warning.is-hit{border-color:var(--el-color-warning)}.el-tag.el-tag--danger.is-hit{border-color:var(--el-color-danger)}.el-tag.el-tag--error.is-hit{border-color:var(--el-color-error)}.el-tag.el-tag--info.is-hit{border-color:var(--el-color-info)}.el-select-dropdown{z-index:calc(var(--el-index-top) + 1);border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__loading,.el-select-dropdown__empty{text-align:center;color:var(--el-text-color-secondary);font-size:var(--el-select-font-size);margin:0;padding:10px 0}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{box-sizing:border-box;margin:0;padding:6px 0;list-style:none}.el-select-dropdown__list.el-vl__window{margin:6px 0;padding:0}.el-select-dropdown__header{border-bottom:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__footer{border-top:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__item{font-size:var(--el-font-size-base);white-space:nowrap;text-overflow:ellipsis;color:var(--el-text-color-regular);box-sizing:border-box;cursor:pointer;height:34px;padding:0 32px 0 20px;line-height:34px;position:relative;overflow:hidden}.el-select-dropdown__item.is-hovering{background-color:var(--el-fill-color-light)}.el-select-dropdown__item.is-selected{color:var(--el-color-primary);font-weight:700}.el-select-dropdown__item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed;background-color:unset}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-selected:after{content:"";background-position:50%;background-repeat:no-repeat;background-color:var(--el-color-primary);-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") 0 0/100% 100% no-repeat;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") 0 0/100% 100% no-repeat;border-top:none;border-right:none;width:12px;height:12px;position:absolute;top:50%;right:20px;transform:translateY(-50%);-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") 0 0/100% 100% no-repeat}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-disabled:after{background-color:var(--el-text-color-placeholder)}.el-select-group{margin:0;padding:0}.el-select-group__wrap{margin:0;padding:0;list-style:none;position:relative}.el-select-group__title{box-sizing:border-box;color:var(--el-color-info);text-overflow:ellipsis;white-space:nowrap;padding:0 20px;font-size:12px;line-height:34px;overflow:hidden}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{--el-select-border-color-hover:var(--el-border-color-hover);--el-select-disabled-color:var(--el-disabled-text-color);--el-select-disabled-border:var(--el-disabled-border-color);--el-select-font-size:var(--el-font-size-base);--el-select-close-hover-color:var(--el-text-color-secondary);--el-select-input-color:var(--el-text-color-placeholder);--el-select-multiple-input-color:var(--el-text-color-regular);--el-select-input-focus-border-color:var(--el-color-primary);--el-select-input-font-size:14px;--el-select-width:100%;vertical-align:middle;width:var(--el-select-width);display:inline-block;position:relative}.el-select__wrapper{box-sizing:border-box;cursor:pointer;text-align:left;border-radius:var(--el-border-radius-base);background-color:var(--el-fill-color-blank);min-height:32px;transition:var(--el-transition-duration);box-shadow:0 0 0 1px var(--el-border-color) inset;align-items:center;gap:6px;padding:4px 12px;font-size:14px;line-height:24px;display:flex;position:relative;transform:translate(0)}.el-select__wrapper.is-filterable{cursor:text}.el-select__wrapper.is-focused{box-shadow:0 0 0 1px var(--el-color-primary) inset}.el-select__wrapper.is-hovering:not(.is-focused){box-shadow:0 0 0 1px var(--el-border-color-hover) inset}.el-select__wrapper.is-disabled{cursor:not-allowed;background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);box-shadow:0 0 0 1px var(--el-select-disabled-border) inset}.el-select__wrapper.is-disabled:hover{box-shadow:0 0 0 1px var(--el-select-disabled-border) inset}.el-select__wrapper.is-disabled.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-select__wrapper.is-disabled .el-select__selected-item{color:var(--el-select-disabled-color)}.el-select__wrapper.is-disabled .el-select__caret,.el-select__wrapper.is-disabled .el-tag,.el-select__wrapper.is-disabled input{cursor:not-allowed}.el-select__wrapper.is-disabled .el-select__prefix,.el-select__wrapper.is-disabled .el-select__suffix{pointer-events:none}.el-select__prefix,.el-select__suffix{color:var(--el-input-icon-color,var(--el-text-color-placeholder));flex-shrink:0;align-items:center;gap:6px;display:flex}.el-select__caret{color:var(--el-select-input-color);font-size:var(--el-select-input-font-size);transition:var(--el-transition-duration);cursor:pointer;transform:rotate(0)}.el-select__caret.is-reverse{transform:rotate(180deg)}.el-select__clear{cursor:pointer}.el-select__clear:hover{color:var(--el-select-close-hover-color)}.el-select__selection{flex-wrap:wrap;flex:1;align-items:center;gap:6px;min-width:0;display:flex;position:relative}.el-select__selection.is-near{margin-left:-8px}.el-select__selection .el-tag{cursor:pointer;border-color:#0000}.el-select__selection .el-tag.el-tag--plain{border-color:var(--el-tag-border-color)}.el-select__selection .el-tag .el-tag__content{min-width:0}.el-select__selected-item{-webkit-user-select:none;user-select:none;flex-wrap:wrap;display:flex}.el-select__tags-text{text-overflow:ellipsis;white-space:nowrap;line-height:normal;display:block;overflow:hidden}.el-select__placeholder{z-index:-1;text-overflow:ellipsis;white-space:nowrap;width:100%;color:var(--el-input-text-color,var(--el-text-color-regular));display:block;position:absolute;top:50%;overflow:hidden;transform:translateY(-50%)}.el-select__placeholder.is-transparent{-webkit-user-select:none;user-select:none;color:var(--el-text-color-placeholder)}.el-select__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.el-select__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-select__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:#0000;border-left-color:#0000}.el-select__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-select__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-select__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.el-select__input-wrapper{flex:1}.el-select__input-wrapper.is-hidden{opacity:0;z-index:-1;position:absolute}.el-select__input{color:var(--el-select-multiple-input-color);font-size:inherit;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#0000;border:none;outline:none;width:100%;height:24px;padding:0;font-family:inherit}.el-select__input-calculator{visibility:hidden;white-space:pre;max-width:100%;position:absolute;top:0;left:0;overflow:hidden}.el-select--large .el-select__wrapper{gap:6px;min-height:40px;padding:8px 16px;font-size:14px;line-height:24px}.el-select--large .el-select__selection{gap:6px}.el-select--large .el-select__selection.is-near{margin-left:-8px}.el-select--large .el-select__prefix,.el-select--large .el-select__suffix{gap:6px}.el-select--large .el-select__input{height:24px}.el-select--small .el-select__wrapper{gap:4px;min-height:24px;padding:2px 8px;font-size:12px;line-height:20px}.el-select--small .el-select__selection{gap:4px}.el-select--small .el-select__selection.is-near{margin-left:-6px}.el-select--small .el-select__prefix,.el-select--small .el-select__suffix{gap:4px}.el-select--small .el-select__input{height:20px}.el-switch{--el-switch-on-color:var(--el-color-primary);--el-switch-off-color:var(--el-border-color);vertical-align:middle;align-items:center;height:32px;font-size:14px;line-height:20px;display:inline-flex;position:relative}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{transition:var(--el-transition-duration-fast);cursor:pointer;vertical-align:middle;height:20px;color:var(--el-text-color-primary);font-size:14px;font-weight:500;display:inline-block}.el-switch__label.is-active{color:var(--el-color-primary)}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{font-size:14px;line-height:1;display:inline-block}.el-switch__label .el-icon{height:inherit}.el-switch__label .el-icon svg{vertical-align:middle}.el-switch__input{opacity:0;width:0;height:0;margin:0;position:absolute}.el-switch__input:focus-visible~.el-switch__core{outline:2px solid var(--el-switch-on-color);outline-offset:1px}.el-switch__core{border:1px solid var(--el-switch-border-color,var(--el-switch-off-color));box-sizing:border-box;background:var(--el-switch-off-color);cursor:pointer;min-width:40px;height:20px;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration);border-radius:10px;outline:none;align-items:center;display:inline-flex;position:relative}.el-switch__core .el-switch__inner{width:100%;transition:all var(--el-transition-duration);justify-content:center;align-items:center;height:16px;padding:0 4px 0 18px;display:flex;overflow:hidden}.el-switch__core .el-switch__inner-wrapper{color:var(--el-color-white);-webkit-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;align-items:center;font-size:12px;display:flex;overflow:hidden}.el-switch__core .el-switch__action{border-radius:var(--el-border-radius-circle);transition:all var(--el-transition-duration);background-color:var(--el-color-white);width:16px;height:16px;color:var(--el-switch-off-color);justify-content:center;align-items:center;display:flex;position:absolute;left:1px}.el-switch.is-checked .el-switch__core{border-color:var(--el-switch-border-color,var(--el-switch-on-color));background-color:var(--el-switch-on-color)}.el-switch.is-checked .el-switch__core .el-switch__action{color:var(--el-switch-on-color);left:calc(100% - 17px)}.el-switch.is-checked .el-switch__core .el-switch__inner{padding:0 18px 0 4px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter-from,.el-switch .label-fade-leave-active{opacity:0}.el-switch--large{height:40px;font-size:14px;line-height:24px}.el-switch--large .el-switch__label{height:24px;font-size:14px}.el-switch--large .el-switch__label *{font-size:14px}.el-switch--large .el-switch__core{border-radius:12px;min-width:50px;height:24px}.el-switch--large .el-switch__core .el-switch__inner{height:20px;padding:0 6px 0 22px}.el-switch--large .el-switch__core .el-switch__action{width:20px;height:20px}.el-switch--large.is-checked .el-switch__core .el-switch__action{left:calc(100% - 21px)}.el-switch--large.is-checked .el-switch__core .el-switch__inner{padding:0 22px 0 6px}.el-switch--small{height:24px;font-size:12px;line-height:16px}.el-switch--small .el-switch__label{height:16px;font-size:12px}.el-switch--small .el-switch__label *{font-size:12px}.el-switch--small .el-switch__core{border-radius:8px;min-width:30px;height:16px}.el-switch--small .el-switch__core .el-switch__inner{height:12px;padding:0 2px 0 14px}.el-switch--small .el-switch__core .el-switch__action{width:12px;height:12px}.el-switch--small.is-checked .el-switch__core .el-switch__action{left:calc(100% - 13px)}.el-switch--small.is-checked .el-switch__core .el-switch__inner{padding:0 14px 0 2px}:root{--el-loading-spinner-size:42px;--el-loading-fullscreen-spinner-size:50px}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{z-index:2000;background-color:var(--el-mask-color);transition:opacity var(--el-transition-duration);margin:0;position:absolute;inset:0}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:calc((0px - var(--el-loading-fullscreen-spinner-size)) / 2)}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:var(--el-loading-fullscreen-spinner-size);width:var(--el-loading-fullscreen-spinner-size)}.el-loading-spinner{margin-top:calc((0px - var(--el-loading-spinner-size)) / 2);text-align:center;width:100%;position:absolute;top:50%}.el-loading-spinner .el-loading-text{color:var(--el-color-primary);margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:var(--el-loading-spinner-size);width:var(--el-loading-spinner-size);animation:2s linear infinite loading-rotate;display:inline}.el-loading-spinner .path{stroke-dasharray:90 150;stroke-dashoffset:0;stroke-width:2px;stroke:var(--el-color-primary);stroke-linecap:round;animation:1.5s ease-in-out infinite loading-dash}.el-loading-spinner i{color:var(--el-color-primary)}.el-loading-fade-enter-from,.el-loading-fade-leave-to{opacity:0}@keyframes loading-rotate{to{transform:rotate(360deg)}}@keyframes loading-dash{0%{stroke-dasharray:1 200;stroke-dashoffset:0}50%{stroke-dasharray:90 150;stroke-dashoffset:-40px}to{stroke-dasharray:90 150;stroke-dashoffset:-120px}}:root{color-scheme:light;font-family:Inter,Segoe UI,Microsoft YaHei,sans-serif;font-size:16px;line-height:1.5;--bg: #f5f7fa;--surface: #fff;--surface-soft: #f8fafc;--surface-inset: #eef2f7;--text: #1f2430;--text-soft: #5b6472;--text-faint: #98a2b3;--border: #e8ecf3;--accent: #2563eb;--accent-dark: #1d4ed8;--accent-soft: rgba(37, 99, 235, .08);--accent-contrast: #fff;--danger: #dc2626;--sidebar: #fff;--radius-sm: 12px;--radius: 14px;--radius-lg: 18px;--radius-xl: 22px;--shadow: 0 1px 2px rgba(16, 24, 40, .03), 0 10px 28px rgba(16, 24, 40, .06);--el-border-radius-base: 12px;--el-border-radius-small: 10px;--el-border-radius-round: 20px}html.dark{color-scheme:dark;--bg: #10141b;--surface: #171d27;--surface-soft: #1c2430;--surface-inset: #10151c;--text: #edf3f8;--text-soft: #a9b5c2;--text-faint: #758292;--border: #2a3442;--accent: #3b82f6;--accent-dark: #60a5fa;--accent-soft: rgba(59, 130, 246, .14);--accent-contrast: #fff;--danger: #f87171;--sidebar: #131922;--shadow: 0 1px 2px rgba(0, 0, 0, .28), 0 10px 28px rgba(0, 0, 0, .26);--el-border-radius-base: 12px;--el-border-radius-small: 10px;--el-border-radius-round: 20px}*{box-sizing:border-box}html,body,#app{min-height:100%;margin:0}body{background:var(--bg);color:var(--text)}a{color:inherit;text-decoration:none}button{font:inherit}.app-shell{min-height:100vh}.sidebar{position:fixed;inset:0 auto 0 0;z-index:20;width:272px;display:flex;flex-direction:column;background:var(--sidebar);border-right:1px solid var(--border)}.brand{display:flex;align-items:center;gap:14px;min-height:96px;padding:22px 20px;border-bottom:1px solid var(--border)}.brand-mark{display:grid;place-items:center;width:44px;height:44px;border-radius:14px;color:#fff;font-size:18px;font-weight:800;background:linear-gradient(145deg,#3b82f6,#1d4ed8);box-shadow:0 8px 20px #2563eb3d}.brand strong,.brand small{display:block}.brand strong{font-size:16px;letter-spacing:-.01em}.brand small{margin-top:4px;color:var(--text-faint);font-size:11px;letter-spacing:.08em;text-transform:uppercase}.navigation{flex:1;overflow:auto;padding:18px 14px}.nav-link{display:flex;align-items:center;gap:12px;margin:4px 0;min-height:50px;padding:12px 14px;border-radius:var(--radius);color:var(--text-soft);font-size:15px;font-weight:600;transition:.18s ease}.nav-link .el-icon{font-size:20px}.nav-link:hover{color:var(--text);background:var(--surface-soft)}.nav-link.active{color:var(--accent-dark);background:var(--accent-soft);font-weight:700}.sidebar-footer{display:flex;flex-direction:column;gap:4px;padding:14px 16px 18px;border-top:1px solid var(--border)}.sidebar-footer .nav-link,.sidebar-footer .help-link{margin:0;min-height:40px;padding:8px 12px;font-size:13px;font-weight:550}.sidebar-footer .nav-link .el-icon{font-size:16px}.sidebar-footer .github-link{padding:0 14px;color:var(--text-faint);font-size:12px}.sidebar-footer .github-link:hover{color:var(--text-soft)}.icon-button{display:grid;place-items:center;width:34px;height:34px;padding:0;color:var(--text-soft);background:transparent;border:1px solid transparent;border-radius:9px;cursor:pointer}.icon-button:hover{background:var(--surface-soft);border-color:var(--border)}.app-content{min-height:100vh;margin-left:272px}.mobile-header{display:none}.home-page{max-width:1240px;margin:0 auto;padding:64px 6vw 38px}.hero{position:relative;display:grid;grid-template-columns:1.3fr .7fr;min-height:430px;overflow:hidden;background:var(--surface);border:1px solid var(--border);border-radius:22px;box-shadow:var(--shadow)}.hero-copy{z-index:2;align-self:center;max-width:680px;padding:62px}.eyebrow{color:var(--accent);font-size:10px;font-weight:750;letter-spacing:.17em}.hero h1{max-width:660px;margin:18px 0;font-size:clamp(38px,5vw,66px);line-height:1.04;letter-spacing:-.045em}.hero p{max-width:570px;margin:0;color:var(--text-soft);font-size:17px;line-height:1.8}.hero-actions{display:flex;gap:12px;margin-top:32px}.primary-action,.secondary-action{display:inline-flex;align-items:center;justify-content:center;min-height:42px;padding:0 18px;border-radius:var(--radius);font-size:13px;font-weight:650}.primary-action{color:#fff;background:var(--accent)}.secondary-action{color:var(--text);background:var(--surface-soft);border:1px solid var(--border)}.hero-visual{position:relative;overflow:hidden;background:#102833}.visual-grid{position:absolute;inset:0;opacity:.25;background-image:linear-gradient(rgba(98,203,225,.3) 1px,transparent 1px),linear-gradient(90deg,rgba(98,203,225,.3) 1px,transparent 1px);background-size:32px 32px;transform:perspective(500px) rotateY(-15deg) scale(1.3)}.core{position:absolute;top:50%;left:50%;display:grid;place-items:center;width:84px;height:84px;transform:translate(-50%,-50%);color:#dff9ff;border:1px solid rgba(134,225,244,.6);border-radius:25px;background:#175968b3;box-shadow:0 0 60px #45cae559;font-size:32px;font-weight:800}.orbit{position:absolute;top:50%;left:50%;border:1px solid rgba(116,216,236,.3);border-radius:50%;transform:translate(-50%,-50%) rotate(-20deg)}.orbit-one{width:240px;height:130px}.orbit-two{width:360px;height:210px;transform:translate(-50%,-50%) rotate(35deg)}.portal-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:18px}.portal-card{position:relative;min-height:220px;padding:28px;overflow:hidden;background:var(--surface);border:1px solid var(--border);border-radius:16px;transition:.2s ease}.portal-card:hover{transform:translateY(-3px);border-color:var(--accent);box-shadow:var(--shadow)}.portal-card:after{content:"";position:absolute;right:-30px;bottom:-45px;width:130px;height:130px;border:26px solid var(--accent-soft);border-radius:50%}.portal-index{color:var(--text-faint);font:11px/1 ui-monospace,monospace}.portal-card h2{margin:34px 0 10px;font-size:20px}.portal-card p{max-width:270px;color:var(--text-soft);font-size:13px;line-height:1.65}.portal-link{position:absolute;bottom:26px;color:var(--accent-dark);font-size:12px;font-weight:700}.portal-link b{margin-left:7px}.status-strip{display:flex;justify-content:space-between;margin-top:18px;padding:14px 18px;color:var(--text-faint);border-top:1px solid var(--border);font-size:11px}.status-dot{display:inline-block;width:7px;height:7px;margin-right:8px;background:#16a085;border-radius:50%}.home-credit{margin:14px 2px 0;color:var(--text-faint);font-size:12px;line-height:1.55}.home-credit a{color:var(--accent-dark);font-weight:650}.training-layout{display:grid;grid-template-columns:minmax(0,1fr) clamp(340px,32%,460px);min-height:100vh}.form-canvas{padding:50px clamp(28px,5vw,72px);background:var(--bg)}.section-heading{margin-bottom:28px}.section-heading>span{color:var(--accent);font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}.section-heading h1{margin:10px 0;font-size:30px}.section-heading p{max-width:700px;color:var(--text-soft);line-height:1.7}.form-skeleton{margin-bottom:16px;padding:22px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg)}.skeleton-title{margin-bottom:18px;padding-bottom:12px;border-bottom:1px solid var(--border);font-size:14px;font-weight:700}.skeleton-row{display:grid;grid-template-columns:130px 1fr;gap:18px;margin:14px 0}.skeleton-row span,.skeleton-row b{height:12px;border-radius:6px;background:var(--surface-inset)}.skeleton-row b{height:38px}.control-panel{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;padding:38px 28px 28px;background:var(--surface);border-left:1px solid var(--border)}.panel-copy h2{margin:12px 0 8px;font-size:26px}.panel-copy p{color:var(--text-soft);font-size:13px;line-height:1.65}.panel-copy code{color:var(--accent)}.preview-panel{flex:1;min-height:180px;margin:26px 0 18px;overflow:hidden;border:1px solid var(--border);border-radius:12px}.preview-panel header{display:flex;align-items:center;gap:8px;padding:13px 16px;border-bottom:1px solid var(--border);font-size:12px;font-weight:700}.preview-panel pre{height:100%;margin:0;padding:18px;color:var(--text);background:var(--surface-inset);font:12px/1.7 ui-monospace,monospace}.disabled-action{min-height:42px;color:var(--text-faint);background:var(--surface-inset);border:1px solid var(--border);border-radius:10px}.training-layout{transition:grid-template-columns .25s ease}.training-layout.preview-docked{grid-template-columns:minmax(0,1fr) 76px}.control-panel.collapsed{padding:16px 8px 18px;background:var(--surface);border-left:1px solid var(--border)}.training-layout.bare .control-panel.collapsed{padding:16px 8px 18px}.panel-full{display:flex;flex:1;min-height:0;flex-direction:column}.panel-rail,.control-panel.collapsed .panel-full{display:none}.control-panel.collapsed .panel-rail{display:flex;flex:1;min-height:0;flex-direction:column;align-items:center;gap:12px}.rail-handle{display:flex;flex-direction:column;align-items:center;gap:8px;width:60px;min-height:200px;padding:12px 6px;color:var(--text-soft);background:var(--surface-soft);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;font-size:13px;font-weight:700;box-shadow:var(--shadow)}.rail-handle:hover{color:var(--accent-dark);border-color:#2563eb59;background:#fff}.rail-label{display:block;writing-mode:horizontal-tb;letter-spacing:0;font-size:13px;font-weight:700;line-height:1.2;text-align:center;white-space:pre-line}.rail-handle b{display:inline-flex;align-items:center;justify-content:center;min-width:28px;min-height:22px;padding:0 6px;color:var(--accent-dark);background:var(--accent-soft);border-radius:999px;font-size:11px;font-weight:700}.rail-alert{width:8px;height:8px;border-radius:50%;background:#d97706}.rail-alert.error{background:#dc2626}.rail-submit{display:inline-flex;align-items:center;justify-content:center;margin-top:auto;width:60px;min-height:76px;padding:10px 6px;border:0;border-radius:var(--radius);cursor:pointer;writing-mode:horizontal-tb;letter-spacing:0;font-size:13px;font-weight:700;line-height:1.25;text-align:center;white-space:pre-line;box-shadow:0 6px 16px #2563eb38}.rail-submit:disabled{opacity:.5;cursor:not-allowed;box-shadow:none}.rail-arrow{font-size:14px;line-height:1;color:var(--accent)}.form-canvas.with-schema-toc{padding-left:0;padding-top:0}.schema-form-shell{display:grid;grid-template-columns:minmax(0,1fr);align-items:stretch;min-height:100%}.schema-form-shell.has-toc{position:relative;grid-template-columns:18px minmax(0,1fr);gap:0;min-height:100vh;transition:grid-template-columns .18s ease}.schema-form-shell.has-toc:has(.schema-toc.open){grid-template-columns:188px minmax(0,1fr)}.schema-toc{position:sticky;top:0;z-index:12;align-self:start;width:100%;height:100vh;max-height:100vh;overflow:visible}.schema-toc-seam{position:absolute;inset:0;z-index:2;display:grid;place-items:start center;width:18px;padding:14px 0 0;border:0;background:linear-gradient(180deg,#2563eb8c,#2563eb2e 42%,#2563eb0f);cursor:pointer}.schema-toc.open .schema-toc-seam{opacity:0;pointer-events:none;background:transparent}.schema-toc-seam-icon{margin-left:1px;color:#fff;filter:drop-shadow(0 0 2px rgba(37,99,235,.65));transition:opacity .15s ease;opacity:.9}.schema-toc-seam:hover{background:linear-gradient(180deg,#2563ebc7,#2563eb47 42%,#2563eb1a)}.schema-toc.empty .schema-toc-seam{opacity:.3;cursor:default}.schema-toc.empty .schema-toc-seam:hover{background:linear-gradient(180deg,#2563eb8c,#2563eb2e 42%,#2563eb0f)}.schema-toc-panel{position:relative;z-index:3;display:none;flex-direction:column;width:100%;height:100vh;max-height:100vh;color:var(--text);background:var(--surface);border-right:1px solid var(--border)}.schema-toc.open .schema-toc-panel{display:flex}.schema-toc-head{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:52px;padding:14px 12px 10px;border-bottom:1px solid var(--border)}.schema-toc-caption{margin:0;color:var(--text);font-size:12px;font-weight:750;letter-spacing:.04em}.schema-toc-toggle.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;min-width:28px;min-height:28px;padding:0;color:var(--text-soft);background:var(--surface-soft);border:1px solid var(--border);border-radius:7px;cursor:pointer}.schema-toc-toggle.icon-btn:hover{color:var(--accent-dark);border-color:var(--accent)}.schema-toc-list{display:flex;flex:1;flex-direction:column;gap:2px;padding:10px 8px 16px;overflow:auto;overscroll-behavior:contain;scrollbar-width:thin}.schema-toc-tab{display:grid;grid-template-columns:3px minmax(0,1fr);align-items:center;gap:8px;width:100%;min-height:36px;padding:8px 10px;color:var(--text-soft);background:transparent;border:0;border-radius:9px;text-align:left;font-size:12px;font-weight:600;line-height:1.35;cursor:pointer}.schema-toc-tab i{display:block;height:14px;border-radius:99px;background:transparent}.schema-toc-tab span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.schema-toc-tab:hover{color:var(--text);background:var(--surface-soft)}.schema-toc-tab.active{color:var(--accent-dark);background:var(--accent-soft)}.schema-toc-tab.active i{background:var(--accent)}.schema-form-binder{min-width:0}.form-canvas.with-schema-toc .schema-form-binder{padding:42px clamp(28px,5vw,56px) 40px 16px;background:var(--bg)}@media(max-width:900px){.form-canvas.with-schema-toc{padding-left:clamp(28px,5vw,72px);padding-top:50px}.schema-form-shell.has-toc{grid-template-columns:1fr}.schema-toc{display:none}.form-canvas.with-schema-toc .schema-form-binder{padding:0}}@media(max-width:900px){.training-layout.preview-docked{grid-template-columns:1fr}.control-panel.collapsed{padding:38px 28px 28px}.training-layout.bare .control-panel.collapsed{padding:24px}.control-panel.collapsed .panel-rail{display:none}.control-panel.collapsed .panel-full{display:flex}}.migration-page{max-width:780px;margin:0 auto;padding:12vh 40px}.migration-page h1{margin:15px 0;font-size:clamp(36px,6vw,62px);letter-spacing:-.045em}.migration-page>p{max-width:650px;color:var(--text-soft);font-size:17px;line-height:1.8}.migration-note{display:grid;gap:8px;margin:32px 0;padding:20px;background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:10px}.migration-note span{color:var(--text-soft);line-height:1.6}.integration-page{height:100vh;display:flex;flex-direction:column;padding:28px}.integration-page>header{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}.integration-page h1{margin:5px 0 0;font-size:25px}.integration-page header a{color:var(--accent);font-size:12px;font-weight:700}.integration-page iframe{flex:1;width:100%;background:#fff;border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow)}.sidebar-mask{display:none}.tasks-page{max-width:1120px;margin:0 auto;padding:52px clamp(24px,5vw,68px)}.tasks-header{display:flex;align-items:flex-end;justify-content:space-between;gap:24px}.tasks-header h1{margin:10px 0 6px;font-size:36px;letter-spacing:-.04em}.tasks-header p{margin:0;color:var(--text-soft)}.refresh-button{display:flex;align-items:center;gap:8px;padding:10px 14px;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:10px;cursor:pointer}.refresh-button:disabled{opacity:.55}.task-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:30px 0 18px}.task-summary div{display:flex;align-items:baseline;gap:10px;padding:18px 20px;background:var(--surface);border:1px solid var(--border);border-radius:12px}.task-summary strong{font-size:24px}.task-summary span{color:var(--text-faint);font-size:11px;text-transform:uppercase;letter-spacing:.08em}.task-empty,.task-error{display:grid;place-items:center;gap:9px;min-height:260px;padding:30px;text-align:center;color:var(--text-soft);background:var(--surface);border:1px solid var(--border);border-radius:14px}.task-empty strong,.task-error strong{color:var(--text);font-size:18px}.task-error{border-left:3px solid #dc2626}.task-error button{padding:8px 15px;color:#fff;background:#b42318;border:0;border-radius:8px;cursor:pointer}.task-list{display:grid;gap:10px}.task-card{display:grid;grid-template-columns:minmax(0,1fr) 90px auto;align-items:center;gap:22px;padding:20px;background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--text-faint);border-radius:12px}.task-card[data-status=running]{border-left-color:var(--accent)}.task-card[data-status=finished]{border-left-color:#059669}.task-card[data-status=failed]{border-left-color:#dc2626}.task-card[data-status=terminated]{border-left-color:#d97706}.task-title-row{display:flex;align-items:center;gap:10px}.task-title-row h2{margin:0;font-size:15px}.task-status{padding:4px 7px;color:var(--accent-dark);background:var(--accent-soft);border-radius:6px;font-size:10px;font-weight:750}.task-main code{display:block;margin:8px 0 5px;color:var(--text-faint);font-size:10px}.task-main p{overflow:hidden;margin:0;color:var(--text-soft);font-size:12px;text-overflow:ellipsis;white-space:nowrap}.task-meta{display:grid;gap:4px;text-align:center}.task-meta span{color:var(--text-faint);font-size:10px}.task-meta strong{font-size:14px}.task-actions{display:flex;align-items:center;gap:8px}.task-actions a,.task-actions button{padding:8px 11px;border-radius:8px;font-size:11px;font-weight:700}.task-actions a{color:var(--accent-dark);background:var(--accent-soft)}.task-actions button{color:#b42318;background:transparent;border:1px solid rgba(220,38,38,.3);cursor:pointer}.task-actions button:disabled{opacity:.5}@media(max-width:900px){.mobile-header{position:sticky;top:0;z-index:15;height:58px;display:flex;align-items:center;justify-content:space-between;padding:0 14px;background:var(--surface);border-bottom:1px solid var(--border)}.mobile-brand{font-size:14px;font-weight:750}.sidebar{transform:translate(-100%);transition:transform .22s ease}.sidebar.is-open{transform:translate(0)}.sidebar-mask{position:fixed;inset:0;z-index:19;display:block;width:100%;height:100%;background:#080f1873;border:0}.app-content{margin-left:0}.home-page{padding:22px 16px 30px}.hero{grid-template-columns:1fr}.hero-copy{padding:38px 28px}.hero-visual{min-height:220px}.portal-grid{grid-template-columns:1fr}.status-strip{flex-direction:column;gap:8px}.training-layout{grid-template-columns:1fr}.control-panel{position:static;height:auto;min-height:500px;border-top:1px solid var(--border);border-left:0}.integration-page{height:calc(100vh - 58px);padding:14px}.task-card{grid-template-columns:1fr}.task-meta{text-align:left}.task-actions{justify-content:flex-start}}@media(max-width:520px){.hero h1{font-size:39px}.hero-actions{align-items:stretch;flex-direction:column}.form-canvas{padding:30px 18px}.skeleton-row{grid-template-columns:1fr;gap:7px}.migration-page{padding:10vh 22px}.tasks-page{padding:30px 16px}.tasks-header{align-items:flex-start;flex-direction:column}.task-summary{grid-template-columns:1fr}.task-actions{align-items:stretch;flex-direction:column}.task-actions a,.task-actions button{text-align:center}}.section-heading p,.panel-copy p,.hero p,.portal-card p{line-height:1.55}.task-main p,.task-actions a,.task-actions button,.task-status,.task-main code,.task-meta span{font-size:12px}.simple-page{max-width:860px;margin:0 auto;padding:60px clamp(24px,6vw,80px)}.simple-page header h1{margin:10px 0 8px;font-size:38px;letter-spacing:-.04em}.simple-page header p{color:var(--text-soft);line-height:1.7}.settings-card{display:grid;gap:10px;margin-top:30px;padding:26px;background:var(--surface);border:1px solid var(--border);border-radius:14px}.settings-card label,.argument-heading strong{font-size:12px;font-weight:750}.settings-card small{color:var(--text-faint);line-height:1.5}.settings-card input,.settings-card select{width:100%;min-height:40px;padding:0 12px;color:var(--text);background:var(--surface-soft);border:1px solid var(--border);border-radius:9px;outline:none}.settings-card input:focus,.settings-card select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.form-actions{display:flex;gap:10px;margin-top:16px}.form-actions button{border:0;cursor:pointer}.form-actions .secondary-action{border:1px solid var(--border)}.argument-heading{display:flex;align-items:center;justify-content:space-between;margin-top:18px}.argument-heading button{padding:6px 10px;color:var(--accent-dark);background:var(--accent-soft);border:0;border-radius:7px;cursor:pointer}.argument-row{display:grid;grid-template-columns:1fr 1fr 34px;gap:8px}.argument-row button{color:#b42318;background:transparent;border:1px solid var(--border);border-radius:8px;cursor:pointer}.tagger-page{display:grid;grid-template-columns:minmax(0,1fr) 360px;min-height:100vh}.tagger-form{padding:50px clamp(24px,5vw,70px)}.tagger-form header h1{margin:10px 0 8px;font-size:36px}.tagger-form header p{color:var(--text-soft)}.tagger-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:30px;padding:24px;background:var(--surface);border:1px solid var(--border);border-radius:14px}.tagger-grid label{display:grid;gap:7px;color:var(--text-soft);font-size:12px}.tagger-grid input,.tagger-grid select{min-height:39px;padding:0 11px;color:var(--text);background:var(--surface-soft);border:1px solid var(--border);border-radius:8px}.check-row{display:flex;flex-wrap:wrap;gap:12px 22px;margin-top:15px;padding:18px 22px;background:var(--surface);border:1px solid var(--border);border-radius:12px}.check-row label{display:flex;align-items:center;gap:7px;color:var(--text-soft);font-size:12px}.tagger-status{position:sticky;top:0;height:100vh;padding:46px 28px;background:var(--surface);border-left:1px solid var(--border)}.tagger-status h2{min-height:52px;margin:16px 0 8px;font-size:19px;line-height:1.4}.tagger-status>p{color:#dc2626;font-size:12px}.meter{margin-top:28px}.meter header{display:flex;justify-content:space-between;margin-bottom:9px;color:var(--text-soft);font-size:11px}.meter>div{height:7px;overflow:hidden;background:var(--surface-inset);border-radius:99px}.meter i{display:block;height:100%;background:var(--accent);border-radius:inherit;transition:width .25s ease}.meter small{display:block;min-height:17px;margin-top:7px;overflow:hidden;color:var(--text-faint);font-size:10px;text-overflow:ellipsis;white-space:nowrap}.tagger-actions{position:absolute;right:28px;bottom:32px;left:28px;display:grid;gap:9px}.tagger-actions button{border:1px solid var(--border);cursor:pointer}.danger-action{min-height:42px;color:#b42318;background:#dc262612;border-color:#dc262640!important;border-radius:10px;font-weight:700}@media(max-width:520px){.simple-page{padding:34px 18px}.argument-row{grid-template-columns:1fr 1fr}.argument-row button{grid-column:1 / -1;min-height:34px}}@media(max-width:900px){.tagger-page{grid-template-columns:1fr}.tagger-status{position:relative;height:auto;min-height:480px;border-top:1px solid var(--border);border-left:0}}@media(max-width:600px){.tagger-form{padding:30px 16px}.tagger-grid{grid-template-columns:1fr;padding:18px}}.schema-form{display:grid;gap:16px}.schema-section{scroll-margin-top:24px;overflow:hidden;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg)}.schema-section>header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border)}.schema-section h2{margin:0;font-size:17px}.schema-section>header span{color:var(--text-faint);font-size:10px}.schema-fields{display:grid;grid-template-columns:minmax(0,1fr);gap:20px;padding:20px}.schema-field{display:flex;min-width:0;flex-direction:column;gap:7px}.field-label{display:flex;align-items:center;gap:8px}.field-label code{overflow:hidden;color:var(--text);font:650 16px/1.4 Inter,Segoe UI,Microsoft YaHei,sans-serif;letter-spacing:-.01em;text-overflow:ellipsis}.field-label b{padding:2px 5px;color:#b42318;background:#dc262614;border-radius:4px;font-size:9px}.field-description{color:var(--text-soft);font-size:15px;line-height:1.55}.schema-field .el-input-number,.schema-field .el-select{width:100%}.filepicker-control{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:6px}.field-text,.field-control{display:contents}.schema-field--compact{flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 16px}.schema-field--compact .field-text{display:flex;min-width:0;flex:1;flex-direction:column;gap:6px}.schema-field--compact .field-control{display:flex;flex:0 0 auto;align-items:center}.schema-field--compact .el-input-number,.schema-field--compact .el-select,.schema-field--compact .el-input{width:200px}.schema-field--compact .field-error{flex-basis:100%}@media(max-width:900px){.schema-field--compact{flex-direction:column;align-items:stretch}.schema-field--compact .el-input-number,.schema-field--compact .el-select,.schema-field--compact .el-input{width:100%}}.field-error{color:#dc2626;font-size:10px}.schema-field.has-error :is(.el-input__wrapper,.el-textarea__inner,.el-select__wrapper){box-shadow:0 0 0 1px #dc2626 inset}.picker-list{display:grid;max-height:55vh;gap:7px;overflow:auto}.picker-list button{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 12px;padding:12px;text-align:left;color:var(--text);background:var(--surface-soft);border:1px solid var(--border);border-radius:8px;cursor:pointer}.picker-list button:hover{border-color:var(--accent)}.picker-list span{grid-column:1/-1;overflow:hidden;color:var(--text-faint);font-size:10px;text-overflow:ellipsis;white-space:nowrap}.picker-list small{color:var(--text-faint)}.schema-state{display:grid;gap:8px;min-height:180px;place-content:center;text-align:center;color:var(--text-soft);background:var(--surface);border:1px solid var(--border);border-radius:13px}.schema-state strong{color:var(--text)}.schema-state button{justify-self:center;padding:8px 14px;color:#fff;background:var(--accent);border:0;border-radius:8px}.schema-error{border-left:3px solid #dc2626}.schema-training-layout .preview-panel{min-height:0}.schema-training-layout .preview-panel header{display:flex;justify-content:space-between}.schema-training-layout .preview-panel pre{overflow:auto;white-space:pre-wrap}.schema-validate{width:100%;margin-bottom:9px;cursor:pointer}.schema-training-layout .disabled-action{min-height:42px}@media(max-width:720px){.filepicker-control{grid-template-columns:minmax(0,1fr) auto}.filepicker-control .el-button:last-child{grid-column:1/-1;margin-left:0}}.panel-actions{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:18px}.panel-actions button{display:inline-flex;align-items:center;justify-content:center;min-height:34px;padding:0 8px;color:var(--text-soft);background:var(--surface);border:1px solid var(--border);border-radius:8px;font-size:11px;cursor:pointer}.panel-actions button:hover{color:var(--accent-dark);border-color:var(--accent)}.param-diagnostics{max-height:110px;overflow:auto;margin-top:12px;padding:10px 12px;background:#fff8e8;border:1px solid #efd59c;border-radius:9px}.param-diagnostics p{margin:3px 0;color:#8a5a08;font-size:10px;line-height:1.4}.param-diagnostics p.error{color:#b42318}.started-task{display:grid;gap:6px;margin-top:12px;padding:12px;color:var(--text-soft);background:var(--accent-soft);border:1px solid var(--accent);border-radius:9px;font-size:11px}.started-task code{overflow:hidden;color:var(--text);text-overflow:ellipsis}.started-task a{color:var(--accent-dark);font-weight:700}.train-submit{width:100%;border:0;cursor:pointer}.train-submit:disabled{opacity:.5;cursor:not-allowed}.submit-row{display:flex;gap:8px}.submit-row .train-submit,.submit-row .stop-training{flex:1;min-height:42px;margin:0}.submit-row .stop-training{color:#fff;background:#dc2626;border-color:#dc2626!important;border-radius:10px;font-weight:700}.submit-row .stop-training:hover:not(:disabled){background:#b91c1c;border-color:#b91c1c!important}.stop-training{padding:0 14px;border:1px solid;cursor:pointer}.stop-training:disabled{opacity:.5;cursor:not-allowed}.rail-stop{display:inline-flex;align-items:center;justify-content:center;width:60px;min-height:68px;padding:10px 6px;color:#b42318;background:#dc262614;border:1px solid rgba(220,38,38,.28);border-radius:var(--radius);cursor:pointer;writing-mode:horizontal-tb;letter-spacing:0;font-size:13px;font-weight:700;line-height:1.25;text-align:center;white-space:pre-line}.rail-stop:hover:not(:disabled){color:#fff;background:#dc2626;border-color:#dc2626}.rail-stop:disabled{opacity:.45;cursor:not-allowed}.config-list{display:grid;gap:8px;min-height:80px}.config-list article{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:8px;padding:12px;background:var(--surface-soft);border:1px solid var(--border);border-radius:9px}.config-list article>div{display:grid;gap:4px}.config-list span{color:var(--text-faint);font-size:10px;line-height:1.4}.config-list button{padding:6px 10px;color:var(--accent-dark);background:var(--accent-soft);border:0;border-radius:6px;cursor:pointer}.config-list button.danger{color:#b42318;background:#dc262614}.dataset-page{display:grid;grid-template-columns:260px minmax(360px,1fr) 330px;height:100vh}.dataset-side,.caption-panel{overflow:auto;padding:28px 20px;background:var(--surface)}.dataset-side{border-right:1px solid var(--border)}.dataset-side h1{margin:9px 0 24px;font-size:25px}.dataset-side>label,.batch-box{display:grid;gap:7px;margin-bottom:16px;color:var(--text-soft);font-size:11px}.dataset-side input,.dataset-side select,.batch-box input,.caption-panel textarea{width:100%;padding:9px;color:var(--text);background:var(--surface-soft);border:1px solid var(--border);border-radius:8px}.dataset-side>.primary-action{width:100%;margin-bottom:24px;border:0}.batch-box{margin-top:26px;padding-top:20px;border-top:1px solid var(--border)}.batch-box button{min-height:36px;color:var(--accent-dark);background:var(--accent-soft);border:0;border-radius:8px;cursor:pointer}.dataset-gallery{display:flex;min-width:0;flex-direction:column;overflow:auto;padding:24px}.dataset-gallery>header{display:flex;justify-content:space-between;margin-bottom:16px}.dataset-gallery header button{margin-left:7px;padding:6px 10px;color:var(--text-soft);background:var(--surface);border:1px solid var(--border);border-radius:7px}.image-grid{display:grid;flex:1;align-content:start;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}.image-grid button{overflow:hidden;padding:0;text-align:left;background:var(--surface);border:2px solid transparent;border-radius:10px;cursor:pointer}.image-grid button.active{border-color:var(--accent)}.image-grid img{display:block;width:100%;aspect-ratio:1;object-fit:contain;background:var(--surface-inset)}.image-grid span{display:block;overflow:hidden;padding:9px;font-size:10px;text-overflow:ellipsis;white-space:nowrap}.caption-panel{border-left:1px solid var(--border)}.caption-panel>div{display:grid;gap:13px}.caption-panel img{width:100%;max-height:38vh;object-fit:contain;background:var(--surface-inset);border-radius:10px}.caption-panel strong{overflow-wrap:anywhere;font-size:11px}.caption-panel textarea{resize:vertical;line-height:1.6}.caption-panel .primary-action{border:0}.caption-panel>p{color:var(--text-soft);font-size:12px}@media(max-width:1100px){.dataset-page{grid-template-columns:230px 1fr}.caption-panel{grid-column:1/-1;border-top:1px solid var(--border);border-left:0}.caption-panel>div{grid-template-columns:180px 1fr}.caption-panel img{grid-row:1/4}}@media(max-width:700px){.dataset-page{display:block;height:auto}.dataset-side,.dataset-gallery,.caption-panel{overflow:visible}.caption-panel>div{display:grid;grid-template-columns:1fr}.caption-panel img{grid-row:auto}}.replace-row{display:grid;grid-template-columns:1fr 1fr;gap:6px}.path-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px}.path-row button{padding:0 12px;color:var(--accent-dark);background:var(--accent-soft);border:0;border-radius:8px;cursor:pointer}.path-row button:disabled{opacity:.5;cursor:not-allowed}.dataset-empty{display:grid;flex:1;place-content:center;gap:8px;text-align:center;color:var(--text-soft)}.dataset-empty strong{color:var(--text);font-size:14px}.dataset-empty span{max-width:360px;font-size:12px;line-height:1.7}.batch-box>label{display:flex;align-items:center;gap:7px}.batch-box>label input{width:auto}.quick-tag-box{display:grid;gap:8px;padding-top:18px;border-top:1px solid var(--border);font-size:11px}.quick-tag-box>div,.caption-tags{display:flex;flex-wrap:wrap;gap:5px;max-height:170px;overflow:auto}.quick-tag-box button,.caption-tags button{padding:4px 7px;color:var(--accent-dark);background:var(--accent-soft);border:0;border-radius:6px;font-size:10px;cursor:pointer}.quick-tag-box button.suggested{color:var(--text-soft);background:var(--surface-inset)}.quick-tag-box>span{display:grid;grid-template-columns:1fr auto;gap:5px}.quick-tag-box>span button{padding:0 10px}.quick-tag-box>small{color:var(--text-faint)}.image-grid button{position:relative}.image-grid button.checked{box-shadow:0 0 0 2px var(--accent-soft)}.image-grid button>i{position:absolute;top:7px;right:7px;z-index:1;display:grid;width:21px;height:21px;place-items:center;color:#fff;background:var(--accent);border-radius:50%;font-size:11px;font-style:normal}.dataset-pager{display:flex;align-items:center;justify-content:center;gap:7px;margin-top:auto;padding:22px 0}.dataset-pager button,.dataset-pager select{padding:6px 9px;color:var(--text-soft);background:var(--surface);border:1px solid var(--border);border-radius:7px}.dataset-pager button:disabled{opacity:.4}.caption-tags{max-height:110px}.dataset-history{display:grid;gap:9px}.dataset-history article{padding:12px;background:var(--surface-soft);border:1px solid var(--border);border-radius:9px}.dataset-history article>header{display:flex;justify-content:space-between}.dataset-history article>header span{color:var(--text-faint);font-size:10px}.dataset-history summary{margin-top:8px;color:var(--accent-dark);font-size:11px;cursor:pointer}.dataset-history details>div{display:grid;grid-template-columns:1fr 1fr;gap:5px 10px;margin-top:9px;padding-top:9px;border-top:1px solid var(--border);font-size:10px}.dataset-history code{grid-column:1/-1;overflow-wrap:anywhere}.dataset-history del{color:#b42318;text-decoration:none}.dataset-history ins{color:#087f5b;text-decoration:none}.schema-field,.training-toolbar button,.training-toolbar label,.started-task,.config-list,.dataset-side>label,.batch-box,.quick-tag-box{font-size:13px}.field-label code{font-size:16px}.field-description{font-size:15px}.schema-section>header span,.field-error,.config-list span,.picker-list span,.picker-list small{font-size:12px}.field-description{min-height:0;line-height:1.5}.param-diagnostics p,.image-grid span,.dataset-history article>header span,.dataset-history summary,.dataset-history details>div{font-size:12px}.caption-panel strong,.quick-tag-box button,.caption-tags button{font-size:12px}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.workbench-page{min-height:100vh;padding:36px clamp(24px,4vw,56px);background:var(--bg)}.workbench-header{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:22px}.workbench-header h1{margin:0 0 6px;font-size:28px;letter-spacing:-.02em}.workbench-header p{margin:0;color:var(--text-soft);font-size:13px}.ghost-button{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:0 14px;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:9px;font-size:12px;font-weight:600;cursor:pointer;transition:.15s ease}.ghost-button:hover{color:var(--accent);border-color:var(--accent)}.workbench-selector{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:22px}.selector-card{padding:18px 20px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow)}.selector-card h2{margin:0 0 12px;font-size:14px}.selector-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.selector-hint{grid-column:1/-1;margin:10px 0 0;color:var(--text-faint);font-size:11px}.selector-grid label{display:grid;gap:7px;color:var(--text-soft);font-size:12px}.selector-grid select{min-height:38px;padding:0 11px;color:var(--text);background:var(--surface-soft);border:1px solid var(--border);border-radius:8px}.selector-grid select:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 3px var(--accent-soft)}.segmented{display:flex;overflow:hidden;gap:3px;padding:3px;background:var(--surface-inset);border:1px solid transparent;border-radius:999px}.segmented button{flex:1;min-height:38px;padding:0 12px;color:var(--text-soft);background:transparent;border:0;border-radius:999px;font-size:12px;font-weight:600;cursor:pointer;transition:.15s ease}.segmented button.active{color:var(--accent-dark);background:var(--surface);box-shadow:0 1px 3px #10182814}.segmented button:disabled{color:var(--text-faint);cursor:not-allowed;opacity:.55}.unsupported-hint{display:grid;min-height:200px;place-content:center;text-align:center;color:var(--text-soft);background:var(--surface);border:1px dashed var(--border);border-radius:var(--radius-lg)}.preview-actions{display:inline-flex;gap:6px;margin-left:auto}.preview-actions button{padding:4px 9px;color:var(--text-soft);background:var(--surface-soft);border:1px solid var(--border);border-radius:6px;font-size:11px;cursor:pointer}.preview-actions button:hover{color:var(--accent);border-color:var(--accent)}@media(max-width:900px){.workbench-selector{grid-template-columns:1fr}.workbench-header{flex-direction:column}}.dataset-section{min-height:100vh;background:var(--bg)}.dataset-section-header{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:18px;padding:20px clamp(20px,3vw,40px);background:var(--surface);border-bottom:1px solid var(--border)}.dataset-section-header h1{margin:0;font-size:22px;letter-spacing:-.01em}.dataset-switch{min-width:260px;justify-self:center}.segmented a{flex:1;display:inline-flex;align-items:center;justify-content:center;min-height:38px;padding:0 12px;border-radius:999px;color:var(--text-soft);font-size:12px;font-weight:600;transition:.15s ease}.segmented a.active{color:var(--accent-dark);background:var(--surface);box-shadow:0 1px 3px #10182814}.caption-editor{display:grid;gap:4px}.caption-count{justify-self:end;color:var(--text-faint);font-size:11px}.caption-chips{display:flex;flex-wrap:wrap;gap:6px}.chip{display:inline-flex;align-items:center;gap:5px;padding:4px 6px 4px 10px;color:var(--accent-dark);background:var(--accent-soft);border-radius:7px;font-size:12px}.chip button{display:grid;width:16px;height:16px;place-items:center;padding:0;color:inherit;background:transparent;border:0;border-radius:50%;font-size:12px;cursor:pointer}.chip button:hover{background:#2563eb2e}.chip-add{display:inline-flex;gap:5px}.chip-add input{width:90px;min-height:26px;padding:0 8px;color:var(--text);background:var(--surface-soft);border:1px solid var(--border);border-radius:7px;font-size:12px}.chip-add button{padding:0 10px;color:var(--accent-dark);background:var(--accent-soft);border:0;border-radius:7px;font-size:12px;cursor:pointer}@media(max-width:700px){.dataset-section-header{grid-template-columns:1fr;justify-items:stretch}.dataset-switch{min-width:0;justify-self:stretch}}.tasks-board{min-height:100vh;padding:28px clamp(20px,3vw,44px);background:var(--bg)}.tasks-board-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}.tasks-board-header h1{margin:0;font-size:24px;letter-spacing:-.01em}.tasks-columns{display:grid;grid-template-columns:300px minmax(0,1fr);gap:16px;align-items:start}.tasks-list-panel{padding:14px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow)}.tasks-tabs{display:flex;gap:6px;margin-bottom:12px}.tasks-tabs button{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:34px;color:var(--text-soft);background:transparent;border:0;border-radius:8px;font-size:12px;font-weight:600;cursor:pointer}.tasks-tabs button.active{color:var(--accent);background:var(--accent-soft)}.tasks-tabs b{padding:1px 7px;color:var(--text-faint);background:var(--surface-inset);border-radius:99px;font-size:11px;font-weight:600}.tasks-tabs button.active b{color:var(--accent);background:var(--surface)}.tasks-tab-empty{padding:26px 0;text-align:center;color:var(--text-faint);font-size:12px}.task-row{display:grid;gap:6px;padding:12px;border:1px solid transparent;border-radius:10px;cursor:pointer;transition:.15s ease}.task-row:hover{background:var(--surface-soft)}.task-row.selected{border-color:var(--accent);background:var(--accent-soft)}.task-row h2{margin:0;font-size:13px}.task-row code{overflow:hidden;color:var(--text-faint);font-size:11px;text-overflow:ellipsis;white-space:nowrap}.task-row .task-status{justify-self:start}.task-status{display:inline-block;padding:3px 8px;color:var(--accent-dark);background:var(--accent-soft);border-radius:6px;font-size:11px;font-weight:650}.task-row[data-status=finished] .task-status,.task-detail[data-status=finished] .task-status{color:#047857;background:#0596691a}.task-row[data-status=failed] .task-status,.task-detail[data-status=failed] .task-status{color:var(--danger);background:#dc262614}.task-row[data-status=terminated] .task-status,.task-detail[data-status=terminated] .task-status{color:#b45309;background:#d977061a}.task-detail{padding:22px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow)}.task-detail-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:18px}.task-detail-title{display:flex;align-items:center;gap:10px}.task-detail-title h2{margin:0;font-size:20px}.task-detail .danger-action{padding:0 16px;cursor:pointer}.task-meta-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;margin:0 0 18px;padding:16px;background:var(--surface-soft);border:1px solid var(--border);border-radius:10px}.task-meta-grid dt{color:var(--text-faint);font-size:11px}.task-meta-grid dd{overflow:hidden;margin:4px 0 0;font-size:13px;text-overflow:ellipsis;white-space:nowrap}.task-detail-actions{display:flex;gap:8px}.task-placeholder{display:grid;place-content:center;gap:6px;margin-top:18px;padding:16px;text-align:center;color:var(--text-faint);background:var(--surface-soft);border:1px dashed var(--border);border-radius:9px}.task-placeholder header{color:var(--text-soft);font-size:12px;font-weight:650}.task-placeholder p{margin:0;font-size:12px}.task-preview-strip{min-height:130px}.task-loss-panel{min-height:300px}.task-placeholder.has-data{display:block;place-content:unset;text-align:left}.task-placeholder.has-data header{margin-bottom:10px;text-align:left}.task-log-panel{margin-top:18px;background:var(--surface-soft);border:1px solid var(--border);border-radius:9px}.log-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;cursor:pointer;-webkit-user-select:none;user-select:none}.log-title{display:inline-flex;align-items:center;gap:8px;color:var(--text-soft);font-size:12px;font-weight:650}.log-alert{width:7px;height:7px;border-radius:50%;background:#dc2626}.log-toggle{padding:4px 10px;color:var(--text-soft);background:var(--surface);border:1px solid var(--border);border-radius:7px;font-size:11px;cursor:pointer}.log-toggle:hover{color:var(--accent);border-color:var(--accent)}.log-body{padding:0 16px 14px}.log-toolbar{display:flex;align-items:center;gap:7px;margin-bottom:10px}.log-toolbar button{padding:5px 10px;color:var(--text-soft);background:var(--surface);border:1px solid var(--border);border-radius:7px;font-size:11px;cursor:pointer}.log-toolbar button:hover:not(:disabled){color:var(--accent);border-color:var(--accent)}.log-toolbar button.active{color:var(--accent-dark);background:var(--accent-soft);border-color:var(--accent)}.log-toolbar button:disabled{opacity:.45;cursor:not-allowed}.log-count{margin-left:auto;color:var(--text-faint);font-size:10px}.log-hint{margin:0;padding:14px 0;text-align:center;color:var(--text-faint);font-size:12px}.log-lines{max-height:320px;margin:0;padding:12px 14px;overflow:auto;white-space:pre;color:var(--text);background:var(--surface-inset);border:1px solid var(--border);border-radius:8px;font:11px/1.7 ui-monospace,monospace}.preview-scroll{display:flex;gap:8px;overflow-x:auto}.preview-item{display:grid;flex:0 0 auto;gap:4px}.preview-item a{display:block;overflow:hidden;border:1px solid var(--border);border-radius:8px}.preview-item span{max-width:110px;overflow:hidden;color:var(--text-faint);font-size:10px;text-align:center;text-overflow:ellipsis;white-space:nowrap}.task-progress{margin-bottom:18px}.task-progress-meta{display:flex;align-items:baseline;gap:12px;margin-bottom:6px;color:var(--text-soft);font-size:11px}.task-progress-meta b{margin-left:auto;color:var(--text)}.task-progress-track{height:8px;overflow:hidden;background:var(--surface-inset);border-radius:99px}.task-progress-track i{display:block;height:100%;background:var(--accent);border-radius:inherit;transition:width .4s ease}.preview-scroll img{display:block;height:110px}.loss-chart svg{display:block;width:100%;height:auto;max-height:200px}.loss-chart .axis{stroke:var(--border);stroke-width:1}.loss-chart .tick{fill:var(--text-faint);font-size:10px}.loss-chart .line{fill:none;stroke-width:1.6}.loss-legend{display:flex;flex-wrap:wrap;gap:14px;margin-top:8px;color:var(--text-soft);font-size:11px}.loss-legend i{display:inline-block;width:10px;height:3px;margin-right:6px;vertical-align:middle}.loss-legend b{color:var(--text)}.task-detail-empty{display:grid;min-height:280px;place-content:center;color:var(--text-faint);font-size:13px}@media(max-width:900px){.tasks-columns{grid-template-columns:1fr}}.settings-page{min-height:100vh;padding:36px clamp(24px,4vw,56px);background:var(--bg)}.settings-page-header{margin-bottom:22px}.settings-page-header h1{margin:0 0 6px;font-size:28px;letter-spacing:-.02em}.settings-page-header p{margin:0;color:var(--text-soft);font-size:13px}.settings-body{display:grid;grid-template-columns:220px minmax(0,1fr);gap:18px;align-items:start}.settings-nav{display:grid;gap:4px;padding:12px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow)}.settings-nav-link{display:block;padding:10px 12px;color:var(--text-soft);border-radius:9px;font-size:13px;font-weight:600}.settings-nav-link:hover{color:var(--text);background:var(--surface-soft)}.settings-nav-link.active{color:var(--accent);background:var(--accent-soft)}.settings-content{display:grid;gap:16px;min-width:0}.settings-content .settings-card{margin-top:0}.settings-content .settings-card h2{margin:0 0 14px;font-size:18px}.settings-content .settings-card select{margin-top:6px;width:100%;min-height:40px;padding:0 12px;color:var(--text);background:var(--surface-soft);border:1px solid var(--border);border-radius:9px}.settings-field{display:grid;gap:7px}.settings-field-label{font-size:12px;font-weight:750}.theme-switch{max-width:320px}.settings-preview{padding:18px 20px;border:1px dashed var(--border);border-radius:var(--radius-lg)}.settings-preview>header{margin-bottom:14px;color:var(--text-faint);font-size:12px}.settings-preview-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}.settings-preview-col h3{margin:0 0 10px;font-size:14px}.settings-about-line{margin:0 0 8px}.version-badge{display:inline-block;margin-left:6px;padding:2px 8px;color:var(--accent);background:var(--accent-soft);border-radius:99px;font-size:11px;font-weight:650}.settings-about-desc{margin:0 0 10px;color:var(--text-soft);font-size:13px;line-height:1.6}.settings-release-list{display:grid;gap:8px;margin:0 0 10px;padding:0;list-style:none}.settings-release-list li{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:baseline;font-size:12px}.settings-release-list time{color:var(--text-faint)}.settings-release-list span{color:var(--text-soft)}.settings-more-link{color:var(--accent);font-size:12px;font-weight:600}.settings-content .content-page{padding:0}@media(max-width:900px){.settings-body,.settings-preview-grid{grid-template-columns:1fr}}.settings-content .content-page{max-width:none;margin:0;padding:0}.training-layout.bare{min-height:0}.training-layout.bare .form-canvas{padding:0;background:transparent}.training-layout.bare .control-panel{position:sticky;top:20px;height:auto;max-height:calc(100vh - 40px);overflow:auto;padding:24px;background:transparent;border:0;box-shadow:none}.training-layout.bare .preview-panel{margin-top:0}@media(max-width:900px){.training-layout.bare .control-panel{position:static;max-height:none;min-height:0}}.workbench-selector{grid-template-columns:1fr;margin-bottom:18px}.workbench-fallback{display:grid;gap:16px}.workbench-page .fast-page{min-height:0;gap:24px}.fast-page.bare .fast-intro{align-self:start;padding:0}.fast-page.bare .fast-state{margin-top:0}.fast-page.bare{grid-template-columns:minmax(0,1fr) clamp(320px,32%,460px)}.fast-page.bare .install-console{align-self:start;height:min(560px,60vh);min-height:320px;max-height:calc(100vh - 40px)}.workbench-page .install-console{margin:0}.schema-section,.form-skeleton,.schema-state,.selector-card,.settings-card,.tagger-grid,.check-row,.preview-panel,.unsupported-hint{border-radius:var(--radius-lg)}.primary-action,.secondary-action,.danger-action,.train-submit,.stop-training,.schema-validate,.ghost-button,.refresh-button{border-radius:var(--radius)}.panel-actions button,.config-list button,.preview-actions button,.schema-toc-toggle.icon-btn,.schema-toc-tab,.filepicker-control .el-button,.schema-field .el-button{border-radius:var(--radius-sm)}.schema-field :is(.el-input__wrapper,.el-textarea__inner,.el-select__wrapper,.el-input-number){border-radius:var(--radius-sm)}.schema-field .el-input__wrapper,.schema-field .el-select__wrapper{box-shadow:0 0 0 1px var(--border) inset}.schema-field .el-input__wrapper:hover,.schema-field .el-select__wrapper:hover{box-shadow:0 0 0 1px #2563eb59 inset}.nav-link{border-radius:var(--radius)}.chip,.chip-add input,.chip-add button{border-radius:999px}.task-row,.task-detail,.task-placeholder,.task-summary div{border-radius:var(--radius-lg)}.tasks-tabs,.tasks-tabs button{border-radius:999px}.fast-page{display:grid;grid-template-columns:minmax(380px,.8fr) minmax(460px,1.2fr);min-height:100vh}.fast-main{min-width:0}.fast-intro{align-self:center;padding:40px clamp(30px,6vw,90px) 70px}.fast-intro h1{margin:14px 0 10px;font-size:clamp(42px,6vw,72px);line-height:1;letter-spacing:-.055em}.fast-intro>p{color:var(--text-soft);font-size:16px}.fast-state{display:flex;align-items:center;justify-content:space-between;margin:35px 0;padding:18px;background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:10px}.fast-state span{font-weight:700}.fast-state strong{color:var(--text-faint);font:10px/1 ui-monospace,monospace;text-transform:uppercase}.fast-state[data-state=broken]{border-left-color:#dc2626}.audit-errors{padding:17px;color:#b42318;background:#dc26260f;border-radius:10px}.audit-errors p{margin:8px 0;font-size:11px}.fast-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:24px}.fast-actions button,.fast-actions a{border:1px solid var(--border)}.install-console{display:flex;flex-direction:column;min-width:0;margin:32px;padding:24px;background:#101820;border:1px solid #263746;border-radius:18px;box-shadow:var(--shadow)}.install-console>header{display:flex;justify-content:space-between;color:#b8ddea;font-size:12px}.install-progress{height:7px;margin:15px 0;overflow:hidden;background:#24343f;border-radius:99px}.install-progress i{display:block;height:100%;background:#22a5c2}.install-console pre{flex:1;overflow:auto;margin:0;padding:18px;color:#afc7d1;background:#0b1117;border-radius:10px;font:11px/1.65 ui-monospace,monospace;white-space:pre-wrap}@media(max-width:900px){.fast-page{grid-template-columns:1fr}.install-console{min-height:500px;margin:18px}}.engine-ready-chip{display:inline-flex;align-items:center;gap:7px;margin:-4px 0 14px;padding:0;color:#047857;font-size:12px;font-weight:600;line-height:1}.engine-ready-chip i{width:7px;height:7px;border-radius:50%;background:#10b981;box-shadow:0 0 0 3px #10b9812e}.engine-credit{margin:0 0 14px;color:var(--text-soft);font-size:12px;line-height:1.55}.engine-credit a{color:var(--accent-dark);font-weight:650}.engine-status-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:0 0 16px;padding:12px 14px;background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--text-faint);border-radius:var(--radius)}.engine-status-bar[data-state=ready]{border-left-color:#059669;background:#0596690f}.engine-status-bar[data-state=installing],.engine-status-bar[data-state=auditing]{border-left-color:var(--accent);background:var(--accent-soft)}.engine-status-bar[data-state=broken]{border-left-color:#dc2626;background:#dc26260f}.engine-status-bar[data-state=unknown],.engine-status-bar[data-state=not_installed],.engine-status-bar[data-state=installed_unverified],.engine-status-bar[data-state=disabled],.engine-status-bar[data-state=coming_soon]{border-left-color:#d97706;background:#d9770614}.engine-status-copy{display:grid;gap:2px;min-width:0}.engine-status-copy b{color:var(--text);font-size:13px}.engine-status-copy span{color:var(--text-soft);font-size:12px;line-height:1.45}.engine-status-actions{display:flex;flex-shrink:0;flex-wrap:wrap;gap:8px}.engine-status-actions .ghost-button{min-height:32px;padding:0 12px;text-decoration:none}.engines-settings{display:grid;gap:16px}.engines-lead{margin:0 0 12px;color:var(--text-soft);font-size:13px;line-height:1.5}.engines-policy{margin:0 0 16px;padding:12px 14px;background:var(--surface-soft);border:1px solid var(--border);border-radius:var(--radius)}.engines-policy strong{display:block;margin-bottom:4px;font-size:13px}.engines-policy p{margin:0;color:var(--text-soft);font-size:12px;line-height:1.5}.engines-toggle{display:flex;gap:10px;align-items:flex-start;margin:0;cursor:pointer}.engines-toggle input{width:auto;min-height:0;margin-top:3px}.engines-toggle span{display:grid;gap:2px}.engines-toggle b{font-size:13px}.engines-toggle small{color:var(--text-faint);font-size:12px;line-height:1.45}.engine-card-header{display:flex;justify-content:space-between;gap:16px;align-items:flex-start}.engine-card-header h2{margin:0 0 6px}.engine-card-header p{margin:0;color:var(--text-soft);font-size:13px;line-height:1.45}.engine-state-pill{flex-shrink:0;padding:4px 10px;border-radius:999px;font-size:11px;font-weight:700;background:var(--surface-soft);border:1px solid var(--border)}.engine-state-pill[data-state=ready]{color:#047857;border-color:#05966959;background:#05966914}.engine-state-pill[data-state=broken]{color:#b91c1c;border-color:#dc262659;background:#dc262614}.engine-state-pill[data-state=installing],.engine-state-pill[data-state=auditing]{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 35%,transparent);background:var(--accent-soft)}.engine-meta{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0 0;padding:0;list-style:none}.engine-meta li{padding:4px 8px;color:var(--text-soft);background:var(--surface-soft);border:1px solid var(--border);border-radius:8px;font-size:11px}.engine-path{display:grid;gap:4px;margin:12px 0 0;font-size:12px;color:var(--text-soft)}.engine-path code{overflow-wrap:anywhere;color:var(--text);font-size:11px}.engine-card-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}.engine-console{margin-top:16px;padding:14px;background:#101820;border:1px solid #263746;border-radius:12px}.engine-console>header{display:flex;justify-content:space-between;color:#b8ddea;font-size:12px}.engine-console pre{max-height:260px;overflow:auto;margin:0;padding:12px;color:#afc7d1;background:#0b1117;border-radius:8px;font:11px/1.65 ui-monospace,monospace;white-space:pre-wrap}@media(max-width:900px){.engine-status-bar{align-items:flex-start;flex-direction:column}.engine-card-header{flex-direction:column}}.content-page{max-width:900px;margin:0 auto;padding:58px clamp(24px,6vw,76px) 90px}.content-hero{margin-bottom:42px;padding-bottom:32px;border-bottom:1px solid var(--border)}.content-hero-split{display:flex;align-items:center;justify-content:space-between;gap:40px}.content-hero img{width:min(240px,32vw);max-height:220px;object-fit:contain}.content-hero img.about-logo{width:min(180px,28vw)}.content-hero h1{margin:12px 0 10px;font-size:clamp(38px,6vw,60px);letter-spacing:-.045em}.content-hero p{max-width:650px;margin:0;color:var(--text-soft);font-size:16px;line-height:1.6}.content-page>section{margin:34px 0}.content-page h2{margin:0 0 14px;font-size:22px}.content-page h3{margin:22px 0 8px;font-size:15px}.content-page p,.content-page li{color:var(--text-soft);font-size:15px;line-height:1.65}.content-page :is(p,li) a{color:var(--accent-dark);font-weight:650}.about-credits{margin:0;padding-left:1.2em;display:grid;gap:10px}.about-credits li{display:grid;gap:2px}.about-credits a{font-weight:700}.content-page code{padding:2px 5px;color:var(--accent-dark);background:var(--accent-soft);border-radius:4px}.content-cards{display:grid;grid-template-columns:1fr 1fr;gap:12px}.content-cards>div,.content-table>div,.release-list>article{padding:20px;background:var(--surface);border:1px solid var(--border);border-radius:12px}.content-cards h3{margin-top:0}.content-table{display:grid;gap:8px}.content-table>div{display:grid;grid-template-columns:130px 1fr;gap:18px}.content-table span{color:var(--text-soft);font-size:13px;line-height:1.6}.content-links{display:flex;flex-wrap:wrap;gap:10px}.content-links a{padding:10px 14px;color:var(--accent-dark);background:var(--accent-soft);border-radius:8px;font-size:12px;font-weight:700}.release-list{display:grid;gap:12px}.release-list>article>header{display:flex;align-items:baseline;justify-content:space-between;border-bottom:1px solid var(--border)}.release-list h2{font-size:18px}.release-list time{color:var(--text-faint);font-size:11px}.release-list ul{margin-bottom:0;padding-left:20px}.hero-visual>img{position:absolute;top:50%;left:50%;z-index:2;width:min(76%,300px);height:auto;transform:translate(-50%,-50%);filter:drop-shadow(0 20px 35px rgba(0,0,0,.32))}@media(max-width:600px){.content-page{padding:34px 18px 60px}.content-hero-split{align-items:flex-start;flex-direction:column-reverse;gap:20px}.content-hero img{width:150px}.content-cards{grid-template-columns:1fr}.content-table>div{grid-template-columns:1fr;gap:5px}} diff --git a/frontend/dist/assets/index-DILr9bpz.js b/frontend/dist/assets/index-CfMd9kCx.js similarity index 99% rename from frontend/dist/assets/index-DILr9bpz.js rename to frontend/dist/assets/index-CfMd9kCx.js index 6b5638f2..b47676f9 100644 --- a/frontend/dist/assets/index-DILr9bpz.js +++ b/frontend/dist/assets/index-CfMd9kCx.js @@ -1 +1 @@ -import{v as $,Z as x,_ as he,$ as Ee,d as Be,a0 as we,a1 as Te,a2 as Me,a3 as ke,a4 as Ie,a5 as Se,a6 as Ae,a7 as Le,h as C,D as $e,a8 as K,a9 as _,aa as ee,k as ne,ab as Re,y as Oe,l as Ve,ac as j,ad as G,ae as ze,af as De,s as B,ag as oe,ah as Pe,ai as Fe,i as S,o as d,j as m,w as g,B as H,e as w,a as v,m as i,q as V,n as se,c as z,aj as A,p as b,t as L,H as D,O as He,L as N,f as te,ak as Ne,al as Ue,am as ie,an as ue,ao as ae,ap as de,aq as le,ar as Ke,as as je}from"./index-BlvrX0Zy.js";const q="_trap-focus-children",h=[],re=e=>{if(h.length===0)return;const n=he(e),s=h[h.length-1][q];if(s.length>0&&n===Ee.tab){if(s.length===1){e.preventDefault(),document.activeElement!==s[0]&&s[0].focus();return}const l=e.shiftKey,r=e.target===s[0],t=e.target===s[s.length-1];r&&l&&(e.preventDefault(),s[s.length-1].focus()),t&&!l&&(e.preventDefault(),s[0].focus())}},qe={beforeMount(e){e[q]=x(e),h.push(e),h.length<=1&&document.addEventListener("keydown",re)},updated(e){$(()=>{e[q]=x(e)})},unmounted(){h.shift(),h.length===0&&document.removeEventListener("keydown",re)}};var Ge=Be({name:"ElMessageBox",directives:{TrapFocus:qe},components:{ElButton:Ae,ElFocusTrap:Se,ElInput:Ie,ElOverlay:ke,ElIcon:Me,...Te},inheritAttrs:!1,props:{buttonSize:{type:String,validator:we},modal:{type:Boolean,default:!0},lockScroll:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},closeOnHashChange:{type:Boolean,default:!0},center:Boolean,draggable:Boolean,overflow:Boolean,roundButton:Boolean,container:{type:String,default:"body"},boxType:{type:String,default:""}},emits:["vanish","action"],setup(e,{emit:n}){const{locale:s,zIndex:l,ns:r,size:t}=Le("message-box",C(()=>e.buttonSize)),{t:c}=s,{nextZIndex:f}=l,p=B(!1),o=$e({autofocus:!0,beforeClose:null,callback:null,cancelButtonText:"",cancelButtonClass:"",confirmButtonText:"",confirmButtonClass:"",cancelButtonType:"",confirmButtonType:"primary",customClass:"",customStyle:{},dangerouslyUseHTMLString:!1,distinguishCancelAndClose:!1,icon:"",closeIcon:"",inputPattern:null,inputPlaceholder:"",inputType:"text",inputValue:"",inputValidator:void 0,inputErrorMessage:"",message:"",modalFade:!0,modalClass:"",showCancelButton:!1,showConfirmButton:!0,type:"",title:void 0,showInput:!1,action:"",confirmButtonLoading:!1,cancelButtonLoading:!1,confirmButtonLoadingIcon:K(_),cancelButtonLoadingIcon:K(_),confirmButtonDisabled:!1,editorErrorMessage:"",validateError:!1,zIndex:f()}),P=C(()=>{const a=o.type;return{[r.bm("icon",a)]:a&&oe[a]}}),u=ee(),ce=ee(),fe=C(()=>{const a=o.type;return o.icon||a&&oe[a]||""}),me=C(()=>!!o.message),E=B(),W=B(),M=B(),k=B(),X=B(),pe=C(()=>o.confirmButtonClass);ne(()=>o.inputValue,async a=>{await $(),e.boxType==="prompt"&&a&&J()},{immediate:!0}),ne(()=>p.value,a=>{a&&(e.boxType!=="prompt"&&(o.autofocus?M.value=X.value?.$el??E.value:M.value=E.value),o.zIndex=f()),e.boxType==="prompt"&&(a?$().then(()=>{k.value&&k.value.$el&&(o.autofocus?M.value=Ce()??E.value:M.value=E.value)}):(o.editorErrorMessage="",o.validateError=!1))});const{isDragging:ge}=Re(E,W,C(()=>e.draggable),C(()=>e.overflow));Oe(async()=>{await $(),e.closeOnHashChange&&window.addEventListener("hashchange",I)}),Ve(()=>{e.closeOnHashChange&&window.removeEventListener("hashchange",I)});function I(){p.value&&(p.value=!1,$(()=>{o.action&&n("action",o.action)}))}const Z=()=>{e.closeOnClickModal&&O(o.distinguishCancelAndClose?"close":"cancel")},ve=Pe(Z),ye=a=>{if(o.inputType!=="textarea"&&!k.value?.isComposing)return a.preventDefault(),O("confirm")},O=a=>{e.boxType==="prompt"&&a==="confirm"&&!J()||(o.action=a,o.beforeClose?o.beforeClose?.(a,o,I):I())},J=()=>{if(e.boxType==="prompt"){const a=o.inputPattern;if(a&&!a.test(o.inputValue||""))return o.editorErrorMessage=o.inputErrorMessage||c("el.messagebox.error"),o.validateError=!0,!1;const Y=o.inputValidator;if(j(Y)){const F=Y(o.inputValue);if(F===!1)return o.editorErrorMessage=o.inputErrorMessage||c("el.messagebox.error"),o.validateError=!0,!1;if(G(F))return o.editorErrorMessage=F,o.validateError=!0,!1}}return o.editorErrorMessage="",o.validateError=!1,!0},Ce=()=>{const a=k.value?.$refs;return a?.input??a?.textarea},Q=()=>{O("close")},be=()=>{e.closeOnPressEscape&&Q()};return e.lockScroll&&ze(p,{ns:r}),{...De(o),ns:r,overlayEvent:ve,visible:p,hasMessage:me,typeClass:P,contentId:u,inputId:ce,btnSize:t,iconComponent:fe,confirmButtonClasses:pe,rootRef:E,focusStartRef:M,headerRef:W,inputRef:k,isDragging:ge,confirmRef:X,doClose:I,handleClose:Q,onCloseRequested:be,handleWrapperClick:Z,handleInputEnter:ye,handleAction:O,t:c}}});const We=["aria-label","aria-describedby"],Xe=["aria-label"],Ze=["id"];function Je(e,n,s,l,r,t){const c=S("el-icon"),f=S("el-input"),p=S("el-button"),o=S("el-focus-trap"),P=S("el-overlay");return d(),m(Ne,{name:"fade-in-linear",onAfterLeave:n[11]||(n[11]=u=>e.$emit("vanish")),persisted:""},{default:g(()=>[H(w(P,{"z-index":e.zIndex,"overlay-class":[e.ns.is("message-box"),e.modalClass],mask:e.modal},{default:g(()=>[v("div",{role:"dialog","aria-label":e.title,"aria-modal":"true","aria-describedby":e.showInput?void 0:e.contentId,class:i(`${e.ns.namespace.value}-overlay-message-box`),onClick:n[8]||(n[8]=(...u)=>e.overlayEvent.onClick&&e.overlayEvent.onClick(...u)),onMousedown:n[9]||(n[9]=(...u)=>e.overlayEvent.onMousedown&&e.overlayEvent.onMousedown(...u)),onMouseup:n[10]||(n[10]=(...u)=>e.overlayEvent.onMouseup&&e.overlayEvent.onMouseup(...u))},[w(o,{loop:"",trapped:e.visible,"focus-trap-el":e.rootRef,"focus-start-el":e.focusStartRef,onReleaseRequested:e.onCloseRequested},{default:g(()=>[v("div",{ref:"rootRef",class:i([e.ns.b(),e.customClass,e.ns.is("draggable",e.draggable),e.ns.is("dragging",e.isDragging),{[e.ns.m("center")]:e.center}]),style:se(e.customStyle),tabindex:"-1",onClick:n[7]||(n[7]=V(()=>{},["stop"]))},[e.title!==null&&e.title!==void 0?(d(),z("div",{key:0,ref:"headerRef",class:i([e.ns.e("header"),{"show-close":e.showClose}])},[v("div",{class:i(e.ns.e("title"))},[e.iconComponent&&e.center?(d(),m(c,{key:0,class:i([e.ns.e("status"),e.typeClass])},{default:g(()=>[(d(),m(A(e.iconComponent)))]),_:1},8,["class"])):b("v-if",!0),v("span",null,L(e.title),1)],2),e.showClose?(d(),z("button",{key:0,type:"button",class:i(e.ns.e("headerbtn")),"aria-label":e.t("el.messagebox.close"),onClick:n[0]||(n[0]=u=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel")),onKeydown:n[1]||(n[1]=D(V(u=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel"),["prevent"]),["enter"]))},[w(c,{class:i(e.ns.e("close"))},{default:g(()=>[(d(),m(A(e.closeIcon||"close")))]),_:1},8,["class"])],42,Xe)):b("v-if",!0)],2)):b("v-if",!0),v("div",{id:e.contentId,class:i(e.ns.e("content"))},[v("div",{class:i(e.ns.e("container"))},[e.iconComponent&&!e.center&&e.hasMessage?(d(),m(c,{key:0,class:i([e.ns.e("status"),e.typeClass])},{default:g(()=>[(d(),m(A(e.iconComponent)))]),_:1},8,["class"])):b("v-if",!0),e.hasMessage?(d(),z("div",{key:1,class:i(e.ns.e("message"))},[He(e.$slots,"default",{},()=>[e.dangerouslyUseHTMLString?(d(),m(A(e.showInput?"label":"p"),{key:1,for:e.showInput?e.inputId:void 0,innerHTML:e.message},null,8,["for","innerHTML"])):(d(),m(A(e.showInput?"label":"p"),{key:0,for:e.showInput?e.inputId:void 0,textContent:L(e.message)},null,8,["for","textContent"]))])],2)):b("v-if",!0)],2),H(v("div",{class:i(e.ns.e("input"))},[w(f,{id:e.inputId,ref:"inputRef",modelValue:e.inputValue,"onUpdate:modelValue":n[2]||(n[2]=u=>e.inputValue=u),type:e.inputType,placeholder:e.inputPlaceholder,"aria-invalid":e.validateError,class:i({invalid:e.validateError}),onKeydown:D(e.handleInputEnter,["enter"])},null,8,["id","modelValue","type","placeholder","aria-invalid","class","onKeydown"]),v("div",{class:i(e.ns.e("errormsg")),style:se({visibility:e.editorErrorMessage?"visible":"hidden"})},L(e.editorErrorMessage),7)],2),[[N,e.showInput]])],10,Ze),e.showCancelButton||e.showConfirmButton?(d(),z("div",{key:1,class:i(e.ns.e("btns"))},[e.showCancelButton?(d(),m(p,{key:0,type:e.cancelButtonType==="text"?"":e.cancelButtonType,text:e.cancelButtonType==="text",loading:e.cancelButtonLoading,"loading-icon":e.cancelButtonLoadingIcon,class:i([e.cancelButtonClass]),round:e.roundButton,size:e.btnSize,onClick:n[3]||(n[3]=u=>e.handleAction("cancel")),onKeydown:n[4]||(n[4]=D(V(u=>e.handleAction("cancel"),["prevent"]),["enter"]))},{default:g(()=>[te(L(e.cancelButtonText||e.t("el.messagebox.cancel")),1)]),_:1},8,["type","text","loading","loading-icon","class","round","size"])):b("v-if",!0),H(w(p,{ref:"confirmRef",type:e.confirmButtonType==="text"?"":e.confirmButtonType,text:e.confirmButtonType==="text",loading:e.confirmButtonLoading,"loading-icon":e.confirmButtonLoadingIcon,class:i([e.confirmButtonClasses]),round:e.roundButton,disabled:e.confirmButtonDisabled,size:e.btnSize,onClick:n[5]||(n[5]=u=>e.handleAction("confirm")),onKeydown:n[6]||(n[6]=D(V(u=>e.handleAction("confirm"),["prevent"]),["enter"]))},{default:g(()=>[te(L(e.confirmButtonText||e.t("el.messagebox.confirm")),1)]),_:1},8,["type","text","loading","loading-icon","class","round","disabled","size"]),[[N,e.showConfirmButton]])],2)):b("v-if",!0)],6)]),_:3},8,["trapped","focus-trap-el","focus-start-el","onReleaseRequested"])],42,We)]),_:3},8,["z-index","overlay-class","mask"]),[[N,e.visible]])]),_:3})}var Qe=Fe(Ge,[["render",Je]]);const R=new Map,Ye=e=>{let n=document.body;return e.appendTo&&(G(e.appendTo)&&(n=document.querySelector(e.appendTo)),le(e.appendTo)&&(n=e.appendTo),le(n)||(Ke("ElMessageBox","the appendTo option is not an HTMLElement. Falling back to document.body."),n=document.body)),n},U=(e,n)=>{const s=e.component?.proxy;return()=>s.handleAction(n)},xe=(e,n,s=null)=>{const l=w(Qe,e,j(e.message)||ie(e.message)?{default:j(e.message)?()=>e.message({confirm:U(l,"confirm"),cancel:U(l,"cancel"),close:U(l,"close")}):()=>e.message}:null);return l.appContext=s,ue(l,n),Ye(e).appendChild(n.firstElementChild),l.component},_e=()=>document.createElement("div"),en=(e,n)=>{const s=_e();e.onVanish=()=>{ue(null,s),R.delete(r)},e.onAction=t=>{const c=R.get(r);let f;e.showInput?f={value:r.inputValue,action:t}:f=t,e.callback?e.callback(f,l.proxy):t==="cancel"||t==="close"?e.distinguishCancelAndClose&&t!=="cancel"?c.reject("close"):c.reject("cancel"):c.resolve(f)};const l=xe(e,s,n),r=l.proxy;for(const t in e)ae(e,t)&&!ae(r.$props,t)&&(t==="closeIcon"&&de(e[t])?r[t]=K(e[t]):r[t]=e[t]);return r.visible=!0,r};function T(e,n=null){if(!Ue)return Promise.reject();let s;return G(e)||ie(e)?e={message:e}:s=e.callback,new Promise((l,r)=>{const t=en(e,n??T._context);R.set(t,{options:e,callback:s,resolve:l,reject:r})})}const nn=["alert","confirm","prompt"],on={alert:{closeOnPressEscape:!1,closeOnClickModal:!1},confirm:{showCancelButton:!0},prompt:{showCancelButton:!0,showInput:!0}};nn.forEach(e=>{T[e]=sn(e)});function sn(e){return(n,s,l,r)=>{let t="";return de(s)?(l=s,t=""):je(s)?t="":t=s,T(Object.assign({title:t,message:n,type:"",...on[e]},l,{boxType:e}),r)}}T.close=()=>{R.forEach((e,n)=>{n.doClose()}),R.clear()};T._context=null;const y=T;y.install=e=>{y._context=e._context,e.config.globalProperties.$msgbox=y,e.config.globalProperties.$messageBox=y,e.config.globalProperties.$alert=y.alert,e.config.globalProperties.$confirm=y.confirm,e.config.globalProperties.$prompt=y.prompt};const an=y;export{an as E}; +import{v as $,Z as x,_ as he,$ as Ee,d as Be,a0 as we,a1 as Te,a2 as Me,a3 as ke,a4 as Ie,a5 as Se,a6 as Ae,a7 as Le,h as C,D as $e,a8 as K,a9 as _,aa as ee,k as ne,ab as Re,y as Oe,l as Ve,ac as j,ad as G,ae as ze,af as De,s as B,ag as oe,ah as Pe,ai as Fe,i as S,o as d,j as m,w as g,B as H,e as w,a as v,m as i,q as V,n as se,c as z,aj as A,p as b,t as L,H as D,O as He,L as N,f as te,ak as Ne,al as Ue,am as ie,an as ue,ao as ae,ap as de,aq as le,ar as Ke,as as je}from"./index-jfqf0I3j.js";const q="_trap-focus-children",h=[],re=e=>{if(h.length===0)return;const n=he(e),s=h[h.length-1][q];if(s.length>0&&n===Ee.tab){if(s.length===1){e.preventDefault(),document.activeElement!==s[0]&&s[0].focus();return}const l=e.shiftKey,r=e.target===s[0],t=e.target===s[s.length-1];r&&l&&(e.preventDefault(),s[s.length-1].focus()),t&&!l&&(e.preventDefault(),s[0].focus())}},qe={beforeMount(e){e[q]=x(e),h.push(e),h.length<=1&&document.addEventListener("keydown",re)},updated(e){$(()=>{e[q]=x(e)})},unmounted(){h.shift(),h.length===0&&document.removeEventListener("keydown",re)}};var Ge=Be({name:"ElMessageBox",directives:{TrapFocus:qe},components:{ElButton:Ae,ElFocusTrap:Se,ElInput:Ie,ElOverlay:ke,ElIcon:Me,...Te},inheritAttrs:!1,props:{buttonSize:{type:String,validator:we},modal:{type:Boolean,default:!0},lockScroll:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},closeOnHashChange:{type:Boolean,default:!0},center:Boolean,draggable:Boolean,overflow:Boolean,roundButton:Boolean,container:{type:String,default:"body"},boxType:{type:String,default:""}},emits:["vanish","action"],setup(e,{emit:n}){const{locale:s,zIndex:l,ns:r,size:t}=Le("message-box",C(()=>e.buttonSize)),{t:c}=s,{nextZIndex:f}=l,p=B(!1),o=$e({autofocus:!0,beforeClose:null,callback:null,cancelButtonText:"",cancelButtonClass:"",confirmButtonText:"",confirmButtonClass:"",cancelButtonType:"",confirmButtonType:"primary",customClass:"",customStyle:{},dangerouslyUseHTMLString:!1,distinguishCancelAndClose:!1,icon:"",closeIcon:"",inputPattern:null,inputPlaceholder:"",inputType:"text",inputValue:"",inputValidator:void 0,inputErrorMessage:"",message:"",modalFade:!0,modalClass:"",showCancelButton:!1,showConfirmButton:!0,type:"",title:void 0,showInput:!1,action:"",confirmButtonLoading:!1,cancelButtonLoading:!1,confirmButtonLoadingIcon:K(_),cancelButtonLoadingIcon:K(_),confirmButtonDisabled:!1,editorErrorMessage:"",validateError:!1,zIndex:f()}),P=C(()=>{const a=o.type;return{[r.bm("icon",a)]:a&&oe[a]}}),u=ee(),ce=ee(),fe=C(()=>{const a=o.type;return o.icon||a&&oe[a]||""}),me=C(()=>!!o.message),E=B(),W=B(),M=B(),k=B(),X=B(),pe=C(()=>o.confirmButtonClass);ne(()=>o.inputValue,async a=>{await $(),e.boxType==="prompt"&&a&&J()},{immediate:!0}),ne(()=>p.value,a=>{a&&(e.boxType!=="prompt"&&(o.autofocus?M.value=X.value?.$el??E.value:M.value=E.value),o.zIndex=f()),e.boxType==="prompt"&&(a?$().then(()=>{k.value&&k.value.$el&&(o.autofocus?M.value=Ce()??E.value:M.value=E.value)}):(o.editorErrorMessage="",o.validateError=!1))});const{isDragging:ge}=Re(E,W,C(()=>e.draggable),C(()=>e.overflow));Oe(async()=>{await $(),e.closeOnHashChange&&window.addEventListener("hashchange",I)}),Ve(()=>{e.closeOnHashChange&&window.removeEventListener("hashchange",I)});function I(){p.value&&(p.value=!1,$(()=>{o.action&&n("action",o.action)}))}const Z=()=>{e.closeOnClickModal&&O(o.distinguishCancelAndClose?"close":"cancel")},ve=Pe(Z),ye=a=>{if(o.inputType!=="textarea"&&!k.value?.isComposing)return a.preventDefault(),O("confirm")},O=a=>{e.boxType==="prompt"&&a==="confirm"&&!J()||(o.action=a,o.beforeClose?o.beforeClose?.(a,o,I):I())},J=()=>{if(e.boxType==="prompt"){const a=o.inputPattern;if(a&&!a.test(o.inputValue||""))return o.editorErrorMessage=o.inputErrorMessage||c("el.messagebox.error"),o.validateError=!0,!1;const Y=o.inputValidator;if(j(Y)){const F=Y(o.inputValue);if(F===!1)return o.editorErrorMessage=o.inputErrorMessage||c("el.messagebox.error"),o.validateError=!0,!1;if(G(F))return o.editorErrorMessage=F,o.validateError=!0,!1}}return o.editorErrorMessage="",o.validateError=!1,!0},Ce=()=>{const a=k.value?.$refs;return a?.input??a?.textarea},Q=()=>{O("close")},be=()=>{e.closeOnPressEscape&&Q()};return e.lockScroll&&ze(p,{ns:r}),{...De(o),ns:r,overlayEvent:ve,visible:p,hasMessage:me,typeClass:P,contentId:u,inputId:ce,btnSize:t,iconComponent:fe,confirmButtonClasses:pe,rootRef:E,focusStartRef:M,headerRef:W,inputRef:k,isDragging:ge,confirmRef:X,doClose:I,handleClose:Q,onCloseRequested:be,handleWrapperClick:Z,handleInputEnter:ye,handleAction:O,t:c}}});const We=["aria-label","aria-describedby"],Xe=["aria-label"],Ze=["id"];function Je(e,n,s,l,r,t){const c=S("el-icon"),f=S("el-input"),p=S("el-button"),o=S("el-focus-trap"),P=S("el-overlay");return d(),m(Ne,{name:"fade-in-linear",onAfterLeave:n[11]||(n[11]=u=>e.$emit("vanish")),persisted:""},{default:g(()=>[H(w(P,{"z-index":e.zIndex,"overlay-class":[e.ns.is("message-box"),e.modalClass],mask:e.modal},{default:g(()=>[v("div",{role:"dialog","aria-label":e.title,"aria-modal":"true","aria-describedby":e.showInput?void 0:e.contentId,class:i(`${e.ns.namespace.value}-overlay-message-box`),onClick:n[8]||(n[8]=(...u)=>e.overlayEvent.onClick&&e.overlayEvent.onClick(...u)),onMousedown:n[9]||(n[9]=(...u)=>e.overlayEvent.onMousedown&&e.overlayEvent.onMousedown(...u)),onMouseup:n[10]||(n[10]=(...u)=>e.overlayEvent.onMouseup&&e.overlayEvent.onMouseup(...u))},[w(o,{loop:"",trapped:e.visible,"focus-trap-el":e.rootRef,"focus-start-el":e.focusStartRef,onReleaseRequested:e.onCloseRequested},{default:g(()=>[v("div",{ref:"rootRef",class:i([e.ns.b(),e.customClass,e.ns.is("draggable",e.draggable),e.ns.is("dragging",e.isDragging),{[e.ns.m("center")]:e.center}]),style:se(e.customStyle),tabindex:"-1",onClick:n[7]||(n[7]=V(()=>{},["stop"]))},[e.title!==null&&e.title!==void 0?(d(),z("div",{key:0,ref:"headerRef",class:i([e.ns.e("header"),{"show-close":e.showClose}])},[v("div",{class:i(e.ns.e("title"))},[e.iconComponent&&e.center?(d(),m(c,{key:0,class:i([e.ns.e("status"),e.typeClass])},{default:g(()=>[(d(),m(A(e.iconComponent)))]),_:1},8,["class"])):b("v-if",!0),v("span",null,L(e.title),1)],2),e.showClose?(d(),z("button",{key:0,type:"button",class:i(e.ns.e("headerbtn")),"aria-label":e.t("el.messagebox.close"),onClick:n[0]||(n[0]=u=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel")),onKeydown:n[1]||(n[1]=D(V(u=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel"),["prevent"]),["enter"]))},[w(c,{class:i(e.ns.e("close"))},{default:g(()=>[(d(),m(A(e.closeIcon||"close")))]),_:1},8,["class"])],42,Xe)):b("v-if",!0)],2)):b("v-if",!0),v("div",{id:e.contentId,class:i(e.ns.e("content"))},[v("div",{class:i(e.ns.e("container"))},[e.iconComponent&&!e.center&&e.hasMessage?(d(),m(c,{key:0,class:i([e.ns.e("status"),e.typeClass])},{default:g(()=>[(d(),m(A(e.iconComponent)))]),_:1},8,["class"])):b("v-if",!0),e.hasMessage?(d(),z("div",{key:1,class:i(e.ns.e("message"))},[He(e.$slots,"default",{},()=>[e.dangerouslyUseHTMLString?(d(),m(A(e.showInput?"label":"p"),{key:1,for:e.showInput?e.inputId:void 0,innerHTML:e.message},null,8,["for","innerHTML"])):(d(),m(A(e.showInput?"label":"p"),{key:0,for:e.showInput?e.inputId:void 0,textContent:L(e.message)},null,8,["for","textContent"]))])],2)):b("v-if",!0)],2),H(v("div",{class:i(e.ns.e("input"))},[w(f,{id:e.inputId,ref:"inputRef",modelValue:e.inputValue,"onUpdate:modelValue":n[2]||(n[2]=u=>e.inputValue=u),type:e.inputType,placeholder:e.inputPlaceholder,"aria-invalid":e.validateError,class:i({invalid:e.validateError}),onKeydown:D(e.handleInputEnter,["enter"])},null,8,["id","modelValue","type","placeholder","aria-invalid","class","onKeydown"]),v("div",{class:i(e.ns.e("errormsg")),style:se({visibility:e.editorErrorMessage?"visible":"hidden"})},L(e.editorErrorMessage),7)],2),[[N,e.showInput]])],10,Ze),e.showCancelButton||e.showConfirmButton?(d(),z("div",{key:1,class:i(e.ns.e("btns"))},[e.showCancelButton?(d(),m(p,{key:0,type:e.cancelButtonType==="text"?"":e.cancelButtonType,text:e.cancelButtonType==="text",loading:e.cancelButtonLoading,"loading-icon":e.cancelButtonLoadingIcon,class:i([e.cancelButtonClass]),round:e.roundButton,size:e.btnSize,onClick:n[3]||(n[3]=u=>e.handleAction("cancel")),onKeydown:n[4]||(n[4]=D(V(u=>e.handleAction("cancel"),["prevent"]),["enter"]))},{default:g(()=>[te(L(e.cancelButtonText||e.t("el.messagebox.cancel")),1)]),_:1},8,["type","text","loading","loading-icon","class","round","size"])):b("v-if",!0),H(w(p,{ref:"confirmRef",type:e.confirmButtonType==="text"?"":e.confirmButtonType,text:e.confirmButtonType==="text",loading:e.confirmButtonLoading,"loading-icon":e.confirmButtonLoadingIcon,class:i([e.confirmButtonClasses]),round:e.roundButton,disabled:e.confirmButtonDisabled,size:e.btnSize,onClick:n[5]||(n[5]=u=>e.handleAction("confirm")),onKeydown:n[6]||(n[6]=D(V(u=>e.handleAction("confirm"),["prevent"]),["enter"]))},{default:g(()=>[te(L(e.confirmButtonText||e.t("el.messagebox.confirm")),1)]),_:1},8,["type","text","loading","loading-icon","class","round","disabled","size"]),[[N,e.showConfirmButton]])],2)):b("v-if",!0)],6)]),_:3},8,["trapped","focus-trap-el","focus-start-el","onReleaseRequested"])],42,We)]),_:3},8,["z-index","overlay-class","mask"]),[[N,e.visible]])]),_:3})}var Qe=Fe(Ge,[["render",Je]]);const R=new Map,Ye=e=>{let n=document.body;return e.appendTo&&(G(e.appendTo)&&(n=document.querySelector(e.appendTo)),le(e.appendTo)&&(n=e.appendTo),le(n)||(Ke("ElMessageBox","the appendTo option is not an HTMLElement. Falling back to document.body."),n=document.body)),n},U=(e,n)=>{const s=e.component?.proxy;return()=>s.handleAction(n)},xe=(e,n,s=null)=>{const l=w(Qe,e,j(e.message)||ie(e.message)?{default:j(e.message)?()=>e.message({confirm:U(l,"confirm"),cancel:U(l,"cancel"),close:U(l,"close")}):()=>e.message}:null);return l.appContext=s,ue(l,n),Ye(e).appendChild(n.firstElementChild),l.component},_e=()=>document.createElement("div"),en=(e,n)=>{const s=_e();e.onVanish=()=>{ue(null,s),R.delete(r)},e.onAction=t=>{const c=R.get(r);let f;e.showInput?f={value:r.inputValue,action:t}:f=t,e.callback?e.callback(f,l.proxy):t==="cancel"||t==="close"?e.distinguishCancelAndClose&&t!=="cancel"?c.reject("close"):c.reject("cancel"):c.resolve(f)};const l=xe(e,s,n),r=l.proxy;for(const t in e)ae(e,t)&&!ae(r.$props,t)&&(t==="closeIcon"&&de(e[t])?r[t]=K(e[t]):r[t]=e[t]);return r.visible=!0,r};function T(e,n=null){if(!Ue)return Promise.reject();let s;return G(e)||ie(e)?e={message:e}:s=e.callback,new Promise((l,r)=>{const t=en(e,n??T._context);R.set(t,{options:e,callback:s,resolve:l,reject:r})})}const nn=["alert","confirm","prompt"],on={alert:{closeOnPressEscape:!1,closeOnClickModal:!1},confirm:{showCancelButton:!0},prompt:{showCancelButton:!0,showInput:!0}};nn.forEach(e=>{T[e]=sn(e)});function sn(e){return(n,s,l,r)=>{let t="";return de(s)?(l=s,t=""):je(s)?t="":t=s,T(Object.assign({title:t,message:n,type:"",...on[e]},l,{boxType:e}),r)}}T.close=()=>{R.forEach((e,n)=>{n.doClose()}),R.clear()};T._context=null;const y=T;y.install=e=>{y._context=e._context,e.config.globalProperties.$msgbox=y,e.config.globalProperties.$messageBox=y,e.config.globalProperties.$alert=y.alert,e.config.globalProperties.$confirm=y.confirm,e.config.globalProperties.$prompt=y.prompt};const an=y;export{an as E}; diff --git a/frontend/dist/assets/index-BlvrX0Zy.js b/frontend/dist/assets/index-jfqf0I3j.js similarity index 99% rename from frontend/dist/assets/index-BlvrX0Zy.js rename to frontend/dist/assets/index-jfqf0I3j.js index 09f7a132..ce2f28e3 100644 --- a/frontend/dist/assets/index-BlvrX0Zy.js +++ b/frontend/dist/assets/index-jfqf0I3j.js @@ -1,4 +1,4 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/HomePage-ChxMX_IM.js","assets/home-logo-Bq2pf2HD.js","assets/TasksPage-CeWYr9Xg.js","assets/index-DNZgQ1o0.js","assets/index-DILr9bpz.js","assets/tasks-CTZb2r1_.js","assets/ToolsPage-DH5QX7Cd.js","assets/DatasetPage-CoWjms-D.js","assets/schemas-BVh9ipN3.js","assets/TrainingWorkbenchPage-ByP70JIG.js","assets/prefs-L1LFxgf4.js","assets/SettingsContainerPage-9zJ1w2a2.js"])))=>i.map(i=>d[i]); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/HomePage-DZc_8_wk.js","assets/home-logo-Bq2pf2HD.js","assets/TasksPage-KdDODzEE.js","assets/index-tjV5EgBi.js","assets/index-CfMd9kCx.js","assets/tasks-C7eKb6HN.js","assets/ToolsPage-DXtU4veE.js","assets/DatasetPage-5Q1m8WuT.js","assets/schemas-D72H6mWJ.js","assets/TrainingWorkbenchPage-DotulMGq.js","assets/prefs-DCZCUQjC.js","assets/SettingsContainerPage-kvrxRBXq.js"])))=>i.map(i=>d[i]); (function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const s of o)if(s.type==="childList")for(const a of s.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&r(a)}).observe(document,{childList:!0,subtree:!0});function n(o){const s={};return o.integrity&&(s.integrity=o.integrity),o.referrerPolicy&&(s.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?s.credentials="include":o.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(o){if(o.ep)return;o.ep=!0;const s=n(o);fetch(o.href,s)}})();function Tc(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const je={},ko=[],qe=()=>{},kp=()=>!1,fi=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),di=e=>e.startsWith("onUpdate:"),Et=Object.assign,Cc=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},P0=Object.prototype.hasOwnProperty,He=(e,t)=>P0.call(e,t),ue=Array.isArray,Ro=e=>Ys(e)==="[object Map]",qo=e=>Ys(e)==="[object Set]",Pu=e=>Ys(e)==="[object Date]",ge=e=>typeof e=="function",De=e=>typeof e=="string",on=e=>typeof e=="symbol",Ie=e=>e!==null&&typeof e=="object",Ua=e=>(Ie(e)||ge(e))&&ge(e.then)&&ge(e.catch),Rp=Object.prototype.toString,Ys=e=>Rp.call(e),k0=e=>Ys(e).slice(8,-1),Ac=e=>Ys(e)==="[object Object]",pi=e=>De(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ms=Tc(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),hi=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},R0=/-\w/g,Rt=hi(e=>e.replace(R0,t=>t.slice(1).toUpperCase())),N0=/\B([A-Z])/g,Jn=hi(e=>e.replace(N0,"-$1").toLowerCase()),mi=hi(e=>e.charAt(0).toUpperCase()+e.slice(1)),gs=hi(e=>e?`on${mi(e)}`:""),Pt=(e,t)=>!Object.is(e,t),Ma=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},gi=e=>{const t=parseFloat(e);return isNaN(t)?e:t},M0=e=>{const t=De(e)?Number(e):NaN;return isNaN(t)?e:t};let ku;const vi=()=>ku||(ku=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function yt(e){if(ue(e)){const t={};for(let n=0;n{if(n){const r=n.split(D0);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function ae(e){let t="";if(De(e))t=e;else if(ue(e))for(let n=0;nXo(n,t))}const Fp=e=>!!(e&&e.__v_isRef===!0),st=e=>De(e)?e:e==null?"":ue(e)||Ie(e)&&(e.toString===Rp||!ge(e.toString))?Fp(e)?st(e.value):JSON.stringify(e,Dp,2):String(e),Dp=(e,t)=>Fp(t)?Dp(e,t.value):Ro(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,o],s)=>(n[nl(r,s)+" =>"]=o,n),{})}:qo(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>nl(n))}:on(t)?nl(t):Ie(t)&&!ue(t)&&!Ac(t)?String(t):t,nl=(e,t="")=>{var n;return on(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};let Ct;class $p{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&Ct&&(Ct.active?(this.parent=Ct,this.index=(Ct.scopes||(Ct.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes){const r=this.scopes.slice();for(t=0,n=r.length;t0&&--this._on===0){if(Ct===this)Ct=this.prevScope;else{let t=Ct;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,r;for(n=0,r=this.effects.length;n0)return;if(bs){let t=bs;for(bs=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;vs;){let t=vs;for(vs=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(r){e||(e=r)}t=n}}if(e)throw e}function Up(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function jp(e){let t,n=e.depsTail,r=n;for(;r;){const o=r.prevDep;r.version===-1?(r===n&&(n=o),Pc(r),j0(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=o}e.deps=t,e.depsTail=n}function Pl(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Wp(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Wp(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===As)||(e.globalVersion=As,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Pl(e))))return;e.flags|=2;const t=e.dep,n=et,r=An;et=e,An=!0;try{Up(e);const o=e.fn(e._value);(t.version===0||Pt(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{et=n,An=r,jp(e),e.flags&=-3}}function Pc(e,t=!1){const{dep:n,prevSub:r,nextSub:o}=e;if(r&&(r.nextSub=o,e.prevSub=void 0),o&&(o.prevSub=r,e.nextSub=void 0),n.subs===e&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let s=n.computed.deps;s;s=s.nextDep)Pc(s,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function j0(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let An=!0;const zp=[];function vr(){zp.push(An),An=!1}function br(){const e=zp.pop();An=e===void 0?!0:e}function Ru(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=et;et=void 0;try{t()}finally{et=n}}}let As=0;class W0{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class _i{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!et||!An||et===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==et)n=this.activeLink=new W0(et,this),et.deps?(n.prevDep=et.depsTail,et.depsTail.nextDep=n,et.depsTail=n):et.deps=et.depsTail=n,Kp(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const r=n.nextDep;r.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=r),n.prevDep=et.depsTail,n.nextDep=void 0,et.depsTail.nextDep=n,et.depsTail=n,et.deps===n&&(et.deps=r)}return n}trigger(t){this.version++,As++,this.notify(t)}notify(t){Lc();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Ic()}}}function Kp(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let r=t.deps;r;r=r.nextDep)Kp(r)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const ja=new WeakMap,ao=Symbol(""),kl=Symbol(""),Os=Symbol("");function Dt(e,t,n){if(An&&et){let r=ja.get(e);r||ja.set(e,r=new Map);let o=r.get(n);o||(r.set(n,o=new _i),o.map=r,o.key=n),o.track()}}function ir(e,t,n,r,o,s){const a=ja.get(e);if(!a){As++;return}const i=l=>{l&&l.trigger()};if(Lc(),t==="clear")a.forEach(i);else{const l=ue(e),c=l&&pi(n);if(l&&n==="length"){const u=Number(r);a.forEach((f,d)=>{(d==="length"||d===Os||!on(d)&&d>=u)&&i(f)})}else switch((n!==void 0||a.has(void 0))&&i(a.get(n)),c&&i(a.get(Os)),t){case"add":l?c&&i(a.get("length")):(i(a.get(ao)),Ro(e)&&i(a.get(kl)));break;case"delete":l||(i(a.get(ao)),Ro(e)&&i(a.get(kl)));break;case"set":Ro(e)&&i(a.get(ao));break}}Ic()}function z0(e,t){const n=ja.get(e);return n&&n.get(t)}function So(e){const t=Ve(e);return t===e?t:(Dt(t,"iterate",Os),rn(e)?t:t.map(xn))}function wi(e){return Dt(e=Ve(e),"iterate",Os),e}function Un(e,t){return yr(e)?Fo(zn(e)?xn(t):t):xn(t)}const K0={__proto__:null,[Symbol.iterator](){return ol(this,Symbol.iterator,e=>Un(this,e))},concat(...e){return So(this).concat(...e.map(t=>ue(t)?So(t):t))},entries(){return ol(this,"entries",e=>(e[1]=Un(this,e[1]),e))},every(e,t){return Qn(this,"every",e,t,void 0,arguments)},filter(e,t){return Qn(this,"filter",e,t,n=>n.map(r=>Un(this,r)),arguments)},find(e,t){return Qn(this,"find",e,t,n=>Un(this,n),arguments)},findIndex(e,t){return Qn(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Qn(this,"findLast",e,t,n=>Un(this,n),arguments)},findLastIndex(e,t){return Qn(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Qn(this,"forEach",e,t,void 0,arguments)},includes(...e){return sl(this,"includes",e)},indexOf(...e){return sl(this,"indexOf",e)},join(e){return So(this).join(e)},lastIndexOf(...e){return sl(this,"lastIndexOf",e)},map(e,t){return Qn(this,"map",e,t,void 0,arguments)},pop(){return es(this,"pop")},push(...e){return es(this,"push",e)},reduce(e,...t){return Nu(this,"reduce",e,t)},reduceRight(e,...t){return Nu(this,"reduceRight",e,t)},shift(){return es(this,"shift")},some(e,t){return Qn(this,"some",e,t,void 0,arguments)},splice(...e){return es(this,"splice",e)},toReversed(){return So(this).toReversed()},toSorted(e){return So(this).toSorted(e)},toSpliced(...e){return So(this).toSpliced(...e)},unshift(...e){return es(this,"unshift",e)},values(){return ol(this,"values",e=>Un(this,e))}};function ol(e,t,n){const r=wi(e),o=r[t]();return r!==e&&!rn(e)&&(o._next=o.next,o.next=()=>{const s=o._next();return s.done||(s.value=n(s.value)),s}),o}const G0=Array.prototype;function Qn(e,t,n,r,o,s){const a=wi(e),i=a!==e&&!rn(e),l=a[t];if(l!==G0[t]){const f=l.apply(e,s);return i?xn(f):f}let c=n;a!==e&&(i?c=function(f,d){return n.call(this,Un(e,f),d,e)}:n.length>2&&(c=function(f,d){return n.call(this,f,d,e)}));const u=l.call(a,c,r);return i&&o?o(u):u}function Nu(e,t,n,r){const o=wi(e),s=o!==e&&!rn(e);let a=n,i=!1;o!==e&&(s?(i=r.length===0,a=function(c,u,f){return i&&(i=!1,c=Un(e,c)),n.call(this,c,Un(e,u),f,e)}):n.length>3&&(a=function(c,u,f){return n.call(this,c,u,f,e)}));const l=o[t](a,...r);return i?Un(e,l):l}function sl(e,t,n){const r=Ve(e);Dt(r,"iterate",Os);const o=r[t](...n);return(o===-1||o===!1)&&Ti(n[0])?(n[0]=Ve(n[0]),r[t](...n)):o}function es(e,t,n=[]){vr(),Lc();const r=Ve(e)[t].apply(e,n);return Ic(),br(),r}const Y0=Tc("__proto__,__v_isRef,__isVue"),Gp=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(on));function q0(e){on(e)||(e=String(e));const t=Ve(this);return Dt(t,"has",e),t.hasOwnProperty(e)}class Yp{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){if(n==="__v_skip")return t.__v_skip;const o=this._isReadonly,s=this._isShallow;if(n==="__v_isReactive")return!o;if(n==="__v_isReadonly")return o;if(n==="__v_isShallow")return s;if(n==="__v_raw")return r===(o?s?eh:Qp:s?Zp:Jp).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const a=ue(t);if(!o){let l;if(a&&(l=K0[n]))return l;if(n==="hasOwnProperty")return q0}const i=Reflect.get(t,n,Ze(t)?t:r);if((on(n)?Gp.has(n):Y0(n))||(o||Dt(t,"get",n),s))return i;if(Ze(i)){const l=a&&pi(n)?i:i.value;return o&&Ie(l)?xs(l):l}return Ie(i)?o?xs(i):Jt(i):i}}class qp extends Yp{constructor(t=!1){super(!1,t)}set(t,n,r,o){let s=t[n];const a=ue(t)&&pi(n);if(!this._isShallow){const c=yr(s);if(!rn(r)&&!yr(r)&&(s=Ve(s),r=Ve(r)),!a&&Ze(s)&&!Ze(r))return c||(s.value=r),!0}const i=a?Number(n)e,ma=e=>Reflect.getPrototypeOf(e);function ev(e,t,n){return function(...r){const o=this.__v_raw,s=Ve(o),a=Ro(s),i=e==="entries"||e===Symbol.iterator&&a,l=e==="keys"&&a,c=o[e](...r),u=n?Rl:t?Fo:xn;return!t&&Dt(s,"iterate",l?kl:ao),Et(Object.create(c),{next(){const{value:f,done:d}=c.next();return d?{value:f,done:d}:{value:i?[u(f[0]),u(f[1])]:u(f),done:d}}})}}function ga(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function tv(e,t){const n={get(o){const s=this.__v_raw,a=Ve(s),i=Ve(o);e||(Pt(o,i)&&Dt(a,"get",o),Dt(a,"get",i));const{has:l}=ma(a),c=t?Rl:e?Fo:xn;if(l.call(a,o))return c(s.get(o));if(l.call(a,i))return c(s.get(i));s!==a&&s.get(o)},get size(){const o=this.__v_raw;return!e&&Dt(Ve(o),"iterate",ao),o.size},has(o){const s=this.__v_raw,a=Ve(s),i=Ve(o);return e||(Pt(o,i)&&Dt(a,"has",o),Dt(a,"has",i)),o===i?s.has(o):s.has(o)||s.has(i)},forEach(o,s){const a=this,i=a.__v_raw,l=Ve(i),c=t?Rl:e?Fo:xn;return!e&&Dt(l,"iterate",ao),i.forEach((u,f)=>o.call(s,c(u),c(f),a))}};return Et(n,e?{add:ga("add"),set:ga("set"),delete:ga("delete"),clear:ga("clear")}:{add(o){const s=Ve(this),a=ma(s),i=Ve(o),l=!t&&!rn(o)&&!yr(o)?i:o;return a.has.call(s,l)||Pt(o,l)&&a.has.call(s,o)||Pt(i,l)&&a.has.call(s,i)||(s.add(l),ir(s,"add",l,l)),this},set(o,s){!t&&!rn(s)&&!yr(s)&&(s=Ve(s));const a=Ve(this),{has:i,get:l}=ma(a);let c=i.call(a,o);c||(o=Ve(o),c=i.call(a,o));const u=l.call(a,o);return a.set(o,s),c?Pt(s,u)&&ir(a,"set",o,s):ir(a,"add",o,s),this},delete(o){const s=Ve(this),{has:a,get:i}=ma(s);let l=a.call(s,o);l||(o=Ve(o),l=a.call(s,o)),i&&i.call(s,o);const c=s.delete(o);return l&&ir(s,"delete",o,void 0),c},clear(){const o=Ve(this),s=o.size!==0,a=o.clear();return s&&ir(o,"clear",void 0,void 0),a}}),["keys","values","entries",Symbol.iterator].forEach(o=>{n[o]=ev(o,e,t)}),n}function Ei(e,t){const n=tv(e,t);return(r,o,s)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?r:Reflect.get(He(n,o)&&o in r?n:r,o,s)}const nv={get:Ei(!1,!1)},rv={get:Ei(!1,!0)},ov={get:Ei(!0,!1)},sv={get:Ei(!0,!0)},Jp=new WeakMap,Zp=new WeakMap,Qp=new WeakMap,eh=new WeakMap;function av(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Jt(e){return yr(e)?e:Si(e,!1,X0,nv,Jp)}function th(e){return Si(e,!1,Z0,rv,Zp)}function xs(e){return Si(e,!0,J0,ov,Qp)}function iv(e){return Si(e,!0,Q0,sv,eh)}function Si(e,t,n,r,o){if(!Ie(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const s=o.get(e);if(s)return s;const a=av(k0(e));if(a===0)return e;const i=new Proxy(e,a===2?r:n);return o.set(e,i),i}function zn(e){return yr(e)?zn(e.__v_raw):!!(e&&e.__v_isReactive)}function yr(e){return!!(e&&e.__v_isReadonly)}function rn(e){return!!(e&&e.__v_isShallow)}function Ti(e){return e?!!e.__v_raw:!1}function Ve(e){const t=e&&e.__v_raw;return t?Ve(t):e}function Ci(e){return!He(e,"__v_skip")&&Object.isExtensible(e)&&Np(e,"__v_skip",!0),e}const xn=e=>Ie(e)?Jt(e):e,Fo=e=>Ie(e)?xs(e):e;function Ze(e){return e?e.__v_isRef===!0:!1}function re(e){return nh(e,!1)}function bn(e){return nh(e,!0)}function nh(e,t){return Ze(e)?e:new lv(e,t)}class lv{constructor(t,n){this.dep=new _i,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:Ve(t),this._value=n?t:xn(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,r=this.__v_isShallow||rn(t)||yr(t);t=r?t:Ve(t),Pt(t,n)&&(this._rawValue=t,this._value=r?t:xn(t),this.dep.trigger())}}function w(e){return Ze(e)?e.value:e}function yn(e){return ge(e)?e():w(e)}const cv={get:(e,t,n)=>t==="__v_raw"?e:w(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return Ze(o)&&!Ze(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function rh(e){return zn(e)?e:new Proxy(e,cv)}class uv{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new _i,{get:r,set:o}=t(n.track.bind(n),n.trigger.bind(n));this._get=r,this._set=o}get value(){return this._value=this._get()}set value(t){this._set(t)}}function fv(e){return new uv(e)}function qs(e){const t=ue(e)?new Array(e.length):{};for(const n in e)t[n]=oh(e,n);return t}class dv{constructor(t,n,r){this._object=t,this._defaultValue=r,this.__v_isRef=!0,this._value=void 0,this._key=on(n)?n:String(n),this._raw=Ve(t);let o=!0,s=t;if(!ue(t)||on(this._key)||!pi(this._key))do o=!Ti(s)||rn(s);while(o&&(s=s.__v_raw));this._shallow=o}get value(){let t=this._object[this._key];return this._shallow&&(t=w(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&Ze(this._raw[this._key])){const n=this._object[this._key];if(Ze(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return z0(this._raw,this._key)}}class pv{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function mn(e,t,n){return Ze(e)?e:ge(e)?new pv(e):Ie(e)&&arguments.length>1?oh(e,t,n):re(e)}function oh(e,t,n){return new dv(e,t,n)}class hv{constructor(t,n,r){this.fn=t,this.setter=n,this._value=void 0,this.dep=new _i(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=As-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&et!==this)return Hp(this,!0),!0}get value(){const t=this.dep.track();return Wp(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function mv(e,t,n=!1){let r,o;return ge(e)?r=e:(r=e.get,o=e.set),new hv(r,o,n)}const va={},Wa=new WeakMap;let Zr;function gv(e,t=!1,n=Zr){if(n){let r=Wa.get(n);r||Wa.set(n,r=[]),r.push(e)}}function vv(e,t,n=je){const{immediate:r,deep:o,once:s,scheduler:a,augmentJob:i,call:l}=n,c=y=>o?y:rn(y)||o===!1||o===0?lr(y,1):lr(y);let u,f,d,p,g=!1,h=!1;if(Ze(e)?(f=()=>e.value,g=rn(e)):zn(e)?(f=()=>c(e),g=!0):ue(e)?(h=!0,g=e.some(y=>zn(y)||rn(y)),f=()=>e.map(y=>{if(Ze(y))return y.value;if(zn(y))return c(y);if(ge(y))return l?l(y,2):y()})):ge(e)?t?f=l?()=>l(e,2):e:f=()=>{if(d){vr();try{d()}finally{br()}}const y=Zr;Zr=u;try{return l?l(e,3,[p]):e(p)}finally{Zr=y}}:f=qe,t&&o){const y=f,O=o===!0?1/0:o;f=()=>lr(y(),O)}const v=bi(),m=()=>{u.stop(),v&&v.active&&Cc(v.effects,u)};if(s&&t){const y=t;t=(...O)=>{const M=y(...O);return m(),M}}let b=h?new Array(e.length).fill(va):va;const S=y=>{if(!(!(u.flags&1)||!u.dirty&&!y))if(t){const O=u.run();if(y||o||g||(h?O.some((M,A)=>Pt(M,b[A])):Pt(O,b))){d&&d();const M=Zr;Zr=u;try{const A=[O,b===va?void 0:h&&b[0]===va?[]:b,p];b=O,l?l(t,3,A):t(...A)}finally{Zr=M}}}else u.run()};return i&&i(S),u=new Vp(f),u.scheduler=a?()=>a(S,!1):S,p=y=>gv(y,!1,u),d=u.onStop=()=>{const y=Wa.get(u);if(y){if(l)l(y,4);else for(const O of y)O();Wa.delete(u)}},t?r?S(!0):b=u.run():a?a(S.bind(null,!0),!0):u.run(),m.pause=u.pause.bind(u),m.resume=u.resume.bind(u),m.stop=m,m}function lr(e,t=1/0,n){if(t<=0||!Ie(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Ze(e))lr(e.value,t,n);else if(ue(e))for(let r=0;r{lr(r,t,n)});else if(Ac(e)){for(const r in e)lr(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&lr(e[r],t,n)}return e}function Xs(e,t,n,r){try{return r?e(...r):e()}catch(o){Ai(o,t,n)}}function wn(e,t,n,r){if(ge(e)){const o=Xs(e,t,n,r);return o&&Ua(o)&&o.catch(s=>{Ai(s,t,n)}),o}if(ue(e)){const o=[];for(let s=0;s>>1,o=jt[r],s=Ls(o);s=Ls(n)?jt.push(e):jt.splice(yv(t),0,e),e.flags|=1,ah()}}function ah(){za||(za=sh.then(lh))}function _v(e){ue(e)?No.push(...e):Rr&&e.id===-1?Rr.splice(Ao+1,0,e):e.flags&1||(No.push(e),e.flags|=1),ah()}function Mu(e,t,n=Hn+1){for(;nLs(n)-Ls(r));if(No.length=0,Rr){Rr.push(...t);return}for(Rr=t,Ao=0;Aoe.id==null?e.flags&2?-1:1/0:e.id;function lh(e){try{for(Hn=0;Hn{r._d&&qa(-1);const s=Ka(t),a=dr.length;let i;try{i=e(...o)}finally{for(let l=dr.length;l>a;l--)Bc();Ka(s),r._d&&qa(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function Ln(e,t){if(kt===null)return e;const n=Ri(kt),r=e.dirs||(e.dirs=[]);for(let o=0;o1)return n&&ge(t)?t.call(r&&r.proxy):t}}function wv(){return!!(ct()||io)}const Ev=Symbol.for("v-scx"),Sv=()=>Me(Ev);function Rc(e,t){return Oi(e,null,t)}function Tv(e,t){return Oi(e,null,{flush:"sync"})}function Te(e,t,n){return Oi(e,t,n)}function Oi(e,t,n=je){const{immediate:r,deep:o,flush:s,once:a}=n,i=Et({},n),l=t&&r||!t&&s!=="post";let c;if(ks){if(s==="sync"){const p=Sv();c=p.__watcherHandles||(p.__watcherHandles=[])}else if(!l){const p=()=>{};return p.stop=qe,p.resume=qe,p.pause=qe,p}}const u=$t;i.call=(p,g,h)=>wn(p,u,g,h);let f=!1;s==="post"?i.scheduler=p=>{Ht(p,u&&u.suspense)}:s!=="sync"&&(f=!0,i.scheduler=(p,g)=>{g?p():kc(p)}),i.augmentJob=p=>{t&&(p.flags|=4),f&&(p.flags|=2,u&&(p.id=u.uid,p.i=u))};const d=vv(e,t,i);return ks&&(c?c.push(d):l&&d()),d}function Cv(e,t,n){const r=this.proxy,o=De(e)?e.includes(".")?uh(r,e):()=>r[e]:e.bind(r,r);let s;ge(t)?s=t:(s=t.handler,n=t);const a=Js(this),i=Oi(o,s.bind(r),n);return a(),i}function uh(e,t){const n=t.split(".");return()=>{let r=e;for(let o=0;oe.__isTeleport,eo=e=>e&&(e.disabled||e.disabled===""),Av=e=>e&&(e.defer||e.defer===""),Fu=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Du=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Nl=(e,t)=>{const n=e&&e.to;return De(n)?t?t(n):null:n},Ov={name:"Teleport",__isTeleport:!0,process(e,t,n,r,o,s,a,i,l,c){const{mc:u,pc:f,pbc:d,o:{insert:p,querySelector:g,createText:h,createComment:v,parentNode:m}}=c,b=eo(t.props);let{dynamicChildren:S}=t;const y=(A,$,N)=>{A.shapeFlag&16&&u(A.children,$,N,o,s,a,i,l)},O=(A=t)=>{const $=eo(A.props),N=A.target=Nl(A.props,g),U=Ml(N,A,h,p);N&&(a!=="svg"&&Fu(N)?a="svg":a!=="mathml"&&Du(N)&&(a="mathml"),o&&o.isCE&&(o.ce._teleportTargets||(o.ce._teleportTargets=new Set)).add(N),$||(y(A,N,U),ls(A,!1)))},M=A=>{const $=()=>{if(Lr.get(A)===$){if(Lr.delete(A),eo(A.props)){const N=m(A.el)||n;y(A,N,A.anchor),ls(A,!0)}O(A)}};Lr.set(A,$),Ht($,s)};if(e==null){const A=t.el=h(""),$=t.anchor=h("");if(p(A,n,r),p($,n,r),Av(t.props)||s&&s.pendingBranch){M(t);return}b&&(y(t,n,$),ls(t,!0)),O()}else{t.el=e.el;const A=t.anchor=e.anchor,$=Lr.get(e);if($){$.flags|=8,Lr.delete(e),M(t);return}t.targetStart=e.targetStart;const N=t.target=e.target,U=t.targetAnchor=e.targetAnchor,z=eo(e.props),D=z?n:N,Q=z?A:U;if(a==="svg"||Fu(N)?a="svg":(a==="mathml"||Du(N))&&(a="mathml"),S?(d(e.dynamicChildren,S,D,o,s,a,i),Vc(e,t,!0)):l||f(e,t,D,Q,o,s,a,i,!1),b)z?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):ba(t,n,A,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const Z=Nl(t.props,g);Z&&(t.target=Z,ba(t,Z,null,c,0))}else z&&ba(t,N,U,c,1);ls(t,b)}},remove(e,t,n,{um:r,o:{remove:o}},s){const{shapeFlag:a,children:i,anchor:l,targetStart:c,targetAnchor:u,target:f,props:d}=e,p=eo(d),g=s||!p,h=Lr.get(e);if(h&&(h.flags|=8,Lr.delete(e)),f&&(o(c),o(u)),s&&o(l),!h&&(p||f)&&a&16)for(let v=0;v{e.isMounted=!0}),Lt(()=>{e.isUnmounting=!0}),e}const cn=[Function,Array],hh={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:cn,onEnter:cn,onAfterEnter:cn,onEnterCancelled:cn,onBeforeLeave:cn,onLeave:cn,onAfterLeave:cn,onLeaveCancelled:cn,onBeforeAppear:cn,onAppear:cn,onAfterAppear:cn,onAppearCancelled:cn},mh=e=>{const t=e.subTree;return t.component?mh(t.component):t},Iv={name:"BaseTransition",props:hh,setup(e,{slots:t}){const n=ct(),r=Lv();return()=>{const o=t.default&&bh(t.default(),!0),s=o&&o.length?gh(o):n.subTree?be():void 0;if(!s)return;const a=Ve(e),{mode:i}=a;if(r.isLeaving)return al(s);const l=$u(s);if(!l)return al(s);let c=Fl(l,a,r,n,f=>c=f);l.type!==At&&Is(l,c);let u=n.subTree&&$u(n.subTree);if(u&&u.type!==At&&!to(u,l)&&mh(n).type!==At){let f=Fl(u,a,r,n);if(Is(u,f),i==="out-in"&&l.type!==At)return r.isLeaving=!0,f.afterLeave=()=>{r.isLeaving=!1,n.job.flags&8||n.update(),delete f.afterLeave,u=void 0},al(s);i==="in-out"&&l.type!==At?f.delayLeave=(d,p,g)=>{const h=vh(r,u);h[String(u.key)]=u,d[pn]=()=>{p(),d[pn]=void 0,delete c.delayedLeave,u=void 0},c.delayedLeave=()=>{g(),delete c.delayedLeave,u=void 0}}:u=void 0}else u&&(u=void 0);return s}}};function gh(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==At){t=n;break}}return t}const Pv=Iv;function vh(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function Fl(e,t,n,r,o){const{appear:s,mode:a,persisted:i=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:u,onEnterCancelled:f,onBeforeLeave:d,onLeave:p,onAfterLeave:g,onLeaveCancelled:h,onBeforeAppear:v,onAppear:m,onAfterAppear:b,onAppearCancelled:S}=t,y=String(e.key),O=vh(n,e),M=(N,U)=>{N&&wn(N,r,9,U)},A=(N,U)=>{const z=U[1];M(N,U),ue(N)?N.every(D=>D.length<=1)&&z():N.length<=1&&z()},$={mode:a,persisted:i,beforeEnter(N){let U=l;if(!n.isMounted)if(s)U=v||l;else return;N[pn]&&N[pn](!0);const z=O[y];z&&to(e,z)&&z.el[pn]&&z.el[pn](),M(U,[N])},enter(N){if(O[y]===e)return;let U=c,z=u,D=f;if(!n.isMounted)if(s)U=m||c,z=b||u,D=S||f;else return;let Q=!1;N[ts]=G=>{Q||(Q=!0,G?M(D,[N]):M(z,[N]),$.delayedLeave&&$.delayedLeave(),N[ts]=void 0)};const Z=N[ts].bind(null,!1);U?A(U,[N,Z]):Z()},leave(N,U){const z=String(e.key);if(N[ts]&&N[ts](!0),n.isUnmounting)return U();M(d,[N]);let D=!1;N[pn]=Z=>{D||(D=!0,U(),Z?M(h,[N]):M(g,[N]),N[pn]=void 0,O[z]===e&&delete O[z])};const Q=N[pn].bind(null,!1);O[z]=e,p?A(p,[N,Q]):Q()},clone(N){const U=Fl(N,t,n,r,o);return o&&o(U),U}};return $}function al(e){if(xi(e))return e=_r(e),e.children=null,e}function $u(e){if(!xi(e))return dh(e.type)&&e.children?gh(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&ge(n.default))return n.default()}}function Is(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Is(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 bh(e,t=!1,n){let r=[],o=0;for(let s=0;s1)for(let s=0;sys(h,t&&(ue(t)?t[v]:t),n,r,o));return}if(Mo(r)&&!o){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&ys(e,t,n,r.component.subTree);return}const s=r.shapeFlag&4?Ri(r.component):r.el,a=o?null:s,{i,r:l}=e,c=t&&t.r,u=i.refs===je?i.refs={}:i.refs,f=i.setupState,d=Ve(f),p=f===je?kp:h=>Vu(u,h)?!1:He(d,h),g=(h,v)=>!(v&&Vu(u,v));if(c!=null&&c!==l){if(Bu(t),De(c))u[c]=null,p(c)&&(f[c]=null);else if(Ze(c)){const h=t;g(c,h.k)&&(c.value=null),h.k&&(u[h.k]=null)}}if(ge(l))Xs(l,i,12,[a,u]);else{const h=De(l),v=Ze(l);if(h||v){const m=()=>{if(e.f){const b=h?p(l)?f[l]:u[l]:g()||!e.k?l.value:u[e.k];if(o)ue(b)&&Cc(b,s);else if(ue(b))b.includes(s)||b.push(s);else if(h)u[l]=[s],p(l)&&(f[l]=u[l]);else{const S=[s];g(l,e.k)&&(l.value=S),e.k&&(u[e.k]=S)}}else h?(u[l]=a,p(l)&&(f[l]=a)):v&&(g(l,e.k)&&(l.value=a),e.k&&(u[e.k]=a))};if(a){const b=()=>{m(),Ga.delete(e)};b.id=-1,Ga.set(e,b),Ht(b,n)}else Bu(e),m()}}}function Bu(e){const t=Ga.get(e);t&&(t.flags|=8,Ga.delete(e))}vi().requestIdleCallback;vi().cancelIdleCallback;const Mo=e=>!!e.type.__asyncLoader,xi=e=>e.type.__isKeepAlive;function _h(e,t){Eh(e,"a",t)}function wh(e,t){Eh(e,"da",t)}function Eh(e,t,n=$t){const r=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(Li(t,r,n),n){let o=n.parent;for(;o&&o.parent;)xi(o.parent.vnode)&&kv(r,t,n,o),o=o.parent}}function kv(e,t,n,r){const o=Li(t,e,r,!0);Ii(()=>{Cc(r[t],o)},n)}function Li(e,t,n=$t,r=!1){if(n){const o=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...a)=>{vr();const i=Js(n),l=wn(t,n,e,a);return i(),br(),l});return r?o.unshift(s):o.push(s),s}}const Sr=e=>(t,n=$t)=>{(!ks||e==="sp")&&Li(e,(...r)=>t(...r),n)},Sh=Sr("bm"),pt=Sr("m"),Rv=Sr("bu"),Nc=Sr("u"),Lt=Sr("bum"),Ii=Sr("um"),Nv=Sr("sp"),Mv=Sr("rtg"),Fv=Sr("rtc");function Dv(e,t=$t){Li("ec",e,t)}const Mc="components",$v="directives";function dn(e,t){return Fc(Mc,e,!0,t)||e}const Th=Symbol.for("v-ndc");function vt(e){return De(e)?Fc(Mc,e,!1)||e:e||Th}function Vv(e){return Fc($v,e)}function Fc(e,t,n=!0,r=!1){const o=kt||$t;if(o){const s=o.type;if(e===Mc){const i=_b(s,!1);if(i&&(i===t||i===Rt(t)||i===mi(Rt(t))))return s}const a=Hu(o[e]||s[e],t)||Hu(o.appContext[e],t);return!a&&r?s:a}}function Hu(e,t){return e&&(e[t]||e[Rt(t)]||e[mi(Rt(t))])}function cs(e,t,n,r){let o;const s=n&&n[r],a=ue(e);if(a||De(e)){const i=a&&zn(e);let l=!1,c=!1;i&&(l=!rn(e),c=yr(e),e=wi(e)),o=new Array(e.length);for(let u=0,f=e.length;ut(i,l,void 0,s&&s[l]));else{const i=Object.keys(e);o=new Array(i.length);for(let l=0,c=i.length;l{const s=r.fn(...o);return s&&(s.key=r.key),s}:r.fn)}return e}function Ce(e,t,n={},r,o,s){if(kt.ce||kt.parent&&Mo(kt.parent)&&kt.parent.ce){const c=s!=null&&n.key==null?Et({},n,{key:s}):n,u=Object.keys(c).length>0;return t!=="default"&&(c.name=t),V(),ye(Qe,null,[xe("slot",c,r&&r())],u?-2:64)}let a=e[t];a&&a._c&&(a._d=!1);const i=dr.length;V();let l;try{const c=a&&Ah(a(n)),u=n.key||s||c&&c.key;l=ye(Qe,{key:(u&&!on(u)?u:`_${t}`)+(!c&&r?"_fb":"")},c||(r?r():[]),c&&e._===1?64:-2)}catch(c){for(let u=dr.length;u>i;u--)Bc();throw c}finally{a&&a._c&&(a._d=!0)}return!o&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),l}function Ah(e){return e.some(t=>pr(t)?!(t.type===At||t.type===Qe&&!Ah(t.children)):!0)?e:null}const Dl=e=>e?Gh(e)?Ri(e):Dl(e.parent):null,_s=Et(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=>Dl(e.parent),$root:e=>Dl(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Lh(e),$forceUpdate:e=>e.f||(e.f=()=>{kc(e.update)}),$nextTick:e=>e.n||(e.n=Ye.bind(e.proxy)),$watch:e=>Cv.bind(e)}),il=(e,t)=>e!==je&&!e.__isScriptSetup&&He(e,t),Bv={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:o,props:s,accessCache:a,type:i,appContext:l}=e;if(t[0]!=="$"){const d=a[t];if(d!==void 0)switch(d){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return s[t]}else{if(il(r,t))return a[t]=1,r[t];if(o!==je&&He(o,t))return a[t]=2,o[t];if(He(s,t))return a[t]=3,s[t];if(n!==je&&He(n,t))return a[t]=4,n[t];$l&&(a[t]=0)}}const c=_s[t];let u,f;if(c)return t==="$attrs"&&Dt(e.attrs,"get",""),c(e);if((u=i.__cssModules)&&(u=u[t]))return u;if(n!==je&&He(n,t))return a[t]=4,n[t];if(f=l.config.globalProperties,He(f,t))return f[t]},set({_:e},t,n){const{data:r,setupState:o,ctx:s}=e;return il(o,t)?(o[t]=n,!0):r!==je&&He(r,t)?(r[t]=n,!0):He(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(s[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,props:s,type:a}},i){let l;return!!(n[i]||e!==je&&i[0]!=="$"&&He(e,i)||il(t,i)||He(s,i)||He(r,i)||He(_s,i)||He(o.config.globalProperties,i)||(l=a.__cssModules)&&l[i])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:He(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Pi(){return Oh().slots}function Hv(){return Oh().attrs}function Oh(e){const t=ct();return t.setupContext||(t.setupContext=qh(t))}function Uu(e){return ue(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let $l=!0;function Uv(e){const t=Lh(e),n=e.proxy,r=e.ctx;$l=!1,t.beforeCreate&&ju(t.beforeCreate,e,"bc");const{data:o,computed:s,methods:a,watch:i,provide:l,inject:c,created:u,beforeMount:f,mounted:d,beforeUpdate:p,updated:g,activated:h,deactivated:v,beforeDestroy:m,beforeUnmount:b,destroyed:S,unmounted:y,render:O,renderTracked:M,renderTriggered:A,errorCaptured:$,serverPrefetch:N,expose:U,inheritAttrs:z,components:D,directives:Q,filters:Z}=t;if(c&&jv(c,r,null),a)for(const L in a){const F=a[L];ge(F)&&(r[L]=F.bind(n))}if(o){const L=o.call(n,n);Ie(L)&&(e.data=Jt(L))}if($l=!0,s)for(const L in s){const F=s[L],J=ge(F)?F.bind(n,n):ge(F.get)?F.get.bind(n,n):qe,te=!ge(F)&&ge(F.set)?F.set.bind(n):qe,ve=P({get:J,set:te});Object.defineProperty(r,L,{enumerable:!0,configurable:!0,get:()=>ve.value,set:le=>ve.value=le})}if(i)for(const L in i)xh(i[L],r,n,L);if(l){const L=ge(l)?l.call(n):l;Reflect.ownKeys(L).forEach(F=>{Vt(F,L[F])})}u&&ju(u,e,"c");function H(L,F){ue(F)?F.forEach(J=>L(J.bind(n))):F&&L(F.bind(n))}if(H(Sh,f),H(pt,d),H(Rv,p),H(Nc,g),H(_h,h),H(wh,v),H(Dv,$),H(Fv,M),H(Mv,A),H(Lt,b),H(Ii,y),H(Nv,N),ue(U))if(U.length){const L=e.exposed||(e.exposed={});U.forEach(F=>{Object.defineProperty(L,F,{get:()=>n[F],set:J=>n[F]=J,enumerable:!0})})}else e.exposed||(e.exposed={});O&&e.render===qe&&(e.render=O),z!=null&&(e.inheritAttrs=z),D&&(e.components=D),Q&&(e.directives=Q),N&&yh(e)}function jv(e,t,n=qe){ue(e)&&(e=Vl(e));for(const r in e){const o=e[r];let s;Ie(o)?"default"in o?s=Me(o.from||r,o.default,!0):s=Me(o.from||r):s=Me(o),Ze(s)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>s.value,set:a=>s.value=a}):t[r]=s}}function ju(e,t,n){wn(ue(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function xh(e,t,n,r){let o=r.includes(".")?uh(n,r):()=>n[r];if(De(e)){const s=t[e];ge(s)&&Te(o,s)}else if(ge(e))Te(o,e.bind(n));else if(Ie(e))if(ue(e))e.forEach(s=>xh(s,t,n,r));else{const s=ge(e.handler)?e.handler.bind(n):t[e.handler];ge(s)&&Te(o,s,e)}}function Lh(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:s,config:{optionMergeStrategies:a}}=e.appContext,i=s.get(t);let l;return i?l=i:!o.length&&!n&&!r?l=t:(l={},o.length&&o.forEach(c=>Ya(l,c,a,!0)),Ya(l,t,a)),Ie(t)&&s.set(t,l),l}function Ya(e,t,n,r=!1){const{mixins:o,extends:s}=t;s&&Ya(e,s,n,!0),o&&o.forEach(a=>Ya(e,a,n,!0));for(const a in t)if(!(r&&a==="expose")){const i=Wv[a]||n&&n[a];e[a]=i?i(e[a],t[a]):t[a]}return e}const Wv={data:Wu,props:zu,emits:zu,methods:us,computed:us,beforeCreate:Bt,created:Bt,beforeMount:Bt,mounted:Bt,beforeUpdate:Bt,updated:Bt,beforeDestroy:Bt,beforeUnmount:Bt,destroyed:Bt,unmounted:Bt,activated:Bt,deactivated:Bt,errorCaptured:Bt,serverPrefetch:Bt,components:us,directives:us,watch:Kv,provide:Wu,inject:zv};function Wu(e,t){return t?e?function(){return Et(ge(e)?e.call(this,this):e,ge(t)?t.call(this,this):t)}:t:e}function zv(e,t){return us(Vl(e),Vl(t))}function Vl(e){if(ue(e)){const t={};for(let n=0;n{let u,f=je,d;return Tv(()=>{const p=e[o];Pt(u,p)&&(u=p,c())}),{get(){return l(),n.get?n.get(u):u},set(p){const g=n.set?n.set(p):p;if(!Pt(g,u)&&!(f!==je&&Pt(p,f)))return;const h=r.vnode.props,v=!!(h&&(t in h||o in h||s in h)&&(`onUpdate:${t}`in h||`onUpdate:${o}`in h||`onUpdate:${s}`in h));v||(u=p,c()),r.emit(`update:${t}`,g),Pt(p,f)&&(Pt(p,g)&&!Pt(g,d)||v&&f!==je&&!Pt(g,u))&&c(),f=p,d=g}}});return i[Symbol.iterator]=()=>{let l=0;return{next(){return l<2?{value:l++?a||je:i,done:!1}:{done:!0}}}},i}const Ph=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Rt(t)}Modifiers`]||e[`${Jn(t)}Modifiers`];function qv(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||je;let o=n;const s=t.startsWith("update:"),a=s&&Ph(r,t.slice(7));a&&(a.trim&&(o=n.map(u=>De(u)?u.trim():u)),a.number&&(o=n.map(gi)));let i,l=r[i=gs(t)]||r[i=gs(Rt(t))];!l&&s&&(l=r[i=gs(Jn(t))]),l&&wn(l,e,6,o);const c=r[i+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[i])return;e.emitted[i]=!0,wn(c,e,6,o)}}const Xv=new WeakMap;function kh(e,t,n=!1){const r=n?Xv:t.emitsCache,o=r.get(e);if(o!==void 0)return o;const s=e.emits;let a={},i=!1;if(!ge(e)){const l=c=>{const u=kh(c,t,!0);u&&(i=!0,Et(a,u))};!n&&t.mixins.length&&t.mixins.forEach(l),e.extends&&l(e.extends),e.mixins&&e.mixins.forEach(l)}return!s&&!i?(Ie(e)&&r.set(e,null),null):(ue(s)?s.forEach(l=>a[l]=null):Et(a,s),Ie(e)&&r.set(e,a),a)}function ki(e,t){return!e||!fi(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),He(e,t[0].toLowerCase()+t.slice(1))||He(e,Jn(t))||He(e,t))}function Ku(e){const{type:t,vnode:n,proxy:r,withProxy:o,propsOptions:[s],slots:a,attrs:i,emit:l,render:c,renderCache:u,props:f,data:d,setupState:p,ctx:g,inheritAttrs:h}=e,v=Ka(e);let m,b;try{if(n.shapeFlag&4){const y=o||r,O=y;m=jn(c.call(O,y,u,f,p,d,g)),b=i}else{const y=t;m=jn(y.length>1?y(f,{attrs:i,slots:a,emit:l}):y(f,null)),b=t.props?i:Jv(i)}}catch(y){dr.length=0,Ai(y,e,1),m=xe(At)}let S=m;if(b&&h!==!1){const y=Object.keys(b),{shapeFlag:O}=S;y.length&&O&7&&(s&&y.some(di)&&(b=Zv(b,s)),S=_r(S,b,!1,!0))}return n.dirs&&(S=_r(S,null,!1,!0),S.dirs=S.dirs?S.dirs.concat(n.dirs):n.dirs),n.transition&&Is(S,n.transition),m=S,Ka(v),m}const Jv=e=>{let t;for(const n in e)(n==="class"||n==="style"||fi(n))&&((t||(t={}))[n]=e[n]);return t},Zv=(e,t)=>{const n={};for(const r in e)(!di(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Qv(e,t,n){const{props:r,children:o,component:s}=e,{props:a,children:i,patchFlag:l}=t,c=s.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&l>=0){if(l&1024)return!0;if(l&16)return r?Gu(r,a,c):!!a;if(l&8){const u=t.dynamicProps;for(let f=0;fObject.create(Nh),Fh=e=>Object.getPrototypeOf(e)===Nh;function tb(e,t,n,r=!1){const o={},s=Mh();e.propsDefaults=Object.create(null),Dh(e,t,o,s);for(const a in e.propsOptions[0])a in o||(o[a]=void 0);n?e.props=r?o:th(o):e.type.props?e.props=o:e.props=s,e.attrs=s}function nb(e,t,n,r){const{props:o,attrs:s,vnode:{patchFlag:a}}=e,i=Ve(o),[l]=e.propsOptions;let c=!1;if((r||a>0)&&!(a&16)){if(a&8){const u=e.vnode.dynamicProps;for(let f=0;f{l=!0;const[d,p]=$h(f,t,!0);Et(a,d),p&&i.push(...p)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!s&&!l)return Ie(e)&&r.set(e,ko),ko;if(ue(s))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",$c=e=>ue(e)?e.map(jn):[jn(e)],ob=(e,t,n)=>{if(t._n)return t;const r=me((...o)=>$c(t(...o)),n);return r._c=!1,r},Vh=(e,t,n)=>{const r=e._ctx;for(const o in e){if(Dc(o))continue;const s=e[o];if(ge(s))t[o]=ob(o,s,r);else if(s!=null){const a=$c(s);t[o]=()=>a}}},Bh=(e,t)=>{const n=$c(t);e.slots.default=()=>n},Hh=(e,t,n)=>{for(const r in t)(n||!Dc(r))&&(e[r]=t[r])},sb=(e,t,n)=>{const r=e.slots=Mh();if(e.vnode.shapeFlag&32){const o=t._;o?(Hh(r,t,n),n&&Np(r,"_",o,!0)):Vh(t,r)}else t&&Bh(e,t)},ab=(e,t,n)=>{const{vnode:r,slots:o}=e;let s=!0,a=je;if(r.shapeFlag&32){const i=t._;i?n&&i===1?s=!1:Hh(o,t,n):(s=!t.$stable,Vh(t,o)),a=t}else t&&(Bh(e,t),a={default:1});if(s)for(const i in o)!Dc(i)&&a[i]==null&&delete o[i]},Ht=fb;function ib(e){return lb(e)}function lb(e,t){const n=vi();n.__VUE__=!0;const{insert:r,remove:o,patchProp:s,createElement:a,createText:i,createComment:l,setText:c,setElementText:u,parentNode:f,nextSibling:d,setScopeId:p=qe,insertStaticContent:g}=e,h=(T,C,k,Y=null,q=null,K=null,_=void 0,E=null,x=!!C.dynamicChildren)=>{if(T===C)return;T&&!to(T,C)&&(Y=j(T),le(T,q,K,!0),T=null),C.patchFlag===-2&&(x=!1,C.dynamicChildren=null);const{type:R,ref:se,shapeFlag:X}=C;switch(R){case mo:v(T,C,k,Y);break;case At:m(T,C,k,Y);break;case Fa:T==null&&b(C,k,Y,_);break;case Qe:D(T,C,k,Y,q,K,_,E,x);break;default:X&1?O(T,C,k,Y,q,K,_,E,x):X&6?Q(T,C,k,Y,q,K,_,E,x):(X&64||X&128)&&R.process(T,C,k,Y,q,K,_,E,x,ne)}se!=null&&q?ys(se,T&&T.ref,K,C||T,!C):se==null&&T&&T.ref!=null&&ys(T.ref,null,K,T,!0)},v=(T,C,k,Y)=>{if(T==null)r(C.el=i(C.children),k,Y);else{const q=C.el=T.el;C.children!==T.children&&c(q,C.children)}},m=(T,C,k,Y)=>{T==null?r(C.el=l(C.children||""),k,Y):C.el=T.el},b=(T,C,k,Y)=>{[T.el,T.anchor]=g(T.children,C,k,Y,T.el,T.anchor)},S=({el:T,anchor:C},k,Y)=>{let q;for(;T&&T!==C;)q=d(T),r(T,k,Y),T=q;r(C,k,Y)},y=({el:T,anchor:C})=>{let k;for(;T&&T!==C;)k=d(T),o(T),T=k;o(C)},O=(T,C,k,Y,q,K,_,E,x)=>{if(C.type==="svg"?_="svg":C.type==="math"&&(_="mathml"),T==null)M(C,k,Y,q,K,_,E,x);else{const R=T.el&&T.el._isVueCE?T.el:null;try{R&&R._beginPatch(),N(T,C,q,K,_,E,x)}finally{R&&R._endPatch()}}},M=(T,C,k,Y,q,K,_,E)=>{let x,R;const{props:se,shapeFlag:X,transition:I,dirs:B}=T;if(x=T.el=a(T.type,K,se&&se.is,se),X&8?u(x,T.children):X&16&&$(T.children,x,null,Y,q,ll(T,K),_,E),B&&Gr(T,null,Y,"created"),A(x,T,T.scopeId,_,Y),se){for(const we in se)we!=="value"&&!ms(we)&&s(x,we,null,se[we],K,Y);"value"in se&&s(x,"value",null,se.value,K),(R=se.onVnodeBeforeMount)&&Dn(R,Y,T)}B&&Gr(T,null,Y,"beforeMount");const fe=cb(q,I);fe&&I.beforeEnter(x),r(x,C,k),((R=se&&se.onVnodeMounted)||fe||B)&&Ht(()=>{R&&Dn(R,Y,T),fe&&I.enter(x),B&&Gr(T,null,Y,"mounted")},q)},A=(T,C,k,Y,q)=>{if(k&&p(T,k),Y)for(let K=0;K{for(let R=x;R{const E=C.el=T.el;let{patchFlag:x,dynamicChildren:R,dirs:se}=C;x|=T.patchFlag&16;const X=T.props||je,I=C.props||je;let B;if(k&&Yr(k,!1),(B=I.onVnodeBeforeUpdate)&&Dn(B,k,C,T),se&&Gr(C,T,k,"beforeUpdate"),k&&Yr(k,!0),R&&(!T.dynamicChildren||T.dynamicChildren.length!==R.length)&&(x=0,_=!1,R=null),(X.innerHTML&&I.innerHTML==null||X.textContent&&I.textContent==null)&&u(E,""),R?U(T.dynamicChildren,R,E,k,Y,ll(C,q),K):_||F(T,C,E,null,k,Y,ll(C,q),K,!1),x>0){if(x&16)z(E,X,I,k,q);else if(x&2&&X.class!==I.class&&s(E,"class",null,I.class,q),x&4&&s(E,"style",X.style,I.style,q),x&8){const fe=C.dynamicProps;for(let we=0;we{B&&Dn(B,k,C,T),se&&Gr(C,T,k,"updated")},Y)},U=(T,C,k,Y,q,K,_)=>{for(let E=0;E{if(C!==k){if(C!==je)for(const K in C)!ms(K)&&!(K in k)&&s(T,K,C[K],null,q,Y);for(const K in k){if(ms(K))continue;const _=k[K],E=C[K];_!==E&&K!=="value"&&s(T,K,E,_,q,Y)}"value"in k&&s(T,"value",C.value,k.value,q)}},D=(T,C,k,Y,q,K,_,E,x)=>{const R=C.el=T?T.el:i(""),se=C.anchor=T?T.anchor:i("");let{patchFlag:X,dynamicChildren:I,slotScopeIds:B}=C;B&&(E=E?E.concat(B):B),T==null?(r(R,k,Y),r(se,k,Y),$(C.children||[],k,se,q,K,_,E,x)):X>0&&X&64&&I&&T.dynamicChildren&&T.dynamicChildren.length===I.length?(U(T.dynamicChildren,I,k,q,K,_,E),(C.key!=null||q&&C===q.subTree)&&Vc(T,C,!0)):F(T,C,k,se,q,K,_,E,x)},Q=(T,C,k,Y,q,K,_,E,x)=>{C.slotScopeIds=E,T==null?C.shapeFlag&512?q.ctx.activate(C,k,Y,_,x):Z(C,k,Y,q,K,_,x):G(T,C,x)},Z=(T,C,k,Y,q,K,_)=>{const E=T.component=gb(T,Y,q);if(xi(T)&&(E.ctx.renderer=ne),vb(E,!1,_),E.asyncDep){if(q&&q.registerDep(E,H,_),!T.el){const x=E.subTree=xe(At);m(null,x,C,k),T.placeholder=x.el}}else H(E,T,C,k,q,K,_)},G=(T,C,k)=>{const Y=C.component=T.component;if(Qv(T,C,k))if(Y.asyncDep&&!Y.asyncResolved){L(Y,C,k);return}else Y.next=C,Y.update();else C.el=T.el,Y.vnode=C},H=(T,C,k,Y,q,K,_)=>{const E=()=>{if(T.isMounted){let{next:X,bu:I,u:B,parent:fe,vnode:we}=T;{const ht=Uh(T);if(ht){X&&(X.el=we.el,L(T,X,_)),ht.asyncDep.then(()=>{Ht(()=>{T.isUnmounted||R()},q)});return}}let Re=X,Be;Yr(T,!1),X?(X.el=we.el,L(T,X,_)):X=we,I&&Ma(I),(Be=X.props&&X.props.onVnodeBeforeUpdate)&&Dn(Be,fe,X,we),Yr(T,!0);const $e=Ku(T),It=T.subTree;T.subTree=$e,h(It,$e,f(It.el),j(It),T,q,K),X.el=$e.el,Re===null&&eb(T,$e.el),B&&Ht(B,q),(Be=X.props&&X.props.onVnodeUpdated)&&Ht(()=>Dn(Be,fe,X,we),q)}else{let X;const{el:I,props:B}=C,{bm:fe,m:we,parent:Re,root:Be,type:$e}=T,It=Mo(C);Yr(T,!1),fe&&Ma(fe),!It&&(X=B&&B.onVnodeBeforeMount)&&Dn(X,Re,C),Yr(T,!0);{Be.ce&&Be.ce._hasShadowRoot()&&Be.ce._injectChildStyle($e,T.parent?T.parent.type:void 0);const ht=T.subTree=Ku(T);h(null,ht,k,Y,T,q,K),C.el=ht.el}if(we&&Ht(we,q),!It&&(X=B&&B.onVnodeMounted)){const ht=C;Ht(()=>Dn(X,Re,ht),q)}(C.shapeFlag&256||Re&&Mo(Re.vnode)&&Re.vnode.shapeFlag&256)&&T.a&&Ht(T.a,q),T.isMounted=!0,C=k=Y=null}};T.scope.on();const x=T.effect=new Vp(E);T.scope.off();const R=T.update=x.run.bind(x),se=T.job=x.runIfDirty.bind(x);se.i=T,se.id=T.uid,x.scheduler=()=>kc(se),Yr(T,!0),R()},L=(T,C,k)=>{C.component=T;const Y=T.vnode.props;T.vnode=C,T.next=null,nb(T,C.props,Y,k),ab(T,C.children,k),vr(),Mu(T),br()},F=(T,C,k,Y,q,K,_,E,x=!1)=>{const R=T&&T.children,se=T?T.shapeFlag:0,X=C.children,{patchFlag:I,shapeFlag:B}=C;if(I>0){if(I&128){te(R,X,k,Y,q,K,_,E,x);return}else if(I&256){J(R,X,k,Y,q,K,_,E,x);return}}B&8?(se&16&&Fe(R,q,K),X!==R&&u(k,X)):se&16?B&16?te(R,X,k,Y,q,K,_,E,x):Fe(R,q,K,!0):(se&8&&u(k,""),B&16&&$(X,k,Y,q,K,_,E,x))},J=(T,C,k,Y,q,K,_,E,x)=>{T=T||ko,C=C||ko;const R=T.length,se=C.length,X=Math.min(R,se);let I;for(I=0;Ise?Fe(T,q,K,!0,!1,X):$(C,k,Y,q,K,_,E,x,X)},te=(T,C,k,Y,q,K,_,E,x)=>{let R=0;const se=C.length;let X=T.length-1,I=se-1;for(;R<=X&&R<=I;){const B=T[R],fe=C[R]=x?ar(C[R]):jn(C[R]);if(to(B,fe))h(B,fe,k,null,q,K,_,E,x);else break;R++}for(;R<=X&&R<=I;){const B=T[X],fe=C[I]=x?ar(C[I]):jn(C[I]);if(to(B,fe))h(B,fe,k,null,q,K,_,E,x);else break;X--,I--}if(R>X){if(R<=I){const B=I+1,fe=BI)for(;R<=X;)le(T[R],q,K,!0),R++;else{const B=R,fe=R,we=new Map;for(R=fe;R<=I;R++){const Le=C[R]=x?ar(C[R]):jn(C[R]);Le.key!=null&&we.set(Le.key,R)}let Re,Be=0;const $e=I-fe+1;let It=!1,ht=0;const Oe=new Array($e);for(R=0;R<$e;R++)Oe[R]=0;for(R=B;R<=X;R++){const Le=T[R];if(Be>=$e){le(Le,q,K,!0);continue}let it;if(Le.key!=null)it=we.get(Le.key);else for(Re=fe;Re<=I;Re++)if(Oe[Re-fe]===0&&to(Le,C[Re])){it=Re;break}it===void 0?le(Le,q,K,!0):(Oe[it-fe]=R+1,it>=ht?ht=it:It=!0,h(Le,C[it],k,null,q,K,_,E,x),Be++)}const ke=It?ub(Oe):ko;for(Re=ke.length-1,R=$e-1;R>=0;R--){const Le=fe+R,it=C[Le],St=C[Le+1],kn=Le+1{const{el:K,type:_,transition:E,children:x,shapeFlag:R}=T;if(R&6){ve(T.component.subTree,C,k,Y);return}if(R&128){T.suspense.move(C,k,Y);return}if(R&64){_.move(T,C,k,ne);return}if(_===Qe){r(K,C,k);for(let X=0;XE.enter(K),q));else{const{leave:X,delayLeave:I,afterLeave:B}=E,fe=()=>{T.ctx.isUnmounted?o(K):r(K,C,k)},we=()=>{const Re=K._isLeaving||!!K[pn];K._isLeaving&&K[pn](!0),E.persisted&&!Re?fe():X(K,()=>{fe(),B&&B()})};I?I(K,fe,we):we()}else r(K,C,k)},le=(T,C,k,Y=!1,q=!1)=>{const{type:K,props:_,ref:E,children:x,dynamicChildren:R,shapeFlag:se,patchFlag:X,dirs:I,cacheIndex:B,memo:fe}=T;if(X===-2&&(q=!1),E!=null&&(vr(),ys(E,null,k,T,!0),br()),B!=null&&(C.renderCache[B]=void 0),se&256){C.ctx.deactivate(T);return}const we=se&1&&I,Re=!Mo(T);let Be;if(Re&&(Be=_&&_.onVnodeBeforeUnmount)&&Dn(Be,C,T),se&6)Se(T.component,k,Y);else{if(se&128){T.suspense.unmount(k,Y);return}we&&Gr(T,null,C,"beforeUnmount"),se&64?T.type.remove(T,C,k,ne,Y):R&&!R.hasOnce&&(K!==Qe||X>0&&X&64)?Fe(R,C,k,!1,!0):(K===Qe&&X&384||!q&&se&16)&&Fe(x,C,k),Y&&Pe(T)}const $e=fe!=null&&B==null;(Re&&(Be=_&&_.onVnodeUnmounted)||we||$e)&&Ht(()=>{Be&&Dn(Be,C,T),we&&Gr(T,null,C,"unmounted"),$e&&(T.el=null)},k)},Pe=T=>{const{type:C,el:k,anchor:Y,transition:q}=T;if(C===Qe){_e(k,Y);return}if(C===Fa){y(T);return}const K=()=>{o(k),q&&!q.persisted&&q.afterLeave&&q.afterLeave()};if(T.shapeFlag&1&&q&&!q.persisted){const{leave:_,delayLeave:E}=q,x=()=>_(k,K);E?E(T.el,K,x):x()}else K()},_e=(T,C)=>{let k;for(;T!==C;)k=d(T),o(T),T=k;o(C)},Se=(T,C,k)=>{const{bum:Y,scope:q,job:K,subTree:_,um:E,m:x,a:R}=T;qu(x),qu(R),Y&&Ma(Y),q.stop(),K&&(K.flags|=8,le(_,T,C,k)),E&&Ht(E,C),Ht(()=>{T.isUnmounted=!0},C)},Fe=(T,C,k,Y=!1,q=!1,K=0)=>{for(let _=K;_{if(T.shapeFlag&6)return j(T.component.subTree);if(T.shapeFlag&128)return T.suspense.next();const C=d(T.anchor||T.el),k=C&&C[fh];return k?d(k):C};let oe=!1;const ee=(T,C,k)=>{let Y;T==null?C._vnode&&(le(C._vnode,null,null,!0),Y=C._vnode.component):h(C._vnode||null,T,C,null,null,null,k),C._vnode=T,oe||(oe=!0,Mu(Y),ih(),oe=!1)},ne={p:h,um:le,m:ve,r:Pe,mt:Z,mc:$,pc:F,pbc:U,n:j,o:e};return{render:ee,hydrate:void 0,createApp:Yv(ee)}}function ll({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Yr({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function cb(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Vc(e,t,n=!1){const r=e.children,o=t.children;if(ue(r)&&ue(o))for(let s=0;s>1,e[n[i]]0&&(t[r]=n[s-1]),n[s]=r)}}for(s=n.length,a=n[s-1];s-- >0;)n[s]=a,a=t[a];return n}function Uh(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Uh(t)}function qu(e){if(e)for(let t=0;te.__isSuspense;function fb(e,t){t&&t.pendingBranch?ue(e)?t.effects.push(...e):t.effects.push(e):_v(e)}const Qe=Symbol.for("v-fgt"),mo=Symbol.for("v-txt"),At=Symbol.for("v-cmt"),Fa=Symbol.for("v-stc"),dr=[];let nn=null;function V(e=!1){dr.push(nn=e?null:[])}function Bc(){dr.pop(),nn=dr[dr.length-1]||null}let Ps=1;function qa(e,t=!1){Ps+=e,e<0&&nn&&t&&(nn.hasOnce=!0)}function zh(e){return e.dynamicChildren=Ps>0?nn||ko:null,Bc(),Ps>0&&nn&&nn.push(e),e}function ie(e,t,n,r,o,s){return zh(ce(e,t,n,r,o,s,!0))}function ye(e,t,n,r,o){return zh(xe(e,t,n,r,o,!0))}function pr(e){return e?e.__v_isVNode===!0:!1}function to(e,t){return e.type===t.type&&e.key===t.key}const Kh=({key:e})=>e??null,Da=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?De(e)||Ze(e)||ge(e)?{i:kt,r:e,k:t,f:!!n}:e:null);function ce(e,t=null,n=null,r=0,o=null,s=e===Qe?0:1,a=!1,i=!1){const l={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Kh(t),ref:t&&Da(t),scopeId:ch,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:s,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:kt};return i?(Ja(l,n),s&128&&e.normalize(l)):n&&(l.shapeFlag|=De(n)?8:16),Ps>0&&!a&&nn&&(l.patchFlag>0||s&6)&&l.patchFlag!==32&&nn.push(l),l}const xe=db;function db(e,t=null,n=null,r=0,o=null,s=!1){if((!e||e===Th)&&(e=At),pr(e)){const i=_r(e,t,!0);return n&&Ja(i,n),Ps>0&&!s&&nn&&(i.shapeFlag&6?nn[nn.indexOf(e)]=i:nn.push(i)),i.patchFlag=-2,i}if(wb(e)&&(e=e.__vccOpts),t){t=pb(t);let{class:i,style:l}=t;i&&!De(i)&&(t.class=ae(i)),Ie(l)&&(Ti(l)&&!ue(l)&&(l=Et({},l)),t.style=yt(l))}const a=De(e)?1:Wh(e)?128:dh(e)?64:Ie(e)?4:ge(e)?2:0;return ce(e,t,n,r,o,a,s,!0)}function pb(e){return e?Ti(e)||Fh(e)?Et({},e):e:null}function _r(e,t,n=!1,r=!1){const{props:o,ref:s,patchFlag:a,children:i,transition:l}=e,c=t?Gt(o||{},t):o,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&Kh(c),ref:t&&t.ref?n&&s?ue(s)?s.concat(Da(t)):[s,Da(t)]:Da(t):s,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Qe?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:l,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&_r(e.ssContent),ssFallback:e.ssFallback&&_r(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return l&&r&&Is(u,l.clone(u)),u}function Xa(e=" ",t=0){return xe(mo,null,e,t)}function QA(e,t){const n=xe(Fa,null,e);return n.staticCount=t,n}function be(e="",t=!1){return t?(V(),ye(At,null,e)):xe(At,null,e)}function jn(e){return e==null||typeof e=="boolean"?xe(At):ue(e)?xe(Qe,null,e.slice()):pr(e)?ar(e):xe(mo,null,String(e))}function ar(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:_r(e)}function Ja(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(ue(t))n=16;else if(typeof t=="object")if(r&65){const o=t.default;o&&(o._c&&(o._d=!1),Ja(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!Fh(t)?t._ctx=kt:o===3&&kt&&(kt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(ge(t)){if(r&65){Ja(e,{default:t});return}t={default:t,_ctx:kt},n=32}else t=String(t),r&64?(n=16,t=[Xa(t)]):n=8;e.children=t,e.shapeFlag|=n}function Gt(...e){const t={};for(let n=0;n$t||kt;let Za,Hl;{const e=vi(),t=(n,r)=>{let o;return(o=e[n])||(o=e[n]=[]),o.push(r),s=>{o.length>1?o.forEach(a=>a(s)):o[0](s)}};Za=t("__VUE_INSTANCE_SETTERS__",n=>$t=n),Hl=t("__VUE_SSR_SETTERS__",n=>ks=n)}const Js=e=>{const t=$t;return Za(e),e.scope.on(),()=>{e.scope.off(),Za(t)}},Xu=()=>{$t&&$t.scope.off(),Za(null)};function Gh(e){return e.vnode.shapeFlag&4}let ks=!1;function vb(e,t=!1,n=!1){t&&Hl(t);const{props:r,children:o}=e.vnode,s=Gh(e);tb(e,r,s,t),sb(e,o,n||t);const a=s?bb(e,t):void 0;return t&&Hl(!1),a}function bb(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Bv);const{setup:r}=n;if(r){vr();const o=e.setupContext=r.length>1?qh(e):null,s=Js(e),a=Xs(r,e,0,[e.props,o]),i=Ua(a);if(br(),s(),(i||e.sp)&&!Mo(e)&&yh(e),i){if(a.then(Xu,Xu),t)return a.then(l=>{Ju(e,l)}).catch(l=>{Ai(l,e,0)});e.asyncDep=a}else Ju(e,a)}else Yh(e)}function Ju(e,t,n){ge(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Ie(t)&&(e.setupState=rh(t)),Yh(e)}function Yh(e,t,n){const r=e.type;e.render||(e.render=r.render||qe);{const o=Js(e);vr();try{Uv(e)}finally{br(),o()}}}const yb={get(e,t){return Dt(e,"get",""),e[t]}};function qh(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,yb),slots:e.slots,emit:e.emit,expose:t}}function Ri(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(rh(Ci(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in _s)return _s[n](e)},has(t,n){return n in t||n in _s}})):e.proxy}function _b(e,t=!0){return ge(e)?e.displayName||e.name:e.name||t&&e.__name}function wb(e){return ge(e)&&"__vccOpts"in e}const P=(e,t)=>mv(e,t,ks);function tn(e,t,n){try{qa(-1);const r=arguments.length;return r===2?Ie(t)&&!ue(t)?pr(t)?xe(e,null,[t]):xe(e,t):xe(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&pr(n)&&(n=[n]),xe(e,t,n))}finally{qa(1)}}const Eb="3.5.40",Sb=qe;let Ul;const Zu=typeof window<"u"&&window.trustedTypes;if(Zu)try{Ul=Zu.createPolicy("vue",{createHTML:e=>e})}catch{}const Xh=Ul?e=>Ul.createHTML(e):e=>e,Tb="http://www.w3.org/2000/svg",Cb="http://www.w3.org/1998/Math/MathML",or=typeof document<"u"?document:null,Qu=or&&or.createElement("template"),Ab={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t==="svg"?or.createElementNS(Tb,e):t==="mathml"?or.createElementNS(Cb,e):n?or.createElement(e,{is:n}):or.createElement(e);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>or.createTextNode(e),createComment:e=>or.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>or.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,s){const a=n?n.previousSibling:t.lastChild;if(o&&(o===s||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===s||!(o=o.nextSibling)););else{Qu.innerHTML=Xh(r==="svg"?`${e}`:r==="mathml"?`${e}`:e);const i=Qu.content;if(r==="svg"||r==="mathml"){const l=i.firstChild;for(;l.firstChild;)i.appendChild(l.firstChild);i.removeChild(l)}t.insertBefore(i,n)}return[a?a.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Or="transition",ns="animation",Rs=Symbol("_vtc"),Jh={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},Ob=Et({},hh,Jh),xb=e=>(e.displayName="Transition",e.props=Ob,e),Zs=xb((e,{slots:t})=>tn(Pv,Lb(e),t)),qr=(e,t=[])=>{ue(e)?e.forEach(n=>n(...t)):e&&e(...t)},ef=e=>e?ue(e)?e.some(t=>t.length>1):e.length>1:!1;function Lb(e){const t={};for(const D in e)D in Jh||(t[D]=e[D]);if(e.css===!1)return t;const{name:n="v",type:r,duration:o,enterFromClass:s=`${n}-enter-from`,enterActiveClass:a=`${n}-enter-active`,enterToClass:i=`${n}-enter-to`,appearFromClass:l=s,appearActiveClass:c=a,appearToClass:u=i,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:d=`${n}-leave-active`,leaveToClass:p=`${n}-leave-to`}=e,g=Ib(o),h=g&&g[0],v=g&&g[1],{onBeforeEnter:m,onEnter:b,onEnterCancelled:S,onLeave:y,onLeaveCancelled:O,onBeforeAppear:M=m,onAppear:A=b,onAppearCancelled:$=S}=t,N=(D,Q,Z,G)=>{D._enterCancelled=G,Xr(D,Q?u:i),Xr(D,Q?c:a),Z&&Z()},U=(D,Q)=>{D._isLeaving=!1,Xr(D,f),Xr(D,p),Xr(D,d),Q&&Q()},z=D=>(Q,Z)=>{const G=D?A:b,H=()=>N(Q,D,Z);qr(G,[Q,H]),tf(()=>{Xr(Q,D?l:s),er(Q,D?u:i),ef(G)||nf(Q,r,h,H)})};return Et(t,{onBeforeEnter(D){qr(m,[D]),er(D,s),er(D,a)},onBeforeAppear(D){qr(M,[D]),er(D,l),er(D,c)},onEnter:z(!1),onAppear:z(!0),onLeave(D,Q){D._isLeaving=!0;const Z=()=>U(D,Q);er(D,f),D._enterCancelled?(er(D,d),sf(D)):(sf(D),er(D,d)),tf(()=>{D._isLeaving&&(Xr(D,f),er(D,p),ef(y)||nf(D,r,v,Z))}),qr(y,[D,Z])},onEnterCancelled(D){N(D,!1,void 0,!0),qr(S,[D])},onAppearCancelled(D){N(D,!0,void 0,!0),qr($,[D])},onLeaveCancelled(D){U(D),qr(O,[D])}})}function Ib(e){if(e==null)return null;if(Ie(e))return[cl(e.enter),cl(e.leave)];{const t=cl(e);return[t,t]}}function cl(e){return M0(e)}function er(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Rs]||(e[Rs]=new Set)).add(t)}function Xr(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Rs];n&&(n.delete(t),n.size||(e[Rs]=void 0))}function tf(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Pb=0;function nf(e,t,n,r){const o=e._endId=++Pb,s=()=>{o===e._endId&&r()};if(n!=null)return setTimeout(s,n);const{type:a,timeout:i,propCount:l}=kb(e,t);if(!a)return r();const c=a+"end";let u=0;const f=()=>{e.removeEventListener(c,d),s()},d=p=>{p.target===e&&++u>=l&&f()};setTimeout(()=>{u(n[g]||"").split(", "),o=r(`${Or}Delay`),s=r(`${Or}Duration`),a=rf(o,s),i=r(`${ns}Delay`),l=r(`${ns}Duration`),c=rf(i,l);let u=null,f=0,d=0;t===Or?a>0&&(u=Or,f=a,d=s.length):t===ns?c>0&&(u=ns,f=c,d=l.length):(f=Math.max(a,c),u=f>0?a>c?Or:ns:null,d=u?u===Or?s.length:l.length:0);const p=u===Or&&/\b(?:transform|all)(?:,|$)/.test(r(`${Or}Property`).toString());return{type:u,timeout:f,propCount:d,hasTransform:p}}function rf(e,t){for(;e.lengthof(n)+of(e[r])))}function of(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function sf(e){return(e?e.ownerDocument:document).body.offsetHeight}function Rb(e,t,n){const r=e[Rs];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Qa=Symbol("_vod"),Zh=Symbol("_vsh"),go={name:"show",beforeMount(e,{value:t},{transition:n}){e[Qa]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):rs(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),rs(e,!0),r.enter(e)):r.leave(e,()=>{rs(e,!1)}):rs(e,t))},beforeUnmount(e,{value:t}){rs(e,t)}};function rs(e,t){e.style.display=t?e[Qa]:"none",e[Zh]=!t}const Nb=Symbol(""),Mb=/(?:^|;)\s*display\s*:/;function Fb(e,t,n){const r=e.style,o=De(n);let s=!1;if(n&&!o){if(t)if(De(t))for(const a of t.split(";")){const i=a.slice(0,a.indexOf(":")).trim();n[i]==null&&fs(r,i,"")}else for(const a in t)n[a]==null&&fs(r,a,"");for(const a in n){a==="display"&&(s=!0);const i=n[a];i!=null?$b(e,a,!De(t)&&t?t[a]:void 0,i)||fs(r,a,i):fs(r,a,"")}}else if(o){if(t!==n){const a=r[Nb];a&&(n+=";"+a),r.cssText=n,s=Mb.test(n)}}else t&&e.removeAttribute("style");Qa in e&&(e[Qa]=s?r.display:"",e[Zh]&&(r.display="none"))}const af=/\s*!important$/;function fs(e,t,n){if(ue(n))n.forEach(r=>fs(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Db(e,t);af.test(n)?e.setProperty(Jn(r),n.replace(af,""),"important"):e[r]=n}}const lf=["Webkit","Moz","ms"],ul={};function Db(e,t){const n=ul[t];if(n)return n;let r=Rt(t);if(r!=="filter"&&r in e)return ul[t]=r;r=mi(r);for(let o=0;ofl||(Wb.then(()=>fl=0),fl=Date.now());function Kb(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;const o=n.value;if(ue(o)){const s=r.stopImmediatePropagation;r.stopImmediatePropagation=()=>{s.call(r),r._stopped=!0};const a=o.slice(),i=[r];for(let l=0;le.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Gb=(e,t,n,r,o,s)=>{const a=o==="svg";t==="class"?Rb(e,r,a):t==="style"?Fb(e,n,r):fi(t)?di(t)||Bb(e,t,n,r,s):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Yb(e,t,r,a))?(ff(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&uf(e,t,r,a,s,t!=="value")):e._isVueCE&&(qb(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!De(r)))?ff(e,Rt(t),r,s,t):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),uf(e,t,r,a))};function Yb(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&pf(t)&&ge(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return pf(t)&&De(n)?!1:t in e}function qb(e,t){const n=e._def.props;if(!n)return!1;const r=Rt(t);return Array.isArray(n)?n.some(o=>Rt(o)===r):Object.keys(n).some(o=>Rt(o)===r)}const Do=e=>{const t=e.props["onUpdate:modelValue"]||!1;return ue(t)?n=>Ma(t,n):t};function Xb(e){e.target.composing=!0}function hf(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const hr=Symbol("_assign");function mf(e,t,n){return t&&(e=e.trim()),n&&(e=gi(e)),e}const eO={created(e,{modifiers:{lazy:t,trim:n,number:r}},o){e[hr]=Do(o);const s=r||o.props&&o.props.type==="number";Dr(e,t?"change":"input",a=>{a.target.composing||e[hr](mf(e.value,n,s))}),(n||s)&&Dr(e,"change",()=>{e.value=mf(e.value,n,s)}),t||(Dr(e,"compositionstart",Xb),Dr(e,"compositionend",hf),Dr(e,"change",hf))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:o,number:s}},a){if(e[hr]=Do(a),e.composing)return;const i=(s||e.type==="number")&&!/^0\d/.test(e.value)?gi(e.value):e.value,l=t??"";if(i===l)return;const c=e.getRootNode();(c instanceof Document||c instanceof ShadowRoot)&&c.activeElement===e&&e.type!=="range"&&(r&&t===n||o&&e.value.trim()===l)||(e.value=l)}},tO={deep:!0,created(e,t,n){e[hr]=Do(n),Dr(e,"change",()=>{const r=e._modelValue,o=Ns(e),s=e.checked,a=e[hr];if(ue(r)){const i=Oc(r,o),l=i!==-1;if(s&&!l)a(r.concat(o));else if(!s&&l){const c=[...r];c.splice(i,1),a(c)}}else if(qo(r)){const i=new Set(r);s?i.add(o):i.delete(o),a(i)}else a(Qh(e,s))})},mounted:gf,beforeUpdate(e,t,n){e[hr]=Do(n),gf(e,t,n)}};function gf(e,{value:t,oldValue:n},r){e._modelValue=t;let o;if(ue(t))o=Oc(t,r.props.value)>-1;else if(qo(t))o=t.has(r.props.value);else{if(t===n)return;o=Xo(t,Qh(e,!0))}e.checked!==o&&(e.checked=o)}const nO={deep:!0,created(e,{value:t,modifiers:{number:n}},r){e._modelValue=t,Dr(e,"change",()=>{const o=Array.prototype.filter.call(e.options,s=>s.selected).map(s=>n?gi(Ns(s)):Ns(s));e[hr](e.multiple?qo(e._modelValue)?new Set(o):o:o[0]),e._assigning=!0,Ye(()=>{e._assigning=!1})}),e[hr]=Do(r)},mounted(e,{value:t}){vf(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[hr]=Do(n)},updated(e,{value:t}){e._assigning||vf(e,t)}};function vf(e,t){const n=e.multiple,r=ue(t);if(!(n&&!r&&!qo(t))){for(let o=0,s=e.options.length;oString(c)===String(i)):a.selected=Oc(t,i)>-1}else a.selected=t.has(i);else if(Xo(Ns(a),t)){e.selectedIndex!==o&&(e.selectedIndex=o);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Ns(e){return"_value"in e?e._value:e.value}function Qh(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Jb=["ctrl","shift","alt","meta"],Zb={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Jb.some(n=>e[`${n}Key`]&&!t.includes(n))},Wt=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=((o,...s)=>{for(let a=0;a{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=(o=>{if(!("key"in o))return;const s=Jn(o.key);if(t.some(a=>a===s||Qb[a]===s))return e(o)}))},ey=Et({patchProp:Gb},Ab);let bf;function em(){return bf||(bf=ib(ey))}const rO=((...e)=>{em().render(...e)}),tm=((...e)=>{const t=em().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=ny(r);if(!o)return;const s=t._component;!ge(s)&&!s.render&&!s.template&&(s.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const a=n(o,!1,ty(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),a},t});function ty(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function ny(e){return De(e)?document.querySelector(e):e}let nm;const Ni=e=>nm=e,rm=Symbol();function Wl(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var ws;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(ws||(ws={}));function ry(){const e=xc(!0),t=e.run(()=>re({}));let n=[],r=[];const o=Ci({install(s){Ni(o),o._a=s,s.provide(rm,o),s.config.globalProperties.$pinia=o,r.forEach(a=>n.push(a)),r=[]},use(s){return this._a?n.push(s):r.push(s),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return o}const om=()=>{};function yf(e,t,n,r=om){e.add(t);const o=()=>{e.delete(t)&&r()};return!n&&bi()&&yi(o),o}function To(e,...t){e.forEach(n=>{n(...t)})}const oy=e=>e(),_f=Symbol(),dl=Symbol();function zl(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,r)=>e.set(r,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const r=t[n],o=e[n];Wl(o)&&Wl(r)&&e.hasOwnProperty(n)&&!Ze(r)&&!zn(r)?e[n]=zl(o,r):e[n]=r}return e}const sy=Symbol();function ay(e){return!Wl(e)||!Object.prototype.hasOwnProperty.call(e,sy)}const{assign:Ir}=Object;function iy(e){return!!(Ze(e)&&e.effect)}function ly(e,t,n,r){const{state:o,actions:s,getters:a}=t,i=n.state.value[e];let l;function c(){i||(n.state.value[e]=o?o():{});const u=qs(n.state.value[e]);return Ir(u,s,Object.keys(a||{}).reduce((f,d)=>(f[d]=Ci(P(()=>{Ni(n);const p=n._s.get(e);return a[d].call(p,p)})),f),{}))}return l=sm(e,c,t,n,r,!0),l}function sm(e,t,n={},r,o,s){let a;const i=Ir({actions:{}},n),l={deep:!0};let c,u,f=new Set,d=new Set,p;const g=r.state.value[e];!s&&!g&&(r.state.value[e]={});let h;function v($){let N;c=u=!1,typeof $=="function"?($(r.state.value[e]),N={type:ws.patchFunction,storeId:e,events:p}):(zl(r.state.value[e],$),N={type:ws.patchObject,payload:$,storeId:e,events:p});const U=h=Symbol();Ye().then(()=>{h===U&&(c=!0)}),u=!0,To(f,N,r.state.value[e])}const m=s?function(){const{state:N}=n,U=N?N():{};this.$patch(z=>{Ir(z,U)})}:om;function b(){a.stop(),f.clear(),d.clear(),r._s.delete(e)}const S=($,N="")=>{if(_f in $)return $[dl]=N,$;const U=function(){Ni(r);const z=Array.from(arguments),D=new Set,Q=new Set;function Z(L){D.add(L)}function G(L){Q.add(L)}To(d,{args:z,name:U[dl],store:O,after:Z,onError:G});let H;try{H=$.apply(this&&this.$id===e?this:O,z)}catch(L){throw To(Q,L),L}return H instanceof Promise?H.then(L=>(To(D,L),L)).catch(L=>(To(Q,L),Promise.reject(L))):(To(D,H),H)};return U[_f]=!0,U[dl]=N,U},y={_p:r,$id:e,$onAction:yf.bind(null,d),$patch:v,$reset:m,$subscribe($,N={}){const U=yf(f,$,N.detached,()=>z()),z=a.run(()=>Te(()=>r.state.value[e],D=>{(N.flush==="sync"?u:c)&&$({storeId:e,type:ws.direct,events:p},D)},Ir({},l,N)));return U},$dispose:b},O=Jt(y);r._s.set(e,O);const A=(r._a&&r._a.runWithContext||oy)(()=>r._e.run(()=>(a=xc()).run(()=>t({action:S}))));for(const $ in A){const N=A[$];if(Ze(N)&&!iy(N)||zn(N))s||(g&&ay(N)&&(Ze(N)?N.value=g[$]:zl(N,g[$])),r.state.value[e][$]=N);else if(typeof N=="function"){const U=S(N,$);A[$]=U,i.actions[$]=N}}return Ir(O,A),Ir(Ve(O),A),Object.defineProperty(O,"$state",{get:()=>r.state.value[e],set:$=>{v(N=>{Ir(N,$)})}}),r._p.forEach($=>{Ir(O,a.run(()=>$({store:O,app:r._a,pinia:r,options:i})))}),g&&s&&n.hydrate&&n.hydrate(O.$state,g),c=!0,u=!0,O}function cy(e,t,n){let r;const o=typeof t=="function";r=o?n:t;function s(a,i){const l=wv();return a=a||(l?Me(rm,null):null),a&&Ni(a),a=nm,a._s.has(e)||(o?sm(e,t,r,a):ly(e,r,a)),a._s.get(e)}return s.$id=e,s}function uy(e){const t=Ve(e),n={};for(const r in t){const o=t[r];o.effect?n[r]=P({get:()=>e[r],set(s){e[r]=s}}):(Ze(o)||zn(o))&&(n[r]=mn(e,r))}return n}const bt={tab:"Tab",enter:"Enter",space:"Space",left:"ArrowLeft",up:"ArrowUp",right:"ArrowRight",down:"ArrowDown",esc:"Escape",delete:"Delete",backspace:"Backspace",numpadEnter:"NumpadEnter",pageUp:"PageUp",pageDown:"PageDown",home:"Home",end:"End"},Ot="update:modelValue",wr="change",Kn="input",Hc=["","default","small","large"];var am=typeof global=="object"&&global&&global.Object===Object&&global,fy=typeof self=="object"&&self&&self.Object===Object&&self,Tr=am||fy||Function("return this")(),qn=Tr.Symbol,im=Object.prototype,dy=im.hasOwnProperty,py=im.toString,os=qn?qn.toStringTag:void 0;function hy(e){var t=dy.call(e,os),n=e[os];try{e[os]=void 0;var r=!0}catch{}var o=py.call(e);return r&&(t?e[os]=n:delete e[os]),o}var my=Object.prototype,gy=my.toString;function vy(e){return gy.call(e)}var by="[object Null]",yy="[object Undefined]",wf=qn?qn.toStringTag:void 0;function vo(e){return e==null?e===void 0?yy:by:wf&&wf in Object(e)?hy(e):vy(e)}function co(e){return e!=null&&typeof e=="object"}var _y="[object Symbol]";function Mi(e){return typeof e=="symbol"||co(e)&&vo(e)==_y}function wy(e,t){for(var n=-1,r=e==null?0:e.length,o=Array(r);++n0){if(++t>=Gy)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function Jy(e){return function(){return e}}var ei=(function(){try{var e=yo(Object,"defineProperty");return e({},"",{}),e}catch{}})(),Zy=ei?function(e,t){return ei(e,"toString",{configurable:!0,enumerable:!1,value:Jy(t),writable:!0})}:cm,Qy=Xy(Zy);function e1(e,t,n,r){for(var o=e.length,s=n+(r?1:-1);r?s--:++s-1&&e%1==0&&e-1&&e%1==0&&e<=i1}function l1(e){return e!=null&&Wc(e.length)&&!um(e)}var c1=Object.prototype;function u1(e){var t=e&&e.constructor,n=typeof t=="function"&&t.prototype||c1;return e===n}function f1(e,t){for(var n=-1,r=Array(e);++n-1}function v2(e,t){var n=this.__data__,r=Fi(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}function Cr(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t0&&n(i)?t>1?ym(i,t-1,n,r,o):bm(o,i):r||(o[o.length]=i)}return o}function k2(e){var t=e==null?0:e.length;return t?ym(e,1):[]}function R2(e){return Qy(a1(e,void 0,k2),e+"")}var N2=gm(Object.getPrototypeOf,Object),M2="[object Object]",F2=Function.prototype,D2=Object.prototype,_m=F2.toString,$2=D2.hasOwnProperty,V2=_m.call(Object);function B2(e){if(!co(e)||vo(e)!=M2)return!1;var t=N2(e);if(t===null)return!0;var n=$2.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&_m.call(n)==V2}function $r(){if(!arguments.length)return[];var e=arguments[0];return In(e)?e:[e]}function H2(e,t,n){return e===e&&(n!==void 0&&(e=e<=n?e:n),t!==void 0&&(e=e>=t?e:t)),e}function Yl(e,t,n){return n===void 0&&(n=t,t=void 0),n!==void 0&&(n=pl(n),n=n===n?n:0),t!==void 0&&(t=pl(t),t=t===t?t:0),H2(pl(e),t,n)}function U2(){this.__data__=new Cr,this.size=0}function j2(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}function W2(e){return this.__data__.get(e)}function z2(e){return this.__data__.has(e)}var K2=200;function G2(e,t){var n=this.__data__;if(n instanceof Cr){var r=n.__data__;if(!Fs||r.lengthi))return!1;var c=s.get(e),u=s.get(t);if(c&&u)return c==t&&u==e;var f=-1,d=!0,p=n&d_?new ti:void 0;for(s.set(e,t),s.set(t,e);++fe===void 0,Ur=e=>typeof e=="boolean",at=e=>typeof e=="number",nw=e=>!e&&e!==0||ue(e)&&e.length===0||Ie(e)&&!Object.keys(e).length,no=e=>typeof Element>"u"?!1:e instanceof Element;const rw=e=>De(e)?!Number.isNaN(Number(e)):!1;const zf=e=>Object.keys(e);const ow="__epPropKey",he=e=>e,sw=e=>Ie(e)&&!!e.__epPropKey,Bi=(e,t)=>{if(!Ie(e)||sw(e))return e;const{values:n,required:r,default:o,type:s,validator:a}=e,i={type:s,required:!!r,validator:n||a?l=>{let c=!1,u=[];if(n&&(u=Array.from(n),He(e,"default")&&u.push(o),c||=u.includes(l)),a&&(c||=a(l)),!c&&u.length>0){const f=[...new Set(u)].map(d=>JSON.stringify(d)).join(", ");Sb(`Invalid prop: validation failed${t?` for prop "${t}"`:""}. Expected one of [${f}], got value ${JSON.stringify(l)}.`)}return c}:void 0,[ow]:!0};return He(e,"default")&&(i.default=o),i},rt=e=>Ds(Object.entries(e).map(([t,n])=>[t,Bi(n,t)]));var Cm=class extends Error{constructor(e){super(e),this.name="ElementPlusError"}};function ea(e,t){throw new Cm(`[${e}] ${t}`)}function xt(e,t){{const n=De(e)?new Cm(`[${e}] ${t}`):e;console.warn(n)}}const aw=["class","style"],iw=/^on[A-Z]/,lw=(e={})=>{const{excludeListeners:t=!1,excludeKeys:n}=e,r=P(()=>(n?.value||[]).concat(aw)),o=ct();return o?P(()=>Ds(Object.entries(o.proxy?.$attrs).filter(([s])=>!r.value.includes(s)&&!(t&&iw.test(s))))):(xt("use-attrs","getCurrentInstance() returned null. useAttrs() must be called at the top of a setup function"),P(()=>({})))};function Am(e,t){var n;const r=bn();return Rc(()=>{r.value=e()},{...t,flush:(n=t?.flush)!==null&&n!==void 0?n:"sync"}),xs(r)}function Hi(e,t){return bi()?(yi(e,t),!0):!1}const tt=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const cw=e=>e!=null,uw=Object.prototype.toString,fw=e=>uw.call(e)==="[object Object]";const Mr=()=>{},ni=dw();function dw(){var e,t,n;return tt&&!!(!((e=window)===null||e===void 0||(e=e.navigator)===null||e===void 0)&&e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window)===null||t===void 0||(t=t.navigator)===null||t===void 0?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test((n=window)===null||n===void 0?void 0:n.navigator.userAgent))}function pw(e,t){function n(...r){return new Promise((o,s)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(o).catch(s)})}return n}function hw(e,t={}){let n,r,o=Mr;const s=l=>{clearTimeout(l),o(),o=Mr};let a;return l=>{const c=yn(e),u=yn(t.maxWait);return n&&s(n),c<=0||u!==void 0&&u<=0?(r&&(s(r),r=void 0),Promise.resolve(l())):new Promise((f,d)=>{o=t.rejectOnCancel?d:f,a=l,u&&!r&&(r=setTimeout(()=>{n&&s(n),r=void 0,f(a())},u)),n=setTimeout(()=>{r&&s(r),r=void 0,f(l())},c)})}}function $a(e){return Array.isArray(e)?e:[e]}function mw(e,t=200,n={}){return pw(hw(t,n),e)}function Kf(e,t,n={}){const{immediate:r=!0,immediateCallback:o=!1}=n,s=bn(!1);let a;function i(){a&&(clearTimeout(a),a=void 0)}function l(){s.value=!1,i()}function c(...u){o&&e(),i(),s.value=!0,a=setTimeout(()=>{s.value=!1,a=void 0,e(...u)},yn(t))}return r&&(s.value=!0,tt&&c()),Hi(l),{isPending:iv(s),start:c,stop:l}}function gw(e,t,n){return Te(e,t,{...n,immediate:!0})}const Ui=tt?window:void 0,oO=tt?window.document:void 0;function Wn(e){var t;const n=yn(e);return(t=n?.$el)!==null&&t!==void 0?t:n}function gr(...e){const t=(r,o,s,a)=>(r.addEventListener(o,s,a),()=>r.removeEventListener(o,s,a)),n=P(()=>{const r=$a(yn(e[0])).filter(o=>o!=null);return r.every(o=>typeof o!="string")?r:void 0});return gw(()=>{var r,o;return[(r=(o=n.value)===null||o===void 0?void 0:o.map(s=>Wn(s)))!==null&&r!==void 0?r:[Ui].filter(s=>s!=null),$a(yn(n.value?e[1]:e[0])),$a(w(n.value?e[2]:e[1])),yn(n.value?e[3]:e[2])]},([r,o,s,a],i,l)=>{if(!r?.length||!o?.length||!s?.length)return;const c=fw(a)?{...a}:a,u=r.flatMap(f=>o.flatMap(d=>s.map(p=>t(f,d,p,c))));l(()=>{u.forEach(f=>f())})},{flush:"post"})}let Gf=!1;function vw(e,t,n={}){const{window:r=Ui,ignore:o=[],capture:s=!0,detectIframe:a=!1,controls:i=!1}=n;if(!r)return i?{stop:Mr,cancel:Mr,trigger:Mr}:Mr;if(ni&&!Gf){Gf=!0;const v={passive:!0};Array.from(r.document.body.children).forEach(m=>m.addEventListener("click",Mr,v)),r.document.documentElement.addEventListener("click",Mr,v)}let l=!0;const c=v=>yn(o).some(m=>{if(typeof m=="string")return Array.from(r.document.querySelectorAll(m)).some(b=>b===v.target||v.composedPath().includes(b));{const b=Wn(m);return b&&(v.target===b||v.composedPath().includes(b))}});function u(v){const m=yn(v);return m&&m.$.subTree.shapeFlag===16}function f(v,m){const b=yn(v),S=b.$.subTree&&b.$.subTree.children;return S==null||!Array.isArray(S)?!1:S.some(y=>y.el===m.target||m.composedPath().includes(y.el))}const d=v=>{const m=Wn(e);if(v.target!=null&&!(!(m instanceof Element)&&u(e)&&f(e,v))&&!(!m||m===v.target||v.composedPath().includes(m))){if("detail"in v&&v.detail===0&&(l=!c(v)),!l){l=!0;return}t(v)}};let p=!1;const g=[gr(r,"click",v=>{p||(p=!0,setTimeout(()=>{p=!1},0),d(v))},{passive:!0,capture:s}),gr(r,"pointerdown",v=>{const m=Wn(e);l=!c(v)&&!!(m&&!v.composedPath().includes(m))},{passive:!0}),a&&gr(r,"blur",v=>{setTimeout(()=>{const m=Wn(e);let b=r.document.activeElement;for(;b?.shadowRoot;)b=b.shadowRoot.activeElement;b?.tagName==="IFRAME"&&!m?.contains(r.document.activeElement)&&t(v)},0)},{passive:!0})].filter(Boolean),h=()=>g.forEach(v=>v());return i?{stop:h,cancel:()=>{l=!1},trigger:v=>{l=!0,d(v),l=!1}}:h}function bw(){const e=bn(!1),t=ct();return t&&pt(()=>{e.value=!0},t),e}function Om(e){const t=bw();return P(()=>(t.value,!!e()))}function yw(e,t,n={}){const{window:r=Ui,...o}=n;let s;const a=Om(()=>r&&"MutationObserver"in r),i=()=>{s&&(s.disconnect(),s=void 0)},l=Te(P(()=>{const f=$a(yn(e)).map(Wn).filter(cw);return new Set(f)}),f=>{i(),a.value&&f.size&&(s=new MutationObserver(t),f.forEach(d=>s.observe(d,o)))},{immediate:!0,flush:"post"}),c=()=>s?.takeRecords(),u=()=>{l(),i()};return Hi(u),{isSupported:a,stop:u,takeRecords:c}}function Cn(e,t,n={}){const{window:r=Ui,...o}=n;let s;const a=Om(()=>r&&"ResizeObserver"in r),i=()=>{s&&(s.disconnect(),s=void 0)},l=Te(P(()=>{const u=yn(e);return Array.isArray(u)?u.map(f=>Wn(f)):[Wn(u)]}),u=>{if(i(),a.value&&r){s=new ResizeObserver(t);for(const f of u)f&&s.observe(f,o)}},{immediate:!0,flush:"post"}),c=()=>{i(),l()};return Hi(c),{isSupported:a,stop:c}}function _w(){const e=bn(),t=re(0),n=P(()=>({minWidth:`${Math.max(t.value,11)}px`}));return Cn(e,()=>{t.value=e.value?.getBoundingClientRect().width??0}),{calculatorRef:e,calculatorWidth:t,inputStyle:n}}const xm=({from:e,replacement:t,scope:n,version:r,ref:o,type:s="API"},a)=>{Te(()=>w(a),i=>{i&&xt(n,`[${s}] ${e} is about to be deprecated in version ${r}, please use ${t} instead. For more detail, please visit: ${o} `)},{immediate:!0})},ww='a[href],button:not([disabled]),button:not([hidden]),:not([tabindex="-1"]),input:not([disabled]),input:not([type="hidden"]),select:not([disabled]),textarea:not([disabled])',Ew=e=>typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot,Yf=e=>typeof Element>"u"?!1:e instanceof Element,Sw=e=>getComputedStyle(e).position==="fixed"?!1:e.offsetParent!==null,sO=e=>Array.from(e.querySelectorAll(ww)).filter(t=>$o(t)&&Sw(t)),$o=e=>{if(e.tabIndex>0||e.tabIndex===0&&e.getAttribute("tabIndex")!==null)return!0;if(e.tabIndex<0||e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true")return!1;switch(e.nodeName){case"A":return!!e.href&&e.rel!=="ignore";case"INPUT":return!(e.type==="hidden"||e.type==="file");case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}};const qc=(e,t)=>{if(!e||!e.focus)return;let n=!1;Yf(e)&&!$o(e)&&!e.getAttribute("tabindex")&&(e.setAttribute("tabindex","-1"),n=!0),e.focus(t),Yf(e)&&n&&e.removeAttribute("tabindex")};const Lm=()=>tt&&/firefox/i.test(window.navigator.userAgent),Tw=()=>tt&&/android/i.test(window.navigator.userAgent),Cw=(e="")=>e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d");const Aw="utils/dom/style",Im=(e="")=>e.split(" ").filter(t=>!!t.trim()),Ow=(e,t)=>{if(!e||!t)return!1;if(t.includes(" "))throw new Error("className should not contain space.");return e.classList.contains(t)},Zl=(e,t)=>{!e||!t.trim()||e.classList.add(...Im(t))},$s=(e,t)=>{!e||!t.trim()||e.classList.remove(...Im(t))},Oo=(e,t)=>{if(!tt||!e||!t||Ew(e))return"";let n=Rt(t);n==="float"&&(n="cssFloat");try{const r=e.style[n];if(r)return r;const o=document.defaultView?.getComputedStyle(e,"");return o?o[n]:""}catch{return e.style[n]}};function po(e,t="px"){if(!e&&e!==0)return"";if(at(e)||rw(e))return`${e}${t}`;if(De(e))return e;xt(Aw,"binding value must be a string or number")}const xw=(e,t,n,r)=>{const o={offsetX:0,offsetY:0},s=re(!1),a=(d,p)=>{if(e.value){const{offsetX:g,offsetY:h}=o,v=e.value.getBoundingClientRect(),m=Math.max(v.left,0),b=Math.max(v.top,0),S=v.width,y=v.height,O=document.documentElement.clientWidth,M=document.documentElement.clientHeight,A=-m+g,$=-b+h,N=O-m-S+g,U=M-b-(y{const p=d.clientX,g=d.clientY,{offsetX:h,offsetY:v}=o,m=S=>{s.value||(s.value=!0),a(h+S.clientX-p,v+S.clientY-g)},b=()=>{s.value=!1,document.removeEventListener("mousemove",m),document.removeEventListener("mouseup",b)};document.addEventListener("mousemove",m),document.addEventListener("mouseup",b)},l=()=>{t.value&&e.value&&(t.value.addEventListener("mousedown",i),window.addEventListener("resize",f))},c=()=>{t.value&&e.value&&(t.value.removeEventListener("mousedown",i),window.removeEventListener("resize",f))},u=()=>{o.offsetX=0,o.offsetY=0,e.value&&(e.value.style.transform="")},f=()=>{const{offsetX:d,offsetY:p}=o;a(d,p)};return pt(()=>{Rc(()=>{n.value?l():c()})}),Lt(()=>{c()}),{isDragging:s,resetPosition:u,updatePosition:f}};var Pm={name:"en",el:{breadcrumb:{label:"Breadcrumb"},colorpicker:{confirm:"OK",clear:"Clear",defaultLabel:"color picker",description:"current color is {color}. press enter to select a new color.",alphaLabel:"pick alpha value",alphaDescription:"alpha {alpha}, current color is {color}",hueLabel:"pick hue value",hueDescription:"hue {hue}, current color is {color}",svLabel:"pick saturation and brightness value",svDescription:"saturation {saturation}, brightness {brightness}, current color is {color}",predefineDescription:"select {value} as the color"},datepicker:{now:"Now",today:"Today",cancel:"Cancel",clear:"Clear",confirm:"OK",dateTablePrompt:"Use the arrow keys and enter to select the day of the month",monthTablePrompt:"Use the arrow keys and enter to select the month",yearTablePrompt:"Use the arrow keys and enter to select the year",selectedDate:"Selected date",selectDate:"Select date",selectTime:"Select time",startDate:"Start Date",startTime:"Start Time",endDate:"End Date",endTime:"End Time",prevYear:"Previous Year",nextYear:"Next Year",prevMonth:"Previous Month",nextMonth:"Next Month",year:"",month1:"January",month2:"February",month3:"March",month4:"April",month5:"May",month6:"June",month7:"July",month8:"August",month9:"September",month10:"October",month11:"November",month12:"December",weeks:{sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat"},weeksFull:{sun:"Sunday",mon:"Monday",tue:"Tuesday",wed:"Wednesday",thu:"Thursday",fri:"Friday",sat:"Saturday"},months:{jan:"Jan",feb:"Feb",mar:"Mar",apr:"Apr",may:"May",jun:"Jun",jul:"Jul",aug:"Aug",sep:"Sep",oct:"Oct",nov:"Nov",dec:"Dec"}},inputNumber:{decrease:"decrease number",increase:"increase number"},select:{loading:"Loading",noMatch:"No matching data",noData:"No data",placeholder:"Select"},mention:{loading:"Loading"},dropdown:{toggleDropdown:"Toggle Dropdown"},cascader:{noMatch:"No matching data",loading:"Loading",placeholder:"Select",noData:"No data"},pagination:{goto:"Go to",pagesize:"/page",total:"Total {total}",pageClassifier:"",page:"Page",prev:"Go to previous page",next:"Go to next page",currentPage:"page {pager}",prevPages:"Previous {pager} pages",nextPages:"Next {pager} pages",deprecationWarning:"Deprecated usages detected, please refer to the el-pagination documentation for more details"},dialog:{close:"Close this dialog"},drawer:{close:"Close this dialog"},messagebox:{title:"Message",confirm:"OK",cancel:"Cancel",error:"Illegal input",close:"Close this dialog"},upload:{deleteTip:"press delete to remove",delete:"Delete",preview:"Preview",continue:"Continue"},slider:{defaultLabel:"slider between {min} and {max}",defaultRangeStartLabel:"pick start value",defaultRangeEndLabel:"pick end value"},table:{emptyText:"No Data",confirmFilter:"Confirm",resetFilter:"Reset",clearFilter:"All",sumText:"Sum",selectAllLabel:"Select all rows",selectRowLabel:"Select this row",expandRowLabel:"Expand this row",collapseRowLabel:"Collapse this row",sortLabel:"Sort by {column}",filterLabel:"Filter by {column}"},tag:{close:"Close this tag"},tour:{next:"Next",previous:"Previous",finish:"Finish",close:"Close this dialog"},tree:{emptyText:"No Data"},transfer:{noMatch:"No matching data",noData:"No data",titles:["List 1","List 2"],filterPlaceholder:"Enter keyword",noCheckedFormat:"{total} items",hasCheckedFormat:"{checked}/{total} checked"},image:{error:"FAILED"},pageHeader:{title:"Back"},popconfirm:{confirmButtonText:"Yes",cancelButtonText:"No"},carousel:{leftArrow:"Carousel arrow left",rightArrow:"Carousel arrow right",indicator:"Carousel switch to index {index}"},inputOTP:{groupLabel:"OTP Input",defaultLabel:"Please enter OTP character {index}"}}};const Lw=e=>(t,n)=>Iw(t,n,w(e)),Iw=(e,t,n)=>Kt(n,e,e).replace(/\{(\w+)\}/g,(r,o)=>`${t?.[o]??`{${o}}`}`),Pw=e=>({lang:P(()=>w(e).name),locale:Ze(e)?e:re(e),t:Lw(e)}),km=Symbol("localeContextKey"),ta=e=>{const t=e||Me(km,re());return Pw(P(()=>t.value||Pm))},kw="is-",Jr=(e,t,n,r,o)=>{let s=`${e}-${t}`;return n&&(s+=`-${n}`),r&&(s+=`__${r}`),o&&(s+=`--${o}`),s},Rm=Symbol("namespaceContextKey"),Xc=e=>{const t=e||(ct()?Me(Rm,re("el")):re("el"));return P(()=>w(t)||"el")},nt=(e,t)=>{const n=Xc(t);return{namespace:n,b:(h="")=>Jr(n.value,e,h,"",""),e:h=>h?Jr(n.value,e,"",h,""):"",m:h=>h?Jr(n.value,e,"","",h):"",be:(h,v)=>h&&v?Jr(n.value,e,h,v,""):"",em:(h,v)=>h&&v?Jr(n.value,e,"",h,v):"",bm:(h,v)=>h&&v?Jr(n.value,e,h,"",v):"",bem:(h,v,m)=>h&&v&&m?Jr(n.value,e,h,v,m):"",is:(h,...v)=>{const m=v.length>=1?v[0]:!0;return h&&m?`${kw}${h}`:""},cssVar:h=>{const v={};for(const m in h)h[m]&&(v[`--${n.value}-${m}`]=h[m]);return v},cssVarName:h=>`--${n.value}-${h}`,cssVarBlock:h=>{const v={};for(const m in h)h[m]&&(v[`--${n.value}-${e}-${m}`]=h[m]);return v},cssVarBlockName:h=>`--${n.value}-${e}-${h}`}};const Rw=e=>tt?window.requestAnimationFrame(e):setTimeout(e,16),qf=e=>tt?window.cancelAnimationFrame(e):clearTimeout(e);let _a;const Nw=e=>{if(!tt)return 0;if(_a!==void 0)return _a;const t=document.createElement("div");t.className=`${e}-scrollbar__wrap`,t.style.visibility="hidden",t.style.width="100px",t.style.position="absolute",t.style.top="-9999px",document.body.appendChild(t);const n=t.offsetWidth;t.style.overflow="scroll";const r=document.createElement("div");r.style.width="100%",t.appendChild(r);const o=r.offsetWidth;return t.parentNode?.removeChild(t),_a=n-o,_a};function Mw(e,t){if(!tt)return;if(!t){e.scrollTop=0;return}const n=[];let r=t.offsetParent;for(;r!==null&&e!==r&&e.contains(r);)n.push(r),r=r.offsetParent;const o=t.offsetTop+n.reduce((l,c)=>l+c.offsetTop,0),s=o+t.offsetHeight,a=e.scrollTop,i=a+e.clientHeight;oi&&(e.scrollTop=s-e.clientHeight)}const Fw=(e,t={})=>{Ze(e)||ea("[useLockscreen]","You need to pass a ref param to this function");const n=t.ns||nt("popup"),r=P(()=>n.bm("parent","hidden"));let o=0,s=!1,a="0",i=!1;const l=()=>{i||(i=!0,setTimeout(()=>{typeof document>"u"||s&&document&&(document.body.style.width=a,$s(document.body,r.value))},200))};Te(e,c=>{if(!c){l();return}i=!1,s=!Ow(document.body,r.value),s&&(a=document.body.style.width,Zl(document.body,r.value)),o=Nw(n.namespace.value);const u=document.documentElement.clientHeight0&&(u||f==="scroll")&&s&&(document.body.style.width=`calc(100% - ${o}px)`)}),yi(()=>l())},sr=(e,t,{checkForDefaultPrevented:n=!0}={})=>o=>{const s=e?.(o);if(n===!1||!s)return t?.(o)};const Vo=e=>{if(e.code&&e.code!=="Unidentified")return e.code;const t=Nm(e);return t?Object.values(bt).includes(t)?t:t===" "?bt.space:"":""},Nm=e=>{let t=e.key&&e.key!=="Unidentified"?e.key:"";if(!t&&e.type==="keyup"&&Tw()){const n=e.target;t=n.value.charAt(n.selectionStart-1)}return t},Dw=Bi({type:he(Boolean),default:null}),$w=Bi({type:he(Function)}),Vw=e=>{const t=`update:${e}`,n=`onUpdate:${e}`,r=[t],o={[e]:Dw,[n]:$w};return{useModelToggle:({indicator:a,toggleReason:i,shouldHideWhenRouteChanges:l,shouldProceed:c,onShow:u,onHide:f})=>{const d=ct(),{emit:p}=d,g=d.props,h=P(()=>ge(g[n])),v=P(()=>g[e]===null),m=A=>{a.value!==!0&&(a.value=!0,i&&(i.value=A),ge(u)&&u(A))},b=A=>{a.value!==!1&&(a.value=!1,i&&(i.value=A),ge(f)&&f(A))},S=A=>{if(g.disabled===!0||ge(c)&&!c())return;const $=h.value&&tt;$&&p(t,!0),(v.value||!$)&&m(A)},y=A=>{if(g.disabled===!0||!tt)return;const $=h.value&&tt;$&&p(t,!1),(v.value||!$)&&b(A)},O=A=>{Ur(A)&&(g.disabled&&A?h.value&&p(t,!1):a.value!==A&&(A?m():b()))},M=()=>{a.value?y():S()};return Te(()=>g[e],O),l&&d.appContext.config.globalProperties.$route!==void 0&&Te(()=>({...d.proxy.$route}),()=>{l.value&&a.value&&y()}),pt(()=>{O(g[e])}),{hide:y,show:S,toggle:M,hasUpdateHandler:h}},useModelToggleProps:o,useModelToggleEmits:r}},Mm=e=>{const t=ct();return P(()=>t?.proxy?.$props?.[e])};var Yt="top",En="bottom",Sn="right",qt="left",Jc="auto",na=[Yt,En,Sn,qt],Bo="start",Vs="end",Bw="clippingParents",Fm="viewport",ss="popper",Hw="reference",Xf=na.reduce(function(e,t){return e.concat([t+"-"+Bo,t+"-"+Vs])},[]),ji=[].concat(na,[Jc]).reduce(function(e,t){return e.concat([t,t+"-"+Bo,t+"-"+Vs])},[]),Uw="beforeRead",jw="read",Ww="afterRead",zw="beforeMain",Kw="main",Gw="afterMain",Yw="beforeWrite",qw="write",Xw="afterWrite",Jw=[Uw,jw,Ww,zw,Kw,Gw,Yw,qw,Xw];function Xn(e){return e?(e.nodeName||"").toLowerCase():null}function sn(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function ho(e){var t=sn(e).Element;return e instanceof t||e instanceof Element}function _n(e){var t=sn(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function Zc(e){if(typeof ShadowRoot>"u")return!1;var t=sn(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function Zw(e){var t=e.state;Object.keys(t.elements).forEach(function(n){var r=t.styles[n]||{},o=t.attributes[n]||{},s=t.elements[n];!_n(s)||!Xn(s)||(Object.assign(s.style,r),Object.keys(o).forEach(function(a){var i=o[a];i===!1?s.removeAttribute(a):s.setAttribute(a,i===!0?"":i)}))})}function Qw(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(r){var o=t.elements[r],s=t.attributes[r]||{},a=Object.keys(t.styles.hasOwnProperty(r)?t.styles[r]:n[r]),i=a.reduce(function(l,c){return l[c]="",l},{});!_n(o)||!Xn(o)||(Object.assign(o.style,i),Object.keys(s).forEach(function(l){o.removeAttribute(l)}))})}}var Dm={name:"applyStyles",enabled:!0,phase:"write",fn:Zw,effect:Qw,requires:["computeStyles"]};function Gn(e){return e.split("-")[0]}var lo=Math.max,ri=Math.min,Ho=Math.round;function Ql(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function $m(){return!/^((?!chrome|android).)*safari/i.test(Ql())}function Uo(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r=e.getBoundingClientRect(),o=1,s=1;t&&_n(e)&&(o=e.offsetWidth>0&&Ho(r.width)/e.offsetWidth||1,s=e.offsetHeight>0&&Ho(r.height)/e.offsetHeight||1);var a=ho(e)?sn(e):window,i=a.visualViewport,l=!$m()&&n,c=(r.left+(l&&i?i.offsetLeft:0))/o,u=(r.top+(l&&i?i.offsetTop:0))/s,f=r.width/o,d=r.height/s;return{width:f,height:d,top:u,right:c+f,bottom:u+d,left:c,x:c,y:u}}function Qc(e){var t=Uo(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function Vm(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Zc(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function Er(e){return sn(e).getComputedStyle(e)}function e3(e){return["table","td","th"].indexOf(Xn(e))>=0}function jr(e){return((ho(e)?e.ownerDocument:e.document)||window.document).documentElement}function Wi(e){return Xn(e)==="html"?e:e.assignedSlot||e.parentNode||(Zc(e)?e.host:null)||jr(e)}function Jf(e){return!_n(e)||Er(e).position==="fixed"?null:e.offsetParent}function t3(e){var t=/firefox/i.test(Ql()),n=/Trident/i.test(Ql());if(n&&_n(e)){var r=Er(e);if(r.position==="fixed")return null}var o=Wi(e);for(Zc(o)&&(o=o.host);_n(o)&&["html","body"].indexOf(Xn(o))<0;){var s=Er(o);if(s.transform!=="none"||s.perspective!=="none"||s.contain==="paint"||["transform","perspective"].indexOf(s.willChange)!==-1||t&&s.willChange==="filter"||t&&s.filter&&s.filter!=="none")return o;o=o.parentNode}return null}function ra(e){for(var t=sn(e),n=Jf(e);n&&e3(n)&&Er(n).position==="static";)n=Jf(n);return n&&(Xn(n)==="html"||Xn(n)==="body"&&Er(n).position==="static")?t:n||t3(e)||t}function eu(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Ss(e,t,n){return lo(e,ri(t,n))}function n3(e,t,n){var r=Ss(e,t,n);return r>n?n:r}function Bm(){return{top:0,right:0,bottom:0,left:0}}function Hm(e){return Object.assign({},Bm(),e)}function Um(e,t){return t.reduce(function(n,r){return n[r]=e,n},{})}var r3=function(e,t){return e=typeof e=="function"?e(Object.assign({},t.rects,{placement:t.placement})):e,Hm(typeof e!="number"?e:Um(e,na))};function o3(e){var t,n=e.state,r=e.name,o=e.options,s=n.elements.arrow,a=n.modifiersData.popperOffsets,i=Gn(n.placement),l=eu(i),c=[qt,Sn].indexOf(i)>=0,u=c?"height":"width";if(!(!s||!a)){var f=r3(o.padding,n),d=Qc(s),p=l==="y"?Yt:qt,g=l==="y"?En:Sn,h=n.rects.reference[u]+n.rects.reference[l]-a[l]-n.rects.popper[u],v=a[l]-n.rects.reference[l],m=ra(s),b=m?l==="y"?m.clientHeight||0:m.clientWidth||0:0,S=h/2-v/2,y=f[p],O=b-d[u]-f[g],M=b/2-d[u]/2+S,A=Ss(y,M,O),$=l;n.modifiersData[r]=(t={},t[$]=A,t.centerOffset=A-M,t)}}function s3(e){var t=e.state,n=e.options,r=n.element,o=r===void 0?"[data-popper-arrow]":r;o!=null&&(typeof o=="string"&&(o=t.elements.popper.querySelector(o),!o)||Vm(t.elements.popper,o)&&(t.elements.arrow=o))}var a3={name:"arrow",enabled:!0,phase:"main",fn:o3,effect:s3,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function jo(e){return e.split("-")[1]}var i3={top:"auto",right:"auto",bottom:"auto",left:"auto"};function l3(e,t){var n=e.x,r=e.y,o=t.devicePixelRatio||1;return{x:Ho(n*o)/o||0,y:Ho(r*o)/o||0}}function Zf(e){var t,n=e.popper,r=e.popperRect,o=e.placement,s=e.variation,a=e.offsets,i=e.position,l=e.gpuAcceleration,c=e.adaptive,u=e.roundOffsets,f=e.isFixed,d=a.x,p=d===void 0?0:d,g=a.y,h=g===void 0?0:g,v=typeof u=="function"?u({x:p,y:h}):{x:p,y:h};p=v.x,h=v.y;var m=a.hasOwnProperty("x"),b=a.hasOwnProperty("y"),S=qt,y=Yt,O=window;if(c){var M=ra(n),A="clientHeight",$="clientWidth";if(M===sn(n)&&(M=jr(n),Er(M).position!=="static"&&i==="absolute"&&(A="scrollHeight",$="scrollWidth")),M=M,o===Yt||(o===qt||o===Sn)&&s===Vs){y=En;var N=f&&M===O&&O.visualViewport?O.visualViewport.height:M[A];h-=N-r.height,h*=l?1:-1}if(o===qt||(o===Yt||o===En)&&s===Vs){S=Sn;var U=f&&M===O&&O.visualViewport?O.visualViewport.width:M[$];p-=U-r.width,p*=l?1:-1}}var z=Object.assign({position:i},c&&i3),D=u===!0?l3({x:p,y:h},sn(n)):{x:p,y:h};if(p=D.x,h=D.y,l){var Q;return Object.assign({},z,(Q={},Q[y]=b?"0":"",Q[S]=m?"0":"",Q.transform=(O.devicePixelRatio||1)<=1?"translate("+p+"px, "+h+"px)":"translate3d("+p+"px, "+h+"px, 0)",Q))}return Object.assign({},z,(t={},t[y]=b?h+"px":"",t[S]=m?p+"px":"",t.transform="",t))}function c3(e){var t=e.state,n=e.options,r=n.gpuAcceleration,o=r===void 0?!0:r,s=n.adaptive,a=s===void 0?!0:s,i=n.roundOffsets,l=i===void 0?!0:i,c={placement:Gn(t.placement),variation:jo(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,Zf(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:a,roundOffsets:l})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,Zf(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}var jm={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:c3,data:{}},wa={passive:!0};function u3(e){var t=e.state,n=e.instance,r=e.options,o=r.scroll,s=o===void 0?!0:o,a=r.resize,i=a===void 0?!0:a,l=sn(t.elements.popper),c=[].concat(t.scrollParents.reference,t.scrollParents.popper);return s&&c.forEach(function(u){u.addEventListener("scroll",n.update,wa)}),i&&l.addEventListener("resize",n.update,wa),function(){s&&c.forEach(function(u){u.removeEventListener("scroll",n.update,wa)}),i&&l.removeEventListener("resize",n.update,wa)}}var Wm={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:u3,data:{}},f3={left:"right",right:"left",bottom:"top",top:"bottom"};function Va(e){return e.replace(/left|right|bottom|top/g,function(t){return f3[t]})}var d3={start:"end",end:"start"};function Qf(e){return e.replace(/start|end/g,function(t){return d3[t]})}function tu(e){var t=sn(e),n=t.pageXOffset,r=t.pageYOffset;return{scrollLeft:n,scrollTop:r}}function nu(e){return Uo(jr(e)).left+tu(e).scrollLeft}function p3(e,t){var n=sn(e),r=jr(e),o=n.visualViewport,s=r.clientWidth,a=r.clientHeight,i=0,l=0;if(o){s=o.width,a=o.height;var c=$m();(c||!c&&t==="fixed")&&(i=o.offsetLeft,l=o.offsetTop)}return{width:s,height:a,x:i+nu(e),y:l}}function h3(e){var t,n=jr(e),r=tu(e),o=(t=e.ownerDocument)==null?void 0:t.body,s=lo(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),a=lo(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),i=-r.scrollLeft+nu(e),l=-r.scrollTop;return Er(o||n).direction==="rtl"&&(i+=lo(n.clientWidth,o?o.clientWidth:0)-s),{width:s,height:a,x:i,y:l}}function ru(e){var t=Er(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function zm(e){return["html","body","#document"].indexOf(Xn(e))>=0?e.ownerDocument.body:_n(e)&&ru(e)?e:zm(Wi(e))}function Ts(e,t){var n;t===void 0&&(t=[]);var r=zm(e),o=r===((n=e.ownerDocument)==null?void 0:n.body),s=sn(r),a=o?[s].concat(s.visualViewport||[],ru(r)?r:[]):r,i=t.concat(a);return o?i:i.concat(Ts(Wi(a)))}function ec(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function m3(e,t){var n=Uo(e,!1,t==="fixed");return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}function ed(e,t,n){return t===Fm?ec(p3(e,n)):ho(t)?m3(t,n):ec(h3(jr(e)))}function g3(e){var t=Ts(Wi(e)),n=["absolute","fixed"].indexOf(Er(e).position)>=0,r=n&&_n(e)?ra(e):e;return ho(r)?t.filter(function(o){return ho(o)&&Vm(o,r)&&Xn(o)!=="body"}):[]}function v3(e,t,n,r){var o=t==="clippingParents"?g3(e):[].concat(t),s=[].concat(o,[n]),a=s[0],i=s.reduce(function(l,c){var u=ed(e,c,r);return l.top=lo(u.top,l.top),l.right=ri(u.right,l.right),l.bottom=ri(u.bottom,l.bottom),l.left=lo(u.left,l.left),l},ed(e,a,r));return i.width=i.right-i.left,i.height=i.bottom-i.top,i.x=i.left,i.y=i.top,i}function Km(e){var t=e.reference,n=e.element,r=e.placement,o=r?Gn(r):null,s=r?jo(r):null,a=t.x+t.width/2-n.width/2,i=t.y+t.height/2-n.height/2,l;switch(o){case Yt:l={x:a,y:t.y-n.height};break;case En:l={x:a,y:t.y+t.height};break;case Sn:l={x:t.x+t.width,y:i};break;case qt:l={x:t.x-n.width,y:i};break;default:l={x:t.x,y:t.y}}var c=o?eu(o):null;if(c!=null){var u=c==="y"?"height":"width";switch(s){case Bo:l[c]=l[c]-(t[u]/2-n[u]/2);break;case Vs:l[c]=l[c]+(t[u]/2-n[u]/2);break}}return l}function Bs(e,t){t===void 0&&(t={});var n=t,r=n.placement,o=r===void 0?e.placement:r,s=n.strategy,a=s===void 0?e.strategy:s,i=n.boundary,l=i===void 0?Bw:i,c=n.rootBoundary,u=c===void 0?Fm:c,f=n.elementContext,d=f===void 0?ss:f,p=n.altBoundary,g=p===void 0?!1:p,h=n.padding,v=h===void 0?0:h,m=Hm(typeof v!="number"?v:Um(v,na)),b=d===ss?Hw:ss,S=e.rects.popper,y=e.elements[g?b:d],O=v3(ho(y)?y:y.contextElement||jr(e.elements.popper),l,u,a),M=Uo(e.elements.reference),A=Km({reference:M,element:S,placement:o}),$=ec(Object.assign({},S,A)),N=d===ss?$:M,U={top:O.top-N.top+m.top,bottom:N.bottom-O.bottom+m.bottom,left:O.left-N.left+m.left,right:N.right-O.right+m.right},z=e.modifiersData.offset;if(d===ss&&z){var D=z[o];Object.keys(U).forEach(function(Q){var Z=[Sn,En].indexOf(Q)>=0?1:-1,G=[Yt,En].indexOf(Q)>=0?"y":"x";U[Q]+=D[G]*Z})}return U}function b3(e,t){t===void 0&&(t={});var n=t,r=n.placement,o=n.boundary,s=n.rootBoundary,a=n.padding,i=n.flipVariations,l=n.allowedAutoPlacements,c=l===void 0?ji:l,u=jo(r),f=u?i?Xf:Xf.filter(function(g){return jo(g)===u}):na,d=f.filter(function(g){return c.indexOf(g)>=0});d.length===0&&(d=f);var p=d.reduce(function(g,h){return g[h]=Bs(e,{placement:h,boundary:o,rootBoundary:s,padding:a})[Gn(h)],g},{});return Object.keys(p).sort(function(g,h){return p[g]-p[h]})}function y3(e){if(Gn(e)===Jc)return[];var t=Va(e);return[Qf(e),t,Qf(t)]}function _3(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,s=o===void 0?!0:o,a=n.altAxis,i=a===void 0?!0:a,l=n.fallbackPlacements,c=n.padding,u=n.boundary,f=n.rootBoundary,d=n.altBoundary,p=n.flipVariations,g=p===void 0?!0:p,h=n.allowedAutoPlacements,v=t.options.placement,m=Gn(v),b=m===v,S=l||(b||!g?[Va(v)]:y3(v)),y=[v].concat(S).reduce(function(_e,Se){return _e.concat(Gn(Se)===Jc?b3(t,{placement:Se,boundary:u,rootBoundary:f,padding:c,flipVariations:g,allowedAutoPlacements:h}):Se)},[]),O=t.rects.reference,M=t.rects.popper,A=new Map,$=!0,N=y[0],U=0;U=0,G=Z?"width":"height",H=Bs(t,{placement:z,boundary:u,rootBoundary:f,altBoundary:d,padding:c}),L=Z?Q?Sn:qt:Q?En:Yt;O[G]>M[G]&&(L=Va(L));var F=Va(L),J=[];if(s&&J.push(H[D]<=0),i&&J.push(H[L]<=0,H[F]<=0),J.every(function(_e){return _e})){N=z,$=!1;break}A.set(z,J)}if($)for(var te=g?3:1,ve=function(_e){var Se=y.find(function(Fe){var j=A.get(Fe);if(j)return j.slice(0,_e).every(function(oe){return oe})});if(Se)return N=Se,"break"},le=te;le>0;le--){var Pe=ve(le);if(Pe==="break")break}t.placement!==N&&(t.modifiersData[r]._skip=!0,t.placement=N,t.reset=!0)}}var w3={name:"flip",enabled:!0,phase:"main",fn:_3,requiresIfExists:["offset"],data:{_skip:!1}};function td(e,t,n){return n===void 0&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function nd(e){return[Yt,Sn,En,qt].some(function(t){return e[t]>=0})}function E3(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,s=t.modifiersData.preventOverflow,a=Bs(t,{elementContext:"reference"}),i=Bs(t,{altBoundary:!0}),l=td(a,r),c=td(i,o,s),u=nd(l),f=nd(c);t.modifiersData[n]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:u,hasPopperEscaped:f},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":f})}var S3={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:E3};function T3(e,t,n){var r=Gn(e),o=[qt,Yt].indexOf(r)>=0?-1:1,s=typeof n=="function"?n(Object.assign({},t,{placement:e})):n,a=s[0],i=s[1];return a=a||0,i=(i||0)*o,[qt,Sn].indexOf(r)>=0?{x:i,y:a}:{x:a,y:i}}function C3(e){var t=e.state,n=e.options,r=e.name,o=n.offset,s=o===void 0?[0,0]:o,a=ji.reduce(function(u,f){return u[f]=T3(f,t.rects,s),u},{}),i=a[t.placement],l=i.x,c=i.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=a}var A3={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:C3};function O3(e){var t=e.state,n=e.name;t.modifiersData[n]=Km({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})}var Gm={name:"popperOffsets",enabled:!0,phase:"read",fn:O3,data:{}};function x3(e){return e==="x"?"y":"x"}function L3(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=o===void 0?!0:o,a=n.altAxis,i=a===void 0?!1:a,l=n.boundary,c=n.rootBoundary,u=n.altBoundary,f=n.padding,d=n.tether,p=d===void 0?!0:d,g=n.tetherOffset,h=g===void 0?0:g,v=Bs(t,{boundary:l,rootBoundary:c,padding:f,altBoundary:u}),m=Gn(t.placement),b=jo(t.placement),S=!b,y=eu(m),O=x3(y),M=t.modifiersData.popperOffsets,A=t.rects.reference,$=t.rects.popper,N=typeof h=="function"?h(Object.assign({},t.rects,{placement:t.placement})):h,U=typeof N=="number"?{mainAxis:N,altAxis:N}:Object.assign({mainAxis:0,altAxis:0},N),z=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,D={x:0,y:0};if(M){if(s){var Q,Z=y==="y"?Yt:qt,G=y==="y"?En:Sn,H=y==="y"?"height":"width",L=M[y],F=L+v[Z],J=L-v[G],te=p?-$[H]/2:0,ve=b===Bo?A[H]:$[H],le=b===Bo?-$[H]:-A[H],Pe=t.elements.arrow,_e=p&&Pe?Qc(Pe):{width:0,height:0},Se=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:Bm(),Fe=Se[Z],j=Se[G],oe=Ss(0,A[H],_e[H]),ee=S?A[H]/2-te-oe-Fe-U.mainAxis:ve-oe-Fe-U.mainAxis,ne=S?-A[H]/2+te+oe+j+U.mainAxis:le+oe+j+U.mainAxis,Ae=t.elements.arrow&&ra(t.elements.arrow),T=Ae?y==="y"?Ae.clientTop||0:Ae.clientLeft||0:0,C=(Q=z?.[y])!=null?Q:0,k=L+ee-C-T,Y=L+ne-C,q=Ss(p?ri(F,k):F,L,p?lo(J,Y):J);M[y]=q,D[y]=q-L}if(i){var K,_=y==="x"?Yt:qt,E=y==="x"?En:Sn,x=M[O],R=O==="y"?"height":"width",se=x+v[_],X=x-v[E],I=[Yt,qt].indexOf(m)!==-1,B=(K=z?.[O])!=null?K:0,fe=I?se:x-A[R]-$[R]-B+U.altAxis,we=I?x+A[R]+$[R]-B-U.altAxis:X,Re=p&&I?n3(fe,x,we):Ss(p?fe:se,x,p?we:X);M[O]=Re,D[O]=Re-x}t.modifiersData[r]=D}}var I3={name:"preventOverflow",enabled:!0,phase:"main",fn:L3,requiresIfExists:["offset"]};function P3(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function k3(e){return e===sn(e)||!_n(e)?tu(e):P3(e)}function R3(e){var t=e.getBoundingClientRect(),n=Ho(t.width)/e.offsetWidth||1,r=Ho(t.height)/e.offsetHeight||1;return n!==1||r!==1}function N3(e,t,n){n===void 0&&(n=!1);var r=_n(t),o=_n(t)&&R3(t),s=jr(t),a=Uo(e,o,n),i={scrollLeft:0,scrollTop:0},l={x:0,y:0};return(r||!r&&!n)&&((Xn(t)!=="body"||ru(s))&&(i=k3(t)),_n(t)?(l=Uo(t,!0),l.x+=t.clientLeft,l.y+=t.clientTop):s&&(l.x=nu(s))),{x:a.left+i.scrollLeft-l.x,y:a.top+i.scrollTop-l.y,width:a.width,height:a.height}}function M3(e){var t=new Map,n=new Set,r=[];e.forEach(function(s){t.set(s.name,s)});function o(s){n.add(s.name);var a=[].concat(s.requires||[],s.requiresIfExists||[]);a.forEach(function(i){if(!n.has(i)){var l=t.get(i);l&&o(l)}}),r.push(s)}return e.forEach(function(s){n.has(s.name)||o(s)}),r}function F3(e){var t=M3(e);return Jw.reduce(function(n,r){return n.concat(t.filter(function(o){return o.phase===r}))},[])}function D3(e){var t;return function(){return t||(t=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})})),t}}function $3(e){var t=e.reduce(function(n,r){var o=n[r.name];return n[r.name]=o?Object.assign({},o,r,{options:Object.assign({},o.options,r.options),data:Object.assign({},o.data,r.data)}):r,n},{});return Object.keys(t).map(function(n){return t[n]})}var rd={placement:"bottom",modifiers:[],strategy:"absolute"};function od(){for(var e=arguments.length,t=new Array(e),n=0;n{const r={name:"updateState",enabled:!0,phase:"write",fn:({state:l})=>{const c=j3(l);Object.assign(a.value,c)},requires:["computeStyles"]},o=P(()=>{const{onFirstUpdate:l,placement:c,strategy:u,modifiers:f}=w(n);return{onFirstUpdate:l,placement:c||"bottom",strategy:u||"absolute",modifiers:[...f||[],r,{name:"applyStyles",enabled:!1}]}}),s=bn(),a=re({styles:{popper:{position:w(o).strategy,left:"0",top:"0"},arrow:{position:"absolute"}},attributes:{}}),i=()=>{s.value&&(s.value.destroy(),s.value=void 0)};return Te(o,l=>{const c=w(s);c&&c.setOptions(l)},{deep:!0}),Te([e,t],([l,c])=>{i(),!(!l||!c)&&(s.value=H3(l,c,w(o)))}),Lt(()=>{i()}),{state:P(()=>({...w(s)?.state||{}})),styles:P(()=>w(a).styles),attributes:P(()=>w(a).attributes),update:()=>w(s)?.update(),forceUpdate:()=>w(s)?.forceUpdate(),instanceRef:P(()=>w(s))}};function j3(e){const t=Object.keys(e.elements);return{styles:Ds(t.map(n=>[n,e.styles[n]||{}])),attributes:Ds(t.map(n=>[n,e.attributes[n]]))}}const Ym=e=>{if(!e)return{onClick:qe,onMousedown:qe,onMouseup:qe};let t=!1,n=!1;return{onClick:a=>{t&&n&&e(a),t=n=!1},onMousedown:a=>{t=a.target===a.currentTarget},onMouseup:a=>{n=a.target===a.currentTarget}}};function sd(){let e;const t=(r,o)=>{n(),e=globalThis.setTimeout(r,o)},n=()=>{e!==void 0&&(globalThis.clearTimeout(e),e=void 0)};return Hi(()=>n()),{registerTimeout:t,cancelTimeout:n}}const tc={prefix:Math.floor(Math.random()*1e4),current:0},W3=Symbol("elIdInjection"),qm=()=>ct()?Me(W3,tc):tc,Wo=e=>{const t=qm();!tt&&t===tc&&xt("IdInjection",`Looks like you are using server rendering, you must provide a id provider to ensure the hydration process to be succeed @@ -31,4 +31,4 @@ e w`,count:"{n} items",collapse:"Collapse",expand:"Expand",copy:"Copy",copied:"TOML copied to clipboard",copyFail:"Copy failed. Please select the text and copy it manually"},toc:{title:"Contents",expand:"Expand contents",collapse:"Collapse contents"},start:"Start Training",stop:"Stop Training",railStart:`Start Train`,railStop:`Stop Train`,railSubmitting:`Wait -…`,startHint:"Click Start Training when the configuration is complete. Run status and training logs will appear on the right.",intro:"Fill in model, dataset, and training parameters in order. Parameter conversion, conflict checks, and backend training constraints run before submission.",panelHint:"The right side shows the TOML that will actually be submitted. Validate parameters first, then start the background training task.",toolbar:{presets:"Presets",import:"Import Config",save:"Save Parameters",history:"History",export:"Export TOML",reset:"Reset"},loadingSchema:"Loading training schema",loadingSchemaHint:"Checking cache and backend version…",schemaError:"Failed to load schema",schemaLoadFail:"Failed to load schema",retry:"Retry",startedTask:"Task started",openLog:"Open Training Log",viewTasks:"View Tasks",validate:"Validate Parameters",validatePassed:"Parameters validated",submitting:"Submitting…",gpu:{sectionTitle:"GPU Settings",fieldDescription:"Select the GPUs used for training"},historyDialog:{title:"Parameter History",unnamed:"Unnamed config",use:"Use",delete:"Delete",empty:"No parameter history",saved:"Parameters saved to browser history"},presetsDialog:{title:"Training Presets",apply:"Apply",empty:"No presets for this training type",loadFail:"Failed to load presets",applied:"Preset applied: {name}"},importMsg:{imported:"Config imported",importedRedirect:"Config imported on the target page",reject:"The config does not apply to this page",mismatchTitle:"Training Type Mismatch",mismatchConfirm:"This config belongs to another training page. Jump there?",jump:"Jump and Import",cancel:"Cancel",fail:"Failed to import config"},exportFail:"Failed to export config",submitConfirm:{message:"Training will occupy the GPU and create a background task. Start now?",title:"Start Training",confirm:"Start Training",cancel:"Cancel",started:"Training task started: {id}",fail:"Failed to submit training",preflightFail:"Anima Fast preflight checks failed"},resetDialog:{title:"Reset Parameters",cancel:"Cancel"},diagnostics:{dadaptScheduler:"DAdaptation-family optimizers work best with lr_scheduler set to constant",prodigyLr:"Prodigy works best with unet_lr and text_encoder_lr set to 1",oftSdxl:"OFT is currently only available for SDXL",conflict:"Parameters {left} and {right} conflict; enable only one of them"},schemas:{"sd3-lora":{title:"Anima LoRA",area:"Anima DiT · Kohya-ss · LoRA"},"anima-lora-fast":{title:"Anima LoRA Fast",area:"Anima DiT · Anima Fast · LoRA"},"anima-finetune":{title:"Anima Full Fine-tune",area:"Anima DiT · Kohya-ss · Full Fine-tune"},"lora-master":{title:"SD / SDXL LoRA",area:"SD / SDXL · Kohya-ss · LoRA"},dreambooth:{title:"SD / SDXL Full Fine-tune",area:"SD / SDXL · Kohya-ss · Full Fine-tune"},"flux-lora":{title:"Flux LoRA",area:"Flux · Kohya-ss · LoRA"},"lumina2-lora":{title:"Lumina 2 LoRA",area:"Lumina 2 · Kohya-ss · LoRA"}}},dataset:{title:"Dataset",switchAria:"Dataset sub-pages",tab:{editor:"Tag Editor",tagger:"Model Tagging"}},tasks:{title:"Tasks",refresh:"Refresh",tabs:{running:"Running",recent:"Recent"},status:{created:"Created",running:"Running",finished:"Finished",terminated:"Terminated",failed:"Failed"},loadError:"Failed to load tasks",retry:"Retry",loading:"Loading task list…",emptyTitle:"No training tasks yet",emptyDesc:"Submit a task from the Training page and its status and log entries will appear here.",filterAria:"Task filter",tabEmpty:"No tasks",defaultName:"Training Task",noDetail:"No task description",listLoadFail:"Failed to load the task list",terminate:{confirm:"Stop task {id}?",title:"Terminate Training",confirmButton:"Stop Task",cancel:"Cancel",success:"Task stopped",fail:"Failed to stop the task"},detail:{stop:"Stop Task",stopping:"Stopping…",viewLog:"View Log",tensorboard:"TensorBoard",empty:"Select a task on the left to view details",taskId:"Task ID",config:"Training Config",returncode:"Return Code",overview:"Overview",previewTitle:"Training previews",previewEmpty:"No training previews yet",previewDisabled:"Preview sampling is disabled for this task, so no images will be generated. Enable it in the training form's preview settings.",lossTitle:"Loss curves",lossEmpty:"No loss data yet",epochLabel:"Epoch {n}",stepLabel:"Step {n}",stepProgress:"Step {step}/{total}",epochProgress:"Epoch {epoch}/{total}"},log:{title:"Training Log",expand:"Expand",collapse:"Collapse",errorBadge:"Errors found in the log, expand to inspect",follow:"Follow Tail",jumpToError:"Jump to Error",copy:"Copy",copied:"Log copied to clipboard",copyFail:"Copy failed. Please select the text and copy it manually",download:"Download",count:"{n} lines",empty:"No log output yet",unavailable:"This task is not in the current server session; no embedded log available."}},settings:{title:"Settings",subtitle:"Training UI, engines, and about",nav:{ui:"UI",engines:"Engines",about:"About",changelog:"Changelog"},ui:{language:"Language",theme:"Theme",themeLight:"Light",themeDark:"Dark",tensorboardUrl:"TensorBoard URL",tensorboardPlaceholder:"Leave empty to use the default proxy",tensorboardHint:"You can provide a standalone TensorBoard address; when empty, access continues through the same-origin backend proxy.",save:"Save",reset:"Reset",saved:"Settings saved",resetDone:"Settings reset"},engines:{title:"Training Engine Management",lead:"Manage optional training runtimes. Built-in engines need no install; optional engines are large and must be installed before use.",readyChip:"Training environment ready",defaultPolicy:{title:"Default policy",body:"The product default remains Kohya (ready out of the box). Anima Fast is large and slow to install, so it is never the global default. If you use Fast often, enable “Remember last engine” below."},rememberLast:{label:"Remember last training engine",hint:"Remembers engine and target per base model. Cold start for new users still defaults to Kohya."},catalog:{kohya:{name:"Kohya-ss",summary:"Built-in engine using the main environment. Ready out of the box."},"anima-fast":{name:"Anima Fast",summary:"Standalone high-performance runtime with install auditing for Anima LoRA.",sizeHint:"Large download (typically several GB) and extra disk space"},musubi:{name:"Musubi-Tuner",summary:"Planned optional training engine."}},state:{ready:"Ready",not_installed:"Not installed",unknown:"Unknown",installing:"Installing",auditing:"Auditing",broken:"Broken",disabled:"Disabled",coming_soon:"Coming soon",installed_unverified:"Awaiting audit"},hint:{ready:"Runtime is installed. You can start training.",not_installed:"Not installed yet. Install before training with this engine.",unknown:"Install status is unclear. Refresh, or open engine management to install.",installing:"Install is in progress. Please wait.",auditing:"Environment audit is in progress.",broken:"Runtime is broken. Check engine management; reinstall only if needed (full reinstall, may re-download several GB).",disabled:"This engine is disabled.",coming_soon:"Not available yet.",installed_unverified:"Installed but not audited yet."},actions:{refresh:"Refresh",install:"Install",installing:"Installing…",reinstall:"Reinstall",reinstallHint:"Only when the runtime is broken; fully reinstalls and may re-download several GB",uninstall:"Uninstall",manage:"Manage"},meta:{builtin:"Built-in · no install needed",gpu:"Requires an NVIDIA GPU",planned:"Not available yet",path:"Runtime path"},console:{idle:"Install log",waiting:"Waiting for install task output…"},confirm:{animaFast:"Anima Fast downloads a standalone Python environment and several GB of dependencies, and requires an NVIDIA GPU. Continue?",reinstall:"Reinstall fully replaces the standalone runtime and usually re-downloads several GB. Use only when the environment is broken or incomplete. Continue?",uninstall:"Uninstall will remove the Anima Fast standalone runtime. Continue?"},msg:{ready:"Engine ready",started:"Install task started",uninstalled:"Uninstalled",fail:"Operation failed",statusFail:"Failed to read status",prefsSaved:"Preference saved"}},navAria:"Settings navigation",tools:{title:"LoRA Script Tools",note:"LoRA script tools are not yet part of the v1 IA. You can still access them directly at /lora/tools.html."},preview:"Preview (switch options on the left)",aboutDesc:"Next Trainer is a powerful, flexible, and easy-to-use local training tool.",moreChangelog:"More changelog…"},home:{heroTitle:"Model training, starting from a clear workflow.",heroSubtitle:"Next Trainer brings training configuration, dataset preparation, and run monitoring together in a local UI.",startTraining:"Configure Training",readGuide:"Read the Guide",portalAria:"Feature portals",enter:"Enter workspace",status:{local:"Local service architecture",vue:"Vue 3 training workspace",models:"Stable Diffusion · Flux · Anima"},credit:"Built on Akegarasu lora-scripts, kohya-ss/sd-scripts, and other open-source projects. Credits and licenses: {about} / {notice}.",portals:{training:{title:"Training",text:"Base model × engine × target — configure and submit in one place."},dataset:{title:"Dataset",text:"Tag editing and model tagging to prepare captions for training."},tasks:{title:"Tasks",text:"View training task status, log entries, and run monitoring."}}},about:{tagline:"A local training WebUI for Stable Diffusion, Flux, and Anima.",projectTitle:"About the Project",projectDesc:"Next Trainer builds on the Akegarasu lora-scripts ecosystem and the kohya-ss/sd-scripts training backend, providing training configuration, dataset preparation, task management, and training monitoring in one place. Dynamic forms are powered by {schemastery}.",creditsTitle:"Open-Source Credits",creditsIntro:"This project depends on and adapts multiple open-source components. Please respect each component's license when using or redistributing. Full notices are in the repository NOTICE file.",credits:{akegarasu:"Upstream GUI and community packaging (Akegarasu SD-Trainer / lora-scripts)",kohya:"Training scripts and Anima / Flux / SD backends (AGPL-3.0)",animaFast:"Optional Anima Fast training engine (MIT)",lycoris:"LoKr / LoHa network modules (Apache-2.0)",tagger:"Default WD14 tagger model and tag list",schemastery:"Dynamic form schema runtime"},creditsNotice:"Full third-party notices: {notice}. This repository license: {license}.",feedbackTitle:"Feedback",feedbackDesc:"When reporting a problem, include the version (including beta builds), training type, reproduction steps, and relevant logs, and submit it on {issues}.",linksTitle:"Project Links",source:"Source Code",releases:"Releases",issues:"Issue Tracker"},guide:{title:"Getting Started",subtitle:"From preparing images to viewing results, complete a local training run step by step.",mascotAlt:"Next Trainer guide",step1Title:"1. Prepare Data",step1:"Prepare training images and matching {ext} caption files. If you don't have captions, use {tagger} first, then clean up captions in {editor}.",step2Title:"2. Choose a Training Type",loraTitle:"LoRA Training",loraDesc:"On the {page}, choose the base model, training engine, and training target: Anima DiT, Flux, or SD / SDXL, with Kohya-ss or Anima Fast.",finetuneTitle:"Full Fine-tune",finetuneDesc:"{anima} is for full DiT fine-tuning; {dreambooth} is for full Stable Diffusion training.",step3Title:"3. Fill Parameters and Train",step3a:"Choose the base model, image directory, and output directory.",step3b:"Pick a training preset or adjust parameters as needed; the TOML preview updates in real time on the right.",step3c:'Run parameter validation first, then click "Start Training" and confirm creating a background task.',step4Title:"4. Check Progress",step4:"After submitting, you can open the training log, or go to {tasks} to stop a task; view metrics and curves in {tensorboard}.",migrateTitle:"Migrating from the Aki Version",migrate1:"Training types are now organized as LoRA and full fine-tune; legacy URLs remain compatible.",migrate2:"Anima Standard, Fast, and Finetune each use their own schema and constraints.",migrate3:"Historical configs and autosave drafts continue to use the legacy browser storage keys.",link:{tagger:"Dataset Tagger",editor:"Tag Editor",trainingPage:"Training page",animaFinetune:"Anima Full Fine-tune",tasks:"Training Tasks"}},changelog:{title:"Changelog",subtitle:"The full repository history lives in {file}; major releases are shown here.",bannerAlt:"Next Trainer changelog",full:"View Full Changelog"},notFound:{title:"Page Not Found",desc:"The requested page does not exist, or the entry has moved.",back:"Back to Home"},datasetEditor:{title:"Tag Editor",pathLabel:"Dataset Directory",scan:"Scan Dataset",scanning:"Scanning…",categoryLabel:"Category",allCategories:"All",queryLabel:"Caption / Filename Filter",batch:{title:"Batch Edit",selected:"{n} selected",filtered:"{n} in filter results",appendPlaceholder:"Tags to append, comma-separated",position:"Append position",positionBack:"Append at end",positionFront:"Prepend at front",removePlaceholder:"Tags to remove, comma-separated",replaceFrom:"Replace from",replaceTo:"Replace to",clean:"Clean separators, whitespace, and duplicates",underscore:"Replace underscores with spaces",stripEscape:"Strip escape characters",sort:"Sort alphabetically",apply:"Apply Batch Operations",confirm:"This will modify {n} images. Continue?",confirmSelected:"Batch Edit Selected Images",confirmFiltered:"Batch Edit Current Filter",done:"Modified {n} images",fail:"Batch edit failed"},quickTag:{title:"Quick Tags",addPlaceholder:"Add a quick tag",add:"Add",hint:"Right-click to remove a custom quick tag"},gallery:{count:"{filtered} / {total} images, {selected} selected",togglePage:"Toggle This Page",undo:"Undo",redo:"Redo",history:"History",emptyTitle:"No dataset loaded",emptyHint:"Enter the dataset folder on the left (or use Browse), then click Scan to start editing tags."},pager:{first:"First",prev:"Previous",next:"Next",last:"Last",perPage:"{size} / page"},caption:{chars:"{n} chars",addPlaceholder:"Add a tag",add:"Add",removeAria:"Remove tag {tag}",save:"Save Caption",saved:"Caption saved",saveFail:"Failed to save",empty:"Scan and select an image to start editing."},historyDialog:{title:"Session Edit History",count:"{n} images",detail:"View Details",noCaption:"(no caption)",empty:"No edits in this session yet"},historyMsg:{undone:"Undone",redone:"Redone",none:"No history operation available",fail:"Operation failed"},scanMsg:{loaded:"Loaded {n} images",fail:"Scan failed"}},paramsPage:{title:"Training Parameter Tuning",subtitle:"The fields actually available are determined by the backend schema of the current training page. The notes below keep the most common tuning principles from the legacy version.",s1Title:"Model and Dataset",baseModel:"Base Model Choice",baseModelDesc:"Prefer a base model that matches the target architecture and comes from a trusted source. Training on a merged model may work well for that model, but usually reduces how well the LoRA transfers to other base models.",resolution:"Training Resolution",resolutionDesc:"Match the model's native resolution and your data quality. With bucketing enabled, images of different aspect ratios are assigned to similarly sized buckets; overly high resolution significantly increases VRAM usage and training time.",s2Title:"Training Intensity",epochDesc:"Together these decide how many times the data is learned. Start from a preset baseline, then adjust after observing sample images.",batchDesc:"A larger batch is usually more stable but uses more VRAM; don't exceed your device's capability just for speed.",lrDesc:"Too high easily harms generalization and image quality; too low may underfit. Reasonable ranges differ across optimizers.",s3Title:"Network and Optimizer",s3a:"determines LoRA capacity; higher values capture more features but increase file size and overfitting risk. LyCORIS, LoKr, DyLoRA, and plain LoRA parameters are not fully interchangeable.",s3b:"Optimizers such as AdamW, Prodigy, and DAdaptation have different learning rate conventions; after choosing a preset, don't copy a learning rate from another optimizer. The UI warns about known conflicting combinations.",s4Title:"Saving and Preview",s4a:"Set a reasonable save interval and enable sample previews to catch underfitting, overfitting, or caption issues early. Check the TOML on the right before submitting; exported configs are normalized by the backend first."},animaFast:{intro:"A standalone runtime with install auditing and a high-performance training entry.",credit:"The Fast training engine is based on the open-source project {upstream} (MIT). Thanks to the authors and community; this page integrates it as an optional plugin under the respective licenses. Full notices: {notice}.",refresh:"Refresh status",statusBar:{readyHint:"Anima Fast runtime is installed. You can start training.",needInstallHint:"Not installed or not ready. Install the plugin before Fast training.",workingHint:"Install or audit is in progress. Please wait.",brokenHint:"Runtime is broken. Open engine management; reinstall only if needed (full reinstall).",disabledHint:"Anima Fast is disabled."},state:{ready:"Plugin ready",installing:"Installing",auditing:"Auditing",broken:"Broken",installed_unverified:"Awaiting audit",unknown:"Unknown state",disabled:"Feature disabled",not_installed:"Not installed"},auditTitle:"Environment Audit",installWorking:"Installing",install:"Install Plugin",repair:"Reinstall",consoleIdle:"Install Log",consoleWaiting:"Waiting for install task output…",confirm:{message:"Anima Fast downloads a standalone Python environment and several GB of dependencies, and requires an NVIDIA GPU. Continue?",installTitle:"Install Plugin",repairTitle:"Reinstall"},msg:{ready:"Plugin ready",started:"Install task started",fail:"Operation failed",statusFail:"Failed to read status"}},integration:{openExternal:"Open in New Window",legacyTagEditor:"Legacy Tag Editor"},api:{network:"Cannot connect to the backend",unparseable:"The backend returned an unparseable response (HTTP {status})",httpFail:"Request failed (HTTP {status})",fail:"Request failed",missingData:"Backend response is missing data"},schema:{notProvided:"Backend did not provide schema: {name}",invalid:"Schema {name} did not return a valid definition",advancedSection:"Advanced Settings",required:"This field is required",tooSmall:"Must be at least {min}",tooLarge:"Must be at most {max}",samplePromptsDescription:"Preview image generation parameters. Text after `--n` is the negative prompt, `--w/--h` sets the size, `--l` is the CFG scale, `--s` is the step count, and `--d` is the seed."},schemaForm:{fieldCount:"{n} items",required:"Required",emptyOption:"(empty)",arrayPlaceholder:"One item per line",browse:"Browse",commonPaths:"Common Paths",catalogTitle:"Choose a Common Path",pickFail:"Failed to pick a path",catalogFail:"Failed to read the directory"},tagger:{title:"Tagger",subtitle:"Choose a model and an image directory to automatically generate matching caption files.",modelLabel:"Tagger Model",pathLabel:"Image Folder",thresholdLabel:"General Tag Threshold",characterThresholdLabel:"Character Tag Threshold",additionalTagsLabel:"Additional Tags",excludeTagsLabel:"Exclude Tags",endpointLabel:"Download Mirror",endpointPlaceholder:"Leave empty to use the default Hugging Face",conflictLabel:"Existing Caption",conflict:{ignore:"Ignore",copy:"Overwrite",prepend:"Prepend"},recursive:"Recursive search",replaceUnderscore:"Replace underscores with spaces",escapeTag:"Escape brackets",addRatingTag:"Add rating tag",addModelTag:"Add model tag",idle:"Configure parameters, then click Start",downloadMeter:"Model Download",downloadIdle:"Not started",taggingMeter:"Image Tagging",cancel:"Cancel Task",start:"Start Tagging",prefetch:"Pre-download Model",reset:"Reset Status",msg:{pathRequired:"Please enter the image folder path first",submitted:"Tagging task submitted",submitFail:"Submission failed",cancelRequested:"Cancellation requested",resetDone:"Status reset",prefetchStarted:"Model download started",actionFail:"Operation failed",statusFail:"Failed to read status"}},tools:{title:"LoRA Script Tools",subtitle:"Run whitelisted model and LoRA processing scripts on the backend. Tasks run in the background.",scriptLabel:"Script",argsTitle:"Arguments",addArg:"Add Argument",argKeyPlaceholder:"Argument name, e.g. model_org",argValuePlaceholder:"Argument value",removeArgAria:"Remove argument",submitting:"Submitting…",run:"Run Tool",msg:{submitted:"Tool task submitted",submitFail:"Failed to submit the task"}}},SA=[{value:"zh-CN",label:"简体中文"},{value:"en-US",label:"English"}],_0="zh-CN",w0="ui-configs";function E0(){try{const e=localStorage.getItem(w0),t=e?JSON.parse(e):{};return t&&typeof t=="object"?t:{}}catch{return{}}}function TA(e){return SA.some(t=>t.value===e)}function CA(){const e=E0().language;return TA(e)?e:_0}function AA(e){const t=E0();t.language=e,localStorage.setItem(w0,JSON.stringify(t))}const fr=o6({legacy:!1,locale:CA(),fallbackLocale:_0,messages:{"zh-CN":wA,"en-US":EA}});function mO(e){fr.global.locale.value=e,AA(e)}const OA={"zh-CN":y0,"en-US":Pm};function xA(e){return OA[e]??y0}class hs extends Error{constructor(t,n,r){super(t),this.status=n,this.response=r,this.name="ApiError"}status;response}async function LA(e,t={}){const{allowPending:n=!1,headers:r,...o}=t;let s;try{s=await fetch(e,{...o,headers:{...o.body?{"Content-Type":"application/json"}:{},...r}})}catch(i){throw new hs(i instanceof Error?i.message:fr.global.t("api.network"),"network")}let a;try{a=await s.json()}catch{throw new hs(fr.global.t("api.unparseable",{status:s.status}),"http")}if(!s.ok)throw new hs(a.message||fr.global.t("api.httpFail",{status:s.status}),"http",a);if(a.status!=="success"&&!(n&&a.status==="pending"))throw new hs(a.message||fr.global.t("api.fail"),a.status,a);return a}async function IA(e,t){const n=await LA(e,t);if(n.data==null)throw new hs(fr.global.t("api.missingData"),n.status,n);return n.data}const PA={getVersion:()=>IA("/api/version")},kA=cy("app",()=>{const e=re("");async function t(){try{e.value=(await PA.getVersion()).version}catch{e.value=""}}return{version:e,loadVersion:t}}),RA={class:"app-shell"},NA={class:"mobile-header"},MA=["aria-label"],FA=["aria-label"],DA=["aria-label"],$A={class:"sidebar-footer"},VA={class:"app-content"},BA=Ee({__name:"AppShell",setup(e){const t=_A(),{t:n}=ia(),r=re(!1),o=kA(),{version:s}=uy(o),a=P(()=>s.value?/(?:alpha|beta|rc)/i.test(s.value)?`v${s.value} · ${n("app.prerelease")}`:`v${s.value}`:"beta"),i=[{key:"training",to:"/training",icon:m4,match:["/training","/lora/","/dreambooth/"]},{key:"dataset",to:"/dataset",icon:y4,match:["/dataset","/tagger.html","/native-tageditor.html","/dataset-editor.html","/tageditor.html"]},{key:"tasks",to:"/tasks",icon:v4,match:["/tasks","/task.html","/tensorboard.html"]},{key:"settings",to:"/settings",icon:N4,match:["/settings","/other/"]}],l=P(()=>t.path);function c(u){return u.some(f=>l.value.startsWith(f))}return pt(()=>o.loadVersion()),(u,f)=>{const d=dn("el-icon"),p=dn("RouterLink"),g=dn("RouterView");return V(),ie("div",RA,[ce("header",NA,[ce("button",{class:"icon-button","aria-label":w(n)("nav.openNav"),onClick:f[0]||(f[0]=h=>r.value=!r.value)},[xe(d,null,{default:me(()=>[xe(w(C4))]),_:1})],8,MA),xe(p,{class:"mobile-brand",to:"/"},{default:me(()=>[Xa(st(w(n)("app.brand")),1)]),_:1})]),r.value?(V(),ie("button",{key:0,class:"sidebar-mask","aria-label":w(n)("nav.closeNav"),onClick:f[1]||(f[1]=h=>r.value=!1)},null,8,FA)):be("",!0),ce("aside",{class:ae(["sidebar",{"is-open":r.value}])},[xe(p,{class:"brand",to:"/",onClick:f[2]||(f[2]=h=>r.value=!1)},{default:me(()=>[f[5]||(f[5]=ce("span",{class:"brand-mark"},"N",-1)),ce("span",null,[ce("strong",null,st(w(n)("app.brand")),1),ce("small",null,st(a.value),1)])]),_:1}),ce("nav",{class:"navigation","aria-label":w(n)("nav.mainAria")},[(V(),ie(Qe,null,cs(i,h=>xe(p,{key:h.key,to:h.to,class:ae(["nav-link",{active:c(h.match)}]),onClick:f[3]||(f[3]=v=>r.value=!1)},{default:me(()=>[xe(d,null,{default:me(()=>[(V(),ye(vt(h.icon)))]),_:2},1024),ce("span",null,st(w(n)(`nav.${h.key}`)),1)]),_:2},1032,["to","class"])),64))],8,DA),ce("footer",$A,[xe(p,{to:"/help/guide.html",class:"nav-link help-link",onClick:f[4]||(f[4]=h=>r.value=!1)},{default:me(()=>[xe(d,null,{default:me(()=>[xe(w(P4))]),_:1}),ce("span",null,st(w(n)("nav.help")),1)]),_:1}),f[6]||(f[6]=ce("a",{href:"https://github.com/wochenlong/lora-scripts-next",target:"_blank",rel:"noreferrer",class:"github-link"},"GitHub",-1))])],2),ce("main",VA,[xe(g)])])}}}),HA=Ee({__name:"App",setup(e){const{locale:t}=ia(),n=P(()=>xA(t.value));return(r,o)=>{const s=dn("el-config-provider");return V(),ye(s,{locale:n.value},{default:me(()=>[xe(BA)]),_:1},8,["locale"])}}}),UA="modulepreload",jA=function(e){return"/"+e},Lp={},Zn=function(t,n,r){let o=Promise.resolve();if(n&&n.length>0){let l=function(c){return Promise.all(c.map(u=>Promise.resolve(u).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};document.getElementsByTagName("link");const a=document.querySelector("meta[property=csp-nonce]"),i=a?.nonce||a?.getAttribute("nonce");o=l(n.map(c=>{if(c=jA(c),c in Lp)return;Lp[c]=!0;const u=c.endsWith(".css"),f=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${f}`))return;const d=document.createElement("link");if(d.rel=u?"stylesheet":UA,u||(d.as="script"),d.crossOrigin="",d.href=c,i&&d.setAttribute("nonce",i),document.head.appendChild(d),u)return new Promise((p,g)=>{d.addEventListener("load",p),d.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${c}`)))})}))}function s(a){const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=a,window.dispatchEvent(i),!i.defaultPrevented)throw a}return o.then(a=>{for(const i of a||[])i.status==="rejected"&&s(i.reason);return t().catch(s)})},WA=()=>Zn(()=>import("./HomePage-ChxMX_IM.js"),__vite__mapDeps([0,1])),Ip=()=>Zn(()=>import("./IntegrationPage-DlxzcFZI.js"),[]),zA=()=>Zn(()=>import("./NotFoundPage-8auRhUvD.js"),[]),KA=()=>Zn(()=>import("./TasksPage-CeWYr9Xg.js"),__vite__mapDeps([2,3,4,5])),GA=()=>Zn(()=>import("./ToolsPage-DH5QX7Cd.js"),__vite__mapDeps([6,3])),Pp=()=>Zn(()=>import("./DatasetPage-CoWjms-D.js"),__vite__mapDeps([7,3,4,8])),YA=()=>Zn(()=>import("./TrainingWorkbenchPage-ByP70JIG.js"),__vite__mapDeps([9,3,4,10,8,5])),Na=()=>Zn(()=>import("./SettingsContainerPage-9zJ1w2a2.js"),__vite__mapDeps([11,3,1,4,10])),qA=()=>Zn(()=>import("./GuidePage-Ds9mS5xC.js"),[]),XA=()=>Zn(()=>import("./ParamsPage-BkK-W4SI.js"),[]),rr=(e,t,n)=>({path:"/training",query:{model:e,engine:t,target:n}}),JA=[{path:"/",component:WA,meta:{titleKey:"app.brand"}},{path:"/training",component:YA,meta:{titleKey:"training.title"}},{path:"/dataset",redirect:"/dataset/tagger"},{path:"/dataset/editor",component:Pp,props:{tab:"editor"},meta:{titleKey:"dataset.title"}},{path:"/dataset/tagger",component:Pp,props:{tab:"tagger"},meta:{titleKey:"dataset.title"}},{path:"/tasks",component:KA,meta:{titleKey:"tasks.title"}},{path:"/settings",redirect:"/settings/ui"},{path:"/settings/ui",component:Na,props:{tab:"ui"},meta:{titleKey:"settings.title"}},{path:"/settings/engines",component:Na,props:{tab:"engines"},meta:{titleKey:"settings.title"}},{path:"/settings/about",component:Na,props:{tab:"about"},meta:{titleKey:"settings.title"}},{path:"/settings/changelog",component:Na,props:{tab:"changelog"},meta:{titleKey:"settings.title"}},{path:"/help/guide.html",component:qA,meta:{titleKey:"guide.title"}},{path:"/lora/index.html",redirect:"/training"},{path:"/lora/basic.html",redirect:()=>rr("sd15","kohya","lora")},{path:"/lora/master.html",redirect:()=>rr("sdxl","kohya","lora")},{path:"/lora/sdxl.html",redirect:()=>rr("sdxl","kohya","lora")},{path:"/lora/flux.html",redirect:()=>rr("flux","kohya","lora")},{path:"/lora/sd3.html",redirect:()=>rr("anima","kohya","lora")},{path:"/lora/anima-fast.html",redirect:()=>rr("anima","anima-fast","lora")},{path:"/lora/anima-fast",redirect:()=>rr("anima","anima-fast","lora")},{path:"/lora/anima-finetune.html",redirect:()=>rr("anima","kohya","finetune")},{path:"/dreambooth/index.html",redirect:()=>rr("sdxl","kohya","finetune")},{path:"/tagger.html",redirect:"/dataset/tagger"},{path:"/native-tageditor.html",redirect:"/dataset/editor"},{path:"/dataset-editor.html",redirect:"/dataset/editor"},{path:"/task.html",redirect:"/tasks"},{path:"/other/settings.html",redirect:"/settings/ui"},{path:"/other/about.html",redirect:"/settings/about"},{path:"/other/changelog.html",redirect:"/settings/changelog"},{path:"/tensorboard.html",component:Ip,props:{title:"TensorBoard",src:"/proxy/tensorboard/",configurable:!0},meta:{title:"TensorBoard"}},{path:"/lora/tools.html",component:GA,meta:{titleKey:"tools.title"}},{path:"/lora/params.html",component:XA,meta:{titleKey:"paramsPage.title"}},{path:"/tageditor.html",component:Ip,props:{titleKey:"integration.legacyTagEditor",src:"/proxy/tageditor/"},meta:{titleKey:"integration.legacyTagEditor"}},{path:"/:pathMatch(.*)*",component:zA,meta:{titleKey:"notFound.title"}}],S0=yA({history:J6(),routes:JA,scrollBehavior:()=>({top:0})});S0.afterEach(e=>{const t=typeof e.meta.titleKey=="string"?e.meta.titleKey:"app.brand";document.title=`${fr.global.t(t)} | ${fr.global.t("app.brand")}`});const T0=tm(HA);for(const e of[NS,hS,NT,ft,wg,HT,hT,pT,ZT])T0.component(e.name,e);T0.directive("loading",bu).use(ry()).use(S0).use(fr).mount("#app");export{bt as $,LA as A,Ln as B,nO as C,Jt as D,eO as E,Qe as F,IA as G,jl as H,tO as I,cy as J,fr as K,go as L,lO as M,iO as N,Ce as O,hO as P,Vv as Q,hA as R,ZA as S,_A as T,kA as U,CA as V,SA as W,w0 as X,mO as Y,sO as Z,Vo as _,ce as a,UT as a0,uO as a1,ft as a2,ET as a3,wg as a4,yg as a5,NS as a6,cS as a7,Ci as a8,iu as a9,gn as aA,th as aB,gr as aC,Cn as aD,Kf as aE,dS as aF,Ur as aG,aO as aH,Wo as aa,xw as ab,ge as ac,De as ad,Fw as ae,qs as af,fO as ag,Ym as ah,aa as ai,vt as aj,Zs as ak,tt as al,pr as am,rO as an,He as ao,Ie as ap,no as aq,xt as ar,Br as as,rt as at,he as au,nt as av,at as aw,po as ax,Tn as ay,DE as az,w as b,ie as c,Ee as d,xe as e,Xa as f,QA as g,P as h,dn as i,ye as j,Te as k,Lt as l,ae as m,yt as n,V as o,be as p,Wt as q,cs as r,re as s,st as t,ia as u,Ye as v,me as w,uy as x,pt as y,cO as z}; +…`,startHint:"Click Start Training when the configuration is complete. Run status and training logs will appear on the right.",intro:"Fill in model, dataset, and training parameters in order. Parameter conversion, conflict checks, and backend training constraints run before submission.",panelHint:"The right side shows the TOML that will actually be submitted. Validate parameters first, then start the background training task.",toolbar:{presets:"Presets",import:"Import Config",save:"Save Parameters",history:"History",export:"Export TOML",reset:"Reset"},loadingSchema:"Loading training schema",loadingSchemaHint:"Checking cache and backend version…",schemaError:"Failed to load schema",schemaLoadFail:"Failed to load schema",retry:"Retry",startedTask:"Task started",openLog:"Open Training Log",viewTasks:"View Tasks",validate:"Validate Parameters",validatePassed:"Parameters validated",submitting:"Submitting…",gpu:{sectionTitle:"GPU Settings",fieldDescription:"Select the GPUs used for training"},historyDialog:{title:"Parameter History",unnamed:"Unnamed config",use:"Use",delete:"Delete",empty:"No parameter history",saved:"Parameters saved to browser history"},presetsDialog:{title:"Training Presets",apply:"Apply",empty:"No presets for this training type",loadFail:"Failed to load presets",applied:"Preset applied: {name}"},importMsg:{imported:"Config imported",importedRedirect:"Config imported on the target page",reject:"The config does not apply to this page",mismatchTitle:"Training Type Mismatch",mismatchConfirm:"This config belongs to another training page. Jump there?",jump:"Jump and Import",cancel:"Cancel",fail:"Failed to import config"},exportFail:"Failed to export config",submitConfirm:{message:"Training will occupy the GPU and create a background task. Start now?",title:"Start Training",confirm:"Start Training",cancel:"Cancel",started:"Training task started: {id}",fail:"Failed to submit training",preflightFail:"Anima Fast preflight checks failed"},resetDialog:{title:"Reset Parameters",cancel:"Cancel"},diagnostics:{dadaptScheduler:"DAdaptation-family optimizers work best with lr_scheduler set to constant",prodigyLr:"Prodigy works best with unet_lr and text_encoder_lr set to 1",oftSdxl:"OFT is currently only available for SDXL",conflict:"Parameters {left} and {right} conflict; enable only one of them"},schemas:{"sd3-lora":{title:"Anima LoRA",area:"Anima DiT · Kohya-ss · LoRA"},"anima-lora-fast":{title:"Anima LoRA Fast",area:"Anima DiT · Anima Fast · LoRA"},"anima-finetune":{title:"Anima Full Fine-tune",area:"Anima DiT · Kohya-ss · Full Fine-tune"},"lora-master":{title:"SD / SDXL LoRA",area:"SD / SDXL · Kohya-ss · LoRA"},dreambooth:{title:"SD / SDXL Full Fine-tune",area:"SD / SDXL · Kohya-ss · Full Fine-tune"},"flux-lora":{title:"Flux LoRA",area:"Flux · Kohya-ss · LoRA"},"lumina2-lora":{title:"Lumina 2 LoRA",area:"Lumina 2 · Kohya-ss · LoRA"}}},dataset:{title:"Dataset",switchAria:"Dataset sub-pages",tab:{editor:"Tag Editor",tagger:"Model Tagging"}},tasks:{title:"Tasks",refresh:"Refresh",tabs:{running:"Running",recent:"Recent"},status:{created:"Created",running:"Running",finished:"Finished",terminated:"Terminated",failed:"Failed"},loadError:"Failed to load tasks",retry:"Retry",loading:"Loading task list…",emptyTitle:"No training tasks yet",emptyDesc:"Submit a task from the Training page and its status and log entries will appear here.",filterAria:"Task filter",tabEmpty:"No tasks",defaultName:"Training Task",noDetail:"No task description",listLoadFail:"Failed to load the task list",terminate:{confirm:"Stop task {id}?",title:"Terminate Training",confirmButton:"Stop Task",cancel:"Cancel",success:"Task stopped",fail:"Failed to stop the task"},detail:{stop:"Stop Task",stopping:"Stopping…",viewLog:"View Log",tensorboard:"TensorBoard",empty:"Select a task on the left to view details",taskId:"Task ID",config:"Training Config",returncode:"Return Code",overview:"Overview",previewTitle:"Training previews",previewEmpty:"No training previews yet",previewDisabled:"Preview sampling is disabled for this task, so no images will be generated. Enable it in the training form's preview settings.",lossTitle:"Loss curves",lossEmpty:"No loss data yet",epochLabel:"Epoch {n}",stepLabel:"Step {n}",stepProgress:"Step {step}/{total}",epochProgress:"Epoch {epoch}/{total}"},log:{title:"Training Log",expand:"Expand",collapse:"Collapse",errorBadge:"Errors found in the log, expand to inspect",follow:"Follow Tail",jumpToError:"Jump to Error",copy:"Copy",copied:"Log copied to clipboard",copyFail:"Copy failed. Please select the text and copy it manually",download:"Download",count:"{n} lines",empty:"No log output yet",unavailable:"This task is not in the current server session; no embedded log available."}},settings:{title:"Settings",subtitle:"Training UI, engines, and about",nav:{ui:"UI",engines:"Engines",about:"About",changelog:"Changelog"},ui:{language:"Language",theme:"Theme",themeLight:"Light",themeDark:"Dark",tensorboardUrl:"TensorBoard URL",tensorboardPlaceholder:"Leave empty to use the default proxy",tensorboardHint:"You can provide a standalone TensorBoard address; when empty, access continues through the same-origin backend proxy.",save:"Save",reset:"Reset",saved:"Settings saved",resetDone:"Settings reset"},engines:{title:"Training Engine Management",lead:"Manage optional training runtimes. Built-in engines need no install; optional engines are large and must be installed before use.",readyChip:"Training environment ready",defaultPolicy:{title:"Default policy",body:"The product default remains Kohya (ready out of the box). Anima Fast is large and slow to install, so it is never the global default. If you use Fast often, enable “Remember last engine” below."},rememberLast:{label:"Remember last training engine",hint:"Remembers engine and target per base model. Cold start for new users still defaults to Kohya."},catalog:{kohya:{name:"Kohya-ss",summary:"Built-in engine using the main environment. Ready out of the box."},"anima-fast":{name:"Anima Fast",summary:"Standalone high-performance runtime with install auditing for Anima LoRA.",sizeHint:"Large download (typically several GB) and extra disk space"},musubi:{name:"Musubi-Tuner",summary:"Planned optional training engine."}},state:{ready:"Ready",not_installed:"Not installed",unknown:"Unknown",installing:"Installing",auditing:"Auditing",broken:"Broken",disabled:"Disabled",coming_soon:"Coming soon",installed_unverified:"Awaiting audit"},hint:{ready:"Runtime is installed. You can start training.",not_installed:"Not installed yet. Install before training with this engine.",unknown:"Install status is unclear. Refresh, or open engine management to install.",installing:"Install is in progress. Please wait.",auditing:"Environment audit is in progress.",broken:"Runtime is broken. Check engine management; reinstall only if needed (full reinstall, may re-download several GB).",disabled:"This engine is disabled.",coming_soon:"Not available yet.",installed_unverified:"Installed but not audited yet."},actions:{refresh:"Refresh",install:"Install",installing:"Installing…",reinstall:"Reinstall",reinstallHint:"Only when the runtime is broken; fully reinstalls and may re-download several GB",uninstall:"Uninstall",manage:"Manage"},meta:{builtin:"Built-in · no install needed",gpu:"Requires an NVIDIA GPU",planned:"Not available yet",path:"Runtime path"},console:{idle:"Install log",waiting:"Waiting for install task output…"},confirm:{animaFast:"Anima Fast downloads a standalone Python environment and several GB of dependencies, and requires an NVIDIA GPU. Continue?",reinstall:"Reinstall fully replaces the standalone runtime and usually re-downloads several GB. Use only when the environment is broken or incomplete. Continue?",uninstall:"Uninstall will remove the Anima Fast standalone runtime. Continue?"},msg:{ready:"Engine ready",started:"Install task started",uninstalled:"Uninstalled",fail:"Operation failed",statusFail:"Failed to read status",prefsSaved:"Preference saved"}},navAria:"Settings navigation",tools:{title:"LoRA Script Tools",note:"LoRA script tools are not yet part of the v1 IA. You can still access them directly at /lora/tools.html."},preview:"Preview (switch options on the left)",aboutDesc:"Next Trainer is a powerful, flexible, and easy-to-use local training tool.",moreChangelog:"More changelog…"},home:{heroTitle:"Model training, starting from a clear workflow.",heroSubtitle:"Next Trainer brings training configuration, dataset preparation, and run monitoring together in a local UI.",startTraining:"Configure Training",readGuide:"Read the Guide",portalAria:"Feature portals",enter:"Enter workspace",status:{local:"Local service architecture",vue:"Vue 3 training workspace",models:"Stable Diffusion · Flux · Anima"},credit:"Built on Akegarasu lora-scripts, kohya-ss/sd-scripts, and other open-source projects. Credits and licenses: {about} / {notice}.",portals:{training:{title:"Training",text:"Base model × engine × target — configure and submit in one place."},dataset:{title:"Dataset",text:"Tag editing and model tagging to prepare captions for training."},tasks:{title:"Tasks",text:"View training task status, log entries, and run monitoring."}}},about:{tagline:"A local training WebUI for Stable Diffusion, Flux, and Anima.",projectTitle:"About the Project",projectDesc:"Next Trainer builds on the Akegarasu lora-scripts ecosystem and the kohya-ss/sd-scripts training backend, providing training configuration, dataset preparation, task management, and training monitoring in one place. Dynamic forms are powered by {schemastery}.",creditsTitle:"Open-Source Credits",creditsIntro:"This project depends on and adapts multiple open-source components. Please respect each component's license when using or redistributing. Full notices are in the repository NOTICE file.",credits:{akegarasu:"Upstream GUI and community packaging (Akegarasu SD-Trainer / lora-scripts)",kohya:"Training scripts and Anima / Flux / SD backends (AGPL-3.0)",animaFast:"Optional Anima Fast training engine (MIT)",lycoris:"LoKr / LoHa network modules (Apache-2.0)",tagger:"Default WD14 tagger model and tag list",schemastery:"Dynamic form schema runtime"},creditsNotice:"Full third-party notices: {notice}. This repository license: {license}.",feedbackTitle:"Feedback",feedbackDesc:"When reporting a problem, include the version (including beta builds), training type, reproduction steps, and relevant logs, and submit it on {issues}.",linksTitle:"Project Links",source:"Source Code",releases:"Releases",issues:"Issue Tracker"},guide:{title:"Getting Started",subtitle:"From preparing images to viewing results, complete a local training run step by step.",mascotAlt:"Next Trainer guide",step1Title:"1. Prepare Data",step1:"Prepare training images and matching {ext} caption files. If you don't have captions, use {tagger} first, then clean up captions in {editor}.",step2Title:"2. Choose a Training Type",loraTitle:"LoRA Training",loraDesc:"On the {page}, choose the base model, training engine, and training target: Anima DiT, Flux, or SD / SDXL, with Kohya-ss or Anima Fast.",finetuneTitle:"Full Fine-tune",finetuneDesc:"{anima} is for full DiT fine-tuning; {dreambooth} is for full Stable Diffusion training.",step3Title:"3. Fill Parameters and Train",step3a:"Choose the base model, image directory, and output directory.",step3b:"Pick a training preset or adjust parameters as needed; the TOML preview updates in real time on the right.",step3c:'Run parameter validation first, then click "Start Training" and confirm creating a background task.',step4Title:"4. Check Progress",step4:"After submitting, you can open the training log, or go to {tasks} to stop a task; view metrics and curves in {tensorboard}.",migrateTitle:"Migrating from the Aki Version",migrate1:"Training types are now organized as LoRA and full fine-tune; legacy URLs remain compatible.",migrate2:"Anima Standard, Fast, and Finetune each use their own schema and constraints.",migrate3:"Historical configs and autosave drafts continue to use the legacy browser storage keys.",link:{tagger:"Dataset Tagger",editor:"Tag Editor",trainingPage:"Training page",animaFinetune:"Anima Full Fine-tune",tasks:"Training Tasks"}},changelog:{title:"Changelog",subtitle:"The full repository history lives in {file}; major releases are shown here.",bannerAlt:"Next Trainer changelog",full:"View Full Changelog"},notFound:{title:"Page Not Found",desc:"The requested page does not exist, or the entry has moved.",back:"Back to Home"},datasetEditor:{title:"Tag Editor",pathLabel:"Dataset Directory",scan:"Scan Dataset",scanning:"Scanning…",categoryLabel:"Category",allCategories:"All",queryLabel:"Caption / Filename Filter",batch:{title:"Batch Edit",selected:"{n} selected",filtered:"{n} in filter results",appendPlaceholder:"Tags to append, comma-separated",position:"Append position",positionBack:"Append at end",positionFront:"Prepend at front",removePlaceholder:"Tags to remove, comma-separated",replaceFrom:"Replace from",replaceTo:"Replace to",clean:"Clean separators, whitespace, and duplicates",underscore:"Replace underscores with spaces",stripEscape:"Strip escape characters",sort:"Sort alphabetically",apply:"Apply Batch Operations",confirm:"This will modify {n} images. Continue?",confirmSelected:"Batch Edit Selected Images",confirmFiltered:"Batch Edit Current Filter",done:"Modified {n} images",fail:"Batch edit failed"},quickTag:{title:"Quick Tags",addPlaceholder:"Add a quick tag",add:"Add",hint:"Right-click to remove a custom quick tag"},gallery:{count:"{filtered} / {total} images, {selected} selected",togglePage:"Toggle This Page",undo:"Undo",redo:"Redo",history:"History",emptyTitle:"No dataset loaded",emptyHint:"Enter the dataset folder on the left (or use Browse), then click Scan to start editing tags."},pager:{first:"First",prev:"Previous",next:"Next",last:"Last",perPage:"{size} / page"},caption:{chars:"{n} chars",addPlaceholder:"Add a tag",add:"Add",removeAria:"Remove tag {tag}",save:"Save Caption",saved:"Caption saved",saveFail:"Failed to save",empty:"Scan and select an image to start editing."},historyDialog:{title:"Session Edit History",count:"{n} images",detail:"View Details",noCaption:"(no caption)",empty:"No edits in this session yet"},historyMsg:{undone:"Undone",redone:"Redone",none:"No history operation available",fail:"Operation failed"},scanMsg:{loaded:"Loaded {n} images",fail:"Scan failed"}},paramsPage:{title:"Training Parameter Tuning",subtitle:"The fields actually available are determined by the backend schema of the current training page. The notes below keep the most common tuning principles from the legacy version.",s1Title:"Model and Dataset",baseModel:"Base Model Choice",baseModelDesc:"Prefer a base model that matches the target architecture and comes from a trusted source. Training on a merged model may work well for that model, but usually reduces how well the LoRA transfers to other base models.",resolution:"Training Resolution",resolutionDesc:"Match the model's native resolution and your data quality. With bucketing enabled, images of different aspect ratios are assigned to similarly sized buckets; overly high resolution significantly increases VRAM usage and training time.",s2Title:"Training Intensity",epochDesc:"Together these decide how many times the data is learned. Start from a preset baseline, then adjust after observing sample images.",batchDesc:"A larger batch is usually more stable but uses more VRAM; don't exceed your device's capability just for speed.",lrDesc:"Too high easily harms generalization and image quality; too low may underfit. Reasonable ranges differ across optimizers.",s3Title:"Network and Optimizer",s3a:"determines LoRA capacity; higher values capture more features but increase file size and overfitting risk. LyCORIS, LoKr, DyLoRA, and plain LoRA parameters are not fully interchangeable.",s3b:"Optimizers such as AdamW, Prodigy, and DAdaptation have different learning rate conventions; after choosing a preset, don't copy a learning rate from another optimizer. The UI warns about known conflicting combinations.",s4Title:"Saving and Preview",s4a:"Set a reasonable save interval and enable sample previews to catch underfitting, overfitting, or caption issues early. Check the TOML on the right before submitting; exported configs are normalized by the backend first."},animaFast:{intro:"A standalone runtime with install auditing and a high-performance training entry.",credit:"The Fast training engine is based on the open-source project {upstream} (MIT). Thanks to the authors and community; this page integrates it as an optional plugin under the respective licenses. Full notices: {notice}.",refresh:"Refresh status",statusBar:{readyHint:"Anima Fast runtime is installed. You can start training.",needInstallHint:"Not installed or not ready. Install the plugin before Fast training.",workingHint:"Install or audit is in progress. Please wait.",brokenHint:"Runtime is broken. Open engine management; reinstall only if needed (full reinstall).",disabledHint:"Anima Fast is disabled."},state:{ready:"Plugin ready",installing:"Installing",auditing:"Auditing",broken:"Broken",installed_unverified:"Awaiting audit",unknown:"Unknown state",disabled:"Feature disabled",not_installed:"Not installed"},auditTitle:"Environment Audit",installWorking:"Installing",install:"Install Plugin",repair:"Reinstall",consoleIdle:"Install Log",consoleWaiting:"Waiting for install task output…",confirm:{message:"Anima Fast downloads a standalone Python environment and several GB of dependencies, and requires an NVIDIA GPU. Continue?",installTitle:"Install Plugin",repairTitle:"Reinstall"},msg:{ready:"Plugin ready",started:"Install task started",fail:"Operation failed",statusFail:"Failed to read status"}},integration:{openExternal:"Open in New Window",legacyTagEditor:"Legacy Tag Editor"},api:{network:"Cannot connect to the backend",unparseable:"The backend returned an unparseable response (HTTP {status})",httpFail:"Request failed (HTTP {status})",fail:"Request failed",missingData:"Backend response is missing data"},schema:{notProvided:"Backend did not provide schema: {name}",invalid:"Schema {name} did not return a valid definition",advancedSection:"Advanced Settings",required:"This field is required",tooSmall:"Must be at least {min}",tooLarge:"Must be at most {max}",samplePromptsDescription:"Preview image generation parameters. Text after `--n` is the negative prompt, `--w/--h` sets the size, `--l` is the CFG scale, `--s` is the step count, and `--d` is the seed."},schemaForm:{fieldCount:"{n} items",required:"Required",emptyOption:"(empty)",arrayPlaceholder:"One item per line",browse:"Browse",commonPaths:"Common Paths",catalogTitle:"Choose a Common Path",pickFail:"Failed to pick a path",catalogFail:"Failed to read the directory"},tagger:{title:"Tagger",subtitle:"Choose a model and an image directory to automatically generate matching caption files.",modelLabel:"Tagger Model",pathLabel:"Image Folder",thresholdLabel:"General Tag Threshold",characterThresholdLabel:"Character Tag Threshold",additionalTagsLabel:"Additional Tags",excludeTagsLabel:"Exclude Tags",endpointLabel:"Download Mirror",endpointPlaceholder:"Leave empty to use the default Hugging Face",conflictLabel:"Existing Caption",conflict:{ignore:"Ignore",copy:"Overwrite",prepend:"Prepend"},recursive:"Recursive search",replaceUnderscore:"Replace underscores with spaces",escapeTag:"Escape brackets",addRatingTag:"Add rating tag",addModelTag:"Add model tag",idle:"Configure parameters, then click Start",downloadMeter:"Model Download",downloadIdle:"Not started",taggingMeter:"Image Tagging",cancel:"Cancel Task",start:"Start Tagging",prefetch:"Pre-download Model",reset:"Reset Status",msg:{pathRequired:"Please enter the image folder path first",submitted:"Tagging task submitted",submitFail:"Submission failed",cancelRequested:"Cancellation requested",resetDone:"Status reset",prefetchStarted:"Model download started",actionFail:"Operation failed",statusFail:"Failed to read status"}},tools:{title:"LoRA Script Tools",subtitle:"Run whitelisted model and LoRA processing scripts on the backend. Tasks run in the background.",scriptLabel:"Script",argsTitle:"Arguments",addArg:"Add Argument",argKeyPlaceholder:"Argument name, e.g. model_org",argValuePlaceholder:"Argument value",removeArgAria:"Remove argument",submitting:"Submitting…",run:"Run Tool",msg:{submitted:"Tool task submitted",submitFail:"Failed to submit the task"}}},SA=[{value:"zh-CN",label:"简体中文"},{value:"en-US",label:"English"}],_0="zh-CN",w0="ui-configs";function E0(){try{const e=localStorage.getItem(w0),t=e?JSON.parse(e):{};return t&&typeof t=="object"?t:{}}catch{return{}}}function TA(e){return SA.some(t=>t.value===e)}function CA(){const e=E0().language;return TA(e)?e:_0}function AA(e){const t=E0();t.language=e,localStorage.setItem(w0,JSON.stringify(t))}const fr=o6({legacy:!1,locale:CA(),fallbackLocale:_0,messages:{"zh-CN":wA,"en-US":EA}});function mO(e){fr.global.locale.value=e,AA(e)}const OA={"zh-CN":y0,"en-US":Pm};function xA(e){return OA[e]??y0}class hs extends Error{constructor(t,n,r){super(t),this.status=n,this.response=r,this.name="ApiError"}status;response}async function LA(e,t={}){const{allowPending:n=!1,headers:r,...o}=t;let s;try{s=await fetch(e,{...o,headers:{...o.body?{"Content-Type":"application/json"}:{},...r}})}catch(i){throw new hs(i instanceof Error?i.message:fr.global.t("api.network"),"network")}let a;try{a=await s.json()}catch{throw new hs(fr.global.t("api.unparseable",{status:s.status}),"http")}if(!s.ok)throw new hs(a.message||fr.global.t("api.httpFail",{status:s.status}),"http",a);if(a.status!=="success"&&!(n&&a.status==="pending"))throw new hs(a.message||fr.global.t("api.fail"),a.status,a);return a}async function IA(e,t){const n=await LA(e,t);if(n.data==null)throw new hs(fr.global.t("api.missingData"),n.status,n);return n.data}const PA={getVersion:()=>IA("/api/version")},kA=cy("app",()=>{const e=re("");async function t(){try{e.value=(await PA.getVersion()).version}catch{e.value=""}}return{version:e,loadVersion:t}}),RA={class:"app-shell"},NA={class:"mobile-header"},MA=["aria-label"],FA=["aria-label"],DA=["aria-label"],$A={class:"sidebar-footer"},VA={class:"app-content"},BA=Ee({__name:"AppShell",setup(e){const t=_A(),{t:n}=ia(),r=re(!1),o=kA(),{version:s}=uy(o),a=P(()=>s.value?/(?:alpha|beta|rc)/i.test(s.value)?`v${s.value} · ${n("app.prerelease")}`:`v${s.value}`:"beta"),i=[{key:"training",to:"/training",icon:m4,match:["/training","/lora/","/dreambooth/"]},{key:"dataset",to:"/dataset",icon:y4,match:["/dataset","/tagger.html","/native-tageditor.html","/dataset-editor.html","/tageditor.html"]},{key:"tasks",to:"/tasks",icon:v4,match:["/tasks","/task.html","/tensorboard.html"]},{key:"settings",to:"/settings",icon:N4,match:["/settings","/other/"]}],l=P(()=>t.path);function c(u){return u.some(f=>l.value.startsWith(f))}return pt(()=>o.loadVersion()),(u,f)=>{const d=dn("el-icon"),p=dn("RouterLink"),g=dn("RouterView");return V(),ie("div",RA,[ce("header",NA,[ce("button",{class:"icon-button","aria-label":w(n)("nav.openNav"),onClick:f[0]||(f[0]=h=>r.value=!r.value)},[xe(d,null,{default:me(()=>[xe(w(C4))]),_:1})],8,MA),xe(p,{class:"mobile-brand",to:"/"},{default:me(()=>[Xa(st(w(n)("app.brand")),1)]),_:1})]),r.value?(V(),ie("button",{key:0,class:"sidebar-mask","aria-label":w(n)("nav.closeNav"),onClick:f[1]||(f[1]=h=>r.value=!1)},null,8,FA)):be("",!0),ce("aside",{class:ae(["sidebar",{"is-open":r.value}])},[xe(p,{class:"brand",to:"/",onClick:f[2]||(f[2]=h=>r.value=!1)},{default:me(()=>[f[5]||(f[5]=ce("span",{class:"brand-mark"},"N",-1)),ce("span",null,[ce("strong",null,st(w(n)("app.brand")),1),ce("small",null,st(a.value),1)])]),_:1}),ce("nav",{class:"navigation","aria-label":w(n)("nav.mainAria")},[(V(),ie(Qe,null,cs(i,h=>xe(p,{key:h.key,to:h.to,class:ae(["nav-link",{active:c(h.match)}]),onClick:f[3]||(f[3]=v=>r.value=!1)},{default:me(()=>[xe(d,null,{default:me(()=>[(V(),ye(vt(h.icon)))]),_:2},1024),ce("span",null,st(w(n)(`nav.${h.key}`)),1)]),_:2},1032,["to","class"])),64))],8,DA),ce("footer",$A,[xe(p,{to:"/help/guide.html",class:"nav-link help-link",onClick:f[4]||(f[4]=h=>r.value=!1)},{default:me(()=>[xe(d,null,{default:me(()=>[xe(w(P4))]),_:1}),ce("span",null,st(w(n)("nav.help")),1)]),_:1}),f[6]||(f[6]=ce("a",{href:"https://github.com/wochenlong/lora-scripts-next",target:"_blank",rel:"noreferrer",class:"github-link"},"GitHub",-1))])],2),ce("main",VA,[xe(g)])])}}}),HA=Ee({__name:"App",setup(e){const{locale:t}=ia(),n=P(()=>xA(t.value));return(r,o)=>{const s=dn("el-config-provider");return V(),ye(s,{locale:n.value},{default:me(()=>[xe(BA)]),_:1},8,["locale"])}}}),UA="modulepreload",jA=function(e){return"/"+e},Lp={},Zn=function(t,n,r){let o=Promise.resolve();if(n&&n.length>0){let l=function(c){return Promise.all(c.map(u=>Promise.resolve(u).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};document.getElementsByTagName("link");const a=document.querySelector("meta[property=csp-nonce]"),i=a?.nonce||a?.getAttribute("nonce");o=l(n.map(c=>{if(c=jA(c),c in Lp)return;Lp[c]=!0;const u=c.endsWith(".css"),f=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${f}`))return;const d=document.createElement("link");if(d.rel=u?"stylesheet":UA,u||(d.as="script"),d.crossOrigin="",d.href=c,i&&d.setAttribute("nonce",i),document.head.appendChild(d),u)return new Promise((p,g)=>{d.addEventListener("load",p),d.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${c}`)))})}))}function s(a){const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=a,window.dispatchEvent(i),!i.defaultPrevented)throw a}return o.then(a=>{for(const i of a||[])i.status==="rejected"&&s(i.reason);return t().catch(s)})},WA=()=>Zn(()=>import("./HomePage-DZc_8_wk.js"),__vite__mapDeps([0,1])),Ip=()=>Zn(()=>import("./IntegrationPage-CjVYiEx4.js"),[]),zA=()=>Zn(()=>import("./NotFoundPage-DZ0namWc.js"),[]),KA=()=>Zn(()=>import("./TasksPage-KdDODzEE.js"),__vite__mapDeps([2,3,4,5])),GA=()=>Zn(()=>import("./ToolsPage-DXtU4veE.js"),__vite__mapDeps([6,3])),Pp=()=>Zn(()=>import("./DatasetPage-5Q1m8WuT.js"),__vite__mapDeps([7,3,4,8])),YA=()=>Zn(()=>import("./TrainingWorkbenchPage-DotulMGq.js"),__vite__mapDeps([9,3,4,10,8,5])),Na=()=>Zn(()=>import("./SettingsContainerPage-kvrxRBXq.js"),__vite__mapDeps([11,3,1,4,10])),qA=()=>Zn(()=>import("./GuidePage-CKrZjddG.js"),[]),XA=()=>Zn(()=>import("./ParamsPage-qEBl9le4.js"),[]),rr=(e,t,n)=>({path:"/training",query:{model:e,engine:t,target:n}}),JA=[{path:"/",component:WA,meta:{titleKey:"app.brand"}},{path:"/training",component:YA,meta:{titleKey:"training.title"}},{path:"/dataset",redirect:"/dataset/tagger"},{path:"/dataset/editor",component:Pp,props:{tab:"editor"},meta:{titleKey:"dataset.title"}},{path:"/dataset/tagger",component:Pp,props:{tab:"tagger"},meta:{titleKey:"dataset.title"}},{path:"/tasks",component:KA,meta:{titleKey:"tasks.title"}},{path:"/settings",redirect:"/settings/ui"},{path:"/settings/ui",component:Na,props:{tab:"ui"},meta:{titleKey:"settings.title"}},{path:"/settings/engines",component:Na,props:{tab:"engines"},meta:{titleKey:"settings.title"}},{path:"/settings/about",component:Na,props:{tab:"about"},meta:{titleKey:"settings.title"}},{path:"/settings/changelog",component:Na,props:{tab:"changelog"},meta:{titleKey:"settings.title"}},{path:"/help/guide.html",component:qA,meta:{titleKey:"guide.title"}},{path:"/lora/index.html",redirect:"/training"},{path:"/lora/basic.html",redirect:()=>rr("sd15","kohya","lora")},{path:"/lora/master.html",redirect:()=>rr("sdxl","kohya","lora")},{path:"/lora/sdxl.html",redirect:()=>rr("sdxl","kohya","lora")},{path:"/lora/flux.html",redirect:()=>rr("flux","kohya","lora")},{path:"/lora/sd3.html",redirect:()=>rr("anima","kohya","lora")},{path:"/lora/anima-fast.html",redirect:()=>rr("anima","anima-fast","lora")},{path:"/lora/anima-fast",redirect:()=>rr("anima","anima-fast","lora")},{path:"/lora/anima-finetune.html",redirect:()=>rr("anima","kohya","finetune")},{path:"/dreambooth/index.html",redirect:()=>rr("sdxl","kohya","finetune")},{path:"/tagger.html",redirect:"/dataset/tagger"},{path:"/native-tageditor.html",redirect:"/dataset/editor"},{path:"/dataset-editor.html",redirect:"/dataset/editor"},{path:"/task.html",redirect:"/tasks"},{path:"/other/settings.html",redirect:"/settings/ui"},{path:"/other/about.html",redirect:"/settings/about"},{path:"/other/changelog.html",redirect:"/settings/changelog"},{path:"/tensorboard.html",component:Ip,props:{title:"TensorBoard",src:"/proxy/tensorboard/",configurable:!0},meta:{title:"TensorBoard"}},{path:"/lora/tools.html",component:GA,meta:{titleKey:"tools.title"}},{path:"/lora/params.html",component:XA,meta:{titleKey:"paramsPage.title"}},{path:"/tageditor.html",component:Ip,props:{titleKey:"integration.legacyTagEditor",src:"/proxy/tageditor/"},meta:{titleKey:"integration.legacyTagEditor"}},{path:"/:pathMatch(.*)*",component:zA,meta:{titleKey:"notFound.title"}}],S0=yA({history:J6(),routes:JA,scrollBehavior:()=>({top:0})});S0.afterEach(e=>{const t=typeof e.meta.titleKey=="string"?e.meta.titleKey:"app.brand";document.title=`${fr.global.t(t)} | ${fr.global.t("app.brand")}`});const T0=tm(HA);for(const e of[NS,hS,NT,ft,wg,HT,hT,pT,ZT])T0.component(e.name,e);T0.directive("loading",bu).use(ry()).use(S0).use(fr).mount("#app");export{bt as $,LA as A,Ln as B,nO as C,Jt as D,eO as E,Qe as F,IA as G,jl as H,tO as I,cy as J,fr as K,go as L,lO as M,iO as N,Ce as O,hO as P,Vv as Q,hA as R,ZA as S,_A as T,kA as U,CA as V,SA as W,w0 as X,mO as Y,sO as Z,Vo as _,ce as a,UT as a0,uO as a1,ft as a2,ET as a3,wg as a4,yg as a5,NS as a6,cS as a7,Ci as a8,iu as a9,gn as aA,th as aB,gr as aC,Cn as aD,Kf as aE,dS as aF,Ur as aG,aO as aH,Wo as aa,xw as ab,ge as ac,De as ad,Fw as ae,qs as af,fO as ag,Ym as ah,aa as ai,vt as aj,Zs as ak,tt as al,pr as am,rO as an,He as ao,Ie as ap,no as aq,xt as ar,Br as as,rt as at,he as au,nt as av,at as aw,po as ax,Tn as ay,DE as az,w as b,ie as c,Ee as d,xe as e,Xa as f,QA as g,P as h,dn as i,ye as j,Te as k,Lt as l,ae as m,yt as n,V as o,be as p,Wt as q,cs as r,re as s,st as t,ia as u,Ye as v,me as w,uy as x,pt as y,cO as z}; diff --git a/frontend/dist/assets/index-DNZgQ1o0.js b/frontend/dist/assets/index-tjV5EgBi.js similarity index 99% rename from frontend/dist/assets/index-DNZgQ1o0.js rename to frontend/dist/assets/index-tjV5EgBi.js index 64c49381..924bd16c 100644 --- a/frontend/dist/assets/index-DNZgQ1o0.js +++ b/frontend/dist/assets/index-tjV5EgBi.js @@ -1 +1 @@ -import{at as J,au as k,d as K,av as ve,o as m,c as M,O as L,e as P,w as N,n as Q,m as g,b as l,f as X,t as Y,p as b,ak as _,h as d,aw as C,ax as j,ay as ye,az as he,al as ee,aA as be,aB as te,a7 as Ce,y as Te,k as xe,aC as we,aD as Se,j as h,B as Be,a as Z,a2 as q,aj as Ee,F as Ne,q as ke,a1 as Me,L as $e,s as E,ag as G,aE as Ie,v as Oe,_ as Le,$ as De,aF as c,ad as F,am as se,ac as D,aG as O,ao as Pe,an as W,aq as Fe,ar as ne,aH as Ae}from"./index-BlvrX0Zy.js";const He=J({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"},showZero:{type:Boolean,default:!0},color:String,badgeStyle:{type:k([String,Object,Array,Boolean]),default:void 0},offset:{type:k(Array),default:()=>[0,0]},badgeClass:{type:String}});var ze=K({name:"ElBadge",__name:"badge",props:He,setup(e,{expose:s}){const t=e,n=ve("badge"),a=d(()=>t.isDot?"":C(t.value)&&C(t.max)?t.max[{backgroundColor:t.color,marginRight:j(-t.offset[0]),marginTop:j(t.offset[1])},t.badgeStyle??{}]);return s({content:a}),(i,o)=>(m(),M("div",{class:g(l(n).b())},[L(i.$slots,"default"),P(_,{name:`${l(n).namespace.value}-zoom-in-center`},{default:N(()=>[!e.hidden&&(a.value||e.isDot||i.$slots.content)?(m(),M("sup",{key:0,class:g([l(n).e("content"),l(n).em("content",e.type),l(n).is("fixed",!!i.$slots.default),l(n).is("dot",e.isDot),l(n).is("hide-zero",!e.showZero&&e.value===0),e.badgeClass]),style:Q(u.value)},[L(i.$slots,"content",{value:a.value},()=>[X(Y(a.value),1)])],6)):b("v-if",!0)]),_:3},8,["name"])],2))}}),Re=ze;const Ve=ye(Re),ae=["primary","success","info","warning","error"],oe=["top","top-left","top-right","bottom","bottom-left","bottom-right"],r=he({customClass:"",dangerouslyUseHTMLString:!1,duration:3e3,icon:void 0,id:"",message:"",onClose:void 0,showClose:!1,type:"info",plain:!1,offset:16,placement:void 0,zIndex:0,grouping:!1,repeatNum:1,appendTo:ee?document.body:void 0}),Ue=J({customClass:{type:String,default:r.customClass},dangerouslyUseHTMLString:{type:Boolean,default:r.dangerouslyUseHTMLString},duration:{type:Number,default:r.duration},icon:{type:be,default:r.icon},id:{type:String,default:r.id},message:{type:k([String,Object,Function]),default:r.message},onClose:{type:k(Function),default:r.onClose},showClose:{type:Boolean,default:r.showClose},type:{type:String,values:ae,default:r.type},plain:{type:Boolean,default:r.plain},offset:{type:Number,default:r.offset},placement:{type:String,values:oe,default:r.placement},zIndex:{type:Number,default:r.zIndex},grouping:{type:Boolean,default:r.grouping},repeatNum:{type:Number,default:r.repeatNum}}),je={destroy:()=>!0},p=te({}),Ze=e=>(p[e]||(p[e]=te([])),p[e]),qe=(e,s)=>{const t=p[s]||[],n=t.findIndex(i=>i.id===e),a=t[n];let u;return n>0&&(u=t[n-1]),{current:a,prev:u}},Ge=(e,s)=>{const{prev:t}=qe(e,s);return t?t.vm.exposed.bottom.value:0},We=(e,s,t)=>(p[t]||[]).findIndex(n=>n.id===e)>0?16:s,Je=["id"],Ke=["innerHTML"];var Qe=K({name:"ElMessage",__name:"message",props:Ue,emits:je,setup(e,{expose:s,emit:t}){const{Close:n}=Me,a=e,u=t,i=E(!1),{ns:o,zIndex:T}=Ce("message"),{currentZIndex:x,nextZIndex:ie}=T,$=E(),w=E(!1),A=E(0);let H;const re=d(()=>a.type?a.type==="error"?"danger":a.type:"info"),ue=d(()=>{const f=a.type;return{[o.bm("icon",f)]:f&&G[f]}}),z=d(()=>a.icon||G[a.type]||""),y=d(()=>a.placement||"top"),ce=d(()=>Ge(a.id,y.value)),R=d(()=>Math.max(We(a.id,a.offset,y.value)+ce.value,a.offset)),de=d(()=>A.value+R.value),pe=d(()=>y.value.includes("left")?o.is("left"):y.value.includes("right")?o.is("right"):o.is("center")),V=d(()=>y.value.startsWith("top")?"top":"bottom"),fe=d(()=>({[V.value]:`${R.value}px`,zIndex:x.value}));function I(){a.duration!==0&&({stop:H}=Ie(()=>{S()},a.duration))}function U(){H?.()}function S(){w.value=!1,Oe(()=>{i.value||(a.onClose?.(),u("destroy"))})}function me(f){Le(f)===De.esc&&S()}return Te(()=>{I(),ie(),w.value=!0}),xe(()=>a.repeatNum,()=>{U(),I()}),we(document,"keydown",me),Se($,()=>{A.value=$.value.getBoundingClientRect().height}),s({visible:w,bottom:de,close:S}),(f,B)=>(m(),h(_,{name:l(o).b("fade"),onBeforeEnter:B[0]||(B[0]=ge=>i.value=!0),onBeforeLeave:e.onClose,onAfterLeave:B[1]||(B[1]=ge=>f.$emit("destroy")),persisted:""},{default:N(()=>[Be(Z("div",{id:e.id,ref_key:"messageRef",ref:$,class:g([l(o).b(),{[l(o).m(e.type)]:e.type},l(o).is("closable",e.showClose),l(o).is("plain",e.plain),l(o).is("bottom",V.value==="bottom"),pe.value,e.customClass]),style:Q(fe.value),role:"alert",onMouseenter:U,onMouseleave:I},[e.repeatNum>1?(m(),h(l(Ve),{key:0,value:e.repeatNum,type:re.value,class:g(l(o).e("badge"))},null,8,["value","type","class"])):b("v-if",!0),z.value?(m(),h(l(q),{key:1,class:g([l(o).e("icon"),ue.value])},{default:N(()=>[(m(),h(Ee(z.value)))]),_:1},8,["class"])):b("v-if",!0),!e.dangerouslyUseHTMLString||f.$slots.default?(m(),M("p",{key:2,class:g(l(o).e("content"))},[L(f.$slots,"default",{},()=>[X(Y(e.message),1)])],2)):(m(),M(Ne,{key:3},[b(" Caution here, message could've been compromised, never use user's input as message "),Z("p",{class:g(l(o).e("content")),innerHTML:e.message},null,10,Ke)],2112)),e.showClose?(m(),h(l(q),{key:4,class:g(l(o).e("closeBtn")),onClick:ke(S,["stop"])},{default:N(()=>[P(l(n))]),_:1},8,["class"])):b("v-if",!0)],46,Je),[[$e,w.value]])]),_:3},8,["name","onBeforeLeave"]))}}),Xe=Qe;let Ye=1;const _e=e=>{if(!e.appendTo)e.appendTo=document.body;else if(F(e.appendTo)){let s=document.querySelector(e.appendTo);Fe(s)||(ne("ElMessage","the appendTo option is not an HTMLElement. Falling back to document.body."),s=document.body),e.appendTo=s}},et=e=>{!e.placement&&F(c.placement)&&c.placement&&(e.placement=c.placement),e.placement||(e.placement="top"),oe.includes(e.placement)||(ne("ElMessage",`Invalid placement: ${e.placement}. Falling back to 'top'.`),e.placement="top")},le=e=>{const s=!e||F(e)||se(e)||D(e)?{message:e}:e,t={...r,...s};return _e(t),et(t),O(c.grouping)&&!t.grouping&&(t.grouping=c.grouping),C(c.duration)&&t.duration===3e3&&(t.duration=c.duration),C(c.offset)&&t.offset===16&&(t.offset=c.offset),O(c.showClose)&&!t.showClose&&(t.showClose=c.showClose),O(c.plain)&&!t.plain&&(t.plain=c.plain),t},tt=e=>{const s=p[e.props.placement||"top"],t=s.indexOf(e);if(t===-1)return;s.splice(t,1);const{handler:n}=e;n.close()},st=({appendTo:e,...s},t)=>{const n=`message_${Ye++}`,a=s.onClose,u=document.createElement("div"),i={...s,id:n,onClose:()=>{a?.(),tt(x)},onDestroy:()=>{W(null,u)}},o=P(Xe,i,D(i.message)||se(i.message)?{default:D(i.message)?i.message:()=>i.message}:null);o.appContext=t||v._context,W(o,u),e.appendChild(u.firstElementChild);const T=o.component,x={id:n,vnode:o,vm:T,handler:{close:()=>{T.exposed.close()}},props:o.component.props};return x},v=(e={},s)=>{if(!ee)return{close:()=>{}};const t=le(e),n=Ze(t.placement||"top");if(t.grouping&&n.length){const u=n.find(({vnode:i})=>i.props?.message===t.message);if(u)return u.props.repeatNum+=1,u.props.type=t.type,u.handler}if(C(c.max)&&n.length>=c.max)return{close:()=>{}};const a=st(t,s);return n.push(a),a.handler};ae.forEach(e=>{v[e]=(s={},t)=>v({...le(s),type:e},t)});function nt(e){for(const s in p)if(Pe(p,s)){const t=[...p[s]];for(const n of t)(!e||e===n.props.type)&&n.handler.close()}}function at(e){p[e]&&[...p[e]].forEach(s=>s.handler.close())}v.closeAll=nt;v.closeAllByPlacement=at;v._context=null;const lt=Ae(v,"$message");export{lt as E}; +import{at as J,au as k,d as K,av as ve,o as m,c as M,O as L,e as P,w as N,n as Q,m as g,b as l,f as X,t as Y,p as b,ak as _,h as d,aw as C,ax as j,ay as ye,az as he,al as ee,aA as be,aB as te,a7 as Ce,y as Te,k as xe,aC as we,aD as Se,j as h,B as Be,a as Z,a2 as q,aj as Ee,F as Ne,q as ke,a1 as Me,L as $e,s as E,ag as G,aE as Ie,v as Oe,_ as Le,$ as De,aF as c,ad as F,am as se,ac as D,aG as O,ao as Pe,an as W,aq as Fe,ar as ne,aH as Ae}from"./index-jfqf0I3j.js";const He=J({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"},showZero:{type:Boolean,default:!0},color:String,badgeStyle:{type:k([String,Object,Array,Boolean]),default:void 0},offset:{type:k(Array),default:()=>[0,0]},badgeClass:{type:String}});var ze=K({name:"ElBadge",__name:"badge",props:He,setup(e,{expose:s}){const t=e,n=ve("badge"),a=d(()=>t.isDot?"":C(t.value)&&C(t.max)?t.max[{backgroundColor:t.color,marginRight:j(-t.offset[0]),marginTop:j(t.offset[1])},t.badgeStyle??{}]);return s({content:a}),(i,o)=>(m(),M("div",{class:g(l(n).b())},[L(i.$slots,"default"),P(_,{name:`${l(n).namespace.value}-zoom-in-center`},{default:N(()=>[!e.hidden&&(a.value||e.isDot||i.$slots.content)?(m(),M("sup",{key:0,class:g([l(n).e("content"),l(n).em("content",e.type),l(n).is("fixed",!!i.$slots.default),l(n).is("dot",e.isDot),l(n).is("hide-zero",!e.showZero&&e.value===0),e.badgeClass]),style:Q(u.value)},[L(i.$slots,"content",{value:a.value},()=>[X(Y(a.value),1)])],6)):b("v-if",!0)]),_:3},8,["name"])],2))}}),Re=ze;const Ve=ye(Re),ae=["primary","success","info","warning","error"],oe=["top","top-left","top-right","bottom","bottom-left","bottom-right"],r=he({customClass:"",dangerouslyUseHTMLString:!1,duration:3e3,icon:void 0,id:"",message:"",onClose:void 0,showClose:!1,type:"info",plain:!1,offset:16,placement:void 0,zIndex:0,grouping:!1,repeatNum:1,appendTo:ee?document.body:void 0}),Ue=J({customClass:{type:String,default:r.customClass},dangerouslyUseHTMLString:{type:Boolean,default:r.dangerouslyUseHTMLString},duration:{type:Number,default:r.duration},icon:{type:be,default:r.icon},id:{type:String,default:r.id},message:{type:k([String,Object,Function]),default:r.message},onClose:{type:k(Function),default:r.onClose},showClose:{type:Boolean,default:r.showClose},type:{type:String,values:ae,default:r.type},plain:{type:Boolean,default:r.plain},offset:{type:Number,default:r.offset},placement:{type:String,values:oe,default:r.placement},zIndex:{type:Number,default:r.zIndex},grouping:{type:Boolean,default:r.grouping},repeatNum:{type:Number,default:r.repeatNum}}),je={destroy:()=>!0},p=te({}),Ze=e=>(p[e]||(p[e]=te([])),p[e]),qe=(e,s)=>{const t=p[s]||[],n=t.findIndex(i=>i.id===e),a=t[n];let u;return n>0&&(u=t[n-1]),{current:a,prev:u}},Ge=(e,s)=>{const{prev:t}=qe(e,s);return t?t.vm.exposed.bottom.value:0},We=(e,s,t)=>(p[t]||[]).findIndex(n=>n.id===e)>0?16:s,Je=["id"],Ke=["innerHTML"];var Qe=K({name:"ElMessage",__name:"message",props:Ue,emits:je,setup(e,{expose:s,emit:t}){const{Close:n}=Me,a=e,u=t,i=E(!1),{ns:o,zIndex:T}=Ce("message"),{currentZIndex:x,nextZIndex:ie}=T,$=E(),w=E(!1),A=E(0);let H;const re=d(()=>a.type?a.type==="error"?"danger":a.type:"info"),ue=d(()=>{const f=a.type;return{[o.bm("icon",f)]:f&&G[f]}}),z=d(()=>a.icon||G[a.type]||""),y=d(()=>a.placement||"top"),ce=d(()=>Ge(a.id,y.value)),R=d(()=>Math.max(We(a.id,a.offset,y.value)+ce.value,a.offset)),de=d(()=>A.value+R.value),pe=d(()=>y.value.includes("left")?o.is("left"):y.value.includes("right")?o.is("right"):o.is("center")),V=d(()=>y.value.startsWith("top")?"top":"bottom"),fe=d(()=>({[V.value]:`${R.value}px`,zIndex:x.value}));function I(){a.duration!==0&&({stop:H}=Ie(()=>{S()},a.duration))}function U(){H?.()}function S(){w.value=!1,Oe(()=>{i.value||(a.onClose?.(),u("destroy"))})}function me(f){Le(f)===De.esc&&S()}return Te(()=>{I(),ie(),w.value=!0}),xe(()=>a.repeatNum,()=>{U(),I()}),we(document,"keydown",me),Se($,()=>{A.value=$.value.getBoundingClientRect().height}),s({visible:w,bottom:de,close:S}),(f,B)=>(m(),h(_,{name:l(o).b("fade"),onBeforeEnter:B[0]||(B[0]=ge=>i.value=!0),onBeforeLeave:e.onClose,onAfterLeave:B[1]||(B[1]=ge=>f.$emit("destroy")),persisted:""},{default:N(()=>[Be(Z("div",{id:e.id,ref_key:"messageRef",ref:$,class:g([l(o).b(),{[l(o).m(e.type)]:e.type},l(o).is("closable",e.showClose),l(o).is("plain",e.plain),l(o).is("bottom",V.value==="bottom"),pe.value,e.customClass]),style:Q(fe.value),role:"alert",onMouseenter:U,onMouseleave:I},[e.repeatNum>1?(m(),h(l(Ve),{key:0,value:e.repeatNum,type:re.value,class:g(l(o).e("badge"))},null,8,["value","type","class"])):b("v-if",!0),z.value?(m(),h(l(q),{key:1,class:g([l(o).e("icon"),ue.value])},{default:N(()=>[(m(),h(Ee(z.value)))]),_:1},8,["class"])):b("v-if",!0),!e.dangerouslyUseHTMLString||f.$slots.default?(m(),M("p",{key:2,class:g(l(o).e("content"))},[L(f.$slots,"default",{},()=>[X(Y(e.message),1)])],2)):(m(),M(Ne,{key:3},[b(" Caution here, message could've been compromised, never use user's input as message "),Z("p",{class:g(l(o).e("content")),innerHTML:e.message},null,10,Ke)],2112)),e.showClose?(m(),h(l(q),{key:4,class:g(l(o).e("closeBtn")),onClick:ke(S,["stop"])},{default:N(()=>[P(l(n))]),_:1},8,["class"])):b("v-if",!0)],46,Je),[[$e,w.value]])]),_:3},8,["name","onBeforeLeave"]))}}),Xe=Qe;let Ye=1;const _e=e=>{if(!e.appendTo)e.appendTo=document.body;else if(F(e.appendTo)){let s=document.querySelector(e.appendTo);Fe(s)||(ne("ElMessage","the appendTo option is not an HTMLElement. Falling back to document.body."),s=document.body),e.appendTo=s}},et=e=>{!e.placement&&F(c.placement)&&c.placement&&(e.placement=c.placement),e.placement||(e.placement="top"),oe.includes(e.placement)||(ne("ElMessage",`Invalid placement: ${e.placement}. Falling back to 'top'.`),e.placement="top")},le=e=>{const s=!e||F(e)||se(e)||D(e)?{message:e}:e,t={...r,...s};return _e(t),et(t),O(c.grouping)&&!t.grouping&&(t.grouping=c.grouping),C(c.duration)&&t.duration===3e3&&(t.duration=c.duration),C(c.offset)&&t.offset===16&&(t.offset=c.offset),O(c.showClose)&&!t.showClose&&(t.showClose=c.showClose),O(c.plain)&&!t.plain&&(t.plain=c.plain),t},tt=e=>{const s=p[e.props.placement||"top"],t=s.indexOf(e);if(t===-1)return;s.splice(t,1);const{handler:n}=e;n.close()},st=({appendTo:e,...s},t)=>{const n=`message_${Ye++}`,a=s.onClose,u=document.createElement("div"),i={...s,id:n,onClose:()=>{a?.(),tt(x)},onDestroy:()=>{W(null,u)}},o=P(Xe,i,D(i.message)||se(i.message)?{default:D(i.message)?i.message:()=>i.message}:null);o.appContext=t||v._context,W(o,u),e.appendChild(u.firstElementChild);const T=o.component,x={id:n,vnode:o,vm:T,handler:{close:()=>{T.exposed.close()}},props:o.component.props};return x},v=(e={},s)=>{if(!ee)return{close:()=>{}};const t=le(e),n=Ze(t.placement||"top");if(t.grouping&&n.length){const u=n.find(({vnode:i})=>i.props?.message===t.message);if(u)return u.props.repeatNum+=1,u.props.type=t.type,u.handler}if(C(c.max)&&n.length>=c.max)return{close:()=>{}};const a=st(t,s);return n.push(a),a.handler};ae.forEach(e=>{v[e]=(s={},t)=>v({...le(s),type:e},t)});function nt(e){for(const s in p)if(Pe(p,s)){const t=[...p[s]];for(const n of t)(!e||e===n.props.type)&&n.handler.close()}}function at(e){p[e]&&[...p[e]].forEach(s=>s.handler.close())}v.closeAll=nt;v.closeAllByPlacement=at;v._context=null;const lt=Ae(v,"$message");export{lt as E}; diff --git a/frontend/dist/assets/prefs-L1LFxgf4.js b/frontend/dist/assets/prefs-DCZCUQjC.js similarity index 53% rename from frontend/dist/assets/prefs-L1LFxgf4.js rename to frontend/dist/assets/prefs-DCZCUQjC.js index 19af8635..7ef6e678 100644 --- a/frontend/dist/assets/prefs-L1LFxgf4.js +++ b/frontend/dist/assets/prefs-DCZCUQjC.js @@ -1 +1 @@ -import{G as n}from"./index-BlvrX0Zy.js";const r={status:()=>n("/api/plugins/anima-lora/status"),install:()=>n("/api/plugins/anima-lora/install",{method:"POST",body:JSON.stringify({dry_run:!1})}),repair:()=>n("/api/plugins/anima-lora/repair",{method:"POST",body:JSON.stringify({dry_run:!1})})};function f(a){return a==="ready"?"ready":a==="installing"?"installing":a==="auditing"?"auditing":a==="broken"?"broken":a==="disabled"?"disabled":a==="installed_unverified"?"installed_unverified":a==="not_installed"?"not_installed":"unknown"}function i(a){const e=a.runtime||{};return{id:"anima-fast",state:f(a.state),featureEnabled:a.feature_enabled!==!1,message:a.message,facts:a.facts,runtime:{python:e.python,environmentPath:e.environment_path,version:e.version,cuda:e.cuda,animaRoot:e.anima_root,externalRuntimeExists:e.external_runtime_exists},raw:a}}function s(a){return{alreadyReady:a.already_ready,taskId:a.task_id,logStream:a.log_stream||a.log_stream_url,progressStream:a.progress_stream||a.progress_stream_url,status:a.status?i(a.status):void 0}}const p={async status(a){return a==="kohya"?{id:"kohya",state:"ready",featureEnabled:!0}:a==="musubi"?{id:"musubi",state:"coming_soon",featureEnabled:!1}:a==="anima-fast"?i(await r.status()):{id:a,state:"unknown",featureEnabled:!1}},async list(){const a=["kohya","anima-fast","musubi"];return Promise.all(a.map(e=>this.status(e)))},async install(a){if(a!=="anima-fast")throw new Error(`Install is not supported for engine: ${a}`);return s(await r.install())},async repair(a){if(a!=="anima-fast")throw new Error(`Repair is not supported for engine: ${a}`);return s(await r.repair())},async uninstall(a){if(a!=="anima-fast")throw new Error(`Uninstall is not supported for engine: ${a}`);const e=await n("/api/plugins/anima-lora/uninstall",{method:"POST",body:"{}"});return e.status?i(e.status):{id:"anima-fast",state:"not_installed",featureEnabled:!0}}},o="nt.training.enginePrefs";function l(){try{const a=JSON.parse(localStorage.getItem(o)||"{}");return!a||typeof a!="object"?{rememberLast:!0}:{rememberLast:a.rememberLast!==!1,lastByModel:a.lastByModel&&typeof a.lastByModel=="object"?a.lastByModel:{}}}catch{return{rememberLast:!0}}}function m(a){localStorage.setItem(o,JSON.stringify(a))}function y(a,e,u){const t=l();t.rememberLast&&(t.lastByModel={...t.lastByModel||{},[a]:{engine:e,target:u}},m(t))}function c(a){const e=l();if(e.rememberLast)return e.lastByModel?.[a]}export{l as a,p as e,c as l,y as r,m as w}; +import{G as n}from"./index-jfqf0I3j.js";const r={status:()=>n("/api/plugins/anima-lora/status"),install:()=>n("/api/plugins/anima-lora/install",{method:"POST",body:JSON.stringify({dry_run:!1})}),repair:()=>n("/api/plugins/anima-lora/repair",{method:"POST",body:JSON.stringify({dry_run:!1})})};function f(a){return a==="ready"?"ready":a==="installing"?"installing":a==="auditing"?"auditing":a==="broken"?"broken":a==="disabled"?"disabled":a==="installed_unverified"?"installed_unverified":a==="not_installed"?"not_installed":"unknown"}function s(a){const e=a.runtime||{};return{id:"anima-fast",state:f(a.state),featureEnabled:a.feature_enabled!==!1,message:a.message,facts:a.facts,runtime:{python:e.python,environmentPath:e.environment_path,version:e.version,cuda:e.cuda,animaRoot:e.anima_root,externalRuntimeExists:e.external_runtime_exists},raw:a}}function l(a){return{alreadyReady:a.already_ready,taskId:a.task_id,logStream:a.log_stream||a.log_stream_url,progressStream:a.progress_stream||a.progress_stream_url,status:a.status?s(a.status):void 0}}const p={async status(a){return a==="kohya"?{id:"kohya",state:"ready",featureEnabled:!0}:a==="musubi"?{id:"musubi",state:"coming_soon",featureEnabled:!1}:a==="anima-fast"?s(await r.status()):{id:a,state:"unknown",featureEnabled:!1}},async list(){const a=["kohya","anima-fast","musubi"];return Promise.all(a.map(e=>this.status(e)))},async install(a){if(a!=="anima-fast")throw new Error(`Install is not supported for engine: ${a}`);return l(await r.install())},async repair(a){if(a!=="anima-fast")throw new Error(`Repair is not supported for engine: ${a}`);return l(await r.repair())},async uninstall(a){if(a!=="anima-fast")throw new Error(`Uninstall is not supported for engine: ${a}`);const e=await n("/api/plugins/anima-lora/uninstall",{method:"POST",body:"{}"});return e.status?s(e.status):{id:"anima-fast",state:"not_installed",featureEnabled:!0}}},u="nt.training.enginePrefs";function i(){try{const a=JSON.parse(localStorage.getItem(u)||"{}");return!a||typeof a!="object"?{rememberLast:!0}:{rememberLast:a.rememberLast!==!1,lastByModel:a.lastByModel&&typeof a.lastByModel=="object"?a.lastByModel:{},last:a.last&&typeof a.last=="object"?a.last:void 0}}catch{return{rememberLast:!0}}}function m(a){localStorage.setItem(u,JSON.stringify(a))}function c(a,e,o){const t=i();t.rememberLast&&(t.lastByModel={...t.lastByModel||{},[a]:{engine:e,target:o}},t.last={model:a,engine:e,target:o},m(t))}function y(a){const e=i();if(e.rememberLast)return e.lastByModel?.[a]}function g(){const a=i();if(a.rememberLast)return a.last}export{y as a,i as b,p as e,g as l,c as r,m as w}; diff --git a/frontend/dist/assets/schemas-BVh9ipN3.js b/frontend/dist/assets/schemas-D72H6mWJ.js similarity index 83% rename from frontend/dist/assets/schemas-BVh9ipN3.js rename to frontend/dist/assets/schemas-D72H6mWJ.js index 88576160..ff92d7c2 100644 --- a/frontend/dist/assets/schemas-BVh9ipN3.js +++ b/frontend/dist/assets/schemas-D72H6mWJ.js @@ -1 +1 @@ -import{G as s,A as e}from"./index-BlvrX0Zy.js";const p={hashes:()=>s("/api/schemas/hashes"),all:()=>s("/api/schemas/all"),async graphicCards(){const a=await e("/api/graphic_cards",{allowPending:!0});return a.status==="success"?a.data?.cards??[]:[]},pickFile:a=>s(`/api/pick_file?picker_type=${encodeURIComponent(a)}`),files:a=>s(`/api/get_files?pick_type=${encodeURIComponent(a)}`)};export{p as s}; +import{G as s,A as e}from"./index-jfqf0I3j.js";const p={hashes:()=>s("/api/schemas/hashes"),all:()=>s("/api/schemas/all"),async graphicCards(){const a=await e("/api/graphic_cards",{allowPending:!0});return a.status==="success"?a.data?.cards??[]:[]},pickFile:a=>s(`/api/pick_file?picker_type=${encodeURIComponent(a)}`),files:a=>s(`/api/get_files?pick_type=${encodeURIComponent(a)}`)};export{p as s}; diff --git a/frontend/dist/assets/tasks-CTZb2r1_.js b/frontend/dist/assets/tasks-C7eKb6HN.js similarity index 86% rename from frontend/dist/assets/tasks-CTZb2r1_.js rename to frontend/dist/assets/tasks-C7eKb6HN.js index 859c6a00..848dbd21 100644 --- a/frontend/dist/assets/tasks-CTZb2r1_.js +++ b/frontend/dist/assets/tasks-C7eKb6HN.js @@ -1 +1 @@ -import{G as s,A as p,J as f,s as n,h as g,K as k}from"./index-BlvrX0Zy.js";const d=a=>`/api/train/log/stream/${encodeURIComponent(a)}`,c={list:async()=>(await s("/api/tasks")).tasks,terminate:a=>p(`/api/tasks/terminate/${encodeURIComponent(a)}`),previews:a=>s(`/api/tasks/${encodeURIComponent(a)}/previews`),metrics:a=>s(`/api/tasks/${encodeURIComponent(a)}/metrics`),logTail:(a,e=240)=>s(`/api/train/log/tail/${encodeURIComponent(a)}?limit=${e}`)},y=f("tasks",()=>{const a=n([]),e=n(!1),i=n(""),o=n(""),u=g(()=>a.value.filter(t=>t.status==="RUNNING"));async function r(t={}){t.silent||(e.value=!0);try{a.value=await c.list(),i.value=""}catch(l){i.value=l instanceof Error?l.message:k.global.t("tasks.listLoadFail")}finally{e.value=!1}}async function m(t){o.value=t;try{await c.terminate(t),await r({silent:!0})}finally{o.value=""}}return{tasks:a,runningTasks:u,loading:e,error:i,terminatingId:o,refresh:r,terminate:m}});export{c as a,d as t,y as u}; +import{G as s,A as p,J as f,s as n,h as g,K as k}from"./index-jfqf0I3j.js";const d=a=>`/api/train/log/stream/${encodeURIComponent(a)}`,c={list:async()=>(await s("/api/tasks")).tasks,terminate:a=>p(`/api/tasks/terminate/${encodeURIComponent(a)}`),previews:a=>s(`/api/tasks/${encodeURIComponent(a)}/previews`),metrics:a=>s(`/api/tasks/${encodeURIComponent(a)}/metrics`),logTail:(a,e=240)=>s(`/api/train/log/tail/${encodeURIComponent(a)}?limit=${e}`)},y=f("tasks",()=>{const a=n([]),e=n(!1),i=n(""),o=n(""),u=g(()=>a.value.filter(t=>t.status==="RUNNING"));async function r(t={}){t.silent||(e.value=!0);try{a.value=await c.list(),i.value=""}catch(l){i.value=l instanceof Error?l.message:k.global.t("tasks.listLoadFail")}finally{e.value=!1}}async function m(t){o.value=t;try{await c.terminate(t),await r({silent:!0})}finally{o.value=""}}return{tasks:a,runningTasks:u,loading:e,error:i,terminatingId:o,refresh:r,terminate:m}});export{c as a,d as t,y as u}; diff --git a/frontend/dist/index.html b/frontend/dist/index.html index 8a8cb466..c5ff6795 100644 --- a/frontend/dist/index.html +++ b/frontend/dist/index.html @@ -11,10 +11,10 @@ const systemDark = window.matchMedia?.("(prefers-color-scheme: dark)").matches document.documentElement.classList.toggle("dark", mode === "dark" || (mode !== "light" && systemDark)) - - + + -
+
diff --git a/frontend/src/components/SectionToc.test.ts b/frontend/src/components/SectionToc.test.ts index 5ade7acd..528bb935 100644 --- a/frontend/src/components/SectionToc.test.ts +++ b/frontend/src/components/SectionToc.test.ts @@ -1,6 +1,6 @@ // @vitest-environment jsdom import { mount } from "@vue/test-utils" -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest" +import { describe, expect, it, vi } from "vitest" import SectionToc from "./SectionToc.vue" import { i18n } from "../i18n" @@ -9,42 +9,53 @@ const sections = [ { id: "network", title: "网络设置" }, ] -describe("SectionToc", () => { - beforeEach(() => { - vi.useFakeTimers() - }) - afterEach(() => { - vi.useRealTimers() - }) +function mountToc(props: { sections?: { id: string; title: string }[] } = {}) { + return mount(SectionToc, { props: { sections: sections, ...props }, global: { plugins: [i18n] } }) +} - it("starts collapsed and expands on seam click", async () => { - const wrapper = mount(SectionToc, { props: { sections }, global: { plugins: [i18n] } }) +describe("SectionToc", () => { + it("opens on hover and stays open until the pointer leaves", async () => { + const wrapper = mountToc() expect(wrapper.classes()).not.toContain("open") - await wrapper.get(".toc-seam").trigger("click") + await wrapper.trigger("mouseenter") expect(wrapper.classes()).toContain("open") expect(wrapper.text()).toContain("基础参数") expect(wrapper.text()).toContain("网络设置") + await wrapper.trigger("mouseleave") + expect(wrapper.classes()).not.toContain("open") + }) + + it("pins open on seam click and ignores mouseleave until toggled again", async () => { + const wrapper = mountToc() + await wrapper.get(".toc-seam").trigger("click") + expect(wrapper.classes()).toContain("open") + await wrapper.trigger("mouseenter") + await wrapper.trigger("mouseleave") + expect(wrapper.classes()).toContain("open") await wrapper.get(".toc-panel header button").trigger("click") expect(wrapper.classes()).not.toContain("open") }) - it("navigates without closing immediately, then auto-collapses after idle", async () => { + it("navigates on item click without closing a pinned panel", async () => { const target = document.createElement("div") target.id = "sec-network" const scrollIntoView = vi.fn() target.scrollIntoView = scrollIntoView document.body.appendChild(target) - const wrapper = mount(SectionToc, { props: { sections }, global: { plugins: [i18n] } }) + const wrapper = mountToc() await wrapper.get(".toc-seam").trigger("click") const items = wrapper.findAll(".toc-item") await items[1].trigger("click") expect(scrollIntoView).toHaveBeenCalledWith({ behavior: "smooth", block: "start" }) expect(wrapper.classes()).toContain("open") - await vi.advanceTimersByTimeAsync(3499) - expect(wrapper.classes()).toContain("open") - await vi.advanceTimersByTimeAsync(1) - await wrapper.vm.$nextTick() - expect(wrapper.classes()).not.toContain("open") target.remove() }) + + it("stays closed and disabled when there are no sections yet", async () => { + const wrapper = mountToc({ sections: [] }) + expect(wrapper.classes()).toContain("empty") + expect(wrapper.get(".toc-seam").attributes("disabled")).toBeDefined() + await wrapper.trigger("mouseenter") + expect(wrapper.classes()).not.toContain("open") + }) }) diff --git a/frontend/src/components/SectionToc.vue b/frontend/src/components/SectionToc.vue index 3409f9b5..253a5443 100644 --- a/frontend/src/components/SectionToc.vue +++ b/frontend/src/components/SectionToc.vue @@ -1,59 +1,34 @@ @@ -88,8 +62,10 @@ onBeforeUnmount(() => {