/* Client-RX coverage styles (fork-only feature). Kept in a DEDICATED file — separate from node-reach.css — so upstream's periodic node-reach.css rewrites don't drop the coverage tier colours + leaderboard layout (as happened in the v3.9.0 merge). Consumed by rx-coverage.js (standalone Coverage dashboard) and, once re-grafted, the per-node Reach page coverage overlay. */ /* RX coverage hex layer (mobile client receptions) */ :root { --nq-cov-strong: #2ecc71; /* SF8: SNR ≥ −5 dB (good margin) */ --nq-cov-mid: #e67e22; /* SF8: −9..−5 dB (near the limit) */ --nq-cov-weak: #e74c3c; /* SF8: < −9 dB (poor, packet loss likely) */ --nq-cov-grey: #95a5a6; /* heard, no SNR metric */ } /* Dark-theme variants: the saturated mid-luminance defaults glare on dark basemaps. Mirrors the rest of the dashboard's theme-aware tokens (#polish). */ [data-theme="dark"] { --nq-cov-strong: #3fb950; --nq-cov-mid: #d29922; --nq-cov-weak: #f85149; --nq-cov-grey: #8b949e; } .nq-cov-legend { display:flex; gap:12px; align-items:center; font-size:11px; color:var(--text-muted, #57606a); margin:4px 0 10px; } /* Toggled by node-reach.js applyCoverage via class, not inline style, so CSS (print rules, themes) can still override visibility (#19). */ .nq-cov-legend.is-hidden { display:none !important; } .nq-cov-legend i { width:12px; height:12px; border-radius:2px; display:inline-block; margin-right:4px; vertical-align:middle; } /* Mobile RX coverage hub — leaderboard */ .rxb { display:flex; flex-direction:column; gap:3px; } .rxb-row { display:flex; align-items:center; gap:10px; padding:7px 10px; background:var(--section-bg, #f6f8fa); border:1px solid var(--border, #d0d7de); border-radius:6px; font-size:13px; cursor:pointer; } .rxb-row.rxb-head { font-size:10px; text-transform:uppercase; color:var(--text-muted, #57606a); cursor:default; } .rxb-row.sel { outline:2px solid var(--accent, #2ecc71); } /* Visible keyboard focus for the now-focusable (#polish) leaderboard rows. */ .rxb-row[data-rx]:focus-visible { outline:2px solid var(--link, #0969da); outline-offset:1px; } .rxb-rank { width:24px; text-align:right; color:var(--text-muted, #57606a); } .rxb-name { flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; } .rxb-rec, .rxb-nodes, .rxb-cells, .rxb-score { width:56px; text-align:right; font-variant-numeric:tabular-nums; } /* Sortable column headers in the leaderboard head row. */ .rxb-head .rxb-sort { cursor:pointer; user-select:none; } .rxb-head .rxb-sort:hover { color:var(--link, #0969da); } .rxb-head .rxb-sort:focus-visible { outline:2px solid var(--link, #0969da); outline-offset:1px; }