/* ACiD App Interface 1.0.0 · acid-app.css · GENERATED by app-interface/tools/bundle.mjs from fonts.css, system-tokens.css, tokens.css, reset.css, components.css, core.css, status-card.css, project-update.css, app.css. Do not edit by hand. */

/* ==== fonts.css ==== */
/* v1.6.2 design pass (B7): the ACiD fonts served by InventoryIQ itself, so warehouse terminals without internet or
   behind a proxy still render them. Latin subsets from Fontsource 5.3.0; SIL Open Font License (see LICENSE-*.txt). */
@font-face{font-family:"Archivo";font-style:normal;font-display:swap;font-weight:100 900;font-stretch:62% 125%;src:url("fonts/archivo-latin-standard-normal.woff2") format("woff2-variations"),url("fonts/archivo-latin-standard-normal.woff2") format("woff2")}
@font-face{font-family:"IBM Plex Sans";font-style:normal;font-display:swap;font-weight:400;src:url("fonts/ibm-plex-sans-latin-400-normal.woff2") format("woff2")}
@font-face{font-family:"IBM Plex Sans";font-style:normal;font-display:swap;font-weight:500;src:url("fonts/ibm-plex-sans-latin-500-normal.woff2") format("woff2")}
@font-face{font-family:"IBM Plex Sans";font-style:normal;font-display:swap;font-weight:600 700;src:url("fonts/ibm-plex-sans-latin-600-normal.woff2") format("woff2")}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-display:swap;font-weight:400;src:url("fonts/ibm-plex-mono-latin-400-normal.woff2") format("woff2")}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-display:swap;font-weight:500 700;src:url("fonts/ibm-plex-mono-latin-500-normal.woff2") format("woff2")}

/* ==== system-tokens.css ==== */
/* ACiD system tokens for the App Interface. GENERATED from system/tokens.json (ACiD Design System, ACiD 0.21.0-rc.2 (13 Nov 2026))
   by app-interface/tools/build-system-tokens.mjs. Do not edit by hand: change tokens.json, then rebuild. */
:root,[data-theme="light"]{
  color-scheme:light;
  --bg:#f7f8f7;
  --bg-sunk:#f1f3f0;
  --panel:#ffffff;
  --soft:#f0f3f1;
  --line:#d3d9d5;
  --line-2:#e7ebe9;
  --ink:#14201d;
  --ink-2:#4b5855;
  --ink-3:#8a9592;
  --graphic:#6a7472;
  --charcoal:#1e2328;
  --on-charcoal:#f7f8f7;
  --interaction:#1b63a6;
  --interaction-tint:rgba(27,99,166,0.11);
  --status-good:#5c9509;
  --status-warn:#958600;
  --status-bad:#b23e2b;
  --status-done:#6d4b9e;
  --status-decide:#a1307a;
  --status-mute:#9ca8a4;
  --status-good-text:#4d7d08;
  --status-warn-text:#7d7100;
  --status-bad-text:#b23e2b;
  --status-mute-text:#6a7270;
  --good-tint:rgba(92,149,9,0.1);
  --warn-tint:rgba(149,134,0,0.26);
  --bad-tint:rgba(178,62,43,0.09);
  --done-tint:rgba(109,75,158,0.1);
  --decide-tint:rgba(161,48,122,0.09);
  --mute-tint:rgba(156,168,164,0.16);
  --soil-tint:rgba(148,101,31,0.12);
  --series-1-tint:rgba(35,100,172,0.10);
  --emphasis:#ff5a00;
  --emphasis-tint:rgba(255,90,0,0.1);
  --accent:#b87333;
  --copper-brushed-0:#6e3f1c;
  --copper-brushed-18:#b87333;
  --copper-brushed-34:#ebbb88;
  --copper-brushed-47:#c7834a;
  --copper-brushed-63:#8e5426;
  --copper-brushed-80:#dca36d;
  --copper-brushed-100:#9a5b2b;
  --accent-mesh:#1f7c5b;
  --accent-soil:#94651f;
  --copper-tint:rgba(184,115,51,0.25);
  --copper-tint-strong:rgba(184,115,51,0.5);
  --series-1:#2364ac;
  --series-2:#b05e12;
  --series-3:#8659b5;
  --series-4:#4c7a2a;
  --series-5:#b0356b;
  --series-6:#8a9592;
  --pi-on-track:var(--status-good);
  --pi-at-risk:var(--status-warn);
  --pi-off-track:var(--status-bad);
  --pi-blocked:var(--status-bad);
  --pi-decision:var(--emphasis);
  --pi-completed-line:var(--accent-mesh);
  --pi-completed-fill:var(--good-tint);
  --pi-complete-brand:var(--status-done);
  --life-opportunity:var(--series-1);
  --life-negotiation:var(--series-3);
  --life-awarded:var(--accent-soil);
  --life-active:var(--status-good);
  --life-completed:var(--accent-mesh);
  --life-closed:var(--status-mute);
  --life-lost:var(--status-bad);
  --ev-done:var(--status-good);
  --ev-confirmed:var(--status-good);
  --ev-progress:var(--series-1);
  --ev-planned:var(--accent-soil);
  --ev-proposed:var(--status-mute);
  --prov-confirmed:var(--accent-mesh);
  --prov-provisional:var(--accent-soil);
  --prov-proposed:var(--ink-2);
  --prov-unconfirmed:var(--status-bad);
  --com-won:var(--status-good);
  --com-submitted:var(--series-1);
  --com-prep:var(--status-warn);
  --com-open:var(--status-mute);
  --com-declined:var(--status-bad);
  --com-unspecified:var(--ink-2);
  --src-email:var(--series-1);
  --src-teams:var(--series-3);
  --src-files:var(--series-6);
  --src-register:var(--graphic);
  --fin-overdue:var(--status-bad);
  --fin-invoiced:var(--ink);
  --fin-accrual:var(--series-2);
  --fin-runrate:var(--ink-3);
  --mat-0:var(--soft);
  --mat-1:var(--copper-tint);
  --mat-2:var(--copper-tint-strong);
  --mat-3:var(--accent);
  --mat-4:var(--ink);
  --shadow-panel:0 1px 2px rgba(20,32,29,.05), 0 6px 18px rgba(20,32,29,.05);
  --font-display:"Archivo", "Arial Narrow", system-ui, sans-serif;
  --font-body:"IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
  --font-data:"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  --font-office-hero:Apparat, "Arial Narrow", sans-serif;
  --font-office-title:Grandview, Calibri, sans-serif;
  --font-office-body:"Archivo Condensed", Archivo, "Arial Narrow", sans-serif;
  --space-0:0px;
  --space-1:4px;
  --space-2:8px;
  --space-3:12px;
  --space-4:16px;
  --space-5:20px;
  --space-6:24px;
  --space-8:32px;
  --space-10:40px;
  --space-14:56px;
  --space-16:64px;
  --radius-sm:4px;
  --radius-md:6px;
  --radius-lg:8px;
  --radius-xl:12px;
  --radius-pill:999px;
  --inv-bg:#111a18;
  --inv-bg-sunk:#0e1413;
  --inv-panel:#1b2724;
  --inv-soft:#222a27;
  --inv-line:#2e3d39;
  --inv-ink:#e6ece8;
  --inv-ink-2:#aeb9b5;
}
[data-theme="dark"]{
  color-scheme:dark;
  --bg:#111a18;
  --bg-sunk:#0e1413;
  --panel:#1b2724;
  --soft:#222a27;
  --line:#2e3d39;
  --line-2:#293430;
  --ink:#e6ece8;
  --ink-2:#aeb9b5;
  --ink-3:#7e8b87;
  --graphic:#7e8b87;
  --charcoal:#1e2328;
  --on-charcoal:#f7f8f7;
  --interaction:#6faae2;
  --interaction-tint:rgba(111,170,226,0.14);
  --status-good:#8fd13c;
  --status-warn:#d9c64a;
  --status-bad:#e0715a;
  --status-done:#a98bd4;
  --status-decide:#e57fc0;
  --status-mute:#8a9592;
  --status-good-text:#8fd13c;
  --status-warn-text:#d9c64a;
  --status-bad-text:#e0715a;
  --status-mute-text:#8a9592;
  --good-tint:rgba(143,209,60,0.13);
  --warn-tint:rgba(217,198,74,0.22);
  --bad-tint:rgba(224,113,90,0.13);
  --done-tint:rgba(169,139,212,0.13);
  --decide-tint:rgba(229,127,192,0.14);
  --mute-tint:rgba(138,149,146,0.16);
  --soil-tint:rgba(213,163,94,0.14);
  --series-1-tint:rgba(78,144,206,0.14);
  --emphasis:#ff7a33;
  --emphasis-tint:rgba(255,122,51,0.14);
  --accent:#b87333;
  --copper-brushed-0:#6e3f1c;
  --copper-brushed-18:#b87333;
  --copper-brushed-34:#ebbb88;
  --copper-brushed-47:#c7834a;
  --copper-brushed-63:#8e5426;
  --copper-brushed-80:#dca36d;
  --copper-brushed-100:#9a5b2b;
  --accent-mesh:#5ec49c;
  --accent-soil:#d5a35e;
  --copper-tint:rgba(184,115,51,0.30);
  --copper-tint-strong:rgba(184,115,51,0.55);
  --series-1:#4e90ce;
  --series-2:#d07e30;
  --series-3:#a37acf;
  --series-4:#79a342;
  --series-5:#d25e90;
  --series-6:#8a9592;
  --pi-on-track:var(--status-good);
  --pi-at-risk:var(--status-warn);
  --pi-off-track:var(--status-bad);
  --pi-blocked:var(--status-bad);
  --pi-decision:var(--emphasis);
  --pi-completed-line:var(--accent-mesh);
  --pi-completed-fill:var(--good-tint);
  --pi-complete-brand:var(--status-done);
  --life-opportunity:var(--series-1);
  --life-negotiation:var(--series-3);
  --life-awarded:var(--accent-soil);
  --life-active:var(--status-good);
  --life-completed:var(--accent-mesh);
  --life-closed:var(--status-mute);
  --life-lost:var(--status-bad);
  --ev-done:var(--status-good);
  --ev-confirmed:var(--status-good);
  --ev-progress:var(--series-1);
  --ev-planned:var(--accent-soil);
  --ev-proposed:var(--status-mute);
  --prov-confirmed:var(--accent-mesh);
  --prov-provisional:var(--accent-soil);
  --prov-proposed:var(--ink-2);
  --prov-unconfirmed:var(--status-bad);
  --com-won:var(--status-good);
  --com-submitted:var(--series-1);
  --com-prep:var(--status-warn);
  --com-open:var(--status-mute);
  --com-declined:var(--status-bad);
  --com-unspecified:var(--ink-2);
  --src-email:var(--series-1);
  --src-teams:var(--series-3);
  --src-files:var(--series-6);
  --src-register:var(--graphic);
  --fin-overdue:var(--status-bad);
  --fin-invoiced:var(--ink);
  --fin-accrual:var(--series-2);
  --fin-runrate:var(--ink-3);
  --mat-0:var(--soft);
  --mat-1:var(--copper-tint);
  --mat-2:var(--copper-tint-strong);
  --mat-3:var(--accent);
  --mat-4:var(--ink);
  --shadow-panel:0 1px 2px rgba(0,0,0,.30), 0 6px 18px rgba(0,0,0,.25);
}
@media (prefers-color-scheme:dark){
[data-theme="auto"]{
  color-scheme:dark;
  --bg:#111a18;
  --bg-sunk:#0e1413;
  --panel:#1b2724;
  --soft:#222a27;
  --line:#2e3d39;
  --line-2:#293430;
  --ink:#e6ece8;
  --ink-2:#aeb9b5;
  --ink-3:#7e8b87;
  --graphic:#7e8b87;
  --charcoal:#1e2328;
  --on-charcoal:#f7f8f7;
  --interaction:#6faae2;
  --interaction-tint:rgba(111,170,226,0.14);
  --status-good:#8fd13c;
  --status-warn:#d9c64a;
  --status-bad:#e0715a;
  --status-done:#a98bd4;
  --status-decide:#e57fc0;
  --status-mute:#8a9592;
  --status-good-text:#8fd13c;
  --status-warn-text:#d9c64a;
  --status-bad-text:#e0715a;
  --status-mute-text:#8a9592;
  --good-tint:rgba(143,209,60,0.13);
  --warn-tint:rgba(217,198,74,0.22);
  --bad-tint:rgba(224,113,90,0.13);
  --done-tint:rgba(169,139,212,0.13);
  --decide-tint:rgba(229,127,192,0.14);
  --mute-tint:rgba(138,149,146,0.16);
  --soil-tint:rgba(213,163,94,0.14);
  --series-1-tint:rgba(78,144,206,0.14);
  --emphasis:#ff7a33;
  --emphasis-tint:rgba(255,122,51,0.14);
  --accent:#b87333;
  --copper-brushed-0:#6e3f1c;
  --copper-brushed-18:#b87333;
  --copper-brushed-34:#ebbb88;
  --copper-brushed-47:#c7834a;
  --copper-brushed-63:#8e5426;
  --copper-brushed-80:#dca36d;
  --copper-brushed-100:#9a5b2b;
  --accent-mesh:#5ec49c;
  --accent-soil:#d5a35e;
  --copper-tint:rgba(184,115,51,0.30);
  --copper-tint-strong:rgba(184,115,51,0.55);
  --series-1:#4e90ce;
  --series-2:#d07e30;
  --series-3:#a37acf;
  --series-4:#79a342;
  --series-5:#d25e90;
  --series-6:#8a9592;
  --pi-on-track:var(--status-good);
  --pi-at-risk:var(--status-warn);
  --pi-off-track:var(--status-bad);
  --pi-blocked:var(--status-bad);
  --pi-decision:var(--emphasis);
  --pi-completed-line:var(--accent-mesh);
  --pi-completed-fill:var(--good-tint);
  --pi-complete-brand:var(--status-done);
  --life-opportunity:var(--series-1);
  --life-negotiation:var(--series-3);
  --life-awarded:var(--accent-soil);
  --life-active:var(--status-good);
  --life-completed:var(--accent-mesh);
  --life-closed:var(--status-mute);
  --life-lost:var(--status-bad);
  --ev-done:var(--status-good);
  --ev-confirmed:var(--status-good);
  --ev-progress:var(--series-1);
  --ev-planned:var(--accent-soil);
  --ev-proposed:var(--status-mute);
  --prov-confirmed:var(--accent-mesh);
  --prov-provisional:var(--accent-soil);
  --prov-proposed:var(--ink-2);
  --prov-unconfirmed:var(--status-bad);
  --com-won:var(--status-good);
  --com-submitted:var(--series-1);
  --com-prep:var(--status-warn);
  --com-open:var(--status-mute);
  --com-declined:var(--status-bad);
  --com-unspecified:var(--ink-2);
  --src-email:var(--series-1);
  --src-teams:var(--series-3);
  --src-files:var(--series-6);
  --src-register:var(--graphic);
  --fin-overdue:var(--status-bad);
  --fin-invoiced:var(--ink);
  --fin-accrual:var(--series-2);
  --fin-runrate:var(--ink-3);
  --mat-0:var(--soft);
  --mat-1:var(--copper-tint);
  --mat-2:var(--copper-tint-strong);
  --mat-3:var(--accent);
  --mat-4:var(--ink);
  --shadow-panel:0 1px 2px rgba(0,0,0,.30), 0 6px 18px rgba(0,0,0,.25);
}
}

