@cfour-hi/dsh-plugin-devicex 0.0.0-stage → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +38 -2
- package/client.js +1008 -0
- package/cordis.patch.yml +3 -0
- package/host/actions-darwin.js +1261 -0
- package/host/actions-win32.js +1333 -0
- package/host/actions.js +45 -0
- package/host/benchmark.js +413 -0
- package/host/cleanup-darwin.js +715 -0
- package/host/cleanup-win32.js +760 -0
- package/host/cleanup.js +62 -0
- package/host/collector-darwin.js +2995 -0
- package/host/collector-win32.js +2060 -0
- package/host/collector.js +71 -0
- package/host/footprint-core.js +399 -0
- package/host/footprint-darwin.js +663 -0
- package/host/footprint-win32.js +411 -0
- package/host/footprint.js +284 -0
- package/host/proc.js +232 -0
- package/host/tool.js +254 -0
- package/host/transport.js +316 -0
- package/host/uninstall.js +244 -0
- package/host/win/hardware.ps1 +501 -0
- package/host/win/metrics.ps1 +535 -0
- package/host/win/network.ps1 +322 -0
- package/host/win/processes.ps1 +169 -0
- package/host/win/security.ps1 +197 -0
- package/host/win/software.ps1 +119 -0
- package/host/win/system.ps1 +279 -0
- package/host/win.js +187 -0
- package/icon.svg +18 -0
- package/index.js +67 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +60 -4
package/client.js
ADDED
|
@@ -0,0 +1,1008 @@
|
|
|
1
|
+
/* Device X client — generated from src/client/ by scripts/build-client.mjs. Do not edit. */
|
|
2
|
+
(()=>{var rt=null;function Bt(a){rt=a}function le(){if(rt===null)throw new Error("Device X: react runtime was not provided by the module loader");return rt}var Dt=Symbol.for("devicex.fragment"),Y=Dt;function t(a,e,...r){let n=le();return n.createElement(a===Dt?n.Fragment:a,e,...r)}function U(a){return le().useState(a)}function ee(a,e){return le().useEffect(a,e)}function $(a){return le().useRef(a)}function Z(a,e){return le().useCallback(a,e)}function Se(){return le().useId()}var E=a=>a!==null&&typeof a=="object"&&!Array.isArray(a),x=a=>E(a)?a:{},m=a=>Array.isArray(a)?a:[],R=a=>typeof a=="number"&&isFinite(a),F=(a,e)=>R(a)?a:e,I=a=>R(a)?a:null,i=(a,e)=>typeof a=="string"&&a.length>0?a:e===void 0?"":e,Ve=a=>a===!0?!0:a===!1?!1:null,me=(a,e,r)=>Math.min(r,Math.max(e,a)),Ye=(...a)=>a.filter(e=>typeof e=="string"&&e.length>0).join(" ");function Va(a,e){return typeof a!="string"||!e?a:a.replace(/\{(\w+)\}/g,(r,n)=>Object.prototype.hasOwnProperty.call(e,n)?String(e[n]):r)}function Ya(a){return(e,r)=>{let n=a&&Object.prototype.hasOwnProperty.call(a,e)?a[e]:e;return Va(n,r)}}var Te=Ya(null),Ot=["B","KB","MB","GB","TB","PB"];function j(a){if(!R(a)||a<0)return"\u2014";if(a<1024)return Math.round(a)+" B";let e=a,r=0;for(;e>=1024&&r<Ot.length-1;)e/=1024,r+=1;let n=e>=100?0:(e>=10,1);return e.toFixed(n)+" "+Ot[r]}function nt(a){return!R(a)||a<0?"\u2014":j(a)+"/s"}function Q(a,e){if(!R(a))return"\u2014";let r=typeof e=="number"?e:0;return a.toFixed(r)+"%"}function X(a,e){return R(a)?e?a.toFixed(e):String(Math.round(a)):"\u2014"}function he(a,e){if(!R(a)||a<0)return"\u2014";let r=Math.floor(a),n=Math.floor(r/86400),o=Math.floor(r%86400/3600),s=Math.floor(r%3600/60),l=[];return n>0&&l.push(n+" "+e("unit.day")),o>0&&l.push(o+" "+e("unit.hour")),n===0&&l.length===0&&l.push(s+" "+e("unit.minute")),l.length===0&&l.push(e("unit.lessThanMinute")),l.slice(0,2).join(" ")}function st(a){return R(a)?a<1e3?Math.round(a)+" ms":(a/1e3).toFixed(a<1e4?1:0)+" s":"\u2014"}function Ce(a){if(!R(a)||a<=0)return"\u2014";try{return new Date(a).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{return"\u2014"}}function Pe(a){if(!R(a)||a<=0)return"\u2014";try{return new Date(a).toLocaleString()}catch{return"\u2014"}}function ue(a,e){return!R(a)||!R(e)||e<=0?null:me(a/e*100,0,100)}function fe(a){return R(a)?a>=92?"var(--dsw-alias-state-error-primary)":a>=78?"var(--dsw-alias-state-warn-primary)":"var(--dsw-alias-brand-primary)":"var(--dsw-alias-state-idle-primary)"}function Lt(a){return a==="critical"?"var(--dsw-alias-state-error-primary)":a==="warning"?"var(--dsw-alias-state-warn-primary)":"var(--dsw-alias-state-success-primary)"}function ot(a){return a==="critical"?"overview.memPressure.critical":a==="warning"?"overview.memPressure.warning":"overview.memPressure.normal"}function Fe(a){return R(a)?a>=-55?4:a>=-67?3:a>=-78?2:a>=-90?1:0:0}function Xe(a){if(typeof a!="string")return!1;let e=a.split(".");if(e.length!==4)return!1;for(let r of e)if(!/^\d{1,3}$/.test(r)||Number(r)>255)return!1;return!0}function Ze(a){return String(a??"").split(/[\s,;]+/).map(e=>e.trim()).filter(e=>e.length>0)}function It(a){return m(x(a).errors).filter(e=>typeof e=="string"&&e.length>0)}function re(a){if(a==null)return"";if(typeof a=="string")return a;if(typeof a.message=="string")return a.message;try{return String(a)}catch{return""}}function Xa(a){let e=x(a);return R(e.pid)?{pid:e.pid,name:i(e.name,"?"),cpu:I(e.cpu),memPercent:I(e.memPercent),user:i(e.user,"")}:null}function Ft(a){let e=x(a),r=x(e.cpu),n=x(e.memory),o=x(e.disk),s=x(e.network),l=E(s.wifi)?s.wifi:null,c=E(e.battery)?e.battery:null,d=x(e.thermal),f=x(e.processes);return{ts:F(e.ts,Date.now()),hostname:i(e.hostname,""),osVersion:i(e.osVersion,""),uptimeSec:I(e.uptimeSec),cpu:{model:i(r.model,""),usagePercent:I(r.usagePercent),perCore:m(r.perCore).filter(R).slice(0,64),loadAvg:m(r.loadAvg).map(g=>F(g,0)).slice(0,3),logicalCores:I(r.logicalCores),physicalCores:I(r.physicalCores)},memory:{totalBytes:I(n.totalBytes),usedBytes:I(n.usedBytes),appBytes:I(n.appBytes),wiredBytes:I(n.wiredBytes),compressedBytes:I(n.compressedBytes),cachedBytes:I(n.cachedBytes),freeBytes:I(n.freeBytes),swapTotalBytes:I(n.swapTotalBytes),swapUsedBytes:I(n.swapUsedBytes),pressure:["normal","warning","critical"].indexOf(n.pressure)>=0?n.pressure:"normal"},disk:{totalBytes:I(o.totalBytes),usedBytes:I(o.usedBytes),freeBytes:I(o.freeBytes),readBytesPerSec:I(o.readBytesPerSec),writeBytesPerSec:I(o.writeBytesPerSec)},network:{rxBytesPerSec:I(s.rxBytesPerSec),txBytesPerSec:I(s.txBytesPerSec),wifi:l?{ssid:i(l.ssid,""),rssi:I(l.rssi),channel:I(l.channel)}:null,primaryIpv4:m(s.primaryIpv4).filter(g=>typeof g=="string"),defaultInterface:i(s.defaultInterface,"")},battery:c?{present:c.present!==!1,percent:I(c.percent),charging:c.charging===!0,plugged:c.plugged===!0,powerSource:i(c.powerSource,""),timeRemainingMin:I(c.timeRemainingMin),temperatureC:I(c.temperatureC),cycleCount:I(c.cycleCount),healthPercent:I(c.healthPercent)}:null,thermal:it(e.thermal),processes:{total:I(f.total),top:m(f.top).map(Xa).filter(Boolean)}}}function it(a){let e=x(a),r=m(e.fans).map(c=>{let d=x(c);return{name:i(d.name,""),rpm:I(d.rpm)}}).filter(c=>c.name!==""||c.rpm!==null).slice(0,4),n=I(e.cpuCelsius),o=I(e.gpuCelsius),s=I(e.batteryCelsius),l=I(e.nvmeCelsius);return{available:e.available===!0||[n,o,s,l].some(c=>c!==null),cpuCelsius:n,gpuCelsius:o,batteryCelsius:s,nvmeCelsius:l,pressure:["nominal","fair","serious","critical"].indexOf(e.pressure)>=0?e.pressure:null,fans:r,sources:m(e.sources).filter(c=>typeof c=="string").slice(0,8),note:["cpu-needs-admin","wmi-unsupported","unavailable"].indexOf(e.note)>=0?e.note:null}}function Et(a){let e=x(a),r=["high","medium","conflict","shared"],n=["app","data","container","shared","system"],o=m(e.items).map(s=>{let l=x(s),c=i(l.id,""),d=i(l.path,"");if(!c||!d)return null;let f=r.indexOf(l.confidence)>=0?l.confidence:"shared",g=l.requiresAdmin===!0;return{id:c,kind:n.indexOf(l.kind)>=0?l.kind:"data",path:d,displayPath:i(l.displayPath,d),bytes:F(l.bytes,0),files:F(l.files,0),confidence:f,source:i(l.source,"bundle-id"),reason:i(l.reason,""),alsoMatchedBy:m(l.alsoMatchedBy).filter(u=>typeof u=="string").slice(0,8),requiresAdmin:l.requiresAdmin===!0,exists:l.exists!==!1,warning:i(l.warning,""),selectable:!g&&(f==="high"||f==="medium"||f==="conflict"),defaultSelected:!g&&f==="high"}}).filter(Boolean).slice(0,200);return{scanId:i(e.scanId,""),appPath:i(e.appPath,""),bundleId:i(e.bundleId,""),sandboxed:e.sandboxed===!0,targetedRoots:m(e.targetedRoots).filter(s=>typeof s=="string").slice(0,32),generatedAt:F(e.generatedAt,0),durationMs:F(e.durationMs,0),items:o,totalBytes:F(e.totalBytes,0),selectedBytes:F(e.selectedBytes,0),errors:m(e.errors).filter(s=>typeof s=="string").slice(0,8)}}function zt(a){let e=x(a),r=["cache","logs","trash","temp","developer","updates"],n=m(e.items).map(o=>{let s=x(o),l=i(s.id,"");return l?{id:l,label:i(s.label,l),detail:i(s.detail,""),category:r.indexOf(s.category)>=0?s.category:"cache",path:i(s.path,""),bytes:F(s.bytes,0),files:F(s.files,0),requiresAdmin:s.requiresAdmin===!0,exists:s.exists!==!1,error:i(s.error,"")}:null}).filter(Boolean).slice(0,40);return{platform:i(e.platform,""),generatedAt:F(e.generatedAt,0),durationMs:F(e.durationMs,0),items:n,totalBytes:F(e.totalBytes,0),totalFiles:F(e.totalFiles,0),errors:m(e.errors).filter(o=>typeof o=="string").slice(0,8)}}function Ut(a){let e=x(a),r=x(e.environment),n=m(e.results).map(s=>{let l=x(s),c=i(l.id,"");return c!=="cpu"&&c!=="memory"&&c!=="disk"?null:{id:c,durationMs:I(l.durationMs),score:I(l.score),unit:i(l.unit,c==="memory"?"GB/s":c==="disk"?"MB/s":"ops/s"),details:x(l.details),error:i(l.error,"")}}).filter(Boolean),o=E(e.previous)?{at:I(e.previous.at),results:m(e.previous.results).map(s=>{let l=x(s),c=i(l.id,"");return c?{id:c,score:I(l.score)}:null}).filter(Boolean)}:null;return{platform:i(e.platform,""),startedAt:I(e.startedAt),durationMs:I(e.durationMs),environment:{hostname:i(r.hostname,""),cpuModel:i(r.cpuModel,""),logicalCores:I(r.logicalCores),physicalCores:I(r.physicalCores),memoryBytes:I(r.memoryBytes),osVersion:i(r.osVersion,"")},results:n,previous:o}}function Za(a){let e=x(a),r=i(e.name,"");if(!r)return null;let n=["number","string","boolean","select"].indexOf(e.type)>=0?e.type:"string";return{name:r,type:n,required:e.required===!0,options:e.options===void 0||e.options===null?null:m(e.options).map(o=>String(o)),min:I(e.min),max:I(e.max),placeholder:i(e.placeholder,"")}}function Qa(a){let e=x(a),r=i(e.id,"");if(!r)return null;let n=m(e.params).map(Za).filter(Boolean).slice(0,12);return{id:r,group:i(e.group,"system"),danger:["low","medium","high"].indexOf(e.danger)>=0?e.danger:"low",requiresAdmin:e.requiresAdmin===!0,params:n}}function Ht(a){let e={},r=[];for(let n of m(a)){let o=Qa(n);!o||e[o.id]||(e[o.id]=!0,r.push(o))}return r}function lt(a){let e=x(a),r=i(e.id,"");return r?{ts:F(e.ts,0),id:r,params:E(e.params)?e.params:{},ok:e.ok===!0,message:i(e.message,"")}:null}function Kt(a){return m(a).map(lt).filter(Boolean).slice(0,50)}function jt(a,e){let r={},n=[],o=s=>{let l=String(s.ts)+"|"+s.id+"|"+s.message;r[l]||(r[l]=!0,n.push(s))};for(let s of m(a))o(s);for(let s of m(e))o(s);return n.slice(0,50)}var Ee="devicex",dt="devicex";var ge=["overview","hardware","system","software","network","security","processes","cleanup","benchmark","actions"],Wt={overview:"tab.overview",hardware:"tab.hardware",system:"tab.system",software:"tab.software",network:"tab.network",security:"tab.security",processes:"tab.processes",cleanup:"tab.cleanup",benchmark:"tab.benchmark",actions:"tab.actions"},_t={overview:"overview",hardware:"cpu",system:"system",software:"software",network:"network",security:"security",processes:"processes",cleanup:"trash",benchmark:"spark",actions:"actions"},be={hardware:"hardware",system:"system",software:"software",network:"network",security:"security",processes:"processes"},ct=["process","app","system","network","software","power"],Gt={process:"act.groups.process",app:"act.groups.app",system:"act.groups.system",network:"act.groups.network",software:"act.groups.software",power:"act.groups.power"};var qt={pid:"act.param.pid",signal:"act.param.signal",name:"act.param.name",path:"act.param.path",mode:"act.param.mode",kind:"act.param.kind",value:"act.param.value",percent:"act.param.percent",enabled:"act.param.enabled",pane:"act.param.pane",service:"act.param.service",servers:"act.param.servers"},mt={pid:"act.paramPlaceholder.pid",name:"act.paramPlaceholder.name",path:"act.paramPlaceholder.path",value:"act.paramPlaceholder.value",pane:"act.paramPlaceholder.pane",service:"act.paramPlaceholder.service",servers:"act.paramPlaceholder.servers"},Vt={trash:"act.mode.trash",delete:"act.mode.delete",HostName:"act.kind.HostName",ComputerName:"act.kind.ComputerName",LocalHostName:"act.kind.LocalHostName",TERM:"proc.signal.TERM",KILL:"proc.signal.KILL",INT:"proc.signal.INT",STOP:"proc.signal.STOP",CONT:"proc.signal.CONT"},Yt=["TERM","KILL","INT","STOP","CONT"],pt={low:"act.danger.low",medium:"act.danger.medium",high:"act.danger.high"},ut={"process.signal":{group:"process",danger:"high",requiresAdmin:!1,icon:"signal",labelKey:"action.process.signal",descKey:"action.process.signal.desc"},"app.quit":{group:"app",danger:"low",requiresAdmin:!1,icon:"power",labelKey:"action.app.quit",descKey:"action.app.quit.desc"},"app.launch":{group:"app",danger:"low",requiresAdmin:!1,icon:"arrowUp",labelKey:"action.app.launch",descKey:"action.app.launch.desc"},"app.reveal":{group:"app",danger:"low",requiresAdmin:!1,icon:"reveal",labelKey:"action.app.reveal",descKey:"action.app.reveal.desc"},"app.uninstall":{group:"app",danger:"high",requiresAdmin:!1,icon:"trash",labelKey:"action.app.uninstall",descKey:"action.app.uninstall.desc"},"system.setHostname":{group:"system",danger:"medium",requiresAdmin:!0,icon:"system",labelKey:"action.system.setHostname",descKey:"action.system.setHostname.desc"},"system.setVolume":{group:"system",danger:"low",requiresAdmin:!1,icon:"audio",labelKey:"action.system.setVolume",descKey:"action.system.setVolume.desc"},"system.setDarkMode":{group:"system",danger:"low",requiresAdmin:!1,icon:"display",labelKey:"action.system.setDarkMode",descKey:"action.system.setDarkMode.desc"},"system.launchAgent":{group:"system",danger:"medium",requiresAdmin:!0,icon:"agent",labelKey:"action.system.launchAgent",descKey:"action.system.launchAgent.desc"},"system.openSettings":{group:"system",danger:"low",requiresAdmin:!1,icon:"gear",labelKey:"action.system.openSettings",descKey:"action.system.openSettings.desc"},"system.toggleFirewall":{group:"system",danger:"high",requiresAdmin:!0,icon:"firewall",labelKey:"action.system.toggleFirewall",descKey:"action.system.toggleFirewall.desc"},"system.flushDNS":{group:"system",danger:"low",requiresAdmin:!1,icon:"network",labelKey:"action.system.flushDNS",descKey:"action.system.flushDNS.desc"},"system.emptyTrash":{group:"system",danger:"high",requiresAdmin:!1,icon:"trash",labelKey:"action.system.emptyTrash",descKey:"action.system.emptyTrash.desc"},"network.setWifiPower":{group:"network",danger:"medium",requiresAdmin:!1,icon:"wifi",labelKey:"action.network.setWifiPower",descKey:"action.network.setWifiPower.desc"},"network.setDns":{group:"network",danger:"medium",requiresAdmin:!0,icon:"network",labelKey:"action.network.setDns",descKey:"action.network.setDns.desc"},"power.sleep":{group:"power",danger:"low",requiresAdmin:!1,icon:"sleep",labelKey:"action.power.sleep",descKey:"action.power.sleep.desc"},"power.lock":{group:"power",danger:"low",requiresAdmin:!1,icon:"lock",labelKey:"action.power.lock",descKey:"action.power.lock.desc"},"software.brewUninstall":{group:"software",danger:"medium",requiresAdmin:!1,icon:"software",labelKey:"action.software.brewUninstall",descKey:"action.software.brewUninstall.desc"},"software.wingetUninstall":{group:"software",danger:"medium",requiresAdmin:!1,icon:"software",labelKey:"action.software.wingetUninstall",descKey:"action.software.wingetUninstall.desc"}},Xt={overview:[["rect",{x:3.5,y:3.5,width:7,height:7,rx:2}],["rect",{x:13.5,y:3.5,width:7,height:7,rx:2}],["rect",{x:3.5,y:13.5,width:7,height:7,rx:2}],["rect",{x:13.5,y:13.5,width:7,height:7,rx:2}]],cpu:[["rect",{x:6.5,y:6.5,width:11,height:11,rx:2.5}],["rect",{x:9.5,y:9.5,width:5,height:5,rx:1}],["path",{d:"M9.5 3.5v3M14.5 3.5v3M9.5 17.5v3M14.5 17.5v3M3.5 9.5h3M3.5 14.5h3M17.5 9.5h3M17.5 14.5h3"}]],system:[["rect",{x:3.5,y:4.5,width:17,height:12,rx:2}],["path",{d:"M8 20.5h8M12 16.5v4"}]],software:[["rect",{x:4.5,y:4.5,width:15,height:15,rx:3}],["path",{d:"M4.5 9.5h15M9.5 9.5v10"}]],network:[["path",{d:"M2.5 9a14 14 0 0119 0M5.5 12.5a9 9 0 0113 0M8.5 16a5.5 5.5 0 017 0"}],["circle",{cx:12,cy:19.5,r:1.2}]],security:[["path",{d:"M12 3l7 3v5.5c0 4.2-2.9 7.6-7 9-4.1-1.4-7-4.8-7-9V6l7-3z"}],["path",{d:"M9 12l2.2 2.2L15.5 10"}]],processes:[["path",{d:"M4 6h16M4 12h10M4 18h13"}],["circle",{cx:18.5,cy:17.5,r:2}]],actions:[["path",{d:"M13 2.5L4.5 13.5H11l-1 8 8.5-11H12l1-8z"}]],refresh:[["path",{d:"M20 12a8 8 0 10-2.3 5.7M20 5.5V11h-5.5"}]],spark:[["path",{d:"M12 3v4M12 17v4M3 12h4M17 12h4M6 6l2.5 2.5M15.5 15.5L18 18M18 6l-2.5 2.5M8.5 15.5L6 18"}]],close:[["path",{d:"M6 6l12 12M18 6L6 18"}]],search:[["circle",{cx:11,cy:11,r:6.5}],["path",{d:"M20 20l-4.2-4.2"}]],warning:[["path",{d:"M12 3.5L22 20H2L12 3.5z"}],["path",{d:"M12 9.5v5M12 17.5v.5"}]],check:[["path",{d:"M4.5 12.5l4.5 4.5L19.5 6.5"}]],info:[["circle",{cx:12,cy:12,r:8.5}],["path",{d:"M12 11v5.5M12 7.8v.4"}]],arrowUp:[["path",{d:"M12 19V5M5.5 11.5L12 5l6.5 6.5"}]],arrowDown:[["path",{d:"M12 5v14M5.5 12.5L12 19l6.5-6.5"}]],battery:[["rect",{x:2.5,y:7.5,width:16,height:9,rx:2.5}],["path",{d:"M21.5 10.5v3"}]],memory:[["rect",{x:3.5,y:7.5,width:17,height:9,rx:2}],["path",{d:"M8 16.5v3M12 16.5v3M16 16.5v3M7.5 10.5v3M12 10.5v3M16.5 10.5v3"}]],disk:[["ellipse",{cx:12,cy:6.5,rx:7.5,ry:3}],["path",{d:"M4.5 6.5v11c0 1.7 3.4 3 7.5 3s7.5-1.3 7.5-3v-11"}]],wifi:[["path",{d:"M2.5 9a14 14 0 0119 0M5.5 12.5a9 9 0 0113 0M8.5 16a5.5 5.5 0 017 0"}],["circle",{cx:12,cy:19.5,r:1.2}]],gpu:[["rect",{x:3.5,y:6.5,width:17,height:11,rx:2.5}],["path",{d:"M8 10h3v3H8zM13 10h3M13 13h3"}]],display:[["rect",{x:3.5,y:4.5,width:17,height:11,rx:2}],["path",{d:"M8 20h8M12 15.5V20"}]],usb:[["path",{d:"M12 3v13M12 16a2.5 2.5 0 100 5 2.5 2.5 0 000-5zM8 8l4-5 4 5M8 8v3a4 4 0 004 4M16 8v3a4 4 0 01-4 4"}]],bluetooth:[["path",{d:"M8 7l7 5-3.5 4V4L15 8 8 13"}]],audio:[["path",{d:"M4 10v4h3.5L13 18V6L7.5 10H4z"}],["path",{d:"M16 9.5a4 4 0 010 5M18.5 7a7 7 0 010 10"}]],camera:[["rect",{x:3,y:7,width:12.5,height:10,rx:2}],["path",{d:"M15.5 11l5-3v8l-5-3"}]],users:[["circle",{cx:9,cy:8,r:3.5}],["path",{d:"M2.5 20c0-3.6 2.9-6 6.5-6s6.5 2.4 6.5 6M16 5a3.5 3.5 0 010 7M17.5 14.5c2.4.6 4 2.5 4 5.5"}]],boot:[["path",{d:"M12 4v8M8 6.5a7 7 0 104 0"}]],agent:[["circle",{cx:12,cy:12,r:3}],["path",{d:"M12 2v3M12 19v3M2 12h3M19 12h3M4.9 4.9l2.1 2.1M17 17l2.1 2.1M19.1 4.9L17 7M7 17l-2.1 2.1"}]],env:[["path",{d:"M4 7l4.5 5L4 17M11 17h8"}]],locale:[["circle",{cx:12,cy:12,r:8.5}],["path",{d:"M3.5 12h17M12 3.5c2.5 2.3 3.8 5.3 3.8 8.5S14.5 18.2 12 20.5C9.5 18.2 8.2 15.2 8.2 12S9.5 5.8 12 3.5z"}]],power:[["path",{d:"M12 3v8"}],["path",{d:"M7 6.2a7.5 7.5 0 108 0"}]],lock:[["rect",{x:4.5,y:10.5,width:15,height:10,rx:2.5}],["path",{d:"M8 10.5V8a4 4 0 018 0v2.5"}]],signal:[["path",{d:"M3 12h2M8 8v8M12 5v14M16 8v8M20 11v2"}]],trash:[["path",{d:"M4.5 7h15M9.5 7V4.5h5V7M6.5 7l1 13h9l1-13M10 11v5M14 11v5"}]],reveal:[["path",{d:"M3 6.5A2.5 2.5 0 015.5 4H10l2 2.5h6.5A2.5 2.5 0 0121 9v8a2.5 2.5 0 01-2.5 2.5H5.5A2.5 2.5 0 013 17V6.5z"}],["path",{d:"M9 13l2.5 2.5L16 13"}]],clock:[["circle",{cx:12,cy:12,r:8.5}],["path",{d:"M12 7.5V12l3 2"}]],sleep:[["path",{d:"M20 14.5A8.5 8.5 0 019.5 4a8.5 8.5 0 1010.5 10.5z"}]],gear:[["circle",{cx:12,cy:12,r:3.2}],["path",{d:"M12 2.5v3M12 18.5v3M2.5 12h3M18.5 12h3M5.3 5.3l2.1 2.1M16.6 16.6l2.1 2.1M18.7 5.3l-2.1 2.1M7.4 16.6l-2.1 2.1"}]],firewall:[["rect",{x:3.5,y:4.5,width:17,height:15,rx:2}],["path",{d:"M3.5 9.5h17M3.5 14.5h17M8 4.5v15M14.5 4.5v15"}]],database:[["ellipse",{cx:12,cy:6.5,rx:7.5,ry:3}],["path",{d:"M4.5 6.5v11c0 1.7 3.4 3 7.5 3s7.5-1.3 7.5-3v-11M4.5 12c0 1.7 3.4 3 7.5 3s7.5-1.3 7.5-3"}]],chevron:[["path",{d:"M9 5l7 7-7 7"}]],sort:[["path",{d:"M7 4v16M3.5 7.5L7 4l3.5 3.5M17 20V4M13.5 16.5L17 20l3.5-3.5"}]],plus:[["path",{d:"M12 5v14M5 12h14"}]]};var we="/devicex/api",Ja={accept:"application/json"};async function ft(a){let e=null;try{e=await a.json()}catch{e=null}if(!a.ok){let r=e&&e.error&&typeof e.error.message=="string"?e.error.message:"",n=new Error(r||"HTTP "+a.status);throw n.status=a.status,n}return e}function Zt(a,e){return a&&a.error&&typeof a.error.message=="string"&&a.error.message.length>0?a.error.message:a&&typeof a.message=="string"&&a.message.length>0?a.message:e}async function ze(a){let e=await fetch(a,{method:"GET",credentials:"same-origin",cache:"no-store",headers:Ja}),r=await ft(e);if(!r||r.ok!==!0)throw new Error(Zt(r,"Invalid response"));return r}var oe={async metrics(){return(await ze(we+"/metrics")).metrics},async section(a,e){let r="?section="+encodeURIComponent(a)+(e?"&fresh=1":"");return(await ze(we+"/inventory"+r)).data},async actions(){let a=await ze(we+"/actions");return{platform:a.platform,actions:a.actions,history:a.history}},async runAction(a,e){let r=null;try{let o=await fetch(we+"/action",{method:"POST",credentials:"same-origin",cache:"no-store",headers:{accept:"application/json","content-type":"application/json"},body:JSON.stringify({action:a,params:e&&typeof e=="object"?e:{}})});r=await ft(o)}catch(o){return{ok:!1,message:re(o)||"Request failed"}}let n=x(r);return{ok:n.ok===!0,message:i(n.message,""),data:n.data}},async cleanup(a){return(await ze(we+"/cleanup"+(a===!0?"?fresh=1":""))).cleanup},async footprint(a,e){let r="?path="+encodeURIComponent(String(a||""))+(e===!0?"&fresh=1":"");return(await ze(we+"/footprint"+r)).footprint},async benchmark(a){let e=null;try{let o=await fetch(we+"/benchmark",{method:"POST",credentials:"same-origin",cache:"no-store",headers:{accept:"application/json","content-type":"application/json"},body:JSON.stringify(a&&typeof a=="object"?a:{})});e=await ft(o)}catch(o){return{ok:!1,benchmark:null,message:re(o)||"Request failed"}}let r=x(e),n=Ut(r.benchmark);return{ok:r.ok===!0&&n!==null,benchmark:n,message:Zt(r,"")}}};function C(a){let e=i(a.name,"info"),r=F(a.size,16),n=Xt,o=n[e]||n.info;return t("svg",{width:r,height:r,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:F(a.strokeWidth,1.7),strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",focusable:"false",className:a.className},o.map((s,l)=>t(s[0],Object.assign({key:l},s[1]))))}function O(a){return t("span",{className:"dx-pill","data-tone":a.tone||"idle",title:a.title},a.children)}function Qe(a){return t("button",{type:"button",className:"dx-switch",role:"switch","aria-checked":a.checked===!0,"aria-label":a.label,disabled:a.disabled===!0,onClick:a.onChange},t("span",{className:"dx-switchThumb","aria-hidden":"true"}))}function gt(a){let e=ut[a.id];return e?{group:a.group,danger:a.danger,requiresAdmin:a.requiresAdmin,icon:e.icon,labelKey:e.labelKey,descKey:e.descKey}:{group:a.group,danger:a.danger,requiresAdmin:a.requiresAdmin,icon:"actions",labelKey:null,descKey:null}}function Je(a,e){let r=ut[e];return r?a(r.labelKey):e}function $e(a,e){let r=qt[e.name];return r?a(r):e.name}function Ue(a,e){let r=String(e),n=Vt[r];return n?a(n):r}function Qt(a){let e={};for(let r of m(a.params))if(r.type==="boolean")e[r.name]=!1;else if(r.type==="select"){let n=m(r.options);e[r.name]=n.length>0?String(n[0]):""}else e[r.name]="";return e}function Jt(a,e,r){let n={},o=x(r);for(let s of m(e.params)){let l=o[s.name],c=$e(a,s);if(s.type==="boolean")continue;let d=l==null?"":String(l).trim();if(s.type==="number"){if(d.length===0){s.required&&(n[s.name]=a("act.invalidRequired",{name:c}));continue}let f=Number(d),g=s.min===null?"\u2014":s.min,u=s.max===null?"\u2014":s.max;(!R(f)||s.min!==null&&s.min!==void 0&&f<s.min||s.max!==null&&s.max!==void 0&&f>s.max)&&(n[s.name]=a("act.invalidNumber",{min:g,max:u}))}else s.type==="select"?d.length===0&&s.required&&(n[s.name]=a("act.invalidSelect",{name:c})):d.length===0&&s.required&&(n[s.name]=a("act.invalidRequired",{name:c}))}return n}function $t(a,e,r){let n=x(r)[e.name];return e.type==="boolean"?a(n===!0?"common.on":"common.off"):n==null||String(n).length===0?"\u2014":e.type==="select"?Ue(a,n):String(n)}function $a(a){let e=a.t,r=a.param,n=a.value,o="dx-param-"+Se().replace(/[^a-zA-Z0-9_-]/g,""),s=$e(e,r),l=mt[r.name]?e(mt[r.name]):"",c=a.error;if(r.type==="boolean")return t("div",{className:"dx-field"},t("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"10px"}},t("label",{className:"dx-fieldLabel",htmlFor:o},s),t(Qe,{checked:n===!0,label:s,onChange:()=>a.onChange(n!==!0),disabled:a.disabled===!0})),c?t("span",{className:"dx-fieldError"},c):null);let d;if(r.type==="select"){let f=m(r.options);d=t("select",{id:o,className:"dx-select",value:n==null?"":String(n),onChange:g=>a.onChange(g.target.value)},t("option",{value:""},e("act.selectPlaceholder")),f.map(g=>t("option",{key:String(g),value:String(g)},Ue(e,g))))}else r.type==="number"?d=t("input",{id:o,type:"number",className:"dx-input",value:n==null?"":String(n),min:r.min===null?void 0:r.min,max:r.max===null?void 0:r.max,placeholder:l,inputMode:"numeric",onChange:f=>a.onChange(f.target.value)}):d=t("input",{id:o,type:"text",className:"dx-input",value:n==null?"":String(n),placeholder:l,onChange:f=>a.onChange(f.target.value)});return t("div",{className:"dx-field"},t("label",{className:"dx-fieldLabel",htmlFor:o},s,r.required?t("span",{"aria-hidden":"true",style:{marginLeft:"3px"}},"*"):null),d,c?t("span",{className:"dx-fieldError",role:"alert"},c):null)}function ea(a){let e=a.t,r=a.action,n=a.meta,o=x(a.values),s=x(a.errors),l=a.pending===!0,c=pt[n.danger]||pt.low;return t("article",{className:"dx-actionCard"},t("div",{className:"dx-actionHead"},t("span",{className:"dx-actionIcon"},t(C,{name:n.icon,size:16})),t("div",{className:"dx-actionTitles"},t("h3",{className:"dx-actionTitle"},n.labelKey?e(n.labelKey):r.id),n.descKey?t("p",{className:"dx-actionDesc"},e(n.descKey)):null,t("div",{className:"dx-actionBadges"},t(O,{tone:n.danger==="high"?"error":n.danger==="medium"?"warn":"idle"},e(c)),n.requiresAdmin?t(O,{tone:"warn"},t(C,{name:"lock",size:10}),e("act.requiresAdmin")):null))),m(r.params).length>0?t("div",{className:"dx-actionParams"},m(r.params).map(d=>t($a,{key:d.name,t:e,param:d,value:o[d.name],error:s[d.name],disabled:l,onChange:f=>a.onChange(d.name,f)}))):t("p",{className:"dx-small dx-muted"},e("act.noParams")),t("div",{className:"dx-actionFooter"},t("button",{type:"button",className:"dx-btn","data-variant":n.danger==="high"?"danger":"primary",disabled:l,onClick:()=>a.onRun(r,o)},l?e("act.pending"):t(Y,null,t(C,{name:"actions",size:13}),e("act.run")))))}function aa(){let[a,e]=U(!1);return ee(()=>{if(typeof matchMedia!="function")return;let r=matchMedia("(prefers-reduced-motion: reduce)"),n=()=>e(r.matches===!0);return n(),typeof r.addEventListener=="function"&&r.addEventListener("change",n),()=>{typeof r.removeEventListener=="function"&&r.removeEventListener("change",n)}},[]),a}function ra(){let[a,e]=U({status:"loading",metrics:null,error:null,updatedAt:0}),r=$(!0),n=$(!1),o=$(null),s=$(null),l=$({cpu:[],memory:[],disk:[],rx:[],tx:[],battery:[]}),c=Z(async()=>{if(n.current)return;n.current=!0;let f;try{f=await oe.metrics()}catch(v){r.current&&e(h=>({...h,status:h.metrics?"stale":"error",error:v})),n.current=!1;return}if(!r.current){n.current=!1;return}let g=Ft(f),u=l.current;Re(u.cpu,F(g.cpu.usagePercent,-1),60),Re(u.memory,ta(g.memory.usedBytes,g.memory.totalBytes),60),Re(u.disk,ta(g.disk.usedBytes,g.disk.totalBytes),60),Re(u.rx,g.network.rxBytesPerSec,60),Re(u.tx,g.network.txBytesPerSec,60),Re(u.battery,g.battery&&g.battery.present?g.battery.percent:-1,60),e({status:"ready",metrics:g,error:null,updatedAt:Date.now()}),n.current=!1},[]);ee(()=>{r.current=!0;let f=!1,g=0,u=async()=>{if(f)return;let v=g+=1;o.current!==null&&(clearTimeout(o.current),o.current=null),await c(),!(f||v!==g)&&(o.current=setTimeout(u,2500))};return s.current=u,u(),()=>{f=!0,r.current=!1,s.current=null,o.current!==null&&clearTimeout(o.current)}},[c]);let d=Z(()=>s.current?s.current():c(),[c]);return{status:a.status,metrics:a.metrics,error:a.error,updatedAt:a.updatedAt,samples:l.current,refresh:d}}function Re(a,e,r){typeof e!="number"||!isFinite(e)||(a.push(e),a.length>r&&a.splice(0,a.length-r))}function ta(a,e){return typeof a!="number"||typeof e!="number"||e<=0?null:Math.round(a/e*1e3)/10}function B(a){let e=a.title||a.subtitle||a.actions?t("div",{className:"dx-cardHead"},a.icon?t("span",{className:"dx-cardHeadIcon"},t(C,{name:a.icon,size:15})):null,t("div",{className:"dx-cardTitles"},a.title?t("div",{className:"dx-cardTitleRow"},t("h2",{className:"dx-cardTitle"},a.title),a.badge?t("span",{className:"dx-cardBadge"},a.badge):null):null,a.subtitle?t("p",{className:"dx-cardSub"},a.subtitle):null),a.actions?t("div",{className:"dx-cardActions"},a.actions):null):null;return t("section",{className:Ye("dx-card",a.className),"data-span":a.span===2?"2":a.span==="full"?"full":void 0},e,t("div",{className:a.flush?"dx-cardBody dx-cardBodyFlush":"dx-cardBody"},a.children))}function L(a){return t("div",{className:"dx-empty"},t("span",{className:"dx-emptyIcon"},t(C,{name:i(a.icon,"info"),size:22})),a.title?t("p",{className:"dx-emptyTitle"},a.title):null,a.text?t("p",{className:"dx-emptyText"},a.text):null,a.action||null)}function de(a){let e=a.t||(r=>r);return t("div",{className:"dx-error",role:"alert"},t("span",{className:"dx-errorIcon"},t(C,{name:"warning",size:24})),a.title?t("p",{className:"dx-errorTitle"},a.title):null,a.text?t("p",{className:"dx-errorText"},a.text):null,a.onRetry?t("button",{type:"button",className:"dx-btn","data-variant":"primary",onClick:a.onRetry},t(C,{name:"refresh",size:14}),a.retryLabel||e("common.retry")):null)}function bt(a){return t("div",{className:"dx-sectionHead"},t("h2",{className:"dx-sectionTitle"},a.title),a.subtitle?t("span",{className:"dx-sectionSub"},a.subtitle):null)}function xe(a){let e=m(a.lines).length>0?a.lines:["40","80","60","100"];return t("div",{className:"dx-skelGrid","aria-hidden":"true"},Array.from({length:F(a.cards,3)}).map((r,n)=>t("div",{className:"dx-skelCard",key:n},t("div",{className:"dx-skelLine","data-w":"40"}),t("div",{className:"dx-skelLine","data-w":"100","data-h":"tall"}),t("div",{style:{display:"flex",gap:"8px"}},e.map((o,s)=>t("div",{key:s,className:"dx-skelLine","data-w":o,style:{flex:1}}))))))}function na(a){let e=a.t,r=x(a.pending),n=x(a.catalog),o=m(n.actions),[s,l]=U({}),[c,d]=U({});if(ee(()=>{l(y=>{let P=Object.assign({},y),M=!1;for(let b of o)P[b.id]===void 0&&(P[b.id]=Qt(b),M=!0);return M?P:y})},[o]),n.status==="loading"||n.status==="idle")return t(xe,{cards:4});if(n.status==="error")return t(de,{t:e,title:e("error.section"),text:e("error.sectionHint")+(n.error?" ("+re(n.error)+")":""),onRetry:a.onRetry,retryLabel:e("common.retry")});let f=[];for(let y of o)ct.indexOf(y.group)<0&&f.indexOf(y.group)<0&&f.push(y.group);let g=ct.concat(f),u=m(a.history),v=(y,P,M)=>{l(b=>Object.assign({},b,{[y]:Object.assign({},x(b[y]),{[P]:M})})),d(b=>{let K=Object.assign({},x(b[y]));return K[P]?(delete K[P],Object.assign({},b,{[y]:K})):b})},h=(y,P)=>{let M=gt(y),b=Jt(e,y,P);if(Object.keys(b).length>0){d(G=>Object.assign({},G,{[y.id]:b}));return}let K=P;if(y.id==="network.setDns"){let G=Ze(x(P).servers);if(G.length>4||G.some(k=>!Xe(k))){d(k=>Object.assign({},k,{[y.id]:{servers:e("net.dnsInvalid")}}));return}K=Object.assign({},P,{servers:G})}d(G=>Object.assign({},G,{[y.id]:{}}));let _=m(y.params).map(G=>({label:$e(e,G),value:$t(e,G,P)}));a.openConfirm({title:e("act.runTitle",{action:M.labelKey?e(M.labelKey):y.id}),description:e("act.runBody"),details:_,confirmLabel:e("act.run"),danger:M.danger==="high"||M.requiresAdmin===!0,actionId:y.id,params:K})};return t("div",{className:"dx-section"},t("div",{className:"dx-toolbar"},t("div",{className:"dx-toolbarLeft"},t(bt,{title:e("act.catalog"),subtitle:String(o.length)})),t("div",{className:"dx-toolbarRight"},t("span",{className:"dx-small dx-muted"},e("act.footerHint")))),g.map(y=>{let P=o.filter(b=>b.group===y);if(P.length===0)return null;let M=Gt[y];return t("section",{className:"dx-actionGroup",key:y},t(bt,{title:M?e(M):y,subtitle:String(P.length)}),t("div",{className:"dx-actionGrid"},P.map(b=>{let K=gt(b);return t(ea,{key:b.id,t:e,action:b,meta:K,values:x(x(s)[b.id]),errors:x(x(c)[b.id]),pending:r[b.id]===!0,onChange:(_,G)=>v(b.id,_,G),onRun:h})})))}),t(B,{title:e("act.history"),icon:"clock",subtitle:u.length>0?String(u.length):""},u.length===0?t(L,{icon:"clock",title:e("act.historyEmpty")}):t("div",{className:"dx-history"},u.map((y,P)=>t("div",{className:"dx-historyRow",key:String(y.ts)+"-"+y.id+"-"+P},t("span",{className:"dx-historyDot","data-tone":y.ok?"ok":"fail"}),t("div",{className:"dx-historyMain"},t("div",{className:"dx-historyTop"},t("span",{className:"dx-historyAction"},Je(e,y.id)),t("span",{className:"dx-historyMeta",title:Pe(y.ts)},Ce(y.ts)),t(O,{tone:y.ok?"ok":"error"},y.ok?e("act.historyOk"):e("act.historyFail"))),y.message?t("div",{className:"dx-historyMsg"},y.message):null))))))}function sa(a){let e=a.t,r=a.previous;if(!r||typeof r.score!="number"||typeof a.score!="number"||r.score===0)return null;let n=(a.score-r.score)/r.score*100;if(!R(n))return null;let o=Math.abs(n),s=o<1?"flat":n>0?"up":"down",l=s==="flat"?e("bench.flat"):e(s==="up"?"bench.better":"bench.worse",{value:o.toFixed(1)+"%"});return t("span",{className:"dx-benchDelta","data-tone":s},s==="flat"?null:t(C,{name:s==="up"?"arrowUp":"arrowDown",size:12}),l)}var tr={cpu:"bench.cpu",memory:"bench.memory",disk:"bench.disk"},ar={cpu:"cpu",memory:"memory",disk:"disk"};function oa(a){let e=a.t,[r,n]=U({status:"idle",run:null,error:null}),[o,s]=U(!1),l=async()=>{if(o)return;s(!0),n(v=>({status:v.run?"ready":"loading",run:v.run,error:null}));let u=await oe.benchmark({});if(s(!1),!u.ok||!u.benchmark){n(v=>({status:v.run?"ready":"error",run:v.run,error:new Error(u.message||"benchmark failed")}));return}n({status:"ready",run:u.benchmark,error:null})},c=r.run,d={};if(c&&c.previous)for(let u of m(c.previous.results))d[i(u.id,"")]=u;let f=c?m(c.results):[],g=c?x(c.environment):{};return t("div",{className:"dx-section"},t(B,{title:e("tab.benchmark"),icon:"spark",subtitle:e("bench.intro"),actions:t("button",{type:"button",className:"dx-btn","data-variant":"primary","data-size":"sm",onClick:l,disabled:o},t(C,{name:"spark",size:13}),e(o?"bench.running":c?"bench.rerun":"bench.run"))},o?t("p",{className:"dx-small dx-muted",role:"status"},e("bench.runningHint")):null,r.status==="error"&&!c?t(de,{t:e,title:e("error.section"),text:re(r.error),onRetry:l,retryLabel:e("common.retry")}):null,!c&&r.status!=="error"?t(L,{icon:"spark",title:e("bench.empty")}):null,f.length>0?t("div",{className:"dx-benchGrid"},f.map(u=>{let v=x(u.details),h=d[u.id];return t("div",{className:"dx-benchCard",key:u.id},t("div",{className:"dx-benchHead"},t(C,{name:ar[u.id]||"spark",size:15}),t("span",{className:"dx-benchTitle"},e(tr[u.id]||"bench.cpu")),t(sa,{t:e,previous:h,score:u.score})),u.error?t("div",{className:"dx-small",style:{color:"var(--dsw-alias-state-error-primary)"}},e("bench.failed",{message:u.error})):t(Y,null,t("div",null,t("span",{className:"dx-benchScore"},u.score===null?"\u2014":X(u.score,u.score<100?1:0)),t("span",{className:"dx-benchUnit"},u.unit)),t("div",{className:"dx-benchMeta"},e("bench.duration",{value:st(u.durationMs)})),u.id==="cpu"?t("div",{className:"dx-benchFacts"},R(x(v.singleThread).score)?t("span",{className:"dx-benchMeta",key:"single"},e("bench.single")+": "+X(x(v.singleThread).score,0)+" ops/s"):null,R(x(v.multiThread).score)?t("span",{className:"dx-benchMeta",key:"multi"},e("bench.multi")+": "+X(x(v.multiThread).score,0)+" ops/s"+(R(x(v.multiThread).threads)?" \xB7 "+e("bench.threads",{n:x(v.multiThread).threads}):"")):null):u.id==="disk"?t("div",{className:"dx-benchFacts"},R(v.writeMBps)?t("span",{className:"dx-benchMeta",key:"write"},e("bench.write")+": "+X(v.writeMBps,1)+" MB/s"):null,R(v.readMBps)?t("span",{className:"dx-benchMeta",key:"read"},e("bench.read")+": "+X(v.readMBps,1)+" MB/s"):null):t("div",{className:"dx-benchFacts"},R(v.megabytes)?t("span",{className:"dx-benchMeta",key:"bytes"},j(v.megabytes*1024*1024)):null)))})):null,c?t("div",{className:"dx-benchFacts",style:{marginTop:"14px"}},g.cpuModel?t("span",{className:"dx-benchMeta"},g.cpuModel):null,R(g.logicalCores)?t("span",{className:"dx-benchMeta"},e("bench.cores",{n:g.logicalCores})):null,R(g.memoryBytes)?t("span",{className:"dx-benchMeta"},e("bench.memoryTotal",{value:j(g.memoryBytes)})):null,g.osVersion?t("span",{className:"dx-benchMeta"},g.osVersion):null,R(c.durationMs)?t("span",{className:"dx-benchMeta"},e("bench.totalDuration",{value:st(c.durationMs)})):null):null,c&&c.previous===null?t("p",{className:"dx-small dx-muted",style:{marginTop:"8px"}},e("bench.noPrevious")):null))}var rr={cache:"cleanup.item.cache",logs:"cleanup.item.logs",trash:"cleanup.item.trash",temp:"cleanup.item.temp",developer:"cleanup.item.developer",updates:"cleanup.item.updates"};function ia(a){let e=a.t,[r,n]=U({status:"loading",data:null,error:null}),[o,s]=U({}),[l,c]=U(!1),[d,f]=U(!1),[g,u]=U(""),v=$(null),h=Z(w=>{if(v.current)return v.current;n(q=>({status:q.data?"ready":"loading",data:q.data,error:null}));let H=oe.cleanup(w===!0).then(q=>n({status:"ready",data:zt(q),error:null})).catch(q=>n(ce=>({status:ce.data?"ready":"error",data:ce.data,error:q}))).finally(()=>{v.current=null});return v.current=H,H},[]);ee(()=>{h(!1)},[h]);let y=r.data;if(r.status==="loading"&&!y)return t(Y,null,t(xe,{cards:3}),t("p",{className:"dx-loadingHint",role:"status"},e("cleanup.scanning")));if(r.status==="error"&&!y)return t(de,{t:e,title:e("cleanup.error"),text:re(r.error),onRetry:()=>h(!0),retryLabel:e("common.retry")});let P=y?y.items:[],M=P.filter(w=>w.exists!==!1&&w.bytes>0),b=M.filter(w=>o[w.id]===!0),K=b.reduce((w,H)=>w+H.bytes,0),_=b.reduce((w,H)=>w+H.files,0),G=M.length>0&&b.length===M.length,k=w=>{u(""),c(!1),s(H=>Object.assign({},H,{[w]:H[w]!==!0}))},T=()=>{if(u(""),c(!1),G){s({});return}let w={};for(let H of M)w[H.id]=!0;s(w)},A=async()=>{if(b.length===0){u(e("cleanup.noneSelected"));return}f(!0),u("");let w=b.map(q=>q.id),H=await a.onAction("cleanup.delete",{ids:w});f(!1),c(!1),H&&H.ok&&(s({}),await h(!0))};return t("div",{className:"dx-section"},t(B,{title:e("tab.cleanup"),icon:"trash",subtitle:e("cleanup.intro"),actions:t("button",{type:"button",className:"dx-btn","data-size":"sm",onClick:()=>h(!0),disabled:r.status==="loading"},t(C,{name:"refresh",size:13}),e("cleanup.scan"))},t("div",{className:"dx-cleanupTop"},t("div",null,t("div",{className:"dx-cleanupTotal"},j(y?y.totalBytes:0)),t("div",{className:"dx-cleanupMeta"},e("cleanup.reclaimable")+" \xB7 "+e("cleanup.files",{n:y?y.totalFiles:0})+(y&&y.generatedAt?" \xB7 "+e("cleanup.updated",{time:Ce(y.generatedAt)}):""))),t("span",{className:"dx-grow"}),t("div",{className:"dx-cleanActions"},t("button",{type:"button",className:"dx-linkBtn",onClick:T,disabled:M.length===0},e(G?"cleanup.selectNone":"cleanup.selectAll")),t("button",{type:"button",className:"dx-btn","data-variant":"primary",onClick:()=>{if(b.length===0){u(e("cleanup.noneSelected"));return}c(!0)},disabled:d||b.length===0},t(C,{name:"trash",size:13}),e(d?"cleanup.deleting":"cleanup.delete")))),t("p",{className:"dx-small dx-muted",style:{marginTop:"8px"}},e("cleanup.selected",{value:j(K)})+(b.length>0?" \xB7 "+e("cleanup.files",{n:_}):"")),g?t("div",{className:"dx-banner","data-tone":"warn",role:"status"},t("span",{className:"dx-bannerText"},g)):null,l?t("div",{className:"dx-banner","data-tone":"danger",role:"alert"},t("span",{className:"dx-bannerText"},e("cleanup.confirmTitle")+" "+e("cleanup.confirmBody",{value:j(K),n:_})),t("div",{className:"dx-cleanActions"},t("button",{type:"button",className:"dx-btn","data-size":"sm",onClick:()=>c(!1),disabled:d},e("cleanup.cancel")),t("button",{type:"button",className:"dx-btn","data-variant":"danger","data-size":"sm",onClick:A,disabled:d},e("cleanup.confirmLabel")))):null,t("div",{className:"dx-cleanupRows"},P.length===0?t(L,{icon:"trash",title:e("cleanup.scanEmpty")}):P.map(w=>t("div",{className:"dx-cleanRow",key:w.id},t("input",{type:"checkbox",className:"dx-cleanCheck",checked:o[w.id]===!0,disabled:w.exists===!1||w.bytes===0,"aria-label":w.label,onChange:()=>k(w.id)}),t("div",{className:"dx-cleanMain"},t("div",{className:"dx-cleanTitle"},w.label,t(O,{tone:"idle"},e(rr[w.category]||"cleanup.item.cache")),w.requiresAdmin?t(O,{tone:"warn",title:e("cleanup.adminHint")},e("cleanup.admin")):null,w.exists===!1?t(O,{tone:"idle"},e("common.na")):null),w.detail?t("div",{className:"dx-cleanPath"},w.detail):null,w.path?t("div",{className:"dx-cleanPath",title:w.path},w.path):null,w.error?t("div",{className:"dx-cleanPath"},w.error):null),t("div",{className:"dx-cleanSize"},t("div",null,j(w.bytes)),t("div",{className:"dx-cleanSizeSub"},e("cleanup.files",{n:w.files}))))))))}var xt=null;function nr(){let a=le();return class extends a.Component{constructor(r){super(r),this.state={failed:!1},this.retry=this.retry.bind(this)}static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(r,n){try{console.error("[devicex] widget failed:",r,n)}catch{}}retry(){this.setState({failed:!1})}render(){if(this.state.failed){let r=typeof this.props.t=="function"?this.props.t:Te;return t("div",{className:"dx-guard",role:"alert"},t("p",{className:"dx-guardTitle"},r("guard.title")),t("button",{type:"button",className:"dx-btn",onClick:this.retry},r("guard.retry")))}return this.props.children}}}function la(a){return xt===null&&(xt=nr()),t(xt,{t:a.t},a.children)}function da(a){let e=R(a.percent)?me(a.percent,0,100):0;return t("div",{className:"dx-barRow"},t("div",{className:"dx-barHead"},t("span",{className:"dx-truncate"},a.label),t("span",null,R(a.percent)?Q(e):"\u2014")),t("div",{className:"dx-barTrack",role:"presentation"},t("div",{className:"dx-barFill",style:{width:e+"%",background:i(a.color,fe(e))}})))}function J(a){let e=a.t||(o=>o),r=m(a.rows);if(r.length===0)return a.empty?t(Y,null,a.empty):t(L,{title:e("common.empty")});let n=m(a.columns);return t("div",{className:a.scroll==="fill"?"dx-tableWrap dx-tableWrapFill":a.scroll?"dx-tableWrap dx-tableWrapScroll":"dx-tableWrap"},t("table",{className:"dx-table","aria-label":a.ariaLabel},t("thead",null,t("tr",null,n.map(o=>t("th",{key:o.key,scope:"col",className:o.className},o.label)))),t("tbody",null,r.map((o,s)=>t("tr",{key:a.rowKey?a.rowKey(o,s):s},n.map(l=>t("td",{key:l.key,className:Ye(l.cellClass,l.align==="right"?"dx-num":"")},l.render?l.render(o,s):i(x(o)[l.key],"\u2014"))))))))}function ca(a){return t("div",{className:"dx-fact","data-wide":a.wide?"true":void 0},t("div",{className:"dx-factLabel"},a.label),t("div",{className:"dx-factValue",title:typeof a.title=="string"?a.title:void 0},a.value))}function te(a){let e=a.t||(n=>n),r=m(a.items).filter(Boolean);return r.length===0?t(L,{title:a.emptyText||e("common.empty")}):t("div",{className:"dx-factGrid"},r.map((n,o)=>t(ca,{key:n.key||o,label:n.label,value:n.value,wide:n.wide,title:n.title})))}function He(a){let e=m(a.options);return t("div",{className:"dx-segmented",role:"group","aria-label":a.label},e.map(r=>t("button",{key:r.value,type:"button",className:"dx-segBtn","aria-pressed":a.value===r.value,onClick:()=>a.onChange(r.value)},r.label)))}function ma(a){let e=a.t,[r,n]=U("usb"),o=m(a.usbDevices).filter(E),s=x(a.bluetooth),l=x(s.controller),c=m(s.devices).filter(E),d=[l.address?{key:"address",label:e("common.address"),value:l.address}:null,l.chipset?{key:"chipset",label:e("hw.chipset"),value:l.chipset}:null,l.firmware?{key:"firmware",label:e("hw.firmware"),value:l.firmware}:null,l.state?{key:"state",label:e("common.state"),value:l.state}:null].filter(Boolean),f=[{value:"usb",label:e("hw.usb")},{value:"bluetooth",label:e("hw.bluetooth")}];return t(B,{title:e("hw.connections"),icon:r==="usb"?"usb":"bluetooth",actions:t(He,{label:e("hw.connections.view"),options:f,value:r,onChange:n}),span:"full"},r==="usb"?o.length===0?t(L,{title:e("hw.empty")}):t(J,{t:e,columns:[{key:"name",label:e("common.name"),render:g=>i(g.name,"\u2014")},{key:"vendor",label:e("hw.vendor"),render:g=>i(g.vendor,"\u2014")},{key:"serial",label:e("common.serial"),render:g=>i(g.serial,"\u2014")},{key:"speed",label:e("hw.usbSpeed"),render:g=>g.speed===null||g.speed===void 0?"\u2014":String(g.speed)},{key:"bus",label:e("hw.bus"),render:g=>g.bus===null||g.bus===void 0?"\u2014":String(g.bus)}],rows:o}):t(Y,null,d.length>0?t(te,{t:e,items:d,emptyText:e("common.empty")}):null,c.length>0?t("div",{style:{marginTop:d.length>0?"12px":"0"}},t(J,{t:e,columns:[{key:"name",label:e("common.name"),render:g=>i(g.name,"\u2014")},{key:"address",label:e("common.address"),render:g=>i(g.address,"\u2014")},{key:"connected",label:e("common.status"),render:g=>g.connected===!0?t(O,{tone:"ok"},e("hw.connected")):t(O,{tone:"idle"},e("hw.notConnected"))},{key:"battery",label:e("common.battery"),render:g=>g.batteryPercent===null||g.batteryPercent===void 0?"\u2014":Q(g.batteryPercent)}],rows:c})):t("p",{className:"dx-small dx-muted",style:{marginTop:d.length>0?"12px":"0"}},e("hw.empty"))))}function Ae(a){return t("div",{className:"dx-searchWrap"},t("span",{className:"dx-searchIcon"},t(C,{name:"search",size:14})),t("input",{type:"search",className:"dx-input",value:i(a.value,""),placeholder:a.placeholder,"aria-label":a.label||a.placeholder,onChange:e=>a.onChange(e.target.value)}))}function ke(a){return t("div",{className:"dx-subcard"},t("div",{className:"dx-subcardHead"},a.icon?t("span",{className:"dx-muted"},t(C,{name:a.icon,size:14})):null,t("span",{className:"dx-subcardTitle"},a.title),a.badge||null),a.meta?t("div",{className:"dx-subcardMeta"},a.meta):null)}function pa(a){let e=a.t,[r,n]=U(""),o=m(a.drivers).filter(E),s=x(a.summary),l=m(a.problems).filter(E).slice(0,20);if(o.length===0)return t(B,{title:e("hw.drivers.title"),icon:"gear",subtitle:e("hw.drivers.subtitle"),span:"full"},t(L,{icon:"gear",title:e("hw.drivers.none")}));let c=String(r).trim().toLowerCase(),d=c?o.filter(v=>[v.name,v.class,v.manufacturer,v.signer,v.deviceId,v.bundleId].some(h=>typeof h=="string"&&h.toLowerCase().indexOf(c)>=0)):o,f=d.slice(0,60),g=I(s.total)??o.length,u=[t(O,{key:"total",tone:"idle"},e("hw.drivers.total",{n:g})),I(s.thirdParty)?t(O,{key:"third",tone:"brand"},e("hw.drivers.thirdParty",{n:s.thirdParty})):null,I(s.problems)&&s.problems>0?t(O,{key:"problems",tone:"error"},e("hw.drivers.problems",{n:s.problems})):null].filter(Boolean);return t(B,{title:e("hw.drivers.title"),icon:"gear",subtitle:e("hw.drivers.subtitle"),span:"full",actions:t("div",{style:{width:"190px"}},t(Ae,{value:String(r),placeholder:e("hw.drivers.search"),label:e("hw.drivers.search"),onChange:n}))},t("div",{className:"dx-tagList",style:{marginBottom:"10px"}},u),f.length===0?t(L,{icon:"search",title:e("hw.drivers.noMatch")}):t("div",{className:"dx-tableScroll"},t(J,{t:e,columns:[{key:"name",label:e("hw.drivers.name"),render:v=>i(v.name,i(v.bundleId,"\u2014"))},{key:"class",label:e("hw.drivers.class"),render:v=>i(v.class,i(v.kind,"\u2014"))},{key:"vendor",label:e("hw.drivers.vendor"),render:v=>i(v.manufacturer,"\u2014")},{key:"version",label:e("hw.drivers.version"),render:v=>i(v.version,"\u2014")},{key:"date",label:e("hw.drivers.date"),render:v=>i(v.date,"\u2014")},{key:"signer",label:e("hw.drivers.signer"),render:v=>i(v.signer,"\u2014")}],rows:f})),d.length>f.length?t("p",{className:"dx-small dx-muted",style:{marginTop:"8px"}},"\u2026 "+String(d.length-f.length)):null,l.length>0?t("div",{style:{marginTop:"12px"}},t("div",{className:"dx-factLabel",style:{marginBottom:"6px"}},e("hw.drivers.problems",{n:l.length})),t("div",{className:"dx-sublist"},l.map((v,h)=>t(ke,{key:h,title:i(v.name,"\u2014"),icon:"warning",badge:t(O,{tone:"error"},e("hw.drivers.problemCode",{code:i(v.code,"?")}))})))):null,t("p",{className:"dx-small dx-muted",style:{marginTop:"10px"}},e("hw.drivers.readOnly")))}function ua(a){let e=a.t,r=m(a.gpus).filter(Boolean),n=m(a.displays).filter(Boolean);return t(B,{title:e("hw.graphics"),icon:"gpu",span:2},t("div",{className:"dx-duo"},t("div",{className:"dx-duoCol"},t("div",{className:"dx-duoLabel"},e("hw.gpu")),r.length===0?t(L,{title:e("hw.empty")}):t("div",{className:"dx-sublist"},r.map((o,s)=>t(ke,{key:s,title:i(o.name,"\u2014"),icon:"gpu",meta:[R(o.cores)?e("hw.gpuCores",{n:o.cores}):null,o.vramBytes!==null&&o.vramBytes!==void 0?e("hw.vram")+" "+j(o.vramBytes):null,o.vendor?o.vendor:null,o.metal?e("hw.metal"):null].filter(Boolean).join(" \xB7 ")})))),t("div",{className:"dx-duoCol"},t("div",{className:"dx-duoLabel"},e("hw.displays")),n.length===0?t(L,{title:e("hw.empty")}):t("div",{className:"dx-sublist"},n.map((o,s)=>t(ke,{key:s,title:i(o.name,"\u2014"),icon:"display",badge:o.main===!0?t(O,{tone:"brand"},e("hw.main")):null,meta:[o.resolution?o.resolution:null,R(o.refreshHz)?X(o.refreshHz)+" Hz":null,o.connection?o.connection:null].filter(Boolean).join(" \xB7 ")}))))))}function fa(a){let e=It(a.section);return e.length===0?null:t("div",{className:"dx-banner","data-tone":"warn",role:"status"},t("span",{className:"dx-bannerIcon"},t(C,{name:"info",size:14})),t("span",{className:"dx-bannerText"},a.labelKey?a.t(a.labelKey):a.t("error.sectionHint")),t("span",{className:"dx-small dx-muted",title:e.join(`
|
|
3
|
+
`)},e[0]))}function se(a){let e=a.t,r=x(a.state),n=i(r.status,"idle");if(n==="idle"||n==="loading"&&!r.data)return t(Y,null,t(xe,{cards:F(a.skeletonCards,3)}),t("p",{className:"dx-loadingHint",role:"status"},e("loading.sectionHint")));if(n==="error"&&!r.data){let o=re(r.error);return t(de,{t:e,title:a.errorTitle||e("error.section"),text:(a.errorText?a.errorText+" ":"")+e("error.sectionHint")+(o?" ("+o+")":""),onRetry:a.onRetry,retryLabel:e("common.retry")})}return E(r.data)?t(Y,null,t(fa,{t:e,section:r.data,labelKey:a.errorsKey}),a.children(r.data)):t(L,{title:e("common.empty"),text:e("error.sectionHint"),action:a.onRetry?t("button",{type:"button",className:"dx-btn",onClick:a.onRetry},e("common.retry")):null})}var ga={nominal:"hw.thermal.pressure.nominal",fair:"hw.thermal.pressure.fair",serious:"hw.thermal.pressure.serious",critical:"hw.thermal.pressure.critical"},et={"cpu-needs-admin":"hw.thermal.note.cpu-needs-admin","wmi-unsupported":"hw.thermal.note.wmi-unsupported",unavailable:"hw.thermal.note.unavailable"};function ba(a){let e=a.t,r=it(a.thermal),n=r.pressure?e(ga[r.pressure]||ga.nominal):"",o=[r.cpuCelsius!==null?{key:"cpu",label:e("hw.thermal.cpu"),value:X(r.cpuCelsius,1)+" \xB0C"}:null,r.gpuCelsius!==null?{key:"gpu",label:e("hw.thermal.gpu"),value:X(r.gpuCelsius,1)+" \xB0C"}:null,r.batteryCelsius!==null?{key:"battery",label:e("hw.thermal.battery"),value:X(r.batteryCelsius,1)+" \xB0C"}:null,r.nvmeCelsius!==null?{key:"nvme",label:e("hw.thermal.nvme"),value:X(r.nvmeCelsius,1)+" \xB0C"}:null,n?{key:"pressure",label:e("hw.thermal.pressure"),value:t(O,{tone:r.pressure==="nominal"?"ok":r.pressure==="fair"?"warn":"error"},n)}:null,...r.fans.map((s,l)=>({key:"fan-"+l,label:s.name?e("hw.thermal.fan",{name:s.name}):e("hw.thermal.fans"),value:s.rpm===null?"\u2014":X(s.rpm)+" RPM"}))].filter(Boolean);return t(B,{title:e("hw.thermal.title"),icon:"spark",subtitle:e("hw.thermal.subtitle")},o.length>0?t("div",{className:"dx-factGridForce2"},t(te,{t:e,items:o,emptyText:e("hw.thermal.none")})):t(L,{icon:"spark",title:e("hw.thermal.none")}),r.note?t("p",{className:"dx-small dx-muted dx-clamp2",style:{marginTop:"10px"},title:e(et[r.note]||et.unavailable)},e(et[r.note]||et.unavailable)):null,r.sources.length>0?t("p",{className:"dx-small dx-muted dx-clamp1",style:{marginTop:"8px"},title:e("hw.thermal.sources")+": "+r.sources.join(", ")},e("hw.thermal.sources")+": "+r.sources.join(", ")):null)}function xa(a){let e=a.t,r=a.metrics,n=r?m(r.cpu.perCore):[];return t(se,{t:e,state:a.state,skeletonCards:4,onRetry:a.onRetry,errorsKey:"hw.errors"},o=>{let s=x(o.cpu),l=x(o.memory),c=x(o.storage),d=E(o.battery)?o.battery:null,f=m(s.features).filter(k=>typeof k=="string"),g=m(l.modules).filter(E),u=m(o.gpu).filter(E),v=m(o.displays).filter(E),h=m(c.physical).filter(E),y=m(c.volumes).filter(E),P=m(o.usb).filter(E),M=m(o.audio).filter(E),b=m(o.cameras).filter(E),K=m(o.drivers).filter(E),_=x(o.driverSummary),G=m(o.driverProblems).filter(E);return t("div",{className:"dx-section"},t("div",{className:"dx-grid dx-gridDense"},t(B,{title:e("hw.cpu"),icon:"cpu",subtitle:i(s.model,""),span:2},t(te,{t:e,items:[s.model?{key:"model",label:e("common.model"),value:s.model}:null,s.vendor?{key:"vendor",label:e("hw.vendor"),value:s.vendor}:null,s.architecture?{key:"arch",label:e("hw.arch"),value:s.architecture}:null,s.physicalCores!==null&&s.physicalCores!==void 0?{key:"physical",label:e("hw.physical"),value:String(s.physicalCores)}:null,s.logicalCores!==null&&s.logicalCores!==void 0?{key:"logical",label:e("hw.logical"),value:String(s.logicalCores)}:null,R(s.speedGHz)?{key:"speed",label:e("hw.speed"),value:X(s.speedGHz,2)+" GHz"}:null].filter(Boolean),emptyText:e("hw.errors")}),f.length>0?t("div",{className:"dx-tagList",style:{marginTop:"12px"}},f.slice(0,12).map(k=>t(O,{key:k,tone:"idle"},k))):null,n.length>0?t("div",{style:{marginTop:"14px"}},t("div",{className:"dx-factLabel",style:{marginBottom:"7px"}},e("hw.cpuCore")),t("div",{className:"dx-bars"},n.map((k,T)=>t(da,{key:T,label:"#"+(T+1),percent:k})))):null),t(B,{title:e("hw.memory"),icon:"memory",subtitle:l.totalBytes!==null?j(l.totalBytes):""},t(te,{t:e,items:[l.type?{key:"type",label:e("common.type"),value:l.type}:null,R(l.speedMHz)?{key:"speed",label:e("hw.speed"),value:X(l.speedMHz)+" MHz"}:null].filter(Boolean),emptyText:e("common.empty")}),g.length>0?t(Y,null,t("div",{className:"dx-factLabel",style:{margin:"12px 0 6px"}},e("hw.memoryModules")),t(J,{t:e,columns:[{key:"slot",label:e("hw.slot"),render:k=>i(k.slot,"\u2014")},{key:"size",label:e("common.size"),render:k=>j(k.sizeBytes)},{key:"type",label:e("common.type"),render:k=>i(k.type,"\u2014")},{key:"speed",label:e("hw.speed"),render:k=>R(k.speedMHz)?X(k.speedMHz)+" MHz":"\u2014"},{key:"manufacturer",label:e("hw.manufacturer"),render:k=>i(k.manufacturer,"\u2014")},{key:"part",label:e("hw.partNumber"),render:k=>i(k.partNumber,"\u2014")}],rows:g})):t("p",{className:"dx-small dx-muted",style:{marginTop:"10px"}},e("hw.noModules"))),t(ua,{t:e,gpus:u,displays:v}),t(B,{title:e("hw.battery"),icon:"battery"},d?t("div",{className:"dx-factGridForce2"},t(te,{t:e,items:[d.condition?{key:"condition",label:e("hw.condition"),value:d.condition}:null,d.percent!==null&&d.percent!==void 0?{key:"percent",label:e("common.battery"),value:e("hw.batteryPercent",{percent:Q(d.percent)})}:null,d.healthPercent!==null&&d.healthPercent!==void 0?{key:"health",label:e("hw.health"),value:Q(d.healthPercent)}:null,d.cycleCount!==null&&d.cycleCount!==void 0?{key:"cycles",label:e("hw.cycles"),value:String(d.cycleCount)}:null,d.designCapacityMah!==null&&d.designCapacityMah!==void 0?{key:"design",label:e("hw.designCapacity"),value:String(d.designCapacityMah)+" mAh"}:null,d.maxCapacityMah!==null&&d.maxCapacityMah!==void 0?{key:"max",label:e("hw.maxCapacity"),value:String(d.maxCapacityMah)+" mAh"}:null,d.temperatureC!==null&&d.temperatureC!==void 0?{key:"temperature",label:e("common.temperature"),value:X(d.temperatureC,1)+" \xB0C"}:null].filter(Boolean),emptyText:e("hw.batteryNoData")})):t(L,{icon:"battery",title:e("hw.batteryNoData")})),t(B,{title:e("hw.storage"),icon:"disk",span:"full"},h.length>0?t(Y,null,t("div",{className:"dx-factLabel",style:{marginBottom:"6px"}},e("hw.drives")),t(J,{t:e,columns:[{key:"name",label:e("common.name"),render:k=>i(k.name,i(k.model,"\u2014"))},{key:"model",label:e("common.model"),render:k=>i(k.model,"\u2014")},{key:"size",label:e("common.size"),render:k=>j(k.sizeBytes)},{key:"media",label:e("hw.mediaType"),render:k=>i(k.mediaType,"\u2014")},{key:"smart",label:e("hw.smart"),render:k=>i(k.smartStatus,"\u2014")}],rows:h})):null,y.length>0?t("div",{style:{marginTop:h.length>0?"16px":"0"}},t("div",{className:"dx-factLabel",style:{marginBottom:"8px"}},e("hw.volumes")),t("div",{className:"dx-sublist"},y.map((k,T)=>{let A=ue(k.usedBytes,k.totalBytes);return t("div",{key:T,className:"dx-subcard"},t("div",{className:"dx-subcardHead"},t("span",{className:"dx-subcardTitle"},i(k.name,i(k.mount,"\u2014"))),k.internal===!1?t(O,{tone:"idle"},e("hw.removable")):null),t("div",{className:"dx-subcardMeta"},i(k.mount,"\u2014")+" \xB7 "+i(k.fs,"\u2014")+" \xB7 "+j(k.usedBytes)+" / "+j(k.totalBytes)),t("div",{className:"dx-barTrack",style:{marginTop:"8px"},role:"presentation"},t("div",{className:"dx-barFill",style:{width:(A===null?0:A)+"%",background:fe(A)}})))}))):t(L,{title:e("common.empty")})),t(pa,{t:e,drivers:K,summary:_,problems:G}),t(ma,{t:e,usbDevices:P,bluetooth:o.bluetooth}),t(ba,{t:e,thermal:r?r.thermal:null}),t(B,{title:e("hw.audio"),icon:"audio"},M.length===0?t(L,{title:e("hw.empty")}):t("div",{className:"dx-sublist"},M.map((k,T)=>t(ke,{key:T,title:i(k.name,"\u2014"),icon:"audio",badge:k.default===!0?t(O,{tone:"brand"},e("hw.default")):k.kind==="input"?t(O,{tone:"idle"},e("hw.input")):t(O,{tone:"idle"},e("hw.output")),meta:i(k.manufacturer,"")})))),t(B,{title:e("hw.cameras"),icon:"camera"},b.length===0?t(L,{title:e("hw.empty")}):t(J,{t:e,columns:[{key:"name",label:e("common.name"),render:k=>i(k.name,"\u2014")},{key:"modelId",label:e("hw.modelId"),render:k=>i(k.modelId,"\u2014")},{key:"uniqueId",label:e("hw.uniqueId"),render:k=>i(k.uniqueId,"\u2014")}],rows:b}))))})}function ya(a){let e=typeof a.t=="function"?a.t:Te,r=$(null),n=$(a.onClose),o=$(a.onConfirm);n.current=a.onClose,o.current=a.onConfirm;let l="dx-modal-title-"+Se().replace(/[^a-zA-Z0-9_-]/g,"");ee(()=>{let d=r.current,f=typeof document<"u"?document.activeElement:null,g=typeof requestAnimationFrame=="function"?requestAnimationFrame:P=>setTimeout(P,0),u=typeof cancelAnimationFrame=="function"?cancelAnimationFrame:clearTimeout,h=g(()=>{if(!d)return;let P=d.querySelector("input:not(:disabled), select:not(:disabled), textarea:not(:disabled), button:not(:disabled), [href]");try{P&&typeof P.focus=="function"?P.focus():typeof d.focus=="function"&&d.focus()}catch{}}),y=P=>{if(P.key==="Escape"){P.preventDefault(),P.stopPropagation(),n.current&&n.current();return}if(P.key!=="Tab"||!d)return;let M=Array.prototype.slice.call(d.querySelectorAll("input:not(:disabled), select:not(:disabled), textarea:not(:disabled), button:not(:disabled), [href]"));if(M.length===0){P.preventDefault();return}let b=M[0],K=M[M.length-1],_=document.activeElement;P.shiftKey&&(_===b||!d.contains(_))?(P.preventDefault(),K.focus()):!P.shiftKey&&(_===K||!d.contains(_))&&(P.preventDefault(),b.focus())};return document.addEventListener("keydown",y,!0),()=>{u(h),document.removeEventListener("keydown",y,!0);try{f&&typeof f.focus=="function"&&f.focus()}catch{}}},[]);let c=m(a.details).filter(d=>E(d));return t("div",{className:"dx-modalRoot"},t("div",{className:"dx-modalMask",onMouseDown:d=>{d.target===d.currentTarget&&n.current&&n.current()}}),t("div",{className:"dx-modal",role:"dialog","aria-modal":"true","aria-labelledby":l,tabIndex:-1,ref:r},t("div",{className:"dx-modalHead"},t("h2",{className:"dx-modalTitle",id:l},a.title),t("button",{type:"button",className:"dx-btn dx-modalClose","data-size":"icon","aria-label":e("aria.close"),onClick:()=>n.current&&n.current()},t(C,{name:"close",size:14}))),t("div",{className:"dx-modalBody"},a.description?t("p",null,a.description):null,c.length>0?t("div",{className:"dx-modalDetails"},c.map((d,f)=>t("div",{className:"dx-modalDetailRow",key:f},t("span",{className:"dx-modalDetailLabel"},d.label),t("span",{className:"dx-modalDetailValue"},d.value)))):null,a.children||null,a.errorText?t("p",{className:"dx-inlineError",role:"alert",style:{marginTop:"10px"}},a.errorText):null),t("div",{className:"dx-modalFooter"},t("button",{type:"button",className:"dx-btn",onClick:()=>n.current&&n.current(),disabled:a.busy===!0},a.cancelLabel||e("common.cancel")),t("button",{type:"button",className:"dx-btn","data-variant":a.danger?"danger":"primary",onClick:()=>o.current&&o.current(),disabled:a.busy===!0},a.busy===!0?e("common.pending"):a.confirmLabel||e("common.confirm")))))}function Ke(a){let e=Number(a.level),r=Number.isFinite(e)?Math.min(4,Math.max(0,e)):0;return t("span",{className:"dx-signalWrap",role:"img","aria-label":a.label||"Signal "+r+"/4"},[1,2,3,4].map(n=>t("span",{key:n,className:"dx-signalBar","data-on":n<=r?"true":"false"})))}var sr={wifi:"net.type.wifi",ethernet:"net.type.ethernet",loopback:"net.type.loopback",bridge:"net.type.bridge",other:"net.type.other"};function va(a){let e=a.t,r=x(a.pending);return t(se,{t:e,state:a.state,skeletonCards:4,onRetry:a.onRetry,errorsKey:"net.errors"},n=>{let o=m(n.interfaces).filter(E),s=E(n.wifi)?n.wifi:null,l=E(n.defaultRoute)?n.defaultRoute:null,c=x(n.dns),d=x(n.proxy),f=m(n.listeningPorts).filter(E),g=o.find(b=>b.type==="wifi"),u=g?g.up!==!1:s!==null,v=e(u?"net.wifiPowerOn":"net.wifiPowerOff"),h=l&&l.interface?l.interface:"Wi-Fi",y=m(c.servers).filter(b=>typeof b=="string"),P=m(c.searchDomains).filter(b=>typeof b=="string"),M=[{key:"http",label:e("net.http")},{key:"https",label:e("net.https")},{key:"socks",label:e("net.socks")}];return t("div",{className:"dx-section"},t("div",{className:"dx-grid2"},t(B,{title:e("net.wifi"),icon:"wifi",actions:t("button",{type:"button",className:"dx-btn","data-size":"sm",disabled:r["network.setWifiPower"]===!0,onClick:()=>a.openConfirm({title:e(u?"net.confirmWifiOff":"net.confirmWifiOn"),confirmLabel:v,danger:u,actionId:"network.setWifiPower",params:{enabled:!u}})},t(C,{name:"wifi",size:13}),v)},s?t(Y,null,t("div",{className:"dx-toolbar",style:{gap:"12px",marginBottom:"10px"}},t(Ke,{level:Fe(s.rssi),label:e("net.signalLevel",{level:Fe(s.rssi)})}),t("span",{style:{fontWeight:600}},i(s.ssid,"\u2014")),t("span",{className:"dx-small dx-muted"},R(s.rssi)?String(Math.round(s.rssi))+" dBm":"")),t(te,{t:e,items:[s.bssid?{key:"bssid",label:e("net.bssid"),value:s.bssid}:null,s.channel!==null&&s.channel!==void 0?{key:"channel",label:e("net.channel"),value:String(s.channel)}:null,s.security?{key:"security",label:e("net.security"),value:s.security}:null,s.txRateMbps!==null&&s.txRateMbps!==void 0?{key:"txRate",label:e("net.txRate"),value:X(s.txRateMbps)+" Mbps"}:null,s.noise!==null&&s.noise!==void 0?{key:"noise",label:e("net.noise"),value:String(s.noise)+" dBm"}:null].filter(Boolean),emptyText:e("common.empty")})):t(L,{icon:"wifi",title:e("net.notConnected"),text:v})),t(B,{title:e("net.dns"),icon:"network",actions:t("button",{type:"button",className:"dx-btn","data-size":"sm",disabled:r["network.setDns"]===!0,onClick:()=>a.openDns(h,y)},t(C,{name:"gear",size:13}),e("net.setDns"))},y.length===0?t(L,{icon:"network",title:e("net.none")}):t("div",{className:"dx-tagList"},y.map(b=>t(O,{key:b,tone:"idle"},t("span",{className:"dx-mono"},b)))),P.length>0?t("div",{className:"dx-subcardMeta",style:{marginTop:"10px"}},e("net.searchDomains")+": "+P.join(", ")):null),t(B,{title:e("net.route"),icon:"network",actions:t("button",{type:"button",className:"dx-btn","data-size":"sm",onClick:()=>a.openPane(["network"],"network")},t(C,{name:"gear",size:13}),e("net.openSettings"))},t(te,{t:e,items:[l&&l.gateway?{key:"gateway",label:e("net.gateway"),value:l.gateway}:null,l&&l.interface?{key:"interface",label:e("net.interface"),value:l.interface}:null].filter(Boolean),emptyText:e("net.none")})),t(B,{title:e("net.proxy"),icon:"env"},t(te,{t:e,items:M.map(b=>({key:b.key,label:b.label,value:d[b.key]===null||d[b.key]===void 0||d[b.key]===""?e("net.none"):String(d[b.key])}))}))),t(B,{title:e("net.interfaces"),icon:"network",flush:!0,subtitle:String(o.length)},t(J,{t:e,ariaLabel:e("net.interfaces"),columns:[{key:"name",label:e("net.interface"),render:b=>t("span",{style:{display:"inline-flex",alignItems:"center",gap:"7px"}},t("span",{className:"dx-mono"},i(b.name,"\u2014")),b.primary===!0?t(O,{tone:"brand"},e("net.primary")):null)},{key:"type",label:e("common.type"),render:b=>{let K=sr[i(b.type,"other")];return t(O,{tone:"idle"},K?e(K):i(b.type,"\u2014"))}},{key:"up",label:e("common.status"),render:b=>b.up===!0?t(O,{tone:"ok"},e("net.up")):b.up===!1?t(O,{tone:"idle"},e("net.down")):t(O,{tone:"idle"},e("common.unknown"))},{key:"ipv4",label:e("net.ipv4"),render:b=>m(b.ipv4).length>0?m(b.ipv4).join(", "):e("net.ipNone")},{key:"ipv6",label:e("net.ipv6"),render:b=>m(b.ipv6).length>0?m(b.ipv6).join(", "):e("net.ipNone")},{key:"mac",label:e("net.mac"),render:b=>t("span",{className:"dx-mono"},i(b.mac,"\u2014"))},{key:"mtu",label:e("net.mtu"),render:b=>b.mtu===null||b.mtu===void 0?"\u2014":String(b.mtu)}],rows:o,empty:t(L,{title:e("net.noInterfaces")})})),t(B,{title:e("net.ports"),icon:"signal",subtitle:e("net.established")+": "+(n.establishedCount===null||n.establishedCount===void 0?"\u2014":e("net.establishedCount",{n:n.establishedCount})),flush:!0},t(J,{t:e,ariaLabel:e("net.ports"),columns:[{key:"proto",label:e("net.proto"),render:b=>t("span",{className:"dx-mono"},i(b.proto,"\u2014").toUpperCase())},{key:"address",label:e("common.address"),render:b=>t("span",{className:"dx-mono"},i(b.address,"\u2014"))},{key:"port",label:e("common.port"),render:b=>t("span",{className:"dx-mono"},b.port===null||b.port===void 0?"\u2014":String(b.port))},{key:"pid",label:e("common.pid"),render:b=>b.pid===null||b.pid===void 0?"\u2014":String(b.pid)},{key:"process",label:e("common.process"),render:b=>i(b.process,"\u2014")}],rows:f,empty:t(L,{title:e("net.noPorts")})})))})}function yt(a,e){return t("div",{className:"dx-orbit","data-layer":String(a),key:"orbit-"+a},t("div",{className:"dx-ring","data-ring":String(e)}))}function ha(a){let e=$(null),[r,n]=U(!0),[o,s]=U(!0);ee(()=>{let d=e.current;if(!d||typeof IntersectionObserver!="function")return;let f=new IntersectionObserver(g=>{for(let u of g)n(u.isIntersecting===!0)},{threshold:0});return f.observe(d),()=>f.disconnect()},[]),ee(()=>{if(typeof document>"u")return;let d=()=>s(document.hidden!==!0);return d(),document.addEventListener("visibilitychange",d),()=>document.removeEventListener("visibilitychange",d)},[]);let l=a.active!==!1;return t("div",{className:"dx-scene","data-motion":l&&r&&o?"on":"off",ref:e},t("div",{className:"dx-sceneArt","aria-hidden":"true"},t("div",{className:"dx-sceneGlow"}),t("div",{className:"dx-sceneGrid"}),yt(1,1),yt(2,2),yt(3,3),t("div",{className:"dx-chipScene"},t("div",{className:"dx-chipBody"},t("div",{className:"dx-chipPins"},Array.from({length:12}).map((d,f)=>t("span",{key:f}))),t("div",{className:"dx-chipGlow"}),t("div",{className:"dx-chipCore"}))),[1,2,3,4].map(d=>t("span",{key:"particle-"+d,className:"dx-particle","data-p":String(d)})),t("span",{className:"dx-sceneCaption"},"DEVICE X")),t("button",{type:"button",className:"dx-sceneToggle","aria-pressed":l,"aria-label":a.toggleAriaLabel||"3D motion",title:a.toggleLabel,onClick:a.onToggle},t(C,{name:"spark",size:12}),t("span",{"aria-hidden":"true"},"3D")))}function Be(a){let e=F(a.size,62),r=F(a.stroke,7),n=R(a.value)?me(a.value,0,100):null,o=(e-r)/2,s=2*Math.PI*o,l=n===null?0:n/100*s;return t("div",{className:"dx-donutWrap",style:{width:e,height:e},role:"img","aria-label":i(a.label,Q(n))},t("svg",{width:e,height:e,viewBox:"0 0 "+e+" "+e,"aria-hidden":"true"},t("circle",{cx:e/2,cy:e/2,r:o,fill:"none",stroke:"var(--dsw-alias-border-l1)",strokeWidth:r}),t("circle",{cx:e/2,cy:e/2,r:o,fill:"none",stroke:i(a.color,"var(--dsw-alias-brand-primary)"),strokeWidth:r,strokeLinecap:"round",strokeDasharray:l.toFixed(2)+" "+s.toFixed(2),transform:"rotate(-90 "+e/2+" "+e/2+")",style:{transition:"stroke-dasharray .55s ease"}})),a.centerText===void 0||a.centerText===null?null:t("div",{className:"dx-donutCenter"},a.centerText))}function De(a){return t("div",{className:"dx-kpi"},t("div",{className:"dx-kpiTop"},a.donut,t("div",{className:"dx-kpiMeta"},t("div",{className:"dx-kpiLabel"},a.label),t("div",{className:"dx-kpiValue"},a.value),a.sub?t("div",{className:"dx-kpiSub",title:a.subTitle||void 0},a.sub):null)),t("div",{className:"dx-kpiSpark"},a.spark))}function Oe(a){let e=F(a.height,26),r=m(a.series).filter(l=>E(l)&&m(l.values).length>=2);if(r.length===0)return t("div",{className:"dx-spark dx-sparkEmpty","aria-hidden":"true"});let n=F(a.domainMax,0);if(!(n>0))for(let l of r)for(let c of l.values)R(c)&&c>n&&(n=c);n>0||(n=1);let o=Math.max(4,e-4),s=[];return r.forEach((l,c)=>{let d=m(l.values).filter(R);if(d.length<2)return;let f=100/(d.length-1),g=d.map((v,h)=>{let y=h*f,P=e-2-me(v,0,n)/n*o;return y.toFixed(2)+","+P.toFixed(2)}),u=i(l.color,"var(--dsw-alias-brand-primary)");c===0&&s.push(t("path",{key:"area-"+c,d:"M0,"+e+" L"+g.join(" L")+" L100,"+e+" Z",fill:u,opacity:.1,stroke:"none"})),s.push(t("polyline",{key:"line-"+c,points:g.join(" "),fill:"none",stroke:u,strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke"}))}),s.length===0?t("div",{className:"dx-spark dx-sparkEmpty","aria-hidden":"true"}):(s.push(t("line",{key:"baseline",className:"dx-sparkBase",x1:0,y1:e-1,x2:100,y2:e-1,strokeWidth:1,vectorEffect:"non-scaling-stroke"})),t("svg",{className:"dx-spark",viewBox:"0 0 100 "+e,preserveAspectRatio:"none","aria-hidden":"true",focusable:"false"},s))}var or=[{key:"app",labelKey:"overview.breakdown.app",color:"var(--dsw-alias-brand-primary)"},{key:"wired",labelKey:"overview.breakdown.wired",color:"var(--dsw-alias-state-warn-primary)"},{key:"compressed",labelKey:"overview.breakdown.compressed",color:"var(--dsw-alias-state-error-primary)"},{key:"cached",labelKey:"overview.breakdown.cached",color:"var(--dsw-alias-state-idle-primary)"},{key:"free",labelKey:"overview.breakdown.free",color:"var(--dsw-alias-border-l2)"}];function ir(a,e){let r=[];if(!e)return r;let n=e.memory,o=ue(n.usedBytes,n.totalBytes);o!==null&&o>85&&r.push({key:"memory-high",icon:"memory",tone:o>=94?"error":"warn",text:a("overview.alert.memoryHigh",{percent:Q(o)})}),n.pressure!=="normal"&&r.push({key:"memory-pressure",icon:"memory",tone:n.pressure==="critical"?"error":"warn",text:a("overview.alert.memoryPressure",{level:a(ot(n.pressure))})}),R(n.swapUsedBytes)&&n.swapUsedBytes>1024*1024*1024&&r.push({key:"swap",icon:"disk",tone:"warn",text:a("overview.alert.swap",{value:j(n.swapUsedBytes)})});let s=e.cpu.usagePercent;s!==null&&s>90&&r.push({key:"cpu-high",icon:"cpu",tone:"warn",text:a("overview.alert.cpuHigh",{percent:Q(s)})});let l=ue(e.disk.usedBytes,e.disk.totalBytes);l!==null&&l>90&&r.push({key:"disk-high",icon:"disk",tone:l>=97?"error":"warn",text:a("overview.alert.diskHigh",{percent:Q(l)})});let c=e.battery;c&&c.present&&c.percent!==null&&c.percent<=20&&!c.charging&&r.push({key:"battery-low",icon:"battery",tone:"error",text:a("overview.alert.batteryLow",{percent:Q(c.percent)})});let d=x(e.thermal),f=[d.cpuCelsius,d.gpuCelsius].filter(u=>R(u)),g=f.length>0?Math.max(...f):null;return g!==null&&g>=90&&r.push({key:"thermal",icon:"warning",tone:"error",text:a("overview.alert.thermal",{temp:Math.round(g)})}),r}function wa(a){let e=a.t,r=a.metrics,n=x(a.samples),o=w=>m(n[w]);if(!r)return t(xe,{cards:5});let s=r.memory,l=r.disk,c=r.cpu,d=r.network,f=r.battery,g=ue(s.usedBytes,s.totalBytes),u=ue(l.usedBytes,l.totalBytes),v=ir(e,r),h=d.wifi?Fe(d.wifi.rssi):0,y=d.wifi&&d.wifi.rssi!==null?me((d.wifi.rssi+100)/70*100,0,100):null,P=f&&f.percent!==null?f.percent<=20?"var(--dsw-alias-state-error-primary)":f.charging?"var(--dsw-alias-state-success-primary)":"var(--dsw-alias-brand-primary)":"var(--dsw-alias-state-idle-primary)",M=!f||f.present===!1?e("overview.kpi.noBattery"):f.charging?e("overview.kpi.charging"):f.plugged?e("overview.kpi.plugged"):f.timeRemainingMin!==null?e("overview.kpi.remaining",{value:he(f.timeRemainingMin*60,e)}):e("overview.kpi.onBattery"),b=[t("span",{className:"dx-chip",key:"cores"},t(C,{name:"cpu",size:13}),t("strong",null,String(F(c.logicalCores,0))),e("hw.cores")),t("span",{className:"dx-chip",key:"uptime"},t(C,{name:"clock",size:13}),e("sys.uptime"),t("strong",null,he(r.uptimeSec,e))),t("span",{className:"dx-chip","data-tone":s.pressure==="normal"?"ok":s.pressure==="warning"?"warn":"error",key:"pressure"},t(C,{name:"memory",size:13}),e("overview.kpi.pressure"),t("strong",null,e(ot(s.pressure))))],K=x(r.thermal),_=[K.cpuCelsius,K.batteryCelsius,K.gpuCelsius].find(w=>R(w));R(_)&&b.push(t("span",{className:"dx-chip",key:"temperature"},t(C,{name:"spark",size:13}),e("overview.kpi.temp"),t("strong",null,X(_,1)," \xB0C"))),d.wifi?b.push(t("span",{className:"dx-chip",key:"wifi"},t(C,{name:"wifi",size:13}),t("strong",null,d.wifi.ssid||e("common.wifi")),t(Ke,{level:h,label:e("net.signalLevel",{level:h})}))):d.defaultInterface&&b.push(t("span",{className:"dx-chip",key:"iface"},t(C,{name:"network",size:13}),d.defaultInterface,t("strong",null,m(d.primaryIpv4)[0]||"")));let G=or.map(w=>{let H=F(s[w.key+"Bytes"],null);return{key:w.key,label:e(w.labelKey),color:w.color,bytes:H,percent:ue(H,s.totalBytes)}}),k=G.filter(w=>w.percent!==null),T=k.reduce((w,H)=>w+H.percent,0),A=m(r.processes.top).slice(0,8);return t("div",{className:"dx-section"},t("section",{className:"dx-heroCard"},t(ha,{active:a.threeD!==!1,toggleLabel:a.threeD===!1?e("header.motionOn"):e("header.motionOff"),toggleAriaLabel:e("aria.motion"),onToggle:a.onToggleThreeD}),t("div",{className:"dx-heroInfo"},t("h1",{className:"dx-heroTitle",title:r.hostname},r.hostname||e("panel")),t("p",{className:"dx-heroSub"},r.osVersion||c.model||e("loading.title")),t("div",{className:"dx-heroChips"},b))),t(B,{title:e("overview.alerts"),icon:"warning"},v.length===0?t("div",{className:"dx-alertList"},t("div",{className:"dx-alert","data-tone":"idle"},t("span",{className:"dx-alertIcon"},t(C,{name:"check",size:15})),t("span",{className:"dx-alertText"},e("overview.alerts.none")))):t("div",{className:"dx-alertList",role:"list","aria-label":e("aria.alert")},v.map(w=>t("div",{className:"dx-alert","data-tone":w.tone,role:"listitem",key:w.key},t("span",{className:"dx-alertIcon"},t(C,{name:w.icon,size:15})),t("span",{className:"dx-alertText"},w.text))))),t("div",{className:"dx-kpiGrid"},t(De,{label:e("overview.kpi.cpu"),value:Q(c.usagePercent),sub:e("overview.kpi.cores",{n:F(c.logicalCores,0)})+" \xB7 "+e("overview.kpi.load")+" "+X(m(c.loadAvg)[0],1),donut:t(Be,{value:c.usagePercent,color:fe(c.usagePercent),label:e("overview.sparkline.cpu")}),spark:t(Oe,{series:[{values:o("cpu"),color:"var(--dsw-alias-brand-primary)"}],domainMax:100,label:e("overview.sparkline.cpu")})}),t(De,{label:e("overview.kpi.memory"),value:Q(g),sub:e("overview.kpi.used",{value:j(s.usedBytes)})+" / "+j(s.totalBytes)+(R(s.swapUsedBytes)&&s.swapUsedBytes>0?" \xB7 "+e("overview.kpi.swap",{value:j(s.swapUsedBytes)}):""),donut:t(Be,{value:g,color:s.pressure==="normal"?fe(g):Lt(s.pressure),label:e("overview.kpi.memory")}),spark:t(Oe,{series:[{values:o("memory"),color:"var(--dsw-alias-state-warn-primary)"}],domainMax:100,label:e("overview.sparkline.memory")})}),t(De,{label:e("overview.kpi.disk"),value:Q(u),sub:e("overview.kpi.free",{value:j(l.freeBytes)}),donut:t(Be,{value:u,color:fe(u),label:e("overview.kpi.disk")}),spark:t(Oe,{series:[{values:o("disk"),color:"var(--dsw-alias-state-idle-primary)"}],domainMax:100,label:e("overview.kpi.disk")})}),t(De,{label:e("overview.kpi.battery"),value:f&&f.present?Q(f.percent):e("common.na"),sub:M,donut:t(Be,{value:f&&f.present?f.percent:null,color:P,label:e("overview.kpi.battery")}),spark:t(Oe,{series:[{values:o("battery"),color:"var(--dsw-alias-state-success-primary)"}],domainMax:100,label:e("overview.kpi.battery")})}),t(De,{label:e("overview.kpi.network"),value:d.wifi?d.wifi.ssid||e("common.wifi"):d.defaultInterface||e("common.na"),sub:e("overview.kpi.rx",{value:nt(d.rxBytesPerSec)})+" \xB7 "+e("overview.kpi.tx",{value:nt(d.txBytesPerSec)}),donut:t(Be,{value:y,color:d.wifi?"var(--dsw-alias-state-success-primary)":"var(--dsw-alias-state-idle-primary)",label:e("aria.wifiBars"),centerText:d.wifi?t(Ke,{level:h,label:e("net.signalLevel",{level:h})}):t(C,{name:"network",size:17})}),spark:t(Oe,{series:[{values:o("rx"),color:"var(--dsw-alias-state-success-primary)"},{values:o("tx"),color:"var(--dsw-alias-brand-primary)"}],label:e("overview.sparkline.network")})})),t("div",{className:"dx-grid2"},t(B,{title:e("overview.top"),icon:"processes",actions:a.onShowProcesses?t("button",{type:"button",className:"dx-linkBtn",onClick:a.onShowProcesses},e("tab.processes"),t(C,{name:"chevron",size:12})):null},A.length===0?t(L,{title:e("overview.top.empty")}):t("div",{className:"dx-list"},A.map((w,H)=>t("div",{className:"dx-listRow",key:w.pid+"-"+H},t("span",{className:"dx-listRank"},String(H+1)),t("div",{className:"dx-grow"},t("div",{className:"dx-listPrimary"},w.name),t("div",{className:"dx-listSecondary"},(w.user||e("common.unknown"))+" \xB7 PID "+w.pid)),t("div",{className:"dx-listRight"},t("span",{title:e("common.cpu")},Q(w.cpu,1)),t("span",{title:e("common.memory")},Q(w.memPercent,1))))))),t(B,{title:e("overview.memoryBreakdown"),icon:"memory",subtitle:j(s.totalBytes)},t("div",null,t("div",{className:"dx-stackBar",role:"img","aria-label":e("overview.memoryBreakdown")},k.map(w=>t("span",{key:w.key,className:"dx-stackSeg",style:{width:(T>0?w.percent:0)+"%",background:w.color}}))),t("div",{className:"dx-legend"},G.map(w=>t("div",{className:"dx-legendRow",key:w.key},t("span",{className:"dx-legendDot",style:{background:w.color}}),t("span",{className:"dx-legendLabel"},w.label),t("span",{className:"dx-legendValue"},w.bytes===null?"\u2014":j(w.bytes)))))))))}function ka(a){let e=a.t,r=x(a.pending),[n,o]=U(""),[s,l]=U("desc");return t(se,{t:e,state:a.state,skeletonCards:2,onRetry:a.onRetry,errorsKey:"proc.errors"},c=>{let d=m(c.list).filter(E),f=String(n).trim().toLowerCase(),g=d.filter(u=>{if(f.length===0)return!0;let v=i(u.command,"").toLowerCase(),h=i(u.user,"").toLowerCase();return v.indexOf(f)>=0||h.indexOf(f)>=0||String(u.pid).indexOf(f)>=0}).sort((u,v)=>{let h=F(u.cpu,-1),y=F(v.cpu,-1);return s==="desc"?y-h:h-y});return t("div",{className:"dx-section"},t(B,{title:e("tab.processes"),icon:"processes",subtitle:e("proc.total",{n:F(c.total,d.length)}),flush:!0,actions:t("div",{style:{display:"flex",gap:"8px",alignItems:"center"}},t("button",{type:"button",className:"dx-btn","data-size":"sm",onClick:()=>l(s==="desc"?"asc":"desc"),title:e("proc.sortByCpu")+" \xB7 "+e(s==="desc"?"proc.sortDesc":"proc.sortAsc"),"aria-label":e("proc.sortByCpu")},t(C,{name:s==="desc"?"arrowDown":"arrowUp",size:13}),e(s==="desc"?"proc.sortDesc":"proc.sortAsc")),t("button",{type:"button",className:"dx-btn","data-size":"sm",disabled:a.state?.status==="loading",onClick:a.onRefresh,title:e("proc.refresh"),"aria-label":e("proc.refresh")},t(C,{name:"refresh",size:13}),e("common.refresh")))},t(Y,null,t("div",{className:"dx-toolbar",style:{padding:"12px 16px"}},t("div",{className:"dx-toolbarLeft"},t(Ae,{value:String(n),onChange:o,placeholder:e("proc.search"),label:e("common.search")})),t("div",{className:"dx-toolbarRight"},t("span",{className:"dx-small dx-muted"},String(g.length)+" / "+String(d.length)))),t(J,{t:e,scroll:"fill",ariaLabel:e("tab.processes"),columns:[{key:"pid",label:e("common.pid"),render:u=>t("span",{className:"dx-mono"},String(u.pid))},{key:"command",label:e("common.process"),render:u=>t("span",{title:i(u.command,""),style:{display:"inline-block",maxWidth:"360px",overflow:"hidden",textOverflow:"ellipsis",verticalAlign:"bottom"}},i(u.command,"\u2014"))},{key:"user",label:e("common.user"),render:u=>i(u.user,"\u2014")},{key:"cpu",label:e("common.cpu"),align:"right",render:u=>Q(u.cpu,1)},{key:"memPercent",label:e("common.memory"),align:"right",render:u=>Q(u.memPercent,1)},{key:"rssBytes",label:e("proc.rss"),align:"right",render:u=>j(u.rssBytes)},{key:"state",label:e("common.state"),render:u=>i(u.state,"\u2014")},{key:"elapsed",label:e("proc.elapsed"),render:u=>u.elapsed===null||u.elapsed===void 0?"\u2014":String(u.elapsed)},{key:"actions",label:e("common.actions"),align:"right",render:u=>t("button",{type:"button",className:"dx-btn","data-size":"sm","data-variant":"danger",disabled:r["process.signal"]===!0||u.pid===1,title:e("proc.kill"),"aria-label":e("proc.kill")+" PID "+u.pid,onClick:()=>a.openKill({pid:u.pid,name:i(u.command,"PID "+u.pid),signal:"TERM"})},t(C,{name:"power",size:13}),e("proc.kill"))}],rows:g,empty:t(L,{icon:"processes",title:e("proc.empty")})}))))})}function lr(a,e){let r=Ve(x(e).enabled);return r===!0?t(O,{tone:"ok"},a("sec.on")):r===!1?t(O,{tone:"warn"},a("sec.off")):t(O,{tone:"idle"},a("sec.unknown"))}function je(a){let e=a.t,r=x(a.info),n=i(r.raw,"");return t(B,{title:a.title,icon:a.icon,actions:lr(e,r)},a.extra||null,n?t("p",{className:"dx-small dx-muted",style:{marginTop:a.extra?"10px":"0"},title:n},n):null)}function Na(a){let e=a.t,r=x(a.pending),n=a.platform==="win32";return t(se,{t:e,state:a.state,skeletonCards:4,onRetry:a.onRetry,errorsKey:"sec.errors"},o=>{let s=x(o.fileVault),l=x(o.sip),c=x(o.gatekeeper),d=x(o.firewall),f=x(o.tcc),g=x(o.users),u=m(f.grants).filter(E),v=Ve(d.enabled),h=e(v===!0?"sec.toggleFirewallOff":"sec.toggleFirewallOn");return t("div",{className:"dx-section"},t("div",{className:"dx-grid3"},t(je,{t:e,title:e(n?"sec.bitlocker":"sec.fileVault"),icon:"lock",info:s}),t(je,{t:e,title:e(n?"sec.secureBoot":"sec.sip"),icon:"security",info:l}),t(je,{t:e,title:e(n?"sec.defender":"sec.gatekeeper"),icon:"firewall",info:c}),t(je,{t:e,title:e("sec.firewall"),icon:"firewall",info:d,extra:t(Y,null,d.stealthMode===!0||d.stealthMode===!1?t("div",{className:"dx-small dx-muted"},e("sec.stealth")+": "+(d.stealthMode?e("common.on"):e("common.off"))):null,t("button",{type:"button",className:"dx-btn","data-size":"sm",style:{marginTop:"9px"},disabled:r["system.toggleFirewall"]===!0,onClick:()=>a.openConfirm({title:e(v===!0?"sec.confirmFirewallOff":"sec.confirmFirewallOn"),description:e(v===!0?"sec.confirmFirewallOffBody":"sec.confirmFirewallOnBody"),confirmLabel:h,danger:v===!0,actionId:"system.toggleFirewall",params:{enabled:v!==!0}})},h))})),t(B,{title:e("sec.tcc"),icon:"users",span:2,flush:f.readable===!0,actions:t("button",{type:"button",className:"dx-btn","data-size":"sm",onClick:()=>a.openPane(["privacy","security"],"privacy")},t(C,{name:"gear",size:13}),e(n?"sec.openPrivacyWin":"sec.openFileVault"))},f.readable===!0?t(J,{t:e,ariaLabel:e("sec.tcc"),columns:[{key:"service",label:e("sec.service"),render:y=>i(y.service,"\u2014")},{key:"client",label:e("sec.client"),render:y=>i(y.client,"\u2014")}],rows:u,empty:t(L,{icon:"security",title:e("sec.noGrants")})}):t("div",{className:"dx-empty"},t("span",{className:"dx-emptyIcon"},t(C,{name:"lock",size:22})),t("p",{className:"dx-emptyTitle"},e(n?"sec.tccUnreadableWin":"sec.tccUnreadable")),f.reason?t("p",{className:"dx-emptyText"},e("sec.tccReason",{reason:f.reason})):null)),t("div",{className:"dx-grid2"},t(B,{title:e("sec.admins"),icon:"users",actions:t("button",{type:"button",className:"dx-btn","data-size":"sm",onClick:()=>a.openPane(["users","accounts"],"users")},t(C,{name:"gear",size:13}),e("sec.openUsers"))},t("div",{className:"dx-tagList"},m(g.admins).filter(y=>typeof y=="string").length>0?m(g.admins).filter(y=>typeof y=="string").map(y=>t(O,{key:y,tone:y===i(g.current,"")?"brand":"idle"},y)):t("span",{className:"dx-small dx-muted"},e("sec.noAdmins"))),t("p",{className:"dx-small dx-muted",style:{marginTop:"10px"}},e("sec.adminsCount",{n:m(g.admins).length})+" \xB7 "+e("sec.usersCount",{n:F(g.total,0)}))),t(B,{title:e("sec.remoteLogin"),icon:"network"},t(te,{t:e,items:[{key:"remoteLogin",label:e("sec.remoteLogin"),value:o.remoteLogin===!0?e("sec.remoteLoginOn"):o.remoteLogin===!1?e("sec.remoteLoginOff"):e("sec.unknown")},{key:"autoLogin",label:e("sec.autoLogin"),value:typeof o.autoLogin=="string"?e("sec.autoLoginUser",{user:o.autoLogin}):e("sec.autoLoginOff")}]}))),t(B,{title:e("sec.paneTitle"),icon:"gear"},t("div",{className:"dx-toolbar"},t("button",{type:"button",className:"dx-btn",onClick:()=>a.openPane(["privacy","security","filevault"],"privacy")},t(C,{name:"lock",size:13}),e(n?"sec.openPrivacyWin":"sec.openFileVault")),t("button",{type:"button",className:"dx-btn",onClick:n?()=>a.openPane(["windowsdefender","windowssecurity"],"windowsdefender"):()=>a.openPane(["firewall"],"firewall")},t(C,{name:"firewall",size:13}),e(n?"sec.openSecurityWin":"sec.openFirewall")),n?null:t("button",{type:"button",className:"dx-btn",onClick:()=>a.openPane(["sharing"],"sharing")},t(C,{name:"network",size:13}),e("sec.openSharing")),t("button",{type:"button",className:"dx-btn",onClick:()=>a.openPane(["users","accounts"],"users")},t(C,{name:"users",size:13}),e("sec.openUsers")),t("button",{type:"button",className:"dx-btn",disabled:r["system.flushDNS"]===!0,onClick:()=>a.openConfirm({title:e("sec.confirmFlushDns"),description:e("sec.confirmFlushDnsBody"),confirmLabel:e("sec.flushDns"),danger:!1,actionId:"system.flushDNS",params:{}})},t(C,{name:"refresh",size:13}),e("sec.flushDns")),t("button",{type:"button",className:"dx-btn","data-variant":"danger",disabled:r["system.emptyTrash"]===!0,onClick:()=>a.openConfirm({title:e("sec.confirmEmptyTrash"),description:e("sec.confirmEmptyTrashBody"),confirmLabel:e("sec.emptyTrash"),danger:!0,actionId:"system.emptyTrash",params:{}})},t(C,{name:"trash",size:13}),e("sec.emptyTrash")))))})}function Sa(a){return t("span",{className:"dx-tip","data-tip":a.label,tabIndex:0,role:"note","aria-label":a.label},a.children)}var dr={system:"sw.source.system",user:"sw.source.user",other:"sw.source.other"};function Ta(a){let e=a.t,r=x(a.pending),[n,o]=U(""),[s,l]=U("all"),[c,d]=U("asc"),[f,g]=U("apps"),u=[{value:"apps",label:e("sw.applications")},{value:"packages",label:a.platform==="win32"?e("sw.winget"):e("sw.homebrew")}],v=[{value:"all",label:e("common.all")},{value:"system",label:e("sw.source.system")},{value:"user",label:e("sw.source.user")},{value:"other",label:e("sw.source.other")}];return t(se,{t:e,state:a.state,skeletonCards:3,onRetry:a.onRetry,errorsKey:"sw.errors"},h=>{let y=x(h.homebrew),P=x(h.winget),M=a.platform==="win32",b=t(He,{label:e("sw.view"),options:u,value:f,onChange:g}),K=m(h.applications).filter(E),_=String(n).trim().toLowerCase(),G=K.filter(A=>{let w=i(A.name,"").toLowerCase(),H=i(A.bundleId,"").toLowerCase(),q=_.length===0||w.indexOf(_)>=0||H.indexOf(_)>=0,ce=i(A.source,"other");return q&&(s==="all"||ce===s)}).sort((A,w)=>{let H=i(A.name,"").toLowerCase(),q=i(w.name,"").toLowerCase();return c==="asc"?H.localeCompare(q):q.localeCompare(H)}),k=m(y.installed).filter(E),T=m(y.outdated);return t("div",{className:"dx-section"},f==="apps"?t(B,{title:e("sw.applications"),icon:"software",subtitle:e("sw.appCount",{n:F(h.totalApplications,K.length)}),actions:b,flush:!0},t(Y,null,t("div",{className:"dx-toolbar",style:{padding:"12px 16px"}},t("div",{className:"dx-toolbarLeft"},t(Ae,{value:String(n),onChange:o,placeholder:e("sw.search"),label:e("common.search")})),t("div",{className:"dx-toolbarRight"},t(He,{label:e("sw.sourceFilter"),options:v,value:String(s),onChange:l}),t("span",{className:"dx-small dx-muted"},k.length>0?String(k.length)+" / "+String(K.length):String(K.length)),t("button",{type:"button",className:"dx-btn","data-size":"sm",onClick:()=>d(c==="asc"?"desc":"asc"),title:e(c==="asc"?"sw.sortAsc":"sw.sortDesc"),"aria-label":e("sw.sortName")},t(C,{name:c==="asc"?"arrowUp":"arrowDown",size:13}),e(c==="asc"?"sw.sortAsc":"sw.sortDesc")))),t(J,{t:e,scroll:"fill",ariaLabel:e("sw.applications"),columns:[{key:"name",label:e("common.name"),render:A=>t("div",{style:{minWidth:0}},t("div",{style:{fontWeight:500,overflow:"hidden",textOverflow:"ellipsis"}},i(A.name,"\u2014")),A.bundleId?t("div",{className:"dx-small dx-muted"},A.bundleId):null)},{key:"version",label:e("common.version"),render:A=>i(A.version,"\u2014")},{key:"source",label:e("common.source"),render:A=>{let w=i(A.source,"other"),H=dr[w];return t(O,{tone:w==="user"?"brand":"idle"},H?e(H):w)}},{key:"arch",label:e("sw.arch"),render:A=>i(A.arch,"\u2014")},{key:"size",label:e("sw.size"),render:A=>j(A.sizeBytes)},{key:"lastUsed",label:e("sw.lastUsed"),render:A=>R(A.lastUsed)&&A.lastUsed>0?Pe(A.lastUsed):e("common.never")},{key:"actions",label:e("common.actions"),align:"right",render:A=>{let w=i(A.path,""),H=i(A.uninstallId,""),q=i(A.source,"")==="system"||w.indexOf("/System/")===0,ce=M&&H.length>0||w.length>0&&!q;return t("div",{className:"dx-rowActions"},t("button",{type:"button",className:"dx-btn","data-size":"sm",disabled:!w||r["app.reveal"]===!0,title:e(M?"sw.revealWin":"sw.reveal"),"aria-label":e(M?"sw.revealWin":"sw.reveal")+" "+i(A.name,""),onClick:()=>a.onAction("app.reveal",{path:w})},t(C,{name:"reveal",size:13})),t("button",{type:"button",className:"dx-btn","data-size":"sm","data-variant":"danger",disabled:!ce||r["app.uninstall"]===!0,title:e(q?"sw.systemAppNote":"sw.uninstall"),"aria-label":e("sw.uninstall")+" "+i(A.name,""),onClick:()=>{if(a.openUninstall){a.openUninstall({path:w,name:i(A.name,"\u2014"),uninstallId:H});return}a.openConfirm({title:e("sw.uninstallTitle",{name:i(A.name,"\u2014")}),description:H.length>0?e("sw.uninstallBodyWin"):e("sw.uninstallBody"),confirmLabel:e("sw.uninstall"),danger:!0,actionId:"app.uninstall",params:{path:w,id:H,mode:"trash"}})}},t(C,{name:"trash",size:13})))}}],rows:G,empty:t(L,{icon:"software",title:e("sw.noApps"),text:K.length===0?e("sw.loadingApps"):void 0})}))):t(B,{title:e(M?"sw.winget":"sw.homebrew"),icon:"database",actions:b,badge:!M&&T.length>0?t(Sa,{label:e("sw.brewOutdated")+": "+T.slice(0,12).map(A=>typeof A=="string"?A:i(x(A).name,"")).filter(Boolean).join(", ")+(T.length>12?" \u2026":"")},t(O,{tone:"warn"},e("sw.brewOutdated")+" "+String(T.length))):null,subtitle:M?P.available===!0?e("sw.wingetAvailable")+(i(P.version,"")?" \xB7 "+i(P.version,""):""):e("sw.wingetUnavailable"):y.available===!0?i(y.prefix,""):e("sw.brewNotAvailable"),flush:!0},M?t(L,{icon:"database",title:P.available===!0?e("sw.wingetHint"):e("sw.wingetUnavailable")}):y.available!==!0?t(L,{icon:"database",title:e("sw.brewNotAvailable")}):t(J,{t:e,scroll:"fill",ariaLabel:e("sw.homebrew"),columns:[{key:"name",label:e("common.name"),render:A=>t("span",{className:"dx-mono"},i(A.name,"\u2014"))},{key:"version",label:e("common.version"),render:A=>t("span",{className:"dx-mono"},i(A.version,"\u2014"))},{key:"actions",label:e("common.actions"),align:"right",render:A=>t("button",{type:"button",className:"dx-btn","data-size":"sm","data-variant":"danger",disabled:r["software.brewUninstall"]===!0,onClick:()=>a.openConfirm({title:e("sw.brewConfirmTitle",{name:i(A.name,"\u2014")}),description:e("sw.brewConfirmBody",{name:i(A.name,"\u2014")}),confirmLabel:e("sw.brewUninstall"),danger:!0,actionId:"software.brewUninstall",params:{name:i(A.name,"")}})},e("sw.brewUninstall"))}],rows:k,empty:t(L,{icon:"database",title:e("sw.noBrew")})})))})}var cr=["PATH","SHELL","HOME","USER","LANG","TERM"],mr={user:"sys.userScope",system:"sys.systemScope"};function Ca(a){let e=a.t,r=a.platform==="win32",o=x(a.pending)["system.launchAgent"]===!0;return t(se,{t:e,state:a.state,skeletonCards:4,onRetry:a.onRetry,errorsKey:"sys.errors"},s=>{let l=x(s.os),c=x(s.device),d=x(s.boot),f=x(s.user),g=m(s.users).filter(E),u=m(s.launchAgents).filter(E),v=m(s.loginItems).filter(E),h=x(s.environment),y=x(s.locale),P=[l.name||l.version?{key:"name",label:e("sys.name"),value:i(l.name,"\u2014")+(l.version?" "+l.version:"")}:null,l.build?{key:"build",label:e("sys.build"),value:l.build}:null,l.kernel?{key:"kernel",label:e("sys.kernel"),value:l.kernel}:null,l.arch?{key:"arch",label:e("sys.arch"),value:l.arch}:null].filter(Boolean),M=[c.hostname?{key:"hostname",label:e("sys.hostname"),value:c.hostname}:null,c.computerName?{key:"computerName",label:e("sys.computerName"),value:c.computerName}:null,c.localHostname?{key:"localHostname",label:e("sys.localHostname"),value:c.localHostname}:null,c.model?{key:"model",label:e("sys.model"),value:c.model}:null,c.modelId?{key:"modelId",label:e("sys.modelId"),value:c.modelId}:null,c.chip?{key:"chip",label:e("sys.chip"),value:c.chip}:null,c.serial?{key:"serial",label:e("sys.serial"),value:c.serial}:null,c.hardwareUuid?{key:"uuid",label:e("sys.hardwareUuid"),value:c.hardwareUuid}:null].filter(Boolean),b=[R(d.bootTime)?{key:"bootTime",label:e("sys.bootTime"),value:Pe(d.bootTime)}:null,d.uptimeSec!==null&&d.uptimeSec!==void 0?{key:"uptime",label:e("sys.uptime"),value:he(d.uptimeSec,e)}:null].filter(Boolean),K=[f.name?{key:"name",label:e("sys.currentUser"),value:f.name}:null,f.fullName?{key:"fullName",label:e("sys.fullName"),value:f.fullName}:null,f.shell?{key:"shell",label:e("sys.shell"),value:f.shell}:null,f.home?{key:"home",label:e("sys.home"),value:f.home}:null,f.uid!==null&&f.uid!==void 0?{key:"uid",label:e("sys.uid"),value:String(f.uid)}:null].filter(Boolean),_=[y.timezone?{key:"timezone",label:e("sys.timezone"),value:y.timezone}:null,y.language?{key:"language",label:e("sys.language"),value:y.language}:null,y.locale?{key:"locale",label:e("sys.localeValue"),value:y.locale}:null,R(f.uid)?{key:"uid",label:e("sys.uid"),value:String(f.uid)}:null].filter(Boolean),G=cr.filter(T=>typeof h[T]=="string"&&h[T].length>0).map(T=>({key:T,value:h[T]})),k=u.slice(0,200);return t("div",{className:"dx-section"},t("div",{className:"dx-grid2"},t(B,{title:e("sys.os"),icon:"system"},t(te,{t:e,items:P,emptyText:e("common.empty")})),t(B,{title:e("sys.device"),icon:"cpu"},t(te,{t:e,items:M,emptyText:e("common.empty")})),t(B,{title:e("sys.boot"),icon:"boot"},t(te,{t:e,items:b,emptyText:e("common.empty")})),t(B,{title:e("sys.locale"),icon:"locale"},t(te,{t:e,items:_,emptyText:e("common.empty")}))),t(B,{title:e("sys.users"),icon:"users",subtitle:f.admin===!0?e("sys.currentUser")+" \xB7 "+e("common.admin"):e("sys.currentUser")+" \xB7 "+i(f.name,"\u2014"),flush:!0},t(J,{t:e,ariaLabel:e("sys.users"),columns:[{key:"name",label:e("common.user"),render:T=>i(T.name,"\u2014")},{key:"fullName",label:e("sys.fullName"),render:T=>i(T.fullName,"\u2014")},{key:"uid",label:e("sys.uid"),render:T=>T.uid===null||T.uid===void 0?"\u2014":String(T.uid)},{key:"gid",label:e("sys.gid"),render:T=>T.gid===null||T.gid===void 0?"\u2014":String(T.gid)},{key:"admin",label:e("common.admin"),render:T=>T.admin===!0?t(O,{tone:"brand"},e("common.admin")):t("span",{className:"dx-muted"},"\u2014")},{key:"current",label:e("common.current"),render:T=>T.isCurrent===!0?t(O,{tone:"ok"},e("common.current")):t("span",{className:"dx-muted"},"\u2014")}],rows:g,empty:t(L,{title:e("common.empty")})})),t(B,{title:e(r?"sys.startupItems":"sys.launchAgents"),icon:"agent",subtitle:String(u.length),flush:!0,actions:o?t("span",{className:"dx-pill","data-tone":"brand"},e("common.pending")):null},t(J,{t:e,ariaLabel:e(r?"sys.startupItems":"sys.launchAgents"),columns:[{key:"label",label:e("common.name"),render:T=>i(T.label,"\u2014")},{key:"scope",label:e("sys.scope"),render:T=>{let A=mr[i(T.scope,"")];return t(O,{tone:T.scope==="system"?"warn":"idle"},A?e(A):i(T.scope,"\u2014"))}},{key:"loaded",label:e("sys.loaded"),render:T=>typeof T.path=="string"&&T.path.length>0?t("span",{style:{display:"inline-flex",alignItems:"center",gap:"8px"}},t(Qe,{checked:T.loaded===!0,disabled:o,label:i(T.label,e("sys.launchAgents")),onChange:()=>a.openConfirm?.({title:e(T.loaded===!0?"sys.agentConfirmDisable":"sys.agentConfirmEnable",{label:i(T.label,"\u2014")}),confirmLabel:e(T.loaded===!0?"sys.disableAgent":"sys.enableAgent"),danger:!1,actionId:"system.launchAgent",params:{path:T.path,enabled:T.loaded!==!0}})}),t("span",{className:"dx-muted dx-small"},T.loaded===!0?e("common.enabled"):e("common.disabled"))):t("span",{className:"dx-muted"},"\u2014")},{key:"pid",label:e("common.pid"),render:T=>T.pid===null||T.pid===void 0?"\u2014":String(T.pid)},{key:"exit",label:e("sys.lastExit"),render:T=>T.lastExitStatus===null||T.lastExitStatus===void 0?"\u2014":String(T.lastExitStatus)},{key:"program",label:e("sys.program"),render:T=>i(T.program,"\u2014")}],rows:k,empty:t(L,{title:e("sys.noAgents")})})),t("div",{className:"dx-grid2"},t(B,{title:e("sys.loginItems"),icon:"boot"},v.length===0?t(L,{title:e("sys.noLoginItems")}):t("div",{className:"dx-tagList"},v.slice(0,40).map((T,A)=>t(O,{key:A,tone:"idle"},i(T.name,"\u2014"))))),t(B,{title:e("sys.environment"),icon:"env",subtitle:e("sys.envNote"),flush:!0},t(J,{t:e,columns:[{key:"key",label:e("common.name"),render:T=>t("span",{className:"dx-mono"},T.key)},{key:"value",label:e("common.value"),cellClass:"dx-tdWrap",render:T=>t("span",{className:"dx-mono",title:T.value},T.value)}],rows:G,empty:t(L,{title:e("common.empty")})}))))})}function pr(a){let e=a.t,r=a.toast;return ee(()=>{let n=setTimeout(()=>a.onDismiss(r.id),r.tone==="fail"?6500:4200);return()=>clearTimeout(n)},[r.id,r.tone,a.onDismiss]),t("div",{className:"dx-toast","data-tone":r.tone},t("span",{className:"dx-toastIcon"},t(C,{name:r.tone==="ok"?"check":"warning",size:16})),t("div",{className:"dx-toastBody"},t("div",{className:"dx-toastTitle"},r.title),r.message?t("div",{className:"dx-toastMsg"},r.message):null),t("button",{type:"button",className:"dx-btn","data-size":"icon","aria-label":e("toast.dismiss"),onClick:()=>a.onDismiss(r.id)},t(C,{name:"close",size:13})))}function Pa(a){let e=m(a.toasts);return e.length===0?null:t("div",{className:"dx-toasts",role:"status","aria-live":"polite"},e.map(r=>t(pr,{key:r.id,t:a.t,toast:r,onDismiss:a.onDismiss})))}var ur={high:"fp.tier.high",medium:"fp.tier.medium",conflict:"fp.tier.conflict",shared:"fp.tier.shared"},fr={high:"ok",medium:"warn",conflict:"warn",shared:"idle"};function gr(a){let e={};for(let r of Array.isArray(a)?a:[])r.selectable&&r.defaultSelected&&(e[r.id]=!0);return e}function vt(a,e){let r=0,n=0,o=[];for(let s of Array.isArray(a)?a:[])e[s.id]===!0&&(o.push(s.id),r+=Number(s.bytes)||0,n+=Number(s.files)||0);return{bytes:r,files:n,ids:o}}function Ma(a){let e=a.t,r=x(a.footprint),n=m(r.items),[o,s]=U(()=>gr(n)),l=h=>{s(y=>{let P=Object.assign({},y);P[h]===!0?delete P[h]:P[h]=!0;let M=vt(n,P);return a.onSelectionChange&&a.onSelectionChange(M.ids,M.bytes),P})},c=vt(n,o),d=n.filter(h=>h.selectable&&o[h.id]!==!0),f=d.reduce((h,y)=>h+(Number(y.bytes)||0),0),g=n.filter(h=>h.selectable),u=g.length>0&&c.ids.length===g.length,v=()=>{let h={};if(!u)for(let P of g)h[P.id]=!0;s(h);let y=vt(n,h);a.onSelectionChange&&a.onSelectionChange(y.ids,y.bytes)};return t("div",{className:"dx-fp","data-busy":a.busy===!0?"true":void 0},t("div",{className:"dx-fpHead"},t("div",{className:"dx-fpFacts"},r.bundleId?t("span",{className:"dx-small dx-muted"},e("fp.bundleIdLabel"),": ",t("span",{className:"dx-mono"},r.bundleId)):null,t(O,{tone:"idle"},r.sandboxed?e("fp.sandboxed"):e("fp.notSandboxed")),t("span",{className:"dx-small dx-muted"},e("fp.total",{n:n.length,value:j(r.totalBytes)}))),t("div",{className:"dx-cleanActions"},g.length>0?t("button",{type:"button",className:"dx-linkBtn",onClick:v,disabled:a.busy===!0},e(u?"cleanup.selectNone":"cleanup.selectAll")):null)),t("p",{className:"dx-small dx-muted"},e("fp.intro")),n.length===0?t(L,{icon:"search",title:e("fp.noItems")}):t("div",{className:"dx-cleanupRows"},n.map(h=>{let y=ur[h.confidence],P=fr[h.confidence]||"idle",M=o[h.id]===!0,b=h.confidence==="shared"||h.requiresAdmin;return t("div",{className:"dx-cleanRow dx-fpRow",key:h.id,"data-tier":h.confidence},h.selectable&&!b?t("input",{type:"checkbox",className:"dx-cleanCheck",checked:M,disabled:a.busy===!0||h.exists===!1,"aria-label":h.displayPath,onChange:()=>l(h.id)}):t("span",{className:"dx-cleanCheck","aria-hidden":"true"}),t("div",{className:"dx-cleanMain"},t("div",{className:"dx-cleanTitle"},t("span",{className:"dx-truncate",title:h.displayPath},h.displayPath),y?t(O,{tone:P},e(y)):null,h.requiresAdmin?t(O,{tone:"warn",title:e("fp.adminHint")},e("cleanup.admin")):null,h.warning?t(O,{tone:"idle",title:h.warning},e("fp.warning")):null),h.reason?t("div",{className:"dx-cleanPath"},h.reason):null,h.confidence==="shared"?t("div",{className:"dx-cleanPath"},e("fp.tier.sharedHint")):null,h.alsoMatchedBy.length>0?t("div",{className:"dx-cleanPath"},e("fp.alsoMatched",{names:h.alsoMatchedBy.join(", ")})):null),t("div",{className:"dx-cleanSize"},t("div",null,j(h.bytes)),t("div",{className:"dx-cleanSizeSub"},e("cleanup.files",{n:h.files}))))})),t("div",{className:"dx-fpSummary"},t("span",{className:"dx-small"},t(C,{name:"trash",size:12})," ",e("fp.selected",{value:j(c.bytes),n:c.files})),d.length>0?t("span",{className:"dx-small dx-muted"},e("fp.unselectedHint",{n:d.length,value:j(f)})):null),c.bytes>0?t("div",{className:"dx-banner","data-tone":"warn",role:"note"},t("span",{className:"dx-bannerText"},e("fp.spaceHint",{value:j(c.bytes)})),a.onOpenCleanup?t("button",{type:"button",className:"dx-linkBtn",onClick:a.onOpenCleanup},e("fp.emptyTrash")):null):null,a.notice?t("div",{className:"dx-banner","data-tone":"warn",role:"status"},t("span",{className:"dx-bannerText"},i(a.notice,""))):null,m(r.errors).length>0?t("div",{className:"dx-banner","data-tone":"warn",role:"status"},t("span",{className:"dx-bannerText"},m(r.errors).slice(0,3).join(" \xB7 "))):null)}var br={hardware:xa,system:Ca,software:Ta,network:va,security:Na,processes:ka};function Ra(a){let e=typeof a.t=="function"?a.t:Te,r=ra(),n=r.refresh,o=r.metrics,s=aa(),[l,c]=U("overview"),[d,f]=U(!0),[g,u]=U({}),[v,h]=U({status:"idle",actions:[],history:[],platform:null,error:null}),[y,P]=U([]),[M,b]=U(null),[K,_]=U(!1),[G,k]=U(""),[T,A]=U([]),[w,H]=U({}),[q,ce]=U(!1),Ne=$({}),wt=$({}),kt=$(!1),tt=$([]),We=$(null),Nt=$(0),St=$([]),ie="dx-"+Se().replace(/[^a-zA-Z0-9_-]/g,""),La=ie+"-panel-"+l,_e=Z((p,S,N)=>{Nt.current+=1;let D=Nt.current;A(z=>z.concat([{id:D,tone:p,title:S,message:i(N,"")}]).slice(-4))},[]),Ia=Z(p=>{A(S=>S.filter(N=>N.id!==p))},[]),Tt=Z(p=>{let S=lt(p);S&&P(N=>[S].concat(m(N).filter(D=>!(D.ts===S.ts&&D.id===S.id&&D.message===S.message))).slice(0,50))},[]),ne=Z((p,S)=>{if(!p)return Promise.resolve();if(Ne.current[p])return Ne.current[p];u(D=>{let z=x(D[p]);return Object.assign({},D,{[p]:{status:"loading",data:z.data===void 0?null:z.data,error:null,fetchedAt:F(z.fetchedAt,0)}})});let N=oe.section(p,S===!0).then(D=>{u(z=>({...z,[p]:{status:"ready",data:E(D)?D:{},error:null,fetchedAt:Date.now()}}))}).catch(D=>{u(z=>{let W=x(z[p]);return Object.assign({},z,{[p]:{status:"error",data:W.data===void 0?null:W.data,error:D,fetchedAt:F(W.fetchedAt,0)}})})}).finally(()=>{delete Ne.current[p]});return Ne.current[p]=N,N},[]),Ge=Z(p=>{u(S=>{let N={},D=!1;for(let z of Object.keys(S)){if(z===p){N[z]=S[z];continue}if(S[z].status==="idle"){N[z]=S[z];continue}N[z]=Object.assign({},S[z],{status:"idle"}),D=!0}return D?N:S})},[]),Le=Z(p=>{if(We.current)return We.current;h(N=>Object.assign({},N,{status:N.actions.length>0?"ready":"loading",error:null}));let S=oe.actions().then(N=>{h({status:"ready",actions:Ht(N.actions),history:Kt(N.history),platform:typeof N.platform=="string"?N.platform:null,error:null})}).catch(N=>{h(D=>Object.assign({},D,{status:D.actions.length>0?"ready":"error",error:N}))}).finally(()=>{We.current=null});return We.current=S,S},[]);ee(()=>{let p=be[l];if(!p)return;let S=g[p];if(!S||S.status==="idle"){ne(p,!1);return}if(S.status==="error"&&!S.data&&wt.current[p]!==!0){wt.current[p]=!0;let N=setTimeout(()=>{ne(p,!0)},1500);tt.current.push(N)}},[l,g,ne]),ee(()=>()=>{for(let p of tt.current)clearTimeout(p);tt.current=[]},[]),ee(()=>{if(kt.current)return;kt.current=!0;let p=[];return Object.values(be).forEach((S,N)=>{let D=setTimeout(()=>{Ne.current[S]||ne(S,!1)},150+N*250);p.push(D)}),()=>{for(let S of p)clearTimeout(S)}},[ne]),ee(()=>{Le(!1)},[Le]);let pe=Z(async(p,S)=>{if(!p)return{ok:!1,message:""};H(z=>Object.assign({},z,{[p]:!0}));let N=Je(e,p),D;try{D=await oe.runAction(p,S)}catch(z){D={ok:!1,message:re(z)}}try{let z=i(D.message,"");if(_e(D.ok?"ok":"fail",e(D.ok?"toast.action.ok":"toast.action.fail",{action:N}),z),Tt({ts:Date.now(),id:p,params:S||{},ok:D.ok===!0,message:z}),D.ok){let W=be[l];Ge(W),W&&ne(W,!0)}n()}finally{H(z=>{let W=Object.assign({},z);return delete W[p],W})}return D},[e,_e,Tt,Ge,ne,n,l]),Ct=Z(p=>{b(Object.assign({kind:"confirm"},p)),k("")},[]),Fa=Z(async p=>{b({kind:"footprint",path:i(p.path,""),name:i(p.name,""),uninstallId:i(p.uninstallId,""),status:"loading",footprint:null,error:""}),k("");let S=null;try{let N=await oe.footprint(p.path,!1);S=Et(N)}catch(N){b(D=>D&&D.kind==="footprint"?Object.assign({},D,{error:re(N)}):D)}b(N=>{if(!N||N.kind!=="footprint")return N;if(!S||S.items.length===0)return{kind:"confirm",title:e("sw.uninstallTitle",{name:i(p.name,"\u2014")}),description:i(p.uninstallId,"")!==""?e("sw.uninstallBodyWin"):e("sw.uninstallBody"),confirmLabel:e("sw.uninstall"),danger:!0,actionId:"app.uninstall",params:{path:i(p.path,""),id:i(p.uninstallId,""),mode:"trash"}};let D=[],z=0;for(let W of m(S.items)){let V=x(W);V.defaultSelected===!0&&(D.push(i(V.id,"")),z+=F(V.bytes,0))}return Object.assign({},N,{status:"ready",footprint:S,selection:{ids:D,bytes:z},error:""})})},[e]),Ea=Z((p,S)=>{b({kind:"dns",values:{service:i(p,"Wi-Fi"),servers:m(S).filter(N=>typeof N=="string").join(", ")}}),k("")},[]),za=Z(p=>{let S=x(p);b({kind:"kill",pid:F(S.pid,0),name:i(S.name,""),values:{signal:i(S.signal,"TERM")}}),k("")},[]),at=Z((p,S)=>{b(N=>N&&Object.assign({},N,{values:Object.assign({},x(N.values),{[p]:S})}))},[]),Ua=Z(()=>{b(p=>K&&p?p:(k(""),null))},[K]),Pt=Z((p,S)=>{let N=m(v.actions).find(W=>W.id==="system.openSettings"),D=N?m(N.params).find(W=>W.name==="pane"):null,z=D?m(D.options):[];for(let W of m(p)){let V=String(W).toLowerCase(),ae=z.find(Ie=>String(Ie).toLowerCase().indexOf(V)>=0);if(ae!==void 0)return ae}return S},[v.actions]),Ha=Z((p,S)=>{pe("system.openSettings",{pane:Pt(p,S)})},[pe,Pt]),Ka=Z(async()=>{let p=M;if(!p||K)return;if(p.kind==="dns"){let D=x(p.values),z=String(D.service===void 0||D.service===null?"":D.service).trim(),W=Ze(D.servers),V=W.filter(Ie=>!Xe(Ie));if(z.length===0){k(e("act.invalidRequired",{name:e("net.dnsService")}));return}if(W.length>4||V.length>0){k(e("net.dnsInvalid"));return}_(!0);let ae=await pe("network.setDns",{service:z,servers:W});_(!1),ae&&ae.ok?(_e("ok",e("net.dnsApplied",{service:z}),""),b(null),k("")):k(i(ae&&ae.message,e("error.sectionHint")));return}if(p.kind==="footprint"){let D=x(p.selection),z=m(D.ids).filter(Ie=>typeof Ie=="string"),W=p.uninstallId!==""?"win32":"darwin",V=z.length>0?{path:i(p.path,""),mode:"trash",scanId:i(x(p.footprint).scanId,""),itemIds:z,cleanup:"trash"}:{path:i(p.path,""),mode:"trash",cleanup:"none"};W==="win32"&&(V.id=i(p.uninstallId,"")),_(!0);let ae=await pe("app.uninstall",V);_(!1),ae&&ae.ok?(b(null),k("")):k(i(ae&&ae.message,e("error.sectionHint")));return}let S=p.actionId,N=p.params;if(p.kind==="kill"&&(S="process.signal",N={pid:p.pid,signal:i(x(p.values).signal,"TERM")}),!S){b(null);return}_(!0),await pe(S,N||{}),_(!1),b(null),k("")},[M,K,pe,_e,e]),Mt=Z(async()=>{if(q)return;ce(!0);let p=be[l],S=[n()];p&&(Ge(p),S.push(ne(p,!0))),(l==="actions"||m(v.actions).length===0)&&S.push(Le(!0));try{await Promise.allSettled(S)}finally{ce(!1)}},[q,l,n,ne,Le,Ge,v.actions]),ja=p=>{let S=ge[p];if(!S)return;c(S);let N=St.current[p];if(N&&typeof N.focus=="function")try{N.focus()}catch{}},Wa=p=>{let S=ge.indexOf(l);if(S<0)return;let N=-1;p.key==="ArrowDown"||p.key==="ArrowRight"?N=(S+1)%ge.length:p.key==="ArrowUp"||p.key==="ArrowLeft"?N=(S-1+ge.length)%ge.length:p.key==="Home"?N=0:p.key==="End"&&(N=ge.length-1),N>=0&&(p.preventDefault(),ja(N))},ye=(()=>{if(!M)return null;if(M.kind==="dns"){let p=x(M.values);return{title:e("net.dnsTitle"),description:e("net.dnsBody",{service:i(p.service,"Wi-Fi")}),confirmLabel:e("net.setDns"),danger:!1,children:t("div",{className:"dx-modalFields"},t("div",{className:"dx-field"},t("label",{className:"dx-fieldLabel",htmlFor:ie+"-dns-service"},e("net.dnsService")),t("input",{id:ie+"-dns-service",type:"text",className:"dx-input",value:i(p.service,""),placeholder:e("act.paramPlaceholder.service"),onChange:S=>at("service",S.target.value)})),t("div",{className:"dx-field"},t("label",{className:"dx-fieldLabel",htmlFor:ie+"-dns-servers"},e("net.dnsServers")),t("textarea",{id:ie+"-dns-servers",className:"dx-textarea",value:i(p.servers,""),placeholder:e("net.dnsServersPlaceholder"),onChange:S=>at("servers",S.target.value)})))}}if(M.kind==="kill"){let p=i(x(M.values).signal,"TERM"),S=F(M.pid,0),N=m(v.actions).find(V=>V.id==="process.signal"),D=N?m(N.params).find(V=>V.name==="signal"):null,z=D?m(D.options).filter(V=>typeof V=="string"):[],W=z.length>0?z:Yt;return{title:e("proc.confirmTitle",{name:i(M.name,"\u2014")}),description:e("proc.confirmBody",{name:i(M.name,"\u2014"),pid:S,signal:Ue(e,p)}),confirmLabel:e("proc.kill"),danger:!0,children:t("div",{className:"dx-modalFields"},t("div",{className:"dx-field"},t("label",{className:"dx-fieldLabel",htmlFor:ie+"-kill-signal"},e("proc.signal")),t("select",{id:ie+"-kill-signal",className:"dx-select",value:p,onChange:V=>at("signal",V.target.value)},W.map(V=>t("option",{key:V,value:V},Ue(e,V))))))}}if(M.kind==="footprint"){let p=i(M.name,"\u2014");if(M.status==="loading")return{title:e("fp.title",{name:p}),description:e("fp.scanning"),confirmLabel:e("common.confirm"),danger:!0,busy:!0,children:null};let S=x(M.footprint),N=x(M.selection),z=m(N.ids).filter(W=>typeof W=="string").length;return{title:e("fp.title",{name:p}),description:z>0?e("fp.confirmBody",{n:z}):e("fp.confirmBodyNoCleanup"),confirmLabel:z>0?e("fp.cleanup"):e("fp.cleanupNone"),danger:!0,children:t(Ma,{t:e,appName:p,footprint:S,busy:K,notice:i(M.error,""),onSelectionChange:(W,V)=>{b(ae=>ae&&ae.kind==="footprint"?Object.assign({},ae,{selection:{ids:W,bytes:V}}):ae)},onOpenCleanup:()=>{b(null),c("cleanup")}})}}return{title:i(M.title,e("dialog.title")),description:i(M.description,""),details:m(M.details),confirmLabel:i(M.confirmLabel,e("common.confirm")),danger:M.danger===!0,children:null}})(),Rt=be[l],_a=Rt?g[Rt]||{status:"idle",data:null,error:null}:null,Ga=r.status==="error"&&!o,ve=null;if(Ga)ve=t(de,{t:e,title:e("error.title"),text:e("error.body"),onRetry:n,retryLabel:e("common.retry")});else if(l==="overview")ve=t(wa,{t:e,metrics:o,samples:r.samples,threeD:d,onToggleThreeD:()=>f(p=>!p),onShowProcesses:()=>c("processes")});else if(l==="actions")ve=t(na,{t:e,catalog:v,history:jt(y,v.history),pending:w,onRetry:()=>Le(!0),openConfirm:Ct});else if(l==="cleanup")ve=t(ia,{t:e,onAction:pe});else if(l==="benchmark")ve=t(oa,{t:e});else{let p=br[l];ve=p?t(p,{t:e,state:_a,metrics:o,platform:v.platform,pending:w,onRetry:()=>ne(l,!0),onRefresh:()=>ne(l,!0),onAction:pe,openConfirm:Ct,openUninstall:Fa,openDns:Ea,openKill:za,openPane:Ha}):t(L,{title:e("common.empty")})}let qe=r.status,qa=qe==="ready"?"header.live":qe==="stale"?"header.stale":qe==="error"?"header.offline":"header.connecting",At=o&&o.osVersion?o.osVersion:v.platform==="darwin"?"macOS":i(v.platform,"");return t("div",{className:"dx-root","data-motion":d&&!s?"on":"off"},t("header",{className:"dx-header"},t("div",{className:"dx-headerMain"},t("div",{className:"dx-titleRow"},t("h1",{className:"dx-title",title:o&&o.hostname?o.hostname:e("panel")},o&&o.hostname||e("panel")),At?t("span",{className:"dx-osChip"},At):null),t("div",{className:"dx-headerMeta"},t("span",{className:"dx-status","data-state":qe,role:"status","aria-label":e("aria.status")},t("span",{className:"dx-statusDot","aria-hidden":"true"}),e(qa)),r.updatedAt>0?t("span",null,e("header.updated",{time:Ce(r.updatedAt)})):null,o&&o.uptimeSec!==null?t("span",null,e("header.uptime")+" "+he(o.uptimeSec,e)):null)),t("div",{className:"dx-headerActions"},t("button",{type:"button",className:"dx-iconBtn",title:e(q?"header.refreshing":"header.refresh"),"aria-label":e("aria.refresh"),disabled:q,onClick:Mt},t(C,{name:"refresh",size:15,className:q?"dx-spin":void 0})))),t("div",{className:"dx-body"},t("nav",{className:"dx-rail",role:"tablist","aria-label":e("aria.tabs"),"aria-orientation":"vertical",onKeyDown:Wa},ge.map((p,S)=>t("button",{key:p,ref:N=>{St.current[S]=N},type:"button",role:"tab",id:ie+"-tab-"+p,"aria-selected":l===p,"aria-controls":ie+"-panel-"+p,tabIndex:l===p?0:-1,className:"dx-railTab",onClick:()=>c(p),onMouseEnter:()=>{let N=be[p];N&&(!g[N]||g[N].status==="idle")&&ne(N,!1)},onFocus:()=>{let N=be[p];N&&(!g[N]||g[N].status==="idle")&&ne(N,!1)}},t("span",{className:"dx-railIcon"},t(C,{name:_t[p],size:15})),t("span",{className:"dx-railLabel"},e(Wt[p]))))),t("div",{className:"dx-contentWrap"},r.status==="stale"?t("div",{className:"dx-banner","data-tone":"warn",role:"status"},t("span",{className:"dx-bannerText"},e("error.stale")),t("button",{type:"button",className:"dx-btn","data-size":"sm",onClick:Mt,disabled:q},e("error.staleRetry"))):null,t("div",{className:"dx-content"},t("div",{className:l==="processes"||l==="software"?"dx-tabpanel dx-tabpanelFill":"dx-tabpanel",role:"tabpanel",id:La,"aria-labelledby":ie+"-tab-"+l},t(la,{t:e,key:l},ve))))),ye?t(ya,{t:e,title:ye.title,description:ye.description,details:ye.details,confirmLabel:ye.confirmLabel,danger:ye.danger,busy:K,errorText:G,onClose:Ua,onConfirm:Ka},ye.children):null,t(Pa,{t:e,toasts:T,onDismiss:Ia}))}function Aa(a){let e=F(a.size,18),r=a.active===!0;return t("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.6,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",focusable:"false"},r?t("rect",{x:3.5,y:3.5,width:17,height:17,rx:4.5,fill:"currentColor",stroke:"none",opacity:.12}):null,t("rect",{x:4.5,y:4.5,width:15,height:15,rx:4}),t("path",{d:"M9.5 9.5l5 5M14.5 9.5l-5 5"}),t("path",{d:"M9.5 2.5v2M14.5 2.5v2M9.5 19.5v2M14.5 19.5v2M2.5 9.5h2M2.5 14.5h2M19.5 9.5h2M19.5 14.5h2"}))}var Ba={panel:"\u8BBE\u5907","tab.overview":"\u603B\u89C8","tab.hardware":"\u786C\u4EF6","tab.system":"\u7CFB\u7EDF","tab.software":"\u8F6F\u4EF6","tab.network":"\u7F51\u7EDC","tab.security":"\u5B89\u5168","tab.processes":"\u8FDB\u7A0B","tab.actions":"\u64CD\u4F5C","tab.cleanup":"\u6E05\u7406","tab.benchmark":"\u6027\u80FD","header.connecting":"\u6B63\u5728\u8FDE\u63A5","header.live":"\u5B9E\u65F6","header.stale":"\u8FDE\u63A5\u4E2D\u65AD","header.offline":"\u79BB\u7EBF","header.updated":"\u66F4\u65B0\u4E8E {time}","header.refresh":"\u5237\u65B0","header.refreshing":"\u6B63\u5728\u5237\u65B0\u2026","header.motionOn":"\u5F00\u542F 3D \u52A8\u6548","header.motionOff":"\u6682\u505C 3D \u52A8\u6548","header.uptime":"\u8FD0\u884C\u65F6\u957F","common.retry":"\u91CD\u8BD5","common.cancel":"\u53D6\u6D88","common.confirm":"\u786E\u8BA4","common.close":"\u5173\u95ED","common.loading":"\u52A0\u8F7D\u4E2D\u2026","common.empty":"\u6682\u65E0\u6570\u636E","common.error":"\u52A0\u8F7D\u5931\u8D25","common.unknown":"\u672A\u77E5","common.na":"\u2014","common.search":"\u641C\u7D22","common.all":"\u5168\u90E8","common.name":"\u540D\u79F0","common.value":"\u503C","common.status":"\u72B6\u6001","common.type":"\u7C7B\u578B","common.size":"\u5927\u5C0F","common.usage":"\u4F7F\u7528\u7387","common.total":"\u603B\u8BA1","common.used":"\u5DF2\u7528","common.free":"\u53EF\u7528","common.temperature":"\u6E29\u5EA6","common.updated":"\u5DF2\u66F4\u65B0","common.none":"\u65E0","common.on":"\u5F00","common.off":"\u5173","common.yes":"\u662F","common.no":"\u5426","common.enabled":"\u5DF2\u542F\u7528","common.disabled":"\u5DF2\u505C\u7528","common.pending":"\u5904\u7406\u4E2D\u2026","common.refresh":"\u5237\u65B0","common.admin":"\u7BA1\u7406\u5458","common.never":"\u4ECE\u4E0D","common.notAvailable":"\u4E0D\u53EF\u7528","common.percent":"\u767E\u5206\u6BD4","common.count":"\u6570\u91CF","common.version":"\u7248\u672C","common.path":"\u8DEF\u5F84","common.model":"\u578B\u53F7","common.serial":"\u5E8F\u5217\u53F7","common.user":"\u7528\u6237","common.pid":"PID","common.process":"\u8FDB\u7A0B","common.port":"\u7AEF\u53E3","common.address":"\u5730\u5740","common.source":"\u6765\u6E90","common.state":"\u72B6\u6001","common.load":"\u8D1F\u8F7D","common.detail":"\u8BE6\u60C5","common.battery":"\u7535\u6C60","common.wifi":"Wi-Fi","common.cpu":"CPU","common.memory":"\u5185\u5B58","common.disk":"\u78C1\u76D8","common.gpu":"GPU","common.current":"\u5F53\u524D","common.actions":"\u64CD\u4F5C","common.cancelConfirm":"\u53D6\u6D88","unit.day":"\u5929","unit.hour":"\u5C0F\u65F6","unit.minute":"\u5206\u949F","unit.lessThanMinute":"\u4E0D\u5230 1 \u5206\u949F","overview.kpi.cpu":"\u5904\u7406\u5668","overview.kpi.memory":"\u5185\u5B58","overview.kpi.disk":"\u78C1\u76D8","overview.kpi.battery":"\u7535\u6C60","overview.kpi.network":"\u7F51\u7EDC","overview.kpi.load":"\u8D1F\u8F7D","overview.kpi.pressure":"\u5185\u5B58\u538B\u529B","overview.kpi.cores":"{n} \u4E2A\u6838\u5FC3","overview.kpi.free":"\u53EF\u7528 {value}","overview.kpi.used":"\u5DF2\u7528 {value}","overview.kpi.remaining":"\u5269\u4F59 {value}","overview.kpi.charging":"\u5145\u7535\u4E2D","overview.kpi.plugged":"\u5DF2\u63A5\u5165\u7535\u6E90","overview.kpi.onBattery":"\u4F7F\u7528\u7535\u6C60","overview.kpi.noBattery":"\u65E0\u7535\u6C60","overview.kpi.rx":"\u2193 {value}","overview.kpi.tx":"\u2191 {value}","overview.kpi.swap":"\u4EA4\u6362\u7A7A\u95F4 {value}","overview.sparkline.cpu":"\u5904\u7406\u5668\u4F7F\u7528\u7387\u8D8B\u52BF","overview.sparkline.memory":"\u5185\u5B58\u4F7F\u7528\u7387\u8D8B\u52BF","overview.sparkline.network":"\u7F51\u7EDC\u541E\u5410\u8D8B\u52BF","overview.alerts":"\u63D0\u9192","overview.alerts.none":"\u4E00\u5207\u6B63\u5E38\uFF0C\u6CA1\u6709\u5F02\u5E38\u63D0\u9192","overview.alert.memoryHigh":"\u5185\u5B58\u4F7F\u7528\u7387 {percent}\uFF0C\u8D85\u8FC7 85%","overview.alert.cpuHigh":"\u5904\u7406\u5668\u4F7F\u7528\u7387 {percent}\uFF0C\u6301\u7EED\u504F\u9AD8","overview.alert.diskHigh":"\u78C1\u76D8\u7A7A\u95F4\u7D27\u5F20\uFF0C\u5DF2\u7528 {percent}","overview.alert.batteryLow":"\u7535\u91CF\u504F\u4F4E\uFF08{percent}\uFF09","overview.alert.memoryPressure":"\u5185\u5B58\u538B\u529B\uFF1A{level}","overview.alert.swap":"\u6B63\u5728\u4F7F\u7528\u4EA4\u6362\u7A7A\u95F4 {value}","overview.alert.thermal":"\u5904\u7406\u5668\u6E29\u5EA6 {temp}\xB0C","overview.top":"\u9AD8\u5360\u7528\u8FDB\u7A0B","overview.top.empty":"\u6682\u65E0\u8FDB\u7A0B\u6570\u636E","overview.memoryBreakdown":"\u5185\u5B58\u6784\u6210","overview.breakdown.app":"\u5E94\u7528\u5185\u5B58","overview.breakdown.wired":"\u8054\u52A8\u5185\u5B58","overview.breakdown.compressed":"\u538B\u7F29\u5185\u5B58","overview.breakdown.cached":"\u6587\u4EF6\u7F13\u5B58","overview.breakdown.free":"\u7A7A\u95F2","overview.memPressure.normal":"\u6B63\u5E38","overview.memPressure.warning":"\u504F\u9AD8","overview.memPressure.critical":"\u7D27\u5F20","overview.heroCaption":"\u5B9E\u65F6\u8BBE\u5907\u6838\u5FC3","hw.cpu":"\u5904\u7406\u5668","hw.cpuCore":"\u6BCF\u6838\u5FC3\u4F7F\u7528\u7387","hw.memory":"\u5185\u5B58","hw.memoryModules":"\u5185\u5B58\u6A21\u5757","hw.graphics":"\u56FE\u5F62\u4E0E\u663E\u793A","hw.gpu":"\u56FE\u5F62\u5904\u7406\u5668","hw.displays":"\u663E\u793A\u5668","hw.storage":"\u5B58\u50A8","hw.drives":"\u7269\u7406\u78C1\u76D8","hw.volumes":"\u5B97\u5377","hw.battery":"\u7535\u6C60\u5065\u5EB7","hw.usb":"USB \u8BBE\u5907","hw.connections":"\u8FDE\u63A5\u8BBE\u5907","hw.connections.view":"\u8BBE\u5907\u7C7B\u578B","hw.bluetooth":"\u84DD\u7259","hw.audio":"\u97F3\u9891\u8BBE\u5907","hw.cameras":"\u6444\u50CF\u5934","hw.cores":"\u6838\u5FC3","hw.physical":"\u7269\u7406\u6838\u5FC3","hw.logical":"\u903B\u8F91\u6838\u5FC3","hw.speed":"\u4E3B\u9891","hw.arch":"\u67B6\u6784","hw.vendor":"\u5382\u5546","hw.features":"\u6307\u4EE4\u96C6","hw.slot":"\u63D2\u69FD","hw.manufacturer":"\u5236\u9020\u5546","hw.partNumber":"\u90E8\u4EF6\u53F7","hw.mediaType":"\u4ECB\u8D28\u7C7B\u578B","hw.smart":"SMART \u72B6\u6001","hw.mount":"\u6302\u8F7D\u70B9","hw.fs":"\u6587\u4EF6\u7CFB\u7EDF","hw.removable":"\u53EF\u79FB\u9664","hw.internal":"\u5185\u7F6E","hw.condition":"\u7535\u6C60\u72B6\u51B5","hw.cycles":"\u5FAA\u73AF\u6B21\u6570","hw.health":"\u5065\u5EB7\u5EA6","hw.designCapacity":"\u8BBE\u8BA1\u5BB9\u91CF","hw.maxCapacity":"\u6700\u5927\u5BB9\u91CF","hw.connection":"\u8FDE\u63A5\u65B9\u5F0F","hw.refreshRate":"\u5237\u65B0\u7387","hw.main":"\u4E3B\u663E\u793A\u5668","hw.connected":"\u5DF2\u8FDE\u63A5","hw.notConnected":"\u672A\u8FDE\u63A5","hw.chipset":"\u82AF\u7247\u7EC4","hw.firmware":"\u56FA\u4EF6","hw.controller":"\u63A7\u5236\u5668","hw.devices":"\u8BBE\u5907","hw.default":"\u9ED8\u8BA4","hw.kind":"\u79CD\u7C7B","hw.output":"\u8F93\u51FA","hw.input":"\u8F93\u5165","hw.modelId":"\u578B\u53F7\u6807\u8BC6","hw.uniqueId":"\u552F\u4E00\u6807\u8BC6","hw.empty":"\u672A\u53D1\u73B0\u8BBE\u5907","hw.gpuCores":"{n} \u4E2A\u6838\u5FC3","hw.vram":"\u663E\u5B58","hw.metal":"Metal","hw.batteryPercent":"\u7535\u91CF {percent}","hw.usbSpeed":"\u901F\u7387","hw.bus":"\u603B\u7EBF","hw.noModules":"\u6CA1\u6709\u5185\u5B58\u6A21\u5757\u4FE1\u606F","hw.batteryNoData":"\u6682\u65E0\u7535\u6C60\u4FE1\u606F","hw.errors":"\u90E8\u5206\u786C\u4EF6\u4FE1\u606F\u4E0D\u53EF\u7528","sys.os":"\u64CD\u4F5C\u7CFB\u7EDF","sys.device":"\u8BBE\u5907\u4FE1\u606F","sys.boot":"\u542F\u52A8\u4E0E\u8FD0\u884C","sys.users":"\u7528\u6237\u8D26\u6237","sys.currentUser":"\u5F53\u524D\u7528\u6237","sys.launchAgents":"\u542F\u52A8\u4EE3\u7406","sys.startupItems":"\u542F\u52A8\u9879","sys.loginItems":"\u767B\u5F55\u9879","sys.environment":"\u73AF\u5883\u53D8\u91CF","sys.locale":"\u533A\u57DF\u8BBE\u7F6E","sys.hostname":"\u4E3B\u673A\u540D","sys.computerName":"\u7535\u8111\u540D\u79F0","sys.localHostname":"\u672C\u5730\u4E3B\u673A\u540D","sys.model":"\u673A\u578B","sys.modelId":"\u578B\u53F7\u6807\u8BC6","sys.chip":"\u82AF\u7247","sys.serial":"\u5E8F\u5217\u53F7","sys.hardwareUuid":"\u786C\u4EF6 UUID","sys.name":"\u4EA7\u54C1\u540D\u79F0","sys.version":"\u7248\u672C","sys.build":"\u6784\u5EFA\u53F7","sys.kernel":"\u5185\u6838","sys.arch":"\u67B6\u6784","sys.bootTime":"\u542F\u52A8\u65F6\u95F4","sys.uptime":"\u5DF2\u8FD0\u884C","sys.uid":"UID","sys.gid":"GID","sys.home":"\u4E3B\u76EE\u5F55","sys.shell":"\u9ED8\u8BA4 Shell","sys.fullName":"\u5168\u540D","sys.adminRole":"\u7BA1\u7406\u5458","sys.totalUsers":"\u7528\u6237\u603B\u6570","sys.scope":"\u4F5C\u7528\u57DF","sys.loaded":"\u5DF2\u52A0\u8F7D","sys.unloaded":"\u672A\u52A0\u8F7D","sys.lastExit":"\u9000\u51FA\u7801","sys.program":"\u7A0B\u5E8F","sys.enableAgent":"\u542F\u7528","sys.disableAgent":"\u505C\u7528","sys.agentConfirmEnable":"\u542F\u7528\u542F\u52A8\u4EE3\u7406 {label}\uFF1F\u767B\u5F55\u65F6\u5C06\u81EA\u52A8\u8FD0\u884C\u3002","sys.agentConfirmDisable":"\u505C\u7528\u542F\u52A8\u4EE3\u7406 {label}\uFF1F","sys.noAgents":"\u672A\u53D1\u73B0\u542F\u52A8\u4EE3\u7406","sys.noLoginItems":"\u672A\u53D1\u73B0\u767B\u5F55\u9879","sys.timezone":"\u65F6\u533A","sys.language":"\u8BED\u8A00","sys.localeValue":"\u533A\u57DF","sys.envNote":"\u4EC5\u663E\u793A\u5B89\u5168\u7684\u975E\u654F\u611F\u53D8\u91CF","sys.userScope":"\u7528\u6237","sys.systemScope":"\u7CFB\u7EDF","sys.errors":"\u90E8\u5206\u7CFB\u7EDF\u4FE1\u606F\u4E0D\u53EF\u7528","sw.applications":"\u5E94\u7528\u7A0B\u5E8F","sw.view":"\u5217\u8868\u5207\u6362","sw.appCount":"\u5171 {n} \u4E2A\u5E94\u7528","sw.search":"\u641C\u7D22\u5E94\u7528\u2026","sw.sortName":"\u6309\u540D\u79F0\u6392\u5E8F","sw.sortAsc":"\u540D\u79F0\u5347\u5E8F","sw.sortDesc":"\u540D\u79F0\u964D\u5E8F","sw.sourceFilter":"\u6765\u6E90\u7B5B\u9009","sw.source.system":"\u7CFB\u7EDF","sw.source.user":"\u7528\u6237","sw.source.other":"\u5176\u4ED6","sw.reveal":"\u5728\u8BBF\u8FBE\u4E2D\u663E\u793A","sw.revealWin":"\u5728\u8D44\u6E90\u7BA1\u7406\u5668\u4E2D\u663E\u793A","sw.uninstall":"\u5378\u8F7D\u2026","sw.uninstallTitle":"\u5378\u8F7D {name}\uFF1F","sw.uninstallBody":"\u5E94\u7528\u4F1A\u79FB\u5165\u5E9F\u7EB8\u7BD3\uFF0C\u53EF\u5728\u8BBF\u8FBE\u4E2D\u67E5\u770B\u3002","fp.title":"\u5378\u8F7D {name} \u53CA\u6B8B\u7559\u6587\u4EF6","fp.scanning":"\u6B63\u5728\u5206\u6790\u5E94\u7528\u7559\u4E0B\u7684\u6587\u4EF6\u2026","fp.intro":"\u5DF2\u627E\u5230\u4EE5\u4E0B\u4F4D\u7F6E\u3002\u9ED8\u8BA4\u53EA\u52FE\u9009\u53EF\u786E\u8BA4\u5C5E\u4E8E\u8BE5\u5E94\u7528\u7684\u9879\u76EE\u3002","fp.total":"\u5171 {n} \u9879\uFF0C\u5360 {value}","fp.selected":"\u5DF2\u9009 {value}\uFF08{n} \u4E2A\u6587\u4EF6\uFF09","fp.unselectedHint":"\u53E6\u6709 {n} \u9879\u5019\u9009\u672A\u9009\u4E2D\uFF08\u5171 {value}\uFF09","fp.tier.high":"\u5DF2\u786E\u8BA4","fp.tier.medium":"\u6309\u540D\u79F0\u63A8\u6D4B","fp.tier.conflict":"\u5F52\u5C5E\u51B2\u7A81","fp.tier.shared":"\u5171\u4EAB\u76EE\u5F55","fp.tier.sharedHint":"\u8BE5\u76EE\u5F55\u7531\u591A\u4E2A\u4EA7\u54C1\u5171\u7528\uFF0C\u4E0D\u80FD\u5728\u6B64\u5220\u9664\u3002","fp.alsoMatched":"\u4E5F\u53EF\u80FD\u5C5E\u4E8E\uFF1A{names}","fp.adminHint":"\u9700\u8981\u7BA1\u7406\u5458\u6743\u9650\uFF0C\u6B64\u63D2\u4EF6\u4E0D\u4F1A\u5220\u9664\u3002","fp.warning":"\u7EDF\u8BA1\u4E0D\u5B8C\u6574","fp.noItems":"\u6CA1\u6709\u627E\u5230\u6B8B\u7559\u4F4D\u7F6E\u3002","fp.scanFailed":"\u65E0\u6CD5\u5206\u6790\u8BE5\u5E94\u7528\uFF1A{message}","fp.confirmTitle":"\u5378\u8F7D {name}\uFF1F","fp.confirmBody":"\u5E94\u7528\u4E0E\u6240\u9009\u7684 {n} \u9879\u6B8B\u7559\u4F1A\u79FB\u5165\u5E9F\u7EB8\u7BD3\u3002","fp.confirmBodyNoCleanup":"\u5E94\u7528\u4F1A\u79FB\u5165\u5E9F\u7EB8\u7BD3\uFF0C\u4E0D\u6E05\u7406\u6B8B\u7559\u6587\u4EF6\u3002","fp.spaceHint":"\u79FB\u5165\u5E9F\u7EB8\u7BD3\u4E0D\u4F1A\u91CA\u653E\u7A7A\u95F4\uFF1B\u6E05\u7A7A\u5E9F\u7EB8\u7BD3\u540E\u91CA\u653E {value}\u3002","fp.emptyTrash":"\u53BB\u6E05\u7406\u9875","fp.cleanup":"\u5378\u8F7D\u5E76\u6E05\u7406","fp.cleanupNone":"\u4EC5\u5378\u8F7D","fp.appRunning":"\u5E94\u7528\u6B63\u5728\u8FD0\u884C\uFF0C\u8BF7\u5148\u9000\u51FA\u3002","fp.unsupported":"\u6B64\u5E73\u53F0\u6682\u4E0D\u652F\u6301\u6E05\u7406\u6B8B\u7559\uFF0C\u53EA\u80FD\u5217\u51FA\u3002","fp.bundleIdLabel":"Bundle ID","fp.sandboxed":"\u6C99\u76D2\u5E94\u7528","fp.notSandboxed":"\u975E\u6C99\u76D2","sw.bundleId":"Bundle ID","sw.arch":"\u67B6\u6784","sw.lastUsed":"\u6700\u8FD1\u4F7F\u7528","sw.homebrew":"Homebrew","sw.brewInstalled":"\u5DF2\u5B89\u88C5","sw.brewOutdated":"\u53EF\u5347\u7EA7","sw.brewNotAvailable":"\u672A\u68C0\u6D4B\u5230 Homebrew","sw.brewUninstall":"\u5378\u8F7D\u2026","sw.brewConfirmTitle":"\u5378\u8F7D Homebrew \u5305 {name}\uFF1F","sw.brewConfirmBody":"\u8BE5\u64CD\u4F5C\u4F1A\u79FB\u9664 {name} \u53CA\u5176\u4F9D\u8D56\uFF0C\u53EF\u80FD\u9700\u8981\u91CD\u65B0\u5B89\u88C5\u3002","sw.noApps":"\u6CA1\u6709\u5339\u914D\u7684\u5E94\u7528","sw.noBrew":"\u6CA1\u6709\u5DF2\u5B89\u88C5\u7684 Homebrew \u5305","sw.loadingApps":"\u6B63\u5728\u8BFB\u53D6\u5E94\u7528\u5217\u8868\u2026","sw.systemAppNote":"\u7CFB\u7EDF\u5E94\u7528\u4E0D\u53EF\u5378\u8F7D","sw.size":"\u5927\u5C0F","sw.errors":"\u90E8\u5206\u8F6F\u4EF6\u4FE1\u606F\u4E0D\u53EF\u7528","net.interfaces":"\u7F51\u7EDC\u63A5\u53E3","net.wifi":"Wi-Fi","net.route":"\u9ED8\u8BA4\u8DEF\u7531","net.dns":"DNS","net.proxy":"\u4EE3\u7406","net.ports":"\u76D1\u542C\u7AEF\u53E3","net.established":"\u5DF2\u5EFA\u7ACB\u8FDE\u63A5","net.establishedCount":"{n} \u4E2A","net.notConnected":"\u672A\u8FDE\u63A5 Wi-Fi","net.ssid":"\u7F51\u7EDC\u540D\u79F0","net.bssid":"BSSID","net.rssi":"\u4FE1\u53F7\u5F3A\u5EA6","net.signalLevel":"\u4FE1\u53F7 {level}/4","net.noise":"\u566A\u58F0","net.channel":"\u4FE1\u9053","net.security":"\u5B89\u5168","net.txRate":"\u53D1\u9001\u901F\u7387","net.ipv4":"IPv4","net.ipv6":"IPv6","net.mac":"MAC \u5730\u5740","net.mtu":"MTU","net.interface":"\u63A5\u53E3","net.up":"\u5DF2\u542F\u7528","net.down":"\u5DF2\u505C\u7528","net.primary":"\u4E3B\u63A5\u53E3","net.gateway":"\u7F51\u5173","net.servers":"DNS \u670D\u52A1\u5668","net.searchDomains":"\u641C\u7D22\u57DF","net.http":"HTTP","net.https":"HTTPS","net.socks":"SOCKS","net.none":"\u672A\u8BBE\u7F6E","net.proto":"\u534F\u8BAE","net.wifiPowerOn":"\u5173\u95ED Wi-Fi","net.wifiPowerOff":"\u5F00\u542F Wi-Fi","net.setDns":"\u8BBE\u7F6E DNS\u2026","net.openSettings":"\u6253\u5F00\u7F51\u7EDC\u8BBE\u7F6E","net.dnsTitle":"\u8BBE\u7F6E DNS","net.dnsBody":"\u4E3A\u7F51\u7EDC\u670D\u52A1 {service} \u6307\u5B9A\u6700\u591A 4 \u4E2A DNS \u670D\u52A1\u5668\uFF0C\u7559\u7A7A\u8868\u793A\u81EA\u52A8\u83B7\u53D6\u3002","net.dnsService":"\u7F51\u7EDC\u670D\u52A1","net.dnsServers":"DNS \u670D\u52A1\u5668","net.dnsServersPlaceholder":"\u6BCF\u884C\u4E00\u4E2A\uFF0C\u4F8B\u5982 1.1.1.1","net.dnsInvalid":"\u8BF7\u8F93\u5165 0\u20134 \u4E2A\u6709\u6548\u7684 IPv4 \u5730\u5740","net.dnsApplied":"DNS \u5DF2\u66F4\u65B0\uFF1A{service}","net.wifiOn":"Wi-Fi \u5DF2\u5F00\u542F","net.wifiOff":"Wi-Fi \u5DF2\u5173\u95ED","net.confirmWifiOff":"\u5173\u95ED Wi-Fi\uFF1F","net.confirmWifiOn":"\u5F00\u542F Wi-Fi\uFF1F","net.noInterfaces":"\u672A\u53D1\u73B0\u7F51\u7EDC\u63A5\u53E3","net.noPorts":"\u6CA1\u6709\u76D1\u542C\u7AEF\u53E3","net.type.wifi":"Wi-Fi","net.type.ethernet":"\u4EE5\u592A\u7F51","net.type.loopback":"\u56DE\u73AF","net.type.bridge":"\u7F51\u6865","net.type.other":"\u5176\u4ED6","net.ipNone":"\u672A\u5206\u914D","net.errors":"\u90E8\u5206\u7F51\u7EDC\u4FE1\u606F\u4E0D\u53EF\u7528","sec.fileVault":"\u6587\u4EF6\u4FDD\u9669\u7BB1","sec.sip":"\u7CFB\u7EDF\u5B8C\u6574\u6027\u4FDD\u62A4","sec.gatekeeper":"Gatekeeper","sec.bitlocker":"BitLocker \u78C1\u76D8\u52A0\u5BC6","sec.secureBoot":"\u5B89\u5168\u542F\u52A8","sec.defender":"Windows Defender","sec.firewall":"\u9632\u706B\u5899","sec.tcc":"\u9690\u79C1\u6743\u9650","sec.admins":"\u7BA1\u7406\u5458\u8D26\u6237","sec.remoteLogin":"\u8FDC\u7A0B\u767B\u5F55","sec.autoLogin":"\u81EA\u52A8\u767B\u5F55","sec.on":"\u5DF2\u5F00\u542F","sec.off":"\u5DF2\u5173\u95ED","sec.unknown":"\u672A\u77E5","sec.stealth":"\u9690\u8EAB\u6A21\u5F0F","sec.paneTitle":"\u7CFB\u7EDF\u8BBE\u7F6E\u9762\u677F","sec.openFileVault":"\u6253\u5F00\u6587\u4EF6\u4FDD\u9669\u7BB1\u8BBE\u7F6E","sec.openPrivacyWin":"\u6253\u5F00\u9690\u79C1\u8BBE\u7F6E","sec.openSecurityWin":"\u6253\u5F00 Windows \u5B89\u5168\u4E2D\u5FC3","sec.openFirewall":"\u6253\u5F00\u9632\u706B\u5899\u8BBE\u7F6E","sec.openSharing":"\u6253\u5F00\u5171\u4EAB\u8BBE\u7F6E","sec.openUsers":"\u6253\u5F00\u7528\u6237\u4E0E\u7FA4\u7EC4","sec.flushDns":"\u6E05\u7A7A DNS \u7F13\u5B58","sec.emptyTrash":"\u6E05\u7A7A\u5E9F\u7EB8\u7BD3","sec.toggleFirewallOff":"\u5173\u95ED\u9632\u706B\u5899","sec.toggleFirewallOn":"\u5F00\u542F\u9632\u706B\u5899","sec.confirmFlushDns":"\u6E05\u7A7A DNS \u7F13\u5B58\uFF1F","sec.confirmFlushDnsBody":"\u7CFB\u7EDF\u7F13\u5B58\u5C06\u88AB\u6E05\u9664\uFF0C\u6B63\u5728\u8FDB\u884C\u7684\u89E3\u6790\u53EF\u80FD\u4F1A\u77ED\u6682\u91CD\u8BD5\u3002","sec.confirmEmptyTrash":"\u6E05\u7A7A\u5E9F\u7EB8\u7BD3\uFF1F","sec.confirmEmptyTrashBody":"\u5E9F\u7EB8\u7BD3\u4E2D\u7684\u9879\u76EE\u5C06\u88AB\u6C38\u4E45\u5220\u9664\uFF0C\u65E0\u6CD5\u6062\u590D\u3002","sec.confirmFirewallOff":"\u5173\u95ED\u9632\u706B\u5899\uFF1F","sec.confirmFirewallOffBody":"\u8FD9\u4F1A\u964D\u4F4E\u7F51\u7EDC\u9632\u62A4\uFF0C\u8BF7\u4EC5\u5728\u786E\u8BA4\u9700\u8981\u65F6\u64CD\u4F5C\u3002","sec.confirmFirewallOn":"\u5F00\u542F\u9632\u706B\u5899\uFF1F","sec.confirmFirewallOnBody":"\u5C06\u542F\u7528 macOS \u5185\u7F6E\u9632\u706B\u5899\u3002","sec.tccReadable":"\u4EE5\u4E0B\u5E94\u7528\u62E5\u6709\u8FD9\u4E9B\u6743\u9650","sec.tccUnreadable":"\u65E0\u6CD5\u8BFB\u53D6\u9690\u79C1\u6743\u9650\u6570\u636E\u5E93\uFF08\u9700\u8981\u5B8C\u5168\u78C1\u76D8\u8BBF\u95EE\u6743\u9650\uFF09\u3002","sec.tccUnreadableWin":"Windows \u4E0D\u63D0\u4F9B\u9010\u5E94\u7528\u7684\u6388\u6743\u6570\u636E\u5E93\uFF1B\u8BF7\u5728\u7CFB\u7EDF\u8BBE\u7F6E\u4E2D\u67E5\u770B\u9690\u79C1\u6743\u9650\u3002","sec.tccReason":"\u539F\u56E0\uFF1A{reason}","sec.service":"\u6743\u9650","sec.client":"\u5E94\u7528","sec.noGrants":"\u6CA1\u6709\u53EF\u663E\u793A\u7684\u6743\u9650\u8BB0\u5F55","sec.remoteLoginOn":"\u8FDC\u7A0B\u767B\u5F55\u5DF2\u5F00\u542F","sec.remoteLoginOff":"\u8FDC\u7A0B\u767B\u5F55\u5DF2\u5173\u95ED","sec.autoLoginOff":"\u672A\u5F00\u542F\u81EA\u52A8\u767B\u5F55","sec.autoLoginUser":"\u81EA\u52A8\u767B\u5F55\uFF1A{user}","sec.adminsCount":"{n} \u4E2A\u7BA1\u7406\u5458","sec.usersCount":"\u5171 {n} \u4E2A\u7528\u6237","sec.noAdmins":"\u672A\u53D1\u73B0\u7BA1\u7406\u5458\u8D26\u6237","sec.errors":"\u90E8\u5206\u5B89\u5168\u4FE1\u606F\u4E0D\u53EF\u7528","proc.search":"\u641C\u7D22\u8FDB\u7A0B\u2026","proc.total":"\u5171 {n} \u4E2A\u8FDB\u7A0B","proc.kill":"\u7ED3\u675F\u2026","proc.signal":"\u4FE1\u53F7","proc.confirmTitle":"\u7ED3\u675F\u8FDB\u7A0B {name}\uFF1F","proc.confirmBody":"\u8FDB\u7A0B {name}\uFF08PID {pid}\uFF09\u5C06\u6536\u5230 {signal} \u4FE1\u53F7\u3002","proc.sortByCpu":"\u6309 CPU \u6392\u5E8F","proc.sortDesc":"\u964D\u5E8F","proc.sortAsc":"\u5347\u5E8F","proc.empty":"\u6CA1\u6709\u5339\u914D\u7684\u8FDB\u7A0B","proc.refresh":"\u5237\u65B0\u8FDB\u7A0B","proc.rss":"\u5185\u5B58\u5360\u7528","proc.elapsed":"\u8FD0\u884C\u65F6\u957F","proc.ppid":"PPID","proc.command":"\u547D\u4EE4\u884C","proc.byUser":"\u6309\u7528\u6237\u7EDF\u8BA1","proc.signal.TERM":"\u7EC8\u6B62 (TERM)","proc.signal.KILL":"\u5F3A\u5236\u7EC8\u6B62 (KILL)","proc.signal.INT":"\u4E2D\u65AD (INT)","proc.signal.STOP":"\u6682\u505C (STOP)","proc.signal.CONT":"\u7EE7\u7EED (CONT)","proc.errors":"\u90E8\u5206\u8FDB\u7A0B\u4FE1\u606F\u4E0D\u53EF\u7528","act.catalog":"\u64CD\u4F5C\u76EE\u5F55","act.groups.process":"\u8FDB\u7A0B","act.groups.app":"\u5E94\u7528","act.groups.system":"\u7CFB\u7EDF","act.groups.network":"\u7F51\u7EDC","act.groups.software":"\u8F6F\u4EF6","act.groups.power":"\u7535\u6E90","act.run":"\u6267\u884C","act.runTitle":"\u6267\u884C {action}\uFF1F","act.runBody":"\u5C06\u8C03\u7528\u7CFB\u7EDF\u63A5\u53E3\u6267\u884C\u8BE5\u64CD\u4F5C\uFF0C\u90E8\u5206\u64CD\u4F5C\u4E0D\u53EF\u64A4\u9500\u3002","act.params":"\u53C2\u6570","act.noParams":"\u65E0\u9700\u53C2\u6570","act.required":"\u5FC5\u586B","act.requiresAdmin":"\u9700\u8981\u7BA1\u7406\u5458\u6743\u9650","act.history":"\u6267\u884C\u8BB0\u5F55","act.historyEmpty":"\u8FD8\u6CA1\u6709\u6267\u884C\u8BB0\u5F55","act.historyOk":"\u6210\u529F","act.historyFail":"\u5931\u8D25","act.danger.low":"\u4F4E\u98CE\u9669","act.danger.medium":"\u4E2D\u98CE\u9669","act.danger.high":"\u9AD8\u98CE\u9669","act.pending":"\u6267\u884C\u4E2D\u2026","act.resultOk":"\u64CD\u4F5C\u5B8C\u6210","act.resultFail":"\u64CD\u4F5C\u5931\u8D25","act.empty":"\u8BE5\u5206\u7EC4\u6682\u65E0\u53EF\u7528\u64CD\u4F5C","act.param.pid":"PID","act.param.signal":"\u4FE1\u53F7","act.param.name":"\u540D\u79F0","act.param.path":"\u8DEF\u5F84","act.param.mode":"\u65B9\u5F0F","act.param.kind":"\u7C7B\u578B","act.param.value":"\u503C","act.param.percent":"\u97F3\u91CF","act.param.enabled":"\u542F\u7528","act.param.pane":"\u9762\u677F","act.param.service":"\u7F51\u7EDC\u670D\u52A1","act.param.servers":"DNS \u670D\u52A1\u5668","act.paramPlaceholder.pid":"\u8FDB\u7A0B ID","act.paramPlaceholder.name":"\u540D\u79F0","act.paramPlaceholder.path":"/Applications/Foo.app","act.paramPlaceholder.value":"\u65B0\u7684\u503C","act.paramPlaceholder.pane":"\u9762\u677F\u6807\u8BC6","act.paramPlaceholder.service":"Wi-Fi","act.paramPlaceholder.servers":"1.1.1.1, 8.8.8.8","act.selectPlaceholder":"\u8BF7\u9009\u62E9\u2026","act.mode.trash":"\u79FB\u5230\u5E9F\u7EB8\u7BD3","act.mode.delete":"\u6C38\u4E45\u5220\u9664","act.kind.HostName":"\u4E3B\u673A\u540D","act.kind.ComputerName":"\u7535\u8111\u540D\u79F0","act.kind.LocalHostName":"\u672C\u5730\u4E3B\u673A\u540D","act.invalidNumber":"\u8BF7\u8F93\u5165 {min}\u2013{max} \u4E4B\u95F4\u7684\u6570\u5B57","act.invalidRequired":"\u8BF7\u586B\u5199 {name}","act.invalidSelect":"\u8BF7\u9009\u62E9 {name}","act.footerHint":"\u6240\u6709\u64CD\u4F5C\u90FD\u901A\u8FC7\u53D7\u9650\u7684\u672C\u5730\u63A5\u53E3\u6267\u884C\u3002","action.process.signal":"\u5411\u8FDB\u7A0B\u53D1\u9001\u4FE1\u53F7","action.process.signal.desc":"\u5411\u6307\u5B9A PID \u53D1\u9001 TERM\u3001KILL \u7B49 Unix \u4FE1\u53F7\u3002","action.app.quit":"\u9000\u51FA\u5E94\u7528","action.app.quit.desc":"\u8BF7\u6C42\u6307\u5B9A\u5E94\u7528\u6B63\u5E38\u9000\u51FA\u3002","action.app.launch":"\u542F\u52A8\u5E94\u7528","action.app.launch.desc":"\u901A\u8FC7\u5E94\u7528\u8DEF\u5F84\u6253\u5F00\u5E94\u7528\u3002","action.app.reveal":"\u5728\u8BBF\u8FBE\u4E2D\u663E\u793A","action.app.reveal.desc":"\u5728\u8BBF\u8FBE\u4E2D\u5B9A\u4F4D\u5E94\u7528\u7684\u4F4D\u7F6E\u3002","action.app.uninstall":"\u5378\u8F7D\u5E94\u7528","action.app.uninstall.desc":"\u628A\u5E94\u7528\u79FB\u5165\u5E9F\u7EB8\u7BD3\u6216\u6C38\u4E45\u5220\u9664\u3002","action.system.setHostname":"\u4FEE\u6539\u4E3B\u673A\u540D","action.system.setHostname.desc":"\u8BBE\u7F6E\u4E3B\u673A\u540D\u3001\u7535\u8111\u540D\u79F0\u6216\u672C\u5730\u4E3B\u673A\u540D\u3002","action.system.setVolume":"\u8C03\u6574\u97F3\u91CF","action.system.setVolume.desc":"\u628A\u8F93\u51FA\u97F3\u91CF\u8BBE\u4E3A 0\u2013100\u3002","action.system.setDarkMode":"\u5207\u6362\u6DF1\u8272\u6A21\u5F0F","action.system.setDarkMode.desc":"\u5F00\u542F\u6216\u5173\u95ED\u7CFB\u7EDF\u6DF1\u8272\u5916\u89C2\u3002","action.system.launchAgent":"\u7BA1\u7406\u542F\u52A8\u4EE3\u7406","action.system.launchAgent.desc":"\u8F7D\u5165\u6216\u505C\u7528\u6307\u5B9A\u7684 launchd \u4EE3\u7406\u3002","action.system.openSettings":"\u6253\u5F00\u7CFB\u7EDF\u8BBE\u7F6E","action.system.openSettings.desc":"\u8DF3\u8F6C\u5230\u6307\u5B9A\u7684\u7CFB\u7EDF\u8BBE\u7F6E\u9762\u677F\u3002","action.system.toggleFirewall":"\u5207\u6362\u9632\u706B\u5899","action.system.toggleFirewall.desc":"\u5F00\u542F\u6216\u5173\u95ED macOS \u5E94\u7528\u9632\u706B\u5899\u3002","action.system.flushDNS":"\u6E05\u7A7A DNS \u7F13\u5B58","action.system.flushDNS.desc":"\u5237\u65B0\u7CFB\u7EDF DNS \u89E3\u6790\u7F13\u5B58\u3002","action.system.emptyTrash":"\u6E05\u7A7A\u5E9F\u7EB8\u7BD3","action.system.emptyTrash.desc":"\u6C38\u4E45\u5220\u9664\u5E9F\u7EB8\u7BD3\u4E2D\u7684\u6240\u6709\u9879\u76EE\u3002","action.network.setWifiPower":"\u5207\u6362 Wi-Fi","action.network.setWifiPower.desc":"\u5F00\u542F\u6216\u5173\u95ED Wi-Fi \u65E0\u7EBF\u7F51\u7EDC\u3002","action.network.setDns":"\u8BBE\u7F6E DNS","action.network.setDns.desc":"\u4E3A\u7F51\u7EDC\u670D\u52A1\u6307\u5B9A DNS \u670D\u52A1\u5668\u3002","action.power.sleep":"\u8FDB\u5165\u7761\u7720","action.power.sleep.desc":"\u8BA9\u8BBE\u5907\u7ACB\u5373\u8FDB\u5165\u7761\u7720\u3002","action.power.lock":"\u9501\u5B9A\u5C4F\u5E55","action.power.lock.desc":"\u7ACB\u5373\u9501\u5B9A\u5F53\u524D\u5C4F\u5E55\u4F1A\u8BDD\u3002","action.software.brewUninstall":"\u5378\u8F7D Homebrew \u5305","action.software.brewUninstall.desc":"\u901A\u8FC7 Homebrew \u5378\u8F7D\u6307\u5B9A\u8F6F\u4EF6\u5305\u3002","action.software.wingetUninstall":"\u5378\u8F7D winget \u8F6F\u4EF6\u5305","action.software.wingetUninstall.desc":"\u901A\u8FC7 winget \u5378\u8F7D\u6307\u5B9A ID \u7684\u8F6F\u4EF6\u5305\uFF08Windows\uFF09\u3002","sw.uninstallBodyWin":"\u5C06\u8C03\u7528\u8BE5\u5E94\u7528\u81EA\u5E26\u7684\u5378\u8F7D\u7A0B\u5E8F\uFF08\u53EF\u80FD\u9700\u8981\u7BA1\u7406\u5458\u786E\u8BA4\uFF09\uFF0C\u5378\u8F7D\u540E\u65E0\u6CD5\u4ECE\u5E9F\u7EB8\u7BD3\u6062\u590D\u3002","sw.winget":"winget \u5305\u7BA1\u7406\u5668","sw.wingetAvailable":"winget \u53EF\u7528","sw.wingetUnavailable":"winget \u4E0D\u53EF\u7528","sw.wingetHint":"\u53EF\u5728\u300C\u64CD\u4F5C\u300D\u9875\u7528 software.wingetUninstall \u5378\u8F7D\u6307\u5B9A ID \u7684\u8F6F\u4EF6\u5305\u3002","dialog.title":"\u8BF7\u786E\u8BA4","dialog.details":"\u64CD\u4F5C\u8BE6\u60C5","toast.dismiss":"\u5173\u95ED\u901A\u77E5","toast.ok":"\u64CD\u4F5C\u5B8C\u6210","toast.fail":"\u64CD\u4F5C\u5931\u8D25","toast.action.ok":"{action} \u5DF2\u5B8C\u6210","toast.action.fail":"{action} \u5931\u8D25","error.title":"\u65E0\u6CD5\u8FDE\u63A5\u5230\u8BBE\u5907\u670D\u52A1","error.body":"\u8BF7\u786E\u8BA4 Device X \u63D2\u4EF6\u5DF2\u5B89\u88C5\u5E76\u5728\u5F53\u524D DSH \u5B9E\u4F8B\u4E2D\u8FD0\u884C\uFF0C\u7136\u540E\u91CD\u8BD5\u3002","error.section":"\u8BE5\u533A\u57DF\u52A0\u8F7D\u5931\u8D25","error.sectionHint":"\u6570\u636E\u53EF\u80FD\u6682\u65F6\u4E0D\u53EF\u7528\uFF0C\u53EF\u4EE5\u91CD\u8BD5\u3002","error.render":"\u9875\u9762\u7EC4\u4EF6\u6E32\u67D3\u5931\u8D25","error.stale":"\u8FDE\u63A5\u4E2D\u65AD\uFF0C\u5F53\u524D\u663E\u793A\u4E0A\u6B21\u83B7\u53D6\u7684\u6570\u636E","error.staleRetry":"\u91CD\u65B0\u8FDE\u63A5","guard.title":"\u8FD9\u4E00\u5757\u5185\u5BB9\u51FA\u9519\u4E86","guard.retry":"\u91CD\u65B0\u6E32\u67D3","loading.title":"\u6B63\u5728\u8FDE\u63A5\u8BBE\u5907\u670D\u52A1\u2026","loading.sectionHint":"\u6B63\u5728\u52A0\u8F7D\u8BE5\u5206\u533A\u6570\u636E\u2026\u9996\u6B21\u6253\u5F00\u53EF\u80FD\u9700\u8981\u51E0\u79D2\uFF08Windows \u7684 PowerShell \u91C7\u96C6\u8F83\u6162\uFF09\u3002","aria.tabs":"\u8BBE\u5907\u5206\u533A","aria.status":"\u8FDE\u63A5\u72B6\u6001","aria.close":"\u5173\u95ED\u5F39\u7A97","aria.alert":"\u63D0\u9192","aria.refresh":"\u5237\u65B0\u6570\u636E","aria.motion":"3D \u52A8\u6548","aria.signal":"\u9009\u62E9\u4FE1\u53F7","aria.switch":"\u5F00\u5173","aria.wifiBars":"Wi-Fi \u4FE1\u53F7\u5F3A\u5EA6","overview.kpi.temp":"\u6E29\u5EA6","hw.thermal.title":"\u6E29\u5EA6\u4E0E\u6563\u70ED","hw.thermal.subtitle":"\u53EA\u8BFB\u4F20\u611F\u5668\u8BFB\u6570","hw.thermal.cpu":"CPU \u6E29\u5EA6","hw.thermal.gpu":"GPU \u6E29\u5EA6","hw.thermal.battery":"\u7535\u6C60\u6E29\u5EA6","hw.thermal.nvme":"SSD \u6E29\u5EA6","hw.thermal.pressure":"\u70ED\u538B\u529B","hw.thermal.fans":"\u98CE\u6247","hw.thermal.fan":"\u98CE\u6247 {name}","hw.thermal.noFans":"\u672A\u8BFB\u53D6\u5230\u98CE\u6247\u8F6C\u901F","hw.thermal.none":"\u5F53\u524D\u5E73\u53F0\u672A\u516C\u5F00\u53EF\u8BFB\u6E29\u5EA6\u4F20\u611F\u5668","hw.thermal.sources":"\u6570\u636E\u6765\u6E90","hw.thermal.note.cpu-needs-admin":"macOS \u4E0D\u5411\u666E\u901A\u7528\u6237\u516C\u5F00 CPU / GPU \u6E29\u5EA6\uFF1B\u5B89\u88C5 smctemp \u6216 osx-cpu-temp\uFF0C\u6216\u4EE5\u7BA1\u7406\u5458\u8EAB\u4EFD\u8FD0\u884C DSH \u53EF\u89E3\u9501\u3002","hw.thermal.note.wmi-unsupported":"\u6B64\u4E3B\u677F\u672A\u901A\u8FC7 WMI \u516C\u5F00 ACPI \u70ED\u533A\u6E29\u5EA6\uFF08\u90E8\u5206\u8BBE\u5907\u6216\u865A\u62DF\u673A\u4E0D\u652F\u6301\uFF09\uFF0C\u53EA\u80FD\u663E\u793A\u5176\u5B83\u6E29\u5EA6\u6765\u6E90\u3002","hw.thermal.note.unavailable":"\u5F53\u524D\u5E73\u53F0\u6CA1\u6709\u53EF\u7528\u7684\u6E29\u5EA6\u6570\u636E\u6E90\u3002","hw.thermal.pressure.nominal":"\u6B63\u5E38","hw.thermal.pressure.fair":"\u504F\u9AD8","hw.thermal.pressure.serious":"\u5F88\u9AD8","hw.thermal.pressure.critical":"\u4E34\u754C","hw.drivers.title":"\u9A71\u52A8\u4E0E\u5185\u6838\u6269\u5C55","hw.drivers.subtitle":"\u53EA\u8BFB\u6E05\u5355\uFF0C\u4E0D\u6267\u884C\u66F4\u65B0","hw.drivers.search":"\u641C\u7D22\u9A71\u52A8\u2026","hw.drivers.total":"\u5171 {n} \u4E2A","hw.drivers.thirdParty":"\u7B2C\u4E09\u65B9 {n}","hw.drivers.problems":"\u5F02\u5E38\u8BBE\u5907 {n}","hw.drivers.name":"\u8BBE\u5907 / \u540D\u79F0","hw.drivers.class":"\u7C7B\u522B","hw.drivers.vendor":"\u5382\u5546","hw.drivers.version":"\u7248\u672C","hw.drivers.date":"\u65E5\u671F","hw.drivers.signer":"\u7B7E\u540D\u65B9","hw.drivers.kind":"\u7C7B\u578B","hw.drivers.none":"\u672A\u8BFB\u53D6\u5230\u9A71\u52A8\u6E05\u5355","hw.drivers.noMatch":"\u6CA1\u6709\u5339\u914D\u7684\u9A71\u52A8","hw.drivers.problemCode":"\u9519\u8BEF\u7801 {code}","hw.drivers.readOnly":"\u6E05\u5355\u4E3A\u53EA\u8BFB\uFF1A\u4E0D\u63D0\u4F9B\u9A71\u52A8\u66F4\u65B0\u6216\u56DE\u6EDA\u3002","cleanup.intro":"\u626B\u63CF\u7F13\u5B58\u3001\u65E5\u5FD7\u3001\u5E9F\u7EB8\u7BD3\u548C\u5F00\u53D1\u7F13\u5B58\u7B49\u53EF\u5B89\u5168\u6E05\u7406\u7684\u4F4D\u7F6E\u3002\u53EA\u626B\u63CF\uFF0C\u9009\u4E2D\u5E76\u786E\u8BA4\u540E\u624D\u4F1A\u5220\u9664\u3002","cleanup.scan":"\u91CD\u65B0\u626B\u63CF","cleanup.scanning":"\u6B63\u5728\u626B\u63CF\u2026","cleanup.reclaimable":"\u53EF\u6E05\u7406","cleanup.files":"{n} \u4E2A\u6587\u4EF6","cleanup.selected":"\u5DF2\u9009 {value}","cleanup.selectAll":"\u5168\u9009","cleanup.selectNone":"\u5168\u4E0D\u9009","cleanup.delete":"\u6E05\u7406\u6240\u9009","cleanup.deleting":"\u6B63\u5728\u6E05\u7406\u2026","cleanup.confirmTitle":"\u786E\u8BA4\u6E05\u7406\u6240\u9009\u5185\u5BB9\uFF1F","cleanup.confirmBody":"\u5C06\u6C38\u4E45\u5220\u9664 {value}\uFF08{n} \u4E2A\u6587\u4EF6\uFF09\u3002\u6B64\u64CD\u4F5C\u4E0D\u53EF\u64A4\u9500\u3002","cleanup.confirmLabel":"\u786E\u8BA4\u6E05\u7406","cleanup.cancel":"\u53D6\u6D88","cleanup.noneSelected":"\u8BF7\u5148\u9009\u62E9\u8981\u6E05\u7406\u7684\u9879\u76EE","cleanup.done":"\u5DF2\u6E05\u7406 {value}","cleanup.empty":"\u6CA1\u6709\u627E\u5230\u53EF\u6E05\u7406\u7684\u5185\u5BB9","cleanup.error":"\u8BFB\u53D6\u6E05\u7406\u6570\u636E\u5931\u8D25","cleanup.item.cache":"\u7F13\u5B58","cleanup.item.logs":"\u65E5\u5FD7","cleanup.item.trash":"\u5E9F\u7EB8\u7BD3","cleanup.item.temp":"\u4E34\u65F6\u6587\u4EF6","cleanup.item.developer":"\u5F00\u53D1\u7F13\u5B58","cleanup.item.updates":"\u66F4\u65B0\u7F13\u5B58","cleanup.admin":"\u9700\u8981\u7BA1\u7406\u5458","cleanup.adminHint":"\u8BE5\u9879\u9700\u8981\u4EE5\u7BA1\u7406\u5458\u6743\u9650\u8FD0\u884C DSH \u624D\u80FD\u6E05\u7406","cleanup.path":"\u4F4D\u7F6E","cleanup.updated":"\u626B\u63CF\u4E8E {time}","cleanup.scanEmpty":"\u6CA1\u6709\u53EF\u6E05\u7406\u7684\u9879\u76EE","bench.intro":"\u56FA\u5B9A\u5DE5\u4F5C\u91CF\u3001\u53EF\u91CD\u590D\u7684\u672C\u673A\u57FA\u51C6\u6D4B\u8BD5\u3002\u5206\u6570\u7528\u4E8E\u540C\u4E00\u53F0\u673A\u5668\u524D\u540E\u5BF9\u6BD4\uFF0C\u4E0D\u4E0E\u5176\u5B83\u673A\u578B\u6216\u8DD1\u5206\u8F6F\u4EF6\u6A2A\u5411\u6BD4\u8F83\u3002","bench.run":"\u8FD0\u884C\u5168\u90E8\u6D4B\u8BD5","bench.rerun":"\u518D\u6B21\u8FD0\u884C","bench.running":"\u6B63\u5728\u6D4B\u8BD5\u2026","bench.runningHint":"CPU \u591A\u7EBF\u7A0B\u4E0E\u78C1\u76D8\u6D4B\u8BD5\u9700\u8981\u51E0\u79D2\u949F\uFF0C\u8BF7\u4FDD\u6301\u9875\u9762\u6253\u5F00\u3002","bench.cpu":"CPU","bench.memory":"\u5185\u5B58","bench.disk":"\u78C1\u76D8","bench.cpuDesc":"\u6574\u6570\u6DF7\u5408\u8FD0\u7B97\uFF0C\u5355\u6838\u4E0E {n} \u7EBF\u7A0B\u591A\u6838","bench.memoryDesc":"\u4E24\u4E2A 32 MiB \u6570\u7EC4\u7684\u56FA\u5B9A\u590D\u5236\u6B21\u6570","bench.diskDesc":"64 MiB \u4E34\u65F6\u6587\u4EF6\u5199\u5165 + \u8BFB\u53D6","bench.single":"\u5355\u6838","bench.multi":"\u591A\u6838","bench.threads":"{n} \u7EBF\u7A0B","bench.write":"\u5199\u5165","bench.read":"\u8BFB\u53D6","bench.score":"\u5F97\u5206","bench.unit":"\u5355\u4F4D","bench.duration":"\u8017\u65F6 {value}","bench.lastRun":"\u4E0A\u6B21\u8FD0\u884C","bench.previous":"\u8F83\u4E0A\u6B21","bench.better":"\u63D0\u5347 {value}","bench.worse":"\u4E0B\u964D {value}","bench.flat":"\u57FA\u672C\u6301\u5E73","bench.noPrevious":"\u9996\u6B21\u8FD0\u884C\uFF0C\u6682\u65E0\u53EF\u5BF9\u6BD4\u7684\u57FA\u7EBF","bench.env":"\u8FD0\u884C\u73AF\u5883","bench.cores":"{n} \u903B\u8F91\u6838\u5FC3","bench.memoryTotal":"{value} \u5185\u5B58","bench.failed":"\u6D4B\u8BD5\u5931\u8D25\uFF1A{message}","bench.empty":"\u70B9\u51FB\u300C\u8FD0\u884C\u5168\u90E8\u6D4B\u8BD5\u300D\u5F00\u59CB","bench.totalDuration":"\u603B\u8017\u65F6 {value}"},Da={panel:"Device X","tab.overview":"Overview","tab.hardware":"Hardware","tab.system":"System","tab.software":"Software","tab.network":"Network","tab.security":"Security","tab.processes":"Processes","tab.actions":"Actions","tab.cleanup":"Cleanup","tab.benchmark":"Benchmark","header.connecting":"Connecting","header.live":"Live","header.stale":"Disconnected","header.offline":"Offline","header.updated":"Updated {time}","header.refresh":"Refresh","header.refreshing":"Refreshing\u2026","header.motionOn":"Turn on 3D motion","header.motionOff":"Pause 3D motion","header.uptime":"Uptime","common.retry":"Retry","common.cancel":"Cancel","common.confirm":"Confirm","common.close":"Close","common.loading":"Loading\u2026","common.empty":"No data","common.error":"Failed to load","common.unknown":"Unknown","common.na":"\u2014","common.search":"Search","common.all":"All","common.name":"Name","common.value":"Value","common.status":"Status","common.type":"Type","common.size":"Size","common.usage":"Usage","common.total":"Total","common.used":"Used","common.free":"Free","common.temperature":"Temperature","common.updated":"Updated","common.none":"None","common.on":"On","common.off":"Off","common.yes":"Yes","common.no":"No","common.enabled":"Enabled","common.disabled":"Disabled","common.pending":"Working\u2026","common.refresh":"Refresh","common.admin":"Admin","common.never":"Never","common.notAvailable":"Not available","common.percent":"Percent","common.count":"Count","common.version":"Version","common.path":"Path","common.model":"Model","common.serial":"Serial","common.user":"User","common.pid":"PID","common.process":"Process","common.port":"Port","common.address":"Address","common.source":"Source","common.state":"State","common.load":"Load","common.detail":"Details","common.battery":"Battery","common.wifi":"Wi-Fi","common.cpu":"CPU","common.memory":"Memory","common.disk":"Disk","common.gpu":"GPU","common.current":"Current","common.actions":"Actions","common.cancelConfirm":"Cancel","unit.day":"d","unit.hour":"h","unit.minute":"min","unit.lessThanMinute":"less than a minute","overview.kpi.cpu":"Processor","overview.kpi.memory":"Memory","overview.kpi.disk":"Disk","overview.kpi.battery":"Battery","overview.kpi.network":"Network","overview.kpi.load":"Load","overview.kpi.pressure":"Memory pressure","overview.kpi.cores":"{n} cores","overview.kpi.free":"{value} free","overview.kpi.used":"{value} used","overview.kpi.remaining":"{value} left","overview.kpi.charging":"Charging","overview.kpi.plugged":"Plugged in","overview.kpi.onBattery":"On battery","overview.kpi.noBattery":"No battery","overview.kpi.rx":"\u2193 {value}","overview.kpi.tx":"\u2191 {value}","overview.kpi.swap":"Swap {value}","overview.sparkline.cpu":"CPU usage trend","overview.sparkline.memory":"Memory usage trend","overview.sparkline.network":"Network throughput trend","overview.alerts":"Alerts","overview.alerts.none":"All good \u2014 no alerts","overview.alert.memoryHigh":"Memory usage is {percent}, above 85%","overview.alert.cpuHigh":"CPU usage is {percent} and running high","overview.alert.diskHigh":"Disk space is tight at {percent} used","overview.alert.batteryLow":"Low battery ({percent})","overview.alert.memoryPressure":"Memory pressure: {level}","overview.alert.swap":"Swap in use: {value}","overview.alert.thermal":"CPU temperature {temp}\xB0C","overview.top":"Top processes","overview.top.empty":"No process data","overview.memoryBreakdown":"Memory breakdown","overview.breakdown.app":"App memory","overview.breakdown.wired":"Wired memory","overview.breakdown.compressed":"Compressed","overview.breakdown.cached":"File cache","overview.breakdown.free":"Free","overview.memPressure.normal":"Normal","overview.memPressure.warning":"Elevated","overview.memPressure.critical":"Critical","overview.heroCaption":"Live device core","hw.cpu":"Processor","hw.cpuCore":"Per-core usage","hw.memory":"Memory","hw.memoryModules":"Memory modules","hw.graphics":"Graphics & displays","hw.gpu":"Graphics","hw.displays":"Displays","hw.storage":"Storage","hw.drives":"Physical drives","hw.volumes":"Volumes","hw.battery":"Battery health","hw.usb":"USB devices","hw.connections":"Connections","hw.connections.view":"Device type","hw.bluetooth":"Bluetooth","hw.audio":"Audio devices","hw.cameras":"Cameras","hw.cores":"Cores","hw.physical":"Physical cores","hw.logical":"Logical cores","hw.speed":"Speed","hw.arch":"Architecture","hw.vendor":"Vendor","hw.features":"Features","hw.slot":"Slot","hw.manufacturer":"Manufacturer","hw.partNumber":"Part number","hw.mediaType":"Media type","hw.smart":"SMART status","hw.mount":"Mount","hw.fs":"Filesystem","hw.removable":"Removable","hw.internal":"Internal","hw.condition":"Condition","hw.cycles":"Cycle count","hw.health":"Health","hw.designCapacity":"Design capacity","hw.maxCapacity":"Max capacity","hw.connection":"Connection","hw.refreshRate":"Refresh rate","hw.main":"Main display","hw.connected":"Connected","hw.notConnected":"Not connected","hw.chipset":"Chipset","hw.firmware":"Firmware","hw.controller":"Controller","hw.devices":"Devices","hw.default":"Default","hw.kind":"Kind","hw.output":"Output","hw.input":"Input","hw.modelId":"Model ID","hw.uniqueId":"Unique ID","hw.empty":"No devices found","hw.gpuCores":"{n} cores","hw.vram":"VRAM","hw.metal":"Metal","hw.batteryPercent":"{percent} charged","hw.usbSpeed":"Speed","hw.bus":"Bus","hw.noModules":"No module information","hw.batteryNoData":"No battery information","hw.errors":"Some hardware information is unavailable","sys.os":"Operating system","sys.device":"Device","sys.boot":"Boot & uptime","sys.users":"User accounts","sys.currentUser":"Current user","sys.launchAgents":"Launch agents","sys.startupItems":"Startup items","sys.loginItems":"Login items","sys.environment":"Environment","sys.locale":"Locale","sys.hostname":"Hostname","sys.computerName":"Computer name","sys.localHostname":"Local hostname","sys.model":"Model","sys.modelId":"Model ID","sys.chip":"Chip","sys.serial":"Serial","sys.hardwareUuid":"Hardware UUID","sys.name":"Product name","sys.version":"Version","sys.build":"Build","sys.kernel":"Kernel","sys.arch":"Architecture","sys.bootTime":"Boot time","sys.uptime":"Uptime","sys.uid":"UID","sys.gid":"GID","sys.home":"Home","sys.shell":"Shell","sys.fullName":"Full name","sys.adminRole":"Administrator","sys.totalUsers":"Total users","sys.scope":"Scope","sys.loaded":"Loaded","sys.unloaded":"Not loaded","sys.lastExit":"Exit status","sys.program":"Program","sys.enableAgent":"Enable","sys.disableAgent":"Disable","sys.agentConfirmEnable":"Enable launch agent {label}? It will start automatically at login.","sys.agentConfirmDisable":"Disable launch agent {label}?","sys.noAgents":"No launch agents found","sys.noLoginItems":"No login items found","sys.timezone":"Time zone","sys.language":"Language","sys.localeValue":"Locale","sys.envNote":"Only safe, non-sensitive variables are shown","sys.userScope":"User","sys.systemScope":"System","sys.errors":"Some system information is unavailable","sw.applications":"Applications","sw.view":"Switch list","sw.appCount":"{n} applications","sw.search":"Search applications\u2026","sw.sortName":"Sort by name","sw.sortAsc":"Name A\u2192Z","sw.sortDesc":"Name Z\u2192A","sw.sourceFilter":"Source","sw.source.system":"System","sw.source.user":"User","sw.source.other":"Other","sw.reveal":"Reveal in Finder","sw.revealWin":"Show in Explorer","sw.uninstall":"Uninstall\u2026","sw.uninstallTitle":"Uninstall {name}?","sw.uninstallBody":"The app will be moved to the Trash. You can find it in Finder.","fp.title":"Uninstall {name} and its leftovers","fp.scanning":"Looking for files this app left behind\u2026","fp.intro":"These locations were found. Only items that provably belong to this app are preselected.","fp.total":"{n} item(s), {value}","fp.selected":"{value} selected ({n} file(s))","fp.unselectedHint":"{n} more candidate(s) are unselected ({value})","fp.tier.high":"confirmed","fp.tier.medium":"name guess","fp.tier.conflict":"ownership conflict","fp.tier.shared":"shared","fp.tier.sharedHint":"Several products store data here, so it cannot be removed here.","fp.alsoMatched":"May also belong to: {names}","fp.adminHint":"Requires administrator rights; this plugin will not delete it.","fp.warning":"partial measurement","fp.noItems":"No leftover locations were found.","fp.scanFailed":"Could not analyse this app: {message}","fp.confirmTitle":"Uninstall {name}?","fp.confirmBody":"The app and the {n} selected item(s) will be moved to the Trash.","fp.confirmBodyNoCleanup":"The app will be moved to the Trash. Leftovers are kept.","fp.spaceHint":"Moving to the Trash frees no space; emptying it frees {value}.","fp.emptyTrash":"Open cleanup","fp.cleanup":"Uninstall and clean","fp.cleanupNone":"Uninstall only","fp.appRunning":"The app is running. Quit it first.","fp.unsupported":"Leftover cleanup is not supported on this platform yet; listing only.","fp.bundleIdLabel":"Bundle ID","fp.sandboxed":"sandboxed","fp.notSandboxed":"not sandboxed","sw.bundleId":"Bundle ID","sw.arch":"Architecture","sw.lastUsed":"Last used","sw.homebrew":"Homebrew","sw.brewInstalled":"Installed","sw.brewOutdated":"Outdated","sw.brewNotAvailable":"Homebrew not found","sw.brewUninstall":"Uninstall\u2026","sw.brewConfirmTitle":"Uninstall Homebrew package {name}?","sw.brewConfirmBody":"This removes {name} and its dependencies. It may need to be reinstalled later.","sw.noApps":"No matching applications","sw.noBrew":"No Homebrew packages installed","sw.loadingApps":"Reading the application list\u2026","sw.systemAppNote":"System apps cannot be uninstalled","sw.size":"Size","sw.errors":"Some software information is unavailable","net.interfaces":"Interfaces","net.wifi":"Wi-Fi","net.route":"Default route","net.dns":"DNS","net.proxy":"Proxy","net.ports":"Listening ports","net.established":"Established connections","net.establishedCount":"{n}","net.notConnected":"Wi-Fi not connected","net.ssid":"Network name","net.bssid":"BSSID","net.rssi":"Signal","net.signalLevel":"Signal {level}/4","net.noise":"Noise","net.channel":"Channel","net.security":"Security","net.txRate":"Tx rate","net.ipv4":"IPv4","net.ipv6":"IPv6","net.mac":"MAC address","net.mtu":"MTU","net.interface":"Interface","net.up":"Up","net.down":"Down","net.primary":"Primary","net.gateway":"Gateway","net.servers":"DNS servers","net.searchDomains":"Search domains","net.http":"HTTP","net.https":"HTTPS","net.socks":"SOCKS","net.none":"Not set","net.proto":"Protocol","net.wifiPowerOn":"Turn Wi-Fi off","net.wifiPowerOff":"Turn Wi-Fi on","net.setDns":"Set DNS\u2026","net.openSettings":"Open Network Settings","net.dnsTitle":"Set DNS","net.dnsBody":"Set up to 4 DNS servers for {service}. Leave empty to use automatic DNS.","net.dnsService":"Network service","net.dnsServers":"DNS servers","net.dnsServersPlaceholder":"One per line or comma separated, e.g. 1.1.1.1","net.dnsInvalid":"Enter 0\u20134 valid IPv4 addresses","net.dnsApplied":"DNS updated: {service}","net.wifiOn":"Wi-Fi turned on","net.wifiOff":"Wi-Fi turned off","net.confirmWifiOff":"Turn Wi-Fi off?","net.confirmWifiOn":"Turn Wi-Fi on?","net.noInterfaces":"No network interfaces found","net.noPorts":"No listening ports","net.type.wifi":"Wi-Fi","net.type.ethernet":"Ethernet","net.type.loopback":"Loopback","net.type.bridge":"Bridge","net.type.other":"Other","net.ipNone":"Unassigned","net.errors":"Some network information is unavailable","sec.fileVault":"FileVault","sec.sip":"System Integrity Protection","sec.gatekeeper":"Gatekeeper","sec.bitlocker":"BitLocker drive encryption","sec.secureBoot":"Secure Boot","sec.defender":"Windows Defender","sec.firewall":"Firewall","sec.tcc":"Privacy permissions","sec.admins":"Admin accounts","sec.remoteLogin":"Remote login","sec.autoLogin":"Auto login","sec.on":"On","sec.off":"Off","sec.unknown":"Unknown","sec.stealth":"Stealth mode","sec.paneTitle":"System Settings panes","sec.openFileVault":"Open FileVault Settings","sec.openPrivacyWin":"Open privacy settings","sec.openSecurityWin":"Open Windows Security","sec.openFirewall":"Open Firewall Settings","sec.openSharing":"Open Sharing Settings","sec.openUsers":"Open Users & Groups","sec.flushDns":"Flush DNS cache","sec.emptyTrash":"Empty Trash","sec.toggleFirewallOff":"Turn firewall off","sec.toggleFirewallOn":"Turn firewall on","sec.confirmFlushDns":"Flush the DNS cache?","sec.confirmFlushDnsBody":"System caches will be cleared and in-flight lookups may retry briefly.","sec.confirmEmptyTrash":"Empty the Trash?","sec.confirmEmptyTrashBody":"Items in the Trash will be permanently deleted and cannot be recovered.","sec.confirmFirewallOff":"Turn off the firewall?","sec.confirmFirewallOffBody":"This weakens network protection. Only do it when you are sure.","sec.confirmFirewallOn":"Turn on the firewall?","sec.confirmFirewallOnBody":"This enables the built-in macOS firewall.","sec.tccReadable":"These apps hold these permissions","sec.tccUnreadable":"The privacy database cannot be read (Full Disk Access is required).","sec.tccUnreadableWin":"Windows does not expose a per-app consent store; review privacy permissions in Settings.","sec.tccReason":"Reason: {reason}","sec.service":"Permission","sec.client":"App","sec.noGrants":"No permission records to show","sec.remoteLoginOn":"Remote login is on","sec.remoteLoginOff":"Remote login is off","sec.autoLoginOff":"Auto login is off","sec.autoLoginUser":"Auto login: {user}","sec.adminsCount":"{n} administrators","sec.usersCount":"{n} users total","sec.noAdmins":"No administrators found","sec.errors":"Some security information is unavailable","proc.search":"Search processes\u2026","proc.total":"{n} processes","proc.kill":"End\u2026","proc.signal":"Signal","proc.confirmTitle":"End process {name}?","proc.confirmBody":"Process {name} (PID {pid}) will receive the {signal} signal.","proc.sortByCpu":"Sort by CPU","proc.sortDesc":"Descending","proc.sortAsc":"Ascending","proc.empty":"No matching processes","proc.refresh":"Refresh processes","proc.rss":"Memory","proc.elapsed":"Elapsed","proc.ppid":"PPID","proc.command":"Command","proc.byUser":"By user","proc.signal.TERM":"Terminate (TERM)","proc.signal.KILL":"Force kill (KILL)","proc.signal.INT":"Interrupt (INT)","proc.signal.STOP":"Suspend (STOP)","proc.signal.CONT":"Resume (CONT)","proc.errors":"Some process information is unavailable","act.catalog":"Action catalog","act.groups.process":"Processes","act.groups.app":"Applications","act.groups.system":"System","act.groups.network":"Network","act.groups.software":"Software","act.groups.power":"Power","act.run":"Run","act.runTitle":"Run {action}?","act.runBody":"This invokes system interfaces. Some actions cannot be undone.","act.params":"Parameters","act.noParams":"No parameters","act.required":"Required","act.requiresAdmin":"Requires admin","act.history":"History","act.historyEmpty":"No actions yet","act.historyOk":"Succeeded","act.historyFail":"Failed","act.danger.low":"Low risk","act.danger.medium":"Medium risk","act.danger.high":"High risk","act.pending":"Running\u2026","act.resultOk":"Action completed","act.resultFail":"Action failed","act.empty":"No actions in this group","act.param.pid":"PID","act.param.signal":"Signal","act.param.name":"Name","act.param.path":"Path","act.param.mode":"Mode","act.param.kind":"Type","act.param.value":"Value","act.param.percent":"Volume","act.param.enabled":"Enabled","act.param.pane":"Pane","act.param.service":"Network service","act.param.servers":"DNS servers","act.paramPlaceholder.pid":"Process ID","act.paramPlaceholder.name":"Name","act.paramPlaceholder.path":"/Applications/Foo.app","act.paramPlaceholder.value":"New value","act.paramPlaceholder.pane":"Pane identifier","act.paramPlaceholder.service":"Wi-Fi","act.paramPlaceholder.servers":"1.1.1.1, 8.8.8.8","act.selectPlaceholder":"Select\u2026","act.mode.trash":"Move to Trash","act.mode.delete":"Delete permanently","act.kind.HostName":"Host name","act.kind.ComputerName":"Computer name","act.kind.LocalHostName":"Local host name","act.invalidNumber":"Enter a number between {min} and {max}","act.invalidRequired":"Please fill in {name}","act.invalidSelect":"Please choose {name}","act.footerHint":"Every action goes through a restricted local API.","action.process.signal":"Signal a process","action.process.signal.desc":"Send a Unix signal such as TERM or KILL to a PID.","action.app.quit":"Quit application","action.app.quit.desc":"Ask the given application to quit gracefully.","action.app.launch":"Launch application","action.app.launch.desc":"Open an application by path.","action.app.reveal":"Reveal in Finder","action.app.reveal.desc":"Reveal an application's location in Finder.","action.app.uninstall":"Uninstall application","action.app.uninstall.desc":"Move an app to the Trash or delete it permanently.","action.system.setHostname":"Set host name","action.system.setHostname.desc":"Change the host name, computer name, or local host name.","action.system.setVolume":"Set volume","action.system.setVolume.desc":"Set the output volume from 0 to 100.","action.system.setDarkMode":"Toggle dark mode","action.system.setDarkMode.desc":"Turn the system dark appearance on or off.","action.system.launchAgent":"Manage launch agent","action.system.launchAgent.desc":"Load or unload a launchd agent plist.","action.system.openSettings":"Open System Settings","action.system.openSettings.desc":"Jump to a specific System Settings pane.","action.system.toggleFirewall":"Toggle firewall","action.system.toggleFirewall.desc":"Turn the macOS application firewall on or off.","action.system.flushDNS":"Flush DNS cache","action.system.flushDNS.desc":"Refresh the system DNS resolver cache.","action.system.emptyTrash":"Empty Trash","action.system.emptyTrash.desc":"Permanently delete everything in the Trash.","action.network.setWifiPower":"Toggle Wi-Fi","action.network.setWifiPower.desc":"Turn Wi-Fi power on or off.","action.network.setDns":"Set DNS","action.network.setDns.desc":"Assign DNS servers to a network service.","action.power.sleep":"Sleep","action.power.sleep.desc":"Put the device to sleep immediately.","action.power.lock":"Lock screen","action.power.lock.desc":"Lock the current screen session immediately.","action.software.brewUninstall":"Uninstall Homebrew package","action.software.brewUninstall.desc":"Remove a package through Homebrew.","action.software.wingetUninstall":"Uninstall winget package","action.software.wingetUninstall.desc":"Remove a package by its winget id (Windows).","sw.uninstallBodyWin":"The application's own uninstaller runs (it may ask for administrator confirmation). This cannot be restored from the Recycle Bin.","sw.winget":"winget package manager","sw.wingetAvailable":"winget available","sw.wingetUnavailable":"winget unavailable","sw.wingetHint":"Use software.wingetUninstall on the Actions tab to remove a package by id.","dialog.title":"Confirm","dialog.details":"Details","toast.dismiss":"Dismiss notification","toast.ok":"Action completed","toast.fail":"Action failed","toast.action.ok":"{action} completed","toast.action.fail":"{action} failed","error.title":"Cannot reach the device service","error.body":"Make sure the Device X plugin is installed and running in this DSH instance, then retry.","error.section":"This section failed to load","error.sectionHint":"The data may be temporarily unavailable. Try again.","error.render":"A page widget failed to render","error.stale":"Connection lost \u2014 showing the last known data","error.staleRetry":"Reconnect","guard.title":"This widget hit an error","guard.retry":"Remount","loading.title":"Connecting to the device service\u2026","loading.sectionHint":"Loading this section\u2026 the first open can take a few seconds while Windows PowerShell providers warm up.","aria.tabs":"Device sections","aria.status":"Connection status","aria.close":"Close dialog","aria.alert":"Alerts","aria.refresh":"Refresh data","aria.motion":"3D motion","aria.signal":"Choose a signal","aria.switch":"Switch","aria.wifiBars":"Wi-Fi signal strength","overview.kpi.temp":"Temperature","hw.thermal.title":"Thermals","hw.thermal.subtitle":"Read-only sensor readings","hw.thermal.cpu":"CPU temperature","hw.thermal.gpu":"GPU temperature","hw.thermal.battery":"Battery temperature","hw.thermal.nvme":"SSD temperature","hw.thermal.pressure":"Thermal pressure","hw.thermal.fans":"Fans","hw.thermal.fan":"Fan {name}","hw.thermal.noFans":"No fan readings available","hw.thermal.none":"This platform exposes no readable temperature sensor","hw.thermal.sources":"Sources","hw.thermal.note.cpu-needs-admin":"macOS does not expose CPU / GPU temperature to normal users; install smctemp or osx-cpu-temp, or run DSH as an administrator to unlock it.","hw.thermal.note.wmi-unsupported":"This board does not expose ACPI thermal-zone temperatures through WMI (some devices and VMs do not); only the other sources are shown.","hw.thermal.note.unavailable":"No temperature source is available on this platform.","hw.thermal.pressure.nominal":"Nominal","hw.thermal.pressure.fair":"Fair","hw.thermal.pressure.serious":"Serious","hw.thermal.pressure.critical":"Critical","hw.drivers.title":"Drivers & kernel extensions","hw.drivers.subtitle":"Read-only inventory, never updates","hw.drivers.search":"Search drivers\u2026","hw.drivers.total":"{n} total","hw.drivers.thirdParty":"{n} third-party","hw.drivers.problems":"{n} problem devices","hw.drivers.name":"Device / name","hw.drivers.class":"Class","hw.drivers.vendor":"Vendor","hw.drivers.version":"Version","hw.drivers.date":"Date","hw.drivers.signer":"Signer","hw.drivers.kind":"Kind","hw.drivers.none":"No driver inventory was read","hw.drivers.noMatch":"No matching driver","hw.drivers.problemCode":"Error code {code}","hw.drivers.readOnly":"Read-only inventory: no driver updates or rollback.","cleanup.intro":"Scans caches, logs, trash and developer caches that are safe to clear. Scanning is read-only; nothing is deleted until you select items and confirm.","cleanup.scan":"Rescan","cleanup.scanning":"Scanning\u2026","cleanup.reclaimable":"Reclaimable","cleanup.files":"{n} files","cleanup.selected":"{value} selected","cleanup.selectAll":"Select all","cleanup.selectNone":"Clear selection","cleanup.delete":"Clean selected","cleanup.deleting":"Cleaning\u2026","cleanup.confirmTitle":"Clean the selected items?","cleanup.confirmBody":"This permanently deletes {value} ({n} files). It cannot be undone.","cleanup.confirmLabel":"Clean now","cleanup.cancel":"Cancel","cleanup.noneSelected":"Select at least one item first","cleanup.done":"Cleaned {value}","cleanup.empty":"Nothing to clean was found","cleanup.error":"Failed to read cleanup data","cleanup.item.cache":"Caches","cleanup.item.logs":"Logs","cleanup.item.trash":"Trash","cleanup.item.temp":"Temporary files","cleanup.item.developer":"Developer caches","cleanup.item.updates":"Update caches","cleanup.admin":"Needs admin","cleanup.adminHint":"This item requires DSH to run with administrator rights","cleanup.path":"Location","cleanup.updated":"Scanned at {time}","cleanup.scanEmpty":"No cleanable items","bench.intro":"Fixed-work, repeatable local benchmark. Scores are for comparing this machine over time \u2014 not against other models or benchmark suites.","bench.run":"Run all tests","bench.rerun":"Run again","bench.running":"Benchmarking\u2026","bench.runningHint":"The multi-thread CPU and disk tests take a few seconds; keep this page open.","bench.cpu":"CPU","bench.memory":"Memory","bench.disk":"Disk","bench.cpuDesc":"Integer mix, single core plus {n} threads","bench.memoryDesc":"Fixed copy passes over two 32 MiB arrays","bench.diskDesc":"64 MiB temp file write + read","bench.single":"Single","bench.multi":"Multi","bench.threads":"{n} threads","bench.write":"Write","bench.read":"Read","bench.score":"Score","bench.unit":"Unit","bench.duration":"Took {value}","bench.lastRun":"Last run","bench.previous":"vs previous","bench.better":"Up {value}","bench.worse":"Down {value}","bench.flat":"About the same","bench.noPrevious":"First run \u2014 no baseline yet","bench.env":"Environment","bench.cores":"{n} logical cores","bench.memoryTotal":"{value} memory","bench.failed":"Test failed: {message}","bench.empty":"Press \u201CRun all tests\u201D to start","bench.totalDuration":"Total {value}"};var ht=`/*
|
|
4
|
+
* Device X client stylesheet \u2014 theme-token based, light/dark aware.
|
|
5
|
+
*
|
|
6
|
+
* DSH serves browser plugins as JavaScript only, so this file is not fetched
|
|
7
|
+
* at runtime: both build engines compile it into the single-file client bundle
|
|
8
|
+
* as a string, and core.js injects it as one disposable <style data-devicex>
|
|
9
|
+
* element in <head> (the shipped harness precedent).
|
|
10
|
+
*
|
|
11
|
+
* Visual language: Ant Design. 8-pt spacing rhythm, compact type scale,
|
|
12
|
+
* 6/8 px radii, bordered cards with a divided header, restrained neutral
|
|
13
|
+
* surfaces, semantic colour reserved for state, one shared control height.
|
|
14
|
+
* Colours use only the alias tokens from the build contract plus color-mix()
|
|
15
|
+
* derivatives; literal colours appear only in the 3D artwork and SVG charts.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
.dx-root {
|
|
19
|
+
/* local design tokens: scale, not one-off values */
|
|
20
|
+
--dx-r-xs: 4px;
|
|
21
|
+
--dx-r-sm: 6px;
|
|
22
|
+
--dx-r-md: 8px;
|
|
23
|
+
--dx-r-lg: 10px;
|
|
24
|
+
--dx-control: 32px;
|
|
25
|
+
--dx-control-sm: 28px;
|
|
26
|
+
--dx-font-xs: 12px;
|
|
27
|
+
--dx-font-sm: 12px;
|
|
28
|
+
--dx-font-md: 13px;
|
|
29
|
+
--dx-font-lg: 14px;
|
|
30
|
+
--dx-text-strong: 600;
|
|
31
|
+
--dx-ease: cubic-bezier(.4, 0, .2, 1);
|
|
32
|
+
--dx-shadow-1: 0 1px 2px color-mix(in srgb, var(--dsw-alias-label-primary) 5%, transparent);
|
|
33
|
+
--dx-shadow-2: 0 6px 18px color-mix(in srgb, var(--dsw-alias-label-primary) 10%, transparent);
|
|
34
|
+
--dx-shadow-3: 0 18px 48px color-mix(in srgb, var(--dsw-alias-label-primary) 18%, transparent);
|
|
35
|
+
--dx-ring: 0 0 0 3px color-mix(in srgb, var(--dsw-alias-brand-primary) 18%, transparent);
|
|
36
|
+
--dx-tint-brand: color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, transparent);
|
|
37
|
+
/* Layer-2 is pure white in the light theme, so subtle fills are derived
|
|
38
|
+
* from the label colour instead: Ant's #fafafa surfaces in both themes. */
|
|
39
|
+
--dx-surface-2: color-mix(in srgb, var(--dsw-alias-label-primary) 5%, var(--dsw-alias-bg-layer-1));
|
|
40
|
+
--dx-surface-3: color-mix(in srgb, var(--dsw-alias-label-primary) 8%, var(--dsw-alias-bg-layer-1));
|
|
41
|
+
--dx-hover: color-mix(in srgb, var(--dsw-alias-label-primary) 4%, transparent);
|
|
42
|
+
--dx-press: color-mix(in srgb, var(--dsw-alias-label-primary) 7%, transparent);
|
|
43
|
+
/* Header top inset. On macOS the window strip below the traffic lights is
|
|
44
|
+
* only ours when the sidebar is hidden (collapsed or in drawer mode): then the
|
|
45
|
+
* page reaches the window's top-left corner and must clear the controls. With
|
|
46
|
+
* the sidebar open that strip belongs to the sidebar, so the page starts higher. */
|
|
47
|
+
--dx-header-top-base: 18px;
|
|
48
|
+
--dx-header-top: var(--dx-header-top-base);
|
|
49
|
+
|
|
50
|
+
box-sizing: border-box;
|
|
51
|
+
display: flex;
|
|
52
|
+
flex-direction: column;
|
|
53
|
+
height: 100%;
|
|
54
|
+
min-height: 0;
|
|
55
|
+
overflow: hidden;
|
|
56
|
+
position: relative;
|
|
57
|
+
background: color-mix(in srgb, var(--dsw-alias-label-primary) 2%, var(--dsw-alias-bg-base));
|
|
58
|
+
color: var(--dsw-alias-label-primary);
|
|
59
|
+
font-family: inherit;
|
|
60
|
+
font-size: var(--dx-font-md);
|
|
61
|
+
line-height: 1.55;
|
|
62
|
+
-webkit-font-smoothing: antialiased;
|
|
63
|
+
}
|
|
64
|
+
.dx-root *, .dx-root *::before, .dx-root *::after { box-sizing: border-box; }
|
|
65
|
+
.dx-root button { font-family: inherit; }
|
|
66
|
+
.dx-root h1, .dx-root h2, .dx-root h3, .dx-root h4, .dx-root p { margin: 0; }
|
|
67
|
+
.dx-root ::selection { background: color-mix(in srgb, var(--dsw-alias-brand-primary) 24%, transparent); }
|
|
68
|
+
.dx-mono { font-variant-numeric: tabular-nums; font-feature-settings: "tnum"; }
|
|
69
|
+
.dx-num { font-variant-numeric: tabular-nums; text-align: right; }
|
|
70
|
+
.dx-muted { color: var(--dsw-alias-label-secondary); }
|
|
71
|
+
.dx-small { font-size: var(--dx-font-xs); line-height: 1.5; }
|
|
72
|
+
.dx-grow { flex: 1 1 auto; min-width: 0; }
|
|
73
|
+
.dx-truncate { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
74
|
+
|
|
75
|
+
/* Scroll surfaces: thin, neutral, visible only on demand. */
|
|
76
|
+
.dx-root ::-webkit-scrollbar { width: 8px; height: 8px; }
|
|
77
|
+
.dx-root ::-webkit-scrollbar-thumb {
|
|
78
|
+
border-radius: 8px; border: 2px solid transparent; background-clip: padding-box;
|
|
79
|
+
background-color: color-mix(in srgb, var(--dsw-alias-label-primary) 18%, transparent);
|
|
80
|
+
}
|
|
81
|
+
.dx-root ::-webkit-scrollbar-thumb:hover { background-color: color-mix(in srgb, var(--dsw-alias-label-primary) 28%, transparent); }
|
|
82
|
+
.dx-root ::-webkit-scrollbar-track { background: transparent; }
|
|
83
|
+
|
|
84
|
+
/* ---------------------------------------------------------------- header */
|
|
85
|
+
.dx-header {
|
|
86
|
+
flex: none;
|
|
87
|
+
display: flex;
|
|
88
|
+
align-items: flex-start;
|
|
89
|
+
gap: 16px;
|
|
90
|
+
padding: var(--dx-header-top) clamp(20px, 3.2vw, 36px) 14px;
|
|
91
|
+
border-bottom: 1px solid var(--dsw-alias-border-l1);
|
|
92
|
+
background: color-mix(in srgb, var(--dsw-alias-bg-base) 82%, transparent);
|
|
93
|
+
backdrop-filter: blur(12px);
|
|
94
|
+
-webkit-backdrop-filter: blur(12px);
|
|
95
|
+
}
|
|
96
|
+
[data-platform="darwin"] [data-sidebar-collapsed] .dx-root,
|
|
97
|
+
[data-platform="darwin"] [data-sidebar-drawer] .dx-root {
|
|
98
|
+
--dx-header-top: calc(var(--dx-header-top-base) + var(--dsh-frame-top-clearance, 0px));
|
|
99
|
+
}
|
|
100
|
+
.dx-headerMain { flex: 1 1 auto; min-width: 0; }
|
|
101
|
+
.dx-titleRow { display: flex; align-items: center; gap: 10px; min-width: 0; }
|
|
102
|
+
.dx-title {
|
|
103
|
+
font-size: 20px; font-weight: var(--dx-text-strong); line-height: 28px; letter-spacing: -0.01em;
|
|
104
|
+
white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 46vw;
|
|
105
|
+
}
|
|
106
|
+
.dx-osChip {
|
|
107
|
+
flex: none; display: inline-flex; align-items: center; height: 22px; padding: 0 8px;
|
|
108
|
+
border-radius: var(--dx-r-xs); border: 1px solid var(--dsw-alias-border-l1);
|
|
109
|
+
background: var(--dsw-alias-bg-layer-2);
|
|
110
|
+
color: var(--dsw-alias-label-secondary);
|
|
111
|
+
font-size: var(--dx-font-xs); font-weight: 500; letter-spacing: 0.01em; white-space: nowrap;
|
|
112
|
+
}
|
|
113
|
+
.dx-headerMeta {
|
|
114
|
+
display: flex; flex-wrap: wrap; align-items: center; gap: 4px 14px;
|
|
115
|
+
margin-top: 4px; color: var(--dsw-alias-label-secondary); font-size: var(--dx-font-sm);
|
|
116
|
+
}
|
|
117
|
+
.dx-status { display: inline-flex; align-items: center; gap: 6px; font-weight: 500; }
|
|
118
|
+
.dx-status[data-state="ready"] { color: var(--dsw-alias-state-success-primary); }
|
|
119
|
+
.dx-status[data-state="stale"] { color: var(--dsw-alias-state-warn-primary); }
|
|
120
|
+
.dx-status[data-state="error"] { color: var(--dsw-alias-state-error-primary); }
|
|
121
|
+
.dx-status[data-state="loading"] { color: var(--dsw-alias-label-secondary); }
|
|
122
|
+
.dx-statusDot {
|
|
123
|
+
width: 6px; height: 6px; border-radius: 50%; flex: none;
|
|
124
|
+
background: currentColor; box-shadow: 0 0 0 3px color-mix(in srgb, currentColor 16%, transparent);
|
|
125
|
+
}
|
|
126
|
+
.dx-status[data-state="loading"] .dx-statusDot { animation: dx-pulse 1.4s ease-in-out infinite; }
|
|
127
|
+
.dx-headerActions { flex: none; display: flex; align-items: center; gap: 8px; padding-top: 2px; }
|
|
128
|
+
|
|
129
|
+
/* ------------------------------------------------------------ icon button */
|
|
130
|
+
.dx-iconBtn {
|
|
131
|
+
width: var(--dx-control); height: var(--dx-control); padding: 0; border-radius: var(--dx-r-sm); cursor: pointer;
|
|
132
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
133
|
+
color: var(--dsw-alias-label-secondary);
|
|
134
|
+
background: var(--dsw-alias-bg-layer-2);
|
|
135
|
+
border: 1px solid var(--dsw-alias-border-l1);
|
|
136
|
+
transition: color .2s var(--dx-ease), border-color .2s var(--dx-ease), background-color .2s var(--dx-ease);
|
|
137
|
+
}
|
|
138
|
+
.dx-iconBtn:hover:not(:disabled) {
|
|
139
|
+
color: var(--dsw-alias-label-primary);
|
|
140
|
+
border-color: var(--dsw-alias-border-l2);
|
|
141
|
+
background: var(--dx-surface-2);
|
|
142
|
+
}
|
|
143
|
+
.dx-iconBtn:active:not(:disabled) { background: color-mix(in srgb, var(--dsw-alias-label-primary) 6%, var(--dsw-alias-bg-layer-2)); }
|
|
144
|
+
.dx-iconBtn:disabled { cursor: not-allowed; opacity: .45; }
|
|
145
|
+
.dx-spin { animation: dx-spin 1s linear infinite; }
|
|
146
|
+
.dx-root :focus-visible {
|
|
147
|
+
outline: 2px solid var(--dsw-alias-brand-primary);
|
|
148
|
+
outline-offset: 2px;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* ------------------------------------------------------------------ body */
|
|
152
|
+
.dx-body {
|
|
153
|
+
flex: 1 1 auto; min-height: 0; display: flex; gap: 24px;
|
|
154
|
+
padding: 16px clamp(20px, 3.2vw, 36px) 20px;
|
|
155
|
+
}
|
|
156
|
+
.dx-rail {
|
|
157
|
+
flex: none; width: 172px; display: flex; flex-direction: column; gap: 2px;
|
|
158
|
+
padding-right: 16px; border-right: 1px solid var(--dsw-alias-border-l1);
|
|
159
|
+
overflow-y: auto; scrollbar-width: thin;
|
|
160
|
+
scrollbar-color: var(--dsw-alias-border-l2) transparent;
|
|
161
|
+
}
|
|
162
|
+
.dx-railTab {
|
|
163
|
+
position: relative; display: flex; align-items: center; gap: 10px;
|
|
164
|
+
height: 36px; padding: 0 12px; border: 0; border-radius: var(--dx-r-sm);
|
|
165
|
+
background: transparent; color: var(--dsw-alias-label-secondary);
|
|
166
|
+
font-size: var(--dx-font-md); font-weight: 400; text-align: left; cursor: pointer;
|
|
167
|
+
transition: background-color .2s var(--dx-ease), color .2s var(--dx-ease);
|
|
168
|
+
}
|
|
169
|
+
.dx-railTab:hover { background: var(--dx-hover); color: var(--dsw-alias-label-primary); }
|
|
170
|
+
.dx-railTab[aria-selected="true"] {
|
|
171
|
+
background: color-mix(in srgb, var(--dsw-alias-brand-primary) 9%, var(--dsw-alias-bg-layer-1));
|
|
172
|
+
color: var(--dsw-alias-brand-primary);
|
|
173
|
+
font-weight: 500;
|
|
174
|
+
}
|
|
175
|
+
.dx-railTab[aria-selected="true"]::before {
|
|
176
|
+
content: ""; position: absolute; left: 0; top: 50%; height: 16px; width: 3px;
|
|
177
|
+
margin-top: -8px; border-radius: 0 3px 3px 0; background: var(--dsw-alias-brand-primary);
|
|
178
|
+
}
|
|
179
|
+
.dx-railIcon { flex: none; display: inline-flex; opacity: .9; }
|
|
180
|
+
.dx-railLabel { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
181
|
+
.dx-contentWrap { flex: 1 1 auto; min-width: 0; min-height: 0; display: flex; flex-direction: column; gap: 12px; }
|
|
182
|
+
.dx-content {
|
|
183
|
+
flex: 1 1 auto; min-height: 0; overflow-y: auto; overflow-x: hidden;
|
|
184
|
+
padding-right: 4px; scrollbar-width: thin;
|
|
185
|
+
scrollbar-color: var(--dsw-alias-border-l2) transparent;
|
|
186
|
+
}
|
|
187
|
+
.dx-tabpanel { animation: dx-fadein .18s var(--dx-ease) both; }
|
|
188
|
+
/* Single-list panels (processes) use the whole pane height: the card and its
|
|
189
|
+
* table grow to the bottom of the viewport instead of stopping at a cap. */
|
|
190
|
+
.dx-tabpanelFill { height: 100%; min-height: 0; display: flex; flex-direction: column; }
|
|
191
|
+
.dx-tabpanelFill .dx-section { flex: 1 1 auto; min-height: 0; }
|
|
192
|
+
.dx-tabpanelFill .dx-card { flex: 1 1 auto; min-height: 0; }
|
|
193
|
+
.dx-tabpanelFill .dx-cardBody { display: flex; flex-direction: column; min-height: 0; }
|
|
194
|
+
.dx-tabpanelFill .dx-tableWrapFill { flex: 1 1 auto; min-height: 0; max-height: none; }
|
|
195
|
+
.dx-loadingHint { margin: 4px 0 0; color: var(--dsw-alias-label-secondary); font-size: var(--dx-font-xs); }
|
|
196
|
+
|
|
197
|
+
/* --------------------------------------------------------------- banners */
|
|
198
|
+
.dx-banner {
|
|
199
|
+
display: flex; align-items: center; gap: 10px; padding: 10px 14px;
|
|
200
|
+
border-radius: var(--dx-r-md); border: 1px solid var(--dsw-alias-border-l1);
|
|
201
|
+
background: var(--dsw-alias-bg-layer-1); color: var(--dsw-alias-label-primary);
|
|
202
|
+
font-size: var(--dx-font-sm);
|
|
203
|
+
}
|
|
204
|
+
.dx-banner[data-tone="warn"],
|
|
205
|
+
.dx-banner[data-tone="error"],
|
|
206
|
+
.dx-banner[data-tone="danger"] { background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 7%, var(--dsw-alias-bg-layer-1)); }
|
|
207
|
+
.dx-banner[data-tone="error"],
|
|
208
|
+
.dx-banner[data-tone="danger"] { background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 7%, var(--dsw-alias-bg-layer-1)); }
|
|
209
|
+
.dx-banner[data-tone="warn"] { border-color: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 32%, var(--dsw-alias-border-l1)); }
|
|
210
|
+
.dx-banner[data-tone="error"],
|
|
211
|
+
.dx-banner[data-tone="danger"] { border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 32%, var(--dsw-alias-border-l1)); }
|
|
212
|
+
.dx-bannerText { flex: 1 1 auto; min-width: 0; }
|
|
213
|
+
.dx-bannerIcon { flex: none; display: inline-flex; color: var(--dsw-alias-state-warn-primary); }
|
|
214
|
+
.dx-banner[data-tone="error"] .dx-bannerIcon,
|
|
215
|
+
.dx-banner[data-tone="danger"] .dx-bannerIcon { color: var(--dsw-alias-state-error-primary); }
|
|
216
|
+
|
|
217
|
+
/* ----------------------------------------------------------------- cards */
|
|
218
|
+
.dx-section { display: flex; flex-direction: column; gap: 16px; }
|
|
219
|
+
.dx-section + .dx-section { margin-top: 4px; }
|
|
220
|
+
.dx-sectionHead { display: flex; align-items: baseline; gap: 8px; }
|
|
221
|
+
.dx-sectionTitle { font-size: 15px; font-weight: var(--dx-text-strong); letter-spacing: -0.005em; line-height: 1.4; }
|
|
222
|
+
.dx-sectionTitle::before {
|
|
223
|
+
content: ""; display: inline-block; width: 3px; height: 13px; margin-right: 8px;
|
|
224
|
+
border-radius: 2px; background: var(--dsw-alias-brand-primary); vertical-align: -1px;
|
|
225
|
+
}
|
|
226
|
+
.dx-sectionSub { color: var(--dsw-alias-label-secondary); font-size: var(--dx-font-sm); font-variant-numeric: tabular-nums; }
|
|
227
|
+
.dx-grid { display: grid; gap: 16px; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); align-items: stretch; }
|
|
228
|
+
/* Hardware cards mix 1- and 2-column spans: pack short cards into the holes a
|
|
229
|
+
* span leaves at two-column widths instead of showing empty grid cells. */
|
|
230
|
+
.dx-gridDense { grid-auto-flow: dense; }
|
|
231
|
+
.dx-grid2 { display: grid; gap: 16px; grid-template-columns: repeat(2, minmax(0, 1fr)); align-items: stretch; }
|
|
232
|
+
.dx-grid3 { display: grid; gap: 16px; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); align-items: stretch; }
|
|
233
|
+
.dx-card {
|
|
234
|
+
position: relative; min-width: 0; height: 100%; border-radius: var(--dx-r-md);
|
|
235
|
+
display: flex; flex-direction: column;
|
|
236
|
+
background: var(--dsw-alias-bg-layer-1);
|
|
237
|
+
border: 1px solid var(--dsw-alias-border-l1);
|
|
238
|
+
box-shadow: var(--dx-shadow-1);
|
|
239
|
+
overflow: hidden;
|
|
240
|
+
}
|
|
241
|
+
.dx-card[data-span="2"] { grid-column: span 2; }
|
|
242
|
+
.dx-card[data-span="full"] { grid-column: 1 / -1; }
|
|
243
|
+
.dx-cardHead {
|
|
244
|
+
display: flex; align-items: flex-start; gap: 10px;
|
|
245
|
+
padding: 14px 16px 12px; margin: 0;
|
|
246
|
+
border-bottom: 1px solid var(--dsw-alias-border-l1);
|
|
247
|
+
}
|
|
248
|
+
.dx-cardHeadIcon {
|
|
249
|
+
flex: none; width: 28px; height: 28px; border-radius: var(--dx-r-sm);
|
|
250
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
251
|
+
color: var(--dsw-alias-brand-primary);
|
|
252
|
+
background: var(--dx-tint-brand);
|
|
253
|
+
}
|
|
254
|
+
.dx-cardTitles { min-width: 0; flex: 1 1 auto; }
|
|
255
|
+
.dx-cardTitleRow { display: flex; align-items: center; gap: 8px; min-width: 0; }
|
|
256
|
+
.dx-cardBadge { flex: none; display: inline-flex; }
|
|
257
|
+
.dx-cardTitle { font-size: var(--dx-font-lg); font-weight: var(--dx-text-strong); line-height: 1.4; }
|
|
258
|
+
.dx-cardSub { color: var(--dsw-alias-label-secondary); font-size: var(--dx-font-xs); margin-top: 1px; line-height: 1.45; }
|
|
259
|
+
.dx-cardActions { flex: none; display: flex; align-items: center; gap: 6px; }
|
|
260
|
+
.dx-cardBody { flex: 1 1 auto; min-width: 0; padding: 16px; }
|
|
261
|
+
.dx-cardBodyFlush { min-width: 0; padding: 0; }
|
|
262
|
+
|
|
263
|
+
/* ------------------------------------------------------------------ hero */
|
|
264
|
+
.dx-heroCard {
|
|
265
|
+
display: grid; grid-template-columns: minmax(220px, 300px) minmax(0, 1fr);
|
|
266
|
+
gap: 24px; align-items: center; overflow: hidden; position: relative;
|
|
267
|
+
border-radius: var(--dx-r-lg); padding: 18px;
|
|
268
|
+
background: var(--dsw-alias-bg-layer-1);
|
|
269
|
+
border: 1px solid var(--dsw-alias-border-l1);
|
|
270
|
+
box-shadow: var(--dx-shadow-1);
|
|
271
|
+
}
|
|
272
|
+
.dx-heroInfo { min-width: 0; }
|
|
273
|
+
.dx-heroTitle {
|
|
274
|
+
font-size: 24px; font-weight: var(--dx-text-strong); line-height: 1.25; letter-spacing: -0.015em;
|
|
275
|
+
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
276
|
+
}
|
|
277
|
+
.dx-heroSub { color: var(--dsw-alias-label-secondary); font-size: var(--dx-font-sm); margin-top: 4px; }
|
|
278
|
+
.dx-heroChips { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; }
|
|
279
|
+
.dx-chip {
|
|
280
|
+
display: inline-flex; align-items: center; gap: 6px; height: 24px; padding: 0 9px;
|
|
281
|
+
border-radius: var(--dx-r-xs); border: 1px solid var(--dsw-alias-border-l1);
|
|
282
|
+
background: var(--dx-surface-2);
|
|
283
|
+
color: var(--dsw-alias-label-secondary); font-size: var(--dx-font-xs); font-weight: 500;
|
|
284
|
+
}
|
|
285
|
+
.dx-chip strong { color: var(--dsw-alias-label-primary); font-weight: var(--dx-text-strong); font-variant-numeric: tabular-nums; }
|
|
286
|
+
.dx-chip[data-tone="ok"] { color: var(--dsw-alias-state-success-primary); border-color: color-mix(in srgb, var(--dsw-alias-state-success-primary) 30%, var(--dsw-alias-border-l1)); background: color-mix(in srgb, var(--dsw-alias-state-success-primary) 8%, transparent); }
|
|
287
|
+
.dx-chip[data-tone="ok"] strong { color: inherit; }
|
|
288
|
+
.dx-chip[data-tone="warn"] { color: var(--dsw-alias-state-warn-primary); border-color: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 30%, var(--dsw-alias-border-l1)); background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent); }
|
|
289
|
+
.dx-chip[data-tone="warn"] strong { color: inherit; }
|
|
290
|
+
.dx-chip[data-tone="error"] { color: var(--dsw-alias-state-error-primary); border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 30%, var(--dsw-alias-border-l1)); background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 8%, transparent); }
|
|
291
|
+
.dx-chip[data-tone="error"] strong { color: inherit; }
|
|
292
|
+
|
|
293
|
+
/* The 3D device core: pure CSS transforms, artwork colors are intentional. */
|
|
294
|
+
.dx-scene {
|
|
295
|
+
position: relative; height: 200px; border-radius: var(--dx-r-md); overflow: hidden;
|
|
296
|
+
perspective: 900px; perspective-origin: 50% 42%;
|
|
297
|
+
background:
|
|
298
|
+
radial-gradient(120% 150% at 50% -10%, #1e2a5e 0%, #0c1228 52%, #070a15 100%);
|
|
299
|
+
border: 1px solid #26315f;
|
|
300
|
+
isolation: isolate;
|
|
301
|
+
}
|
|
302
|
+
.dx-sceneArt { position: absolute; inset: 0; transform-style: preserve-3d; pointer-events: none; }
|
|
303
|
+
.dx-sceneGlow {
|
|
304
|
+
position: absolute; inset: -30% -20% auto -20%; height: 80%;
|
|
305
|
+
background: radial-gradient(50% 50% at 50% 50%, rgba(97, 122, 255, .38) 0%, rgba(56, 189, 248, .12) 45%, transparent 72%);
|
|
306
|
+
filter: blur(6px); pointer-events: none;
|
|
307
|
+
}
|
|
308
|
+
.dx-sceneGrid {
|
|
309
|
+
position: absolute; left: -40%; right: -40%; bottom: -30%; height: 78%;
|
|
310
|
+
background-image:
|
|
311
|
+
linear-gradient(rgba(86, 145, 255, .22) 1px, transparent 1px),
|
|
312
|
+
linear-gradient(90deg, rgba(86, 145, 255, .22) 1px, transparent 1px);
|
|
313
|
+
background-size: 34px 34px;
|
|
314
|
+
transform: rotateX(62deg);
|
|
315
|
+
transform-origin: 50% 100%;
|
|
316
|
+
mask-image: linear-gradient(to top, rgba(0,0,0,.85), transparent 78%);
|
|
317
|
+
-webkit-mask-image: linear-gradient(to top, rgba(0,0,0,.85), transparent 78%);
|
|
318
|
+
pointer-events: none;
|
|
319
|
+
}
|
|
320
|
+
.dx-orbit { position: absolute; inset: 0; transform-style: preserve-3d; animation: dx-orbit 26s linear infinite; will-change: transform; }
|
|
321
|
+
.dx-orbit[data-layer="2"] { animation-duration: 34s; animation-direction: reverse; }
|
|
322
|
+
.dx-orbit[data-layer="3"] { animation-duration: 18s; }
|
|
323
|
+
.dx-ring {
|
|
324
|
+
position: absolute; left: 50%; top: 50%; width: 168px; height: 168px; margin: -84px 0 0 -84px;
|
|
325
|
+
border-radius: 50%; border: 1px solid rgba(124, 92, 255, .55);
|
|
326
|
+
box-shadow: 0 0 26px rgba(124, 92, 255, .28), inset 0 0 26px rgba(124, 92, 255, .12);
|
|
327
|
+
transform: rotateX(74deg);
|
|
328
|
+
}
|
|
329
|
+
.dx-ring[data-ring="2"] {
|
|
330
|
+
width: 218px; height: 218px; margin: -109px 0 0 -109px;
|
|
331
|
+
border-color: rgba(56, 189, 248, .5);
|
|
332
|
+
box-shadow: 0 0 28px rgba(56, 189, 248, .22), inset 0 0 28px rgba(56, 189, 248, .1);
|
|
333
|
+
transform: rotateX(64deg) rotateY(18deg);
|
|
334
|
+
}
|
|
335
|
+
.dx-ring[data-ring="3"] {
|
|
336
|
+
width: 128px; height: 128px; margin: -64px 0 0 -64px;
|
|
337
|
+
border-style: dashed; border-color: rgba(34, 211, 238, .4);
|
|
338
|
+
transform: rotateX(80deg) rotateZ(30deg);
|
|
339
|
+
}
|
|
340
|
+
.dx-ring[data-ring="2"]::after {
|
|
341
|
+
content: ""; position: absolute; top: 50%; left: -4px; width: 8px; height: 8px;
|
|
342
|
+
margin-top: -4px; border-radius: 50%; background: #67e8f9;
|
|
343
|
+
box-shadow: 0 0 14px #22d3ee, 0 0 34px rgba(34, 211, 238, .55);
|
|
344
|
+
}
|
|
345
|
+
.dx-chipScene { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; transform-style: preserve-3d; animation: dx-float 7s ease-in-out infinite; will-change: transform; }
|
|
346
|
+
.dx-chipBody {
|
|
347
|
+
position: relative; width: 116px; height: 116px; border-radius: 16px;
|
|
348
|
+
transform: rotateX(52deg) rotateZ(-38deg);
|
|
349
|
+
background:
|
|
350
|
+
linear-gradient(145deg, #2a3a76 0%, #131b3c 46%, #0d1330 100%);
|
|
351
|
+
border: 1px solid #4f63aa;
|
|
352
|
+
box-shadow:
|
|
353
|
+
0 0 0 1px rgba(56, 189, 248, .18),
|
|
354
|
+
0 26px 54px rgba(4, 8, 20, .78),
|
|
355
|
+
inset 0 0 30px rgba(78, 110, 255, .34);
|
|
356
|
+
}
|
|
357
|
+
.dx-chipBody::before {
|
|
358
|
+
content: ""; position: absolute; inset: 13px; border-radius: 9px;
|
|
359
|
+
background-image:
|
|
360
|
+
linear-gradient(rgba(124, 92, 255, .34) 1px, transparent 1px),
|
|
361
|
+
linear-gradient(90deg, rgba(124, 92, 255, .34) 1px, transparent 1px);
|
|
362
|
+
background-size: 13px 13px;
|
|
363
|
+
border: 1px solid rgba(124, 92, 255, .28);
|
|
364
|
+
}
|
|
365
|
+
.dx-chipCore {
|
|
366
|
+
position: absolute; left: 50%; top: 50%; width: 44px; height: 44px; margin: -22px 0 0 -22px;
|
|
367
|
+
border-radius: 10px;
|
|
368
|
+
background: radial-gradient(circle at 38% 32%, #bff3ff 0%, #38bdf8 36%, #6366f1 78%, #4338ca 100%);
|
|
369
|
+
box-shadow: 0 0 18px rgba(56, 189, 248, .75), 0 0 44px rgba(99, 102, 241, .5);
|
|
370
|
+
}
|
|
371
|
+
/* The pulse animates opacity (compositor-friendly) on this halo instead of the
|
|
372
|
+
* core's box-shadow, whose per-frame repaint was the scene's biggest CPU cost. */
|
|
373
|
+
.dx-chipGlow {
|
|
374
|
+
position: absolute; left: 50%; top: 50%; width: 112px; height: 112px; margin: -56px 0 0 -56px;
|
|
375
|
+
border-radius: 50%;
|
|
376
|
+
background: radial-gradient(closest-side, rgba(56, 189, 248, .6) 0%, rgba(99, 102, 241, .34) 46%, rgba(99, 102, 241, 0) 76%);
|
|
377
|
+
animation: dx-coreGlow 3.2s ease-in-out infinite;
|
|
378
|
+
pointer-events: none;
|
|
379
|
+
}
|
|
380
|
+
.dx-chipCore::after {
|
|
381
|
+
content: ""; position: absolute; inset: 9px; border-radius: 6px;
|
|
382
|
+
border: 1px solid rgba(255, 255, 255, .55);
|
|
383
|
+
}
|
|
384
|
+
.dx-chipPins { position: absolute; inset: -7px; border-radius: 20px; pointer-events: none; }
|
|
385
|
+
.dx-chipPins span { position: absolute; background: #5f74bd; border-radius: 1px; }
|
|
386
|
+
.dx-chipPins span:nth-child(1), .dx-chipPins span:nth-child(2), .dx-chipPins span:nth-child(3), .dx-chipPins span:nth-child(4), .dx-chipPins span:nth-child(5), .dx-chipPins span:nth-child(6) {
|
|
387
|
+
width: 5px; height: 12px; top: -6px;
|
|
388
|
+
}
|
|
389
|
+
.dx-chipPins span:nth-child(1) { left: 18px; }
|
|
390
|
+
.dx-chipPins span:nth-child(2) { left: 38px; }
|
|
391
|
+
.dx-chipPins span:nth-child(3) { left: 58px; }
|
|
392
|
+
.dx-chipPins span:nth-child(4) { left: 78px; }
|
|
393
|
+
.dx-chipPins span:nth-child(5) { left: 98px; }
|
|
394
|
+
.dx-chipPins span:nth-child(6) { left: 118px; }
|
|
395
|
+
.dx-chipPins span:nth-child(7), .dx-chipPins span:nth-child(8), .dx-chipPins span:nth-child(9), .dx-chipPins span:nth-child(10), .dx-chipPins span:nth-child(11), .dx-chipPins span:nth-child(12) {
|
|
396
|
+
width: 5px; height: 12px; bottom: -6px;
|
|
397
|
+
}
|
|
398
|
+
.dx-chipPins span:nth-child(7) { left: 18px; }
|
|
399
|
+
.dx-chipPins span:nth-child(8) { left: 38px; }
|
|
400
|
+
.dx-chipPins span:nth-child(9) { left: 58px; }
|
|
401
|
+
.dx-chipPins span:nth-child(10) { left: 78px; }
|
|
402
|
+
.dx-chipPins span:nth-child(11) { left: 98px; }
|
|
403
|
+
.dx-chipPins span:nth-child(12) { left: 118px; }
|
|
404
|
+
.dx-particle {
|
|
405
|
+
position: absolute; width: 4px; height: 4px; border-radius: 50%;
|
|
406
|
+
background: #67e8f9; box-shadow: 0 0 10px rgba(34, 211, 238, .9);
|
|
407
|
+
animation: dx-drift 9s ease-in-out infinite; will-change: transform;
|
|
408
|
+
}
|
|
409
|
+
.dx-particle[data-p="1"] { left: 16%; top: 30%; animation-delay: -1s; }
|
|
410
|
+
.dx-particle[data-p="2"] { left: 78%; top: 24%; width: 3px; height: 3px; background: #a78bfa; box-shadow: 0 0 10px rgba(167, 139, 250, .9); animation-delay: -3s; }
|
|
411
|
+
.dx-particle[data-p="3"] { left: 68%; top: 74%; animation-delay: -5s; }
|
|
412
|
+
.dx-particle[data-p="4"] { left: 24%; top: 70%; width: 3px; height: 3px; background: #a78bfa; box-shadow: 0 0 10px rgba(167, 139, 250, .9); animation-delay: -7s; }
|
|
413
|
+
.dx-sceneCaption {
|
|
414
|
+
position: absolute; left: 12px; bottom: 10px;
|
|
415
|
+
color: rgba(196, 212, 255, .72); font-size: 10px; font-weight: 600;
|
|
416
|
+
letter-spacing: .14em; text-transform: uppercase;
|
|
417
|
+
}
|
|
418
|
+
/* The motion toggle lives on the dark artwork, so it uses fixed light-on-dark
|
|
419
|
+
* colours instead of theme tokens; the scene is theme-independent on purpose. */
|
|
420
|
+
.dx-sceneToggle {
|
|
421
|
+
position: absolute; top: 10px; right: 10px; z-index: 2;
|
|
422
|
+
display: inline-flex; align-items: center; gap: 5px; height: 26px; padding: 0 10px;
|
|
423
|
+
border-radius: 999px; cursor: pointer;
|
|
424
|
+
color: rgba(214, 226, 255, .8); font-size: 11px; font-weight: 600; letter-spacing: .06em;
|
|
425
|
+
background: rgba(8, 13, 30, .52); border: 1px solid rgba(148, 170, 255, .28);
|
|
426
|
+
-webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
|
|
427
|
+
transition: color .2s var(--dx-ease), border-color .2s var(--dx-ease), background-color .2s var(--dx-ease);
|
|
428
|
+
}
|
|
429
|
+
.dx-sceneToggle:hover { color: rgba(240, 245, 255, .96); border-color: rgba(148, 170, 255, .5); background: rgba(20, 30, 62, .72); }
|
|
430
|
+
.dx-sceneToggle[aria-pressed="true"] {
|
|
431
|
+
color: #dfe8ff;
|
|
432
|
+
border-color: rgba(124, 92, 255, .62);
|
|
433
|
+
background: rgba(83, 66, 176, .42);
|
|
434
|
+
}
|
|
435
|
+
.dx-sceneToggle:focus-visible { outline: 2px solid rgba(148, 170, 255, .9); outline-offset: 2px; }
|
|
436
|
+
.dx-root[data-motion="off"] .dx-scene *,
|
|
437
|
+
.dx-root[data-motion="off"] .dx-scene,
|
|
438
|
+
.dx-scene[data-motion="off"] *,
|
|
439
|
+
.dx-scene[data-motion="off"] { animation-play-state: paused !important; }
|
|
440
|
+
|
|
441
|
+
/* ------------------------------------------------------------------- KPIs */
|
|
442
|
+
.dx-kpiGrid { display: grid; gap: 16px; grid-template-columns: repeat(auto-fit, minmax(196px, 1fr)); }
|
|
443
|
+
.dx-kpi {
|
|
444
|
+
display: flex; flex-direction: column; gap: 10px; min-width: 0;
|
|
445
|
+
border-radius: var(--dx-r-md); padding: 16px;
|
|
446
|
+
background: var(--dsw-alias-bg-layer-1); border: 1px solid var(--dsw-alias-border-l1);
|
|
447
|
+
box-shadow: var(--dx-shadow-1);
|
|
448
|
+
transition: border-color .2s var(--dx-ease), box-shadow .2s var(--dx-ease);
|
|
449
|
+
}
|
|
450
|
+
.dx-kpi:hover { border-color: var(--dsw-alias-border-l2); box-shadow: var(--dx-shadow-2); }
|
|
451
|
+
.dx-kpiTop { display: flex; align-items: center; gap: 12px; min-width: 0; }
|
|
452
|
+
.dx-kpiMeta { min-width: 0; flex: 1 1 auto; order: 1; }
|
|
453
|
+
.dx-donutWrap { position: relative; flex: none; width: 62px; height: 62px; order: 2; opacity: .95; }
|
|
454
|
+
.dx-donutCenter {
|
|
455
|
+
position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
|
|
456
|
+
font-size: var(--dx-font-xs); font-weight: 600; font-variant-numeric: tabular-nums;
|
|
457
|
+
}
|
|
458
|
+
.dx-kpiLabel { color: var(--dsw-alias-label-secondary); font-size: var(--dx-font-sm); font-weight: 400; }
|
|
459
|
+
.dx-kpiValue { font-size: 24px; font-weight: var(--dx-text-strong); line-height: 1.25; letter-spacing: -0.015em; font-variant-numeric: tabular-nums; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-top: 2px; }
|
|
460
|
+
.dx-kpiSub {
|
|
461
|
+
color: var(--dsw-alias-label-secondary); font-size: var(--dx-font-xs); margin-top: 2px; line-height: 1.45;
|
|
462
|
+
display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden;
|
|
463
|
+
/* Reserve both clamp lines: one-line and two-line subs must leave the same
|
|
464
|
+
top-block height, or rings and charts drift apart across the row. */
|
|
465
|
+
min-height: calc(1.45em * 2);
|
|
466
|
+
}
|
|
467
|
+
.dx-kpiSpark { height: 30px; margin-top: auto; }
|
|
468
|
+
.dx-spark { display: block; width: 100%; height: 30px; }
|
|
469
|
+
.dx-sparkBase { stroke: var(--dsw-alias-border-l1); }
|
|
470
|
+
/* Placeholder before the second sample: a hairline on the same 0% baseline,
|
|
471
|
+
so the empty state and the sampled chart share one frame. */
|
|
472
|
+
.dx-sparkEmpty { border-radius: var(--dx-r-xs); background: color-mix(in srgb, var(--dsw-alias-border-l1) 45%, transparent); height: 1px; margin-top: 29px; }
|
|
473
|
+
|
|
474
|
+
/* ------------------------------------------------------------- list rows */
|
|
475
|
+
.dx-list { display: flex; flex-direction: column; }
|
|
476
|
+
.dx-listRow {
|
|
477
|
+
display: flex; align-items: center; gap: 10px; min-width: 0;
|
|
478
|
+
padding: 9px 4px; border-top: 1px solid var(--dsw-alias-border-l1);
|
|
479
|
+
transition: background-color .2s var(--dx-ease);
|
|
480
|
+
border-radius: var(--dx-r-xs);
|
|
481
|
+
}
|
|
482
|
+
.dx-listRow:hover { background: var(--dx-hover); }
|
|
483
|
+
.dx-listRow:first-child { border-top: none; }
|
|
484
|
+
.dx-listRank {
|
|
485
|
+
flex: none; width: 20px; height: 20px; display: inline-flex; align-items: center; justify-content: center;
|
|
486
|
+
color: var(--dsw-alias-label-secondary); font-size: 11px; font-variant-numeric: tabular-nums;
|
|
487
|
+
background: var(--dx-surface-2); border-radius: var(--dx-r-xs);
|
|
488
|
+
}
|
|
489
|
+
.dx-listPrimary { min-width: 0; flex: 1 1 auto; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
490
|
+
.dx-listSecondary { color: var(--dsw-alias-label-secondary); font-size: var(--dx-font-xs); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
491
|
+
.dx-listRight { flex: none; display: flex; align-items: center; gap: 10px; font-variant-numeric: tabular-nums; font-size: var(--dx-font-sm); }
|
|
492
|
+
.dx-listRight span { min-width: 52px; text-align: right; }
|
|
493
|
+
|
|
494
|
+
/* ------------------------------------------------------------- alerts etc */
|
|
495
|
+
.dx-alertList { display: flex; flex-direction: column; gap: 8px; }
|
|
496
|
+
.dx-alert {
|
|
497
|
+
display: flex; align-items: center; gap: 10px; padding: 9px 12px;
|
|
498
|
+
border-radius: var(--dx-r-sm); border: 1px solid var(--dsw-alias-border-l1);
|
|
499
|
+
background: var(--dsw-alias-bg-layer-2);
|
|
500
|
+
font-size: var(--dx-font-sm);
|
|
501
|
+
}
|
|
502
|
+
.dx-alert[data-tone="warn"] { border-color: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 30%, var(--dsw-alias-border-l1)); background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 7%, var(--dsw-alias-bg-layer-1)); }
|
|
503
|
+
.dx-alert[data-tone="error"] { border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 30%, var(--dsw-alias-border-l1)); background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 7%, var(--dsw-alias-bg-layer-1)); }
|
|
504
|
+
.dx-alert[data-tone="idle"] { color: var(--dsw-alias-label-secondary); border-color: color-mix(in srgb, var(--dsw-alias-state-success-primary) 24%, var(--dsw-alias-border-l1)); background: color-mix(in srgb, var(--dsw-alias-state-success-primary) 6%, var(--dsw-alias-bg-layer-1)); }
|
|
505
|
+
.dx-alertIcon { flex: none; display: inline-flex; color: var(--dsw-alias-state-warn-primary); }
|
|
506
|
+
.dx-alert[data-tone="error"] .dx-alertIcon { color: var(--dsw-alias-state-error-primary); }
|
|
507
|
+
.dx-alert[data-tone="idle"] .dx-alertIcon { color: var(--dsw-alias-state-success-primary); }
|
|
508
|
+
.dx-alertText { min-width: 0; }
|
|
509
|
+
|
|
510
|
+
.dx-bars { display: grid; grid-template-columns: repeat(auto-fill, minmax(64px, 1fr)); gap: 8px 10px; }
|
|
511
|
+
.dx-barRow { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
|
|
512
|
+
.dx-barHead { display: flex; justify-content: space-between; gap: 6px; color: var(--dsw-alias-label-secondary); font-size: 10.5px; font-variant-numeric: tabular-nums; }
|
|
513
|
+
.dx-barTrack { height: 6px; border-radius: 999px; background: var(--dsw-alias-bg-layer-2); overflow: hidden; }
|
|
514
|
+
.dx-barFill { height: 100%; border-radius: 999px; transition: width .5s var(--dx-ease); }
|
|
515
|
+
|
|
516
|
+
.dx-stackBar { display: flex; height: 10px; border-radius: 999px; overflow: hidden; background: var(--dsw-alias-bg-layer-2); }
|
|
517
|
+
.dx-stackSeg { height: 100%; transition: width .5s var(--dx-ease); }
|
|
518
|
+
.dx-legend { display: flex; flex-direction: column; gap: 2px; margin-top: 12px; }
|
|
519
|
+
.dx-legendRow { display: flex; align-items: center; gap: 8px; font-size: var(--dx-font-xs); padding: 4px 0; border-radius: var(--dx-r-xs); }
|
|
520
|
+
.dx-legendDot { width: 8px; height: 8px; border-radius: 2px; flex: none; }
|
|
521
|
+
.dx-legendLabel { flex: 1 1 auto; color: var(--dsw-alias-label-secondary); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
522
|
+
.dx-legendValue { font-variant-numeric: tabular-nums; }
|
|
523
|
+
|
|
524
|
+
/* ------------------------------------------------------------------ facts */
|
|
525
|
+
.dx-factGrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 12px 20px; }
|
|
526
|
+
/* Battery facts sit in a one-column grid cell next to the two-column graphics
|
|
527
|
+
* card: pin them to two columns so the card does not tower over its row. */
|
|
528
|
+
.dx-factGridForce2 .dx-factGrid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
529
|
+
/* Second-line clamps for the thermal note: the full text stays available via
|
|
530
|
+
* the native title tooltip, so the card matches the height of its row. */
|
|
531
|
+
.dx-clamp2 { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; }
|
|
532
|
+
.dx-clamp1 { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
533
|
+
.dx-fact { min-width: 0; }
|
|
534
|
+
.dx-factLabel { color: var(--dsw-alias-label-secondary); font-size: var(--dx-font-sm); line-height: 1.45; }
|
|
535
|
+
.dx-factValue { font-weight: 500; line-height: 1.5; overflow-wrap: anywhere; }
|
|
536
|
+
.dx-fact[data-wide="true"] { grid-column: 1 / -1; }
|
|
537
|
+
|
|
538
|
+
/* ----------------------------------------------------------------- tables */
|
|
539
|
+
.dx-tableWrap { overflow: auto; border-radius: var(--dx-r-sm); border: 1px solid var(--dsw-alias-border-l1); }
|
|
540
|
+
/* Very long tables (driver inventory) scroll inside their card instead of
|
|
541
|
+
* stretching the whole grid row to thousands of pixels. */
|
|
542
|
+
.dx-tableScroll .dx-tableWrap { max-height: 420px; overscroll-behavior: contain; }
|
|
543
|
+
/* Long "list" tables (applications, processes) scroll in place: the wrapper is
|
|
544
|
+
* their scrollport, which is what makes the sticky \`thead\` stay pinned. */
|
|
545
|
+
.dx-tableWrapScroll { max-height: min(560px, 60vh); overscroll-behavior: contain; }
|
|
546
|
+
.dx-tableWrapFill { overscroll-behavior: contain; }
|
|
547
|
+
.dx-cardBodyFlush .dx-tableWrap { border: none; border-radius: 0; }
|
|
548
|
+
.dx-table { width: 100%; border-collapse: collapse; font-size: 12.5px; }
|
|
549
|
+
.dx-table th, .dx-table td { text-align: left; padding: 10px 16px; vertical-align: middle; }
|
|
550
|
+
.dx-table thead th {
|
|
551
|
+
position: sticky; top: 0; z-index: 1; white-space: nowrap;
|
|
552
|
+
background: var(--dx-surface-2); color: var(--dsw-alias-label-secondary);
|
|
553
|
+
font-size: var(--dx-font-sm); font-weight: var(--dx-text-strong); letter-spacing: .01em;
|
|
554
|
+
border-bottom: 1px solid var(--dsw-alias-border-l1);
|
|
555
|
+
}
|
|
556
|
+
.dx-table tbody tr { border-top: 1px solid var(--dsw-alias-border-l1); transition: background-color .2s var(--dx-ease); }
|
|
557
|
+
.dx-table tbody tr:first-child { border-top: none; }
|
|
558
|
+
.dx-table tbody tr:hover { background: color-mix(in srgb, var(--dsw-alias-label-primary) 4%, transparent); }
|
|
559
|
+
.dx-table td { max-width: 320px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
560
|
+
.dx-table td.dx-tdWrap { white-space: normal; overflow-wrap: anywhere; }
|
|
561
|
+
/* Tables embedded in a normal (padded) card body get a tighter rhythm so a
|
|
562
|
+
* four-column spec table still fits a one-third-width card without scrolling. */
|
|
563
|
+
.dx-cardBody:not(.dx-cardBodyFlush) .dx-table th,
|
|
564
|
+
.dx-cardBody:not(.dx-cardBodyFlush) .dx-table td { padding: 8px 10px; }
|
|
565
|
+
.dx-cardBody:not(.dx-cardBodyFlush) .dx-table thead th { font-size: 11.5px; }
|
|
566
|
+
.dx-rowActions { display: flex; align-items: center; gap: 6px; justify-content: flex-end; }
|
|
567
|
+
|
|
568
|
+
/* ------------------------------------------------------------------- tags */
|
|
569
|
+
.dx-pill {
|
|
570
|
+
display: inline-flex; align-items: center; gap: 5px; height: 22px; padding: 0 8px;
|
|
571
|
+
border-radius: var(--dx-r-xs); font-size: var(--dx-font-xs); font-weight: 500; letter-spacing: .01em;
|
|
572
|
+
border: 1px solid transparent;
|
|
573
|
+
background: var(--dx-surface-2);
|
|
574
|
+
color: var(--dsw-alias-label-secondary); white-space: nowrap;
|
|
575
|
+
}
|
|
576
|
+
.dx-pill[data-tone="ok"] { color: var(--dsw-alias-state-success-primary); border-color: color-mix(in srgb, var(--dsw-alias-state-success-primary) 26%, transparent); background: color-mix(in srgb, var(--dsw-alias-state-success-primary) 10%, transparent); }
|
|
577
|
+
.dx-pill[data-tone="warn"] { color: var(--dsw-alias-state-warn-primary); border-color: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 26%, transparent); background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 10%, transparent); }
|
|
578
|
+
.dx-pill[data-tone="error"] { color: var(--dsw-alias-state-error-primary); border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 26%, transparent); background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, transparent); }
|
|
579
|
+
.dx-pill[data-tone="brand"] { color: var(--dsw-alias-brand-primary); border-color: color-mix(in srgb, var(--dsw-alias-brand-primary) 26%, transparent); background: var(--dx-tint-brand); }
|
|
580
|
+
.dx-pill[data-tone="idle"] { color: var(--dsw-alias-label-secondary); background: var(--dx-surface-2); }
|
|
581
|
+
|
|
582
|
+
.dx-tip { position: relative; display: inline-flex; outline: none; border-radius: var(--dx-r-xs); }
|
|
583
|
+
.dx-tip::after {
|
|
584
|
+
content: attr(data-tip);
|
|
585
|
+
position: absolute; left: 0; top: calc(100% + 8px); z-index: 40;
|
|
586
|
+
width: max-content; max-width: 320px; padding: 7px 10px;
|
|
587
|
+
border-radius: var(--dx-r-sm);
|
|
588
|
+
background: color-mix(in srgb, var(--dsw-alias-label-primary) 94%, transparent);
|
|
589
|
+
color: var(--dsw-alias-label-primary-foreground);
|
|
590
|
+
box-shadow: var(--dx-shadow-2);
|
|
591
|
+
font-size: var(--dx-font-xs); font-weight: 400; line-height: 1.5; letter-spacing: 0;
|
|
592
|
+
text-align: left; white-space: normal; overflow-wrap: anywhere;
|
|
593
|
+
opacity: 0; transform: translateY(-3px); pointer-events: none;
|
|
594
|
+
transition: opacity .15s var(--dx-ease), transform .15s var(--dx-ease);
|
|
595
|
+
}
|
|
596
|
+
.dx-tip:hover::after, .dx-tip:focus-visible::after { opacity: 1; transform: none; }
|
|
597
|
+
.dx-tip:focus-visible { box-shadow: var(--dx-ring); }
|
|
598
|
+
.dx-tip .dx-pill { cursor: default; }
|
|
599
|
+
|
|
600
|
+
/* ----------------------------------------------------------------- buttons */
|
|
601
|
+
.dx-btn {
|
|
602
|
+
display: inline-flex; align-items: center; justify-content: center; gap: 6px;
|
|
603
|
+
height: var(--dx-control); padding: 0 12px; border-radius: var(--dx-r-sm); cursor: pointer;
|
|
604
|
+
font-size: var(--dx-font-sm); font-weight: 500; white-space: nowrap;
|
|
605
|
+
color: var(--dsw-alias-label-primary);
|
|
606
|
+
background: var(--dsw-alias-bg-layer-2);
|
|
607
|
+
border: 1px solid var(--dsw-alias-border-l1);
|
|
608
|
+
transition: color .2s var(--dx-ease), border-color .2s var(--dx-ease),
|
|
609
|
+
background-color .2s var(--dx-ease), box-shadow .2s var(--dx-ease);
|
|
610
|
+
}
|
|
611
|
+
.dx-btn:hover:not(:disabled) {
|
|
612
|
+
color: var(--dsw-alias-brand-primary);
|
|
613
|
+
border-color: color-mix(in srgb, var(--dsw-alias-brand-primary) 45%, var(--dsw-alias-border-l1));
|
|
614
|
+
}
|
|
615
|
+
.dx-btn:active:not(:disabled) { background: color-mix(in srgb, var(--dsw-alias-label-primary) 6%, var(--dsw-alias-bg-layer-2)); }
|
|
616
|
+
.dx-btn:disabled { cursor: not-allowed; opacity: .45; }
|
|
617
|
+
.dx-btn[data-variant="primary"] {
|
|
618
|
+
color: var(--dsw-alias-bg-base);
|
|
619
|
+
background: var(--dsw-alias-brand-primary);
|
|
620
|
+
border-color: var(--dsw-alias-brand-primary);
|
|
621
|
+
box-shadow: var(--dx-shadow-1);
|
|
622
|
+
}
|
|
623
|
+
.dx-btn[data-variant="primary"]:hover:not(:disabled) {
|
|
624
|
+
color: var(--dsw-alias-bg-base);
|
|
625
|
+
filter: brightness(1.08);
|
|
626
|
+
border-color: var(--dsw-alias-brand-primary);
|
|
627
|
+
}
|
|
628
|
+
.dx-btn[data-variant="primary"]:active:not(:disabled) { filter: brightness(.94); }
|
|
629
|
+
.dx-btn[data-variant="danger"] {
|
|
630
|
+
color: var(--dsw-alias-state-error-primary);
|
|
631
|
+
background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 8%, var(--dsw-alias-bg-layer-1));
|
|
632
|
+
border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 34%, var(--dsw-alias-border-l1));
|
|
633
|
+
}
|
|
634
|
+
.dx-btn[data-variant="danger"]:hover:not(:disabled) {
|
|
635
|
+
color: var(--dsw-alias-state-error-primary);
|
|
636
|
+
border-color: var(--dsw-alias-state-error-primary);
|
|
637
|
+
background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 14%, var(--dsw-alias-bg-layer-1));
|
|
638
|
+
}
|
|
639
|
+
.dx-btn[data-size="sm"] { height: var(--dx-control-sm); padding: 0 10px; font-size: var(--dx-font-xs); border-radius: var(--dx-r-sm); }
|
|
640
|
+
.dx-btn[data-size="icon"] { width: var(--dx-control-sm); height: var(--dx-control-sm); padding: 0; border-radius: var(--dx-r-sm); }
|
|
641
|
+
.dx-btn[data-block="true"] { width: 100%; }
|
|
642
|
+
.dx-linkBtn {
|
|
643
|
+
background: none; border: 0; padding: 0; cursor: pointer; display: inline-flex; align-items: center; gap: 2px;
|
|
644
|
+
color: var(--dsw-alias-brand-primary); font-size: var(--dx-font-sm); font-weight: 500;
|
|
645
|
+
}
|
|
646
|
+
.dx-linkBtn:hover { text-decoration: underline; text-underline-offset: 2px; }
|
|
647
|
+
.dx-linkBtn:disabled { color: var(--dsw-alias-label-secondary); cursor: not-allowed; text-decoration: none; }
|
|
648
|
+
|
|
649
|
+
/* ---------------------------------------------------------------- inputs */
|
|
650
|
+
.dx-input, .dx-select, .dx-textarea {
|
|
651
|
+
width: 100%; min-width: 0; color: var(--dsw-alias-label-primary);
|
|
652
|
+
background: var(--dsw-alias-bg-layer-1);
|
|
653
|
+
border: 1px solid var(--dsw-alias-border-l2); border-radius: var(--dx-r-sm);
|
|
654
|
+
font-family: inherit; font-size: var(--dx-font-md); padding: 0 10px; height: var(--dx-control);
|
|
655
|
+
transition: border-color .2s var(--dx-ease), box-shadow .2s var(--dx-ease);
|
|
656
|
+
}
|
|
657
|
+
.dx-textarea { height: auto; min-height: 72px; padding: 8px 10px; resize: vertical; line-height: 1.55; }
|
|
658
|
+
.dx-input:hover, .dx-select:hover, .dx-textarea:hover { border-color: color-mix(in srgb, var(--dsw-alias-brand-primary) 45%, var(--dsw-alias-border-l2)); }
|
|
659
|
+
.dx-input:focus, .dx-select:focus, .dx-textarea:focus {
|
|
660
|
+
outline: none; border-color: var(--dsw-alias-brand-primary);
|
|
661
|
+
box-shadow: var(--dx-ring);
|
|
662
|
+
}
|
|
663
|
+
.dx-input::placeholder, .dx-textarea::placeholder { color: var(--dsw-alias-label-secondary); }
|
|
664
|
+
.dx-select { appearance: none; padding-right: 28px; cursor: pointer;
|
|
665
|
+
background-image: linear-gradient(45deg, transparent 50%, var(--dsw-alias-label-secondary) 50%), linear-gradient(135deg, var(--dsw-alias-label-secondary) 50%, transparent 50%);
|
|
666
|
+
background-position: calc(100% - 15px) 13px, calc(100% - 10px) 13px;
|
|
667
|
+
background-size: 5px 5px, 5px 5px; background-repeat: no-repeat;
|
|
668
|
+
}
|
|
669
|
+
.dx-field { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
|
|
670
|
+
.dx-fieldLabel { color: var(--dsw-alias-label-secondary); font-size: var(--dx-font-sm); font-weight: 500; }
|
|
671
|
+
.dx-fieldLabel > span[aria-hidden="true"] { color: var(--dsw-alias-state-error-primary); }
|
|
672
|
+
.dx-fieldError { color: var(--dsw-alias-state-error-primary); font-size: var(--dx-font-xs); }
|
|
673
|
+
.dx-searchWrap { position: relative; display: inline-flex; align-items: center; min-width: 180px; flex: 1 1 220px; max-width: 320px; }
|
|
674
|
+
.dx-searchWrap .dx-input { padding-left: 30px; }
|
|
675
|
+
.dx-searchIcon { position: absolute; left: 10px; display: inline-flex; color: var(--dsw-alias-label-secondary); pointer-events: none; }
|
|
676
|
+
.dx-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
|
|
677
|
+
.dx-toolbarLeft { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; flex: 1 1 auto; min-width: 0; }
|
|
678
|
+
.dx-toolbarRight { display: flex; align-items: center; gap: 8px; flex: none; }
|
|
679
|
+
.dx-segmented {
|
|
680
|
+
display: inline-flex; align-items: center; gap: 2px; padding: 2px;
|
|
681
|
+
border-radius: var(--dx-r-md); background: var(--dx-surface-2);
|
|
682
|
+
border: 1px solid var(--dsw-alias-border-l1);
|
|
683
|
+
}
|
|
684
|
+
.dx-segBtn {
|
|
685
|
+
border: 0; background: transparent; color: var(--dsw-alias-label-secondary);
|
|
686
|
+
height: 26px; padding: 0 10px; border-radius: var(--dx-r-sm); cursor: pointer;
|
|
687
|
+
font-size: var(--dx-font-xs); font-weight: 500;
|
|
688
|
+
transition: background-color .2s var(--dx-ease), color .2s var(--dx-ease), box-shadow .2s var(--dx-ease);
|
|
689
|
+
}
|
|
690
|
+
.dx-segBtn:hover { color: var(--dsw-alias-label-primary); }
|
|
691
|
+
.dx-segBtn[aria-pressed="true"] {
|
|
692
|
+
color: var(--dsw-alias-label-primary); background: var(--dsw-alias-bg-layer-1);
|
|
693
|
+
box-shadow: var(--dx-shadow-1);
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
/* ---------------------------------------------------------------- switch */
|
|
697
|
+
/* Mirrors the harness's own switch: the thumb must contrast with the track in
|
|
698
|
+
* BOTH states. label-primary equals brand-primary in the shipped themes, so
|
|
699
|
+
* using it made the knob invisible on an enabled (brand-filled) switch; the
|
|
700
|
+
* theme provides label-primary-foreground for the enabled thumb and
|
|
701
|
+
* switch-thumb for the disabled one. */
|
|
702
|
+
.dx-switch {
|
|
703
|
+
position: relative; flex: none; width: 40px; height: 22px; padding: 2px;
|
|
704
|
+
border: 0; border-radius: 999px; cursor: pointer;
|
|
705
|
+
background: var(--dsw-alias-border-l3);
|
|
706
|
+
transition: background-color .2s var(--dx-ease);
|
|
707
|
+
}
|
|
708
|
+
.dx-switch[aria-checked="true"] { background: var(--dsw-alias-brand-primary); }
|
|
709
|
+
.dx-switch:disabled { cursor: not-allowed; opacity: .5; }
|
|
710
|
+
.dx-switchThumb {
|
|
711
|
+
display: block; width: 18px; height: 18px; border-radius: 50%;
|
|
712
|
+
background: var(--dsw-alias-label-primary-foreground);
|
|
713
|
+
box-shadow: 0 1px 2px color-mix(in srgb, var(--dsw-alias-label-primary) 22%, transparent);
|
|
714
|
+
transition: transform .2s var(--dx-ease), background-color .2s var(--dx-ease);
|
|
715
|
+
}
|
|
716
|
+
.dx-switch[aria-checked="false"] .dx-switchThumb { background: var(--dsw-alias-switch-thumb); }
|
|
717
|
+
.dx-switch[aria-checked="true"] .dx-switchThumb { transform: translateX(18px); }
|
|
718
|
+
|
|
719
|
+
/* ---------------------------------------------------------- states / empty */
|
|
720
|
+
.dx-empty {
|
|
721
|
+
display: flex; flex-direction: column; align-items: center; justify-content: center;
|
|
722
|
+
gap: 8px; padding: 32px 16px; text-align: center; color: var(--dsw-alias-label-secondary);
|
|
723
|
+
}
|
|
724
|
+
.dx-emptyIcon {
|
|
725
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
726
|
+
width: 44px; height: 44px; border-radius: 50%;
|
|
727
|
+
color: var(--dsw-alias-label-secondary);
|
|
728
|
+
background: var(--dx-surface-2);
|
|
729
|
+
margin-bottom: 2px;
|
|
730
|
+
}
|
|
731
|
+
.dx-emptyTitle { font-size: var(--dx-font-md); font-weight: 500; color: var(--dsw-alias-label-primary); }
|
|
732
|
+
.dx-emptyText { font-size: var(--dx-font-sm); max-width: 360px; line-height: 1.55; }
|
|
733
|
+
.dx-error {
|
|
734
|
+
display: flex; flex-direction: column; align-items: center; justify-content: center;
|
|
735
|
+
gap: 8px; padding: 36px 16px; text-align: center;
|
|
736
|
+
}
|
|
737
|
+
.dx-errorIcon { display: inline-flex; color: var(--dsw-alias-state-error-primary); }
|
|
738
|
+
.dx-errorTitle { font-size: var(--dx-font-lg); font-weight: var(--dx-text-strong); }
|
|
739
|
+
.dx-errorText { font-size: var(--dx-font-sm); color: var(--dsw-alias-label-secondary); max-width: 400px; line-height: 1.55; }
|
|
740
|
+
.dx-guard { padding: 32px 16px; text-align: center; color: var(--dsw-alias-label-secondary); }
|
|
741
|
+
.dx-guardTitle { color: var(--dsw-alias-state-error-primary); font-weight: var(--dx-text-strong); margin-bottom: 4px; }
|
|
742
|
+
.dx-inlineError { color: var(--dsw-alias-state-error-primary); font-size: var(--dx-font-xs); }
|
|
743
|
+
|
|
744
|
+
/* skeleton */
|
|
745
|
+
.dx-skelGrid { display: grid; gap: 16px; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
|
|
746
|
+
.dx-skelCard {
|
|
747
|
+
border-radius: var(--dx-r-md); border: 1px solid var(--dsw-alias-border-l1);
|
|
748
|
+
background: var(--dsw-alias-bg-layer-1); padding: 16px; min-height: 118px;
|
|
749
|
+
display: flex; flex-direction: column; gap: 10px;
|
|
750
|
+
}
|
|
751
|
+
.dx-skelLine {
|
|
752
|
+
height: 10px; border-radius: var(--dx-r-xs);
|
|
753
|
+
background: linear-gradient(90deg,
|
|
754
|
+
color-mix(in srgb, var(--dsw-alias-label-primary) 7%, transparent) 25%,
|
|
755
|
+
color-mix(in srgb, var(--dsw-alias-label-primary) 13%, transparent) 37%,
|
|
756
|
+
color-mix(in srgb, var(--dsw-alias-label-primary) 7%, transparent) 63%);
|
|
757
|
+
background-size: 400% 100%; animation: dx-shimmer 1.4s ease infinite;
|
|
758
|
+
}
|
|
759
|
+
.dx-skelLine[data-w="40"] { width: 40%; }
|
|
760
|
+
.dx-skelLine[data-w="60"] { width: 60%; }
|
|
761
|
+
.dx-skelLine[data-w="80"] { width: 80%; }
|
|
762
|
+
.dx-skelLine[data-w="100"] { width: 100%; }
|
|
763
|
+
.dx-skelLine[data-h="tall"] { height: 22px; }
|
|
764
|
+
|
|
765
|
+
/* ------------------------------------------------------------------ modal */
|
|
766
|
+
.dx-modalRoot { position: fixed; inset: 0; z-index: 1000; display: flex; align-items: center; justify-content: center; padding: 24px; }
|
|
767
|
+
.dx-modalMask {
|
|
768
|
+
position: absolute; inset: 0;
|
|
769
|
+
background: color-mix(in srgb, var(--dsw-alias-bg-base) 58%, transparent);
|
|
770
|
+
backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);
|
|
771
|
+
animation: dx-fadein .16s var(--dx-ease) both;
|
|
772
|
+
}
|
|
773
|
+
.dx-modal {
|
|
774
|
+
position: relative; z-index: 1; width: min(560px, 100%);
|
|
775
|
+
max-height: min(720px, calc(100vh - 48px)); overflow: auto;
|
|
776
|
+
border-radius: var(--dx-r-md); border: 1px solid var(--dsw-alias-border-l1);
|
|
777
|
+
background: var(--dsw-alias-bg-layer-1);
|
|
778
|
+
box-shadow: var(--dx-shadow-3);
|
|
779
|
+
animation: dx-modalin .2s var(--dx-ease) both;
|
|
780
|
+
scrollbar-width: thin; scrollbar-color: var(--dsw-alias-border-l2) transparent;
|
|
781
|
+
}
|
|
782
|
+
.dx-modal:focus { outline: none; }
|
|
783
|
+
.dx-modalHead { display: flex; align-items: flex-start; gap: 16px; padding: 20px 24px 0; }
|
|
784
|
+
.dx-modalTitle {
|
|
785
|
+
flex: 1 1 auto; min-width: 0; font-size: 16px; font-weight: var(--dx-text-strong); line-height: 1.45;
|
|
786
|
+
overflow-wrap: anywhere; word-break: break-word;
|
|
787
|
+
}
|
|
788
|
+
.dx-modalClose {
|
|
789
|
+
flex: none; background: transparent; border-color: transparent; color: var(--dsw-alias-label-secondary);
|
|
790
|
+
}
|
|
791
|
+
.dx-modalClose:hover:not(:disabled) { color: var(--dsw-alias-label-primary); background: var(--dsw-alias-bg-layer-2); border-color: transparent; }
|
|
792
|
+
.dx-modalBody { padding: 12px 24px 4px; color: var(--dsw-alias-label-primary); font-size: var(--dx-font-md); line-height: 1.6; }
|
|
793
|
+
.dx-modalDetails {
|
|
794
|
+
display: flex; flex-direction: column; gap: 2px; margin-top: 12px; padding: 10px 12px;
|
|
795
|
+
border-radius: var(--dx-r-sm); background: var(--dx-surface-2);
|
|
796
|
+
border: 1px solid var(--dsw-alias-border-l1);
|
|
797
|
+
}
|
|
798
|
+
.dx-modalDetailRow { display: flex; gap: 16px; justify-content: space-between; font-size: var(--dx-font-sm); padding: 3px 0; }
|
|
799
|
+
.dx-modalDetailLabel { color: var(--dsw-alias-label-secondary); flex: none; }
|
|
800
|
+
.dx-modalDetailValue { color: var(--dsw-alias-label-primary); text-align: right; overflow-wrap: anywhere; }
|
|
801
|
+
.dx-modalFields { display: flex; flex-direction: column; gap: 14px; margin-top: 14px; }
|
|
802
|
+
.dx-modalFooter {
|
|
803
|
+
display: flex; align-items: center; justify-content: flex-end; gap: 8px;
|
|
804
|
+
padding: 16px 24px 20px; margin-top: 16px;
|
|
805
|
+
border-top: 1px solid var(--dsw-alias-border-l1);
|
|
806
|
+
}
|
|
807
|
+
.dx-modalFooter .dx-btn[data-variant="danger"] {
|
|
808
|
+
color: var(--dsw-alias-bg-base);
|
|
809
|
+
background: var(--dsw-alias-state-error-primary);
|
|
810
|
+
border-color: var(--dsw-alias-state-error-primary);
|
|
811
|
+
}
|
|
812
|
+
.dx-modalFooter .dx-btn[data-variant="danger"]:hover:not(:disabled) {
|
|
813
|
+
color: var(--dsw-alias-bg-base);
|
|
814
|
+
background: var(--dsw-alias-state-error-primary);
|
|
815
|
+
border-color: var(--dsw-alias-state-error-primary);
|
|
816
|
+
filter: brightness(1.06);
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
/* ----------------------------------------------------------------- toasts */
|
|
820
|
+
.dx-toasts {
|
|
821
|
+
position: fixed; right: 20px; bottom: 20px; z-index: 1001;
|
|
822
|
+
display: flex; flex-direction: column; gap: 10px; width: min(384px, calc(100vw - 40px));
|
|
823
|
+
}
|
|
824
|
+
.dx-toast {
|
|
825
|
+
display: flex; align-items: flex-start; gap: 10px; padding: 12px 14px;
|
|
826
|
+
border-radius: var(--dx-r-md); border: 1px solid var(--dsw-alias-border-l1);
|
|
827
|
+
background: var(--dsw-alias-bg-layer-1);
|
|
828
|
+
box-shadow: var(--dx-shadow-3);
|
|
829
|
+
animation: dx-toastin .2s var(--dx-ease) both;
|
|
830
|
+
}
|
|
831
|
+
.dx-toastIcon { flex: none; display: inline-flex; margin-top: 1px; }
|
|
832
|
+
.dx-toast[data-tone="ok"] .dx-toastIcon { color: var(--dsw-alias-state-success-primary); }
|
|
833
|
+
.dx-toast[data-tone="fail"] .dx-toastIcon { color: var(--dsw-alias-state-error-primary); }
|
|
834
|
+
.dx-toastBody { flex: 1 1 auto; min-width: 0; }
|
|
835
|
+
.dx-toastTitle { font-size: var(--dx-font-md); font-weight: var(--dx-text-strong); }
|
|
836
|
+
.dx-toastMsg { font-size: var(--dx-font-sm); color: var(--dsw-alias-label-secondary); margin-top: 2px; overflow-wrap: anywhere; line-height: 1.5; }
|
|
837
|
+
|
|
838
|
+
/* ------------------------------------------------------------ action cards */
|
|
839
|
+
.dx-actionGroup { display: flex; flex-direction: column; gap: 12px; }
|
|
840
|
+
.dx-actionGrid { display: grid; gap: 16px; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); align-items: start; }
|
|
841
|
+
.dx-actionCard {
|
|
842
|
+
display: flex; flex-direction: column; gap: 14px; min-width: 0;
|
|
843
|
+
border-radius: var(--dx-r-md); padding: 16px; background: var(--dsw-alias-bg-layer-1);
|
|
844
|
+
border: 1px solid var(--dsw-alias-border-l1);
|
|
845
|
+
box-shadow: var(--dx-shadow-1);
|
|
846
|
+
transition: border-color .2s var(--dx-ease), box-shadow .2s var(--dx-ease);
|
|
847
|
+
}
|
|
848
|
+
.dx-actionCard:hover { border-color: var(--dsw-alias-border-l2); box-shadow: var(--dx-shadow-2); }
|
|
849
|
+
.dx-actionHead { display: flex; align-items: flex-start; gap: 10px; }
|
|
850
|
+
.dx-actionIcon {
|
|
851
|
+
flex: none; width: 32px; height: 32px; border-radius: var(--dx-r-sm);
|
|
852
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
853
|
+
color: var(--dsw-alias-brand-primary);
|
|
854
|
+
background: var(--dx-tint-brand);
|
|
855
|
+
}
|
|
856
|
+
.dx-actionTitles { min-width: 0; flex: 1 1 auto; }
|
|
857
|
+
.dx-actionTitle { font-weight: var(--dx-text-strong); font-size: var(--dx-font-md); line-height: 1.45; }
|
|
858
|
+
.dx-actionDesc { color: var(--dsw-alias-label-secondary); font-size: var(--dx-font-sm); margin-top: 3px; line-height: 1.5; }
|
|
859
|
+
.dx-actionBadges { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
|
|
860
|
+
.dx-actionParams { display: flex; flex-direction: column; gap: 12px; }
|
|
861
|
+
.dx-actionFooter { display: flex; align-items: center; gap: 8px; margin-top: 2px; padding-top: 14px; border-top: 1px solid var(--dsw-alias-border-l1); }
|
|
862
|
+
.dx-actionFooter .dx-btn { min-width: 88px; }
|
|
863
|
+
|
|
864
|
+
/* ---------------------------------------------------------------- history */
|
|
865
|
+
.dx-history { display: flex; flex-direction: column; }
|
|
866
|
+
.dx-historyRow { display: flex; align-items: flex-start; gap: 10px; padding: 10px 4px; border-top: 1px solid var(--dsw-alias-border-l1); }
|
|
867
|
+
.dx-historyRow:first-child { border-top: none; }
|
|
868
|
+
.dx-historyDot { flex: none; width: 7px; height: 7px; border-radius: 50%; margin-top: 7px; }
|
|
869
|
+
.dx-historyDot[data-tone="ok"] { background: var(--dsw-alias-state-success-primary); box-shadow: 0 0 0 3px color-mix(in srgb, var(--dsw-alias-state-success-primary) 15%, transparent); }
|
|
870
|
+
.dx-historyDot[data-tone="fail"] { background: var(--dsw-alias-state-error-primary); box-shadow: 0 0 0 3px color-mix(in srgb, var(--dsw-alias-state-error-primary) 15%, transparent); }
|
|
871
|
+
.dx-historyMain { flex: 1 1 auto; min-width: 0; }
|
|
872
|
+
.dx-historyTop { display: flex; align-items: center; gap: 8px; min-width: 0; }
|
|
873
|
+
.dx-historyAction { font-weight: 500; font-size: var(--dx-font-sm); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
874
|
+
.dx-historyMeta { color: var(--dsw-alias-label-secondary); font-size: var(--dx-font-xs); font-variant-numeric: tabular-nums; flex: none; }
|
|
875
|
+
.dx-historyMsg { color: var(--dsw-alias-label-secondary); font-size: var(--dx-font-xs); overflow-wrap: anywhere; margin-top: 2px; }
|
|
876
|
+
|
|
877
|
+
/* ------------------------------------------------------------- misc bits */
|
|
878
|
+
.dx-signalWrap { display: inline-flex; align-items: flex-end; gap: 2px; height: 14px; }
|
|
879
|
+
.dx-signalBar { width: 3px; border-radius: 1px; background: var(--dsw-alias-border-l3); }
|
|
880
|
+
.dx-signalBar[data-on="true"] { background: var(--dsw-alias-state-success-primary); }
|
|
881
|
+
.dx-signalBar:nth-child(1) { height: 4px; }
|
|
882
|
+
.dx-signalBar:nth-child(2) { height: 7px; }
|
|
883
|
+
.dx-signalBar:nth-child(3) { height: 10px; }
|
|
884
|
+
.dx-signalBar:nth-child(4) { height: 13px; }
|
|
885
|
+
.dx-tagList { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
886
|
+
.dx-sublist { display: flex; flex-direction: column; gap: 8px; }
|
|
887
|
+
.dx-subcard {
|
|
888
|
+
border: 1px solid var(--dsw-alias-border-l1); border-radius: var(--dx-r-sm);
|
|
889
|
+
padding: 10px 12px; background: var(--dx-surface-2);
|
|
890
|
+
transition: border-color .2s var(--dx-ease);
|
|
891
|
+
}
|
|
892
|
+
.dx-subcard:hover { border-color: var(--dsw-alias-border-l2); }
|
|
893
|
+
.dx-subcardHead { display: flex; align-items: center; gap: 8px; min-width: 0; }
|
|
894
|
+
.dx-subcardTitle { font-weight: 500; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1 1 auto; }
|
|
895
|
+
.dx-subcardMeta { color: var(--dsw-alias-label-secondary); font-size: var(--dx-font-xs); margin-top: 4px; overflow-wrap: anywhere; }
|
|
896
|
+
|
|
897
|
+
/* GPU + display pair: one card with two columns, so a short list is never
|
|
898
|
+
* stretched by the tall battery card that shares its grid row. */
|
|
899
|
+
.dx-duo { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 4px 20px; }
|
|
900
|
+
.dx-duoCol { min-width: 0; }
|
|
901
|
+
.dx-duoCol + .dx-duoCol { border-left: 1px solid var(--dsw-alias-border-l1); padding-left: 20px; }
|
|
902
|
+
.dx-duoLabel { color: var(--dsw-alias-label-secondary); font-size: var(--dx-font-sm); line-height: 1.45; margin-bottom: 8px; }
|
|
903
|
+
|
|
904
|
+
/* -------------------------------------------------------------- cleanup */
|
|
905
|
+
.dx-cleanupTop { display: flex; flex-wrap: wrap; align-items: center; gap: 16px; }
|
|
906
|
+
.dx-cleanupTotal { font-size: 28px; font-weight: var(--dx-text-strong); font-variant-numeric: tabular-nums; line-height: 1.15; letter-spacing: -0.015em; }
|
|
907
|
+
.dx-cleanupMeta { color: var(--dsw-alias-label-secondary); font-size: var(--dx-font-sm); margin-top: 4px; }
|
|
908
|
+
.dx-cleanupRows { display: flex; flex-direction: column; margin-top: 12px; }
|
|
909
|
+
.dx-cleanRow { display: flex; align-items: center; gap: 12px; padding: 11px 4px; border-top: 1px solid var(--dsw-alias-border-l1); border-radius: var(--dx-r-xs); }
|
|
910
|
+
.dx-cleanRow:first-child { border-top: none; }
|
|
911
|
+
.dx-cleanRow:hover { background: var(--dx-hover); }
|
|
912
|
+
.dx-cleanCheck { flex: none; width: 16px; height: 16px; accent-color: var(--dsw-alias-brand-primary); cursor: pointer; }
|
|
913
|
+
.dx-cleanCheck:disabled { cursor: not-allowed; }
|
|
914
|
+
.dx-cleanMain { flex: 1 1 auto; min-width: 0; }
|
|
915
|
+
.dx-cleanTitle { display: flex; align-items: center; gap: 7px; font-size: var(--dx-font-md); font-weight: 500; min-width: 0; flex-wrap: wrap; }
|
|
916
|
+
.dx-cleanPath { color: var(--dsw-alias-label-secondary); font-size: var(--dx-font-xs); overflow-wrap: anywhere; margin-top: 3px; }
|
|
917
|
+
.dx-cleanSize { flex: none; text-align: right; font-variant-numeric: tabular-nums; font-size: var(--dx-font-md); }
|
|
918
|
+
.dx-cleanSizeSub { color: var(--dsw-alias-label-secondary); font-size: var(--dx-font-xs); }
|
|
919
|
+
.dx-cleanActions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
|
|
920
|
+
|
|
921
|
+
/* ------------------------------------------------- uninstall footprint */
|
|
922
|
+
.dx-fp { display: flex; flex-direction: column; gap: 12px; }
|
|
923
|
+
.dx-fpHead { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
|
|
924
|
+
.dx-fpFacts { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; min-width: 0; }
|
|
925
|
+
.dx-fpSummary {
|
|
926
|
+
display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap;
|
|
927
|
+
padding-top: 10px; border-top: 1px solid var(--dsw-alias-border-l1);
|
|
928
|
+
}
|
|
929
|
+
.dx-fp[data-busy="true"] { opacity: .6; pointer-events: none; }
|
|
930
|
+
.dx-fp .dx-cleanRow[data-tier="shared"] { opacity: .72; }
|
|
931
|
+
|
|
932
|
+
/* ------------------------------------------------------------ benchmark */
|
|
933
|
+
.dx-benchGrid { display: grid; gap: 16px; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); }
|
|
934
|
+
.dx-benchCard {
|
|
935
|
+
display: flex; flex-direction: column; gap: 8px; min-width: 0;
|
|
936
|
+
border: 1px solid var(--dsw-alias-border-l1); border-radius: var(--dx-r-md); padding: 16px;
|
|
937
|
+
background: var(--dx-surface-2);
|
|
938
|
+
}
|
|
939
|
+
.dx-benchHead { display: flex; align-items: center; gap: 8px; min-width: 0; }
|
|
940
|
+
.dx-benchTitle { font-weight: var(--dx-text-strong); font-size: var(--dx-font-md); flex: 1 1 auto; }
|
|
941
|
+
.dx-benchScore { font-size: 28px; font-weight: var(--dx-text-strong); font-variant-numeric: tabular-nums; line-height: 1.1; letter-spacing: -0.015em; }
|
|
942
|
+
.dx-benchUnit { font-size: var(--dx-font-sm); color: var(--dsw-alias-label-secondary); margin-left: 4px; }
|
|
943
|
+
.dx-benchMeta { color: var(--dsw-alias-label-secondary); font-size: var(--dx-font-xs); }
|
|
944
|
+
.dx-benchFacts { display: flex; flex-wrap: wrap; gap: 4px 14px; }
|
|
945
|
+
.dx-benchDelta { display: inline-flex; align-items: center; gap: 4px; font-size: var(--dx-font-xs); font-variant-numeric: tabular-nums; flex: none; }
|
|
946
|
+
.dx-benchDelta[data-tone="up"] { color: var(--dsw-alias-state-success-primary); }
|
|
947
|
+
.dx-benchDelta[data-tone="down"] { color: var(--dsw-alias-state-error-primary); }
|
|
948
|
+
.dx-benchDelta[data-tone="flat"] { color: var(--dsw-alias-label-secondary); }
|
|
949
|
+
|
|
950
|
+
/* ------------------------------------------------------------- keyframes */
|
|
951
|
+
@keyframes dx-spin { to { transform: rotate(360deg); } }
|
|
952
|
+
@keyframes dx-pulse { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }
|
|
953
|
+
@keyframes dx-fadein { from { opacity: 0; } to { opacity: 1; } }
|
|
954
|
+
@keyframes dx-modalin { from { opacity: 0; transform: translateY(8px) scale(.985); } to { opacity: 1; transform: none; } }
|
|
955
|
+
@keyframes dx-toastin { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
|
|
956
|
+
@keyframes dx-shimmer { from { background-position: 100% 0; } to { background-position: -100% 0; } }
|
|
957
|
+
@keyframes dx-orbit { from { transform: rotateX(58deg) rotateZ(0deg); } to { transform: rotateX(58deg) rotateZ(360deg); } }
|
|
958
|
+
@keyframes dx-float { 0%, 100% { transform: translateY(-4px); } 50% { transform: translateY(5px); } }
|
|
959
|
+
@keyframes dx-coreGlow { 0%, 100% { opacity: .5; } 50% { opacity: 1; } }
|
|
960
|
+
@keyframes dx-drift { 0%, 100% { transform: translate3d(0, 0, 0); opacity: .55; } 50% { transform: translate3d(0, -12px, 0); opacity: 1; } }
|
|
961
|
+
|
|
962
|
+
/* ------------------------------------------------------------ responsive */
|
|
963
|
+
@media (max-width: 1080px) {
|
|
964
|
+
.dx-heroCard { grid-template-columns: minmax(0, 1fr); }
|
|
965
|
+
.dx-scene { height: 180px; }
|
|
966
|
+
}
|
|
967
|
+
@media (max-width: 880px) {
|
|
968
|
+
/* Span cards collapse to one grid column here, so the GPU/display pair
|
|
969
|
+
* stacks instead of squeezing two lists into a half-width card. */
|
|
970
|
+
.dx-duo { grid-template-columns: minmax(0, 1fr); }
|
|
971
|
+
.dx-duoCol + .dx-duoCol { border-left: 0; padding-left: 0; margin-top: 12px; }
|
|
972
|
+
.dx-body { flex-direction: column; gap: 12px; }
|
|
973
|
+
.dx-rail {
|
|
974
|
+
width: 100%; flex-direction: row; gap: 4px; padding: 0 0 8px;
|
|
975
|
+
border-right: 0; border-bottom: 1px solid var(--dsw-alias-border-l1);
|
|
976
|
+
overflow-x: auto; overflow-y: hidden; scrollbar-width: none;
|
|
977
|
+
}
|
|
978
|
+
.dx-rail::-webkit-scrollbar { display: none; }
|
|
979
|
+
.dx-railTab { flex: none; height: 32px; padding: 0 12px; border-radius: var(--dx-r-sm); }
|
|
980
|
+
.dx-railTab[aria-selected="true"]::before { display: none; }
|
|
981
|
+
.dx-title { max-width: 60vw; }
|
|
982
|
+
.dx-card[data-span="2"] { grid-column: auto; }
|
|
983
|
+
.dx-grid2 { grid-template-columns: minmax(0, 1fr); }
|
|
984
|
+
}
|
|
985
|
+
@media (max-width: 720px) {
|
|
986
|
+
.dx-root { --dx-header-top-base: 16px; }
|
|
987
|
+
.dx-header { flex-wrap: wrap; padding: var(--dx-header-top) 16px 12px; gap: 10px; }
|
|
988
|
+
.dx-body { padding: 12px 16px 16px; }
|
|
989
|
+
.dx-headerActions { width: 100%; justify-content: flex-end; }
|
|
990
|
+
.dx-title { font-size: 18px; max-width: 70vw; }
|
|
991
|
+
.dx-heroTitle { font-size: 20px; }
|
|
992
|
+
.dx-grid, .dx-grid2, .dx-grid3, .dx-skelGrid, .dx-actionGrid { grid-template-columns: minmax(0, 1fr); }
|
|
993
|
+
.dx-kpiGrid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
994
|
+
.dx-toasts { left: 16px; right: 16px; width: auto; bottom: 16px; }
|
|
995
|
+
.dx-modalRoot { padding: 14px; }
|
|
996
|
+
.dx-scene { height: 160px; }
|
|
997
|
+
}
|
|
998
|
+
@media (max-width: 520px) {
|
|
999
|
+
.dx-kpiGrid { grid-template-columns: minmax(0, 1fr); }
|
|
1000
|
+
.dx-headerActions { justify-content: flex-start; }
|
|
1001
|
+
}
|
|
1002
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1003
|
+
.dx-root *, .dx-root *::before, .dx-root *::after {
|
|
1004
|
+
animation-duration: .001ms !important; animation-iteration-count: 1 !important;
|
|
1005
|
+
transition-duration: .001ms !important; scroll-behavior: auto !important;
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
`;function Oa(){function a(e){e.effect(()=>e.locale.register(Ee,{zh:Ba,en:Da}),"devicex: dictionaries");let r=e.locale.bind(Ee);e.effect(()=>{let n=document.createElement("style");return n.setAttribute("data-devicex",""),n.textContent=ht,document.head.appendChild(n),()=>{n.parentNode&&n.parentNode.removeChild(n)}},"devicex: styles"),e.slots.inject("main",()=>e.slots.register({name:"main",key:dt,locale:Ee},Ra)),e.slots.inject("sidebar.panellist",()=>e.slots.register({name:"sidebar.panellist",id:dt,order:20,locale:Ee,label:()=>r("panel")},Aa))}return{inject:["slots","locale"],apply:a}}window.__ModuleLoader__.load({id:"@cfour-hi/dsh-plugin-devicex",factory:a=>(Bt(a("react")),Oa())});})();
|