/* Network-only continuous diagram. Drawing is SVG; the camera transforms one stable world layer. */
.graph-network{background:#17332f;min-height:100vh;color:#e8e7ce}
.graph-shell{max-width:1900px;margin:auto;padding:20px 24px}
.graph-heading{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:17px}
.graph-heading h1{font:27px Georgia,serif;margin-top:5px}.graph-heading .eyebrow{color:#b1b99e;font-size:9px}.graph-heading>div:last-child{display:flex;gap:8px}
.graph-sticky{position:sticky;top:0;z-index:6;box-shadow:0 5px 14px #09252188;background:#b6c6b4}
.graph-global{display:flex;align-items:center;gap:10px;padding:10px 15px;background:#d7dac5;color:#294c3e;position:relative;flex-wrap:wrap}
.graph-clock{background:#1e3832;border:3px solid #7a8b72;color:#e9d6a0;padding:6px 12px;min-width:145px}.graph-clock>span{display:block;font-size:7px;letter-spacing:1.3px;color:#a9baa0}.graph-clock>b{display:block;font:24px monospace;letter-spacing:1px;margin-top:2px}
.graph-global>.secondary{padding:8px 13px;min-height:44px}.graph-global>.quiet{color:#355746;border-color:#829a7b}.graph-global>.run-button{min-height:48px}.graph-run-state{font-size:10px;font-weight:bold;letter-spacing:1px;flex:1;min-width:70px}.graph-run-state>small{display:block;font:9px Arial,sans-serif;letter-spacing:0;margin-top:5px}
.graph-camera-tools{display:flex;align-items:center;gap:5px;padding:8px 11px;flex-wrap:wrap;background:#99b0a2;border-top:1px solid #77998a;color:#244b3d}.graph-camera-tools>.eyebrow{font-size:8px;margin-right:auto;letter-spacing:1px}.graph-camera-tools>button{min-width:44px;min-height:44px;background:#e0e4ce;border:1px solid #77977d;border-bottom:3px solid #6c8970;color:#315340;font-size:11px;padding:6px 10px}.graph-camera-tools>button[data-action="net-pan"]{padding:6px;width:44px}
.graph-regions{display:flex;gap:1px;background:#6f8d7b;padding:0 1px 1px}.graph-regions>button{flex:1;min-height:44px;background:#aec1ad;border:0;border-bottom:3px solid transparent;color:#2a4d3c;font-size:11px;padding:6px}.graph-regions>button.active{background:#e0e4c7;border-bottom-color:#be924d}
.graph-feedback{background:#112e27;color:#d4dfbb;padding:11px 15px;font-size:12px;line-height:1.6;min-height:42px;border:1px solid #607e6d}
.graph-workspace{display:grid;grid-template-columns:minmax(0,1fr) 335px;gap:0;align-items:start;background:#9aae98;border:1px solid #7e9b84}
.graph-map-panel{min-width:0;scroll-margin-top:180px;background:#425e62;padding:0 0 11px;border:5px solid #87918a;border-top-color:#a9b0a6;border-right-color:#4a5956;border-bottom-color:#344c4b;box-shadow:inset 0 0 0 1px #c6c9b1}.graph-map-host{width:100%;height:560px}
.graph-viewport{position:relative;width:100%;height:100%;overflow:hidden;touch-action:none;background:linear-gradient(110deg,#567477,#4d6c70 65%,#506d70);cursor:grab;border-bottom:1px solid #718b78}.graph-viewport,.graph-viewport *{-webkit-user-select:none;user-select:none}.graph-viewport:active{cursor:grabbing}.graph-world{position:absolute;left:0;top:0;transform-origin:0 0;will-change:transform;pointer-events:none}.graph-world svg{overflow:visible}.graph-target-layer{position:absolute;inset:0;pointer-events:none}
/* Flat printed track strips, inset lamps and raised fittings follow P12's mimic-board grammar. */
.map-panel-face{fill:#527276;fill-opacity:.22}.map-panel-join{fill:none;stroke:#263f43;stroke-width:2;opacity:.22}.map-panel-screw{fill:#788a86;stroke:#3d5455;stroke-width:1}.map-panel-screw-slot{stroke:#334d4d;stroke-width:1.5}
.edge-casing{fill:none;stroke:#e1ddc1;stroke-width:13;stroke-linejoin:miter;stroke-linecap:butt;opacity:.9}.edge-core{fill:none;stroke:#bfccdc;stroke-width:9;stroke-linecap:butt;stroke-linejoin:miter}.line-relief{stroke:#d6b0b3}.line-north{stroke:#d8cc8c}.line-siding{stroke:#a6c6b4}.edge-preview{fill:none;stroke:#f2e7ab;stroke-width:21;stroke-dasharray:10 16;opacity:0;pointer-events:none;stroke-linecap:butt}
.edge-jewel-seat{fill:#e2dbc0;stroke:#748478;stroke-width:1}.edge-jewel-lens{fill:#263d3b;stroke:#647b70;stroke-width:1}
[data-state="reserved"]>.edge-core{stroke:#d3ddb0}[data-state="reserved"]>.edge-jewel .edge-jewel-lens{fill:#e3e5b7}
[data-state="occupied"]>.edge-core{stroke:#e4ad9d}[data-state="occupied"]>.edge-jewel .edge-jewel-lens{fill:#e54d52;stroke:#b83e43}
[data-state="protected"]>.edge-core{stroke:#bb9f80;stroke-dasharray:11 8}[data-state="protected"]>.edge-jewel .edge-jewel-lens{fill:#d5a550;stroke:#584a32}
[data-state="unknown"]>.edge-core{stroke:#cc9088;stroke-dasharray:4 10}[data-state="unknown"]>.edge-jewel .edge-jewel-lens{fill:#d89879;stroke-dasharray:3 2}
[data-selected="true"][data-connected="true"].edge-casing{stroke:#ffe8a4;stroke-width:18}[data-selected="true"][data-connected="true"]>.edge-core{stroke:#e2d697}
[data-connected="false"]>.edge-core{opacity:.2;stroke-dasharray:5 12}[data-connected="false"].edge-casing{opacity:.18}[data-connected="false"]>.edge-jewel{opacity:.25}[data-preview="true"]>.edge-preview{opacity:.55}
.map-station-label{fill:#eee6c7;font:34px Arial,sans-serif;letter-spacing:2px}.map-station-rule{stroke:#e0d9bb;stroke-width:2;fill:none}.map-station-code{fill:#d7d4ba;font:17px Arial,sans-serif}.map-boundary-label{fill:#e0d9bc;font:24px Arial,sans-serif}.map-track-id{fill:#eee5c7;font:18px monospace}
.map-berth-shadow{fill:#263d3f;opacity:.65}.map-berth-case{fill:#71898a;stroke:#334c4f;stroke-width:2}.map-berth-bevel{fill:none;stroke:#bac3b8;stroke-width:2}.map-berth-glass{fill:#172628;stroke:#3c5355;stroke-width:2}.map-berth-reflection{fill:#81908d;opacity:.07}.map-berth-number{fill:#e85189;font:italic 22px monospace;letter-spacing:1.5px}[data-reserved="true"]>.map-berth-case{stroke:#d8ddb2;stroke-width:3}[data-occupied="true"]>.map-berth-case{stroke:#dec8ac;stroke-width:3}
.map-point-base{fill:#d1cba8;stroke:#687d70;stroke-width:1}.map-point-blade{fill:none;stroke:#304743;stroke-width:5}.map-point-core{fill:#374d43;stroke:#708574;stroke-width:1}.map-point-ring{fill:none;stroke:#eed08b;stroke-width:4;opacity:0}.map-point-label{fill:#e7dfbf;font:15px monospace}[data-point-glyph][data-selected="true"]>.map-point-ring{opacity:1}[data-point-glyph][data-selected="true"]>.map-point-label{fill:#fff0b4;font-weight:bold}[data-locked="true"]>.map-point-core{fill:#e5c178}
.map-signal-stem{fill:none;stroke:#e4dbc0;stroke-width:2}.map-signal-bezel{fill:#a3aaa0;stroke:#3b5050;stroke-width:2}.map-signal-rim{fill:#283c3c;stroke:#e0d9bd;stroke-width:1}.map-signal{fill:#553e3a;stroke:#181f20;stroke-width:1}.map-signal[data-clear="true"]{fill:#d1dcba;stroke:#e8efce}.map-signal-glint{stroke:#d7dfd2;stroke-width:1.5;fill:none;opacity:.4}
.graph-moving rect{fill:#c5c6ae;stroke:#344d4d;stroke-width:3}.graph-moving text{fill:#f2c4b6;font:20px monospace;paint-order:stroke;stroke:#314d50;stroke-width:5}
.map-hit{position:absolute;width:44px;height:44px;min-width:44px;min-height:44px;padding:8px 2px 2px;border:1px solid transparent;background:transparent;color:#e9e2c4;font:bold 9px monospace;pointer-events:auto;line-height:1.1;cursor:pointer;text-shadow:0 1px 1px #344d4d}.map-hit>small{display:block;font:6px Arial,sans-serif;letter-spacing:1px;margin-top:2px}.map-hit:hover,.map-hit:focus-visible{background:#263f4133;border-color:#d5d4b7;border-radius:0}.map-hit.selected{background:#e0c48716;color:#fff0be;border:1px solid #e5ce8b;border-radius:0}
.graph-camera-label{position:absolute;left:12px;bottom:10px;font:9px monospace;background:#1c3e35c9;color:#bfd1b2;padding:5px 7px;pointer-events:none}.graph-legend{display:flex;justify-content:center;gap:17px;flex-wrap:wrap;color:#d0ddc2;font-size:9px;padding:11px 9px 0}
.graph-control-tray{min-width:0;background:linear-gradient(110deg,#d8dec6,#bbcdaf);color:#2d4d37;max-height:610px;overflow-y:auto;scroll-margin-top:190px;border-left:1px solid #8aa582;overscroll-behavior:contain}.graph-tray-tabs{display:flex;position:sticky;top:0;background:#9db491;padding:7px;gap:5px;z-index:2;border-bottom:1px solid #7c9974}.graph-tray-tabs>button{flex:1;min-height:44px;border:1px solid #7f9b71;background:#cedabb;color:#355637;font-size:11px}.graph-tray-tabs>button[aria-pressed="true"]{background:#edf0d3;border-bottom:3px solid #927c45}
.graph-control-tray>[data-zone]{padding:14px}.graph-panel-title{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:11px}.graph-panel-title h2,.graph-panel-title h3{font-size:10px;letter-spacing:1.4px;text-transform:uppercase}.graph-text{min-height:44px;background:transparent;border:0;text-decoration:underline;font-size:10px;color:#4e7049;padding:5px 7px}.graph-small{font:11px/1.7 Arial,sans-serif;color:#5c7650;margin:10px 0}.graph-small-heading{font-size:10px;letter-spacing:.6px;margin:13px 0 8px}
.graph-selected-service{display:flex;align-items:center;gap:12px;padding:11px;background:#e8e9cd;border:1px solid #94aa82}.graph-selected-service>strong{font:25px monospace;background:#233f34;border:3px solid #80966b;color:#edb4be;padding:8px}.graph-selected-service b{font-size:12px}.graph-selected-service span{display:block;font-size:11px;line-height:1.5;margin-top:6px;color:#5e7651}.graph-itinerary{font:10px/1.9 Arial,sans-serif;margin:11px 0;color:#778664}.graph-itinerary .current{font-weight:bold;color:#405f34;background:#e8e2b9;padding:2px 3px}.graph-itinerary .passed{color:#8c9a7a;text-decoration:line-through}
.graph-destinations{display:grid;grid-template-columns:1fr;gap:6px}.graph-destinations>button{min-height:44px;border:1px solid #7e9b6e;border-bottom:3px solid #718d60;background:#e5e9ce;color:#3b5b37;text-align:left;padding:9px 12px;font-size:12px}
.graph-preview{margin-top:14px;padding:12px;background:#f0ebcf;border:2px solid #b7a061}.graph-preview>p{font:12px/1.6 Arial,sans-serif}.graph-preview .graph-panel-title{margin:0}.graph-path-variants{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:11px}.graph-path-variants>button{min-height:47px;border:1px solid #a4b087;background:#dfe4c4;text-align:left;padding:7px 9px;color:#4b673e;font-size:11px}.graph-path-variants small{display:block;font-size:8px;line-height:1.4;margin-top:4px}.graph-path-variants .active{background:#bfd09e;border-color:#7f9867}.graph-preview-buttons{display:flex;gap:6px;margin:10px 0}.graph-preview-buttons>.secondary{font-size:10px;padding:7px 9px;min-height:44px;flex:1}
.graph-requirements{max-height:120px;overflow:auto;border:1px solid #b3bea0;margin-top:10px}.graph-requirements>button{display:grid;grid-template-columns:45px 1fr 18px;align-items:center;gap:7px;min-height:44px;width:100%;background:#e7e9d0;border:0;border-bottom:1px solid #c0c9ab;color:#637a4d;text-align:left;padding:7px;font-size:9px}.graph-requirements>button b{font:11px monospace}.graph-requirements .ready{background:#d8e2bc}.graph-check{padding:10px;margin:11px 0!important;background:#ead5aa;color:#71562e;font-size:10px!important}.graph-check.ready{background:#d4e1b2;color:#436339}.graph-preview>.primary{width:100%;font-size:11px;line-height:1.5;min-height:49px;padding:9px 10px;position:sticky;bottom:0;z-index:1}.graph-mentor{font:11px/1.7 Arial,sans-serif;color:#5c774c;border-top:1px solid #a6b892;margin-top:14px;padding-top:13px}.graph-mentor>b{font-family:Georgia,serif;font-size:15px;margin-right:5px}
.graph-point-detail{border:1px solid #9eae82;background:#e8e9cc;padding:13px;margin-bottom:12px}.graph-point-detail>.eyebrow{font-size:8px;letter-spacing:1px}.graph-point-detail h3{font:20px/1.3 Georgia,serif;margin-top:9px}.graph-point-detail p{font:11px/1.6 Arial,sans-serif;margin-top:10px;color:#61754b}.graph-position-buttons{display:grid;gap:7px;margin-top:12px}.graph-position-buttons>button{background:#eee9cf;border:1px solid #8ca074;border-bottom:3px solid #7b8c65;text-align:left;padding:10px;color:#49643e;min-height:48px;font-size:11px}.graph-position-buttons b{display:inline-grid;place-items:center;border:1px solid #839768;background:#183b2b;color:#e7c276;width:24px;height:24px;font:14px monospace;margin-right:8px}.graph-position-buttons .active{background:#c7d6aa;border-color:#71925d}.graph-point-list{max-height:320px;overflow:auto;border:1px solid #9eb58c}.graph-point-list>button{display:grid;grid-template-columns:38px 1fr 45px;gap:7px;align-items:center;width:100%;min-height:46px;border:0;border-bottom:1px solid #b6c8a5;background:#dce5c8;color:#4c6c3d;text-align:left;padding:8px;font-size:10px}.graph-point-list>button.selected{background:#edddac}.graph-point-list b{font:12px monospace}.graph-point-list small{font-size:8px}
.graph-report{padding:13px;background:#dce5c4;border:1px solid #92a977;margin-bottom:13px}.graph-report.important{background:#ece0b4;border-left:4px solid #ad8a40}.graph-report>.eyebrow{font-size:8px;letter-spacing:1px}.graph-report h3{font:19px/1.3 Georgia,serif;margin-top:8px}.graph-report p{font-size:11px;line-height:1.7;margin:9px 0;color:#65724b}.graph-report>div{display:flex;gap:7px}.graph-report .secondary{font-size:10px;min-height:44px;padding:7px 10px;flex:1}.graph-report>small{font-size:9px;line-height:1.6;display:block;margin-top:9px;color:#80734d}.graph-report .utility-button{width:100%;margin-top:10px}
.graph-timetable{transform:none;margin:21px 0;padding:20px 24px}.graph-timetable table{table-layout:fixed}.graph-timetable th:first-child{width:41%}.graph-timetable th:nth-child(2){width:17%}.graph-timetable th:nth-child(3){width:42%}.graph-timetable tbody tr{cursor:pointer;touch-action:manipulation}.graph-timetable tbody tr:focus-visible{outline:3px solid #b48c46;outline-offset:-3px}.graph-timetable tbody tr:hover{background:#e5e6c3}.graph-timetable td{min-height:55px;height:65px;font-size:11px;line-height:1.7;padding:8px 10px}.graph-timetable td>b{font:13px monospace}.graph-timetable td>small{font-size:9px;display:block;line-height:1.6;color:#7c895f}
.graph-service-picker{position:absolute;left:12px;right:12px;top:100%;background:#a4b891;padding:8px;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:5px;box-shadow:0 8px 25px #173d26aa;z-index:9}.graph-service-picker>button{text-align:left;min-height:64px;background:#e2e6c9;color:#355836;border:1px solid #8b9e72;padding:9px}.graph-service-picker b{display:block;font:14px monospace}.graph-service-picker small{display:block;font-size:10px;line-height:1.5;margin-top:5px}.graph-service-picker .selected{background:#c0d09e}
@media(min-width:1500px){.graph-map-host{height:650px}.graph-control-tray{max-height:700px}}
@media(max-width:1100px){.graph-shell{padding:15px}.graph-heading{margin-bottom:12px}.graph-heading h1{font-size:24px}.graph-workspace{grid-template-columns:minmax(0,1fr) 310px}.graph-map-host{height:535px}.graph-control-tray{max-height:585px}.graph-global{padding:8px 11px;gap:7px}.graph-global>.secondary{font-size:11px;padding:7px 10px}.graph-global>.quiet{font-size:11px;padding:7px 10px}.graph-clock{min-width:125px;padding:5px 9px}.graph-clock>b{font-size:21px}.graph-camera-tools>.eyebrow{display:none}.graph-camera-tools{padding:6px 9px}.graph-regions>button{font-size:10px}.graph-service-picker{grid-template-columns:repeat(3,minmax(0,1fr))}.graph-control-tray>[data-zone]{padding:11px}}
@media(max-width:850px){.graph-workspace{grid-template-columns:1fr}.graph-map-host{height:450px}.graph-control-tray{max-height:none;border:0}.graph-control-tray>[data-zone]{padding:16px}.graph-control-tray .graph-destinations{grid-template-columns:repeat(3,minmax(0,1fr))}.graph-selected-service{padding:10px}.graph-preview{max-width:700px}.graph-path-variants{grid-template-columns:repeat(4,minmax(0,1fr))}.graph-requirements{max-height:110px}.graph-control-tray .graph-position-buttons{grid-template-columns:1fr 1fr}.graph-point-list{max-height:240px}.graph-run-state{min-width:55px;font-size:9px}.graph-global{gap:6px}.graph-global .quiet{padding:5px 9px}.graph-camera-tools{gap:4px}.graph-camera-tools>button{padding:5px 8px}.graph-timetable{padding:17px}.graph-tray-tabs{position:relative}.graph-control-tray{scroll-margin-top:210px}.graph-map-panel{scroll-margin-top:210px}}
@media(max-width:550px){.graph-shell{padding:12px}.graph-heading h1{font-size:20px}.graph-heading .quiet{padding:5px 9px;min-height:44px}.graph-global{padding:8px;gap:5px}.graph-clock{min-width:112px}.graph-clock>b{font-size:19px}.graph-run-state{display:none}.graph-global>.run-button{min-width:84px;padding:6px 9px}.graph-global>.secondary{padding:6px 9px;font-size:10px}.graph-global>.quiet{font-size:10px;min-height:44px}.graph-camera-tools>button[data-action="net-pan"]{display:none}.graph-regions{flex-wrap:wrap}.graph-regions>button{flex-basis:30%;font-size:9px}.graph-map-host{height:400px}.graph-camera-tools{justify-content:space-between}.graph-service-picker{grid-template-columns:1fr 1fr}.graph-control-tray .graph-destinations{grid-template-columns:1fr 1fr}.graph-path-variants{grid-template-columns:1fr 1fr}.graph-timetable{padding:13px}.graph-timetable td{padding:7px 5px;font-size:10px}.graph-timetable td>small{font-size:8px}.graph-timetable th:first-child{width:38%}.graph-timetable th:nth-child(2){width:19%}.graph-timetable th:nth-child(3){width:43%}.graph-control-tray .graph-position-buttons{grid-template-columns:1fr}.graph-map-panel,.graph-control-tray{scroll-margin-top:230px}}
.graph-hit-leaders{position:absolute;inset:0;pointer-events:none;overflow:visible}.graph-hit-leaders line{stroke:#d5d5b6;stroke-width:1;opacity:.35}.graph-viewport[data-detail="false"] .map-point-label{display:none}.graph-close-controls{display:none}
@media(max-width:1100px){.graph-workspace{grid-template-columns:1fr}.graph-map-host{height:510px}.graph-control-tray{display:none}.graph-control-tray.is-open{display:block;position:fixed;right:15px;bottom:12px;width:370px;max-width:calc(100vw - 30px);max-height:min(560px,calc(100dvh - 210px));z-index:8;border:2px solid #7d986c;box-shadow:0 6px 35px #092d22cc}.graph-close-controls{display:block;flex:0 0 44px!important;min-width:44px}.graph-control-tray .graph-destinations{grid-template-columns:1fr}.graph-control-tray .graph-position-buttons{grid-template-columns:1fr}.graph-control-tray .graph-path-variants{grid-template-columns:1fr 1fr}.graph-global>.secondary{padding:7px 10px;font-size:10px}}
@media(max-width:850px){.graph-control-tray.is-open{max-height:min(560px,calc(100dvh - 260px))}.graph-map-host{height:500px}}
@media(max-width:550px){.graph-camera-tools>button[data-action="net-pan"]{display:block}.graph-control-tray.is-open{right:10px;bottom:8px;width:calc(100vw - 20px);max-width:none;max-height:calc(100dvh - 330px)}.graph-map-host{height:430px}.graph-global>.secondary{padding:7px 8px}}

.join-casing{fill:#e1ddc1;opacity:.9}.join-core{stroke:none;pointer-events:none}