/* ==== tokens.css ==== */
/* ---- ACiD App Interface v0.4.0 (ACiD DS 0.20.0-rc.3, tag v0.20.0-rc.3 @ 7af9655) · tokens.css ---- */
/* ACiD App Interface 0.4.0-rc.2 — tokens. Requires system-tokens.css (generated from system/tokens.json) first.
   Every value here is a system token. The App Interface names from 0.3.0 stay as aliases (G1), so screens built on
   0.3.0 keep working; new code uses the system names. Declared on every theme scope, because var() resolves where it
   is declared: a [data-theme="dark"] island has to re-point its own aliases.
   Removed from 0.3.0: no value is typed here any more (was 30 colour literals in two drifted copies). */
:root,[data-theme]{
  /* ink and surfaces (G1, G2) */
  --ground:var(--bg-sunk);           /* 0.3.0 #F1F3F0 = bg-sunk, the same value */
  /* --ink, --ink-2, --ink-3, --panel, --soft, --line: the system tokens of the same name.
     0.3.0 --soft #E6EAE6 is now system soft; 0.3.0 --ink-3 #9CA8A4 is now system ink-3 (graphics only, never text). */
  /* surfaces that stay dark in a light screen: header, selection bar, scan panel, the site-look sidebar (G2) */
  --deep:var(--inv-bg); --deep-2:var(--inv-soft);
  --on-dark:var(--inv-ink); --on-dark-2:var(--inv-ink-2);
  --nav-bg:var(--inv-panel); --nav-ink:var(--inv-ink-2);
  --nav-label:var(--inv-ink-2);      /* was the dark ink-3 value: it is text, so ink-2 (G7) */
  /* accents, one meaning each */
  --cse:var(--interaction); --cse-tint:var(--interaction-tint);     /* links, focus, selection only */
  --mesh:var(--accent-mesh); --mesh-tint:var(--good-tint);
  --soil:var(--accent-soil);                       /* --soil-tint is the system token of that name */
  --copper:var(--accent);   /* brand only, never data (G10). --copper-tint is the system token (0.3.0 .16 -> .25) */
  /* status: the system's three states plus done and mute (G4). Text on a tint stays ink. */
  --ok:var(--status-good);
  --watch:var(--status-warn); --watch-tint:var(--warn-tint); --watch-ink:var(--ink);
  --critical:var(--status-bad); --critical-tint:var(--bad-tint);
  /* deprecated: blue never carries status. Kept so 0.3.0 product CSS still resolves; components no longer use them */
  --review:var(--interaction); --review-tint:var(--interaction-tint);
  /* type (G11): the system families */
  --display:var(--font-display); --body:var(--font-body); --mono:var(--font-data);
}
/* sizes, space, shape and touch don't change with the theme */
:root{
  /* screen sizes: nothing under 12 px (G6, approved 2 Nov) */
  --fs-title:22px; --fs-h:16px; --fs-body:14px; --fs-small:12.5px; --fs-label:12px; --fs-qty:30px; --fs-min:12px;
  /* space: the system spacing scale */
  --s-1:var(--space-1); --s-2:var(--space-2); --s-3:var(--space-3); --s-4:var(--space-4); --s-5:var(--space-6); --s-6:var(--space-8);
  /* shape (G3): snapped to the system radius scale. 0.3.0 card 9 -> 8, pill 18 -> fully round */
  --r-sharp:var(--radius-sm); --r-panel:var(--radius-md); --r-card:var(--radius-lg); --r-pill:var(--radius-pill);
  --w-hair:1px; --w-emph:2px; --w-rule:3px;
  /* touch: 44 px targets, 56 px for field actions (gloved hands) */
  --touch:44px; --touch-field:56px;
}
/* Site look (InventoryIQ 1.6.4, "follow the acidintegrity.com look"): opt in with data-look="site" on .iq-app or
   <html>. Whether it becomes the default is Kyle's call (G10). IIQ 10 / 14 px radii snap to 8 / 12 (G3). */
[data-look="site"]{
  --fs-title:30px; --fs-qty:34px;
  --r-panel:var(--radius-lg); --r-card:var(--radius-xl);
}

/* ==== reset.css ==== */
/* ACiD App Interface 1.0: reset.css. Page-level rules for an app that owns the whole page (every ACiD app does today). It's in
   the default bundle (acid-app.css). An app embedding the kit inside another page uses acid-core.css, which leaves this out. */
:root{box-sizing:border-box;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}
html{scroll-padding-top:env(safe-area-inset-top,0px)}
html,body{margin:0;background:var(--ground)}
img{max-width:100%}
[hidden]:not([hidden=until-found i]){display:none!important}

/* ==== components.css ==== */
/* ---- ACiD App Interface v0.4.0 (ACiD DS 0.20.0-rc.3, tag v0.20.0-rc.3 @ 7af9655) · components.css ---- */
/* ACiD App Interface — components 0.4.0-rc.2. Load fonts.css, system-tokens.css, tokens.css, then this file.
   Prefix .iq- (Inventory IQ first; used by every ACiD app). Colours, families, spacing and radii are system tokens.
   v0.4.0 (6 Nov 2026, WB00): one App Interface from the two 0.3.0 copies, on system 0.20.0-rc.2 tokens. 12 px / 44 px
   floor (G6), Pi 2.4.13 contrast fix (G7), dark theme (G8), status as glyph + word + tint with ink text (G4), and the
   Module 07 components as .iq-* (G9): band, filter tile, stages and gates, register row, fidelity, overlay drawer and
   scrim, quote, progress, wizard steps, textarea, message, options with consequence and risk.
   rc.2 (7 Nov 2026): .iq-seg buttons are at least 44 px wide as well as tall (Pi UI gate, touch target 43 x 44).
   v0.2.0 (13 Oct 2026): text wrapping and alignment rules, toolbar, chips, segmented control, next-action list, search
   result, data table, selection bar, checkbox, empty state, loading placeholder, drawer. Flat; tokens only.
   v0.3.0 (14 Oct 2026): scan station — quantity stepper, scan feedback (flash), status line, disabled buttons. */
.iq-app{display:grid;grid-template-columns:200px 1fr 300px;grid-template-rows:56px 1fr 34px;min-height:100vh;background:var(--ground);color:var(--ink);font:var(--fs-body)/1.45 var(--body);font-variant-numeric:tabular-nums}
.iq-head{grid-column:1/-1;display:flex;align-items:center;gap:var(--s-4);padding:0 var(--s-4);background:var(--deep);color:var(--on-dark)}
.iq-brand{display:flex;align-items:baseline;gap:var(--s-2)}
.iq-brand b{font-family:var(--display);font-stretch:80%;font-weight:850;font-size:20px;letter-spacing:.01em}
.iq-brand span{font-family:var(--display);font-stretch:80%;font-weight:600;font-size:20px;color:var(--on-dark-2)}
.iq-head .meta{font-family:var(--mono);font-size:var(--fs-label);letter-spacing:.08em;text-transform:uppercase;color:var(--on-dark-2)}
.iq-head .meta b{color:var(--on-dark);font-weight:500}
.iq-head .grow{flex:1}
.iq-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--ok);margin-right:6px;vertical-align:1px}
.iq-dot.watch{background:var(--watch)} .iq-dot.critical{background:var(--critical)}
.iq-user{display:flex;align-items:center;gap:var(--s-2);min-width:0;max-width:280px;margin-left:var(--s-2);font-size:var(--fs-small)}
.iq-user span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.iq-user i{flex:none;display:grid;place-items:center;width:30px;height:30px;overflow:hidden;letter-spacing:0;border-radius:50%;background:var(--deep-2);font-style:normal;font-family:var(--mono);font-size:12px}
.iq-nav{background:var(--panel);border-right:var(--w-hair) solid var(--line);padding:var(--s-3) 0}
.iq-nav h6{margin:var(--s-3) var(--s-4) var(--s-1);font-family:var(--mono);font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-2);font-weight:500}   /* G7: was ink-3 (2.45:1) */
.iq-nav a{display:flex;align-items:center;gap:var(--s-2);min-height:36px;padding:0 var(--s-4);color:var(--ink-2);text-decoration:none;font-size:13.5px;border-left:var(--w-rule) solid transparent}
.iq-nav a.on{color:var(--ink);font-weight:600;background:var(--cse-tint);border-left-color:var(--cse)}
.iq-nav a .n{margin-left:auto;padding:0 6px;font-family:var(--mono);font-size:12px;color:var(--ink);background:var(--bad-tint);border:var(--w-hair) solid var(--status-bad);border-radius:var(--r-pill)}   /* G7: was red text (3.8:1 in dark) */
.iq-main{padding:var(--s-5);display:flex;flex-direction:column;gap:var(--s-4);min-width:0}
.iq-rail{background:var(--panel);border-left:var(--w-hair) solid var(--line);padding:var(--s-4);display:flex;flex-direction:column;gap:var(--s-4)}
.iq-foot{grid-column:2/-1;display:flex;align-items:center;gap:var(--s-4);padding:0 var(--s-5);border-top:var(--w-hair) solid var(--line);font-family:var(--mono);font-size:12px;color:var(--ink-2);background:var(--panel)}
.iq-foot .grow{flex:1}
/* titles and labels */
.iq-title{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--s-1) var(--s-3)}
.iq-title h1{margin:0;text-wrap:balance;overflow-wrap:anywhere;font-family:var(--display);font-stretch:80%;font-weight:850;font-size:var(--fs-title);line-height:1.1}
.iq-title p{margin:0;color:var(--ink-2);font-size:var(--fs-small)}
.iq-label{font-family:var(--mono);font-size:var(--fs-label);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2)}
/* search / scan */
.iq-search{display:flex;gap:var(--s-2);align-items:stretch}
.iq-field{flex:1;display:flex;align-items:center;gap:var(--s-2);min-height:var(--touch-field);padding:0 var(--s-4);background:var(--panel);border:var(--w-hair) solid var(--line);border-radius:var(--r-panel);font-size:15px;color:var(--ink-2)}   /* G7: was ink-3 */
.iq-field.focus{border-color:var(--cse);box-shadow:inset 0 0 0 1px var(--cse);color:var(--ink)}
.iq-field .count{margin-left:auto;font-family:var(--mono);font-size:var(--fs-label);color:var(--cse);background:var(--cse-tint);padding:2px 8px;border-radius:var(--r-sharp)}
/* buttons */
.iq-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--s-2);min-height:var(--touch);padding:0 var(--s-4);border-radius:var(--r-panel);border:var(--w-hair) solid var(--line);background:var(--panel);color:var(--ink);font:600 14px/1.15 var(--body);text-align:center;white-space:nowrap}
.iq-btn.primary{background:var(--ink);border-color:var(--ink);color:var(--bg)}
.iq-btn.agent{background:var(--cse);border-color:var(--cse);color:var(--panel)}
.iq-btn.approve{background:var(--mesh);border-color:var(--mesh);color:var(--panel)}
.iq-btn.tall{min-height:var(--touch-field)}
.iq-btn.disabled{opacity:.45}
/* badges — v0.4.0: status is glyph + word + tint (G4, G7). Text stays ink; the status mark is the outline and the
   glyph. Tones: good (on track), warn (at risk), bad (off track), blocked, done (completed), mute (not recorded),
   decision (decision needed: the one orange on the surface). 0.3.0 names stay: avail = good, zero = warn,
   critical = bad; review is now mute (blue never carries status). high and plain are categories, not status. */
