.dispatch-view main{max-width:none}.dispatch-tools{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin:10px 0}.dispatch-tools label{display:flex;flex-direction:row;align-items:center;gap:8px;margin:0}.dispatch-tools select{width:auto;max-width:250px}.dispatch-board{position:relative;height:calc(100vh - 240px);height:calc(100dvh - 240px);min-height:460px;overflow:hidden;border-radius:12px;background:#bcc7c8;isolation:isolate}.dispatch-map{position:absolute;inset:0;z-index:0}.dispatch-panel{position:absolute;z-index:500;background:rgb(var(--g3) / 0.92);color:rgb(var(--g19));border:1px solid rgb(var(--g7));border-radius:10px;width:280px;box-shadow:0 4px 16px rgb(var(--g1) / 0.33);max-width:calc(100% - 16px)}.radio-window{left:14px;top:14px}.detail-window{right:14px;bottom:48px}.panel-handle{display:flex;align-items:center;gap:10px;padding:6px 12px;border-bottom:1px solid rgb(var(--g6));cursor:move;touch-action:none;user-select:none}.panel-grip{color:rgb(var(--g14));font-size:22px}.panel-collapse{margin-left:auto;background:none;color:rgb(var(--g19));font-size:22px;padding:0 10px;min-height:40px}.panel-body{padding:10px;max-height:310px;overflow:auto;overscroll-behavior:contain}.panel-body h3{font-size:17px;margin:0 0 10px}.panel-body dl{display:grid;grid-template-columns:95px minmax(0,1fr);gap:8px;font-size:13px;margin:10px 0}.panel-body dd{margin:0;overflow-wrap:anywhere}.panel-body dt{color:rgb(var(--g15))}.panel-body p{font-size:12px}.dispatch-radio{width:100%;display:grid;grid-template-columns:20px minmax(0,1fr);gap:5px;text-align:left;background:transparent;color:rgb(var(--g19));border-bottom:1px solid rgb(var(--g6));border-radius:0;font-weight:500;padding:10px 6px;min-height:54px}.dispatch-radio small{grid-column:2;font-size:11px;margin:0;color:rgb(var(--g15))}.dispatch-radio.selected{background:rgb(var(--g5))}.dot{font-size:20px;align-self:center;grid-row:1/3}.online{color:#38d68d}.tx{color:var(--tx)}.stale{color:rgb(var(--g14))}.dispatch-count{margin:0 0 5px}.dispatch-legend{position:absolute;left:12px;bottom:12px;z-index:450;display:flex;gap:12px;background:rgb(var(--g3) / 0.94);padding:8px 12px;border-radius:8px;font-size:11px}.map-radio{font-size:26px;text-shadow:0 1px 2px rgb(var(--g3));border-radius:50%;line-height:24px;background:rgb(var(--g3));border:2px solid white;text-align:center;box-sizing:border-box}.map-radio.online{color:#25c17c}.map-radio.tx{color:var(--tx)}.map-radio.stale{color:rgb(var(--g13))}.radio-label{background:rgb(var(--g3) / 0.91);color:rgb(var(--g19));border:0;font-size:12px;padding:4px 7px;box-shadow:none}.radio-label:before{display:none}.leaflet-control-attribution{color:#253943}.leaflet-control-attribution a{color:#244a64}.leaflet-container{font-family:system-ui,sans-serif}.dispatch-view #message{font-size:13px;min-height:0}.dispatch-view #content{min-width:0}
@media(max-width:740px){.dispatch-tools{gap:6px}.dispatch-tools strong{width:100%}.dispatch-tools button{font-size:12px;padding:8px}.dispatch-tools label{font-size:12px}.dispatch-board{height:calc(100vh - 300px);height:calc(100dvh - 300px);min-height:480px}.radio-window{left:8px;top:auto;bottom:42px;width:calc(100% - 16px)}.radio-window .panel-body{max-height:150px}.detail-window{right:8px;top:8px;bottom:auto;width:245px}.detail-window .panel-body{max-height:220px}.dispatch-legend{left:8px;bottom:7px;font-size:10px;gap:8px;padding:6px}.panel-body dl{font-size:12px}.panel-handle{min-height:44px}}

/* d3 telemetry is independent of the GPS sampling rate. */
.telemetry-icons{display:inline-flex;align-items:center;gap:5px;white-space:nowrap;font-size:11px;color:#b8e9d0}.telemetry-icons.old{color:rgb(var(--g13))}.network-type{font-weight:650;margin-right:3px}.signal-bars{display:inline-flex;gap:2px;align-items:flex-end;height:18px}.signal-bars i{display:block;width:3px;background:currentColor;border-radius:1px}.battery-icon{display:inline-flex;padding:2px;width:25px;height:13px;border:1px solid currentColor;border-radius:2px;margin-left:5px;position:relative}.battery-icon:after{content:'';position:absolute;right:-3px;top:3px;height:5px;width:2px;background:currentColor}.battery-icon i{display:block;background:currentColor;height:100%}.battery-icon.low{color:#ff8989}.dispatch-radio>.telemetry-icons{grid-column:2}.radio-tag{position:relative;display:inline-block}.telemetry-bubble{position:absolute;left:-10px;bottom:calc(100% + 10px);padding:9px 12px;background:rgb(var(--g3) / 0.96);border:1px solid rgb(var(--g9));border-radius:8px;box-shadow:0 4px 12px rgb(var(--g1) / 0.40);color:rgb(var(--g19));opacity:0;visibility:hidden;transform:translateY(5px);transition:opacity .18s ease,transform .18s ease,visibility .18s;pointer-events:none;min-width:180px}.telemetry-bubble small{display:block;margin:5px 0 0;font-size:10px;color:rgb(var(--g14))}.radio-label:hover .telemetry-bubble,.radio-label.telemetry-open .telemetry-bubble,.radio-tag.selected .telemetry-bubble{opacity:1;visibility:visible;transform:translateY(0)}.event-window{left:14px;bottom:48px;width:350px}.dispatch-event{display:grid;grid-template-columns:62px minmax(0,1fr);gap:3px 6px;border-bottom:1px solid rgb(var(--g5));padding:6px 0;margin:0}.dispatch-event time{font-size:11px;color:rgb(var(--g14))}.dispatch-event strong{font-size:12px;overflow-wrap:anywhere}.dispatch-event span{grid-column:2;font-size:11px}.event-window .panel-body{max-height:170px}@media(max-width:740px){.event-window{left:8px;top:8px;bottom:auto;width:calc(100% - 16px)}.detail-window{top:68px}.event-window .panel-body{max-height:140px}}@media(prefers-reduced-motion:reduce){.telemetry-bubble{transition:none}}
/* f5: resizable windows on PC; on phones a full-screen map with bottom tabs and pull-up sheets. */
.dispatch-panel{display:flex;flex-direction:column}.panel-resize{position:absolute;right:2px;bottom:0;font-size:14px;line-height:14px;color:rgb(var(--g13));cursor:nwse-resize;touch-action:none;user-select:none;padding:4px}.panel-body{resize:none}.traffic-window{right:14px;top:14px}.traffic-row{display:grid;gap:2px;margin:0;padding:6px 0;border-bottom:1px solid rgb(var(--g5))}.traffic-row span{font-size:12px}.traffic-row small{font-size:11px;color:rgb(var(--g14));margin:0}@media(min-width:741px){.radio-window{left:56px}}
.dispatch-tabs,.dispatch-mobilebar{display:none}
@media(max-width:740px){
body.dispatch-view:not(.dispatch-windowed) .dispatch-board{position:fixed;inset:0;height:auto;min-height:0;border-radius:0;z-index:1000}
.dispatch-mobile .dispatch-map{bottom:56px}
.dispatch-mobile .dispatch-tabs{margin:0;display:grid;grid-template-columns:repeat(6,1fr);position:absolute;left:0;right:0;bottom:0;height:56px;z-index:700;background:rgb(var(--g3));border-top:1px solid rgb(var(--g6));padding-bottom:env(safe-area-inset-bottom)}
.dispatch-tabs button{background:none;color:rgb(var(--g17));border-radius:0;font-size:13px;padding:4px;min-height:56px}.dispatch-tabs button.active{color:var(--on-accent);background:var(--accent)}
.dispatch-mobile .dispatch-mobilebar{display:flex;gap:6px;position:absolute;right:8px;top:8px;z-index:650}.dispatch-mobilebar button{min-height:40px;padding:6px 10px;font-size:13px;box-shadow:0 2px 8px rgb(var(--g1) / 0.33)}
body.dispatch-windowed .dispatch-mobile .dispatch-mobilebar{top:8px}
.dispatch-mobile .dispatch-panel{left:0!important;right:0!important;top:auto!important;bottom:56px!important;width:auto!important;max-width:none;border-radius:14px 14px 0 0;max-height:46%;z-index:690}
.dispatch-mobile.sheet-full .dispatch-panel{max-height:calc(100% - 120px)}
.dispatch-mobile .panel-body{max-height:none!important;height:auto!important;flex:1 1 auto;min-height:0}
.dispatch-mobile .panel-handle{cursor:pointer;justify-content:flex-start}.dispatch-mobile .panel-grip{font-size:0;width:36px;height:4px;border-radius:2px;background:rgb(var(--g11));margin-right:4px}
.dispatch-mobile .panel-collapse{font-size:0}.dispatch-mobile .panel-collapse:after{content:'✕';font-size:18px}
.dispatch-mobile .panel-resize{display:none}
.dispatch-mobile .dispatch-legend{bottom:64px;left:8px}.dispatch-mobile.sheet-open .dispatch-legend{display:none}
.dispatch-mobile .leaflet-top.leaflet-left{top:0}
}
/* f6: compact dispatcher on PC, full-screen map, ⋯ menu, list search, offline vs stale markers, TX pulse. */
@media(min-width:741px){
body.dispatch-view header{padding:8px 22px}body.dispatch-view header strong{font-size:18px}
body.dispatch-view main{padding:8px 20px}body.dispatch-view nav{margin:4px 0 6px}body.dispatch-view nav button{padding:8px 12px;min-height:36px}
body.dispatch-view .dispatch-tools{margin:4px 0 8px}body.dispatch-view .dispatch-tools button,body.dispatch-view .dispatch-tools select{min-height:36px;padding:6px 12px}
body.dispatch-view .dispatch-board{height:calc(100vh - 150px);height:calc(100dvh - 150px)}
body.dispatch-view>main>small{display:none}
body.dispatch-max .dispatch-board{position:fixed;inset:0;height:auto!important;min-height:0;border-radius:0;z-index:1000}
body.dispatch-max .dispatch-mobilebar{display:flex;position:absolute;right:12px;top:12px;z-index:650}
body.dispatch-max .dispatch-mobilebar button:not(.max-exit){display:none}
body.dispatch-max .traffic-window{top:60px}
}
.dispatch-mobilebar .max-exit{display:none}body.dispatch-max .dispatch-mobilebar .max-exit{display:inline-block}
@media(max-width:740px){.dispatch-tools .max-toggle{display:none}}
.dispatch-more{position:relative}.dispatch-more summary{list-style:none;cursor:pointer;background:rgb(var(--g5));color:rgb(var(--g19));border-radius:8px;padding:6px 14px;min-height:36px;display:flex;align-items:center;font-weight:700}.dispatch-more summary::-webkit-details-marker{display:none}
.dispatch-more-menu{position:absolute;right:0;top:calc(100% + 6px);z-index:1100;display:flex;flex-direction:column;gap:6px;background:rgb(var(--g3));border:1px solid rgb(var(--g7));border-radius:10px;padding:8px;min-width:230px;box-shadow:0 6px 18px rgb(var(--g1) / 0.53)}
.dispatch-search{width:100%;margin:0 0 8px;min-height:38px;padding:8px 10px;font-size:14px}
.dot.offline{color:rgb(var(--g14))}.dot.stale{color:#e0b85a;font-weight:800;font-size:18px;text-align:center}.offline{color:rgb(var(--g14))}
.map-radio.offline{color:transparent;background:rgb(var(--g3) / 0.40);border:2px solid rgb(var(--g13))}
.map-radio.stale{color:#e0b85a;font-size:16px;font-weight:900;line-height:20px}
@keyframes pmr-pulse{0%{box-shadow:0 0 0 0 #3fc8f0cc}70%{box-shadow:0 0 0 14px #3fc8f000}100%{box-shadow:0 0 0 0 #3fc8f000}}
.map-radio.tx{animation:pmr-pulse 1.2s infinite}.dispatch-radio .dot.tx{animation:pmr-blink 1s steps(2) infinite}@keyframes pmr-blink{50%{opacity:.35}}
@media(prefers-reduced-motion:reduce){.map-radio.tx,.dispatch-radio .dot.tx{animation:none}}
.leaflet-control-layers{background:rgb(var(--g3) / 0.92);color:rgb(var(--g19));border:1px solid rgb(var(--g7))!important}.leaflet-control-layers-expanded{padding:8px 10px}
/* f6.1: the radio search stays on top while the list scrolls. */
.radio-window .panel-body .dispatch-search{position:sticky;top:-10px;z-index:2;box-shadow:0 -10px 0 rgb(var(--g3))}
/* f8: track controls in the radio details window. */
.track-tools{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:8px 0;padding-top:8px;border-top:1px solid rgb(var(--g6))}.track-tools strong{width:100%;font-size:13px}.track-tools select{width:auto;min-height:36px;padding:4px 8px;font-size:13px}.track-tools button{min-height:36px;padding:6px 10px;font-size:13px}.track-tools p{margin:0}
/* f9: emergency alarm banner and marker. */
.alarm-bar{position:absolute;left:50%;transform:translateX(-50%);top:10px;z-index:800;display:flex;flex-direction:column;gap:6px;width:min(720px,calc(100% - 24px))}
.alarm-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;padding:10px 14px;border-radius:10px;background:#7d1620f2;color:#fff;border:2px solid #ff5d5d;box-shadow:0 6px 18px #00000066}
.alarm-row.active{animation:pmr-alarm 1s infinite}.alarm-row.acknowledged{background:#6b4a10f2;border-color:#ffb645}.alarm-row.cancelled{background:rgb(var(--g5) / 0.95);border-color:rgb(var(--g13))}
.alarm-row strong{font-size:16px}.alarm-row span{font-size:13px}.alarm-actions{margin-left:auto;display:flex;gap:6px}.alarm-actions button{min-height:38px;padding:6px 12px}
button.alarm-ack{background:#fff;color:#7d1620}
@keyframes pmr-alarm{50%{background:#b3202ef2}}
.dispatch-radio.alarm{background:#7d1620;border-left:4px solid #ff5d5d}
.alarm-label{background:#b3202e;color:#fff;font-weight:700;border:0}
@media(max-width:740px){.dispatch-mobile .alarm-bar{top:56px}}
@media(prefers-reduced-motion:reduce){.alarm-row.active{animation:none}}

/* f13: geofences */
.geo-bar{position:absolute;left:50%;transform:translateX(-50%);bottom:38px;z-index:790;display:flex;flex-direction:column;gap:6px;width:min(680px,calc(100% - 24px))}
.geo-row{display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px;padding:8px 12px;border-radius:10px;background:#123a5cf2;color:#fff;border:2px solid #4f9cf0;box-shadow:0 6px 18px #00000055}
.geo-row.exit,.geo-row.outside{background:#5c3a12f2;border-color:#f0a020}.geo-row.more{background:rgb(var(--g4) / 0.95);border-color:rgb(var(--g9))}
.geo-row strong{font-size:15px}.geo-row span{font-size:13px}.geo-actions{margin-left:auto;display:flex;gap:6px}.geo-row button{min-height:36px;padding:6px 12px}
.geo-fence{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:center;padding:8px 0;border-bottom:1px solid rgb(var(--g6))}.geo-fence strong{font-size:15px}.geo-fence small{width:100%;color:rgb(var(--g15))}.geo-fence .geo-where{color:rgb(var(--g19))}
.geo-state{font-size:12px;padding:2px 8px;border-radius:999px;background:rgb(var(--g5))}.geo-state.on{background:#1f6e46;color:#fff}.geo-state.idle{background:#5a4a1a;color:#ffe6a8}
.geo-buttons{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}.geo-buttons button,.geo-buttons select{min-height:36px;padding:6px 10px;font-size:13px;width:auto}
.geo-field{display:block;margin:6px 0;font-size:13px}.geo-field input,.geo-field select{display:block;width:100%;margin-top:3px}
.geo-check{display:inline-flex;align-items:center;gap:6px;margin:3px 10px 3px 0;font-size:13px}.geo-check input{width:auto;min-height:0}
.geo-radios,.geo-schedule{border:1px solid rgb(var(--g6));border-radius:8px;margin:8px 0;padding:6px 10px}.geo-radios legend,.geo-schedule legend{font-size:13px;padding:0 4px}
.geo-days{display:flex;flex-wrap:wrap}.geo-window{display:flex;gap:8px;align-items:flex-end}.geo-window .geo-field{flex:1}.geo-window button{min-height:36px;margin-bottom:6px}
.geo-points{margin:8px 0}.geo-points strong{display:block;font-size:13px}.geo-points small{display:block}
.geo-log-row{display:grid;grid-template-columns:auto 1fr;gap:0 8px;margin:4px 0;font-size:13px}.geo-log-row span{grid-column:2;color:rgb(var(--g15))}.geo-log-row time{color:rgb(var(--g13))}
.geo-vertex{background:#f0a020;color:var(--on-accent);border:2px solid #fff;border-radius:50%;font-size:10px;line-height:14px;text-align:center;font-weight:700}
button.danger{border-color:#ca6573;color:#ffb3bd}
@media(max-width:740px){.dispatch-mobile .geo-bar{bottom:118px}}

/* f14: dispatcher voice */
.voice-top{display:flex;align-items:center;gap:10px;margin:4px 0 8px}.voice-top button{min-height:38px;padding:6px 12px}.voice-state{font-size:13px;color:rgb(var(--g13))}.voice-state.on{color:#25c17c}
.voice-help{font-size:12px;border:1px dashed rgb(var(--g9));border-radius:8px;padding:6px 8px}
.voice-row{display:grid;grid-template-columns:40px minmax(0,1fr) 72px 70px;gap:6px;align-items:center;padding:5px 4px;border-bottom:1px solid rgb(var(--g5))}
.voice-row.selected{background:rgb(var(--g3));outline:1px solid rgb(var(--g7))}.voice-row.rx{background:#13324a}.voice-row.tx{background:#5a1820}
.voice-listen{min-height:34px;padding:0;font-size:18px}.voice-listen.on{background:#1f6e46;color:#fff}
.voice-name{background:none;color:rgb(var(--g19));text-align:left;padding:2px 4px;min-height:34px;display:flex;flex-direction:column;min-width:0}.voice-ch{font-weight:650;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.voice-speaker{font-size:12px;color:rgb(var(--g13));white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:400}.voice-row.rx .voice-speaker{color:var(--accent-text)}.voice-row.tx .voice-speaker{color:#fff;font-weight:700}
.voice-vol{width:72px;min-height:0;padding:0}
.voice-ptt{min-height:40px;padding:6px 8px;background:#b3202e;color:#fff;font-weight:800;touch-action:none;user-select:none}.voice-row.tx .voice-ptt{background:#ff3b3b}
.geo-window{right:14px;top:70px}.voice-window{left:350px;top:14px;width:380px}
@media(max-width:740px){.voice-window,.geo-window{width:auto}}
/* f16: docked layout (fixed columns), merged fleet tree, last talkers, full-screen SOS, pop-out windows. */
.talk-window{right:14px;top:300px;width:330px}
@media(min-width:741px){
.dispatch-board.docked{display:grid;grid-template-columns:minmax(300px,24%) minmax(0,1fr) minmax(0,1fr) minmax(280px,22%);grid-template-rows:minmax(0,1.25fr) minmax(0,1fr) minmax(150px,26%);gap:6px;padding:6px;background:rgb(var(--g2));border:1px solid rgb(var(--g5))}
.docked .dispatch-map{position:relative;inset:auto;grid-column:2/4;grid-row:1/3;border-radius:8px;overflow:hidden}
.docked .dispatch-panel{position:relative!important;left:auto!important;top:auto!important;right:auto!important;bottom:auto!important;width:auto!important;max-width:none;min-height:0;z-index:auto;box-shadow:none;background:rgb(var(--g3));overflow:hidden}
.docked .dispatch-panel .panel-body{flex:1;min-height:0;max-height:none!important;height:auto!important;overflow:auto}
.docked .panel-handle{cursor:default}.docked .panel-grip,.docked .panel-resize,.docked .panel-collapse{display:none}
.docked .voice-window{grid-column:1;grid-row:1/4}.docked .detail-window{grid-column:4;grid-row:1}.docked .talk-window{grid-column:4;grid-row:2}
.docked .event-window{grid-column:2;grid-row:3}.docked .geo-window{grid-column:3;grid-row:3}.docked .radio-window{grid-column:4;grid-row:3}.docked .traffic-window{display:none}
.docked .dispatch-legend{left:calc(24% + 18px);bottom:calc(26% + 18px)}
}
.voice-window .panel-body{max-height:none}
.tree-channel{border-bottom:1px solid rgb(var(--g5))}.voice-row{grid-template-columns:30px 40px minmax(0,1fr) 70px 64px}.voice-row .tree-caret{min-height:36px;padding:0;background:transparent;color:rgb(var(--g14))}
.tree-radios{display:flex;flex-direction:column;padding:0 0 4px 34px}.tree-radio{display:grid;grid-template-columns:16px minmax(0,1fr) auto;gap:6px;align-items:center;min-height:32px;padding:3px 8px;border-radius:6px;background:transparent;color:rgb(var(--g18));font-weight:500;text-align:left;font-size:13px}.tree-radio:hover{background:rgb(var(--g4))}.tree-radio.selected{background:rgb(var(--g5));outline:1px solid var(--accent)}
.tree-rname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tree-note{font-size:11px;color:rgb(var(--g13));white-space:nowrap}
.k-on .tree-dot{color:var(--ok)}.k-off .tree-dot,.k-off{color:rgb(var(--g12))}.k-tx .tree-dot,.k-tx .tree-note{color:var(--tx);font-weight:700}.k-sos .tree-dot,.k-sos .tree-note{color:#ff8a96;font-weight:700}.k-lone .tree-dot,.k-lone .tree-note{color:var(--lone)}.k-geo .tree-dot,.k-geo .tree-note{color:#9fc6ff}
.tree-group{margin-top:6px}.tree-head{width:100%;display:flex;gap:8px;align-items:center;min-height:36px;padding:4px 8px;background:rgb(var(--g4));color:rgb(var(--g17));text-align:left;font-weight:600}.tree-count{margin-left:auto;color:rgb(var(--g13));font-weight:500}
.ptt-key{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:10px;font-size:12px;color:rgb(var(--g13))}.ptt-key button{min-height:32px;padding:4px 10px;font-size:12px}
.voice-row.rx{background:rgb(63 200 240 / .12)}.voice-row.rx .voice-speaker{color:var(--tx);font-weight:700}
.talk-row{width:100%;display:grid;grid-template-columns:72px minmax(0,1fr) auto;grid-template-rows:auto auto;gap:0 8px;align-items:center;text-align:left;padding:6px 8px;border-radius:0;border-bottom:1px solid rgb(var(--g5));background:transparent;color:rgb(var(--g18));font-weight:500;min-height:48px}
.talk-row:disabled{opacity:1;cursor:default}.talk-time{grid-row:1/3;font-size:12px;color:rgb(var(--g13));font-variant-numeric:tabular-nums}.talk-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.talk-dur{font-size:12px;color:rgb(var(--g13));font-variant-numeric:tabular-nums}.talk-ch{grid-column:2/4;font-size:12px;color:rgb(var(--g13))}
.talk-row.live{background:rgb(63 200 240 / .16);box-shadow:inset 4px 0 0 var(--tx)}.talk-row.live .talk-time,.talk-row.live .talk-dur{color:var(--tx);font-weight:800}.talk-row.disp .talk-name{color:var(--accent-text)}.talk-row.selected{outline:1px solid var(--accent)}
.talk-row:first-child:not(.live){box-shadow:inset 4px 0 0 var(--accent)}
.sos-overlay{position:fixed;inset:0;z-index:5000;display:grid;place-items:center;padding:16px;background:rgb(40 6 10 / .82);border:12px solid #ff3b3b;animation:sos-flash 1.2s ease-in-out infinite alternate}
@keyframes sos-flash{from{border-color:#ff3b3b}to{border-color:#7d1620}}@media(prefers-reduced-motion:reduce){.sos-overlay{animation:none}}
.sos-card{width:min(900px,100%);background:#3a1419;border:3px solid #ff5d5d;border-radius:18px;padding:28px 32px;color:#fff;box-shadow:0 30px 80px #000a}.sos-card.lone{border-color:#ffb645;background:#33280e}
.sos-kicker{letter-spacing:.2em;color:#ffb3bd;font-weight:700}.sos-card.lone .sos-kicker{color:#ffe6a8}.sos-name{font-size:clamp(36px,6vw,64px);margin:8px 0}.sos-line{font-size:20px;margin:4px 0;color:#ffd4da}
.sos-actions{display:flex;gap:12px;flex-wrap:wrap;margin:20px 0 6px}.sos-actions button{font-size:20px;padding:14px 24px}.sos-actions .sos-ack{background:#fff;color:#7d1620;font-weight:800}.sos-note{font-size:14px;color:#ffb3bd}
body.dispatch-popout>header,body.dispatch-popout #test-banner,body.dispatch-popout nav,body.dispatch-popout main>small{display:none}body.dispatch-popout main{padding:6px}body.dispatch-popout .dispatch-board{height:calc(100vh - 70px);height:calc(100dvh - 70px)}
@media(min-width:741px){.dispatch-board{height:calc(100vh - 225px);height:calc(100dvh - 225px)}}
.dispatch-panel.geo-window{display:flex;flex-direction:column;align-items:stretch;gap:0}
@media(min-width:741px){body.dispatch-view .dispatch-board{height:calc(100vh - 222px);height:calc(100dvh - 222px)}body.dispatch-popout .dispatch-board{height:calc(100vh - 70px);height:calc(100dvh - 70px)}}
/* f17: splitters, quick row actions, clearer listen toggle, voice status, big PTT, tablet page. */
@media(min-width:741px){
.dispatch-board.docked{grid-template-columns:var(--dock-l,24%) minmax(0,1fr) minmax(0,1fr) var(--dock-r,22%);grid-template-rows:minmax(0,1.25fr) minmax(0,1fr) var(--dock-b,26%)}
.docked .voice-window{grid-row:1/3}.docked .ptt-window{grid-column:1;grid-row:3}
.dock-split{display:none}.docked .dock-split{display:block;position:absolute;z-index:700;touch-action:none;background:transparent}
.docked .dock-split:hover,.docked .dock-split:active{background:rgb(255 197 46 / .45)}
.docked .dock-split-l{top:6px;bottom:6px;width:8px;left:calc(var(--dock-l) + 3px);cursor:col-resize}
.docked .dock-split-r{top:6px;bottom:6px;width:8px;right:calc(var(--dock-r) + 3px);cursor:col-resize}
.docked .dock-split-b{height:8px;left:calc(var(--dock-l) + 9px);right:calc(var(--dock-r) + 9px);bottom:calc(var(--dock-b) + 3px);cursor:row-resize}
.panel-resize{font-size:18px;line-height:18px;padding:4px 6px;color:var(--accent-text)}
}
.radio-item{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;border-bottom:1px solid rgb(var(--g5))}.radio-item .dispatch-radio{border-bottom:0}
.radio-actions{display:flex;gap:4px;padding-right:4px}.icon-btn{min-height:34px;min-width:38px;padding:4px 8px;font-size:14px}.icon-btn.lone-toggle.on{background:#33280e;color:#ffe6a8;border:1px solid var(--lone)}
.voice-listen{min-height:36px;padding:4px 6px;font-size:12px;white-space:nowrap}.voice-listen.on{background:#1f6e46;color:#fff;border:1px solid var(--ok)}.voice-listen-gap{display:block}
.voice-row{grid-template-columns:30px 84px minmax(0,1fr) 64px 64px}
.voice-status{font-size:12px;margin:4px 0 8px;color:var(--ok)}.voice-status.warn{color:#ff8a96;font-weight:700}
.talk-row.selected{outline:0;background:rgb(var(--g4))}.talk-row.live.selected{background:rgb(63 200 240 / .22)}
.big-body{display:flex;flex-direction:column;align-items:stretch;gap:12px}
.big-chips{display:flex;flex-wrap:wrap;gap:8px}.big-chip{min-height:48px;padding:8px 16px;background:rgb(var(--g5));color:rgb(var(--g19))}.big-chip.on{background:var(--accent);color:var(--on-accent)}.big-chip.rx{box-shadow:inset 0 -4px 0 var(--tx)}
.big-state{text-align:center;font-size:18px;color:rgb(var(--g13));min-height:26px}.big-state.rx{color:var(--tx);font-weight:800}.big-state.tx{color:#ff8a96;font-weight:800}
.big-ptt{align-self:center;width:min(70vw,260px);aspect-ratio:1;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;background:#b3202e;color:#fff;border:6px solid #ff5d5d;box-shadow:0 10px 30px #0008;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
.big-ptt.tx{background:#ff3b3b;border-color:#fff;transform:scale(.97)}.big-ptt.wait{opacity:.8}.big-ptt-label{font-size:clamp(34px,8vw,56px);font-weight:900;letter-spacing:.08em}.big-ptt-ch{font-size:16px;opacity:.9}
.big-hint{text-align:center;font-size:12px}.big-connect{align-self:center;min-height:64px;font-size:20px;padding:12px 28px}
body.ptt-only .dispatch-tools,body.ptt-only #message{display:none}
body.ptt-only .dispatch-board{position:fixed;inset:0;height:auto!important;border-radius:0;background:rgb(var(--g2));z-index:1000}
body.ptt-only .dispatch-board>*:not(.ptt-window){display:none!important}
body.ptt-only .ptt-window{display:flex!important;position:fixed!important;inset:0!important;width:auto!important;max-width:none;border:0;border-radius:0;background:rgb(var(--g2))}
body.ptt-only .ptt-window .panel-body{max-height:none!important;height:auto!important;flex:1;justify-content:center;padding:16px}
body.ptt-only .ptt-window .big-ptt{width:min(80vw,62vh,420px)}body.ptt-only .panel-collapse,body.ptt-only .panel-resize,body.ptt-only .panel-grip{display:none}
.big-ptt{flex:none}@media(min-width:741px){.docked .big-ptt{width:min(150px,100%)}.docked .big-chip{min-height:40px;padding:6px 12px}.docked .dispatch-legend{left:calc(var(--dock-l) + 18px);bottom:calc(var(--dock-b) + 18px)}}
@media(min-width:741px){.docked .big-body{gap:6px}.docked .big-ptt{width:110px;border-width:4px}.docked .big-ptt-label{font-size:28px}.docked .big-hint{display:none}.docked .big-state{font-size:14px;min-height:18px}}
/* f18: compact dispatcher bar (one row), counters, master volumes, all-call, playback, radio check. */
@media(min-width:741px){
body.dispatch-view:not(.dispatch-popout)>header,body.dispatch-view:not(.dispatch-popout) #test-banner,body.dispatch-view #workspace>nav{display:none}
body.dispatch-view main{padding:8px 12px}body.dispatch-view #message{position:fixed;left:50%;transform:translateX(-50%);bottom:8px;z-index:4000;margin:0;padding:0 12px;background:rgb(var(--g3) / .92);border-radius:8px}
body.dispatch-view .dispatch-board{height:calc(100vh - 74px)!important;height:calc(100dvh - 74px)!important}
body.dispatch-popout .dispatch-board{height:calc(100vh - 66px)!important;height:calc(100dvh - 66px)!important}
body.dispatch-max .dispatch-board{height:auto!important}
}
.dispatch-tools{flex-wrap:nowrap;gap:10px;margin:0 0 8px;padding:6px 10px;background:rgb(var(--g3));border:1px solid rgb(var(--g5));border-bottom:3px solid var(--accent);border-radius:10px;min-height:52px}
.dispatch-tools>label{flex:none}.dispatch-tools select{min-height:36px;padding:4px 8px;font-size:14px}
.bar-logo{height:32px;width:32px;flex:none}.bar-title{font-size:16px;white-space:nowrap}
.dispatch-counters{display:flex;gap:6px;align-items:center;flex-wrap:nowrap;margin-left:6px}
.counter{min-height:32px;padding:4px 10px;border-radius:999px;font-size:13px;white-space:nowrap;background:transparent;border:1px solid rgb(var(--g7));color:rgb(var(--g13))}
.counter:disabled{opacity:1;cursor:default}.counter.sos{background:#7d1620;border-color:#ff5d5d;color:#fff;animation:sos-flash-b 1s steps(2) infinite}.counter.lone{background:#33280e;border-color:var(--lone);color:#ffe6a8}.counter.geo{background:#12304a;border-color:var(--geo);color:#cfe4ff}
@keyframes sos-flash-b{50%{background:#b3202e}}@media(prefers-reduced-motion:reduce){.counter.sos{animation:none}}
.counter-online{font-size:13px;color:rgb(var(--g14));white-space:nowrap}
.bar-buttons{display:flex;gap:6px;align-items:center;margin-left:auto;flex-wrap:nowrap}.bar-buttons>button{min-height:36px;padding:4px 10px;font-size:13px;white-space:nowrap}
.dispatch-more summary{min-height:36px;white-space:nowrap}
.test-badge{flex:none;font-size:11px;font-weight:800;letter-spacing:.12em;color:#ffc52e;border:1px solid #8a6200;border-radius:6px;padding:4px 6px;cursor:help}
@media(max-width:1500px){.bar-buttons>button{padding:4px 8px;font-size:12px}.counter{padding:4px 8px;font-size:12px}}
@media(max-width:740px){.dispatch-tools{flex-wrap:wrap}.bar-buttons{flex-wrap:wrap;margin-left:0}.dispatch-counters{flex-wrap:wrap}}
.voice-masters{display:grid;grid-template-columns:1fr 1fr;gap:6px 12px;margin:0 0 8px}.master-vol{flex-direction:column;gap:2px;margin:0;font-size:12px;color:rgb(var(--g13))}.master-vol input{min-height:24px;padding:0}
.voice-all,.big-all{grid-column:1/-1;min-height:40px;background:#5c3a12;color:#ffe6a8;border:1px solid var(--lone);touch-action:none;user-select:none}.voice-all.tx,.big-all.tx{background:#ff3b3b;color:#fff;border-color:#fff}
.big-all{align-self:center;min-height:52px;padding:8px 24px;font-size:16px}
.talk-row{grid-template-columns:72px minmax(0,1fr) auto 40px;cursor:pointer}.talk-row.static{cursor:default}.talk-ch{grid-column:2/4}
.talk-play{grid-column:4;grid-row:1/3;min-height:36px;min-width:36px;padding:0;font-size:14px}.talk-play.on{background:var(--tx);color:#000}.talk-play-gap{grid-column:4}
.radio-check{font-size:13px}
@media(min-width:741px){.docked .big-all{min-height:34px;padding:4px 12px;font-size:13px}}
/* f19: window on/off (☰ Menü → Ablakok), docked cells re-flow; lone worker countdown; light theme fixes. */
.menu-windows{display:flex;flex-direction:column;gap:2px;padding:4px 6px 8px;border-bottom:1px solid rgb(var(--g6));margin-bottom:4px}.menu-windows strong{font-size:12px;letter-spacing:.08em;color:rgb(var(--g13));text-transform:uppercase}
.menu-win{margin:0;min-height:34px;gap:8px;font-size:14px;color:rgb(var(--g18));cursor:pointer}.dispatch-more-menu{max-height:calc(100vh - 90px);overflow:auto}
@media(min-width:741px){
.docked.no-detail-window .talk-window{grid-row:1/3}.docked.no-talk-window .detail-window{grid-row:1/3}
.docked.no-detail-window.no-talk-window .dispatch-map{grid-column:2/5}
.docked.no-ptt-window .voice-window{grid-row:1/4}.docked.no-voice-window .ptt-window{grid-row:1/4}
.docked.no-voice-window.no-ptt-window .dispatch-map{grid-column:1/4}.docked.no-voice-window.no-ptt-window.no-detail-window.no-talk-window .dispatch-map{grid-column:1/5}
.docked.no-radio-window .geo-window{grid-column:3/5}.docked.no-geo-window .event-window{grid-column:2/4}.docked.no-geo-window.no-radio-window .event-window{grid-column:2/5}
.docked.no-event-window .geo-window{grid-column:2/4}.docked.no-event-window.no-radio-window .geo-window{grid-column:2/5}.docked.no-event-window.no-geo-window .radio-window{grid-column:2/5}
.docked.no-event-window.no-geo-window.no-radio-window .dispatch-map{grid-row:1/4}
.docked.no-voice-window.no-ptt-window .dock-split-l,.docked.no-detail-window.no-talk-window.no-radio-window .dock-split-r,.docked.no-event-window.no-geo-window.no-radio-window .dock-split-b{display:none}
}
.lw-count{font-variant-numeric:tabular-nums;font-weight:700;white-space:nowrap}.lw-count.lw-ok{color:var(--ok)}.lw-count.lw-pre{color:var(--lone)}.lw-count.lw-late{color:#ff8a96;animation:sos-flash-t 1s steps(2) infinite}
@keyframes sos-flash-t{50%{opacity:.35}}@media(prefers-reduced-motion:reduce){.lw-count.lw-late{animation:none}}
.dispatch-radio>.lw-count{grid-column:2;font-size:12px}.dispatch-counters>.lw-count{font-size:13px;padding:4px 8px;border:1px solid rgb(var(--g7));border-radius:999px}
.lw-box{margin:8px 0;padding:8px 10px;border:1px solid rgb(var(--g6));border-radius:8px}.lw-big{display:block;font-size:22px;margin-bottom:6px}
.lw-bar{height:8px;border-radius:4px;background:rgb(var(--g5));overflow:hidden}.lw-bar i{display:block;height:100%;background:var(--ok);transition:width 1s linear}.lw-bar i.lw-pre{background:var(--lone)}.lw-bar i.lw-late{background:#ff3b3b;width:100%!important}
:root[data-theme=light] .voice-all,:root[data-theme=light] .big-all{background:#fff1d6;color:#5a3b00;border-color:#e0a030}
:root[data-theme=light] .voice-all.tx,:root[data-theme=light] .big-all.tx{background:#ff3b3b;color:#fff}
:root[data-theme=light] .counter.geo{background:#dbeaff;color:#12304a;border-color:#4f9cf0}:root[data-theme=light] .counter.lone{background:#fff1d6;color:#5a3b00}
:root[data-theme=light] .lw-count.lw-ok{color:#14894f}:root[data-theme=light] .lw-count.lw-pre{color:#a55f00}:root[data-theme=light] .lw-count.lw-late{color:#b3202e}
.ptt-key{margin-bottom:6px}
.tree-note.lw-ok{color:var(--ok);font-weight:700}.tree-note.lw-pre{color:var(--lone);font-weight:700}.tree-note.lw-late{color:#ff8a96;font-weight:800;animation:sos-flash-t 1s steps(2) infinite}
/* f20: console (channel tiles), calls list "who → channel", map-only window. */
.console-window{left:470px;top:60px;width:640px}
@media(min-width:741px){
.docked:not(.no-console-window) .dispatch-map{grid-row:1}
.docked .console-window{grid-column:2/4;grid-row:2}
.docked.no-detail-window.no-talk-window .console-window{grid-column:2/5}
.docked.no-voice-window.no-ptt-window .console-window{grid-column:1/4}
.docked.no-voice-window.no-ptt-window.no-detail-window.no-talk-window .console-window{grid-column:1/5}
}
.console-body{display:flex;flex-direction:column;gap:8px}
.console-top{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.tile-size{min-height:30px;min-width:34px;padding:2px 8px;font-size:12px}.tile-size.on{background:var(--accent);color:var(--on-accent)}
.console-all{min-height:30px;padding:2px 12px;margin-left:auto;font-size:13px;background:#5c3a12;color:#ffe6a8;border:1px solid var(--lone);touch-action:none;user-select:none}.console-all.tx{background:#ff3b3b;color:#fff}
.console-grid{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(var(--tw),1fr))}
.console-grid.size-s{--tw:150px}.console-grid.size-m{--tw:200px}.console-grid.size-l{--tw:280px}
.tile{position:relative;display:flex;flex-direction:column;gap:4px;padding:10px 12px;border-radius:12px;cursor:pointer;user-select:none;
 background:linear-gradient(180deg,color-mix(in srgb,var(--tile) 22%,rgb(var(--g3))) 0%,rgb(var(--g3)) 100%);border:2px solid color-mix(in srgb,var(--tile) 55%,transparent);border-top:8px solid var(--tile);color:rgb(var(--g19))}
.tile.selected{outline:3px solid var(--accent);outline-offset:2px}
.tile.muted{opacity:.6}
.tile-head{display:flex;align-items:center;gap:6px}.tile-name{font-weight:800;font-size:18px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}
.tile-listen{min-height:30px;min-width:36px;padding:0 6px;background:rgb(var(--g5));color:rgb(var(--g19))}.tile-listen.on{background:#1f6e46;color:#fff}
.tile-who{font-size:20px;font-weight:800;min-height:28px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:rgb(var(--g13))}
.tile-sub{font-size:13px;color:rgb(var(--g13));font-variant-numeric:tabular-nums}
.tile-ptt{margin-top:4px;min-height:44px;background:#b3202e;color:#fff;font-weight:900;letter-spacing:.1em;touch-action:none;user-select:none}
.tile.rx{background:linear-gradient(180deg,#0b5f7a 0%,#0a3f52 100%);border-color:#3fc8f0;box-shadow:0 0 0 3px rgb(63 200 240 / .35),0 0 24px rgb(63 200 240 / .45)}.tile.rx .tile-who,.tile.rx .tile-sub{color:#e8fbff}
.tile.tx{background:linear-gradient(180deg,#a3161f 0%,#6d0f16 100%);border-color:#ff5d5d;box-shadow:0 0 24px rgb(255 59 59 / .5)}.tile.tx .tile-who,.tile.tx .tile-sub{color:#fff}.tile.tx .tile-ptt{background:#fff;color:#a3161f}
.tile.sos{animation:tile-sos 1s steps(2) infinite}@keyframes tile-sos{50%{border-color:#ff3b3b;box-shadow:0 0 0 4px #ff3b3b}}@media(prefers-reduced-motion:reduce){.tile.sos{animation:none;border-color:#ff3b3b}}
.size-s .tile-name{font-size:15px}.size-s .tile-who{font-size:16px;min-height:22px}.size-s .tile-ptt{min-height:36px}
.size-l .tile-name{font-size:22px}.size-l .tile-who{font-size:28px;min-height:38px}.size-l .tile-ptt{min-height:60px;font-size:20px}
:root[data-theme=light] .tile.rx .tile-name,:root[data-theme=light] .tile.tx .tile-name{color:#fff}
.talk-name{display:flex;gap:4px;align-items:baseline;overflow:hidden;white-space:nowrap}.talk-name strong{overflow:hidden;text-overflow:ellipsis}.talk-arrow{color:rgb(var(--g12))}.talk-to{font-weight:600;color:rgb(var(--g16));overflow:hidden;text-overflow:ellipsis}
.talk-row.live{background:linear-gradient(90deg,rgb(63 200 240 / .35),rgb(63 200 240 / .08))}
body.map-only .dispatch-counters{display:none}
@media(min-width:741px){.docked .dispatch-legend{top:14px;bottom:auto;left:calc(var(--dock-l) + 64px)}.docked.no-voice-window.no-ptt-window .dispatch-legend{left:64px}}
/* f21: compact view – tree | map | drawer (tabs, one window), bottom PTT bar; radio ⋮ menu; my settings. */
.drawer-tabs,.compact-bar{display:none}
@media(min-width:741px){
.dispatch-board.compact{display:grid;grid-template-columns:var(--dock-l,24%) minmax(0,1fr) var(--dock-r,24%);grid-template-rows:auto minmax(0,1fr) auto;gap:6px;padding:6px;background:rgb(var(--g2));border:1px solid rgb(var(--g5))}
.compact.drawer-closed{grid-template-columns:var(--dock-l,24%) minmax(0,1fr) 44px}
.compact .dispatch-map{position:relative;inset:auto;grid-column:2;grid-row:1/3;border-radius:8px;overflow:hidden}
.compact.no-voice-window .dispatch-map{grid-column:1/3}
.compact .dispatch-panel{position:relative!important;left:auto!important;top:auto!important;right:auto!important;bottom:auto!important;width:auto!important;max-width:none;min-height:0;z-index:auto;box-shadow:none;background:rgb(var(--g3));overflow:hidden}
.compact .dispatch-panel .panel-body{flex:1;min-height:0;max-height:none!important;height:auto!important;overflow:auto}
.compact .panel-handle{cursor:default}.compact .panel-grip,.compact .panel-resize,.compact .panel-collapse{display:none}
.compact .voice-window{grid-column:1;grid-row:1/3}
.compact .talk-window,.compact .detail-window,.compact .radio-window,.compact .event-window,.compact .geo-window,.compact .console-window{grid-column:3;grid-row:2}
.compact .drawer-tabs{display:flex;flex-wrap:wrap;gap:4px;grid-column:3;grid-row:1;align-items:center}
.compact.drawer-closed .drawer-tabs{flex-direction:column}.compact.drawer-closed .drawer-tab{display:none}
.drawer-tab{min-height:32px;padding:4px 10px;font-size:13px;background:rgb(var(--g4));color:rgb(var(--g17))}.drawer-tab.on{background:var(--accent);color:var(--on-accent)}
.drawer-toggle{margin-left:auto;min-height:32px;min-width:36px;padding:0;background:rgb(var(--g5));color:rgb(var(--g19))}
.compact .compact-bar{display:flex;grid-column:1/-1;grid-row:3;align-items:center;gap:12px;padding:8px 10px;background:rgb(var(--g3));border:1px solid rgb(var(--g5));border-top:3px solid var(--accent);border-radius:10px;min-height:76px}
.compact .compact-bar[hidden]{display:none}
.compact .dock-split{display:block;position:absolute;z-index:700;touch-action:none}.compact .dock-split-l{top:6px;bottom:96px;width:8px;left:calc(var(--dock-l) + 3px);cursor:col-resize}
.compact .dock-split-l:hover{background:rgb(255 197 46 / .45)}.compact .dispatch-legend{top:14px;bottom:auto;left:calc(var(--dock-l) + 64px)}
}
.bar-chips{display:flex;gap:6px;flex-wrap:wrap;flex:1;min-width:0;align-items:center}
.bar-chip{display:flex;flex-direction:column;align-items:flex-start;min-height:52px;min-width:110px;padding:4px 12px;border-radius:10px;background:rgb(var(--g4));color:rgb(var(--g19));border:2px solid transparent;text-align:left}
.bar-chip.on{border-color:var(--accent)}.bar-chip.rx{background:#0b5f7a;color:#fff;box-shadow:0 0 14px rgb(63 200 240 / .6)}.bar-chip.tx{background:#a3161f;color:#fff}
.chip-name{font-weight:800;font-size:15px}.chip-who{font-size:12px;min-height:15px}
.bar-info{display:flex;flex-direction:column;min-width:220px}.bar-label{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:rgb(var(--g13))}.bar-ch{font-size:18px}
.bar-state{font-size:14px;color:rgb(var(--g13))}.bar-state.rx{color:var(--tx);font-weight:800}.bar-state.tx{color:#ff8a96;font-weight:800}
.bar-ptt{min-height:60px;min-width:220px;font-size:26px;font-weight:900;letter-spacing:.12em;background:#b3202e;color:#fff;border:3px solid #ff5d5d;border-radius:14px;touch-action:none;user-select:none}.bar-ptt.tx{background:#ff3b3b;border-color:#fff}
.bar-all{min-height:60px;padding:6px 14px;background:#5c3a12;color:#ffe6a8;border:1px solid var(--lone);touch-action:none;user-select:none}.bar-all.tx{background:#ff3b3b;color:#fff}
:root[data-theme=light] .bar-all{background:#fff1d6;color:#5a3b00;border-color:#e0a030}
.bar-connect{min-height:52px;font-size:16px}
.tree-row{display:grid;grid-template-columns:minmax(0,1fr) 30px;align-items:center}.tree-more{min-height:30px;padding:0;background:transparent;color:rgb(var(--g14));font-size:18px}.tree-more:hover{background:rgb(var(--g5))}
.radio-menu{position:fixed;z-index:4500;width:240px;display:flex;flex-direction:column;gap:4px;padding:8px;background:rgb(var(--g3));border:1px solid rgb(var(--g7));border-radius:10px;box-shadow:0 10px 30px #0008}
.radio-menu-title{padding:2px 6px 6px;border-bottom:1px solid rgb(var(--g6))}.radio-menu-item{text-align:left;min-height:38px;padding:6px 10px;background:transparent;color:rgb(var(--g19));font-weight:600}.radio-menu-item:hover:not(:disabled){background:rgb(var(--g5))}
.radio-menu-note{font-size:11px;margin:4px 6px 0}
/* f22: tidy-up – one main PTT per view, all-call only next to it, settings + help in the menu. */
.compact .console-all{display:none}
.menu-ptt{display:flex;gap:8px;align-items:center;justify-content:space-between;font-size:13px;margin-top:4px}.menu-ptt button{min-height:32px;padding:2px 10px;font-size:12px}
.menu-help{padding:4px 6px;border-bottom:1px solid rgb(var(--g6));margin-bottom:4px}.menu-help summary{cursor:pointer;font-weight:700;min-height:32px;display:flex;align-items:center}
.menu-help ul{margin:4px 0 6px;padding-left:16px;font-size:12px;line-height:1.45;max-width:300px}.menu-help li{margin:3px 0}
.ptt-key.capture{padding:8px;border:2px dashed var(--accent);border-radius:8px;color:rgb(var(--g19))}
.console-window{left:auto;right:360px;top:auto;bottom:48px;width:min(560px,40%)}
@media(min-width:741px) and (max-width:1500px){.dispatch-tools{flex-wrap:wrap;row-gap:6px}.bar-buttons{margin-left:auto;flex-wrap:wrap;justify-content:flex-end}.counter-online{display:none}
 body.dispatch-view .dispatch-board{height:calc(100vh - 118px)!important;height:calc(100dvh - 118px)!important}}
@media(min-width:741px) and (max-width:1500px){.voice-row .voice-vol{display:none}.voice-row{grid-template-columns:28px 84px minmax(0,1fr) 60px}}
/* f24: archive journal window, call requests, speed, text message buttons. */
.log-window{left:14px;bottom:110px;width:min(760px,60%)}
@media(min-width:741px){.docked .log-window{grid-column:2;grid-row:3}.docked:not(.no-log-window) .event-window{display:none!important}.docked.no-geo-window:not(.no-log-window) .log-window{grid-column:2/4}.docked.no-geo-window.no-radio-window:not(.no-log-window) .log-window{grid-column:2/5}
 .compact .log-window{grid-column:3;grid-row:2}}
.log-body{display:flex;flex-direction:column;gap:6px}
.log-tabs{display:flex;gap:4px;flex-wrap:wrap}.log-tab{min-height:32px;padding:4px 12px;font-size:13px;background:rgb(var(--g4));color:rgb(var(--g17))}.log-tab.on{background:var(--accent);color:var(--on-accent)}
.log-filters{display:flex;gap:6px;flex-wrap:wrap;align-items:flex-end}.log-field{margin:0;gap:2px;font-size:11px;color:rgb(var(--g13))}.log-field select,.log-field input{min-height:32px;padding:4px 6px;font-size:13px;width:auto;max-width:170px}.log-field.grow{flex:1;min-width:120px}.log-field.grow input{max-width:none;width:100%}
.log-go,.log-csv{min-height:32px;padding:4px 10px;font-size:13px}
.log-count{margin:0;font-size:12px;color:rgb(var(--g13))}
.log-table{display:flex;flex-direction:column;font-size:12px}
.log-row{display:grid;grid-template-columns:118px 120px minmax(80px,1fr) minmax(60px,.7fr) minmax(80px,1.4fr) 56px 36px;gap:6px;align-items:center;padding:4px 6px;border-bottom:1px solid rgb(var(--g5))}
.log-row.head{font-weight:700;color:rgb(var(--g13));position:sticky;top:0;background:rgb(var(--g3));z-index:1}.log-row span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.log-row.link{cursor:pointer}.log-row.link:hover{background:rgb(var(--g4))}.log-time,.log-dur{font-variant-numeric:tabular-nums;color:rgb(var(--g13))}
.log-row.g-traffic .log-kind{color:var(--tx)}.log-row.g-alarm .log-kind{color:#ff8a96;font-weight:700}.log-row.g-geo .log-kind{color:#9fc6ff}.log-row.g-link .log-kind{color:rgb(var(--g14))}.log-row.g-dispatch .log-kind{color:var(--accent-text)}
.log-row.hot{background:rgb(255 59 59 / .12)}.log-play{min-height:28px;min-width:30px;padding:0;font-size:12px}
@media(max-width:740px){.log-row{grid-template-columns:96px 1fr 36px}.log-row .log-kind,.log-row .log-ch,.log-row .log-detail,.log-row .log-dur{display:none}}
.counter.call{background:#0b5f7a;border-color:#3fc8f0;color:#e8fbff;animation:none}
.alarm-row.call{background:#0b4a60f2;border-color:#3fc8f0}.alarm-row.call strong{color:#e8fbff}
.k-call .tree-dot,.k-call .tree-note{color:var(--tx);font-weight:700}
.speed-tag{color:#ffe6a8;font-weight:700;margin-left:2px}
.bar-text{align-self:flex-start;min-height:26px;padding:2px 8px;font-size:12px;margin-bottom:2px}.console-text{min-height:30px;padding:2px 10px;font-size:12px}
.alarm-row.call,.alarm-row.call.active{animation:none;background:#0b4a60f2;border-color:#3fc8f0}
.track-summary{font-size:12px;margin:6px 0;color:rgb(var(--g16));line-height:1.4}
.log-body{container-type:inline-size}
@container (max-width:720px){.log-row{grid-template-columns:96px minmax(0,1fr) 44px 32px;border-left:3px solid transparent}.log-row .log-kind,.log-row .log-ch,.log-row .log-detail{display:none}
 .log-row.g-traffic{border-left-color:var(--tx)}.log-row.g-alarm{border-left-color:#ff5d5d}.log-row.g-geo{border-left-color:#4f9cf0}.log-row.g-dispatch{border-left-color:var(--accent)}.log-row.head span:nth-child(2),.log-row.head span:nth-child(4),.log-row.head span:nth-child(5){display:none}}
.alarm-label.call{background:#0b5f7a!important;color:#fff!important;border-color:#3fc8f0!important}

/* f25: recording download + messages tab */
.talk-play-box{grid-column:4;grid-row:1/3;display:flex;gap:4px;align-items:center}.talk-dl{min-height:36px;min-width:32px;padding:0;font-size:13px}
.log-row{grid-template-columns:118px 120px minmax(80px,1fr) minmax(60px,.7fr) minmax(80px,1.4fr) 56px 66px}.log-rec{display:flex;gap:4px}
.msg-table{display:flex;flex-direction:column;font-size:13px}
.msg-row{display:grid;grid-template-columns:118px minmax(70px,.6fr) minmax(80px,.8fr) minmax(120px,2fr) auto;gap:8px;align-items:center;padding:6px;border-bottom:1px solid rgb(var(--g5));border-left:3px solid var(--accent)}
.msg-row span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.msg-row.unread{border-left-color:#ffb347}.msg-from{font-weight:700}.msg-to{color:rgb(var(--g14))}
.msg-seen{min-height:28px;padding:2px 8px;font-size:12px;white-space:nowrap}.msg-seen.all{color:#93e5ae}
.msg-detail{padding:6px 12px 10px 130px;border-bottom:1px solid rgb(var(--g5));background:rgb(var(--g4));line-height:1.7}.msg-detail .seen{color:#93e5ae}.msg-detail .not-seen{color:#ffb347}
@container (max-width:720px){.log-row{grid-template-columns:96px minmax(0,1fr) 44px 66px}.msg-row{grid-template-columns:96px minmax(0,1fr) auto}.msg-row .msg-from,.msg-row .msg-to{display:none}.msg-detail{padding-left:12px}}
@media(max-width:740px){.log-row{grid-template-columns:96px 1fr 66px}.msg-row{grid-template-columns:96px minmax(0,1fr) auto}.msg-row .msg-from,.msg-row .msg-to{display:none}.msg-detail{padding-left:12px}}
.log-row.g-text .log-kind{color:#9fd8ff}

/* f28: speed with weak position accuracy */
.speed-tag.weak{opacity:.55;font-style:italic}

/* f29: state chips (filter), initials markers, card list, day navigation – PMRPTT look */
.state-chips{display:inline-flex;gap:6px;flex-wrap:nowrap;align-items:center}
.state-chip{display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:3px 10px 3px 8px;border-radius:999px;font-size:13px;background:rgb(var(--g4));border:1px solid rgb(var(--g7));color:rgb(var(--g15));white-space:nowrap}
.state-chip .chip-n{min-width:20px;padding:0 6px;border-radius:999px;background:rgb(var(--g6));text-align:center;font-variant-numeric:tabular-nums}
.state-chip .chip-dot{font-weight:900}.state-chip.s-tx .chip-dot{color:var(--tx)}.state-chip.s-online .chip-dot{color:#25c17c}.state-chip.s-stale .chip-dot{color:#e0b85a}.state-chip.s-offline .chip-dot{color:rgb(var(--g13))}
.state-chip.zero{opacity:.55}.state-chip.on{background:var(--accent);border-color:var(--accent);color:#14110a}.state-chip.on .chip-n{background:#0003}.state-chip.on .chip-dot{color:inherit}
.state-chip.clear{padding:3px 10px}
@media(max-width:2100px){.state-chip .chip-label{display:none}.state-chip{padding:3px 8px}}
.map-radio{width:28px;height:28px;font-size:11px!important;font-weight:800;line-height:24px!important;letter-spacing:.02em;color:#fff!important;text-shadow:none;border:2px solid #fff;background:#1f8a5a;box-shadow:0 1px 4px #0008;font-family:system-ui,'Segoe UI',sans-serif}
.map-radio.tx{background:#0f86ad}.map-radio.stale{background:#8a6a1a;border-color:#ffd98a}.map-radio.offline{background:rgb(var(--g5))!important;border-color:rgb(var(--g13));color:rgb(var(--g15))!important}
.map-radio.sel{outline:3px solid var(--accent);outline-offset:2px}.map-radio.alarm{background:#c0202e;border-color:#fff;animation:sos-flash-b 1s steps(2) infinite}
.list-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.list-head .dispatch-count{margin:0}.list-mode{min-height:28px;padding:2px 10px;font-size:12px}
.dispatch-list.cards .radio-item{margin:0 0 8px}.dispatch-list.cards .dispatch-radio{min-height:64px;padding:10px 12px;border-radius:12px;background:rgb(var(--g4));border:1px solid rgb(var(--g6));font-size:16px}
.dispatch-list.cards .dispatch-radio.selected{border-color:var(--accent)}.dispatch-list.cards .dispatch-radio.alarm{background:#5a1820;border-color:#ff5d5d}
.dispatch-list.cards .dispatch-radio small{font-size:13px}
.day-nav{display:inline-flex;align-items:center;gap:6px;align-self:flex-end}.day-btn{min-height:32px;min-width:34px;padding:0;font-size:18px;line-height:1}.day-label{font-size:13px;white-space:nowrap}

/* f30: calmer top bar – zero alarm counters hidden, view buttons in the menu, menu always on screen */
.counter.calm{display:inline-flex;align-items:center;border-color:rgb(var(--g6));color:#7fd6a6;cursor:default}
.state-chips{padding:2px;border:1px solid rgb(var(--g6));border-radius:999px;gap:2px}.state-chip{border-color:transparent;background:transparent;min-height:28px}
.dispatch-more-menu{max-height:calc(100vh - 90px);overflow:auto;max-width:min(360px,calc(100vw - 24px))}
.menu-view{display:flex;flex-direction:column;gap:6px}.menu-view>button{justify-content:flex-start;text-align:left}

/* f31 */
.bar-buttons>.icon-only{min-width:40px;padding:4px 8px;font-size:17px}
/* f32: talk row – play + download fit inside the window */
.talk-row{grid-template-columns:64px minmax(0,1fr) auto 78px}
.talk-play-box{justify-content:flex-end;min-width:0}.talk-play-box .talk-play,.talk-play-box .talk-dl{min-width:34px;min-height:34px;width:34px}
@container (max-width:340px){.talk-row{grid-template-columns:56px minmax(0,1fr) 72px}.talk-row .talk-dur{display:none}}
