@font-face{font-family:LXGW WenKai;src:url(/fonts/LXGWWenKai-Regular.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:LXGW WenKai;src:url(/fonts/LXGWWenKai-Medium.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}:root,:root[data-theme=dark]{color-scheme:dark;--bg: #0c0c0c;--panel: #141414;--panel-2: #101010;--border: #004400;--border-soft: #003000;--text: #00ee00;--label: #00c060;--sub: #007700;--dim: #2e7a2e;--input-bg: #000;--input-border: #009900;--btn-bg: #1a1a1a;--btn-border: #005500;--btn-hover: #003300;--btn-active: #009900;--btn-text: #00dd00;--chip-ok: #00ff00;--chip-ok-bg: #002f00;--chip-warn: #ffb000;--chip-warn-bg: #332500;--warn-text: #ffb000;--danger-text: #ff5c5c;--danger-bg: #330000;--badge-bg: #002a00;--badge-text: #00ff88;--focus: #00ff66;--accent: #00ff00;--ok: #00cc00;--shadow: 0 0 6px rgba(0, 255, 0, .12);--chart-grid: #003300;--chart-line-v: #3af07c;--chart-line-i: #22aaff;--chart-line-p: #ffb000}:root[data-theme=light]{color-scheme:light;--bg: #eef1ee;--panel: #ffffff;--panel-2: #f4f8f4;--border: #9dbb9d;--border-soft: #d6e4d6;--text: #1a5a1a;--label: #2a6a2a;--sub: #6a9a6a;--dim: #5a8a5a;--input-bg: #ffffff;--input-border: #4a8a4a;--btn-bg: #eaf3ea;--btn-border: #7baa7b;--btn-hover: #cde5cd;--btn-active: #a8d4a8;--btn-text: #1a5a1a;--chip-ok: #0d7a0d;--chip-ok-bg: #d9f0d9;--chip-warn: #8a5a00;--chip-warn-bg: #f5e8c8;--warn-text: #9a5a00;--danger-text: #c22;--danger-bg: #fbe4e4;--badge-bg: #e0f0e0;--badge-text: #0d6a0d;--focus: #0d8a2a;--accent: #0d8a2a;--ok: #0d8a2a;--shadow: 0 1px 3px rgba(0, 60, 0, .1);--chart-grid: #cfe4cf;--chart-line-v: #0d8a2a;--chart-line-i: #0a63b8;--chart-line-p: #c76a00}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0;font-family:LXGW WenKai,Noto Sans CJK SC,Source Han Sans SC,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,system-ui,sans-serif;background:var(--bg);color:var(--text);min-height:100vh;font-size:14px}#app{max-width:1080px;margin:0 auto;padding:6px 12px 40px}.topbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:6px 2px 10px;border-bottom:1px solid var(--border)}.brand{font-weight:600;color:var(--label);font-size:15px;letter-spacing:.5px}.brand small{color:var(--dim);font-weight:400;margin-left:8px}.spacer{flex:1}button,input,select{font:inherit;color:inherit;background:var(--input-bg);border:1px solid var(--input-border);border-radius:4px;padding:4px 10px;min-height:28px}button{background:var(--btn-bg);color:var(--btn-text);border-color:var(--btn-border);cursor:pointer;-webkit-user-select:none;user-select:none}button:hover:not(:disabled){background:var(--btn-hover)}button:active:not(:disabled){background:var(--btn-active)}button:disabled{opacity:.45;cursor:not-allowed}button.primary{background:#002a00;border-color:var(--chip-ok);color:var(--chip-ok)}button.danger{border-color:var(--danger-text);color:var(--danger-text);background:var(--danger-bg)}input[type=number]{width:110px;font-variant-numeric:tabular-nums}section.panel{background:var(--panel);border:1px solid var(--border);border-radius:6px;padding:10px 12px;margin-top:10px;box-shadow:var(--shadow)}.panel h2{margin:0 0 8px;font-size:13px;color:var(--label);font-weight:600;text-transform:uppercase;letter-spacing:1px}.meter-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px}.meter{border:1px solid var(--border);background:var(--panel-2);border-radius:5px;padding:8px 10px;text-align:center}.meter .mv{font-size:26px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--text)}.meter .mv .u{font-size:13px;color:var(--dim);margin-left:2px}.meter .mk{font-size:11px;color:var(--sub);margin-bottom:2px}.meter.hl .mv{color:var(--accent)}.chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.chip{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--border);border-radius:12px;padding:2px 10px;font-size:12px;background:var(--panel-2);color:var(--dim)}.chip .dot{width:8px;height:8px;border-radius:50%;background:var(--dim)}.chip.ok{border-color:var(--chip-ok);color:var(--chip-ok);background:var(--chip-ok-bg)}.chip.ok .dot{background:var(--chip-ok);box-shadow:0 0 4px var(--chip-ok)}.chip.warn{border-color:var(--chip-warn);color:var(--chip-warn);background:var(--chip-warn-bg)}.chip.warn .dot{background:var(--chip-warn)}.chip.err{border-color:var(--danger-text);color:var(--danger-text);background:var(--danger-bg)}.chip.err .dot{background:var(--danger-text)}.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:6px 0}.row label{color:var(--sub);font-size:12px}.log{background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:6px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:1.5;height:150px;overflow-y:auto;white-space:pre-wrap;word-break:break-all;color:var(--label)}.log .tx{color:var(--chip-warn);background:linear-gradient(90deg,rgba(255,176,0,.08),transparent 70%);padding-left:6px;border-left:2px solid var(--chip-warn)}.log .rx{color:var(--text);background:linear-gradient(90deg,rgba(0,255,136,.07),transparent 70%);padding-left:6px;border-left:2px solid var(--led-green)}.log .warn{color:var(--chip-warn)}.log .error{color:var(--danger-text)}.log .info{color:var(--sub)}.backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:90}.dialog{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:14px 16px;width:min(420px,92vw);box-shadow:var(--shadow)}.dialog h3{margin:0 0 8px;color:var(--label);font-size:14px}.dialog p{margin:6px 0;color:var(--text);font-size:13px;line-height:1.6}.dialog .row{justify-content:flex-end;margin-top:10px}.notice{color:var(--dim);font-size:12px;margin:6px 0}.err-text{color:var(--danger-text)}.statusbar{display:flex;gap:14px;padding:4px 2px;font-size:11px;color:var(--sub);border-bottom:1px solid var(--border-soft);margin-bottom:6px;flex-wrap:wrap}nav.tabs{display:flex;gap:4px;margin:8px 0 4px;flex-wrap:wrap}nav.tabs button{border-radius:5px 5px 0 0;border-bottom:none}nav.tabs button.active{background:var(--btn-active);color:var(--bg);border-color:var(--btn-active)}:root[data-theme=dark]{--bezel: #0b0e0b;--bezel-2: #121712;--groove: #050705;--lcd: #03130a;--lcd2: #02180c;--phosphor: #b8ffcf;--phosphor-dim: #2f7a4a;--amber: #ffcf7a;--led-red: #ff5c5c;--led-red-dim: #5c1616;--led-green: #00ff88;--led-green-dim: #0a3a22;--led-amber: #ffb000;--led-amber-dim: #4a3000;--key-face: linear-gradient(180deg, #2a2f2a 0%, #1a1e1a 100%);--key-border: #3a423a;--key-text: #cfe8cf}:root[data-theme=light]{--bezel: #dfe4de;--bezel-2: #eef1ec;--groove: #b9c2b6;--lcd: #eef8ee;--lcd2: #e0f2e0;--phosphor: #0a4a1f;--phosphor-dim: #7aaa7f;--amber: #7a4a00;--led-red: #c22;--led-red-dim: #f4c4c4;--led-green: #0d8a2a;--led-green-dim: #bde6c6;--led-amber: #b06000;--led-amber-dim: #ecd9b0;--key-face: linear-gradient(180deg, #f7faf5 0%, #dfe6dc 100%);--key-border: #a9b5a6;--key-text: #234423}body{background:radial-gradient(1200px 500px at 50% -120px,color-mix(in srgb,var(--border) 22%,transparent),transparent 70%),var(--bg)}#app{max-width:1200px}.topbar{background:linear-gradient(180deg,var(--bezel-2),var(--bezel));border:1px solid var(--groove);border-radius:8px 8px 0 0;padding:10px 14px;box-shadow:inset 0 1px #ffffff0d,var(--shadow);margin-top:6px}.brand{font-family:ui-monospace,Courier New,monospace;letter-spacing:2px;color:var(--label);text-shadow:0 0 6px color-mix(in srgb,var(--accent) 40%,transparent)}.brand small{letter-spacing:1px}button,select,input[type=number],input[type=text]{border-radius:3px;background:var(--key-face);border:1px solid var(--key-border);color:var(--key-text);box-shadow:0 1px #ffffff0f inset,0 1px 2px #0006;font-family:inherit}button:active:not(:disabled){box-shadow:0 0 0 1px var(--btn-active) inset;transform:translateY(1px)}button.primary{background:linear-gradient(180deg,#0e3f1e,#082a12);border-color:#0f6b2e;color:#a6ffc6}button.primary:disabled{opacity:.4}button.danger{background:linear-gradient(180deg,#451010,#2b0a0a);border-color:#7a2424;color:#ffb0b0}nav.tabs{gap:2px}nav.tabs button{border-radius:3px 3px 0 0;border:1px solid var(--groove);border-bottom:none;background:linear-gradient(180deg,var(--bezel-2),var(--bezel));color:var(--sub);font-weight:600;letter-spacing:.5px}nav.tabs button.active{background:linear-gradient(180deg,#123c1c,#0a2411);color:var(--phosphor);border-color:#174a22}.panel{background:linear-gradient(180deg,var(--bezel-2),var(--bezel));border-color:var(--groove);border-radius:6px;box-shadow:inset 0 1px #ffffff0a,var(--shadow)}.panel h2{font-family:ui-monospace,Courier New,monospace;letter-spacing:1.5px;color:var(--label)}.meter-row{display:grid;gap:10px;margin-bottom:8px}.meter-row.feat{grid-template-columns:2fr 1fr}.meter-row.small{grid-template-columns:repeat(5,1fr)}@media(max-width:900px){.meter-row.feat{grid-template-columns:1fr}.meter-row.small{grid-template-columns:repeat(2,1fr)}}.meter{border:1px solid #2a342a;border-radius:6px;background:linear-gradient(180deg,color-mix(in srgb,var(--bezel) 80%,black),var(--bezel));box-shadow:inset 0 2px 5px #0000008c,0 0 0 1px #050705,0 1px #ffffff0d;padding:8px 10px;min-width:0;position:relative}.meter:before{content:"";position:absolute;top:0;left:6px;right:6px;height:1px;background:#ffffff0f}.meter .mk{font-size:10px;letter-spacing:1.6px;color:var(--sub);text-transform:uppercase;margin-bottom:4px;text-align:left}.meter .mv{font-family:ui-monospace,DSEG7,Courier New,monospace;font-variant-numeric:tabular-nums;font-weight:700;text-align:left;color:var(--phosphor-dim);text-shadow:none;transition:color .05s}.meter .u{color:var(--dim);font-size:11px}.meter{display:flex;flex-direction:column;align-items:stretch}.meter .mv,.meter .u{display:inline}.meter .valuebox{background:linear-gradient(180deg,var(--lcd),var(--lcd2));border:1px solid #041a0c;border-radius:3px;padding:4px 8px;box-shadow:inset 0 2px 6px #00000080}.meter.big.green .mv{color:var(--phosphor);text-shadow:0 0 10px color-mix(in srgb,var(--led-green) 55%,transparent)}.meter.big.amber .mv{color:var(--amber);text-shadow:0 0 10px color-mix(in srgb,var(--led-amber) 50%,transparent)}.meter.big .mk{color:var(--label);font-size:11px}.meter.big .mv{font-size:40px}.meter .mv{font-size:22px}.setline{font-family:ui-monospace,Courier New,monospace;font-size:12px;color:var(--label);background:var(--groove);border-radius:3px;padding:4px 10px;margin-bottom:8px;letter-spacing:.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chip{border:1px solid var(--groove);background:linear-gradient(180deg,var(--bezel-2),var(--bezel));border-radius:2px;padding:3px 10px 3px 6px;font-family:ui-monospace,Courier New,monospace;letter-spacing:.5px}.chip .dot{width:9px;height:9px;border-radius:50%;box-shadow:0 0 0 1px #00000080}.chip.ok .dot{background:var(--led-green);box-shadow:0 0 7px var(--led-green)}.chip.warn .dot{background:var(--led-amber);box-shadow:0 0 7px var(--led-amber)}.chip.err .dot{background:var(--led-red);box-shadow:0 0 7px var(--led-red)}.chip:not(.ok):not(.warn):not(.err) .dot{background:#777}.statusbar{color:var(--dim)}.log{border:1px solid var(--groove);background:#050805;border-radius:4px;color:var(--phosphor-dim)}.log .tx{color:var(--amber)}.deco-wrap{margin:4px 0 2px;background:linear-gradient(180deg,var(--groove),var(--bezel));border:1px solid var(--groove);border-radius:3px;padding:2px 6px}.meter-row{display:grid;gap:8px;margin-bottom:8px;min-width:0}.meter-row.actual{grid-template-columns:minmax(220px,2fr) minmax(130px,1fr) minmax(130px,1fr)}.meter-row.set{grid-template-columns:repeat(2,minmax(160px,1fr))}.meter-row.aux{grid-template-columns:repeat(3,minmax(120px,1fr))}@media(max-width:900px){.meter-row.actual{grid-template-columns:1fr 1fr}.meter-row.actual .meter.big{grid-column:1 / -1}.meter-row.set,.meter-row.aux{grid-template-columns:1fr 1fr}}.meter .mk{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.meter .valuebox{min-width:0;display:flex;align-items:baseline;gap:6px;white-space:nowrap;overflow:hidden}.meter .valuebox .mv{overflow:hidden;text-overflow:clip;flex:none}.meter .u{flex:none}.meter.big .valuebox .mv{font-size:clamp(26px,4.2vw,46px)}.meter.mid .valuebox .mv{font-size:clamp(20px,3vw,32px)}.meter.smallv .valuebox .mv{font-size:clamp(16px,2.2vw,24px)}.meter.smallv .valuebox .mv{color:var(--phosphor);text-shadow:0 0 8px color-mix(in srgb,var(--led-green) 45%,transparent)}.meter.smallv .valuebox .u{color:var(--label);font-size:12px}:root[data-theme=light] .meter.smallv .valuebox .mv{color:#0a6a2a;text-shadow:none}:root[data-theme=light] .meter.smallv .valuebox .u{color:#1a6a2a}.meter .valuebox{justify-content:center;text-align:center}.meter-row.actual .valuebox .mv{min-width:6ch;text-align:right}.meter-row.actual .valuebox .u{text-align:left}.meter.amber .mv{color:var(--amber);text-shadow:0 0 8px color-mix(in srgb,var(--led-amber) 50%,transparent)}.limit-note{font-size:11px;color:var(--dim);margin:-2px 2px 8px;font-family:ui-monospace,monospace}.deco-wrap{display:flex;align-items:stretch;gap:8px;margin:4px 0 6px;min-height:44px;background:linear-gradient(180deg,var(--groove),var(--bezel));border:1px solid var(--groove);border-radius:4px;padding:4px 6px}.deco-vin{display:flex;flex-direction:column;justify-content:center;gap:1px;min-width:118px;padding:2px 10px 2px 6px;border-right:1px solid var(--border-soft);background:linear-gradient(180deg,var(--lcd),var(--lcd2));border-radius:3px}.deco-vin .lbl{font-size:9px;letter-spacing:1.6px;color:var(--sub);text-transform:uppercase}.deco-vin .val{font-family:ui-monospace,Courier New,monospace;font-size:19px;font-weight:700;color:var(--amber);text-shadow:0 0 8px color-mix(in srgb,var(--led-amber) 50%,transparent);white-space:nowrap}.deco-wrap canvas{flex:1;min-width:0;display:block}select,option{background-color:var(--panel-2);color:var(--text)}select:disabled,option:disabled{color:var(--dim)}select{border:1px solid var(--input-border)}input[type=checkbox]{accent-color:var(--accent)}.chart-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:6px 4px 2px;margin-top:4px}.chart-legend{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.chart-legend .item{display:inline-flex;align-items:center;gap:5px;cursor:pointer;font-size:12px;color:var(--text);-webkit-user-select:none;user-select:none;border:1px solid var(--border-soft);border-radius:12px;padding:1px 8px;background:var(--panel-2);min-height:24px;box-shadow:none}.chart-legend .item:hover{border-color:var(--border);background:var(--panel-2)}.chart-legend .item:active{transform:none}.chart-legend .item.off{opacity:.4;text-decoration:line-through;border-style:dashed}.chart-legend .sw{width:10px;height:10px;border-radius:2px;display:inline-block;flex:none}.chart-legend input[type=checkbox]{width:auto;margin:0}.chart-bar .opt,.chart-bar .ctl{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--label)}.chart-bar #chart-primary{min-height:24px;font-size:12px;padding:2px 6px}.chart-bar #chart-follow{font-size:11px;padding:1px 8px;min-height:24px}.chart-bar #chart-follow.on{color:var(--chip-ok);border-color:var(--chip-ok)}.legend-hint{font-size:10px;color:var(--dim)}.chart-title{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:10px 0 4px}.chart-title .ct-txt{font-size:12px;letter-spacing:1px;color:var(--label);font-weight:600}.chart-title .ct-sub{font-size:10px;color:var(--dim)}canvas.cc-canvas{touch-action:none;cursor:crosshair}.chart-wrap{position:relative}.chart-wrap .cc-canvas{border-radius:4px}.chart-wrap.scan{border:1px solid var(--chip-warn);box-shadow:0 0 10px color-mix(in srgb,var(--chip-warn) 18%,transparent)}details.log-panel summary{cursor:pointer;-webkit-user-select:none;user-select:none;font-size:12px;color:var(--label);letter-spacing:1px;padding:2px 0}details.log-panel summary:before{content:"▸ "}details.log-panel[open] summary:before{content:"▾ "}.out-panel{overflow:hidden}.out-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}@media(max-width:760px){.out-grid{grid-template-columns:1fr}}.out-group{border:1px solid var(--border);border-radius:6px;padding:8px 10px;background:linear-gradient(180deg,var(--bezel-2),var(--bezel));min-width:0;display:flex;flex-direction:column;justify-content:space-between;gap:6px;min-height:152px;align-self:stretch}.out-group .og-hint{margin-top:auto}.og-title{font-size:12px;letter-spacing:1px;color:var(--label);margin-bottom:6px}.og-unit{color:var(--dim)}.og-edit{display:flex;align-items:center;gap:6px}.og-edit input{flex:1;min-width:0;font-size:20px;font-weight:600;text-align:right;font-family:ui-monospace,monospace;padding:6px 8px}button.stepper{width:40px;height:40px;font-size:22px;line-height:1;font-weight:700;flex:none;border-radius:4px}.og-steps{display:flex;align-items:center;gap:6px;margin-top:8px;flex-wrap:wrap}.os-lbl{font-size:11px;color:var(--dim)}.og-steps input{width:86px;font-family:ui-monospace,monospace}.os-chips{display:inline-flex;gap:4px;flex-wrap:wrap}button.step-chip{padding:2px 8px;min-height:24px;font-size:11px;font-family:ui-monospace,monospace}button.step-chip.on{background:var(--btn-active);color:var(--bg);border-color:var(--btn-active)}.out-actions{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap;align-items:center}.out-actions .big{flex:1;min-width:150px;min-height:40px;font-size:15px}.out-actions #kbd-toggle{min-height:40px}.kbd{margin-top:10px;border-top:1px dashed var(--border-soft);padding-top:8px}.kbd-title{font-size:12px;color:var(--label);margin-bottom:6px}.kbd-grid{display:grid;grid-template-columns:repeat(6,minmax(52px,1fr));gap:5px;max-width:480px}button.kbd-key{min-height:34px;font-size:15px;font-family:ui-monospace,monospace}button.kbd-key.quick{font-size:12px}.kbd-quick{display:flex;gap:5px;align-items:center;margin-top:8px;flex-wrap:wrap;max-width:560px}.kbd-quick .os-lbl{margin-right:4px}.meter-sec{margin-bottom:10px;min-width:0}.msec-title{font-size:10px;letter-spacing:2px;color:var(--dim);text-transform:uppercase;margin:0 2px 4px;display:flex;align-items:center;gap:8px}.msec-title:after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--border-soft),transparent)}.meter-row{display:grid;gap:8px;min-width:0}.meter-row.actual{grid-template-columns:minmax(200px,2fr) repeat(2,minmax(110px,1fr))}.meter-row.set{grid-template-columns:repeat(2,minmax(150px,1fr))}.meter-row.aux{grid-template-columns:repeat(3,minmax(110px,1fr))}@media(max-width:900px){.meter-row.actual{grid-template-columns:1fr 1fr}.meter-row.actual .meter.big{grid-column:1 / -1}.meter-row.set,.meter-row.aux{grid-template-columns:1fr 1fr}.meter-row.aux .meter:last-child{grid-column:1 / -1}}.meter{min-width:0}.meter .valuebox{min-width:0;overflow:hidden}.log,.table-scroll,.scroll-y{scrollbar-width:thin;scrollbar-color:var(--border) transparent}.log::-webkit-scrollbar,.table-scroll::-webkit-scrollbar,.scroll-y::-webkit-scrollbar{width:9px;height:9px}.log::-webkit-scrollbar-thumb,.table-scroll::-webkit-scrollbar-thumb,.scroll-y::-webkit-scrollbar-thumb{background:var(--border);border-radius:5px}.log::-webkit-scrollbar-track,.table-scroll::-webkit-scrollbar-track,.scroll-y::-webkit-scrollbar-track{background:transparent}.table-scroll,.scroll-y{max-height:260px;overflow-y:auto}.dash-cols{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(360px,.85fr);gap:14px;align-items:start}@media(max-width:980px){.dash-cols{grid-template-columns:1fr}}.dash-left,.dash-right{min-width:0}.dash-status{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 10px}.lamp-cell{display:flex;align-items:center;gap:8px}.lamp-lbl{font-size:10px;letter-spacing:1.5px;color:var(--dim);text-transform:uppercase}.lamp{padding:4px 14px;border-radius:4px;border:1px solid var(--groove);font-family:ui-monospace,monospace;font-size:13px;color:var(--dim);background:var(--panel-2);transition:box-shadow .25s,color .25s,border-color .25s}.lamp.ok{color:var(--led-green);border-color:var(--led-green);box-shadow:0 0 10px color-mix(in srgb,var(--led-green) 45%,transparent),inset 0 0 6px color-mix(in srgb,var(--led-green) 12%,transparent)}.lamp.run{color:var(--led-green);border-color:var(--led-green);animation:lampPulse 1.5s ease-in-out infinite}.lamp.cc{color:#41d9ff;border-color:#1d7fa8;box-shadow:0 0 8px #41d9ff4d}.lamp.cv{color:var(--amber);border-color:var(--led-amber);box-shadow:0 0 8px color-mix(in srgb,var(--led-amber) 30%,transparent)}.lamp.cc.active,.lamp.cv.active{color:#ff6a6a;border-color:#8a2a2a;animation:lampRedBreath 1.5s ease-in-out infinite}@keyframes lampRedBreath{0%,to{color:#ff5c5c;border-color:#832626;box-shadow:0 0 10px #ff505080,inset 0 0 6px #ff505026}50%{color:#ff9b9b;border-color:#ff5c5c;box-shadow:0 0 26px #ff3c3cf2,inset 0 0 14px #ff3c3c66}}.lamp.err{color:var(--led-red);border-color:var(--led-red);animation:lampBlink .7s steps(1) infinite;box-shadow:0 0 12px #ff464680}.lamp.off{color:var(--dim)}@keyframes lampPulse{0%,to{opacity:1;box-shadow:0 0 8px color-mix(in srgb,var(--led-green) 35%,transparent)}50%{opacity:.6;box-shadow:0 0 24px color-mix(in srgb,var(--led-green) 85%,transparent)}}@keyframes lampBlink{0%{opacity:1;box-shadow:0 0 10px #ff464666}50%{opacity:.3;box-shadow:0 0 26px #ff3c3ce6}}.out-panel{background:linear-gradient(180deg,var(--bezel-2),var(--bezel));border:1px solid var(--groove);border-radius:6px;padding:10px 12px;box-shadow:inset 0 1px #ffffff0a,var(--shadow);min-width:0}.out-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.out-head h2{margin:0}#kbd-toggle{min-height:30px;font-size:12px}#kbd-toggle.on{background:linear-gradient(180deg,#0e3f1e,#082a12);border-color:#0f6b2e;color:#a6ffc6;box-shadow:0 0 8px color-mix(in srgb,var(--chip-ok) 35%,transparent)}:root[data-theme=light] #kbd-toggle.on{background:linear-gradient(180deg,#d9f0d9,#c1e6c1);color:#0d7a2a;border-color:#0f8b34;box-shadow:none}.preset-quick-panel{margin-top:12px}.preset-quick{display:grid;grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:6px}.pq-btn{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:6px 8px;min-height:46px;text-align:left;background:var(--panel-2);border:1px solid var(--groove);color:var(--text)}.pq-btn .pq-idx{font-family:ui-monospace,monospace;font-size:12px;color:var(--label)}.pq-btn .pq-val{font-family:ui-monospace,monospace;font-size:11px;color:var(--sub)}.pq-btn.on{border-color:var(--accent);color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,var(--panel-2));box-shadow:0 0 10px color-mix(in srgb,var(--accent) 30%,transparent)}.pq-btn.on .pq-val{color:var(--text)}.kbd.float{position:fixed;z-index:300;right:16px;bottom:16px;width:min(340px,94vw);background:color-mix(in srgb,var(--panel) 82%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--border);border-radius:10px;box-shadow:0 12px 34px #00000080,var(--shadow);padding:8px;-webkit-user-select:none;user-select:none}.kbd-head{display:flex;align-items:center;justify-content:space-between;cursor:grab;padding:2px 2px 6px}.kbd-head:active{cursor:grabbing}.kbd-head .kbd-title{font-size:12px;color:var(--label);letter-spacing:1px}button.kbd-close{min-width:26px;min-height:24px;padding:0 6px;line-height:1;font-size:16px}.kbd-target{font-size:11px;color:var(--sub);margin-bottom:6px}.kbd.float .kbd-grid{grid-template-columns:repeat(4,1fr);max-width:none}.kbd.float .kbd-key{min-height:40px;font-size:16px}.kbd.float .kbd-key.wide{grid-column:1 / -1;min-height:30px;font-size:13px}.kbd-quick{margin-top:8px}.kbd.float .kbd-quick{max-width:none}.kbd.float .kbd-quick .kbd-key{min-height:28px;font-size:11px}.app-footer{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:10px 14px;margin-top:14px;background:linear-gradient(180deg,var(--bezel),var(--bezel-2));border:1px solid var(--groove);border-radius:0 0 8px 8px;box-shadow:inset 0 1px #ffffff0d,var(--shadow);font-size:14px;color:var(--dim)}.app-footer .ft-sep{color:var(--border-soft)}.app-footer span{font-family:ui-monospace,monospace}.app-footer button{min-height:28px;font-size:12px}#ft-vin{color:var(--label)}.meter-sec.actual-bg{background:linear-gradient(180deg,color-mix(in srgb,var(--led-green) 7%,transparent),transparent 85%);border:1px solid color-mix(in srgb,var(--led-green) 14%,transparent);border-radius:6px;padding:8px 10px}.meter .u{font-family:ui-monospace,Courier New,monospace;color:var(--dim);margin-left:3px;font-size:.62em}.meter .valuebox .mv{font-family:ui-monospace,Courier New,monospace}.out-actions .big{flex:1 1 0;min-width:150px}.out-actions #btn-set{background:linear-gradient(180deg,#0e4f8f,#07335f);border-color:#1a6fc0;color:#cfe9ff}:root[data-theme=light] .out-actions #btn-set{background:linear-gradient(180deg,#d7ecff,#b3d8f7);color:#0b4a8a;border-color:#1a6fc0}.out-actions #btn-out{background:linear-gradient(180deg,#6a1c1c,#3a0d0d);border-color:#b03131;color:#ffc9c9}.set-panel,.out-run{margin-bottom:12px}.set-panel{border-color:color-mix(in srgb,var(--label) 35%,var(--groove))}.out-run{border-color:color-mix(in srgb,var(--chip-warn) 45%,var(--groove))}.out-run .out-run-info{font-size:12px;color:var(--sub);min-height:18px;margin:0 0 8px;line-height:1.6}.out-run .outbig{width:100%;min-height:46px;font-size:16px;font-weight:600}.og-sub{font-size:10px;color:var(--dim);letter-spacing:1px}.ogs-line{display:flex;flex-direction:column;gap:5px;margin:0 0 12px;padding:8px 10px;min-height:52px;background:linear-gradient(180deg,var(--bezel-2),var(--bezel));border:1px solid var(--groove);border-radius:6px;box-shadow:inset 0 1px #ffffff0d,var(--shadow)}#out-setline{flex-direction:row;align-items:center;gap:10px}#out-setline .ogs-cell{flex:1 1 0;display:flex;flex-direction:column;gap:5px;min-width:0}#out-setline .ogs-value{width:auto;align-self:flex-start}#out-setline #btn-out{min-width:132px;min-height:44px;font-size:14px;flex:0 0 auto}.ogs-line .ogs-label{font-size:10px;letter-spacing:1.6px;color:var(--sub);text-transform:uppercase}.ogs-line .ogs-value{display:flex;align-items:baseline;justify-content:center;gap:4px;font-family:ui-monospace,Courier New,monospace;font-variant-numeric:tabular-nums;font-size:18px;font-weight:700;background:linear-gradient(180deg,var(--lcd),var(--lcd2));border:1px solid #041a0c;border-radius:3px;padding:6px 10px;box-shadow:inset 0 2px 6px #00000080;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ogs-line .ogv.v{color:#ffe14d}.ogs-line .ogv.a{color:#41c8ff}.ogs-line .ogv.sep{color:var(--sub);font-weight:400}:root[data-theme=light] .ogs-line .ogv.v{color:#8a6a00}:root[data-theme=light] .ogs-line .ogv.a{color:#0b62a8}.og-hint{font-size:11px;min-height:15px;margin-top:4px;color:var(--dim)}.og-hint.err-msg{color:var(--danger-text)}.og-hint.warn-msg{color:var(--chip-warn)}input.invalid{border-color:var(--danger-text)!important;box-shadow:0 0 0 1px var(--danger-text)}.dash-status.alarm{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--led-red) 55%,transparent);border-radius:6px;padding:4px}.lamp.err.alarm{animation:lampBlinkFast .4s steps(1) infinite}@keyframes lampBlinkFast{0%{opacity:1;box-shadow:0 0 16px #ff3c3cd9}50%{opacity:.22;box-shadow:0 0 30px #ff2828}}.lamp.alarm-off{color:var(--dim)}.lamp-cell{display:inline-flex}.lamp{min-width:96px;text-align:center}#app{display:flex;flex-direction:column;min-height:100vh}.app-footer{margin-top:14px;border-radius:0 0 8px 8px}.topbar,.app-footer{width:100%;box-sizing:border-box}.meter-row.actual{grid-template-columns:1fr;gap:12px}.meter.volt .mv{color:#ffe14d;text-shadow:0 0 12px rgba(255,225,77,.55)}.meter.amp .mv{color:#41c8ff;text-shadow:0 0 12px rgba(65,200,255,.5)}.meter.watt .mv{color:#55ef7a;text-shadow:0 0 12px rgba(85,239,122,.5)}.meter.volt .valuebox .mv,.meter.amp .valuebox .mv,.meter.watt .valuebox .mv{font-size:clamp(24px,4vw,52px)}.meter.big{padding:10px 12px}.meter.big .valuebox{padding:8px 12px}.meter.big .mk{font-size:12px;margin-bottom:6px}.meter.big .valuebox .mv{font-size:clamp(28px,4.6vw,56px);letter-spacing:1px;line-height:1.1}.meter .u{font-family:ui-monospace,Courier New,monospace;font-weight:600;color:var(--sub)}.meter.mid .valuebox .u{font-size:clamp(20px,3vw,32px)}.meter.smallv .valuebox .u{font-size:clamp(16px,2.2vw,24px)}.meter.volt .valuebox .u,.meter.amp .valuebox .u,.meter.watt .valuebox .u{font-size:clamp(24px,4vw,52px)}.meter.big .valuebox .u{font-size:clamp(28px,4.6vw,56px)}:root[data-theme=light] .meter .u{color:#5a8a5a}.meter.volt .valuebox .u{color:#ffe14d}.meter.amp .valuebox .u{color:#41c8ff}.meter.watt .valuebox .u{color:#55ef7a}:root[data-theme=light] .meter.volt .valuebox .u{color:#8a6a00}:root[data-theme=light] .meter.amp .valuebox .u{color:#0b62a8}:root[data-theme=light] .meter.watt .valuebox .u{color:#0d7a2a}:root[data-theme=light] .meter.volt .mv{color:#8a6a00;text-shadow:none}:root[data-theme=light] .meter.amp .mv{color:#0b62a8;text-shadow:none}:root[data-theme=light] .meter.watt .mv{color:#0d7a2a;text-shadow:none}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield;-webkit-appearance:textfield;appearance:textfield}.kbd.float.tone-v .kbd-head .kbd-title,.kbd.float.tone-v .kbd-target{color:#ffe14d}.kbd.float.tone-a .kbd-head .kbd-title,.kbd.float.tone-a .kbd-target{color:#41c8ff}.out-actions{display:flex;gap:14px;margin-top:12px}.out-actions .big{flex:1 1 0;min-width:0;min-height:42px;font-size:15px}#btn-out.outblue{background:linear-gradient(180deg,#0e4f8f,#07335f);border-color:#1a6fc0;color:#cfe9ff;font-weight:600}:root[data-theme=light] #btn-out.outblue{background:linear-gradient(180deg,#d7ecff,#b3d8f7);color:#0b4a8a;border-color:#1a6fc0}#btn-out.out-on{background:linear-gradient(180deg,#a85a0a,#6e3a06);border-color:#e08a1a;color:#ffe2b0;font-weight:700;box-shadow:0 0 14px #ffa02866,inset 0 0 8px #ffaa282e;animation:outPulse 1.6s ease-in-out infinite}#btn-out.out-off{background:linear-gradient(180deg,#0e3f1e,#082a12);border-color:#0f6b2e;color:#a6ffc6}:root[data-theme=light] #btn-out.out-on{background:linear-gradient(180deg,#ffe1b0,#ffcf88);color:#7a4a00;border-color:#e08a1a;box-shadow:none}:root[data-theme=light] #btn-out.out-off{background:linear-gradient(180deg,#c9f0d5,#9fdfb3);color:#0b4a1f;border-color:#16b45e}@keyframes outPulse{0%,to{box-shadow:0 0 12px #ffa02866,inset 0 0 6px #ffaa2826}50%{box-shadow:0 0 30px #ffa028d9,inset 0 0 16px #ffaa2852}}.out-run-info{font-size:11px;color:var(--sub);margin-top:6px;min-height:14px}.out-run-info.err-text{color:var(--danger-text);font-weight:600}#curve-area{border-top:2px solid var(--border);padding-top:12px;margin-top:14px}.debug-sessions{display:none}.debug-sessions.open{display:block}.debug-sessions .db-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:2px 2px 4px}.debug-sessions .db-head span{font-size:12px;color:var(--label);letter-spacing:1px}.debug-sessions .db-head button{min-height:22px;font-size:11px;padding:0 8px}.debug-sessions.floating{position:fixed;z-index:260;right:16px;bottom:56px;width:min(460px,92vw);min-width:260px;background:color-mix(in srgb,var(--panel) 92%,transparent);border:1px solid var(--border);border-radius:8px;padding:8px 10px;box-shadow:0 10px 30px #00000073;resize:both;overflow:auto}.debug-sessions.floating .db-head{cursor:move}.session-section{border-top:1px solid var(--border-soft);padding-top:8px}.session-head{display:flex;align-items:center;gap:10px;margin-bottom:4px}.session-head .sh-title{font-size:12px;letter-spacing:1px;color:var(--label);font-weight:600}.session-head .session-count{font-size:11px;color:var(--dim)}.session-pager{display:flex;align-items:center;gap:8px;margin-top:6px}.session-pager .page-info{font-size:12px;color:var(--dim)}.session-pager button{min-height:24px;font-size:12px;padding:0 10px}.dbg-log.floating{position:fixed;z-index:260;right:16px;bottom:56px;width:min(560px,94vw);min-width:320px;background:color-mix(in srgb,var(--panel) 94%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--border);border-radius:10px;padding:10px 12px;box-shadow:0 10px 30px #00000073,var(--shadow);display:none;flex-direction:column;gap:10px;resize:both;overflow:auto}.dbg-log.floating.open{display:flex}.dbg-log.floating .dbg-head{display:flex;align-items:center;justify-content:space-between;gap:10px;cursor:move;padding:2px 2px 0}.dbg-log.floating .dbg-title{font-size:12px;color:var(--label);letter-spacing:1px;font-weight:600}.dbg-log.floating .dbg-head button{min-width:28px;min-height:28px;padding:0 8px;flex:none}.dbg-log.floating .dbg-controls{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:2px 2px 0}.dbg-log.floating .dbg-controls label{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--label)}.dbg-log.floating .dbg-controls button{min-height:28px;font-size:12px;padding:0 10px}.dbg-log.floating .log{min-height:160px;max-height:55vh;height:100%;box-sizing:border-box}:root[data-theme=light] .dbg-log.floating{background:color-mix(in srgb,var(--panel) 92%,transparent);box-shadow:0 8px 24px #003c002e}section.panel.tabpage{margin-top:12px;padding:14px 16px}section.panel.tabpage>h2{margin:0 0 12px}.dash-cols{gap:16px;align-items:stretch}.dash-status,.meter-sec{margin-bottom:12px}.meter-sec .msec-title{margin-bottom:6px}.set-panel,.preset-quick-panel{padding:12px 14px}.set-panel .out-head{margin-bottom:10px}.out-group{padding:10px 12px}.out-grid{gap:14px}.out-actions{gap:12px;margin-top:14px}.preset-quick-panel{margin-top:14px}.preset-quick-panel h2{margin-bottom:10px}#curve-area{display:flex;flex-direction:column;gap:6px}.log-panel summary{margin-bottom:2px}.row{gap:10px;margin:8px 0}.row>button,.row>select,.row>input[type=number],.row>input[type=text]{min-height:30px}.out-grid .og-edit input,.out-grid .og-steps input{min-height:34px}#ps-grid{gap:12px}#ps-grid .panel{display:flex;flex-direction:column;gap:8px;padding:12px 14px}#ps-grid .panel h2{margin:0;display:flex;align-items:center;justify-content:space-between}#ps-grid .panel .row{margin:0}#ps-grid .panel .row:nth-of-type(1){display:grid;grid-template-columns:auto minmax(0,1fr) 20px auto minmax(0,1fr) 20px;gap:6px;align-items:center}#ps-grid .panel .row:nth-of-type(1)>label{white-space:nowrap;min-width:28px;color:var(--label);font-size:12px}#ps-grid .panel .row:nth-of-type(1) input{width:100%}#ps-grid .panel .row:nth-of-type(1) .ps-unit{font-size:15px;font-weight:700;font-family:ui-monospace,monospace}#ps-grid .panel .row:nth-of-type(1) .ps-unit.v{color:#ffe14d;text-shadow:0 0 8px rgba(255,225,77,.45)}#ps-grid .panel .row:nth-of-type(1) .ps-unit.a{color:#41c8ff;text-shadow:0 0 8px rgba(65,200,255,.42)}:root[data-theme=light] #ps-grid .panel .row:nth-of-type(1) .ps-unit.v{color:#8a6a00;text-shadow:none}:root[data-theme=light] #ps-grid .panel .row:nth-of-type(1) .ps-unit.a{color:#0b62a8;text-shadow:none}#ps-grid .panel .row:nth-of-type(2){margin-top:2px}#ps-grid .panel .row:nth-of-type(2) button{width:100%}#ps-grid .panel .row:nth-of-type(3){font-size:11px;color:var(--dim)}.sc-fields{display:flex;flex-wrap:wrap;gap:10px 14px;margin:10px 0}.sc-field{display:flex;flex-direction:column;gap:4px;min-width:96px}.sc-field .sc-lbl{font-size:11px;color:var(--label);letter-spacing:.5px;white-space:nowrap}.sc-field select,.sc-field input{min-height:30px;width:110px}.seq-editor{position:relative}.seq-editor textarea{position:relative;z-index:1}.seq-activebar{display:none;position:absolute;left:8px;right:8px;height:18px;top:0;pointer-events:none;z-index:2;box-sizing:border-box;background:color-mix(in srgb,var(--chip-warn) 22%,transparent);border:1px solid color-mix(in srgb,var(--chip-warn) 55%,transparent);border-radius:3px;box-shadow:0 0 8px color-mix(in srgb,var(--chip-warn) 35%,transparent);transition:top .12s linear}input[type=text],input[type=number],input[type=search],input[type=tel]{text-align:center}input[type=text]::placeholder,input[type=number]::placeholder{text-align:center}.log textarea{text-align:left}.dsl-help.floating{position:fixed;z-index:260;right:16px;bottom:56px;width:min(520px,94vw);min-width:300px;background:color-mix(in srgb,var(--panel) 94%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--border);border-radius:10px;padding:10px 12px;box-shadow:0 10px 30px #00000073,var(--shadow);display:none;flex-direction:column;gap:10px;resize:both;overflow:auto}.dsl-help.floating.open{display:flex}.dsl-help-head{display:flex;align-items:center;justify-content:space-between;gap:10px;cursor:move}.dsl-help-title{font-size:12px;color:var(--label);letter-spacing:1px;font-weight:600}.dsl-help-head button{min-width:28px;min-height:28px;padding:0 8px}.dsl-help-body{white-space:pre-wrap;font-size:12px;color:var(--sub);background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:8px;max-height:55vh;overflow:auto}:root[data-theme=light] .dsl-help.floating{background:color-mix(in srgb,var(--panel) 92%,transparent);box-shadow:0 8px 24px #003c002e}:root[data-theme=light] .log{background:#f6faf6;color:#14421f;border-color:var(--groove)}:root[data-theme=light] .log .rx{color:#0d5a1f}:root[data-theme=light] .log .tx{color:#8a5a00}:root[data-theme=light] .log .warn{color:#9a5a00}:root[data-theme=light] .log .error{color:#c22}:root[data-theme=light] .log .info{color:#5a8a5a}.rec-head{margin:6px 0}.rec-head .chart-context,.rec-head #rc-status{white-space:nowrap}.ft-by{color:var(--dim);font-size:11px;margin-left:4px}.version-tag-link{display:inline-flex;align-items:center;gap:2px;padding:1px 8px;min-height:22px;line-height:18px;font-size:11px;color:var(--btn-text);background:var(--btn-bg);border:1px solid var(--btn-border);border-radius:3px;text-decoration:none;box-shadow:0 1px #ffffff0f inset,0 1px 2px #0006}.version-tag-link:hover{background:var(--btn-hover);color:var(--btn-active);border-color:var(--btn-active)}.lamp.vin{color:var(--led-green);border-color:var(--led-green);box-shadow:0 0 10px color-mix(in srgb,var(--led-green) 45%,transparent),inset 0 0 6px color-mix(in srgb,var(--led-green) 12%,transparent);min-width:auto;white-space:nowrap}