.iq-badge{display:inline-flex;align-items:center;gap:5px;font-family:var(--mono);font-size:12px;letter-spacing:.06em;text-transform:uppercase;padding:2px 7px;border-radius:var(--r-sharp);border:var(--w-hair) solid var(--iq-mark,var(--line));background:var(--iq-tint,var(--panel));color:var(--ink);line-height:1.5;white-space:nowrap}
.iq-badge.high{background:var(--soil-tint);border-color:var(--accent-soil)}
.iq-badge.plain{color:var(--ink-2);background:var(--soft);border-color:var(--soft)}
/* fidelity (Module 07): the Provenance words REAL, SIMULATED, ILLUSTRATIVE. Not a status, so no glyph */
.iq-badge.real{background:var(--good-tint);border-color:var(--prov-confirmed)}
.iq-badge.simulated{background:var(--soil-tint);border-color:var(--prov-provisional)}
.iq-badge.illustrative{background:var(--panel);border-style:dashed;border-color:var(--prov-provisional)}
/* panels and item card */
.iq-panel{background:var(--panel);border:var(--w-hair) solid var(--line);border-radius:var(--r-card);padding:var(--s-4)}
.iq-item{display:grid;grid-template-columns:72px minmax(0,1.3fr) minmax(0,1fr) minmax(0,1.25fr);gap:var(--s-4);align-items:start;background:var(--panel);border:var(--w-hair) solid var(--line);border-top:var(--w-rule) solid var(--ink);border-radius:var(--r-card);padding:var(--s-4)}
.iq-thumb{width:72px;height:72px;border-radius:var(--r-panel);background:var(--soft);display:grid;place-items:center;font-family:var(--mono);font-size:12px;color:var(--ink-2);text-align:center}
.iq-id{font-family:var(--display);font-stretch:80%;font-weight:850;font-size:26px;line-height:1}
.iq-id small{display:block;font-family:var(--mono);font-weight:400;font-size:var(--fs-label);color:var(--ink-2);letter-spacing:.06em;margin-top:4px}
.iq-name{font-weight:600;font-size:15px;margin:var(--s-2) 0 var(--s-2)}
.iq-tags{display:flex;flex-wrap:wrap;gap:5px}
.iq-kv{display:grid;grid-template-columns:auto 1fr;gap:3px var(--s-3);font-size:var(--fs-small)}
.iq-kv dt{font-family:var(--mono);font-size:12px;color:var(--ink-2);text-transform:uppercase;letter-spacing:.06em;padding-top:2px}
.iq-kv dd{margin:0}
.iq-qty{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--s-2)}
.iq-qty div{background:var(--ground);border-radius:var(--r-panel);padding:var(--s-2) var(--s-3)}
.iq-qty b{display:block;font-family:var(--display);font-stretch:80%;font-weight:850;font-size:var(--fs-qty);line-height:1}
.iq-qty small{font-family:var(--mono);font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2)}
.iq-qty .key b{color:var(--mesh)}
/* next actions */
.iq-actions{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--s-2)}
.iq-action{display:flex;flex-direction:column;gap:2px;min-height:64px;justify-content:center;padding:var(--s-2) var(--s-3);background:var(--panel);border:var(--w-hair) solid var(--line);border-radius:var(--r-panel)}
.iq-action b{font-size:14px}
.iq-action small{font-size:12px;color:var(--ink-2)}
.iq-action.key{border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}
.iq-action.flag{border-color:var(--cse);background:var(--cse-tint)}
/* rail stats and feed */
.iq-stats{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-2)}
.iq-stat{border:var(--w-hair) solid var(--line);border-top:var(--w-rule) solid var(--ink-3);border-radius:var(--r-panel);padding:var(--s-2) var(--s-3)}
.iq-stat b{display:block;font-family:var(--display);font-stretch:80%;font-weight:850;font-size:26px;line-height:1.05}
.iq-stat small{font-size:12px;color:var(--ink-2)}
.iq-stat.critical{border-top-color:var(--critical)} .iq-stat.watch{border-top-color:var(--watch)} .iq-stat.review{border-top-color:var(--status-mute)} .iq-stat.ok{border-top-color:var(--ok)}
.iq-feed{display:flex;flex-direction:column}
.iq-feed div{display:grid;grid-template-columns:44px 1fr;gap:var(--s-2);padding:7px 0;border-top:var(--w-hair) solid var(--line);font-size:var(--fs-small)}
.iq-feed .t{font-family:var(--mono);font-size:12px;color:var(--ink-2);padding-top:2px}
.iq-feed .w{color:var(--ink-2)}
/* flag card — v1.4.1 in-app, agent-backed resolution */
.iq-flag{background:var(--panel);border:var(--w-hair) solid var(--line);border-left:var(--w-rule) solid var(--watch);border-radius:var(--r-card);padding:var(--s-4);display:flex;flex-direction:column;gap:var(--s-3)}   /* G4: a flag needs attention (at risk), not blue */
.iq-flag.high{border-left-color:var(--critical)}
.iq-flag .hd{display:flex;align-items:center;gap:var(--s-2);flex-wrap:wrap}
.iq-flag .hd b{font-size:15px}
.iq-flag .hd .id{font-family:var(--mono);font-size:var(--fs-label);color:var(--ink-2)}
.iq-flag .hd .grow{flex:1}
.iq-diag{background:var(--cse-tint);border-radius:var(--r-panel);padding:var(--s-3);font-size:13px}
.iq-diag .iq-label{color:var(--cse)}
.iq-diag p{margin:4px 0 0}
.iq-diag ul{margin:6px 0 0;padding-left:18px;color:var(--ink-2);font-size:var(--fs-small)}
.iq-choices{display:flex;flex-wrap:wrap;gap:6px}
.iq-choice{min-height:36px;display:inline-flex;align-items:center;padding:0 var(--s-3);border-radius:var(--r-pill);border:var(--w-hair) solid var(--line);font-size:13px;font-weight:600;color:var(--ink-2);background:var(--panel)}
.iq-choice.on{border-color:var(--cse);color:var(--cse);background:var(--cse-tint);box-shadow:inset 0 0 0 1px var(--cse)}
.iq-approve{display:flex;align-items:center;gap:var(--s-2);border-top:var(--w-hair) solid var(--line);padding-top:var(--s-3)}
.iq-approve .note{flex:1;font-size:var(--fs-small);color:var(--ink-2)}
.iq-evidence{font-family:var(--mono);font-size:12px;color:var(--ink-2)}
/* queue list */
.iq-queue{display:flex;flex-direction:column;border:var(--w-hair) solid var(--line);border-radius:var(--r-card);background:var(--panel);overflow:hidden}
.iq-queue .row{display:grid;grid-template-columns:auto 1fr auto;gap:var(--s-3);align-items:center;padding:10px var(--s-3);border-top:var(--w-hair) solid var(--line);font-size:13px}
.iq-queue .row:first-child{border-top:0}
.iq-queue .row.on{background:var(--cse-tint)}
.iq-queue .row small{display:block;color:var(--ink-2);font-size:12px}
.iq-queue .ct{font-family:var(--mono);font-size:12px;color:var(--ink-2)}
/* phone */
.iq-phone{width:390px;min-height:844px;background:var(--ground);border:var(--w-hair) solid var(--line);overflow:hidden;display:flex;flex-direction:column;font:var(--fs-body)/1.45 var(--body);color:var(--ink)}
.iq-phone .iq-head{height:56px;flex:none}
.iq-phone .body{flex:1;padding:var(--s-4);display:flex;flex-direction:column;gap:var(--s-3)}
.iq-scan{min-height:150px;border-radius:var(--r-card);background:var(--deep);color:var(--on-dark);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;font-family:var(--display);font-stretch:80%;font-weight:850;font-size:24px}
.iq-scan small{font-family:var(--mono);font-weight:400;font-size:var(--fs-label);letter-spacing:.08em;text-transform:uppercase;color:var(--on-dark-2)}
.iq-scan i{width:64px;height:64px;border:var(--w-emph) solid var(--on-dark-2);border-radius:var(--r-panel)}
.iq-quick{display:grid;grid-template-columns:repeat(5,1fr);gap:6px}
.iq-quick div{min-height:var(--touch-field);display:grid;place-items:center;border-radius:var(--r-panel);background:var(--panel);border:var(--w-hair) solid var(--line);font-size:12px;font-weight:600}
.iq-quick div.flag{border-color:var(--cse);color:var(--cse);background:var(--cse-tint)}
.iq-tabbar{flex:none;display:grid;grid-template-columns:repeat(4,1fr);border-top:var(--w-hair) solid var(--line);background:var(--panel)}
.iq-tabbar div{min-height:60px;display:grid;place-items:center;font-family:var(--mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2)}
.iq-tabbar div.on{color:var(--ink);box-shadow:inset 0 3px 0 var(--cse)}
.iq-phone .iq-field{flex:none}

/* ── v0.2.0 ──────────────────────────────────────────────────────────────────────────────────────────────────────── */
/* text: left-aligned and ragged-right (never justified); numbers right-aligned in tabular figures; long codes and
   names wrap instead of pushing the layout wider; headings balance, paragraphs avoid orphans */
.iq-app,.iq-phone{text-align:left;hyphens:manual}
.iq-app *,.iq-app *::before,.iq-app *::after,.iq-phone *{box-sizing:border-box}
.iq-app h1,.iq-app h2,.iq-app h3{text-wrap:balance}
.iq-app p{text-wrap:pretty}
.iq-kv dd,.iq-name,.iq-queue .row span{overflow-wrap:anywhere}
.iq-table td{overflow-wrap:break-word}   /* not anywhere: table columns keep their natural width */
.iq-num,.iq-table .num,.iq-stat b,.iq-qty{font-variant-numeric:tabular-nums}
.iq-btn.wrap{white-space:normal;padding:var(--s-2) var(--s-4)}
.iq-btn.quiet{border-color:transparent;background:transparent;color:var(--cse)}
.iq-btn.danger{color:var(--critical);border-color:var(--critical)}
.iq-btn.sm{min-height:36px;padding:0 var(--s-3);font-size:13px}
/* toolbar: filters and actions above a list; wraps on small screens */
.iq-toolbar{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--s-2) var(--s-3)}
.iq-toolbar label{display:flex;flex-direction:column;gap:4px;min-width:0;flex:1 1 160px;max-width:100%}
.iq-toolbar .grow{flex:1 1 auto}
.iq-toolbar select,.iq-toolbar input{min-width:0;min-height:var(--touch);padding:0 var(--s-3);border:var(--w-hair) solid var(--line);border-radius:var(--r-panel);background:var(--panel);color:var(--ink);font:var(--fs-body) var(--body);width:100%}
.iq-toolbar select:focus,.iq-toolbar input:focus{outline:none;border-color:var(--cse)}
/* chips: a pick from a short list (categories, saved filters); the count is mono */
.iq-chips{display:flex;flex-wrap:wrap;gap:var(--s-2)}
.iq-chip{display:inline-flex;align-items:center;gap:var(--s-2);min-height:var(--touch);padding:0 var(--s-3);border-radius:var(--r-pill);border:var(--w-hair) solid var(--line);background:var(--panel);color:var(--ink);font:500 13px/1.1 var(--body);cursor:pointer;text-align:left}
.iq-chip .n{font-family:var(--mono);font-size:12px;color:var(--ink-2)}
.iq-chip:hover{border-color:var(--ink-3)}
.iq-chip.on{background:var(--ink);border-color:var(--ink);color:var(--bg)}
.iq-chip.on .n{color:var(--bg)}
/* segmented control: one of 2-5 views */
.iq-seg{display:inline-flex;border:var(--w-hair) solid var(--line);border-radius:var(--r-panel);background:var(--panel);overflow:hidden}
.iq-seg button{min-width:var(--touch);min-height:var(--touch);padding:0 var(--s-3);border:0;border-left:var(--w-hair) solid var(--line);background:transparent;color:var(--ink-2);font:600 13px/1 var(--body);cursor:pointer}
.iq-seg button:first-child{border-left:0}
.iq-seg button.on{background:var(--cse-tint);color:var(--cse);box-shadow:inset 0 -2px 0 var(--cse)}
/* next actions: what needs a person now — count, what, why, go */
.iq-next{display:flex;flex-direction:column;border:var(--w-hair) solid var(--line);border-radius:var(--r-card);background:var(--panel);overflow:hidden}
.iq-next button{display:grid;grid-template-columns:64px minmax(0,1fr) auto;gap:var(--s-3);align-items:center;min-height:64px;padding:var(--s-2) var(--s-4);border:0;border-top:var(--w-hair) solid var(--line);border-left:var(--w-rule) solid var(--ink-3);background:var(--panel);color:var(--ink);text-align:left;font:inherit;cursor:pointer}
.iq-next button:first-child{border-top:0}
.iq-next button:hover{background:var(--cse-tint)}
.iq-next b.c{font-family:var(--display);font-stretch:80%;font-weight:850;font-size:26px;line-height:1;font-variant-numeric:tabular-nums;text-align:right}
.iq-next .t{display:flex;flex-direction:column;gap:2px;min-width:0}
.iq-next .t strong{font-size:14px}
.iq-next .t small{font-size:var(--fs-small);color:var(--ink-2);text-wrap:pretty}
.iq-next .go{font-family:var(--mono);font-size:var(--fs-label);letter-spacing:.08em;text-transform:uppercase;color:var(--cse)}
.iq-next .critical{border-left-color:var(--critical)} .iq-next .critical b.c{color:var(--critical)}
.iq-next .watch{border-left-color:var(--watch)} .iq-next .review{border-left-color:var(--status-mute)} .iq-next .ok{border-left-color:var(--ok)}
/* search result row: identity, name, where, how many */
.iq-results{display:flex;flex-direction:column;border:var(--w-hair) solid var(--line);border-radius:var(--r-card);background:var(--panel);overflow:hidden}
.iq-result{display:grid;grid-template-columns:76px minmax(0,1fr) auto;gap:var(--s-3);align-items:center;min-height:var(--touch-field);padding:var(--s-2) var(--s-3);border:0;border-top:var(--w-hair) solid var(--line);background:var(--panel);color:var(--ink);text-align:left;font:inherit;cursor:pointer}
.iq-result:first-child{border-top:0}
.iq-result:hover,.iq-result:focus-visible{background:var(--cse-tint);outline:none}
.iq-result .id{font-family:var(--mono);font-size:12px;font-weight:500;letter-spacing:.04em}
.iq-result .nm{display:flex;flex-direction:column;gap:2px;min-width:0}
.iq-result .nm b{font-weight:600;overflow-wrap:anywhere}
.iq-result .nm small{font-size:var(--fs-small);color:var(--ink-2);overflow-wrap:anywhere}
.iq-result .q{font-family:var(--mono);font-size:13px;text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.iq-result .q small{display:block;font-size:12px;color:var(--ink-2)}
.iq-result mark{background:var(--watch-tint);color:inherit;border-radius:2px}
/* data table: mono uppercase heads, numbers right, selectable rows */
.iq-table{width:100%;border-collapse:collapse;font-size:var(--fs-small)}
.iq-table th{font-family:var(--mono);font-size:12px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2);text-align:left;padding:6px var(--s-2);border-bottom:var(--w-emph) solid var(--ink);white-space:nowrap}
.iq-table td{padding:8px var(--s-2);border-bottom:var(--w-hair) solid var(--line);vertical-align:top;text-align:left}   /* rule 11: never inherit centring */
.iq-table .num{text-align:right;font-family:var(--mono);white-space:nowrap}
.iq-table .mono{font-family:var(--mono);font-size:12px;white-space:nowrap}
.iq-table tbody tr:hover{background:var(--cse-tint)}
.iq-table tr.on{background:var(--cse-tint);box-shadow:inset var(--w-rule) 0 0 var(--cse)}
.iq-table tfoot td{font-weight:600;border-bottom:0;border-top:var(--w-emph) solid var(--ink)}
/* checkbox with a full touch target */
.iq-check{display:inline-grid;place-items:center;width:var(--touch);height:var(--touch);margin:calc(var(--s-2) * -1) 0;cursor:pointer}
.iq-check input{width:20px;height:20px;margin:0;accent-color:var(--cse);cursor:pointer}
/* selection bar: appears when rows are selected; batch actions for the selection */
.iq-selbar{position:sticky;bottom:var(--s-3);z-index:3;display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-2) var(--s-3);padding:var(--s-2) var(--s-3);background:var(--deep);color:var(--on-dark);border-radius:var(--r-card)}
.iq-selbar b{font-family:var(--display);font-stretch:80%;font-weight:850;font-size:20px}
.iq-selbar .grow{flex:1}
.iq-selbar .iq-btn{background:var(--deep-2);border-color:var(--deep-2);color:var(--on-dark)}
.iq-selbar .iq-btn.primary{background:var(--on-dark);border-color:var(--on-dark);color:var(--deep)}
.iq-selbar .iq-btn.agent{background:var(--cse);border-color:var(--cse);color:var(--panel)}
.iq-selbar select,.iq-selbar input{flex:1 1 140px;min-width:0;min-height:var(--touch);padding:0 var(--s-3);border:var(--w-hair) solid var(--deep-2);border-radius:var(--r-panel);background:var(--panel);color:var(--ink);font:var(--fs-body) var(--body)}
/* empty state: what is missing and the one thing to do next */
.iq-empty{display:flex;flex-direction:column;align-items:center;gap:var(--s-2);padding:var(--s-6) var(--s-4);text-align:center;color:var(--ink-2);font-size:var(--fs-small)}
.iq-empty b{color:var(--ink);font-size:15px}
.iq-empty p{margin:0;max-width:46ch}
/* loading placeholder (flat; opacity only) */
.iq-skel{display:block;min-height:16px;border-radius:var(--r-sharp);background:var(--soft);animation:iq-pulse 1.2s ease-in-out infinite}
@keyframes iq-pulse{50%{opacity:.45}}
@media (prefers-reduced-motion:reduce){.iq-skel{animation:none}}
/* drawer: detail beside a list (desktop) or below it (phone) */
.iq-drawer{background:var(--panel);border:var(--w-hair) solid var(--line);border-left:var(--w-rule) solid var(--cse);border-radius:var(--r-card);padding:var(--s-4);display:flex;flex-direction:column;gap:var(--s-3)}
.iq-drawer .hd{display:flex;align-items:flex-start;gap:var(--s-2);flex-wrap:wrap}
.iq-drawer .hd b{font-size:15px;flex:1 1 200px}
/* split: list + drawer */
.iq-split{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--s-4);align-items:start}
@media (max-width:1100px){.iq-split{grid-template-columns:1fr}}
/* stacked table: on a phone each row becomes a card; cells carry data-label="Column" */
@media (max-width:640px){
  .iq-table.stack thead{display:none}
  .iq-table.stack,.iq-table.stack tbody,.iq-table.stack tr,.iq-table.stack td{display:block;width:100%}
  .iq-table.stack tr{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:2px var(--s-3);padding:var(--s-2) 0;border-bottom:var(--w-hair) solid var(--line)}
  .iq-table.stack td{border:0;padding:2px 0;white-space:normal;text-align:left}
  .iq-table.stack td[data-label]::before{content:attr(data-label);display:block;font-family:var(--mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2)}
  .iq-table.stack td.full{grid-column:1/-1}
  .iq-result{grid-template-columns:minmax(0,1fr) auto}
  .iq-result .id{grid-column:1/-1}
  .iq-next button{grid-template-columns:48px minmax(0,1fr)}
  .iq-next .go{display:none}
  .iq-seg{display:flex;width:100%}
  .iq-seg button{flex:1;padding:0 var(--s-2)}
}
/* v0.3.0 — scan station. Quantity stepper: field-size targets (56 px) for gloved hands; the number is tabular */
.iq-stepper{display:inline-grid;grid-template-columns:var(--touch-field) minmax(56px,84px) var(--touch-field);border:var(--w-hair) solid var(--line);border-radius:var(--r-panel);background:var(--panel);overflow:hidden;max-width:100%}
.iq-stepper button{min-height:var(--touch-field);border:0;background:var(--soft);color:var(--ink);font:700 22px/1 var(--body);cursor:pointer}
.iq-stepper button:active{background:var(--cse-tint);color:var(--cse)}
.iq-stepper input{min-width:0;border:0;border-left:var(--w-hair) solid var(--line);border-right:var(--w-hair) solid var(--line);text-align:center;font:700 18px/1 var(--mono);font-variant-numeric:tabular-nums;color:var(--ink);background:var(--panel);-moz-appearance:textfield}
.iq-stepper input::-webkit-inner-spin-button,.iq-stepper input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
.iq-stepper input:focus{outline:none;box-shadow:inset 0 0 0 2px var(--cse)}
.iq-stepper b{grid-column:1/-1;display:grid;place-items:center;min-height:var(--touch-field);padding:0 var(--s-3)}
/* scan feedback: a 0.5 s edge flash on the scanning surface — green read, red look at the screen (paired with a beep) */
.iq-flash-ok{animation:iq-flash-ok .5s ease-out}
.iq-flash-bad{animation:iq-flash-bad .9s ease-out}
@keyframes iq-flash-ok{0%{box-shadow:inset 0 0 0 6px var(--ok)}100%{box-shadow:inset 0 0 0 0 transparent}}
@keyframes iq-flash-bad{0%,40%{box-shadow:inset 0 0 0 8px var(--critical)}100%{box-shadow:inset 0 0 0 0 transparent}}
@media (prefers-reduced-motion:reduce){.iq-flash-ok,.iq-flash-bad{animation-duration:.01s}}
/* status line: one dot + words, e.g. "Scanner ready", "Window not in front" */
.iq-status{display:inline-flex;align-items:center;gap:var(--s-2);font:500 var(--fs-small)/1.2 var(--body);color:var(--ink-2)}
/* any disabled button reads as unavailable, not just faded on hover */
.iq-btn:disabled,.iq-btn[disabled]{opacity:.45;cursor:not-allowed}
/* v0.3.0 — item card sizes to its container, not the window: wrap it in .iq-cq so a half-width column (scan station,
   drawer, split) gets the stacked layout instead of letter-by-letter columns */
