:root{font-family:Segoe UI,Microsoft YaHei,sans-serif;color:#1d2b33;background:#f1f4f5;font-synthesis:none}*{box-sizing:border-box}body{margin:0;min-width:1100px}button{border:0;font:inherit;cursor:pointer}.app-shell{display:grid;grid-template-columns:236px minmax(0,1fr);min-height:100vh}.sidebar{display:flex;flex-direction:column;padding:26px 14px 18px;color:#c2d0d4;background:#17282f}.brand{display:flex;align-items:center;gap:10px;padding:0 12px 30px;color:#f6fbfc}.brand-mark{display:grid;place-items:center;width:34px;height:34px;border:1px solid #74a9ad;border-radius:6px;color:#b7e4df;font-size:12px;font-weight:800;letter-spacing:.04em}.brand strong,.brand small,.sidebar-footer strong,.sidebar-footer small{display:block}.brand strong{font-size:15px;letter-spacing:.03em}.brand small{margin-top:4px;color:#739099;font-size:8px;letter-spacing:.1em}.sidebar-section{padding:0 4px}.section-label{display:block;padding:0 10px 10px;color:#6c8b93;font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}.nav-item{display:flex;align-items:center;width:100%;gap:11px;margin:2px 0;padding:10px;border-radius:5px;color:#aac0c4;background:transparent;text-align:left;font-size:13px}.nav-item:hover{color:#e8f4f3;background:#203b43}.nav-item.active{color:#e6fbf7;background:#28555c;box-shadow:inset 3px 0 #81c9be}.nav-glyph{display:inline-grid;place-items:center;width:22px;color:#71939a;font-size:9px;font-weight:700}.nav-item.active .nav-glyph{color:#a6e0d5}.nav-item b{min-width:17px;margin-left:auto;padding:2px 5px;border-radius:10px;color:#fff;background:#c4654f;font-size:10px;text-align:center}.system-links{margin-top:auto;padding-top:25px}.dock-mini{margin:25px 4px 20px;padding:13px 12px;border:1px solid #2d4c54;border-radius:5px;background:#1c343b}.dock-mini-heading{display:flex;align-items:center;gap:6px;color:#e5f5f2;font-size:12px}.online-dot,.connection i{width:7px;height:7px;border-radius:50%;background:#62b98a}.mini-state{margin-left:auto;color:#78a59e;font-size:10px}.dock-mini-grid{display:grid;grid-template-columns:1fr 1fr;gap:7px 10px;margin-top:13px;color:#7f9ba0;font-size:10px}.dock-mini-grid strong{color:#d3e3e3;font-size:11px;font-weight:500;text-align:right}.sidebar-footer{display:flex;align-items:center;gap:9px;padding:14px 10px 0;border-top:1px solid #2a464d}.avatar{display:grid;place-items:center;width:27px;height:27px;border-radius:50%;color:#17333a;background:#9dccc2;font-size:12px;font-weight:700}.sidebar-footer strong{color:#dce9e9;font-size:12px;font-weight:500}.sidebar-footer small{margin-top:3px;color:#769199;font-size:10px}.more{margin-left:auto;color:#75939a;letter-spacing:2px}.content{min-width:0;padding:0 34px 30px}.topbar{display:flex;align-items:center;justify-content:space-between;min-height:66px;border-bottom:1px solid #dbe2e4;color:#364b52;font-size:13px}.breadcrumb{margin-right:8px;color:#8a989d}.top-actions{display:flex;align-items:center;gap:12px}.sync-time{color:#91a0a5;font-size:11px}.icon-button{width:30px;height:30px;border:1px solid #d6dfe1;border-radius:4px;color:#60767d;background:#fff;font-size:19px;line-height:1}.outline-button{padding:9px 13px;border:1px solid #2d7b82;border-radius:4px;color:#236770;background:#fff;font-size:12px}.page-head{display:flex;align-items:flex-end;justify-content:space-between;padding:28px 0 19px}.eyebrow{margin:0 0 6px;color:#66818a;font-size:10px;font-weight:750;letter-spacing:.11em}h1,h2,p{margin-top:0}h1{margin-bottom:5px;color:#1b3037;font-size:27px;font-weight:700}h2{margin-bottom:0;color:#203940;font-size:17px;font-weight:700}.page-subtitle{margin:0;color:#829197;font-size:12px}.connection{display:flex;align-items:center;gap:7px;padding-bottom:4px;color:#5c747a;font-size:11px}.connection i{display:inline-block}.connection span{color:#a5b1b4}.metric-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px}.metric-card{min-height:109px;padding:16px 17px 14px;border:1px solid #dfe6e7;border-radius:5px;background:#fff}.metric-label{display:flex;align-items:center;justify-content:space-between;color:#77898f;font-size:11px}.metric-label i{width:7px;height:7px;border-radius:50%}.metric-card>strong{display:block;margin:8px 0 4px;color:#203940;font-size:27px;letter-spacing:.02em}.metric-card small{font-size:10px}.metric-card small.up{color:#4c9a76}.metric-card small.warn{color:#c46c50}.metric-card small.normal{color:#7f9297}.workspace-grid,.lower-grid{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(350px,.9fr);gap:15px;margin-top:15px}.surface{border:1px solid #dfe6e7;border-radius:5px;background:#fff;overflow:hidden}.surface-head{display:flex;align-items:center;justify-content:space-between;min-height:64px;padding:14px 17px}.map-surface,.video-surface{min-height:375px}.map-tabs{display:flex;gap:3px;padding:3px;border:1px solid #e2e8e9;border-radius:4px;background:#f7f9f9}.map-tabs button{padding:6px 10px;border-radius:3px;color:#809096;background:transparent;font-size:11px}.map-tabs button.selected{color:#256d75;background:#fff;box-shadow:0 1px 3px #dfe6e7}.map-canvas{position:relative;height:310px;overflow:hidden;border-top:1px solid #e5ebec;background-color:#e7eeee;background-image:linear-gradient(#d3e0df 1px,transparent 1px),linear-gradient(90deg,#d3e0df 1px,transparent 1px);background-size:42px 42px}.map-canvas:before,.map-canvas:after{position:absolute;content:"";background:#d8e4e3;transform:rotate(-12deg)}.map-canvas:before{left:-4%;top:39%;width:108%;height:34px;opacity:.82}.map-canvas:after{left:-5%;top:67%;width:105%;height:11px;opacity:.62}.route-lines{position:absolute;inset:0;width:100%;height:100%}.route-lines path{fill:none;stroke:#2b858d;stroke-width:4;stroke-linecap:round;stroke-dasharray:1 0}.route-lines .route-muted{stroke:#8daeb0;stroke-width:2;stroke-dasharray:7 7}.route-start{fill:#fff;stroke:#2b858d;stroke-width:4}.route-current{fill:#da7457;stroke:#fff;stroke-width:4}.route-end{fill:#fff;stroke:#708d91;stroke-width:3}.map-label{position:absolute;z-index:1;color:#718589;font-size:10px;letter-spacing:.03em}.map-label-a{left:14%;top:38%}.map-label-b{right:16%;top:21%}.map-label-c{left:7%;bottom:15%}.map-marker{position:absolute;z-index:2;display:flex;align-items:center;gap:6px;color:#24434a;font-size:10px}.map-marker span{display:grid;place-items:center;width:23px;height:23px;border:2px solid #fff;border-radius:50%;color:#fff;background:#2c818a;box-shadow:0 1px 4px #82989a;font-size:9px;font-weight:700}.map-marker b{padding:4px 6px;border:1px solid #d3dddd;border-radius:3px;background:#fff;font-weight:500}.marker-dock{left:7%;bottom:13%}.marker-drone{left:59%;top:59%}.marker-drone span{background:#da7457}.marker-alert{right:22%;top:24%}.marker-alert span{width:18px;height:18px;border:0;background:#d56549}.map-controls{position:absolute;z-index:3;right:13px;bottom:42px;display:grid;border:1px solid #d4dfdf;border-radius:4px;overflow:hidden;box-shadow:0 1px 4px #b8c8c8}.map-controls button{width:29px;height:27px;color:#547077;background:#fff;font-size:16px}.map-controls button+button{border-top:1px solid #e0e7e7}.map-legend{position:absolute;z-index:3;right:13px;bottom:11px;display:flex;gap:12px;color:#667b80;font-size:9px}.legend-line{display:inline-block;width:15px;margin-right:4px;border-top:3px solid #2b858d;vertical-align:middle}.legend-dot{display:inline-block;width:7px;height:7px;margin:0 4px 1px 0;border-radius:50%}.blue-dot{background:#da7457}.red-dot{background:#d56549}.video-surface{background:#fff}.live-button{padding:7px 9px;border:1px solid #dce5e5;border-radius:4px;color:#60787d;background:#f7f9f9;font-size:10px}.live-button i{display:inline-block;width:7px;height:7px;margin-right:5px;border-radius:50%;background:#9eafb0}.live-button.playing{border-color:#c9e4dd;color:#27755d;background:#edf8f2}.live-button.playing i{background:#42a675}.video-frame{position:relative;height:258px;margin:0 13px;overflow:hidden;border-radius:3px;background:#16282e}.video-grid-lines{position:absolute;inset:0;opacity:.18;background-image:linear-gradient(90deg,transparent 49.7%,#aac4c4 50%,transparent 50.3%),linear-gradient(0deg,transparent 49.7%,#aac4c4 50%,transparent 50.3%);background-size:50% 50%}.video-off,.video-on{position:absolute;inset:0;display:grid;place-content:center;justify-items:center;color:#b6cccd;text-align:center}.video-off strong{margin:10px 0 5px;color:#d5e1df;font-size:12px;font-weight:500}.video-off small{color:#708b90;font-size:10px}.camera-glyph{color:#57777d;font-size:30px}.recording{position:absolute;top:13px;left:14px;color:#eea08b;font-size:10px}.recording i{display:inline-block;width:6px;height:6px;margin-right:5px;border-radius:50%;background:#e46b54}.video-caption{position:absolute;right:14px;bottom:12px;color:#a6c0c1;font-size:10px}.crosshair{color:#9dbbbb;font-size:24px}.video-corner{position:absolute;width:14px;height:14px;border-color:#6f999d}.top-left{top:12px;left:12px;border-top:1px solid;border-left:1px solid}.top-right{top:12px;right:12px;border-top:1px solid;border-right:1px solid}.bottom-left{bottom:12px;left:12px;border-bottom:1px solid;border-left:1px solid}.bottom-right{right:12px;bottom:12px;border-right:1px solid;border-bottom:1px solid}.video-footer{display:flex;align-items:center;gap:6px;padding:12px 13px 11px;color:#8a9a9e;font-size:10px}.video-footer button{padding:5px 7px;border-radius:3px;color:#718488;background:#f3f6f6;font-size:10px}.video-footer button.chosen{color:#2a737a;background:#e8f4f2}.video-footer span:first-of-type{margin-left:auto}.video-footer b{color:#425b61;font-weight:500}.lower-grid{grid-template-columns:minmax(0,1.2fr) minmax(360px,.8fr)}.task-surface,.alert-surface{min-height:284px}.text-button{color:#397880;background:transparent;font-size:11px}.task-table-head,.task-row{display:grid;grid-template-columns:1.7fr .65fr 1fr 1fr;align-items:center;gap:14px}.task-table-head{padding:10px 17px;color:#9aa7aa;background:#fafbfb;font-size:10px}.task-row{min-height:59px;padding:10px 17px;border-top:1px solid #edf1f1;font-size:11px}.task-name strong,.task-name small{display:block}.task-name strong{color:#2d474e;font-size:11px;font-weight:600}.task-name small{margin-top:4px;color:#8a9a9f;font-size:9px}.task-status{white-space:nowrap}.task-status.running{color:#28826f}.task-status.pending{color:#9b7a46}.task-status.done{color:#819196}.progress{display:flex;align-items:center;gap:7px}.progress>div{flex:1;height:4px;overflow:hidden;border-radius:3px;background:#e7eeee}.progress i{display:block;height:100%;border-radius:inherit;background:#3d9291}.progress small{width:26px;color:#708489;font-size:9px}.task-row time{color:#849398;font-size:10px;white-space:nowrap}.alert-list{padding:0 8px}.alert-row{display:flex;align-items:center;width:100%;gap:9px;padding:10px 9px;border-bottom:1px solid #edf1f1;color:#2d474e;background:#fff;text-align:left}.alert-row.selected{background:#f0f7f6}.alert-level{width:3px;height:29px;border-radius:2px}.alert-main{flex:1;min-width:0}.alert-main strong,.alert-main small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.alert-main strong{font-size:11px;font-weight:600}.alert-main small{margin-top:4px;color:#89999d;font-size:9px}.alert-row time{color:#87979a;font-size:9px;white-space:nowrap}.chevron{color:#9aabad;font-size:20px}.selected-alert{display:flex;align-items:center;gap:8px;margin:12px 17px 0;padding-top:11px;border-top:1px solid #edf1f1;color:#89999d;font-size:9px}.selected-alert strong{color:#546c72;font-size:10px;font-weight:600}.selected-alert button{margin-left:auto;padding:5px 9px;border-radius:3px;color:#fff;background:#3e8184;font-size:10px}.timeline-surface{margin-top:15px}.mission-id{color:#32806f;font-size:10px}.timeline{display:grid;grid-template-columns:repeat(4,1fr);padding:7px 17px 20px}.timeline-item{position:relative;min-height:57px;padding:12px 13px 0;border-top:1px solid #dce5e5}.timeline-item:before{position:absolute;top:-4px;left:14px;width:7px;height:7px;border:2px solid #fff;border-radius:50%;background:#86a1a3;box-shadow:0 0 0 1px #a4b7b8;content:""}.timeline-item i{display:none}.timeline-item time,.timeline-item span{display:block}.timeline-item time{color:#688187;font-size:10px}.timeline-item span{margin-top:5px;color:#334e55;font-size:10px}.timeline-item:first-child:before{background:#d56549;box-shadow:0 0 0 1px #d56549}.timeline-item:last-child:before{background:#3e8d76;box-shadow:0 0 0 1px #3e8d76}.content-footer{display:flex;justify-content:space-between;padding:21px 2px 0;color:#9aa7a9;font-size:9px}.toast{position:fixed;right:28px;bottom:25px;padding:10px 15px;border:1px solid #cce2de;border-radius:4px;color:#27655e;background:#f0faf6;box-shadow:0 5px 18px #aabdbc55;font-size:12px}.toast-enter-active,.toast-leave-active{transition:opacity .2s,transform .2s}.toast-enter-from,.toast-leave-to{opacity:0;transform:translateY(8px)}@media(max-width:1120px){body{min-width:900px}.app-shell{grid-template-columns:210px minmax(0,1fr)}.content{padding:0 20px 25px}.workspace-grid,.lower-grid{grid-template-columns:minmax(0,1fr)}.video-surface{min-height:auto}.timeline{grid-template-columns:repeat(2,1fr);row-gap:15px}}@media(max-width:700px){body{min-width:0}.app-shell{display:block}.sidebar{padding:15px 12px 9px}.brand{padding:0 7px 13px}.sidebar-section{display:flex;gap:3px;overflow-x:auto;padding-bottom:2px}.section-label,.system-links,.dock-mini,.sidebar-footer{display:none}.nav-item{flex:0 0 auto;width:auto;margin:0;padding:8px 9px;font-size:11px}.nav-glyph{width:auto}.content{padding:0 12px 22px}.topbar{min-height:54px}.sync-time,.icon-button,.top-actions .outline-button{display:none}.page-head{align-items:flex-start;flex-direction:column;gap:12px;padding:21px 0 15px}h1{font-size:24px}.metric-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.metric-card{min-height:98px;padding:13px}.metric-card>strong{font-size:23px}.workspace-grid,.lower-grid{grid-template-columns:minmax(0,1fr);gap:11px;margin-top:11px}.map-surface,.video-surface{min-height:0}.map-canvas{height:250px}.map-tabs{max-width:138px;overflow-x:auto}.map-tabs button{flex:0 0 auto}.map-legend{left:12px;right:auto}.task-table-head,.task-row{grid-template-columns:1.6fr .8fr .9fr;gap:7px}.task-table-head span:last-child,.task-row time{display:none}.timeline{grid-template-columns:1fr;row-gap:7px;padding-bottom:14px}.timeline-item{min-height:38px;padding-top:9px}.timeline-item span{margin-top:3px}.content-footer{flex-direction:column;gap:5px}}
