/* ad600-scan-panel.js — was an injected style. Hashed by scripts/build.mjs (ensure: views-ad600-scan-panel). */
.a6-wrap { display: flex; flex-direction: column; gap: 4px; }
/* ── field primitives, owned HERE ────────────────────────────────────────────
   These used to be admin-panels.js's .amp-field / .amp-label / .amp-input /
   .amp-row / .amp-row-btns, which live in ITS injected <style id="adm-panels-
   styles"> and nowhere else. That was fine while Admin → Devices → Manage was
   the only mount point, because opening the drawer ran admin-panels.js first.
   It stopped being fine when the per-event Analyzers tab started mounting the
   same component (analyzers-panel.js expandDevice): that route never imports
   admin-panels.js, so every input and select in this panel rendered as a BARE
   NATIVE CONTROL there — different box, different metrics, and no .amp-row flex
   to space the run with. Hence "the text boxes look different and the text is
   clashing into each other", depending on which tab you opened it from.
   A component that two views mount has to carry its own styling. */
.a6-field { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; margin-top: 8px; }
.a6-label { font-size: 11px; color: var(--text-2); }
/* Explicit widths, rather than the content-sizing the borrowed .amp-input used.
   That property is Chrome-only, so on Safari/Firefox these boxes fell back to
   the native ~20-character default — a second reason the same box looked
   different in two places. A number box is also the one control that must NOT
   absorb slack: flex:0 0 auto keeps a 6-character frequency 6 characters wide
   however much room the row has. */
.a6-input {
  flex: 0 0 auto; box-sizing: border-box; height: 34px; padding: 0 10px; max-width: 100%;
  background: var(--bg-input); border: 1px solid var(--border-subtle); border-radius: var(--r-sm);
  color: var(--text-1); font-size: 13px; font-family: var(--font-ui); outline: none;
}
.a6-input:focus { border-color: var(--accent); box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 22%, transparent); }
/* A select draws its OWN chevron: the native arrow sat flush against the box
   edge (owner, 2026-10-07). appearance:none + an inline chevron with 28px of
   right padding keeps it clear of the edge, same look as the shared Select
   component's chevron (components.css .select .chev). Width is the widest
   option, capped — never the card. */
select.a6-input {
  -webkit-appearance: none; appearance: none; cursor: pointer;
  width: auto; padding: 0 28px 0 10px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='10' height='10' fill='none' stroke='%238a93a6' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'><path d='M6 9l6 6 6-6'/></svg>");
  background-repeat: no-repeat; background-position: right 10px center; background-size: 10px 10px;
}
select.a6-input:disabled { cursor: not-allowed; }
/* No spinners. The step here is 0.001 MHz, so a spinner arrow nudges a scan
   edge by 1 kHz — an interaction nobody wants — and it was eating ~13px of a
   box that then clipped its own value: a stop frequency of 5999.999 rendered
   as "5999.9" and an RSSI offset of -12.5 as "-1.!". A coordinator misreading
   a scan edge off a clipped box is exactly the failure this panel exists to
   avoid. Keyboard arrows still step; only the mouse affordance goes. */
.a6-input[type="number"] { appearance: textfield; -moz-appearance: textfield; }
.a6-input[type="number"]::-webkit-outer-spin-button,
.a6-input[type="number"]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
/* Row gap is the SMALL one; .a6-set below owns the large one between groups. */
.a6-row { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 14px; }
.a6-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
/* ── the grouping rule that fixes the wide-viewport run-together ─────────────
   A label, its box and its unit are ONE thing and must read as one: 6px inside
   a group, 14px between groups. A single uniform gap is what let "…995" "MHz"
   "RSSI offset" sit 6px apart in the same 11px muted grey and read as one
   sentence once the window was maximised and nothing wrapped any more.
   Wrapping happens BETWEEN groups first, because the gap there is the one with
   slack, which is what makes the narrow case (one setting per line) fall out
   for free. A group may still break internally as a LAST resort — measured at
   343px, where the Custom-range group is wider than the column and clipping
   its own "MHz" off the card edge would be strictly worse than a second line.
   This is why the fix is container-width-independent: no media query and no
   tuned breakpoint, so it holds at the ~728px admin modal, the ~872px
   Analyzers tab and a phone alike. */