.iq-cq{container-type:inline-size;min-width:0}
@container (max-width:760px){
  .iq-item{grid-template-columns:72px minmax(0,1fr)}
  .iq-item>.iq-kv,.iq-item>.iq-qty{grid-column:1/-1}
  .iq-kv{grid-template-columns:minmax(88px,auto) minmax(0,1fr)}
}

/* ── v0.4.0 · WB00: floor, focus, tones, glyphs ─────────────────────────────────────────────────────────────────────── */
/* touch (G6): 44 px targets on touch screens; text fields 16 px there so iPhone and iPad don't zoom */
@media (pointer:coarse){
  .iq-btn.sm,.iq-choice,.iq-nav a,.iq-chip,.iq-seg button{min-height:var(--touch)}
  .iq-field,.iq-toolbar input,.iq-toolbar select,.iq-selbar input,.iq-selbar select{font-size:16px}
}
/* the new components size by their border box wherever they sit, inside .iq-app or not */
:where(.iq-band,.iq-tiles,.iq-stat,.iq-stages,.iq-gate,.iq-rows,.iq-row,.iq-drawer,.iq-scrim,.iq-close,.iq-quote,.iq-progress,.iq-steps,.iq-step,.iq-opts,.iq-opt,.iq-textfield,.iq-textarea,.iq-msg,.iq-badge),
:where(.iq-band,.iq-stages,.iq-rows,.iq-drawer,.iq-quote,.iq-progress,.iq-steps,.iq-step,.iq-opts,.iq-textfield,.iq-msg) *{box-sizing:border-box}
/* focus is always visible, in interaction blue */
:where(.iq-app,.iq-phone,.iq-drawer,.iq-step,.iq-specimen) :focus-visible{outline:2px solid var(--interaction);outline-offset:2px}
/* the six status glyphs from the system (Status asset group, 0.15), drawn as masks so they take the status mark */
:root{
  --iq-g-on-track:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><circle cx='12' cy='12' r='9.5' fill='none' stroke='black' stroke-width='2'/><path d='M7.5 12.3l3 3 6-6.3' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/></svg>");
  --iq-g-at-risk:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M12 3L22 20H2z' fill='none' stroke='black' stroke-width='2' stroke-linejoin='round'/><path d='M12 9.5v4.5' stroke='black' stroke-width='2.2' stroke-linecap='round'/><circle cx='12' cy='17' r='1.25'/></svg>");
  --iq-g-off-track:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M8.3 2.5h7.4l5.3 5.3v7.4l-5.3 5.3H8.3L3 15.2V7.8z' fill='none' stroke='black' stroke-width='2' stroke-linejoin='round'/><path d='M9 9l6 6M15 9l-6 6' stroke='black' stroke-width='2.2' stroke-linecap='round'/></svg>");
  --iq-g-decision:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M12 2.5L21.5 12 12 21.5 2.5 12z'/></svg>");
  --iq-g-completed:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><rect x='3' y='3' width='18' height='18' rx='2' fill='none' stroke='black' stroke-width='2'/><path d='M7.5 12.3l3 3 6-6.3' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/></svg>");
  --iq-g-not-recorded:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><circle cx='12' cy='12' r='9.5' fill='none' stroke='black' stroke-width='2' stroke-dasharray='3 2.6'/></svg>");
  --iq-g-check:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M5 12.5l4.5 4.5L19 7.5' fill='none' stroke='black' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'/></svg>");
}
/* tones, from vocabulary.json: each sets the mark (outline, rule, glyph), the tint (fill) and the glyph */
:is(.iq-badge,.iq-band,.iq-msg,.iq-row,.iq-stat,.iq-glyph):is(.good,.avail,.clear,.on-track){--iq-mark:var(--status-good);--iq-tint:var(--good-tint);--iq-g:var(--iq-g-on-track)}
:is(.iq-badge,.iq-band,.iq-msg,.iq-row,.iq-stat,.iq-glyph):is(.warn,.zero,.at-risk){--iq-mark:var(--status-warn);--iq-tint:var(--warn-tint);--iq-g:var(--iq-g-at-risk)}
:is(.iq-badge,.iq-band,.iq-msg,.iq-row,.iq-stat,.iq-glyph):is(.bad,.critical,.off-track,.blocked){--iq-mark:var(--status-bad);--iq-tint:var(--bad-tint);--iq-g:var(--iq-g-off-track)}
:is(.iq-badge,.iq-band,.iq-msg,.iq-row,.iq-stat,.iq-glyph):is(.done,.completed){--iq-mark:var(--status-done);--iq-tint:var(--done-tint);--iq-g:var(--iq-g-completed)}
:is(.iq-badge,.iq-band,.iq-msg,.iq-row,.iq-stat,.iq-glyph):is(.mute,.review){--iq-mark:var(--status-mute);--iq-tint:var(--mute-tint);--iq-g:var(--iq-g-not-recorded)}
:is(.iq-badge,.iq-band,.iq-msg,.iq-row,.iq-stat,.iq-glyph).decision{--iq-mark:var(--emphasis);--iq-tint:var(--emphasis-tint);--iq-g:var(--iq-g-decision)}   /* once per surface */
:is(.iq-band,.iq-msg).info{--iq-mark:var(--interaction);--iq-tint:var(--interaction-tint);--iq-g:none}   /* navigational only, never a status */
/* the glyph: a badge, band and message draw it before the word; .iq-glyph is the same mark on its own */
.iq-badge:is(.good,.avail,.clear,.on-track,.warn,.zero,.at-risk,.bad,.critical,.off-track,.blocked,.done,.completed,.mute,.review,.decision)::before,
.iq-band>b::before,.iq-msg::before,.iq-glyph{content:"";flex:none;display:inline-block;width:14px;height:14px;background:var(--iq-mark);-webkit-mask:var(--iq-g) center/contain no-repeat;mask:var(--iq-g) center/contain no-repeat}
.iq-glyph{width:16px;height:16px;vertical-align:-3px}
:is(.iq-band.info>b,.iq-msg.info)::before{display:none}
.iq-stat:is(.good,.avail,.clear,.on-track,.warn,.zero,.at-risk,.bad,.critical,.off-track,.blocked,.done,.completed,.mute,.review,.decision){border-top-color:var(--iq-mark)}
/* eyebrow (Module 07): an .iq-label in interaction blue, above a title */
.iq-label.eyebrow{color:var(--interaction)}

/* ── band: one per view. The position in a word (with its glyph) and one sentence ───────────────────────────────── */
.iq-band{--iq-mark:var(--status-mute);--iq-tint:var(--mute-tint);--iq-g:var(--iq-g-not-recorded);display:grid;grid-template-columns:auto minmax(0,1fr);gap:var(--s-1) var(--s-4);align-items:center;padding:var(--s-3) var(--s-4);background:var(--iq-tint);border-left:var(--w-rule) solid var(--iq-mark);border-radius:var(--r-sharp);color:var(--ink)}
.iq-band>b{display:inline-flex;align-items:center;gap:var(--s-2);font-family:var(--display);font-stretch:80%;font-weight:850;font-size:17px;line-height:1.15;white-space:nowrap}
.iq-band>b::before{width:18px;height:18px}
.iq-band p{margin:0;font-size:var(--fs-body);color:var(--ink-2)}
.iq-band p strong{color:var(--ink);font-weight:600}
@media (max-width:640px){.iq-band{grid-template-columns:minmax(0,1fr)}}

/* ── filter tile: an .iq-stat that is a button. aria-pressed="true" is the selected filter (interaction) ──────────── */
button.iq-stat{display:block;width:100%;min-height:var(--touch);background:var(--panel);color:var(--ink);font:inherit;text-align:left;cursor:pointer}
button.iq-stat:hover{border-left-color:var(--ink-3);border-right-color:var(--ink-3);border-bottom-color:var(--ink-3)}
button.iq-stat[aria-pressed="true"]{background:var(--interaction-tint);box-shadow:inset 0 0 0 2px var(--interaction)}
.iq-stat .d{display:block;font-family:var(--mono);font-size:12px;color:var(--ink-2)}
.iq-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--s-2)}   /* three to five to a row */

/* ── stages: the path, with gates. Positions come from vocabulary.json: passed, current, not reached; plus blocked ─ */
.iq-stages{list-style:none;margin:0;padding:var(--s-3) 0 0;display:flex;flex-wrap:wrap;gap:var(--s-2);align-items:stretch}
.iq-stage{position:relative;flex:1 1 150px;min-width:0;display:flex;flex-direction:column;gap:2px;padding:var(--s-2) var(--s-3);background:var(--panel);border:var(--w-hair) solid var(--line);border-radius:var(--r-panel);color:var(--ink);font:inherit;text-align:left}
button.iq-stage{min-height:var(--touch);cursor:pointer} button.iq-stage:hover{border-color:var(--ink-3)}
.iq-stage .n{font-family:var(--mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2)}
.iq-stage b{font-family:var(--display);font-stretch:80%;font-weight:850;font-size:15px;line-height:1.15;overflow-wrap:anywhere}
.iq-stage small{font-size:12px;color:var(--ink-2)}
.iq-stage.passed{background:var(--good-tint);border-color:var(--status-good)}
.iq-stage.current{background:var(--warn-tint);border:var(--w-emph) solid var(--status-warn);padding:calc(var(--s-2) - 1px) calc(var(--s-3) - 1px)}
.iq-stage.blocked{background:var(--bad-tint);border-style:dashed;border-color:var(--status-bad)}
.iq-stage .here{position:absolute;top:-11px;right:var(--s-2);padding:0 6px;font:500 12px/1.4 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink);background:var(--panel);border:var(--w-hair) solid var(--status-warn);border-radius:var(--r-pill)}
/* gate between two stages: a diamond and "N waiting". A gate with decisions waiting takes the decision mark */
.iq-gate{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--s-1);min-width:64px;padding:0 var(--s-1);font-size:12px;color:var(--ink-2);text-align:center}
.iq-gate i{width:14px;height:14px;transform:rotate(45deg);border:var(--w-emph) solid var(--graphic);background:var(--panel)}
.iq-gate.waiting i{background:var(--emphasis);border-color:var(--emphasis)}
.iq-gate b{color:var(--ink);font-weight:600}
@media (max-width:640px){.iq-stages{flex-direction:column}.iq-gate{flex-direction:row;justify-content:flex-start;padding:0 var(--s-3)}.iq-stage .here{top:var(--s-2)}}

