:root{--enamel: #dfe5df;--enamel-2: #eef1ec;--paper: #f7f8f4;--ink: #1a2827;--ink-2: #4a5d5a;--ink-3: #7b8d89;--rule: #b7c4be;--amber: #e29a0f;--amber-soft: #f6d58a;--fault: #c4372c;--warn: #d9731a;--good: #2c8a58;--sync: #0f7f95;--sea: #bcd3db;--land: #edeee1;--land-2: #e1e4d3;--night: #16264a;--radius: 3px;--font: "Barlow Semi Condensed", "Arial Narrow", "Roboto Condensed", system-ui, sans-serif;color-scheme:light}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:var(--font);font-size:15px;color:var(--ink);background:var(--enamel);font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit;color:inherit}h2,h3,h4{margin:0;font-weight:600}:focus-visible{outline:2px solid var(--sync);outline-offset:1px}.app{display:grid;grid-template-rows:auto minmax(0,1fr) auto;height:100%;min-height:0}.main{display:grid;grid-template-columns:minmax(0,1fr) 440px;min-height:0}.mapcell{position:relative;min-height:0;display:grid}.mapwrap{position:relative;min-height:0;background:var(--sea);overflow:hidden;border-right:1px solid var(--rule)}.side{display:flex;flex-direction:column;min-height:0;background:var(--enamel-2)}.bottom{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);height:176px;border-top:1px solid var(--rule);background:var(--enamel-2)}.topbar{display:flex;flex-wrap:wrap;align-items:stretch;gap:0;background:var(--ink);color:#eaf1ee;border-bottom:3px solid var(--amber)}.tb-cell{padding:6px 10px;border-right:1px solid #2f4543;display:flex;flex-direction:column;justify-content:center;min-width:72px}.tb-cell small{color:#9fb5b0;font-size:12px;line-height:1.1}.tb-cell b{font-size:20px;font-weight:600;line-height:1.15}.tb-brand{font-weight:700;font-size:20px;letter-spacing:.2px;padding:6px 16px;display:flex;align-items:center;gap:8px;background:var(--amber);color:#1b1405}.tb-brand svg{flex:none}.tb-speed{display:flex;align-items:center;gap:2px;padding:0 8px;border-right:1px solid #2f4543}.tb-speed button{background:transparent;border:1px solid #3c5654;color:#cfe0db;min-width:34px;height:30px;border-radius:var(--radius);cursor:pointer}.tb-speed button[aria-pressed=true]{background:var(--amber);border-color:var(--amber);color:#1b1405;font-weight:700}.tb-menu{margin-left:auto;display:flex;align-items:center;gap:4px;padding:0 8px}.tb-menu button{background:transparent;border:1px solid #3c5654;color:#cfe0db;height:30px;padding:0 8px;border-radius:var(--radius);cursor:pointer}.bad{color:#ff8b7e}.ok{color:#8fe0b0}.mid{color:#ffd27a}.btn{background:var(--paper);border:1px solid var(--ink-3);border-radius:var(--radius);padding:4px 10px;cursor:pointer;min-height:30px}.btn:hover:not(:disabled){background:#fff;border-color:var(--ink)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.primary{background:var(--ink);color:#fff;border-color:var(--ink)}.btn.primary:hover:not(:disabled){background:#284240}.btn.go{background:var(--good);color:#fff;border-color:var(--good)}.btn.danger{background:var(--fault);color:#fff;border-color:var(--fault)}.btn.sync{background:var(--sync);color:#fff;border-color:var(--sync)}.btn.sm{min-height:24px;padding:1px 8px;font-size:13px}.row{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.row.sp{justify-content:space-between}.grow{flex:1}input[type=number],input[type=text],select,textarea{background:#fff;border:1px solid var(--ink-3);border-radius:var(--radius);padding:3px 6px;min-height:28px;max-width:100%}input[type=range]{width:100%;accent-color:var(--ink)}label.f{display:flex;flex-direction:column;gap:2px;font-size:13px;color:var(--ink-2)}.tabs{display:flex;background:var(--enamel);border-bottom:1px solid var(--rule)}.tabs button{flex:1;background:transparent;border:0;border-bottom:3px solid transparent;padding:9px 4px 7px;cursor:pointer;font-weight:600;color:var(--ink-2);position:relative}.tabs button[aria-selected=true]{color:var(--ink);border-bottom-color:var(--amber);background:var(--enamel-2)}.tabs .badge{position:absolute;top:3px;right:6px;background:var(--fault);color:#fff;font-size:11px;min-width:17px;height:17px;border-radius:9px;display:grid;place-items:center;padding:0 4px}.panel{overflow:auto;padding:0 0 24px;flex:1;min-height:0}.sec{border-bottom:1px solid var(--rule);padding:10px 14px 12px}.sec>h3{font-size:16px;margin-bottom:8px;display:flex;justify-content:space-between;align-items:baseline;gap:8px}.sec>h3 small{font-weight:400;color:var(--ink-3);font-size:13px}.muted{color:var(--ink-3)}.small{font-size:13px}.empty{color:var(--ink-3);padding:6px 0;font-size:14px}.item{border-left:4px solid var(--ink-3);background:var(--paper);padding:7px 10px;margin-bottom:7px}.item.crit{border-left-color:var(--fault)}.item.warn{border-left-color:var(--warn)}.item.good{border-left-color:var(--good)}.item.sync{border-left-color:var(--sync)}.item h4{font-size:15px}.item p{margin:3px 0 6px;font-size:14px;color:var(--ink-2);white-space:pre-line}.kv{display:grid;grid-template-columns:auto 1fr;gap:2px 12px;font-size:14px}.kv dt{color:var(--ink-3)}.kv dd{margin:0;text-align:right}.bar{height:8px;background:#cfd8d2;border-radius:4px;overflow:hidden}.bar>i{display:block;height:100%;background:var(--good)}.bar.warn>i{background:var(--warn)}.bar.bad>i{background:var(--fault)}.bar.amber>i{background:var(--amber)}table.t{width:100%;border-collapse:collapse;font-size:14px}table.t th{text-align:left;font-weight:500;color:var(--ink-3);border-bottom:1px solid var(--rule);padding:3px 4px;font-size:13px}table.t td{padding:4px;border-bottom:1px solid #d3dcd6;vertical-align:middle}table.t td.r,table.t th.r{text-align:right}.pill{display:inline-block;padding:0 7px;border-radius:9px;font-size:12px;background:#cfd8d2;color:var(--ink)}.pill.crit{background:var(--fault);color:#fff}.pill.warn{background:var(--warn);color:#fff}.pill.good{background:var(--good);color:#fff}.pill.sync{background:var(--sync);color:#fff}.pill.amber{background:var(--amber)}.map{width:100%;height:100%;display:block;touch-action:none;-webkit-user-select:none;user-select:none;cursor:grab}.map.picking{cursor:crosshair}.map text{font-family:var(--font);pointer-events:none}.node{cursor:pointer}.node:hover .halo{opacity:.5}.halo{opacity:0;fill:var(--sync);transition:opacity .12s}.flow{stroke-dasharray:7 9;animation:dash 1s linear infinite}.flow.rev{animation-direction:reverse}@keyframes dash{to{stroke-dashoffset:-16}}.pulse{animation:pulse 1.1s ease-in-out infinite;transform-box:fill-box;transform-origin:center}@keyframes pulse{50%{opacity:.25}}.ring-spin{animation:spin 6s linear infinite;transform-box:fill-box;transform-origin:center}@keyframes spin{to{transform:rotate(360deg)}}.maplegend{position:absolute;right:10px;top:10px;background:#f7f8f4ed;border:1px solid var(--rule);padding:6px 10px;font-size:13px;display:grid;gap:2px}.maplegend i{display:inline-block;width:22px;height:0;border-top:3px solid;vertical-align:middle;margin-right:6px}.maptools{position:absolute;left:10px;top:10px;display:flex;gap:4px}.mapbanner{position:absolute;left:50%;transform:translate(-50%);top:10px;background:var(--sync);color:#fff;padding:6px 14px;border-radius:var(--radius);display:flex;gap:10px;align-items:center;z-index:3}.inspector{position:absolute;left:10px;bottom:10px;width:min(340px,calc(100% - 20px));max-height:68%;overflow:auto;background:var(--paper);border:1px solid var(--ink-3);border-top:4px solid var(--ink);box-shadow:0 6px 18px #14282640;padding:10px 12px;z-index:2}.inspector h3{font-size:17px;margin-bottom:4px}.inspector .x{position:absolute;right:6px;top:6px;background:transparent;border:0;cursor:pointer;font-size:18px;color:var(--ink-3)}.chartbox{padding:6px 12px 4px;min-width:0;display:flex;flex-direction:column;border-right:1px solid var(--rule)}.chartbox .legend{display:flex;gap:14px;font-size:13px;color:var(--ink-2)}.chartbox .legend i{display:inline-block;width:14px;height:3px;margin-right:5px;vertical-align:middle}.logbox{overflow:auto;padding:6px 12px;font-size:13.5px}.logbox div{padding:1px 0;display:flex;gap:6px}.logbox .tm{color:var(--ink-3);flex:none;width:82px}.logbox .crit{color:var(--fault);font-weight:600}.logbox .warn{color:var(--warn)}.logbox .good{color:var(--good)}.toasts{position:fixed;right:14px;top:64px;display:grid;gap:6px;z-index:20;width:min(380px,calc(100vw - 28px))}.toast{background:var(--ink);color:#fff;padding:8px 12px;border-left:5px solid var(--amber);box-shadow:0 6px 16px #0000004d;font-size:14px;display:flex;gap:8px;align-items:center}.toast.crit{border-left-color:var(--fault)}.toast.good{border-left-color:var(--good)}.toast.warn{border-left-color:var(--warn)}.modal-bg{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f1e1c8c;z-index:30;display:grid;place-items:center;padding:12px}.modal{background:var(--paper);width:min(860px,100%);max-height:calc(100vh - 24px);overflow:auto;border-top:5px solid var(--sync);padding:14px 16px 16px}.modal h2{font-size:20px}.scope{background:#0e1d1c;border:1px solid #000}.scope text{font-family:var(--font)}.readout{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:10px 0}.readout div{background:var(--enamel);padding:6px 10px}.readout small{color:var(--ink-3);display:block;font-size:12px}.readout b{font-size:22px;font-weight:600}.nudge{display:flex;gap:4px;flex-wrap:wrap}.stage{display:flex;gap:0;margin:8px 0}.stage span{flex:1;text-align:center;padding:4px 2px;font-size:13px;background:var(--enamel);border-right:2px solid var(--paper);color:var(--ink-3)}.stage span.on{background:var(--ink);color:#fff}.stage span.done{background:var(--good);color:#fff}.guide{background:var(--enamel);padding:8px 12px;font-size:14px;border-left:4px solid var(--sync);margin:8px 0}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f1e1ccc;z-index:40;display:grid;place-items:center;color:#fff;text-align:center;padding:20px}@media(max-width:960px){html,body,#root{height:auto}.app{height:auto;display:block}.main{grid-template-columns:1fr}.mapwrap{height:62vh;border-right:0;border-bottom:1px solid var(--rule)}.side{min-height:70vh}.bottom{grid-template-columns:1fr;height:auto}.chartbox{height:170px;border-right:0}.logbox{max-height:180px}.tb-cell{min-width:70px;padding:5px 10px}.readout{grid-template-columns:repeat(2,1fr)}}@media(prefers-reduced-motion:reduce){.flow,.pulse,.ring-spin{animation:none}}