.a6-set { display: inline-flex; align-items: center; flex-wrap: wrap; gap: 4px 6px; max-width: 100%; }
/* The one thing inside a group that must never be split: a start box, its dash
   and its stop box are a single reading. */
.a6-pair { display: inline-flex; align-items: center; flex-wrap: nowrap; gap: 6px; }
.a6-loading, .a6-hint { font-size: 12px; color: var(--text-muted); line-height: 1.5; }
.a6-hint { margin-top: 4px; }
.a6-pill-label { white-space: nowrap; }
.a6-labelrow { display: flex; align-items: center; gap: 4px; }
.a6-help { all: unset; display: inline-flex; align-items: center; justify-content: center; cursor: help; color: var(--text-muted); line-height: 0; border-radius: 50%; }
.a6-help:hover, .a6-help:focus-visible { color: var(--accent-text); }
.a6-help:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.a6-help-pop { font-size: 12px; line-height: 1.5; color: var(--text-1); max-width: 280px; }
/* The observer lock. Same amber the analyzers tree panel uses for the same
   state (.an-observer-banner in event-analyzers.js) so one receiver does not
   read as two different conditions in two tabs. Amber, not red: nothing is
   wrong — somebody else is simply driving. */
.a6-lock {
  margin: 6px 0 2px; font-size: 12px; line-height: 1.5;
  color: var(--warn); background: color-mix(in srgb, var(--warn) 12%, transparent);
  border: 1px solid color-mix(in srgb, var(--warn) 35%, transparent);
  border-radius: var(--r-sm); padding: 6px 10px;
}
/* WHO DRIVES THIS RECEIVER — the field that governs every other field on the
   panel, so it is separated from them rather than sitting in the same run. */
.a6-mode { padding-bottom: 10px; border-bottom: 1px solid var(--border-subtle); }
/* THE WWB CO-EXISTENCE LINE. One compact line, muted amber, NO box: it is a
   standing fact ("another system may own this receiver"), shown in both switch
   positions on purpose, and a box made it the loudest thing on the card. */
.a6-wwb { margin: 4px 0 0; font-size: 11px; line-height: 1.4; color: var(--warn); }
/* PASSIVE MODE: every scan setting is READ-ONLY (disabled, see paintMode), and
   dimmed so it reads as inert. The mode field itself is excluded: it is the one
   control that IS in force. A disabled pill already dims itself, so it is not
   dimmed twice. */
.a6-passive .a6-field:not(.a6-mode) { opacity: .62; }
.a6-passive-note { margin: 4px 0 0; font-size: 12px; line-height: 1.4; color: var(--text-2); }
.a6-passive-note[hidden] { display: none; }
.a6-passive .a6-pill:disabled { opacity: 1; }
.a6-passive .a6-input:disabled { cursor: not-allowed; }
/* Locked controls stay LEGIBLE. Dimmed enough to read as inert, not so far
   that the window and antenna state — the reason to open a locked panel —
   become hard to read. */
.a6-locked .a6-input:disabled { opacity: .75; cursor: not-allowed; }
.a6-locked .a6-pill:disabled { opacity: .75; }
.a6-msg.lock { color: var(--warn); }
.a6-state { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 4px 0 2px; }
.a6-badge {
  display: inline-block; padding: 1px 8px; border-radius: var(--r-pill); font-size: 10px;
  text-transform: uppercase; letter-spacing: .5px; font-family: var(--font-mono); border: 1px solid;
}
/* "Set" is deliberately NEUTRAL, never the ok/green token: the platform has the
   row, which is not evidence the device is running it. */