/* ── register row: id · title · due, then pills · owner · fidelity. The left rule is the status mark ─────────────── */
.iq-rows{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--s-2)}
.iq-row{display:grid;gap:var(--s-1);width:100%;min-height:var(--touch);padding:var(--s-2) var(--s-3);background:var(--panel);color:var(--ink);border:var(--w-hair) solid var(--line);border-left:var(--w-rule) solid var(--iq-mark,var(--status-mute));border-radius:var(--r-panel);font:inherit;text-align:left;text-decoration:none}
:is(button,a).iq-row{cursor:pointer} :is(button,a).iq-row:hover{background:var(--interaction-tint)}
.iq-row.on,.iq-row[aria-current="true"]{background:var(--interaction-tint);box-shadow:inset 0 0 0 1px var(--interaction)}
.iq-row.closed{border-left-style:dashed}
.iq-row .hd{display:flex;flex-wrap:wrap;gap:var(--s-1) var(--s-3);align-items:baseline;min-width:0}
.iq-row .id{font-family:var(--mono);font-size:12px;color:var(--ink-2)}
.iq-row .t{flex:1 1 240px;min-width:0;font-weight:600;font-size:14px;overflow-wrap:anywhere}
.iq-row .due{margin-left:auto;font-family:var(--mono);font-size:12px;color:var(--ink-2);white-space:nowrap}
.iq-row .body{font-size:13px;color:var(--ink-2)}
.iq-row .body.clamp{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.iq-row .ft{display:flex;flex-wrap:wrap;gap:var(--s-1) var(--s-2);align-items:center;font-size:var(--fs-small);color:var(--ink-2)}
.iq-row .ft .who{margin-right:auto}

/* ── overlay drawer and scrim: detail over the page. Full width on a phone; Esc, the scrim and Close all close it ── */
.iq-scrim{position:fixed;inset:0;z-index:60;background:var(--deep);opacity:.42}
.iq-scrim[hidden],.iq-drawer.over[hidden]{display:none}
.iq-drawer.over{position:fixed;top:0;right:0;bottom:0;z-index:70;width:min(600px,100%);padding:0;gap:0;border:0;border-left:var(--w-hair) solid var(--line);border-radius:0;overflow-y:auto;overscroll-behavior:contain;animation:iq-drawer-in .2s ease-out}
.iq-drawer.over>.hd{position:sticky;top:0;z-index:1;align-items:center;padding:var(--s-3) var(--s-4);background:var(--panel);border-bottom:var(--w-hair) solid var(--line)}
.iq-drawer.over>.hd h2{flex:1 1 200px;margin:0;font-family:var(--display);font-stretch:80%;font-weight:850;font-size:20px;line-height:1.15}
.iq-drawer.over>.bd{display:flex;flex-direction:column;gap:var(--s-4);padding:var(--s-4)}
.iq-drawer.over>.ft{position:sticky;bottom:0;display:flex;flex-wrap:wrap;gap:var(--s-2);justify-content:flex-end;padding:var(--s-3) var(--s-4);background:var(--panel);border-top:var(--w-hair) solid var(--line)}
.iq-drawer section{display:flex;flex-direction:column;gap:var(--s-2)}
.iq-drawer h3{margin:0;font-size:var(--fs-body);font-weight:600}
.iq-close{flex:none;display:grid;place-items:center;width:var(--touch);height:var(--touch);border:var(--w-hair) solid var(--line);border-radius:var(--r-panel);background:var(--panel);color:var(--ink);font:400 22px/1 var(--body);cursor:pointer}
.iq-close:hover{border-color:var(--ink-3)}
.iq-noscroll{overflow:hidden}
@keyframes iq-drawer-in{from{transform:translateX(100%)}}
@media (prefers-reduced-motion:reduce){.iq-drawer.over{animation:none}}

/* ── quote: words from a source, with the source named ─────────────────────────────────────────────────────────── */
.iq-quote{margin:0;padding:var(--s-2) var(--s-3);background:var(--soft);border-left:var(--w-rule) solid var(--graphic);border-radius:var(--r-sharp);font-size:13px;line-height:1.5;color:var(--ink)}
.iq-quote p{margin:0}
.iq-quote cite{display:block;margin-top:var(--s-1);font-style:normal;font-family:var(--mono);font-size:12px;color:var(--ink-2)}

/* ── progress: a native <progress> with its name and value in words. Data uses series-1; a wizard uses .step ────── */
.iq-progress{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--s-1) var(--s-3);align-items:baseline}
.iq-progress .name{min-width:0;font-size:13px;font-weight:500;overflow-wrap:anywhere}
.iq-progress .val{font-family:var(--mono);font-size:12px;color:var(--ink-2);white-space:nowrap}
.iq-progress .sub{grid-column:1/-1;font-size:12px;color:var(--ink-2)}
.iq-progress progress{grid-column:1/-1;display:block;width:100%;height:8px;border:var(--w-hair) solid var(--line);border-radius:var(--r-sharp);background:var(--soft);color:var(--series-1);overflow:hidden;-webkit-appearance:none;appearance:none}
.iq-progress progress::-webkit-progress-bar{background:var(--soft)}
.iq-progress progress::-webkit-progress-value{background:var(--series-1)}
.iq-progress progress::-moz-progress-bar{background:var(--series-1)}
.iq-progress.step progress{height:4px;border:0;color:var(--interaction)}
.iq-progress.step progress::-webkit-progress-value{background:var(--interaction)}
.iq-progress.step progress::-moz-progress-bar{background:var(--interaction)}

/* ── wizard: the rail of steps, the step, and Back / Next / Confirm. Nothing is written before Confirm ─────────── */
.iq-steps{display:flex;flex-direction:column;gap:var(--s-2)}
.iq-steps ol{list-style:none;margin:0;padding:0;display:flex;gap:var(--s-1);overflow-x:auto;scrollbar-width:none}
.iq-steps ol::-webkit-scrollbar{display:none}
.iq-stepdot{flex:none;display:inline-flex;align-items:center;gap:var(--s-1);min-height:var(--touch);padding:0 var(--s-3);border:var(--w-hair) solid var(--line);border-radius:var(--r-pill);background:var(--panel);color:var(--ink-2);font:500 12px/1 var(--mono);letter-spacing:.05em;white-space:nowrap;cursor:pointer}
.iq-stepdot:hover{border-color:var(--ink-3)}
.iq-stepdot.done{border-color:var(--status-good);color:var(--ink)}
.iq-stepdot.done::before{content:"";width:12px;height:12px;background:var(--status-good);-webkit-mask:var(--iq-g-check) center/contain no-repeat;mask:var(--iq-g-check) center/contain no-repeat}
.iq-stepdot[aria-current="step"]{background:var(--ink);border-color:var(--ink);color:var(--bg)}
.iq-stepdot[aria-current="step"]::before{background:var(--bg)}
.iq-step{display:flex;flex-direction:column;gap:var(--s-3);padding:var(--s-5);background:var(--panel);border:var(--w-hair) solid var(--line);border-radius:var(--r-card)}
.iq-step h2{margin:0;font-family:var(--display);font-stretch:80%;font-weight:850;font-size:22px;line-height:1.15}
.iq-step .why{margin:0;max-width:72ch;font-size:var(--fs-body);color:var(--ink-2)}
.iq-step .why strong{color:var(--ink)}
.iq-step .nav{display:flex;flex-wrap:wrap;gap:var(--s-2);align-items:center;padding-top:var(--s-3);border-top:var(--w-hair) solid var(--line)}
.iq-step .nav .grow{flex:1}
.iq-step[hidden]{display:none}
@media (max-width:640px){.iq-step{padding:var(--s-4)}}

/* ── options: one choice (or several, .multi), each with what happens and the risk. A consequence is required ──── */
.iq-opts{list-style:none;margin:0;padding:0;display:grid;gap:var(--s-2)}
.iq-opt{display:grid;grid-template-columns:auto minmax(0,1fr);gap:var(--s-1) var(--s-3);align-items:start;width:100%;min-height:var(--touch);padding:var(--s-3) var(--s-4);background:var(--panel);color:var(--ink);border:var(--w-hair) solid var(--line);border-radius:var(--r-card);font:inherit;text-align:left}
button.iq-opt{cursor:pointer} button.iq-opt:hover{border-color:var(--ink-3)}
.iq-opt[aria-pressed="true"]{background:var(--interaction-tint);border-color:var(--interaction);box-shadow:inset 0 0 0 1px var(--interaction)}
.iq-opt>*{grid-column:2}
.iq-opt .mark{grid-column:1;grid-row:1 / span 4;display:grid;place-items:center;width:18px;height:18px;margin-top:2px;border:var(--w-emph) solid var(--ink-2);border-radius:50%}
.iq-opt[aria-pressed="true"] .mark{border-color:var(--interaction);background:var(--interaction)}
.iq-opt[aria-pressed="true"] .mark::after{content:"";width:6px;height:6px;border-radius:50%;background:var(--panel)}
.iq-opts.multi .mark{border-radius:var(--r-sharp)}
.iq-opts.multi .iq-opt[aria-pressed="true"] .mark::after{width:12px;height:12px;border-radius:0;-webkit-mask:var(--iq-g-check) center/contain no-repeat;mask:var(--iq-g-check) center/contain no-repeat}
.iq-opt .t{font-weight:600;font-size:14px}
.iq-opt .s{font-size:13px;color:var(--ink-2)}
.iq-opt .cons,.iq-opt .risk{display:flex;flex-wrap:wrap;gap:2px var(--s-2);align-items:baseline;font-size:13px;color:var(--ink)}
.iq-opt .cons>.iq-label,.iq-opt .risk>.iq-label{flex:none}
.iq-opt .risk>.iq-label{display:inline-flex;align-items:center;gap:var(--s-1)}
.iq-opt .risk>.iq-label::before{content:"";width:14px;height:14px;align-self:center;background:var(--status-warn);-webkit-mask:var(--iq-g-at-risk) center/contain no-repeat;mask:var(--iq-g-at-risk) center/contain no-repeat}
.iq-opt.chosen{background:var(--good-tint);border-color:var(--status-good)}   /* the recorded answer, read-only */

/* ── text: a field with its label, hint and count. 16 px always, so touch screens don't zoom ─────────────────────── */
.iq-textfield{display:flex;flex-direction:column;gap:var(--s-1);min-width:0}
.iq-textarea{display:block;width:100%;min-height:112px;padding:var(--s-2) var(--s-3);background:var(--panel);color:var(--ink);border:var(--w-hair) solid var(--line);border-radius:var(--r-panel);font:16px/1.5 var(--body);resize:vertical}
.iq-textarea::placeholder{color:var(--ink-2);opacity:1}
.iq-textarea:focus{outline:none;border-color:var(--interaction);box-shadow:inset 0 0 0 1px var(--interaction)}
.iq-textarea[aria-invalid="true"]{border-color:var(--status-bad);box-shadow:inset 0 0 0 1px var(--status-bad)}
.iq-textarea:disabled{background:var(--soft);color:var(--ink-2);cursor:not-allowed}
.iq-hint{display:flex;flex-wrap:wrap;justify-content:space-between;gap:var(--s-1) var(--s-3);font-size:var(--fs-small);color:var(--ink-2)}
.iq-hint .n{font-family:var(--mono);font-size:12px}

/* ── message: validation, error, stale data and other states, as glyph + word + one sentence. Default tone mute ─── */
.iq-msg{--iq-mark:var(--status-mute);--iq-tint:var(--mute-tint);--iq-g:var(--iq-g-not-recorded);display:flex;align-items:flex-start;gap:var(--s-2);padding:var(--s-2) var(--s-3);background:var(--iq-tint);border-left:var(--w-rule) solid var(--iq-mark);border-radius:var(--r-sharp);font-size:13px;color:var(--ink)}
.iq-msg::before{margin-top:2px}
.iq-msg p{margin:0}
.iq-msg b{font-weight:600}

/* ── site look (G10, opt-in with data-look="site"): the InventoryIQ 1.6.4 dark sidebar. Selection stays blue ────── */
[data-look="site"] .iq-nav{background:var(--nav-bg);border-right-color:var(--nav-bg)}
[data-look="site"] .iq-nav h6{color:var(--nav-label)}
[data-look="site"] .iq-nav a{color:var(--nav-ink)}
[data-look="site"] .iq-nav a.on{color:var(--on-dark);background:var(--deep-2)}
[data-look="site"] .iq-brand b{box-shadow:inset 0 -2px 0 var(--copper)}   /* the wordmark rule: copper is brand only */
[data-look="site"] .iq-nav a .n{color:var(--on-dark)}

/* ==== core.css ==== */
/* ACiD App Interface 1.0: core.css. The shared page layer every app loads: shell, head, nav, tabs, crumbs, titles, bands,
   tiles, panels, grids, gauges. Split from ACiD Intelligence v2's dashboard.css (b1fc684); the Intelligence-only screens are in
   intelligence.css, which only that app loads. */
/* ACiD Engineering Control: page layout on the App Interface 0.4.0 components (ACiD DS 0.20.0-rc.3). No colour or font literals here. */
.iq-app{grid-template-columns:212px minmax(0,1fr);grid-template-rows:var(--head-h) 1fr}
.iq-head .clock{font:600 var(--fs-h)/1 var(--mono)}
.iq-head .meta{font-size:var(--fs-small);color:var(--on-dark-2)}
.iq-head .meta.warn{color:var(--on-dark)}
.iq-head .grow{flex:1}
.iq-nav{position:sticky;top:0;align-self:start;max-height:100vh;overflow:auto}
.iq-main{padding:var(--s-4);gap:var(--s-3)}
.iq-title{display:flex;align-items:center;gap:var(--s-1) var(--s-3);flex-wrap:wrap}
.iq-title h1{margin:0}
.iq-title p{margin:0;color:var(--ink-2);font-size:var(--fs-small)}
.grid2{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:var(--s-3)}
.grid2.wk{grid-template-columns:minmax(300px,1fr) minmax(0,2fr)}
.grid3{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:var(--s-3)}
.stack{display:grid;gap:var(--s-3);min-width:0}
.iq-panel{padding:var(--s-3);min-width:0}
.iq-panel>h2,.ph{display:flex;align-items:baseline;gap:var(--s-2);margin:0 0 var(--s-2);font:600 var(--fs-h)/1.2 var(--display)}
.ph small{font:400 var(--fs-small)/1.3 var(--body);color:var(--ink-2)}
.ph .grow{flex:1}
.tbl{overflow-x:auto}
.iq-table{width:100%}
.iq-table td,.iq-table th{padding:6px 8px;vertical-align:top}
.mono{font-family:var(--mono);font-size:var(--fs-small)}
.muted{color:var(--ink-2)}
.small{font-size:var(--fs-small)}
.lnk{font:inherit;color:var(--cse);background:none;border:0;padding:0;cursor:pointer;text-decoration:underline}
/* 1.0: scoped to the app frame (no global element rules). :where() keeps it at element weight, so component links
   (.iq-nav a, a.ptile and the rest) keep their own colours whatever the order (dashboard rc.1 check, items 1 and 2). */
