:root{--navy:#031d36;--navy2:#052b4e;--cyan:#009ee2;--ink:#0b1830;--muted:#66758b;--line:#dbe2ea;--bg:#f5f7fa;--surface:#fff;--green:#0eae4d;--amber:#f38a00;--red:#d92d3a;--radius:9px}*{box-sizing:border-box}html,body{margin:0;min-height:100%;font-family:Inter,system-ui,sans-serif;color:var(--ink);background:var(--bg)}body{padding-left:226px;padding-top:66px}.sidebar{position:fixed;inset:0 auto 0 0;width:226px;background:linear-gradient(160deg,var(--navy2),var(--navy) 55%);color:#fff;padding:22px 8px;z-index:10}.brand{display:block;color:#fff;text-decoration:none;font:700 31px/1 'Barlow Condensed',sans-serif;padding:0 14px 28px}.brand span{color:var(--cyan)}nav{display:grid;gap:6px}nav a{display:flex;align-items:center;gap:14px;color:#d9e5f0;text-decoration:none;padding:13px 14px;border-radius:5px;font-size:15px}nav a i{width:22px;text-align:center;font-size:21px;font-style:normal}nav a:hover,nav a.active{background:var(--cyan);color:#fff}.sidebar-foot{position:absolute;bottom:24px;left:22px;font-size:11px;color:#8ba5bc}.sidebar-foot:before{content:"";display:inline-block;width:7px;height:7px;background:var(--green);border-radius:50%;margin-right:8px}.topbar{position:fixed;top:0;right:0;left:226px;height:66px;background:#fff;border-bottom:1px solid var(--line);z-index:9;display:flex;align-items:center;padding:0 28px}.topbar strong{font-size:15px}.topbar .user{margin-left:auto;display:flex;align-items:center;gap:16px}.user form{margin:0}.user button{border:0;background:none;color:var(--muted);cursor:pointer}.menu-button{display:none}main{padding:28px;max-width:1600px;margin:auto}.page-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:22px}.page-head h1{font:700 42px/1 'Barlow Condensed',sans-serif;margin:0 0 6px}.page-head p{margin:0;color:var(--muted);font-size:13px}.updated{font-size:12px;color:var(--green)}.metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:16px}.metrics article{height:84px;background:#fff;border:1px solid var(--line);border-top:3px solid var(--cyan);display:flex;align-items:center;justify-content:center;gap:12px;border-radius:var(--radius)}.metrics b{font:700 34px 'Barlow Condensed',sans-serif;color:var(--cyan)}.metrics span{font-size:13px}.metrics .good{border-top-color:var(--green)}.metrics .good b{color:var(--green)}.metrics .warning{border-top-color:var(--amber)}.metrics .warning b{color:var(--amber)}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.panel h2,.panel-title{margin:0;padding:14px 16px;border-bottom:1px solid var(--line);font:600 19px 'Barlow Condensed',sans-serif}.dashboard-grid{display:grid;grid-template-columns:minmax(0,1fr) 270px;gap:16px}.map-panel{grid-column:1}.status-rail{grid-column:2;grid-row:1/3}.activity{grid-column:1}.map{height:445px;background:#d9e8e4}.full-map .map{height:calc(100vh - 190px);min-height:520px}.status-item{padding:16px;border-bottom:1px solid var(--line)}.status-item>div:first-child{display:flex;align-items:center}.status-item strong{font-size:14px}.status-item small{display:block;color:var(--muted);padding:6px 0 10px 18px}.telemetry{display:flex;justify-content:space-between;color:#45566e;font-size:12px}.dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:var(--green);margin-right:9px}.dot.warn{background:var(--amber)}.dot.bad{background:var(--red)}.panel-title{display:flex;justify-content:space-between;align-items:center}.panel-title h2{border:0;padding:0}.panel-title a{font:500 12px Inter;color:#0052a4;text-decoration:none}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse;font-size:12px}th{text-align:left;color:#44536a;background:#fafbfc;font-weight:600}th,td{padding:11px 14px;border-bottom:1px solid var(--line);white-space:nowrap}tr:last-child td{border:0}.click-row{cursor:pointer}.click-row:hover td{background:#f5fbff}.empty{text-align:center;color:var(--muted);padding:32px!important}code{font-family:ui-monospace,monospace;color:#496177;font-size:11px}.button{display:inline-flex;padding:10px 14px;border:1px solid var(--line);background:#fff;color:var(--ink);border-radius:6px;text-decoration:none;font:600 12px Inter;cursor:pointer}.button.primary,.primary{background:var(--cyan);border-color:var(--cyan);color:#fff}.table-page{min-height:200px}.device-list{display:grid;gap:9px}.device-row{display:grid;grid-template-columns:2fr repeat(4,1fr);align-items:center;gap:20px;background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:15px 18px;color:var(--ink);text-decoration:none;font-size:13px}.device-row:hover{border-color:#92cce8}.device-main{display:flex;align-items:center;gap:13px}.device-main>div{display:grid;gap:4px}.device-icon{display:grid;place-items:center;width:38px;height:38px;background:#eaf7fd;color:#007db8;border-radius:6px;font-size:21px}.device-row small{display:block;color:var(--muted);margin-top:5px;font-size:11px}.form-panel{max-width:620px;padding:24px}.form-panel p{display:grid;gap:7px;margin:0 0 17px}.form-panel label{font-size:12px;font-weight:600}.form-panel input,.form-panel select,.filter select{width:100%;padding:11px;border:1px solid #cbd5e0;border-radius:5px;background:#fff;font:13px Inter}.form-panel input:focus,.form-panel select:focus{outline:2px solid #9bddf7;border-color:var(--cyan)}.form-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:25px}.login-page{padding:0;display:grid;place-items:center;min-height:100vh;background:radial-gradient(circle at 70% 20%,#0a4775,var(--navy) 48%,#021426)}.login-card{width:min(430px,calc(100% - 32px));background:#fff;border-radius:12px;padding:38px;box-shadow:0 28px 70px #0007}.login-card .brand{color:var(--ink);padding:0 0 30px}.login-card h1{font:700 40px 'Barlow Condensed';margin:0}.login-card>p{color:var(--muted);font-size:13px;margin:5px 0 26px}.login-card form p{display:grid;gap:7px;font-size:12px}.login-card input{padding:12px;border:1px solid var(--line);border-radius:5px}.login-card button{width:100%;padding:12px;border:0;border-radius:5px;font-weight:600}.error{color:var(--red);font-size:12px;margin:10px 0}.leaflet-popup-content{font-family:Inter}.marker-label{background:var(--navy);color:#fff;border:2px solid #fff;border-radius:4px;padding:6px 9px;font:700 12px Inter;box-shadow:0 2px 8px #0004}.marker-label.warning{background:var(--amber)}.marker-label.offline{background:var(--red)}
@media(max-width:1050px){.dashboard-grid{grid-template-columns:1fr}.status-rail{grid-column:1;grid-row:auto;display:grid;grid-template-columns:repeat(2,1fr)}.status-rail h2{grid-column:1/-1}.activity{grid-column:1}.device-row{grid-template-columns:2fr 1fr 1fr}.device-row>div:nth-child(n+4){display:none}}
@media(max-width:760px){body{padding-left:0;padding-top:58px}.sidebar{transform:translateX(-100%);transition:.2s}.sidebar.open{transform:none}.topbar{left:0;height:58px;padding:0 16px}.menu-button{display:block;border:0;background:none;font-size:21px;margin-right:12px}.topbar strong{font-size:13px}.topbar .user{font-size:12px}.user form{display:none}main{padding:18px 14px}.page-head{align-items:flex-start;flex-wrap:wrap;gap:12px}.page-head .filter{width:100%}.page-head .filter select{width:100%}.page-head h1{font-size:34px}.updated{display:none}.metrics{grid-template-columns:repeat(3,1fr);gap:7px}.metrics article{height:68px;display:grid;place-content:center;text-align:center;gap:0}.metrics b{font-size:26px}.metrics span{font-size:10px}.map{height:380px}.status-rail{grid-template-columns:1fr}.status-rail h2{grid-column:1}.device-row{grid-template-columns:1.5fr 1fr;padding:13px}.device-row>div:nth-child(n+3){display:none}.page-head .button{font-size:0}.page-head .button:after{content:"+ Neu";font-size:12px}th,td{padding:10px}.full-map .map{height:calc(100vh - 150px);min-height:420px}}
.status-badge{display:inline-flex;align-items:center;padding:4px 8px;border-radius:999px;font-size:11px;font-weight:600;background:#edf1f5;color:#4d5c70}.status-badge.ok{background:#e6f7ed;color:#087a36}.status-badge.fail{background:#fdebed;color:#b51d2c}.status-badge.sending{background:#e5f5fc;color:#0078ad}.status-badge.muted{background:#f0f2f5;color:#67768a}.notice{margin:-6px 0 16px;padding:12px 14px;border:1px solid #b8dff1;border-left:4px solid var(--cyan);border-radius:6px;background:#f2fbff;color:#314b61;font-size:12px}.message-cell{white-space:normal;min-width:300px;max-width:580px}.message-cell small,.table-page td small{display:block;color:var(--muted);margin-top:5px}.message-cell .error-text{color:var(--red)}
.map-empty-state{margin:0;padding:12px 16px;border-top:1px solid var(--line);color:var(--muted);font-size:12px}
.gateway-marker{display:grid;place-items:center;width:38px;height:38px;border:3px solid #fff;border-radius:50%;background:var(--navy);color:#fff;box-shadow:0 3px 12px #0005;font:700 12px Inter}.map-popup-title{display:block;margin-bottom:6px}.mesh-control{width:min(265px,calc(100vw - 76px));border:1px solid #b8c6d4;border-radius:8px;background:#fffffff2;box-shadow:0 2px 14px #001a3340;color:var(--ink);font:12px/1.35 Inter;backdrop-filter:blur(5px)}.mesh-control-toggle{display:block;width:100%;border:0;border-bottom:1px solid var(--line);border-radius:8px 8px 0 0;padding:9px 11px;background:#fff;color:var(--navy);text-align:left;font:700 12px Inter;cursor:pointer}.mesh-control-toggle:before{content:"";display:inline-block;width:8px;height:8px;margin-right:7px;border-radius:50%;background:var(--cyan)}.mesh-control-toggle:focus-visible{outline:3px solid #84d5f5;outline-offset:2px}.mesh-control.disabled .mesh-control-toggle:before{background:#98a5b3}.mesh-control.disabled .mesh-control-body{opacity:.55}.mesh-control-body{padding:8px 11px}.mesh-control-body p{margin:0 0 5px}.mesh-control-body p:last-child{margin-bottom:0}.mesh-legend-row:before{content:"";display:inline-block;width:24px;margin-right:7px;vertical-align:middle;border-top:2px dashed #007db8}.mesh-legend-row.relayed:before{border-top-color:#7847b8;border-top-style:dotted}.mesh-legend-meta{color:#4f6074;font-size:11px}.mesh-legend-caveat{color:#65758a;font-size:10px}
@media(max-width:760px){.mesh-control{width:min(205px,calc(100vw - 70px));font-size:11px}.mesh-control-body{padding:7px 9px}.mesh-legend-meta{font-size:10px}.mesh-legend-caveat{font-size:9px}}
.mesh-legend-row.fallback:before{border-top-color:var(--amber);border-top-style:dashed}

.status-item{display:block;width:100%;border:0;background:#fff;color:var(--ink);text-align:left;font:inherit;cursor:pointer}.status-item:hover{background:#f5fbff}.status-item:focus-visible{position:relative;outline:3px solid #84d5f5;outline-offset:-3px}.status-item:disabled{cursor:default;opacity:.72}.status-item:disabled:hover{background:#fff}.status-item small{padding-bottom:4px}.status-position-time{display:block;margin:0 0 10px 18px;color:#52647a;font-size:11px}.runtime-estimate{display:block;margin-top:10px;padding-top:9px;border-top:1px solid #edf1f5;color:#17476b;font-size:11px;line-height:1.35}

/* Leaflet must keep these layout rules locally. The external stylesheet can be
   blocked by a restrictive network without affecting the map itself. */
.map{position:relative;z-index:0}
.leaflet-container{position:relative;overflow:hidden;outline:0;background:#d9e8e4;-webkit-tap-highlight-color:transparent}.leaflet-pane,.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile-container,.leaflet-pane>svg,.leaflet-pane>canvas,.leaflet-zoom-box,.leaflet-image-layer,.leaflet-layer{position:absolute;left:0;top:0}.leaflet-pane{z-index:400}.leaflet-tile-pane{z-index:200}.leaflet-overlay-pane{z-index:400}.leaflet-shadow-pane{z-index:500}.leaflet-marker-pane{z-index:600}.leaflet-tooltip-pane{z-index:650}.leaflet-popup-pane{z-index:700}.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow{-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.leaflet-tile{filter:inherit;visibility:hidden}.leaflet-tile-loaded{visibility:inherit}.leaflet-container .leaflet-marker-pane img,.leaflet-container .leaflet-shadow-pane img,.leaflet-container .leaflet-tile-pane img,.leaflet-container img.leaflet-image-layer,.leaflet-container .leaflet-tile{max-width:none!important;max-height:none!important;width:auto;padding:0}.leaflet-zoom-animated{transform-origin:0 0}.leaflet-control{position:relative;z-index:800;pointer-events:auto}.leaflet-top,.leaflet-bottom{position:absolute;z-index:1000;pointer-events:none}.leaflet-top{top:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}.leaflet-right{right:0}.leaflet-control{float:left;clear:both}.leaflet-right .leaflet-control{float:right}.leaflet-top .leaflet-control{margin-top:10px}.leaflet-bottom .leaflet-control{margin-bottom:10px}.leaflet-left .leaflet-control{margin-left:10px}.leaflet-right .leaflet-control{margin-right:10px}.leaflet-bar{box-shadow:0 1px 5px rgba(0,0,0,.35);border-radius:4px}.leaflet-bar a{display:block;width:26px;height:26px;line-height:26px;text-align:center;background:#fff;color:#111;text-decoration:none;font:700 18px/26px Arial}.leaflet-bar a:first-child{border-radius:4px 4px 0 0}.leaflet-bar a:last-child{border-radius:0 0 4px 4px;border-top:1px solid #ccc}.leaflet-control-attribution{padding:0 5px;background:rgba(255,255,255,.8);font-size:11px}

.coverage-control-section+.coverage-control-section{border-top:1px solid #b8c6d4}.coverage-control-section .mesh-control-toggle{border-radius:0}.coverage-control-section:first-child .mesh-control-toggle{border-radius:8px 8px 0 0}.coverage-control-section:last-child .mesh-control-body{border-radius:0 0 8px 8px}.coverage-control-section.disabled .mesh-control-toggle:before{background:#98a5b3}.coverage-control-section.disabled .mesh-control-body{opacity:.58}.coverage-control-section.estimated .mesh-control-toggle:before{background:#9d4edd}.coverage-control-section.estimated.disabled .mesh-control-toggle:before{background:#98a5b3}.mesh-control-toggle:disabled{cursor:not-allowed}.mesh-legend-row.estimate:before{border-top-color:#9d4edd;border-top-style:solid;border-top-width:5px}.mesh-legend-source{display:inline-block;margin-top:3px;color:#005e91;font-size:10px}.coverage-planner-panel{margin-bottom:16px}.coverage-planner-grid{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(320px,.8fr);gap:24px;padding:20px}.coverage-planner-grid p{margin:0 0 12px;color:#42546a;font-size:13px;line-height:1.5}.coverage-kicker{color:#7040a0!important;font-size:11px!important;font-weight:700;text-transform:uppercase;letter-spacing:.08em}.coverage-profile{display:grid;gap:7px;margin:16px 0}.coverage-profile div{display:grid;grid-template-columns:90px 1fr;gap:10px;font-size:12px}.coverage-profile dt{color:var(--muted);font-weight:600}.coverage-profile dd{margin:0}.coverage-import-state{margin-top:18px!important;padding:11px 13px;border-left:4px solid var(--green);border-radius:5px;background:#edf9f2;color:#17643a!important}.coverage-import-state.stale{border-left-color:var(--amber);background:#fff7e8;color:#805000!important}.coverage-import-state.empty-state{border-left-color:#91a0af;background:#f3f5f7;color:#556578!important}.coverage-import-form{padding:18px;border:1px solid var(--line);border-radius:7px;background:#f9fbfd}.coverage-import-form h3{margin:0 0 10px;font:600 17px 'Barlow Condensed',sans-serif}.coverage-import-form ol{margin:0 0 16px;padding-left:20px;color:#52647a;font-size:11px;line-height:1.55}.coverage-import-form p{display:grid;gap:7px;margin-bottom:14px}.coverage-import-form label{font-size:12px;font-weight:600}.coverage-import-form input[type=file]{width:100%;padding:9px;border:1px solid #cbd5e0;border-radius:5px;background:#fff;font-size:11px}.coverage-import-form .helptext{color:var(--muted);font-size:10px}.button:disabled{cursor:not-allowed;opacity:.5}.coverage-disclaimer{margin:0;padding:12px 20px;border-top:1px solid var(--line);background:#fbfcfd;color:#66758b;font-size:10px;line-height:1.45}
@media(max-width:850px){.coverage-planner-grid{grid-template-columns:1fr}.coverage-planner-panel .panel-title{align-items:flex-start;gap:8px;flex-direction:column}.coverage-planner-panel .panel-title a{font-size:11px}}
@media(max-width:760px){.mesh-control{width:min(245px,calc(100vw - 70px))}.mesh-control-toggle{min-height:44px;padding:11px}.mesh-legend-source{font-size:9px}.coverage-planner-grid{padding:15px}.coverage-profile div{grid-template-columns:1fr;gap:2px}.coverage-import-form{padding:14px}}