.a6-badge.set { color: var(--text-1); border-color: var(--border-strong, var(--border)); }
.a6-badge.unset { color: var(--text-muted); border-color: var(--border-subtle); }
.a6-stamp { font-size: 11px; color: var(--text-muted); font-family: var(--font-mono); }
/* The bin step: a fact, printed beside the control it is NOT. Muted so it never
   reads as a disabled input someone should be able to switch on. */
.a6-step { font-size: 11px; color: var(--text-muted); line-height: 1.5; }
.a6-unit { font-size: 11px; color: var(--text-muted); font-family: var(--font-mono); white-space: nowrap; }
.a6-ants { display: flex; flex-direction: column; gap: 4px; margin-top: 2px; }
/* One block per antenna: what it does on the first line, how it is tuned on the
   second. A single row would put six controls on one line and force a
   horizontal scroll in the Manage drawer, where this panel lives. */
.a6-ant {
  display: flex; flex-direction: column; gap: 4px;
  padding: 5px 0; border-bottom: 1px solid var(--border-subtle);
}
.a6-ant:last-child { border-bottom: none; }
.a6-ant-head { display: flex; align-items: center; gap: 8px; }
.a6-ant-cfg { display: flex; align-items: center; gap: 6px 14px; flex-wrap: wrap; padding-left: calc(2ch + 8px); }
.a6-ant-letter {
  width: 2ch; font-family: var(--font-mono); font-size: 13px; font-weight: 600; color: var(--text-1);
}
/* A setting's NAME, styled as a name — the house micro-label (mono, uppercase,
   tracked; cf. .a6-badge here and .amp-do-table th). It was previously the same
   11px muted grey as .a6-unit beside it, so "MHz" and "RSSI offset" were
   typographically indistinguishable. Now one is plainly a label and the other
   plainly a unit, which carries the separation even where a group wraps. */
.a6-sub-label {
  font-size: 10px; color: var(--text-2); font-family: var(--font-mono);
  text-transform: uppercase; letter-spacing: .06em; white-space: nowrap;
}
.a6-dash { font-size: 11px; color: var(--text-muted); }
.a6-select { font-size: 12px; width: auto; max-width: 22ch; }
.a6-db { width: calc(6ch + 22px); text-align: right; font-family: var(--font-mono); }
/* Number boxes size to their content where the browser can (field-sizing is
   Chrome/Edge today; elsewhere the fixed widths above hold): ~10ch for a MHz
   value, ~6ch for dB, never stretching to the card. */
@supports (field-sizing: content) {
  .a6-db { field-sizing: content; width: auto; min-width: calc(6ch + 22px); max-width: calc(12ch + 22px); }
}
/* Toggle = pill (control standard). Off is outlined and muted; on is accent-tinted. */
.a6-pill {
  display: inline-flex; align-items: center; gap: 6px; cursor: pointer;
  padding: 3px 10px; border-radius: var(--r-pill); font-size: 11px; font-family: var(--font-ui);
  background: none; border: 1px solid var(--border-subtle); color: var(--text-muted);
  white-space: nowrap; flex: 0 0 auto;
}
.a6-pill:hover:not(:disabled) { border-color: var(--border-strong, var(--border)); color: var(--text-2); }
.a6-pill:focus-visible { outline: none; border-color: var(--accent); box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 22%, transparent); }
.a6-pill.on { color: var(--accent-text); border-color: var(--accent); background: color-mix(in srgb, var(--accent) 10%, transparent); }
.a6-pill:disabled { opacity: .5; cursor: not-allowed; }
.a6-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--text-muted); }
.a6-pill.on .a6-dot { background: var(--accent); }
.a6-save:disabled { opacity: .45; cursor: not-allowed; }
.a6-msg { font-size: 11px; color: var(--text-muted); line-height: 1.5; max-width: 52ch; }
.a6-msg.warn { color: var(--warn); }
.a6-msg.err { color: var(--danger); }
/* A save is pending on the device, never "done" — neutral, never green. */
.a6-msg.pending { color: var(--text-2); }
.a6-err { font-size: 12px; color: var(--danger); line-height: 1.5; }
