@import"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap";:root{font-family:Inter,Microsoft YaHei,sans-serif;color:#dce5f2;background:#09101b;font-synthesis:none}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}.app{display:grid;grid-template:64px calc(100vh - 64px) / 280px 1fr;background:radial-gradient(circle at 80% 10%,#142a3e55,transparent 38%),#09101b}header{grid-column:1/3;display:flex;align-items:center;gap:8px;padding:0 22px;border-bottom:1px solid #1c2b3d;background:#0c1522dd}.brand{display:flex;align-items:center;gap:11px}.brand>span{display:grid;place-items:center;width:35px;height:35px;border-radius:10px;background:linear-gradient(145deg,#22d3ee,#2563eb);color:#fff;font-weight:700}.brand b{display:block}.brand small{display:block;color:#667993;font-size:9px;letter-spacing:1.5px;margin-top:2px}.stats{margin:auto;color:#8293a9;font-size:13px}.stats strong{color:#e9f3ff;font-size:17px}.stats i{display:inline-block;height:18px;border-left:1px solid #253448;margin:0 20px;vertical-align:middle}.topNav{display:flex;gap:5px;margin-left:auto}.topNav button{border-color:transparent;background:transparent;color:#7f91a8;min-height:40px}.topNav button.selected,.topNav button:hover{color:#eaf5ff;background:#172a40;border-color:#2a4864}.alertNav b{display:inline-grid;place-items:center;min-width:18px;height:18px;margin-left:5px;padding:0 4px;border-radius:10px;background:#e44f69;color:#fff;font-size:10px}button{border:1px solid #2a3a4f;background:#152235;color:#cad6e5;border-radius:7px;padding:8px 13px;cursor:pointer}button:hover{border-color:#3f5875;background:#1a2a40}button:disabled{opacity:.4}.ghost{background:transparent}aside{border-right:1px solid #1b293a;background:#0b1420;padding:14px 10px;overflow:auto}.asideTitle{display:flex;align-items:center;justify-content:space-between;padding:4px 8px 12px;color:#71849d;text-transform:uppercase;font-size:11px;letter-spacing:1px}.asideTitle>div{display:flex;gap:5px}.asideTitle button{padding:2px 8px;font-size:19px}.machine,.service{width:100%;display:flex;align-items:center;text-align:left;border:0;background:transparent;margin:2px 0}.machine{height:42px;font-weight:600}.machine.active{background:#142438}.machine small,.service small{margin-left:auto;color:#60738c;font-size:9px}.service{padding-left:30px;color:#96a6ba}.service.active{background:#172a3e;color:#eff7ff}.machine em,.service em{width:7px;height:7px;border-radius:50%;background:#526174;margin-right:10px}.machine em.online,.service em.running{background:#23d18b;box-shadow:0 0 8px #23d18b99}.service em.crashed{background:#ff5570}.content{min-width:0;padding:32px 38px;overflow:auto}.title{display:flex;justify-content:space-between;align-items:end}.title p{color:#54708f;font-size:10px;letter-spacing:1.5px}.title h1{margin:5px 0;font-size:30px}.badge{font-size:11px;border:1px solid #32465c;padding:6px 10px;border-radius:20px}.badge.running{color:#35dfa0;border-color:#208b69}.actions{display:flex;gap:8px;margin:25px 0}.primary{background:#0878d8;border-color:#1790ef;color:#fff}.danger{color:#ff7387}.details{display:grid;grid-template-columns:120px 1fr 1fr 150px;gap:1px;background:#1b2b3e;border:1px solid #1b2b3e;border-radius:8px;overflow:hidden}.details>div{background:#0e1825;padding:14px}.details span,.deploy small{display:block;color:#667991;font-size:10px;margin-bottom:7px}.details b{font:500 12px JetBrains Mono;word-break:break-all}.deploy{display:flex;gap:12px;align-items:center;margin-top:16px;padding:14px;background:#0e1825;border:1px solid #1b2b3e;border-radius:8px}.deploy>div{margin-right:auto}.deploy input{width:150px}.consoleHead{display:flex;justify-content:space-between;align-items:center;margin-top:26px}.consoleHead span{color:#60748e;font-size:10px;margin-left:10px}.consoleButtons{display:flex;gap:7px}.console{height:360px;overflow:auto;background:#050a11;border:1px solid #1b2a3c;border-radius:8px;padding:14px;font:11px/1.7 JetBrains Mono;color:#aebed1}.console div{white-space:pre-wrap}.console time{color:#3e536b;margin-right:12px}.console .stderr{color:#ff7589}.empty{height:70vh;display:grid;place-content:center;text-align:center;color:#63748a}.empty b{color:#bfccdc;font-size:20px}.dashboard{max-width:1280px;margin:0 auto}.subtle{color:#7488a0;font-size:12px}.metricGrid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:26px 0 14px}.metricCard{min-height:112px;padding:17px;border:1px solid #1d3045;border-radius:11px;background:linear-gradient(145deg,#112235,#0d1826)}.metricCard span,.metricCard small{display:block;color:#70849c;font-size:11px}.metricCard strong{display:block;margin:12px 0 5px;color:#eaf4ff;font:600 25px JetBrains Mono}.metricCard.cyan strong{color:#45dcec}.metricCard.blue strong{color:#619bff}.metricCard.purple strong{color:#c18aff}.chartGrid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:30px}.chartRange{display:flex;align-items:center;gap:6px;margin:4px 0 10px;color:#71849b;font-size:11px}.chartRange button{padding:5px 9px;font-size:11px}.chartRange button.selected{background:#146db2;border-color:#2494e9;color:#fff}.chartCard{min-height:165px;padding:15px;border:1px solid #1b2e43;border-radius:10px;background:#0d1825}.chartLabel{display:flex;justify-content:space-between;color:#a9bad0;font-size:12px}.chartLabel span{color:#71859e;font:11px JetBrains Mono}.chartCard svg{width:100%;height:105px;margin-top:12px;overflow:visible}.chartCard line{stroke:#203247;stroke-width:.6}.chartCard polyline{fill:none;stroke-width:2;vector-effect:non-scaling-stroke}.sectionHeading{display:flex;justify-content:space-between;align-items:end;margin:12px 0}.sectionHeading p{margin:0 0 5px;color:#54708f;font-size:10px;letter-spacing:1.4px}.sectionHeading h2{margin:0;font-size:19px}.sectionHeading>span{color:#6d8199;font-size:11px}.serviceResourceGrid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.resourceCard{width:100%;padding:15px;text-align:left;background:#0e1b2a;border-color:#1e3349}.resourceCard>div:first-child{display:flex;align-items:center;gap:8px}.resourceCard b{color:#e5effb}.resourceCard small{color:#7589a0;font-size:10px}.stateDot{display:inline-block;width:8px;height:8px;border-radius:50%;background:#526174}.stateDot.running{background:#23d18b;box-shadow:0 0 8px #23d18b99}.stateDot.crashed{background:#ff5570}.stateDot.starting,.stateDot.stopping{background:#e6b34a}.resourceValues{display:flex;gap:24px;margin-top:16px;color:#71869e;font-size:11px}.resourceValues strong{margin-left:5px;color:#cbd9e8;font:500 12px JetBrains Mono}.emptyCard{padding:38px;border:1px dashed #294058;border-radius:10px;color:#71849b;text-align:center}.emptyCard.large{margin-top:30px}.toolbar{display:flex;align-items:center;gap:7px;margin:25px 0 12px;color:#71849b;font-size:12px}.toolbar button{padding:6px 12px}.toolbar button.selected{background:#146db2;border-color:#2494e9;color:#fff}.globalServiceList{overflow:hidden;border:1px solid #1c3045;border-radius:10px}.globalServiceRow{width:100%;display:grid;grid-template-columns:15px minmax(180px,1fr) 100px 110px 100px;align-items:center;gap:12px;border:0;border-bottom:1px solid #1b2c40;border-radius:0;background:#0d1825;text-align:left}.globalServiceRow:last-child{border-bottom:0}.globalServiceRow>div b,.globalServiceRow>div small{display:block}.globalServiceRow>div small{margin-top:4px;color:#70849d;font-size:10px}.globalServiceRow>strong{color:#bcd0e3;font:500 12px JetBrains Mono}.globalServiceRow>em{color:#71869c;font-size:10px;font-style:normal}.alertList{display:grid;gap:10px;margin-top:25px}.alertCard{display:grid;grid-template-columns:34px 1fr auto;gap:12px;align-items:start;padding:15px;border:1px solid #533b31;border-radius:10px;background:#201b1b}.alertCard.critical{border-color:#713649;background:#251720}.alertIcon{display:grid;place-items:center;width:28px;height:28px;border-radius:50%;background:#c27e36;color:#fff;font-weight:700}.alertCard.critical .alertIcon{background:#d14361}.alertCard b{color:#f2e5db}.alertCard p{margin:6px 0;color:#c2a8a1;font-size:12px}.alertCard small{color:#8d7772;font-size:10px}.alertCard button{padding:6px 10px}.toast{position:fixed;right:25px;top:78px;background:#662b38;border:1px solid #b3455b;padding:12px 18px;border-radius:8px;z-index:30}.login{min-height:100vh;display:grid;place-items:center;background:radial-gradient(circle at center,#163150,#09101b 60%)}.login form,.modal form{width:380px;background:#0e1927;border:1px solid #26384d;border-radius:14px;padding:28px;box-shadow:0 30px 80px #0008}.login .brand{margin-bottom:30px}label{display:block;color:#8294aa;font-size:11px;margin:14px 0}input,select,textarea{display:block;width:100%;margin-top:7px;background:#09131f;border:1px solid #293b50;border-radius:7px;padding:10px;color:#e5edf7;outline:none}input:focus,select:focus,textarea:focus{border-color:#198ae8}.login form>button{width:100%;margin-top:10px;background:#0878d8;color:#fff}.error{color:#ff7186;font-size:12px}.modal{position:fixed;inset:0;background:#03070cb8;display:grid;place-items:center;z-index:10}.modal form{width:560px;max-height:92vh;overflow:auto}.modalTitle{display:flex;justify-content:space-between;align-items:center}.modalTitle h2{margin:0}.modalTitle small{display:block;color:#647a94;margin-top:5px;max-width:600px;overflow:hidden;text-overflow:ellipsis}.modalTitle button{border:0;background:transparent;font-size:24px}.row{display:grid;grid-template-columns:1fr 1fr;gap:12px}.check{display:flex;align-items:center;gap:8px}.check input{width:auto;margin:0}.modal .primary{width:100%;margin-top:8px}.inputWithButton{display:grid;grid-template-columns:1fr auto;gap:7px;align-items:end}.inputWithButton button{height:39px}.pathPicker{position:fixed;inset:0;background:#020508d9;display:grid;place-items:center;z-index:20}.pathPanel{width:min(760px,92vw);height:min(620px,86vh);display:flex;flex-direction:column;background:#0d1825;border:1px solid #2a3d52;border-radius:14px;padding:22px;box-shadow:0 30px 90px #000}.pathActions{display:flex;justify-content:space-between;margin:18px 0 10px}.pathActions .primary{width:auto;margin:0}.fileList{flex:1;overflow:auto;border:1px solid #1d3045;border-radius:8px;background:#08111c;padding:6px}.fileList>p{color:#71849a;text-align:center;margin-top:80px}.fileList button{width:100%;display:grid;grid-template-columns:28px 1fr auto;align-items:center;text-align:left;background:transparent;border:0;margin:1px 0}.fileList button:hover{background:#15273a}.fileList b{font:500 12px JetBrains Mono;overflow:hidden;text-overflow:ellipsis}.fileList small{color:#60748d}.keyWarning{color:#ffba5c}.muted{color:#71849a;font-size:12px;line-height:1.6}.keyList{margin-top:22px;border-top:1px solid #26384d;padding-top:16px}.keyListTitle,.keyRecord{display:flex;justify-content:space-between;gap:12px;align-items:center}.keyListTitle span,.keyRecord small{color:#71849a;font-size:11px}.keyRecord{margin-top:10px;padding:12px;border:1px solid #26384d;border-radius:8px;background:#09131f}.keyRecord>div{min-width:0}.keyRecord b,.keyRecord small{display:block;overflow-wrap:anywhere}.keyRecord small{margin-top:5px}.keyRecord button{flex:0 0 auto}.revoked{color:#75869a;font-size:11px;white-space:nowrap}textarea{height:110px;font:12px/1.5 JetBrains Mono;resize:none}@media(max-width:800px){.app{grid-template:64px 200px 1fr/1fr}header{grid-column:1}.stats{display:none}aside{border-right:0;border-bottom:1px solid #1b293a}.content{padding:20px}.details{grid-template-columns:1fr 1fr}.deploy{flex-wrap:wrap}.modal form{width:92vw}.row{grid-template-columns:1fr}header{padding:0 12px;gap:5px}header .brand>div{display:none}.topNav{margin-left:auto}.topNav button{padding:7px 8px;font-size:11px}header>.ghost{display:none}.metricGrid{grid-template-columns:repeat(2,1fr)}.chartGrid,.serviceResourceGrid{grid-template-columns:1fr}.globalServiceRow{grid-template-columns:12px 1fr auto;gap:8px;padding:13px 10px}.globalServiceRow>strong,.globalServiceRow>em{grid-column:2;display:inline-block;margin-right:10px}.globalServiceRow>strong:nth-of-type(1):before{content:"CPU ";color:#71849b;font-family:Inter,sans-serif}.globalServiceRow>strong:nth-of-type(2):before{content:"内存 ";color:#71849b;font-family:Inter,sans-serif}.globalServiceRow>em{grid-column:3;grid-row:1 / span 2}.sectionHeading{align-items:start;flex-direction:column;gap:7px}.title h1{font-size:24px}}@media(max-width:430px){.app{grid-template:58px 180px 1fr / 1fr}.content{padding:16px 12px 28px}aside{padding:10px 7px}.metricCard{min-height:96px;padding:13px}.metricCard strong{font-size:20px}.metricCard small{font-size:9px}.chartCard{min-height:145px}.chartCard svg{height:85px}}
