:root{--background:#f6f7f9;--surface:#fff;--text:#1c2430;--textMuted:#5b6675;--border:#dde2e8;--accent:#1f6feb;--error:#c62828;--drawing:#8fa3b8;--warning:#9a6700;--critical:#c62828;--online:#2e7d32;color:var(--text);background:var(--background);font-family:system-ui,Segoe UI,Roboto,sans-serif}@media (prefers-color-scheme:dark){:root{--background:#11151b;--surface:#1a2029;--text:#e6eaf0;--textMuted:#9aa5b4;--border:#2c3542;--accent:#58a6ff;--error:#ff7b72;--drawing:#5b7086;--warning:#d29922;--critical:#ff7b72;--online:#3fb950}}body{margin:0}html,body,#root{height:100%}h1{color:var(--accent);margin:0;font-size:2rem}.subtitle{color:var(--textMuted);margin:4px 0 32px}.card{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:20px 24px}.card h2{margin:0 0 12px;font-size:1.1rem}dl{margin:0}.statusRow{border-top:1px solid var(--border);gap:16px;padding:6px 0;display:flex}.statusRow:first-child{border-top:none}dt{width:140px;color:var(--textMuted);flex-shrink:0}dd{overflow-wrap:anywhere;margin:0;font-family:ui-monospace,Cascadia Mono,Menlo,monospace}.card+.card,.card+.errorMessage,.errorMessage+.card{margin-top:16px}.card.compact{padding:10px 24px}.hint{color:var(--textMuted);margin:0 0 12px;font-size:.9rem}.tableScroll{overflow-x:auto}table{border-collapse:collapse;font-size:.9rem}th{text-align:left;color:var(--textMuted);white-space:nowrap;border-bottom:1px solid var(--border);padding:6px 8px;font-weight:600}td{padding:3px 8px}.inputTable input{width:80px;font:inherit;color:var(--text);background:var(--background);border:1px solid var(--border);border-radius:4px;padding:4px 6px}.resultTable td{text-align:right;white-space:nowrap;border-top:1px solid var(--border);font-family:ui-monospace,Cascadia Mono,Menlo,monospace}.resultTable td:nth-child(2){text-align:left}button{font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);cursor:pointer;border-radius:4px;padding:6px 14px}button:disabled{opacity:.5;cursor:default}button.primary{color:#fff;background:var(--accent);border-color:var(--accent)}button.danger{color:#fff;background:var(--error);border-color:var(--error)}button.danger:disabled{opacity:.5}button.linkButton{color:var(--textMuted);background:0 0;border:none;padding:2px 4px}.formActions{flex-wrap:wrap;align-items:center;gap:16px;margin-top:12px;display:flex}.inlineField{color:var(--textMuted);align-items:center;gap:8px;display:flex}.inlineField input{width:60px;font:inherit;color:var(--text);background:var(--background);border:1px solid var(--border);border-radius:4px;padding:4px 6px}.errorMessage{color:var(--error);border:1px solid var(--error);border-radius:8px;padding:10px 16px}.resultLayout{flex-wrap:wrap;align-items:flex-start;gap:32px;margin-bottom:16px;display:flex}.towerDrawing{width:160px;height:420px}.towerDrawing polygon{fill:var(--drawing);stroke:var(--accent);stroke-width:1px}.summary{min-width:280px}.card+.card{margin-top:16px}select{font:inherit;color:var(--text);background:var(--background);border:1px solid var(--border);border-radius:4px;padding:4px 6px}.warning{color:var(--warning);border:1px solid var(--warning);border-radius:8px;padding:10px 16px}.damagePlot{width:280px;height:280px}.damagePlot .wall{fill:none;stroke:var(--drawing);stroke-width:6px}.damagePlot .damageBar{stroke:var(--accent);stroke-width:6px}.damagePlot .damageBar.critical{stroke:var(--critical)}.damagePlot .plotLabel{fill:var(--textMuted);font-size:11px}.resultTable tr.critical td{color:var(--critical);font-weight:600}.workbench{grid-template:"top top top top top""tree leftSplitter centre rightSplitter inspector"minmax(0,1fr)"status status status status status"/240px 5px minmax(0,1fr) 5px 340px;height:100vh;display:grid}.topBar{background:var(--surface);border-bottom:1px solid var(--border);flex-wrap:wrap;grid-area:top;align-items:center;gap:12px;padding:8px 16px;display:flex}.brand{color:var(--accent);font-size:1.2rem;font-weight:700}.topField{color:var(--textMuted);align-items:center;gap:8px;display:flex}.spacer{flex:1}.badge{border:1px solid var(--border);border-radius:10px;padding:2px 8px;font-size:.85rem}.badge.invalid{color:var(--error);border-color:var(--error)}.apiStatus{color:var(--textMuted);font-size:.85rem}.saveTemplate{align-items:center;gap:6px;display:flex}.saveTemplate input{width:220px;font:inherit;color:var(--text);background:var(--background);border:1px solid var(--border);border-radius:4px;padding:4px 6px}.inlineError{color:var(--error);font-size:.85rem}.modelTree{background:var(--surface);grid-area:tree;padding:8px 0;overflow:hidden auto}.modelTree ul,.plainList{margin:0;padding:0;list-style:none}.treeItem{box-sizing:border-box;text-overflow:ellipsis;text-align:left;white-space:nowrap;background:0 0;border:none;border-radius:0;width:100%;padding:5px 8px;display:block;overflow:hidden}.treeItem.active{color:#fff;background:var(--accent)}.centre{flex-direction:column;grid-area:centre;min-height:0;display:flex}.tabs{border-bottom:1px solid var(--border);gap:2px;padding:6px 12px 0;display:flex}.tab{background:var(--background);border-bottom:none;border-radius:6px 6px 0 0}.tab.active{background:var(--surface);font-weight:600}.tab:disabled{color:var(--textMuted);cursor:default}.subTabs,.editorBar{border-bottom:1px solid var(--border);background:var(--surface);align-items:center;gap:8px;padding:6px 16px;display:flex}.subTab.active{border-color:var(--accent);font-weight:600}.submitJobs{align-items:center;gap:8px;display:inline-flex;position:relative}.confirmPopover{z-index:10;background:var(--surface);border:1px solid var(--border);border-radius:6px;width:340px;padding:12px 16px;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 4px 16px #00000026}.runnersPill{border-radius:10px;align-items:center;gap:6px;font-size:.85rem;display:inline-flex}.runnersPill[aria-pressed=true]{font-weight:600}.statusDot{background:var(--textMuted);border-radius:50%;width:8px;height:8px}.runnersPill.online .statusDot{background:var(--online)}.centreBody{flex-direction:column;flex:1;min-height:0;display:flex}.splitter{touch-action:none}.splitterColumn{background:linear-gradient(to right, transparent 2px, var(--border) 2px, var(--border) 3px, transparent 3px)}.splitter:hover,.splitter:focus-visible{background:var(--accent);outline:none}.splitterColumn{cursor:col-resize}.splitterRow{cursor:row-resize;background:linear-gradient(to bottom, transparent 2px, var(--border) 2px, var(--border) 3px, transparent 3px);flex:none;height:5px}.leftSplitter{grid-area:leftSplitter}.rightSplitter{grid-area:rightSplitter}.jobsPanel{background:var(--surface);border-top:1px solid var(--border);flex:none}.splitterRow+.jobsPanel{border-top:none}.jobsPanelHeader{align-items:center;gap:12px;padding:2px 12px;display:flex}.panelToggle{background:0 0;border:none;font-weight:600}.subTabs.inline{border:none;margin-left:auto;padding:0}.jobsPanelBody{padding:4px 12px 8px;overflow:auto}.jobsTable td,.jobsTable th{text-align:left}.failedRow td{color:var(--error)}.caseTable{max-height:360px;overflow:auto}.checkField{align-items:flex-start;gap:6px;margin-bottom:8px;display:flex}.fileButton{background:var(--surface);border:1px solid var(--border);cursor:pointer;border-radius:4px;align-items:center;padding:6px 14px;display:inline-flex;position:relative}.fileButton input{opacity:0;width:1px;height:1px;position:absolute}.centreScroll{flex:1;padding:16px;overflow:auto}.modelView{background:#9fbfe8;flex:1;min-height:0;position:relative}.modelView.empty{color:var(--textMuted);place-items:center;display:grid}.viewLegend{background:var(--surface);border:1px solid var(--border);border-radius:6px;gap:12px;padding:4px 10px;font-size:.85rem;display:flex;position:absolute;bottom:12px;left:12px}.inspector{background:var(--surface);grid-area:inspector;padding:12px 16px;overflow-y:auto}.inspector h3{margin:0 0 10px;font-size:1.05rem}.inspector h4{color:var(--textMuted);margin:16px 0 6px;font-size:.9rem}.inspector button{margin-top:8px}.field{grid-template-columns:130px 1fr 44px;align-items:center;gap:8px;padding:3px 0;display:grid}.field.wide{grid-template-columns:130px 1fr}.fieldLabel{color:var(--textMuted)}.fieldUnit{color:var(--textMuted);font-size:.85rem}.field input,.field textarea{box-sizing:border-box;width:100%;font:inherit;color:var(--text);background:var(--background);border:1px solid var(--border);border-radius:4px;padding:4px 6px}.field input.invalid{border-color:var(--error)}.staleBadge{color:var(--warning);font-weight:600}.staleContent{opacity:.6}.statusBar{color:var(--textMuted);background:var(--surface);border-top:1px solid var(--border);grid-area:status;justify-content:space-between;padding:4px 16px;font-size:.8rem;display:flex}.formActions>input{width:220px;font:inherit;color:var(--text);background:var(--background);border:1px solid var(--border);border-radius:4px;padding:4px 6px}.command{background:var(--background);border:1px solid var(--border);border-radius:4px;padding:10px 12px;font-size:.85rem;overflow-x:auto}.runner h3{align-items:center;gap:8px;display:flex}.statusDot{background:var(--border);border-radius:50%;width:10px;height:10px;display:inline-block}.statusDot.online{background:var(--online)}.runnerSettings{flex-wrap:wrap;align-items:center;gap:12px;margin:12px 0 4px;display:flex}.jobProgress{margin-top:12px}.progressBar{background:var(--background);border:1px solid var(--border);border-radius:4px;height:8px;margin-top:8px;overflow:hidden}.progressFill{background:var(--accent);height:100%;transition:width .3s}.treeSection{border-top:1px solid var(--border);margin-top:12px;padding-top:8px}.treeItem.disabled{color:var(--textMuted);cursor:default}.linePlot{max-width:420px;margin:8px 0}.linePlot svg{width:100%;height:auto}.linePlot figcaption{color:var(--textMuted);font-size:.8rem}.plotAxis{stroke:var(--border)}.plotTick{fill:var(--textMuted);font-size:9px}.plotLine{fill:none;stroke-width:1.5px}.plotLine.first,.legend0{stroke:var(--accent);color:var(--accent)}.plotLine.second,.legend1{stroke:var(--warning);color:var(--warning)}.plotLine.third,.legend2{stroke:var(--online);color:var(--online)}.legend{margin-left:8px}.plotBar{fill:var(--accent);opacity:.7}.compactTable{font-size:.8rem}.inspector details{margin:8px 0}.checkField{color:var(--textMuted);align-items:center;gap:6px;margin:6px 0;display:flex}.damageLegend{align-items:center;gap:6px;display:flex}.damageBar{border:1px solid var(--border);border-radius:2px;width:80px;height:10px;display:inline-block}.signIn{flex-direction:column;justify-content:center;align-items:center;gap:12px;min-height:100vh;display:flex}.accountForm{flex-wrap:wrap;align-items:flex-end;gap:8px 16px;display:flex}.modalBackdrop{z-index:100;background:#00000059;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modalDialog{background:var(--surface);border:1px solid var(--border);border-radius:6px;width:min(480px,100vw - 32px);padding:16px 20px;box-shadow:0 8px 32px #00000040}.modalDialog input{box-sizing:border-box;width:100%}
