:root {
--bg:#091322;
  --panel:#122035;
  --line:#2a3a51;
  --text:#eef7ff;
  --muted:#9eb5c5;
  --cyan:#55d6ff;
  --green:#56d89a;
  --amber:#f3c96b;
  --red:#ff7f86;
  color-scheme:dark;
  font:14px/1.5 system-ui,-apple-system,"Segoe UI","Microsoft YaHei",sans-serif;
}

* {
box-sizing:border-box;
}

a,button,input {
-webkit-tap-highlight-color:transparent;
}

:focus-visible {
outline:2px solid var(--cyan);
  outline-offset:3px;
}

.eyebrow,.section-label {
margin:0;
  color:var(--cyan);
  font-size:.75rem;
  font-weight:800;
  letter-spacing:.12em;
}

.brand h1 {
margin:.2rem 0;
  font-size:1.55rem;
  letter-spacing:.03em;
}

.clock {
margin:0;
  color:var(--muted);
}

.top-actions {
display:flex;
  align-items:center;
  gap:.7rem;
  flex-wrap:wrap;
}

.button {
display:inline-flex;
  align-items:center;
  justify-content:center;
  padding:.65rem 1rem;
  border-radius:9px;
  background:#2cc3ee;
  color:#00111a;
  text-decoration:none;
  font-weight:750;
}

.button.secondary {
color:var(--text);
  background:transparent;
  border:1px solid var(--line);
}

.card,.metric {
min-width:0;
  background:var(--panel);
  border:1px solid var(--line);
  border-radius:18px;
  padding:1.4rem;
}

.hero-grid {
display:grid;
  grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);
  gap:1rem;
  margin-top:1rem;
}

.card-head {
display:flex;
  justify-content:space-between;
  align-items:flex-start;
  gap:.8rem;
  margin-bottom:.8rem;
}

.card-head h2 {
font-size:1.1rem;
  margin:.2rem 0;
}

.card-head p {
font-size:.85rem;
  color:var(--muted);
  margin:.25rem 0;
}

.pill {
display:inline-flex;
  padding:.25rem .6rem;
  border-radius:99px;
  background:#153c35;
  color:var(--green);
  font-size:.75rem;
  font-weight:700;
  white-space:nowrap;
}

.pill.muted {
background:#163044;
  color:var(--muted);
}

.pill.bad,.bad {
color:var(--red);
}

.callsign {
font-size:clamp(1.7rem,3vw,2.8rem);
  font-weight:900;
  letter-spacing:.035em;
  line-height:1.15;
  margin:.6rem 0;
  overflow-wrap:anywhere;
}

.phonetic {
color:var(--cyan);
  min-height:1.5rem;
}

.kv-list>div {
border:1px solid var(--line);
  border-radius:9px;
  padding:.4rem .55rem;
  min-width:0;
  overflow-wrap:anywhere;
}

.kv-list span,.metric span {
display:block;
  color:var(--muted);
  font-size:.8rem;
}

.kv-list strong {
display:block;
  margin-top:.2rem;
}

.status-grid {
display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:.6rem;
}

.status-item {
display:flex;
  justify-content:space-between;
  align-items:flex-start;
  gap:.5rem;
  border:1px solid var(--line);
  border-radius:9px;
  padding:.7rem;
  min-width:0;
}

.status-item strong,.status-item small {
display:block;
}

.status-item small {
font-size:.78rem;
  color:var(--muted);
  margin-top:.2rem;
}

.status-item>span {
font-size:.75rem;
  white-space:nowrap;
  color:inherit;
}

.status-item.good>span {
color:var(--green);
}

.status-item.neutral>span {
color:var(--muted);
}

.status-item.warn {
color:var(--amber);
  border-left:3px solid var(--amber);
}

.truth-note {
font-size:.8rem;
  color:var(--muted);
  margin:.8rem 0 0;
}

.station-strip-card {
margin-top:.75rem;
}

.main-tables {
margin-top:1rem;
}

.contact-evidence,.details-panel {
margin:1rem 0;
  color:var(--muted);
}

summary {
cursor:pointer;
  min-height:44px;
  display:flex;
  align-items:center;
  gap:.5rem;
}

summary::before {
content:"＋";
  color:var(--cyan);
}

details[open]>summary::before {
content:"－";
}

.details-panel h2 {
font-size:1.1rem;
}

.station-strip {
display:grid;
  grid-template-columns:repeat(auto-fit,minmax(min(100%,19rem),1fr));
  gap:.75rem;
}

.station-top {
display:flex;
  justify-content:space-between;
  align-items:flex-start;
  gap:.5rem;
  min-height:2.8rem;
}

.station-top>div {
min-width:0;
}

.node-id {
display:block;
  font-weight:800;
  color:var(--cyan);
}

.device-alias {
display:block;
  overflow-wrap:anywhere;
  font-size:.85rem;
}

.alias-source {
display:block;
  color:var(--muted);
  font-size:.7rem;
}

.activity-badge {
display:flex;
  align-items:center;
  gap:.35rem;
  flex-shrink:0;
  border:1px solid #465d6d;
  background:#152c3b;
  border-radius:8px;
  padding:.3rem .5rem;
  font-style:normal;
  color:#a0b1be;
}

.activity-text {
font-size:1.05rem;
  white-space:nowrap;
}

.activity-dot {
width:.45rem;
  height:.45rem;
  border-radius:50%;
  background:currentColor;
}

.station-mini.tx-active {
border-color:var(--red);
  background:#321723;
}

.station-mini.tx-active .activity-badge {
color:#ff9ca6;
  border-color:var(--red);
  background:#521c2a;
}

.station-mini.rx-active {
border-color:var(--cyan);
  background:#0d2836;
}

.station-mini.rx-active .activity-badge {
color:var(--cyan);
  border-color:var(--cyan);
}

.station-mini.offline .activity-badge {
color:#b98f80;
}

.station-signal-row {
border:1px solid var(--line);
  border-radius:9px;
  padding:.45rem;
  margin-top:auto;
}

.station-signal-row>div>span {
color:var(--muted);
  font-size:.75rem;
  display:block;
}

.station-rssi {
display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:.45rem;
  margin:.4rem 0;
  font-variant-numeric:tabular-nums;
}

.rssi-slot small {
display:block;
  font-size:.7rem;
  color:var(--muted);
}

.rssi-slot strong {
display:flex;
  align-items:baseline;
  gap:.2rem;
  white-space:nowrap;
  font-size:clamp(1.2rem,1.7vw,1.8rem);
  font-weight:850;
  line-height:1.25;
}

.rssi-slot {
display:block;
  min-width:0;
  padding:.45rem .55rem;
  border:1px solid var(--line);
  border-radius:8px;
  background:#09131f;
  color:var(--muted);
}

.station-rssi .rssi-slot.live {
color:var(--green);
  border-color:#287357;
  background:#0b2b23;
}

.station-rssi.realtime .rssi-slot small {
color:inherit;
}

.station-rssi.historical .rssi-slot {
border-style:dashed;
}

.rssi-slot em {
font-size:.68rem;
  font-style:normal;
  font-weight:500;
}

.signal-age,.power-age {
display:block;
  color:var(--muted);
  font-size:.72rem;
  min-height:1.1rem;
}

.realtime {
color:var(--text);
}

.historical,.historical b {
color:#91a7b7;
}

.idle-value {
color:var(--muted);
}

.station-power-grid {
display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));
  gap:.45rem;
}

.station-power-grid>div {
border:1px solid var(--line);
  border-radius:8px;
  padding:.45rem .25rem;
  text-align:center;
  min-width:0;
}

.station-power-grid span,.station-power-grid small {
display:block;
  color:var(--muted);
  font-size:.7rem;
}

.station-power-grid b {
display:block;
  font-size:1.2rem;
  font-variant-numeric:tabular-nums;
}

.station-mini.tx-active .station-power-grid.realtime b {
color:var(--red);
}

.metric-grid {
display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:.5rem;
  margin:1rem 0 0;
}