:where(.iq-app) a{color:var(--cse)}
.chipsrow{display:flex;gap:var(--s-1);flex-wrap:wrap}
.kvs{display:grid;grid-template-columns:auto 1fr;gap:2px var(--s-2);font-size:var(--fs-small);margin:0}
.kvs dt{color:var(--ink-2)}
.kvs dd{margin:0}
.empty{padding:var(--s-3);color:var(--ink-2);font-size:var(--fs-small)}
.md p{margin:.3em 0}
.md ul{margin:.3em 0;padding-left:1.2em}
/* ---------- line icons (interim: drawn here until the DS icon set lands; stroke = currentColor) ---------- */
.ico{width:1.25em;height:1.25em;flex:none;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;vertical-align:-.22em}
/* ---------- queue: current actions and PRs to approve ---------- */
/* ---------- wall: 40-inch office screen. Dark island, sized from the viewport so 1920 and 3840 wide both fill. ---------- */
/* DS: at least 24px at 1920 wide for wall distance */
.gauges{display:flex;gap:.6em;flex-wrap:wrap}
.gw{display:inline-flex;flex-direction:column;align-items:center;gap:.25em}
.gw .iq-badge{font-size:.7em}
.gauge{width:5.2em;height:5.2em}
.gauge .trk{fill:none;stroke:var(--soft);stroke-width:9}
.gauge .val{fill:none;stroke:var(--status-good);stroke-width:9;stroke-linecap:round}
.gauge .val.warn{stroke:var(--status-warn)}
.gauge .val.bad{stroke:var(--status-bad)}
.gauge .val.mute{stroke:var(--status-mute)}
.gauge .gv{font:700 20px var(--mono);fill:var(--ink);text-anchor:middle}
.gauge .gl{font:500 12px var(--body);fill:var(--ink-2);text-anchor:middle}
@media (max-width:860px){.iq-app{grid-template-columns:1fr;grid-template-rows:auto auto 1fr}.iq-nav{position:static;max-height:none;display:flex;gap:2px;overflow-x:auto;padding:var(--s-1) var(--s-2);border-right:0;border-bottom:1px solid var(--line)}.iq-nav h6{display:none}.iq-nav a{white-space:nowrap}.grid2{grid-template-columns:1fr}.iq-main{padding:var(--s-3) 16px}}
/* ---------- v2: editions (internal | shareable) and load capacity. App Interface 0.4.0 (DS 0.20.0-rc.3) components, tokens only ---------- */
.crumbs{display:flex;flex-wrap:wrap;gap:var(--s-1) var(--s-2);align-items:center;font:500 var(--fs-label)/1.4 var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2)}
.crumbs a{color:var(--cse);text-decoration:none}
.crumbs a:hover{text-decoration:underline}
.iq-head .edlbl{font:500 var(--fs-label)/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--on-dark-2)}
.src{font-size:12px;color:var(--ink-2)}
/* round 4: module number + short code, small, at the right of every box header and view title */
.iq-badge.mcode{padding:0 5px;font-size:12px;letter-spacing:.04em;font-weight:500;align-self:center;white-space:nowrap}
.ph .mcode{margin-left:auto}
.iq-title h1 .mcode{margin-left:var(--s-2);vertical-align:middle}   /* older markup with the chip inside the h1 */
/* DSS decision wizard (Kyle 9 Nov: "use the decision wizard"): agent avatar asks, big tap targets */
/* Kyle 10 Nov: spec'd card art. Hero per type (quiet left side carries the live title), agent avatar at the upper left */
.iq-step.big .iq-opt{min-height:64px;padding:var(--s-3) var(--s-4)}
.iq-step.big .iq-opt .t{font-size:16px}
.iq-step.big .nav .iq-btn{min-height:var(--touch-field);font-size:15px}
/* Finance automation resources (Finance tab) */
/* M112 HUB board: four lanes */
/* Kyle 9 Nov: compact status line, dismissible CA-01 notice, mini health strip */
.sband>summary{list-style:none;cursor:pointer}
.sband>summary::-webkit-details-marker{display:none}
.sband .sbmore{color:var(--interaction);white-space:nowrap}
/* Kyle 10 Nov: Dismiss on every notice (decorateNotes); folding boxes and sidebar groups */
.dismissable{position:relative;padding-right:104px}
.dismissable>.ndismiss{position:absolute;right:var(--s-2);top:50%;transform:translateY(-50%);min-height:36px}
.iq-panel.folded>:not(h2){display:none}
.iq-panel.folded>h2.ph{margin-bottom:0}
.pfold{flex:none;display:inline-grid;place-items:center;width:28px;height:28px;margin:-4px 2px -4px -6px;padding:0;border:0;border-radius:var(--r-sharp);background:none;color:var(--ink-2);font-size:14px;line-height:1;cursor:pointer}
.pfold:hover{background:var(--soft);color:var(--ink)}
.crumbs .foldall{margin-left:auto;display:inline-flex;gap:var(--s-1)}
.crumbs .iq-btn{text-transform:none;letter-spacing:0}
.iq-nav h6 button{display:flex;align-items:center;gap:6px;width:100%;min-height:32px;margin:0;padding:0;border:0;background:none;font:inherit;letter-spacing:inherit;text-transform:inherit;color:inherit;cursor:pointer;text-align:left}
.iq-nav h6 button:hover{color:var(--ink)}
.iq-nav h6 .chev{width:10px;font-family:var(--body)}
.iq-nav h6 .n{margin-left:auto;margin-right:var(--s-2);padding:0 6px;font-size:12px;letter-spacing:0;color:var(--ink);background:var(--bad-tint);border:var(--w-hair) solid var(--status-bad);border-radius:var(--r-pill)}
.navgrp.shut>a{display:none}
[data-look="site"] .iq-nav h6 button:hover{color:var(--on-dark)}
@media (max-width:860px){.navgrp{display:contents}.navgrp.shut>a{display:flex}/* the phone strip scrolls sideways: every screen stays reachable */.dismissable{padding-right:var(--s-3);padding-bottom:52px}.dismissable>.ndismiss{top:auto;bottom:var(--s-2);transform:none}}
.hstrip{display:flex;flex-wrap:wrap;gap:var(--s-2);align-items:center}
.hchip{display:inline-flex;align-items:center;gap:6px;min-height:var(--touch);padding:0 var(--s-3);border:var(--w-hair) solid var(--line);border-radius:var(--r-pill);background:var(--panel);color:var(--ink);font:500 13px/1 var(--body);cursor:pointer}
.hchip:hover{border-color:var(--ink-3)}
.hchip .ico{width:16px;height:16px;color:var(--ink-2)}
.hchip .w{font:500 12px/1 var(--mono);letter-spacing:.04em;text-transform:uppercase;color:var(--ink-2)}
.hstrip .hwhen{margin-left:auto}
@media (max-width:640px){.hchip .w{display:none}.hstrip .hwhen{margin-left:0;width:100%}}
/* M006 FEX: the finance explorer, in a sandboxed frame that fills the view (Kyle 10 Nov: built in, no download) */
/* Kyle 10 Nov: Home plus five areas (sidebar), area tabs, Home pulse tiles. App Interface tokens only. */
.iq-nav a.area{gap:var(--s-2);min-height:44px;font-size:14px}
.iq-nav a.area .ico{width:18px;height:18px;flex:none;color:var(--ink-2)}
.iq-nav a.area.on .ico{color:var(--cse)}
.iq-nav .navsep{border:0;border-top:var(--w-hair) solid var(--line);margin:var(--s-2) var(--s-4)}
.iq-nav .jump{display:grid;gap:4px;margin:var(--s-3) var(--s-4) 0}
.iq-nav .jump select{min-height:36px;border:var(--w-hair) solid var(--line);border-radius:var(--r-panel);background:var(--panel);color:var(--ink);font:500 13px var(--body);padding:0 var(--s-2)}
.areatabs{display:flex;gap:2px;overflow-x:auto;overflow-y:hidden;border-bottom:var(--w-hair) solid var(--line);margin:var(--s-1) 0 var(--s-2);scrollbar-width:thin}
.areatabs a{flex:none;display:inline-flex;align-items:center;min-height:40px;padding:0 var(--s-3);color:var(--ink-2);text-decoration:none;font:500 13.5px var(--body);border-bottom:2px solid transparent;margin-bottom:-1px}
.areatabs a:hover{color:var(--ink)}
.areatabs a.on{color:var(--ink);font-weight:600;border-bottom-color:var(--cse)}
.ptiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s-3)}
.ptile{display:grid;gap:4px;align-content:start;text-align:left;padding:var(--s-3) var(--s-4);border:var(--w-hair) solid var(--line);border-left:var(--w-rule) solid var(--iq-mark,var(--status-mute));border-radius:var(--r-sharp);background:var(--panel);color:var(--ink);font:inherit;cursor:pointer;min-height:132px}
.ptile:hover{border-color:var(--ink-3);border-left-color:var(--iq-mark,var(--status-mute))}
.ptile:focus-visible{outline:2px solid var(--interaction);outline-offset:2px}
.ptile.good{--iq-mark:var(--status-good)}
.ptile.warn{--iq-mark:var(--status-warn)}
.ptile.bad{--iq-mark:var(--status-bad)}
.ptile.mute{--iq-mark:var(--status-mute)}
.ptile .pk{display:flex;align-items:center;gap:6px;font:500 13px var(--body);color:var(--ink-2)}
.ptile .pk .ico{width:16px;height:16px}
.ptile .pw{margin-left:auto;display:inline-flex;align-items:center;gap:4px;font:500 12px var(--mono);letter-spacing:.04em;text-transform:uppercase;color:var(--ink)}
.ptile .pn{font:600 28px/1.1 var(--display);margin-top:2px}
.ptile .ps{font-size:13px;line-height:1.4;color:var(--ink-2)}
.ptile .pa{font-size:12px;color:var(--ink-2);margin-top:auto}
@media (max-width:1100px){.ptiles{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:860px){.iq-nav .jump,.iq-nav .navsep{display:none}.iq-nav a.area span:not(.n){display:inline}}
@media (max-width:560px){.ptiles{grid-template-columns:1fr}.ptile{min-height:0}}
/* M113 SGN: the confirm step */
/* M209 TRN: rule cells (glyph + word) */
/* 12 Nov: the tenant app is a read-only copy until cutover. Buttons that would be refused don't show there; PR sign-off
   and the Owner's access matrix are the two writes it allows, so they stay. */
/* Kyle 12 Nov: app switcher (ACiD Intelligence | Project Intelligence) and the "lives in Pi" hand-over cards */
.iq-head .appsw{display:inline-flex;gap:2px;margin-left:var(--s-2);border:var(--w-hair) solid var(--inv-line);border-radius:var(--r-panel);overflow:hidden}
.iq-head .appsw a{display:inline-flex;align-items:center;min-height:32px;padding:0 var(--s-3);font:500 12.5px var(--body);color:var(--on-dark-2);text-decoration:none}
.iq-head .appsw a[aria-current]{color:var(--on-dark);background:var(--interaction-tint);box-shadow:inset 0 -2px 0 var(--interaction)}
.iq-head .appsw a:hover{color:var(--on-dark)}
a.ptile{text-decoration:none}
@media (max-width:860px){.iq-head .appsw{order:10;width:100%;margin:var(--s-1) 0 0}.iq-head .appsw a{flex:1;justify-content:center}}
/* B3 12 Nov: Needs you list, one action per row */
/* 12 Nov: "Sign in again" bar when another app on acidintegrity.com replaced our sign-in */
/* M114 PDL: product decisions, Kyle's words as a quote */
/* M115 DEV co-screen (Kyle 12 Nov): tablet beside the PC (768 portrait, 1024 landscape) and a full-HD wall screen.
   Large type, no menu, top band visible without scrolling. Theme follows the device. */
/* M116 PID Decisions from Pi (ADR-PI-020): chips on top, one row per decision, one primary action, history drawer */
/* M116 answer picker: each option with its consequence; the recommendation is pre-selected */
/* outputs: a field the hub could not read is shown as "not read", muted, never as a number */
.iq-stat.nr b{font-size:var(--fs-s, 14px);font-weight:500;color:var(--ink-2);font-style:italic}
/* M117 RMP Roadmaps: products down the side, 16 weeks across */
/* Top bar (12 Nov): one line on phone, tablet and PC. Wordmark from logo pack 1.2.0 (flat below 240 px, clear space = the tittle). */
.iq-head{flex-wrap:nowrap;gap:var(--s-2);min-height:var(--head-h);padding:0 16px;position:relative;z-index:30}
.iq-head .iq-brand{display:inline-flex;align-items:center;gap:10px;color:var(--on-dark);text-decoration:none;flex:none;padding:6px 0}
.iq-head .brand-mark{height:var(--brand-h);width:auto;display:block}
.iq-head .brand-rule{flex:none;width:3px;height:24px;border-radius:2px;background:var(--copper)}
.iq-head .brand-app{font:600 19px/1 var(--display);font-stretch:85%;color:var(--on-dark);letter-spacing:.01em}
.iq-head details{position:relative;flex:none}
.iq-head summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;min-height:var(--head-ctl);border-radius:var(--r-pill)}
.iq-head summary::-webkit-details-marker{display:none}
.iq-head summary:focus-visible{outline:2px solid var(--interaction);outline-offset:2px}
.hpill summary{padding:0 12px;border:var(--w-hair) solid var(--inv-line);background:var(--deep-2)}
.hpill summary .meta{white-space:nowrap;letter-spacing:.04em}
.hpill summary::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--status-good);margin-right:8px;flex:none}
.hpill summary:has(.warn)::before{background:var(--status-warn)}
.hpill summary:has(.warn){border-color:var(--status-warn)}
.hpill summary:has(.bad)::before{background:var(--status-bad)}
.hpill summary:has(.bad){border-color:var(--status-bad)}
.hmenu summary{width:var(--head-btn);height:var(--head-btn);justify-content:center;color:var(--on-dark);border:var(--w-hair) solid var(--inv-line);border-radius:var(--r-panel)}
.iq-head .hpop{position:absolute;top:calc(100% + 8px);display:grid;gap:10px;min-width:260px;max-width:min(360px,calc(100vw - 32px));padding:14px;background:var(--deep);color:var(--on-dark);border:var(--w-hair) solid var(--inv-line);border-radius:var(--r-panel)}
.hpill .hpop{left:0}
.hmenu .hpop{right:0}
.iq-head .hpop .appsw{display:grid;grid-template-columns:1fr 1fr;margin:0;width:100%}
.iq-head .hpop .appsw a{justify-content:center;min-height:40px}
.iq-head .hpop a.small{color:var(--on-dark-2)}
.iq-head .hwhen{display:inline-flex;align-items:baseline;gap:8px;white-space:nowrap;flex:none}
.iq-head .hwhen .clock{font-size:20px}
@media (max-width:860px){.iq-head{flex-wrap:nowrap;padding:0 12px;gap:8px}.iq-head .appsw{order:0;width:100%;margin:0}}
@media (max-width:640px){.iq-head .brand-app{font-size:16px}.iq-head .hwhen .meta{display:none}.hpill summary{padding:0 10px}}
@media (max-width:420px){.iq-head .brand-app{display:none}.iq-head .hwhen .clock{font-size:17px}}
/* M118 SEC Security panel */
.iq-head .hsec{display:inline-flex;align-items:center;gap:6px;min-height:var(--head-ctl);padding:0 10px;border:var(--w-hair) solid var(--inv-line);border-radius:var(--r-pill);color:var(--on-dark);text-decoration:none;white-space:nowrap;flex:none}
.iq-head .hsec:hover{border-color:var(--interaction)}
@media (max-width:520px){.iq-head .hsec{padding:0 8px}.iq-head .hpill summary .meta{max-width:9.5em;overflow:hidden;text-overflow:ellipsis}}
/* M115 milestone co-screen: blockers strip, one timeline, Next / After that / Risks ahead */
@media (max-width:520px){.iq-head{min-width:0;gap:6px;padding:0 8px}.iq-head .hsec-w{display:none}.iq-head .hwhen .clock{font-size:16px}.hpill summary{padding:0 8px}.hpill summary::before{margin-right:6px}}
.iq-app > .iq-head{min-width:0}
@media (max-width:420px){.iq-head .hwhen{display:none}}
/* App wrapper (12 Nov): environment banner, version line, offline page */
.envbanner{position:sticky;top:0;z-index:200;padding:6px 16px;background:var(--status-warn);color:var(--inv-bg);font:600 13px var(--mono);text-align:center;letter-spacing:.04em}
.iq-head .hpop .appver{margin:0;color:var(--on-dark-2);font-family:var(--mono)}
.iq-main.offline{max-width:520px;margin:15vh auto;padding:24px;display:grid;gap:12px}
/* M119 UPD agent updates */
/* Service outage alert (12 Nov): top left, beside the logo; folded to one line, open for the detail */
.iq-head .hsvc summary{gap:6px;padding:0 12px;border:var(--w-hair) solid var(--status-bad);background:var(--deep-2);color:var(--on-dark);max-width:360px}
.iq-head .hsvc .hsvc-t{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font:600 12.5px var(--mono);letter-spacing:.02em}
.iq-head .hsvc .hpop{left:0;max-width:min(420px,calc(100vw - 32px))}
.iq-head .hsvc .svcone{display:grid;gap:4px;padding-bottom:8px;border-bottom:var(--w-hair) solid var(--inv-line)}
.iq-head .hsvc .svcone p{margin:0}
.iq-head .hsvc a{color:var(--on-dark)}
@media (max-width:860px){.iq-head .hsvc summary{max-width:200px}}
@media (max-width:520px){.iq-head .hsvc .hsvc-t{display:none}.iq-head .hsvc summary{padding:0 10px}}
/* System status screen (13 Nov): the card centred, its text below */
/* CA-01 executive infographic (13 Nov, Kyle: "flag that ... in the securities tab and the Canadian residency data ... as an
   infographic"). DS tokens only; the one orange is the lift. */

