/* Flags board. Tokens are scoped to .flags-page and .fl-mod — the app deliberately
   has no
   :root token sheet (see mira_dock.css). Severity triplets are the site-review
   _RAG palette; `watch` has no _RAG counterpart and uses the brand blue. */
.flags-page, .fl-mod{
  --fl-surface:#ffffff; --fl-surface-2:#fafbfc; --fl-surface-3:#eef1f5;
  --fl-line:#dde2e9; --fl-line-strong:#c6cdd8;
  --fl-ink:#161a20; --fl-ink-2:#4a5563; --fl-ink-3:#7b8796;
  --fl-brand:#1E40AF; --fl-brand-soft:#eef1f8; --fl-brand-line:#c9d4ee;
  --fl-crit-bg:#fdecea; --fl-crit-line:#f6cfcb; --fl-crit-ink:#b42318; --fl-crit:#d0402f;
  --fl-warn-bg:#fff7e0; --fl-warn-line:#f3e3b0; --fl-warn-ink:#8a6d1a; --fl-warn:#d9a520;
  --fl-watch-bg:#eef1f8; --fl-watch-line:#c9d4ee; --fl-watch-ink:#3B5BB8; --fl-watch:#6b8bd6;
  --fl-none-bg:#f1f3f5; --fl-none-line:#e3e6e9; --fl-none-ink:#495057;
  --fl-d1:#2a78d6; --fl-d2:#eb6834; --fl-d3:#1baf7a;
  --fl-d4:#eda100; --fl-d5:#e87ba4; --fl-d6:#008300;
  --fl-shadow:0 1px 2px rgba(20,28,44,.06), 0 4px 14px rgba(20,28,44,.05);
  --fl-r:12px;
  padding:18px 20px 60px; color:var(--fl-ink);
}
@media (prefers-color-scheme: dark){
  .flags-page:not([data-theme="light"]), .fl-mod:not([data-theme="light"]){
    --fl-surface:#191d24; --fl-surface-2:#1e232b; --fl-surface-3:#232932;
    --fl-line:#2c333d; --fl-line-strong:#3d4652;
    --fl-ink:#eef1f5; --fl-ink-2:#aab4c2; --fl-ink-3:#7e8a99;
    --fl-brand:#7ea2f0; --fl-brand-soft:#1c2436; --fl-brand-line:#33415f;
    --fl-crit-bg:#2e1614; --fl-crit-line:#5a2a24; --fl-crit-ink:#f29c92;
    --fl-warn-bg:#2b2411; --fl-warn-line:#544620; --fl-warn-ink:#e8c766;
    --fl-watch-bg:#1a2130; --fl-watch-line:#334063; --fl-watch-ink:#a6bcec;
    --fl-none-bg:#1e232b; --fl-none-line:#2c333d; --fl-none-ink:#98a3b1;
  }
}
.flags-page h1{font-size:19px;font-weight:600;letter-spacing:-.02em;margin:0}
.fl-lede{margin:2px 0 0;font-size:12.5px;color:var(--fl-ink-3);max-width:78ch}
.fl-num{font-variant-numeric:tabular-nums}

.fl-summary{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:14px 0 11px;
  padding:9px 13px;background:var(--fl-surface);border:1px solid var(--fl-line);
  border-radius:var(--fl-r);box-shadow:var(--fl-shadow);font-size:12.5px}
.fl-summary .big{font-size:17px;font-weight:600;letter-spacing:-.02em}
.fl-summary .sep{width:1px;height:16px;background:var(--fl-line)}
.fl-summary .muted{color:var(--fl-ink-3)}
.fl-summary .right{margin-left:auto;color:var(--fl-ink-3);font-size:11.5px}