.metric {
padding:.8rem 1rem;
}

.metric strong {
font-size:1.6rem;
  display:block;
}

.two-column {
display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:1rem;
}

.table-wrap {
overflow:auto;
  border:1px solid var(--line);
  border-radius:9px;
}

.table-wrap.compact {
max-height:24rem;
}

table {
width:100%;
  min-width:32rem;
  border-collapse:collapse;
  font-size:.83rem;
}

th {
position:sticky;
  top:0;
  background:#143149;
  color:#bad2df;
  font-size:.75rem;
  text-align:left;
  padding:.6rem;
  white-space:nowrap;
}

td {
padding:.6rem;
  border-top:1px solid var(--line);
  white-space:nowrap;
  vertical-align:top;
}

td.location-cell {
white-space:normal;
  min-width:17rem;
  line-height:1.65;
  overflow-wrap:anywhere;
}

.empty {
text-align:center;
  color:var(--muted);
  padding:1.5rem;
}

.qa-list {
display:grid;
  grid-template-columns:1fr;
  gap:.5rem;
  max-height:29rem;
  overflow:auto;
}

.qa-row {
border:1px solid var(--line);
  border-radius:10px;
  padding:.8rem;
  min-width:0;
}

.qa-meta {
display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:.5rem;
  font-size:.72rem;
  color:var(--muted);
}

.qa-meta span {
color:var(--cyan);
  font-weight:800;
}

.qa-meta i {
font-style:normal;
  color:var(--green);
}

.qa-row p {
margin:.6rem 0 0;
  overflow-wrap:anywhere;
}

.qa-row b {
color:var(--cyan);
  margin-right:.4rem;
}

.qa-row .a b {
color:var(--green);
}

.lower-grid {
display:grid;
  grid-template-columns:minmax(0,1.5fr) repeat(3,minmax(0,1fr));
  gap:1rem;
  margin-top:1rem;
}

.kv-list {
display:grid;
  gap:.5rem;
}

.login-body {
display:grid;
  place-items:center;
}

.login-shell {
width:min(460px,calc(100% - 32px));
  margin:10vh auto;
}

.login-card {
background:var(--panel);
  border:1px solid var(--line);
  border-radius:16px;
  padding:2rem;
}

.login-card h1 {
margin:.5rem 0;
}

.login-card p,.login-card label {
color:var(--muted);
}

.login-card label {
display:block;
  margin:1rem 0;
}

.login-button {
width:100%;
  border:0;
  cursor:pointer;
}

.login-error {
color:var(--red)!important;
}

.login-note {
font-size:.8rem;
}

@media(max-width:1350px) {
.station-strip,.lower-grid {
grid-template-columns:repeat(2,minmax(0,1fr));
}

.two-column {
grid-template-columns:1fr;
}
}

@media(max-width:850px) {
.hero-grid {
grid-template-columns:1fr;
}

.topbar {
flex-direction:column;
    align-items:flex-start;
}
}

@media(max-width:560px) {
main {
padding:.75rem;
}

.station-strip,.lower-grid {
grid-template-columns:1fr;
}

.metric-grid,.status-grid {
grid-template-columns:repeat(2,minmax(0,1fr));
}

.card {
padding:.85rem;
}

.status-item {
flex-direction:column;
}
}

/* V6: readable state colors, safe areas and mobile cards without hidden columns. */
html {
scroll-padding-top:1rem;
  -webkit-text-size-adjust:100%;
}

main {
max-width:1900px;
  margin:auto;
  padding:1.4rem 1.6rem 2rem;
  padding-left:max(1.5rem,env(safe-area-inset-left));
  padding-right:max(1.5rem,env(safe-area-inset-right));
}

