:root{color-scheme:dark;font-family:Inter,Arial,Helvetica,sans-serif;color:#dbe4f2;background:#0a101c;font-synthesis:none}*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden}button,input{font:inherit}button{cursor:pointer}.app-shell{display:grid;grid-template-columns:54px 1fr;grid-template-rows:46px 1fr;width:100vw;height:100dvh;min-height:380px}.topbar{grid-column:1/-1;grid-row:1;display:flex;align-items:center;gap:20px;padding:0 20px 0 13px;background:#202635;border-bottom:1px solid #303a4c;z-index:10;min-width:0}.brand{display:flex;align-items:center;gap:7px;white-space:nowrap;color:#f4f7fc;font-size:13px;font-weight:800;letter-spacing:.08em}.brand-mark{display:grid;place-items:center;width:21px;height:21px;border:1.5px solid #e7edf7;border-radius:50%;font-size:17px;line-height:1}.topbar-separator{height:18px;width:1px;background:#3b465a}.page-title{white-space:nowrap;color:#b5bdca;font-size:12px}.search-wrap{position:absolute;left:50%;transform:translateX(-50%);width:min(360px,31vw);height:30px}.search-wrap svg{position:absolute;left:10px;top:7px;width:16px;height:16px;fill:none;stroke:#a4afbf;stroke-width:1.8;pointer-events:none}.search-wrap input{width:100%;height:100%;padding:0 12px 0 33px;color:#e9f1fc;background:#0c1422;border:1px solid #47536a;border-radius:3px;outline:none;font-size:12px}.search-wrap input:focus{border-color:#4085f4;box-shadow:0 0 0 2px #4085f424}.search-wrap input::placeholder{color:#708198}.search-results{position:absolute;top:35px;left:0;right:0;background:#171f2e;border:1px solid #3d4a60;border-radius:5px;box-shadow:0 14px 35px #0009;overflow:hidden}.search-results button{display:block;width:100%;padding:10px 13px;text-align:left;background:transparent;color:#dce6f5;border:0}.search-results button:hover,.search-results button:focus{background:#25334a}.search-results small{display:block;margin-top:2px;color:#7889a0}.topbar-right{display:flex;align-items:center;gap:8px;margin-left:auto;white-space:nowrap;color:#8899ad;font-size:11px}.live-dot{width:7px;height:7px;border-radius:50%;background:#f2a94b;box-shadow:0 0 9px #f2a94b80}.live-dot.ready{background:#36d889;box-shadow:0 0 9px #36d88980}.live-dot.error{background:#ef6973;box-shadow:0 0 9px #ef697380}.rail{grid-column:1;grid-row:2;display:flex;flex-direction:column;align-items:stretch;background:#202635;border-right:1px solid #303a4c;z-index:5}.rail-button{display:grid;place-items:center;width:54px;height:54px;border:0;border-bottom:1px solid #303a4c;background:transparent;color:#708097}.rail-button:hover,.rail-button.active{color:#e9f2ff;background:#2d6ef2}.rail-button svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.65;stroke-linecap:round;stroke-linejoin:round}.map-area{position:relative;grid-column:2;grid-row:2;min-width:0;min-height:0;overflow:hidden;background:#0a111e;cursor:grab}.map-area.dragging{cursor:grabbing}#map{display:block;width:100%;height:100%}.map-vignette{position:absolute;inset:0;pointer-events:none;box-shadow:inset 0 0 120px #050a13a8}.map-mode{position:absolute;top:19px;right:18px;display:flex;align-items:center;gap:8px;padding:8px 11px;background:#151d2bdc;border:1px solid #334054;border-radius:4px;color:#aab8cb;font-size:10px;font-weight:700;letter-spacing:.09em;box-shadow:0 5px 15px #0005}.map-mode span{width:1px;height:13px;background:#4b5a70}.floating-panel{position:absolute;top:18px;width:298px;background:#151c29f5;border:1px solid #2a3547;border-radius:5px;box-shadow:0 16px 46px #0008;z-index:3}.route-panel{left:18px}.layers-panel{right:18px;top:62px;width:255px}.panel-heading{display:flex;justify-content:space-between;align-items:flex-start;padding:18px 18px 15px}.eyebrow{color:#498dfb;font-size:10px;font-weight:800;letter-spacing:.15em}.panel-heading h1,.panel-heading h2{margin:6px 0 0;color:#f5f8fd;font-size:17px;font-weight:650}.icon-button{border:0;background:none;color:#8190a5;font-size:22px;line-height:20px}.icon-button:hover{color:white}.route-places{padding:2px 18px 18px}.route-places>div{display:flex;align-items:center;gap:9px;font-size:13px;font-weight:600}.route-places small{margin-left:auto;color:#7d8da3;font-size:11px;font-weight:400}.place-marker{width:12px;height:12px;border:3px solid #3d83f6;border-radius:50%;background:#172840;box-shadow:0 0 0 3px #2a5fad33}.place-marker.finish{border-color:#35db89;background:#143a2d;box-shadow:0 0 0 3px #35db8933}.place-line{display:block;width:1px;height:22px;margin-left:5px;border-left:1px dashed #53627a}.panel-rule{height:1px;background:#2c3748}.route-stat{display:flex;justify-content:space-between;gap:10px;padding:11px 18px 0;font-size:11px}.route-stat span{color:#8493a8}.route-stat strong{font-weight:550;color:#dce6f4}.panel-note{margin:17px 18px 19px;padding:11px 12px;border-left:2px solid #3680f4;background:#20304a;color:#aabddd;font-size:11px;line-height:1.45}.layer-row{display:flex;align-items:center;justify-content:space-between;padding:12px 18px;border-top:1px solid #2a3547;color:#c8d4e4;font-size:12px;cursor:pointer}.layer-row>span{display:flex;align-items:center;gap:10px}.layer-row input{accent-color:#337cfa;cursor:pointer}.layer-row i{width:17px;height:11px;border-radius:2px}.legend-land{background:#273344;border:1px solid #526176}.legend-label{background:linear-gradient(transparent 40%,#8997aa 40%,#8997aa 60%,transparent 60%)}.legend-route{background:linear-gradient(transparent 41%,#20ed78 41%,#20ed78 60%,transparent 60%)}.panel-source{padding:14px 18px;border-top:1px solid #2a3547;color:#708198;font-size:10px}.point-popup{position:absolute;z-index:4;min-width:150px;padding:10px 12px;border:1px solid #3e526e;border-radius:4px;background:#172235f5;box-shadow:0 6px 20px #0008;color:#dfeafb;font-size:12px;pointer-events:none}.point-popup strong{display:block;margin-bottom:4px}.point-popup span{color:#9fb0c7;font-size:11px}.load-message{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);padding:12px 17px;background:#151d2deb;border:1px solid #33445c;border-radius:5px;color:#bbc9dc;font-size:12px;text-align:center;z-index:2}.load-message.error{color:#ffc7ca;border-color:#ae4d58}.map-controls{position:absolute;right:18px;bottom:52px;display:flex;flex-direction:column;border:1px solid #344258;border-radius:4px;overflow:hidden;box-shadow:0 4px 20px #0007}.map-controls button{width:35px;height:35px;border:0;border-bottom:1px solid #344258;background:#1c2636e8;color:#aabbd1;font-size:22px;font-weight:200}.map-controls button:last-child{border-bottom:0}.map-controls button:hover{background:#2d6ef2;color:white}.map-controls .compass{font-size:19px}.map-footer{position:absolute;right:18px;bottom:15px;display:flex;align-items:center;gap:10px;color:#4f80c1;font-size:10px;letter-spacing:.04em}.footer-rule{width:36px;height:2px;background:#367ef3}@media(max-width:850px){.topbar{gap:10px}.page-title,.topbar-separator,.topbar-right{display:none}.search-wrap{left:auto;right:14px;transform:none;width:min(360px,48vw)}.map-mode{font-size:9px}.floating-panel{max-width:calc(100vw - 90px)}}@media(max-width:560px){.brand{font-size:11px}.brand-mark{width:18px;height:18px}.topbar{padding-right:10px}.search-wrap{width:42vw;right:10px}.map-mode{top:10px;right:10px;padding:6px}.route-panel{top:50px;left:10px}.layers-panel{right:10px;top:50px}.map-footer{right:10px;bottom:10px;font-size:9px}.map-controls{right:10px;bottom:46px}}

.map-summary{position:absolute;top:19px;left:18px;display:flex;align-items:center;gap:6px;padding:9px 11px;border:1px solid #344258;border-radius:4px;background:#151d2bdf;color:#aebed1;font-size:11px;box-shadow:0 5px 15px #0005}
.map-summary strong{color:#e5eef9;font-weight:700}.summary-port-dot,.summary-vessel-dot{width:7px;height:7px;border-radius:50%;background:#4d96ff}.summary-vessel-dot{background:#26e684}.summary-divider{height:13px;width:1px;margin:0 5px;background:#40516a}
.legend-port{background:radial-gradient(circle,#4d96ff 0 4px,transparent 5px)}
.legend-vessel{background:radial-gradient(circle,#26e684 0 4px,transparent 5px)}
.point-popup{max-width:230px;line-height:1.4}.point-popup span{display:block}
@media(max-width:1100px){.search-wrap{width:min(300px,30vw)}}
@media(max-width:800px){.map-mode{display:none}}
@media(max-width:700px){.map-mode{display:none}.map-summary{top:10px;left:10px;font-size:10px}.search-wrap{width:48vw}}
.summary-factory-dot{width:7px;height:7px;border-radius:50%;background:#f5a623}
.legend-factory{background:radial-gradient(circle,#f5a623 0 4px,transparent 5px)}
.factory-list{left:18px;top:63px;width:min(360px,calc(100% - 36px));max-height:min(600px,calc(100% - 85px));display:flex;flex-direction:column}
.factory-list[hidden]{display:none}
.factory-list-note{margin:0;padding:0 18px 12px;color:#91a1b6;font-size:11px;line-height:1.4}
.factory-list-items{overflow:auto;border-top:1px solid #2a3547}
.factory-list-items small{display:block;margin-top:3px;color:#8798ae}
.factory-list-items button{display:block;width:100%;padding:9px 18px;border:0;border-bottom:1px solid #283548;background:transparent;color:#e5edf8;font-size:12px;text-align:left}
.factory-list-items button:hover,.factory-list-items button:focus{background:#26374c;color:#ffbd50}
.rail-button--factories{height:72px;gap:5px;padding:10px 2px;font-size:9px;line-height:1.2}
.rail-button--factories span{max-width:46px}
.factory-directory-tools{display:flex;flex-direction:column;gap:10px;padding:0 18px 10px}
.factory-directory-tools input{width:100%;padding:9px 10px;border:1px solid #45536b;border-radius:4px;background:#0d1725;color:#edf5ff;font-size:12px;outline:none}
.factory-directory-tools input:focus{border-color:#4388f5}
.factory-directory-tools a{align-self:flex-start;color:#8fb7f7;font-size:12px;text-decoration:none}
.factory-directory-tools a:hover{text-decoration:underline}
.factory-list-status{margin:0;padding:0 18px 10px;color:#a6b9d1;font-size:11px}
.factory-list-items button[aria-pressed="true"]{background:#3b301c;color:#ffc168;border-left:3px solid #f5a623;padding-left:15px}
.point-popup.factory-preview{width:286px;max-width:calc(100% - 16px);padding:0;pointer-events:auto;cursor:default}
.factory-preview__link{display:block;padding:15px 34px 14px 15px;color:#edf5ff;text-decoration:none;border-radius:4px}
.factory-preview__link:hover,.factory-preview__link:focus-visible{background:#20334d;outline:1px solid #f5a623;outline-offset:1px}
.factory-preview__link strong{font-size:13px;overflow-wrap:anywhere}
.factory-preview__close{position:absolute;top:6px;right:6px;width:25px;height:25px;padding:0;border:0;background:transparent;color:#aebdd0;font-size:22px}
.factory-preview__metrics{display:grid;grid-template-columns:auto 1fr;gap:7px 10px;margin:14px 0 12px;font-size:11px}
.factory-preview__metrics dt{color:#a9b9cf}
.factory-preview__metrics dd{margin:0;text-align:right;color:#ffc168;font-weight:600;white-space:nowrap}
.factory-preview__link .factory-preview__period{font-size:10px;color:#8c9eb7}
.factory-preview__retry{margin:0 15px 12px;border:1px solid #45536b;border-radius:3px;padding:5px 8px;background:#20334d;color:#edf5ff;font-size:11px}
.directory-button{margin-left:5px;padding:2px 5px;border:1px solid #ad761f;border-radius:3px;background:#2e200e;color:#ffc168;font-size:10px;white-space:nowrap}.directory-button:hover,.directory-button:focus{background:#5a3b11;color:white}
.map-summary{max-width:calc(100% - 36px);flex-wrap:wrap}

.route-builder{left:18px;top:67px;width:min(320px,calc(100% - 36px));max-height:calc(100% - 85px);overflow:auto}
.route-builder form{padding:0 18px 14px}
.route-field{position:relative;margin-bottom:12px}
.route-field label{display:block;margin-bottom:5px;color:#aebdd0;font-size:11px}
.route-field input{width:100%;padding:9px 10px;border:1px solid #45536b;border-radius:4px;outline:none;background:#0d1725;color:#edf5ff;font-size:12px}
.route-field input:focus{border-color:#4388f5}
.route-field input::placeholder{color:#71839a}
.route-field input[hidden],.route-coordinate-fields[hidden]{display:none}
.route-methods{display:flex;gap:6px;margin-top:7px}
.route-methods button{flex:1;padding:6px 5px;border:1px solid #40516b;border-radius:4px;background:#1a293b;color:#a9bfd9;font-size:10px}
.route-methods button:hover,.route-methods button:focus,.route-methods button.active{border-color:#4388f5;color:#eef5ff;background:#244373}
.route-coordinate-fields{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:9px}
.route-coordinate-fields label{margin:0}
.route-coordinate-fields input{margin-top:5px}
.map-area.route-picking #map{cursor:crosshair}
.route-pick-hint{position:absolute;left:18px;top:67px;z-index:3;display:flex;align-items:center;gap:12px;max-width:min(360px,calc(100% - 36px));padding:10px 12px;border:1px solid #4388f5;border-radius:5px;background:#172b47f2;color:#edf5ff;font-size:11px;box-shadow:0 8px 24px #0008}
.route-pick-hint[hidden]{display:none}
.route-pick-hint button{border:0;background:transparent;color:#a8c9ff;font-size:11px}
@media(max-width:700px){.route-pick-hint{top:47px;left:10px}}
.route-suggestions{position:absolute;top:100%;left:0;right:0;max-height:220px;overflow:auto;background:#1b2637;border:1px solid #45536b;box-shadow:0 8px 22px #0009;z-index:8}
.route-suggestions[hidden],.route-builder[hidden]{display:none}
.route-suggestions button{display:block;width:100%;padding:8px 10px;border:0;background:transparent;text-align:left;color:#ecf4ff;font-size:12px}
.route-suggestions button:hover,.route-suggestions button:focus{background:#294264}
.route-suggestions small{display:block;margin-top:2px;color:#91a6c2;font-size:10px}
.route-hint{margin:3px 0 13px;color:#91a2b9;font-size:11px;line-height:1.45}
.route-submit{width:100%;padding:9px;border:0;border-radius:4px;background:#2e73ec;color:#fff;font-weight:650;font-size:12px}
.route-submit:disabled{opacity:.6;cursor:wait}
.route-result{padding:0 18px 14px;color:#b8eacb;font-size:11px;line-height:1.5}
.route-result.error{color:#ffb9bd}
.route-clear{margin:0 18px 17px;padding:5px 0;border:0;background:transparent;color:#8fb7f7;font-size:11px}
@media(max-width:700px){.route-builder{top:47px;left:10px;max-height:calc(100% - 57px)}}
.load-message.partial{top:auto;bottom:54px;left:18px;transform:none;max-width:calc(100vw - 90px);text-align:left;pointer-events:none}

/* The map stays mounted while the shared terminal is open. */
body.terminal-map .topbar, body.terminal-map .sidebar, body.terminal-map .side-rail, body.terminal-map .chat-panel, body.terminal-map .statusbar, body.terminal-map .map-summary { display: none; }
body.terminal-map .app { display: block; height: 100dvh; }
body.terminal-map .workspace { display: block; height: 100%; }
body.terminal-map .map-area { width: 100%; height: 100dvh; }
body.terminal-map { background: #050505; }
body.terminal-map .rail, body.terminal-map .map-mode, body.terminal-map .map-footer { display: none; }
body.terminal-map .app-shell { display: block; width: 100vw; height: 100dvh; min-height: 0; }