/* ==== status-card.css ==== */
/* ACiD status card 0.1.0 (public/js/status-card.js). ACiD DS tokens only, flat (the pulse is an outline ring, no shadow); Atlas motion:
   aa-live (green ring) for measured traffic, aa-svc (red ring) for an interruption, nothing else moves.
   560 px wide: the width a Teams message shows an image at without scaling it down. */
.acid-status{--as-w:560px;width:100%;max-width:var(--as-w);background:var(--panel);color:var(--ink);border:1px solid var(--line);border-radius:var(--r-card);
  font:14px/1.4 var(--body);overflow:hidden;box-sizing:border-box}
.acid-status *{box-sizing:border-box}
.acid-status .as-top{display:flex;gap:12px;align-items:center;padding:16px 16px 12px;border-bottom:1px solid var(--line-2);position:relative}
.acid-status .as-top::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--status-good)}
.acid-status.is-warn .as-top::before{background:var(--status-warn)}
.acid-status.is-down .as-top::before{background:var(--status-bad)}
.acid-status.is-unchecked .as-top::before{background:var(--status-mute)}
.acid-status .as-txt{flex:1 1 auto;min-width:0}
.acid-status .as-eye{font:600 12px/1.2 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2)}
.acid-status .as-brand{text-transform:none;color:var(--accent);letter-spacing:.04em}
.acid-status .as-h{margin:6px 0 2px;font:800 26px/1.08 var(--display);font-stretch:78%;letter-spacing:-.01em;display:flex;align-items:center;gap:10px;text-wrap:balance}
.acid-status .as-sig{flex:0 0 auto;width:12px;height:12px;border-radius:50%;background:var(--status-good);animation:as-live 1.6s ease-out infinite}
.acid-status.is-warn .as-sig{background:var(--status-warn);animation:none}
.acid-status.is-down .as-sig{background:var(--status-bad);animation:as-svc 1.6s ease-out infinite}
.acid-status.is-unchecked .as-sig{background:var(--status-mute);animation:none}
.acid-status .as-lead{margin:0;color:var(--ink-2);font-size:13px}
.acid-status .as-counts{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.acid-status .as-n{font:500 12px/1 var(--mono);padding:5px 8px;border-radius:var(--r-pill);border:1px solid var(--line);color:var(--ink-2)}
.acid-status .as-n b{color:var(--ink);font-weight:600}
.acid-status .as-n.st-up{border-color:var(--status-good)}
.acid-status .as-n.st-down{border-color:var(--status-bad);background:var(--bad-tint)}
.acid-status .as-n.st-warn{border-color:var(--status-warn);background:var(--warn-tint)}
.acid-status .as-plates{flex:0 0 auto;display:block}
.acid-status .as-ring{fill:none;stroke-width:2;transform-box:fill-box;transform-origin:center}
.acid-status .as-ring.as-pl{stroke:var(--status-good);animation:as-ring 1.6s ease-out infinite}
.acid-status .as-ring.as-pd{stroke:var(--status-bad);animation:as-ring 1.6s ease-out infinite}
.acid-status .as-issue{margin:12px 16px 0;padding:10px 12px;border:1px solid var(--status-bad);border-radius:8px;background:var(--bad-tint)}
.acid-status .as-issue b{font-size:13px}
.acid-status .as-issue p{margin:2px 0 0;font-size:13px;color:var(--ink)}
.acid-status .as-issue .as-more{color:var(--ink-2);font-size:12px}
.acid-status .as-layers{padding:8px 16px 4px;display:grid;gap:10px}
.acid-status .as-layer{border-top:1px solid var(--line-2);padding-top:8px}
.acid-status .as-layer:first-child{border-top:0}
.acid-status .as-lh{display:flex;align-items:baseline;gap:8px;margin-bottom:6px}
.acid-status .as-ln{font:600 12px/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2)}
.acid-status .as-lt{font:700 15px/1.1 var(--display);font-stretch:85%;flex:1}
.acid-status .as-lw{display:inline-flex;align-items:center;gap:6px;font:600 12px/1 var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--as-t);--as-m:var(--status-good);--as-t:var(--status-good-text)}
.acid-status .as-lw::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--as-m);flex:none}
.acid-status .as-layer.st-warn .as-lw{--as-m:var(--status-warn);--as-t:var(--status-warn-text)}
.acid-status .as-layer.st-down .as-lw{--as-m:var(--status-bad);--as-t:var(--status-bad-text)}
.acid-status .as-layer.st-unchecked .as-lw{--as-m:var(--status-mute);--as-t:var(--status-mute-text)}
.acid-status .as-layer.st-unchecked .as-lw::before{background:none;border:1.5px dashed var(--ink-2)}
.acid-status .as-units{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:6px}
.acid-status .as-u{display:flex;align-items:center;gap:8px;padding:7px 8px;border:1px solid var(--line-2);border-radius:6px;min-width:0;background:var(--bg)}
.acid-status .as-u.st-down{border-color:var(--status-bad);background:var(--bad-tint)}
.acid-status .as-u.st-warn{border-color:var(--status-warn);background:var(--warn-tint)}
.acid-status .as-dot{flex:0 0 auto;width:10px;height:10px;border-radius:50%;background:var(--status-good)}
.acid-status .as-u.live .as-dot{animation:as-live 1.6s ease-out infinite}
.acid-status .as-u.st-warn .as-dot{background:var(--status-warn)}
.acid-status .as-u.st-down .as-dot{background:var(--status-bad);animation:as-svc 1.6s ease-out infinite}
.acid-status .as-u.st-unchecked .as-dot{background:transparent;border:2px solid var(--status-mute)}
.acid-status .as-ul{flex:1 1 auto;min-width:0;display:flex;flex-direction:column}
.acid-status .as-ul b{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.acid-status .as-ul>span{font-size:12px;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.acid-status .as-rate{font-family:var(--mono)}
.acid-status .as-tag{flex:0 0 auto;font:600 12px/1 var(--mono);letter-spacing:.04em;color:var(--ink-2)}
.acid-status .as-u.st-down .as-tag{color:var(--status-bad)}
.acid-status .as-note{margin:6px 16px 0;font-size:12px;color:var(--ink-2)}
.acid-status .as-foot{display:flex;flex-wrap:wrap;gap:4px 12px;padding:10px 16px 12px;margin-top:8px;border-top:1px solid var(--line-2);font:12px/1.3 var(--mono);color:var(--ink-2)}
.acid-status .as-int{margin-left:auto;color:var(--ink-2);text-transform:uppercase;letter-spacing:.08em}
@keyframes as-live{0%{outline:2px solid color-mix(in srgb,var(--status-good) 60%,transparent);outline-offset:0}100%{outline:2px solid transparent;outline-offset:6px}}
@keyframes as-svc{0%{outline:2px solid color-mix(in srgb,var(--status-bad) 65%,transparent);outline-offset:0}100%{outline:2px solid transparent;outline-offset:7px}}
@keyframes as-ring{0%{opacity:.9;transform:scale(1)}100%{opacity:0;transform:scale(2.6)}}
@media (max-width:480px){.acid-status .as-units{grid-template-columns:1fr}.acid-status .as-plates{width:120px;height:auto}}
@media (prefers-reduced-motion:reduce){.acid-status *{animation:none!important}}
/* 0.1.0 compact: up units as chips (one line each), interrupted ones as cards */
.acid-status .as-units{margin-bottom:6px}
.acid-status .as-chips{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px}
.acid-status .as-c{display:inline-flex;align-items:center;gap:6px;padding:5px 9px 5px 7px;border:1px solid var(--line-2);border-radius:var(--r-pill);background:var(--bg);font-size:13px;font-weight:500;white-space:nowrap}
.acid-status .as-c .as-dot{width:8px;height:8px}
.acid-status .as-c.live .as-dot{animation:as-live 1.6s ease-out infinite}
.acid-status .as-c.st-unchecked .as-dot{background:transparent;border:2px solid var(--status-mute)}
.acid-status .as-c .as-rate{font:12px/1 var(--mono);color:var(--ink-2)}
.acid-status .as-c .as-q{font-size:12px;color:var(--ink-2)}
.acid-status .as-layers{gap:8px}
.acid-status .as-lh{margin-bottom:5px}
.acid-status .as-u{padding:6px 8px}
.acid-status .as-h{font-size:24px}
.acid-status .as-top{padding:14px 16px 10px}
.acid-status .as-plates{width:132px;height:auto}

/* ==== project-update.css ==== */
/* ACiD App Interface 1.0: <acid-project-update> styles, moved out of project-update.js so a strict CSP (style-src 'self')
   passes. In the bundle (acid-app.css). The component only injects them itself where they're missing and the CSP allows it. */
:root{--acid-pu-css:1}
acid-project-update{display:block;color:var(--ink);font:14px/1.5 var(--body);font-variant-numeric:tabular-nums}
acid-project-update button{font:inherit;color:var(--ink);cursor:pointer}
acid-project-update .pu-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:6px 0 12px;border-bottom:1px solid var(--line)}
acid-project-update .pu-ttl{display:flex;align-items:center;gap:12px;margin-right:auto;min-width:0}
acid-project-update .pu-mk{width:40px;height:40px;border-radius:var(--r-card);background:var(--ink);color:var(--bg);display:flex;align-items:center;justify-content:center;font-size:20px;flex:none}
acid-project-update .pu-ttl b{display:block;font:850 22px/1.15 var(--display);font-stretch:82%}
acid-project-update .pu-ttl small{display:block;font-size:13px;color:var(--ink-2)}
acid-project-update .pu-seg{display:inline-flex;border:1px solid var(--line);border-radius:var(--r-pill);overflow:hidden}
acid-project-update .pu-seg button{border:0;background:var(--panel);padding:0 12px;min-height:34px;font-size:13px}
acid-project-update .pu-seg button[aria-pressed=true]{background:var(--ink);color:var(--bg)}
acid-project-update .pu-chip{min-height:34px;font-size:13px;padding:0 12px;border-radius:var(--r-pill);border:1px solid var(--line);background:var(--panel)}
acid-project-update .pu-chip[aria-pressed=true]{background:var(--ink);color:var(--bg);border-color:var(--ink)}
acid-project-update .pu-pill{font:600 12px var(--mono);padding:3px 10px;border-radius:var(--r-pill);border:1px solid var(--ink)}
acid-project-update .pu-sec{border-bottom:1px solid var(--line)}
acid-project-update .pu-hd{display:flex;align-items:center;gap:8px;width:100%;padding:12px 0;min-height:44px;background:none;border:0;text-align:left}
acid-project-update .pu-hd .n{font:800 18px var(--display);font-stretch:85%}
acid-project-update .pu-hd .s{font-size:13px;color:var(--ink-2);margin-left:auto}
acid-project-update .pu-hd .ti-chevron-down{transition:transform .15s}
acid-project-update [aria-expanded=false]>.ti-chevron-down{transform:rotate(-90deg)}
acid-project-update .pu-bd{padding:0 0 14px}
acid-project-update .pu-sub{margin-left:16px}
acid-project-update .pu-sub>.pu-hd .n{font-size:15px}
acid-project-update .pu-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:10px;margin-bottom:12px}
acid-project-update .pu-src{font:500 12px var(--mono);color:var(--ink-2);margin:0 0 8px}
acid-project-update .pu-axis{display:grid;grid-template-columns:minmax(0,1fr) 46%;font:500 11px var(--mono);color:var(--ink-2);padding:0 0 4px}
acid-project-update .pu-ax{position:relative;height:16px}
acid-project-update .pu-ax span{position:absolute;white-space:nowrap}
acid-project-update .pu-grp{border:1px solid var(--line);border-left-width:5px;border-radius:var(--r-card);margin:0 0 10px;overflow:hidden;background:var(--panel)}
acid-project-update .pu-gh{display:grid;grid-template-columns:minmax(0,1fr) 46%;align-items:center;width:100%;padding:0;border:0;background:var(--soft);min-height:44px;text-align:left}
acid-project-update .pu-gh .l{display:flex;align-items:center;gap:8px;padding:8px 10px 8px 8px;min-width:0}
acid-project-update .pu-gh .l b{font-weight:700;white-space:nowrap}
acid-project-update .pu-cnt{font-size:12px;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
acid-project-update .pu-prog{height:6px;width:60px;border-radius:3px;background:var(--line);overflow:hidden;flex:none}
acid-project-update .pu-prog i{display:block;height:100%;background:var(--status-good)}
acid-project-update .pu-it{display:grid;grid-template-columns:minmax(0,1fr) 46%;align-items:center;width:100%;padding:0;border:0;border-top:1px solid var(--line);background:var(--panel);min-height:40px;text-align:left}
acid-project-update .pu-it .c{display:flex;align-items:center;gap:8px;padding:6px 10px;min-width:0}
acid-project-update .pu-it .t{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
acid-project-update .pu-st{font:600 11px var(--mono);text-transform:uppercase;padding:2px 8px;border-radius:var(--r-pill);white-space:nowrap;flex:none;min-width:66px;text-align:center}
acid-project-update .st-done{background:var(--good-tint)}acid-project-update .st-next{background:var(--done-tint)}
acid-project-update .st-waiting{background:var(--warn-tint)}acid-project-update .st-blocked{background:var(--bad-tint)}
acid-project-update .st-planned{border:1px dashed var(--ink-3);color:var(--ink-2)}
acid-project-update .pu-own{font-size:12px;color:var(--ink-2);white-space:nowrap;flex:none;margin-left:auto}
acid-project-update .pu-ky{font:700 10px var(--mono);text-transform:uppercase;padding:1px 6px;border-radius:var(--r-pill);background:var(--ink);color:var(--bg);flex:none}
acid-project-update .pu-tl{position:relative;align-self:stretch;min-height:36px;border-left:1px solid var(--line)}
acid-project-update .pu-tl .b{position:absolute;top:50%;margin-top:-6px;height:12px;border-radius:var(--r-pill)}
acid-project-update .pu-tl .d{position:absolute;top:50%;margin-top:-6px;width:13px;height:13px;transform:rotate(45deg);border-radius:2px}
acid-project-update .pu-tl .today{position:absolute;top:0;bottom:0;border-left:2px dashed var(--emphasis)}
acid-project-update .pu-tl .span{position:absolute;right:8px;top:50%;transform:translateY(-50%);font:500 11px var(--mono);color:var(--ink-2);background:var(--soft);padding:0 4px;border-radius:4px}
acid-project-update .f-done{background:var(--status-good)}acid-project-update .f-next{background:var(--status-done)}
acid-project-update .f-waiting{background:var(--status-warn)}acid-project-update .f-blocked{background:var(--status-bad)}
acid-project-update .f-planned{border:1.5px dashed var(--ink-3)}acid-project-update .f-gate{background:var(--ink)}
acid-project-update .pu-det{padding:6px 12px 10px 36px;font-size:13px;color:var(--ink-2);border-top:1px solid var(--line);line-height:1.6}
acid-project-update .pu-blk{display:flex;gap:10px;border:1.5px solid var(--status-bad);background:var(--bad-tint);border-radius:var(--r-card);padding:10px 12px;margin-top:8px}
acid-project-update .pu-blk .ti{font-size:20px;color:var(--status-bad)}
acid-project-update .pu-blk b{font-weight:700}acid-project-update .pu-blk small{display:block;color:var(--ink-2);font-size:12px}
acid-project-update .pu-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:10px;align-items:center;padding:9px 0;border-top:1px solid var(--line)}
acid-project-update .pu-row .q{font-size:14px;line-height:1.4}
acid-project-update .pu-row .q b{font-family:var(--mono)}
acid-project-update .pu-row .q small{display:block;color:var(--ink-2);font-size:13px}
acid-project-update .pu-lk{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}
acid-project-update .pu-tag{display:inline-flex;align-items:center;gap:4px;font:600 11px var(--mono);text-transform:uppercase;padding:2px 8px;border-radius:var(--r-pill);background:var(--mute-tint)}
acid-project-update .pu-tag.b{background:var(--bad-tint)}acid-project-update .pu-tag.g{background:var(--good-tint)}
acid-project-update .pu-res{display:flex;justify-content:flex-end}
acid-project-update .pu-acts[hidden]{display:none}acid-project-update .pu-tag.d{background:var(--done-tint)}
acid-project-update .pu-acts{display:flex;gap:6px}
acid-project-update .pu-acts button,acid-project-update .pu-btn{min-height:38px;padding:0 12px;border-radius:var(--r-pill);border:1px solid var(--line);background:var(--panel);font-size:13px;font-weight:600;display:inline-flex;align-items:center;gap:6px}
acid-project-update .pu-acts button[aria-pressed=true][data-v=confirm],acid-project-update .pu-acts button[aria-pressed=true][data-bulk]{background:var(--good-tint);border-color:var(--status-good)}
acid-project-update .pu-acts button[aria-pressed=true][data-v=flag]{background:var(--warn-tint);border-color:var(--status-warn)}
acid-project-update .pu-btn.primary{background:var(--ink);color:var(--bg);border-color:var(--ink)}
acid-project-update .pu-ms{display:grid;grid-template-columns:70px minmax(0,1fr) auto;gap:10px;font-size:14px;padding:7px 0;border-top:1px solid var(--line);align-items:center}
acid-project-update .pu-ms span:first-child{font:600 12px var(--mono)}
acid-project-update .pu-rule{border-left:4px solid var(--emphasis);background:var(--panel);padding:10px 12px;margin:8px 0;font-size:14px}
acid-project-update .pu-msg{font-size:13px;color:var(--ink-2)}
acid-project-update .pu-msg.err{color:var(--status-bad)}
acid-project-update .pu-err{border:1.5px solid var(--status-bad);background:var(--bad-tint);border-radius:var(--r-card);padding:10px 12px;font-size:13px}
@media (max-width:700px){acid-project-update .pu-axis,acid-project-update .pu-gh,acid-project-update .pu-it{grid-template-columns:minmax(0,1fr) 34%}}

/* ==== app.css ==== */
/* ACiD App Interface 1.0: app.css. The 1.0 layer over the parts lifted from ACiD Intelligence v2 (components, core, status card):
   head sizing, the logo, focus, the decide tone, touch targets, the theme button, the status-tile grid, the live region and the
   offline page. Tokens only, scoped to the app frame. Release review and Kyle's DS-011 picks, 13 Nov 2026. */

/* ---------- the page's base font, at the lowest weight so an app's own body rule wins (v2 base.css set one; without it
   unstyled text fell back to the browser serif: dashboard rc.1 check, item 3) ---------- */
:where(body){margin:0;font:14px var(--body)}

/* ---------- sizes, one place ---------- */
:root{
  --head-h:56px;      /* the head bar and its grid row (they disagreed: 52 vs 56) */
  --head-ctl:30px;    /* pills and chips in the head (Kyle, DS-011: "30 px pills, one gap") */
  --head-btn:36px;    /* square head buttons: theme, menu */
  --brand-h:28px;     /* the brushed copper wordmark, about 76 px wide */
}
@media (pointer:coarse){:root{--head-ctl:40px;--head-btn:44px}}

/* ---------- focus: one blue ring everywhere in the app (review #13) ---------- */
.iq-app :focus-visible{outline:2px solid var(--interaction);outline-offset:2px}
.iq-app .iq-toolbar select:focus-visible,.iq-app .iq-toolbar input:focus-visible,.iq-app .iq-result:focus-visible,.iq-app .iq-stepper input:focus-visible,.iq-app .iq-textarea:focus-visible{outline:2px solid var(--interaction);outline-offset:2px}

/* ---------- the decide tone uses the decision colour (review #8; Kyle: "for the decision and conflict, choose another color and make it standard") ---------- */
:is(.iq-badge,.iq-band,.iq-msg,.iq-row,.iq-stat,.iq-glyph,.ptile).decision{--iq-mark:var(--status-decide);--iq-tint:var(--decide-tint)}

/* ---------- touch targets: 44 px on touch screens (review #22) ---------- */
@media (pointer:coarse){
  .iq-app .pfold,.iq-app .iq-nav h6 button,.iq-app .iq-nav a,.iq-app .iq-btn.sm,.iq-app .ndismiss,.iq-app .jump select,.iq-app .areatabs a,.iq-app .iq-chip{min-height:44px}
  .iq-app .pfold{min-width:44px}
}

/* ---------- the head ---------- */
.iq-sprite{position:absolute;width:0;height:0;overflow:hidden}
.iq-head .envchip{display:inline-flex;align-items:center;min-height:var(--head-ctl);padding:0 10px;border:var(--w-hair) solid var(--inv-line);border-radius:var(--r-pill);color:var(--on-dark-2);white-space:nowrap}
.iq-slot{display:flex;align-items:center;gap:var(--s-2);min-width:0}
.iq-slot:empty{display:none}
/* the visible light/dark button beside the menu (Kyle: "I also don't see the light version button anywhere"; DS-011) */
.iq-head .iq-themebtn{flex:none;display:inline-grid;place-items:center;width:var(--head-btn);height:var(--head-btn);padding:0;border:var(--w-hair) solid var(--inv-line);border-radius:var(--r-panel);background:transparent;color:var(--on-dark);font:600 16px/1 var(--body);cursor:pointer}
.iq-head .iq-themebtn:hover{border-color:var(--interaction)}
.hmenu .iq-seg button.on{background:var(--interaction-tint);color:var(--on-dark);box-shadow:inset 0 -2px 0 var(--interaction)}
@media (max-width:860px){.iq-head .iq-slot[data-slot="start"]{display:none}}
@media (max-width:420px){.iq-head .brand-rule{display:none}}
/* popovers sit above the nav and content; on phones they open full width under the head (review #1) */
.iq-head .hpop{z-index:40}
@media (max-width:520px){.iq-head .hpop{position:fixed;left:8px;right:8px;top:calc(var(--head-h) + env(safe-area-inset-top,0px));max-width:none}}

/* ---------- page title row (Kyle, DS-011: title, module code and meta on one centred line) ---------- */
.iq-title h1{line-height:1.1}
.iq-title p{line-height:1.35}

/* ---------- status tiles under a title (Kyle, DS-011: an even grid, not ragged pills) ---------- */
.iq-statusgrid{display:grid;grid-template-columns:repeat(var(--st-cols,4),minmax(0,1fr));gap:var(--s-2);margin:0;padding:0;list-style:none}
/* an even count per row: n tiles up to 4 sit on one row; 5-6 make 3 + 3; 7-8 make 4 + 4; more wrap in fours */
.iq-statusgrid[data-n="1"]{--st-cols:1}.iq-statusgrid[data-n="2"]{--st-cols:2}.iq-statusgrid[data-n="3"]{--st-cols:3}
.iq-statusgrid:is([data-n="5"],[data-n="6"],[data-n="9"]){--st-cols:3}
@media (max-width:1100px){.iq-statusgrid:not([data-n="1"]){--st-cols:2}.iq-statusgrid:is([data-n="3"],[data-n="9"]){--st-cols:3}}
@media (max-width:560px){.iq-statusgrid[data-n]{--st-cols:1}}
.iq-st-tile{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--s-2);min-height:44px;padding:0 var(--s-3);border:var(--w-hair) solid var(--line);border-left:var(--w-rule) solid var(--iq-mark,var(--status-mute));border-radius:var(--r-sharp);background:var(--panel);color:var(--ink);font:inherit;text-align:left;text-decoration:none;cursor:pointer}
.iq-st-tile:hover{border-color:var(--ink-2);border-left-color:var(--iq-mark,var(--status-mute))}
.iq-st-tile.good{--iq-mark:var(--status-good)}
.iq-st-tile.warn{--iq-mark:var(--status-warn)}
.iq-st-tile.bad{--iq-mark:var(--status-bad)}
.iq-st-tile.mute{--iq-mark:var(--status-mute)}
.iq-st-tile.decision{--iq-mark:var(--status-decide)}
.iq-st-tile .ico{width:16px;height:16px;color:var(--ink-2)}
.iq-st-tile b{font:600 13px/1.2 var(--body);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.iq-st-tile .w{display:inline-flex;align-items:center;gap:4px;font:500 12px/1 var(--mono);letter-spacing:.04em;text-transform:uppercase;color:var(--ink);white-space:nowrap}
/* v2's old product pill row stays for older markup, but reads as one style */
.hchip{min-height:var(--touch)}

/* ---------- screen readers: one live region (review #11) ---------- */
.iq-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}