body {
margin:0;
  min-height:100vh;
  min-height:100dvh;
  color:var(--text);
  background:radial-gradient(ellipse at 20% 0%,#142842 0,transparent 60%),var(--bg);
}

.topbar {
display:flex;
  justify-content:space-between;
  align-items:center;
  gap:1.5rem;
  padding:.75rem 1.25rem;
  border-bottom:1px solid var(--line);
  background:rgba(8,15,28,.96);
  padding-top:max(.75rem,env(safe-area-inset-top));
}

.button,button {
min-height:44px;
}

.card {
box-shadow:0 5px 24px #00000018;
}

.overview-bar,.legend,.source-ages {
display:flex;
  align-items:center;
  flex-wrap:wrap;
  gap:.65rem;
}

.overview-bar {
justify-content:space-between;
  margin-bottom:.6rem;
}

.legend {
gap:1rem;
  font-size:.8rem;
}

.legend-online,.legend-rx {
color:var(--green);
}

.legend-tx {
color:var(--red);
}

.legend-stale {
color:var(--muted);
}

.release-label {
font-size:.7rem;
  letter-spacing:.1em;
  color:var(--muted);
}

.source-ages {
margin-bottom:1rem;
}

.source-chip {
padding:.3rem .65rem;
  border:1px solid var(--line);
  border-radius:6px;
  font-size:.72rem;
  color:var(--muted);
}

.source-chip.fresh {
color:var(--green);
}

.source-chip.stale {
color:var(--amber);
  border-style:dashed;
}

.source-chip time {
margin-left:.3rem;
  font-variant-numeric:tabular-nums;
}

.source-stale {
border-left:3px dashed var(--amber);
  padding-left:.7rem;
}

.source-stale::before {
content:'历史数据 · 来源待更新';
  display:block;
  color:var(--amber);
  font-size:.75rem;
  grid-column:1/-1;
  margin-bottom:.4rem;
}

.pill.bad {
background:#421d2c;
  color:#ffabb1;
}

.pill.info {
color:var(--cyan);
  background:#13364b;
}

.status-item.neutral {
border-style:dashed;
}

.status-item.good {
border-left:3px solid var(--green);
}

.status-item.bad {
border-left:3px solid var(--red);
}

.station-mini.stale {
border-style:dashed;
}

.status-item small,.phonetic,.card-head p,.kv-list,.qa-meta,.source-chip {
overflow-wrap:anywhere;
}

footer {
display:flex;
  justify-content:space-between;
  flex-wrap:wrap;
  gap:.8rem;
  padding:1rem 1.5rem;
  color:var(--muted);
  border-top:1px solid var(--line);
  font-size:.75rem;
  padding-bottom:max(1rem,env(safe-area-inset-bottom));
}

.login-card input {
width:100%;
  margin-top:.4rem;
  padding:.8rem;
  background:var(--bg);
  border:1px solid var(--line);
  border-radius:8px;
  color:var(--text);
  font:inherit;
  font-size:16px;
  min-height:46px;
}

@media(max-width:640px) {
main {
padding:.75rem max(.75rem,env(safe-area-inset-right)) .75rem max(.75rem,env(safe-area-inset-left));
}

.topbar {
padding:1rem;
    gap:.75rem;
}

.brand h1 {
font-size:1.45rem;
}

.top-actions {
width:100%;
    gap:.5rem;
}

.clock {
flex-basis:100%;
    font-size:.8rem;
}

.legend {
gap:.65rem;
    font-size:.7rem;
}

.release-label {
display:none;
}

.table-wrap,.table-wrap.compact {
border:0;
    overflow:visible;
    max-height:none;
}

table,tbody {
display:block;
    min-width:0;
    width:100%;
}

thead {
position:absolute;
    width:1px;
    height:1px;
    overflow:hidden;
    clip-path:inset(50%);
}

tbody tr {
display:grid;
    grid-template-columns:minmax(0,1fr);
    border:1px solid var(--line);
    border-radius:9px;
    margin-bottom:.65rem;
    padding:.5rem .7rem;
}

td,td.location-cell {
display:grid;
    grid-template-columns:5.5rem minmax(0,1fr);
    gap:.5rem;
    min-width:0;
    padding:.3rem 0;
    white-space:normal;
    overflow-wrap:anywhere;
    border:0;
}

td::before {
content:attr(data-label);
    color:var(--muted);
    font-size:.73rem;
}

td.empty {
display:block;
    padding:.75rem;
}

td.empty::before {
content:none;
}

.qa-list {
grid-template-columns:1fr;
}

.login-card {
padding:1.3rem;
}
}

@media(max-width:360px) {
.status-grid {
grid-template-columns:1fr;
}

.callsign {
font-size:2rem;
}

.client-row {
grid-template-columns:minmax(0,1fr);
}

.client-row small {
grid-column:1;
}

.card-head {
flex-wrap:wrap;
}

.button {
padding:.55rem .75rem;
}

.station-power-grid b {
font-size:1rem;
}
}

@media(prefers-reduced-motion:reduce) {
*,*::before,*::after {
animation:none!important;
    transition:none!important;
    scroll-behavior:auto!important;
}
}

.client-row {
display:grid;
  grid-template-columns:minmax(0,1fr) auto;
  gap:6px;
  padding:10px 0;
  border-top:1px solid var(--line);
  overflow-wrap:anywhere;
}

.client-row small {
grid-column:1/-1;
  color:var(--muted);
}

.usage-wall {
margin:18px 0;
}

.usage-wall-sites {
display:grid;
  grid-template-columns:repeat(6,minmax(0,1fr));
  gap:12px;
  margin:18px 0;
}

.usage-wall-site {
border:1px solid #26435a;
  border-radius:10px;
  padding:14px;
  background:linear-gradient(135deg,#0e2031,#112c36);
}

.usage-wall-site b {
color:#31c7ee;
}

.usage-wall-site strong {
display:block;
  font-size:20px;
  margin:10px 0;
}

.usage-wall-site small {
font-size:11px;
  color:#91b4c9;
}

.usage-wall-track {
height:5px;
  border-radius:4px;
  background:#233b50;
  overflow:hidden;
  margin-bottom:9px;
}

.usage-wall-track i {
display:block;
  height:100%;
  background:linear-gradient(90deg,#26a6f5,#42d99c);
}

@media(max-width:1000px) {
.usage-wall-sites {
grid-template-columns:repeat(3,minmax(0,1fr));
}
}

@media(max-width:600px) {
.usage-wall-sites {
grid-template-columns:repeat(2,minmax(0,1fr));
}
}

/* FMO host reference: only the current-contact face; other panels keep their layout. */
.radio-face {
--radio-gold:#ffbf32;
  --radio-ice:#bfeaff;
  --radio-dim:#91a7b5;
  background:#080b0e;
  border:1px solid #37424a;
  border-radius:12px;
  padding:1rem 1.15rem;
  color:var(--radio-ice);
  box-shadow:inset 0 0 0 3px #ffffff03;
}

.radio-statusbar {
display:flex;
  align-items:center;
  justify-content:space-between;
  gap:.7rem;
  padding-bottom:.85rem;
  border-bottom:1px solid #ffffff14;
  font-variant-numeric:tabular-nums;
}

.radio-route {
display:flex;
  align-items:center;
  gap:.65rem;
  min-width:0;
}

.radio-route>span {
font-size:.7rem;
  color:var(--radio-dim);
  letter-spacing:.08em;
}

.radio-route strong {
font-size:.95rem;
  overflow-wrap:anywhere;
}

.radio-statusbar p {
margin:0;
  text-align:right;
  font-size:.73rem;
  color:var(--radio-dim);
}

.radio-face-grid {
display:grid;
  grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);
  gap:1.5rem;
  padding:1rem 0;
}

.radio-caller,.radio-station {
min-width:0;
}

.radio-field-label {
font-size:.7rem;
  color:var(--radio-dim);
  letter-spacing:.1em;
}

.radio-face .callsign {
color:var(--radio-gold);
  font-family:"Arial Narrow","Roboto Condensed",system-ui,sans-serif;
  font-size:clamp(2.1rem,3.6vw,4.3rem);
  font-weight:850;
  letter-spacing:-.025em;
  line-height:1.1;
  margin:.35rem 0 .65rem;
  overflow-wrap:anywhere;
  text-shadow:0 0 24px #ffbf320d;
}

.radio-face .phonetic {
font-size:.72rem;
  color:#82dafa;
  line-height:1.5;
  overflow-wrap:anywhere;
}

.radio-reception {
display:grid;
  gap:.8rem;
  margin-top:1.25rem;
}

.radio-fact {
display:flex;
  align-items:center;
  gap:.65rem;
  min-width:0;
}

.radio-fact svg,.radio-footer svg {
flex:0 0 auto;
  width:1.6rem;
  height:1.6rem;
  fill:none;
  stroke:currentColor;
  stroke-width:1.65;
  stroke-linejoin:round;
  stroke-linecap:round;
}

.radio-fact>div {
min-width:0;
}

.radio-fact span,.radio-location>span,.radio-id>span {
display:block;
  font-size:.68rem;
  color:var(--radio-dim);
  margin-bottom:.15rem;
}

.radio-fact strong {
display:block;
  color:var(--radio-ice);
  font-size:clamp(.9rem,1.45vw,1.4rem);
  font-weight:650;
  overflow-wrap:anywhere;
}

.radio-station-banner {
background:var(--radio-gold);
  color:#231700;
  border:1px solid #ffda83;
  border-radius:6px;
  padding:.5rem .65rem;
  margin:.35rem 0 1.1rem;
  font-size:clamp(1.05rem,1.7vw,1.8rem);
  font-weight:800;
  line-height:1.35;
  overflow-wrap:anywhere;
}

.radio-id strong {
display:block;
  font-family:ui-monospace,"SFMono-Regular",Consolas,monospace;
  color:#9cafbc;
  font-size:clamp(1.7rem,2.8vw,3.4rem);
  line-height:1.2;
  letter-spacing:.015em;
  overflow-wrap:anywhere;
  font-variant-numeric:tabular-nums;
}

.radio-location {
margin-top:.9rem;
}

.radio-location strong {
display:block;
  color:var(--radio-ice);
  font-size:.9rem;
  line-height:1.6;
  overflow-wrap:anywhere;
}

.radio-footer {
display:flex;
  align-items:flex-start;
  gap:.6rem;
  border-top:1px solid #ffffff14;
  padding-top:.8rem;
  color:#79d9ff;
}

.radio-footer svg {
width:1.15rem;
  height:1.15rem;
  margin-top:.15rem;
}

.radio-footer .truth-note {
margin:0;
  line-height:1.65;
  color:inherit;
}

@media(max-width:1100px) and (min-width:851px) {
.radio-face-grid {
grid-template-columns:minmax(0,1fr);
    gap:1.25rem;
}

.radio-station {
border-top:1px solid #ffffff14;
    padding-top:1rem;
}

.radio-reception {
grid-template-columns:repeat(2,minmax(0,1fr));
}

.radio-face .callsign {
font-size:clamp(2.1rem,4.2vw,3rem);
}
}

@media(max-width:640px) {
.radio-face {
padding:.85rem;
}

.radio-statusbar {
align-items:flex-start;
    flex-direction:column;
    gap:.35rem;
}

.radio-statusbar p {
text-align:left;
}

.radio-face-grid {
grid-template-columns:minmax(0,1fr);
    gap:1rem;
}

.radio-face .callsign {
font-size:clamp(2rem,9.5vw,3rem);
}

.radio-reception {
grid-template-columns:repeat(2,minmax(0,1fr));
    gap:.6rem;
}

.radio-station {
border-top:1px solid #ffffff14;
    padding-top:.8rem;
}

.radio-station-banner {
font-size:1.25rem;
}

.radio-id strong {
font-size:2rem;
}
}

.radio-face .audio-meter {
display:flex;
  gap:3px;
  align-items:flex-end;
  height:34px;
  margin:7px 0 4px;
  max-width:230px;
}

.radio-face .audio-meter i {
  flex:1;
  min-width:5px;
  height:10px;
  background:#253239;
  border-radius:1px;
}
.radio-face .audio-meter i.lit {background:#43df97;box-shadow:0 0 3px #43df9744}
.radio-face .audio-meter i.lit:nth-child(n+7) {background:#ffca45;box-shadow:0 0 3px #ffca4544}
.radio-face .audio-meter i.lit:nth-child(n+11) {background:#ff4e5b;box-shadow:0 0 3px #ff4e5b66}

.radio-face #audioMeterNote {
font-size:11px;
  color:#9cb6c5;
  line-height:1.5;
}

.fmo-online {
margin-top:18px;
  border-top:1px solid var(--line,#294154);
  padding-top:14px;
}

.fmo-online h3 {
display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
}

.fmo-online-users {
display:grid;
  grid-template-columns:repeat(auto-fit,minmax(140px,1fr));
  gap:8px;
  max-height:340px;
  overflow:auto;
}

.fmo-online-user {
display:grid;
  grid-template-columns:minmax(0,1fr) auto;
  gap:3px 8px;
  border:1px solid #294154;
  border-radius:8px;
  padding:9px 10px;
}

.fmo-online-user strong {
overflow-wrap:anywhere;
}

.fmo-online-user span {
grid-row:2;
  color:#8aafc6;
  font-size:12px;
}

.fmo-online-user i {
grid-column:2;
  grid-row:1/3;
  align-self:center;
  width:7px;
  height:7px;
  background:#43dfa4;
  border-radius:50%;
}

@media(max-width:520px) {
.fmo-online-users {
grid-template-columns:1fr;
}
}

.fmo-service-summary {
display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:.5rem;
  margin-bottom:1rem;
}

.fmo-service-summary>div {
min-width:0;
}

.fmo-connection-details {
border-top:1px solid var(--line);
  margin-top:.8rem;
  padding-top:.7rem;
}

.fmo-connection-details summary {
cursor:pointer;
  color:var(--muted);
}

@media(max-width:420px) {
.fmo-service-summary {
grid-template-columns:1fr;
}
}

.fmo-service-details {
margin-top:.8rem;
}

.fmo-service-details summary {
cursor:pointer;
  color:var(--muted);
}

.fmo-service-details[open] summary {
margin-bottom:.7rem;
}

.gps-card {
margin:18px 0;
}

.hero-grid>.gps-card {margin:0;}
.hero-grid>.gps-card:not(:fullscreen) .gps-layout {grid-template-columns:minmax(0,1fr);}
.hero-grid>.gps-card:not(:fullscreen) .gps-list {
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;max-height:180px;
}
.qa-card {margin:18px 0;}

.gps-layout {
display:grid;
  grid-template-columns:260px minmax(0,1fr);
  gap:16px;
}

.gps-layout input {
width:100%;
  padding:10px;
  background:#101e30;
  color:#e1f1ff;
  border:1px solid #34506c;
  border-radius:6px;
}

.gps-list {
max-height:360px;
  overflow:auto;
  margin-top:8px;
}

.gps-radio.fresh {
border-left:3px solid #20b8da;
}

.gps-radio.historical {
border-left:3px solid #8293a9;
}

.gps-radio small {
color:#9db3cb;
}

#gpsMap {
height:340px;
  border-radius:6px;
  z-index:0;
  background:#162a3b;
}

.gps-card:fullscreen {
padding:20px;
  background:#101e30;
  overflow:auto;
}

.gps-card:fullscreen #gpsMap {
height:70vh;
}

.leaflet-popup-content {
color:#172739;
}

.leaflet-container {
font-family:inherit;
}

@media(max-width:700px) {
.gps-layout {
grid-template-columns:1fr;
}

.gps-list {
max-height:160px;
}

#gpsMap {
height:300px;
}
}

.gps-card .card-head {
flex-wrap:wrap;
}

.gps-offline-tile {
background-color:#e7eef2;
  background-image:linear-gradient(#aabdc9 1px,transparent 1px),linear-gradient(90deg,#aabdc9 1px,transparent 1px);
  background-size:64px 64px;
  color:#425b70;
  font:11px sans-serif;
  padding:4px;
}

.gps-detail {
font-size:13px;
  line-height:1.7;
  min-height:70px;
  margin-top:12px;
  padding:14px;
  border:1px solid #30465b;
  border-radius:10px;
  background:#13263b;
}

.gps-address {
margin:6px 0 10px;
  color:#e1f1ff;
}

.gps-facts {
display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:6px 16px;
  color:#9db3cb;
  font-size:12px;
}

.gps-facts b {
font-weight:500;
  color:#e1f1ff;
}

.gps-radio {
display:flex;
  flex-direction:column;
  text-align:left;
  width:100%;
  gap:4px;
  padding:10px;
  background:#13263b;
  color:#e1f1ff;
  border:0;
  border-bottom:1px solid #30465b;
  cursor:pointer;
  border-radius:6px;
  margin-bottom:6px;
  line-height:1.6;
}

.gps-radio:hover {
background:#1a344b;
}

@media(max-width:700px) {
.gps-facts {
grid-template-columns:1fr;
}
}

.service-overview {
display:grid;
  grid-template-columns:190px minmax(0,1fr);
  gap:22px;
  align-items:center;
  margin-top:18px;
}

.service-overview-title p {
font-size:12px;
  line-height:1.7;
  color:var(--muted);
  margin:8px 0 0;
}

.service-overview-content {
min-width:0;
}

.service-overview .status-grid {
grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  gap:10px;
}

.service-overview .metric-grid {
grid-template-columns:repeat(auto-fit,minmax(130px,1fr));
  margin-top:10px;
}

.card-head h2[data-section]::before {
content:attr(data-section);
  display:inline-grid;
  place-items:center;
  width:27px;
  height:27px;
  margin-right:10px;
  background:#243752;
  color:#a3c7f8;
  border-radius:7px;
  font-size:11px;
  vertical-align:middle;
}

.qa-card {
display:flex;
  flex-direction:column;
}

.qa-card .qa-list {
flex:1;
  min-height:240px;
  overscroll-behavior:contain;
}

.network-card .fmo-online {
margin:0;
  padding:0;
  border:0;
}

.station-mini {
min-width:0;
  border:1px solid #334d61;
  background:#091c2b;
  border-radius:11px;
  padding:.7rem;
  display:flex;
  flex-direction:column;
  gap:.4rem;
  position:relative;
  overflow:hidden;
}

.station-mini::before {
content:"";
  position:absolute;
  inset:0 0 auto;
  height:3px;
  background:var(--station-accent,#7aa4d7);
}

.station-mini[data-site="s1"] {
--station-accent:#79aaff;
}

.station-mini[data-site="s2"] {
--station-accent:#baa0ed;
}

.station-mini[data-site="s3"] {
--station-accent:#71cecd;
}

.station-mini[data-site="s4"] {
--station-accent:#e6b574;
}

.station-mini[data-site="s5"] {
--station-accent:#dca4c7;
}

.station-mini .node-id {
color:var(--station-accent,#a3c7f8);
}

.qa-list,.gps-list,.fmo-online-users {
scrollbar-gutter:stable;
  overscroll-behavior:contain;
}

.button,button,input {
transition:background-color .12s,border-color .12s;
}

@media(min-width:1280px) {
.station-strip {
grid-template-columns:repeat(5,minmax(0,1fr));
}
}

@media(max-width:760px) {
.service-overview {
grid-template-columns:minmax(0,1fr);
    gap:16px;
}

.service-overview .status-grid,.service-overview .metric-grid {
grid-template-columns:repeat(2,minmax(0,1fr));
}

main {
padding:1rem;
}

.card {
padding:1rem;
    border-radius:14px;
}

.qa-card .qa-list {
min-height:0;
    max-height:24rem;
}
}

@media(prefers-reduced-motion:reduce) {
*,*::before,*::after {
transition:none!important;
    animation:none!important;
    scroll-behavior:auto!important;
}
}

/* Only the measured audio bar animates; data polling cadence is unchanged. */
.audio-meter{--audio-level:0;position:relative;isolation:isolate}
.audio-meter i{transition:none}

.radio-face .callsign.numeric-identity{font-size:clamp(1.2rem,2.1vw,2.2rem);letter-spacing:-.035em;white-space:nowrap;overflow-wrap:normal;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.voice-history-wrap{max-height:30rem;overflow:auto;scrollbar-gutter:stable}
.voice-history-table thead{position:sticky;top:0;z-index:1;background:#17344a}
.voice-history-table th:nth-child(1),#voiceRows td:nth-child(1){color:#9bb4ca;background:#263b4b22;font-variant-numeric:tabular-nums}
.voice-history-table th:nth-child(2),#voiceRows td:nth-child(2){color:#f2d58c}
.voice-history-table th:nth-child(3),#voiceRows td:nth-child(3){color:#b0c1e0;background:#26374d33;font-variant-numeric:tabular-nums}
.voice-history-table th:nth-child(4){color:#81dbd3}
.voice-history-table th:nth-child(5),#voiceRows td:nth-child(5){color:#9cd9ed;background:#153e4930}
.voice-history-table th:nth-child(6){color:#9de0d4}
#voiceRows td{border-right:1px solid #ffffff08}
#voiceRows tr:nth-child(even){background:#ffffff03}
#voiceRows tr:hover{background:#2c5e7855}
.history-site{color:#b2c9db}.history-site.s1{color:#87d3fb}.history-site.s2{color:#c4a7fa}.history-site.s3{color:#7ddccc}.history-site.s4{color:#ffc08b}.history-site.s5{color:#9be3b0}
.history-signal{color:#8198ad;white-space:nowrap}.history-signal.measured{color:#a2e4d9;font-variant-numeric:tabular-nums}

/* Link health and counters sit below the AI conversation. */
.qa-card .service-overview{display:block;padding:16px;margin-top:18px;box-shadow:none}
.qa-card .service-overview-title{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}
.qa-card .service-overview-title p{margin:0;font-size:11px}
.qa-card .service-overview .status-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.qa-card .service-overview .metric-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.qa-card .qa-list{flex:0 1 auto;max-height:28rem}
@media(max-width:760px){.qa-card .service-overview .status-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.qa-card .service-overview-title{display:block}.qa-card .service-overview-title p{margin-top:6px}}

.fmo-device-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:12px;align-items:start;margin-top:12px}
.fmo-device-card{min-width:0;padding:14px;border:1px solid #2b4258;border-radius:12px;background:#102132;overflow-wrap:anywhere}
.fmo-device-card.connected{border-top:3px solid #43dfa4}
.fmo-device-card.disconnected{border-top:3px solid #ee6678}
.fmo-device-card.unknown{border-top:3px solid #71879d}
.fmo-device-card header{display:flex;justify-content:space-between;align-items:start;gap:8px;margin-bottom:12px}
.fmo-device-card header strong{font-size:16px;display:block}
.fmo-device-card header div>span,.fmo-device-card small{display:block;font-size:11px;line-height:1.7;color:#9fb9d0}
.fmo-device-card header .pill{white-space:nowrap;font-size:10px}
.fmo-device-reasons{margin:8px 0}
.fmo-device-history{padding-top:8px;margin-top:8px;border-top:1px solid #294154}
.network-card .fmo-service-summary{margin:12px 0;grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}
@media(max-width:520px){.fmo-device-cards{grid-template-columns:minmax(0,1fr)}}

#fmoNetworkSummary:empty{display:none}.fmo-device-card{padding:12px}.fmo-device-reasons{margin:5px 0}.fmo-device-history{margin-top:6px;padding-top:6px}

/* Stable contact slots: changing identity or location never resizes the card. */
.radio-face .callsign,.radio-face .callsign.numeric-identity{font-size:clamp(1.5rem,2.4vw,3rem);height:64px;min-height:64px;line-height:64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.radio-face .phonetic{height:36px;min-height:36px;line-height:18px;overflow:hidden}
.radio-station-banner{height:64px;min-height:64px;max-height:64px;box-sizing:border-box;display:flex;align-items:center;padding:7px 10px;line-height:24px;overflow:hidden}
.radio-id strong{height:64px;line-height:64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#currentGrid{height:52px;line-height:26px;overflow:hidden}
#currentQth{height:72px;line-height:24px;overflow:hidden}
.radio-face #audioMeterNote{height:18px;line-height:18px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.radio-footer .truth-note{height:3.3em;min-height:3.3em;line-height:1.65;overflow:hidden}
@media(max-width:640px){.radio-face .callsign,.radio-face .callsign.numeric-identity{font-size:2rem}}
.radio-fact strong:not(#currentGrid){height:30px;line-height:30px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* Keep point selection and popup facts readable on either light or dark maps. */
.gps-map-marker {cursor:pointer;filter:drop-shadow(0 0 2px #fff) drop-shadow(0 1px 3px #25374a);}
.gps-map-marker:focus-visible {outline:3px solid #fff;outline-offset:3px;}
.gps-radio.is-selected {background:#244561;box-shadow:inset 0 0 0 2px #ffd16b;border-left-color:#ffbd2e;}
.gps-radio.is-selected small {color:#e0edfa;}
.gps-radio:focus-visible {outline:3px solid #ffd16b;outline-offset:1px;}
.gps-popup .leaflet-popup-content {margin:12px 16px;max-width:calc(100vw - 124px);line-height:1.5;}
.gps-popup-card {color:#172739;font-size:13px;line-height:1.5;overflow-wrap:anywhere;}
.gps-popup-title {display:block;font-size:13px;color:#102438;padding-right:12px;}
.gps-popup-card .gps-address,.gps-popup-card .gps-facts b {color:#172739;}
.gps-popup-card .gps-facts {grid-template-columns:repeat(2,minmax(0,1fr));color:#405269;gap:5px 10px;font-size:12px;}
#gpsMap .gps-popup a.leaflet-popup-close-button {color:#35475b;}
#gpsMap .gps-popup a.leaflet-popup-close-button:hover,#gpsMap .gps-popup a.leaflet-popup-close-button:focus-visible {color:#005f99;}
.gps-marker-tooltip {color:#172739;background:#fff;border-color:#526b81;font-weight:600;}
.gps-map-marker:hover {stroke:#fff;stroke-width:4px;}
.gps-amap-point {display:block;box-sizing:border-box;width:26px;height:26px;min-width:26px;min-height:26px;padding:0;border:3px solid #fff;border-radius:50%;background:#1687cf;box-shadow:0 0 0 2px #10263d,0 2px 5px #25374a;cursor:pointer;}
.gps-amap-point.historical {background:#94a3b8;}
.gps-amap-point.is-selected {background:#ff6b35;}
.gps-amap-point:focus-visible {outline:3px solid #ffd16b;outline-offset:4px;}

/* Static ramp geometry does not depend on CSP-blocked inline attributes. */
.radio-face .audio-meter i:nth-child(1){height:10px}
.radio-face .audio-meter i:nth-child(2){height:12px}
.radio-face .audio-meter i:nth-child(3){height:14px}
.radio-face .audio-meter i:nth-child(4){height:16px}
.radio-face .audio-meter i:nth-child(5){height:18px}
.radio-face .audio-meter i:nth-child(6){height:20px}
.radio-face .audio-meter i:nth-child(7){height:22px}
.radio-face .audio-meter i:nth-child(8){height:24px}
.radio-face .audio-meter i:nth-child(9){height:26px}
.radio-face .audio-meter i:nth-child(10){height:28px}
.radio-face .audio-meter i:nth-child(11){height:30px}
.radio-face .audio-meter i:nth-child(12){height:32px}

/* One intelligence window: the answer leads, network facts stay secondary. */
.intelligence-window{margin:18px 0;padding:0;overflow:visible;background:radial-gradient(ellipse at 5% 0%,#143952 0,transparent 48%),#101e30;border-color:#2c4b64}
.intelligence-grid{display:grid;grid-template-columns:minmax(0,1.8fr) minmax(320px,1fr);min-height:510px}
.ai-primary{padding:28px;min-width:0;border-right:1px solid #2a4156;display:flex;flex-direction:column;margin:0}
.ai-primary .section-label{color:#53deff;letter-spacing:.14em}.ai-primary h2{font-size:23px}.ai-primary .card-head{margin-bottom:22px}
.intelligence-window .qa-list{max-height:none;overflow:visible;flex:1}.intelligence-window .qa-row{border:0;background:transparent;padding:0;margin:0}
.intelligence-window .qa-meta{display:flex;flex-wrap:wrap;gap:10px;color:#83b4ce;font-size:12px;margin-bottom:20px}.intelligence-window .qa-meta i{font-style:normal}
.intelligence-window .q{font-size:16px;color:#b5cada;margin-bottom:20px;line-height:1.8}.intelligence-window .a{font-size:19px;line-height:1.95;color:#e2f8ff;white-space:pre-wrap;overflow-wrap:anywhere;padding:22px;background:#15324766;border:1px solid #3a718255;border-radius:14px;box-shadow:inset 3px 0 #3cdbd4}
.intelligence-window .q b,.intelligence-window .a b{display:block;margin-bottom:7px;font-size:11px;letter-spacing:.14em;color:#6de5d8}
.hub-secondary{min-width:0;padding:20px}.hub-tabs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:5px;padding:5px;background:#091727;border:1px solid #294157;border-radius:12px;margin-bottom:18px}
.hub-tab{background:transparent;border:0;border-radius:8px;padding:10px 4px;color:#99b7ce;font:inherit;font-size:12px;cursor:pointer}.hub-tab[aria-selected=true]{background:#1d4157;color:#baf8ff;box-shadow:inset 0 0 0 1px #3d7f93}.hub-tab:focus-visible{outline:2px solid #78edff;outline-offset:2px}
.hub-secondary [hidden]{display:none!important}.hub-secondary .card{padding:0;margin:0;background:transparent;border:0;box-shadow:none}.hub-secondary .card-head{margin-bottom:14px}.hub-secondary h2{font-size:15px}.hub-secondary .section-label{font-size:10px}
.hub-secondary .table-wrap{max-height:none;overflow:visible}.hub-secondary table{font-size:11px}.hub-secondary th,.hub-secondary td{padding:9px 5px;white-space:normal;overflow-wrap:anywhere}
.hub-secondary .fmo-device-cards{grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:auto;gap:9px}.hub-secondary .fmo-device-card{height:auto;min-height:73px;padding:12px;display:block;overflow:visible;border-top:0;border-color:#28465b;background:#12283a}.hub-secondary .fmo-device-card header{margin:0;min-height:0;max-height:none}.hub-secondary .fmo-device-card strong{font-size:15px}.hub-secondary .fmo-device-card header div>span{font-size:10px;color:#86a4b9;margin-top:5px}.presence-dot{width:7px;height:7px;border-radius:50%;background:#59e4b0;box-shadow:0 0 8px #59e4b055;flex-shrink:0;margin-top:5px}
.hub-secondary .fmo-service-summary{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.hub-secondary .fmo-service-summary>div{padding:8px;font-size:11px}.hub-secondary .service-overview-title p{font-size:11px;color:#9bb5cc}.hub-secondary .status-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.hub-secondary .metric-grid{grid-template-columns:repeat(2,minmax(0,1fr));margin-top:12px}.hub-secondary .metric-grid strong{font-size:22px}
.hub-pager{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:22px;color:#8aaec4;font-size:11px}.hub-pager .button{font-size:11px;padding:8px 12px}.hub-pager button:disabled{opacity:.35;cursor:default}
@media(max-width:1000px){.intelligence-grid{grid-template-columns:minmax(0,1fr)}.ai-primary{border-right:0;border-bottom:1px solid #2a4156;padding:22px}.hub-secondary{padding:20px}.intelligence-window .a{font-size:17px}.hub-secondary .fmo-device-cards{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:560px){.hub-secondary .fmo-device-cards{grid-template-columns:repeat(2,minmax(0,1fr))}.ai-primary{padding:17px}.intelligence-window .a{padding:16px;font-size:16px}.hub-tab{font-size:11px}.hub-secondary{padding:16px}}

/* Field review: three answers, permanent central links and top counters. */
.intelligence-grid{grid-template-columns:minmax(0,1.7fr) minmax(145px,.42fr) minmax(280px,1fr);min-height:0;align-items:start}
.hub-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:0;padding:16px 22px;border-bottom:1px solid #2a4156}
.hub-metrics .metric{padding:10px 14px}.hub-metrics strong{font-size:22px}
.ai-primary{padding:22px;border-right:0}.ai-primary .card-head{margin-bottom:16px}.intelligence-window .qa-list{flex:none}
.intelligence-window .qa-row{padding:0 0 16px;margin:0 0 16px;border-bottom:1px solid #2a4156}
.intelligence-window .qa-meta{margin-bottom:9px;gap:7px}.intelligence-window .q{font-size:14px;margin:5px 0 8px;line-height:1.5}
.intelligence-window .a{font-size:16px;line-height:1.65;padding:13px 15px;margin:0;border-radius:10px}
.intelligence-window .q b{display:inline;margin-right:9px}.intelligence-window .a b{margin-bottom:3px}
.hub-links{padding:22px 12px;min-width:0;border-left:1px solid #2a4156;border-right:1px solid #2a4156;align-self:stretch}
.hub-links .service-overview{display:block;padding:0;margin:0;border:0;background:transparent}.hub-links .service-overview-title{display:block}.hub-links .service-overview-title p{font-size:10px;line-height:1.5}.hub-links .service-overview-content{display:block}
.hub-links .status-grid{display:grid;grid-template-columns:1fr;gap:10px}.hub-links .status-card{min-width:0;padding:11px 9px}.hub-links .status-card p{font-size:10px;overflow-wrap:anywhere}.hub-links .status-card strong{font-size:12px}
.hub-tabs{grid-template-columns:repeat(3,minmax(0,1fr))}.hub-pager{margin-top:14px}
@media(max-width:1100px){.intelligence-grid{grid-template-columns:minmax(0,1fr) 160px}.hub-secondary{grid-column:1/-1;border-top:1px solid #2a4156}.hub-secondary .fmo-device-cards{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:620px){.intelligence-grid{grid-template-columns:minmax(0,1fr)}.hub-links{border:0;border-top:1px solid #2a4156;padding:16px}.hub-links .status-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.hub-secondary{grid-column:auto}.hub-metrics{grid-template-columns:repeat(2,minmax(0,1fr));padding:12px;gap:7px}.hub-secondary .fmo-device-cards{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* Readability and short, explicitly dark disconnect retention. */
.intelligence-window .q{font-size:17px;line-height:1.65}.intelligence-window .a{font-size:19px;line-height:1.75}
.intelligence-window .q b,.intelligence-window .a b{font-size:16px;font-weight:800;color:#7bf1e4}
.hub-secondary .fmo-device-card.disconnected{background:#111e2b;border-color:#344453;color:#91a2b0}.hub-secondary .fmo-device-card.disconnected strong{color:#91a2b0}
.hub-secondary .disconnected .presence-dot{background:#44515e;box-shadow:none;opacity:.65}
.hub-links .status-item>span{font-size:0;flex-shrink:0;width:10px;height:10px;margin-top:4px;border-radius:50%;background:#536475;box-shadow:none}
.hub-links .status-item.good>span{background:#55dfac;box-shadow:0 0 8px #55dfac66}.hub-links .status-item.bad>span{background:#f6747d;box-shadow:0 0 7px #f6747d44}.hub-links .status-item.warn>span{background:#edc263}
@media(max-width:620px){.intelligence-window .q{font-size:16px}.intelligence-window .a{font-size:18px}}

/* Fleet map leads the right column; compact selectors and facts leave room. */
.hero-grid>.gps-card:not(:fullscreen){display:flex;flex-direction:column;min-width:0}
.hero-grid>.gps-card:not(:fullscreen) .gps-layout{display:flex;flex-direction:column;gap:12px;flex:1;min-height:0}
.hero-grid>.gps-card:not(:fullscreen) .gps-layout>div{display:flex;flex-direction:column;flex:1;min-width:0;min-height:0}
.hero-grid>.gps-card:not(:fullscreen) .gps-layout>aside{flex-shrink:0}
.hero-grid>.gps-card:not(:fullscreen) .gps-list{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));max-height:none;overflow:visible;gap:7px;margin-top:7px}
.hero-grid>.gps-card:not(:fullscreen) .gps-radio{min-width:0;min-height:44px;padding:7px 9px;gap:3px}
.hero-grid>.gps-card:not(:fullscreen) .gps-radio b{font-size:12px}
.hero-grid>.gps-card:not(:fullscreen) .gps-radio small{font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%}
.hero-grid>.gps-card:not(:fullscreen) #gpsSearch{padding:8px 10px;font-size:12px}
.hero-grid>.gps-card:not(:fullscreen) #gpsMap{flex:1;min-height:460px;height:clamp(460px,56vh,740px)}
.hero-grid>.gps-card:not(:fullscreen) .gps-detail{flex-shrink:0;min-height:0;margin-top:8px;padding:9px 11px;font-size:12px;line-height:1.5}
.hero-grid>.gps-card:not(:fullscreen) .gps-address{margin:4px 0 6px}
.hero-grid>.gps-card:not(:fullscreen) .gps-facts{gap:4px 10px;font-size:11px}
@media(max-width:700px){.hero-grid>.gps-card:not(:fullscreen) #gpsMap{flex:none;min-height:360px;height:52vh;max-height:560px}.hero-grid>.gps-card:not(:fullscreen) .gps-list{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* All current users stay in one searchable, flowing list. */
.fmo-user-search{width:100%;min-width:0;border:1px solid #34506c;border-radius:7px;background:#101e30;color:#e1f1ff;padding:8px 10px;margin:2px 0 10px;font:inherit;font-size:12px}
.hub-secondary .fmo-device-cards{grid-template-columns:repeat(auto-fit,minmax(115px,1fr));gap:7px}
.hub-secondary .fmo-device-card{min-height:48px;padding:8px 10px}.hub-secondary .fmo-device-card strong{font-size:13px}
#gpsMap .amap-info-content{max-width:calc(100vw - 80px);overflow:visible;color:#203449}
#gpsMap .amap-info-content .gps-popup-card{width:280px;max-width:100%;font-size:12px;line-height:1.5;color:#203449}
#gpsMap .amap-info-content .gps-address{color:#203449;margin:5px 0 8px}#gpsMap .amap-info-content .gps-facts{color:#526679;font-size:11px;gap:5px 10px}#gpsMap .amap-info-content .gps-facts b{color:#203449}

/* Compact connection facts remain visible, without per-device scrolling. */
.hub-secondary .fmo-device-cards { grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); gap:8px; }
.fmo-client-facts { display:grid;grid-template-columns:1fr 1fr;gap:4px 8px;margin-top:7px;font-size:11px;color:var(--muted); }
.fmo-client-facts b { font-weight:500;color:var(--text); }
.fmo-client-profile { grid-column:1/-1;overflow-wrap:anywhere; }
@media(max-width:640px) {
 .voice-history-wrap { overflow:auto!important; max-height:22rem!important;border:1px solid var(--line)!important; }
 .voice-history-table { display:table!important;table-layout:fixed;width:100%;font-size:10px; }
 .voice-history-table thead { display:table-header-group;position:sticky;width:auto;height:auto;clip-path:none; }
 .voice-history-table tbody { display:table-row-group;width:auto; }
 .voice-history-table tr { display:table-row;padding:0;margin:0;border:0; }
 .voice-history-table th,.voice-history-table td { display:table-cell;padding:6px 3px;white-space:normal;overflow-wrap:anywhere;vertical-align:top; }
 .voice-history-table td::before { content:none;display:none; }
 .voice-history-table th:nth-child(1){width:13%}.voice-history-table th:nth-child(2){width:15%}.voice-history-table th:nth-child(3){width:16%}.voice-history-table th:nth-child(4){width:26%}.voice-history-table th:nth-child(5){width:17%}.voice-history-table th:nth-child(6){width:13%}
 .contact-evidence { margin:7px 0;padding:7px 9px;font-size:12px; }
 .hub-secondary .fmo-device-cards { grid-template-columns:repeat(2,minmax(0,1fr)); }
}

.gps-radio-heading{display:flex;align-items:baseline;justify-content:space-between;gap:6px;flex-wrap:wrap;width:100%;min-width:0}.gps-radio-heading b{overflow-wrap:anywhere}.gps-radio .gps-radio-callsign{color:#71e2f4;font-weight:700}

/* A bounded second-slot view; never overlays the primary caller or map. */
.monitor-controls{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem;margin:.5rem 0 .75rem}.monitor-controls select{width:auto;max-width:100%;min-width:0}.monitor-controls small{color:var(--muted);overflow-wrap:anywhere}

/* Shared listening controls, equal independent slot panels. */
.contact-slots{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;align-items:stretch}
.contact-slots .radio-face{min-width:0;margin:0;padding:14px;display:flex;flex-direction:column}
.slot-title{display:flex;align-items:center;justify-content:space-between;gap:8px;color:#50ddff;margin-bottom:10px}
.contact-slots .radio-statusbar{display:grid;gap:5px;min-height:68px;padding-bottom:10px}
.contact-slots .radio-route{flex-wrap:wrap;gap:6px;min-width:0}
.contact-slots .radio-statusbar p{font-size:10px;white-space:normal;overflow-wrap:anywhere}
.contact-slots .radio-face-grid{display:flex;flex-direction:column;gap:12px}
.contact-slots .radio-face .callsign,.contact-slots .radio-face .callsign.numeric-identity{height:44px;min-height:44px;line-height:44px;font-size:clamp(1.3rem,2vw,2.5rem)}
.contact-slots .radio-face .phonetic{height:36px;font-size:10px}
.contact-slots .radio-reception{margin-top:6px;gap:10px}
.contact-slots .radio-fact strong{font-size:14px;overflow-wrap:anywhere}
.contact-slots .radio-id strong{font-size:clamp(1.5rem,2.4vw,2.4rem);line-height:1.25;overflow-wrap:anywhere}
.contact-slots .radio-station-banner{height:auto;min-height:44px;max-height:none;line-height:20px;font-size:16px;overflow-wrap:anywhere}
.contact-slots .radio-location strong{font-size:12px;line-height:1.6;overflow-wrap:anywhere}
.contact-slots .radio-footer{margin-top:auto;padding-top:12px;min-height:0}
.contact-slots .radio-footer .truth-note{height:auto;min-height:3.3em;font-size:10px}
.slot-evidence{font-size:10px;color:var(--muted);overflow-wrap:anywhere;padding-top:8px}
@media(max-width:600px){.contact-slots{grid-template-columns:1fr}.contact-slots .radio-face-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.contact-slots .radio-face{padding:12px}.contact-slots .radio-face .callsign{font-size:1.4rem}.contact-slots .radio-statusbar{min-height:0}}
.contact-slots .radio-id strong{height:44px;line-height:44px}
.contact-slots #currentGrid,.contact-slots #ts2Grid{height:40px;line-height:20px;overflow:hidden}
.contact-slots #currentQth,.contact-slots #ts2Qth{height:60px;line-height:20px;overflow:hidden}
.contact-slots #audioMeterNote,.contact-slots #ts2AudioMeterNote{display:block;height:18px;line-height:18px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.contact-slots .radio-station-banner{margin-bottom:8px}
.contact-slots .radio-station{padding-top:6px}
.current-card{container-type:inline-size;container-name:contact-panel}
@container contact-panel (min-width:760px){.contact-slots .radio-face-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.contact-slots .radio-face .callsign{font-size:clamp(1.15rem,3.8cqw,2rem)}}

/* Shared receive/transmit console; retains the two independent call panels. */
.voice-console{margin:12px 0 16px;padding:14px 16px;border:1px solid #284158;border-radius:14px;background:linear-gradient(110deg,rgba(37,113,141,.09),rgba(8,22,37,.65));min-width:0}
.voice-console svg{width:18px;height:18px;flex-shrink:0;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.voice-console .monitor-controls{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:0;padding:0 0 12px;border-bottom:1px solid rgba(117,154,182,.16)}
.voice-control-caption{display:inline-flex;align-items:center;gap:7px;margin-right:2px;color:#b3cbdd;font-size:12px;font-weight:650;white-space:nowrap}
.voice-console select,.voice-console input:not([type=checkbox]){height:42px;min-width:0;width:100%;border:1px solid #304a61;border-radius:9px;background-color:#0c1c2e;color:#e2f0fa;font:inherit;font-size:14px;padding:0 12px;box-shadow:inset 0 1px 2px rgba(0,0,0,.12);transition:border-color .15s,background-color .15s}
.voice-console select{appearance:none;-webkit-appearance:none;padding-right:30px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='m1 1 5 5 5-5' fill='none' stroke='%2399b8cf' stroke-width='1.6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 11px center}
.voice-console input[type=number]{appearance:textfield;-moz-appearance:textfield;font-variant-numeric:tabular-nums;letter-spacing:.04em}
.voice-console input::-webkit-inner-spin-button,.voice-console input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
.voice-console select:focus,.voice-console input:focus{outline:none;border-color:#4dd5ed;box-shadow:0 0 0 3px rgba(77,213,237,.1)}
.voice-console select:disabled,.voice-console input:disabled{color:#8ea8bb;background-color:#122235}
.voice-console .monitor-controls select{flex:0 1 225px;width:225px;max-width:100%}
.voice-console #monitorToggle{min-height:42px;padding:0 16px;border-color:#355368;background:#183346;color:#c7eef5;border-radius:9px;font-size:13px;white-space:nowrap}
.voice-console #monitorStatus{flex:1 1 150px;margin:0;color:#8daec4;font-size:11px;line-height:1.5}
.voice-console .web-ptt-controls{display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px;margin:12px 0 0}
.voice-route-fields{display:grid;grid-template-columns:minmax(64px,.8fr) minmax(64px,.8fr) minmax(80px,1fr) minmax(108px,1.35fr);gap:10px;flex:1 1 385px;min-width:0}
.voice-route-fields label{display:grid;gap:6px;min-width:0;color:#93b0c7;font-size:11px;letter-spacing:.02em}
.voice-transmit-actions{display:flex;align-items:center;gap:12px;flex:1 1 235px;min-width:0}
.voice-console #pttHold{display:inline-flex;justify-content:center;align-items:center;gap:8px;flex:1 1 auto;height:44px;min-height:44px;min-width:138px;border:1px solid #65d7ee;border-radius:10px;background:linear-gradient(145deg,#44d1e8,#25b7d7);color:#042337;padding:0 16px;font-size:13px;font-weight:750;box-shadow:0 3px 12px rgba(20,170,202,.1);touch-action:none;user-select:none;-webkit-user-select:none;white-space:nowrap}
.voice-console #pttHold:disabled{background:#1a2c3e;border-color:#30475b;color:#7f9caf;box-shadow:none;cursor:not-allowed;opacity:1}
.voice-console #pttHold.ptt-held{background:linear-gradient(145deg,#ed6872,#d64054);border-color:#ff9ca5;color:#fff;box-shadow:0 0 0 3px rgba(235,89,110,.12)}
.voice-auth{display:inline-flex;align-items:center;justify-content:center;gap:5px;height:42px;padding:0 2px;color:#a9c2d6;text-decoration:none;font-size:12px;white-space:nowrap;border-radius:7px}
.voice-auth:hover{color:#65def0}.voice-auth svg{width:15px;height:15px}
.voice-console #pttStatus{display:flex;align-items:center;gap:6px;flex-basis:100%;color:#8da8bd;font-size:11px;line-height:1.5;overflow-wrap:anywhere;margin:0}
.voice-console #pttStatus::before{content:'';width:5px;height:5px;flex-shrink:0;border-radius:50%;background:#627d94}
.voice-console #pttStatus[data-state=ready]::before{background:#50d2a3}
.voice-console #pttStatus[data-state=active]::before{background:#f28b92}
.voice-console #pttStatus[data-state=error]{color:#eab786}.voice-console #pttStatus[data-state=error]::before{background:#e4ab70}
@media(max-width:600px){.voice-console{padding:12px}.voice-control-caption{display:none}.voice-console .monitor-controls select{flex:1 1 150px;width:auto}.voice-console #monitorStatus{flex-basis:100%}.voice-route-fields{grid-template-columns:repeat(2,minmax(0,1fr));flex-basis:100%;gap:9px 12px}.voice-transmit-actions{flex-basis:100%}.voice-console #pttHold{height:46px}.voice-auth{padding:0 6px}}
@media(pointer:coarse){.voice-console select,.voice-console input:not([type=checkbox]){font-size:16px}}

.login-password-field{display:flex;gap:8px}.login-password-field input{flex:1;min-width:0}.login-password-toggle{flex-shrink:0;min-width:58px;border:1px solid #34516a;border-radius:8px;background:#17354a;color:#bcefff;cursor:pointer}

/* Audio processing controls stay independent from routing and PTT actions. */
.voice-options{display:flex;flex-wrap:wrap;gap:8px 24px;margin-top:14px;padding-top:12px;border-top:1px solid #243d51}
.voice-option{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;min-width:0;max-width:100%}
.voice-option small{font-size:11px;color:#8da8bd;line-height:1.4;overflow-wrap:anywhere}
.voice-switch{position:relative;display:inline-flex;align-items:center;gap:8px;min-height:36px;color:#b9d1e2;font-size:12px;white-space:nowrap;cursor:pointer;touch-action:manipulation}
.voice-console .voice-switch input[type=checkbox]{position:absolute;opacity:0;width:36px;height:24px;min-width:0;padding:0;margin:0;inset-inline-start:0;cursor:pointer}
.voice-switch-track{display:inline-block;flex:0 0 32px;width:32px;height:18px;position:relative;border:1px solid #426078;border-radius:999px;background:#1c3348;box-sizing:border-box;transition:background .15s,border-color .15s}
.voice-switch-track::after{content:'';position:absolute;left:3px;top:3px;width:10px;height:10px;border-radius:50%;background:#a4bed0;transition:transform .15s,background .15s}
.voice-switch input:checked+.voice-switch-track{background:#116a80;border-color:#35c7e1}
.voice-switch input:checked+.voice-switch-track::after{transform:translateX(14px);background:#e9fcff}
.voice-switch input:focus-visible+.voice-switch-track{outline:2px solid #71e4f4;outline-offset:3px}
.voice-switch input:disabled~span{opacity:.5;cursor:not-allowed}
@media(max-width:600px){.voice-options{gap:4px 18px}.voice-option{flex:1 1 190px}.voice-switch{min-height:40px}}
@media(prefers-reduced-motion:reduce){.voice-switch-track,.voice-switch-track::after{transition:none}}

/* AI has separate RF and FMO identities; both stay readable without changing human cards. */
.contact-slots .radio-id strong.ai-identity{height:auto;min-height:44px;max-height:none;font-size:clamp(.78rem,1.35vw,1rem);line-height:1.5;white-space:pre-line;overflow:visible;text-overflow:clip;overflow-wrap:anywhere;letter-spacing:0}
.contact-slots .radio-face.ai-transmission .radio-reception{display:none}
.contact-slots .ai-output-note{font-size:11px;line-height:1.6;color:var(--radio-dim);margin:8px 0;white-space:normal;overflow-wrap:anywhere}
