index-CYCSs_Es.js 256 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. (function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))n(o);new MutationObserver(o=>{for(const l of o)if(l.type==="childList")for(const c of l.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&n(c)}).observe(document,{childList:!0,subtree:!0});function s(o){const l={};return o.integrity&&(l.integrity=o.integrity),o.referrerPolicy&&(l.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?l.credentials="include":o.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function n(o){if(o.ep)return;o.ep=!0;const l=s(o);fetch(o.href,l)}})();/**
  2. * @vue/shared v3.5.43
  3. * (c) 2018-present Yuxi (Evan) You and Vue contributors
  4. * @license MIT
  5. **/function An(t){const e=Object.create(null);for(const s of t.split(","))e[s]=1;return s=>s in e}const Mt={},Pe=[],he=()=>{},No=()=>!1,Ns=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&(t.charCodeAt(2)>122||t.charCodeAt(2)<97),zs=t=>t.startsWith("onUpdate:"),Bt=Object.assign,On=(t,e)=>{const s=t.indexOf(e);s>-1&&t.splice(s,1)},nr=Object.prototype.hasOwnProperty,$t=(t,e)=>nr.call(t,e),dt=Array.isArray,Me=t=>ms(t)==="[object Map]",Ss=t=>ms(t)==="[object Set]",to=t=>ms(t)==="[object Date]",ut=t=>typeof t=="function",Ot=t=>typeof t=="string",me=t=>typeof t=="symbol",Ft=t=>t!==null&&typeof t=="object",zo=t=>(Ft(t)||ut(t))&&ut(t.then)&&ut(t.catch),Wo=Object.prototype.toString,ms=t=>Wo.call(t),or=t=>ms(t).slice(8,-1),Uo=t=>ms(t)==="[object Object]",jn=t=>Ot(t)&&t!=="NaN"&&t[0]!=="-"&&""+parseInt(t,10)===t,ss=An(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Ws=t=>{const e=Object.create(null);return(s=>e[s]||(e[s]=t(s)))},lr=/-\w/g,Gt=Ws(t=>t.replace(lr,e=>e.slice(1).toUpperCase())),rr=/\B([A-Z])/g,Ne=Ws(t=>t.replace(rr,"-$1").toLowerCase()),Us=Ws(t=>t.charAt(0).toUpperCase()+t.slice(1)),en=Ws(t=>t?`on${Us(t)}`:""),fe=(t,e)=>!Object.is(t,e),Fs=(t,...e)=>{for(let s=0;s<t.length;s++)t[s](...e)},Vo=(t,e,s,n=!1)=>{Object.defineProperty(t,e,{configurable:!0,enumerable:!1,writable:n,value:s})},Hn=t=>{const e=parseFloat(t);return isNaN(e)?t:e};let eo;const Vs=()=>eo||(eo=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Pt(t){if(dt(t)){const e={};for(let s=0;s<t.length;s++){const n=t[s],o=Ot(n)?dr(n):Pt(n);if(o)for(const l in o)e[l]=o[l]}return e}else if(Ot(t)||Ft(t))return t}const ir=/;(?![^(]*\))/g,ar=/:([^]+)/,cr=/"(?:[^"\\]|\\[^])*"|'(?:[^'\\]|\\[^])*'|\\[^]|\/\*[^]*?\*\//g;function dr(t){const e={};return t.replace(cr,s=>s.startsWith("/*")?"":s).split(ir).forEach(s=>{if(s){const n=s.split(ar);n.length>1&&(e[n[0].trim()]=n[1].trim())}}),e}function ee(t){let e="";if(Ot(t))e=t;else if(dt(t))for(let s=0;s<t.length;s++){const n=ee(t[s]);n&&(e+=n+" ")}else if(Ft(t))for(const s in t)t[s]&&(e+=s+" ");return e.trim()}const ur="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",pr=An(ur);function Ko(t){return!!t||t===""}function fr(t,e,s){if(t.length!==e.length)return!1;let n=!0;for(let o=0;n&&o<t.length;o++)n=Ks(t[o],e[o],s);return n}function so(t,e,s){if(t.size!==e.size)return!1;const n=Array.from(e),o=new Uint8Array(n.length);for(const l of t){let c=-1;for(let a=0;a<n.length;a++)if(!o[a]&&Ks(l,n[a],s)){c=a;break}if(c<0)return!1;o[c]=1}return!0}function hr(t,e,s){let n=Me(t),o=Me(e);if(n||o||(n=Ss(t),o=Ss(e),n||o))return n&&o?so(t,e,s):!1;const l=Object.keys(t).length,c=Object.keys(e).length;if(l!==c)return!1;for(const a in t){const d=t.hasOwnProperty(a),g=e.hasOwnProperty(a);if(d&&!g||!d&&g||!Ks(t[a],e[a],s))return!1}return String(t)===String(e)}function no(t,e,s,n){s||(s=[new Map,new Map]);const[o,l]=s;if(o.has(t)||l.has(e))return o.get(t)===e&&l.get(e)===t;o.set(t,e),l.set(e,t);const c=n(t,e,s);return o.delete(t),l.delete(e),c}function Ks(t,e,s){if(t===e)return!0;let n=to(t),o=to(e);return n||o?n&&o?t.getTime()===e.getTime():!1:(n=me(t),o=me(e),n||o?t===e:(n=dt(t),o=dt(e),n||o?n&&o?no(t,e,s,fr):!1:(n=Ft(t),o=Ft(e),n||o?!n||!o?!1:no(t,e,s,hr):String(t)===String(e))))}const Go=t=>!!(t&&t.__v_isRef===!0),p=t=>Ot(t)?t:t==null?"":dt(t)||Ft(t)&&(t.toString===Wo||!ut(t.toString))?Go(t)?p(t.value):JSON.stringify(t,Yo,2):String(t),Yo=(t,e)=>Go(e)?Yo(t,e.value):Me(e)?{[`Map(${e.size})`]:[...e.entries()].reduce((s,[n,o],l)=>(s[sn(n,l)+" =>"]=o,s),{})}:Ss(e)?{[`Set(${e.size})`]:[...e.values()].map(s=>sn(s))}:me(e)?sn(e):Ft(e)&&!dt(e)&&!Uo(e)?String(e):e,sn=(t,e="")=>{var s;return me(t)?`Symbol(${(s=t.description)!=null?s:e})`:t};/**
  6. * @vue/reactivity v3.5.43
  7. * (c) 2018-present Yuxi (Evan) You and Vue contributors
  8. * @license MIT
  9. **/let Lt;class mr{constructor(e=!1){this.detached=e,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!e&&Lt&&(Lt.active?(this.parent=Lt,this.index=(Lt.scopes||(Lt.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let e,s;if(this.scopes){const n=this.scopes.slice();for(e=0,s=n.length;e<s;e++)n[e].pause()}for(e=0,s=this.effects.length;e<s;e++)this.effects[e].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let e,s;if(this.scopes){const o=this.scopes.slice();for(e=0,s=o.length;e<s;e++)o[e].resume()}const n=this.effects.slice();for(e=0,s=n.length;e<s;e++)n[e].resume()}}run(e){if(this._active){const s=Lt;try{return Lt=this,e()}finally{Lt=s}}}on(){++this._on===1&&(this.prevScope=Lt,Lt=this)}off(){if(this._on>0&&--this._on===0){if(Lt===this)Lt=this.prevScope;else{let e=Lt;for(;e;){if(e.prevScope===this){e.prevScope=this.prevScope;break}e=e.prevScope}}this.prevScope=void 0}}stop(e){if(this._active){this._active=!1;let s,n;for(s=0,n=this.effects.length;s<n;s++)this.effects[s].stop();for(this.effects.length=0,s=0,n=this.cleanups.length;s<n;s++)this.cleanups[s]();if(this.cleanups.length=0,this.scopes){const o=this.scopes.slice();for(s=0,n=o.length;s<n;s++)o[s].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!e){const o=this.parent.scopes.pop();o&&o!==this&&(this.parent.scopes[this.index]=o,o.index=this.index)}this.parent=void 0}}}function gr(){return Lt}let St;const nn=new WeakSet;class Jo{constructor(e){this.fn=e,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,Lt&&(Lt.active?Lt.effects.push(this):this.flags&=-2)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,nn.has(this)&&(nn.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||Zo(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,oo(this),Qo(this);const e=St,s=oe;St=this,oe=!0;try{return this.fn()}finally{tl(this),St=e,oe=s,this.flags&=-3}}stop(){if(this.flags&1){for(let e=this.deps;e;e=e.nextDep)Pn(e);this.deps=this.depsTail=void 0,oo(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?nn.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){vn(this)&&this.run()}get dirty(){return vn(this)}}let Xo=0,ns,os;function Zo(t,e=!1){if(t.flags|=8,e){t.next=os,os=t;return}t.next=ns,ns=t}function qn(){Xo++}function Ln(){if(--Xo>0)return;if(os){let e=os;for(os=void 0;e;){const s=e.next;e.next=void 0,e.flags&=-9,e=s}}let t;for(;ns;){let e=ns;for(ns=void 0;e;){const s=e.next;if(e.next=void 0,e.flags&=-9,e.flags&1)try{e.trigger()}catch(n){t||(t=n)}e=s}}if(t)throw t}function Qo(t){for(let e=t.deps;e;e=e.nextDep)e.version=-1,e.prevActiveLink=e.dep.activeLink,e.dep.activeLink=e}function tl(t){let e,s=t.depsTail,n=s;for(;n;){const o=n.prevDep;n.version===-1?(n===s&&(s=o),Pn(n),_r(n)):e=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=o}t.deps=e,t.depsTail=s}function vn(t){for(let e=t.deps;e;e=e.nextDep)if(e.dep.version!==e.version||e.dep.computed&&(el(e.dep.computed)||e.dep.version!==e.version))return!0;return!!t._dirty}function el(t){if(t.flags&4&&!(t.flags&16)||(t.flags&=-17,t.globalVersion===as)||(t.globalVersion=as,!t.isSSR&&t.flags&128&&(!t.deps&&!t._dirty||!vn(t))))return;t.flags|=2;const e=t.dep,s=St,n=oe;St=t,oe=!0;try{Qo(t);const o=t.fn(t._value);(e.version===0||fe(o,t._value))&&(t.flags|=128,t._value=o,e.version++)}catch(o){throw e.version++,o}finally{St=s,oe=n,tl(t),t.flags&=-3}}function Pn(t,e=!1){const{dep:s,prevSub:n,nextSub:o}=t;if(n&&(n.nextSub=o,t.prevSub=void 0),o&&(o.prevSub=n,t.nextSub=void 0),s.subs===t&&(s.subs=n,!n&&s.computed)){s.computed.flags&=-5;for(let l=s.computed.deps;l;l=l.nextDep)Pn(l,!0)}!e&&!--s.sc&&s.map&&s.map.delete(s.key)}function _r(t){const{prevDep:e,nextDep:s}=t;e&&(e.nextDep=s,t.prevDep=void 0),s&&(s.prevDep=e,t.nextDep=void 0)}let oe=!0;const sl=[];function $e(){sl.push(oe),oe=!1}function ke(){const t=sl.pop();oe=t===void 0?!0:t}function oo(t){const{cleanup:e}=t;if(t.cleanup=void 0,e){const s=St;St=void 0;try{e()}finally{St=s}}}let as=0;class vr{constructor(e,s){this.sub=e,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Bn{constructor(e){this.computed=e,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(e){if(!St||!oe||St===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==St)s=this.activeLink=new vr(St,this),St.deps?(s.prevDep=St.depsTail,St.depsTail.nextDep=s,St.depsTail=s):St.deps=St.depsTail=s,nl(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const n=s.nextDep;n.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=n),s.prevDep=St.depsTail,s.nextDep=void 0,St.depsTail.nextDep=s,St.depsTail=s,St.deps===s&&(St.deps=n)}return s}trigger(e){this.version++,as++,this.notify(e)}notify(e){qn();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{Ln()}}}function nl(t){if(t.dep.sc++,t.sub.flags&4){const e=t.dep.computed;if(e&&!t.dep.subs){e.flags|=20;for(let n=e.deps;n;n=n.nextDep)nl(n)}const s=t.dep.subs;s!==t&&(t.prevSub=s,s&&(s.nextSub=t)),t.dep.subs=t}}const bn=new WeakMap,Be=Symbol(""),xn=Symbol(""),cs=Symbol("");function Nt(t,e,s){if(oe&&St){let n=bn.get(t);n||bn.set(t,n=new Map);let o=n.get(s);o||(n.set(s,o=new Bn),o.map=n,o.key=s),o.track()}}function xe(t,e,s,n,o,l){const c=bn.get(t);if(!c){as++;return}const a=d=>{d&&d.trigger()};if(qn(),e==="clear")c.forEach(a);else{const d=dt(t),g=d&&jn(s);if(d&&s==="length"){const f=Number(n);c.forEach((m,_)=>{(_==="length"||_===cs||!me(_)&&_>=f)&&a(m)})}else switch((s!==void 0||c.has(void 0))&&a(c.get(s)),g&&a(c.get(cs)),e){case"add":d?g&&a(c.get("length")):(a(c.get(Be)),Me(t)&&a(c.get(xn)));break;case"delete":d||(a(c.get(Be)),Me(t)&&a(c.get(xn)));break;case"set":Me(t)&&a(c.get(Be));break}}Ln()}function ze(t){const e=wt(t);return e===t||(Nt(e,"iterate",cs),se(t))?e:ge(t)?Se(t)?e.map(s=>Ae(ne(s))):e.map(Ae):e.map(ne)}function Gs(t){return Nt(t=wt(t),"iterate",cs),t}function ue(t,e){return ge(t)?Ae(Se(t)?ne(e):e):ne(e)}const br={__proto__:null,[Symbol.iterator](){return on(this,Symbol.iterator,t=>ue(this,t))},concat(...t){return ze(this).concat(...t.map(e=>dt(e)?ze(e):e))},entries(){return on(this,"entries",t=>(t[1]=ue(this,t[1]),t))},every(t,e){return _e(this,"every",t,e,void 0,arguments)},filter(t,e){return _e(this,"filter",t,e,s=>s.map(n=>ue(this,n)),arguments)},find(t,e){return _e(this,"find",t,e,s=>ue(this,s),arguments)},findIndex(t,e){return _e(this,"findIndex",t,e,void 0,arguments)},findLast(t,e){return _e(this,"findLast",t,e,s=>ue(this,s),arguments)},findLastIndex(t,e){return _e(this,"findLastIndex",t,e,void 0,arguments)},forEach(t,e){return _e(this,"forEach",t,e,void 0,arguments)},includes(...t){return ln(this,"includes",t)},indexOf(...t){return ln(this,"indexOf",t)},join(t){return ze(this).join(t)},lastIndexOf(...t){return ln(this,"lastIndexOf",t)},map(t,e){return _e(this,"map",t,e,void 0,arguments)},pop(){return Je(this,"pop")},push(...t){return Je(this,"push",t)},reduce(t,...e){return lo(this,"reduce",t,e)},reduceRight(t,...e){return lo(this,"reduceRight",t,e)},shift(){return Je(this,"shift")},some(t,e){return _e(this,"some",t,e,void 0,arguments)},splice(...t){return Je(this,"splice",t)},toReversed(){return ze(this).toReversed()},toSorted(t){return ze(this).toSorted(t)},toSpliced(...t){return ze(this).toSpliced(...t)},unshift(...t){return Je(this,"unshift",t)},values(){return on(this,"values",t=>ue(this,t))}};function on(t,e,s){const n=Gs(t),o=n[e]();return n!==t&&!se(t)&&(o._next=o.next,o.next=()=>{const l=o._next();return l.done||(l.value=s(l.value)),l}),o}const xr=Array.prototype;function _e(t,e,s,n,o,l){const c=Gs(t),a=c!==t&&!se(t),d=c[e];if(d!==xr[e]){const m=d.apply(t,l);return a?ne(m):m}let g=s;c!==t&&(a?g=function(m,_){return s.call(this,ue(t,m),_,t)}:s.length>2&&(g=function(m,_){return s.call(this,m,_,t)}));const f=d.call(c,g,n);return a&&o?o(f):f}function lo(t,e,s,n){const o=Gs(t),l=o!==t&&!se(t);let c=s,a=!1;o!==t&&(l?(a=n.length===0,c=function(g,f,m){return a&&(a=!1,g=ue(t,g)),s.call(this,g,ue(t,f),m,t)}):s.length>3&&(c=function(g,f,m){return s.call(this,g,f,m,t)}));const d=o[e](c,...n);return a?ue(t,d):d}function ln(t,e,s){const n=wt(t);Nt(n,"iterate",cs);const o=n[e](...s);return(o===-1||o===!1)&&Nn(s[0])?(s[0]=wt(s[0]),n[e](...s)):o}function Je(t,e,s=[]){$e(),qn();const n=wt(t)[e].apply(t,s);return Ln(),ke(),n}const yr=An("__proto__,__v_isRef,__isVue"),ol=new Set(Object.getOwnPropertyNames(Symbol).filter(t=>t!=="arguments"&&t!=="caller").map(t=>Symbol[t]).filter(me));function wr(t){me(t)||(t=String(t));const e=wt(this);return Nt(e,"has",t),e.hasOwnProperty(t)}class ll{constructor(e=!1,s=!1){this._isReadonly=e,this._isShallow=s}get(e,s,n){if(s==="__v_skip")return e.__v_skip;const o=this._isReadonly,l=this._isShallow;if(s==="__v_isReactive")return!o;if(s==="__v_isReadonly")return o;if(s==="__v_isShallow")return l;if(s==="__v_raw")return n===(o?l?Ar:cl:l?al:il).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(n)?e:void 0;const c=dt(e);if(!o){let d;if(c&&(d=br[s]))return d;if(s==="hasOwnProperty")return wr}const a=Reflect.get(e,s,Wt(e)?e:n);if((me(s)?ol.has(s):yr(s))||(o||Nt(e,"get",s),l))return a;if(Wt(a)){const d=c&&jn(s)?a:a.value;return o&&Ft(d)?wn(d):d}return Ft(a)?o?wn(a):gs(a):a}}class rl extends ll{constructor(e=!1){super(!1,e)}set(e,s,n,o){let l=e[s];const c=dt(e)&&jn(s);if(!this._isShallow){const g=ge(l);if(!se(n)&&!ge(n)&&(l=wt(l),n=wt(n)),!c&&Wt(l)&&!Wt(n))return g||(l.value=n),!0}const a=c?Number(s)<e.length:$t(e,s),d=Reflect.set(e,s,n,Wt(e)?e:o);return e===wt(o)&&d&&(a?fe(n,l)&&xe(e,"set",s,n):xe(e,"add",s,n)),d}deleteProperty(e,s){const n=$t(e,s);e[s];const o=Reflect.deleteProperty(e,s);return o&&n&&xe(e,"delete",s,void 0),o}has(e,s){const n=Reflect.has(e,s);return(!me(s)||!ol.has(s))&&Nt(e,"has",s),n}ownKeys(e){return Nt(e,"iterate",dt(e)?"length":Be),Reflect.ownKeys(e)}}class $r extends ll{constructor(e=!1){super(!0,e)}set(e,s){return!0}deleteProperty(e,s){return!0}}const kr=new rl,Dr=new $r,Fr=new rl(!0);const yn=t=>t,xs=t=>Reflect.getPrototypeOf(t);function Er(t,e,s){return function(...n){const o=this.__v_raw,l=wt(o),c=Me(l),a=t==="entries"||t===Symbol.iterator&&c,d=t==="keys"&&c,g=o[t](...n),f=s?yn:e?Ae:ne;return!e&&Nt(l,"iterate",d?xn:Be),Bt(Object.create(g),{next(){const{value:m,done:_}=g.next();return _?{value:m,done:_}:{value:a?[f(m[0]),f(m[1])]:f(m),done:_}}})}}function ys(t){return function(...e){return t==="delete"?!1:t==="clear"?void 0:this}}function Cr(t,e){const s={get(o){const l=this.__v_raw,c=wt(l),a=wt(o);t||(fe(o,a)&&Nt(c,"get",o),Nt(c,"get",a));const{has:d}=xs(c),g=e?yn:t?Ae:ne;if(d.call(c,o))return g(l.get(o));if(d.call(c,a))return g(l.get(a));l!==c&&l.get(o)},get size(){const o=this.__v_raw;return!t&&Nt(wt(o),"iterate",Be),o.size},has(o){const l=this.__v_raw,c=wt(l),a=wt(o);return t||(fe(o,a)&&Nt(c,"has",o),Nt(c,"has",a)),o===a?l.has(o):l.has(o)||l.has(a)},forEach(o,l){const c=this,a=c.__v_raw,d=wt(a),g=e?yn:t?Ae:ne;return!t&&Nt(d,"iterate",Be),a.forEach((f,m)=>o.call(l,g(f),g(m),c))}};return Bt(s,t?{add:ys("add"),set:ys("set"),delete:ys("delete"),clear:ys("clear")}:{add(o){const l=wt(this),c=xs(l),a=wt(o),d=!e&&!se(o)&&!ge(o)?a:o;return c.has.call(l,d)||fe(o,d)&&c.has.call(l,o)||fe(a,d)&&c.has.call(l,a)||(l.add(d),xe(l,"add",d,d)),this},set(o,l){!e&&!se(l)&&!ge(l)&&(l=wt(l));const c=wt(this),{has:a,get:d}=xs(c);let g=a.call(c,o);g||(o=wt(o),g=a.call(c,o));const f=d.call(c,o);return c.set(o,l),g?fe(l,f)&&xe(c,"set",o,l):xe(c,"add",o,l),this},delete(o){const l=wt(this),{has:c,get:a}=xs(l);let d=c.call(l,o);d||(o=wt(o),d=c.call(l,o)),a&&a.call(l,o);const g=l.delete(o);return d&&xe(l,"delete",o,void 0),g},clear(){const o=wt(this),l=o.size!==0,c=o.clear();return l&&xe(o,"clear",void 0,void 0),c}}),["keys","values","entries",Symbol.iterator].forEach(o=>{s[o]=Er(o,t,e)}),s}function Rn(t,e){const s=Cr(t,e);return(n,o,l)=>o==="__v_isReactive"?!t:o==="__v_isReadonly"?t:o==="__v_raw"?n:Reflect.get($t(s,o)&&o in n?s:n,o,l)}const Mr={get:Rn(!1,!1)},Sr={get:Rn(!1,!0)},Tr={get:Rn(!0,!1)};const il=new WeakMap,al=new WeakMap,cl=new WeakMap,Ar=new WeakMap;function Or(t){switch(t){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function gs(t){return ge(t)?t:In(t,!1,kr,Mr,il)}function jr(t){return In(t,!1,Fr,Sr,al)}function wn(t){return In(t,!0,Dr,Tr,cl)}function In(t,e,s,n,o){if(!Ft(t)||t.__v_raw&&!(e&&t.__v_isReactive)||t.__v_skip||!Object.isExtensible(t))return t;const l=o.get(t);if(l)return l;const c=Or(or(t));if(c===0)return t;const a=new Proxy(t,c===2?n:s);return o.set(t,a),a}function Se(t){return ge(t)?Se(t.__v_raw):!!(t&&t.__v_isReactive)}function ge(t){return!!(t&&t.__v_isReadonly)}function se(t){return!!(t&&t.__v_isShallow)}function Nn(t){return t?!!t.__v_raw:!1}function wt(t){const e=t&&t.__v_raw;return e?wt(e):t}function Hr(t){return!$t(t,"__v_skip")&&Object.isExtensible(t)&&Vo(t,"__v_skip",!0),t}const ne=t=>Ft(t)?gs(t):t,Ae=t=>Ft(t)?wn(t):t;function Wt(t){return t?t.__v_isRef===!0:!1}function kt(t){return qr(t,!1)}function qr(t,e){return Wt(t)?t:new Lr(t,e)}class Lr{constructor(e,s){this.dep=new Bn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?e:wt(e),this._value=s?e:ne(e),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(e){const s=this._rawValue,n=this.__v_isShallow||se(e)||ge(e);e=n?e:wt(e),fe(e,s)&&(this._rawValue=e,this._value=n?e:ne(e),this.dep.trigger())}}function u(t){return Wt(t)?t.value:t}const Pr={get:(t,e,s)=>e==="__v_raw"?t:u(Reflect.get(t,e,s)),set:(t,e,s,n)=>{const o=t[e];return Wt(o)&&!Wt(s)?(o.value=s,!0):Reflect.set(t,e,s,n)}};function dl(t){return Se(t)?t:new Proxy(t,Pr)}class Br{constructor(e,s,n){this.fn=e,this.setter=s,this._value=void 0,this.dep=new Bn(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=!s,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&St!==this)return Zo(this,!0),!0}get value(){const e=this.dep.track();return el(this),e&&(e.version=this.dep.version),this._value}set value(e){this.setter&&this.setter(e)}}function Rr(t,e,s=!1){let n,o;return ut(t)?n=t:(n=t.get,o=t.set),new Br(n,o,s)}const ws={},Ts=new WeakMap;let qe;function Ir(t,e=!1,s=qe){if(s){let n=Ts.get(s);n||Ts.set(s,n=[]),n.push(t)}}function Nr(t,e,s=Mt){const{immediate:n,deep:o,once:l,scheduler:c,augmentJob:a,call:d}=s,g=F=>o?F:se(F)||o===!1||o===0?ye(F,1):ye(F);let f,m,_,x,q=!1,V=!1;if(Wt(t)?(m=()=>t.value,q=se(t)):Se(t)?(m=()=>g(t),q=!0):dt(t)?(V=!0,q=t.some(F=>Se(F)||se(F)),m=()=>t.map(F=>{if(Wt(F))return F.value;if(Se(F))return g(F);if(ut(F))return d?d(F,2):F()})):ut(t)?e?m=d?()=>d(t,2):t:m=()=>{if(_){$e();try{_()}finally{ke()}}const F=qe;qe=f;try{return d?d(t,3,[x]):t(x)}finally{qe=F}}:m=he,e&&o){const F=m,H=o===!0?1/0:o;m=()=>ye(F(),H)}const Y=gr(),Q=()=>{f.stop(),Y&&Y.active&&On(Y.effects,f)};if(l&&e){const F=e;e=(...H)=>{const pt=F(...H);return Q(),pt}}let L=V?new Array(t.length).fill(ws):ws;const P=F=>{if(!(!(f.flags&1)||!f.dirty&&!F))if(e){const H=f.run();if(F||o||q||(V?H.some((pt,ct)=>fe(pt,L[ct])):fe(H,L))){_&&_();const pt=qe;qe=f;try{const ct=[H,L===ws?void 0:V&&L[0]===ws?[]:L,x];L=H,d?d(e,3,ct):e(...ct)}finally{qe=pt}}}else f.run()};return a&&a(P),f=new Jo(m),f.scheduler=c?()=>c(P,!1):P,x=F=>Ir(F,!1,f),_=f.onStop=()=>{const F=Ts.get(f);if(F){if(d)d(F,4);else for(const H of F)H();Ts.delete(f)}},e?n?P(!0):L=f.run():c?c(P.bind(null,!0),!0):f.run(),Q.pause=f.pause.bind(f),Q.resume=f.resume.bind(f),Q.stop=Q,Q}function ye(t,e=1/0,s){if(e<=0||!Ft(t)||t.__v_skip||(s=s||new Map,(s.get(t)||0)>=e))return t;if(s.set(t,e),e--,Wt(t))ye(t.value,e,s);else if(dt(t))for(let n=0;n<t.length;n++)ye(t[n],e,s);else if(Ss(t)||Me(t))t.forEach(n=>{ye(n,e,s)});else if(Uo(t)){for(const n in t)ye(t[n],e,s);for(const n of Object.getOwnPropertySymbols(t))Object.prototype.propertyIsEnumerable.call(t,n)&&ye(t[n],e,s)}return t}/**
  10. * @vue/runtime-core v3.5.43
  11. * (c) 2018-present Yuxi (Evan) You and Vue contributors
  12. * @license MIT
  13. **/function _s(t,e,s,n){try{return n?t(...n):t()}catch(o){Ys(o,e,s)}}function le(t,e,s,n){if(ut(t)){const o=_s(t,e,s,n);return o&&zo(o)&&o.catch(l=>{Ys(l,e,s)}),o}if(dt(t)){const o=[];for(let l=0;l<t.length;l++)o.push(le(t[l],e,s,n));return o}}function Ys(t,e,s,n=!0){const o=e?e.vnode:null,{errorHandler:l,throwUnhandledErrorInProduction:c}=e&&e.appContext.config||Mt;if(e){let a=e.parent;const d=e.proxy,g=`https://vuejs.org/error-reference/#runtime-${s}`;for(;a;){const f=a.ec;if(f){for(let m=0;m<f.length;m++)if(f[m](t,d,g)===!1)return}a=a.parent}if(l){$e(),_s(l,null,10,[t,d,g]),ke();return}}zr(t,s,o,n,c)}function zr(t,e,s,n=!0,o=!1){if(o)throw t;console.error(t)}const Kt=[];let de=-1;const Ve=[];let Ee=null,We=0;const ul=Promise.resolve();let As=null;function Wr(t){const e=As||ul;return t?e.then(this?t.bind(this):t):e}function Ur(t){let e=de+1,s=Kt.length;for(;e<s;){const n=e+s>>>1,o=Kt[n],l=ds(o);l<t||l===t&&o.flags&2?e=n+1:s=n}return e}function zn(t){if(!(t.flags&1)){const e=ds(t),s=Kt[Kt.length-1];!s||!(t.flags&2)&&e>=ds(s)?Kt.push(t):Kt.splice(Ur(e),0,t),t.flags|=1,pl()}}function pl(){As||(As=ul.then(hl))}function Vr(t){if(!dt(t))Ee&&t.id===-1?Ee.splice(We+1,0,t):t.flags&1||(Ve.push(t),t.flags|=1);else for(let e=0;e<t.length;e++)Ve.push(t[e]);pl()}function ro(t,e,s=de+1){for(;s<Kt.length;s++){const n=Kt[s];if(n&&n.flags&2){if(t&&n.id!==t.uid)continue;Kt.splice(s,1),s--,n.flags&4&&(n.flags&=-2),n(),n.flags&4||(n.flags&=-2)}}}function fl(t){if(Ve.length){const e=[...new Set(Ve)].sort((s,n)=>ds(s)-ds(n));if(Ve.length=0,Ee){for(let s=0;s<e.length;s++)Ee.push(e[s]);return}for(Ee=e,We=0;We<Ee.length;We++){const s=Ee[We];s.flags&4&&(s.flags&=-2),s.flags&8||s(),s.flags&=-2}Ee=null,We=0}}const ds=t=>t.id==null?t.flags&2?-1:1/0:t.id;function hl(t){try{for(de=0;de<Kt.length;de++){const e=Kt[de];e&&!(e.flags&8)&&(e.flags&4&&(e.flags&=-2),_s(e,e.i,e.i?15:14),e.flags&4||(e.flags&=-2))}}finally{for(;de<Kt.length;de++){const e=Kt[de];e&&(e.flags&=-2)}de=-1,Kt.length=0,fl(),As=null,(Kt.length||Ve.length)&&hl()}}let Qt=null,ml=null;function Os(t){const e=Qt;return Qt=t,ml=t&&t.type.__scopeId||null,e}function Kr(t,e=Qt,s){if(!e||t._n)return t;const n=(...o)=>{n._d&&bo(-1);const l=Os(e),c=Re.length;let a;try{a=t(...o)}finally{for(let d=Re.length;d>c;d--)Bl();Os(l),n._d&&bo(1)}return a};return n._n=!0,n._c=!0,n._d=!0,n}function $n(t,e){if(Qt===null)return t;const s=tn(Qt),n=t.dirs||(t.dirs=[]);for(let o=0;o<e.length;o++){let[l,c,a,d=Mt]=e[o];l&&(ut(l)&&(l={mounted:l,updated:l}),l.deep&&ye(c),n.push({dir:l,instance:s,value:c,oldValue:void 0,arg:a,modifiers:d}))}return t}function je(t,e,s,n){const o=t.dirs,l=e&&e.dirs;for(let c=0;c<o.length;c++){const a=o[c];l&&(a.oldValue=l[c].value);let d=a.dir[n];d&&($e(),le(d,s,8,[t.el,a,t,e]),ke())}}function Gr(t,e){if(zt){let s=zt.provides;const n=zt.parent&&zt.parent.provides;n===s&&(s=zt.provides=Object.create(n)),s[t]=e}}function Es(t,e,s=!1){const n=Gi();if(n||Ke){let o=Ke?Ke._context.provides:n?n.parent==null||n.ce?n.vnode.appContext&&n.vnode.appContext.provides:n.parent.provides:void 0;if(o&&t in o)return o[t];if(arguments.length>1)return s&&ut(e)?e.call(n&&n.proxy):e}}const Yr=Symbol.for("v-scx"),Jr=()=>Es(Yr);function Te(t,e,s){return gl(t,e,s)}function gl(t,e,s=Mt){const{immediate:n,deep:o,flush:l,once:c}=s,a=Bt({},s),d=e&&n||!e&&l!=="post";let g;if(fs){if(l==="sync"){const x=Jr();g=x.__watcherHandles||(x.__watcherHandles=[])}else if(!d){const x=()=>{};return x.stop=he,x.resume=he,x.pause=he,x}}const f=zt;a.call=(x,q,V)=>le(x,f,q,V);let m=!1;l==="post"?a.scheduler=x=>{Yt(x,f&&f.suspense)}:l!=="sync"&&(m=!0,a.scheduler=(x,q)=>{q?x():zn(x)}),a.augmentJob=x=>{e&&(x.flags|=4),m&&(x.flags|=2,f&&(x.id=f.uid,x.i=f))};const _=Nr(t,e,a);return fs&&(g?g.push(_):d&&_()),_}function Xr(t,e,s){const n=this.proxy,o=Ot(t)?t.includes(".")?_l(n,t):()=>n[t]:t.bind(n,n);let l;ut(e)?l=e:(l=e.handler,s=e);const c=bs(this),a=gl(o,l.bind(n),s);return c(),a}function _l(t,e){const s=e.split(".");return()=>{let n=t;for(let o=0;o<s.length&&n;o++)n=n[s[o]];return n}}const Zr=Symbol("_vte"),Js=t=>t.__isTeleport,rn=Symbol("_leaveCb");function Qr(t){let e=t[0];if(t.length>1){for(const s of t)if(s.type!==De){e=s;break}}return e}function vl(t){if(!Un(t))return Js(t.type)&&t.children?Qr(t.children):t;if(t.component)return t.component.subTree;const{shapeFlag:e,children:s}=t;if(s){if(e&16)return s[0];if(e&32&&ut(s.default))return s.default()}}function Wn(t,e){if(t.shapeFlag&6&&t.component){t.transition=e;const s=t.component.subTree;Wn(Js(s.type)&&vl(s)||s,e)}else t.shapeFlag&128?(t.ssContent.transition=e.clone(t.ssContent),t.ssFallback.transition=e.clone(t.ssFallback)):t.transition=e}function Ut(t,e){return ut(t)?Bt({name:t.name},e,{setup:t}):t}function bl(t){t.ids=[t.ids[0]+t.ids[2]+++"-",0,0]}function io(t,e){let s;return!!((s=Object.getOwnPropertyDescriptor(t,e))&&!s.configurable)}const js=new WeakMap;function ls(t,e,s,n,o=!1){if(dt(t)){t.forEach((V,Y)=>ls(V,e&&(dt(e)?e[Y]:e),s,n,o));return}if(rs(n)&&!o){n.shapeFlag&512&&n.type.__asyncResolved&&n.component.subTree.component&&ls(t,e,s,n.component.subTree);return}const l=n.shapeFlag&4?tn(n.component):n.el,c=o?null:l,{i:a,r:d}=t,g=e&&e.r,f=a.refs===Mt?a.refs={}:a.refs,m=a.setupState,_=wt(m),x=m===Mt?No:V=>io(f,V)?!1:$t(_,V),q=(V,Y)=>!(Y&&io(f,Y));if(g!=null&&g!==d){if(ao(e),Ot(g))f[g]=null,x(g)&&(m[g]=null);else if(Wt(g)){const V=e;q(g,V.k)&&(g.value=null),V.k&&(f[V.k]=null)}}if(ut(d))_s(d,a,12,[c,f]);else{const V=Ot(d),Y=Wt(d);if(V||Y){const Q=()=>{if(t.f){const L=V?x(d)?m[d]:f[d]:q()||!t.k?d.value:f[t.k];if(o)dt(L)&&On(L,l);else if(dt(L))L.includes(l)||L.push(l);else if(V)f[d]=[l],x(d)&&(m[d]=f[d]);else{const P=[l];q(d,t.k)&&(d.value=P),t.k&&(f[t.k]=P)}}else V?(f[d]=c,x(d)&&(m[d]=c)):Y&&(q(d,t.k)&&(d.value=c),t.k&&(f[t.k]=c))};if(c){const L=()=>{Q(),js.delete(t)};L.id=-1,js.set(t,L),Yt(L,s)}else ao(t),Q()}}}function ao(t){const e=js.get(t);e&&(e.flags|=8,js.delete(t))}Vs().requestIdleCallback;Vs().cancelIdleCallback;const rs=t=>!!t.type.__asyncLoader,Un=t=>t.type.__isKeepAlive;function ti(t,e){xl(t,"a",e)}function ei(t,e){xl(t,"da",e)}function xl(t,e,s=zt){const n=t.__wdc||(t.__wdc=()=>{let o=s;for(;o;){if(o.isDeactivated)return;o=o.parent}return t()});if(Xs(e,n,s),s){let o=s.parent;for(;o&&o.parent;)Un(o.parent.vnode)&&si(n,e,s,o),o=o.parent}}function si(t,e,s,n){const o=Xs(e,t,n,!0);yl(()=>{On(n[e],o)},s)}function Xs(t,e,s=zt,n=!1){if(s){const o=s[t]||(s[t]=[]),l=e.__weh||(e.__weh=(...c)=>{$e();const a=bs(s),d=le(e,s,t,c);return a(),ke(),d});return n?o.unshift(l):o.push(l),l}}const Fe=t=>(e,s=zt)=>{(!fs||t==="sp")&&Xs(t,(...n)=>e(...n),s)},ni=Fe("bm"),vs=Fe("m"),oi=Fe("bu"),li=Fe("u"),ri=Fe("bum"),yl=Fe("um"),ii=Fe("sp"),ai=Fe("rtg"),ci=Fe("rtc");function di(t,e=zt){Xs("ec",t,e)}const ui="components";function pi(t,e){return hi(ui,t,!0,e)||t}const fi=Symbol.for("v-ndc");function hi(t,e,s=!0,n=!1){const o=Qt||zt;if(o){const l=o.type;{const a=Qi(l,!1);if(a&&(a===e||a===Gt(e)||a===Us(Gt(e))))return l}const c=co(o[t]||l[t],e)||co(o.appContext[t],e);return!c&&n?l:c}}function co(t,e){return t&&(t[e]||t[Gt(e)]||t[Us(Gt(e))])}function yt(t,e,s,n){let o;const l=s,c=dt(t);if(c||Ot(t)){const a=c&&Se(t);let d=!1,g=!1;a&&(d=!se(t),g=ge(t),t=Gs(t)),o=new Array(t.length);for(let f=0,m=t.length;f<m;f++)o[f]=e(d?g?Ae(ne(t[f])):ne(t[f]):t[f],f,void 0,l)}else if(typeof t=="number"){o=new Array(t);for(let a=0;a<t;a++)o[a]=e(a+1,a,void 0,l)}else if(Ft(t))if(t[Symbol.iterator])o=Array.from(t,(a,d)=>e(a,d,void 0,l));else{const a=Object.keys(t);o=new Array(a.length);for(let d=0,g=a.length;d<g;d++){const f=a[d];o[d]=e(t[f],f,d,l)}}else o=[];return o}const kn=t=>t?zl(t)?tn(t):kn(t.parent):null,is=Bt(Object.create(null),{$:t=>t,$el:t=>t.vnode.el,$data:t=>t.data,$props:t=>t.props,$attrs:t=>t.attrs,$slots:t=>t.slots,$refs:t=>t.refs,$parent:t=>kn(t.parent),$root:t=>kn(t.root),$host:t=>t.ce,$emit:t=>t.emit,$options:t=>$l(t),$forceUpdate:t=>t.f||(t.f=()=>{zn(t.update)}),$nextTick:t=>t.n||(t.n=Wr.bind(t.proxy)),$watch:t=>Xr.bind(t)}),an=(t,e)=>t!==Mt&&!t.__isScriptSetup&&$t(t,e),mi={get({_:t},e){if(e==="__v_skip")return!0;const{ctx:s,setupState:n,data:o,props:l,accessCache:c,type:a,appContext:d}=t;if(e[0]!=="$"){const _=c[e];if(_!==void 0)switch(_){case 1:return n[e];case 2:return o[e];case 4:return s[e];case 3:return l[e]}else{if(an(n,e))return c[e]=1,n[e];if(o!==Mt&&$t(o,e))return c[e]=2,o[e];if($t(l,e))return c[e]=3,l[e];if(s!==Mt&&$t(s,e))return c[e]=4,s[e];Dn&&(c[e]=0)}}const g=is[e];let f,m;if(g)return e==="$attrs"&&Nt(t.attrs,"get",""),g(t);if((f=a.__cssModules)&&(f=f[e]))return f;if(s!==Mt&&$t(s,e))return c[e]=4,s[e];if(m=d.config.globalProperties,$t(m,e))return m[e]},set({_:t},e,s){const{data:n,setupState:o,ctx:l}=t;return an(o,e)?(o[e]=s,!0):n!==Mt&&$t(n,e)?(n[e]=s,!0):$t(t.props,e)||e[0]==="$"&&e.slice(1)in t?!1:(l[e]=s,!0)},has({_:{data:t,setupState:e,accessCache:s,ctx:n,appContext:o,props:l,type:c}},a){let d;return!!(s[a]||t!==Mt&&a[0]!=="$"&&$t(t,a)||an(e,a)||$t(l,a)||$t(n,a)||$t(is,a)||$t(o.config.globalProperties,a)||(d=c.__cssModules)&&d[a])},defineProperty(t,e,s){return s.get!=null?t._.accessCache[e]=0:$t(s,"value")&&this.set(t,e,s.value,null),Reflect.defineProperty(t,e,s)}};function uo(t){return dt(t)?t.reduce((e,s)=>(e[s]=null,e),{}):t}let Dn=!0;function gi(t){const e=$l(t),s=t.proxy,n=t.ctx;Dn=!1,e.beforeCreate&&po(e.beforeCreate,t,"bc");const{data:o,computed:l,methods:c,watch:a,provide:d,inject:g,created:f,beforeMount:m,mounted:_,beforeUpdate:x,updated:q,activated:V,deactivated:Y,beforeDestroy:Q,beforeUnmount:L,destroyed:P,unmounted:F,render:H,renderTracked:pt,renderTriggered:ct,errorCaptured:gt,serverPrefetch:Ht,expose:Rt,inheritAttrs:S,components:B,directives:A,filters:C}=e;if(g&&_i(g,n,null),c)for(const T in c){const R=c[T];ut(R)&&(n[T]=R.bind(s))}if(o){const T=o.call(s,s);Ft(T)&&(t.data=gs(T))}if(Dn=!0,l)for(const T in l){const R=l[T],K=ut(R)?R.bind(s,s):ut(R.get)?R.get.bind(s,s):he,N=!ut(R)&&ut(R.set)?R.set.bind(s):he,G=U({get:K,set:N});Object.defineProperty(n,T,{enumerable:!0,configurable:!0,get:()=>G.value,set:tt=>G.value=tt})}if(a)for(const T in a)wl(a[T],n,s,T);if(d){const T=ut(d)?d.call(s):d;Reflect.ownKeys(T).forEach(R=>{Gr(R,T[R])})}f&&po(f,t,"c");function I(T,R){dt(R)?R.forEach(K=>T(K.bind(s))):R&&T(R.bind(s))}if(I(ni,m),I(vs,_),I(oi,x),I(li,q),I(ti,V),I(ei,Y),I(di,gt),I(ci,pt),I(ai,ct),I(ri,L),I(yl,F),I(ii,Ht),dt(Rt))if(Rt.length){const T=t.exposed||(t.exposed={});Rt.forEach(R=>{Object.defineProperty(T,R,{get:()=>s[R],set:K=>s[R]=K,enumerable:!0})})}else t.exposed||(t.exposed={});H&&t.render===he&&(t.render=H),S!=null&&(t.inheritAttrs=S),B&&(t.components=B),A&&(t.directives=A),Ht&&bl(t)}function _i(t,e,s=he){dt(t)&&(t=Fn(t));for(const n in t){const o=t[n];let l;Ft(o)?"default"in o?l=Es(o.from||n,o.default,!0):l=Es(o.from||n):l=Es(o),Wt(l)?Object.defineProperty(e,n,{enumerable:!0,configurable:!0,get:()=>l.value,set:c=>l.value=c}):e[n]=l}}function po(t,e,s){le(dt(t)?t.map(n=>n.bind(e.proxy)):t.bind(e.proxy),e,s)}function wl(t,e,s,n){let o=n.includes(".")?_l(s,n):()=>s[n];if(Ot(t)){const l=e[t];ut(l)&&Te(o,l)}else if(ut(t))Te(o,t.bind(s));else if(Ft(t))if(dt(t))t.forEach(l=>wl(l,e,s,n));else{const l=ut(t.handler)?t.handler.bind(s):e[t.handler];ut(l)&&Te(o,l,t)}}function $l(t){const e=t.type,{mixins:s,extends:n}=e,{mixins:o,optionsCache:l,config:{optionMergeStrategies:c}}=t.appContext,a=l.get(e);let d;return a?d=a:!o.length&&!s&&!n?d=e:(d={},o.length&&o.forEach(g=>Hs(d,g,c,!0)),Hs(d,e,c)),Ft(e)&&l.set(e,d),d}function Hs(t,e,s,n=!1){const{mixins:o,extends:l}=e;l&&Hs(t,l,s,!0),o&&o.forEach(c=>Hs(t,c,s,!0));for(const c in e)if(!(n&&c==="expose")){const a=vi[c]||s&&s[c];t[c]=a?a(t[c],e[c]):e[c]}return t}const vi={data:fo,props:ho,emits:ho,methods:ts,computed:ts,beforeCreate:Vt,created:Vt,beforeMount:Vt,mounted:Vt,beforeUpdate:Vt,updated:Vt,beforeDestroy:Vt,beforeUnmount:Vt,destroyed:Vt,unmounted:Vt,activated:Vt,deactivated:Vt,errorCaptured:Vt,serverPrefetch:Vt,components:ts,directives:ts,watch:xi,provide:fo,inject:bi};function fo(t,e){return e?t?function(){return Bt(ut(t)?t.call(this,this):t,ut(e)?e.call(this,this):e)}:e:t}function bi(t,e){return ts(Fn(t),Fn(e))}function Fn(t){if(dt(t)){const e={};for(let s=0;s<t.length;s++)e[t[s]]=t[s];return e}return t}function Vt(t,e){return t?[...new Set([].concat(t,e))]:e}function ts(t,e){return t?Bt(Object.create(null),t,e):e}function ho(t,e){return t?dt(t)&&dt(e)?[...new Set([...t,...e])]:Bt(Object.create(null),uo(t),uo(e??{})):e}function xi(t,e){if(!t)return e;if(!e)return t;const s=Bt(Object.create(null),t);for(const n in e)s[n]=Vt(t[n],e[n]);return s}function kl(){return{app:null,config:{isNativeTag:No,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let yi=0;function wi(t,e){return function(n,o=null){ut(n)||(n=Bt({},n)),o!=null&&!Ft(o)&&(o=null);const l=kl(),c=new WeakSet,a=[];let d=!1;const g=l.app={_uid:yi++,_component:n,_props:o,_container:null,_context:l,_instance:null,version:ea,get config(){return l.config},set config(f){},use(f,...m){return c.has(f)||(f&&ut(f.install)?(c.add(f),f.install(g,...m)):ut(f)&&(c.add(f),f(g,...m))),g},mixin(f){return l.mixins.includes(f)||l.mixins.push(f),g},component(f,m){return m?(l.components[f]=m,g):l.components[f]},directive(f,m){return m?(l.directives[f]=m,g):l.directives[f]},mount(f,m,_){if(!d){const x=g._ceVNode||Tt(n,o);return x.appContext=l,_===!0?_="svg":_===!1&&(_=void 0),t(x,f,_),d=!0,g._container=f,f.__vue_app__=g,tn(x.component)}},onUnmount(f){a.push(f)},unmount(){d&&(le(a,g._instance,16),t(null,g._container),delete g._container.__vue_app__)},provide(f,m){return l.provides[f]=m,g},runWithContext(f){const m=Ke;Ke=g;try{return f()}finally{Ke=m}}};return g}}let Ke=null;const $i=(t,e)=>e==="modelValue"||e==="model-value"?t.modelModifiers:t[`${e}Modifiers`]||t[`${Gt(e)}Modifiers`]||t[`${Ne(e)}Modifiers`];function ki(t,e,...s){if(t.isUnmounted)return;const n=t.vnode.props||Mt;let o=s;const l=e.startsWith("update:"),c=l&&$i(n,e.slice(7));c&&(c.trim&&(o=s.map(f=>Ot(f)?f.trim():f)),c.number&&(o=o.map(Hn)));let a,d=n[a=en(e)]||n[a=en(Gt(e))];!d&&l&&(d=n[a=en(Ne(e))]),d&&le(d,t,6,o);const g=n[a+"Once"];if(g){if(!t.emitted)t.emitted={};else if(t.emitted[a])return;t.emitted[a]=!0,le(g,t,6,o)}}const Di=new WeakMap;function Dl(t,e,s=!1){const n=s?Di:e.emitsCache,o=n.get(t);if(o!==void 0)return o;const l=t.emits;let c={},a=!1;if(!ut(t)){const d=g=>{const f=Dl(g,e,!0);f&&(a=!0,Bt(c,f))};!s&&e.mixins.length&&e.mixins.forEach(d),t.extends&&d(t.extends),t.mixins&&t.mixins.forEach(d)}return!l&&!a?(Ft(t)&&n.set(t,null),null):(dt(l)?l.forEach(d=>c[d]=null):Bt(c,l),Ft(t)&&n.set(t,c),c)}function Zs(t,e){return!t||!Ns(e)?!1:(e=e.slice(2),e=e==="Once"?e:e.replace(/Once$/,""),$t(t,e[0].toLowerCase()+e.slice(1))||$t(t,Ne(e))||$t(t,e))}function mo(t){const{type:e,vnode:s,proxy:n,withProxy:o,propsOptions:[l],slots:c,attrs:a,emit:d,render:g,renderCache:f,props:m,data:_,setupState:x,ctx:q,inheritAttrs:V}=t,Y=Os(t);let Q,L;try{if(s.shapeFlag&4){const F=o||n,H=F;Q=pe(g.call(H,F,f,m,x,_,q)),L=a}else{const F=e;Q=pe(F.length>1?F(m,{attrs:a,slots:c,emit:d}):F(m,null)),L=e.props?a:Fi(a)}}catch(F){Re.length=0,Ys(F,t,1),Q=Tt(De)}let P=Q;if(L&&V!==!1){const F=Object.keys(L),{shapeFlag:H}=P;F.length&&H&7&&(l&&F.some(zs)&&(L=Ei(L,l)),P=Ge(P,L,!1,!0))}if(s.dirs&&(P=Ge(P,null,!1,!0),P.dirs=P.dirs?P.dirs.concat(s.dirs):s.dirs),s.transition){const F=Js(P.type)&&vl(P)||P;Wn(F,s.transition)}return Q=P,Os(Y),Q}const Fi=t=>{let e;for(const s in t)(s==="class"||s==="style"||Ns(s))&&((e||(e={}))[s]=t[s]);return e},Ei=(t,e)=>{const s={};for(const n in t)(!zs(n)||!(n.slice(9)in e))&&(s[n]=t[n]);return s};function Ci(t,e,s){const{props:n,children:o,component:l}=t,{props:c,children:a,patchFlag:d}=e,g=l.emitsOptions;if(e.dirs||e.transition)return!0;if(s&&d>=0){if(d&1024)return!0;if(d&16)return n?go(n,c,g):!!c;if(d&8){const f=e.dynamicProps;for(let m=0;m<f.length;m++){const _=f[m];if(Fl(c,n,_)&&!Zs(g,_))return!0}}}else return(o||a)&&(!a||!a.$stable)?!0:n===c?!1:n?c?go(n,c,g):!0:!!c;return!1}function go(t,e,s){const n=Object.keys(e);if(n.length!==Object.keys(t).length)return!0;for(let o=0;o<n.length;o++){const l=n[o];if(Fl(e,t,l)&&!Zs(s,l))return!0}return!1}function Fl(t,e,s){const n=t[s],o=e[s];return s==="style"&&Ft(n)&&Ft(o)?!Ks(n,o):n!==o}function Mi({vnode:t,parent:e,suspense:s},n){for(;e;){const o=e.subTree;if(o.suspense&&o.suspense.activeBranch===t&&(o.suspense.vnode.el=o.el=n,t=o),o===t)(t=e.vnode).el=n,e=e.parent;else break}s&&s.activeBranch===t&&(s.vnode.el=n)}const El={},Cl=()=>Object.create(El),Ml=t=>Object.getPrototypeOf(t)===El;function Si(t,e,s,n=!1){const o={},l=Cl();t.propsDefaults=Object.create(null),Sl(t,e,o,l);for(const c in t.propsOptions[0])c in o||(o[c]=void 0);s?t.props=n?o:jr(o):t.type.props?t.props=o:t.props=l,t.attrs=l}function Ti(t,e,s,n){const{props:o,attrs:l,vnode:{patchFlag:c}}=t,a=wt(o),[d]=t.propsOptions;let g=!1;if((n||c>0)&&!(c&16)){if(c&8){const f=t.vnode.dynamicProps;for(let m=0;m<f.length;m++){let _=f[m];if(Zs(t.emitsOptions,_))continue;const x=e[_];if(d)if($t(l,_))x!==l[_]&&(l[_]=x,g=!0);else{const q=Gt(_);o[q]=En(d,a,q,x,t,!1)}else x!==l[_]&&(l[_]=x,g=!0)}}}else{Sl(t,e,o,l)&&(g=!0);let f;for(const m in a)(!e||!$t(e,m)&&((f=Ne(m))===m||!$t(e,f)))&&(d?s&&(s[m]!==void 0||s[f]!==void 0)&&(o[m]=En(d,a,m,void 0,t,!0)):delete o[m]);if(l!==a)for(const m in l)(!e||!$t(e,m))&&(delete l[m],g=!0)}g&&xe(t.attrs,"set","")}function Sl(t,e,s,n){const[o,l]=t.propsOptions;let c=!1,a;if(e)for(let d in e){if(ss(d))continue;const g=e[d];let f;o&&$t(o,f=Gt(d))?!l||!l.includes(f)?s[f]=g:(a||(a={}))[f]=g:Zs(t.emitsOptions,d)||(!(d in n)||g!==n[d])&&(n[d]=g,c=!0)}if(l){const d=wt(s),g=a||Mt;for(let f=0;f<l.length;f++){const m=l[f];s[m]=En(o,d,m,g[m],t,!$t(g,m))}}return c}function En(t,e,s,n,o,l){const c=t[s];if(c!=null){const a=$t(c,"default");if(a&&n===void 0){const d=c.default;if(c.type!==Function&&!c.skipFactory&&ut(d)){const{propsDefaults:g}=o;if(s in g)n=g[s];else{const f=bs(o);n=g[s]=d.call(null,e),f()}}else n=d;o.ce&&o.ce._setProp(s,n)}c[0]&&(l&&!a?n=!1:c[1]&&(n===""||n===Ne(s))&&(n=!0))}return n}const Ai=new WeakMap;function Tl(t,e,s=!1){const n=s?Ai:e.propsCache,o=n.get(t);if(o)return o;const l=t.props,c={},a=[];let d=!1;if(!ut(t)){const f=m=>{d=!0;const[_,x]=Tl(m,e,!0);Bt(c,_),x&&a.push(...x)};!s&&e.mixins.length&&e.mixins.forEach(f),t.extends&&f(t.extends),t.mixins&&t.mixins.forEach(f)}if(!l&&!d)return Ft(t)&&n.set(t,Pe),Pe;if(dt(l))for(let f=0;f<l.length;f++){const m=Gt(l[f]);_o(m)&&(c[m]=Mt)}else if(l)for(const f in l){const m=Gt(f);if(_o(m)){const _=l[f],x=c[m]=dt(_)||ut(_)?{type:_}:Bt({},_),q=x.type;let V=!1,Y=!0;if(dt(q))for(let Q=0;Q<q.length;++Q){const L=q[Q],P=ut(L)&&L.name;if(P==="Boolean"){V=!0;break}else P==="String"&&(Y=!1)}else V=ut(q)&&q.name==="Boolean";x[0]=V,x[1]=Y,(V||$t(x,"default"))&&a.push(m)}}const g=[c,a];return Ft(t)&&n.set(t,g),g}function _o(t){return t[0]!=="$"&&!ss(t)}const Vn=t=>t==="_"||t==="_ctx"||t==="$stable",Kn=t=>dt(t)?t.map(pe):[pe(t)],Oi=(t,e,s)=>{if(e._n)return e;const n=Kr((...o)=>Kn(e(...o)),s);return n._c=!1,n},Al=(t,e,s)=>{const n=t._ctx;for(const o in t){if(Vn(o))continue;const l=t[o];if(ut(l))e[o]=Oi(o,l,n);else if(l!=null){const c=Kn(l);e[o]=()=>c}}},Ol=(t,e)=>{const s=Kn(e);t.slots.default=()=>s},jl=(t,e,s)=>{for(const n in e)(s||!Vn(n))&&(t[n]=e[n])},ji=(t,e,s)=>{const n=t.slots=Cl();if(t.vnode.shapeFlag&32){const o=e._;o?(jl(n,e,s),s&&Vo(n,"_",o,!0)):Al(e,n)}else e&&Ol(t,e)},Hi=(t,e,s)=>{const{vnode:n,slots:o}=t;let l=!0,c=Mt;if(n.shapeFlag&32){const a=e._;a?s&&a===1?l=!1:jl(o,e,s):(l=!e.$stable,Al(e,o)),c=e}else e&&(Ol(t,e),c={default:1});if(l)for(const a in o)!Vn(a)&&c[a]==null&&delete o[a]},Yt=Ri;function qi(t){return Li(t)}function Li(t,e){const s=Vs();s.__VUE__=!0;const{insert:n,remove:o,patchProp:l,createElement:c,createText:a,createComment:d,setText:g,setElementText:f,parentNode:m,nextSibling:_,setScopeId:x=he,insertStaticContent:q}=t,V=(h,v,b,y=null,k=null,M=null,O=void 0,j=null,$=!!v.dynamicChildren)=>{if(h===v)return;h&&!Xe(h,v)&&(y=ot(h),tt(h,k,M,!0),h=null),v.patchFlag===-2&&($=!1,v.dynamicChildren=null),v.dynamicChildren&&h&&h.dynamicChildren&&h.dynamicChildren.hasOnce&&(v.dynamicChildren===Pe&&(v.dynamicChildren=[]),v.dynamicChildren.hasOnce=!0);const{type:w,ref:X,shapeFlag:z}=v;switch(w){case Qs:Y(h,v,b,y);break;case De:Q(h,v,b,y);break;case Cs:h==null&&L(v,b,y,O);break;case it:B(h,v,b,y,k,M,O,j,$);break;default:z&1?H(h,v,b,y,k,M,O,j,$):z&6?A(h,v,b,y,k,M,O,j,$):(z&64||z&128)&&w.process(h,v,b,y,k,M,O,j,$,nt)}X!=null&&k?ls(X,h&&h.ref,M,v||h,!v):X==null&&h&&h.ref!=null&&ls(h.ref,null,M,h,!0)},Y=(h,v,b,y)=>{if(h==null)n(v.el=a(v.children),b,y);else{const k=v.el=h.el;v.children!==h.children&&g(k,v.children)}},Q=(h,v,b,y)=>{h==null?n(v.el=d(v.children||""),b,y):v.el=h.el},L=(h,v,b,y)=>{[h.el,h.anchor]=q(h.children,v,b,y,h.el,h.anchor)},P=({el:h,anchor:v},b,y)=>{let k;for(;h&&h!==v;)k=_(h),n(h,b,y),h=k;n(v,b,y)},F=({el:h,anchor:v})=>{let b;for(;h&&h!==v;)b=_(h),o(h),h=b;o(v)},H=(h,v,b,y,k,M,O,j,$)=>{if(v.type==="svg"?O="svg":v.type==="math"&&(O="mathml"),h==null)pt(v,b,y,k,M,O,j,$);else{const w=h.el&&h.el._isVueCE?h.el:null;try{w&&w._beginPatch(),Ht(h,v,k,M,O,j,$)}finally{w&&w._endPatch()}}},pt=(h,v,b,y,k,M,O,j)=>{let $,w;const{props:X,shapeFlag:z,transition:et,dirs:lt}=h;if($=h.el=c(h.type,M,X&&X.is,X),z&8?f($,h.children):z&16&&gt(h.children,$,null,y,k,cn(h,M),O,j),lt&&je(h,null,y,"created"),ct($,h,h.scopeId,O,y),X){for(const Et in X)Et!=="value"&&!ss(Et)&&l($,Et,null,X[Et],M,y);"value"in X&&l($,"value",null,X.value,M),(w=X.onVnodeBeforeMount)&&ce(w,y,h)}lt&&je(h,null,y,"beforeMount");const bt=Pi(k,et);bt&&et.beforeEnter($),n($,v,b),((w=X&&X.onVnodeMounted)||bt||lt)&&Yt(()=>{try{w&&ce(w,y,h),bt&&et.enter($),lt&&je(h,null,y,"mounted")}finally{}},k)},ct=(h,v,b,y,k)=>{if(b&&x(h,b),y)for(let M=0;M<y.length;M++)x(h,y[M]);if(k){let M=k.subTree;if(v===M||Pl(M.type)&&(M.ssContent===v||M.ssFallback===v)){const O=k.vnode;ct(h,O,O.scopeId,O.slotScopeIds,k.parent)}}},gt=(h,v,b,y,k,M,O,j,$=0)=>{for(let w=$;w<h.length;w++){const X=h[w]=j?be(h[w]):pe(h[w]);V(null,X,v,b,y,k,M,O,j)}},Ht=(h,v,b,y,k,M,O)=>{const j=v.el=h.el;let{patchFlag:$,dynamicChildren:w,dirs:X}=v;$|=h.patchFlag&16;const z=h.props||Mt,et=v.props||Mt;let lt;if(b&&He(b,!1),(lt=et.onVnodeBeforeUpdate)&&ce(lt,b,v,h),X&&je(v,h,b,"beforeUpdate"),b&&He(b,!0),w&&(!h.dynamicChildren||h.dynamicChildren.length!==w.length)&&($=0,O=!1,w=null),(z.innerHTML&&et.innerHTML==null||z.textContent&&et.textContent==null)&&f(j,""),w?Rt(h.dynamicChildren,w,j,b,y,cn(v,k),M):O||R(h,v,j,null,b,y,cn(v,k),M,!1),$>0){if($&16)S(j,z,et,b,k);else if($&2&&z.class!==et.class&&l(j,"class",null,et.class,k),$&4&&l(j,"style",z.style,et.style,k),$&8){const bt=v.dynamicProps;for(let Et=0;Et<bt.length;Et++){const Dt=bt[Et],jt=z[Dt],qt=et[Dt];(qt!==jt||Dt==="value")&&l(j,Dt,jt,qt,k,b)}}$&1&&h.children!==v.children&&f(j,v.children)}else!O&&w==null&&S(j,z,et,b,k);((lt=et.onVnodeUpdated)||X)&&Yt(()=>{lt&&ce(lt,b,v,h),X&&je(v,h,b,"updated")},y)},Rt=(h,v,b,y,k,M,O)=>{for(let j=0;j<v.length;j++){const $=h[j],w=v[j],X=$.el&&($.type===it||!Xe($,w)||$.shapeFlag&198)?m($.el):b;V($,w,X,null,y,k,M,O,!0)}},S=(h,v,b,y,k)=>{if(v!==b){if(v!==Mt)for(const M in v)!ss(M)&&!(M in b)&&l(h,M,v[M],null,k,y);for(const M in b){if(ss(M))continue;const O=b[M],j=v[M];O!==j&&M!=="value"&&l(h,M,j,O,k,y)}"value"in b&&l(h,"value",v.value,b.value,k)}},B=(h,v,b,y,k,M,O,j,$)=>{const w=v.el=h?h.el:a(""),X=v.anchor=h?h.anchor:a("");let{patchFlag:z,dynamicChildren:et,slotScopeIds:lt}=v;lt&&(j=j?j.concat(lt):lt),h==null?(n(w,b,y),n(X,b,y),gt(v.children||[],b,X,k,M,O,j,$)):z>0&&z&64&&et&&h.dynamicChildren&&h.dynamicChildren.length===et.length?(Rt(h.dynamicChildren,et,b,k,M,O,j),(v.key!=null||k&&v===k.subTree)&&Hl(h,v,!0)):R(h,v,b,X,k,M,O,j,$)},A=(h,v,b,y,k,M,O,j,$)=>{v.slotScopeIds=j,h==null?v.shapeFlag&512?k.ctx.activate(v,b,y,O,$):C(v,b,y,k,M,O,$):W(h,v,$)},C=(h,v,b,y,k,M,O)=>{const j=h.component=Ki(h,y,k);if(Un(h)&&(j.ctx.renderer=nt),Yi(j,!1,O),j.asyncDep){if(k&&k.registerDep(j,I,O),!h.el){const $=j.subTree=Tt(De);Q(null,$,v,b),h.placeholder=$.el}}else I(j,h,v,b,k,M,O)},W=(h,v,b)=>{const y=v.component=h.component;if(Ci(h,v,b))if(y.asyncDep&&!y.asyncResolved){v.el=h.el,T(y,v,b);return}else y.next=v,y.update();else v.el=h.el,y.vnode=v},I=(h,v,b,y,k,M,O)=>{const j=()=>{if(h.isMounted){let{next:z,bu:et,u:lt,parent:bt,vnode:Et}=h;{const ie=ql(h);if(ie){z&&(z.el=Et.el,T(h,z,O)),ie.asyncDep.then(()=>{Yt(()=>{h.isUnmounted||w()},k)});return}}let Dt=z,jt;He(h,!1),z?(z.el=Et.el,T(h,z,O)):z=Et,et&&Fs(et),(jt=z.props&&z.props.onVnodeBeforeUpdate)&&ce(jt,bt,z,Et),He(h,!0);const qt=mo(h),re=h.subTree;h.subTree=qt,V(re,qt,m(re.el),ot(re),h,k,M),z.el=qt.el,Dt===null&&Mi(h,qt.el),lt&&Yt(lt,k),(jt=z.props&&z.props.onVnodeUpdated)&&Yt(()=>ce(jt,bt,z,Et),k)}else{let z;const{el:et,props:lt}=v,{bm:bt,m:Et,parent:Dt,root:jt,type:qt}=h,re=rs(v);He(h,!1),bt&&Fs(bt),!re&&(z=lt&&lt.onVnodeBeforeMount)&&ce(z,Dt,v),He(h,!0);{jt.ce&&jt.ce._hasShadowRoot()&&jt.ce._injectChildStyle(qt,h.parent?h.parent.type:void 0);const ie=h.subTree=mo(h);V(null,ie,b,y,h,k,M),v.el=ie.el}if(Et&&Yt(Et,k),!re&&(z=lt&&lt.onVnodeMounted)){const ie=v;Yt(()=>ce(z,Dt,ie),k)}(v.shapeFlag&256||Dt&&rs(Dt.vnode)&&Dt.vnode.shapeFlag&256)&&h.a&&Yt(h.a,k),h.isMounted=!0,v=b=y=null}};h.scope.on();const $=h.effect=new Jo(j);h.scope.off();const w=h.update=$.run.bind($),X=h.job=$.runIfDirty.bind($);X.i=h,X.id=h.uid,$.scheduler=()=>zn(X),He(h,!0),w()},T=(h,v,b)=>{v.component=h;const y=h.vnode.props;h.vnode=v,h.next=null,Ti(h,v.props,y,b),Hi(h,v.children,b),$e(),ro(h),ke()},R=(h,v,b,y,k,M,O,j,$=!1)=>{const w=h&&h.children,X=h?h.shapeFlag:0,z=v.children,{patchFlag:et,shapeFlag:lt}=v;if(et>0){if(et&128){N(w,z,b,y,k,M,O,j,$);return}else if(et&256){K(w,z,b,y,k,M,O,j,$);return}}lt&8?(X&16&&ht(w,k,M),z!==w&&f(b,z)):X&16?lt&16?N(w,z,b,y,k,M,O,j,$):ht(w,k,M,!0):(X&8&&f(b,""),lt&16&&gt(z,b,y,k,M,O,j,$))},K=(h,v,b,y,k,M,O,j,$)=>{h=h||Pe,v=v||Pe;const w=h.length,X=v.length,z=Math.min(w,X);let et;for(et=0;et<z;et++){const lt=v[et]=$?be(v[et]):pe(v[et]);V(h[et],lt,b,null,k,M,O,j,$)}w>X?ht(h,k,M,!0,!1,z):gt(v,b,y,k,M,O,j,$,z)},N=(h,v,b,y,k,M,O,j,$)=>{let w=0;const X=v.length;let z=h.length-1,et=X-1;for(;w<=z&&w<=et;){const lt=h[w],bt=v[w]=$?be(v[w]):pe(v[w]);if(Xe(lt,bt))V(lt,bt,b,null,k,M,O,j,$);else break;w++}for(;w<=z&&w<=et;){const lt=h[z],bt=v[et]=$?be(v[et]):pe(v[et]);if(Xe(lt,bt))V(lt,bt,b,null,k,M,O,j,$);else break;z--,et--}if(w>z){if(w<=et){const lt=et+1,bt=lt<X?v[lt].el:y;for(;w<=et;)V(null,v[w]=$?be(v[w]):pe(v[w]),b,bt,k,M,O,j,$),w++}}else if(w>et)for(;w<=z;)tt(h[w],k,M,!0),w++;else{const lt=w,bt=w,Et=new Map;for(w=bt;w<=et;w++){const Zt=v[w]=$?be(v[w]):pe(v[w]);Zt.key!=null&&Et.set(Zt.key,w)}let Dt,jt=0;const qt=et-bt+1;let re=!1,ie=0;const Ye=new Array(qt);for(w=0;w<qt;w++)Ye[w]=0;for(w=lt;w<=z;w++){const Zt=h[w];if(jt>=qt){tt(Zt,k,M,!0);continue}let ae;if(Zt.key!=null)ae=Et.get(Zt.key);else for(Dt=bt;Dt<=et;Dt++)if(Ye[Dt-bt]===0&&Xe(Zt,v[Dt])){ae=Dt;break}ae===void 0?tt(Zt,k,M,!0):(Ye[ae-bt]=w+1,ae>=ie?ie=ae:re=!0,V(Zt,v[ae],b,null,k,M,O,j,$),jt++)}const Xn=re?Bi(Ye):Pe;for(Dt=Xn.length-1,w=qt-1;w>=0;w--){const Zt=bt+w,ae=v[Zt],Zn=v[Zt+1],Qn=Zt+1<X?Zn.el||Ll(Zn):y;Ye[w]===0?V(null,ae,b,Qn,k,M,O,j,$):re&&(Dt<0||w!==Xn[Dt]?G(ae,b,Qn,2):Dt--)}}},G=(h,v,b,y,k=null)=>{const{el:M,type:O,transition:j,children:$,shapeFlag:w}=h;if(w&6){G(h.component.subTree,v,b,y);return}if(w&128){h.suspense.move(v,b,y);return}if(w&64){O.move(h,v,b,nt);return}if(O===it){n(M,v,b);for(let z=0;z<$.length;z++)G($[z],v,b,y);n(h.anchor,v,b);return}if(O===Cs){P(h,v,b);return}if(y!==2&&w&1&&j)if(y===0)j.persisted&&!M[rn]?n(M,v,b):(j.beforeEnter(M),n(M,v,b),Yt(()=>j.enter(M),k));else{const{leave:z,delayLeave:et,afterLeave:lt}=j,bt=()=>{h.ctx.isUnmounted?o(M):n(M,v,b)},Et=()=>{const Dt=M._isLeaving||!!M[rn];M._isLeaving&&M[rn](!0),j.persisted&&!Dt?bt():z(M,()=>{bt(),lt&&lt()})};et?et(M,bt,Et):Et()}else n(M,v,b)},tt=(h,v,b,y=!1,k=!1)=>{const{type:M,props:O,ref:j,children:$,dynamicChildren:w,shapeFlag:X,patchFlag:z,dirs:et,cacheIndex:lt,memo:bt}=h;if((z===-2||w&&w.hasOnce)&&(k=!1),j!=null&&($e(),ls(j,null,b,h,!0),ke()),lt!=null&&(!h.ctx||h.ctx===v)&&(v.renderCache[lt]=void 0),X&256){v.ctx.deactivate(h);return}const Et=X&1&&et,Dt=!rs(h);let jt;if(Dt&&(jt=O&&O.onVnodeBeforeUnmount)&&ce(jt,v,h),X&6)rt(h.component,b,y);else{if(X&128){h.suspense.unmount(b,y);return}Et&&je(h,null,v,"beforeUnmount"),X&64?h.type.remove(h,v,b,nt,y):w&&!w.hasOnce&&(M!==it||z>0&&z&64)?ht(w,v,b,!1,!0):(M===it&&z&384||!k&&X&16)&&ht($,v,b),y&&st(h)}const qt=bt!=null&&lt==null;(Dt&&(jt=O&&O.onVnodeUnmounted)||Et||qt)&&Yt(()=>{jt&&ce(jt,v,h),Et&&je(h,null,v,"unmounted"),qt&&(h.el=null)},b)},st=h=>{const{type:v,el:b,anchor:y,transition:k}=h;if(v===it){J(b,y);return}if(v===Cs){F(h),k&&!k.persisted&&k.afterLeave&&k.afterLeave();return}const M=()=>{o(b),k&&!k.persisted&&k.afterLeave&&k.afterLeave()};if(h.shapeFlag&1&&k&&!k.persisted){const{leave:O,delayLeave:j}=k,$=()=>O(b,M);j?j(h.el,M,$):$()}else M()},J=(h,v)=>{let b;for(;h!==v;)b=_(h),o(h),h=b;o(v)},rt=(h,v,b)=>{const{bum:y,scope:k,job:M,subTree:O,um:j,m:$,a:w}=h;vo($),vo(w),y&&Fs(y),k.stop(),M?(M.flags|=8,tt(O,h,v,b)):h.vnode.el&&O&&(O.transition=h.vnode.transition,tt(O,h,v,b)),j&&Yt(j,v),Yt(()=>{h.isUnmounted=!0},v)},ht=(h,v,b,y=!1,k=!1,M=0)=>{for(let O=M;O<h.length;O++)tt(h[O],v,b,y,k)},ot=h=>{if(h.shapeFlag&6)return ot(h.component.subTree);if(h.shapeFlag&128)return h.suspense.next();const v=_(h.anchor||h.el),b=v&&v[Zr];return b?_(b):v};let _t=!1;const mt=(h,v,b)=>{let y;h==null?v._vnode&&(tt(v._vnode,null,null,!0),y=v._vnode.component):V(v._vnode||null,h,v,null,null,null,b),v._vnode=h,_t||(_t=!0,ro(y),fl(),_t=!1)},nt={p:V,um:tt,m:G,r:st,mt:C,mc:gt,pc:R,pbc:Rt,n:ot,o:t};return{render:mt,hydrate:void 0,createApp:wi(mt)}}function cn({type:t,props:e},s){return s==="svg"&&t==="foreignObject"||s==="mathml"&&t==="annotation-xml"&&e&&e.encoding&&e.encoding.includes("html")?void 0:s}function He({effect:t,job:e},s){s?(t.flags|=32,e.flags|=4):(t.flags&=-33,e.flags&=-5)}function Pi(t,e){return(!t||t&&!t.pendingBranch)&&e&&!e.persisted}function Hl(t,e,s=!1){const n=t.children,o=e.children;if(dt(n)&&dt(o))for(let l=0;l<n.length;l++){const c=n[l];let a=o[l];a.shapeFlag&1&&!a.dynamicChildren&&((a.patchFlag<=0||a.patchFlag===32)&&(a=o[l]=be(o[l]),a.el=c.el),!s&&a.patchFlag!==-2&&Hl(c,a)),a.type===Qs&&(a.patchFlag===-1&&(a=o[l]=be(a)),a.el=c.el),a.type===De&&!a.el&&(a.el=c.el)}}function Bi(t){const e=t.slice(),s=[0];let n,o,l,c,a;const d=t.length;for(n=0;n<d;n++){const g=t[n];if(g!==0){if(o=s[s.length-1],t[o]<g){e[n]=o,s.push(n);continue}for(l=0,c=s.length-1;l<c;)a=l+c>>1,t[s[a]]<g?l=a+1:c=a;g<t[s[l]]&&(l>0&&(e[n]=s[l-1]),s[l]=n)}}for(l=s.length,c=s[l-1];l-- >0;)s[l]=c,c=e[c];return s}function ql(t){const e=t.subTree.component;if(e)return e.asyncDep&&!e.asyncResolved?e:ql(e)}function vo(t){if(t)for(let e=0;e<t.length;e++)t[e].flags|=8}function Ll(t){if(t.placeholder)return t.placeholder;const e=t.component;return e?Ll(e.subTree):null}const Pl=t=>t.__isSuspense;function Ri(t,e){e&&e.pendingBranch?dt(t)?e.effects.push(...t):e.effects.push(t):Vr(t)}const it=Symbol.for("v-fgt"),Qs=Symbol.for("v-txt"),De=Symbol.for("v-cmt"),Cs=Symbol.for("v-stc"),Re=[];let te=null;function D(t=!1){Re.push(te=t?null:[])}function Bl(){Re.pop(),te=Re[Re.length-1]||null}let us=1;function bo(t,e=!1){us+=t,t<0&&te&&e&&(te.hasOnce=!0)}function Rl(t){return t.dynamicChildren=us>0?te||Pe:null,Bl(),us>0&&te&&te.push(t),t}function E(t,e,s,n,o,l){return Rl(i(t,e,s,n,o,l,!0))}function It(t,e,s,n,o){return Rl(Tt(t,e,s,n,o,!0))}function Il(t){return t?t.__v_isVNode===!0:!1}function Xe(t,e){return t.type===e.type&&t.key===e.key}const Nl=({key:t})=>t??null,Ms=({ref:t,ref_key:e,ref_for:s})=>(typeof t=="number"&&(t=""+t),t!=null?Ot(t)||Wt(t)||ut(t)?{i:Qt,r:t,k:e,f:!!s}:t:null);function i(t,e=null,s=null,n=0,o=null,l=t===it?0:1,c=!1,a=!1){const d={__v_isVNode:!0,__v_skip:!0,type:t,props:e,key:e&&Nl(e),ref:e&&Ms(e),scopeId:ml,slotScopeIds:null,children:s,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:l,patchFlag:n,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Qt};return a?(qs(d,s),l&128&&t.normalize(d)):s&&(d.shapeFlag|=Ot(s)?8:16),us>0&&!c&&te&&(d.patchFlag>0||l&6)&&d.patchFlag!==32&&te.push(d),d}const Tt=Ii;function Ii(t,e=null,s=null,n=0,o=null,l=!1){if((!t||t===fi)&&(t=De),Il(t)){const a=Ge(t,e,!0);return s&&qs(a,s),us>0&&!l&&te&&(a.shapeFlag&6?te[te.indexOf(t)]=a:te.push(a)),a.patchFlag=-2,a}if(ta(t)&&(t=t.__vccOpts),e){e=Ni(e);let{class:a,style:d}=e;a&&!Ot(a)&&(e.class=ee(a)),Ft(d)&&(Nn(d)&&!dt(d)&&(d=Bt({},d)),e.style=Pt(d))}const c=Ot(t)?1:Pl(t)?128:Js(t)?64:Ft(t)?4:ut(t)?2:0;return i(t,e,s,n,o,c,l,!0)}function Ni(t){return t?Nn(t)||Ml(t)?Bt({},t):t:null}function Ge(t,e,s=!1,n=!1){const{props:o,ref:l,patchFlag:c,children:a,transition:d}=t,g=e?Wi(o||{},e):o,f={__v_isVNode:!0,__v_skip:!0,type:t.type,props:g,key:g&&Nl(g),ref:e&&e.ref?s&&l?dt(l)?l.concat(Ms(e)):[l,Ms(e)]:Ms(e):l,scopeId:t.scopeId,slotScopeIds:t.slotScopeIds,children:a,target:t.target,targetStart:t.targetStart,targetAnchor:t.targetAnchor,staticCount:t.staticCount,shapeFlag:t.shapeFlag,patchFlag:e&&t.type!==it?c===-1?16:c|16:c,dynamicProps:t.dynamicProps,dynamicChildren:t.dynamicChildren,appContext:t.appContext,dirs:t.dirs,transition:d,component:t.component,suspense:t.suspense,ssContent:t.ssContent&&Ge(t.ssContent),ssFallback:t.ssFallback&&Ge(t.ssFallback),placeholder:t.placeholder,el:t.el,anchor:t.anchor,ctx:t.ctx,ce:t.ce,cacheIndex:t.cacheIndex};return d&&n&&Wn(f,d.clone(f)),f}function at(t=" ",e=0){return Tt(Qs,null,t,e)}function zi(t,e){const s=Tt(Cs,null,t);return s.staticCount=e,s}function vt(t="",e=!1){return e?(D(),It(De,null,t)):Tt(De,null,t)}function pe(t){return t==null||typeof t=="boolean"?Tt(De):dt(t)?Tt(it,null,t.slice()):Il(t)?be(t):Tt(Qs,null,String(t))}function be(t){return t.el===null&&t.patchFlag!==-1||t.memo?t:Ge(t)}function qs(t,e){let s=0;const{shapeFlag:n}=t;if(e==null)e=null;else if(dt(e))s=16;else if(typeof e=="object")if(n&65){const o=e.default;o&&(o._c&&(o._d=!1),qs(t,o()),o._c&&(o._d=!0));return}else{s=32;const o=e._;!o&&!Ml(e)?e._ctx=Qt:o===3&&Qt&&(Qt.slots._===1?e._=1:(e._=2,t.patchFlag|=1024))}else if(ut(e)){if(n&65){qs(t,{default:e});return}e={default:e,_ctx:Qt},s=32}else e=String(e),n&64?(s=16,e=[at(e)]):s=8;t.children=e,t.shapeFlag|=s}function Wi(...t){const e={};for(let s=0;s<t.length;s++){const n=t[s];for(const o in n)if(o==="class")e.class!==n.class&&(e.class=ee([e.class,n.class]));else if(o==="style")e.style=Pt([e.style,n.style]);else if(Ns(o)){const l=e[o],c=n[o];c&&l!==c&&!(dt(l)&&l.includes(c))?e[o]=l?[].concat(l,c):c:c==null&&l==null&&!zs(o)&&(e[o]=c)}else o!==""&&(e[o]=n[o])}return e}function ce(t,e,s,n=null){le(t,e,7,[s,n])}const Ui=kl();let Vi=0;function Ki(t,e,s){const n=t.type,o=(e?e.appContext:t.appContext)||Ui,l={uid:Vi++,vnode:t,type:n,parent:e,appContext:o,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new mr(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:e?e.provides:Object.create(o.provides),ids:e?e.ids:["",0,0],accessCache:null,renderCache:[],components:null,directives:null,propsOptions:Tl(n,o),emitsOptions:Dl(n,o),emit:null,emitted:null,propsDefaults:Mt,inheritAttrs:n.inheritAttrs,ctx:Mt,data:Mt,props:Mt,attrs:Mt,slots:Mt,refs:Mt,setupState:Mt,setupContext:null,suspense:s,suspenseId:s?s.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return l.ctx={_:l},l.root=e?e.root:l,l.emit=ki.bind(null,l),t.ce&&t.ce(l),l}let zt=null;const Gi=()=>zt||Qt;let Ls,ps;{const t=Vs(),e=(s,n)=>{let o;return(o=t[s])||(o=t[s]=[]),o.push(n),l=>{o.length>1?o.forEach(c=>c(l)):o[0](l)}};Ls=e("__VUE_INSTANCE_SETTERS__",s=>zt=s),ps=e("__VUE_SSR_SETTERS__",s=>fs=s)}const bs=t=>{const e=zt;return Ls(t),t.scope.on(),()=>{t.scope.off(),Ls(e)}},xo=()=>{zt&&zt.scope.off(),Ls(null)};function zl(t){return t.vnode.shapeFlag&4}let fs=!1;function Yi(t,e=!1,s=!1){e&&ps(e);const{props:n,children:o}=t.vnode,l=zl(t);Si(t,n,l,e),ji(t,o,s||e);const c=l?Ji(t,e):void 0;return e&&ps(!1),c}function Ji(t,e){const s=t.type;t.accessCache=Object.create(null),t.proxy=new Proxy(t.ctx,mi);const{setup:n}=s;if(n){$e();const o=t.setupContext=n.length>1?Zi(t):null,l=bs(t),c=_s(n,t,0,[t.props,o]),a=zo(c);if(ke(),l(),(a||t.sp)&&!rs(t)&&bl(t),a){if(c.then(xo,xo),e)return c.then(d=>{ps(!0);try{yo(t,d,e)}finally{ps(!1)}}).catch(d=>{Ys(d,t,0)});t.asyncDep=c}else yo(t,c)}else Wl(t)}function yo(t,e,s){ut(e)?t.type.__ssrInlineRender?t.ssrRender=e:t.render=e:Ft(e)&&(t.setupState=dl(e)),Wl(t)}function Wl(t,e,s){const n=t.type;t.render||(t.render=n.render||he);{const o=bs(t);$e();try{gi(t)}finally{ke(),o()}}}const Xi={get(t,e){return Nt(t,"get",""),t[e]}};function Zi(t){const e=s=>{t.exposed=s||{}};return{attrs:new Proxy(t.attrs,Xi),slots:t.slots,emit:t.emit,expose:e}}function tn(t){return t.exposed?t.exposeProxy||(t.exposeProxy=new Proxy(dl(Hr(t.exposed)),{get(e,s){if(s in e)return e[s];if(s in is)return is[s](t)},has(e,s){return s in e||s in is}})):t.proxy}function Qi(t,e=!0){return ut(t)?t.displayName||t.name:t.name||e&&t.__name}function ta(t){return ut(t)&&"__vccOpts"in t}const U=(t,e)=>Rr(t,e,fs),ea="3.5.43";/**
  14. * @vue/runtime-dom v3.5.43
  15. * (c) 2018-present Yuxi (Evan) You and Vue contributors
  16. * @license MIT
  17. **/let Cn;const wo=typeof window<"u"&&window.trustedTypes;if(wo)try{Cn=wo.createPolicy("vue",{createHTML:t=>t})}catch{}const Ul=Cn?t=>Cn.createHTML(t):t=>t,sa="http://www.w3.org/2000/svg",na="http://www.w3.org/1998/Math/MathML",ve=typeof document<"u"?document:null,$o=ve&&ve.createElement("template"),oa={insert:(t,e,s)=>{e.insertBefore(t,s||null)},remove:t=>{const e=t.parentNode;e&&e.removeChild(t)},createElement:(t,e,s,n)=>{const o=e==="svg"?ve.createElementNS(sa,t):e==="mathml"?ve.createElementNS(na,t):s?ve.createElement(t,{is:s}):ve.createElement(t);return t==="select"&&n&&n.multiple!=null&&o.setAttribute("multiple",n.multiple),o},createText:t=>ve.createTextNode(t),createComment:t=>ve.createComment(t),setText:(t,e)=>{t.nodeValue=e},setElementText:(t,e)=>{t.textContent=e},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>ve.querySelector(t),setScopeId(t,e){t.setAttribute(e,"")},insertStaticContent(t,e,s,n,o,l){const c=s?s.previousSibling:e.lastChild;if(o&&(o===l||o.nextSibling))for(;e.insertBefore(o.cloneNode(!0),s),!(o===l||!(o=o.nextSibling)););else{$o.innerHTML=Ul(n==="svg"?`<svg>${t}</svg>`:n==="mathml"?`<math>${t}</math>`:t);const a=$o.content;if(n==="svg"||n==="mathml"){const d=a.firstChild;for(;d.firstChild;)a.appendChild(d.firstChild);a.removeChild(d)}e.insertBefore(a,s)}return[c?c.nextSibling:e.firstChild,s?s.previousSibling:e.lastChild]}},la=Symbol("_vtc");function ra(t,e,s){const n=t[la];n&&(e=(e?[e,...n]:[...n]).join(" ")),e==null?t.removeAttribute("class"):s?t.setAttribute("class",e):t.className=e}const Ps=Symbol("_vod"),Vl=Symbol("_vsh"),ia={name:"show",beforeMount(t,{value:e},{transition:s}){t[Ps]=t.style.display==="none"?"":t.style.display,s&&e?s.beforeEnter(t):Ze(t,e)},mounted(t,{value:e},{transition:s}){s&&e&&s.enter(t)},updated(t,{value:e,oldValue:s},{transition:n}){!e!=!s&&(n?e?(n.beforeEnter(t),Ze(t,!0),n.enter(t)):n.leave(t,()=>{Ze(t,!1)}):Ze(t,e))},beforeUnmount(t,{value:e}){Ze(t,e)}};function Ze(t,e){t.style.display=e?t[Ps]:"none",t[Vl]=!e}const aa=Symbol(""),ca=/(?:^|;)\s*display\s*:/;function da(t,e,s){const n=t.style,o=Ot(s);let l=!1;if(s&&!o){if(e)if(Ot(e))for(const c of e.split(";")){const a=c.slice(0,c.indexOf(":")).trim();s[a]==null&&es(n,a,"")}else for(const c in e)s[c]==null&&es(n,c,"");for(const c in s){c==="display"&&(l=!0);const a=s[c];a!=null?pa(t,c,!Ot(e)&&e?e[c]:void 0,a)||es(n,c,a):es(n,c,"")}}else if(o){if(e!==s){const c=n[aa];c&&(s+=";"+c),n.cssText=s,l=ca.test(s)}}else e&&t.removeAttribute("style");Ps in t&&(t[Ps]=l?n.display:"",t[Vl]&&(n.display="none"))}const $s=/\s*!important$/;function es(t,e,s){if(dt(s))s.forEach(n=>es(t,e,n));else if(s==null&&(s=""),e.startsWith("--"))$s.test(s)?t.setProperty(e,s.replace($s,""),"important"):t.setProperty(e,s);else{const n=ua(t,e);$s.test(s)?t.setProperty(Ne(n),s.replace($s,""),"important"):t[n]=s}}const ko=["Webkit","Moz","ms"],dn={};function ua(t,e){const s=dn[e];if(s)return s;let n=Gt(e);if(n!=="filter"&&n in t)return dn[e]=n;n=Us(n);for(let o=0;o<ko.length;o++){const l=ko[o]+n;if(l in t)return dn[e]=l}return e}function pa(t,e,s,n){return t.tagName==="TEXTAREA"&&(e==="width"||e==="height")&&Ot(n)&&s===n}const Do="http://www.w3.org/1999/xlink";function Fo(t,e,s,n,o,l=pr(e)){n&&e.startsWith("xlink:")?s==null?t.removeAttributeNS(Do,e.slice(6,e.length)):t.setAttributeNS(Do,e,s):s==null||l&&!Ko(s)?t.removeAttribute(e):t.setAttribute(e,l?"":me(s)?String(s):s)}function Eo(t,e,s,n,o){if(e==="innerHTML"||e==="textContent"){s!=null&&(t[e]=e==="innerHTML"?Ul(s):s);return}const l=t.tagName;if(e==="value"&&l!=="PROGRESS"&&!l.includes("-")){const a=l==="OPTION"?t.getAttribute("value")||"":t.value,d=s==null?t.type==="checkbox"?"on":"":String(s);(a!==d||!("_value"in t))&&(t.value=d),s==null&&t.removeAttribute(e),t._value=s;return}let c=!1;if(s===""||s==null){const a=typeof t[e];a==="boolean"?s=Ko(s):s==null&&a==="string"?(s="",c=!0):a==="number"&&(s=0,c=!0)}try{t[e]=s}catch{}c&&t.removeAttribute(o||e)}function Ue(t,e,s,n){t.addEventListener(e,s,n)}function fa(t,e,s,n){t.removeEventListener(e,s,n)}const Co=Symbol("_vei");function ha(t,e,s,n,o=null){const l=t[Co]||(t[Co]={}),c=l[e];if(n&&c)c.value=n;else{const[a,d]=_a(e);if(n){const g=l[e]=xa(n,o);Ue(t,a,g,d)}else c&&(fa(t,a,c,d),l[e]=void 0)}}const ma=/(Once|Passive|Capture)$/,ga=/^on:?(?:Once|Passive|Capture)$/;function _a(t){let e,s;for(;(s=t.match(ma))&&!ga.test(t);)e||(e={}),t=t.slice(0,t.length-s[1].length),e[s[1].toLowerCase()]=!0;return[t[2]===":"?t.slice(3):Ne(t.slice(2)),e]}let un=0;const va=Promise.resolve(),ba=()=>un||(va.then(()=>un=0),un=Date.now());function xa(t,e){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;const o=s.value;if(dt(o)){const l=n.stopImmediatePropagation;n.stopImmediatePropagation=()=>{l.call(n),n._stopped=!0};const c=o.slice(),a=[n];for(let d=0;d<c.length&&!n._stopped;d++){const g=c[d];g&&le(g,e,5,a)}}else le(o,e,5,[n])};return s.value=t,s.attached=ba(),s}const Mo=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&t.charCodeAt(2)>96&&t.charCodeAt(2)<123,ya=(t,e,s,n,o,l)=>{const c=o==="svg";e==="class"?ra(t,n,c):e==="style"?da(t,s,n):Ns(e)?zs(e)||ha(t,e,s,n,l):(e[0]==="."?(e=e.slice(1),!0):e[0]==="^"?(e=e.slice(1),!1):wa(t,e,n,c))?(Eo(t,e,n),!t.tagName.includes("-")&&(e==="value"||e==="checked"||e==="selected")&&Fo(t,e,n,c,l,e!=="value")):t._isVueCE&&($a(t,e)||t._def.__asyncLoader&&(/[A-Z]/.test(e)||!Ot(n)))?Eo(t,Gt(e),n,l,e):(e==="true-value"?t._trueValue=n:e==="false-value"&&(t._falseValue=n),Fo(t,e,n,c))};function wa(t,e,s,n){if(n)return!!(e==="innerHTML"||e==="textContent"||e in t&&Mo(e)&&ut(s));if(e==="spellcheck"||e==="draggable"||e==="translate"||e==="autocorrect"||e==="sandbox"&&t.tagName==="IFRAME"||e==="form"||e==="list"&&t.tagName==="INPUT"||e==="type"&&t.tagName==="TEXTAREA")return!1;if(e==="width"||e==="height"){const o=t.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return Mo(e)&&Ot(s)?!1:e in t}function $a(t,e){const s=t._def.props;if(!s)return!1;const n=Gt(e);return Array.isArray(s)?s.some(o=>Gt(o)===n):Object.keys(s).some(o=>Gt(o)===n)}const So=t=>{const e=t.props["onUpdate:modelValue"]||!1;return dt(e)?s=>Fs(e,s):e};function ka(t){t.target.composing=!0}function To(t){const e=t.target;e.composing&&(e.composing=!1,e.dispatchEvent(new Event("input")))}const ks=Symbol("_assign"),Ds=Symbol("_initialValue");function pn(t,e,s){return e&&(t=t.trim()),s&&(t=Hn(t)),t}const Ao={created(t,{modifiers:{lazy:e,trim:s,number:n}},o){t.parentNode&&(t.type==="text"?t[Ds]=t.defaultValue.replace(/[\r\n]/g,""):t.type==="textarea"&&(t[Ds]=t.defaultValue.replace(/\r\n?/g,`
  18. `))),t[ks]=So(o);const l=n||o.props&&o.props.type==="number";Ue(t,e?"change":"input",c=>{c.target.composing||t[ks](pn(t.value,s,l))}),(s||l)&&Ue(t,"change",()=>{t.value=pn(t.value,s,l)}),e||(Ue(t,"compositionstart",ka),Ue(t,"compositionend",To),Ue(t,"change",To))},mounted(t,{value:e,modifiers:{trim:s,number:n}}){const o=e??"",l=t[Ds];delete t[Ds],l!==void 0&&(t.type==="text"||t.type==="textarea")&&t.value!==l?t[ks](pn(t.value,s,n)):t.value=o},beforeUpdate(t,{value:e,oldValue:s,modifiers:{lazy:n,trim:o,number:l}},c){if(t[ks]=So(c),t.composing)return;const a=(l||t.type==="number")&&!/^0\d/.test(t.value)?Hn(t.value):t.value,d=e??"";if(a===d)return;const g=t.getRootNode();(g instanceof Document||g instanceof ShadowRoot)&&g.activeElement===t&&t.type!=="range"&&(n&&e===s||o&&t.value.trim()===d)||(t.value=d)}},Da=["ctrl","shift","alt","meta"],Fa={stop:t=>t.stopPropagation(),prevent:t=>t.preventDefault(),self:t=>t.target!==t.currentTarget,ctrl:t=>!t.ctrlKey,shift:t=>!t.shiftKey,alt:t=>!t.altKey,meta:t=>!t.metaKey,left:t=>"button"in t&&t.button!==0,middle:t=>"button"in t&&t.button!==1,right:t=>"button"in t&&t.button!==2,exact:(t,e)=>Da.some(s=>t[`${s}Key`]&&!e.includes(s))},Ea=(t,e)=>{if(!t)return t;const s=t._withMods||(t._withMods={}),n=e.join(".");return s[n]||(s[n]=((o,...l)=>{for(let c=0;c<e.length;c++){const a=Fa[e[c]];if(a&&a(o,e))return}return t(o,...l)}))},Ca=Bt({patchProp:ya},oa);let Oo;function Ma(){return Oo||(Oo=qi(Ca))}const Sa=((...t)=>{const e=Ma().createApp(...t),{mount:s}=e;return e.mount=n=>{const o=Aa(n);if(!o)return;const l=e._component;!ut(l)&&!l.render&&!l.template&&(l.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const c=s(o,!1,Ta(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),c},e});function Ta(t){if(t instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&t instanceof MathMLElement)return"mathml"}function Aa(t){return Ot(t)?document.querySelector(t):t}const Kl={fleet:"/api/fleet",curves:"/api/curves",channels:"/api/channels",facts:"/api/facts",maintSurvey:"/api/maint_survey",maintStd:"/api/maint_std",maintFramework:"/api/maint_framework",dqFindings:"/api/dq_findings",ontList:"/api/ont_list",askStatus:"/api/ask_status",askModels:"/api/ask_models",vibcms:"/api/vibcms",algoHealth:"/algorithm/healthz",algoEndpoints:"/algorithm/api/endpoints",algoMatrix:"/algorithm/api/matrix",algoReliability:"/algorithm/api/reliability",algoPurity:"/algorithm/api/curves_check"};async function Gl(t,e){const s=Kl[t],n=performance.now();try{const o=await fetch(s,{headers:{Accept:"application/json",...e?.body?{"Content-Type":"application/json"}:{}},...e}),l=await o.text();let c=l;try{c=JSON.parse(l)}catch{}return{name:t,path:s,ok:o.ok,status:o.status,ms:Math.round(performance.now()-n),data:c}}catch(o){return{name:t,path:s,ok:!1,status:0,ms:Math.round(performance.now()-n),error:o instanceof Error?o.message:String(o)}}}const fn=["facts","maintSurvey","ontList","askStatus","channels","dqFindings","algoHealth","algoEndpoints","algoMatrix","algoReliability","algoPurity"],Oa={class:"card"},ja={class:"hint"},Ha=["disabled"],qa={class:"hint"},La=Ut({__name:"ContractSmoke",setup(t){const e=kt([]),s=kt(!1),n=kt(0);function o(c){return Array.isArray(c)?`list[${c.length}]`:c&&typeof c=="object"?Object.keys(c).slice(0,8).join(", "):typeof c}async function l(){s.value=!0,e.value=[],n.value=0;for(const c of fn){const a=await Gl(c);e.value.push({name:c,path:a.path,ok:a.ok,status:a.status,ms:a.ms,keys:o(a.data),error:a.error}),n.value+=1}s.value=!1}return vs(l),(c,a)=>(D(),E("section",Oa,[a[3]||(a[3]=i("h2",null,[at("契约自检 "),i("small",null,"(后端结构与算法服务可达性;对拍基准见 docs/接口契约_前后端_v0.1.md)")],-1)),i("p",ja,[at(" 进度 "+p(n.value)+"/"+p(u(fn).length)+' · 只判"通不通",不比数据值(值随数据变,锚点在 Python 侧的门禁里) ',1),i("button",{class:"re",disabled:s.value,onClick:l},"重跑",8,Ha)]),i("table",null,[a[0]||(a[0]=i("thead",null,[i("tr",null,[i("th",null,"接口"),i("th",null,"路径"),i("th",null,"状态"),i("th",null,"耗时"),i("th",null,"顶层键 / 形状")])],-1)),i("tbody",null,[(D(!0),E(it,null,yt(e.value,d=>(D(),E("tr",{key:d.name,class:ee({bad:!d.ok})},[i("td",null,p(d.name),1),i("td",null,[i("code",null,p(d.path),1)]),i("td",null,p(d.status),1),i("td",null,p(d.ms)+" ms",1),i("td",null,p(d.error||d.keys),1)],2))),128))])]),i("p",qa,[at(" 契约登记接口合计 "+p(Object.keys(u(Kl)).length)+" 条(本页抽样 "+p(u(fn).length)+" 条); 全量 42 条由 ",1),a[1]||(a[1]=i("code",null,"python scripts/http_contract_audit.py",-1)),a[2]||(a[2]=at(" 在线复核。 ",-1))])]))}}),Pa={"app.brand":"观澜","app.build":"最新完成构建","app.lang_en":"英文","app.lang_zh":"中文","app.subtitle":"海上风电场","app.title":"观澜 · 风电数据分析与决策支持","ask.common_q":"{cat} · 常用问题 (点即问, 或下方自由输入)","ask.done_meta":"模型 {m} · 用时 {s} 秒 · {n} 步","ask.elapsed":"{s} 秒","ask.empty":"问题为空","ask.en_qa_failed":"英文质检未通过: 已拦截这次模型回答, 请重新提问。","ask.error":"出错: {e}","ask.go":"提问","ask.grounding":"答案句句带 [对象id] 溯源 + 数据回抓校验核验; 判级只转述本体原文带审级, 模型零判级权。","ask.idle":"空闲 — 点常用问题或输入后提问。串行一次一问。","ask.local_down":"本机模型未启动 (Ollama 127.0.0.1:11434 未响应); 离线版不转云","ask.model":"模型","ask.no_models":"无可用模型","ask.offline":"离线版: 模型问答需连接系统。","ask.partial":"初答 · 27B 复核中","ask.placeholder":"自由提问 ({cat})","ask.question":"问题: {q}","ask.refined":"已复核 (默认档 {m} 未过成文校验, 由更强模型重答)","ask.refs.none":"无匹配契约条目 (契约 {sha}): 本回答未被结构化事实契约背书, 按模型输出对待","ask.refs.title":"契约引用 ({n} 条, 契约 {sha}) — 按问题/回答匹配的可交付结论, 引文来自 qa_refs","ask.review":"交叉审核 · {m}","ask.review_err":"审核未完成: {e}","ask.review_note":"由另一模型基于同一份证据复核上述答案。溯源核验仅校验数字与机组号是否越界, 本项校验结论是否有证据支撑。","ask.running":"推理中…","ask.verify_bad":"溯源核验未全过 (引用 {n})","ask.verify_ok":"溯源核验 {n}/{n} 全真","ask.xrev":"交叉审核","ask.xrev_note":"(DeepSeek 14B 互审, +约 1 分钟)","ask.xrev_title":"由另一模型基于同一份证据复核; 同一模型自审无法构成独立校验","asst.alarm_type":"告警类型 {t}","asst.cause_counts":"手册 {r} 次 · 工单 {w} 次 · 涉码 {c}","asst.causes":"← 可能原因 (手册排查方向 + 工单实证)","asst.check":"查什么","asst.code_placeholder":"报警码, 如 3225 / 3130 / 13902","asst.common":"常见","asst.corrective":"抢修","asst.corrective_flow":"报警码 → 失效模式 → 手册分步处置 → 历史工单","asst.drawings":"对应图纸","asst.failmodes":"指向的失效模式","asst.faulttree":"故障树","asst.faulttree_flow":"按证据量排序的系统失效模式 + 部件级成因","asst.fm_counts":"该类本场报警 {a} 条 / 工单 {w} 条","asst.head":"检修助手 — 确定性本体查询","asst.head_note":"结果逐字取自手册与工单, 不经模型","asst.identity":"系统 {sys} · 本场 {n} 条","asst.interval":"周期 {i}","asst.known_tags":"该系统手册出现过的位号 (对图纸时参考):","asst.no_causes":"(手册无该类排查条目 — 原因层待补)","asst.no_name":"(码表未收录)","asst.no_steps":"本码无手册处置条目 (手册覆盖本场 161/322 码) — 需查图纸或联系厂商支持。","asst.node":"节点","asst.nodes":"应检节点 · {c}","asst.nodes_note":"手册此步未给位号 → 按回路构成展开, 逐点查","asst.prev_empty":"(该系统无匹配的年度维护条目 — 维护作业指导书按位置代号编排, 未必逐系统对齐)","asst.prev_fm":"失效模式 (按本场报警量)","asst.prev_head":"{sys} 预防链 · 失效模式 {f} 类 · 预防性任务 {n} 项","asst.prev_tasks":"年度任务","asst.preventive":"预防性维护","asst.preventive_flow":"系统 → 失效模式 → 年度任务 → 作业指导步骤","asst.qty":"量: {q}","asst.query_failed":"查询失败: {e}","asst.querying":"查询中…","asst.spec_name":"名称","asst.spec_no":"参数号","asst.spec_range":"允许范围","asst.spec_val":"整定值","asst.specs":"判定规范 (实机参数表)","asst.step_n":"第 {n} 步","asst.steps":"现场处置 {n} 步","asst.steps_note":"节点部件 = 手册原文元件位号 (确定); 判定规范 = 实机参数表按物理量匹配的候选判据, 非厂商绑定 — 现场以铭牌与图纸复核。","asst.tags":"节点部件","asst.tree_codes":"征兆码 {c}","asst.tree_counts":"本场报警 {a} 条 · 工单 {w} 条","asst.tree_empty":"该系统无失效模式记录","asst.tree_head":"{sys} 故障树 · {n} 个失效模式","asst.tree_note":"一层 = 系统 × 失效类 (归纳自本场码表与工单) · 二层 = 手册排查方向归一 + 工单原因计数; 条长按实证量 (报警条数 + 工单 × 10), 因果来自手册与工单原文非推断, 树深两层不外推。","asst.unassigned":"未归属","asst.wi_steps":"WI {n} 步","asst.wo_action":"处置","asst.wo_fault":"故障","asst.wo_head":"现场实际怎么修的 ({sys} 历史工单 {n} 条, 台账 2020~2024)","asst.wo_note":'工单时间窗止 2024-11-21; 2025–26 现场未提供 ⇒ "0 条" 是记录缺失非未修过。',"attr.变桨与液压":"变桨与液压","attr.塔架/结构":"塔架/结构","attr.无记录停机":"无记录停机","attr.未归类":"未归类","attr.电网/供电(外部)":"电网/供电(外部)","attr.轮毂/叶片":"轮毂/叶片","attr.运维操作":"运维操作","attr.风况(外部)":"风况(外部)","cat.equip":"设备类","cat.equip.hint":"设备状态 / 机制 / 判级 — 从机组档案、对象查询与机制检索取证","cat.equip.q1":"29号机组现在什么状态、为什么、该怎么办?","cat.equip.q2":"全场哪些机组有报警级或定论级判级?逐台列出并注明审级","cat.equip.q3":"失效机制库里有哪些机制族?各涉及哪些机组、状态如何?","cat.loss":"损失分析","cat.loss.hint":"当前 3 个月损失 / 未来损失 — ont_loss / ont_scenario 取证, 金额带电价区间统计方法","cat.loss.q1":"近3个月全场损失结构如何?分状态和分机组说, 电量与金额都给","cat.loss.q2":"29号如果拖到主轴承失效, 未来损失量级是多少?与现在修对比","cat.loss.q3":"限电常态化对检修机会成本有什么影响?","cat.risk":"安全风险预测","cat.risk.hint":"风险敞口 / 劣化趋势 / 盲区 — ont_risk / ont_mechanism_search 取证, 未列 ≠ 正常","cat.risk.q1":"当前哪些机组风险在上升需要重点盯?联动监视读数如何?","cat.risk.q2":'监测有哪些盲区?哪些"没报警"不等于正常?',"cat.risk.q3":"29号轴承正在承受金属接触, 风险敞口怎么评估?","cat.sched":"检修排程决策","cat.sched.hint":"排期沙盘 / 天气窗 / 验收树 — ont_scenario / ont_get 取证","cat.sched.q1":"29号修泵什么时候做最合适?对比各情景的损失与风险","cat.sched.q2":"未来几个月哪些月份适合安排CTV检修和吊装作业?依据历史可作业窗","cat.sched.q3":"29号修好之后按什么判据验收?三分支分别是什么条件?","ch.attrib.none":"无记录 {h}h ({p}%)","ch.attrib.ok":"已归因到部件 {h}h ({p}%)","ch.attrib.uncls":"未归类 {h}h","ch.beta.median":"全场中位 {v}°","ch.blame.d1":"限电与调度令, 不进设备责任","ch.blame.d2":"故障与检修停机, 唯一进设备考核","ch.blame.d3":"正常发电欠发与低风待机","ch.blame.n1":"交易与调度侧","ch.blame.n2":"设备侧","ch.blame.n3":"运行侧","ch.blame.title":"损失 {tot} MWh 按责任归属","ch.cap.legend":"圆内数字 = 台数, 圆面积 ∝ 台数","ch.cap.median":"中位 {v}","ch.cap.p":"满发封顶","ch.cap.w":"转速封顶","ch.ml.legend":"— {s}","ch.pareto.cum80":"累计 80%","ch.pareto.cumtip":"{k} · 累计 {p}%","ch.pareto.key":"关键少数: 前 {k} 项占 80%","ch.pareto.none":"时间窗内无数据","ch.pareto.top3":"前三: ","ch.pareto.total":"共 {n} 项, 合计 {tot}{unit}","ch.pareto.xlab":"报警码 (悬停看全名)","ch.quad.few":"时间窗内码数不足, 不作四象限","ch.quad.q1":"低频长时 · 硬故障","ch.quad.q1s":"备件与检修窗","ch.quad.q2":"高频长时 · 重点治理","ch.quad.q2s":"优先派工","ch.quad.q3":"低频短时 · 本底","ch.quad.q3s":"不单独处置","ch.quad.q4":"高频短时 · 重复触发","ch.quad.q4s":"调整参数或屏蔽, 非硬件故障","ch.quad.tip":"{n} 条 · 单次中位 {med}s · 累计 {h}h · {nt} 台","ch.quad.xlab":"发生条数 (对数)","ch.quad.ylab":"单次中位时长 (对数)","ch.ram.area":"圆面积 = 累计停机时长","ch.ram.equip":"设备类","ch.ram.ext":"外部类","ch.ram.few":"部件数不足, 不作象限","ch.ram.median":"虚线 = 本场中位分界","ch.ram.q1":"常坏且难修","ch.ram.q1s":"最高优先级","ch.ram.q2":"罕发难修","ch.ram.q2s":"备件与作业窗","ch.ram.q3":"频发易修","ch.ram.q3s":"查根因, 换件无用","ch.ram.q4":"少发好修","ch.ram.q4s":"维持","ch.ram.tip":"{p}: 平均无故障间隔(MTBF){mtbf}h · 单次停机时长(MDT){mdt}h · 停机 {h}h · {n}起 · {u}台","ch.ram.tip_ext":" · 外部类不计设备可靠性","ch.ram.xlab":"平均无故障间隔(MTBF,h,对数)→ 越右越可靠","ch.ram.ylab":"单次停机时长(MDT,h)→ 越上越难修","ch.rate.days":"仅{d}天","ch.rate.month":"{m}月","ch.rate.n":"{n}条","ch.rate.tip":"{m}: {v} 条/日 (总 {n} 条, 数据覆盖 {cov}%)","ch.rate.ylab":"条/日","ch.ruler.norm":"正态期望 3.7σ","ch.ruler.row":"{r}σ σ = {s}","ch.wf.act":"实际上网","ch.wf.theo":"理论可发","ch.wf.tip":"{nm}: 损失 {loss} MWh, 占理论 {pct}%, 时长 {h}h","chain.gb":"齿轮箱","chain.gde":"发电机DE","chain.gen":"发电机","chain.gnde":"发电机NDE","chain.hss":"高速","chain.ims":"中间","chain.mba":"主轴承后","chain.mbf":"主轴承前","chain.ps":"行星","cmp.alarm_n":"报警 {a}","cmp.alarm_units":"报警机组","cmp.basis":"依据","cmp.by_system":"按系统查看","cmp.cards_note":"点系统卡 → 该系统全场机组与依据; 九系统 = 交付九分册一一对应; 叶片与叶根 / 塔架与基础无 SCADA 轴 (分册蓝本取 CMS / 巡检)","cmp.counts":"报警 {a} · 不可判 {u} · 良好 {g} · 优秀 {e}","cmp.cross_eyebrow":"多系统交叉机组","cmp.detail":"详情","cmp.detail_head":"{sys} · 全场 {n} 台","cmp.external":"外部","cmp.fleet_n":" · 全场 {n} 台","cmp.fusion_moved":"振动线结论与四源融合已移至独立板块 →","cmp.fusion_n":"({n} 台次收录)","cmp.good_units":"良好 {n} 台 (轻微偏离, 周期观察 — 点开看逐台依据)","cmp.grading_pending":"正在按所选时间窗重算判级…","cmp.grading_pending_why":"时间窗 {span}:变桨/偏航/蓄能/温度四个判级面正按该时间窗重算(首次约 25 秒),下面的系统卡暂时还是上一份统计方法 —— 算完会自动刷新,不会静默混用。","cmp.hit_sys":"命中系统","cmp.n_sys":"系统数","cmp.n_units":"({n} 台)","cmp.none":"本系统全场无非常态。","cmp.problem_page":"该问题页 →","cmp.rel_ev":"事件","cmp.rel_eyebrow":"部件可靠性 · 时间窗 {win}","cmp.rel_fm":"典型失效模式 (按时长)","cmp.rel_h":"停机时长","cmp.rel_head":"部件停机贡献与可靠性","cmp.rel_mdt":"单次停机时长(MDT,h)","cmp.rel_meta":"总停机 {t}h = 设备类 {a} + 外部类 {b}","cmp.rel_mtbo":"平均停机间隔(MTBO,h)","cmp.rel_note":'统计方法 ≥1h 停机段, 不含调度令 — 与"电量算账"里的停机时长{h} 不同, 差额是短于 1h 的停机段 (本页按段做可靠性指标须成段, 能量账按逐条工况态算电量): 两个数都对, 不可互相相减。',"cmp.rel_part":"部件","cmp.rel_units":"影响机组","cmp.unk_n":" · 不可判 {u}","cmp.unk_units":"不可判 (监测/数据不足, ≠ 正常)","cmp.watch_head":"关注机组 (≥2 系统交叉, {n} 台; 点机组号 → 该台独立页)","dec.classic":"维护标准 / 维护框架 / 数据质量三块尚未迁入新版 —","dec.head":"检修决策 · 本体问答 (推理无界, 结论须过校验)","en.balance":"电量平衡","en.blame":"损失责任分账","en.blame_note":'最大一笔是限电不是故障。进设备考核的只有"故障与检修停机" {n} MWh; 限电属交易与调度侧, 2026 起交易策略主导, 少发未必是弃风。',"en.cap_fail":"不通过","en.cap_note":"能量守恒核 · 理论 {op} 全额定上限 {cap}","en.cap_pass":"通过","en.kpi_act":"实际上网 · 等效满发 {h} h","en.kpi_loss":"损失率 · {v} MWh","en.kpi_theo":"理论可发 (实际+损失)","en.loss_mwh":"损失 MWh","en.share":"时长占比","en.state":"工况态","en.states":"工况态明细","en.states_note":"控制参数一致性与曲线欠发筛查在固定干净窗判, 已迁入「发电性能」页 — 本页只出当期电量账。","en.win":"窗 {win}","fig.fleet_median":"全场中位","fig.point":"测点","fig.quartile":"四分位","fig.this_unit":"本台","fig.trend":"趋势","fig.vibbar_note":"条为本台与全场中位之比; 色按 z (稳健离群度): 绿 <2 · 橙 2~3 · 红 ≥3","fig.x_median":"×中位","flt.alarm_face":"报警面","flt.alarm_meta":"{n} 条 · {c} 个码 · 时间窗 {win}","flt.attrib_note":'归因覆盖: "无记录停机" {h}h 是全场最大单项, 因不给 MTBF 而在上图中不出现 — 它不是"没有故障", 是"没归上因"。统计方法为段起点 ±30min 首发码。缺口成因待定: 此前写的"98% 的段在前 72h 内有报警 ⇒ 长停远窗"不成立 — 前 72h 有报警不等于该报警与本段停机有因果 (双模审 2026-08-28 逮)。要定成因须改判"段起止是否落在某条报警的持续区间内", 未做之前只报缺口不报原因。',"flt.block_err":"本块未算出 ({k}): {e}","flt.eyebrow":"故障统计与可靠性","flt.pareto_d":"帕累托 · 按持续时长","flt.pareto_d_note":"时长 = 闩锁统计方法 (复位 − 激活), 只作排序参考不作停机时长","flt.pareto_n":"帕累托 · 按发生条数","flt.pareto_n_note":"条数 = 发生频次, 不反映影响程度 — 高频短时报警码 (信号抖动或重复触发) 排序靠前","flt.per_t":"台级分布 · 报警条数 top{n}","flt.per_t_note":"全场合计 {n} 条 · 单台占比高须先核查是否为单一报警码重复触发","flt.per_t_share":"占全场","flt.quad":"故障模式四象限 · 条数 × 单次时长","flt.quad_note":"时间窗内共 {n} 个码, 图上为条数前 {m} 个。","flt.quad_note2":"点面积表示影响机组数, 大点为批次共性、小点为单台; 竖分界取条数中位, 横分界取 10min (一个 SCADA 采样格)。右下角的码不要按条数排优先级 — 属重复触发, 非硬件故障。上面两张帕累托对照看即此图的两条投影。","flt.quad_partial":"窗含不满月 {m} (覆盖 {c}%), 条数为原始累计未按天归一。","flt.ram":"可靠性 × 可维修性 · 部件象限","flt.ram_note":'按停机时长排序的表看不出这层结构: 同样 500h 的停机, "频发易修"要查根因、"罕发难修"要备件, 处置相反。设备类停机 {a}h / 外部类 {b}h (外部 = 电网·风况·运维操作, 不计设备可靠性)。海上机组 MDT 普遍偏高是交通窗口决定的, 不等于维修本身慢 — 跨场比 MDT 须同为海上。',"flt.rate":"月度故障率","flt.rate_example":"实测: {m} 总数最低但日均 {v} 条/日 = 全时间窗前列。","flt.rate_full":"各月覆盖完整。","flt.rate_note":"柱高 = 日均条数, 不是月总数","flt.rate_partial":"本时间窗 {m} 数据不满月 (灰虚线柱), 直接比月总数会读反。","flt.seasonal":"故障季节性 · top 报警族 × 月","flt.seasonal_note":"全程 19 个月 (跨 2 冬 1 夏); 未做 χ² 显著性检验前为【参考级】, 只看形态不作季节归因","flt.seasonal_unit":"条/月","flt.seasonal_x":"月","flt.stop_face":"停机面","flt.stop_h":"停机时长","flt.stop_meta":"{h}h · {n} 起 · 统计方法 ≥1h 段, 不含调度令","flt.stop_n":"次数","flt.stop_pareto":"停机归因帕累托","flt.stop_pareto_note":"按停机时长; 事件次数见悬停","flt.stop_units":"台级停机 top{n}","flt.stop_units_note":"停机时长高 ≠ 设备差 — 须先看归因里外部类占比 (调度令已剔除)","fus.alarm_n":"{n} 条","fus.alarm_rank":" · 第 {r}/{t}","fus.burst":"⚠ {p}% 是码 {c} 抖动","fus.burst_tip":"⚠ 单码 {c} 占 {p}%, 中位 {m} 秒/次 — 条数被抖动灌满","fus.clear":"× 清除","fus.cms_act":"行动","fus.cms_action":"需行动机组 (报警 / 不可判)","fus.cms_basis":"统计方法说明","fus.cms_basis_note":"本表 = windcms 状态管理判级 (含标量趋势与数据可判性); 融合矩阵 / 逐台结论 = 振动线确诊链转录 (候选以上)。两统计方法差异台: 仅本表列 {a} (多为标量发作 / 数据不可判, 未到确诊链); 仅确诊链列 {b} (预警级在察, 状态管理未升)。","fus.cms_chain":"部件状态链","fus.cms_chain_note":"(主承前 · 主承后 · 齿轮箱 · 发电机; 悬停看逐件等级)","fus.cms_evidence":"证据强度","fus.cms_focus":"状态焦点","fus.cms_focus_note":"(传动链: 主承前 · 主承后 · 齿轮箱 · 发电机两端)","fus.cms_grades":"38 台部件等级一览","fus.cms_head":"振动状态评估 (windcms 报告 {d} 结果转录)","fus.cms_link":"谱图 · 波形 · 判据 · 工作台等分析功能在独立 windcms 系统 →","fus.cms_loading":"载入振动评估结果…","fus.cms_note":"状态管理判级, 不代表确诊数量; 判据/谱线/计算过程不在本页 — 深潜走底部独立系统。","fus.cms_open":"打开 windcms ↗","fus.cms_overall":"综合","fus.cms_static":"(未启动时用静态版)","fus.cms_window":'数据窗 {r} —— 本时间窗**实算**覆盖区间 (窗名只是起始日代号); 页面上的图谱与"末窗"状态取自时间窗内最新记录, 故多显示末期日期。',"fus.col.alarm":"报警","fus.col.claim":"证据时间窗","fus.col.claim_axis":"26-01 → 09","fus.col.display_only":" · 只展示","fus.col.fixed":" · 不随本时间窗","fus.col.lub":"润滑柱塞","fus.col.oil":"油样","fus.col.part":"部件","fus.col.signal":"振动信号","fus.col.state_concl":"设备状态 / 振动结论","fus.col.temp":"温度","fus.col.tempaxis":"温度轴","fus.col.tempaxis_note":"±6 K","fus.col.vib":"振动","fus.col.wo":"工单","fus.ev_code":"码","fus.ev_dur":"累计时长 h","fus.ev_head":"{c} — 报警 {an} 条 / {au} 台 · 工单 {wn} 条 / {wu} 台 (时间窗内)","fus.ev_min":"时长 min","fus.ev_no_alarm":"时间窗内无该部件报警","fus.ev_no_wo":"时间窗内无该部件工单 (工单数据止 2024-11, 2026 类窗必空 = 数据边界)","fus.ev_recent":"最近 {n} 条明细","fus.ev_text":"报警内容","fus.ev_time":"时间","fus.ev_top":"台分布 top: ","fus.ev_units":"台数","fus.ev_win":"时间窗 {win} · 顶部选择器可换","fus.ev_wo_act":"处理","fus.ev_wo_cause":"原因","fus.ev_wo_name":"故障名称","fus.eval_head":"评价体系 (规范化定义 — 两轴并存, 不可互相替代)","fus.eval_meaning":"含义","fus.eval_note":'设备状态答"这台设备现在怎么样" (危险 > 报警 > 良好 > 优秀 > 不可判); 证据状态答"这个判断有多可信" (定论 → INSUFFICIENT)。设备状态一律取自振动线的判级栏这一个来源。本页判级为转录, 不产新判级; 标注为参照同型机组/频谱信号级 (未定位到具体零件)/测量链/未对应到具体部件的行不作部件级结论消费; claim_window = 该结论的证据时间窗, 窗外状态该结论不背书。',"fus.eval_state":"设备状态 (业主统计方法)","fus.eval_tier":"证据状态 (可信度)","fus.eyebrow":"振动与 SCADA 证据视图 · 展示振动结论、SCADA 指标、报警与工单线索","fus.fam_tip":"{n} 条 · 全场最多 {m} 条","fus.legend_note":'两轴不可互相替代: "候选"说的是可信度不是设备好坏; "良好"说的是设备状态不是证据强度。设备状态只取自振动线的判级栏这一个来源。',"fus.legend_state":"格子颜色 = 设备状态 (业主统计方法, 与 windcms 报告同一套):","fus.legend_tier":"徽章 = 证据状态 (可信度, windcms 九枚举):","fus.loop_ba":"换前 → 换后 (同标尺)","fus.loop_bound":"数据边界: {b}","fus.loop_closed":"已闭环 · 换件后恢复 ({n} 例)","fus.loop_date":"换件日","fus.loop_el":"早期 → 近期 (同标尺)","fus.loop_head":"维修后验证案例 (检出 → 换件 → 恢复)","fus.loop_item":"事项","fus.loop_neg":"负面对照: 工单后持平 {n} 例 (换件 ≠ 必然回落, 说明回落非巧合)。","fus.loop_none":"暂无端到端闭环证据:现场提交的振动数据包里没有「报警→检修→复测」的成对记录","fus.loop_note":"有换件记录且同一统计方法指标回落, 可作为检测链已闭合的案例; 指标仍在上升但缺少可匹配工单的机组, 需现场或台账确认后再关闭。","fus.loop_ratio":"恢复比","fus.loop_rising":"未闭环 · 指标上升待现场/工单确认 ({n} 台)","fus.loop_state":"状态","fus.loop_verdict":"判","fus.loop_x":"倍比","fus.lub_now":"润滑柱塞现状","fus.lv.bad":"定论/报警级","fus.lv.note":"候选/监视/观察级","fus.lv.ok":"销案/无新证","fus.lv.warn":"预警级","fus.m.bad":"异常严重, 建议尽快停机检查","fus.m.bad_e":"证据: 已定案","fus.m.ex":"未见异常, 保持常规监视","fus.m.ex_e":"证据: 仅记录 / 已取消","fus.m.ok":"轻微偏离, 记录观察","fus.m.ok_e":"证据: 待现场核实 / 已记为基线下窗观察","fus.m.unk":"数据不足或监测中断 — 不等于正常","fus.m.unk_e":"证据: 数据不足","fus.m.warn":"存在需现场核实或处置的异常","fus.m.warn_e":"证据: 基本确认 / 新出现待核实","fus.matrix_foot":'润滑柱塞各台设定本就不同 (全场单次循环 22~961 秒), 所以此列只展示不判级, 只有已定案的机制链才标色; 油液多数台末次取样距今超 12 个月, 此列看的是"样够不够新", 不代表当前状态。',"fus.matrix_head":"全场融合矩阵 (38 台 × 6 个证据面)","fus.matrix_note1":'各列取数窗口不同 (见列头) — 不同窗的两格同时发红不等于"同时发生", 不可当共时印证。',"fus.matrix_note2":'每格右侧曲线 = 逐月记忆轨迹 ({n} 个月, {m0} 起; 实心点 = 现窗) — 现窗快照会丢形态, 轨迹才看得见"塌→回升→翻转"类机制签名。',"fus.no_alarm":"时间窗内无报警","fus.none_word":"无","fus.oil_fresh":"近共时","fus.oil_none":"无样","fus.oil_stale":"stale > 12 个月","fus.rule1":"① 同一失效机制的多个观测面 ≠ 多源印证 — 融合禁按源数加权 (29# 柱塞/温度/振动稳态/振动瞬态 = 四个观测面一条机制链)。","fus.rule2":'② "没报警" ≠ "正常" — 在已知盲区上, 缺报警只说明监测面无效, 不说明设备无恙。',"fus.rules_head":"两条判读纪律 (随板块常显)","fus.short.nodata":"数据不足","fus.short.normal":"正常","fus.short.nosample":"未取样","fus.short.stale":"样龄过期","fus.short.uneval":"未评估","fus.short.unlisted":"未收录","fus.sub.portal_cms":"振动 CMS","fus.sub.cms":"振动分析","fus.sub.events":"报警工单","fus.sub.loop":"端到端闭环","fus.sub.matrix":"融合矩阵","fus.sub.units":"逐台情况","fus.temp_now":"温度轴现状","fus.tip_state":" — 设备状态 {s}","fus.tip_tier":" / 证据状态 {e}","fus.unavailable":"融合面数据不可用: {e}","fus.units_filter":" · 筛选: {l}","fus.units_head":'逐台情况 (全场 {u} 台 / {n} 台次{f}; 深入谱图/波形 → "振动分析")',"fus.unlisted_head":"未列机组 {n} 台 (振动线未收录 — 未列 ≠ 正常)","fus.unlisted_link":"未列 {n} 台","fus.win_n":"{n} 个窗段","fus.win_none":"未标窗","fus.wo_n":"{n} 单","fus.wo_none":"时间窗内无传动链工单","gen.beta":"桨距调度同档差","gen.beta_note":"同一功率档下的桨角与全场中位之差。{units} 偏离达中位的 {k} 倍 → {v}","gen.cands":"曲线欠发筛查","gen.cands_meta":"{note} · σ = {s}%","gen.cap":"封顶参数落位","gen.cap_note":"台数落在几个离散位置上, 不是连成一片 — 这是配置/版本差异的形状; 磨损或工况引起的会是连续散布。两轴各自成组且分组不同台 ⇒ 参数级差异, 成因须配置台账。","gen.ctrl":"控制参数一致性","gen.ctrl_win":"窗 {win}","gen.eyebrow":"特性曲线与控制参数","gen.figs":"七个镜头 · 逐档中位与同型机群残差","gen.fixed_win":"随上方时间窗 · 按时间窗重算","gen.loading":"正在计算七个镜头 (剥限电 · 逐档中位 · 同型机群残差)…","gen.no_cands":"无候选","gen.recomputing":"正在按所选时间窗重算七镜头…","gen.recomputing_short":"正在按窗重算…","gen.ruler":"尺子巡检 · 极差 ÷ σ","gen.ruler_note":"判据自身的分辨力。38 台正态抽样的极差期望约 3.7σ, 明显超出即分布非单峰 — 与左图的分组互为印证; 落在期望附近的轴 (额定桨角) 则是连续分布。","gen.win_range":"时间窗 {span}","gen.win_why":'七镜头与月度时序都按所选时间窗重算(含自定义起止日期)。提示:2025-07 ~ 2025-12 是"限电前干净判别窗"——2026 起交易策略主导,曲线含策略性少发,作设备判据时须注意;选到含 2026 的窗时该影响存在但不再遮掩。',"kpi.alarm_units":"九系统有报警的台数 / 全场","kpi.alarm_units.hint":"统计方法: 九系统 (叶片与叶根/变桨/偏航/齿轮箱/发电机/主轴承/变流器/塔架与基础/主控与传感网) 中任一被判「报警」即计一台。与下方「全场状态」格的统计方法不同 —— 那里按每台 振动/温度/润滑/油液/报警/工单 六列取最严一级, 所以两处数字可以不同, 不是矛盾。","kpi.avail":"时间可用率 (不含调度令) · {win}","kpi.curtail":"限电·绑定 电量损失","kpi.downtime":"停机时长 · {n} 起","kpi.loss":"停机电量损失 · {win}","kpi.loss_dispatch":"另调度令 {n}","kpi.mtbo":"平均停机间隔(MTBO;非行业 MTBF)","loss.curtail_bound":"限电 (命令与实际功率对得上)","loss.curtail_unbound":"限电命令期 · 功率未被压制","loss.dispatch":"调度令停机","loss.lowwind":"低风待机","loss.normal":"正常发电时的欠发","loss.stop":"故障与检修停机","mdl.cloud":"云端","mdl.deepseek-chat.nm":"DeepSeek","mdl.deepseek-chat.t":"约 3 到 10 秒","mdl.deepseek-r1:14b.nm":"本机 DeepSeek 14B · 审核档","mdl.deepseek-r1:14b.t":"约 1 到 3 分钟","mdl.deepseek-r1:32b.nm":"本机 DeepSeek 32B","mdl.deepseek-r1:32b.t":"约 3 到 8 分钟","mdl.deepseek-v4-pro.nm":"云端 DS","mdl.deepseek-v4-pro.t":"约 2 到 6 分钟","mdl.kimi-fast.nm":"Kimi","mdl.kimi-fast.t":"约 5 到 20 秒","mdl.local":"本地","mdl.outbound_warn":"内容会外发到模型厂商, 场名与台号已去标识化","mdl.qwen-plus.nm":"通义千问","mdl.qwen-plus.t":"约 5 到 20 秒","mdl.qwen3.8:27b.nm":"标准 27B · 复杂题","mdl.qwen3.8:27b.t":"约 2 到 4 分钟","mdl.qwen3:30b-a3b.nm":"快 30B (a3b)","mdl.qwen3:30b-a3b.t":"约 20 到 60 秒","mdl.qwen3:8b.nm":"轻量 8B · 默认","mdl.qwen3:8b.t":"约 30 到 60 秒","mdl.unknown_warn":"未知档位, 按内容会外发处理","mdl.zero_outbound":"全程零外发","mt.cov":"当前覆盖","mt.eyebrow":"系统维护 · 数据输入与更新端口","mt.fail":"盘点失败: {e}","mt.freq":"频率","mt.head":"数据维护面 · {n} 个源","mt.how":"补数据怎么做","mt.last":"末次更新","mt.layer_data":"数据层","mt.layer_data_note":"随运营滚动 — 新数据到位后跑摄入, 本体与判级自动刷新","mt.layer_mech":"机理层","mt.layer_mech_note":"相对稳定 — 换厂商资料或现场反馈修正时才动; 它是判据的地基, 变更须过审","mt.note":'每个源给出: 当前覆盖 / 末次更新 / 约定位置 / 摄入命令 / 更新频率 / 责任方。要补数据就把新文件放到"约定位置"再跑"摄入命令"。',"mt.put":"放到:","mt.resp":"责任","mt.rows_n":" ({n} 条)","mt.run":"跑:","mt.src":"源","mt.surveying":"盘点中…","ov.all_steps_done":"已走完(待验收)","ov.attention":"需要关注","ov.attention_n":"{n} 台","ov.basis_fusion":"本台依据来自融合面(九系统判级无「报警」行):部件 {part} · 链路走到第 {done}/{n} 步 · 卡在「{stuck}」 · 证据源 {srcs}","ov.caveat":"限定","ov.evidence":"查看完整依据","ov.fus_gap_hint":"这一面(需要关注 / 全场状态)取数来自融合面;缺件时如实为空,不从交付包补齐。在本机放好原始件后跑一次重算即会由观澜自己的生成端补上(scripts/rudong_fusion_handoff.py,见 docs 的「源代码化清单」)。","ov.illustrative":"示意数据","ov.no_srcs":"无(该台无外部证据源)","ov.quiet":"其余 {n} 台未进入优先关注清单;设备状态请查看全场状态评估。","ov.quiet_all":"当前优先关注清单为空;{n} 台机组的设备状态请查看全场状态评估。","ov.ranked_by":"按 设备状态 × 证据量 排序","ov.strip":"全场状态","ov.strip_hint":"一格一台 · 点格定位","ov.systems":"九系统","ov.systems_hint":"点系统看逐台依据","pop.acts":"动作统计","pop.close":"关闭","pop.loading":"载入中…","pop.none":"本时间窗无记录","pop.o_act":"处置","pop.o_cause":"原因","pop.o_check":"排查","pop.o_date":"日期","pop.o_fault":"故障","pop.o_kind":"类别","pop.orders":"工单 {n} 单","pop.orders_none":"时间窗内无工单","pop.orders_one":"工单 1 单","pop.problem":"{u} · {sys}","pop.unit":"{u} · 全部问题","rpt.attrib.note":'"无记录停机"不是没有故障, 是没归上因。',"rpt.attrib.title":"归因覆盖","rpt.aud_in":"场站内部 (全量)","rpt.aud_up":"上报集团 (脱敏)","rpt.b.attrib.d":"已归因 vs 无记录停机的占比 — 无记录不等于没有故障","rpt.b.attrib.nm":"归因覆盖","rpt.b.blame.d":'交易调度侧 / 设备侧 / 运行侧 三段占比 — 回答"谁的责任"',"rpt.b.blame.nm":"损失责任分账","rpt.b.caliber.d":"统计期 / 残月 / 工单时间窗 / 判级性质 — 建议常驻, 没有边界的数字堆不能作汇报依据","rpt.b.caliber.nm":"统计方法与适用边界","rpt.b.chain.d":"证据→机制→判级→排期→动作→验收 六步的瓶颈分布","rpt.b.chain.nm":"决策链进度","rpt.b.emon.d":"逐月上网 / 损失 / 损失率 / 等效满发, 含数据覆盖率","rpt.b.emon.nm":"逐月发电表","rpt.b.frate.d":"按天归一的日均条数, 数据不满月单独标注","rpt.b.frate.nm":"月度故障率","rpt.b.kpi.d":"六个核心数: 上网电量 / 等效满发 / 可用率 / 损失率 / 停机间隔 / 需行动台","rpt.b.kpi.nm":"一级指标","rpt.b.loop.d":"检出 → 换件 → 复测回落的历史例证, 证明这条链是通的","rpt.b.loop.nm":"闭环实证","rpt.b.narr.d":"模型基于实测数据生成的运行总结 — 为图表补充文字结论, 供汇报使用","rpt.b.narr.nm":"运行总结","rpt.b.pareto.d":"按条数降序 + 累计 80% 线, 找关键少数","rpt.b.pareto.nm":"故障帕累托","rpt.b.parts.d":"逐部件停机时长 / 事件数 / 平均无故障间隔(MTBF)/ 单次停机时长(MDT)/ 影响机组数","rpt.b.parts.nm":"部件停机表","rpt.b.plan.d":"由数据推出的行动项, 不是套话","rpt.b.plan.nm":"下期建议","rpt.b.quad.d":"条数 × 单次时长, 区分重复触发与实际停机 — 按条数排序会误定优先级","rpt.b.quad.nm":"故障四象限","rpt.b.ram.d":'平均无故障间隔(MTBF)× 单次停机时长(MDT)部件象限, 分出"频发易修"与"罕发难修", 处置方向相反',"rpt.b.ram.nm":"可靠性象限","rpt.b.units.d":"需跟踪台的部件 / 证据源 / 六步进度 / 卡在哪一步","rpt.b.units.nm":"重点机组","rpt.b.water.d":"理论可发 → 逐段扣损 → 实际上网, 用于定位电量流向","rpt.b.water.nm":"能量瀑布","rpt.blame.cal":"工况态分解 + 限电命令面绑定判别; 平均出力=实发÷台时, 用作风资源代理量","rpt.blame.note":'进设备考核的只有"故障与检修停机"; 限电属交易与调度侧。',"rpt.blame.note2":'限电不是"低风时段收到的空令": 限电·绑定时段平均出力 1.435 MW, 正常发电时段 1.412 MW, 比值 1.02 — 风况相同而出力被压, 说明限电是真压制; 但"限电命令期·功率未被压制"那一档平均出力仅 0.724 MW (18% 额定), 确属低风时段收令。',"rpt.blame.title":"损失责任分账","rpt.cal.deid":"脱敏","rpt.cal.deid_d":"上报版隐去判据门槛与特征频率","rpt.cal.denom":"可用率与损失率分母不同","rpt.cal.denom_d":'可用率分母剔除低风待机与调度令(问"该发时能不能发"), 损失率分母含全部时段(问"理论能发多少"); 同一低风时段在可用率里不计时间、在损失率里计入基数 — 这是两个指标的设计差异不是错, 但两者不可直接相乘或互推。低风待机对损失的贡献仅 118 MWh(0.5%)',"rpt.cal.partial":" — {m} 数据不满月(覆盖 {c}%), 月度已按天归一","rpt.cal.period":"统计期","rpt.cal.rating":"判级","rpt.cal.rating_d":"由振动/温度/润滑/油液四源融合得出; 行动等级由综合报告出具","rpt.cal.stop":"停机","rpt.cal.stop_d":"可靠性统计方法 ≥1h 段, 电量账为逐条工况态 — 两个数都对, 不可相减","rpt.cal.title":"统计方法与数据边界","rpt.cal.wo":"工单","rpt.cal.wo_d":"台账 2020~2024-11, 本报告不对本期检修执行下结论","rpt.caliber_lbl":"统计方法: ","rpt.chain.cal":"「动作」一列不可判 — {b}","rpt.chain.note":"六步: 证据 → 机制 → 判级 → 排期 → 动作 → 验收。当前 {s}。","rpt.chain.title":"决策链进度","rpt.chapters":"{n} 个章节","rpt.cloud_note":"; 内容会外发到模型厂商","rpt.compose":"生成","rpt.compose_fail":"生成失败: {e}","rpt.composed":"已按需求编排 {n} 块{narr} · {m} 用时 {s}s","rpt.composing":"模型编排中… 挑组件 + 写总结","rpt.emon.act":"上网 MWh","rpt.emon.cal":"覆盖率<50% 的月不参与环比","rpt.emon.cov":"覆盖","rpt.emon.eflh":"等效满发 h","rpt.emon.loss":"损失 MWh","rpt.emon.m":"月","rpt.emon.partial":" 不满月","rpt.emon.pct":"损失率","rpt.emon.title":"逐月发电","rpt.empty_canvas":"画布是空的 — 先从组件库选内容","rpt.export_docx":"导出 Word","rpt.export_xlsx":"导出 Excel","rpt.eyebrow":"汇报定制 · 画布","rpt.facts.agg":"聚合层","rpt.facts.sub":"{n} 条, 契约 {sha}; 数据/时间窗/结论只经契约更新","rpt.facts.sys":"系统","rpt.facts.text":"结论","rpt.facts.title":"可交付级结论 · 契约生成","rpt.facts.verdict":"裁决","rpt.foot_asof":"出件 {d}","rpt.foot_deid":"判据门槛与特征频率已脱敏","rpt.foot_src":"数据源 SCADA 10min · 报警事件 · 工单台账 · CMS 振动 · 油液化验","rpt.foot_trace":"结论可回溯至本体对象","rpt.frate.cal":"不满月按天归一","rpt.frate.note":"柱高=日均条数, 不是月总数。","rpt.frate.title":"月度故障率","rpt.g.end":"收尾","rpt.g.flt":"故障","rpt.g.gen":"发电","rpt.g.rel":"可靠性","rpt.g.unit":"机组","rpt.grounded":"数字全部接地","rpt.hint_idle":"悬停查看组件说明 · 已选组件再次点击移出 · 右侧 ↑↓ 调整顺序","rpt.kpi.act":"上网电量","rpt.kpi.action":"需行动机组","rpt.kpi.action_n":"定论 {a} · 预警 {b} · 候选 {c}","rpt.kpi.annual":"年化约 {v} h","rpt.kpi.avail":"时间可用率","rpt.kpi.avail_n":"不含调度令与低风待机","rpt.kpi.eflh":"等效满发小时","rpt.kpi.loss":"损失率","rpt.kpi.mom":"环比 {v}%","rpt.kpi.mom_na":"环比不可比(末月不满)","rpt.kpi.mtbo":"平均停机间隔","rpt.kpi.mtbo_n":"停机 {n} 起 · 单次均 {h}h","rpt.kpi.theo":"理论可发 {v}","rpt.library":"组件库","rpt.library_note":"点击加入报告, 再次点击移出 · 画布里已有 {n} 块","rpt.local_note":"; 数据不出本地","rpt.loop.cal":"振动标量前后对比","rpt.loop.comp":"部件","rpt.loop.date":"换件日期","rpt.loop.note":"这几台正是算法当初的检出台 ⇒ 故障前能看见、换件后能看见恢复。","rpt.loop.post":"换后","rpt.loop.pre":"换前","rpt.loop.ratio":"比值","rpt.loop.title":"端到端闭环实证","rpt.narr.cal":"模型 {m} 生成 · 数字取自系统实测摘要 · 数据回抓校验{g}","rpt.narr.empty":"还没有生成 — 在上面的交互窗输入报告要求。","rpt.narr.g_n":"报 {n} 处待核","rpt.narr.g_ok":"全通过","rpt.narr.title":"运行总结","rpt.narr.ungr":"⚠ 以下数值由模型自行推算, 不在原始数据摘要中, 引用前须核对: {v}","rpt.narr_plus":" + 一段运行总结","rpt.need_empty":"先输入报告要求","rpt.need_head":"输入报告要求","rpt.need_hint":"模型依据需求选取组件, 并基于实测数据生成运行总结","rpt.need_ph":"例如: 上报集团月报, 侧重设备可靠性与重点机组","rpt.no_compose":"本部署未启用编排接口, 画布仍可手动拼装","rpt.no_models":"本部署未配置任何模型密钥, 编排不可用","rpt.paper_sub":"统计期 {win} | {n} 台","rpt.paper_title":"运行分析报告","rpt.pareto.cal":"报警事件表","rpt.pareto.title":"故障帕累托","rpt.parts.cal":"归因=段起点±30min 首发码","rpt.parts.ev":"事件","rpt.parts.ext":" (外部)","rpt.parts.h":"停机h","rpt.parts.mdt":"单次停机时长(MDT,h)","rpt.parts.mtbf":"平均无故障间隔(MTBF,h)","rpt.parts.part":"部件","rpt.parts.title":"部件停机","rpt.parts.units":"影响机组","rpt.plan.1":'补机制定性 — {n} 台停在"判了级但根因未定", 是当前最大单一瓶颈',"rpt.plan.2":"回收 25~26 工单 — 台账止 2024-11, 本期检修执行与闭环无法自动判定","rpt.plan.3":"油液采样节奏 — 四源里油液长期 stale, 只能作回测锚","rpt.plan.4":"限电侧 — 损失六成在交易与调度侧, 设备侧改善空间有限","rpt.plan.cal":"建议级 — 排期与动作须经审批","rpt.plan.title":"下期计划与建议","rpt.preset.blank":"空白画布","rpt.preset.month":"月度运行分析","rpt.preset.topic":"设备专题","rpt.preset.week":"周报","rpt.preset.year":"年度总结","rpt.presets":"预设","rpt.preview_empty":"文档预览窗 — 从上面的组件库点选内容, 此处显示报告预览","rpt.print":"打印 / 存 PDF","rpt.quad.cal":"纵界=10min(一个SCADA采样格)","rpt.quad.note":"右下角报警码属重复触发, 不应按条数排定优先级。","rpt.quad.title":"故障模式四象限","rpt.ram.cal":"SCADA ≥1h 停机段, 不含调度令; 海上 MDT 含交通窗口","rpt.ram.note":"设备类 {a}h / 外部类 {b}h (电网·风况·运维操作不计设备可靠性)","rpt.ram.title":"可靠性 × 可维修性","rpt.ungrounded_n":"{n} 个数字待核","rpt.units.at":"卡在","rpt.units.cal":"四源融合判级","rpt.units.clear":"全通","rpt.units.ev":"部件与证据","rpt.units.head":"需跟踪 {n} 台 / {tot} | 瓶颈 ","rpt.units.prog":"进度","rpt.units.rising":"在升 {r}×","rpt.units.state":"状态","rpt.units.stuck":"{n} 台卡在「{s}」","rpt.units.title":"重点机组与处置","rpt.up_note":"上报版 — 判据门槛与特征频率已脱敏","rpt.up_tag":"上报版","rpt.water.cal":"SCADA 10min 工况态分解; 损失=同工况理论出力与实测之差。量级自检为防虚高的下限校验, 不是风资源判据","rpt.water.cap_bad":"量级自检: 理论 ≥ 全额定上限 {cap} MWh ✗ 数字不可信","rpt.water.cap_ok":"量级自检: 理论低于全额定上限 {cap} MWh ✔","rpt.water.note":"理论可发 {theo} = 上网 {act} + 损失 {loss} MWh ({pct}%)","rpt.water.title":"发电完成情况","rv.advci":"AdvCI","rv.dual":"双模型审","rv.lite":"lite","rv.none":"未审","st.bad":"危险","st.excellent":"优秀","st.ok":"良好","st.ok_excellent":"良好 / 优秀","st.unk":"不可判","st.warn":"报警","step.acceptance":"验收","step.action":"动作","step.evidence":"证据","step.mechanism":"机制","step.rating":"判级","step.schedule":"排期","step.site_records":"现场记录","step.stuck_at":"卡在「{step}」","sys.blade":"叶片与叶根","sys.control":"主控与传感网","sys.converter":"变流器","sys.gearbox":"齿轮箱","sys.generator":"发电机","sys.main_bearing":"主轴承","sys.other":"其他","sys.pitch":"变桨","sys.tower":"塔架与基础","sys.yaw":"偏航","tab.assistant":"检修助手","tab.component":"部件问题","tab.decision":"检修决策","tab.energy":"电量算账","tab.fault":"故障统计","tab.generation":"发电性能","tab.ontology":"本体","tab.overview":"总览","tab.report":"汇报定制","tab.system":"系统维护","tab.vibration":"振动融合分析","tier.candidate":"候选","tier.candidate.s":"候选","tier.candidate_baseline":"候选·记基线","tier.candidate_baseline.s":"候选·记基线","tier.candidate_new":"候选·新发","tier.candidate_new.s":"候选·新发","tier.confirmed":"定论","tier.confirmed.s":"定论","tier.detail.不可判":"不可判","tier.detail.仲裁输入":"仲裁输入","tier.detail.优":"优","tier.detail.优秀":"优秀","tier.detail.传感器项":"传感器项","tier.detail.候选":"候选","tier.detail.候选·监视(复发)":"候选·监视(复发)","tier.detail.候选·跟踪":"候选·跟踪","tier.detail.危险":"危险","tier.detail.可降":"可降","tier.detail.复发候选(两轴合并)":"复发候选(两轴合并)","tier.detail.定论":"定论","tier.detail.弱同向新证":"弱同向新证","tier.detail.报":"报","tier.detail.报警":"报警","tier.detail.本体无新证":"本体无新证","tier.detail.正常":"正常","tier.detail.正样本":"正样本","tier.detail.温度单轴保留":"温度单轴保留","tier.detail.监视":"监视","tier.detail.监视(不开箱)":"监视(不开箱)","tier.detail.良":"良","tier.detail.良好":"良好","tier.detail.蓄能失效候选(定向查)":"蓄能失效候选(定向查)","tier.detail.观察":"观察","tier.detail.观察(发电机侧)":"观察(发电机侧)","tier.detail.记基线观察":"记基线观察","tier.detail.销案(定论)":"销案(定论)","tier.detail.降观察":"降观察","tier.detail.预警":"预警","tier.detail.预警·处置升急":"预警·处置升急","tier.detail.预警·处置规划":"预警·处置规划","tier.insufficient":"不足","tier.insufficient.s":"不足","tier.near":"准定论·预警","tier.near.s":"准定论","tier.normal":"正常","tier.normal.s":"正常","tier.reference":"参考","tier.reference.s":"参考","tier.withdrawn":"撤回","tier.withdrawn.s":"撤回","ui.all":"全部","ui.back_portal":"← 返回门户","ui.back_to":"← 返回{tab}","ui.collapse":"收起","ui.count":"条数","ui.data_hidden":"({n} 处数据文本尚无英文,需复核)","ui.date":"日期","ui.empty":"无数据","ui.error":"出错了","ui.expand":"展开","ui.loading":"载入中…","ui.not_ported":"本页尚未迁入新版。","ui.not_recorded":"台账未填","ui.open":"查看 →","ui.open_classic":"在经典版打开 →","ui.query":"查询","ui.reselect":"重新选择机组 / 测点","ui.retry":"重试","ui.system":"系统","ui.unit":"机组","ui.units":"机组","ui.verbatim":"原始记录 (中文)","ui.verbatim_note":"{n} 处为手册/工单原文, 无英文译本, 按原文转录。","unit.h":"h","unit.n":" 条","unit.units":"台","vp.(振动线未收录)":"(振动线未收录)","vp.主轴承(后)+集中润滑泵":"主轴承(后)+集中润滑泵","vp.发电机(引用同族, 见族主台)":"发电机(无本台独立证据, 参照同型机组)","vp.发电机(未映射)":"发电机(未对应到具体部件)","vp.发电机DE":"发电机DE","vp.发电机DE+NDE(两端)":"发电机DE+NDE(两端)","vp.发电机NDE":"发电机NDE","vp.齿轮箱(未映射)":"齿轮箱(未对应到具体部件)","vp.齿轮箱(测量链问题, 非部件)":"齿轮箱(测量链问题, 非部件)","vp.齿轮箱(谱线级, 未映射到部件)":"齿轮箱(频谱信号级 (未定位到具体零件), 未对应到具体部件)","vp.齿轮箱中间轴":"齿轮箱中间轴","vp.齿轮箱二级行星内齿圈":"齿轮箱二级行星内齿圈","vp.齿轮箱高速轴":"齿轮箱高速轴","win.2025H2":"2025H2","win.2026":"2026年","win.2026H1":"2026H1","win.30d":"近30日","win.90d":"近90日","win.all":"全程","win.apply":"应用","win.bad_order":"开始日期不能晚于结束日期","win.banner":"时间窗 {win} · 本页全部数字随上方时间窗切换","win.custom":"自定义","win.custom_hint":"自定义起止日期(含两端)。日粒度件(判级/停机台账/曲线)按日精确;月度聚合件按所跨月份取整,图上会写明。","win.custom_sel":"自定义 {a} ~ {b}","win.from":"开始日期(含)","win.label":"时间窗","win.months":"按月","win.need_both":"请把开始与结束日期都选上","win.partial":"时间窗内 {m} 数据不满月 (覆盖 {c}%), 月度图已按天归一","win.presets":"预设时间窗","win.through":"至{date}","win.to":"结束日期(含)","tab.documents":"交付文档","tab.recalc":"数据重算","doc.eyebrow":"交付文档","doc.loading":"正在读取交付文档…","doc.head":"交付文档 ({n})","doc.note":"交付文档随包提供;下载后可离线查阅。","doc.name":"文档","doc.size":"大小","doc.get":"获取","doc.download":"下载","rc.eyebrow":"数据重算","rc.loading":"正在读取重算状态…","rc.running":"重算进行中","rc.idle":"当前空闲","rc.note":"重算链按步执行;本页每 5 秒刷新状态与日志尾部。","rc.since":"开始于","rc.start":"开始重算","rc.log":"重算日志(尾部)","rc.empty":"(暂无日志)","tab.portal":"门户栏目","pt.eyebrow":"门户栏目","pt.head":"重构前门户上的栏目(已迁移 / 可达)","pt.note":"总览、振动·CMS、交付文档、数据重算已迁为页签;系统架构/方法/经验发现/案例·液压 见「架构与资料」页签;下列两项为在线服务入口。","pt.col":"栏目","pt.what":"说明","pt.open":"打开","pt.kind_portal":"门户存档页(release/portal.html 经网关 /portal 伺服)","pt.kind_svc":"在线服务(经网关)","tab.portal_sec":"架构与资料","ps.eyebrow":"系统架构 · 方法 · 经验发现 · 案例·液压","ps.missing":"该节内容未抽取到(请检查 v2.9.2 门户原文)。","tab.portal_src":"门户","pv.eyebrow":"观澜门户(Vue 装配 · v2.9.2 原文外壳与内嵌件)","pv.loading":"正在装配门户(外壳 + 内嵌件)…","pv.assembled":"门户已装配:内嵌件 {n} 件(外壳与内嵌件均取自 v2.9.2 原文)"};function r(t,e){let s=Pa[t]??t;if(e)for(const[n,o]of Object.entries(e))s=s.split(`{${n}}`).join(String(o));return s}const Ba=["overview","energy","component","vibration","generation","fault","decision","assistant","report","system","documents"],Mn=["overview","energy","component","fault","vibration","generation","decision","assistant","system","report","documents"],Ra={class:"eyebrow"},Ia={key:0,class:"panel"},Na={class:"small",style:{color:"var(--critical)"}},za={key:1,class:"panel"},Wa={class:"small muted"},Ua={class:"panel mb"},Va={class:"small muted"},Ka={class:"panel mb"},Ga={class:"tblwrap"},Ya={style:{"margin-top":"4px"}},Ja={style:{width:"60%"}},Xa={style:{width:"16%"}},Za={style:{width:"24%"}},Qa={class:"small"},tc={class:"small num"},ec={class:"small"},sc=["href","download"],nc=Ut({__name:"Documents",setup(t){const e=kt(null),s=kt(""),n=o=>o>=1048576?(o/1048576).toFixed(1)+" MB":Math.max(1,Math.round(o/1024))+" KB";return vs(async()=>{try{const l=await(await fetch("/api/delivery_docs")).json();l&&l.error?s.value=String(l.error):e.value=l&&l.docs||[]}catch(o){s.value=String(o&&o.message||o)}}),(o,l)=>(D(),E("section",null,[i("div",Ra,p(u(r)("doc.eyebrow")),1),s.value?(D(),E("div",Ia,[i("p",Na,p(s.value),1)])):e.value?(D(),E(it,{key:2},[i("div",Ua,[i("h3",null,p(u(r)("doc.head",{n:e.value.length})),1),i("p",Va,p(u(r)("doc.note")),1)]),i("div",Ka,[i("div",Ga,[i("table",Ya,[i("tr",null,[i("th",Ja,p(u(r)("doc.name")),1),i("th",Xa,p(u(r)("doc.size")),1),i("th",Za,p(u(r)("doc.get")),1)]),(D(!0),E(it,null,yt(e.value,c=>(D(),E("tr",{key:c.name},[i("td",Qa,p(c.name),1),i("td",tc,p(n(c.size||0)),1),i("td",ec,[i("a",{href:c.url,download:c.name},p(u(r)("doc.download")),9,sc)])]))),128))])])])],64)):(D(),E("div",za,[i("p",Wa,p(u(r)("doc.loading")),1)]))]))}}),oc={class:"portal-full"},lc={key:0,class:"portal-loading"},hn="/web/portal/",rc=Ut({__name:"PortalView",setup(t){const e=kt(null),s=kt("loading"),n=kt("");async function o(a){const d=await fetch(a);if(!d.ok)throw new Error(a+" "+d.status);return await d.text()}vs(async()=>{try{let a=await o(hn+"shell.html");const d=a.match(/<title[^>]*>([^<]*)<\/title>/i);d&&d[1].trim()&&(document.title=d[1].trim());const g=Array.from(a.matchAll(/<!--@TEMPLATE:([^>]+?)-->/g)).map(x=>x[1]);g.forEach(x=>{a=a.replace("<!--@TEMPLATE:"+x+"-->",'<template id="'+x+'"></template>')});try{const x=await o(hn+"governance_sources.json");a=a.replace("<!--@GOVERNANCE_SOURCES-->",x.replace(/</g,"\\u003c"))}catch{}const f=[[/<a([^>]*?)href="#cms"/g,'<a$1target="_top" href="/detail/v2#tab=vibration"'],[/<a([^>]*?)href="#documents"/g,'<a$1target="_top" href="/detail/v2#tab=documents"'],[/<a([^>]*?)href="#recalc"/g,'<a$1target="_top" href="/detail/v2#tab=recalc"'],[/<a([^>]*?)href="(?:https?:\/\/[^"]*)?\/(?:detail\/v2|v2)[^"]*"/g,'<a$1target="_top" href="/detail/v2#workbench"']];for(const[x,q]of f)a=a.replace(x,q);const m=["cms","documents","recalc"];for(const x of m)a=a.replace(new RegExp('<a[^>]*data-nav="'+x+'"[^>]*>[^<]*</a>',"g"),"");n.value=r("pv.assembled",{n:g.length});const _=new Blob([a],{type:"text/html;charset=utf-8"});e.value&&(e.value.src=URL.createObjectURL(_)),c(),l(g),s.value="ready"}catch(a){n.value=String(a&&a.message||a),s.value="error"}});async function l(a){let g=0,f=0;const m=async()=>{for(;g<a.length;){const _=a[g++];try{const x=await fetch(hn+"templates/"+encodeURIComponent(_)+".html",{cache:"force-cache"}),q=x.ok?await x.text():"",V=e.value&&e.value.contentDocument,Y=V&&V.getElementById(_);if(V&&Y){const Q=V.createElement("template");Q.id=_,Q.innerHTML=q,Y.replaceWith(Q)}}catch{}f++,n.value=r("pv.assembled",{n:f})}};await Promise.all(Array.from({length:6},()=>m()))}function c(){const a=[['nav a[data-nav="cms"]',"#tab=vibration"],['nav a[data-nav="documents"]',"#tab=documents"],['nav a[data-nav="recalc"]',"#tab=recalc"]],d=()=>{const f=e.value&&e.value.contentDocument;if(!f)return;const m=q=>V=>{V.preventDefault(),V.stopImmediatePropagation();const Y=window.top;try{Y.location.href=q}catch{location.href=q}};for(const[q,V]of a){const Y=f.querySelector(q);Y&&Y.addEventListener("click",m("/detail/v2"+V),!0)}const _=f.querySelector("nav a:not([data-nav])")||f.querySelector('a[href*="18033"]');_&&_.addEventListener("click",m("/detail/v2#workbench"),!0);const x=f.querySelector("a.portal-wb");x&&x.addEventListener("click",m("/detail/v2#workbench"),!0)},g=e.value;g&&(g.addEventListener("load",d),d())}return(a,d)=>(D(),E("div",oc,[s.value!=="ready"?(D(),E("div",lc,p(s.value==="loading"?u(r)("pv.loading"):n.value),1)):vt("",!0),d[0]||(d[0]=i("a",{class:"portal-wb",href:"#workbench",title:"切换到 Vue 工作台"},"工作台",-1)),i("iframe",{ref_key:"frame",ref:e,class:"portal-frame",title:"观澜门户"},null,512)]))}}),Yl=(t,e)=>{const s=t.__vccOpts||t;for(const[n,o]of e)s[n]=o;return s},Jl=Yl(rc,[["__scopeId","data-v-77ae2ea1"]]),Gn=["叶片与叶根","变桨","偏航","齿轮箱","发电机","主轴承","变流器","塔架与基础","主控与传感网"],Bs={叶片与叶根:"blade",变桨:"pitch",偏航:"yaw",齿轮箱:"gearbox",发电机:"generator",主轴承:"main_bearing",变流器:"converter",塔架与基础:"tower",主控与传感网:"control",主轴:"main_bearing",其他:"other"},Xl=(()=>{const t={};for(const e of Gn)t[Bs[e]]=e;for(const[e,s]of Object.entries(Bs))s in t||(t[s]=e);return t})(),Rs=t=>Bs[String(t)]||String(t),jo=t=>Xl[String(t)]||String(t),we=t=>{const e=Bs[String(t)]||String(t);return Xl[e]?r("sys."+e):String(t??"")},hs=t=>we(t),ic={危险:"bad",报警:"warn",不可判:"unk",良好:"ok",优秀:"ex"},ac={critical:"bad",alarm:"warn",undeterminable:"unk",indeterminate:"unk","not evaluable":"unk",good:"ok",excellent:"ex",warn:"warn",bad:"bad",ok:"ok",unk:"unk",ex:"ex"},Is=t=>ic[String(t)]||ac[String(t)],Ho={证据:"evidence",机制:"mechanism",判级:"rating",排期:"schedule",动作:"action",验收:"acceptance"},Sn=t=>"st."+(t==="ex"?"excellent":t),At=t=>String(t).replace("WTG","").replace(/^0/,"")+"#",Ct=(t,e=0)=>{if(t==null||typeof t=="number"&&isNaN(t))return"—";const s=Number(t);return isNaN(s)?"—":s.toLocaleString("zh-CN",{maximumFractionDigits:e,minimumFractionDigits:e})},qo=t=>{const e=Is(t);return e?r(Sn(e)):String(t??"")},cc=["振动","温度","润滑","油液","报警","工单"];function Lo(t){const e=cc.map(n=>Is((t?.[n]||{}).ostate)).filter(Boolean);if(!e.length)return"unk";if(e.includes("bad"))return"bad";if(e.includes("warn"))return"warn";const s=e.filter(n=>n!=="unk");return s.length?s.includes("ok")?"ok":"ex":"unk"}const Po={bad:"critical",warn:"warning",unk:"unknown",ok:"good",ex:"excellent"},Oe=t=>String(t??""),dc={key:0},uc={class:"small"},pc={href:"#tab=component","data-back":"1"},fc={class:"panel mb"},hc={style:{display:"flex",height:"12px","border-radius":"4px",overflow:"hidden",margin:"8px 0 4px"}},mc={class:"small muted"},gc={class:"tblwrap"},_c={style:{width:"74px"}},vc={class:"r",style:{width:"96px"}},bc=["href"],xc={class:"small"},yc={class:"r"},wc=["href"],$c={key:0,class:"panel mb"},kc={style:{cursor:"pointer","font-weight":"600"}},Dc={class:"tblwrap"},Fc={style:{"margin-top":"10px"}},Ec={style:{width:"74px"}},Cc={class:"small"},Mc={key:1,class:"panel"},Sc={class:"small"},Tc={key:0},Ac={class:"panel mb small",style:{"border-left":"3px solid var(--accent)"}},Oc={class:"eyebrow"},jc={class:"panel mb"},Hc={style:{display:"grid","grid-template-columns":"repeat(auto-fit,minmax(170px,1fr))",gap:"10px"}},qc=["data-sys"],Lc={class:"t"},Pc={class:"bar"},Bc=["innerHTML"],Rc={class:"small muted",style:{"margin-top":"8px"}},Ic={key:1,class:"panel mb",style:{"border-left":"3px solid var(--critical)"}},Nc={class:"small"},zc={class:"eyebrow"},Wc={class:"panel mb"},Uc={class:"small muted",style:{"font-weight":"400"}},Vc={class:"small muted",style:{margin:"-2px 0 8px"}},Kc={class:"tblwrap"},Gc={class:"r"},Yc={class:"r"},Jc={class:"r"},Xc={class:"r"},Zc={key:0,class:"badge"},Qc={class:"num small"},td={class:"r"},ed={class:"r"},sd={class:"r"},nd={class:"r"},od={class:"small"},ld={class:"small muted"},rd={key:3,class:"panel mb"},id={class:"small"},ad={href:"#tab=vibration"},cd={class:"eyebrow"},dd={class:"panel mb"},ud={class:"tblwrap"},pd={class:"r"},fd=["href"],hd={class:"r"},md=["innerHTML"],gd={class:"small"},_d=Ut({__name:"Component",props:{d:{},sys:{}},setup(t){const e=t,s=U(()=>e.d?.sysdist||{}),n=U(()=>e.d?.rel&&!e.d.rel.err?e.d.rel:null),o=U(()=>e.sys?jo(e.sys):null),l=U(()=>Gn.filter(f=>s.value[f]).map(f=>{const m=s.value[f],_=m.报警||0,x=m.不可判||0,q=Object.values(m).reduce((Y,Q)=>Y+Q,0)||1,V=_>=8?"var(--critical)":_>=3?"var(--warning)":_?"var(--accent)":"var(--good)";return{segs:[["报警","critical"],["不可判","unknown"],["良好","good"],["优秀","excellent"]].filter(([Y])=>m[Y]).map(([Y,Q])=>({col:Q,w:(m[Y]/q*100).toFixed(1)})),line:r("cmp.alarm_n",{a:`<b style="color:${V}">${_}</b>`})+(x?r("cmp.unk_n",{u:x}):"")+r("cmp.fleet_n",{n:q}),s:f,dist:m,a:_,u:x,N:q,col:V}}));function c(f){return(f.syss||[]).map(m=>`<a href="/problem/${f.t}/${encodeURIComponent(jo(m)||m)}">${we(m)}</a>`).join(" · ")}const a=U(()=>{const m=(((e.d?.control||{}).energy||{}).items||[]).filter(_=>_.k==="停机").map(_=>_.h)[0];return m??null}),d=U(()=>{const f=n.value?.表||[],m=Math.max(1,...f.map(_=>_.停机时长h));return f.map(_=>({r:_,maxH:m,sev:_.部件==="无记录停机"?"var(--unknown)":_.外部?"var(--accent)":_.占停机>=.06?"var(--critical)":_.占停机>=.03?"var(--warning)":"var(--good)"}))}),g=U(()=>{const f=o.value;if(!f)return null;const m=(e.d?.systems||{})[f]||[],_=s.value[f]||{},x=(e.d?.systems||{})[f+"·良好"]||[],q=Y=>_[Y]||0,V=Object.values(_).reduce((Y,Q)=>Y+Q,0)||1;return{s:f,N:V,gd:x,cnt:q,al:m.filter(Y=>Y.st==="报警"),un:m.filter(Y=>Y.st==="不可判"),dist:_}});return(f,m)=>g.value?(D(),E("section",dc,[i("p",uc,[i("a",pc,p(u(r)("ui.back_to",{tab:u(r)("tab.component")})),1)]),i("div",fc,[i("h3",null,p(u(r)("cmp.detail_head",{sys:u(we)(g.value.s),n:g.value.N})),1),i("div",hc,[(D(),E(it,null,yt([["报警","critical"],["不可判","unknown"],["良好","good"],["优秀","excellent"]],([_,x])=>i("i",{key:_,style:Pt(`width:${(g.value.cnt(_)/g.value.N*100).toFixed(1)}%;background:var(--${x})`)},null,4)),64))]),i("div",mc,p(u(r)("cmp.counts",{a:g.value.cnt("报警"),u:g.value.cnt("不可判"),g:g.value.cnt("良好"),e:g.value.cnt("优秀")})),1)]),(D(!0),E(it,null,yt([g.value.al,g.value.un],(_,x)=>$n((D(),E("div",{key:x,class:"panel mb"},[i("h3",null,p(x===0?u(r)("cmp.alarm_units"):u(r)("cmp.unk_units"))+" "+p(u(r)("cmp.n_units",{n:_.length})),1),i("div",gc,[i("table",null,[i("tr",null,[i("th",_c,p(u(r)("ui.unit")),1),i("th",null,p(u(r)("cmp.why")),1),i("th",vc,p(u(r)("cmp.detail")),1)]),(D(!0),E(it,null,yt(_,q=>(D(),E("tr",{key:q.t},[i("td",null,[i("a",{href:`/turbine/${q.t}`},[i("b",null,p(u(At)(q.t)),1)],8,bc)]),i("td",xc,p(q.why),1),i("td",yc,[i("a",{class:"small",href:`/problem/${q.t}/${encodeURIComponent(g.value.s)}`},p(u(r)("cmp.detail_link")),9,wc)])]))),128))])])])),[[ia,_.length]])),128)),g.value.gd.length?(D(),E("details",$c,[i("summary",kc,p(u(r)("cmp.good_units",{n:g.value.gd.length})),1),i("div",Dc,[i("table",Fc,[i("tr",null,[i("th",Ec,p(u(r)("ui.unit")),1),i("th",null,p(u(r)("cmp.why")),1)]),(D(!0),E(it,null,yt(g.value.gd,_=>(D(),E("tr",{key:_.t},[i("td",null,[i("b",null,p(u(At)(_.t)),1)]),i("td",Cc,p(_.why),1)]))),128))])])])):vt("",!0),!g.value.al.length&&!g.value.un.length&&!g.value.gd.length?(D(),E("div",Mc,[i("p",Sc,p(u(r)("cmp.none")),1)])):vt("",!0)])):(D(),E(it,{key:1},[t.d.sysmx_pending?(D(),E("section",Tc,[i("div",Ac,[i("b",null,p(u(r)("cmp.grading_pending")),1),at(" "+p(u(r)("cmp.grading_pending_why",{span:t.d.sysmx_span||""})),1)])])):vt("",!0),i("section",null,[i("div",Oc,p(u(r)("cmp.by_system")),1),i("div",jc,[i("div",Hc,[(D(!0),E(it,null,yt(l.value,_=>(D(),E("div",{key:_.s,class:"sysc",role:"button",tabindex:"0","data-sys":u(Rs)(_.s),style:Pt(`cursor:pointer;border-left:3px solid ${_.col}`)},[i("div",Lc,[i("b",null,p(u(we)(_.s)),1)]),i("div",Pc,[(D(!0),E(it,null,yt(_.segs,x=>(D(),E("i",{key:x.col,style:Pt(`width:${x.w}%;background:var(--${x.col})`)},null,4))),128))]),i("div",{class:"small muted",innerHTML:_.line},null,8,Bc)],12,qc))),128))]),i("p",Rc,p(u(r)("cmp.cards_note")),1)])]),t.d.rel&&t.d.rel.err?(D(),E("div",Ic,[i("p",Nc,p(u(r)("flt.block_err",{k:"rel",e:t.d.rel.err})),1)])):n.value?(D(),E(it,{key:2},[i("div",zc,p(u(r)("cmp.rel_eyebrow",{win:n.value.窗})),1),i("div",Wc,[i("h3",null,[at(p(u(r)("cmp.rel_head"))+" ",1),i("span",Uc,p(u(r)("cmp.rel_meta",{t:n.value.总停机h,a:n.value.设备类停机h,b:n.value.外部类停机h})),1)]),i("p",Vc,p(u(r)("cmp.rel_note",{h:a.value==null?"":" "+u(Ct)(a.value)+"h"})),1),i("div",Kc,[i("table",null,[i("tr",null,[i("th",null,p(u(r)("cmp.rel_part")),1),i("th",null,p(u(r)("cmp.rel_h")),1),i("th",Gc,p(u(r)("cmp.rel_ev")),1),i("th",Yc,p(u(r)("cmp.rel_mtbo")),1),i("th",Jc,p(u(r)("cmp.rel_mdt")),1),i("th",Xc,p(u(r)("cmp.rel_units")),1),i("th",null,p(u(r)("cmp.rel_fm")),1)]),(D(!0),E(it,null,yt(d.value,_=>(D(),E("tr",{key:_.r.部件},[i("td",null,[i("b",null,p(u(hs)(_.r.部件)),1),m[0]||(m[0]=at(" ",-1)),_.r.外部?(D(),E("span",Zc,p(u(r)("cmp.external")),1)):vt("",!0)]),i("td",null,[i("i",{class:"bar",style:Pt(`width:${Math.round(_.r.停机时长h/_.maxH*72)}px;background:${_.sev}`)},null,4),i("span",Qc,p(_.r.停机时长h)+"h · "+p((_.r.占停机*100).toFixed(1))+"%",1)]),i("td",td,p(_.r.事件数),1),i("td",ed,p(_.r.外部?"—":_.r.MTBF_h||"—"),1),i("td",sd,p(_.r.MDT_h),1),i("td",nd,p(_.r.影响台数),1),i("td",od,p(_.r.典型失效模式||"—"),1)]))),128))])]),i("p",ld,p(n.value.口径),1)])],64)):vt("",!0),t.d.fus&&!t.d.fus.err?(D(),E("div",rd,[i("p",id,[at(p(u(r)("cmp.fusion_moved"))+" ",1),i("a",ad,[i("b",null,p(u(r)("tab.vibration")),1)]),at(" "+p(u(r)("cmp.fusion_n",{n:(t.d.fus.表||[]).length})),1)])])):vt("",!0),i("div",cd,p(u(r)("cmp.cross_eyebrow")),1),i("div",dd,[i("h3",null,p(u(r)("cmp.watch_head",{n:(t.d.watch||[]).length})),1),i("div",ud,[i("table",null,[i("tr",null,[i("th",null,p(u(r)("ui.unit")),1),i("th",pd,p(u(r)("cmp.n_sys")),1),i("th",null,p(u(r)("cmp.hit_sys")),1),i("th",null,p(u(r)("cmp.basis")),1)]),(D(!0),E(it,null,yt(t.d.watch||[],_=>(D(),E("tr",{key:_.t},[i("td",null,[i("a",{href:`/turbine/${_.t}`},[i("b",null,p(u(At)(_.t)),1)],8,fd)]),i("td",hd,p(_.n),1),i("td",{class:"small",innerHTML:c(_)},null,8,md),i("td",gd,p(_.why),1)]))),128))])])])],64))}}),vd=["innerHTML"],Jt=Ut({__name:"LegacyChart",props:{html:{}},setup(t){return(e,s)=>(D(),E("div",{class:"legacy-chart",innerHTML:t.html},null,8,vd))}}),bd=typeof window<"u"?window:globalThis;bd.__charts=function(t){const{t:e,fmt:s,esc:n,dv:o,EN:l}=t,c=/[㐀-鿿]/,a=S=>l&&c.test(String(S??"")),d=S=>(S=t.displayText?t.displayText(S):S==null?"":String(S),a(S)&&t.verb&&t.verb(),S),g=S=>{const B=d(S);return`<title${a(B)?' class="verbatim"':""}>${n(B)}</title>`},f=(S,B,A)=>`<svg class="dt" viewBox="0 0 ${S} ${B}" style="width:${S}px;max-width:100%;height:auto" role="img">${A}</svg>`,m=(S,B,A,C={})=>`<text x="${(+S).toFixed(1)}" y="${(+B).toFixed(1)}" font-size="${C.fs||9}" fill="${C.fill||"var(--muted)"}"${C.anchor?` text-anchor="${C.anchor}"`:""}${C.op?` opacity="${C.op}"`:""}${C.w?` font-weight="${C.w}"`:""}${C.tr?` transform="${C.tr}"`:""}${C.cls?` class="${C.cls}"`:""}>${A}</text>`,_=(S,B,A,C={})=>{const W=d(A);return m(S,B,n(W),a(W)?Object.assign({},C,{cls:"verbatim"}):C)},x={"限电·绑定":"loss.curtail_bound","限电命令·未绑定":"loss.curtail_unbound","停机(调度令)":"loss.dispatch",停机:"loss.stop",正常发电:"loss.normal",低风待机:"loss.lowwind"},q=S=>x[S]?e(x[S]):d(S);function V(S){const B=(S||[]).filter($=>$&&$.n>0&&$.med>0);if(B.length<3)return`<p class="small muted">${e("ch.quad.few")}</p>`;const A=720,C=330,W=58,I=16,T=44,R=16,K=$=>Math.log10($),N=B.map($=>K($.n)),G=B.map($=>K($.med)),tt=Math.min(...N)-.15,st=Math.max(...N)+.15,J=Math.min(...G)-.15,rt=Math.max(...G)+.15,ht=$=>W+(K($)-tt)/(st-tt)*(A-W-I),ot=$=>C-T-(K($)-J)/(rt-J)*(C-R-T),_t=B.map($=>$.n).sort(($,w)=>$-w),mt=_t[Math.floor(_t.length/2)],nt=ht(mt),Z=ot(600),h=Math.max(...B.map($=>$.nt)),v=B.map($=>{const w=3+Math.sqrt($.nt/h)*7,X=$.n>=mt&&$.med>=600,z=X?"var(--critical)":"var(--accent)";return`<circle cx="${ht($.n).toFixed(1)}" cy="${ot($.med).toFixed(1)}" r="${w.toFixed(1)}" fill="${z}" fill-opacity=".5" stroke="${z}" stroke-width="1">${g(`${$.code} ${d($.k)}
  19. `+e("ch.quad.tip",{n:$.n,med:$.med,h:$.h,nt:$.nt}))}</circle>`}).join(""),b=B.filter($=>$.n>=mt||$.med>=600).slice(0,8).map($=>m(ht($.n)+9,ot($.med)+3,n($.code))).join(""),y=($,w,X,z)=>m($,w,X,{fs:10,op:.85})+m($,w+12,z,{fs:8.5,op:.6}),k=$=>$>=3600?$/3600+"h":$>=60?$/60+"min":$+"s",M=[10,60,600,3600,36e3].filter($=>K($)>=J&&K($)<=rt).map($=>`<line x1="${W}" y1="${ot($).toFixed(1)}" x2="${A-I}" y2="${ot($).toFixed(1)}" stroke="var(--line)" stroke-opacity=".4"/>`+m(W-6,ot($)+3,k($),{anchor:"end"})).join(""),O=[1,10,100,1e3,1e4].filter($=>K($)>=tt&&K($)<=st).map($=>m(ht($),C-T+14,$,{anchor:"middle"})).join(""),j=R+(C-T-R)/2;return f(A,C,`${M}${O}
  20. <line x1="${nt.toFixed(1)}" y1="${R}" x2="${nt.toFixed(1)}" y2="${C-T}" stroke="var(--muted)" stroke-dasharray="3 3" stroke-opacity=".5"/>
  21. <line x1="${W}" y1="${Z.toFixed(1)}" x2="${A-I}" y2="${Z.toFixed(1)}" stroke="var(--muted)" stroke-dasharray="3 3" stroke-opacity=".5"/>
  22. ${y(W+6,R+12,e("ch.quad.q1"),e("ch.quad.q1s"))}${y(A-I-130,R+12,e("ch.quad.q2"),e("ch.quad.q2s"))}
  23. ${y(W+6,C-T-18,e("ch.quad.q3"),e("ch.quad.q3s"))}${y(A-I-130,C-T-18,e("ch.quad.q4"),e("ch.quad.q4s"))}
  24. ${v}${b}
  25. ${m(W+(A-I-W)/2,C-6,e("ch.quad.xlab"),{fs:9.5,anchor:"middle"})}
  26. ${m(14,j,e("ch.quad.ylab"),{fs:9.5,anchor:"middle",tr:`rotate(-90 14 ${j.toFixed(1)})`})}`)}function Y(S){const B=S.months||[],A=S.vals||[],C=S.cov||B.map(()=>1),W=S.per_day||[],I=720,T=250,R=48,K=14,N=52,G=18,tt=B.length||1,st=Math.max(...W.filter(mt=>mt!=null),1),J=(I-R-K)/tt;let rt="",ht="";B.forEach((mt,nt)=>{const Z=W[nt],h=C[nt]<.5;if(Z==null)return;const v=Z/st*(T-G-N),b=R+nt*J+J*.16,y=T-N-v,k=b+J*.34;rt+=`<rect x="${b.toFixed(1)}" y="${y.toFixed(1)}" width="${(J*.68).toFixed(1)}" height="${v.toFixed(1)}" rx="2" fill="${h?"var(--muted)":"var(--accent)"}" fill-opacity="${h?.32:.8}" stroke="${h?"var(--warning)":"none"}" stroke-dasharray="${h?"3 2":""}"><title>${e("ch.rate.tip",{m:mt,v:Z,n:A[nt],cov:(C[nt]*100).toFixed(0)})}</title></rect>`,ht+=m(k,y-4,Z,{anchor:"middle"})+m(k,T-N+13,e("ch.rate.month",{m:mt.slice(5)}),{anchor:"middle"})+m(k,T-N+25,e("ch.rate.n",{n:A[nt]}),{fs:8,op:.65,anchor:"middle"})+(h?m(k,T-N+37,e("ch.rate.days",{d:Math.round(C[nt]*30)}),{fs:8,fill:"var(--warning)",anchor:"middle"}):"")});const ot=[0,.5,1].map(mt=>m(R-6,T-N-mt*(T-G-N)+3,Math.round(st*mt),{anchor:"end"})).join(""),_t=G+(T-N-G)/2;return f(I,T,`<line x1="${R}" y1="${T-N}" x2="${I-K}" y2="${T-N}" stroke="var(--line)"/><line x1="${R}" y1="${G}" x2="${R}" y2="${T-N}" stroke="var(--line)"/>
  27. ${rt}${ht}${ot}${m(14,_t,e("ch.rate.ylab"),{fs:9.5,anchor:"middle",tr:`rotate(-90 14 ${_t.toFixed(1)})`})}`)}function Q(S){if(!S||!S.theo)return"";const B=720,A=300,C=8,W=8,I=30,T=64,R=(S.items||[]).filter(ot=>ot.loss>0),K=R.length+2,N=(B-C-W)/K,G=(A-I-T)/S.theo;let tt=S.theo,st="",J=0;const rt=(ot,_t,mt,nt,Z)=>`<rect x="${(C+ot*N+N*.14).toFixed(1)}" y="${_t.toFixed(1)}" width="${(N*.72).toFixed(1)}" height="${Math.max(mt,1.2).toFixed(1)}" rx="2" fill="${nt}" fill-opacity="${Z}"/>`,ht=(ot,_t,mt,nt,Z)=>m(C+ot*N+N*.5,_t-6,nt,{fs:10,fill:Z||"var(--ink)",anchor:"middle",w:600})+m(C+ot*N+N*.5,A-T+14,mt,{fs:8.5,anchor:"middle"});return st+=rt(0,A-T-S.theo*G,S.theo*G,"var(--accent)",.45)+ht(0,A-T-S.theo*G,e("ch.wf.theo"),s(S.theo)),R.forEach(ot=>{J++;const _t=A-T-tt*G,mt=ot.loss*G;tt-=ot.loss;const nt=q(ot.k);st+=rt(J,_t,mt,"var(--critical)",.55)+`<line x1="${(C+(J-1)*N+N*.86).toFixed(1)}" y1="${_t.toFixed(1)}" x2="${(C+J*N+N*.14).toFixed(1)}" y2="${_t.toFixed(1)}" stroke="var(--muted)" stroke-dasharray="2 2" stroke-opacity=".6"/>`+ht(J,_t,n(nt.length>12?nt.slice(0,11)+"…":nt),"−"+s(ot.loss),"var(--critical)")+g(e("ch.wf.tip",{nm:nt,loss:s(ot.loss),pct:(ot.loss/S.theo*100).toFixed(1),h:s(ot.h)}))}),st+=rt(K-1,A-T-S.act*G,S.act*G,"var(--good)",.6)+ht(K-1,A-T-S.act*G,e("ch.wf.act"),s(S.act),"var(--good)"),f(B,A,`<line x1="${C}" y1="${A-T}" x2="${B-W}" y2="${A-T}" stroke="var(--line)"/>${m(C,14,"MWh",{fs:9.5})}${st}`)}function L(S,B){const A=(S||[]).filter(w=>w.MTBF_h&&w.MDT_h);if(A.length<3)return`<p class="small muted">${e("ch.ram.few")}</p>`;const C=720,W=340,I=56,T=112,R=48,K=16,N=w=>Math.log10(w),G=A.map(w=>N(w.MTBF_h)),tt=A.map(w=>w.MDT_h),st=Math.min(...G)-.08,J=Math.max(...G)+.08,rt=0,ht=Math.max(...tt)*1.12,ot=w=>I+(N(w)-st)/(J-st)*(C-I-T),_t=w=>W-R-(w-rt)/(ht-rt)*(W-K-R),mt=w=>{const X=w.slice().sort((z,et)=>z-et);return X[Math.floor(X.length/2)]},nt=mt(A.map(w=>w.MTBF_h)),Z=mt(tt),h=ot(nt),v=_t(Z),b=Math.max(...A.map(w=>w.停机时长h)),y=w=>d(B?B(w.部件):w.部件),k=A.map(w=>{const X=4+Math.sqrt(w.停机时长h/b)*13,z=w.外部,et=w.MTBF_h<nt&&w.MDT_h>=Z,lt=z?"var(--muted)":et?"var(--critical)":"var(--accent)";return`<circle cx="${ot(w.MTBF_h).toFixed(1)}" cy="${_t(w.MDT_h).toFixed(1)}" r="${X.toFixed(1)}" fill="${lt}" fill-opacity="${z?.3:.42}" stroke="${lt}" stroke-width="1.2" stroke-dasharray="${z?"3 2":""}">${g(e("ch.ram.tip",{p:y(w),mtbf:w.MTBF_h,mdt:w.MDT_h,h:w.停机时长h,n:w.事件数,u:w.影响台数})+(z?e("ch.ram.tip_ext"):""))}</circle>`+_(ot(w.MTBF_h)+X+4,_t(w.MDT_h)+3.5,d(y(w)).slice(0,l?14:7),{fs:9.5,fill:z?"var(--muted)":"currentColor"})}).join(""),M=(w,X,z,et,lt)=>m(w,X,et,{fs:10,anchor:z,op:.9})+m(w,X+12,lt,{fs:8.5,anchor:z,op:.62}),O=[1e3,2e3,5e3,1e4,2e4].filter(w=>N(w)>=st&&N(w)<=J).map(w=>`<line x1="${ot(w).toFixed(1)}" y1="${K}" x2="${ot(w).toFixed(1)}" y2="${W-R}" stroke="var(--line)" stroke-opacity=".3"/>`+m(ot(w),W-R+14,w>=1e3?w/1e3+"k":w,{anchor:"middle"})).join(""),j=[0,5,10,15,20].filter(w=>w<=ht).map(w=>m(I-6,_t(w)+3,w,{anchor:"end"})).join(""),$=K+(W-R-K)/2;return f(C,W,`${O}${j}<line x1="${I}" y1="${W-R}" x2="${C-T}" y2="${W-R}" stroke="var(--line)"/><line x1="${I}" y1="${K}" x2="${I}" y2="${W-R}" stroke="var(--line)"/>
  28. <line x1="${h.toFixed(1)}" y1="${K}" x2="${h.toFixed(1)}" y2="${W-R}" stroke="var(--muted)" stroke-dasharray="3 3" stroke-opacity=".45"/>
  29. <line x1="${I}" y1="${v.toFixed(1)}" x2="${C-T}" y2="${v.toFixed(1)}" stroke="var(--muted)" stroke-dasharray="3 3" stroke-opacity=".45"/>
  30. ${M(I+6,K+12,"start",e("ch.ram.q1"),e("ch.ram.q1s"))}${M(C-T-6,K+12,"end",e("ch.ram.q2"),e("ch.ram.q2s"))}
  31. ${M(I+6,W-R-16,"start",e("ch.ram.q3"),e("ch.ram.q3s"))}${M(C-T-6,W-R-16,"end",e("ch.ram.q4"),e("ch.ram.q4s"))}
  32. ${k}${m(I+(C-T-I)/2,W-8,e("ch.ram.xlab"),{fs:9.5,anchor:"middle"})}
  33. ${m(13,$,e("ch.ram.ylab"),{fs:9.5,anchor:"middle",tr:`rotate(-90 13 ${$.toFixed(1)})`})}
  34. <circle cx="${C-T+16}" cy="${K+40}" r="5" fill="var(--accent)" fill-opacity=".42" stroke="var(--accent)"/>${m(C-T+26,K+44,e("ch.ram.equip"))}
  35. <circle cx="${C-T+16}" cy="${K+58}" r="5" fill="var(--muted)" fill-opacity=".3" stroke="var(--muted)" stroke-dasharray="3 2"/>${m(C-T+26,K+62,e("ch.ram.ext"))}
  36. ${m(C-T+6,K+84,e("ch.ram.area"),{fs:8.5})}${m(C-T+6,K+98,e("ch.ram.median"),{fs:8.5})}`)}function P(S,B){const A=(S||[]).find(st=>st.部件==="无记录停机"),C=A?A.停机时长h:0,W=(S||[]).filter(st=>st.部件==="未归类").reduce((st,J)=>st+J.停机时长h,0),I=B-C-W,T=720,R=54,K=(st,J,rt,ht)=>`<rect x="${st.toFixed(1)}" y="14" width="${Math.max(J,1).toFixed(1)}" height="22" rx="3" fill="${rt}" fill-opacity="${ht}"/>`,N=I/B*T,G=W/B*T,tt=C/B*T;return f(T,R,`${K(0,N,"var(--accent)",.55)}${K(N,G,"var(--warning)",.5)}${K(N+G,tt,"var(--critical)",.5)}
  37. ${m(4,10,e("ch.attrib.ok",{h:Math.round(I),p:(I/B*100).toFixed(0)}))}
  38. ${m(N+G+tt-2,10,e("ch.attrib.none",{h:Math.round(C),p:(C/B*100).toFixed(0)}),{fill:"var(--critical)",anchor:"end"})}
  39. ${m(N+G/2,50,e("ch.attrib.uncls",{h:Math.round(W)}),{fill:"var(--warning)",anchor:"middle"})}`)}function F(S,B,A){const C=(S||[]).filter(y=>y&&y.v>0);if(!C.length)return`<p class="small muted">${e("ch.pareto.none")}</p>`;const W=520,I=236,T=46,R=40,K=40,N=14,G=C.length,tt=C.reduce((y,k)=>y+k.v,0),st=Math.max(...C.map(y=>y.v)),J=(W-T-R)/G,rt=y=>{y=d(y);const k=String(y).match(/^([0-9]+)/);return k?k[1]:String(y).slice(0,4)};let ht=0,ot="",_t=[],mt="",nt=null;C.forEach((y,k)=>{const M=y.v/st*(I-N-K),O=T+k*J+J*.14,j=I-K-M;ot+=`<rect x="${O.toFixed(1)}" y="${j.toFixed(1)}" width="${(J*.72).toFixed(1)}" height="${M.toFixed(1)}" rx="2" fill="var(--accent)" fill-opacity="${k<3?.85:.45}">${g(`${d(y.k)}: ${s(y.v)}${B}`)}</rect>`,ht+=y.v;const $=ht/tt;nt===null&&$>=.8&&(nt=k+1);const w=T+k*J+J/2,X=N+(1-$)*(I-N-K);_t.push(`${w.toFixed(1)},${X.toFixed(1)}`),mt+=`<circle cx="${w.toFixed(1)}" cy="${X.toFixed(1)}" r="2.4" fill="var(--warning)">${g(e("ch.pareto.cumtip",{k:d(y.k),p:($*100).toFixed(0)}))}</circle>`});const Z=N+.2*(I-N-K),h=C.map((y,k)=>_(T+k*J+J/2,I-K+13,rt(y.k),{anchor:"middle"})).join(""),v=[0,.5,1].map(y=>m(T-5,I-K-y*(I-N-K)+3,s(Math.round(st*y)),{anchor:"end"})).join("")+[0,.5,1].map(y=>m(W-R+5,N+(1-y)*(I-N-K)+3,Math.round(y*100)+"%",{fill:"var(--warning)"})).join(""),b=C.slice(0,3).map(y=>`<b>${a(rt(y.k))?`<span class="verbatim">${n(d(rt(y.k)))}</span>`:n(rt(y.k))}</b> ${o(d(y.k).replace(/^[0-9]+ */,"").slice(0,18))}`).join(" · ");return f(W,I,`<line x1="${T}" y1="${I-K}" x2="${W-R}" y2="${I-K}" stroke="var(--line)"/><line x1="${T}" y1="${N}" x2="${T}" y2="${I-K}" stroke="var(--line)"/>${ot}
  40. <line x1="${T}" y1="${Z.toFixed(1)}" x2="${W-R}" y2="${Z.toFixed(1)}" stroke="var(--warning)" stroke-dasharray="4 3" stroke-opacity=".7"/>
  41. ${m(W-R-3,Z-4,e("ch.pareto.cum80"),{fill:"var(--warning)",anchor:"end"})}
  42. <polyline points="${_t.join(" ")}" fill="none" stroke="var(--warning)" stroke-width="1.5"/>${mt}${h}${v}
  43. ${m(T+(W-R-T)/2,I-3,e("ch.pareto.xlab"),{fs:8.5,anchor:"middle"})}`)+`<p class="small muted" style="margin-top:5px;line-height:1.6">${nt?`<b>${e("ch.pareto.key",{k:nt})}</b> (${e("ch.pareto.total",{n:G,tot:s(Math.round(tt)),unit:B})})`:e("ch.pareto.total",{n:G,tot:s(Math.round(tt)),unit:B})}<br>${e("ch.pareto.top3")}${b}${A?"<br>"+A:""}</p>`}function H(S){const B=st=>st.indexOf("限电")>=0||st.indexOf("调度")>=0?0:st==="停机"?1:2,A=[e("ch.blame.n1"),e("ch.blame.n2"),e("ch.blame.n3")],C=[e("ch.blame.d1"),e("ch.blame.d2"),e("ch.blame.d3")],W=["var(--accent)","var(--critical)","var(--muted)"],I=[0,0,0];(S.items||[]).forEach(st=>{I[B(st.k)]+=st.loss});const T=I.reduce((st,J)=>st+J,0)||1,R=500,K=44;let N=0,G="";I.forEach((st,J)=>{const rt=st/T*R;G+=`<rect x="${N.toFixed(1)}" y="12" width="${Math.max(rt,1).toFixed(1)}" height="26" rx="3" fill="${W[J]}" fill-opacity=".55"><title>${A[J]}: ${s(Math.round(st))} MWh</title></rect>`+(rt>46?m(N+rt/2,29,(st/T*100).toFixed(0)+"%",{fs:10.5,fill:"currentColor",anchor:"middle",w:600}):""),N+=rt});const tt=I.map((st,J)=>`<div style="display:flex;align-items:baseline;gap:7px;margin-top:5px"><i style="flex:none;width:9px;height:9px;border-radius:2px;background:${W[J]};opacity:.55"></i><span style="font-weight:600">${A[J]}</span><span class="num">${s(Math.round(st))} MWh</span><span class="small muted">${C[J]}</span></div>`).join("");return f(R,K,`${m(0,8,e("ch.blame.title",{tot:s(Math.round(T))}))}${G}`)+tt}function pt(S){const B=S.months||S.x||[],A=B.length;if(!A)return"";const C=620,W=250,I=52,T=34,R=["var(--accent)","#D48A1E","#2E8B6A","#7C5295"],K=[];if((S.series||[]).forEach(Z=>Z.vals.forEach(h=>{h!=null&&h===h&&K.push(h)})),(S.thresholds||[]).forEach(Z=>{Z&&Z.v!=null&&K.push(Z.v)}),!K.length)return"";let N=S.zero===!1?Math.min(...K):Math.min(0,...K),G=Math.max(...K);N===G&&(N-=1,G+=1);const tt=(G-N)*.08;G+=tt,S.zero===!1&&(N-=tt);const st=Z=>I+Z/Math.max(A-1,1)*(C-I-12),J=Z=>W-T-(Z-N)/(G-N)*(W-T-14),rt=(Z,h)=>{let v=[],b=[];return Z.forEach((y,k)=>{y==null||y!==y?(b.length&&v.push(b),b=[]):b.push(`${st(k).toFixed(1)},${J(y).toFixed(1)}`)}),b.length&&v.push(b),v.map(y=>`<polyline points="${y.join(" ")}" fill="none" stroke="${h}" stroke-width="1.8"/>`).join("")};let ht=(S.series||[]).map((Z,h)=>rt(Z.vals,R[h%4])).join("");const ot=Math.max(1,Math.ceil(A/8));let _t="";for(let Z=0;Z<A;Z+=ot)_t+=m(st(Z),W-10,String(B[Z]).includes("-")?String(B[Z]).slice(2,7):String(B[Z]),{fs:10,anchor:"middle"});let mt="";for(let Z=0;Z<5;Z++){const h=N+(G-N)*Z/4;mt+=m(I-6,J(h)+3,h.toFixed(Math.abs(G)<10?1:0),{fs:10,anchor:"end"})+`<line x1="${I}" x2="${C-12}" y1="${J(h).toFixed(1)}" y2="${J(h).toFixed(1)}" stroke="var(--line)"/>`}(S.thresholds||[]).forEach(Z=>{!Z||Z.v==null||(ht+=`<line x1="${I}" x2="${C-12}" y1="${J(Z.v).toFixed(1)}" y2="${J(Z.v).toFixed(1)}" stroke="var(--muted)" stroke-dasharray="5 4"/>`+(Z.label?_(I+6,J(Z.v)-4,Z.label,{fs:10}):""))}),S.xlab&&(ht+=_((I+C)/2,W-1,S.xlab,{fs:10,anchor:"middle"}));const nt='<div class="legend" style="margin-top:6px;flex-wrap:wrap">'+(S.series||[]).map((Z,h)=>`<span><i style="background:${R[h%4]}"></i>${a(Z.name)?`<span class="verbatim">${n(d(Z.name))}</span>`:n(Z.name)}</span>`).join("")+"</div>";return f(C,W,`${mt}${ht}${_t}`)+nt}function ct(S,B){const T=(R,K,N)=>{const G=Object.entries(K.分组||{}).map(([nt,Z])=>({v:parseFloat(nt),n:Z,raw:nt}));if(!G.length)return"";const tt=Math.min(...G.map(nt=>nt.v)),st=Math.max(...G.map(nt=>nt.v)),J=(st-tt)*.22||1,rt=tt-J,ht=st+J,ot=nt=>54+(nt-rt)/(ht-rt)*412,_t=Math.max(...G.map(nt=>nt.n)),mt=K.中位;return m(48,R+3,N,{fs:9.5,anchor:"end"})+`<line x1="54" y1="${R}" x2="466" y2="${R}" stroke="var(--line)"/><line x1="${ot(mt).toFixed(1)}" y1="${R-24}" x2="${ot(mt).toFixed(1)}" y2="${R+18}" stroke="var(--muted)" stroke-dasharray="3 3" stroke-opacity=".55"/>`+m(ot(mt),R+28,e("ch.cap.median",{v:mt}),{fs:8.5,anchor:"middle"})+G.map(nt=>{const Z=5+Math.sqrt(nt.n/_t)*9;return`<circle cx="${ot(nt.v).toFixed(1)}" cy="${R}" r="${Z.toFixed(1)}" fill="var(--accent)" fill-opacity=".42" stroke="var(--accent)"/>`+m(ot(nt.v),R-Z-5,n(nt.raw),{anchor:"middle",fill:"currentColor"})+m(ot(nt.v),R+3.5,nt.n,{anchor:"middle",fill:"var(--panel)",w:600})}).join("")};return f(500,158,`${T(44,S||{},e("ch.cap.p"))}${T(120,B||{},e("ch.cap.w"))}${m(466,12,e("ch.cap.legend"),{fs:8.5,anchor:"end"})}`)}function gt(S,B){const A=S.离群||[],C=S.全场同档差中位||0,W=500,I=34+A.length*26,T=52,R=58,K=Math.max(C,...A.map(tt=>tt.平均偏))*1.18||1,N=tt=>T+tt/K*(W-T-R),G=A.map((tt,st)=>{const J=30+st*26;return m(T-6,J+10,n(B(tt.t)),{fs:9.5,anchor:"end",fill:"currentColor"})+`<rect x="${T}" y="${J+1}" width="${(N(tt.平均偏)-T).toFixed(1)}" height="13" rx="2" fill="var(--warning)" fill-opacity=".62"/>`+m(N(tt.平均偏)+5,J+11,tt.平均偏+"°",{fill:"var(--warning)"})}).join("");return f(W,I,`<line x1="${N(C).toFixed(1)}" y1="18" x2="${N(C).toFixed(1)}" y2="${I-4}" stroke="var(--good)" stroke-dasharray="3 3"/>${m(N(C),12,e("ch.beta.median",{v:C}),{fs:8.5,fill:"var(--good)"})}<line x1="${T}" y1="18" x2="${T}" y2="${I-4}" stroke="var(--line)"/>${G}`)}function Ht(S){const B=Object.entries(S||{}),A=500,C=26+B.length*30,W=96,I=76,T=3.7,R=Math.max(T*1.35,...B.map(([,G])=>G.极差/G.σ)),K=G=>W+G/R*(A-W-I),N=B.map(([G,tt],st)=>{const J=22+st*30,rt=tt.极差/tt.σ,ht=rt>T;return _(W-6,J+11,G,{fs:9.5,anchor:"end",fill:"currentColor"})+`<rect x="${W}" y="${J+2}" width="${(K(rt)-W).toFixed(1)}" height="12" rx="2" fill="${ht?"var(--warning)":"var(--accent)"}" fill-opacity=".55"/>`+m(K(rt)+5,J+11,e("ch.ruler.row",{r:rt.toFixed(1),s:tt.σ}))}).join("");return f(A,C,`<line x1="${K(T).toFixed(1)}" y1="14" x2="${K(T).toFixed(1)}" y2="${C-4}" stroke="var(--good)" stroke-dasharray="3 3"/>${m(K(T),10,e("ch.ruler.norm"),{fs:8.5,fill:"var(--good)",anchor:"middle"})}${N}`)}function Rt(S){const B=S.kind;if(B==="vib")return`<p class="small">${a(S.text||S.comp)?`<span class="verbatim">${n(d(S.text||S.comp))}</span>`:n(S.text||S.comp||"")}</p>`;if(B==="vibbar"){const b=S.rows||[];if(!b.length)return"";const y=O=>{const j=Math.abs(O);return j>=100?O.toFixed(0):j>=10?O.toFixed(1):j>=1?O.toFixed(2):j>=.01?O.toFixed(3):Number(O).toExponential(1)},k={};b.forEach(O=>{(k[O.指标]=k[O.指标]||[]).push(O)});let M=`<p class="small muted">${e("fig.vibbar_note")}</p>`;for(const[O,j]of Object.entries(k))M+=`<div class="tblwrap" style="margin-top:8px"><b class="small muted">${o(O)}</b><table style="margin-top:2px"><tr><th>${e("fig.point")}</th><th class="r">${e("fig.x_median")}</th><th class="r">${e("fig.this_unit")}</th><th class="r">${e("fig.fleet_median")}</th><th class="r">z</th><th class="r">${e("fig.trend")}</th></tr>`+j.map($=>{const w=Math.abs($.z)>=3?"var(--critical)":Math.abs($.z)>=2?"var(--warning)":"var(--good)";return`<tr><td class="small">${o($.测点)}</td><td class="r" style="color:${w};font-weight:600">${$.倍中位!=null?$.倍中位+"×":"—"}</td><td class="r small">${y($.本台)}</td><td class="r small muted">${y($.全场中位)}</td><td class="r small" style="color:${Math.abs($.z)>=3?"var(--critical)":"var(--muted)"}">${$.z}</td><td class="r small" style="color:${$.六窗比>1.15?"var(--warning)":"var(--muted)"}">${$.六窗比!=null?$.六窗比+"×":"—"}</td></tr>`}).join("")+"</table></div>";return M}const A=S.months||S.x||[],C=A.length;if(!C)return"";const W=620,I=250,T=52,R=34,K=14,N=[];if(B==="band"?[S.self,S.med,S.q1,S.q3].forEach(b=>(b||[]).forEach(y=>{y!=null&&y===y&&N.push(y)})):B==="bars"?(N.push(0),(S.vals||[]).forEach(b=>{b!=null&&b===b&&N.push(b)})):B==="xy"?[S.self,S.med].forEach(b=>(b||[]).forEach(y=>{y!=null&&y===y&&N.push(y)})):(S.series||[]).forEach(b=>(b.vals||[]).forEach(y=>{y!=null&&y===y&&N.push(y)})),(S.thresholds||[]).forEach(b=>{b&&b.v!=null&&N.push(b.v)}),!N.length)return"";let G=Math.min(...N),tt=Math.max(...N);G===tt&&(G-=1,tt+=1);const st=(tt-G)*.08;G-=st,tt+=st;const J=b=>T+b/Math.max(C-1,1)*(W-T-12),rt=b=>I-R-(b-G)/(tt-G)*(I-R-K),ht=(b,y,k)=>{let M=[],O=[];return(b||[]).forEach((j,$)=>{j==null||j!==j?(O.length&&M.push(O),O=[]):O.push(`${J($).toFixed(1)},${rt(j).toFixed(1)}`)}),O.length&&M.push(O),M.map(j=>`<polyline points="${j.join(" ")}" fill="none" stroke="${y}" stroke-width="${k||1.8}"/>`).join("")};let ot="";if(B==="band"&&S.q1&&S.q3){const b=[],y=[];S.q3.forEach((k,M)=>{k!=null&&b.push(`${J(M).toFixed(1)},${rt(k).toFixed(1)}`)});for(let k=S.q1.length-1;k>=0;k--)S.q1[k]!=null&&y.push(`${J(k).toFixed(1)},${rt(S.q1[k]).toFixed(1)}`);b.length&&y.length&&(ot+=`<polygon points="${b.join(" ")} ${y.join(" ")}" fill="var(--unknown)" fill-opacity=".18"/>`)}if(B==="bars"){const b=Math.max(3,(W-T-20)/C*.6),y=rt(Math.max(G,0));ot+=(S.vals||[]).map((k,M)=>k==null||k!==k?"":`<rect x="${(J(M)-b/2).toFixed(1)}" y="${rt(k).toFixed(1)}" width="${b.toFixed(1)}" height="${Math.max(y-rt(k),.8).toFixed(1)}" rx="2" fill="var(--accent)" fill-opacity=".75"/>`).join("")}S.med&&(ot+=ht(S.med,"var(--muted)",1.7)),S.self&&(ot+=ht(S.self,"var(--critical)",2.1)+(S.self||[]).map((b,y)=>b==null||b!==b?"":`<circle cx="${J(y).toFixed(1)}" cy="${rt(b).toFixed(1)}" r="2.4" fill="var(--critical)"/>`).join(""));const _t=["var(--accent)","#D48A1E","#2E8B6A","#7C5295"];(S.series||[]).forEach((b,y)=>{ot+=ht(b.vals,_t[y%4])}),(S.thresholds||[]).forEach(b=>{b==null||b.v==null||(ot+=`<line x1="${T}" x2="${W-12}" y1="${rt(b.v).toFixed(1)}" y2="${rt(b.v).toFixed(1)}" stroke="var(--muted)" stroke-dasharray="5 4"/>`+(b.label?_(T+6,rt(b.v)-4,b.label,{fs:10}):""))});const mt=Math.max(1,Math.ceil(C/8));let nt="";for(let b=0;b<C;b+=mt)nt+=m(J(b),I-10,String(A[b]).includes("-")?String(A[b]).slice(2,7):String(A[b]),{fs:10,anchor:"middle"});let Z="";for(let b=0;b<5;b++){const y=G+(tt-G)*b/4;Z+=m(T-6,rt(y)+3,y.toFixed(Math.abs(tt)<10?1:0),{fs:10,anchor:"end"})+`<line x1="${T}" x2="${W-12}" y1="${rt(y).toFixed(1)}" y2="${rt(y).toFixed(1)}" stroke="var(--line)"/>`}const h=B==="band"?m(W-190,12,e("fig.this_unit"),{fill:"var(--critical)",fs:10})+m(W-110,12,e("fig.fleet_median"),{fs:10})+m(W-40,12,e("fig.quartile"),{fs:10}):(S.series||[]).length&&(S.series||[]).length<=2?S.series.map((b,y)=>m(W-12-(S.series.length-1-y)*118,12,"— "+n(d(b.name)),{fill:_t[y%4],fs:10,anchor:"end"})).join(""):"",v=(S.series||[]).length>2?'<div class="legend" style="margin-top:6px;flex-wrap:wrap">'+S.series.map((b,y)=>`<span><i style="background:${_t[y%4]}"></i>${a(b.name)?`<span class="verbatim">${n(d(b.name))}</span>`:n(b.name)}</span>`).join("")+"</div>":"";return f(W,I,`${Z}${ot}${nt}${h}`)+v}return{quadChart:V,rateChart:Y,waterfall:Q,ramChart:L,attribBar:P,paretoChart:F,blameBar:H,lossName:q,multiline:pt,capAxis:ct,betaBar:gt,rulerBar:Ht,fig:Rt}};const xd=[[/DE[/]NDE/g,"驱动端与非驱动端"],[/GenDE/g,"发电机驱动端"],[/GenNDE/g,"发电机非驱动端"],[/HS_gen2?/g,"高速轴发电机侧"],[/HS_rot/g,"高速轴转子侧"],[/IMS/g,"中间轴"],[/(?<![A-Za-z])NDE(?![A-Za-z])/g,"非驱动端"],[/(?<![A-Za-z])DE(?![A-Za-z])/g,"驱动端"],[/内圈BPFI/g,"内圈特征频率"],[/外圈BPFO/g,"外圈特征频率"],[/BPFI/g,"内圈特征频率"],[/BPFO/g,"外圈特征频率"],[/FTF/g,"保持架特征频率"],[/BSF/g,"滚动体特征频率"],[/TD_1R/g,"时域单转指标"],[/Peak/g,"冲击峰值"],[/Rms/gi,"有效值"],[/([0-9]+(?:[.][0-9]+)?)[ ]*阶/g,"$1 倍轴频"],[/[(]o([0-9]+(?:[.][0-9]+)?)[)]/g,"(轴频 $1 倍)"],[/×p90/g,"×全场90分位"],[/×fleet/g,"×全场中位"],[/六窗/g,"六个观测窗"],[/([0-9])窗/g,"$1 个观测窗"],[/宽带/g,"宽频带总量"],[/台阶/g,"阶跃上升"],[/缓升/g,"缓慢上升"],[/回落/g,"回落至"],[/全净|六窗全净/g,"各窗均干净"],[/清洁/g,"干净"],[/回归/g,"回到常态"],[/同族/g,"同批次共性 (见该批主台)"],[/族第([^ ]+)台/g,"同批次第$1台"],[/族/g,"批次共性组"],[/gain异常/g,"测点增益异常"],[/gain/g,"测点增益"],[/[(]销[)]/g,"(已销案)"],[/梯度/g,"沿链梯度最高点"],[/周期主导/g,"周期成分主导"],[/急性事件/g,"突发事件"],[/慢性/g,"长期"],[/主异常在/g,"主要异常位于"]],ft=t=>String(t??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"),Zl=t=>String(t??""),xt=t=>ft(t),yd={危险:"bad",报警:"warn",不可判:"unk",良好:"ok",优秀:"ex"},wd={critical:"bad",alarm:"warn",undeterminable:"unk",indeterminate:"unk","not evaluable":"unk",good:"ok",excellent:"ex",warn:"warn",bad:"bad",ok:"ok",unk:"unk",ex:"ex"},Yn=t=>yd[String(t)]||wd[String(t)],Ql={bad:"var(--critical)",warn:"var(--warning)",unk:"var(--unknown)",ok:"var(--good)",ex:"var(--excellent)"},tr={优秀:"var(--excellent)",良好:"var(--good)",报警:"var(--warning)",危险:"var(--critical)",不可判:"var(--unknown)",监测不可用:"var(--unknown)",无监测:"var(--unknown)"},er={bad:"var(--critical)",warn:"var(--warning)",note:"var(--muted)",ok:"var(--good)",unlisted:"var(--muted)",stale:"var(--muted)",meta:"var(--muted)"},$d={定论:"confirmed","准定论·预警":"near","候选·新发":"candidate_new",候选:"candidate","候选·记基线":"candidate_baseline",参考:"reference",INSUFFICIENT:"insufficient",正常:"normal",撤回:"withdrawn"},Jn=t=>"st."+(t==="ex"?"excellent":t),Ce=t=>{const e=Yn(t);return e?r(Jn(e)):xt(t)},mn=t=>{const e=$d[String(t)],s="tier."+e;return e?r(s):String(t)==="—"?"—":xt(t)},sr=(t,e,s)=>`<span class="duo" style="--c:${s}"><span class="st">${t}</span><span class="ev">${e}</span></span>`,Ie=t=>{let e=String(t??"");for(const[s,n]of xd)e=e.replace(s,n);return e},gn=t=>Ie(t),kd=(t,e)=>{if(!t||t.filter(m=>m!=null).length<3)return"";const s=t.filter(m=>m!=null),n=Math.min(...s),o=Math.max(...s),l=o-n||1,c=84,a=22,d=t.length;let g="",f=null;return t.forEach((m,_)=>{if(m==null)return;const x=_/(d-1)*c,q=a-2-(m-n)/l*(a-4);g+=(g?"L":"M")+x.toFixed(1)+" "+q.toFixed(1),f=[x,q]}),`<svg width="${c}" height="${a}" style="vertical-align:middle;margin-left:6px"><path d="${g}" fill="none" stroke="${e}" stroke-width="1.2" opacity=".75"/><circle cx="${f[0]}" cy="${f[1]}" r="2.4" fill="${e}"/></svg>`},Dd={齿轮箱:"#8A6D3B",发电机:"#4A6FA5",主轴承:"#2E7D6B",变桨叶片:"#4A6FA5",偏航:"#2E7D6B",测风:"#7C5295",其他:"#5A6470"},Fd=(t,e,s)=>{if(!e)return`<span class="small muted">${r("fus.no_alarm")}</span>`;const n=118,o=Math.max(6,Math.round(e/Math.max(s||e,1)*n));return`<div title="${ft(r("fus.fam_tip",{n:e,m:s||e}))}" style="display:flex;height:9px;border-radius:3px;overflow:hidden;width:${o}px">${(t||[]).map(l=>`<i title="${ft(we(l.k))} ${l.n}" style="width:${(l.n/e*100).toFixed(1)}%;background:${Dd[l.k]||"#5A6470"}"></i>`).join("")}</div><div class="small muted" style="margin-top:3px">${(t||[]).slice(0,2).map(l=>we(l.k)+" "+l.n).join(" · ")}</div>`};function Ed(t){const e=(t.列窗||{}).months||[];let s=`<div class="panel mb" style="border-left:3px solid var(--warning)"><b>${r("fus.rules_head")}</b><p class="small" style="margin-top:4px">${r("fus.rule1")}<br>${r("fus.rule2")}</p></div>`;s+=`<div class="panel mb"><h3>${r("fus.matrix_head")}</h3><p class="small muted">${r("fus.matrix_note1")}</p><p class="small">${r("fus.matrix_note2",{n:e.length,m0:e[0]||"?"})}</p>
  44. <div class="small muted" style="margin:6px 0 12px;line-height:2"><div><b>${r("fus.legend_state")}</b> ${["bad","warn","ok","ex","unk"].map(_=>`<span style="display:inline-flex;align-items:center;gap:4px;margin-right:12px"><i style="width:10px;height:10px;border-radius:2px;background:${Ql[_]}"></i>${r(Jn(_))}</span>`).join("")}</div>
  45. <div><b>${r("fus.legend_tier")}</b> ${["定论","准定论·预警","候选·新发","候选","候选·记基线","参考","INSUFFICIENT"].map(_=>`<span style="display:inline-flex;align-items:center;gap:4px;margin-right:12px"><i style="width:10px;height:10px;border-radius:2px;background:${(t.色标||{})[_]||"#ccc"}"></i>${mn(_)}</span>`).join("")}</div><div>${r("fus.legend_note")}</div></div>`;const n=_=>{const x=String(_||""),q=x.match(/20[0-9][0-9]-[0-9][0-9](?:~20[0-9][0-9]-[0-9][0-9])?|至[ ]*20[0-9][0-9]-[0-9][0-9]|20[0-9][0-9]~20[0-9][0-9]/);return q?q[0].startsWith("至")?r("win.through",{date:q[0].replace(/^至\s*/,"")}):q[0]:x.slice(0,14)},o=(_,x,q)=>`<th title="${ft(x||"")}${q||""}"><div>${_}</div><div class="small muted" style="font-weight:400">${xt(n(x))}${q||""}</div></th>`,l=t.列窗||{};s+=`<div class="tblwrap"><table class="fmx" style="table-layout:fixed;width:100%;min-width:900px"><colgroup><col style="width:7%">${'<col style="width:15.5%">'.repeat(6)}</colgroup><tr><th>${r("ui.unit")}</th>${o(r("fus.col.vib"),l.振动,r("fus.col.fixed"))}${o(r("fus.col.temp"),l.温度)}${o(r("fus.col.lub"),l.润滑,r("fus.col.display_only"))}${o(r("fus.col.oil"),l.油液)}${o(r("fus.col.alarm"),l.报警)}${o(r("fus.col.wo"),l.工单)}</tr>`;const c=t.矩阵||[],a=Math.max(1,...c.map(_=>(_.报警||{}).n||0)),d=Math.max(1,...c.map(_=>(_.工单||{}).n||0)),g=t.色标||{},f=_=>{if(_.ostate&&_.ostate!=="不可判")return Ce(_.ostate);const x=String(_.note||"");return/数据不足|不可判|nsufficient/.test(x)?r("fus.short.nodata"):/未评估|ot assessed/.test(x)?r("fus.short.uneval"):/无样|未取样|o sample/.test(x)?r("fus.short.nosample"):/样龄|stale/.test(x)?r("fus.short.stale"):{ok:r("fus.short.normal"),unlisted:r("fus.short.unlisted"),stale:r("fus.short.stale")}[_.level]||"—"},m=_=>{const x=_||{},q=tr[x.ostate]||g[x.wlevel]||er[x.level]||"var(--muted)",V=Ie(x.note),Y=["bad","warn","note"].includes(x.level),Q=ft(V)+r("fus.tip_state",{s:Ce(x.ostate||"?")});if(!Y)return`<td class="small" title="${Q}" style="border-left:3px solid ${q};color:var(--muted)">${f(x)}</td>`;const L=V.split(/[::]/),P=(L.length>1?L.slice(1).join(":"):V).trim(),F=/^[ ]*(评估报告|两口径差异|⚠|ssessment)/.test(P)||P.length>16?"":P,H=F?xt(F):x.ostate&&x.ostate!=="不可判"?"":f(x),pt=x.wlevel&&x.wlevel!=="—"&&x.wlevel!=="正常"&&x.ostate?sr(Ce(x.ostate),mn(x.wlevel),q):"";return`<td class="small" title="${Q}${r("fus.tip_tier",{e:mn(x.wlevel||"?")})}" style="border-left:3px solid ${q};overflow:hidden"><div><div style="color:${q};font-weight:${["bad","warn"].includes(x.level)?600:400}">${H}</div>${pt}</div>${kd(x.hist,x.level==="bad"?"var(--critical)":x.level==="warn"?"var(--warning)":"var(--muted)")}</td>`};return c.forEach(_=>{const x=_.报警||{n:0,fam:[]},q=_.工单||{n:0,acts:[]},V=x.rank&&x.rank<=5?"var(--warning)":"var(--line)",Y=x.burst,Q=ft((x.items||[]).map(L=>`${L.code} ${Ie(L.text)} — ${L.n} (${L.first}~${L.last})`).join(`
  46. `))+(Y?`
  47. `+ft(r("fus.burst_tip",{c:Y.code,p:(Y.share*100).toFixed(0),m:Y.med_s})):"");s+=`<tr><td><a href="/turbine/${_.turbine}"><b>${At(_.turbine)}</b></a></td>${m(_.振动)}${m(_.温度)}${m(_.润滑)}${m(_.油液)}
  48. <td title="${Q}" style="border-left:3px solid ${Y?"var(--unknown)":V}"><b class="small num" style="color:${x.rank&&x.rank<=10?"var(--ink)":"var(--muted)"}">${r("fus.alarm_n",{n:x.n})}</b>${x.rank?`<span class="small muted">${r("fus.alarm_rank",{r:x.rank,t:x.tot})}</span>`:""}${Y?`<div class="small" style="color:var(--unknown)">${r("fus.burst",{p:(Y.share*100).toFixed(0),c:Y.code})}</div>`:""}${x.rank&&x.rank<=10||Y?Fd(x.fam,x.n,a):""}</td>
  49. <td title="${ft((q.items||[]).map(L=>`${L.date} ${gn(L.name)} → ${gn(L.act)}${L.part?" "+gn(L.part):""}`).join(`
  50. `)||r("fus.wo_none"))}" style="min-width:110px">${q.n?`<b class="small">${r("fus.wo_n",{n:q.n})}</b>${q.last?`<span class="small muted"> · ${ft(q.last)}</span>`:""}<div style="height:7px;border-radius:3px;background:var(--muted);opacity:.5;margin-top:4px;width:${Math.max(6,Math.round(q.n/d*90))}px"></div><div class="small muted" style="margin-top:3px">${(q.acts||[]).slice(0,2).map(L=>xt(L.k)+"×"+L.n).join(" · ")}</div>`:'<span class="small muted">—</span>'}</td></tr>`}),s+`</table></div><p class="small muted" style="margin-top:8px">${r("fus.matrix_foot")}</p></div>`}const Bo=(t,e,s)=>{const n=Math.max(t,e,7),o=120,l=c=>Math.max(2,c/n*(o-4));return`<svg class="dt" viewBox="0 0 ${o} 26" style="width:${o}px;height:26px"><rect x="2" y="2" width="${l(t).toFixed(1)}" height="9" rx="2" fill="var(--muted)" fill-opacity=".55"/><rect x="2" y="15" width="${l(e).toFixed(1)}" height="9" rx="2" fill="${s}" fill-opacity=".9"/></svg>`},Tn=(t,e)=>{const s=String(t||"").replace(/main bearing[, ]*[(]?(?:rear|back)[)]?/ig,"主轴承后").replace(/main bearing[, ]*[(]?(?:front|forward)[)]?/ig,"主轴承前").replace(/main bearing/ig,"主轴承").replace(/generator[, ]*(?:NDE|non-drive[- ]end)/ig,"发电机NDE").replace(/generator[, ]*(?:DE|drive[- ]end)/ig,"发电机DE").replace(/generator/ig,"发电机").replace(/gearbox/ig,"齿轮箱").replace(/planetary/ig,"行星").replace(/intermediate[- ](?:speed[- ])?shaft/ig,"中间轴").replace(/high[- ]speed shaft/ig,"高速轴"),n=/齿轮箱/.test(s)&&!/行星|中间轴|中速|高速轴/.test(s);return`<span class="chain" title="${ft(Zl(t))}">${Od.map(([o,l])=>{const c=l.test(s)||n&&["ps","ims","hss"].includes(o);return`<i class="${c?"on":""}" style="${c?`background:${e};border-color:${e}`:""}" title="${r("chain."+o)}"></i>`}).join("")}</span>`};function Cd(t){const e=t.能力&&t.能力.loop&&t.能力.loop["换件闭环 (检出→换件→恢复)"]?t.能力.loop:null;if(!e)return`<div class="panel mb"><p class="small">${r("fus.loop_none")}</p></div>`;const s=e["换件闭环 (检出→换件→恢复)"]||[],n=e["当前在升 (无工单可对)"]||[],o=e["负面对照 (工单后持平)"];return`<div class="panel mb"><h3>${r("fus.loop_head")}</h3><p class="small">${r("fus.loop_note")}</p>
  51. <h3 style="margin-top:8px">${r("fus.loop_closed",{n:s.length})}</h3><div class="tblwrap"><table><tr><th>${r("ui.unit")}</th><th>${r("fus.col.part")}</th><th>${r("fus.loop_item")}</th><th>${r("fus.loop_date")}</th><th>${r("fus.loop_ba")}</th><th class="r">${r("fus.loop_ratio")}</th><th>${r("fus.loop_verdict")}</th></tr>
  52. ${s.map(l=>`<tr><td><b>${At(l.turbine)}</b></td><td>${Tn(l.component+(l.title||""),"var(--good)")} <span class="small">${hs(l.component)}</span></td><td class="small">${xt(l.title)}</td><td>${ft(l.replace_date)}</td><td>${Bo(l.pre,l.post,"var(--good)")}<span class="small muted">${l.pre} → ${l.post}</span></td><td class="r"><b style="color:var(--good)">${l.ratio}×</b></td><td><span class="chip ok">${xt(l.verdict)}</span></td></tr>`).join("")}</table></div>
  53. <p class="small" style="margin-top:6px">${r("fus.loop_neg",{n:o})}</p>
  54. <h3 style="margin-top:14px">${r("fus.loop_rising",{n:n.length})}</h3><div class="tblwrap"><table><tr><th>${r("ui.unit")}</th><th>${r("fus.col.part")}</th><th>${r("fus.loop_el")}</th><th class="r">${r("fus.loop_x")}</th><th>${r("fus.loop_state")}</th></tr>
  55. ${n.map(l=>`<tr><td><b>${At(l.turbine)}</b></td><td>${Tn(l.component,"var(--warning)")} <span class="small">${hs(l.component)}</span></td><td>${Bo(l.early,l.late,"var(--warning)")}<span class="small muted">${l.early} → ${l.late}</span></td><td class="r"><b style="color:var(--warning)">${l.ratio}×</b></td><td><span class="chip warn">${r("rpt.units.rising",{r:l.ratio})}</span></td></tr>`).join("")}</table></div>
  56. <p class="small muted" style="margin-top:8px">${r("fus.loop_bound",{b:xt(String(e["★数据边界"]||"").split("**").join(""))})}</p></div>`}const Md=(t,e,s,n)=>{if(e==null)return`<span class="small">${xt(Zl(n).slice(0,30))}</span>`;const o=6,l=104,c=l/2,a=Math.max(-1,Math.min(1,e/o)),d=Math.abs(a)*(c-8),f=Math.abs(e)>=3?/候选|andidate/.test(s||"")?"var(--warning)":/记基线|aseline/.test(s||"")?"var(--accent)":/不可判|返服|ndeterm/.test(s||"")?"var(--unknown)":"var(--muted)":"var(--muted)",m=Math.abs(e)>o;return`<div title="${ft(n||"")}" style="display:flex;align-items:center;gap:7px"><svg class="dt" viewBox="0 0 ${l} 18" style="width:${l}px;height:18px;flex:none"><line x1="4" y1="9" x2="${l-4}" y2="9" stroke="var(--line)" stroke-opacity=".7"/><line x1="${c}" y1="1" x2="${c}" y2="17" stroke="var(--muted)" stroke-opacity=".6"/><rect x="${e>=0?c:c-d}" y="4" width="${Math.max(d,1.5)}" height="10" rx="2" fill="${f}" fill-opacity=".9"/>${m?`<path d="M${e>0?l-5:5},9 l${e>0?-5:5},-4 v8 z" fill="${f}"/>`:""}</svg><b class="small num" style="color:${f}">${e>0?"+":""}${e}K</b></div><div class="small muted" style="margin-top:1px">${ft(t||"")}</div>`},Sd=(t,e)=>{if(!t||!t.length)return`<span class="small" title="${ft(e||"")}">${r("fus.win_none")}</span>`;const s=Date.parse("2026-01-01"),n=Date.parse("2026-09-01"),o=118,l=c=>3+Math.max(0,Math.min(1,(Date.parse(c)-s)/(n-s)))*(o-6);return`<div title="${ft(e||"")}"><svg class="dt" viewBox="0 0 ${o} 18" style="width:${o}px;height:18px"><rect x="3" y="4" width="${o-6}" height="10" rx="2" fill="var(--line)" fill-opacity=".5"/>${t.map(([c,a])=>{const d=l(c),g=l(a);return`<rect x="${d.toFixed(1)}" y="4" width="${Math.max(g-d,2.5).toFixed(1)}" height="10" rx="2" fill="var(--accent)" fill-opacity=".8"/>`}).join("")}</svg><div class="small muted">${r("fus.win_n",{n:t.length})}</div></div>`},Td=(t,e,s)=>`<div title="${ft(s||"")}" style="display:flex;align-items:center;gap:6px"><i style="width:9px;height:9px;border-radius:50%;flex:none;background:${e?"var(--good)":"var(--unknown)"}"></i><span class="small num">${ft(t||r("fus.oil_none"))}</span></div><div class="small muted">${t?r(e?"fus.oil_fresh":"fus.oil_stale"):"—"}</div>`,Le=(t,e)=>{const s=Yn(t);return s?`<span class="chip ${s} ">${r(Jn(s))}</span>`:t?`<span class="chip">${ft(t)}</span>`:""};function Ad(t,e){const s=t.表||[],n=t.矩阵||[];let o=s,c=`<div class="panel mb"><h3>${r("fus.units_head",{u:new Set(s.map(a=>a.turbine)).size,n:o.length+"",f:""})}</h3>
  57. <div style="display:flex;gap:8px;margin:8px 0 12px;flex-wrap:wrap">${["bad","warn","note","ok"].map(a=>`<button class="pill ${e===a?"on":""}" data-ffilter="${a}">${r("fus.lv."+a)}</button>`).join("")}<button class="pill " data-ffilter="unlisted">${r("fus.unlisted_link",{n:n.filter(a=>(a.振动||{}).level==="unlisted").length})}</button></div>
  58. <div class="panel" style="border-left:3px solid var(--accent);margin-bottom:12px"><b class="small">${r("fus.eval_head")}</b><div class="tblwrap"><table style="margin-top:8px"><tr><th style="width:30%">${r("fus.eval_state")}</th><th style="width:30%">${r("fus.eval_tier")}</th><th>${r("fus.eval_meaning")}</th></tr>
  59. <tr><td>${Le("危险")}</td><td><span class="tier confirmed">${r("tier.confirmed.s")}</span></td><td class="small">${r("fus.m.bad")} <span class="muted">(${r("fus.m.bad_e")})</span></td></tr>
  60. <tr><td>${Le("报警")}</td><td><span class="tier near">${r("tier.near")}</span> / <span class="tier candidate">${r("tier.candidate_new")}</span></td><td class="small">${r("fus.m.warn")} <span class="muted">(${r("fus.m.warn_e")})</span></td></tr>
  61. <tr><td>${Le("良好")}</td><td><span class="tier candidate">${r("tier.candidate")}</span> / <span class="tier candidate">${r("tier.candidate_baseline")}</span></td><td class="small">${r("fus.m.ok")} <span class="muted">(${r("fus.m.ok_e")})</span></td></tr>
  62. <tr><td>${Le("优秀")}</td><td><span class="tier reference">${r("tier.reference")}</span> / <span class="tier reference">${r("tier.normal")}</span> / <span class="tier withdrawn">${r("tier.withdrawn")}</span></td><td class="small">${r("fus.m.ex")} <span class="muted">(${r("fus.m.ex_e")})</span></td></tr>
  63. <tr><td>${Le("不可判")}</td><td><span class="tier insufficient">${r("tier.insufficient")}</span></td><td class="small">${r("fus.m.unk")} <span class="muted">(${r("fus.m.unk_e")})</span></td></tr></table></div><p class="small muted" style="margin-top:7px">${r("fus.eval_note")}</p></div>
  64. <div class="tblwrap"><table><tr><th>${r("ui.unit")}</th><th>${r("fus.col.part")}</th><th>${r("fus.col.state_concl")}</th><th>${r("fus.col.claim")} <span class="small muted" style="font-weight:400">${r("fus.col.claim_axis")}</span></th><th>${r("fus.col.signal")}</th><th>${r("fus.col.tempaxis")} <span class="small muted" style="font-weight:400">${r("fus.col.tempaxis_note")}</span></th><th>${r("fus.col.oil")}</th></tr>`;return o.forEach(a=>{const d=er[a.级]||"var(--accent)",g=tr[a.设备状态]||"var(--muted)";c+=`<tr><td><a href="/turbine/${a.turbine}"><b>${At(a.turbine)}</b></a></td><td style="min-width:200px">${Tn(a.部件,d)} <span class="small">${hs(a.部件)}</span></td>
  65. <td title="${ft(Ie(a.振动结论))}">${sr(Ce(a.设备状态||"—"),xt(a.振动结论),g)}</td><td style="min-width:130px">${Sd(a.窗区间,a.claim_window)}</td>
  66. <td class="small" title="${ft(a.振动信号||"")}">${xt(Ie(a.振动信号))}</td><td style="min-width:158px">${Md(a.温度通道,a.温度dev,a.温度判,a.温度轴)}</td><td style="min-width:112px">${Td(a.油末样,a.油新鲜,a.油样轴)}</td></tr>`}),c+"</table></div></div>"}const Od=[["mbf",/主轴承[((]前|主轴承前|主轴承[++]|主轴承(?![((前后])/],["mba",/主轴承[((]后|主轴承后/],["ps",/行星|二级行星/],["ims",/中间轴|中速/],["hss",/高速轴|高速(?!.*发电)/],["gde",/发电机DE|发电机[((]|发电机(?!NDE)/],["gnde",/发电机NDE|NDE/]],Qe=t=>Ql[Yn(t)]||null,Ro=t=>`<span class="chain">${Object.entries(t).map(([e,s])=>`<i class="${s?"on":""}" style="${s?`background:${s};border-color:${s}`:""}" title="${r("chain."+e)}"></i>`).join("")}</span>`,jd=t=>{const e=String(t||""),s=/准定论|near[- ](?:conf|establish)/i.test(e)?3:/确诊|onfirmed/.test(e)?4:/定论|ettled|stablished/.test(e)?3:/候选|andidate/.test(e)?2:/参考|eference/.test(e)?1:0,n=s>=4?"var(--critical)":s===3?"var(--warning)":s===2?"var(--accent)":s===1?"var(--muted)":"var(--unknown)";return`<div style="display:flex;align-items:center;gap:7px"><svg class="dt" viewBox="0 0 62 20" style="width:62px;height:20px;flex:none">${[0,1,2,3].map(o=>`<rect x="${2+o*15}" y="${12-o*3}" width="11" height="${6+o*3}" rx="1.5" fill="${o<s?n:"none"}" fill-opacity=".9" stroke="${n}" stroke-opacity="${o<s?1:.4}" ${o>=s?'stroke-dasharray="2 1.5"':""}/>`).join("")}</svg><span class="small" style="color:${n}">${xt(e)}</span></div>`};function Hd(t,e){if(!t.事件)return`<div class="panel mb"><p class="small muted">${r("ui.empty")}</p></div>`;let s=`<div class="panel mb"><p class="small muted"><b>${r("fus.ev_win",{win:Oe(e.win)})}</b></p></div>`;for(const[n,o]of Object.entries(t.事件)){const l=o,c=l.报警||{},a=l.工单||{};s+=`<div class="panel mb"><h3>${r("fus.ev_head",{c:we(n),an:c.总条数||0,au:c.台数||0,wn:a.总条数||0,wu:a.台数||0})}</h3>`,c.总条数>0?s+=`<div class="tblwrap"><table><tr><th>${r("fus.ev_code")}</th><th>${r("fus.ev_text")}</th><th class="r">${r("ui.count")}</th><th class="r">${r("fus.ev_units")}</th><th class="r">${r("fus.ev_dur")}</th></tr>${(c.码统计||[]).map(d=>`<tr><td>${ft(d.code)}</td><td class="small">${xt(Ie(d.text))}</td><td class="r">${d.条数}</td><td class="r">${d.台数}</td><td class="r">${d.时长h}</td></tr>`).join("")}</table></div>
  67. <p class="small">${r("fus.ev_top")}${Object.entries(c.top台||{}).map(([d,g])=>`<a href="/turbine/${d}">${At(d)}</a>×${g}`).join(" · ")}</p>
  68. <details><summary class="small">${r("fus.ev_recent",{n:(c.近况||[]).length})}</summary><div class="tblwrap"><table><tr><th>${r("ui.unit")}</th><th>${r("fus.ev_time")}</th><th>${r("fus.ev_code")}</th><th>${r("fus.ev_text")}</th><th class="r">${r("fus.ev_min")}</th></tr>${(c.近况||[]).map(d=>`<tr><td>${At(d.t)}</td><td class="small">${ft(d.on)}</td><td>${ft(d.code)}</td><td class="small">${xt(Ie(d.text))}</td><td class="r">${d.dur_min??"—"}</td></tr>`).join("")}</table></div></details>`:s+=`<p class="small">${r("fus.ev_no_alarm")}</p>`,a.总条数>0?s+=`<div class="tblwrap"><table style="margin-top:8px"><tr><th>${r("ui.unit")}</th><th>${r("ui.date")}</th><th>${r("fus.ev_wo_name")}</th><th>${r("fus.ev_wo_act")}</th><th>${r("fus.ev_wo_cause")}</th></tr>${(a.明细||[]).map(d=>`<tr><td>${At(d.t)}</td><td class="small">${ft(d.date)}</td><td class="small">${xt(d.name)}</td><td class="small">${xt(d.act)}</td><td class="small">${xt(d.cause)}</td></tr>`).join("")}</table></div>`:s+=`<p class="small">${r("fus.ev_no_wo")}</p>`,s+="</div>"}return s}function qd(t,e){if(!t)return`<div class="panel mb"><p class="small muted">${r("fus.cms_loading")}</p></div>`;if(t.error)return`<div class="panel mb"><p class="small" style="color:var(--critical)">${xt(t.error)}</p></div>`;const s={主轴承前:"mbf",主轴承后:"mba",齿轮箱:"gb",发电机:"gen",发电机DE:"gde",发电机NDE:"gnde","Main bearing, front":"mbf","Main bearing, rear":"mba",Gearbox:"gb",Generator:"gen","Generator DE":"gde","Generator NDE":"gnde"};return`<div class="panel mb"><h3>${r("fus.cms_head",{d:ft(t.date||"")})}</h3>
  69. ${t.时间范围?`<p class="small" style="margin:2px 0 6px">${r("fus.cms_window",{r:ft(t.时间范围)})}</p>`:""}
  70. <p class="small">${xt(t.overall||"")} ${r("fus.cms_note")}</p>
  71. <h3 style="margin-top:10px">${r("fus.cms_action")}</h3><div class="tblwrap"><table><tr><th>${r("ui.unit")}</th><th>${r("fus.loop_state")}</th><th>${r("fus.cms_focus")} <span class="small muted" style="font-weight:400">${r("fus.cms_focus_note")}</span></th><th>${r("fus.cms_evidence")}</th><th>${r("fus.cms_act")}</th></tr>
  72. ${(t.action||[]).map(n=>{const o={};return String(n[2]).split(/[;;]/).forEach(l=>{const c=l.split(/[::]/);if(c.length>1){const a=s[c[0].trim()]||null;a&&(o[a]=Qe(c[1].trim()))}}),`<tr><td><b>${At(n[0])}</b></td><td>${Le(n[1])}</td><td title="${ft(n[2])}">${Ro(o)} <span class="small muted">${xt(n[2])}</span></td><td style="min-width:150px">${jd(n[3])}</td><td>${/P0/.test(n[4])?`<b style="color:var(--critical)">${ft(n[4])}</b>`:ft(n[4])}</td></tr>`}).join("")}</table></div>
  73. <h3 style="margin-top:14px">${r("fus.cms_grades")}</h3><div class="tblwrap"><table><tr><th>${r("ui.unit")}</th><th>${r("fus.cms_chain")} <span class="small muted" style="font-weight:400">${r("fus.cms_chain_note")}</span></th><th>${r("fus.cms_overall")}</th><th>${r("fus.cms_act")}</th></tr>
  74. ${(t.grades||[]).map(n=>`<tr><td><b>${At(n.t)}</b></td><td title="${r("chain.mbf")} ${Ce(n.主轴承前)} · ${r("chain.mba")} ${Ce(n.主轴承后)} · ${r("chain.gb")} ${Ce(n.齿轮箱)} · ${r("chain.gen")} ${Ce(n.发电机)}">${Ro({mbf:Qe(n.主轴承前),mba:Qe(n.主轴承后),gb:Qe(n.齿轮箱),gen:Qe(n.发电机)})}</td><td>${Le(n.综合)}</td><td class="small">${ft(n.行动)}</td></tr>`).join("")}</table></div>
  75. <div class="small" style="margin-top:12px;padding:10px;border:1px solid var(--line);border-radius:8px"><b>${r("fus.cms_basis")}</b> ${r("fus.cms_basis_note",{a:((t.diff||{}).only_cms||[]).map(At).join(", ")||r("fus.none_word"),b:((t.diff||{}).only_vibration_package||(t.diff||{}).only_handoff||[]).map(At).join(", ")||r("fus.none_word")})}</div>
  76. <p class="small muted" style="margin-top:10px">${r("fus.cms_link")} <a href="http://localhost:8030/index.html" target="_blank" rel="noopener">${r("fus.cms_open")}</a> <a href="/windcms/index.html" target="_blank" rel="noopener">${r("fus.cms_static")}</a></p></div>`}const Ld=["matrix","loop","units","events","cms","portal_cms"];function Pd(t,e){const s=t&&t.fus||{},n=s.kpi||{},o=H=>typeof H=="number"?H:Number(H)||0,l=o(n.候选观察),c=o(n.全场??n.收录台),a=Math.max(c-l,0),d=String(t&&t.win||""),g=((s.事件||{}).主轴||{}).工单||{},f=o(g.总条数),m=e||{},_=Array.isArray(m.grades)?m.grades:[],x=H=>_.filter(pt=>String(pt.综合||"")===H).length,q=Array.isArray(m.action)?m.action.length:0,V=String(m.窗||""),Y=String(m.时间范围||"").replace(/^\S+\s*/,"").slice(0,60),Q=String(m.date||""),L=String(s.证据窗末||m.date||"").slice(0,10),P=(H,pt=!1)=>'<span style="display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:999px;font-size:12.5px;'+(pt?"border:1px solid var(--warning,#B7791F);color:var(--warning,#B7791F)":"border:1px solid var(--line,#D8DDE3);color:var(--sub,#5A6472);background:var(--panel2,#EDF0F3)")+'">'+H+"</span>",F=(H,pt,ct)=>'<div class="panel" style="flex:1 1 280px;min-width:260px"><div class="small muted">'+H+'</div><h3 style="margin:4px 0 6px">'+pt+'</h3><p class="small muted" style="margin:0">'+ct+"</p></div>";return'<div class="eyebrow">状态监测 · 振动诊断 (windcms)</div><div class="panel mb"><h3 style="margin:0 0 6px">振动与 SCADA 联合分析</h3><p class="small muted" style="margin:0 0 10px">六层模型:数据完整性 → ISO 标量 → 主轴承 rms → 台内自适应基线 → 谱线八闸 → 六枚举裁决。厂商判据与模型融合,机制未定不命名部件。</p><div style="display:flex;flex-wrap:wrap;gap:8px">'+P("当前时间窗 · "+d)+P("需关注 "+l+" 台",!0)+P("未见异常 "+a+" 台")+P("证据窗末 "+(L||"—"))+P("窗口内报警工单 · "+f+" 条",!0)+P("CMS 采集窗 "+(V||"—")+(Y?" · "+Y:""))+P("CMS 裁决 · 优秀 "+x("优秀")+" / 良好 "+x("良好")+" / 报警 "+x("报警"))+P("行动项 "+q+" 条"+(Q?" · 数据时点 "+Q:""))+P("TCM 六采集窗 · 320 万记录 · 160 万谱")+'</div></div><div class="eyebrow">振动分析 · 方法与证据边界</div><div style="display:flex;flex-wrap:wrap;gap:12px;margin-bottom:14px">'+F("比较基准","异常比较先核实基准","先确认测点、工况、处理链和频带可比,再结合线能量占比与机群分布识别异常。阈值须注明来源、样本和适用范围;本底接近检测下限时,倍数不宜单独解释,诊断仍需补充证据。")+F("证据关联","多种特征不等于独立证据","频谱、标量和时域特征若来自同一波形,应保留共同来源,避免重复计票。跨测点或跨窗口的一致性也需核查共同工况与采集依赖;结论升级应结合独立检修等证据,不以特征数量替代证据质量。")+F("结论边界","结论强度与证据匹配","使用“持续恶化”“单调”或“唯一”等表述前,应明确观察范围、比较对象、样本依赖和对应检验。端段差异不能代替全程趋势证据;复核发现支持不足时,补充验证或降低结论强度,并保留不确定性。")+'</div><div class="eyebrow">在线 · 客户版</div><div class="panel"><h3 style="margin:0 0 6px">CMS 振动分析工作台</h3><p class="small muted" style="margin:0 0 10px">左栏"需关注 / 未见异常"按台展开四个测点判级;工作台可选机组、测点、分析类即时出图;交互页可提问。演示只停客户版与一次工作台运行。</p><div style="display:flex;flex-wrap:wrap;gap:8px"><a class="chip" style="padding:5px 11px;border-radius:999px;border:1px solid var(--line,#D8DDE3);text-decoration:none" href="/cms/?theme=light" target="_blank" rel="noopener">新窗口打开 windcms →</a><a class="chip" style="padding:5px 11px;border-radius:999px;border:1px solid var(--line,#D8DDE3);text-decoration:none" href="/cms/workbench.html?theme=light" target="_blank" rel="noopener">工作台 →</a></div><iframe title="windcms" src="/cms/?theme=light" style="width:100%;height:760px;border:1px solid var(--line,#D8DDE3);border-radius:8px;margin-top:12px"></iframe></div>'}const Bd=typeof window<"u"?window:globalThis,Io=Bd.__charts,Rd=Io?Io({t:r,fmt:Ct,esc:ft,dv:xt,EN:!1,displayText:t=>t==null?"":String(t),verb:()=>{}}):{};function Xt(t,...e){const s=Rd[t];if(typeof s!="function")return"";try{return s(...e)}catch{return""}}const Id={key:0},Nd={class:"panel"},zd={class:"small muted"},Wd={key:1},Ud={class:"kpis",style:{"margin-bottom":"12px"}},Vd={key:0},Kd={class:"grid2"},Gd={class:"panel span2"},Yd={class:"small muted",style:{"font-weight":"400"}},Jd={class:"panel"},Xd={class:"small muted",style:{"margin-top":"6px"}},Zd={class:"panel"},Qd={class:"small muted",style:{"font-weight":"400"}},tu={class:"tblwrap"},eu={class:"r",style:{width:"90px"}},su={class:"small"},nu={class:"num small"},ou={class:"r small"},lu={class:"small muted",style:{"margin-top":"6px"}},ru=Ut({__name:"Energy",props:{d:{}},setup(t){const e=t,s=U(()=>(e.d?.control||{}).energy),n=U(()=>(e.d?.control||{}).states||[]),o={"限电·绑定":"loss.curtail_bound","限电命令·未绑定":"loss.curtail_unbound","停机(调度令)":"loss.dispatch",停机:"loss.stop",正常发电:"loss.normal",低风待机:"loss.lowwind"},l=d=>o[d]?r(o[d]):d,c=U(()=>{const d=s.value||{};return[{v:Ct(d.theo),u:"MWh",l:r("en.kpi_theo"),k:""},{v:Ct(d.act),u:"MWh",l:r("en.kpi_act",{h:Ct(d.eflh)}),k:"ok"},{v:Ct(d.loss_pct,1),u:"%",l:r("en.kpi_loss",{v:Ct(d.loss)}),k:d.loss_pct>=10?"warn":""},{v:d.cap_ok?r("en.cap_pass"):r("en.cap_fail"),u:"",l:r("en.cap_note",{op:d.cap_ok?"<":"≥",cap:Ct(d.cap)}),k:d.cap_ok?"ok":"bad"}]}),a=U(()=>Math.max(1,...n.value.map(d=>d.pct)));return(d,g)=>s.value?(D(),E("section",Wd,[i("div",Ud,[(D(!0),E(it,null,yt(c.value,(f,m)=>(D(),E("div",{key:m,class:ee(["kpi",f.k])},[i("b",null,[at(p(f.v),1),f.u?(D(),E("small",Vd,p(f.u),1)):vt("",!0)]),i("span",null,p(f.l),1)],2))),128))]),i("div",Kd,[i("div",Gd,[i("h3",null,[at(p(u(r)("en.balance"))+" ",1),i("span",Yd,p(u(r)("en.win",{win:u(Oe)(t.d.win)})),1)]),Tt(Jt,{html:u(Xt)("waterfall",s.value)},null,8,["html"])]),i("div",Jd,[i("h3",null,p(u(r)("en.blame")),1),Tt(Jt,{html:u(Xt)("blameBar",s.value)},null,8,["html"]),i("p",Xd,p(u(r)("en.blame_note",{n:u(Ct)(Math.round(((s.value.items||[]).find(f=>f.k==="停机")||{}).loss||0))})),1)]),i("div",Zd,[i("h3",null,[at(p(u(r)("en.states"))+" ",1),i("span",Qd,p(u(r)("en.win",{win:u(Oe)(t.d.win)})),1)]),i("div",tu,[i("table",null,[i("tr",null,[i("th",null,p(u(r)("en.state")),1),i("th",null,p(u(r)("en.share")),1),i("th",eu,p(u(r)("en.loss_mwh")),1)]),(D(!0),E(it,null,yt(n.value,f=>(D(),E("tr",{key:f.k},[i("td",su,p(l(f.k)),1),i("td",null,[i("i",{class:"bar",style:Pt(`width:${Math.round(f.pct/a.value*84)}px;background:${f.k.indexOf("停机")>=0&&f.k.indexOf("调度")<0?"var(--critical)":"var(--accent)"}`)},null,4),i("span",nu,p(f.pct)+"% · "+p(u(Ct)(Math.round(f.h)))+"h",1)]),i("td",ou,p(u(Ct)(Math.round(f.loss))),1)]))),128))])]),i("p",lu,[at(p(t.d.control.anchors||""),1),g[0]||(g[0]=i("br",null,null,-1)),at(p(u(r)("en.states_note")),1)])])])])):(D(),E("section",Id,[i("div",Nd,[i("p",zd,p(u(r)("ui.empty")),1)])]))}}),iu={class:"eyebrow"},au={class:"panel mb small",style:{"border-left":"3px solid var(--accent)"}},cu={style:{color:"var(--warning)"}},du={class:"grid2"},uu={class:"eyebrow",style:{"grid-column":"1/-1","margin-top":"4px"}},pu={style:{"text-transform":"none","letter-spacing":"0",color:"var(--muted)"}},fu={class:"panel span2"},hu={class:"small muted",style:{"margin-top":"6px"}},mu={class:"panel"},gu={class:"panel"},_u={class:"panel span2"},vu={class:"small muted",style:{"margin-top":"6px"}},bu={key:0,style:{color:"var(--warning)"}},xu={class:"panel"},yu={class:"tblwrap"},wu={style:{width:"70px"}},$u={class:"r",style:{width:"80px"}},ku={class:"num small"},Du={class:"r small"},Fu={class:"small muted",style:{"margin-top":"6px"}},Eu={key:0,class:"panel",style:{"border-left":"3px solid var(--critical)"}},Cu={class:"small"},Mu={key:1,class:"panel"},Su={class:"small muted",style:{"font-weight":"400"}},Tu={class:"small muted",style:{"margin-top":"6px"}},Au={class:"eyebrow",style:{"grid-column":"1/-1","margin-top":"4px"}},Ou={style:{"text-transform":"none","letter-spacing":"0",color:"var(--muted)"}},ju={key:0,class:"panel span2"},Hu={class:"small muted",style:{"margin-top":"6px"}},qu={style:{"margin-top":"12px"}},Lu={class:"small muted",style:{"margin-top":"2px"}},Pu={class:"panel"},Bu={class:"small muted",style:{"margin-top":"4px"}},Ru={class:"panel"},Iu={class:"tblwrap"},Nu={style:{width:"64px"}},zu={class:"r",style:{width:"56px"}},Wu={class:"num small"},Uu={class:"r small"},Vu={class:"small muted",style:{"margin-top":"6px"}},Ku=Ut({__name:"Fault",props:{d:{}},setup(t){const e=t,s=U(()=>e.d?.faults||{}),n=U(()=>s.value.partial||[]),o=U(()=>e.d?.m8&&!e.d.m8.err?e.d.m8.mtbf:null),l=U(()=>s.value.monthly||{months:[],vals:[]}),c=U(()=>n.value.length?(l.value.months||[]).indexOf(n.value[0]):-1),a=U(()=>{const P=n.value.length?r("flt.rate_partial",{m:n.value.join("/")}):r("flt.rate_full"),F=c.value>=0&&!!l.value.per_day;return P+(F?" "+r("flt.rate_example",{m:n.value[0],v:d.value}):"")}),d=U(()=>{const P=c.value;return P>=0&&l.value.per_day?l.value.per_day[P]:null}),g=U(()=>n.value.length?r("win.partial",{m:n.value.join("/"),c:Math.round((s.value.cov_min||0)*100)}):""),f=U(()=>s.value.per_t||[]),m=U(()=>Math.max(1,...f.value.map(P=>P.v))),_=U(()=>o.value&&e.d?.m8?.seasonal?e.d.m8.seasonal:[]),x=U(()=>e.d?.rel&&!e.d.rel.err?e.d.rel:null),q=U(()=>(e.d?.m8?.stop_pareto||[]).map(P=>({k:String(P.k).split(";")[0].slice(0,26),v:P.h}))),V=P=>hs(P),Y=U(()=>({months:_.value[0]&&_.value[0].months||[],series:_.value.slice(0,4).map(P=>({name:String(P.name).slice(0,16),vals:P.vals})),xlab:r("flt.seasonal_x")})),Q=U(()=>o.value?.台级top||[]),L=U(()=>Math.max(1,...Q.value.map(P=>P.时长h)));return(P,F)=>(D(),E("section",null,[i("div",iu,p(u(r)("flt.eyebrow")),1),i("div",au,[i("b",null,p(u(r)("win.banner",{win:u(Oe)(t.d.win)})),1),g.value?(D(),E(it,{key:0},[F[0]||(F[0]=at(" | ",-1)),i("span",cu,p(g.value),1)],64)):vt("",!0)]),i("div",du,[i("div",uu,[at(p(u(r)("flt.alarm_face"))+" ",1),i("span",pu,p(u(r)("flt.alarm_meta",{n:u(Ct)(s.value.total),c:s.value.n_codes,win:u(Oe)(t.d.win)})),1)]),i("div",fu,[i("h3",null,p(u(r)("flt.rate")),1),Tt(Jt,{html:u(Xt)("rateChart",l.value)},null,8,["html"]),i("p",hu,[i("b",null,p(u(r)("flt.rate_note")),1),at(" — "+p(a.value),1)])]),i("div",mu,[i("h3",null,p(u(r)("flt.pareto_n")),1),Tt(Jt,{html:u(Xt)("paretoChart",s.value.pareto_n||[],u(r)("unit.n"),u(r)("flt.pareto_n_note"))},null,8,["html"])]),i("div",gu,[i("h3",null,p(u(r)("flt.pareto_d")),1),Tt(Jt,{html:u(Xt)("paretoChart",s.value.pareto_d||[]," h",u(r)("flt.pareto_d_note"))},null,8,["html"])]),i("div",_u,[i("h3",null,p(u(r)("flt.quad")),1),Tt(Jt,{html:u(Xt)("quadChart",s.value.quad||[])},null,8,["html"]),i("p",vu,[at(p(u(r)("flt.quad_note",{n:s.value.n_codes,m:(s.value.quad||[]).length}))+" ",1),n.value.length?(D(),E("span",bu,p(u(r)("flt.quad_partial",{m:n.value.join("/"),c:Math.round((s.value.cov_min||0)*100)})),1)):vt("",!0),at(" "+p(u(r)("flt.quad_note2")),1)])]),i("div",xu,[i("h3",null,p(u(r)("flt.per_t",{n:f.value.length})),1),i("div",yu,[i("table",null,[i("tr",null,[i("th",wu,p(u(r)("ui.unit")),1),i("th",null,p(u(r)("ui.count")),1),i("th",$u,p(u(r)("flt.per_t_share")),1)]),(D(!0),E(it,null,yt(f.value,H=>(D(),E("tr",{key:H.k},[i("td",null,[i("b",null,p(u(At)(H.k)),1)]),i("td",null,[i("i",{class:"bar",style:Pt(`width:${Math.round(H.v/m.value*90)}px;background:${H.v/m.value>.6?"var(--critical)":"var(--accent)"}`)},null,4),i("span",ku,p(u(Ct)(H.v)),1)]),i("td",Du,p((H.v/s.value.total*100).toFixed(1))+"%",1)]))),128))])]),i("p",Fu,p(u(r)("flt.per_t_note",{n:u(Ct)(s.value.total)})),1)]),t.d.m8&&t.d.m8.err?(D(),E("div",Eu,[i("p",Cu,p(u(r)("flt.block_err",{k:"m8",e:t.d.m8.err})),1)])):vt("",!0),o.value&&_.value.length?(D(),E("div",Mu,[i("h3",null,[at(p(u(r)("flt.seasonal"))+" ",1),i("span",Su,"("+p(u(r)("flt.seasonal_unit"))+")",1)]),Tt(Jt,{html:u(Xt)("multiline",Y.value)},null,8,["html"]),i("p",Tu,p(u(r)("flt.seasonal_note")),1)])):vt("",!0),o.value?(D(),E(it,{key:2},[i("div",Au,[at(p(u(r)("flt.stop_face"))+" ",1),i("span",Ou,p(u(r)("flt.stop_meta",{h:u(Ct)(o.value.停机总时长h),n:u(Ct)(o.value.停机事件数)})),1)]),x.value?(D(),E("div",ju,[i("h3",null,p(u(r)("flt.ram")),1),Tt(Jt,{html:u(Xt)("ramChart",x.value&&x.value.表||[],V)},null,8,["html"]),i("p",Hu,p(u(r)("flt.ram_note",{a:x.value.设备类停机h,b:x.value.外部类停机h})),1),i("div",qu,[Tt(Jt,{html:u(Xt)("attribBar",x.value&&x.value.表||[],x.value&&x.value.总停机h||0)},null,8,["html"])]),i("p",Lu,p(u(r)("flt.attrib_note",{h:((x.value.表||[]).find(H=>H.部件==="无记录停机")||{}).停机时长h||0})),1)])):vt("",!0),i("div",Pu,[i("h3",null,p(u(r)("flt.stop_pareto")),1),Tt(Jt,{html:u(Xt)("paretoChart",q.value," h",u(r)("flt.stop_pareto_note"))},null,8,["html"]),i("p",Bu,p(o.value.口径),1)]),i("div",Ru,[i("h3",null,p(u(r)("flt.stop_units",{n:Q.value.length})),1),i("div",Iu,[i("table",null,[i("tr",null,[i("th",Nu,p(u(r)("ui.unit")),1),i("th",null,p(u(r)("flt.stop_h")),1),i("th",zu,p(u(r)("flt.stop_n")),1)]),(D(!0),E(it,null,yt(Q.value,H=>(D(),E("tr",{key:H.t},[i("td",null,[i("b",null,p(u(At)(H.t)),1)]),i("td",null,[i("i",{class:"bar",style:Pt(`width:${Math.round(H.时长h/L.value*90)}px;background:${H.时长h/L.value>.6?"var(--critical)":"var(--accent)"}`)},null,4),i("span",Wu,p(u(Ct)(H.时长h)),1),F[1]||(F[1]=at("h",-1))]),i("td",Uu,p(H.次),1)]))),128))])]),i("p",Vu,p(u(r)("flt.stop_units_note")),1)])],64)):vt("",!0)])]))}}),Gu=`:root{--ground:#070C14;--ground-2:#0B1220;--panel:#101A2B;--panel-2:#152238;--line:#1F2E44;--hair:#2A3B55;--ink:#E6EDF5;--ink-2:#C2CEDB;--muted:#8393A8;--accent:#3FC1D3;--accent-deep:#1F8FA0;--accent-soft:#0F2A35;--critical:#E4645C;--warning:#E0A43A;--good:#4CC39B;--excellent:#9AD8C4;--sans:"PingFang SC","Hiragino Sans GB","Microsoft YaHei",Inter,ui-sans-serif,system-ui,sans-serif;--mono:"SF Mono",Menlo,Consolas,monospace;--r:8px}
  77. *{box-sizing:border-box;margin:0} html{background:var(--ground)} body{background:var(--ground);color:var(--ink);font:14px/1.6 var(--sans)} a{color:var(--accent);text-decoration:none} a:hover{text-decoration:underline}
  78. .top{height:56px;display:flex;align-items:center;gap:18px;padding:0 24px;border-bottom:1px solid var(--line);background:#0A1120;position:sticky;top:0;z-index:5} .logo{width:30px;height:30px;border-radius:7px;background:linear-gradient(135deg,#1F8FA0,#0F2A35);display:grid;place-items:center;color:#fff;font-weight:700} .brand{font-weight:600} .brand small{display:block;color:var(--muted);font-size:11px;font-weight:400;letter-spacing:.08em}
  79. .tabs{display:flex;gap:2px;margin-left:12px} .tabs a{padding:8px 12px;color:var(--ink-2);border-bottom:2px solid transparent} .tabs a.on{color:var(--ink);border-color:var(--accent)} .tabs a:hover{text-decoration:none;color:var(--ink)} .live{margin-left:auto;border:1px solid var(--accent-deep);color:var(--accent);border-radius:6px;padding:6px 12px;font-size:13px}
  80. .wrap{max-width:1180px;margin:0 auto;padding:0 24px} .hero{background:var(--ground-2) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M32 0H0V32' fill='none' stroke='%233FC1D3' stroke-opacity='.06'/%3E%3C/svg%3E");border-bottom:1px solid var(--line);padding:64px 0 44px} .kicker{font:12px var(--mono);letter-spacing:.14em;color:var(--accent);text-transform:uppercase} h1{font-size:42px;line-height:1.15;font-weight:600;margin:12px 0 16px;max-width:820px} .lead{color:var(--ink-2);max-width:700px;font-size:16.5px} h2{font-size:24px;font-weight:600;margin:0 0 6px} h3{font-size:15px;font-weight:600;margin-bottom:8px}
  81. section{padding:44px 0;border-bottom:1px solid var(--line)} .sub{color:var(--muted);margin-bottom:22px} .grid{display:grid;gap:16px} .g2{grid-template-columns:repeat(2,1fr)} .g3{grid-template-columns:repeat(3,1fr)} .g4{grid-template-columns:repeat(4,1fr)} .g5{grid-template-columns:repeat(5,1fr)} .g6{grid-template-columns:repeat(6,1fr)}
  82. .card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:18px 20px;box-shadow:0 1px 2px #0006} .card .k{font:11px var(--mono);letter-spacing:.12em;color:var(--accent);text-transform:uppercase;margin-bottom:8px} .card p{color:var(--ink-2);font-size:13.5px} .card .num{font:600 34px/1.1 var(--mono);margin:6px 0 4px} .card .num span{font-size:14px;color:var(--muted);font-weight:400;margin-left:4px}
  83. .chips{display:flex;gap:8px;flex-wrap:wrap;margin-top:16px} .chip{font-size:12px;padding:4px 10px;border-radius:99px;border:1px solid var(--hair);color:var(--ink-2)} .chip.ev{border-color:var(--accent-deep);color:var(--accent)} .chip.s{border-color:transparent;color:#07151a;font-weight:600} .chip.al{background:var(--critical)} .chip.ob{background:var(--warning)} .chip.gd{background:var(--good)}
  84. .rail{display:grid;grid-template-columns:repeat(var(--n,5),1fr);position:relative;margin:18px 0 6px} .rail:before{content:"";position:absolute;left:8%;right:8%;top:14px;height:1px;background:var(--hair)} .node{text-align:center;position:relative;padding:0 6px} .node i{display:inline-grid;place-items:center;width:28px;height:28px;border-radius:50%;background:var(--panel-2);border:1px solid var(--hair);font:12px var(--mono);color:var(--ink-2);font-style:normal} .node.on i{border-color:var(--accent);color:var(--accent);box-shadow:0 0 0 1px #3FC1D340,0 0 18px #3FC1D330} .node b{display:block;margin-top:8px;font-size:13.5px} .node small{display:block;color:var(--muted);font-size:11.5px;margin-top:2px}
  85. .arrow{display:flex;gap:10px;align-items:center;color:var(--ink-2);font-size:13px;flex-wrap:wrap} .arrow b{background:var(--panel-2);border:1px solid var(--hair);border-radius:6px;padding:6px 10px;font-weight:500} .arrow i{color:var(--accent);font-style:normal}
  86. .callout{border-left:3px solid var(--accent);background:var(--accent-soft);padding:14px 16px;border-radius:0 var(--r) var(--r) 0;color:var(--ink-2);font-size:13.5px} .warn{border-left-color:var(--warning);background:#2a2110}
  87. .foot{color:var(--muted);font:11.5px var(--mono);padding:16px 24px;display:flex;gap:18px;border-top:1px solid var(--line)} .form{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:26px} .form label{display:block;font-size:12px;color:var(--muted);margin:12px 0 6px} .form input{width:100%;background:var(--ground-2);border:1px solid var(--hair);border-radius:6px;color:var(--ink);padding:10px 12px;font:14px var(--sans)} .btn{display:inline-block;margin-top:16px;background:var(--accent);color:#07151a;font-weight:600;padding:10px 18px;border-radius:6px} .btn:hover{text-decoration:none}
  88. table{border-collapse:collapse;font-size:13px;width:100%} th,td{border-bottom:1px solid var(--line);padding:8px 10px;text-align:left;vertical-align:top} th{color:var(--muted);font-weight:500;font-size:12px} td.n{font-family:var(--mono);text-align:right} iframe{width:100%;height:860px;border:1px solid var(--line);border-radius:var(--r);background:#fff}
  89. @media (max-width:1100px){.top{height:auto;flex-wrap:wrap;padding:8px 16px;row-gap:4px} .tabs{order:9;flex-basis:100%;flex-wrap:wrap;margin-left:0} .tabs a{padding:6px 9px;font-size:13px}} @media (max-width:900px){.g2,.g3,.g4,.g5,.g6{grid-template-columns:1fr 1fr} h1{font-size:30px}}
  90. .pg{display:none} .pg.on{display:block} .ov{position:fixed;inset:0;background:#070C14ee;z-index:50;display:none;flex-direction:column} .ov.on{display:flex} .ov .bar{height:44px;display:flex;align-items:center;gap:12px;padding:0 16px;border-bottom:1px solid var(--line);color:var(--ink-2)} .ov .bar b{flex:1} .ov iframe{flex:1;border:0;background:#fff;height:auto} .x{cursor:pointer;border:1px solid var(--hair);border-radius:6px;padding:4px 10px;color:var(--accent)}
  91. /* 当文件被直接打开且脚本未执行时,仍按 #锚点显示对应页面。 */
  92. .pg:target{display:block!important}
  93. .pg{scroll-margin-top:145px}
  94. :root{--ground:#F5F7F8;--ground-2:#F5F7F8;--panel:#fff;--panel-2:#E8F2F6;--ink:#1B2430;--ink-2:#5C6B78;--muted:#5C6B78;--line:#DDE3E8;--hair:#C9D1D8;--accent:#1F6F8B;--accent-deep:#175A71;--accent-soft:#E8F2F6;--r:10px;--critical:#bd3832;--warning:#a56a13;--good:#2E8B6A;--excellent:#2E8B6A}
  95. html{background:#E9EEF1;color-scheme:light}body{max-width:1440px;margin:auto;background:#F5F7F8;color:#1B2430;-webkit-font-smoothing:antialiased;box-shadow:0 0 0 1px #1733440a}
  96. .top{position:sticky;top:0;height:auto;min-height:0;display:flex;flex-wrap:wrap;gap:10px 18px;margin:0;padding:16px 30px 12px;background:#F5F7F8;border:0;box-shadow:none;z-index:10}.logo{width:28px;height:28px;border-radius:6px;background:linear-gradient(135deg,#175A71,#2E8B6A);box-shadow:none}.brand{color:#123344;font-size:15px}.brand small{color:#5C6B78;font-size:10px}.tabs{order:3;flex-basis:100%;display:flex;flex-wrap:nowrap;overflow-x:auto;gap:3px;margin:0;padding:6px;background:#fff;border:1px solid #DDE3E8;border-radius:10px;scrollbar-width:thin}.tabs a{flex:0 0 auto;padding:9px 13px;color:#5C6B78;font-size:13px;border:0;border-radius:6px;white-space:nowrap}.tabs a.on{background:#1F6F8B;color:white;box-shadow:none}.tabs a:hover{background:#E8F2F6;color:#175A71}.tabs a.on:hover{background:#175A71;color:white}.live{color:#175A71;background:#fff;border:1px solid #C9D1D8;padding:8px 12px;border-radius:7px;font-size:12px}
  97. .wrap{max-width:1240px;padding:0 30px}.hero{padding:54px 0 42px;background:#F5F7F8;border-bottom:1px solid #DDE3E8}.hero .kicker{font-size:11px;letter-spacing:.14em;font-weight:500}.hero h1{font-size:42px;line-height:1.25;letter-spacing:-.025em;max-width:920px;margin:16px 0 20px;color:#1B2430}.lead{font-size:16px;line-height:1.8;max-width:850px;color:#5C6B78}section{padding:36px 0;border-bottom:1px solid #DDE3E8;background:transparent}.kicker{font-size:11px;color:#1F6F8B;margin-bottom:10px}h2{font-size:27px;line-height:1.35;letter-spacing:-.014em;color:#1B2430;font-weight:600;margin-bottom:14px}h3{color:#1B2430}.sub{font-size:14px;line-height:1.75;color:#5C6B78;max-width:1000px;margin-bottom:22px}
  98. .grid{gap:14px;align-items:stretch}.g3{grid-template-columns:repeat(3,minmax(0,1fr))}.g2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid>*{min-width:0}.card{padding:22px;border:1px solid #DDE3E8;border-radius:10px;background:white;box-shadow:0 2px 8px #17334405;display:flex;flex-direction:column}.card .k{font-size:10.5px;letter-spacing:.1em;color:#73808B;line-height:1.6;margin-bottom:10px}.card h3{font-size:17px;line-height:1.4;font-weight:600;color:#1B2430;background:none;border:0;padding:0;margin:0 0 10px}.card p{font-size:13.5px;line-height:1.75;color:#5C6B78}.card>.chips{margin-top:auto;padding-top:18px}.card .num{font-size:30px;color:#1B2430}.chip{border-radius:6px;padding:6px 10px;font-size:12px;background:white;color:#425260;border-color:#C9D1D8}.chip.ev{background:#E8F2F6;color:#175A71;border-color:#BFDCE6}.chip.s{color:white}.chip.gd{background:#2E8B6A}.chip.al{background:#bd3832}
  99. #index>section:nth-of-type(3){background:#E8F2F6}#sim .grid.g3>.card:first-child{border-top:3px solid #1F6F8B}#sim .grid.g3>.card:nth-child(2){border-top:3px solid #2E8B6A}#sim .grid.g3>.card:nth-child(3){border-top:3px solid #C9D1D8}.rail{gap:12px}.rail:before{display:none}.node{padding:18px 16px;background:white;border:1px solid #C9D1D8;border-radius:9px;text-align:left}.node i{border:0;background:transparent;color:#1F6F8B;width:auto;height:auto}.node b{font-size:15px;margin-top:12px}.node small{color:#5C6B78;line-height:1.6}.node:last-child{background:#E8F2F6;border-color:#1F6F8B}.arrow b{background:#E8F2F6;color:#175A71;border:0}.callout{background:#E8F2F6;color:#425260;border-left:3px solid #1F6F8B;border-radius:7px;padding:14px 18px;box-shadow:none}.warn{background:#FDF7EC;border-color:#D48A1E}
  100. table{font-size:13px}th{background:#E8F2F6;color:#425260;font-size:12px;font-weight:600}td,th{padding:12px 14px;border-bottom:1px solid #DDE3E8}iframe{border:1px solid #C9D1D8;border-radius:10px;background:white}.form{background:white;border:1px solid #DDE3E8;box-shadow:none;border-radius:10px}.form input{background:#F5F7F8;color:#1B2430;border:1px solid #C9D1D8}.btn{background:#1F6F8B;color:white;border-radius:7px}.ov{background:#E9EEF1}.ov .bar{height:54px;background:#fff;border-bottom:1px solid #DDE3E8;color:#1B2430}.ov iframe{border-radius:0}.x{background:#E8F2F6;color:#175A71}.foot{background:#F5F7F8;color:#5C6B78;font-size:10.5px;flex-wrap:wrap}a:focus-visible,button:focus-visible{outline:3px solid #8FCBB5;outline-offset:3px}
  101. @media(max-width:900px){.g3,.g4,.g5,.g6{grid-template-columns:repeat(2,minmax(0,1fr))}.top{padding:12px 20px}.wrap{padding:0 20px}.hero h1{font-size:34px}.rail{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:600px){.g2,.g3,.g4,.g5,.g6{grid-template-columns:minmax(0,1fr)}.hero{padding:30px 0}.hero h1{font-size:29px}.lead{font-size:14px}h2{font-size:23px}.card{padding:20px}section{padding:28px 0}.top{gap:8px}.live{font-size:11px}.brand small{display:none}.foot{gap:8px}.ov .bar b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}
  102. :root{--fleet-art:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20520%20320%22%3E%3Cdefs%3E%3Cpattern%20id%3D%22g%22%20width%3D%2226%22%20height%3D%2226%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Cpath%20d%3D%22M26%200H0V26%22%20fill%3D%22none%22%20stroke%3D%22%2372b8c3%22%20stroke-opacity%3D%22.1%22%2F%3E%3C%2Fpattern%3E%3C%2Fdefs%3E%3Cpath%20fill%3D%22url%28%23g%29%22%20d%3D%22M0%200h520v320H0z%22%2F%3E%3Cg%20fill%3D%22none%22%20stroke%3D%22%2367bbb9%22%20stroke-width%3D%221.7%22%20opacity%3D%22.65%22%3E%3Cpath%20d%3D%22M22%20262Q142%20224%20272%20257T505%20245M22%20276Q142%20238%20272%20271T505%20259M22%20290Q142%20252%20272%20285T505%20273%22%2F%3E%3Cpath%20d%3D%22M152%20253V131m0%200%204-81%206%202-5%2074%2061%2039-4%205-66-36-58%2046-4-5%2060-49M291%20246V98m0%200%204-79%206%202-5%2072%2061%2039-4%205-66-36-58%2046-4-5%2060-49M405%20264V158m0%200%203-62%205%202-4%2057%2047%2030-3%204-52-29-45%2036-3-4%2048-36%22%2F%3E%3Ccircle%20cx%3D%22152%22%20cy%3D%22131%22%20r%3D%224%22%20fill%3D%22%2367bbb9%22%2F%3E%3Ccircle%20cx%3D%22291%22%20cy%3D%2298%22%20r%3D%224%22%20fill%3D%22%2367bbb9%22%2F%3E%3Ccircle%20cx%3D%22405%22%20cy%3D%22158%22%20r%3D%224%22%20fill%3D%22%2367bbb9%22%2F%3E%3Cpath%20d%3D%22M35%20248v-53h63v50m-68-51%208-9h60l7%209zm16%202v48m17-48v45m17-45v46M40%20172h39m-21-12h41%22%2F%3E%3Cpath%20stroke-dasharray%3D%224%206%22%20d%3D%22M78%20250Q240%20190%20452%20238%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%22465%22%20cy%3D%2228%22%20r%3D%2273%22%20fill%3D%22none%22%20stroke%3D%22%238fcbb5%22%20stroke-opacity%3D%22.12%22%2F%3E%3Ccircle%20cx%3D%22465%22%20cy%3D%2228%22%20r%3D%2299%22%20fill%3D%22none%22%20stroke%3D%22%238fcbb5%22%20stroke-opacity%3D%22.06%22%20stroke-width%3D%2220%22%2F%3E%3C%2Fsvg%3E");--signal-art:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20520%20320%22%3E%3Cg%20fill%3D%22none%22%20stroke%3D%22%2372b8c3%22%20opacity%3D%22.18%22%3E%3Cpath%20d%3D%22M40%2060h440M40%20110h440M40%20160h440M40%20210h440M40%20260h440M80%2035v245m80-245v245m80-245v245m80-245v245m80-245v245%22%2F%3E%3C%2Fg%3E%3Cg%20fill%3D%22none%22%20stroke%3D%22%2378d1c3%22%20stroke-width%3D%222%22%3E%3Cpath%20d%3D%22M35%20170h45l9-12%2010%2023%2013-38%2015%2050%2016-35%2013%2012h37l12-12%2012%2026%2016-69%2014%2099%2017-64%2015%2025%2013-5h34l14-18%2014%2029%2016-85%2014%20120%2018-63%2014%2026%2014-9h54%22%2F%3E%3Ccircle%20cx%3D%22350%22%20cy%3D%22180%22%20r%3D%2278%22%20opacity%3D%22.25%22%2F%3E%3Ccircle%20cx%3D%22350%22%20cy%3D%22180%22%20r%3D%2296%22%20opacity%3D%22.12%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}
  103. body{background:linear-gradient(120deg,#f1f7f9,#edf5f7);}.hero{background:transparent;padding:44px 0 38px}.hero>.wrap{position:relative;min-height:290px;padding-right:440px}.hero>.wrap:after{content:"";display:block;position:absolute;right:30px;top:0;bottom:0;width:350px;min-height:255px;border:1px solid #326274;border-radius:18px;background-color:#103848;background-image:var(--fleet-art),linear-gradient(125deg,#0b293a,#124b5b);background-size:cover;background-position:center;box-shadow:0 10px 28px #17334412}.hero h1{font-size:36px;line-height:1.32;max-width:100%;margin-top:12px}.hero .lead{font-size:15px;line-height:1.85}.hero .kicker{color:#1F6F8B;font-size:11px}#cms>.hero>.wrap:after{background-image:var(--signal-art),linear-gradient(125deg,#0b293a,#124b5b)}h2{position:relative;padding-left:16px}h2:before{content:"";position:absolute;left:0;top:.15em;bottom:.15em;width:4px;border-radius:3px;background:linear-gradient(#078594,#48c4b2)}.card{border-color:#d2e3e9;box-shadow:0 5px 18px #17334407;border-radius:13px}.grid>.card{border-top:3px solid #78aebf}.grid>.card:nth-child(3n+2){border-top-color:#59a58e}.grid>.card:nth-child(3n){border-top-color:#8397a5}.card .num{color:#133d50}.tabs{background:#e3eff3;border-color:#cce0e7;padding:7px}.tabs a{padding:10px 14px}.tabs a.on{background:#007c8a;box-shadow:0 3px 9px #075b7120}.logo{width:36px;height:36px;background:#0d4354;border:1px solid #58999e;color:#7ee0cd;font-size:22px}.brand{font-size:18px}.callout{background:#e8f3f6}.ov .bar{background:#123b4d;color:#fff}.ov .x{background:#eaf5f7;color:#123b4d}.hero .chips{gap:7px}.hero .chip{font-size:11px}
  104. @media(max-width:1050px){.hero>.wrap{padding-right:360px}.hero>.wrap:after{width:290px}.hero h1{font-size:31px}}
  105. @media(max-width:760px){.hero>.wrap{padding:0 20px;min-height:0}.hero>.wrap:after{position:relative;right:auto;top:auto;bottom:auto;width:100%;height:170px;min-height:0;margin-top:24px;background-size:auto 250px,cover;background-repeat:no-repeat}.hero h1{font-size:29px}.hero{padding-top:28px}.card{border-radius:11px}}
  106. .hero>.wrap:after{background-size:contain,cover;background-repeat:no-repeat;background-position:center}#findings>section:nth-of-type(2) .grid.g4>.card:first-child{background:#123b4d;border-color:#326274}#findings>section:nth-of-type(2) .grid.g4>.card:first-child h3,#findings>section:nth-of-type(2) .grid.g4>.card:first-child .num{color:#fff}#findings>section:nth-of-type(2) .grid.g4>.card:first-child p,#findings>section:nth-of-type(2) .grid.g4>.card:first-child .k,#findings>section:nth-of-type(2) .grid.g4>.card:first-child .num span{color:#bfdce6}@media(max-width:760px){.top{position:relative}.tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));overflow:visible;gap:4px}.tabs a{text-align:center;font-size:11px;padding:9px 4px}.pg{scroll-margin-top:0}.hero>.wrap:after{border-radius:13px}}
  107. #architecture>.hero>.wrap:after{background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20520%20320%22%3E%3Cdefs%3E%3Cpattern%20id%3D%22grid%22%20width%3D%2226%22%20height%3D%2226%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Cpath%20d%3D%22M26%200H0V26%22%20fill%3D%22none%22%20stroke%3D%22%2381bac5%22%20stroke-opacity%3D%22.1%22%2F%3E%3C%2Fpattern%3E%3C%2Fdefs%3E%3Crect%20width%3D%22520%22%20height%3D%22320%22%20fill%3D%22url%28%23grid%29%22%2F%3E%3Cg%20fill%3D%22none%22%20stroke%3D%22%237bcbbb%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20opacity%3D%22.8%22%3E%3Cpath%20d%3D%22M95%2090H260V155H425M95%20230H260V155M260%2055V255%22%2F%3E%3Crect%20x%3D%2271%22%20y%3D%2270%22%20width%3D%2248%22%20height%3D%2240%22%20rx%3D%227%22%20fill%3D%22%23154858%22%2F%3E%3Crect%20x%3D%2271%22%20y%3D%22210%22%20width%3D%2248%22%20height%3D%2240%22%20rx%3D%227%22%20fill%3D%22%23154858%22%2F%3E%3Crect%20x%3D%22236%22%20y%3D%2235%22%20width%3D%2248%22%20height%3D%2240%22%20rx%3D%227%22%20fill%3D%22%23154858%22%2F%3E%3Crect%20x%3D%22236%22%20y%3D%22135%22%20width%3D%2248%22%20height%3D%2240%22%20rx%3D%227%22%20fill%3D%22%23154858%22%2F%3E%3Crect%20x%3D%22236%22%20y%3D%22235%22%20width%3D%2248%22%20height%3D%2240%22%20rx%3D%227%22%20fill%3D%22%23154858%22%2F%3E%3Crect%20x%3D%22401%22%20y%3D%22135%22%20width%3D%2248%22%20height%3D%2240%22%20rx%3D%227%22%20fill%3D%22%23154858%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),linear-gradient(125deg,#0b293a,#124b5b)}#method>.hero>.wrap:after{background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20520%20320%22%3E%3Cdefs%3E%3Cpattern%20id%3D%22grid%22%20width%3D%2226%22%20height%3D%2226%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Cpath%20d%3D%22M26%200H0V26%22%20fill%3D%22none%22%20stroke%3D%22%2381bac5%22%20stroke-opacity%3D%22.1%22%2F%3E%3C%2Fpattern%3E%3C%2Fdefs%3E%3Crect%20width%3D%22520%22%20height%3D%22320%22%20fill%3D%22url%28%23grid%29%22%2F%3E%3Cg%20fill%3D%22none%22%20stroke%3D%22%237bcbbb%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20opacity%3D%22.8%22%3E%3Cpath%20d%3D%22M65%20170H455%22%2F%3E%3Crect%20x%3D%2250%22%20y%3D%22140%22%20width%3D%2265%22%20height%3D%2265%22%20rx%3D%2210%22%20fill%3D%22%23154858%22%2F%3E%3Cpath%20d%3D%22M68%20165l10%2010%2020-24%22%2F%3E%3Crect%20x%3D%22165%22%20y%3D%22125%22%20width%3D%2265%22%20height%3D%2265%22%20rx%3D%2210%22%20fill%3D%22%23154858%22%2F%3E%3Cpath%20d%3D%22M183%20150l10%2010%2020-24%22%2F%3E%3Crect%20x%3D%22280%22%20y%3D%22140%22%20width%3D%2265%22%20height%3D%2265%22%20rx%3D%2210%22%20fill%3D%22%23154858%22%2F%3E%3Cpath%20d%3D%22M298%20165l10%2010%2020-24%22%2F%3E%3Crect%20x%3D%22395%22%20y%3D%22125%22%20width%3D%2265%22%20height%3D%2265%22%20rx%3D%2210%22%20fill%3D%22%23154858%22%2F%3E%3Cpath%20d%3D%22M413%20150l10%2010%2020-24%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),linear-gradient(125deg,#0b293a,#124b5b)}#findings>.hero>.wrap:after{background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20520%20320%22%3E%3Cdefs%3E%3Cpattern%20id%3D%22grid%22%20width%3D%2226%22%20height%3D%2226%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Cpath%20d%3D%22M26%200H0V26%22%20fill%3D%22none%22%20stroke%3D%22%2381bac5%22%20stroke-opacity%3D%22.1%22%2F%3E%3C%2Fpattern%3E%3C%2Fdefs%3E%3Crect%20width%3D%22520%22%20height%3D%22320%22%20fill%3D%22url%28%23grid%29%22%2F%3E%3Cg%20fill%3D%22none%22%20stroke%3D%22%237bcbbb%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20opacity%3D%22.8%22%3E%3Ccircle%20cx%3D%22280%22%20cy%3D%22160%22%20r%3D%22105%22%20opacity%3D%22.3%22%2F%3E%3Ccircle%20cx%3D%22280%22%20cy%3D%22160%22%20r%3D%2275%22%20opacity%3D%22.3%22%2F%3E%3Cpath%20d%3D%22M70%20255L135%20222%20205%20233%20272%20180%20335%20193%20425%2098%22%2F%3E%3Ccircle%20cx%3D%22135%22%20cy%3D%22222%22%20r%3D%225%22%20fill%3D%22%237ecaba%22%2F%3E%3Ccircle%20cx%3D%22205%22%20cy%3D%22233%22%20r%3D%225%22%20fill%3D%22%237ecaba%22%2F%3E%3Ccircle%20cx%3D%22272%22%20cy%3D%22180%22%20r%3D%225%22%20fill%3D%22%237ecaba%22%2F%3E%3Ccircle%20cx%3D%22335%22%20cy%3D%22193%22%20r%3D%225%22%20fill%3D%22%237ecaba%22%2F%3E%3Ccircle%20cx%3D%22425%22%20cy%3D%2298%22%20r%3D%225%22%20fill%3D%22%237ecaba%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),linear-gradient(125deg,#0b293a,#124b5b)}#case_hydraulic>.hero>.wrap:after{background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20520%20320%22%3E%3Cdefs%3E%3Cpattern%20id%3D%22grid%22%20width%3D%2226%22%20height%3D%2226%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Cpath%20d%3D%22M26%200H0V26%22%20fill%3D%22none%22%20stroke%3D%22%2381bac5%22%20stroke-opacity%3D%22.1%22%2F%3E%3C%2Fpattern%3E%3C%2Fdefs%3E%3Crect%20width%3D%22520%22%20height%3D%22320%22%20fill%3D%22url%28%23grid%29%22%2F%3E%3Cg%20fill%3D%22none%22%20stroke%3D%22%237bcbbb%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20opacity%3D%22.8%22%3E%3Cpath%20d%3D%22M90%20210V90H420V210H90M250%2090V210M175%20210V245H335V210%22%2F%3E%3Ccircle%20cx%3D%2290%22%20cy%3D%22155%22%20r%3D%2225%22%20fill%3D%22%23154858%22%2F%3E%3Cpath%20d%3D%22m78%20167%2023-13-23-13z%22%2F%3E%3Crect%20x%3D%22226%22%20y%3D%22120%22%20width%3D%2248%22%20height%3D%2270%22%20rx%3D%2220%22%20fill%3D%22%23154858%22%2F%3E%3Cpath%20d%3D%22M229%20155h43%22%2F%3E%3Crect%20x%3D%22395%22%20y%3D%22123%22%20width%3D%2250%22%20height%3D%2260%22%20fill%3D%22%23154858%22%2F%3E%3Cpath%20d%3D%22M420%20125v58m-14-30h28%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),linear-gradient(125deg,#0b293a,#124b5b)}#cms>.hero>.wrap:after{background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20520%20320%22%3E%3Cdefs%3E%3Cpattern%20id%3D%22grid%22%20width%3D%2226%22%20height%3D%2226%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Cpath%20d%3D%22M26%200H0V26%22%20fill%3D%22none%22%20stroke%3D%22%2381bac5%22%20stroke-opacity%3D%22.1%22%2F%3E%3C%2Fpattern%3E%3C%2Fdefs%3E%3Crect%20width%3D%22520%22%20height%3D%22320%22%20fill%3D%22url%28%23grid%29%22%2F%3E%3Cg%20fill%3D%22none%22%20stroke%3D%22%237bcbbb%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20opacity%3D%22.8%22%3E%3Cpath%20d%3D%22M45%20170h45l12-16%2012%2034%2014-53%2016%2070%2017-41h35l16%2018%2017-84%2017%20124%2018-63h36l17-29%2017%2065%2017-100%2017%20120%2017-47h55%22%2F%3E%3Ccircle%20cx%3D%22275%22%20cy%3D%22160%22%20r%3D%22103%22%20opacity%3D%22.2%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),linear-gradient(125deg,#0b293a,#124b5b)}#sim>.hero>.wrap:after{background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20520%20320%22%3E%3Cdefs%3E%3Cpattern%20id%3D%22grid%22%20width%3D%2226%22%20height%3D%2226%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Cpath%20d%3D%22M26%200H0V26%22%20fill%3D%22none%22%20stroke%3D%22%2381bac5%22%20stroke-opacity%3D%22.1%22%2F%3E%3C%2Fpattern%3E%3C%2Fdefs%3E%3Crect%20width%3D%22520%22%20height%3D%22320%22%20fill%3D%22url%28%23grid%29%22%2F%3E%3Cg%20fill%3D%22none%22%20stroke%3D%22%237bcbbb%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20opacity%3D%22.8%22%3E%3Cpath%20d%3D%22M75%20225C165%20225%20170%20155%20235%20155S360%20156%20455%20156%22%20stroke-dasharray%3D%226%207%22%2F%3E%3Cpath%20d%3D%22M75%20230C125%20230%20140%2077%20200%2090S270%20231%20320%20171%20390%2090%20455%20125%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),linear-gradient(125deg,#0b293a,#124b5b)}#documents>.hero>.wrap:after{background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20520%20320%22%3E%3Cdefs%3E%3Cpattern%20id%3D%22grid%22%20width%3D%2226%22%20height%3D%2226%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Cpath%20d%3D%22M26%200H0V26%22%20fill%3D%22none%22%20stroke%3D%22%2381bac5%22%20stroke-opacity%3D%22.1%22%2F%3E%3C%2Fpattern%3E%3C%2Fdefs%3E%3Crect%20width%3D%22520%22%20height%3D%22320%22%20fill%3D%22url%28%23grid%29%22%2F%3E%3Cg%20fill%3D%22none%22%20stroke%3D%22%237bcbbb%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20opacity%3D%22.8%22%3E%3Crect%20x%3D%22155%22%20y%3D%2250%22%20width%3D%22190%22%20height%3D%22225%22%20rx%3D%2210%22%2F%3E%3Cpath%20d%3D%22M185%2091h128m-128%2025h80m-80%2028h128m-128%2085h130M190%20207v-35m35%2035v-20m35%2020v-51m35%2051v-65%22%2F%3E%3Cpath%20d%3D%22m352%20206%2017%2017%2035-41%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),linear-gradient(125deg,#0b293a,#124b5b)}#admin>.hero>.wrap:after{background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20520%20320%22%3E%3Cdefs%3E%3Cpattern%20id%3D%22grid%22%20width%3D%2226%22%20height%3D%2226%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Cpath%20d%3D%22M26%200H0V26%22%20fill%3D%22none%22%20stroke%3D%22%2381bac5%22%20stroke-opacity%3D%22.1%22%2F%3E%3C%2Fpattern%3E%3C%2Fdefs%3E%3Crect%20width%3D%22520%22%20height%3D%22320%22%20fill%3D%22url%28%23grid%29%22%2F%3E%3Cg%20fill%3D%22none%22%20stroke%3D%22%237bcbbb%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20opacity%3D%22.8%22%3E%3Cpath%20d%3D%22M100%20160H420M260%2080v160%22%2F%3E%3Crect%20x%3D%2265%22%20y%3D%22140%22%20width%3D%22105%22%20height%3D%2240%22%20rx%3D%227%22%20fill%3D%22%23154858%22%2F%3E%3Ccircle%20cx%3D%2283%22%20cy%3D%22160%22%20r%3D%224%22%20fill%3D%22%237ecaba%22%2F%3E%3Cpath%20d%3D%22M101%20160h48%22%2F%3E%3Crect%20x%3D%22205%22%20y%3D%2265%22%20width%3D%22105%22%20height%3D%2240%22%20rx%3D%227%22%20fill%3D%22%23154858%22%2F%3E%3Ccircle%20cx%3D%22223%22%20cy%3D%2285%22%20r%3D%224%22%20fill%3D%22%237ecaba%22%2F%3E%3Cpath%20d%3D%22M241%2085h48%22%2F%3E%3Crect%20x%3D%22205%22%20y%3D%22140%22%20width%3D%22105%22%20height%3D%2240%22%20rx%3D%227%22%20fill%3D%22%23154858%22%2F%3E%3Ccircle%20cx%3D%22223%22%20cy%3D%22160%22%20r%3D%224%22%20fill%3D%22%237ecaba%22%2F%3E%3Cpath%20d%3D%22M241%20160h48%22%2F%3E%3Crect%20x%3D%22205%22%20y%3D%22215%22%20width%3D%22105%22%20height%3D%2240%22%20rx%3D%227%22%20fill%3D%22%23154858%22%2F%3E%3Ccircle%20cx%3D%22223%22%20cy%3D%22235%22%20r%3D%224%22%20fill%3D%22%237ecaba%22%2F%3E%3Cpath%20d%3D%22M241%20235h48%22%2F%3E%3Crect%20x%3D%22350%22%20y%3D%22140%22%20width%3D%22105%22%20height%3D%2240%22%20rx%3D%227%22%20fill%3D%22%23154858%22%2F%3E%3Ccircle%20cx%3D%22368%22%20cy%3D%22160%22%20r%3D%224%22%20fill%3D%22%237ecaba%22%2F%3E%3Cpath%20d%3D%22M386%20160h48%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),linear-gradient(125deg,#0b293a,#124b5b)}#login>.hero>.wrap:after{background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20520%20320%22%3E%3Cdefs%3E%3Cpattern%20id%3D%22grid%22%20width%3D%2226%22%20height%3D%2226%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Cpath%20d%3D%22M26%200H0V26%22%20fill%3D%22none%22%20stroke%3D%22%2381bac5%22%20stroke-opacity%3D%22.1%22%2F%3E%3C%2Fpattern%3E%3C%2Fdefs%3E%3Crect%20width%3D%22520%22%20height%3D%22320%22%20fill%3D%22url%28%23grid%29%22%2F%3E%3Cg%20fill%3D%22none%22%20stroke%3D%22%237bcbbb%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20opacity%3D%22.8%22%3E%3Cpath%20d%3D%22M260%2048l100%2040v76c0%2062-54%2097-100%20116-46-19-100-54-100-116V88z%22%2F%3E%3Crect%20x%3D%22222%22%20y%3D%22140%22%20width%3D%2276%22%20height%3D%2266%22%20rx%3D%2210%22%2F%3E%3Cpath%20d%3D%22M239%20140v-19a21%2021%200%200%201%2042%200v19M260%20166v20%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),linear-gradient(125deg,#0b293a,#124b5b)}
  108. .hero h1{font-family:"PingFang SC","Hiragino Sans GB",sans-serif;font-weight:650;letter-spacing:-.03em}.hero .kicker,.card .k{font-family:"SF Mono",Menlo,monospace;letter-spacing:.13em;font-weight:500}.card h3{font-size:18px;font-weight:600;letter-spacing:-.015em}.card p,.lead{font-family:"PingFang SC","Microsoft YaHei",sans-serif;font-weight:400}.card .num{font-family:"SF Mono",Menlo,monospace;font-weight:600;font-variant-numeric:tabular-nums}#findings .hero h1{font-family:"Songti SC","STSong",serif;font-size:40px;letter-spacing:.035em;font-weight:700}#method .hero h1,#architecture .hero h1{font-weight:700;letter-spacing:-.02em}#documents .hero h1{font-weight:500;line-height:1.45}@media(max-width:760px){#findings .hero h1{font-size:31px}.card h3{font-size:17px}}
  109. .return-dock{position:fixed;right:22px;bottom:18px;z-index:30;display:flex;gap:8px;padding:8px;background:#ffffffed;border:1px solid #bfd4df;border-radius:10px;box-shadow:0 4px 20px #143b4d1c}.return-dock a{padding:8px 12px;border-radius:6px;color:#175a71;font-size:12px}.return-dock a:first-child{border:1px solid #bfd4df}.chips a:first-child.ev,.btn{background:#087c8a;color:#fff;border-color:#087c8a}.chips a:not(:first-child){background:white;color:#175a71}.ov .x{font:600 14px sans-serif;padding:9px 16px;border:1px solid #bfdce6}.foot{padding-bottom:85px}@media(max-width:600px){.return-dock{left:10px;right:10px;bottom:8px;justify-content:center;gap:2px}.return-dock a{padding:7px;font-size:11px}}
  110. #index>.hero>.wrap{padding:178px 30px 0;min-height:0}#index>.hero>.wrap:after{top:0;left:30px;right:30px;bottom:auto;width:auto;height:145px;min-height:0;background-size:auto 220px,cover;background-position:85% center,center;border-radius:18px}#index>.hero h1{max-width:850px;font-size:40px}
  111. #architecture>.hero>.wrap,#case_hydraulic>.hero>.wrap{padding-left:440px;padding-right:30px}#architecture>.hero>.wrap:after,#case_hydraulic>.hero>.wrap:after{left:30px;right:auto;width:350px}
  112. #method>.hero>.wrap{padding:0 30px;min-height:0}#method>.hero>.wrap:after{position:relative;left:auto;right:auto;top:auto;bottom:auto;width:100%;height:160px;min-height:0;margin-top:26px;background-size:auto 270px,cover;border-radius:12px}#method>.hero h1{max-width:900px}
  113. #cms>.hero>.wrap{padding:0 30px 165px;min-height:0}#cms>.hero>.wrap:after{left:30px;right:30px;bottom:0;top:auto;width:auto;height:140px;min-height:0;background-size:auto 250px,cover;border-radius:12px}#cms>.hero h1{max-width:950px}
  114. #documents>.hero>.wrap{padding:12px 30px;min-height:290px;isolation:isolate}#documents>.hero>.wrap>*{position:relative;z-index:1;max-width:780px}#documents>.hero>.wrap:after{z-index:0;width:35%;border:0;border-radius:0;box-shadow:none;background-color:transparent;background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20520%20320%22%3E%3Cdefs%3E%3Cpattern%20id%3D%22grid%22%20width%3D%2226%22%20height%3D%2226%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Cpath%20d%3D%22M26%200H0V26%22%20fill%3D%22none%22%20stroke%3D%22%2381bac5%22%20stroke-opacity%3D%22.1%22%2F%3E%3C%2Fpattern%3E%3C%2Fdefs%3E%3Crect%20width%3D%22520%22%20height%3D%22320%22%20fill%3D%22url%28%23grid%29%22%2F%3E%3Cg%20fill%3D%22none%22%20stroke%3D%22%237bcbbb%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20opacity%3D%22.8%22%3E%3Crect%20x%3D%22155%22%20y%3D%2250%22%20width%3D%22190%22%20height%3D%22225%22%20rx%3D%2210%22%2F%3E%3Cpath%20d%3D%22M185%2091h128m-128%2025h80m-80%2028h128m-128%2085h130M190%20207v-35m35%2035v-20m35%2020v-51m35%2051v-65%22%2F%3E%3Cpath%20d%3D%22m352%20206%2017%2017%2035-41%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");opacity:.45;background-size:contain}#admin>.hero>.wrap{padding:0 30px;min-height:0}#admin>.hero>.wrap:after{position:relative;left:auto;right:auto;top:auto;bottom:auto;width:100%;height:130px;min-height:0;margin-top:22px;background-size:auto 235px,cover;border-radius:10px}
  115. #login>.hero>.wrap:after{width:285px;right:60px;border-radius:110px 110px 18px 18px}#login>.hero>.wrap{padding-right:410px}
  116. @media(max-width:1050px) and (min-width:761px){#architecture>.hero>.wrap,#case_hydraulic>.hero>.wrap{padding-left:360px}#architecture>.hero>.wrap:after,#case_hydraulic>.hero>.wrap:after{width:290px}}
  117. @media(max-width:760px){#index>.hero>.wrap{padding:148px 20px 0}#index>.hero>.wrap:after{position:absolute;left:20px;right:20px;top:0;height:125px;margin:0;width:auto;background-size:auto 180px,cover}#index>.hero h1{font-size:29px}#architecture>.hero>.wrap,#case_hydraulic>.hero>.wrap,#method>.hero>.wrap,#admin>.hero>.wrap,#login>.hero>.wrap{padding:0 20px}#architecture>.hero>.wrap:after,#case_hydraulic>.hero>.wrap:after,#login>.hero>.wrap:after{position:relative;left:auto;right:auto;width:100%;height:160px;border-radius:12px}#method>.hero>.wrap:after{height:130px;background-size:auto 230px,cover}#cms>.hero>.wrap{padding:0 20px 150px}#cms>.hero>.wrap:after{position:absolute;left:20px;right:20px;bottom:0;width:auto;height:130px;margin:0}#documents>.hero>.wrap{padding:0 20px;min-height:0}#documents>.hero>.wrap:after{display:none}#admin>.hero>.wrap:after{height:115px}}
  118. @media(max-width:760px){.tabs a,.return-dock a,.chips a,.btn,.x{min-height:44px;display:inline-flex;align-items:center;justify-content:center}.return-dock{flex-wrap:wrap}.foot{padding-bottom:115px}}`,Yu={class:"eyebrow"},Ju={style:{display:"flex",gap:"8px","margin-bottom":"14px","flex-wrap":"wrap"}},Xu=["data-fsub","onClick"],Zu=["innerHTML"],Qu=Ut({__name:"Vibration",props:{d:{},sub:{},cms:{}},emits:["sub"],setup(t,{emit:e}){const s=t,n=e,o=U(()=>s.sub||"matrix"),l=kt(null),c=kt("");Te(o,async f=>{if((f==="cms"||f==="portal_cms")&&!l.value&&!s.cms&&!c.value)try{const m=await fetch("/api/vibcms");l.value=await m.json()}catch(m){c.value=String(m?.message||m)}},{immediate:!0});const a=U(()=>s.cms??l.value),d=U(()=>s.d?.fus),g=U(()=>{const f=d.value;return!f||f.err?`<section><div class="panel"><p>${r("fus.unavailable",{e:String(f&&f.err||"")})}</p></div></section>`:o.value==="matrix"?Ed(f):o.value==="loop"?Cd(f):o.value==="units"?Ad(f,null):o.value==="events"?Hd(f,s.d):o.value==="cms"?qd(a.value):o.value==="portal_cms"?Pd(s.d,a.value):`<div class="panel mb"><p class="small muted">子视图「${r("fus.sub."+o.value)}」尚未迁移到 Vue(迁移中)。</p></div>`});return(f,m)=>(D(),E("section",null,[i("div",Yu,p(u(r)("fus.eyebrow")),1),i("div",Ju,[(D(!0),E(it,null,yt(u(Ld),_=>(D(),E("button",{key:_,class:ee(["pill",{on:_===o.value}]),"data-fsub":_,onClick:x=>n("sub",_)},p(u(r)("fus.sub."+_)),11,Xu))),128))]),i("div",{class:"unwrap-host",innerHTML:g.value},null,8,Zu)]))}}),t2={class:"eyebrow"},e2={class:"panel mb small",style:{"border-left":"3px solid var(--accent)"}},s2={class:"muted",style:{"margin-top":"3px"}},n2={key:0,class:"panel mb",style:{"border-left":"3px solid var(--critical)"}},o2={class:"small"},l2={class:"small muted",style:{"font-weight":"400"}},r2={key:0,class:"chip"},i2={style:{display:"flex","flex-wrap":"wrap",gap:"18px"}},a2={style:{flex:"1 1 300px","min-width":"280px"}},c2={class:"small",style:{"font-weight":"600","margin-bottom":"4px"}},d2={class:"small muted",style:{"margin-top":"4px"}},u2={style:{flex:"1 1 300px","min-width":"280px"}},p2={class:"small",style:{"font-weight":"600","margin-bottom":"4px"}},f2=["innerHTML"],h2={class:"small",style:{"font-weight":"600",margin:"12px 0 4px"}},m2={class:"small muted",style:{"margin-top":"4px"}},g2={key:2,class:"panel mb"},_2={class:"small muted",style:{"font-weight":"400"}},v2=["innerHTML"],b2={class:"eyebrow"},x2={key:3,class:"panel",style:{"border-left":"3px solid var(--critical)"}},y2={class:"small"},w2={key:4,class:"panel",style:{"border-left":"3px solid var(--accent)"}},$2={class:"small"},k2={key:5,class:"panel"},D2={class:"small muted"},F2={key:6,class:"grid2"},E2={key:0,class:"small muted",style:{"font-weight":"400"}},C2={key:0,class:"small muted",style:{"margin-top":"6px"}},M2=Ut({__name:"Generation",props:{d:{},curves:{},pending:{type:Boolean}},setup(t){const e=t,s=U(()=>e.d?.m9&&!e.d.m9.err?e.d.m9:null),n=U(()=>e.d?.control||null),o=U(()=>e.curves||null),l=U(()=>(e.d?.sysmx_span||[]).join(" ~ ")||""),c=U(()=>s.value?.β_schedule?.离群||[]),a=U(()=>s.value?.β_schedule?.全场同档差中位||0),d=U(()=>{const m=n.value?.curve?.cands||[];return m.length?m.map(_=>`<a href="/turbine/${_.t}">${At(_.t)}</a> ${_.dev}% ${xt(_.判)}`).join(" | "):r("gen.no_cands")}),g=U(()=>r("gen.beta_note",{units:c.value.map(m=>`<a href="/turbine/${m.t}">${At(m.t)}</a>`).join(" / "),k:c.value.length?Math.round(Math.max(...c.value.map(m=>m.平均偏))/Math.max(a.value||0,.01)):"—",v:xt(s.value?.β_schedule?.判)})),f=U(()=>o.value?.figs||[]);return(m,_)=>(D(),E("section",null,[i("div",t2,p(u(r)("gen.eyebrow")),1),i("div",e2,[i("b",null,p(u(r)("gen.fixed_win")),1),at(" "+p(l.value?u(r)("gen.win_range",{span:l.value}):"")+" ",1),i("div",s2,p(u(r)("gen.win_why")),1)]),t.d.m9&&t.d.m9.err?(D(),E("div",n2,[i("p",o2,p(u(r)("flt.block_err",{k:"m9",e:u(xt)(t.d.m9.err)})),1)])):vt("",!0),s.value?(D(),E("div",{key:1,class:"panel mb",style:Pt(t.pending?"border-left:3px solid var(--accent)":"")},[i("h3",null,[at(p(u(r)("gen.ctrl"))+" ",1),i("span",l2,p(u(r)("gen.ctrl_win",{win:u(xt)(s.value.窗)})),1),t.pending?(D(),E("span",r2,p(u(r)("gen.recomputing_short")),1)):vt("",!0)]),i("div",i2,[i("div",a2,[i("div",c2,p(u(r)("gen.cap")),1),Tt(Jt,{html:u(Xt)("capAxis",s.value&&s.value.P封顶,s.value&&s.value.ω封顶)},null,8,["html"]),i("p",d2,p(u(r)("gen.cap_note")),1)]),i("div",u2,[i("div",p2,p(u(r)("gen.beta")),1),Tt(Jt,{html:u(Xt)("betaBar",s.value&&s.value.β_schedule||{},u(At))},null,8,["html"]),i("p",{class:"small muted",style:{"margin-top":"4px"},innerHTML:g.value},null,8,f2),i("div",h2,p(u(r)("gen.ruler")),1),Tt(Jt,{html:u(Xt)("rulerBar",s.value&&s.value.尺子)},null,8,["html"]),i("p",m2,p(u(r)("gen.ruler_note")),1)])])],4)):vt("",!0),n.value&&n.value.curve?(D(),E("div",g2,[i("h3",null,[at(p(u(r)("gen.cands"))+" ",1),i("span",_2,p(u(r)("gen.cands_meta",{note:u(xt)(n.value.curve.note||""),s:t.d.sigma||n.value.curve.sigma})),1)]),i("p",{class:"small",innerHTML:d.value},null,8,v2)])):vt("",!0),i("div",b2,p(u(r)("gen.figs")),1),o.value&&o.value.err?(D(),E("div",x2,[i("p",y2,p(u(ft)(o.value.err)),1)])):o.value&&o.value.building?(D(),E("div",w2,[i("p",$2,[i("b",null,p(u(r)("gen.recomputing")),1),at(" "+p(u(xt)(o.value.curves?.note||"")),1)]),_[0]||(_[0]=i("div",{class:"skel",style:{width:"60%","margin-top":"10px"}},null,-1)),_[1]||(_[1]=i("div",{class:"skel",style:{width:"80%","margin-top":"8px"}},null,-1))])):o.value?(D(),E("div",F2,[(D(!0),E(it,null,yt(f.value,(x,q)=>(D(),E("div",{key:q,class:"panel"},[i("h3",null,[at(p(u(xt)(x.title||"")),1),x.unit?(D(),E("span",E2,"("+p(u(xt)(x.unit))+")",1)):vt("",!0)]),Tt(Jt,{html:u(Xt)("multiline",Object.assign({zero:!1},x))},null,8,["html"]),x.note?(D(),E("p",C2,p(u(xt)(x.note)),1)):vt("",!0)]))),128))])):(D(),E("div",k2,[i("p",D2,p(u(r)("gen.loading")),1),_[2]||(_[2]=i("div",{class:"skel",style:{width:"60%","margin-top":"10px"}},null,-1)),_[3]||(_[3]=i("div",{class:"skel",style:{width:"80%","margin-top":"8px"}},null,-1))]))]))}}),S2={class:"eyebrow"},T2={class:"small muted"},A2=["href"],O2=["innerHTML"],j2={class:"panel mb"},H2={class:"small muted"},q2=["innerHTML"],L2={style:{display:"flex",gap:"8px","flex-wrap":"wrap",margin:"10px 0","align-items":"center"}},P2=["placeholder","value"],B2={class:"small muted",for:"askm"},R2=["innerHTML"],I2=["innerHTML"],N2=["title"],z2={class:"muted"},W2={class:"btn",id:"askgo"},U2={id:"askout",class:"small"},V2=Ut({__name:"Decision",props:{d:{},apis:{}},setup(t){const e=t,s=[["equip","设备类"],["sched","检修排程决策"],["loss","损失分析"],["risk","安全风险预测"]],n={"qwen3:8b":"local","qwen3.8:27b":"local","qwen3:30b-a3b":"local","deepseek-r1:14b":"local","deepseek-r1:32b":"local","deepseek-chat":"cloud","kimi-fast":"cloud","qwen-plus":"cloud","deepseek-v4-pro":"cloud"},o=kt("equip"),l=kt(""),c=kt(""),a=kt(""),d=U(()=>e.apis?.["/detail/api/ask_models"]??e.apis?.["/api/ask_models"]??null),g=U(()=>d.value?d.value.models||{}:null),f=U(()=>!!d.value?.offline||!!d.value?.LOCAL_AI_DOWN),m=U(()=>r("cat."+o.value)),_=U(()=>s.map(([H])=>`<button class="pill ${H===o.value?"on":""}" data-cat="${H}">${r("cat."+H)}</button>`).join("")),x=U(()=>[1,2,3].map(H=>`<div class="qitem" data-q="${ft(r("cat."+o.value+".q"+H))}">${r("cat."+o.value+".q"+H)}</div>`).join("")),q=(H,pt)=>r("mdl."+H+"."+pt),V=H=>(q(H,"nm")||H)+(n[H]?" · "+r("mdl."+n[H]):"")+(q(H,"t")?" · "+q(H,"t"):""),Y=H=>n[H]?n[H]==="local"?r("mdl.zero_outbound"):`<span style="color:var(--warning)">${r("mdl.outbound_warn")}</span>`:`<span style="color:var(--warning)">${r("mdl.unknown_warn")}</span>`,Q=U(()=>{const H=g.value;if(H===null)return c.value;const pt=Object.keys(H);return!c.value||!pt.includes(c.value)?pt[0]||"":c.value}),L=U(()=>{const H=g.value;return H===null?'<option value="">…</option>':Object.keys(H).length?Object.keys(H).map(pt=>`<option value="${ft(pt)}" ${pt===Q?"selected":""}>${ft(V(pt))}</option>`).join(""):`<option value="">${f.value?r("ask.local_down"):r("ask.no_models")}</option>`}),P=U(()=>`/?lang=zh&win=${encodeURIComponent(String(e.d?.win||""))}`),F=U(()=>Q.value?Y(Q.value):"");return(H,pt)=>(D(),E("section",null,[i("div",S2,p(u(r)("dec.head")),1),i("p",T2,[at(p(u(r)("dec.classic"))+" ",1),i("a",{href:P.value},p(u(r)("ui.open_classic")),9,A2)]),i("div",{style:{display:"flex",gap:"8px",margin:"10px 0 12px","flex-wrap":"wrap"},innerHTML:_.value},null,8,O2),i("div",j2,[i("h3",null,p(u(r)("ask.common_q",{cat:m.value})),1),i("p",H2,p(u(r)("cat."+o.value+".hint"))+p("。")+p(u(r)("ask.grounding")),1),i("div",{innerHTML:x.value,class:"unwrap-host"},null,8,q2),i("div",L2,[i("input",{id:"askq",type:"text",placeholder:u(ft)(u(r)("ask.placeholder",{cat:m.value})),value:l.value,style:{flex:"1","min-width":"280px"}},null,8,P2),i("label",B2,p(u(r)("ask.model")),1),i("select",{id:"askm",innerHTML:L.value},null,8,R2),i("span",{id:"mdlnote",class:"small",innerHTML:F.value},null,8,I2),i("label",{class:"small",style:{cursor:"pointer","white-space":"nowrap"},title:u(ft)(u(r)("ask.xrev_title"))},[pt[0]||(pt[0]=i("input",{type:"checkbox",id:"askxrev"},null,-1)),at(" "+p(u(r)("ask.xrev"))+" ",1),i("span",z2,p(u(r)("ask.xrev_note")),1)],8,N2),i("button",W2,p(u(r)("ask.go")),1)]),i("div",U2,p(a.value||u(r)("ask.idle")),1)])]))}}),K2={class:"eyebrow"},G2={class:"panel mb"},Y2={class:"small muted",style:{"font-weight":"400"}},J2=["placeholder","value"],X2={class:"btn","data-asst":"fault"},Z2={class:"small muted"},Q2=["innerHTML"],tp={id:"asstOut_fault",style:{"margin-top":"10px"}},ep={class:"panel mb"},sp={class:"small muted",style:{"font-weight":"400"}},np=["innerHTML"],op={class:"btn","data-asst":"prev"},lp={id:"asstOut_prev",style:{"margin-top":"10px"}},rp={class:"panel mb"},ip={class:"small muted",style:{"font-weight":"400"}},ap=["innerHTML"],cp={class:"btn","data-asst":"tree"},dp={id:"asstOut_tree",style:{"margin-top":"10px"}},_n="display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px",up=Ut({__name:"Assistant",setup(t){const e=["变桨","偏航","主轴承","齿轮箱","发电机","变流器","塔架与基础","主控与传感网","叶片与叶根"],s=["3225","3130","13902","10105","3224"],n=gs({fault:"",prev:"pitch",tree:"pitch",out:{fault:"",prev:"",tree:""}}),o=c=>e.map(a=>`<option value="${Rs(a)}" ${n[c]===Rs(a)?"selected":""}>${we(a)}</option>`).join(""),l=U(()=>s.map(c=>`<a href="#" data-code="${c}">${c}</a>`).join(" · "));return(c,a)=>(D(),E("section",null,[i("div",K2,p(u(r)("asst.head"))+" — "+p(u(r)("asst.head_note")),1),i("div",G2,[i("h3",null,[at(p(u(r)("asst.corrective"))+" ",1),i("span",Y2,p(u(r)("asst.corrective_flow")),1)]),i("div",{style:_n},[i("input",{id:"asstIn_fault",placeholder:u(ft)(u(r)("asst.code_placeholder")),value:n.fault,style:{flex:"1 1 220px"}},null,8,J2),i("button",X2,p(u(r)("ui.query")),1),i("span",Z2,[at(p(u(r)("asst.common"))+" ",1),i("span",{class:"unwrap-host",innerHTML:l.value},null,8,Q2)])]),i("div",tp,p(n.out.fault),1)]),i("div",ep,[i("h3",null,[at(p(u(r)("asst.preventive"))+" ",1),i("span",sp,p(u(r)("asst.preventive_flow")),1)]),i("div",{style:_n},[i("select",{id:"asstIn_prev",style:{flex:"1 1 200px"},innerHTML:o("prev")},null,8,np),i("button",op,p(u(r)("ui.query")),1)]),i("div",lp,p(n.out.prev),1)]),i("div",rp,[i("h3",null,[at(p(u(r)("asst.faulttree"))+" ",1),i("span",ip,p(u(r)("asst.faulttree_flow")),1)]),i("div",{style:_n},[i("select",{id:"asstIn_tree",style:{flex:"1 1 200px"},innerHTML:o("tree")},null,8,ap),i("button",cp,p(u(r)("ui.query")),1)]),i("div",dp,p(n.out.tree),1)])]))}}),pp='<div data-added="recalc"><section class="hero"><div class="wrap"><div class="kicker">运维 · 数据重算与产物</div><h1>数据重算</h1><p class="lead">从 <code>data/raw</code> 的现场数据重算全部产物:执行重算、查看产物在位状态、清除/恢复产物。这一页就是运维控制台的重算与产物两块(同一后端、同一把锁),页面顶部菜单直接到这里,不必再记 <code>/ops</code>。</p><div class="chips"><span class="chip ev">● 重算期间按钮全灰</span><span class="chip ev">● 后端拒绝 = 真生效(HTTP 409)</span><span class="chip ev">● 重算产物即时进页面</span></div></div></section><section><div class="wrap"><div class="opsframe" style="border:1px solid #dfe6ef;border-radius:10px;overflow:hidden;background:#fff"><iframe id="rcf" src="/ops" title="数据重算与产物" style="width:100%;height:1150px;border:0;display:block" loading="lazy"></iframe></div><p class="small muted" style="margin-top:10px">看不到内容?说明网关还没起来(本页由网关提供,组件服务停了也能用)。直接打开:<a href="/ops" target="_blank" rel="noopener">/ops 控制台</a>。</p></div></section></div>',fp={class:"eyebrow"},hp={key:0,class:"panel"},mp={class:"small muted"},gp={key:1,class:"panel"},_p={class:"small",style:{color:"var(--critical)"}},vp={class:"panel mb"},bp={class:"small muted"},xp={class:"small muted"},yp={class:"tblwrap"},wp={style:{"margin-top":"10px"}},$p={style:{width:"18%"}},kp={style:{width:"20%"}},Dp={style:{width:"13%"}},Fp={style:{width:"10%"}},Ep={style:{width:"11%"}},Cp={class:"small"},Mp={class:"small num"},Sp={key:0,class:"muted"},Tp={class:"small muted"},Ap={class:"small"},Op={class:"small"},jp={class:"small"},Hp={class:"muted"},qp={style:{"margin-top":"3px"}},Lp={class:"muted",style:{"margin-top":"3px"}},Pp={class:"eyebrow",style:{"margin-top":"18px"}},Bp=["src"],Rp=Ut({__name:"System",props:{apis:{}},setup(t){const e=t,s=g=>String(g??""),n=kt(""),o=U(()=>'<!doctype html><html lang="zh" data-theme="light"><head><meta charset="utf-8"><base target="_top"><style>'+Gu+"</style></head><body>"+pp+"</body></html>");Te(o,g=>{const f=n.value;if(n.value=URL.createObjectURL(new Blob([g],{type:"text/html;charset=utf-8"})),f)try{URL.revokeObjectURL(f)}catch{}},{immediate:!0});const l=U(()=>e.apis?.["/detail/api/maint_survey"]??e.apis?.["/api/maint_survey"]??null),c=[[["数据","Data"],"mt.layer_data","mt.layer_data_note","var(--accent)"],[["机理","Domain model","Mechanism"],"mt.layer_mech","mt.layer_mech_note","var(--warning)"]],a=U(()=>l.value?.rows||[]),d=U(()=>c.map(([g,f,m,_])=>({kn:f,kd:m,col:_,rs:a.value.filter(x=>g.includes(String(x.层)))})).filter(g=>g.rs.length));return(g,f)=>{const m=pi("Recalc");return D(),E("section",null,[i("div",fp,p(u(r)("mt.eyebrow")),1),l.value?l.value.error?(D(),E("div",gp,[i("p",_p,p(u(xt)(l.value.error)),1)])):(D(),E(it,{key:2},[i("div",vp,[i("h3",null,p(u(r)("mt.head",{n:a.value.length})),1),i("p",bp,p(u(r)("mt.note")),1)]),(D(!0),E(it,null,yt(d.value,_=>(D(),E("div",{key:_.kn,class:"panel mb",style:Pt(`border-left:3px solid ${_.col}`)},[i("h3",null,p(u(r)(_.kn))+" ("+p(_.rs.length)+")",1),i("p",xp,p(u(r)(_.kd)),1),i("div",yp,[i("table",wp,[i("tr",null,[i("th",$p,p(u(r)("mt.src")),1),i("th",kp,p(u(r)("mt.cov")),1),i("th",Dp,p(u(r)("mt.last")),1),i("th",Fp,p(u(r)("mt.freq")),1),i("th",Ep,p(u(r)("mt.resp")),1),i("th",null,p(u(r)("mt.how")),1)]),(D(!0),E(it,null,yt(_.rs,(x,q)=>(D(),E("tr",{key:q},[i("td",Cp,[i("b",null,p(x.存在?"":"✗ ")+p(s(x.名)),1)]),i("td",Mp,[at(p(s(x.覆盖)),1),x.条数?(D(),E("span",Sp,p(u(r)("mt.rows_n",{n:u(Ct)(x.条数)})),1)):vt("",!0)]),i("td",Tp,p(u(ft)(x.末次更新||"—")),1),i("td",Ap,p(s(x.频率)),1),i("td",Op,p(s(x.责任)),1),i("td",jp,[i("div",Hp,[at(p(u(r)("mt.put"))+" ",1),i("code",null,p(s(x.位置)),1)]),i("div",qp,[at(p(u(r)("mt.run"))+" ",1),i("code",null,p(s(x.摄入)),1)]),i("div",Lp,p(s(x.说明)),1)])]))),128))])])],4))),128))],64)):(D(),E("div",hp,[i("p",mp,p(u(r)("mt.surveying")),1)])),i("div",Pp,p(u(r)("tab.recalc")),1),Tt(m),i("iframe",{"data-added":"recalc",class:"portal-recalc-frame",title:"数据重算与产物",src:n.value,style:{width:"100%",height:"1420px",border:"0",display:"block","margin-top":"18px"}},null,8,Bp)])}}}),Ip={class:"eyebrow"},Np={class:"panel mb noprint"},zp={style:{display:"flex",gap:"10px","align-items":"center","flex-wrap":"wrap","margin-bottom":"10px"}},Wp={class:"small",style:{"font-weight":"600"}},Up=["data-preset"],Vp={id:"rptaud"},Kp=["selected"],Gp=["selected"],Yp={class:"btn quiet",id:"rptprint"},Jp={class:"btn quiet","data-export":"docx"},Xp={class:"btn quiet","data-export":"xlsx"},Zp={key:0,class:"small",style:{color:"var(--warning)","flex-basis":"100%"}},Qp={class:"small",style:{"font-weight":"600","margin-bottom":"7px"}},tf={style:{"font-weight":"400",color:"var(--muted)"}},ef=["innerHTML"],sf={id:"rpthint",class:"small muted",style:{"margin-top":"9px","padding-top":"8px","border-top":"1px solid var(--line)","min-height":"19px"}},nf={style:{"margin-top":"11px","padding-top":"10px","border-top":"1px solid var(--line)"}},of={class:"small",style:{"font-weight":"600","margin-bottom":"6px"}},lf=["innerHTML"],rf={style:{display:"flex",gap:"8px","align-items":"center","flex-wrap":"wrap"}},af=["placeholder","value"],cf=["innerHTML"],df=["disabled"],uf={id:"rptout",class:"small muted",style:{"margin-top":"7px"}},pf={key:0,class:"paper",style:{"text-align":"center",padding:"56px 40px"}},ff={class:"small muted"},hf={key:1,class:"paper"},mf={class:"paper-hd"},gf={class:"paper-ti"},_f={class:"small muted",style:{"margin-top":"3px"}},vf={class:"small muted",style:{"text-align":"right"}},bf={key:0,class:"noprint",style:{display:"flex",gap:"3px","justify-content":"flex-end","margin-bottom":"-6px",position:"relative","z-index":"2"}},xf=["data-k","disabled"],yf=["data-k","disabled"],wf=["data-k"],$f=["innerHTML"],kf=["innerHTML"],Df={class:"paper-ft"},Ff=Ut({__name:"Report",props:{d:{},apis:{}},setup(t){const e=t,s={month:["kpi","water","emon","blame","ram","pareto","units","plan","caliber"],week:["kpi","frate","units","plan","caliber"],topic:["units","chain","ram","loop","caliber"],year:["kpi","water","emon","ram","loop","caliber"],blank:[]},n={kpi:"gen",water:"gen",emon:"gen",blame:"gen",ram:"rel",parts:"rel",attrib:"rel",pareto:"flt",quad:"flt",frate:"flt",units:"unit",chain:"unit",loop:"unit",plan:"end",caliber:"end",narr:"end"},o={kpi:"▦",water:"▤",emon:"▥",blame:"◧",ram:"◈",parts:"▤",attrib:"▬",pareto:"▮",quad:"◇",frate:"▪",units:"☰",chain:"⛓",loop:"✓",plan:"✎",caliber:"⚑",narr:"✍"},l={"qwen3:8b":"local","qwen3.8:27b":"local","qwen3:30b-a3b":"local","deepseek-r1:14b":"local","deepseek-r1:32b":"local","deepseek-chat":"cloud","kimi-fast":"cloud","qwen-plus":"cloud","deepseek-v4-pro":"cloud"},c=["gen","rel","flt","unit","end"],a=gs({canvas:[],aud:"in",need:"",model:"",models:null,compose:null,narr:null,out:""}),d=U(()=>e.apis?.["/detail/api/ask_models"]??e.apis?.["/api/ask_models"]??null),g=U(()=>d.value?d.value.models||{}:a.models),f=U(()=>!!d.value?.offline),m=(ct,gt)=>r("mdl."+ct+"."+gt),_=ct=>(m(ct,"nm")||ct)+(l[ct]?" · "+r("mdl."+l[ct]):"")+(m(ct,"t")?" · "+m(ct,"t"):""),x=ct=>a.canvas.includes(ct),q=U(()=>a.compose===!0&&!!g.value&&Object.keys(g.value).length>0),V=U(()=>{const ct=g.value;return ct===null?'<option value="">…</option>':Object.keys(ct).length?Object.keys(ct).map(gt=>`<option value="${ft(gt)}" ${gt===P?"selected":""}>${ft(_(gt))}</option>`).join(""):`<option value="">${f.value?r("ask.local_down"):r("ask.no_models")}</option>`}),Y=U(()=>c.map(ct=>`<div class="small muted" style="text-align:right;white-space:nowrap">${r("rpt.g."+ct)}</div><div style="display:flex;gap:6px;flex-wrap:wrap">`+Object.keys(n).filter(gt=>n[gt]===ct).map(gt=>`<button class="pill ${x(gt)?"on":""}" data-block="${gt}" style="border-radius:7px;padding:5px 11px;font-size:12.5px;opacity:${x(gt)?1:.8}">${o[gt]} ${r("rpt.b."+gt+".nm")}${x(gt)?" ✓":""}</button>`).join("")+"</div>").join("")),Q=U(()=>""),L=ct=>"",P=U(()=>{const ct=g.value;if(ct===null)return a.model;const gt=Object.keys(ct);return!a.model||!gt.includes(a.model)?gt[0]||"":a.model}),F=U(()=>r("rpt.need_hint")+(P.value?l[P.value]==="local"?r("rpt.local_note"):`<span style="color:var(--warning)">${r("rpt.cloud_note")}</span>`:"")),H=U(()=>a.out?a.out:a.compose===!1?r("rpt.no_compose"):g.value&&!Object.keys(g.value).length?f.value?r("ask.local_down"):r("rpt.no_models"):""),pt=U(()=>(String(e.d?.fus?.数据时点||"").match(/\d{4}-\d{2}-\d{2}/)||[""])[0]);return(ct,gt)=>(D(),E("section",null,[i("div",Ip,p(u(r)("rpt.eyebrow")),1),i("div",Np,[i("div",zp,[i("span",Wp,p(u(r)("rpt.presets")),1),(D(!0),E(it,null,yt(Object.keys(s),Ht=>(D(),E("button",{key:Ht,class:"pill","data-preset":Ht},p(u(r)("rpt.preset."+Ht)),9,Up))),128)),gt[0]||(gt[0]=i("span",{style:{flex:"1"}},null,-1)),i("select",Vp,[i("option",{value:"in",selected:a.aud==="in"},p(u(r)("rpt.aud_in")),9,Kp),i("option",{value:"up",selected:a.aud==="up"},p(u(r)("rpt.aud_up")),9,Gp)]),i("button",Yp,p(u(r)("rpt.print")),1),i("button",Jp,p(u(r)("rpt.export_docx")),1),i("button",Xp,p(u(r)("rpt.export_xlsx")),1),a.aud==="up"?(D(),E("span",Zp,p(u(r)("rpt.up_note")),1)):vt("",!0)]),i("div",Qp,[at(p(u(r)("rpt.library"))+" ",1),i("span",tf,p(u(r)("rpt.library_note",{n:a.canvas.length})),1)]),i("div",{style:{display:"grid","grid-template-columns":"auto 1fr",gap:"6px 12px","align-items":"center"},innerHTML:Y.value},null,8,ef),i("div",sf,p(u(r)("rpt.hint_idle")),1),i("div",nf,[i("div",of,[at(p(u(r)("rpt.need_head"))+" ",1),i("span",{id:"rptmdlnote",style:{"font-weight":"400",color:"var(--muted)"},innerHTML:F.value},null,8,lf)]),i("div",rf,[i("input",{id:"rptneed",placeholder:u(ft)(u(r)("rpt.need_ph")),value:a.need,style:{flex:"1 1 300px","min-width":"220px"}},null,8,af),i("select",{id:"rptmdl",innerHTML:V.value},null,8,cf),i("button",{class:"btn",id:"rptgo",disabled:!q.value},p(u(r)("rpt.compose")),9,df)]),i("div",uf,p(H.value),1)])]),a.canvas.length?(D(),E("div",hf,[i("div",mf,[i("div",null,[i("div",gf,p(u(r)("app.brand"))+" · "+p(u(r)("rpt.paper_title")),1),i("div",_f,p(u(r)("rpt.paper_sub",{win:u(Oe)(t.d.win),n:(t.d.kpi||{}).全场||38}))+p(a.aud==="up"?" | "+u(r)("rpt.up_tag"):""),1)]),i("div",vf,p(u(r)("rpt.chapters",{n:a.canvas.length})),1)]),(D(!0),E(it,null,yt(a.canvas,(Ht,Rt)=>(D(),E(it,{key:Ht},[n[Ht]?(D(),E("div",bf,[i("button",{class:"pill","data-mv":"up","data-k":Ht,disabled:Rt===0,style:{padding:"1px 8px","font-size":"11px",opacity:".7"}},"↑",8,xf),i("button",{class:"pill","data-mv":"down","data-k":Ht,disabled:Rt===a.canvas.length-1,style:{padding:"1px 8px","font-size":"11px",opacity:".7"}},"↓",8,yf),i("button",{class:"pill","data-mv":"del","data-k":Ht,style:{padding:"1px 8px","font-size":"11px",opacity:".7"}},"×",8,wf)])):vt("",!0),n[Ht]?(D(),E("div",{key:1,innerHTML:L()},null,8,$f)):vt("",!0)],64))),128)),i("div",{innerHTML:Q.value},null,8,kf),i("div",Df,[i("span",null,p(u(r)("rpt.foot_src"))+p(pt.value?" | "+u(r)("rpt.foot_asof",{d:pt.value}):""),1),i("span",null,p(u(r)("rpt.foot_trace"))+p(a.aud==="up"?" | "+u(r)("rpt.foot_deid"):""),1)])])):(D(),E("div",pf,[i("div",ff,p(u(r)("rpt.preview_empty")),1)]))]))}}),Ef={class:"kpis"},Cf=["title"],Mf=["innerHTML"],Sf={key:1},Tf={key:0},Af={class:"sechead"},Of={class:"meta"},jf={class:"meta"},Hf={key:0,class:"card mb",style:{"margin-bottom":"10px"}},qf={class:"small",style:{color:"var(--warning)"}},Lf={class:"small muted"},Pf={class:"cards"},Bf=["id"],Rf={class:"head"},If=["href"],Nf={class:"sys"},zf={class:"evidence-detail"},Wf={class:"why"},Uf={class:"evid"},Vf=["title"],Kf={key:1,class:"rv"},Gf={key:0,class:"caveat"},Yf={class:"sechead"},Jf={class:"meta"},Xf={class:"legend"},Zf={class:"cells"},Qf=["data-u","title"],th={key:1,class:"quiet",style:{padding:"10px"}},eh={class:"nums"},sh={class:"quiet"},nh={class:"sechead"},oh={class:"meta"},lh={class:"systems"},rh={class:"t"},ih=["href"],ah={class:"bar"},ch={class:"cnt"},dh=Ut({__name:"Overview",props:{d:{}},setup(t){const e=t,s=U(()=>e.d?.fus||{}),n=U(()=>e.d?.m8?.mtbf||{}),o=U(()=>e.d?.control||{}),l=U(()=>{const L={};for(const P of o.value.states||[])L[P.k]=P.loss;return L}),c=U(()=>{const L=o.value,P=r("kpi.loss",{win:Oe(e.d?.win)})+(l.value["停机(调度令)"]!=null?` · ${r("kpi.loss_dispatch",{n:Ct(l.value["停机(调度令)"])})}`:"");return[{v:Ct(L.avail,1),u:"%",l:r("kpi.avail",{win:Oe(e.d?.win)}),k:L.avail>=95?"ok":"warn",ti:""},{v:Ct(n.value.停机总时长h),u:"h",l:r("kpi.downtime",{n:Ct(n.value.停机事件数)}),k:"warn",ti:""},{v:Ct(n.value.MTBF_h),u:"h",l:r("kpi.mtbo"),k:"",ti:""},{v:Ct(l.value.停机),u:"MWh",l:P,k:"",ti:""},{v:Ct(l.value["限电·绑定"]),u:"MWh",l:r("kpi.curtail"),k:"",ti:""},{vRaw:`${Ct(e.d?.kpi?.报警台)} <small>/ ${Ct(e.d?.kpi?.全场)}</small>`,u:"",l:r("kpi.alarm_units"),k:e.d?.kpi?.报警台?"warn":"ok",ti:r("kpi.alarm_units.hint"),vHtml:!0}]}),a=U(()=>{const L={};for(const P of e.d?.watch||[])L[P.t]=P.why;return L}),d=U(()=>((s.value.链盘||{}).rows||[]).filter(L=>L.lvl==="bad"||L.lvl==="warn"));function g(L){const P=(a.value[L.t]||"").trim();if(P)return P;const F=Ho[L.stuck]||String(L.stuck||"").toLowerCase(),H=r(F==="evidence"?"step.site_records":"step."+(F||"evidence"));return r("ov.basis_fusion",{part:L.part||"—",done:L.done==null?"—":L.done,n:(L.steps||[]).length||"—",stuck:L.stuck?H:r("ov.all_steps_done"),srcs:(L.srcs||[]).join(" / ")||r("ov.no_srcs")})}function f(L){if(!L.stuck)return"";const P=Ho[L.stuck]||String(L.stuck||"").toLowerCase(),F=r(P==="evidence"?"step.site_records":"step."+(P||"evidence"));return r("step.stuck_at",{step:F})}const m=[["危险","critical"],["报警","warning"],["不可判","unknown"],["良好","good"],["优秀","excellent"]],_=U(()=>{const L=e.d?.sysdist||{};return Gn.map(P=>{const F=L[P]||{},H=Object.values(F).reduce((pt,ct)=>pt+ct,0)||1;return{name:we(P),slug:Rs(P),dist:F,n:H,seg:m.filter(([pt])=>F[pt]).map(([pt,ct])=>({k:pt,v:ct}))}})}),x=U(()=>s.value.矩阵||[]),q=U(()=>new Set(d.value.map(L=>L.t))),V={定论:"confirmed","准定论·预警":"near","候选·新发":"candidate_new",候选:"candidate","候选·记基线":"candidate_baseline",参考:"reference",INSUFFICIENT:"insufficient",正常:"normal",撤回:"withdrawn"},Y={candidate_new:"candidate",candidate_baseline:"candidate",normal:"reference"},Q=L=>{const P=V[String(L??"")];return P?Y[P]||P:""};return(L,P)=>(D(),E(it,null,[i("section",null,[i("div",Ef,[(D(!0),E(it,null,yt(c.value,(F,H)=>(D(),E("div",{key:H,class:ee(["kpi",F.k]),title:F.ti||void 0},[F.vHtml?(D(),E("b",{key:0,innerHTML:F.vRaw},null,8,Mf)):(D(),E("b",Sf,[at(p(F.v),1),F.u?(D(),E("small",Tf,p(F.u),1)):vt("",!0)])),i("span",null,p(F.l),1)],10,Cf))),128))])]),i("section",null,[i("div",Af,[i("h2",null,p(u(r)("ov.attention")),1),i("span",Of,p(u(r)("ov.attention_n",{n:d.value.length})),1),i("span",jf,p(u(r)("ov.ranked_by")),1)]),s.value.gap?(D(),E("div",Hf,[i("p",qf,p(s.value.gap),1),i("p",Lf,p(u(r)("ov.fus_gap_hint")),1)])):vt("",!0),i("div",Pf,[(D(!0),E(it,null,yt(d.value,F=>(D(),E("div",{key:F.t,class:"card",id:`u-${F.t}`,style:Pt(`--sev:var(--${u(Po)[u(Is)(F.ostate)||(F.lvl==="bad"?"bad":"warn")]})`)},[i("div",Rf,[i("a",{class:"unit",href:`/turbine/${F.t}`},p(u(At)(F.t)),9,If),i("span",Nf,p(F.part||""),1),i("span",{class:ee(["chip",u(Is)(F.ostate)||(F.lvl==="bad"?"bad":"warn")])},p(u(qo)(F.ostate||(F.lvl==="bad"?"危险":"报警"))),3)]),i("details",zf,[i("summary",null,p(u(r)("ov.evidence")),1),i("div",Wf,p(g(F)),1)]),i("div",Uf,[F.estate?(D(),E("span",{key:0,class:ee(["tier",Q(F.estate)]),title:u(r)("tier."+(V[F.estate]||"unknown"))},p(u(qo)(F.estate)),11,Vf)):vt("",!0),F.srcs&&F.srcs.length?(D(),E("span",Kf,p(F.srcs.length)+" sources",1)):vt("",!0)]),f(F)||F.next?(D(),E("div",Gf,[i("b",null,p(u(r)("ov.caveat")),1),at(p(f(F))+p(f(F)&&F.next?" — ":"")+p(F.next||""),1)])):vt("",!0)],12,Bf))),128))])]),i("section",null,[i("div",Yf,[i("h2",null,p(u(r)("ov.strip")),1),i("span",Jf,p(u(r)("ov.strip_hint")),1),i("div",Xf,[(D(),E(it,null,yt(["bad","warn","unk","ok","ex"],F=>i("span",{key:F},[i("i",{style:Pt(`background:var(--${u(Po)[F]})`)},null,4),at(p(u(r)(u(Sn)(F))),1)])),64))])]),i("div",{class:"strip",style:Pt(`--n:${x.value.length||38}`)},[i("div",Zf,[x.value.length?(D(!0),E(it,{key:0},yt(x.value,F=>(D(),E("div",{key:F.turbine,class:ee(["cell",[u(Lo)(F),q.value.has(F.turbine)?"hot":""]]),"data-u":F.turbine,title:`${u(At)(F.turbine)} ${u(r)(u(Sn)(u(Lo)(F)))}`},null,10,Qf))),128)):(D(),E("div",th,p(s.value.gap||u(r)("ov.fus_gap_hint")),1))]),i("div",eh,[(D(!0),E(it,null,yt(x.value,F=>(D(),E("span",{key:`n-${F.turbine}`,class:ee(q.value.has(F.turbine)?"hot":"")},p(u(At)(F.turbine).replace("#","")),3))),128))]),i("div",sh,p(d.value.length?u(r)("ov.quiet",{n:Math.max(0,(x.value.length||38)-d.value.length)}):u(r)("ov.quiet_all",{n:x.value.length||38})),1)],4)]),i("section",null,[i("div",nh,[i("h2",null,p(u(r)("ov.systems")),1),i("span",oh,p(u(r)("ov.systems_hint")),1)]),i("div",lh,[(D(!0),E(it,null,yt(_.value,F=>(D(),E("div",{key:F.name,class:"sysc"},[i("div",rh,[i("b",null,p(F.name),1),i("a",{href:`#tab=component&sys=${encodeURIComponent(F.slug)}`},p(u(r)("ui.open")),9,ih)]),i("div",ah,[(D(!0),E(it,null,yt(F.seg,H=>(D(),E("i",{key:H.k,style:Pt(`width:${(F.dist[H.k]/F.n*100).toFixed(1)}%;background:var(--${H.v})`)},null,4))),128))]),i("div",ch,[(D(!0),E(it,null,yt(F.seg,H=>(D(),E("span",{key:`c-${H.k}`},[i("i",{style:Pt(`background:var(--${H.v})`)},null,4),at(p(F.dist[H.k]),1)]))),128))])]))),128))])])],64))}}),uh={class:"page-head"},ph={key:12,class:"card"},fh={class:"hint"},hh=Ut({__name:"Workbench",props:{d:{},tab:{},sys:{},sub:{},cms:{},curves:{},apis:{},win:{}},emits:["tab","sub","win","reselect"],setup(t,{emit:e}){const s=t,n=e,o=kt(""),l=kt(""),c=kt("");Te(()=>s.win,d=>{o.value=d||"";const g=String(d||"").split("~");g.length===2&&(l.value=g[0],c.value=g[1])},{immediate:!0});const a=U(()=>!Mn.includes(s.tab));return(d,g)=>(D(),E(it,null,[i("div",uh,[i("h1",null,p(u(r)("tab."+t.tab)),1)]),t.tab==="overview"?(D(),It(dh,{key:0,d:t.d},null,8,["d"])):t.tab==="energy"?(D(),It(ru,{key:1,d:t.d},null,8,["d"])):t.tab==="component"?(D(),It(_d,{key:2,d:t.d,sys:t.sys},null,8,["d","sys"])):t.tab==="fault"?(D(),It(Ku,{key:3,d:t.d},null,8,["d"])):t.tab==="vibration"?(D(),It(Qu,{key:4,d:t.d,sub:t.sub,cms:t.cms,onSub:g[0]||(g[0]=f=>n("sub",f))},null,8,["d","sub","cms"])):t.tab==="generation"?(D(),It(M2,{key:5,d:t.d,curves:t.curves,pending:!!t.d.m9_pending},null,8,["d","curves","pending"])):t.tab==="decision"?(D(),It(V2,{key:6,d:t.d,apis:t.apis},null,8,["d","apis"])):t.tab==="assistant"?(D(),It(up,{key:7,d:t.d},null,8,["d"])):t.tab==="system"?(D(),It(Rp,{key:8,apis:t.apis},null,8,["apis"])):t.tab==="report"?(D(),It(Ff,{key:9,d:t.d,apis:t.apis},null,8,["d","apis"])):t.tab==="documents"?(D(),It(nc,{key:10})):t.tab==="portal_src"?(D(),It(Jl,{key:11})):a.value?(D(),E("section",ph,[i("h2",null,[at(p(u(r)("tab."+t.tab))+" ",1),g[1]||(g[1]=i("small",null,"(本页签尚未迁移到 Vue)",-1))]),i("p",fh,[g[2]||(g[2]=at(" 迁移纪律:页签逐个搬,每搬一个就用 ",-1)),g[3]||(g[3]=i("code",null,"tools/render_parity.mjs",-1)),g[4]||(g[4]=at(" 与重构前页面 (现网 ",-1)),g[5]||(g[5]=i("code",null,"/detail/v2",-1)),at(")对拍文案/数值/类名序列,**通过后**才删对应的 Python 前端源码。 当前已迁移:"+p(u(Mn).join("、"))+"。 ",1)])])):vt("",!0)],64))}}),mh=Yl(hh,[["__scopeId","data-v-401b393b"]]),gh={key:1,class:"wrap"},_h={class:"top"},vh={class:"right"},bh=["title"],xh=["title"],yh={class:"small muted",for:"win"},wh=["aria-label","value"],$h=["label"],kh=["value"],Dh=["label"],Fh=["value"],Eh=["label"],Ch=["value"],Mh=["title"],Sh=["aria-label"],Th=["aria-label"],Ah={class:"tabs",id:"tabs"},Oh=["onClick"],jh={key:0,class:"todo"},Hh={key:0,id:"root"},qh={key:0,class:"hint",style:{padding:"0 18px"}},Lh={key:1,class:"hint",style:{padding:"0 18px",color:"var(--bad)"}},Ph={key:2,class:"card"},Bh=Ut({__name:"App",setup(t){const e=location.hash.replace("#",""),s=(e.match(/^tab=([a-z_]+)/)||[])[1]||"",n=(e.match(/^tab=[a-z_]+:([a-z_]+)/)||[])[1]||"",o=/\/detail\/v2\/?$/.test(location.pathname),l=kt(o||e==="workbench"||s?"workbench":"portal");function c(B){l.value=B;try{location.hash=B==="portal"?"":B}catch{}}const a=kt("overview");s&&(a.value=s);const d=kt(null);n&&(d.value=n);const g=kt(null),f=kt(""),m=[["近30日","win.30d"],["近90日","win.90d"],["2026年","win.2026"],["2026H1","win.2026H1"],["2025H2","win.2025H2"],["全程","win.all"]],_={近30日:"30d",近90日:"90d","2026年":"2026","2026H1":"2026H1","2025H2":"2025H2",全程:"all"},x=U(()=>f.value||""),q=U(()=>/^\d{4}-\d{2}-\d{2}~\d{4}-\d{2}-\d{2}$/.test(x.value)),V=U(()=>((g.value||{}).all_months||[]).slice().reverse()),Y=kt(""),Q=kt("");function L(B){const A=B.target.value;f.value=_[A]||A}function P(){Y.value&&Q.value&&(f.value=Y.value+"~"+Q.value)}const F=kt(!1),H=kt(""),pt={system:["/api/maint_survey"],decision:["/api/ask_models"],report:["/api/ask_models"],generation:["/api/curves"]},ct=kt({}),gt=kt(null);async function Ht(B){const A=pt[B]||[];for(const C of A){if(C==="/api/curves"){if(gt.value)continue}else if(ct.value[C]!==void 0)continue;try{const I=await(await fetch(C)).json();C==="/api/curves"?gt.value=I:ct.value={...ct.value,[C]:I}}catch(W){ct.value={...ct.value,[C]:{error:String(W?.message||W)}}}}}Te(a,B=>{l.value==="workbench"&&Ht(B)},{immediate:!0});async function Rt(){F.value=!0,H.value="";const B=f.value?`?win=${encodeURIComponent(f.value)}`:"",A=await Gl("fleet",{method:"GET"});if(B)try{const C=await fetch("/api/fleet"+B);g.value=await C.json()}catch(C){H.value=C instanceof Error?C.message:String(C)}else A.ok?(g.value=A.data,g.value?.win&&(f.value=g.value.win)):H.value=A.error||`HTTP ${A.status}`;F.value=!1}Te(f,B=>{B&&B!==g.value?.win&&Rt()});function S(){a.value="overview",d.value=null,Rt()}return vs(()=>{Rt(),window.addEventListener("hashchange",()=>{const B=location.hash.replace("#",""),A=(B.match(/^tab=([a-z_]+)/)||[])[1]||"";B==="workbench"||A?(l.value="workbench",A&&(a.value=A)):B||(l.value="portal")})}),(B,A)=>l.value==="portal"?(D(),It(Jl,{key:0})):(D(),E("div",gh,[i("header",_h,[A[7]||(A[7]=i("span",{class:"mark"},"≋",-1)),A[8]||(A[8]=i("span",{class:"brand"},[at("观澜"),i("small",null,"WIND ASSET INTELLIGENCE")],-1)),i("div",vh,[i("a",{class:"back-portal",href:"#",title:u(r)("ui.back_portal"),onClick:A[0]||(A[0]=Ea(C=>c("portal"),["prevent"]))},p(u(r)("ui.back_portal")),9,bh),i("button",{type:"button",class:"reselect",title:u(r)("ui.reselect"),onClick:S},p(u(r)("ui.reselect")),9,xh),i("label",yh,p(u(r)("win.label")),1),i("select",{id:"win","aria-label":u(r)("win.label"),value:x.value,onChange:L},[i("optgroup",{label:u(r)("win.presets")},[(D(),E(it,null,yt(m,([C,W])=>i("option",{key:C,value:C},p(u(r)(W)),9,kh)),64))],8,$h),q.value?(D(),E("optgroup",{key:0,label:u(r)("win.custom")},[i("option",{value:x.value},p(u(r)("win.custom_sel",{a:x.value.split("~")[0],b:x.value.split("~")[1]})),9,Fh)],8,Dh)):vt("",!0),V.value.length?(D(),E("optgroup",{key:1,label:u(r)("win.months")},[(D(!0),E(it,null,yt(V.value,C=>(D(),E("option",{key:C,value:C},p(C),9,Ch))),128))],8,Eh)):vt("",!0)],40,wh),i("span",{class:"winrng",title:u(r)("win.custom_hint")},[$n(i("input",{type:"date","aria-label":u(r)("win.from"),"onUpdate:modelValue":A[1]||(A[1]=C=>Y.value=C)},null,8,Sh),[[Ao,Y.value]]),A[6]||(A[6]=i("span",{class:"muted"},"~",-1)),$n(i("input",{type:"date","aria-label":u(r)("win.to"),"onUpdate:modelValue":A[2]||(A[2]=C=>Q.value=C)},null,8,Th),[[Ao,Q.value]]),i("button",{type:"button",onClick:P},p(u(r)("win.apply")),1)],8,Mh)])]),i("nav",Ah,[(D(!0),E(it,null,yt(u(Ba),C=>(D(),E("button",{key:C,class:ee({on:C===a.value}),onClick:W=>a.value=C},[at(p(u(r)("tab."+C)),1),u(Mn).includes(C)?vt("",!0):(D(),E("sup",jh,"迁移中"))],10,Oh))),128))]),l.value!=="portal"?(D(),E("main",Hh,[l.value==="workbench"?(D(),E(it,{key:0},[F.value?(D(),E("p",qh,"取数中(/api/fleet)…")):H.value?(D(),E("p",Lh,"取数失败:"+p(H.value),1)):g.value?(D(),It(mh,{key:2,d:g.value,tab:a.value,sub:d.value,onTab:A[3]||(A[3]=C=>a.value=C),onSub:A[4]||(A[4]=C=>d.value=C),win:f.value,onWin:A[5]||(A[5]=C=>{f.value=C}),onReselect:S,apis:ct.value,curves:gt.value},null,8,["d","tab","sub","win","apis","curves"])):vt("",!0)],64)):l.value==="smoke"?(D(),It(La,{key:1})):(D(),E("section",Ph,[...A[9]||(A[9]=[zi("<h2>关于本前端</h2><ul><li>技术栈:<b>Vue 3 + Vite + TypeScript + Node.js</b>(用户令 2026-09-29)</li><li>与后端交互:只走网关一个源站,路径与形状以 <code>app_backEnd/app_backEnd_guanlan/contract/http_api_v1.json</code> 冻契约为准</li><li>数据来源:与重构前 <code>/detail/v2</code> 同一个接口 <code>/api/fleet?win=</code></li><li>迁移纪律:页签逐个搬,与重构前页面对拍通过后才删对应 Python 源码</li></ul>",2)])]))])):vt("",!0),A[10]||(A[10]=i("footer",{id:"foot",class:"small muted",style:{"margin-top":"36px"}},null,-1))]))}});Sa(Bh).mount("#app");