:root{--bg:#0b111c;--surface:#111b29;--surface2:#162233;--panel:#101a28;--line:#263447;--muted:#778ca2;--text:#e6edf5;--teal:#46dfc2;--blue:#61b9fa;--orange:#f5ac6d;--red:#f0787c;--font:'DM Sans',Inter,ui-sans-serif,system-ui,sans-serif;--mono:'DM Mono',ui-monospace,monospace}
*{box-sizing:border-box}html,body{height:100%;margin:0}body{font-family:var(--font);background:var(--bg);color:var(--text);font-size:13px}button,input,select{font:inherit}button{cursor:pointer}button:disabled{opacity:.36;cursor:default}.hidden{display:none!important}.app-shell{min-height:100vh;display:flex;flex-direction:column}
.topbar{height:75px;flex-shrink:0;background:#111a28;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:20px;padding:0 25px}.brand{display:flex;align-items:center;gap:13px;min-width:235px}.brand-mark{height:40px;width:40px;background:#1c3440;border:1px solid #3a6b73;color:var(--teal);font-size:27px;display:grid;place-items:center;border-radius:10px}.brand>div:last-child{display:flex;flex-direction:column;gap:3px}.eyebrow{font:9px var(--mono);letter-spacing:1.1px;color:var(--muted)}.brand strong{font-size:16px;letter-spacing:.7px}.brand em{font-style:normal;color:var(--teal);font-weight:600}.top-center{display:flex;gap:7px}.pill{font:10px var(--mono);letter-spacing:.45px;padding:8px 11px;border-radius:4px}.pill-outline{border:1px solid #324255;color:#97a8ba}.pill-green{background:#14362f;color:var(--teal)}.top-actions{display:flex;gap:10px}.btn{border:1px solid var(--line);padding:11px 16px;border-radius:6px;font-size:12px;font-weight:700;transition:background .15s}.btn-ghost{background:transparent;color:#b1c0d0}.btn-ghost:hover:not(:disabled){background:#223348}.btn-primary{background:var(--teal);border-color:var(--teal);color:#0d2225;min-width:160px}.btn-primary:hover:not(:disabled){background:#8bf0dc}.btn-danger{background:#382125;color:#ffbdbf;border:1px solid #6b343b}.btn span{padding-right:6px}
.workspace{flex:1;min-height:700px;display:grid;grid-template-columns:277px minmax(440px,1fr) 257px;align-items:stretch}.settings-panel,.telemetry-panel{background:var(--panel);min-width:0}.settings-panel{border-right:1px solid var(--line);padding:24px 20px 16px;display:flex;flex-direction:column;gap:20px}.telemetry-panel{border-left:1px solid var(--line);padding:24px 18px;display:flex;flex-direction:column;gap:14px}.section-heading{display:flex;align-items:center;gap:11px}.section-heading>span{height:31px;width:31px;display:grid;place-items:center;color:var(--teal);border:1px solid #38615e;border-radius:5px;font:11px var(--mono)}.section-heading h2{font-size:15px;margin:0 0 3px;font-weight:700}.section-heading p{font-size:11px;color:var(--muted);margin:0}.group{display:flex;flex-direction:column;gap:10px}.group-border{padding-top:17px;border-top:1px solid var(--line)}.group>label,.input-wrap>label{font:9.5px var(--mono);letter-spacing:.35px;color:#a8b7c8;display:flex;justify-content:space-between;align-items:center}.input-wrap>label i{font-style:normal;color:var(--muted);letter-spacing:0}.group select,.input-wrap>input,.range-line input[type=number]{width:100%;height:34px;background:#192737;border:1px solid #314154;color:#e7f0f6;border-radius:5px;padding:0 10px;outline:none;font:12px var(--mono)}.group select{font:12px var(--font)}.group select:focus,.input-wrap>input:focus,.range-line input[type=number]:focus{border-color:var(--teal)}.route-hint{font-size:10px;color:var(--muted);margin-top:-2px}.group-title{font-size:10px;color:#d2dce9;font-weight:800;letter-spacing:.5px;display:flex;justify-content:space-between;gap:5px}.group-title span{font:8px var(--mono);letter-spacing:0;color:#638d9d;align-self:center}.control-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px}.input-wrap{display:flex;flex-direction:column;gap:7px;min-width:0}.range-line{display:flex;gap:8px;align-items:center}.range-line input[type=number]{width:56px;flex-shrink:0;padding:0 5px;text-align:center}.range-line input[type=range]{min-width:0;flex:1;accent-color:var(--teal);height:4px}.hint-note{font-size:10px;color:#8da4b2;line-height:1.6;background:#162632;border:1px solid #25404b;padding:9px;border-radius:5px}.hint-note strong{color:var(--teal)}.sidebar-foot{display:flex;gap:9px;align-items:start;margin-top:auto;background:#13232d;border-radius:6px;padding:11px}.sidebar-foot strong{font-size:10px;color:#bacdd4}.sidebar-foot p{font-size:10px;color:#7496a1;margin:5px 0 0;line-height:1.5}.small-dot{display:inline-block;width:7px;height:7px;flex-shrink:0;border-radius:50%;background:var(--teal);box-shadow:0 0 12px #46dfc240;margin-top:4px}
.main-column{padding:23px 22px 18px;min-width:0;display:flex;flex-direction:column;gap:15px}.view-head{display:flex;justify-content:space-between;align-items:end;gap:12px}.view-kicker{font:10px var(--mono);color:var(--teal);letter-spacing:1px;margin-bottom:8px}.view-head h1{font-size:19px;line-height:1.25;letter-spacing:-.3px;margin:0;font-weight:700}.view-head h1 span{color:#7592a6;font-weight:500}.live-pill{display:flex;gap:9px;align-items:center;font:10px var(--mono);color:#93aabd;white-space:nowrap;padding-bottom:2px}.live-light{width:8px;height:8px;border-radius:50%;background:#6e7d8f}.live-light.active{background:var(--teal);box-shadow:0 0 9px var(--teal)}.live-light.error{background:var(--red)}
.config-feedback{display:flex;align-items:flex-start;gap:10px;background:#172a33;border:1px solid #2c5360;border-radius:6px;padding:10px;line-height:1.4}.config-feedback .feedback-dot{background:var(--teal);border-radius:50%;height:7px;width:7px;flex-shrink:0;margin-top:5px}.config-feedback strong{font-size:10px;color:#bfdfdc}.config-feedback p{font-size:10px;color:#95b2bd;margin:4px 0 0;overflow-wrap:anywhere}.config-feedback.pending{background:#30281e;border-color:#69523a}.config-feedback.pending .feedback-dot{background:var(--orange)}.config-feedback.pending strong{color:#f8cd9c}.config-feedback.pending p{color:#bb9e80}.config-feedback.error{background:#36242b;border-color:#754047}.config-feedback.error .feedback-dot{background:var(--red)}
.map-card{border:1px solid var(--line);background:#121e2b;border-radius:9px;overflow:hidden;display:flex;flex-direction:column;min-height:430px;flex:1}.map-toolbar{display:flex;align-items:center;justify-content:space-between;min-height:47px;padding:0 17px;border-bottom:1px solid #263547;gap:8px}.map-legend{display:flex;gap:17px;align-items:center;flex-wrap:wrap}.map-legend>span{color:#b4c2d1;font-size:10px;display:flex;gap:7px;align-items:center;white-space:nowrap}.legend-line{display:inline-block;width:21px;border-top:2px solid}.legend-route{border-color:#7295aa;border-top-style:dashed}.legend-truth{border-color:var(--teal)}.legend-pred{border-color:var(--orange);border-top-style:dashed}.map-tag{font:9px var(--mono);letter-spacing:.4px;color:#7d97ac;white-space:nowrap}.map-separator{padding:0 5px;color:#3f5366}.map-viewport{position:relative;flex:1;min-height:340px;overflow:hidden;background-color:#0c1724;background-image:linear-gradient(#18273940 1px,transparent 1px),linear-gradient(90deg,#18273940 1px,transparent 1px);background-size:36px 36px}.map-viewport canvas{position:absolute;inset:0;width:100%;height:100%}.map-overlay{position:absolute;top:16px;left:16px;background:#101f2ce6;border:1px solid #2d4352;border-radius:4px;padding:8px 10px;font:10px var(--mono);color:#b3c4d0}.map-overlay .small-dot{margin:0 6px 0 0}.map-corner{position:absolute;right:16px;bottom:16px;text-align:right;font:9px var(--mono);color:#9baebe;letter-spacing:.3px}.map-corner span{display:block;color:#526a80;margin-top:4px}.playback-bar{height:72px;background:#162331;border-top:1px solid var(--line);display:flex;align-items:center;padding:0 15px;gap:9px}.icon-btn{border:1px solid #314459;border-radius:5px;width:29px;height:30px;background:#1f3143;color:#d5e3ea;font-size:21px;display:grid;place-items:center}.play-btn{color:var(--teal);font-size:13px}.seek-wrap{flex:1;min-width:70px;margin:0 10px}.seek-label{font:9px var(--mono);display:flex;justify-content:space-between;color:#8ca3b4;margin-bottom:8px}.seek-label span:last-child{color:var(--teal)}.seek-wrap input{width:100%;height:4px;margin:0;accent-color:var(--teal)}.playback-speed{font:11px var(--mono);color:#a3b9cb;white-space:nowrap}
.map-controls{display:flex;align-items:center;gap:5px;color:#7d97ac;font:10px var(--mono)}.map-controls span{margin-right:7px}.map-controls button{background:#1c2d3e;border:1px solid #375067;border-radius:4px;min-width:25px;height:25px;color:#c0d4e2;font:11px var(--mono)}.map-controls button:hover{background:#2c4358}
.wp-legend{display:inline-flex;align-items:center;gap:5px;color:#f2c991;font:10px var(--font);cursor:pointer;white-space:nowrap}.wp-legend input{accent-color:#e7b666;width:13px;height:13px;margin:0 2px 0 0}.wp-symbol{display:inline-block;width:9px;height:9px;border:2px solid #e7b666;border-radius:50%;background:#172739}
.chart-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;height:195px;flex-shrink:0}.chart-card{border:1px solid var(--line);border-radius:8px;background:#121e2b;display:flex;flex-direction:column;min-width:0;overflow:hidden;padding:13px 12px 12px}.chart-heading{display:flex;justify-content:space-between;align-items:start;gap:4px}.chart-heading>div{display:flex;flex-direction:column;gap:5px}.chart-heading span{font:9px var(--mono);color:#668b9b;letter-spacing:.4px}.chart-heading strong{font-size:12px;font-weight:700}.chart-heading em{font-style:normal;color:var(--teal)}.chart-heading .chart-unit{font:9px var(--mono);color:#7c94a6}.chart-card canvas{width:100%;height:116px;min-height:0;margin-top:9px}.chart-footnote{font:9px var(--mono);line-height:1.6;color:#829aab;margin-top:-7px;display:flex;align-items:center;flex-wrap:wrap;gap:5px}.footnote-key{display:inline-block;width:16px;min-width:16px;border-top:2px dashed #ffce77}.now-key{border-color:#e9eff4}.footnote-divider{color:#476075;margin:0 4px}
.input-legend{display:flex;flex-wrap:wrap;gap:8px 12px;font:10px var(--mono);color:#a1b3c5;margin-top:-3px}.input-legend span{display:inline-flex;gap:5px;align-items:center;white-space:nowrap}.linekey{display:inline-block;width:19px;border-top:2px solid}.actual-key{border-color:#46dfc2}.command-key{border-color:#f4b37a}.future-command-key{border-color:#ffce77;border-top-style:dashed}.predicted-key{border-color:#77b9ff;border-top-style:dotted}.reference-key{border-color:#9c9df0;border-top-style:dotted}.now-linekey{border-color:#e9eff4;border-top-style:dashed}
.telemetry-title{margin-bottom:5px}.metric-card{background:#15302f;border:1px solid #286457;border-radius:7px;padding:15px}.metric-name{font:9px var(--mono);letter-spacing:.35px;color:#95c6b8;display:flex;justify-content:space-between}.metric-name span{color:var(--teal)}.metric-number{font:32px var(--mono);letter-spacing:-1.2px;color:var(--teal);margin-top:15px}.metric-number small{font:12px var(--mono);color:#a9cabb;margin-left:5px}.metric-sub{font:10px var(--font);color:#83aeaa;margin-top:12px}.metric-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.metric-mini{background:#192738;border:1px solid #273a4d;border-radius:6px;padding:11px;min-height:76px}.metric-mini span{display:block;font:9px var(--mono);color:#829bb0;white-space:nowrap}.metric-mini strong{display:inline-block;font:20px var(--mono);color:#dce7ee;margin-top:13px}.metric-mini small{font:10px var(--mono);color:#819aae;margin-left:4px}.section-mini{font:10px var(--mono);letter-spacing:.3px;color:#a5bacb;font-weight:500;margin:10px 0 0;display:flex;justify-content:space-between}.section-mini span{color:#638ca0;font-size:8px}.diagnostic{display:flex;justify-content:space-between;align-items:center;gap:9px;padding:2px 0;border-bottom:1px solid #202e3e;min-height:27px}.diagnostic span{color:#869cb0;font-size:10px}.diagnostic strong{color:#d2dde6;font:11px var(--mono);text-align:right}.diagnostic .accent{color:var(--teal)}.summary-heading{padding-top:10px;margin-top:8px;border-top:1px solid var(--line)}.summary-box{background:#182638;border-radius:6px;padding:3px 11px}.summary-box>div{display:flex;justify-content:space-between;align-items:center;gap:5px;border-bottom:1px solid #263749;min-height:37px}.summary-box>div:last-child{border-bottom:0}.summary-box span{font:9px var(--mono);color:#839bb0}.summary-box strong{font:11px var(--mono);color:#e6f4f7}.result-state{font-size:10px;line-height:1.6;color:#859cad;margin-top:auto;padding-top:5px}.footer{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:13px 24px;border-top:1px solid var(--line);font:9px var(--mono);color:#657d92;letter-spacing:.2px}
@media(max-width:1330px){.workspace{grid-template-columns:252px minmax(340px,1fr) 228px}.main-column{padding:19px 14px}.settings-panel{padding:22px 13px}.telemetry-panel{padding:22px 11px}.top-center{display:none}.map-tag{display:none}.metric-mini strong{font-size:17px}}
@media(max-width:1330px){.chart-row{grid-template-columns:repeat(2,minmax(0,1fr));height:auto}.chart-card{height:185px}.chart-card:first-child{grid-column:1/-1}}
@media(max-width:1050px){.workspace{grid-template-columns:240px minmax(430px,1fr)}.telemetry-panel{grid-column:1/-1;border-top:1px solid var(--line);border-left:0;display:grid;grid-template-columns:repeat(3,1fr);align-items:start;gap:15px}.telemetry-title{grid-column:1/-1}.metric-grid{grid-template-columns:1fr 1fr}.telemetry-panel>.diagnostic{min-height:30px}.summary-heading{grid-column:1/-1}.summary-box{grid-column:1/-1;display:grid;grid-template-columns:repeat(3,1fr)}.summary-box>div{border-bottom:0;border-right:1px solid var(--line);padding:7px;display:flex;flex-direction:column;align-items:start}.summary-box>div:last-child{border-right:0}.result-state{grid-column:1/-1}.footer span:nth-child(2){display:none}}
@media(max-width:740px){.topbar{padding:10px 13px;height:auto;flex-wrap:wrap}.brand{min-width:0}.brand strong{font-size:14px}.top-actions{margin-left:auto}.btn{padding:9px 10px}.btn-primary{min-width:0}.workspace{display:flex;flex-direction:column}.settings-panel{order:2}.main-column{order:1;padding:15px 10px}.telemetry-panel{order:3;display:flex}.group{max-width:600px;width:100%}.settings-panel{gap:15px}.map-card{min-height:390px}.map-viewport{min-height:290px}.map-legend{gap:8px}.map-legend>span{font-size:9px}.map-toolbar{padding:0 10px}.view-head h1{font-size:15px}.view-head{align-items:start}.live-pill{font-size:9px;white-space:normal}.chart-row{grid-template-columns:1fr;height:auto}.chart-card{height:185px}.metric-grid{grid-template-columns:repeat(4,1fr)}.summary-box{display:block}.footer{padding:13px}.footer span:last-child{display:none}}

/* Plot-first layout: compact navigation overview, readable input horizons. */
.main-column{gap:12px}
.map-card{min-height:0;flex:0 0 auto}
.map-toolbar{flex-wrap:wrap;padding-top:6px;padding-bottom:6px}
.map-viewport{height:205px;min-height:205px;flex:0 0 auto}
.map-card.expanded-map .map-viewport{height:470px;min-height:470px}
.map-controls .map-size-btn{min-width:84px;padding:0 8px;color:#67dbc5;border-color:#397365}
.playback-bar{height:60px;flex:0 0 auto}
.chart-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-template-areas:"rudder rpm" "error error";grid-template-rows:235px 165px;height:auto;gap:12px;flex-shrink:0}
.chart-card{height:100%;min-height:0;grid-column:auto;overflow:hidden}
.chart-card:first-child{grid-area:error;grid-column:auto}
.chart-card:nth-child(2){grid-area:rudder}
.chart-card:nth-child(3){grid-area:rpm}
.chart-card canvas{display:block;width:100%;height:0;min-height:0;flex:1;margin-top:9px}
.input-legend{margin-top:0}
@media(max-width:1320px){
  .chart-row{grid-template-columns:minmax(0,1fr);grid-template-areas:"rudder" "rpm" "error";grid-template-rows:205px 205px 170px}
}
@media(max-width:740px){
  .map-card{min-height:0}
  .map-viewport{height:185px;min-height:185px}
  .map-card.expanded-map .map-viewport{height:380px;min-height:380px}
  .chart-row{grid-template-columns:minmax(0,1fr);grid-template-rows:215px 215px 175px}
  .chart-card{height:100%}
  .map-toolbar{gap:10px}
  .map-controls{margin-left:auto}
}

/* Each chart owns its legend and can be resized independently. */
.chart-row{grid-template-rows:auto auto;align-items:start}
.chart-card{height:auto;min-height:150px}
.chart-heading{align-items:flex-start}
.chart-tools{display:flex;flex-direction:column;align-items:flex-end;gap:6px;flex-shrink:0}
.chart-resize{display:flex;align-items:center;gap:5px;font:9px var(--mono);color:#89a2b6}
.chart-resize button{border:1px solid #40566b;background:#1b3043;color:#cfe5f1;border-radius:3px;width:21px;height:21px;cursor:pointer;font-size:14px;line-height:1}
.chart-resize button:hover{background:#304b61}
.chart-resize span{min-width:39px;text-align:center}
.plot-legend{display:flex;align-items:center;gap:6px 10px;flex-wrap:wrap;margin-top:7px;font:10px var(--mono);line-height:1.5;color:#c6d8e6}
.plot-legend span{display:inline-flex;align-items:center;gap:5px;white-space:nowrap;background:#142639;border:1px solid #344b60;border-radius:4px;padding:2px 6px}
.plot-legend .linekey{width:13px;min-width:13px}
.plot-legend .zero-key{border-color:#698099;border-top-style:dashed}
@media(max-width:1320px){.chart-row{grid-template-rows:auto auto auto}}
@media(max-width:740px){.chart-row{grid-template-rows:auto auto auto}}

/* Independent map height: changes the viewport, not the world-space zoom. */
.map-viewport,.map-card.expanded-map .map-viewport{height:var(--map-height,205px);min-height:var(--map-height,205px)}
.map-height-control{display:flex;align-items:center;gap:5px;margin:0 5px;color:#9db6c9;font:9px var(--mono)}
.map-height-control span{min-width:39px;text-align:center}
.map-height-control button{width:22px;height:24px;cursor:pointer}
@media(max-width:740px){.map-controls{flex-wrap:wrap;justify-content:flex-end}.map-height-control{margin:0 2px}}
