/* Public Sans (U.S. Web Design System, v2.001; SIL Open Font License, see THIRD_PARTY_NOTICES.md), shipped with the
   Desk since 1.19.2: until then it was named here but never loaded, so every machine showed its own system font */
@font-face { font-family: "Public Sans"; src: url("fonts/PublicSans-Regular.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; }
@font-face { font-family: "Public Sans"; src: url("fonts/PublicSans-Italic.woff2") format("woff2"); font-weight: 400; font-style: italic; font-display: swap; }
@font-face { font-family: "Public Sans"; src: url("fonts/PublicSans-SemiBold.woff2") format("woff2"); font-weight: 600; font-style: normal; font-display: swap; }
@font-face { font-family: "Public Sans"; src: url("fonts/PublicSans-Bold.woff2") format("woff2"); font-weight: 700; font-style: normal; font-display: swap; }
@font-face { font-family: "Public Sans"; src: url("fonts/PublicSans-ExtraBold.woff2") format("woff2"); font-weight: 700; font-style: normal; font-display: swap; }

/* Tokens (1.19.2). Colours of results are defined here once; app/dashboard.py draws the Overview's charts with the same
   values (tests/test_design_tokens.py keeps them equal). The CUI purple marks CUI and nothing else. Workflow statuses
   are not results: they get ordered cobalt tints, not result colours. Type: six sizes; weight 800 only for the page
   title, the verdict and the CUI banner. */
:root {
  --paper: #f2f4f3;
  --surface: #ffffff;
  --ink: #172430;
  --muted: #56656f;
  --rule: #ccd4d6;
  --cobalt: #1d4e9e;
  /* results: -mark for marks (chart fills, edge bars, chip edges; validated together with the dataviz palette checker,
     all pairs: colour-blind dE >= 14.9, normal vision >= 18.6), the plain name for text (>= 4.5:1), -bg for tints */
  --issue: #a11736;   --issue-mark: #a11736;   --issue-bg: #f7e4e8;
  --conflict: #a54a0c; --conflict-mark: #cb6620; --conflict-bg: #fbe9dc;
  --review: #6e5a00;  --review-mark: #d4b122;  --review-bg: #f8f0cf;
  --clear: #1f5f99;   --clear-mark: #2a75ba;   --clear-bg: #e2edf7;
  --pending: #5d6b75; --pending-mark: #8a8f93; --pending-bg: #e7eaec;
  --ras: #7b8a93;
  --cui: #502b85;
  --st-new: #1d4e9e; --st-review: #5f84c2; --st-nsf: #819ed0; --st-coordinating: #a3b9de; --st-closed: #c9d0d4;
  --fs-small: .8rem; --fs-meta: .9rem; --fs-body: 1rem; --fs-h2: 1.25rem; --fs-big: 1.6rem; --fs-h1: 2.1rem;
  --radius: 4px;
  font-family: "Public Sans", "Segoe UI", system-ui, -apple-system, sans-serif;
  font-size: 15px;
  line-height: 1.5;
  color: var(--ink);
  background: var(--paper);
  font-variant-numeric: tabular-nums;
}
* { box-sizing: border-box; }
body { margin: 0; }
a { color: var(--cobalt); }
a:hover { text-decoration-thickness: 2px; }
:focus-visible { outline: 3px solid var(--cobalt); outline-offset: 2px; }
h1, h2, h3 { line-height: 1.2; margin: 0 0 .5rem; }
h1 { font-size: var(--fs-h1); font-weight: 800; letter-spacing: -.01em; }
h2 { font-size: var(--fs-h2); font-weight: 700; }
h3 { font-size: var(--fs-body); font-weight: 600; }
small { display: block; color: var(--muted); font-size: var(--fs-small); }
.muted { color: var(--muted); }

/* -------- chrome */
.topbar { display: flex; align-items: baseline; gap: 2rem; padding: .9rem clamp(1rem, 3vw, 2.5rem);
  background: var(--ink); color: #fff; flex-wrap: wrap; }
.brand { color: #fff; font-weight: 700; text-decoration: none; font-size: var(--fs-body); }
.topbar:has(.apps) { gap: 1rem 1.75rem; }
.topbar nav { display: flex; flex-wrap: wrap; align-items: baseline; gap: .4rem 1.25rem; }
/* drop-down menus in the top bar: the tool switcher (with plugins) and Administration */
.menu { position: relative; }
.menu > summary { list-style: none; cursor: pointer; color: #c8d3dc; padding-bottom: 2px; white-space: nowrap; }
.menu > summary::-webkit-details-marker { display: none; }
.menu > summary::after { content: ""; display: inline-block; margin-left: .4em; vertical-align: .2em;
  border: .3em solid transparent; border-top-color: currentColor; border-bottom-width: 0; }
.menu[open] > summary::after { border-top-width: 0; border-bottom: .3em solid currentColor; }
.menu > summary:hover, .menu[open] > summary { color: #fff; }
.menu > summary.is-current { color: #fff; border-bottom: 2px solid #fff; }
.menu > summary:focus-visible { outline: 2px solid #fff; outline-offset: 3px; border-radius: 2px; }
.menu.apps > summary { color: #fff; }
.menu-panel { position: absolute; left: 0; top: calc(100% + .55rem); z-index: 2000; min-width: 13rem; display: flex;
  flex-direction: column; padding: .3rem 0; background: var(--surface); border: 1px solid var(--rule); border-radius: 4px;
  box-shadow: 0 8px 24px rgba(23, 36, 48, .18); }
.menu-panel.to-left { left: auto; right: 0; }
.topbar .menu-panel a { color: var(--ink); text-decoration: none; padding: .45rem 1rem .45rem 1.6rem; border: 0;
  font-weight: 400; font-size: var(--fs-meta); white-space: nowrap; }
.topbar .menu-panel a:hover, .topbar .menu-panel a:focus-visible { background: var(--paper); outline: none; }
.topbar .menu-panel a[aria-current] { color: var(--ink); border: 0; font-weight: 700; position: relative; }
.topbar .menu-panel a[aria-current]::before { content: ""; position: absolute; left: .7rem; top: .45rem; bottom: .45rem;
  width: 3px; border-radius: 2px; background: var(--cobalt); }
.topbar nav a { color: #c8d3dc; text-decoration: none; padding-bottom: 2px; }
.topbar nav a[aria-current] { color: #fff; border-bottom: 2px solid #fff; }
main { padding: 1.5rem clamp(1rem, 2.5vw, 3.5rem) 4rem; max-width: 1400px; }
main.wide { max-width: none; }   /* data pages: as wide as the window (1.19.1); prose inside keeps its ch caps */
.flash { background: var(--surface); border-left: 4px solid var(--cobalt); padding: .6rem 1rem; margin: 0 0 1rem; }
.lede { max-width: 70ch; color: var(--muted); }
.hint { color: var(--muted); max-width: 75ch; margin: 0 0 .75rem; font-size: var(--fs-meta); }
.empty { background: var(--surface); padding: 1.25rem; border: 1px dashed var(--rule); max-width: 75ch; }

/* -------- controls */
button { font: inherit; font-weight: 600; background: var(--cobalt); color: #fff; border: 0;
  border-radius: var(--radius); padding: .5rem 1rem; cursor: pointer; }
button:hover { filter: brightness(1.1); }
button.secondary { background: var(--surface); color: var(--cobalt); border: 1px solid var(--cobalt); }
button.danger { background: transparent; color: var(--issue-mark); border: 1px solid var(--issue-mark); }
.bulk-delete { display: flex; gap: .75rem; align-items: center; flex-wrap: wrap; margin: 1.25rem 0 0; }
.bulk-delete small { color: var(--muted); max-width: 48rem; }
.delete-list { columns: 2 18rem; margin: .5rem 0 1rem; }
button.small { padding: .25rem .6rem; font-size: var(--fs-small); }
input, select, textarea { font: inherit; color: var(--ink); background: var(--surface);
  border: 1px solid var(--rule); border-radius: var(--radius); padding: .4rem .55rem; max-width: 100%; }
textarea { width: 100%; resize: vertical; }
label { display: block; font-weight: 600; font-size: var(--fs-meta); margin-bottom: .8rem; }
label > input, label > select, label > textarea { display: block; width: 100%; margin-top: .25rem; font-weight: 400; }
label.check { display: flex; gap: .5rem; align-items: flex-start; font-weight: 400; }
label.check input { width: auto; margin-top: .3rem; }

/* -------- results (1.19.2): every result reads the same wherever it is shown. Its class sets the mark colour, the tint
   and the shape the charts use (▲ RAS conflict, ■ receiver conflict, ◆ needs review, ● clear, ○ nothing yet); chips are
   the tint with the mark as an edge and dark text, so colour never carries the meaning alone */
.v-issue, .det-objection, .s2-exceed, .s2-error, .s2res-exc { --mark: var(--issue-mark); --tint: var(--issue-bg); --shape: "▲"; }
.v-conflict { --mark: var(--conflict-mark); --tint: var(--conflict-bg); --shape: "■"; }
.v-review, .det-conditions { --mark: var(--review-mark); --tint: var(--review-bg); --shape: "◆"; }
.v-clear, .det-no_objection, .s2-pass, .s2res-ok { --mark: var(--clear-mark); --tint: var(--clear-bg); --shape: "●"; }
.v-pending, .det-none, .s2-not_run, .s2-nothing_to_assess, .s2res-none { --mark: var(--pending-mark); --tint: var(--pending-bg); --shape: "○"; }
.s2-running { --mark: var(--cobalt); --tint: #e3ebf7; --shape: "◌"; }
.s2-error { --shape: "!"; }
.verdict, .tag, .s2chip, .s2res { display: inline-block; font-weight: 700; font-size: var(--fs-small); padding: .1rem .5rem .1rem .55rem;
  border-radius: 2px; white-space: nowrap; color: var(--ink); background: var(--tint, var(--pending-bg));
  box-shadow: inset 3px 0 0 var(--mark, var(--pending-mark)); text-decoration: none; }
.verdict::before, .s2chip::before { content: var(--shape, "○"); color: var(--mark, var(--pending-mark)); margin-right: .4em;
  font-size: .85em; }
.verdict.big, .s2chip.big { font-size: var(--fs-h2); font-weight: 800; padding: .3rem .8rem .3rem .9rem;
  box-shadow: inset 5px 0 0 var(--mark, var(--pending-mark)); }
.sev { font-weight: 700; font-size: var(--fs-small); }
/* workflow statuses are not results: cobalt tints in their order, no shapes */
.tag.st-new          { --mark: var(--st-new); --tint: #e3ebf7; }
.tag.st-in_review    { --mark: var(--st-review); --tint: #e9eff8; }
.tag.st-nsf_review   { --mark: var(--st-nsf); --tint: #ebf0f8; }
.tag.st-coordinating { --mark: var(--st-coordinating); --tint: #eef2f9; }
.tag.st-closed       { --mark: var(--st-closed); --tint: var(--pending-bg); color: var(--muted); }
/* archived (1.22.0): out of the everyday views, neutral like Closed */
/* closed without a determination (1.23.0): someone has to decide it */
.undecided-flag { display: inline-block; margin-left: .35rem; color: var(--issue, #8a1b2e); font-weight: 700; }
.undecided-flag[hidden] { display: none; }
.undecided-link { color: var(--issue, #8a1b2e); font-weight: 600; }
.tag.archived { --mark: var(--pending-mark); --tint: var(--pending-bg); color: var(--muted); font-weight: 600; }
.archived-banner { display: flex; flex-wrap: wrap; gap: .5rem 1rem; align-items: center; background: var(--pending-bg);
  box-shadow: inset 4px 0 0 var(--pending-mark); padding: .5rem .9rem; margin: 0 0 1rem; }
.archived-banner p { margin: 0; }
.archived-banner form { margin: 0; }

.sev-issue .sev  { color: var(--issue); }
.sev-review .sev { color: var(--review); }
.sev-conflict .sev { color: var(--conflict); }

/* -------- list page */
.intake { margin-bottom: 1.25rem; }
.dropzone { display: flex; gap: 1rem; align-items: center; flex-wrap: wrap; background: var(--surface);
  border: 2px dashed var(--rule); padding: 1rem 1.25rem; border-radius: var(--radius); }
.dropzone.drag { border-color: var(--cobalt); background: #eaf0fa; }
.dropzone label { flex: 1 1 22rem; margin: 0; font-weight: 400; }
.dropzone label strong { display: block; }
.dropzone label span { color: var(--muted); font-size: var(--fs-meta); }
.dropzone label .formats { display: flex; flex-wrap: wrap; gap: .3rem .4rem; margin: .35rem 0 .4rem; }
.dropzone label .format { color: var(--ink); font-size: var(--fs-small); background: var(--surface); border: 1px solid var(--rule);
                          border-radius: 3px; padding: .1rem .45rem; white-space: nowrap; }
.dropzone label .format b { font-weight: 700; }
.dropzone .marking-choice { border: 0; margin: 0; padding: 0; display: flex; gap: .2rem 1rem; align-items: center;
                            flex-wrap: wrap; max-width: 17rem; }
.dropzone .marking-choice legend { float: left; width: 100%; padding: 0; margin-bottom: .2rem; font-weight: 600;
                                   font-size: var(--fs-meta); }
.dropzone .marking-choice label { flex: 0 0 auto; display: inline-flex; gap: .3rem; align-items: center; white-space: nowrap; }
.dropzone .marking-choice small { flex-basis: 100%; color: var(--muted); font-size: var(--fs-small); }
.dropzone .marking-sfaf { max-width: 17rem; margin: 0; color: var(--muted); font-size: var(--fs-small); }
/* GMF records without a CLA field (1.20.4): the whole width, above the button */
.dropzone .noclass { flex: 1 1 100%; margin: 0; }
.dropzone .noclass p { margin: .3rem 0 .5rem; font-size: var(--fs-meta); max-width: 75ch; }
.dropzone .noclass label.check { flex: none; display: flex; gap: .45rem; align-items: center; font-weight: 600; }
.tally { display: flex; gap: .5rem; flex-wrap: wrap; margin-bottom: 1rem; }
.tally-item { text-decoration: none; color: var(--ink); background: var(--surface); padding: .45rem .9rem;
  border: 1px solid var(--rule); border-radius: var(--radius); }
.tally-item.is-on { border-color: var(--ink); box-shadow: inset 0 -3px 0 var(--ink); }
.tally-n { font-weight: 700; font-size: var(--fs-body); margin-right: .2rem; }
.tally-item.v-issue .tally-n { color: var(--issue); }
.tally-item.v-review .tally-n { color: var(--review); }
.tally-item.v-clear .tally-n { color: var(--clear); }
.filters { display: flex; gap: .5rem; flex-wrap: wrap; margin-bottom: 1rem; }
.filters input[type=search] { flex: 1 1 18rem; }

/* -------- tables */
.table-wrap { overflow-x: auto; background: var(--surface); border: 1px solid var(--rule); border-radius: var(--radius); margin-bottom: 1.5rem; }
table { border-collapse: collapse; width: 100%; }
th, td { text-align: left; padding: .55rem .75rem; vertical-align: top; border-bottom: 1px solid var(--rule); }
th { font-size: var(--fs-small); color: var(--muted); font-weight: 600; background: #f7f9f9; white-space: nowrap; }
tbody tr:last-child td { border-bottom: 0; }
.num { text-align: right; white-space: nowrap; }
table.notices tbody tr { box-shadow: inset 5px 0 0 var(--mark, var(--pending-bg)); }
table.notices .pick { padding-left: 1.1rem; padding-right: 0; width: 1px; }
table.notices .pick input { width: 1.05rem; height: 1.05rem; margin: .15rem 0 0; cursor: pointer; }
table.notices tr.is-picked td { background: #eaf0fa; }
.bulkbar { display: flex; gap: .75rem 1.25rem; align-items: end; flex-wrap: wrap; background: var(--surface);
  border: 1px solid var(--rule); border-radius: var(--radius); padding: .6rem .9rem; margin-bottom: .6rem; }
.bulkbar strong { align-self: center; min-width: 11rem; }
.bulkbar label { display: flex; flex-direction: column; gap: .2rem; font-size: var(--fs-small); color: var(--muted); }
button:disabled { opacity: .45; cursor: not-allowed; }
.fileno { font-weight: 600; }
td.overdue { color: var(--issue); font-weight: 700; }
td.due, td.due-left { white-space: nowrap; }
.duefield { display: flex; gap: .3rem; justify-content: flex-end; margin: 0; }
.duefield input[type=date] { padding: .2rem .35rem; font-size: var(--fs-meta); font-variant-numeric: tabular-nums; }
td.overdue .duefield input { color: var(--issue-mark); font-weight: 700; border-color: var(--issue-mark); background: var(--issue-bg); }
td.due.is-error .due-state { color: var(--issue); }
table.ref td { padding: .3rem .4rem; }
table.ref input:not([type=checkbox]) { width: 100%; min-width: 6rem; }
tr.new-row td { background: #f7f9f9; }
tr.sev-issue td:first-child { box-shadow: inset 4px 0 0 var(--issue-mark); }
tr.sev-review td:first-child { box-shadow: inset 4px 0 0 var(--review-mark); }
tr.sev-conflict td:first-child { box-shadow: inset 4px 0 0 var(--conflict-mark); }
form.terrain select { padding: .2rem .4rem; }

/* -------- notice page */
.notice-head { padding-bottom: 1rem; margin-bottom: 1.25rem; border-bottom: 3px solid var(--mark, var(--pending-mark)); }
.head-title { display: flex; align-items: center; gap: .9rem; flex-wrap: wrap; }
.head-title h1 { margin: 0; }
.head-verdict { display: flex; flex-wrap: wrap; gap: .75rem 2.75rem; margin: 1rem 0 0; }
.head-verdict > div { display: flex; align-items: center; gap: .7rem; }
.head-verdict dt { color: var(--muted); font-size: var(--fs-small); font-weight: 600; }
.head-verdict dd { margin: 0; display: flex; align-items: center; gap: .6rem; flex-wrap: wrap; }
.head-verdict .why { color: var(--muted); font-size: var(--fs-meta); }
.head-links { margin: .75rem 0 0; font-size: var(--fs-meta); }
/* label and value on one line in a page head; plugins' pages (NMRCZ Coordination) still use them */
.stage { margin: 0; display: flex; gap: .6rem; align-items: center; }
.stage-l { color: var(--muted); font-size: var(--fs-small); font-weight: 600; }
.crumb { margin: 0 0 .25rem; font-size: var(--fs-meta); }
.sub { margin: 0; color: var(--muted); max-width: 70ch; }
.warn { background: var(--review-bg); border-left: 4px solid var(--review-mark); padding: .75rem 1rem; margin-bottom: 1.25rem; }
.warn ul { margin: .4rem 0; }
.warn .warn-clear { display: inline; margin-left: .75rem; }
/* the audit log failed (app/audit.py): admins see it on every page until acknowledged */
.warn.audit-alert, #failures { background: var(--issue-bg); border-left-color: var(--issue-mark); }
#failures h2 { margin-top: 0; }
.sec-head { display: flex; justify-content: space-between; align-items: baseline; gap: 1rem; }
.split { display: grid; grid-template-columns: minmax(0, 1fr) 20rem; gap: 2rem; align-items: start; }
.split-side { position: sticky; top: 1rem; max-height: calc(100vh - 2rem); overflow-y: auto; overscroll-behavior: contain;
  padding-right: .4rem; scrollbar-gutter: stable; }
.panel { background: var(--surface); border: 1px solid var(--rule); border-radius: var(--radius); padding: 1rem 1.1rem; margin-bottom: 1rem; }
.panel.wide { max-width: 60rem; margin: 1.5rem 0; }
.grid-form { display: grid; grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr)); gap: 0 1.25rem; align-items: start; }
label small { font-weight: 400; margin-top: .2rem; }
.grid-form button { justify-self: start; margin-bottom: .8rem; }
.history ol { list-style: none; padding: 0; margin: 0; font-size: var(--fs-meta); }
.history li { padding: .35rem 0; border-bottom: 1px solid var(--rule); }
.history li:last-child { border: 0; }
.history time { color: var(--muted); display: block; font-size: var(--fs-small); }
.history .hist-more { margin: .5rem 0 0; font-size: var(--fs-meta); }
table.history-table td { font-size: var(--fs-meta); vertical-align: top; }
table.history-table td:first-child { white-space: nowrap; color: var(--muted); }
.site-list form.terrain { display: flex; flex-direction: column; align-items: flex-end; }
.site-list small.t-src { display: block; margin: .15rem 0 0; font-size: var(--fs-small); color: var(--muted); text-align: right; }
.loc-h { margin-top: 1rem; }
.loc-h small { display: inline; margin-left: .5rem; font-weight: 400; }
.filed-text dl { display: grid; grid-template-columns: 14rem minmax(0, 1fr); gap: .4rem 1.25rem; margin: 0 0 1rem; }
.filed-text dt { color: var(--muted); font-size: var(--fs-meta); }
.filed-text dd { margin: 0; white-space: pre-line; max-width: 70ch; }
#map { height: clamp(420px, 24vw, 680px); border: 1px solid var(--rule); border-radius: var(--radius); margin-bottom: 1.5rem; background: #e6ebea; }
section { margin-bottom: 1.5rem; }

/* -------- spectrum strip */
.spectrum { margin-bottom: 1.5rem; }   /* evidence sits on the page; frames are for what you act on (1.19.2) */
.spectrum svg { display: block; width: 100%; height: auto; overflow: visible; }
.spectrum text { font-family: inherit; }   /* colours: attributes of the charts' marks (notice.js, 1.19.2) */
.spectrum .legend svg.key { display: inline-block; width: 21px; height: 12px; vertical-align: -2px; margin-right: .35rem; }
.spec-print { display: none !important; }   /* the spectrum charts' copies for printing (notice.js) */
.spec-detail { display: grid; grid-template-columns: repeat(auto-fill, minmax(22rem, 1fr)); gap: 1rem 1.5rem; margin-top: 1rem; }
.spec-detail figure { margin: 0; }
.spec-detail figcaption { font-weight: 600; font-size: var(--fs-meta); margin-bottom: .2rem; }
.legend { display: flex; gap: 1.25rem; flex-wrap: wrap; font-size: var(--fs-small); color: var(--muted); margin-top: .6rem; }
.legend i { display: inline-block; width: 1.4em; height: .8em; vertical-align: -1px; margin-right: .35rem; border: 1px solid var(--ras); }

@media (max-width: 960px) {
  .split { grid-template-columns: minmax(0, 1fr); }
  .split-side { position: static; max-height: none; overflow: visible; padding-right: 0; }
  .filed-text dl { grid-template-columns: 1fr; }
}
@media (prefers-reduced-motion: reduce) { * { transition: none !important; } }
.site-list { list-style: none; margin: 0; padding: 0; min-width: 19rem; }
.site-list li { display: flex; justify-content: space-between; align-items: center; gap: .75rem; padding: .2rem 0; }
.site-list li + li { border-top: 1px dotted var(--rule); }
.site-list small { display: inline; margin-left: .3rem; }
.why { margin-top: .3rem; max-width: 24rem; }
select.t-los { border-color: var(--issue-mark); color: var(--issue-mark); }
select.t-obstructed { border-color: var(--clear-mark); color: var(--clear-mark); }
tr.sev-issue .sev { color: var(--issue); }
tr.sev-review .sev { color: var(--review); }

/* -------- overview filters */
.filterbox { display: grid; grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr)); gap: 1rem 1.25rem;
  background: var(--surface); border: 1px solid var(--rule); border-radius: var(--radius); padding: 1rem 1.1rem; margin-bottom: 1rem; }
.filterbox fieldset { border: 0; margin: 0; padding: 0; min-width: 0; }
@media (min-width: 1200px) {   /* four groups, growing with the window (the full-width row kept every track) */
  .filterbox { grid-template-columns: repeat(4, minmax(0, 32rem)); }
}
.filterbox legend { font-weight: 700; padding: 0; margin-bottom: .5rem; }
.filterbox label { margin-bottom: .6rem; }
.filterbox small { margin-top: -.2rem; }
.pair, .near { display: grid; grid-template-columns: 1fr 1fr; gap: 0 .6rem; }
.near { grid-template-columns: 6rem 1fr; }
/* a filter taking several values (2.14.0): a drop-down of checkboxes that looks like the selects beside it */
.multi { font-size: var(--fs-meta); margin-bottom: .6rem; min-width: 0; }
.multi-label { display: block; font-weight: 600; }
.multi-pick { position: relative; margin-top: .25rem; }
.multi-pick summary { list-style: none; cursor: pointer; border: 1px solid var(--rule); border-radius: var(--radius);
  background: var(--surface); padding: .4rem 1.6rem .4rem .55rem; font-weight: 400; white-space: nowrap; overflow: hidden;
  text-overflow: ellipsis; position: relative; }
.multi-pick summary::-webkit-details-marker { display: none; }
.multi-pick summary::after { content: "▾"; position: absolute; right: .55rem; top: 50%; transform: translateY(-50%);
  color: var(--muted); }
.multi-pick[open] summary::after { content: "▴"; }
.multi-list { position: absolute; z-index: 1100; left: 0; top: calc(100% + .2rem); min-width: 100%; width: max-content;
  max-width: min(26rem, 90vw); max-height: 20rem; overflow-y: auto; background: var(--surface);
  border: 1px solid var(--rule); border-radius: var(--radius); box-shadow: 0 8px 24px rgba(23, 36, 48, .18);
  padding: .4rem .6rem; }
.multi-list label.check { margin: 0; padding: .15rem 0; }
button.multi-clear { display: block; background: none; border: 0; padding: .1rem 0 .3rem; cursor: pointer;
  font-weight: 400; color: var(--cobalt); text-decoration: underline; }
.multi small { margin-top: .2rem; }
.quick { margin: 0 0 .5rem; display: flex; gap: 1rem; font-size: var(--fs-meta); }
.filter-actions { grid-column: 1 / -1; display: flex; gap: 1rem; align-items: center; border-top: 1px solid var(--rule); padding-top: .9rem; }
.button-link { font-weight: 600; }
.result-bar { display: flex; justify-content: space-between; align-items: baseline; gap: 1rem; flex-wrap: wrap; margin-bottom: .6rem; }
.result-bar p { margin: 0; }
.overview-map { margin-bottom: 1rem; }
.overview-map summary { cursor: pointer; font-weight: 600; color: var(--cobalt); padding: .3rem 0; }
#overview-map { height: 420px; border: 1px solid var(--rule); border-radius: var(--radius); margin-top: .4rem; background: #e6ebea; }
/* the notices on the register's map (2.17.0): the multi-select drop-down's look, outside any form */
.map-pick { font-size: var(--fs-meta); margin: .3rem 0 .2rem; display: flex; flex-wrap: wrap; align-items: center;
  gap: .3rem .75rem; }
.map-pick .multi-label { font-weight: 600; }
.map-pick .multi-pick { margin: 0; min-width: 12rem; max-width: 20rem; }
.overview-map .map-pick .multi-pick summary { color: var(--ink); font-weight: 400; padding: .4rem 1.6rem .4rem .55rem; }
.map-pick .map-pick-acts { display: flex; gap: 1rem; margin: 0 0 .3rem; }
.map-pick .map-pick-acts .multi-clear { padding-bottom: 0; }
.map-pick .map-pick-find { width: 100%; margin: 0 0 .3rem; }
.map-pick label.check { align-items: center; margin: 0; padding: .15rem 0; }
.map-pick label.check input { margin-top: 0; }
.map-pick label.check[hidden] { display: none; }
.map-pick-dot { display: inline-block; width: .7rem; height: .7rem; border-radius: 50%; border: 1px solid #fff;
  box-shadow: 0 0 0 1px var(--rule); flex: none; }
button.map-hide { background: none; border: 0; padding: .3rem 0 0; color: var(--cobalt); text-decoration: underline;
  cursor: pointer; font: inherit; }
.sortlink { color: inherit; text-decoration: none; border-bottom: 1px dotted var(--muted); }
.sortlink:hover { color: var(--cobalt); }
.sorted { color: var(--ink); border-bottom: 2px solid var(--ink); }
.sortdir { font-size: .7em; margin-left: .3em; vertical-align: .1em; }
[hidden] { display: none !important; }
.verdict, .fileno { white-space: nowrap; }

/* -------- stage 2 */
.s2cell { font-weight: 600; font-size: var(--fs-meta); white-space: nowrap; color: var(--muted); }
.s2cell.s2-exceed { color: var(--issue); }
.s2cell.s2-pass, .s2cell.s2-nothing_to_assess { color: var(--clear); }
.s2cell.s2-running { color: var(--cobalt); }
.s2-summary { background: var(--surface); border-left: 4px solid var(--pending-mark); padding: .6rem 1rem; }
.s2-summary.s2-exceed { border-left-color: var(--issue-mark); }
.s2-summary.s2-pass, .s2-summary.s2-nothing_to_assess { border-left-color: var(--clear-mark); }
.s2-summary.s2-error { border-left-color: var(--issue-mark); background: var(--issue-bg); }
table.stage2 td.margin { font-weight: 700; font-size: var(--fs-body); }
table.stage2 tr.exc td.margin { color: var(--issue); }
table.stage2 tr.ok td.margin { color: var(--clear); }
table.stage2 > tbody > tr.exc > td:first-child { box-shadow: inset 4px 0 0 var(--issue-mark); }
table.stage2 > tbody > tr.ok > td:first-child { box-shadow: inset 4px 0 0 var(--clear-mark); }
table.stage2 tr:has(+ tr.s2-note) td { border-bottom: 0; }
table.stage2 tr.s2-note td { padding-top: 0; }
.s2-sites summary { cursor: pointer; color: var(--cobalt); font-size: var(--fs-small); margin-top: .3rem; }
.s2-sites table { margin-top: .3rem; font-size: var(--fs-small); }
.s2-sites td { padding: .15rem .4rem; border-bottom: 1px dotted var(--rule); }
.s2-sites td.neg { color: var(--issue); font-weight: 600; }
.result-actions { display: flex; gap: 1rem; align-items: center; }
input.thr { min-width: 5.5rem !important; }
details.ra769 { margin-top: 1rem; }
details.ra769 summary { cursor: pointer; font-weight: 600; color: var(--cobalt); }
.s2-sites td:first-child { white-space: nowrap; }
table.stage2 td { font-size: var(--fs-meta); }

/* -------- terrain */
.los { font-weight: 700; font-size: var(--fs-meta); white-space: nowrap; }
.los-clear { color: var(--issue); }
.los-fresnel { color: var(--review); }
.los-obstructed { color: var(--clear); }
td.terr { min-width: 11rem; }
details.profile summary, details.loss-panel summary { cursor: pointer; color: var(--cobalt); font-size: var(--fs-small); margin-top: .3rem; }
.profile-plot { margin-top: .5rem; }
.profile-plot svg { width: 100%; max-width: 760px; height: auto; display: block; }
.profile-plot text { font-size: 11px; fill: var(--muted); font-family: inherit; }
.profile-plot .pg { stroke: var(--rule); stroke-width: .5; }
.profile-plot .pt { fill: #b9a98c; stroke: #6f5f43; stroke-width: 1; }
.profile-plot .pf { fill: rgba(29, 78, 158, .12); stroke: rgba(29, 78, 158, .5); stroke-dasharray: 4 3; stroke-width: .75; }
.profile-plot .pr { fill: none; stroke: var(--issue); stroke-width: 1.5; }
.profile-plot .po { fill: var(--ink); stroke: #fff; stroke-width: 2; }
.profile-plot .pl { fill: var(--ink); font-weight: 600; }
.profile-plot .pm { stroke: var(--ink); stroke-width: 2; }
/* path loss vs distance under the profile (2.10.0) */
.along-plot { margin-top: .75rem; }
.along-plot svg { width: 100%; max-width: 760px; height: auto; display: block; }
.along-plot text { font-size: 11px; fill: var(--muted); font-family: inherit; }
.along-plot .pg { stroke: var(--rule); stroke-width: .5; }
.along-plot .al { fill: none; stroke: var(--cobalt); stroke-width: 1.75; }
.along-plot .af { fill: none; stroke: var(--muted); stroke-width: 1; stroke-dasharray: 5 4; }
.along-plot .an { stroke: var(--issue); stroke-width: 1.25; stroke-dasharray: 2 3; }
.along-plot .anl { fill: var(--issue); font-weight: 600; }
.along-plot .as { fill: var(--ink); stroke: #fff; stroke-width: 2; }
.along-plot .pl { fill: var(--ink); font-weight: 600; }
.profile-plot .pa { fill: var(--ink); stroke: #fff; stroke-width: 1.5; }
.profile-plot .pb { fill: #6f5f43; }
.profile-tools { display: flex; flex-wrap: wrap; gap: .4rem .8rem; align-items: center; margin: .5rem 0; font-size: var(--fs-meta); }
.lossmap-pick { display: inline-flex; flex-wrap: wrap; gap: .4rem; align-items: center; }
.lossmap-map { height: 460px; max-width: 760px; border: 1px solid var(--rule); }
/* path loss or margin to the limit (1.20.2): two buttons, the one shown pressed */
.lossmap-view { display: flex; gap: .4rem; margin: .5rem 0; }
.lossmap-view button[aria-pressed="true"] { background: var(--cobalt); color: #fff; }
.lossmap-pick button[aria-pressed="true"] { background: var(--cobalt); color: #fff; }
.lossmap-legend { display: flex; flex-wrap: wrap; gap: .3rem 1rem; max-width: 760px; }
.lossmap-legend .lm-sym { display: inline-block; width: 14px; height: 12px; vertical-align: -1px; border: 1.5px solid transparent;
                          box-sizing: border-box; }
.lossmap-legend .lm-dot { width: 12px; border-radius: 50%; }
.lossmap-legend .lm-ring { width: 12px; border-radius: 50%; border-style: dashed; }
.lossmap-legend .lm-corner { width: 7px; height: 7px; border-radius: 50%; background: #fff; vertical-align: 1px; margin: 0 3px; }
.lossmap-legend .lm-line { height: 0; border-width: 0 0 2px; border-style: dashed; vertical-align: 3px; }
.lossmap-legend .lm-swatch { border: 0; }
.map-save { margin: .4rem 0 0; }
.linkbtn { background: none; border: 0; padding: 0; color: var(--cobalt); font-weight: 400; font-size: var(--fs-small); text-decoration: underline; cursor: pointer; white-space: nowrap; }
.linkbtn:hover { filter: none; text-decoration-thickness: 2px; }

/* -------- stage 2 prompts */
.callout { display: flex; gap: 1rem; align-items: center; justify-content: space-between; flex-wrap: wrap;
  background: var(--surface); border: 1px solid var(--rule); border-left: 4px solid var(--cobalt);
  padding: .7rem 1rem; margin-bottom: 1rem; }
.callout.v-issue { border-left-color: var(--issue-mark); }
.callout.v-review { border-left-color: var(--review-mark); }
.callout.zone-note { border-left-color: var(--cobalt); }   /* NRQZ, PRCZ (2.12.0): a note, not a result colour */
.callout p { margin: 0; max-width: 70ch; }
.rowrun { margin-top: .25rem; }
.rowrun button { white-space: nowrap; }
.filed-desc { margin: -.2rem 0 .4rem; color: var(--muted); font-size: var(--fs-meta); }
.with-unit { display: flex; gap: .3rem; }
/* satellite links (2.3.0) */
table.ref td.dish { white-space: nowrap; }
table.ref td.dish input { width: 4.5rem; margin-right: .2rem; }
h3.sat-src { margin: 1rem 0 .4rem; font-size: var(--fs-body); }
table.satlinks td small { display: block; color: var(--muted); font-weight: 400; }
table.satlinks tr.sat-note td { border-top: 0; padding-top: 0; }
table.satlinks tr.sat-note small { color: var(--muted); }
form.downlink-sat { display: flex; flex-wrap: wrap; gap: .4rem .8rem; align-items: end; margin: -.1rem 0 .6rem; font-size: var(--fs-meta); }
form.downlink-sat label { display: flex; flex-direction: column; gap: .1rem; }
form.downlink-sat input { width: 7rem; }
form.downlink-sat .dl-f { color: var(--muted); align-self: center; }
.with-unit input { flex: 1; min-width: 0; }
.with-unit select { width: auto; flex: none; }
.filed-desc.platform-note { color: var(--ink); border-left: 3px solid var(--review-mark); padding-left: .5rem; }
details.loc-edit { margin-bottom: .6rem; }
details.loc-edit summary { cursor: pointer; color: var(--cobalt); font-size: var(--fs-meta); }
.em-edit .loc-form { padding-bottom: .6rem; }
.em-edit .em-table { margin: 0; }
small.corrected { color: var(--muted); border-bottom: 1px dotted var(--muted); cursor: help; }
.loc-form { background: var(--surface); border: 1px solid var(--rule); border-radius: var(--radius); padding: .8rem 1rem 0; margin-top: .4rem; }

/* -------- notices table: compact so it fits narrower screens */
table.notices th, table.notices td { padding: .45rem .5rem; }
table.notices th { white-space: normal; line-height: 1.2; }
table.notices .num small, table.notices .s2cell, table.notices .s2cell small { white-space: normal; }
table.notices .tag, table.notices .verdict { white-space: normal; max-width: 8.5rem; line-height: 1.25; }
table.notices .appcell { min-width: 9rem; }
table.notices td.due .duefield input[type=date] { font-size: var(--fs-small); padding: .15rem .25rem; }
table.notices td.num { font-variant-numeric: tabular-nums; }
table.notices .d { white-space: nowrap; }
@media (max-width: 1440px) {
  table.notices { font-size: var(--fs-meta); }
  table.notices .tag, table.notices .verdict { max-width: 7.5rem; }
  table.notices th, table.notices td { padding: .4rem .3rem; }
  table.notices td.freq { white-space: normal; }
  table.notices .added small { display: none; }
}

/* phones and small tablets: each notice becomes a card; the header row stays as the sort bar */
@media screen and (max-width: 1260px) {
  table.notices, table.notices thead, table.notices tbody, table.notices tr, table.notices td { display: block; }
  table.notices thead tr { display: flex; flex-wrap: wrap; gap: .1rem .4rem; align-items: center; padding: .4rem .6rem; }
  table.notices th { background: none; border: 0; padding: .2rem .3rem; }
  table.notices th:not(:has(a, .sorted, input)) { display: none; }
  table.notices tbody tr { display: grid; grid-template-columns: 1fr 1fr; gap: .15rem .75rem;
    padding: .6rem .75rem .6rem 1.1rem; border-top: 1px solid var(--rule); }
  table.notices td { border: 0; padding: .2rem 0; text-align: left; }
  table.notices td::before { content: attr(data-label); display: block; font-size: var(--fs-small); color: var(--muted);
    font-weight: 600; }
  table.notices .pick { width: auto; padding: 0; }
  table.notices .pick input { max-width: none; }
  table.notices td.pick { position: absolute; top: .75rem; left: 1.1rem; }
  table.notices th.pick { padding: .2rem .3rem; }
  table.notices tbody tr { position: relative; }
  table.notices td.pick::before { content: none; }
  table.notices td.verdict-cell { padding-left: 1.6rem; }
  table.notices td.verdict-cell::before { content: none; }
  table.notices td.appcell { grid-column: 1 / -1; }
  table.notices .tag, table.notices .verdict { max-width: none; }
  table.notices .duefield { justify-content: flex-start; }
  .table-wrap:has(> table.notices) { overflow-x: visible; }  /* the cards; every other table scrolls */
}

/* -------- coordination log */
.logform h2 { margin-top: 0; }
.logmeta { display: grid; grid-template-columns: 10rem minmax(0, 1fr) 13.5rem 15rem; gap: .5rem 1rem; margin-bottom: .75rem; }
.logmeta label { display: flex; flex-direction: column; gap: .2rem; font-size: var(--fs-meta); color: var(--muted); }
.logmeta input, .logmeta select { width: 100%; box-sizing: border-box; }
.logform textarea { width: 100%; box-sizing: border-box; font: inherit; line-height: 1.5; min-height: 10rem; resize: vertical; }
.mdtabs { display: flex; gap: .25rem; margin-bottom: -1px; }
.mdtabs button { background: none; color: var(--muted); border: 1px solid transparent; border-bottom: 0;
  border-radius: var(--radius) var(--radius) 0 0; padding: .3rem .8rem; font-size: var(--fs-meta); }
.mdtabs button[aria-selected="true"] { color: var(--ink); background: var(--surface); border-color: var(--rule); }
.md.preview { min-height: 10rem; border: 1px solid var(--rule); border-radius: var(--radius); padding: .5rem .75rem; }
.logactions { display: flex; gap: .75rem; align-items: center; flex-wrap: wrap; margin-top: .6rem; }
.logactions small { flex: 1 1 18rem; }
.logentries { list-style: none; margin: 0; padding: 0; }
.logentry { background: var(--surface); border: 1px solid var(--rule); border-left: 4px solid var(--pending-mark);
  border-radius: var(--radius); padding: .7rem 1rem; margin-bottom: .75rem; scroll-margin-top: 1rem; }
.logentry.k-email   { border-left-color: var(--cobalt); }
.logentry.k-phone   { border-left-color: var(--clear-mark); }
.logentry.k-meeting { border-left-color: var(--review-mark); }
.logentry:target, .logentry.is-editing { box-shadow: 0 0 0 2px var(--cobalt); }
.loghead { display: flex; gap: .3rem .75rem; align-items: baseline; flex-wrap: wrap; font-size: var(--fs-meta); }
.loghead .kind { font-weight: 700; }
.loghead time { font-variant-numeric: tabular-nums; }
.loghead .with { color: var(--ink); }
.loghead .by { color: var(--muted); margin-left: auto; }
/* folded entries (2.10.0): the summary is the entry's head line */
details.logfold > summary.loghead { cursor: pointer; list-style: none; }
details.logfold > summary.loghead::-webkit-details-marker { display: none; }
details.logfold > summary.loghead::before { content: "▾"; color: var(--cobalt); width: .8rem; transition: transform .15s; }
details.logfold:not([open]) > summary.loghead::before { transform: rotate(-90deg); }
details.logfold > summary.loghead:hover .kind { color: var(--cobalt); }
.logentry:has(> details.logfold:not([open])) { padding-top: .45rem; padding-bottom: .45rem; }
.logfold-tools { margin: 0 0 .5rem; font-size: var(--fs-small); display: flex; justify-content: flex-end; gap: 1rem; }
.md { line-height: 1.55; overflow-wrap: anywhere; }
.md > :first-child { margin-top: .35rem; }
.md > :last-child { margin-bottom: 0; }
.md p, .md ul, .md ol, .md blockquote, .md pre, .md table { margin: .5rem 0; }
.md blockquote { border-left: 3px solid var(--rule); padding-left: .75rem; color: var(--muted); margin-left: 0; }
.md code { background: var(--paper); padding: 0 .25rem; border-radius: 2px; font-size: .9em; }
.md pre { background: var(--paper); padding: .5rem .75rem; overflow-x: auto; }
.md pre code { background: none; padding: 0; }
.md table { width: auto; font-size: var(--fs-meta); }
.md th, .md td { padding: .25rem .5rem; border: 1px solid var(--rule); }
.md h1, .md h2, .md h3, .md h4 { font-size: var(--fs-body); margin: .75rem 0 .25rem; }
.logfoot { display: flex; gap: .3rem 1rem; align-items: baseline; flex-wrap: wrap; margin-top: .5rem; font-size: var(--fs-small); }
.logfoot small { display: inline; }
.logfoot form { margin: 0; }
.logfoot .linkish { margin-left: auto; }
.danger-link { color: var(--issue) !important; }
.prewrap { white-space: pre-line; margin: 0; }
.overdue-text { color: var(--issue); }
.logpeek { font-size: var(--fs-meta); border-left: 3px solid var(--rule); padding-left: .6rem; margin-bottom: .6rem; }
.logpeek .md { font-size: var(--fs-meta); color: var(--muted); }
a.loglink { font-size: var(--fs-small); }
@media (max-width: 760px) { .logmeta { grid-template-columns: 1fr; } }

/* -------- users and sign-in */
.topbar .who { margin-left: auto; display: flex; gap: .75rem; align-items: baseline; font-size: var(--fs-meta); }
.topbar .who a { color: #fff; text-decoration: none; }
.topbar .who a[aria-current] { border-bottom: 2px solid #fff; }
.topbar .who .role { color: #c8d3dc; font-size: var(--fs-small); }
.topbar .who form { margin: 0; }
.topbar .who .linkbtn { color: #c8d3dc; }
.authbox { max-width: 24rem; margin: 2rem auto; display: flex; flex-direction: column; gap: .75rem; }
.authbox h1 { margin: 0; font-size: var(--fs-h2); }
.authbox .warn { margin: 0; }
.authgrid { display: grid; grid-template-columns: repeat(auto-fit, minmax(18rem, 24rem)); gap: 1rem; align-items: start; }
.authgrid form { display: flex; flex-direction: column; gap: .75rem; }
.authgrid h2 { margin: 0; }
.roles { color: var(--muted); font-size: var(--fs-meta); padding-left: 1.1rem; }
table.users td { vertical-align: middle; }
table.users tr.is-off td { color: var(--muted); }
/* the reference page for non-admins: values as text */
dl.params { display: grid; grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr)); gap: .8rem 1.5rem; margin: 0; }
dl.params dt { font-size: var(--fs-small); font-weight: 600; color: var(--muted); }
dl.params dd { margin: .15rem 0 0; font-weight: 600; }
dl.params dd small { display: block; font-weight: 400; margin-top: .15rem; }
table.ref tr.is-off td { color: var(--muted); }
table.users td.plugin-access { text-align: center; }
table.users td.plugin-access small { font-size: var(--fs-small); }
.plugin-grants { border: 0; padding: 0; margin: .5rem 0 1rem; }
.plugin-grants legend { font-weight: 600; padding: 0; margin-bottom: .3rem; }
table.users input:not([type=checkbox]) { width: 100%; min-width: 7rem; box-sizing: border-box; }
.pwreset { display: flex; gap: .3rem; margin: 0; }
.adduser { margin-top: 1rem; }
.adduser .grid-form { margin-bottom: .75rem; }

/* read-only users (viewers; non-admins on the reference page): hide what they cannot use */
.ro-only { display: none; }
.ro .ro-only { display: inline; }
.lossmap-high-pick { display: inline-flex; margin: .3rem 0 0; font-size: var(--fs-small); }
.ro p.ro-only { display: block; }
.ro form[method=post]:not(.keep), .ro [form]:not(#pick-all), .ro .pick, .ro .rowrun, .ro .linkish { display: none !important; }
.enrol ol { padding-left: 1.2rem; display: grid; gap: 1rem; margin: 0; }
.qr { margin: .5rem 0; }
.qr svg { display: block; width: 15rem; max-width: 100%; height: auto; aspect-ratio: 1; shape-rendering: crispEdges; }
.secret { font-size: var(--fs-body); letter-spacing: .05em; user-select: all; }
.confirmcode { display: flex; gap: .5rem; margin-top: .4rem; }
.confirmcode input { width: 8rem; font-size: var(--fs-body); letter-spacing: .15em; }
.codes { columns: 2; max-width: 22rem; font-size: var(--fs-body); }
.codes li { margin: .2rem 0; }
form.inline { display: inline; margin: 0 0 0 .4rem; }
/* security keys and passkeys (2.16.0) */
.authstep { display: flex; flex-direction: column; gap: .75rem; margin: 0; }
.authstep .warn { margin: 0; }
.authalt summary { cursor: pointer; color: var(--cobalt); }
.authalt[open] summary { margin-bottom: .6rem; }
.twofactor h2 { margin-top: 0; }
.twofactor .table-wrap { margin-bottom: 1rem; }
.enrol > summary { cursor: pointer; color: var(--cobalt); font-weight: 600; }
.enrol[open] > summary { margin-bottom: .8rem; }
.addkey, .appremove { display: flex; flex-direction: column; gap: .75rem; max-width: 24rem; }
.addkey .warn { margin: 0; }
.keyremove { display: flex; gap: .3rem; margin: 0; }
.keyremove input { width: 10rem; }

/* -------- CUI marking, maps without tiles, audit log */
.cui-banner { background: var(--cui); color: #fff; text-align: center; font-weight: 800; letter-spacing: .08em;
  padding: .2rem 1rem; font-size: var(--fs-small); }
.cui-foot { margin-top: 2rem; }
.cui-foot p { text-align: center; color: var(--muted); font-size: var(--fs-small); margin: 0 0 .4rem; }
/* a notice marked as CUI (only shown when CUI_BANNER is set) */
.cui-tag { font-size: var(--fs-small); font-weight: 700; letter-spacing: .06em; color: var(--cui); text-decoration: none;
  border: 1px solid var(--cui); border-radius: 2px; padding: .05rem .35rem; }
small.cui-tag { display: inline-block; margin-left: .35rem; }
.marking-panel h2 { margin-top: 0; }
.marking-panel p { font-size: var(--fs-meta); margin: .4rem 0; }
/* a map without a tile server: a grid. The colour goes in the last layer (before 1.19.3 it came first, and browsers
   dropped the whole declaration) */
.no-tiles { background: repeating-linear-gradient(0deg, transparent 0 39px, #dde4e3 39px 40px),
  repeating-linear-gradient(90deg, transparent 0 39px, #dde4e3 39px 40px) #eef2f1 !important; }
.map-note { background: rgba(255,255,255,.9); padding: .2rem .5rem; font-size: var(--fs-small); color: var(--muted); border-radius: 2px; }
/* the system use notice: a pop-up after sign-in (notice_ack.html) */
.notice-backdrop { position: fixed; inset: 0; z-index: 50; display: flex; align-items: center; justify-content: center;
  padding: 1rem; background: rgba(20, 24, 28, .55); }
.notice-dialog { max-width: 34rem; width: 100%; border-top: 4px solid var(--cui); box-shadow: 0 10px 40px rgba(0,0,0,.35); }
.notice-dialog h1 { margin: 0 0 .6rem; font-size: var(--fs-h2); }
.notice-dialog p { margin: 0 0 1rem; line-height: 1.5; }
.notice-actions { display: flex; gap: .6rem; flex-wrap: wrap; }
table.audit td { font-size: var(--fs-small); vertical-align: top; }
table.audit td.detail { max-width: 40rem; overflow-wrap: anywhere; color: var(--muted); }
table.audit .act { font-family: ui-monospace, monospace; white-space: nowrap; }
table.audit tr.bad .act { color: var(--issue); font-weight: 700; }
.auditfilter { display: flex; gap: .75rem; align-items: end; flex-wrap: wrap; margin-bottom: 1rem; }
.auditfilter label { display: flex; flex-direction: column; gap: .2rem; font-size: var(--fs-small); color: var(--muted); }

/* -------- overview dashboard */
.ov-head { display: flex; justify-content: space-between; align-items: end; gap: 1rem; flex-wrap: wrap; }
.ov-head h1 { margin-bottom: .25rem; }
.ov-filters { display: flex; gap: .75rem; align-items: end; flex-wrap: wrap; }
.ov-filters label { display: flex; flex-direction: column; gap: .2rem; font-size: var(--fs-small); color: var(--muted); }
/* the screen results to show (2.17.0): the register's drop-down of checkboxes, labelled like the selects beside it */
.ov-filters .multi { margin: 0; font-size: var(--fs-small); }
.ov-filters .multi-label { color: var(--muted); }
.ov-filters .multi-pick { margin-top: .2rem; }
.ov-filters .multi-pick summary { min-width: 9rem; max-width: 16rem; color: var(--ink); font-size: var(--fs-meta); }
.ov-filters .multi-list label.check { flex-direction: row; align-items: center; gap: .5rem; color: var(--ink);
  font-size: var(--fs-meta); }
.ov-filters .multi-list label.check input { margin-top: 0; }
.kpis { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: .75rem; margin: 1rem 0 1.25rem; }
@media (max-width: 760px) { .kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.kpi { display: flex; flex-direction: column; gap: .2rem; background: var(--surface); border: 1px solid var(--rule);
  border-radius: var(--radius); padding: .75rem .9rem; text-decoration: none; color: var(--ink); }
.kpi:hover { border-color: var(--cobalt); }
.kpi-l { font-size: var(--fs-small); color: var(--muted); }
.kpi-v { font-size: var(--fs-big); font-weight: 600; line-height: 1.1; }
.kpi.is-bad .kpi-v { color: var(--issue); }
.ov-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); gap: 0 1rem; }
.ov-grid.two { grid-template-columns: repeat(2, minmax(0, 1fr)); }
@media (max-width: 760px) { .ov-grid.two { grid-template-columns: 1fr; } }
.viz-card:not(.panel) { border-top: 1px solid var(--rule); padding: .9rem 0 1.4rem; min-width: 0; }   /* Overview sections: a rule, no frame (plugins' framed ones keep theirs) */
.viz-card h2 { margin: 0 0 .6rem; font-size: var(--fs-body); }
.history { margin: 1.25rem 0 1rem; padding-top: .9rem; border-top: 1px solid var(--rule); }
svg.viz { display: block; width: 100%; height: auto; font-family: inherit; overflow: visible; }
/* drawn 1000 units wide on the server: on a wide window they stop growing at 1300px, so their text stays at most
   1.3 times its size (1.19.2) */
svg.viz:not(.fixed):not(.donut-ring) { max-width: 1300px; }
svg.viz.fixed { width: auto; max-width: 100%; }
svg.viz .lab { font-size: 12px; fill: var(--ink); }
svg.viz .val { font-size: 12px; fill: var(--ink); font-weight: 600; }
svg.viz .tick { font-size: 11px; fill: var(--muted); font-variant-numeric: tabular-nums; }
svg.viz .axis { font-size: 11px; fill: var(--muted); }
svg.viz .mark { cursor: pointer; outline: none; }
svg.viz .mark:focus-visible rect[fill="transparent"], svg.viz .mark:focus-visible circle[fill="transparent"] { stroke: var(--cobalt); stroke-width: 2; }
svg.viz .mark.is-hot path, svg.viz .mark.is-hot circle:not([fill="transparent"]) { filter: brightness(1.12); }
svg.viz .rasband { fill: #d7dcdd; opacity: .55; }
svg.viz .rasband.is-hot { opacity: .9; }
.scatter-wrap { overflow-x: auto; }
.scatter-wrap svg { min-width: 40rem; }
.scatter-wrap svg[hidden] { display: none; }
.fscale { display: flex; justify-content: flex-end; gap: .9rem; font-size: var(--fs-small); color: var(--muted); margin-bottom: .3rem; }
.fscale[hidden] { display: none; }
.fscale label { display: inline-flex; align-items: center; gap: .25rem; cursor: pointer; }
.legend { list-style: none; display: flex; flex-wrap: wrap; gap: .3rem 1.1rem; padding: 0; margin: 0 0 .5rem; font-size: var(--fs-small); }
.legend li { display: flex; align-items: center; gap: .35rem; }
.legend .key { width: 14px; height: 14px; }
.key-band { display: inline-block; width: 14px; height: 14px; background: #d7dcdd; opacity: .8; border-radius: 2px; }
.viz-table { margin-top: .5rem; font-size: var(--fs-meta); overflow-x: auto; }
.viz-table summary { cursor: pointer; color: var(--cobalt); }
.hint-more { margin: -.4rem 0 .75rem; }
.hint-more summary { cursor: pointer; color: var(--cobalt); font-size: var(--fs-meta); }
.hint-more[open] summary { margin-bottom: .4rem; }
.viz-table table { margin-top: .4rem; }
.viz-tip { position: absolute; z-index: 1000; pointer-events: none; background: var(--surface); color: var(--ink);
  border: 1px solid var(--rule); border-radius: var(--radius); box-shadow: 0 4px 14px rgba(23, 36, 48, .15);
  padding: .4rem .6rem; font-size: var(--fs-small); display: flex; flex-direction: column; gap: .1rem; max-width: 22rem; }
.viz-tip strong { font-size: var(--fs-meta); }
.viz-tip span { color: var(--muted); }

/* -------- manual entry, documents */
#newnotice fieldset.panel { border: 1px solid var(--rule); }
#newnotice legend { font-weight: 700; padding: 0 .3rem; }
#newnotice label { display: block; margin-bottom: .6rem; }
#newnotice textarea { width: 100%; box-sizing: border-box; }
/* a card's switch between its views (1.24.0) */
.chart-switch { display: flex; gap: 1rem; margin: -.2rem 0 .4rem; font-size: var(--fs-meta); }
.chart-switch label { display: inline-flex; align-items: center; gap: .3rem; cursor: pointer; }
tr.is-now td { font-weight: 700; }
/* the editor of locations and frequencies (1.23.0): every location in one form, one Save */
details.loc-editor { margin: 1rem 0 .4rem; }
details.loc-editor > summary { cursor: pointer; color: var(--cobalt); font-weight: 600; }
.loc-editor .ed-loc { border: 1px solid var(--rule); border-radius: var(--radius); padding: .6rem .9rem .8rem;
  margin: .8rem 0; background: var(--surface); }
.loc-editor .ed-loc > legend, .loc-editor details.ed-loc > summary { font-weight: 700; padding: 0 .3rem; cursor: pointer; }
.loc-editor .loc-form { background: none; border: 0; padding: 0; margin: .4rem 0; }
.loc-editor .em-table { margin: .3rem 0; }
.loc-editor tr.ed-new-em td { background: var(--pending-bg); }
.loc-editor .ed-actions { position: sticky; bottom: 0; background: var(--paper, #fff); padding: .6rem 0; margin: 0; }
small.added { display: inline; color: var(--muted); font-weight: 600; }
.em-table input { width: 100%; min-width: 5.5rem; box-sizing: border-box; }
.em-table input[type=checkbox] { width: auto; min-width: 0; margin-right: .3rem; }
.em-table label.check { display: inline-flex; align-items: center; white-space: nowrap; font-size: var(--fs-small); }
.em-table td.pw { white-space: nowrap; }
.em-table td.pw input { width: 5.5rem; min-width: 0; }
.em-table td { padding: .3rem .35rem; }
.row-actions { display: flex; gap: 1rem; align-items: center; margin: .6rem 0 0; }
.intake-alt { margin: .5rem 0 0; font-size: var(--fs-meta); color: var(--muted); }
.doclist { list-style: none; padding: 0; margin: 0 0 .75rem; }
.doclist li { padding: .4rem 0; border-bottom: 1px solid var(--rule); }
.doclist .docname { overflow-wrap: anywhere; font-weight: 600; }
.doclist form { margin: .15rem 0 0; }
.docdesc { color: var(--ink); }
.docupload label { display: block; margin-bottom: .5rem; font-size: var(--fs-meta); }
.docupload input[type=file] { max-width: 100%; }

/* -------- list: paging, inline status / determination */
.pager { display: flex; justify-content: space-between; align-items: center; gap: .75rem 1.5rem; flex-wrap: wrap; margin: -.75rem 0 1.5rem; }
.perpage { margin: 0; font-size: var(--fs-meta); color: var(--muted); }
.perpage select { margin: 0 .3rem; }
.pages { list-style: none; display: flex; gap: .25rem; flex-wrap: wrap; padding: 0; margin: 0; }
.pages a, .pages span { display: inline-block; min-width: 2rem; text-align: center; padding: .3rem .55rem;
  border: 1px solid var(--rule); border-radius: var(--radius); background: var(--surface); text-decoration: none; font-size: var(--fs-meta); }
.pages .cur { background: var(--cobalt); border-color: var(--cobalt); color: #fff; font-weight: 700; }
.pages .off { color: var(--muted); opacity: .6; }
.pages .gap { border-color: transparent; background: none; }
button.tagedit { font: inherit; font-weight: 700; font-size: var(--fs-small); border: 0; cursor: pointer; text-align: left; }
button.tagedit::after { content: " ▾"; font-size: .7em; opacity: .6; }
button.tagedit:hover { filter: brightness(.95); box-shadow: inset 0 0 0 1px currentColor; }
button.tagedit.is-saved { box-shadow: 0 0 0 2px var(--clear-mark); }
select.tagselect { font-size: var(--fs-small); padding: .1rem .2rem; max-width: 12rem; }
table.stage2 tr.carrier td:first-child { box-shadow: inset 3px 0 0 var(--cobalt); }
.s2kind { font-weight: 700; }
.rxsite { margin-bottom: .5rem; }
.rxsite summary { cursor: pointer; }
.rxsite summary small { display: inline; margin-left: .5rem; }
table.rx input { min-width: 5rem; }
.rxpaste { margin-top: .6rem; display: grid; gap: .35rem; max-width: 44rem; }
.rxpaste textarea { width: 100%; box-sizing: border-box; font-family: ui-monospace, monospace; font-size: var(--fs-small); }
.rxnote { display: block; color: var(--muted); }
.rxnote.in { color: var(--issue); font-weight: 600; }
.manual-chip, .zone-chip { margin-left: .4rem; font-size: var(--fs-small); font-weight: 700; color: var(--cobalt); text-decoration: none;
  border: 1px solid var(--cobalt); border-radius: 2px; padding: .05rem .35rem; vertical-align: middle; }
.verdict-panel h2 { margin-top: 0; }
.override-note { font-size: var(--fs-meta); margin: .4rem 0; }
.verdict-edit summary { cursor: pointer; color: var(--cobalt); font-size: var(--fs-meta); }
.verdict-edit form { margin-top: .5rem; }
.verdict-edit label { display: block; margin-bottom: .5rem; }
.verdict-edit textarea { width: 100%; box-sizing: border-box; }
td.verdict-cell small.manual { color: var(--cobalt); font-weight: 700; }
/* -------- assignment and affected sites */
button.assignee { display: block; margin-top: .25rem; background: none; border: 0; padding: 0; font: inherit; font-size: var(--fs-small);
  color: var(--muted); cursor: pointer; text-align: left; }
button.assignee::after { content: " ▾"; font-size: .7em; opacity: .6; }
button.assignee:hover { color: var(--cobalt); text-decoration: underline; }
button.assignee.is-saved { color: var(--clear); }
td.sitescell { min-width: 6rem; width: 7.5rem; }
.site-chip { display: block; font-size: var(--fs-small); line-height: 1.3; text-decoration: none; color: var(--ink);
  padding-left: .85rem; text-indent: -.85rem; margin-bottom: .15rem; max-width: 7rem; }
.site-chip::before { content: ""; display: inline-block; width: .55rem; height: .55rem; border-radius: 50%; margin-right: .3rem;
  vertical-align: .05rem; }
.site-chip.lv-issue::before { background: var(--issue-mark); }
.site-chip.lv-exceed::before { background: var(--issue-mark); border-radius: 1px; }
.site-chip.lv-review::before { background: var(--review-mark); }
.site-chip:hover { text-decoration: underline; }
@media screen and (max-width: 1260px) {
  table.notices td.sitescell { grid-column: 1 / -1; }
  table.notices .site-chip { display: inline-block; max-width: none; margin-right: .8rem; }
}
.carrier-mode { border: 1px solid var(--rule); border-radius: var(--radius); padding: .5rem .8rem; grid-column: 1 / -1; }
.carrier-mode legend { font-weight: 600; font-size: var(--fs-meta); }
.carrier-mode label.check { display: block; margin: .35rem 0; }
.carrier-mode input[type=number] { width: 7rem; display: inline-block; margin: 0 .3rem; }
.carrier-mode input[type=radio] { display: inline-block; width: auto; margin: 0 .4rem 0 0; vertical-align: -.1rem; }
.carrier-mode label.check small { margin-left: 1.5rem; }
.app-foot { display: flex; gap: 1.5rem; flex-wrap: wrap; justify-content: center; padding: 1rem clamp(1rem, 3vw, 2.5rem) 1.5rem;
  color: var(--muted); font-size: var(--fs-small); border-top: 1px solid var(--rule); margin-top: 1rem; }
.app-foot a { color: var(--muted); }
.app-foot .ver { font-variant-numeric: tabular-nums; }
.carrier-limit select { width: auto; min-width: 9.5rem; }
.carrier-limit input { width: 6.5rem; margin-top: .25rem; }
.carrier-help { margin: .3rem 0 .6rem; }
.carrier-help p { margin: .3rem 0; }
.hint.wide { grid-column: 1 / -1; }
button.verdict.tagedit { font-weight: 700; font-size: var(--fs-small); padding: .1rem .5rem; }
.import-warn { color: var(--review); font-weight: 700; text-decoration: none; margin-left: .35rem; cursor: help; }
a.import-warn:hover { color: var(--issue); }
.legend { display: flex; flex-wrap: wrap; align-items: center; gap: .3rem 1rem; font-size: var(--fs-small); color: var(--muted, #555); margin: .6rem 0 .4rem; }
.legend .site-chip { display: inline-block; }
.legend .site-chip:hover { text-decoration: none; }
.legend-h { font-weight: 600; }
.legend-sep { width: 1px; align-self: stretch; background: var(--rule); }
.legend .manual { display: inline; margin: 0 .2rem 0 0; color: var(--cobalt); font-weight: 700; }
/* -------- documentation */
.docpage { display: grid; grid-template-columns: 15rem minmax(0, 1fr); gap: 2rem; align-items: start; }
.docs-nav { position: sticky; top: 1rem; max-height: calc(100vh - 2rem); overflow-y: auto; font-size: var(--fs-meta); }
.docs-nav h2 { font-size: var(--fs-meta); font-weight: 700; color: var(--ink); margin: 0 0 .4rem; }
.docs-nav ul { list-style: none; padding: 0; margin: 0 0 1.2rem; }
.docs-nav li { margin: .25rem 0; }
.docs-nav a { text-decoration: none; }
.docs-nav a[aria-current] { font-weight: 700; }
.docs-body { max-width: 52rem; line-height: 1.55; }
.docs-body h1 { margin-top: 0; }
.doc-notices ul { list-style: none; padding-left: 0; }   /* third-party notices: the lists without bullets (1.19.2) */
.doc-notices li { padding-left: 1rem; text-indent: -1rem; }   /* a hanging indent keeps them a list */
.doc-notices li + li { margin-top: .35rem; }
.docs-body h2 { margin-top: 2rem; padding-top: .4rem; border-top: 1px solid var(--rule); scroll-margin-top: 1rem; }
.docs-body pre { background: #fff; border: 1px solid var(--rule); padding: .7rem .9rem; overflow-x: auto; border-radius: var(--radius); font-size: var(--fs-small); }
.docs-body code { font-size: .88em; }
.docs-body .doc-figure { margin: 1rem 0 1.2rem; overflow-x: auto; }
.docs-body .doc-figure svg { display: block; width: 100%; min-width: 40rem; height: auto; }
.docs-body table { border-collapse: collapse; margin: .8rem 0; font-size: var(--fs-meta); display: block; overflow-x: auto; }
.docs-body th, .docs-body td { border: 1px solid var(--rule); padding: .3rem .5rem; vertical-align: top; text-align: left; }
@media (max-width: 900px) {
  .docpage { grid-template-columns: minmax(0, 1fr); gap: 1rem; }
  .docs-nav { position: static; max-height: none; }
  .docs-toc { columns: 2; }
}
/* pie (donut) charts: ring on the left, legend with counts and percentages on the right */
.donut { display: flex; align-items: center; gap: 1.25rem; flex-wrap: wrap; }
.donut svg.donut-ring { width: 180px; flex: none; }
svg.viz .donut-n { font-size: 30px; font-weight: 700; fill: var(--ink); }
svg.viz.donut-ring .mark:focus-visible path, svg.viz.donut-ring .mark:focus-visible circle { stroke: var(--cobalt); stroke-width: 3; }
svg.viz.donut-ring .mark.is-hot path { filter: brightness(1.12); }
.donut-legend { list-style: none; margin: 0; padding: 0; flex: 1; min-width: 12rem; font-size: var(--fs-meta); }
.donut-legend li { display: grid; grid-template-columns: 14px 1fr auto 3.2rem; gap: .5rem; align-items: center;
  padding: .28rem 0; border-bottom: 1px solid #edf0f1; }
.donut-legend li:last-child { border-bottom: 0; }
.donut-legend .key { width: 12px; height: 12px; }
.donut-legend .dl-n { font-weight: 700; font-variant-numeric: tabular-nums; text-align: right; }
.donut-legend .dl-p { color: var(--muted); font-variant-numeric: tabular-nums; text-align: right; }
.donut-legend li.zero { color: var(--muted); }
.donut-legend li.zero .key { opacity: .35; }
.donut-legend li.zero .dl-n { font-weight: 400; }
svg.viz .val .pct { fill: var(--muted); font-weight: 400; }
/* -------- heat map of transmitter locations (Overview) */
.heat-bands { display: flex; flex-wrap: wrap; gap: .4rem; margin: 0 0 .6rem; }
.heat-band { display: inline-flex; margin: 0; cursor: pointer; position: relative; }
.heat-row { align-self: center; min-width: 9.5rem; font-size: var(--fs-small); color: var(--muted); }
@media (max-width: 760px) { .heat-row { flex-basis: 100%; min-width: 0; } }
.heat-band input { position: absolute; opacity: 0; pointer-events: none; width: 1px; height: 1px; margin: 0; }
.heat-band > span { border: 1px solid var(--rule); border-radius: 999px; padding: .2rem .75rem; font-size: var(--fs-small);
  background: var(--surface); }
.heat-band small { display: inline; font-size: var(--fs-small); }
.heat-band .n { font-weight: 700; margin-left: .2rem; }
.heat-band input:checked + span { background: var(--cobalt); border-color: var(--cobalt); color: #fff; }
.heat-band input:checked + span small { color: #dfe8f5; }
.heat-band input:focus-visible + span { outline: 2px solid var(--cobalt); outline-offset: 2px; }
.heat-map { height: 460px; border: 1px solid var(--rule); border-radius: 4px; }
@media (max-width: 760px) { .heat-map { height: 340px; } }
.heat-legend { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem .6rem; font-size: var(--fs-small); color: var(--muted);
  margin-top: .4rem; }
.heat-export { margin: .6rem 0 0; font-size: var(--fs-meta); }
.heat-export small { display: block; margin-top: .2rem; }
.heat-ramp { display: inline-block; width: 120px; height: 10px; border-radius: 2px;
  background: linear-gradient(90deg, #fde3d4, #f8a377, #d9612a, #8f3412, #6a270d); }
.heat-site { display: inline-flex; align-items: center; gap: .3rem; margin-left: 1rem; }

/* -------- maximum altitude for airborne locations (inside the stage 2 section) */
.ceiling { margin-top: 1.5rem; padding-top: 1rem; border-top: 1px solid var(--rule); }
.ceiling h3 { margin: 0; }
.ceil-loc { margin: 1rem 0 .3rem; font-size: var(--fs-meta); }
.ceil-result { background: var(--surface); border-left: 4px solid var(--pending-mark); padding: .6rem 1rem; margin: 0 0 .6rem; }
.ceil-result.ceil-to_filed { border-left-color: var(--clear-mark); }
.ceil-result.ceil-limited { border-left-color: var(--review-mark); }
.ceil-result.ceil-none { border-left-color: var(--issue-mark); }
table.ceil-sites tr.ceil-none td:nth-child(2) { color: var(--issue); }

/* -------- stage 2, laid out for reading: summary cards, then RAS-band and carrier tables */
.s2-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); gap: .75rem; margin: .75rem 0; }
.s2-dmg { color: var(--muted); }
.s2-dmg.is-exc { color: var(--issue); font-weight: 600; }
@media (max-width: 900px) { .s2-cards { grid-template-columns: 1fr; } }
.s2-card { background: var(--surface); border: 1px solid var(--rule); border-top: 4px solid var(--clear-mark); border-radius: var(--radius); padding: .6rem .9rem; }
.s2-card.is-exc { border-top-color: var(--issue-mark); }
.s2-card h3 { font-size: var(--fs-meta); margin: 0 0 .4rem; }
.s2-card h3 small { display: inline; font-weight: 400; margin-left: .3rem; }
.s2-card p { margin: .25rem 0; font-size: var(--fs-meta); }
.s2-card .s2-big { font-size: var(--fs-body); }
.s2-card .s2-big strong { font-size: var(--fs-big); margin-right: .2rem; }
.s2-card.is-exc .s2-big strong { color: var(--issue); }
.s2-sitelist { list-style: none; margin: 0; padding: 0; }
.s2-sitelist li { display: flex; justify-content: space-between; gap: .5rem; align-items: baseline; padding: .1rem 0; }
.s2-sitelist small { display: inline; white-space: nowrap; }
.s2-warn { background: var(--review-bg); border-left: 4px solid var(--review-mark); padding: .5rem .9rem; font-size: var(--fs-meta); margin: .5rem 0; }
.s2-howto, .s2-info { margin: .5rem 0 1rem; font-size: var(--fs-meta); }
.s2-howto summary, .s2-info summary, .s2-detail summary { cursor: pointer; color: var(--cobalt); }
.s2-howto ul { margin: .4rem 0; padding-left: 1.2rem; max-width: 80ch; }
.s2-howto li { margin: .3rem 0; }
.s2-h { font-size: var(--fs-body); margin: 1.25rem 0 .5rem; }
.s2-h small { display: inline; font-weight: 400; margin-left: .4rem; }
table.stage2 td small { max-width: 34ch; }
table.stage2 td.num small { margin-left: auto; }
table.stage2 .unit { color: var(--muted); font-size: .85em; white-space: nowrap; }
table.stage2 th small { display: inline; font-weight: 400; }
table.stage2 tr.s2-more td { padding-top: 0; padding-bottom: .5rem; }
table.stage2 > tbody > tr:has(+ tr.s2-more) > td { border-bottom: 0; }
table.stage2 > tbody > tr.s2-more > td:first-child { box-shadow: none; }
.s2-detail summary { font-size: var(--fs-small); }
.s2-detail[open] { background: #f7f9f9; padding: .4rem .6rem .6rem; border-radius: var(--radius); }
.s2-detail .table-wrap { margin: .5rem 0; }
.s2-calc { font-size: var(--fs-small); color: var(--muted); margin: .4rem 0; max-width: 110ch; }
table.s2-sites { font-size: var(--fs-small); }
table.s2-sites th, table.s2-sites td { padding: .25rem .5rem; }
table.s2-sites td small { max-width: 28ch; }
table.stage2 td.num { white-space: nowrap; }
table.stage2 td.num small { white-space: normal; min-width: 16ch; }
table.stage2 td:nth-child(3), table.stage2 td:nth-child(4) { min-width: 10rem; }
.s2-sitelist li { display: grid; grid-template-columns: minmax(0, 1fr) auto; }
.s2-sitelist .site-chip { display: inline-block; }
table.s2-sites td.num { white-space: normal; }
table.s2-sites td.num small { display: block; }
table.s2-sites td:first-child { white-space: normal; min-width: 9rem; }
.s2-detail .table-wrap { max-width: 100%; }
/* the details panel takes the table's width without widening it (its own table scrolls instead) */
.s2-detail .table-wrap { width: 0; min-width: 100%; }
.legend .site-chip, .s2-sitelist .site-chip { max-width: none; }
/* the "Conflict" result: a transmission inside a site receiver outside the RAS bands */
.tally-item.v-conflict .tally-n { color: var(--conflict); }
.site-chip.lv-conflict::before { background: var(--conflict-mark); transform: rotate(45deg); border-radius: 1px; }
.kpi-s { font-size: var(--fs-small); color: var(--muted); }
/* -------- collapsible notice sections */
.sec-tools { margin: .25rem 0 .5rem; font-size: var(--fs-small); display: flex; justify-content: flex-end; gap: 1rem; }
details.sec { margin: 0 0 1.25rem; }
details.sec > summary.sec-sum { display: flex; flex-wrap: wrap; align-items: baseline; gap: .25rem .9rem; cursor: pointer;
  list-style: none; padding: .35rem 0; border-bottom: 1px solid var(--rule); margin-bottom: .6rem; }
details.sec > summary.sec-sum::-webkit-details-marker { display: none; }
details.sec > summary.sec-sum::before { content: "▾"; color: var(--cobalt); font-size: var(--fs-meta); width: .9rem; transition: transform .15s; }
details.sec:not([open]) > summary.sec-sum::before { transform: rotate(-90deg); }
details.sec:not([open]) > summary.sec-sum { margin-bottom: 0; }
details.sec > summary.sec-sum h2 { margin: 0; }
details.sec > summary.sec-sum:hover h2 { color: var(--cobalt); }
.sec-line { font-size: var(--fs-meta); color: var(--muted); display: inline-flex; align-items: baseline; gap: .35rem; flex-wrap: wrap; }
.sec-line .verdict, .sec-line .s2chip { font-size: var(--fs-small); }
details.sec .sec-head .hint { margin: 0; }
/* stage 2 receiver switch and what was left out */
.s2-switch { display: inline-flex; align-items: center; gap: .45rem; margin: 0; font-size: var(--fs-small);
  font-weight: 400; color: var(--muted); white-space: nowrap; }
.s2-switch[hidden] { display: none; }
.s2-switch select { display: inline-block; width: auto; margin: 0; padding: .2rem .4rem; font-size: var(--fs-small); }
.s2-left-out { font-size: var(--fs-meta); color: var(--muted); margin: .25rem 0 .75rem; }
details.sec .sec-head { flex-wrap: wrap; row-gap: .5rem; }
.sec-head form button { white-space: nowrap; }
.map-legend { list-style: none; margin: .4rem 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: .2rem 1rem;
  font-size: var(--fs-small); color: var(--muted); align-items: center; line-height: 1.3; }
.map-legend li { display: inline-flex; align-items: center; gap: .3rem; }
.map-legend svg { width: 12px; height: 12px; flex: none; }

/* -------- stage 2: the run's model and diffraction, and what a result was computed with */
.s2-run { display: inline-flex; flex-wrap: wrap; align-items: flex-end; gap: .4rem .6rem; }
.s2-run label { margin: 0; font-size: var(--fs-small); color: var(--muted); }
.s2-run select { display: block; }
.s2-used { color: var(--muted); font-size: var(--fs-small); align-self: center; }
.grid-form fieldset.itm-params { grid-column: 1 / -1; display: grid; grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
  gap: 0 1.25rem; align-items: start; border: 1px solid var(--rule); border-radius: var(--radius); padding: .6rem 1rem 0; margin: 0 0 .8rem; min-width: 0; }
.itm-params legend { font-weight: 600; padding: 0 .3rem; }

/* -------- Overview: impact per telescope site (headers wrap so the table fits its card) */
table.impact th { white-space: normal; line-height: 1.2; vertical-align: bottom; }
table.impact th, table.impact td { padding: .5rem .55rem; }
table.impact td:first-child { min-width: 11rem; }
table.impact .det { border-left: 1px solid var(--rule); }

/* -------- Overview, requested frequencies and power: the legend shows or hides each kind of mark */
.legend-toggle { display: inline-flex; align-items: center; gap: .35rem; background: none; border: 0; padding: .1rem .2rem;
  font: inherit; color: inherit; cursor: pointer; border-radius: 3px; }
.legend-toggle:hover { background: var(--surface); }
.legend-toggle:focus-visible { outline: 2px solid var(--cobalt); outline-offset: 1px; }
.legend-toggle[aria-pressed="false"] { opacity: .45; text-decoration: line-through; }

/* -------- Wide screens (1.19.1): data pages (main.wide) use the whole window; text stays at a readable width */
.loc-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(56rem, 100%), 1fr)); gap: 0 2rem;
  align-items: start; }   /* the notice's locations: side by side once two fit */
.loc-block { min-width: 0; }
.ov-grid.pair { grid-template-columns: repeat(auto-fit, minmax(min(36rem, 100%), 1fr)); }
@media (min-width: 1600px) {
  main.wide .split { grid-template-columns: minmax(0, 1fr) clamp(20rem, 17vw, 28rem); gap: 2.5rem; }
  table.notices th, table.notices td { padding: .55rem .7rem; }
  table.notices .tag, table.notices .verdict { max-width: none; white-space: nowrap; }
  td.sitescell { width: 12rem; }
  .site-chip { max-width: 12rem; }
}
@media (min-width: 1800px) {
  main.wide .kpis { grid-template-columns: repeat(8, minmax(0, 1fr)); }
  main.wide .ov-grid.two { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  main.wide .impact-body { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); gap: 2rem; align-items: start; }
  main.wide .impact-body .table-wrap { margin-bottom: 0; }
  .heat-map { height: clamp(460px, 26vw, 760px); }
}

/* -------- Printing (1.18.10): the page as a record. What is on the screen, without the controls; a plot, map, table
   row or panel never split between two pages, and a heading kept with what follows it; colours as on the screen; a
   section collapsed on the screen (▾) is left out. The CUI banner repeats at the top and bottom of every page: a marked
   page is in a table (base.html, .print-frame) whose header and footer the browser repeats; on the screen it is flat. */
.print-only { display: none; }
@media screen {
  .print-frame, .print-frame > *, .print-frame > * > tr, .print-frame > * > tr > td { display: contents; }
}
@media print {
  @page { margin: 12mm 11mm; }
  :root { font-size: 12.5px; background: #fff; }
  body { background: #fff; }
  * { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  main { padding: 0; max-width: none; }
  .print-only { display: block; }
  .spec-screen { display: none !important; }
  .spec-print { display: block !important; }

  /* marking on every page: the frame's header and footer (a real table: CSS display: table is not repeated) */
  .print-frame { table-layout: fixed; }
  .print-frame > * > tr > td { padding: 0; border: 0; }
  .print-frame > tbody > tr { break-inside: auto; }
  .print-frame > thead .cui-banner { margin-bottom: .5rem; }
  .cui-foot { margin: .5rem 0 0; }
  .cui-foot p { margin: 0 0 .2rem; }

  /* the controls: navigation, buttons, editing forms, map zoom; what was chosen in a filter stays, as text */
  .topbar, .app-foot, .flash, .sec-tools, .crumb, .intake, button, .leaflet-control-zoom, .map-save, .heat-export, .s2-run,
  details.loc-edit, details.verdict-edit, .no-print, .map-pick, input[type=radio], input[type=checkbox] { display: none !important; }
  .legend-toggle { display: inline-flex !important; }
  button.tagedit { display: inline-block !important; cursor: auto; }   /* the notice list's status, result, … tags */
  button.assignee.tagedit { display: block !important; }
  button.tagedit::after { content: none; }
  .result-actions, .logform, .logactions, .logfoot a.linkish, a.button-link { display: none; }   /* actions: the list's, the log's */
  table.notices td.verdict-cell, table.notices th:nth-child(2) { padding-left: .65rem; }
  .filterbox, .bulkbar, .bulk-delete, .pager, .pick, .duefield { display: none !important; }
  .ro-only { display: inline; }
  .print-selection { margin: 0 0 .4rem; font-size: var(--fs-meta); }
  .legend-toggle[aria-pressed="false"] { display: none !important; }
  .heat-band:not(:has(input:checked)), label:has(> input[type=radio]:not(:checked)) { display: none; }
  select, input { appearance: none; -webkit-appearance: none; border: 0; background: none; padding: 0; color: inherit; font: inherit; }
  ::placeholder { color: transparent; }
  a { color: inherit; text-decoration: none; }
  /* closed: not printed; open: its summary is a plain heading */
  details:not([open]) { display: none; }
  summary { list-style: none; cursor: auto; color: inherit; }
  summary::-webkit-details-marker { display: none; }
  details.sec > summary.sec-sum::before { content: none; }

  /* the page width: everything in one column, tables wrapping instead of scrolling */
  .split { display: block; }
  .table-wrap, .split-side { overflow: visible; max-height: none; position: static; }
  table { width: 100%; }
  th, td { padding: .3rem .4rem; }
  .site-list { min-width: 0; }
  .kpis { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .ov-grid.two { grid-template-columns: repeat(2, minmax(0, 1fr)); }

  /* not split between pages */
  figure, svg, img, tr, .panel, .viz-card, .kpi, .warn, .logentry, .leaflet-container, #map, .lossmap, .profile-plot, .legend, .s2-summary,
  .notice-head, .filed-text dl > div, .spec-detail figure, .site-list li { break-inside: avoid; }
  .panel.wide, tr.s2-more { break-inside: auto; }   /* long: their tables, plots and maps keep together instead */
  .split-side { margin-top: 1.25rem; }
  /* a heading stays with what follows it */
  h1, h2, h3, h4, summary, figcaption, .loc-h, .filed-desc, .sec-line, caption { break-after: avoid; }
  thead { display: table-header-group; }
  .print-meta { color: var(--muted); font-size: var(--fs-small); margin: 0 0 .5rem; }
  .review-print { display: grid; grid-template-columns: 11rem minmax(0, 1fr); gap: .25rem 1rem; margin: 0; }
  .review-print dt { color: var(--muted); }
  .review-print dd { margin: 0; }
}

/* the worker queue (2.0.0): a job's state, in the cobalt family of "running" and the neutral grey of waiting */
.nav-count { display: inline-block; min-width: 1.3em; padding: 0 .35em; border-radius: 999px; background: #c8d3dc;
  color: var(--ink); font-size: var(--fs-small); font-weight: 700; text-align: center; line-height: 1.4; }
.queue-sum { margin: .25rem 0 .75rem; }
.tag.q-running    { --mark: var(--cobalt); --tint: #e3ebf7; font-weight: 700; }
.tag.q-queued     { --mark: var(--st-review); --tint: #eef2f9; }
.tag.q-held       { --mark: var(--pending-mark); --tint: var(--pending-bg); color: var(--muted); }
.tag.q-cancelling { --mark: var(--pending-mark); --tint: var(--pending-bg); color: var(--muted); font-style: italic; }
table.queue td small { display: block; color: var(--muted); }
table.queue td.q-act { white-space: nowrap; }
table.queue td.q-act form.inline:first-child { margin-left: 0; }
.job-line { display: flex; flex-wrap: wrap; gap: .5rem 1rem; align-items: center; }
.job-line p { margin: 0; }
a.s2-job { color: inherit; }
a.sat-damage { display: block; color: var(--issue); font-size: var(--fs-small); font-weight: 600; white-space: normal; }
a.ceil-job { display: block; color: var(--cobalt); font-size: var(--fs-small); font-weight: 600; white-space: normal; }

/* received power at a site (2.10.0) */
.levels-panel { margin: 1.25rem 0; }
.levels-pick { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1rem; margin: .25rem 0 .5rem; }
.levels-pick label { display: inline-flex; align-items: center; gap: .4rem; margin: 0; }
.levels-pick select { width: auto; margin: 0; }
svg.viz.levels .legend .tick { font-size: 11px; }
.levels-print-name { display: none; }
@media print {   /* the chart shown prints as vector graphics, on one page; the picker becomes the site's name */
  .levels-pick label, .levels-png { display: none !important; }
  .levels-print-name { display: inline; }
  .levels-keep { break-inside: avoid; }
}

/* -------- logos (2.11.0): the application's on the top bar, the partners' in the footer, a picture behind sign-in */
.brand { display: inline-flex; align-items: center; gap: .55rem; }
.brand-logo { width: 38px; height: auto; flex: none; margin: -9px 0; }   /* no taller bar for it */
.app-foot:has(.foot-partners) { align-items: center; }
.app-foot .foot-partners { height: 44px; width: auto; margin-left: auto; }
body.auth-bg { background: linear-gradient(rgba(11, 25, 48, .35), rgba(11, 25, 48, .35)),
  url("/static/brand/login-bg.jpg") center / cover no-repeat fixed var(--ink); min-height: 100vh; }
body.auth-bg .authbox { box-shadow: 0 10px 40px rgba(0, 0, 0, .35); background: var(--surface);
  margin-top: clamp(2rem, 14vh, 9rem); }   /* no top bar above it signed out (2.11.2) */
@media print { .brand-logo, .foot-partners { display: none; } body.auth-bg { background: none; } }
@media (max-width: 640px) { .app-foot .foot-partners { height: 32px; margin-left: 0; } }
/* stage 2's tables fold under "All paths" (2.11.0) */
details.s2-paths { margin: 1rem 0; border-top: 1px solid var(--rule); }
details.s2-paths > summary { cursor: pointer; padding: .6rem 0; display: flex; flex-wrap: wrap; gap: .25rem .75rem; align-items: baseline;
  list-style: none; }
details.s2-paths > summary::-webkit-details-marker { display: none; }
details.s2-paths > summary::before { content: "▾"; color: var(--cobalt); width: .8rem; transition: transform .15s; }
details.s2-paths:not([open]) > summary::before { transform: rotate(-90deg); }
details.s2-paths > summary:hover strong { color: var(--cobalt); }
details.levels-about > summary { cursor: pointer; color: var(--cobalt); font-size: var(--fs-small); }
@media print { details.levels-about { display: none; } }
details.s2-paths > summary .sec-line { font-size: var(--fs-meta); }
details.s2-paths[open] > summary { margin-bottom: .25rem; }