.fl-tiles{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:9px;margin-bottom:13px}
@media (max-width:1250px){.fl-tiles{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:720px){.fl-tiles{grid-template-columns:repeat(2,minmax(0,1fr))}}
.fl-tile{background:var(--fl-surface);border:1px solid var(--fl-line);border-radius:var(--fl-r);
  box-shadow:var(--fl-shadow);padding:11px 12px;text-align:left;width:100%;cursor:pointer;
  transition:transform .13s;position:relative;overflow:hidden;display:block}
.fl-tile:hover{transform:translateY(-2px)}
@media (prefers-reduced-motion:reduce){.fl-tile{transition:none}}
.fl-tile,.fl-fbtn{-webkit-tap-highlight-color:transparent}
.fl-tile[data-on="1"]{border-color:var(--tt-c);box-shadow:0 0 0 2px var(--fl-brand-soft),var(--fl-shadow)}
.fl-tile[data-on="1"]::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--tt-c)}
.fl-tile-h{display:flex;align-items:center;gap:7px;min-height:30px}
.fl-tile-i{width:26px;height:26px;border-radius:7px;flex:0 0 26px;display:grid;place-items:center;
  color:#fff;font-size:12px;font-weight:700}
.fl-tile-n{font-size:12px;font-weight:600;letter-spacing:-.01em;line-height:1.2}
.fl-tile-v{font-size:23px;font-weight:600;letter-spacing:-.03em;line-height:1;margin-top:8px}
.fl-tile-vl{font-size:11px;color:var(--fl-ink-3);margin-left:6px}
.fl-bar{display:flex;height:5px;border-radius:3px;overflow:hidden;margin-top:8px;gap:2px;background:var(--fl-surface-3)}
.fl-bar i{display:block;height:100%;border-radius:2px}
.fl-tile-f{display:flex;gap:6px;margin-top:8px;padding-top:7px;border-top:1px solid var(--fl-line);
  font-size:10.5px;color:var(--fl-ink-3);white-space:nowrap}
.fl-tile-f b{color:var(--fl-crit-ink)}
.fl-tile-f .w{margin-left:auto;overflow:hidden;text-overflow:ellipsis}
.fl-tile-f2{margin-top:3px;font-size:10.5px;color:var(--fl-ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.fl-body{display:grid;grid-template-columns:200px minmax(0,1fr) auto;gap:14px;align-items:start}
@media (max-width:900px){.fl-body{grid-template-columns:1fr}}
.fl-filters{background:var(--fl-surface);border:1px solid var(--fl-line);border-radius:var(--fl-r);
  padding:13px;box-shadow:var(--fl-shadow);position:sticky;top:12px}
.fl-filters .fl-h{font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;color:var(--fl-ink-2);
  font-weight:700;padding-bottom:9px;margin-bottom:3px;border-bottom:1px solid var(--fl-line)}
.fl-filters h3{font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;color:var(--fl-ink-3);margin:16px 0 8px}
.fl-fbtn{display:flex;align-items:center;gap:8px;width:100%;padding:5px 7px;border-radius:6px;
  font-size:12.5px;color:var(--fl-ink-2);text-align:left;border:0;background:none;cursor:pointer}
.fl-fbtn:hover{background:var(--fl-surface-3)}
.fl-fbtn[data-on="1"]{background:var(--fl-brand-soft);color:var(--fl-brand);font-weight:500}
.fl-fbtn .sq{width:9px;height:9px;border-radius:3px;flex:0 0 9px}
.fl-fbtn .c{margin-left:auto;font-size:11px;color:var(--fl-ink-3);font-variant-numeric:tabular-nums}
.fl-clear{width:100%;margin-top:14px;padding:6px;border:1px dashed var(--fl-line-strong);
  border-radius:6px;font-size:11.5px;color:var(--fl-ink-3);background:none;cursor:pointer}

.fl-boardbar{display:flex;align-items:center;gap:10px;margin-bottom:9px;padding:8px 11px;
  background:var(--fl-surface);border:1px solid var(--fl-line);border-radius:var(--fl-r);
  box-shadow:var(--fl-shadow);flex-wrap:wrap}
.fl-boardbar .lab{font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;color:var(--fl-ink-3);font-weight:600}
.fl-seg{display:flex;gap:2px;background:var(--fl-surface-3);padding:3px;border-radius:8px}
.fl-seg button{padding:5px 11px;border-radius:6px;font-size:12px;font-weight:500;color:var(--fl-ink-2);
  border:0;background:none;cursor:pointer}
.fl-seg button[data-on="1"]{background:var(--fl-surface);color:var(--fl-ink);box-shadow:var(--fl-shadow)}
.fl-seg .c{font-weight:600;opacity:.6;margin-left:5px;font-variant-numeric:tabular-nums}

.fl-grp{background:var(--fl-surface);border:1px solid var(--fl-line);border-radius:var(--fl-r);
  margin-bottom:8px;box-shadow:var(--fl-shadow);overflow:hidden}
.fl-grp[data-orphan="1"]{border-style:dashed;box-shadow:none}
.fl-grp-h{display:grid;grid-template-columns:4px 1fr auto;cursor:pointer}
.fl-grp-h:hover{background:var(--fl-surface-2)}
.fl-stripe{width:4px}
.fl-grp-m{padding:11px 14px;min-width:0}
.fl-grp-top{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.fl-grp-name{font-weight:600;font-size:13.5px;letter-spacing:-.01em}
.fl-kind{font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--fl-ink-3);font-weight:600}
.fl-grp-line{font-size:12.5px;color:var(--fl-ink-2);margin-top:3px}
.fl-chips{display:flex;gap:5px;margin-top:7px;flex-wrap:wrap}
.fl-grp-side{padding:11px 30px 11px 14px;display:flex;align-items:center;gap:14px;
  border-left:1px solid var(--fl-line)}
.fl-count .n{font-size:20px;font-weight:600;letter-spacing:-.02em;line-height:1;text-align:right}
.fl-count .l{font-size:10px;color:var(--fl-ink-3);text-transform:uppercase;letter-spacing:.06em}
.fl-grp-b{border-top:1px solid var(--fl-line);background:var(--fl-surface-2)}

.fl-inst{display:grid;grid-template-columns:4px 1fr auto;border-bottom:1px solid var(--fl-line);align-items:center}
.fl-inst:last-child{border-bottom:0}
.fl-inst:hover{background:var(--fl-surface)}
.fl-inst-m{padding:9px 14px;min-width:0}
.fl-inst-t{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.fl-inst-n{font-size:12.5px;font-weight:500}
.fl-inst-d{font-size:11.5px;color:var(--fl-ink-3);margin-top:2px}
.fl-inst-a{padding:9px 14px;display:flex;align-items:center;gap:8px}
.fl-id{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;color:var(--fl-ink-3);
  border:1px solid var(--fl-line);border-radius:4px;padding:1px 5px;background:var(--fl-surface);
  white-space:nowrap}
.fl-link{font-size:11.5px;color:var(--fl-brand);font-weight:500;text-decoration:none;white-space:nowrap;
  border:1px solid var(--fl-brand-line);background:var(--fl-brand-soft);border-radius:6px;padding:4px 9px}
.fl-link:hover{background:var(--fl-brand);color:#fff}

.fl-chip{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:20px;
  font-size:11px;font-weight:500;border:1px solid;white-space:nowrap}
.fl-chip .dot{width:7px;height:7px;border-radius:50%;flex:0 0 7px}
.fl-crit{background:var(--fl-crit-bg);border-color:var(--fl-crit-line);color:var(--fl-crit-ink)}
.fl-warn{background:var(--fl-warn-bg);border-color:var(--fl-warn-line);color:var(--fl-warn-ink)}
.fl-watch{background:var(--fl-watch-bg);border-color:var(--fl-watch-line);color:var(--fl-watch-ink)}
.fl-neutral{background:var(--fl-none-bg);border-color:var(--fl-none-line);color:var(--fl-none-ink)}
.fl-more{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;
  padding:11px 14px;margin-top:4px;font-size:11.5px;color:var(--fl-ink-3);
  border:1px dashed var(--fl-line-strong);border-radius:var(--fl-r)}
.fl-more-btn{font-size:12px;font-weight:500;color:var(--fl-brand);background:var(--fl-brand-soft);
  border:1px solid var(--fl-brand-line);border-radius:6px;padding:5px 12px;cursor:pointer}
.fl-more-btn:hover{background:var(--fl-brand);color:#fff}
.fl-more-count{font-variant-numeric:tabular-nums}
.fl-more-all{font-size:12px;color:var(--fl-ink-3);background:none;border:1px solid var(--fl-line);
  border-radius:6px;padding:5px 12px;cursor:pointer}
.fl-more-all:hover{color:var(--fl-ink);border-color:var(--fl-line-strong)}
.fl-empty{padding:40px 20px;text-align:center;color:var(--fl-ink-3);font-size:13px;
  background:var(--fl-surface);border:1px solid var(--fl-line);border-radius:var(--fl-r)}
.fl-empty code{background:var(--fl-surface-3);padding:2px 6px;border-radius:4px;font-size:12px;color:var(--fl-ink-2)}
.fl-cat table{width:100%;border-collapse:collapse;font-size:12.5px}
.fl-cat th{text-align:left;font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;
  color:var(--fl-ink-3);font-weight:600;padding:8px 10px;border-bottom:1px solid var(--fl-line-strong)}
.fl-cat td{padding:9px 10px;border-bottom:1px solid var(--fl-line);vertical-align:top}
/* width:1% + nowrap makes a table column shrink to its content instead of being
   squeezed until "RQ-01" breaks across two lines. */
.fl-cat th:first-child,.fl-cat td:first-child{width:1%;white-space:nowrap}
.fl-cat .df{font-size:11px;color:var(--fl-ink-3);margin-top:2px;max-width:48ch}
.fl-av{font-size:10.5px;font-weight:600;padding:2px 7px;border-radius:5px;border:1px solid;white-space:nowrap}
.fl-av-live{background:var(--fl-watch-bg);border-color:var(--fl-watch-line);color:var(--fl-watch-ink)}
.fl-av-unavailable{background:var(--fl-none-bg);border-color:var(--fl-none-line);color:var(--fl-none-ink)}
.fl-av-unknown{background:var(--fl-warn-bg);border-color:var(--fl-warn-line);color:var(--fl-warn-ink)}


/* ---- native controls -----------------------------------------------------
   The filters are dcc.Checklist / dcc.RadioItems: Dash owns the value, so the
   real <input> is hidden and :checked drives the selected look. No callback
   round trip, so selection is instant and cannot be lost to a re-render. */
.fl-hide{position:absolute;opacity:0;width:0;height:0;pointer-events:none}
.flags-page .fl-tiles label.fl-tile{cursor:pointer;margin:0;display:block}
.fl-tile-body{display:block}
.fl-tile-m{display:flex;align-items:baseline;gap:6px;margin-top:8px}
.flags-page .fl-tiles label.fl-tile:has(input:checked){
  border-color:var(--tt-c,var(--fl-brand));
  box-shadow:0 0 0 2px var(--fl-brand-soft),var(--fl-shadow)}
.flags-page .fl-tiles label.fl-tile:has(input:checked)::before{
  content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--tt-c,var(--fl-brand))}
.flags-page .fl-tiles label.fl-tile:has(input:focus-visible){outline:2px solid var(--fl-brand);outline-offset:2px}

.fl-filters label.fl-fbtn{cursor:pointer;margin:0}
.fl-fbtn-body{display:flex;align-items:center;gap:8px;width:100%}
.fl-filters label.fl-fbtn:has(input:checked){
  background:var(--fl-brand-soft);color:var(--fl-brand);font-weight:500}
.fl-filters label.fl-fbtn:has(input:focus-visible){outline:2px solid var(--fl-brand);outline-offset:1px}
.fl-seg label.fl-seg-item{padding:5px 11px;border-radius:6px;font-size:12px;font-weight:500;
  color:var(--fl-ink-2);cursor:pointer;margin:0}
.fl-seg label.fl-seg-item:has(input:checked){
  background:var(--fl-surface);color:var(--fl-ink);box-shadow:var(--fl-shadow)}
.fl-seg .c{font-weight:600;opacity:.6;margin-left:5px;font-variant-numeric:tabular-nums}

/* rows are <details>: the browser owns open/closed */
details.fl-grp>summary.fl-grp-s{list-style:none;cursor:pointer}
details.fl-grp>summary.fl-grp-s::-webkit-details-marker{display:none}
details.fl-grp>summary.fl-grp-s::after{content:"";position:absolute;right:11px;top:50%;
  width:6px;height:6px;border-right:1.5px solid var(--fl-ink-3);
  border-bottom:1.5px solid var(--fl-ink-3);transform:translateY(-70%) rotate(-45deg)}
details.fl-grp[open]>summary.fl-grp-s::after{transform:translateY(-30%) rotate(45deg)}
details.fl-grp>summary.fl-grp-s{position:relative}


/* --- Entity search -------------------------------------------------------
   One text box in the board bar, replacing three multi-selects in the left panel. A
   plain input, not a dropdown: dcc.Dropdown discards any `value` that is not in its
   `options`, which silently dropped the site a deep link asked for. Completions come
   from a native <datalist>, so typing never waits on a round trip. */
/* The box is the bordered element; the real <input> inside it is borderless, so chips
   and cursor read as one control (a mail To: field). */
.fl-q-box{margin-left:auto;display:flex;align-items:center;gap:4px;flex-wrap:wrap;
  min-width:280px;max-width:460px;padding:3px 6px;border:1px solid var(--fl-line);
  border-radius:6px;background:var(--fl-surface);cursor:text}
.fl-q-box:focus-within{border-color:var(--fl-brand-line);
  box-shadow:0 0 0 2px var(--fl-brand-soft)}
.fl-q{flex:1;min-width:110px;font-size:11.5px;padding:3px 2px;border:0;outline:none;
  background:transparent;color:var(--fl-ink)}
.fl-q::placeholder{color:var(--fl-ink-3)}
.fl-q-chips{display:contents}
.fl-q-chip{display:inline-flex;align-items:center;gap:4px;font-size:11px;line-height:1;
  padding:3px 4px 3px 7px;border-radius:4px;background:var(--fl-brand-soft);
  border:1px solid var(--fl-brand-line);color:var(--fl-brand);white-space:nowrap}
.fl-q-chip .x{background:none;border:0;color:inherit;cursor:pointer;font-size:13px;
  line-height:1;padding:0 2px;opacity:.65}
.fl-q-chip .x:hover{opacity:1}
@media (max-width:1100px){
  .fl-boardbar{flex-wrap:wrap}
  .fl-q-box{margin-left:0;width:100%;max-width:none}
}


/* --- Flag detail panel ---------------------------------------------------
   The third column of .fl-body. Driven by a Store rather than the URL: Dash Pages
   re-runs layout() on every ?search change, so a URL-driven panel would remount the
   page on each click and reset the board. :empty collapses the column entirely, so
   the board keeps its full width until a flag is opened.

   It lives INSIDE the page content column, which the Ask Mira dock already squeezes
   (mira_dock.css) — the two never overlap, the board just narrows. Below 1400px the
   panel drops under the board instead of fighting the dock for width. */
/* Visibility is the `hidden` attribute, set by the callback — no `display` rule here,
   or it would override the UA's [hidden]{display:none}. */
.fl-detail{width:330px;position:sticky;top:12px}
.fl-dt{background:var(--fl-surface);border:1px solid var(--fl-line);border-radius:var(--fl-r);
  padding:13px 14px 12px}
.fl-detail[hidden]{display:none}
.fl-dt-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:9px}
.fl-dt-t{font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;color:var(--fl-ink-2);
  font-weight:600}
.fl-dt-x{background:none;border:0;font-size:16px;line-height:1;color:var(--fl-ink-3);
  cursor:pointer;padding:0 2px}
.fl-dt-x:hover{color:var(--fl-ink-1)}
.fl-dt-id{display:flex;align-items:center;gap:7px;margin-bottom:5px}
.fl-dt-name{font-size:13.5px;font-weight:600;letter-spacing:-.01em;margin-bottom:8px}
.fl-dt-chips{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:12px}
.fl-dt-sec{border-top:1px solid var(--fl-line);padding-top:9px;margin-top:9px}
.fl-dt-h{font-size:10px;text-transform:uppercase;letter-spacing:.07em;color:var(--fl-ink-3);
  margin-bottom:5px}
.fl-dt-body{font-size:11.5px;line-height:1.5;color:var(--fl-ink-2)}
.fl-dt-thr{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;
  background:var(--fl-none-bg);border-radius:5px;padding:6px 8px}
.fl-dt-row{display:flex;justify-content:space-between;gap:10px;font-size:11.5px;
  padding:3px 0;border-bottom:1px dotted var(--fl-line)}
.fl-dt-row:last-child{border-bottom:0}
.fl-dt-k{color:var(--fl-ink-3)}
.fl-dt-v{color:var(--fl-ink-1);font-weight:500;text-align:right}
.fl-dt-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;
  border-top:1px solid var(--fl-line);padding-top:10px;margin-top:11px}
.fl-dt-copy{color:var(--fl-ink-3);cursor:pointer}
.fl-dt-copy:hover{color:var(--fl-brand)}
.fl-dt-gone{font-size:11.5px;color:var(--fl-ink-3);line-height:1.5}

.fl-detail-btn{background:none;border:1px solid var(--fl-line);border-radius:5px;
  font-size:11px;color:var(--fl-ink-2);padding:3px 8px;cursor:pointer;white-space:nowrap}
.fl-detail-btn:hover{border-color:var(--fl-brand);color:var(--fl-brand)}

@media (max-width:1400px){
  .fl-body{grid-template-columns:200px minmax(0,1fr)}
  .fl-detail{grid-column:1/-1;width:auto;position:static}
}


/* --- Flag module (fl-mod) ------------------------------------------------
   The compact flag summary embedded in OTHER modules — Rater Oversight and the Site
   Review dossier. It carries the --fl-* token block itself (see the top of this file),
   because those tokens are scoped rather than global: without the class every severity
   chip outside the Flag Center would render unstyled. */
.fl-mod{background:var(--fl-surface);border:1px solid var(--fl-line);
  border-radius:var(--fl-r,8px);padding:12px 14px;color:var(--fl-ink)}
.fl-mod-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.fl-mod-n{font-size:20px;font-weight:600;letter-spacing:-.02em}
.fl-mod-l{font-size:11.5px;color:var(--fl-ink-3);margin-right:4px}
.fl-mod-sub{font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;
  color:var(--fl-ink-3);margin:10px 0 6px}
.fl-mod-list{display:flex;flex-direction:column;gap:2px}
.fl-mod-row{display:grid;grid-template-columns:150px 1fr 44px;align-items:center;gap:10px;
  padding:5px 6px;border-radius:5px;font-size:11.5px;text-decoration:none;color:inherit}
a.fl-mod-row:hover{background:var(--fl-surface-2)}
.fl-mod-ent{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fl-mod-c{text-align:right;color:var(--fl-ink-2)}
.fl-mod-foot{border-top:1px solid var(--fl-line);margin-top:10px;padding-top:9px}
.fl-mod-link{font-size:11.5px;color:var(--fl-brand);font-weight:500;text-decoration:none}
.fl-mod-link:hover{text-decoration:underline}
.fl-mod-empty{font-size:11.5px;color:var(--fl-ink-3);line-height:1.5}


/* --- Domain distribution bar --------------------------------------------
   One stacked severity bar per domain, on the site dossier. Bars are scaled against
   the busiest domain rather than the total, so a small domain stays visible instead of
   collapsing to a sliver. */
.fl-dist{display:flex;flex-direction:column;gap:5px}
.fl-dist-row{display:grid;grid-template-columns:132px 1fr 34px;align-items:center;gap:9px;
  font-size:11.5px}
.fl-dist-n{color:var(--fl-ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fl-dist-track{display:block;background:var(--fl-surface-3);border-radius:3px;height:9px}
.fl-dist-track .fl-bar{height:9px;border-radius:3px;min-width:3px}
.fl-dist-c{text-align:right;color:var(--fl-ink-2)}

.fl-grp-more{display:block;padding:9px 14px;font-size:11.5px;color:var(--fl-brand);
  text-decoration:none;font-weight:500;border-top:1px dashed var(--fl-line)}
a.fl-grp-more:hover{background:var(--fl-brand-soft)}


.fl-help{margin:2px 0 14px}
.fl-help>summary.fl-help-s{cursor:pointer;font-size:11.5px;color:var(--fl-brand);
  font-weight:500;list-style:none;display:inline-block;padding:3px 0}
.fl-help>summary.fl-help-s::-webkit-details-marker{display:none}
.fl-help>summary.fl-help-s::before{content:"› ";display:inline-block;transition:none}
.fl-help[open]>summary.fl-help-s::before{content:"⌄ "}
.fl-help-b{font-size:11.5px;color:var(--fl-ink-2);line-height:1.6;max-width:78ch;
  background:var(--fl-surface-2);border:1px solid var(--fl-line);border-radius:var(--fl-r);
  padding:11px 14px;margin-top:6px}
.fl-help-b p{margin:0 0 8px}
.fl-help-b p:last-child{margin-bottom:0}
.fl-help-b ul{margin:0 0 9px;padding-left:18px}
.fl-help-b li{margin:2px 0}
.fl-help-b code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;
  background:var(--fl-surface-3);color:var(--fl-ink);padding:1px 5px;border-radius:3px}

/* --- Catalog: per-rule detail ------------------------------------------
   Each rule carries its own explanation, collapsed so 40 of them still scan as a
   table. <details> keeps open/closed in the browser, so expanding costs no round trip
   and cannot be reset by a re-render. */
.fl-rd>summary.fl-rd-s{list-style:none;cursor:pointer;display:flex;align-items:center;
  gap:6px}
.fl-rd>summary.fl-rd-s::-webkit-details-marker{display:none}
.fl-rd>summary.fl-rd-s::before{content:"›";color:var(--fl-ink-3);font-size:12px;
  width:9px;flex:none}
.fl-rd[open]>summary.fl-rd-s::before{content:"⌄"}
.fl-rd-name{font-weight:500;color:var(--fl-ink)}
.fl-rd>summary.fl-rd-s:hover .fl-rd-name{color:var(--fl-brand)}
.fl-rd-b{margin:7px 0 2px 15px;padding:9px 11px;background:var(--fl-surface-2);
  border:1px solid var(--fl-line);border-radius:6px;max-width:62ch}
.fl-rd-def{font-size:11.5px;color:var(--fl-ink-2);line-height:1.55;margin-bottom:8px}
.fl-rd-row{display:grid;grid-template-columns:78px 1fr;gap:9px;align-items:baseline;
  padding:3px 0;font-size:11.5px}
.fl-rd-k{font-size:10px;text-transform:uppercase;letter-spacing:.06em;
  color:var(--fl-ink-3);font-weight:600}
.fl-rd-v{color:var(--fl-ink-2);line-height:1.5}
.fl-rd-v .fl-chip{margin-right:4px}
.fl-rd-route{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px}

/* --- Catalog: glossary --------------------------------------------------- */
.fl-gloss-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(215px,1fr));
  gap:12px 18px;margin-top:4px}
.fl-gloss-t{font-size:10px;text-transform:uppercase;letter-spacing:.07em;
  color:var(--fl-ink-3);font-weight:600;margin-bottom:4px}
.fl-gloss dl{margin:0}
.fl-gloss dt{font-size:11px;font-weight:600;color:var(--fl-ink);margin-top:5px}
.fl-gloss dd{margin:1px 0 0;font-size:11px;color:var(--fl-ink-3);line-height:1.45}

/* A solid (non-segmented) bar for distributions that are not severity-coloured. */
.fl-bar-solid{display:block;height:9px;border-radius:3px;min-width:3px}

/* "X of Y" progress: the denominator question, split from the distribution question. */
.fl-prog-pct{margin-left:auto;font-size:12px;font-weight:600;color:var(--fl-ink-2)}
.fl-prog-track{background:var(--fl-surface-3);border-radius:3px;height:6px;
  margin:-4px 0 12px}
.fl-prog-track .fl-bar-solid{height:6px}