/* ---------- small pieces ---------- */
.sband .sbpanel{padding:8px 12px;margin-top:var(--s-1)}
.foldall{display:inline-flex;gap:var(--s-1);margin-left:auto}

/* ---------- reduced motion, everywhere in the frame (review #33) ---------- */
@media (prefers-reduced-motion:reduce){.iq-app *,.iq-app *::before,.iq-app *::after{animation-duration:.01ms;animation-iteration-count:1;transition-duration:.01ms;scroll-behavior:auto}}

/* ---------- the offline page, without inline styles ---------- */
.iq-offline{margin:0;background:var(--bg);color:var(--ink);font-family:var(--body)}
.iq-offline main{display:grid;place-items:center;min-height:100vh;padding:var(--s-4)}
.iq-offline .iq-sheet{max-width:420px}
.specimen-note{display:block;margin:0;border-radius:0;font:13px/1.4 var(--body)}
/* status tiles sit in list cells (each cell is the list item, so the tile keeps its link or button role) */
.iq-st-cell{display:grid;min-width:0}
.iq-st-cell>.iq-st-tile{min-width:0}
/* the data pill now carries a glyph for its tone, so the plain dot goes */
.hpill summary:has(.iq-glyph)::before{display:none}
.hpill summary .iq-glyph{margin-right:6px}

/* ---------- brand alignment (Kyle, 13 Nov: "the alignment on the logo and the app name at the top left isn't perfect") ----------
   The master lockup (logo pack 1.2.0, acid-lockup_*.svg) centres its rule and its descriptor ("INTEGRITY INC.") on the middle of
   the ACiD letters (measured: letters 231.3, descriptor 232.5, rule 233.2 in the file's units). The head follows the same rule.
   In the wordmark file the letters fill the lower part and the atom above the i fills the top, so the letters' middle sits
   10.25% of the image height below the image's middle; the image is lifted by exactly that, which puts the letters, the rule
   and the app name on one centre line, level with the pills' text. */
.iq-head .iq-brand{align-items:center;gap:10px}
.iq-head .brand-mark{position:relative;top:calc(var(--brand-h) * -0.1025)}
.iq-head .brand-rule{height:calc(var(--brand-h) * 0.879)}   /* the lockup's rule: 0.808 em, which is 0.879 of the wordmark image's height */
.iq-head .brand-app{line-height:1}
/* head fit (dashboard check, 13 Nov): at 1024 px the full alert, LIVE, the security chip, the clock, ◐ and ☰ must fit on one
   row. The date label is the least needed item, so it gives way first (the clock stays); then the head's gaps tighten. */
@media (max-width:1180px){.iq-head .hwhen .meta{display:none}}
@media (max-width:1100px){.iq-head{gap:6px}.iq-head .iq-brand{gap:8px}}
/* below 1024 px the head never overflows: "Security" gives way (glyph and score stay), then the alert shortens with an
   ellipsis instead of pushing ☰ off the screen; its full text is in its popover and its accessible name */
@media (max-width:1023px){.iq-head .hsec-w{display:none}}
.iq-head .hsvc{flex:0 1 auto;min-width:44px}
.iq-head .hsvc summary{max-width:100%;min-width:0}
.iq-head .hsvc .hsvc-t{min-width:0}
