/* ── D0/D1 · TOKENS (system §1–§4) ─────────────────────────────────────
   Two families on purpose:
   · the v2 names (--v2-*) that converted surfaces use going forward, and
   · the OLD names remapped underneath (D1), so every existing var()-based
     rule shifts to the new scale with zero template edits. The 556 raw-px
     declarations are untouched by this and die surface by surface. *//* ═══════════════════════════════════════════════════════════════════════
   DESIGN SYSTEM V2 — the replacing layer.
   Phase D of the design overhaul (Command Center Cloud / Design Overhaul).

   Every rule in this file is scoped `body.v2`. With the class absent the app
   is byte-for-byte the old app; with it, this sheet wins. At D11 the legacy
   desk styles are DELETED from index.html and this becomes the only layer —
   it replaces, it does not accumulate. That is the audit's root lesson (A1:
   three layers fighting by cascade produced 32 font sizes against a rule of
   six).

   The flag: ?v2=1 sets localStorage pd_v2 and the body class;?v2=0 clears
   it. Per-browser,no deploy needed either way.
   ═══════════════════════════════════════════════════════════════════════ */



:root{
  /* ── P2d · the --v2-* family is defined on :root, not on body.v2 ─────
     It used to live on body.v2, which was right when nothing outside v2.css
     referenced it. P2d moved 96 hex literals in index.html's sheet onto these
     tokens, and that sheet is not scoped to v2 — so a token that only exists
     under body.v2 would have been invalid-at-computed-value-time with v2 off,
     which for background-color means TRANSPARENT, not "the old colour".

     Defining them here keeps one copy. The REMAPS — --pd-*, --fs-*, --rad-*
     and the shell family — stay on body.v2 below, because those are the
     switch: they are what points the other three token families at this one.
   ─────────────────────────────────────────────────────────────────────── */

  /* ── §4 colour · P2a — THE one place neutrals are decided ───────────
     This block used to warm the neutrals "one degree toward paper" — the
     R2 temperature note. The Phase 1 audit measured what that cost:

       planner screens   ground rgb(235 236 240)   ink hsl(220 14% 10%)
       GovCon screens    ground rgb(246 245 242)   ink #1F242B
       GovCon Hub        ground hsl(0 0% 99%)      ink hsl(220 14% 10%)

     Two grounds and two inks on one body element, and the sheet claiming to
     be the converged one was the odd sheet out: `legacy.css`'s :root and
     `index.html`'s inline sheet BOTH already carried the Hub's values
     character for character. The warm family was decided before the Hub was
     the reference, and then the D1 remap below pushed it over the top of two
     sheets that were already right.

     So the neutrals are the Hub's, stated in HSL the way the source states
     them (src/index.css), so the mapping stays traceable instead of becoming
     hex nobody can trace back. Nothing here is eyeballed. */
  --v2-bg:hsl(0 0% 99%);            /* --background */
  --v2-panel:hsl(0 0% 100%);        /* --card */
  --v2-ink:hsl(220 14% 10%);        /* --foreground / --primary */
  /* ── P3c · two points darker than the Hub, on purpose ─────────────
     The Hub's --muted-foreground is hsl(220 9% 46%). Measured against its own
     --muted (our --line2, 96% lightness) that pairing is 4.39:1 — under AA for
     normal text — and this app uses it more than thirty times: every tab
     counter, muted chip, citation, ghost button and avatar. It is also 4.47
     on the warn tint and 4.49 on the ok tint, so the whole soft-tint family
     sat just under the line.

     44% clears all of them with a point of headroom (4.73 on --line2, 5.21 on
     white) and is still visibly lighter than ink. A two-point departure from
     the source beats inheriting a pairing the source itself fails. */
  --v2-sub:hsl(220 9% 44%);         /* --muted-foreground, two points darker */
  /* ── P3 · --v2-faint is no longer a TEXT colour ───────────────────
     It was described as "ours — the source has no equivalent", and that was
     the warning sign. Measured on the real screens: 2.79:1 on white, 2.72 on
     the page ground, 2.54 on --line2. It carried 243 text declarations
     across the two sheets, including `.pd-railname` — the stage names on the
     pipeline rail, the most-read labels on the board.

     It cannot be fixed by darkening. 48% lightness is the first value that
     passes on white (4.51), and --v2-sub is 46% — so a legible `faint` is
     `sub`. The Hub has no third text grey either: --foreground and
     --muted-foreground, and that is the whole ramp. Collapsing to two is
     matching the target, not losing a level; hierarchy below `sub` comes
     from size and weight, which the scale already provides.

     The token stays because five non-text uses depend on it (a ring track, a
     column dot) and because deleting a name 243 rules referenced would have
     been a much larger change than fixing the colour. */
  --v2-faint:hsl(220 9% 44%);       /* AA on white; v3.css overrides — keep in step */
  --v2-line:hsl(220 13% 91%);       /* --border / --input */
  --v2-line2:hsl(220 13% 96%);      /* --muted / --secondary */

  /* The accent was already right — soft teal, from the source's own token.
     Restated as HSL so it reads as one family with the rest. */
  --v2-accent:hsl(174 60% 45%); --v2-accent-soft:hsl(174 60% 95%);
  --v2-accent-line:hsl(174 60% 82%); --v2-accent-ink:hsl(174 60% 29%);
  /* R14 · The glow under an accent button, derived rather than typed.
     Five shadows across four files were written as a literal
     hsl(174 60% 45% / .35) — the teal this accent used to be. The accent
     has changed twice since; the glow under it could not, because a
     literal does not follow a token. Written as a mix OF the accent, it
     re-resolves wherever it lands, including on the dark theme and in
     Classic, where the accent is still that teal. */
  --v2-accent-glow:color-mix(in srgb, var(--v2-accent) 32%, transparent);
  --v2-accent-glow-soft:color-mix(in srgb, var(--v2-accent) 12%, transparent);

  /* ── Status · the source's hues, our lightnesses for TEXT ──────────
     Adopted wholesale from `legacy.css`, which had already worked this out
     and written down why: the Hub's success 45% and warning 50% are tuned
     for dots and badges, and amber text at 50% lightness on white is not
     legible. So the text tokens keep the source HUE at a darker lightness,
     and the source's own values live on -dot tokens for the places that
     really are dots. Two sheets disagreeing about this is what made red
     mean one thing on the Dashboard and another on a pursuit. */
  --v2-ok:hsl(142 71% 27%);   --v2-ok-soft:hsl(142 71% 95%);  --v2-ok-dot:hsl(142 71% 45%);
  --v2-warn:hsl(38 92% 30%);  --v2-warn-soft:hsl(38 92% 95%); --v2-warn-dot:hsl(38 92% 50%);
  --v2-bad:hsl(0 72% 42%);    --v2-bad-soft:hsl(0 72% 96%);   --v2-bad-dot:hsl(0 72% 51%);
  --v2-info:hsl(217 91% 45%); --v2-info-soft:hsl(217 91% 96%);--v2-info-dot:hsl(217 91% 60%);
  /* P3b · a fourth step per family, for the BORDER of a tinted card.
     Twenty-six literals were doing this job by hand — var(--v2-warn-line) round an amber
     panel, var(--v2-bad-line) round a red one — and each was picked against the warm
     paper ground that no longer exists. Same pattern as --pd-accent-line,
     which legacy.css has had all along. */
  --v2-ok-line:hsl(142 71% 82%);  --v2-warn-line:hsl(38 92% 82%);
  --v2-bad-line:hsl(0 72% 88%);   --v2-info-line:hsl(217 91% 88%);

  /* ── Typefaces ────────────────────────────────────────────────────
     All three were already being loaded and none of them were being used:
     every rule said font-family:inherit, so the whole app rendered in the
     browser default while three Google fonts downloaded on every page load.

     · Inter for everything you read
     · Poppins for headings — the Hub's display face
     · JetBrains Mono for FIGURES, with tabular numerals, so a column of money
       or days lines up on the decimal instead of shimmering as it updates */
  --v2-sans:"Plus Jakarta Sans",system-ui,-apple-system,"Segoe UI",sans-serif;
  /* R41 · the faces come from Profile Builder (gmbtool.dnai.solutions).
     The owner pointed at her own other product rather than let me guess,
     which is a better reference than anything I would have reasoned my way
     to: it is her taste, already shipped, and already consistent with the
     Blount brand.
     Oswald for headings — condensed, uppercase, set with a little tracking.
     Plus Jakarta Sans for everything read as text, which also retires Inter,
     the single most common typeface in generated interfaces.
     JetBrains Mono stays on figures. */
  --v2-display:"Oswald","Plus Jakarta Sans",system-ui,sans-serif;
  --v2-mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,monospace;

  /* ⚠ READ THIS BEFORE EDITING ANY TOKEN BELOW.
     Sheets load legacy → v2 → mobile → v3 → jarvis. v3.css redefines this
     file's whole palette AND all seven type sizes, so for anything it also
     defines, THE VALUE HERE NEVER REACHES THE SCREEN. Editing a colour or a
     size here and seeing no change is not a caching problem; it is this.
     Check v3.css first, change it there, and keep this one in step.

     §1 type — SEVEN sizes, every step visible, and nothing between them.
     --v2-t-small (12px) is not a new size. legacy's --t-sm has been 12px
     since the beginning and was the one step the v2 set never named, so it
     drifted: 162 declarations had quietly become 12.5px. Naming a step is
     what stops it wandering.

     Measured before naming it: 23 distinct hardcoded px sizes across 750
     declarations, running alongside this scale's 534 — including 239 at
     half-pixel values (12.5, 13.5, 11.5, 14.5, 10.5, 15.5) that match
     nothing and mean nothing. A scale with gaps of half a pixel is not a
     scale, it is a continuum with a token set bolted to one side.

     Everything under 24px now resolves to one of these seven. Sizes at or
     above 24px are left alone: those are deliberate one-off display
     figures, and eleven of them do not constitute drift.

     CORRECTION: these are not the numbers that render. v3.css loads after
     this file and redefines the same seven tokens as 11/12/13/14/16/20/24.
     v3's values win. The tokens below are the light-era scale and are kept
     in step so a load-order change cannot resurrect them; read v3.css for
     what the app actually looks like. */
  --v2-t-label:11px; --v2-t-small:12px; --v2-t-body:13px; --v2-t-entity:15px;
  --v2-t-title:18px; --v2-t-say:22px; --v2-t-display:28px;

  /* §1b motion — three speeds and one curve.
     Measured before this: 70 transitions using eight different durations
     (.12 .15 .18 .2 .22 .25 .28 .4) and five different easing curves. None
     of that was chosen; each one was picked in isolation by whoever wrote
     the component, which is why a chip and a panel built a week apart feel
     like different software even when they look identical. Motion is the
     part of a design system people notice without being able to name.

     fast  — a hover, a colour, a border. Under .15s reads as instant.
     mid   — something moving or changing size.
     slow  — something entering or leaving the page.

     linear survives for spinners, and one deliberate overshoot curve
     survives where a bounce was the point. */
  --v2-fast:.12s; --v2-mid:.2s; --v2-slow:.3s;
  --v2-ease:cubic-bezier(.2,.8,.2,1);

  /* §2 space — NINE steps, and the two new ones are the honest part.
     The scale was 4/8/12/16/24/32/48 and the app ignored it: 3,587
     hardcoded values against 541 token uses, with 10px used 531 times,
     6px 446 and 2px 213. A scale the code bypasses six times in seven is
     not a scale.
     Rounds 20 and 21 snapped everything onto a real grid — but 2px and 6px
     survived that snap on purpose rather than being rounded away. This is
     a dense operations console; a 6px gap inside a table row is doing a
     job that 4px and 8px cannot, and 2px is the hairline step. Pretending
     the scale is pure 4px multiples is what made the old one fiction.
     s0 and s1h are below and between s1 and s2; s1…s7 keep their numbers
     because 1,341 declarations already name them. */
  --v2-s0:2px; --v2-s1h:6px;
  /* §2 space — seven 4px steps */
  --v2-s1:4px; --v2-s2:8px; --v2-s3:12px; --v2-s4:16px;
  --v2-s5:24px; --v2-s6:32px; --v2-s7:48px;

  /* ── §3 shape & elevation — flat by default ─────────────────────────
     The Hub has essentially ONE radius. `--radius: 0.5rem` with Tailwind
     `lg: var(--radius)` = 8px, `md: calc(radius - 4px)` = 4px,
     `sm: calc(radius - 8px)` = 0px. Read from its components rather than
     assumed: cards, dialogs, buttons and inputs are all `rounded-lg` = 8px;
     badges, tabs, popovers `rounded-md` = 4px.

     So surfaces and overlays both take 8px. A dialog at the same radius as a
     card is what the source actually does, and it agrees with our own rule
     that elevation is carried by the SHADOW, not by a rounder corner.

     `--v2-r-control` stays at 6px as a stated departure: our controls are far
     denser than the Hub's — 22px-tall chips where it has 40px buttons — and
     8px on those reads as a pill rather than as a rounded rectangle. */
  --v2-r-control:6px; --v2-r-surface:8px; --v2-r-overlay:8px; --v2-r-full:999px;
  /* Shadow ink follows the ink token: rgb(22 24 29) is hsl(220 14% 10%). */
  --v2-shadow-overlay:0 12px 40px rgba(22,24,29,.16);
  --v2-shadow-drag:0 8px 24px rgba(22,24,29,.14);
}body.v2{
  /* ── D1 · the remap: old names → v2 values ───────────────────────── */
  --pd-bg:var(--v2-bg); --pd-panel:var(--v2-panel);
  --pd-ink:var(--v2-ink); --pd-sub:var(--v2-sub); --pd-faint:var(--v2-faint);
  /* line2 maps to line2 again. It used to be forced to `line`, because the
     warm --v2-line2 (#D3CFC7) was DARKER than --v2-line and would have
     inverted the relation legacy.css depends on. With the Hub's values the
     relation is right way up on its own: line 91%, line2 96%. */
  --pd-line:var(--v2-line); --pd-line2:var(--v2-line2);
  --pd-accent:var(--v2-accent); --pd-accent-soft:var(--v2-accent-soft);
  --pd-accent-line:var(--v2-accent-line); --pd-accent-ink:var(--v2-accent-ink);
  --pd-ok:var(--v2-ok); --pd-ok-bg:var(--v2-ok-soft); --pd-ok-dot:var(--v2-ok-dot);
  /* R29 · the last two tokens of the v2 sweep.
     --pd-good was never defined ANYWHERE, and every one of its 8 uses was
     written var(--pd-good,#1a7f37) — so the fallback always won and the
     gate was right not to flag it. #1a7f37 is a green for a white page.
     Measured against this theme's dark panel it is 3.42:1, under the 4.5:1
     WCAG AA needs for text, and the "done" tick on a certification track
     and the tour's completed rows were wearing it. A fallback is not a
     definition; it is a place a definition should have been.
     --pd-sh-lift was defined but never remapped, so legacy surfaces kept a
     shadow tuned for a light background, where it reads as nothing at all
     on a dark one. */
  --pd-good:var(--v2-ok);
  --pd-sh-lift:var(--v2-raised);
  --pd-warn:var(--v2-warn); --pd-warn-bg:var(--v2-warn-soft); --pd-warn-dot:var(--v2-warn-dot);
  --pd-bad:var(--v2-bad); --pd-bad-bg:var(--v2-bad-soft); --pd-bad-dot:var(--v2-bad-dot);
  --pd-info:var(--v2-info); --pd-info-bg:var(--v2-info-soft); --pd-info-dot:var(--v2-info-dot);
  --pd-s1:4px; --pd-s2:8px; --pd-s3:12px; --pd-s4:16px;
  --pd-s5:24px; --pd-s6:24px; --pd-s7:32px;      /* old s5 20→24: the 20px step dies */
  --pd-r1:var(--v2-r-control); --pd-r2:var(--v2-r-surface); --pd-r3:var(--v2-r-overlay); --pd-rfull:var(--v2-r-full);
  /* Two tokens legacy.css USES and nothing ever DEFINED.
     · --pd-font sat inside a `font:` shorthand, and an undefined variable
       invalidates the whole declaration — so the Sourcing filter labels, the
       sourcing table header and the Action Center day headers silently lost
       their weight, size and line-height. They are uppercase micro-labels,
       so the display face is the right one.
     · --pd-soft was a background on four surfaces and computed to nothing,
       leaving them transparent where a soft fill was intended. */
  --pd-font:var(--v2-display);
  --pd-soft:var(--v2-bg);

  --pd-sh:none;                                   /* §3a: panels are flat */
  --pd-sh2:var(--v2-shadow-overlay);

  /* old type tokens → the six-size scale.
     xs stays the label size; sm/base collapse into body; md → entity;
     lg → title; say 19 → 22 (L1c: read-aloud must be arm's-length legible) */
  --t-xs:var(--v2-t-label); --t-sm:12px; --t-base:var(--v2-t-body);
  --t-md:var(--v2-t-entity); --t-lg:var(--v2-t-title); --t-say:var(--v2-t-say);
  --t-display:var(--v2-t-display);
  /* --t-sm survives as 12px during conversion (too many hint lines depend on
     a sub-body size); it merges into --t-body at D11 when prose moves to ⓘ. */

  /* ── D1b · the THIRD token family, remapped the same way ─────────────
     `index.html` carries its own 859-line inline sheet with its own token
     names — --bg, --ink, --line, --accent — declared twice in two :root
     blocks. That is the family painting the sidebar, the Dashboard and the
     Theme-day view: the three screens the owner opens first.

     Those names stay (237 classes use them and they are not being renamed
     today) but they stop being a second source of truth. Defined here on
     body.v2 they win over :root for body and everything under it, exactly as
     the --pd-* remap does, and the literals left in index.html become what
     they should always have been: the fallback for when v2 is off.

     This is what closes the two-grounds split the audit measured. */
  --bg:var(--v2-bg); --panel:var(--v2-panel); --shell:var(--v2-panel);
  --ink:var(--v2-ink); --sub:var(--v2-sub); --faint:var(--v2-faint);
  --line:var(--v2-line); --line2:var(--v2-line2);
  --accent:var(--v2-accent); --accent-soft:var(--v2-accent-soft);
  --r:var(--v2-r-surface);
  /* P2b · and the type, the same way. The shell sheet had 29 distinct raw
     pixel sizes; it now names steps, and the steps are v2's. */
  --fs-label:var(--v2-t-label); --fs-sm:var(--t-sm); --fs-body:var(--v2-t-body);
  --fs-entity:var(--v2-t-entity); --fs-title:var(--v2-t-title);
  --fs-say:var(--v2-t-say); --fs-display:var(--v2-t-display);
  /* P2c · and the shapes. 22 radii became four. */
  --rad-control:var(--v2-r-control); --rad-surface:var(--v2-r-surface);
  --rad-overlay:var(--v2-r-overlay); --rad-full:var(--v2-r-full);
  --shadow:none;                    /* §3a again: a resting card is flat */
  --shadow-lg:var(--v2-shadow-drag);
  --urgent:var(--v2-bad);   --urgent-bg:var(--v2-bad-soft);
  --medium:var(--v2-warn);  --medium-bg:var(--v2-warn-soft);
  --low:var(--v2-sub);      --low-bg:var(--v2-line2);
  /* Board columns and arena colours keep their own hues — they carry meaning
     — but on the status family's footing rather than three unrelated sets. */
  --todo:var(--v2-faint); --today:var(--v2-accent);
  --doing:var(--v2-warn-dot); --done:var(--v2-ok-dot);
  --govcon:var(--v2-accent); --govcon-bg:var(--v2-accent-soft); --govcon-ink:var(--v2-accent-ink);
}/* One ground, stated once. `body` already takes var(--bg) from the inline
   sheet and --bg is now var(--v2-bg), so the planner and the GovCon desk
   cannot drift apart again — which is what these two rules were papering
   over when they set the ground a second time. */body.v2.pd-mode{background:var(--v2-bg)}body.v2 #gcpage{background:var(--v2-bg)}/* ═══ D2 · HOME (C1) ══════════════════════════════════════════════════
   Stat tiles (5.3) · Today rail · the board embedded below.
   Tiles answer "how many", the rail answers "which ones". */body.v2 .v2-home{display:flex;flex-direction:column;gap:var(--v2-s4)}/* the tile band */body.v2 .v2-tiles{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--v2-s3)}body.v2 .v2-tile{background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);padding:var(--v2-s3) var(--v2-s4);
  display:flex;flex-direction:column;gap:var(--v2-s0);text-align:left;cursor:pointer;
  font-family:inherit;transition:border-color var(--v2-fast)}body.v2 .v2-tile:hover{border-color:var(--v2-accent)}body.v2 .v2-tile:focus-visible{outline:2px solid var(--v2-accent);outline-offset:2px}body.v2 .v2-tile label{font:700 var(--v2-t-label)/1 inherit;font-family:inherit;
  letter-spacing:.06em;text-transform:uppercase;color:var(--v2-sub);cursor:pointer;
  display:flex;align-items:center;gap:var(--v2-s1h)}body.v2 .v2-tile b{font-size:var(--v2-t-display);font-weight:700;line-height:1.15;
  color:var(--v2-ink);font-variant-numeric:tabular-nums;letter-spacing:-.01em}body.v2 .v2-tile span{font-size:var(--v2-t-body);color:var(--v2-sub)}/* attention = a dot before the label, never a wash (L4b) */body.v2 .v2-dot{width:7px;height:7px;border-radius:var(--v2-r-full);display:inline-block}body.v2 .v2-dot.warn{background:var(--v2-warn)}body.v2 .v2-dot.bad{background:var(--v2-bad)}body.v2 .v2-tile.on{border-color:var(--v2-accent);background:var(--v2-accent-soft)}/* the two-column body: board + Today rail (right = context, §7) */body.v2 .v2-homegrid{display:grid;grid-template-columns:minmax(0,1fr) 300px;
  gap:var(--v2-s4);align-items:start}/* And belt-and-braces on the items themselves: a grid or flex child defaults
   to min-width:auto, which is what lets a scrollable board refuse to shrink. */body.v2 .v2-homegrid > *{min-width:0}body.v2 .v2-home{min-width:0}body.v2 .v2-today{background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);padding:var(--v2-s4);position:sticky;top:var(--v2-s3)}body.v2 .v2-today h4{margin:0 0 var(--v2-s2);font:700 var(--v2-t-label)/1 inherit;
  font-family:inherit;letter-spacing:.06em;text-transform:uppercase;color:var(--v2-sub)}body.v2 .v2-todo{display:flex;align-items:flex-start;gap:var(--v2-s2);width:100%;
  padding:var(--v2-s2) var(--v2-s0);border:0;border-bottom:1px solid var(--v2-line);background:none;
  font-family:inherit;text-align:left;cursor:pointer}body.v2 .v2-todo:last-child{border-bottom:0}body.v2 .v2-todo:hover .v2-todo-t{color:var(--v2-accent-ink)}body.v2 .v2-todo-ic{flex:none;width:22px;text-align:center;color:var(--v2-sub);
  font-size:var(--v2-t-body)}body.v2 .v2-todo-m{min-width:0;display:flex;flex-direction:column;gap:var(--v2-s0)}body.v2 .v2-todo-t{font-size:var(--v2-t-body);font-weight:600;color:var(--v2-ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}body.v2 .v2-todo-s{font-size:var(--t-sm);color:var(--v2-sub)}body.v2 .v2-todo-d{margin-left:auto;flex:none;font-size:var(--v2-t-label);font-weight:700;
  color:var(--v2-sub);font-variant-numeric:tabular-nums}body.v2 .v2-todo-d.hot{color:var(--v2-bad)}body.v2 .v2-empty-rail{font-size:var(--v2-t-body);color:var(--v2-sub);padding:var(--v2-s2) 0}/* outcomes fold at the bottom of Home */body.v2 .v2-fold{border-top:1px solid var(--v2-line);margin-top:var(--v2-s2)}body.v2 .v2-fold > button{display:flex;align-items:center;gap:var(--v2-s2);width:100%;
  padding:var(--v2-s3) var(--v2-s0);border:0;background:none;font-family:inherit;cursor:pointer;
  font-size:var(--v2-t-entity);font-weight:600;color:var(--v2-ink);text-align:left}body.v2 .v2-fold > button .n{font-size:var(--v2-t-label);font-weight:700;color:var(--v2-sub)}body.v2 .v2-fold > button .chev{margin-left:auto;color:var(--v2-sub);transition:transform var(--v2-fast)}body.v2 .v2-fold.open > button .chev{transform:rotate(90deg)}/* the page header pattern (5.1) — used by Home now, all surfaces later */body.v2 .v2-pagehead{display:flex;align-items:center;gap:var(--v2-s3);flex-wrap:wrap}body.v2 .v2-pagehead h2{margin:0;font-size:var(--v2-t-title);font-weight:700;color:var(--v2-ink)}body.v2 .v2-pagehead .meta{font-size:var(--v2-t-body);color:var(--v2-sub)}body.v2 .v2-pagehead .sp{flex:1}/* buttons already exist as .pd-btn — v2 restates the three-level law (5.8) */body.v2 .pd-btn{border-radius:var(--v2-r-control);font-size:var(--v2-t-body)}
/* The primary button. White on --v2-accent measures 2.46:1 — the Hub sets
   --accent-foreground to white on --accent and gets away with it at its much
   larger button sizes;ours is 13px. White on --v2-accent-ink is the same
   hue,measures 5.43:1,and still reads as the one teal button on the
   screen. Stated as a departure rather than left failing. */
body.v2 .pd-btn:not(.ghost):not(.sm){background:var(--v2-accent-ink);border-color:var(--v2-accent-ink)}body.v2 .pd-btn:focus-visible{outline:2px solid var(--v2-accent);outline-offset:2px}/* responsive: tiles 2-up under 1024, rail folds under 900, C9 at 640 (D10) */@media (max-width:1024px){body.v2 .v2-tiles{grid-template-columns:repeat(2,minmax(0,1fr))}
}@media (max-width:900px){
  /* minmax(0,1fr), not 1fr. A bare `1fr` track is minmax(AUTO,1fr), so the
     embedded pipeline board — 14 stage columns, 3,508px wide with a real
     pipeline in it — pushed the track open instead of scrolling inside its
     own overflow-x:auto, and the whole page grew a horizontal scrollbar.
     Only visible with real data volume: with three fixture pursuits the board
     was narrower than the screen and nothing showed. The wide track above
     already says minmax(0,1fr);this one was the copy that did not. */
  body.v2 .v2-homegrid{grid-template-columns:minmax(0,1fr)}body.v2 .v2-today{position:static}
}/* ═══ D3 · navigation ═════════════════════════════════════════════════ */body.v2 .pd-back2{display:inline-flex;align-items:center;gap:var(--v2-s1);width:auto;
  padding:0 var(--v2-s2);border-radius:var(--v2-r-control)}
body.v2 .pd-seg{display:inline-flex;border:1px solid var(--v2-line);
  border-radius:var(--v2-r-control);overflow:hidden}body.v2 .pd-seg button{font-size:var(--v2-t-body);padding:var(--v2-s1) var(--v2-s3);border:0;
  background:var(--v2-panel);color:var(--v2-sub);cursor:pointer;font-family:inherit}body.v2 .pd-seg button.on{background:var(--v2-ink);color:var(--v2-panel)}body.v2 .pd-seg.sm button{font-size:var(--v2-t-label);padding:var(--v2-s1) var(--v2-s2)}

/* ═══ D4 · the pursuit card (5.6 — Mantra anatomy) ════════════════════
   Chips → title (2-line clamp) → mono # · agency → value · counts.
   The card's click is its action;its ground is --panel,always. */
body.v2 .pd-card{background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);box-shadow:none;padding:var(--v2-s3)}body.v2 .pd-card:hover{border-color:var(--v2-accent);box-shadow:none}body.v2 .pd-card-t{font-size:var(--v2-t-entity);font-weight:600;line-height:1.35;
  color:var(--v2-ink);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
  overflow:hidden}body.v2 .pd-card-m{font-size:var(--t-sm);color:var(--v2-sub)}body.v2 .pd-card-sol{font-family:ui-monospace,Menlo,monospace;font-size:var(--v2-t-label);
  color:var(--v2-sub)}body.v2 .pd-card-f{display:flex;align-items:center;gap:var(--v2-s2);
  border-top:1px solid var(--v2-line);margin-top:var(--v2-s2);padding-top:var(--v2-s2)}body.v2 .pd-val{font-size:var(--v2-t-body);font-weight:600;color:var(--v2-ink);
  font-variant-numeric:tabular-nums}body.v2 .pd-ct{font-size:var(--t-sm);color:var(--v2-sub);font-variant-numeric:tabular-nums}body.v2 .pd-ct.red{color:var(--v2-bad);font-weight:600}body.v2 .pd-av{margin-left:auto;width:22px;height:22px;border-radius:var(--v2-r-full);
  background:var(--v2-line);color:var(--v2-ink);display:grid;place-items:center;
  font-size:var(--v2-t-label);font-weight:700}body.v2 .pd-warn{font-size:var(--t-sm);color:var(--v2-bad);border-top:1px solid var(--v2-line);
  margin-top:var(--v2-s2);padding-top:var(--v2-s1);background:none}/* the column: header carries its count (R2) */body.v2 .pd-colh b{font-size:var(--v2-t-body);font-weight:700}body.v2 .pd-colh .pd-n{font-size:var(--v2-t-label);font-weight:700;color:var(--v2-sub)}/* ═══ D6 · the Overview page (C3) ═════════════════════════════════════ */body.v2 .v2-band{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:var(--v2-s3);
  background:var(--v2-panel);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);
  padding:var(--v2-s3) var(--v2-s4);margin-bottom:var(--v2-s4)}body.v2 .v2-bandcell{display:flex;flex-direction:column;gap:var(--v2-s0);min-width:0}body.v2 .v2-bandcell label{font:700 var(--v2-t-label)/1.2 inherit;font-family:inherit;
  letter-spacing:.06em;text-transform:uppercase;color:var(--v2-sub);white-space:nowrap}body.v2 .v2-bandcell b{font-size:var(--v2-t-entity);font-weight:600;color:var(--v2-ink);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}body.v2 .v2-bandcell span{font-size:var(--t-sm);color:var(--v2-sub);white-space:nowrap}body.v2 .v2-days{font-style:normal;font-weight:700;font-size:var(--t-sm)}body.v2 .v2-days.warn{color:var(--v2-warn)}body.v2 .v2-days.bad{color:var(--v2-bad)}

body.v2 .v2-block{background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);padding:var(--v2-s4)}body.v2 .v2-block h4{margin:0 0 var(--v2-s2);font-size:var(--v2-t-title);font-weight:700;
  color:var(--v2-ink);display:flex;align-items:center;gap:var(--v2-s2);flex-wrap:wrap}body.v2 .v2-block h5{margin:0 0 var(--v2-s2);font-size:var(--v2-t-entity);font-weight:600}body.v2 .v2-prose{margin:0;font-size:var(--v2-t-body);line-height:1.65;color:var(--v2-ink);max-width:70ch}body.v2 .v2-prose.faint{color:var(--v2-sub)}
body.v2 .v2-gaps{margin:var(--v2-s1) 0 var(--v2-s2);padding-left:var(--v2-s4);font-size:var(--v2-t-body);
  line-height:1.7;color:var(--v2-ink)}

body.v2 .v2-railblock label,body.v2 .v2-cmpside label{
  font:700 var(--v2-t-label)/1 inherit;font-family:inherit;letter-spacing:.06em;
  text-transform:uppercase;color:var(--v2-sub)}
body.v2 .v2-railblock{background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);padding:var(--v2-s3) var(--v2-s4);
  display:flex;flex-direction:column;gap:var(--v2-s1h)}body.v2 .v2-railblock span{font-size:var(--t-sm);color:var(--v2-sub)}body.v2 .v2-verdict{font-size:var(--v2-t-entity);font-weight:700}body.v2 .v2-verdict.eligible{color:var(--v2-ok)}
body.v2 .v2-verdict.unknown{color:var(--v2-warn)}body.v2 .v2-vrow{display:flex;justify-content:space-between;gap:var(--v2-s2);font-size:var(--v2-t-body)}body.v2 .v2-vrow b{color:var(--v2-ok);font-variant-numeric:tabular-nums}body.v2 .v2-foldbody{padding:0 0 var(--v2-s3)}/* the rail hosts the incumbent panel — flatten its outer chrome */
/* ═══ D7 · the response builder (C5, R3) ══════════════════════════════ */body.v2 .v2-composer{display:grid;grid-template-columns:230px minmax(0,1fr) 210px;
  gap:var(--v2-s4);align-items:start;margin-top:var(--v2-s3)}body.v2 .v2-cmprail{display:flex;flex-direction:column;gap:var(--v2-s0);position:sticky;top:var(--v2-s3)}body.v2 .v2-cmpsec{display:flex;align-items:center;gap:var(--v2-s2);width:100%;text-align:left;
  padding:var(--v2-s1h) var(--v2-s2);border:0;border-radius:var(--v2-r-control);background:none;
  font-family:inherit;font-size:var(--v2-t-body);color:var(--v2-sub);cursor:pointer}body.v2 .v2-cmpsec.on{background:var(--v2-accent-soft);color:var(--v2-ink);font-weight:600}body.v2 .v2-cmpsec i{font-style:normal;color:var(--v2-sub);flex:none}body.v2 .v2-cmpsec i.done{color:var(--v2-ok)}body.v2 .v2-cmpsec span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}body.v2 .v2-cmprailfoot{display:flex;flex-direction:column;gap:var(--v2-s1h);
  margin-top:var(--v2-s3);padding-top:var(--v2-s3);border-top:1px solid var(--v2-line)}body.v2 .v2-cmpcanvas{background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);padding:var(--v2-s5);min-height:340px}body.v2 .v2-cmpdoc{font-size:var(--v2-t-body);line-height:1.7;color:var(--v2-ink);
  white-space:pre-wrap;max-width:65ch;overflow-wrap:anywhere}body.v2 .v2-cmpside{display:flex;flex-direction:column;gap:var(--v2-s1h);position:sticky;top:var(--v2-s3)}/* ═══ D5 · one table language + hover actions (C7) ════════════════════ */body.v2 .pd-cand-a .pd-btn.ghost{opacity:0;transition:opacity var(--v2-fast)}body.v2 .pd-cand:hover .pd-cand-a .pd-btn.ghost,body.v2 .pd-cand:focus-within .pd-cand-a .pd-btn.ghost{opacity:1}body.v2 .pd-table th{font-size:var(--v2-t-label);
  letter-spacing:.07em;text-transform:uppercase;color:var(--v2-sub)}body.v2 .pd-table td{font-size:var(--v2-t-body)}body.v2 .pd-table tr:hover td{background:color-mix(in srgb,var(--v2-accent-soft) 45%,transparent)}/* ═══ D9 · in-call mode (C8) ══════════════════════════════════════════ */
body.v2 .pd-callfn .pd-say,body.v2 .pd-script .pd-say{font-size:var(--v2-t-say);line-height:1.45}/* ═══ D10 · narrow (C9) ═══════════════════════════════════════════════ */@media (max-width:900px){

body.v2 .v2-band{grid-template-columns:repeat(2,minmax(0,1fr))}body.v2 .v2-composer{grid-template-columns:minmax(0,1fr)}body.v2 .v2-cmprail,body.v2 .v2-cmpside{position:static}
}@media (max-width:640px){body.v2 .v2-tiles{grid-template-columns:repeat(2,minmax(0,1fr))}body.v2 .pd-btn{min-height:40px}
}body.v2 .v2-libsearch input{width:100%;max-width:420px;font-size:var(--v2-t-body);
  padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);
  background:var(--v2-panel);color:var(--v2-ink);font-family:inherit;margin:var(--v2-s2) 0}body.v2 .v2-libsearch input:focus{outline:2px solid var(--v2-accent);outline-offset:1px}/* ═══ D11 · Settings folds + the ⓘ pattern ════════════════════════════ */









body.v2 .v2-info{display:inline-grid;place-items:center;width:15px;height:15px;
  border-radius:var(--v2-r-full);border:1px solid var(--v2-line2);color:var(--v2-sub);
  font-size:var(--v2-t-label);font-style:normal;cursor:help;vertical-align:2px;margin-left:var(--v2-s1)}body.v2 .v2-info:hover{border-color:var(--v2-accent);color:var(--v2-accent-ink)}/* the folds host old panels — flatten their double chrome */
/* ═══ D12 · the residuals ═════════════════════════════════════════════ */
/* R1 — the host app's bare `aside` selector (sticky, 100vh, overflow-y:auto)
   was capturing the desk's rail elements, turning each into a viewport-tall
   scroller. The desk's asides opt out explicitly. */body.v2 .v2-today{
  height:auto;max-height:none;overflow:visible;border-right:0;padding:0}body.v2 .v2-today{padding:var(--v2-s4)}
/* R1b — the pursuit tab strip registered as a horizontal scroller at desktop
   widths;it only needs to scroll on narrow screens. */
body.v2 .pd-dtabs{overflow-x:visible}@media (max-width:700px){/* mobile.css makes this strip a horizontal scroller (nowrap, hidden
     scrollbar). Two things were wrong with that on a real phone.

     One: it had no min-width:0, so as a grid child it refused to shrink and
     pushed its container to 588px inside a 345px card. html,body's
     overflow-x:hidden then CLIPPED it, which is why the sweep could measure
     the overflow while the page reported no sideways scroll — the symptom
     was hidden, not absent.

     Two: with the scrollbar hidden and no fade, a tab cut mid-word ("Re…")
     reads as broken text rather than as "there is more, swipe". The mask
     gives the edge back its meaning. */body.v2 .pd-dtabs{overflow-x:auto;min-width:0;
    -webkit-mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent);
    mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent)}
}/* R3 — strays (13.33px browser default, host 14px) leaking into the desk:
   controls inside the desk always take the token. */body.v2 #gcpage :is(input,select,textarea,button){font-size:var(--t-base)}body.v2 #gcpage small{font-size:var(--t-sm)}/* the Maps whole-list collector */body.v2 .pd-collector{display:flex;flex-direction:column;gap:var(--v2-s1h);
  background:var(--v2-accent-soft);border:1px solid var(--v2-accent);
  border-radius:var(--v2-r-surface);padding:var(--v2-s3) var(--v2-s4);margin-bottom:var(--v2-s3)}body.v2 .pd-collector b{font-size:var(--v2-t-entity);color:var(--v2-ink)}body.v2 .pd-collector span{font-size:var(--v2-t-body);color:var(--v2-sub)}body.v2 .pd-collector-a{display:flex;gap:var(--v2-s2);margin-top:var(--v2-s1)}body.v2 .pd-collector-a a{text-decoration:none;display:inline-flex;align-items:center}
/* the eligibility cell is a button that reads as a fact (band, not rail) */body.v2 .v2-bandbtn{border:0;background:none;font-family:inherit;text-align:left;
  cursor:pointer;border-radius:var(--v2-r-control);margin:-var(--v2-s1);padding:var(--v2-s1)}body.v2 .v2-bandbtn:hover{background:var(--v2-accent-soft)}body.v2 .v2-bandbtn:focus-visible{outline:2px solid var(--v2-accent);outline-offset:1px}body.v2 .v2-bandbtn .v2-verdict{font-size:var(--v2-t-entity)}/* the Overview description — SAM's notice text and the documents' excerpt */body.v2 .v2-srcbar{font-size:var(--v2-t-label);text-transform:uppercase;
  letter-spacing:.05em;color:var(--v2-sub);margin:var(--v2-s3) 0 var(--v2-s1)}body.v2 .v2-desc{white-space:pre-line;color:var(--v2-sub)}body.v2 .v2-more{color:var(--v2-accent-ink);cursor:pointer;text-decoration:none;
  font-size:var(--v2-t-body)}body.v2 .v2-more:hover{text-decoration:underline}/* the rail's compact incumbent block */body.v2 .v2-incact{display:flex;gap:var(--v2-s1h);flex-wrap:wrap;margin-top:var(--v2-s1h)}/* comparable jobs — the comps fold */body.v2 .v2-compsq{display:flex;gap:var(--v2-s2);align-items:center;flex-wrap:wrap;margin-bottom:var(--v2-s3)}body.v2 .v2-compsq input{flex:1;min-width:220px}body.v2 .v2-compsq .pd-hint{flex-basis:100%;margin:0}body.v2 .v2-compband{display:flex;gap:var(--v2-s5);flex-wrap:wrap;
  background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);padding:var(--v2-s3) var(--v2-s4);margin-bottom:var(--v2-s2)}body.v2 .v2-compband label{display:block;font-size:var(--v2-t-label);text-transform:uppercase;
  letter-spacing:.05em;color:var(--v2-sub)}body.v2 .v2-compband b{font-size:var(--v2-t-say);color:var(--v2-ink)}body.v2 .v2-compband span{display:block;font-size:var(--v2-t-body);color:var(--v2-sub)}body.v2 .v2-complist{display:flex;flex-direction:column;gap:var(--v2-s1h);margin-top:var(--v2-s3)}body.v2 .v2-comprow{display:flex;gap:var(--v2-s4);justify-content:space-between;
  border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);
  padding:var(--v2-s2) var(--v2-s3);background:var(--v2-panel)}body.v2 .v2-compmain{display:flex;flex-direction:column;gap:var(--v2-s0);min-width:0}body.v2 .v2-compdesc{font-size:var(--v2-t-body);color:var(--v2-ink)}body.v2 .v2-compmeta{font-size:var(--v2-t-body);color:var(--v2-sub)}body.v2 .v2-compmeta i{color:var(--v2-sub);font-style:normal}body.v2 .v2-compmatch{font-size:var(--v2-t-label);color:var(--v2-sub)}body.v2 .v2-compside{display:flex;flex-direction:column;align-items:flex-end;gap:var(--v2-s0);white-space:nowrap}body.v2 .v2-compside b{font-size:var(--v2-t-entity);color:var(--v2-ok);font-variant-numeric:tabular-nums}body.v2 .v2-compside a{font-size:var(--v2-t-body);color:var(--v2-accent-ink);text-decoration:none}/* the Mindy-style overview — heros, fact strip, signals, kv grid, histogram */body.v2 .v2-heros{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:var(--v2-s3);margin-bottom:var(--v2-s3)}body.v2 .v2-hero{border-radius:var(--v2-r-surface);padding:var(--v2-s4);display:flex;
  flex-direction:column;gap:var(--v2-s1);border:1px solid var(--v2-line)}body.v2 .v2-hero.est{background:var(--v2-ok-soft);border-color:color-mix(in srgb,var(--v2-ok) 30%,transparent)}body.v2 .v2-hero.elig{background:var(--v2-accent-soft);border-color:color-mix(in srgb,var(--v2-accent) 25%,transparent)}body.v2 .v2-hero label{font-size:var(--v2-t-label);text-transform:uppercase;letter-spacing:.05em;color:var(--v2-sub)}body.v2 .v2-hero b{font-size:var(--v2-t-display)}body.v2 .v2-hero.est b{color:var(--v2-ok)}body.v2 .v2-hero span{font-size:var(--v2-t-body);color:var(--v2-sub)}body.v2 .v2-hero .pd-btn{align-self:flex-start;margin-top:var(--v2-s1)}







body.v2 .v2-hsub{font-weight:400;font-size:var(--v2-t-body);color:var(--v2-sub);margin-left:var(--v2-s1h)}body.v2 .v2-sig{display:flex;gap:var(--v2-s2);align-items:flex-start;padding:var(--v2-s1h) 0;border-bottom:1px solid var(--v2-line)}body.v2 .v2-sig:last-of-type{border-bottom:0}body.v2 .v2-sig i{font-style:normal;width:20px;height:20px;border-radius:50%;flex:0 0 20px;
  display:inline-flex;align-items:center;justify-content:center;font-size:var(--v2-t-label);font-weight:700}body.v2 .v2-sig i.ok{background:var(--v2-ok-soft);color:var(--v2-ok)}body.v2 .v2-sig i.warn{background:var(--v2-warn-soft);color:var(--v2-warn)}body.v2 .v2-sig b{font-size:var(--v2-t-body);display:block}body.v2 .v2-sig span{font-size:var(--v2-t-body);color:var(--v2-sub)}body.v2 .v2-signext{display:flex;align-items:center;justify-content:space-between;gap:var(--v2-s3);
  margin-top:var(--v2-s3);padding:var(--v2-s3);background:var(--v2-accent-soft);border-radius:var(--v2-r-control)}body.v2 .v2-signext span{font-size:var(--v2-t-body);color:var(--v2-ink)}







body.v2 .v2-mkt{background:var(--v2-ok-soft)}body.v2 .v2-histwrap{margin:var(--v2-s3) 0}body.v2 .v2-histwrap label{font-size:var(--v2-t-label);text-transform:uppercase;letter-spacing:.05em;color:var(--v2-sub)}body.v2 .v2-hist{display:flex;align-items:flex-end;gap:var(--v2-s0);height:56px;margin-top:var(--v2-s1h)}body.v2 .v2-hist i{flex:1;background:var(--v2-ok);opacity:.75;border-radius:var(--v2-r-control) var(--v2-r-control) 0 0;min-height:2px}body.v2 .v2-histax{display:flex;justify-content:space-between;font-size:var(--v2-t-label);color:var(--v2-sub)}


@media (max-width:900px){body.v2 .v2-heros{grid-template-columns:minmax(0,1fr)}


}/* the shared table — comps, directory, library */body.v2 .v2-table{width:100%;border-collapse:collapse;font-size:var(--v2-t-body)}body.v2 .v2-table th{text-align:left;font-size:var(--v2-t-label);text-transform:uppercase;
  letter-spacing:.05em;color:var(--v2-sub);font-weight:600;padding:var(--v2-s1h) var(--v2-s2) var(--v2-s1h) 0;
  border-bottom:1px solid var(--v2-line)}body.v2 .v2-table td{padding:var(--v2-s2) var(--v2-s2) var(--v2-s2) 0;border-bottom:1px solid var(--v2-line);
  vertical-align:top;color:var(--v2-ink)}body.v2 .v2-table tbody tr:hover{background:var(--v2-accent-soft)}body.v2 .v2-table a{color:var(--v2-accent-ink);text-decoration:none}body.v2 .v2-table a:hover{text-decoration:underline}


/* what's needed — the measures as a list, not chips */body.v2 .v2-needlist{margin:var(--v2-s1) 0 0;padding-left:var(--v2-s4);display:flex;flex-direction:column;gap:var(--v2-s0)}body.v2 .v2-needlist li{font-size:var(--v2-t-body);color:var(--v2-ink)}/* SOP references are links everywhere they appear */.pd-soplink{color:var(--v2-accent,var(--v2-info));cursor:pointer;text-decoration:underline;
  text-decoration-style:dotted;text-underline-offset:2px}.pd-soplink:hover{text-decoration-style:solid}.sopchip{cursor:pointer}.sopchip:hover{text-decoration:underline}/* the library as a readable register */body.v2 .pb-libtable{margin-top:var(--v2-s1)}body.v2 .pb-libtable tr{cursor:pointer}body.v2 .pb-libid{font-variant-numeric:tabular-nums;color:var(--v2-accent-ink);
  white-space:nowrap;width:130px;font-weight:600}body.v2 .pb-libt2{color:var(--v2-ink)}body.v2 .pb-libstage{color:var(--v2-sub);white-space:nowrap;width:80px}body.v2 .pb-libstat{width:104px;text-align:right;white-space:nowrap}
body.v2 .pb-stab{display:inline-flex;align-items:baseline;gap:var(--v2-s1h);font-size:var(--v2-t-label)}
body.v2 .pb-stab i{font-style:normal;color:var(--v2-faint);letter-spacing:.04em;text-transform:uppercase}
body.v2 .pb-stab.frozen i{color:var(--v2-bad);font-weight:700}
/* the facts stay pinned at the top of every opportunity, no matter how far
   you scroll — the header itself scrolls away, the facts do not */
body.v2 .v2-fresh{float:right;font-weight:400;font-size:var(--v2-t-body);color:var(--v2-sub)}/* sticky needs a clear path to the real scroller — the host's main and body
   both declared overflow, which silently made them the (non-scrolling)
   containing scroll ports and killed every position:sticky below them */body.v2.pd-mode{overflow:visible!important}body.v2.pd-mode main{overflow:visible!important}/* ready-to-send email plays */




/* the comps answer, in sentences */body.v2 .v2-answer{margin:var(--v2-s1) 0 0;padding-left:var(--v2-s4);display:flex;flex-direction:column;gap:var(--v2-s2)}body.v2 .v2-answer li{font-size:var(--v2-t-entity);line-height:1.5;color:var(--v2-ink)}/* the pursuit's Comps tab — a bento */body.v2 .cbx{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--v2-s3)}body.v2 .cbx .sp3{grid-column:span 3}body.v2 .cbx .sp6{grid-column:span 6}body.v2 .cbx .sp12{grid-column:span 12}body.v2 .cbx-card{background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);padding:var(--v2-s4);display:flex;flex-direction:column;gap:var(--v2-s1);min-width:0}body.v2 .cbx-card label{font-size:var(--v2-t-label);text-transform:uppercase;
  letter-spacing:.05em;color:var(--v2-sub)}body.v2 .cbx-card > b{font-size:var(--v2-t-display);color:var(--v2-ink)}body.v2 .cbx-card > span{font-size:var(--v2-t-body);color:var(--v2-sub)}body.v2 .cbx-hero{background:var(--v2-ok-soft);border-color:color-mix(in srgb,var(--v2-ok) 30%,transparent)}body.v2 .cbx-hero > b{color:var(--v2-ok)}body.v2 .cbx-sub{font-size:var(--v2-t-body);color:var(--v2-sub)}body.v2 .cbx-words{background:var(--v2-accent-soft);border-color:color-mix(in srgb,var(--v2-accent) 25%,transparent)}body.v2 .cbx-complist{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:var(--v2-s3)}body.v2 .cbx-comp{background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);padding:var(--v2-s3) var(--v2-s4);display:flex;flex-direction:column;gap:var(--v2-s1h)}body.v2 .cbx-comp-top{display:flex;justify-content:space-between;align-items:baseline}body.v2 .cbx-comp-top b{font-size:var(--v2-t-title);color:var(--v2-ok);font-variant-numeric:tabular-nums}body.v2 .cbx-comp-top a{font-size:var(--v2-t-label);color:var(--v2-accent-ink);text-decoration:none}body.v2 .cbx-comp-desc{font-size:var(--v2-t-body);color:var(--v2-ink);line-height:1.4}body.v2 .cbx-comp-meta{font-size:var(--v2-t-label);color:var(--v2-sub)}body.v2 .cbx-why{display:flex;flex-wrap:wrap;gap:var(--v2-s1);margin-top:auto}body.v2 .cbx-why span{font-size:var(--v2-t-label);background:var(--v2-ok-soft);color:var(--v2-ok);
  border-radius:var(--v2-r-control);padding:var(--v2-s0) var(--v2-s2)}@media (max-width:980px){body.v2 .cbx .sp3,body.v2 .cbx .sp6{grid-column:span 12}
}/* Ask this pursuit — the per-opportunity chat */body.v2 .v2-ask{position:fixed;right:20px;bottom:20px;width:min(420px,calc(100vw - 40px));
  height:min(560px,calc(100vh - 80px));z-index:60;display:flex;flex-direction:column;
  background:var(--v2-panel);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);
  box-shadow:0 18px 50px -12px rgba(0,0,0,.3)}body.v2 .v2-ask-h{display:flex;align-items:center;gap:var(--v2-s2);padding:var(--v2-s2) var(--v2-s3);
  border-bottom:1px solid var(--v2-line)}body.v2 .v2-ask-h b{font-size:var(--v2-t-entity)}body.v2 .v2-ask-h span{font-size:var(--v2-t-label);color:var(--v2-sub);flex:1}body.v2 .v2-ask-log{flex:1;overflow-y:auto;padding:var(--v2-s3) var(--v2-s3);display:flex;
  flex-direction:column;gap:var(--v2-s2)}body.v2 .v2-ask-m{max-width:88%;padding:var(--v2-s2) var(--v2-s3);border-radius:var(--v2-r-surface);
  font-size:var(--v2-t-body);line-height:1.5;white-space:normal}body.v2 .v2-ask-m.user{align-self:flex-end;background:var(--v2-accent-ink);color:var(--v2-bg);
  border-bottom-right-radius:4px}body.v2 .v2-ask-m.assistant{align-self:flex-start;background:var(--v2-bg);color:var(--v2-ink);
  border:1px solid var(--v2-line);border-bottom-left-radius:4px}body.v2 .v2-ask-m.err{color:var(--v2-bad)}body.v2 .v2-ask-hint{font-size:var(--v2-t-body);color:var(--v2-sub);line-height:1.7}body.v2 .v2-ask-in{display:flex;gap:var(--v2-s2);padding:var(--v2-s2) var(--v2-s3);border-top:1px solid var(--v2-line)}body.v2 .v2-ask-in input{flex:1}/* fluent drag & drop — big targets, visible landing zone */body.v2 .pd-col{display:flex;flex-direction:column}body.v2 .pd-cards{flex:1;min-height:160px}body.v2 .pd-col.droptarget{background:var(--v2-accent-soft);
  outline:2px dashed var(--v2-accent);outline-offset:-3px;border-radius:var(--v2-r-surface)}body.pd-dragging .pd-card{cursor:grabbing}body.pd-dragging .pd-col{transition:background var(--v2-fast)}/* the stage changer on the pursuit header */body.v2 .pd-stagesel{border:1px solid var(--v2-line);border-radius:var(--v2-r-full);
  background:var(--v2-panel);font:inherit;font-size:var(--v2-t-body);font-weight:600;
  color:var(--v2-ink);padding:var(--v2-s0) var(--v2-s2);cursor:pointer;max-width:200px}body.v2 .pd-stagesel:hover{border-color:var(--v2-accent)}/* ── BidMatch daily feed on the Sourcing tab ─────────────────────────── */body.v2 .pd-srcviews{display:flex;align-items:center;gap:var(--v2-s3);margin:0 0 var(--v2-s3)}body.v2 .bm-list{display:flex;flex-direction:column;gap:var(--v2-s2)}body.v2 .bm-row{border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel);overflow:hidden}body.v2 .bm-row.open{border-color:var(--v2-accent)}body.v2 .bm-head{display:flex;align-items:center;gap:var(--v2-s2);padding:var(--v2-s2) var(--v2-s3);cursor:pointer}body.v2 .bm-head:hover{background:var(--v2-bg)}body.v2 .bm-t{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--v2-s0)}body.v2 .bm-t b{font-size:var(--v2-t-body);line-height:1.3}body.v2 .bm-t i{font-style:normal;font-size:var(--v2-t-label);color:var(--v2-sub);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}body.v2 .bm-srcchip{font-size:var(--v2-t-label);font-weight:700;color:var(--v2-sub);
  border:1px solid var(--v2-line);border-radius:var(--v2-r-full);padding:var(--v2-s0) var(--v2-s2);white-space:nowrap}body.v2 .bm-car{color:var(--v2-sub)}body.v2 .bm-det{border-top:1px solid var(--v2-line);padding:var(--v2-s3) var(--v2-s3);display:flex;
  flex-direction:column;gap:var(--v2-s2);background:var(--v2-bg)}body.v2 .bm-facts{display:flex;flex-wrap:wrap;gap:var(--v2-s2) var(--v2-s5)}body.v2 .bm-facts span{display:flex;flex-direction:column;gap:var(--v2-s0);min-width:0}body.v2 .bm-facts span.wide{flex-basis:100%}body.v2 .bm-facts label{font-size:var(--v2-t-label);color:var(--v2-sub);text-transform:uppercase;
  letter-spacing:.04em;font-weight:700}body.v2 .bm-facts b{font-size:var(--v2-t-body);font-weight:600;overflow-wrap:anywhere}body.v2 .bm-body{font-size:var(--v2-t-label);line-height:1.5;color:var(--v2-ink);
  white-space:pre-wrap;max-height:220px;overflow:auto;border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);padding:var(--v2-s2) var(--v2-s3);background:var(--v2-panel)}body.v2 .bm-acts{display:flex;gap:var(--v2-s2);flex-wrap:wrap}body.v2 .bm-acts a.pd-btn{text-decoration:none;display:inline-flex;align-items:center}/* the stage cell in the pinned fact strip */
/* ── CFA LaPlace content desk (host view, unscoped — cfa.js) ─────────── */#cfapage{max-width:1080px}
.cfa-mnav{display:flex;align-items:center;gap:var(--v2-s2);font-size:var(--v2-t-title)}.cfa-mnav b{min-width:170px;text-align:center}.cfa-mnav button{font:inherit;border:1px solid var(--v2-line);background:var(--v2-panel);border-radius:var(--v2-r-surface);padding:var(--v2-s0) var(--v2-s3);cursor:pointer}













.t-team{background:var(--v2-ok-soft)}.t-food{background:var(--v2-warn-soft)}.t-graphic{background:var(--v2-accent-soft)}.t-monthly{background:var(--v2-info-soft)}.t-promo{background:var(--v2-warn-soft)}.t-lto{background:var(--v2-accent-soft)}.t-holiday{background:var(--v2-info-soft)}.t-event{background:var(--v2-ok-soft)}

















































#cfapage .pd-btn{font:inherit;font-size:var(--v2-t-body);font-weight:650;border:1px solid var(--v2-ink);background:var(--v2-ink);color:var(--v2-panel);border-radius:var(--v2-r-surface);padding:var(--v2-s1h) var(--v2-s3);cursor:pointer}#cfapage .pd-btn.ghost{background:var(--v2-panel);color:var(--v2-ink);border-color:var(--v2-line2)}#cfapage .pd-btn.sm{padding:var(--v2-s1h) var(--v2-s3)}#cfapage .pd-btn:disabled{opacity:.5}#cfapage .pd-btn.pd-danger{border-color:var(--v2-bad-line);color:var(--v2-bad);background:var(--v2-panel)}#cfapage .pd-x{border:0;background:none;color:var(--v2-sub);font-size:var(--v2-t-entity);cursor:pointer}#cfapage .pd-note{color:var(--v2-sub)}#cfapage .pd-hint{color:var(--v2-sub);font-size:var(--t-sm)}#cfapage .pd-gerr{background:var(--v2-bad-soft);border-radius:var(--v2-r-surface);padding:var(--v2-s2) var(--v2-s3);color:var(--v2-bad)}/* Events tab as a calendar of mini months */












/* Integrations page + project workspace buttons */#intgpage{max-width:900px}







#intgpage .pd-note{color:var(--v2-sub)}#intgpage .pd-hint{color:var(--v2-sub);font-size:var(--t-sm)}#intgpage .pd-gerr{background:var(--v2-bad-soft);border-radius:var(--v2-r-surface);padding:var(--v2-s2) var(--v2-s3);color:var(--v2-bad)}.wsbtn{font:inherit;font-size:var(--t-sm);font-weight:700;margin-top:var(--v2-s2);width:100%;border:1px dashed var(--v2-line2);
  background:none;border-radius:var(--v2-r-surface);padding:var(--v2-s1h) var(--v2-s2);cursor:pointer;color:var(--v2-ink);text-align:center}.wsbtn:hover{border-color:var(--v2-ink);background:var(--v2-bg)}/* CFA kanban + shot thumbnails + shoot-photo picker */














/* spend table on the Integrations page */



/* carousel controls + slide strip in the post editor */





/* AI run history on the Integrations page */







/* past-generations picker in the post editor */





/* ══ The SOP engine — checklists, Action Center, My Work, Scoreboard ══ */.sope-panel{margin-top:var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel);padding:var(--v2-s3) var(--v2-s3)}.sope-panel.frozen{border-color:var(--v2-bad-line);background:var(--v2-bad-soft)}.sope-h{display:flex;align-items:center;gap:var(--v2-s2);margin-bottom:var(--v2-s2);font-size:var(--v2-t-body)}.sope-frozen{font-size:var(--v2-t-label);font-weight:700;color:var(--v2-bad);background:var(--v2-bad-soft);border-radius:var(--v2-r-full);padding:var(--v2-s0) var(--v2-s2)}.sope-count{margin-left:auto;font-size:var(--v2-t-label);font-weight:700;border-radius:var(--v2-r-full);padding:var(--v2-s0) var(--v2-s2)}.sope-count.open{background:var(--v2-warn-soft);color:var(--v2-warn)}.sope-count.ok{background:var(--v2-ok-soft);color:var(--v2-ok)}.sope-list{display:flex;flex-direction:column;gap:var(--v2-s0)}.sope-item{display:flex;gap:var(--v2-s2);align-items:flex-start;font-size:var(--v2-t-body);line-height:1.45;
  padding:var(--v2-s1) var(--v2-s1h);border-radius:var(--v2-r-surface);cursor:pointer}.sope-item:hover{background:var(--v2-bg)}.sope-item.on{color:var(--v2-ok)}.sope-item.lock{color:var(--v2-sub);cursor:default}.sope-tick{flex:0 0 16px;text-align:center;font-weight:700}.sope-tick.auto{color:var(--v2-sub)}.sope-p{font-size:var(--v2-t-label);font-weight:800;letter-spacing:.04em;color:var(--v2-bad);text-transform:uppercase}.sope-fold{margin-top:var(--v2-s2);font-size:var(--v2-t-body)}.sope-fold summary{cursor:pointer;color:var(--v2-sub);font-weight:600;padding:var(--v2-s1) 0}.sope-esc{display:block;width:100%;text-align:left;border:1px solid var(--v2-warn-line);background:var(--v2-warn-soft);
  border-radius:var(--v2-r-surface);padding:var(--v2-s1h) var(--v2-s2);margin:var(--v2-s1) 0;font:inherit;font-size:var(--t-sm);cursor:pointer}.sope-esc:hover{border-color:var(--v2-warn-dot)}.sope-never{color:var(--v2-bad);font-size:var(--t-sm);padding:var(--v2-s0) var(--v2-s0)}.sope-ingate{padding:0 var(--v2-s4) var(--v2-s2)}.sope-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:var(--v2-s3);margin-top:var(--v2-s3)}.sope-sec{border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel);padding:var(--v2-s3) var(--v2-s4)}.sope-sec-h{font-weight:700;font-size:var(--v2-t-body);margin-bottom:var(--v2-s2);display:flex;align-items:center;gap:var(--v2-s2)}.sope-sec-h b{margin-left:auto;font-size:var(--v2-t-entity)}.sope-zero{color:var(--v2-sub);font-size:var(--v2-t-body);padding:var(--v2-s1) 0}.sope-row{display:flex;flex-direction:column;gap:var(--v2-s0);width:100%;text-align:left;border:0;
  background:none;padding:var(--v2-s2) var(--v2-s1h);border-radius:var(--v2-r-surface);font:inherit;cursor:pointer}.sope-row:hover{background:var(--v2-bg)}.sope-row-t{font-weight:600;font-size:var(--v2-t-body);line-height:1.35}.sope-row-m{color:var(--v2-sub);font-size:var(--t-sm)}.sope-red{color:var(--v2-bad)}.sope-flag{display:flex;justify-content:space-between;gap:var(--v2-s2);align-items:center;
  border:1px solid var(--v2-warn-line);background:var(--v2-warn-soft);border-radius:var(--v2-r-surface);padding:var(--v2-s2) var(--v2-s2);margin:var(--v2-s1) 0;font-size:var(--t-sm)}.sope-flag i{display:block;color:var(--v2-sub);font-style:normal;font-size:var(--v2-t-label)}.sope-note{color:var(--v2-sub);font-size:var(--t-sm);margin:var(--v2-s2) 0 var(--v2-s0)}.sope-stats{display:flex;gap:var(--v2-s4);flex-wrap:wrap}.sope-stats>div{display:flex;flex-direction:column;align-items:center;min-width:70px}.sope-stats b{font-size:var(--v2-t-say)}.sope-stats span{color:var(--v2-sub);font-size:var(--v2-t-label)}.sope-work{border-bottom:1px solid var(--v2-bg);padding:var(--v2-s2) var(--v2-s0)}.sope-work:last-child{border-bottom:0}.sope-work-a{display:flex;gap:var(--v2-s1h);margin-top:var(--v2-s1h);flex-wrap:wrap}.sope-scorewrap{overflow-x:auto;margin-top:var(--v2-s2)}.sope-score{width:100%;border-collapse:collapse;font-size:var(--v2-t-body);background:var(--v2-panel);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface)}.sope-score th{text-align:left;font-size:var(--v2-t-label);text-transform:uppercase;letter-spacing:.05em;
  color:var(--v2-sub);padding:var(--v2-s2) var(--v2-s3);border-bottom:1px solid var(--v2-line)}.sope-score td{padding:var(--v2-s2) var(--v2-s3);border-bottom:1px solid var(--v2-bg)}.sope-score td.n{font-weight:700;white-space:nowrap}.sope-score td.t{color:var(--v2-sub)}.sope-score .dim{color:var(--v2-sub);font-weight:400}.sope-pack{font-size:var(--t-sm);padding:var(--v2-s1) var(--v2-s0);color:var(--v2-sub)}.sope-reg{display:flex;align-items:center;gap:var(--v2-s2);border:1px solid var(--v2-warn-line);background:var(--v2-warn-soft);
  border-radius:var(--v2-r-surface);padding:var(--v2-s2) var(--v2-s3);font-size:var(--v2-t-body);margin-top:var(--v2-s2);flex-wrap:wrap}

/* Portal renewals. Amber while there is still time;red once something has
   actually lapsed,because at that point it is no longer a reminder — a buyer
   you already did the work to reach can no longer be bid. */
.sope-portals.bad{border-color:var(--v2-bad-line);background:var(--v2-bad-soft)}.sope-portal-list{display:flex;gap:var(--v2-s2);flex-wrap:wrap;flex:1;min-width:200px}.sope-portal-row{font-size:var(--t-sm);color:var(--v2-sub);background:var(--v2-panel);border-radius:var(--v2-r-full);padding:var(--v2-s0) var(--v2-s2)}.sope-portal-row i{font-style:normal;color:var(--v2-faint)}.sope-portal-row b{color:var(--v2-warn);font-weight:600}.sope-portal-row.lapsed b{color:var(--v2-bad)}@media (max-width:860px){.sope-grid{grid-template-columns:minmax(0,1fr)}.sope-stats{gap:var(--v2-s3)}
}/* ══ The capture layer — intelligence, three docs, cockpit, vendors ══ */.itl-three{display:flex;gap:var(--v2-s2);align-items:stretch;margin:var(--v2-s3) 0 var(--v2-s1);flex-wrap:wrap}.itl-doc{flex:1 1 150px;display:flex;flex-direction:column;gap:var(--v2-s0);align-items:flex-start;
  border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel);padding:var(--v2-s2) var(--v2-s3);font:inherit;cursor:pointer}.itl-doc b{font-size:var(--t-sm)}.itl-doc{font-weight:800;font-size:var(--t-sm);letter-spacing:.06em}.itl-doc span{font-weight:400;font-size:var(--v2-t-label);color:var(--v2-sub);letter-spacing:0;text-transform:none;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.itl-doc.on{border-color:var(--v2-ok-line);background:var(--v2-ok-soft)}.itl-doc.on:hover{border-color:var(--v2-ok)}.itl-doc.missing{border-color:var(--v2-bad-line);background:var(--v2-bad-soft);color:var(--v2-bad)}.itl-reassign{flex:0 0 auto;border:0;background:none;color:var(--v2-sub);font-size:var(--v2-t-entity);cursor:pointer;align-self:center}.itl-cite{border:0;background:var(--v2-bg);border-radius:var(--v2-r-full);padding:var(--v2-s0) var(--v2-s2);font-size:var(--v2-t-label);
  color:var(--v2-sub);cursor:pointer;white-space:nowrap;max-width:220px;overflow:hidden;text-overflow:ellipsis}.itl-cite:hover{background:var(--v2-line)}.itl-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:var(--v2-s1) var(--v2-s4);margin:var(--v2-s2) 0}.itl-row{display:flex;gap:var(--v2-s2);align-items:baseline;font-size:var(--v2-t-body);padding:var(--v2-s0) 0;flex-wrap:wrap}.itl-row>span{flex:0 0 92px;font-size:var(--v2-t-label);font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--v2-sub)}.itl-row.warn b{color:var(--v2-warn)}.itl-block{margin:var(--v2-s2) 0}.itl-block>label{display:block;font-size:var(--v2-t-label);font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--v2-sub);margin-bottom:var(--v2-s1)}.itl-risk{display:flex;gap:var(--v2-s2);align-items:baseline;font-size:var(--t-sm);padding:var(--v2-s0) 0}.itl-risk>span{flex:0 0 130px;color:var(--v2-sub)}.itl-risk b{text-transform:uppercase;font-size:var(--v2-t-label)}.itl-risk.high b{color:var(--v2-bad)}.itl-risk.medium b{color:var(--v2-warn)}.itl-risk.low b{color:var(--v2-ok)}.itl-risk.unknown b{color:var(--v2-sub)}.itl-risk i{color:var(--v2-sub);font-style:normal}.itl-unknowns{font-size:var(--t-sm);color:var(--v2-sub);margin-top:var(--v2-s1)}.itl-unknowns i,.itl-missing i{font-style:normal;background:var(--v2-bg);border-radius:var(--v2-r-control);padding:var(--v2-s0) var(--v2-s1h);display:inline-block;margin:var(--v2-s0) var(--v2-s0)}.itl-rec{border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);padding:var(--v2-s2) var(--v2-s3);margin-top:var(--v2-s2);background:var(--v2-panel)}.itl-rec.v-bid{border-color:var(--v2-ok-line);background:var(--v2-ok-soft)}.itl-rec.v-nobid{border-color:var(--v2-bad-line);background:var(--v2-bad-soft)}.itl-rec.v-watch,.itl-rec.v-review{border-color:var(--v2-warn-line);background:var(--v2-warn-soft)}.itl-rec-h{display:flex;gap:var(--v2-s2);align-items:baseline}.itl-rec-h b{font-size:var(--v2-t-title);letter-spacing:.04em}.itl-rec-h span{font-size:var(--v2-t-label);color:var(--v2-sub)}.itl-rec ul{margin:var(--v2-s1h) 0 0 var(--v2-s4);font-size:var(--t-sm)}.itl-missing{margin-top:var(--v2-s1h)}.itl-missing label{font-size:var(--v2-t-label);font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--v2-sub);display:block}.itl-cockpit{border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-warn-soft);padding:var(--v2-s3) var(--v2-s4);margin:var(--v2-s3) 0}


.itl-recchip{margin-left:auto;font-size:var(--v2-t-label);font-weight:800;border-radius:var(--v2-r-full);padding:var(--v2-s0) var(--v2-s2);background:var(--v2-bg)}.itl-recchip.v-bid{background:var(--v2-ok-soft);color:var(--v2-ok)}.itl-recchip.v-nobid{background:var(--v2-bad-soft);color:var(--v2-bad)}.itl-recchip.v-watch,.itl-recchip.v-review{background:var(--v2-warn-soft);color:var(--v2-warn)}.itl-cockpit-g{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:var(--v2-s2)}.itl-cell{display:flex;flex-direction:column;gap:var(--v2-s0);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel);padding:var(--v2-s1h) var(--v2-s2)}.itl-cell span{font-size:var(--v2-t-label);font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--v2-sub)}.itl-cell b{font-size:var(--t-sm);line-height:1.3}.itl-cell b.dim{color:var(--v2-sub);font-weight:500}.itl-cockpit-a{display:flex;gap:var(--v2-s2);align-items:center;margin-top:var(--v2-s2);flex-wrap:wrap}.itl-cockpit-a .pd-btn.on{border-color:var(--v2-warn);color:var(--v2-warn)}.itl-mission{border:1px solid var(--v2-info-line);border-radius:var(--v2-r-surface);background:var(--v2-info-soft);padding:var(--v2-s3) var(--v2-s4);margin-bottom:var(--v2-s3)}.itl-mission-h{display:flex;gap:var(--v2-s2);align-items:baseline;margin-bottom:var(--v2-s1h)}.itl-mission-h b{font-size:var(--v2-t-body);letter-spacing:.08em}.itl-mission-h span{font-size:var(--v2-t-label);color:var(--v2-sub)}.itl-mission-a{display:flex;gap:var(--v2-s2);margin-top:var(--v2-s2)}.itl-score{display:inline-block;font-size:var(--v2-t-label);font-weight:800;border-radius:var(--v2-r-full);padding:var(--v2-s0) var(--v2-s2);margin-right:var(--v2-s1)}.itl-score.hi{background:var(--v2-ok-soft);color:var(--v2-ok)}.itl-score.mid{background:var(--v2-warn-soft);color:var(--v2-warn)}.itl-score.lo{background:var(--v2-bad-soft);color:var(--v2-bad)}.itl-score.none{background:var(--v2-bg);color:var(--v2-sub);font-weight:600}.itl-agree{font-size:var(--v2-t-label);color:var(--v2-ok);margin-right:var(--v2-s1)}.itl-vendor{max-width:560px}.itl-vstats{font-size:var(--t-sm);color:var(--v2-sub);background:var(--v2-bg);border-radius:var(--v2-r-surface);padding:var(--v2-s2) var(--v2-s3);margin-bottom:var(--v2-s2)}.itl-vstats.faint{color:var(--v2-sub)}.itl-vsec{font-size:var(--v2-t-label);font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--v2-sub);margin:var(--v2-s3) 0 var(--v2-s1h)}.itl-vrow{display:flex;gap:var(--v2-s2);align-items:center;padding:var(--v2-s0) 0;font-size:var(--v2-t-body)}.itl-vrow>span{flex:0 0 150px;color:var(--v2-sub);font-size:var(--t-sm)}.itl-vrow input,.itl-vrow textarea{flex:1;font:inherit;font-size:var(--v2-t-body);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);padding:var(--v2-s1) var(--v2-s2)}.itl-vrow .pd-pick.sm button{min-width:30px;padding:var(--v2-s1) var(--v2-s2)}.itl-vrow .clr{border:0;background:none;color:var(--v2-sub);cursor:pointer}.itl-togs{display:flex;gap:var(--v2-s1h);flex-wrap:wrap}.itl-tog{border:1px solid var(--v2-line);border-radius:var(--v2-r-full);background:var(--v2-panel);padding:var(--v2-s1) var(--v2-s3);font:inherit;font-size:var(--t-sm);cursor:pointer}.itl-tog.on{border-color:var(--v2-ok-line);background:var(--v2-ok-soft);color:var(--v2-ok)}.itl-ownbook{border:1px solid var(--v2-info-line);border-radius:var(--v2-r-surface);background:var(--v2-info-soft);padding:var(--v2-s2) var(--v2-s3);margin:var(--v2-s2) 0}.itl-pickdoc{display:flex;justify-content:space-between;gap:var(--v2-s2);width:100%;text-align:left;
  border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel);padding:var(--v2-s2) var(--v2-s3);margin:var(--v2-s1) 0;font:inherit;font-size:var(--v2-t-body);cursor:pointer}.itl-pickdoc:hover{border-color:var(--v2-accent,var(--v2-accent))}.itl-pickdoc span{color:var(--v2-sub);font-size:var(--v2-t-label);flex:0 0 auto}.sope-redbar{margin-top:var(--v2-s2)}.sope-flag.red{border-color:var(--v2-bad-line);background:var(--v2-bad-soft)}.sope-boundary{margin-top:var(--v2-s4);font-size:var(--t-sm);color:var(--v2-sub);border-top:1px dashed var(--v2-line);padding-top:var(--v2-s2);max-width:760px}@media (max-width:860px){.itl-cockpit-g{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.itl-vrow{flex-wrap:wrap}.itl-vrow>span{flex-basis:100%}.itl-three{flex-direction:column}
}/* ══ Stage tasks on the board — the VA's always-visible answer ══ */.sope-cardhint{margin-top:var(--v2-s1h);font-size:var(--v2-t-label);line-height:1.35;color:var(--v2-sub);
  border-top:1px dashed var(--v2-line);padding-top:var(--v2-s1);display:flex;gap:var(--v2-s1h);align-items:baseline}.sope-cardhint b{color:var(--v2-warn);flex:0 0 auto}.sope-cardhint.ok{color:var(--v2-ok)}.pd-colsop{border:0;background:var(--v2-bg);border-radius:var(--v2-r-full);padding:var(--v2-s0) var(--v2-s2);font-size:var(--v2-t-label);
  font-weight:700;color:var(--v2-sub);cursor:pointer;letter-spacing:.03em}.pd-colsop:hover{background:var(--v2-accent-soft);color:var(--v2-accent-ink)}/* ══ The redesign pass: compact decision bar + tab-jump strip ══ */.itl-decide{display:flex;gap:var(--v2-s2);align-items:center;flex-wrap:wrap;
  border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-warn-soft);padding:var(--v2-s2) var(--v2-s4);margin:var(--v2-s3) 0}.itl-decide>b{font-size:var(--t-sm);letter-spacing:.05em;text-transform:uppercase;color:var(--v2-warn);margin-right:var(--v2-s1)}.itl-decide .pd-hint{flex-basis:100%;margin:var(--v2-s0) 0 0}.v2-tabjump{display:flex;gap:var(--v2-s2);align-items:center;flex-wrap:wrap;margin:var(--v2-s4) 0 var(--v2-s1h);
  font-size:var(--t-sm);color:var(--v2-sub);border-top:1px dashed var(--v2-line);padding-top:var(--v2-s3)}.v2-tabjump button{border:1px solid var(--v2-line);background:var(--v2-panel);border-radius:var(--v2-r-full);padding:var(--v2-s1) var(--v2-s3);
  font:inherit;font-size:var(--t-sm);color:var(--v2-sub);cursor:pointer}.v2-tabjump button:hover{border-color:var(--v2-accent,var(--v2-accent));color:var(--v2-accent,var(--v2-accent))}/* ══ Answers beside the steps — what the reader found, under each item ══ */.sope-ans{display:block;font-size:var(--v2-t-label);color:var(--v2-sub);background:var(--v2-bg);border-left:2px solid var(--v2-line2);
  border-radius:0 var(--v2-r-surface) var(--v2-r-surface) 0;padding:var(--v2-s0) var(--v2-s2);margin-top:var(--v2-s0);line-height:1.4;cursor:default}.sope-ans .itl-cite{margin-left:var(--v2-s1h)}.sope-ans.none{color:var(--v2-sub);background:none;border-left-color:var(--v2-line);font-style:italic}.sope-item.on .sope-ans{color:var(--v2-ok);background:var(--v2-ok-soft);border-left-color:var(--v2-ok-line)}/* ══ The guide rail — the plan holding the user's hand ══ */.gr{border:1px solid var(--v2-accent-soft);border-radius:var(--v2-r-surface);background:linear-gradient(180deg,var(--v2-accent-soft),var(--v2-panel));
  padding:var(--v2-s3) var(--v2-s4);margin:var(--v2-s3) 0}.gr-fit{font-size:var(--t-sm);border-radius:var(--v2-r-surface);padding:var(--v2-s2) var(--v2-s3);margin-bottom:var(--v2-s2)}.gr-fit.red{background:var(--v2-bad-soft);color:var(--v2-bad);border:1px solid var(--v2-bad-line)}.gr-fit.amber{background:var(--v2-warn-soft);color:var(--v2-warn);border:1px solid var(--v2-warn-line)}.gr-steps{display:flex;align-items:center;gap:var(--v2-s1);overflow-x:auto;padding-bottom:var(--v2-s1);
  -webkit-overflow-scrolling:touch;scrollbar-width:none}.gr-steps::-webkit-scrollbar{display:none}.gr-step{display:flex;flex-direction:column;align-items:flex-start;gap:var(--v2-s0);flex:0 0 auto;
  border:1px solid transparent;background:none;border-radius:var(--v2-r-surface);padding:var(--v2-s1) var(--v2-s2);
  font:inherit;font-size:var(--t-sm);color:var(--v2-sub);cursor:pointer;position:relative}.gr-step i{font-style:normal;font-size:var(--v2-t-label);position:absolute;top:4px;right:6px}.gr-step.done{color:var(--v2-ok)}.gr-step.cur{border-color:var(--v2-accent-line);background:var(--v2-panel);color:var(--v2-ink);font-weight:700;
  box-shadow:0 2px 10px var(--v2-accent-glow-soft)}.gr-step.cur span{font-weight:400;font-size:var(--v2-t-label);color:var(--v2-accent-ink)}.gr-step.late{color:var(--v2-bad)}.gr-step.cur.late{border-color:var(--v2-bad-line)}.gr-sep{color:var(--v2-line2);font-weight:400;flex:0 0 auto}.gr-now{margin-top:var(--v2-s2);border-top:1px dashed var(--v2-accent-soft);padding-top:var(--v2-s2)}.gr-now label{font-size:var(--v2-t-label);font-weight:800;letter-spacing:.08em;color:var(--v2-accent-ink)}.gr-now.done label{color:var(--v2-ok)}.gr-now-t{font-size:var(--v2-t-entity);font-weight:600;line-height:1.4;margin:var(--v2-s0) 0 var(--v2-s1)}.gr-now-a{display:flex;gap:var(--v2-s2);align-items:center;margin-top:var(--v2-s1h);flex-wrap:wrap}.gr-then{font-size:var(--v2-t-label);color:var(--v2-sub)}@media (max-width:860px){.gr{padding:var(--v2-s2) var(--v2-s3)}.gr-now-t{font-size:var(--v2-t-body)} }/* ══ v4: submission-lock lights + pricing cockpit ══ */.gr-lock{display:flex;gap:var(--v2-s1h);flex-wrap:wrap;margin:var(--v2-s2) 0 var(--v2-s0)}.gr-light{border:1px solid var(--v2-line);background:var(--v2-panel);border-radius:var(--v2-r-full);padding:var(--v2-s1) var(--v2-s3);
  font:inherit;font-size:var(--v2-t-label);cursor:pointer}.gr-light.ok{border-color:var(--v2-ok-line);color:var(--v2-ok)}.gr-light.no{border-color:var(--v2-bad-line);color:var(--v2-bad)}.gr-light.risk{border-color:var(--v2-warn-line);color:var(--v2-warn)}.itl-prc .itl-vrow input{max-width:160px}.itl-prc .itl-vrow select{flex:1;font:inherit;font-size:var(--v2-t-body);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);padding:var(--v2-s1) var(--v2-s2)}/* ══ PM mode — delivery ══ */.dlv-card{border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel);margin-bottom:var(--v2-s3)}.dlv-h{display:flex;gap:var(--v2-s3);align-items:center;padding:var(--v2-s3) var(--v2-s4);cursor:pointer}.dlv-h b{font-size:var(--v2-t-entity)}.dlv-m{color:var(--v2-sub);font-size:var(--t-sm)}.dlv-lights{margin-left:auto;font-size:var(--v2-t-body);letter-spacing:2px}.dlv-h i{color:var(--v2-sub);font-style:normal}.dlv-b{border-top:1px solid var(--v2-bg);padding:var(--v2-s3) var(--v2-s4)}.dlv-lightrow{display:flex;gap:var(--v2-s4);flex-wrap:wrap;margin:var(--v2-s2) 0}.dlv-light{display:flex;flex-direction:column;gap:var(--v2-s1)}.dlv-light>span{font-size:var(--v2-t-label);font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--v2-sub)}.dlv-light input{font:inherit;font-size:var(--t-sm);border:1px solid var(--v2-warn-line);border-radius:var(--v2-r-surface);padding:var(--v2-s1) var(--v2-s2);min-width:220px}/* ═══ The pre-submission review ═══════════════════════════════════════
   Inside the composer, under the draft it is judging. Blockers are square
   and warnings are triangles as well as coloured, because a review read on a
   projector or by somebody colour-blind still has to sort itself. Each
   finding opens to its reason and the SOP line it came from — a score you
   cannot argue with is a score people learn to ignore. */body.v2 .rv-wrap{margin-top:var(--v2-s5);padding-top:var(--v2-s4);
  border-top:1px solid var(--v2-line)}body.v2 .rv-head{display:flex;align-items:center;justify-content:space-between;
  margin-bottom:var(--v2-s3)}body.v2 .rv-head h5{margin:0;font-size:var(--v2-t-entity);color:var(--v2-ink)}body.v2 .rv-tally{display:flex;align-items:baseline;gap:var(--v2-s1h);flex-wrap:wrap;
  font-size:var(--v2-t-body);color:var(--v2-sub);margin-bottom:var(--v2-s3)}body.v2 .rv-tally b{font-size:var(--v2-t-title);color:var(--v2-ink);
  font-variant-numeric:tabular-nums}body.v2 .rv-tally b+span{margin-right:var(--v2-s3)}body.v2 .rv-tally b.bad{color:var(--v2-bad)}body.v2 .rv-tally b.warn{color:var(--v2-warn)}body.v2 .rv-tally b.ok{color:var(--v2-ok)}/* The caveat is LOUD when nothing is recorded to score against, because a
   review that looks authoritative while measuring only the house rules is
   the failure this whole screen exists to avoid. */body.v2 .rv-caveat{font-size:var(--v2-t-body);color:var(--v2-sub);
  line-height:1.6;margin:0 0 var(--v2-s3)}body.v2 .rv-caveat.loud{color:var(--v2-ink);background:var(--v2-warn-soft);
  border-left:3px solid var(--v2-warn);padding:var(--v2-s2) var(--v2-s2);border-radius:var(--v2-r-control)}








body.v2 .rv-lbl{display:block;font-size:var(--v2-t-label);letter-spacing:.04em;
  text-transform:uppercase;color:var(--v2-sub);margin:var(--v2-s4) 0 var(--v2-s1h)}body.v2 .rv-lbl:first-of-type{margin-top:0}


/* The factor coverage and the CO questions. Coverage is the SOP's governing
   rule made visible: every row is something the government said it will score,
   and the state says whether anything answers it. A wording match is its own
   colour because it is a keyword match, not a judgment — it wants checking. */body.v2 .rv-cov,body.v2 .rv-q{list-style:none;margin:0 0 var(--v2-s4);padding:0;
  display:flex;flex-direction:column;gap:var(--v2-s1)}body.v2 .rv-cov li{display:flex;gap:var(--v2-s3);align-items:baseline;
  font-size:var(--v2-t-body);line-height:1.5;padding-left:var(--v2-s2);
  border-left:2px solid var(--v2-line)}body.v2 .rv-cov li.ok{border-left-color:var(--v2-ok)}body.v2 .rv-cov li.warn{border-left-color:var(--v2-warn)}body.v2 .rv-cov li.bad{border-left-color:var(--v2-bad)}body.v2 .rv-cov b{color:var(--v2-ink);font-weight:600;flex:none;min-width:11ch}body.v2 .rv-cov span{color:var(--v2-sub)}body.v2 .rv-q li{display:flex;justify-content:space-between;gap:var(--v2-s3);
  font-size:var(--v2-t-body);line-height:1.5;color:var(--v2-ink)}body.v2 .rv-q cite{font-style:normal;font-size:var(--v2-t-label);
  color:var(--v2-sub);flex:none;opacity:.8}/* Section basis. Three ranks, and the lowest is not a failure state — the
   template comes from the operator's own reference documents and the SOP
   corpus. It is drawn quietly rather than red, because marking grounded work
   as a defect teaches people to ignore the one rank that IS a defect. */body.v2 .rv-basis{list-style:none;margin:0 0 var(--v2-s4);padding:0;
  display:flex;flex-direction:column;gap:var(--v2-s0)}body.v2 .rv-basis li{display:flex;align-items:baseline;gap:var(--v2-s3);
  font-size:var(--v2-t-body);line-height:1.5;color:var(--v2-ink)}/* 8ch, not 7: TEMPLATE and REQUIRED are both eight characters and overflowed
   a 7ch box, eating the gap so the rank ran straight into the section name. */body.v2 .rv-basis i{font-style:normal;font-size:var(--v2-t-label);
  letter-spacing:.03em;text-transform:uppercase;flex:none;min-width:8ch;
  color:var(--v2-sub)}body.v2 .rv-basis li.scored i{color:var(--v2-accent-ink);font-weight:600}body.v2 .rv-basis li.required i{color:var(--v2-ok)}body.v2 .rv-basis em{font-style:normal;font-size:var(--v2-t-label);
  color:var(--v2-warn);margin-left:auto;flex:none}body.v2 .rv-basis li.proven i{color:var(--v2-ok);font-weight:600}body.v2 .rv-basis b{font-weight:500;font-size:var(--v2-t-label);color:var(--v2-ok);
  flex:none;margin-left:auto}body.v2 .rv-basis b+em{margin-left:var(--v2-s3)}/* "ours" and "won" are deliberately different colours. A filed submission is
   not a win, and a screen that draws them the same teaches people to repeat
   whatever they happened to send last. */body.v2 .rv-basis li.house i{color:var(--v2-sub);font-weight:600}body.v2 .rv-basis b.ours{color:var(--v2-sub)}body.v2 .rv-basis b.won{color:var(--v2-ok)}/* Gap answers, in the composer's right rail. A gap is a question the draft
   asked because nothing was invented to fill it — so it gets an input rather
   than a warning triangle. Answering redrafts the section around the answer. */body.v2 .v2-gaps li{display:flex;flex-direction:column;gap:var(--v2-s1);margin-bottom:var(--v2-s2)}body.v2 .v2-gaps li span{font-size:var(--v2-t-label);color:var(--v2-sub);line-height:1.4}body.v2 .v2-gapin{width:100%;font:inherit;font-size:var(--v2-t-body);
  padding:var(--v2-s1) var(--v2-s1h);border:1px solid var(--v2-line2);border-radius:var(--v2-r-control);
  background:var(--v2-panel);color:var(--v2-ink)}body.v2 .v2-gapin:focus{outline:none;border-color:var(--v2-accent)}body.v2 .v2-vis{width:100%;font:inherit;font-size:var(--v2-t-body);margin-bottom:var(--v2-s1h);
  padding:var(--v2-s1) var(--v2-s1h);border:1px solid var(--v2-line2);border-radius:var(--v2-r-control);
  background:var(--v2-panel);color:var(--v2-ink)}/* ═══ D13 · THE HUB'S TYPOGRAPHY, ACTUALLY APPLIED ════════════════════
   Three faces were loading on every page and none were used. Applied here at
   the root so every surface inherits it rather than each screen opting in. */body.v2{font-family:var(--v2-sans);
  /* Inter's defaults leave contextual alternates off; cv11 gives the
     single-storey 'a' and 'g' the Hub's headings use. */
  font-feature-settings:"cv11","ss01";
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}/* R11 · The display face stops at the levels it was chosen for.
   This rule put --v2-display on all six heading levels. That was harmless
   while --v2-display was Poppins, a humanist sans that is fine at 13px.
   R41 pointed it at OSWALD, a condensed poster face, and the token change
   swept the whole app with it: 683 card titles on the task board alone,
   at 14/700, in a typeface drawn for billboards. The board stopped being
   a list and became a stack of headlines, each one tighter and louder
   than the sentence under it.
   h1 and h2 keep Oswald — the page title and the section heads are where
   it gives this app its face. h3, h4 and h5 are card titles and row
   titles: they are READ, not announced, so they take the body face at a
   weight that still separates them from their own description. */
/* R12 · The planner board's empty stage, collapsed to a strip.
   Same shape the GovCon pipeline already uses for an empty lane (52px, the
   name turned on its side), so the two boards stop giving two different
   answers to the same question. The strip keeps its ＋, which is why it is
   a strip and not a hidden column. */
body.v2 .col.empty{flex:0 0 52px;min-width:52px;max-width:52px}
body.v2 .col.empty .colh{flex-direction:column;align-items:center;justify-content:flex-start;
  gap:var(--v2-s3);padding:var(--v2-s3) 0;min-height:200px;
  background:var(--v2-line2);border-radius:var(--v2-r-surface)}
body.v2 .col.empty .colh b.vert{writing-mode:vertical-rl;transform:rotate(180deg);
  font-family:var(--v2-sans);font-size:var(--v2-t-label);font-weight:650;
  letter-spacing:.06em;text-transform:uppercase;padding:0;background:none;
  order:2}
/* The stage dot is absolutely positioned 10px from the label's LEFT, which
   is correct while the label runs across and lands on top of the first
   letter once it runs down. Turned into a plain block above the name, it
   is the same dot doing the same job in the only place it fits. */
body.v2 .col.empty .colh b.vert::before{position:static;transform:none;
  display:block;margin:0 auto var(--v2-s2);writing-mode:horizontal-tb}
body.v2 .col.empty .colh .add{margin:0;order:3}
/* Every strip the same height as the board, so three of them in a row read
   as a margin rather than as three ragged offcuts. */
body.v2 .col.empty{align-self:stretch}
body.v2 .col.empty .colh{height:100%}
body.v2 h1,body.v2 h2,body.v2 .v2-display{
  font-family:var(--v2-display);font-weight:700;letter-spacing:-.015em}
body.v2 h3,body.v2 h4,body.v2 h5,body.v2 .v2-block h4{
  font-family:var(--v2-sans);font-weight:650;letter-spacing:-.011em}/* FIGURES. Any number a person compares to another number: money, days,
   counts, scores. Tabular so digits occupy identical width — a column that
   re-flows as it updates is a column nobody trusts at a glance. */body.v2 .rv-tally b,body.v2 .sope-row-m b,body.v2 .st-num,body.v2 td.num{
  font-family:var(--v2-mono);font-variant-numeric:tabular-nums;
  font-feature-settings:"tnum";letter-spacing:-.02em}/* ── The stat card, the Hub's most repeated shape ─────────────────── */




/* A hairline of colour rather than a coloured card: the number is the
   content, and a fully tinted tile makes six of them shout at once. */




/* ── Stage tints, from the Hub's pipeline palette ──────────────────
   A wash, never a fill. The Hub tints the card edge so a board reads as a
   progression left to right without the colour competing with the text. */
/* A pseudo-element bar, NOT border-left.
   border-left-color loses to any `border:` shorthand, and nearly every card
   rule in legacy.css sets one — so the tint resolved correctly, computed
   correctly, and was painted over. Found by rendering it and reading the
   computed style rather than trusting the screenshot. */body.v2 .v2-stage-tint{position:relative;overflow:hidden}body.v2 .v2-stage-tint::before{content:"";position:absolute;inset:0 auto 0 0;
  width:3px;background:var(--stage,var(--v2-line2));border-radius:inherit}body.v2 [data-stage="monitoring"]{--stage:var(--v2-line)}body.v2 [data-stage="review"]{--stage:var(--v2-warn-dot)}body.v2 [data-stage="go-no-go"]{--stage:var(--v2-faint)}body.v2 [data-stage="pursuing"]{--stage:var(--v2-accent)}body.v2 [data-stage="submitted"]{--stage:var(--v2-info-dot)}body.v2 [data-stage="awarded"]{--stage:var(--v2-ok)}body.v2 [data-stage="lost"]{--stage:var(--v2-bad)}/* ── Match / fit scores ───────────────────────────────────────────── */
/* data-stage sets --stage above;





/* ═══ D14 · THE PIPELINE BOARD, HUB SHAPE ═════════════════════════════
   The Hub's board is a row of fixed-width columns, each headed by a flat
   outline badge rather than a heavy bar, with cards that carry their own
   stage colour as a spine. Ours already had the structure;this gives it the
   Hub's proportions and restraint. */

body.v2 .pd-col{width:308px;min-width:308px;max-width:308px;flex:0 0 308px;
  border-radius:var(--v2-r-surface);padding:0 var(--v2-s0);transition:background var(--v2-fast),box-shadow var(--v2-fast)}/* The column head is a BADGE, not a bar. It names the stage, carries the
   stage colour as a dot and a hairline, and gets out of the way. */body.v2 .pd-colh{display:flex;align-items:center;gap:var(--v2-s1h);margin:0 var(--v2-s0) var(--v2-s3);
  padding:var(--v2-s1) var(--v2-s2);background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-full);position:relative;overflow:hidden}body.v2 .pd-colh::before{content:"";position:absolute;inset:0 auto 0 0;width:3px;
  background:var(--stage,var(--v2-line2))}body.v2 .pd-colh b{font-family:var(--v2-display);font-size:var(--v2-t-body);
  font-weight:600;letter-spacing:-.01em;color:var(--v2-ink);margin-left:var(--v2-s0)}/* The count is a figure people compare column to column, so it is tabular and
   sits hard right where the eye can run down it. */body.v2 .pd-colh .pd-n{margin-left:auto;font-family:var(--v2-mono);
  font-variant-numeric:tabular-nums;font-size:var(--v2-t-label);font-weight:500;
  color:var(--v2-sub);background:var(--v2-bg);padding:var(--v2-s0) var(--v2-s1h);
  border-radius:var(--v2-r-full)}body.v2 .pd-colh .pd-dot{width:6px;height:6px;border-radius:50%;
  background:var(--stage,var(--v2-line2));flex:none}body.v2 .pd-colsop{font-size:var(--v2-t-label);letter-spacing:.04em;padding:var(--v2-s0) var(--v2-s1);
  border:1px solid var(--v2-line2);background:none;border-radius:var(--v2-r-full);
  color:var(--v2-sub);cursor:pointer;font-family:var(--v2-mono)}body.v2 .pd-colsop:hover{color:var(--v2-accent-ink);border-color:var(--v2-accent)}body.v2 .pd-cards{display:flex;flex-direction:column;gap:var(--v2-s2);
  padding:0 var(--v2-s0) var(--v2-s0);min-height:60px}/* ── The card ─────────────────────────────────────────────────────────
   Flat, one border, a stage spine down the left. Elevation is reserved for
   the thing being dragged, so "lifted" means one thing on this screen. */body.v2 .pd-card{background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);padding:var(--v2-s2) var(--v2-s2) var(--v2-s2) var(--v2-s3);cursor:pointer;
  display:flex;flex-direction:column;gap:var(--v2-s1);box-shadow:none;
  transition:border-color var(--v2-fast),transform var(--v2-fast),box-shadow var(--v2-fast)}body.v2 .pd-card:hover{border-color:var(--v2-line2);transform:translateY(-1px);
  box-shadow:0 2px 8px rgba(31,36,43,.06)}body.v2 .pd-card:active{transform:none}body.v2 .pd-card-top{display:flex;align-items:center;gap:var(--v2-s1h);flex-wrap:wrap;min-height:0}body.v2 .pd-card-t{font-size:var(--v2-t-body);font-weight:600;line-height:1.35;
  color:var(--v2-ink);
  /* Two lines, then ellipsis. A title that wraps to five lines makes every
     card in the column a different height and the board stops scanning. */
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
  overflow:hidden;overflow-wrap:anywhere}body.v2 .pd-card:hover .pd-card-t{color:var(--v2-accent-ink)}body.v2 .pd-card-m{font-size:var(--v2-t-label);color:var(--v2-sub);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}body.v2 .pd-card-sol{font-family:var(--v2-mono);font-size:var(--v2-t-label);color:var(--v2-sub)}/* The footer is four facts at a glance: value, subs, quotes, who owns it. */body.v2 .pd-card-f{display:flex;align-items:center;gap:var(--v2-s3);
  padding-top:var(--v2-s1);border-top:1px solid var(--v2-line);margin-top:var(--v2-s0)}body.v2 .pd-card-f .pd-val{font-family:var(--v2-mono);font-variant-numeric:tabular-nums;
  font-size:var(--v2-t-label);font-weight:500;color:var(--v2-ink)}body.v2 .pd-card-f .pd-ct{font-family:var(--v2-mono);font-size:var(--v2-t-label);color:var(--v2-sub)}body.v2 .pd-card-f .pd-ct.red{color:var(--v2-bad);font-weight:500}body.v2 .pd-card-f .pd-av{margin-left:auto;width:20px;height:20px;border-radius:50%;
  background:var(--v2-bg);border:1px solid var(--v2-line);color:var(--v2-sub);
  font-size:var(--v2-t-label);font-weight:600;display:flex;align-items:center;justify-content:center;
  letter-spacing:.02em;flex:none}body.v2 .pd-warn{font-size:var(--v2-t-label);color:var(--v2-bad);
  background:var(--v2-bad-soft);border-radius:var(--v2-r-control);padding:var(--v2-s0) var(--v2-s1h)}/* ── Dragging ─────────────────────────────────────────────────────────
   The drop target is stated by a ring and a wash, the way the Hub does it,
   rather than by moving anything — a board that reflows under the cursor is
   a board you drop on the wrong column. */body.v2 .pd-col.droptarget{background:var(--v2-accent-soft);
  box-shadow:inset 0 0 0 2px color-mix(in srgb,var(--v2-accent) 40%,transparent)}body.v2 .pd-col.droptarget .pd-colempty{border-color:var(--v2-accent);
  color:var(--v2-accent-ink);background:transparent}body.v2 .pd-colempty{padding:var(--v2-s5) var(--v2-s3);text-align:center;
  font-size:var(--v2-t-label);color:var(--v2-sub);
  border:1px dashed var(--v2-line2);border-radius:var(--v2-r-surface)}body.pd-dragging .pd-card[draggable]{opacity:.45}body.pd-dragging .pd-card:hover{transform:none;box-shadow:none}/* ── The rail: an empty stage, collapsed ──────────────────────────────
   Nine empty columns at full width is nine columns of nothing between you and
   the work. Collapsed to a spine that still accepts a drop. */body.v2 .pd-col.rail{width:38px;min-width:38px;max-width:38px;flex:0 0 38px;
  align-items:center;justify-content:flex-start;padding:var(--v2-s3) 0;
  background:var(--v2-panel);border:1px solid var(--v2-line);cursor:pointer;
  gap:var(--v2-s3);transition:background var(--v2-fast),border-color var(--v2-fast)}body.v2 .pd-col.rail:hover{border-color:var(--v2-accent);background:var(--v2-accent-soft)}body.v2 .pd-col.rail .pd-dot{width:6px;height:6px;border-radius:50%;
  background:var(--stage,var(--v2-line2));flex:none}body.v2 .pd-col.rail .pd-railname{writing-mode:vertical-rl;font-size:var(--v2-t-label);
  color:var(--v2-sub);letter-spacing:.04em;white-space:nowrap}/* ── P3g · the padlock stays upright ─────────────────────────────────
   It used to sit INSIDE .pd-railname, which is writing-mode:vertical-rl. A
   colour emoji turned on its side renders as an olive block — visible on a
   phone above "Eligibility", where it read as a broken element rather than
   as a locked gate. Its own element, horizontal, with a label on it. */body.v2 .pd-col.rail .pd-raillock{writing-mode:horizontal-tb;font-style:normal;
  font-size:var(--v2-t-label);line-height:1;flex:none}body.v2 .pd-col.rail:hover .pd-railname{color:var(--v2-accent-ink)}/* ═══ D15 · THE HUB'S COMPONENT VOCABULARY ════════════════════════════
   Taken from the Hub screens themselves rather than from memory: the meta
   card row above a detail, the labelled meta grid inside a result, the match
   ring, the sidebar section, the data table. Everything below is generic —
   no screen owns it — so a surface adopts the language by using the class. */
/* ── Meta cards: the row of facts above a detail ──────────────────────
   TYPE · POSTED · SET-ASIDE · DEADLINE. Each is a bordered card with a small
   uppercase label and one value, because these are the four things somebody
   checks before reading anything else. The last one turns red when it has
   gone, which is the only colour in the row. */body.v2 .v2-metacards{display:grid;gap:var(--v2-s3);
  grid-template-columns:repeat(auto-fit,minmax(170px,1fr));margin-bottom:var(--v2-s4)}body.v2 .v2-metacard{background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);padding:var(--v2-s3) var(--v2-s4)}body.v2 .v2-metacard label{display:flex;align-items:center;gap:var(--v2-s1);
  font-size:var(--v2-t-label);letter-spacing:.06em;text-transform:uppercase;
  color:var(--v2-sub);font-weight:600;margin-bottom:var(--v2-s1)}body.v2 .v2-metacard b{font-size:var(--v2-t-entity);font-weight:600;color:var(--v2-ink);
  display:block;line-height:1.3;overflow-wrap:anywhere}body.v2 .v2-metacard.date b{font-family:var(--v2-mono);font-variant-numeric:tabular-nums;
  letter-spacing:-.02em}body.v2 .v2-metacard.bad{background:var(--v2-bad-soft);border-color:
  color-mix(in srgb,var(--v2-bad) 30%,transparent)}body.v2 .v2-metacard.bad label,body.v2 .v2-metacard.bad b{color:var(--v2-bad)}body.v2 .v2-metacard.warn{background:var(--v2-warn-soft);
  border-color:color-mix(in srgb,var(--v2-warn) 30%,transparent)}body.v2 .v2-metacard.warn label{color:var(--v2-warn)}/* ── Meta grid: labelled fields INSIDE a result card ──────────────────
   The SamSearch shape. Every value is a soft pill so the eye can pick out
   "which of these is the NAICS" without reading the labels each time. */body.v2 .v2-metagrid{display:grid;gap:var(--v2-s3) var(--v2-s4);
  grid-template-columns:repeat(auto-fit,minmax(140px,1fr));margin:var(--v2-s3) 0}body.v2 .v2-metagrid > div{min-width:0}body.v2 .v2-metagrid label{display:block;font-size:var(--v2-t-label);letter-spacing:.07em;
  text-transform:uppercase;color:var(--v2-sub);font-weight:600;margin-bottom:var(--v2-s0)}body.v2 .v2-mpill{display:inline-block;max-width:100%;background:var(--v2-bg);
  border:1px solid var(--v2-line);border-radius:var(--v2-r-control);
  padding:var(--v2-s0) var(--v2-s1h);font-size:var(--v2-t-label);color:var(--v2-ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:top}body.v2 .v2-mpill.code{font-family:var(--v2-mono);letter-spacing:-.02em}body.v2 .v2-mpill.accent{background:var(--v2-accent-soft);
  border-color:color-mix(in srgb,var(--v2-accent) 30%,transparent);color:var(--v2-accent-ink)}body.v2 .v2-mpill.none{color:var(--v2-sub);background:none;border-style:dashed}/* ── The match ring ───────────────────────────────────────────────────
   A conic-gradient dial, which needs no SVG and no JS. Colour AND the arc
   length both carry the value, so it survives a colour-blind reader and a
   black-and-white print of a proposal review. */








/* ── Sidebar sections, the Hub's right rail ───────────────────────────
   Icon + uppercase label + content, each in its own card. */







/* ── The detail head: id, title, and what it was called before ────────
   The raw title sits under the cleaned one, greyed. We rewrite titles;



/* ── Data table, the Hub's Clients shape ──────────────────────────────
   Quiet header, generous rows, figures right-aligned and tabular, an em-dash
   where there is nothing rather than a blank that reads as a bug. */body.v2 .v2-table{width:100%;border-collapse:separate;border-spacing:0;
  background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);overflow:hidden}body.v2 .v2-table th{text-align:left;font-size:var(--v2-t-label);font-weight:600;
  letter-spacing:.04em;color:var(--v2-sub);padding:var(--v2-s2) var(--v2-s4);
  border-bottom:1px solid var(--v2-line);background:var(--v2-bg)}body.v2 .v2-table td{padding:var(--v2-s3) var(--v2-s4);font-size:var(--v2-t-body);
  color:var(--v2-ink);border-bottom:1px solid var(--v2-line);vertical-align:middle}body.v2 .v2-table tr:last-child td{border-bottom:0}body.v2 .v2-table tbody tr:hover td{background:var(--v2-bg)}body.v2 .v2-table th.num,body.v2 .v2-table td.num{text-align:right;
  font-family:var(--v2-mono);font-variant-numeric:tabular-nums}
body.v2 .v2-table td.strong{font-weight:600}/* ── Filter rail, the SamSearch shape ─────────────────────────────────
   Collapsible groups of chips. Chips rather than selects because the whole
   point is seeing what is currently applied without opening anything. */





/* ═══ D16 · THE RESPONSE WORKSPACE ════════════════════════════════════
   Taken from the Hub's own response screens. Its Checklist tab turns out to
   be the same idea as our pre-submission review — blockers, items that could
   not be checked, and a line telling you to treat those as unanswered rather
   than as passing — so the shapes below are shared between them deliberately
   rather than each screen inventing its own. */
/* ── Workspace head: what this is, and the two things you can do ────── */





/* A count in a pill: "0/7 approved", "3/11 drafted". Tabular, so a row of
   them lines up and a change in one is visible without reading it. */



/* ── The tab strip, with the blocker count leading ────────────────────
   The Hub puts "3 blockers" FIRST, before Discuss — ahead of every tab you
   might otherwise click. That is the right order: the thing stopping you goes
   before the thing you were going to do. */







/* ── Readiness: what is wrong, what passed, what could not be checked ─
   Three states, three glyphs, three colours — and the third is the one that
   matters. An item nobody could check must not look like one that passed. */body.v2 .v2-ready{display:flex;flex-direction:column;gap:var(--v2-s4)}body.v2 .v2-rditem{display:grid;grid-template-columns:18px minmax(0,1fr);gap:var(--v2-s3);
  align-items:start}body.v2 .v2-rdmark{font-size:var(--v2-t-body);line-height:1.35;text-align:center}body.v2 .v2-rditem.bad  .v2-rdmark{color:var(--v2-bad)}body.v2 .v2-rditem.ok   .v2-rdmark{color:var(--v2-ok)}body.v2 .v2-rditem.warn .v2-rdmark{color:var(--v2-warn)}body.v2 .v2-rditem.none .v2-rdmark{color:var(--v2-sub)}body.v2 .v2-rdt{font-size:var(--v2-t-body);font-weight:600;color:var(--v2-ink);
  display:flex;align-items:center;gap:var(--v2-s2);flex-wrap:wrap;line-height:1.35}body.v2 .v2-rdt .v2-nc{font-family:var(--v2-mono);font-size:var(--v2-t-label);letter-spacing:.08em;
  text-transform:uppercase;color:var(--v2-sub);border:1px solid var(--v2-line2);
  padding:var(--v2-s0) var(--v2-s1);border-radius:var(--v2-r-control);font-weight:500}body.v2 .v2-rdw{font-size:var(--v2-t-body);color:var(--v2-sub);line-height:1.55;
  margin-top:var(--v2-s0);max-width:76ch}body.v2 .v2-rdw cite{display:block;font-style:normal;font-size:var(--v2-t-label);
  color:var(--v2-sub);margin-top:var(--v2-s0)}

/* The single next action. A list of eleven problems is paralysing;the same
   list with "fix this one first" underneath it is a morning's work. */
body.v2 .v2-fixnext{display:flex;align-items:center;justify-content:center;gap:var(--v2-s2);
  width:100%;font:inherit;font-size:var(--v2-t-body);font-weight:600;
  padding:var(--v2-s3) var(--v2-s4);margin-top:var(--v2-s4);cursor:pointer;
  border:1px solid var(--v2-line2);border-radius:var(--v2-r-surface);
  background:var(--v2-panel);color:var(--v2-ink);transition:all var(--v2-fast)}body.v2 .v2-fixnext:hover{border-color:var(--v2-accent);color:var(--v2-accent-ink);
  background:var(--v2-accent-soft)}/* ── Category progress ────────────────────────────────────────────── */





body.v2 .v2-bar{height:5px;border-radius:var(--v2-r-full);background:var(--v2-line);
  overflow:hidden}body.v2 .v2-bar i{display:block;height:100%;background:var(--v2-accent);
  border-radius:inherit;transition:width var(--v2-slow)}body.v2 .v2-bar.ok i{background:var(--v2-ok)}body.v2 .v2-bar.warn i{background:var(--v2-warn)}body.v2 .v2-bar.bad i{background:var(--v2-bad)}

/* ── Empty states ─────────────────────────────────────────────────────
   Centred, with a reason and a way out. An empty panel with no explanation
   reads as broken;the Hub always says why it is empty and what to press. */
body.v2 .v2-empty{display:flex;flex-direction:column;align-items:center;
  text-align:center;gap:var(--v2-s2);padding:var(--v2-s7) var(--v2-s4);
  border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);
  background:var(--v2-panel)}
body.v2 .v2-empty b{font-family:var(--v2-display);font-size:var(--v2-t-entity);
  font-weight:600;color:var(--v2-ink)}body.v2 .v2-empty p{margin:0;font-size:var(--v2-t-body);color:var(--v2-sub);
  max-width:46ch;line-height:1.55}body.v2 .v2-empty .pd-btn{margin-top:var(--v2-s2)}/* ── Module rail: a list of things you can run ─────────────────────── */







/* ── Skeleton, for anything that takes a visible moment ─────────────── */
@keyframes v2shimmer{0%{background-position:100% 50%}100%{background-position:0 50%}}/* ── The search result, SamSearch shape ───────────────────────────────
   Title and dates on one line, the description, then the labelled meta grid.
   The whole card is a button, so the hit target is the card and not a link
   buried in it. The left spine says how urgent it is without a second badge. */body.v2 .pd-ires{display:block;width:100%;text-align:left;font:inherit;cursor:pointer;
  background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);padding:var(--v2-s4) var(--v2-s4) var(--v2-s4) var(--v2-s4);
  margin-bottom:var(--v2-s3);transition:border-color var(--v2-fast),box-shadow var(--v2-fast)}body.v2 .pd-ires:hover{border-color:var(--v2-line2);box-shadow:0 2px 10px rgba(31,36,43,.05)}body.v2 .pd-ires:focus-visible{outline:2px solid var(--v2-accent);outline-offset:2px}body.v2 .pd-ires-head{display:flex;align-items:flex-start;gap:var(--v2-s4);
  justify-content:space-between}body.v2 .pd-ires-t{font-family:var(--v2-display);font-size:var(--v2-t-entity);
  font-weight:600;color:var(--v2-ink);line-height:1.3;flex:1 1 auto;min-width:0;
  overflow-wrap:anywhere}body.v2 .pd-ires:hover .pd-ires-t{color:var(--v2-accent-ink)}/* The dates sit in their own right-hand rail, the way SamSearch does it, so
   "when is this due" is always in the same place on every card. */body.v2 .pd-ires-when{flex:none;text-align:right;min-width:104px;
  border-left:1px solid var(--v2-line);padding-left:var(--v2-s4)}body.v2 .pd-ires-when label{display:block;font-size:var(--v2-t-label);letter-spacing:.07em;
  text-transform:uppercase;color:var(--v2-sub);font-weight:600;margin-top:var(--v2-s1)}body.v2 .pd-ires-when label:first-child{margin-top:0}body.v2 .pd-ires-when b{display:block;font-family:var(--v2-mono);
  font-variant-numeric:tabular-nums;font-size:var(--v2-t-body);color:var(--v2-ink)}body.v2 .pd-ires-when b.hot{color:var(--v2-bad)}body.v2 .pd-ires-when i{display:block;font-style:normal;font-size:var(--v2-t-label);
  color:var(--v2-sub);margin-top:var(--v2-s0)}body.v2 .pd-ires-d2{margin:var(--v2-s2) 0 0;font-size:var(--v2-t-body);
  color:var(--v2-sub);line-height:1.55;max-width:88ch}body.v2 .pd-ires-flags{display:flex;flex-wrap:wrap;gap:var(--v2-s1h);margin-top:var(--v2-s2)}body.v2 .pd-iresults{display:flex;flex-direction:column}@media (max-width:640px){body.v2 .pd-ires-head{flex-direction:column;gap:var(--v2-s2)}body.v2 .pd-ires-when{border-left:0;padding-left:0;text-align:left;
    display:flex;gap:var(--v2-s4);align-items:baseline}body.v2 .pd-ires-when label{margin-top:0}
}/* ═══ D17 · THE SHARED PRIMITIVES ═════════════════════════════════════
   Network, Library, Settings and a dozen other surfaces are all built from
   the same four things: a panel, a form field, a label and a note. None of
   them had a v2 rule, so those screens were still rendering in the old
   language while the board and sourcing had moved on.

   Converting the primitives converts every screen that uses them at once,
   which is the whole reason they are primitives. Per-screen CSS here would
   be the same work repeated and then left half-done. */
/* ── The panel ────────────────────────────────────────────────────────
   Flat, one hairline border, no shadow. The Hub reserves elevation for
   things that float above the page — a popover, a dragged card — so a
   resting panel that casts a shadow makes the real ones mean less. */body.v2 .pd-panel{background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);box-shadow:none;padding:var(--v2-s5)}body.v2 .pd-panel > h4,body.v2 .pd-panel > h5{font-family:var(--v2-display);
  font-weight:700;letter-spacing:-.015em;color:var(--v2-ink);
  margin:0 0 var(--v2-s3)}body.v2 .pd-panel > h4{font-size:var(--v2-t-title)}body.v2 .pd-panel > h5{font-size:var(--v2-t-entity)}/* ── Form fields ──────────────────────────────────────────────────────
   One control language everywhere: the same height, the same radius, the
   same focus ring. The old rule used a 2px outline with a transparent
   border, which made a focused field jump by a pixel — visible on a form
   with ten of them, and the kind of thing that reads as "cheap" without
   anyone being able to say why. */body.v2 .pd-f label,body.v2 .pd-f2 label{display:block;font-size:var(--v2-t-label);
  font-weight:600;letter-spacing:.03em;color:var(--v2-sub);margin-bottom:var(--v2-s1)}body.v2 .pd-f input,body.v2 .pd-f2 input,body.v2 .pd-f select,body.v2 .pd-f2 select,body.v2 .pd-f textarea,body.v2 .pd-f2 textarea{
  width:100%;font:inherit;font-size:var(--v2-t-body);color:var(--v2-ink);
  background:var(--v2-panel);border:1px solid var(--v2-line2);
  border-radius:var(--v2-r-control);padding:var(--v2-s2) var(--v2-s3);
  transition:border-color var(--v2-fast),box-shadow var(--v2-fast)}body.v2 .pd-f input:hover,body.v2 .pd-f select:hover,body.v2 .pd-f textarea:hover{
  border-color:var(--v2-sub)}body.v2 .pd-f input:focus,body.v2 .pd-f2 input:focus,body.v2 .pd-f select:focus,body.v2 .pd-f2 select:focus,body.v2 .pd-f textarea:focus,body.v2 .pd-f2 textarea:focus{
  outline:none;border-color:var(--v2-accent);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--v2-accent) 18%,transparent)}body.v2 .pd-f input::placeholder,body.v2 .pd-f textarea::placeholder{color:var(--v2-sub)}/* Anything holding an identifier, a code or money reads as one. */body.v2 .pd-f input[type="number"],body.v2 .pd-f input.code,body.v2 .pd-f input[name*="naics"],body.v2 .pd-f input[name*="uei"]{
  font-family:var(--v2-mono);font-variant-numeric:tabular-nums}/* ── Labels and notes ─────────────────────────────────────────────── */body.v2 .pd-facts-k{font-size:var(--v2-t-label);letter-spacing:.05em;
  text-transform:uppercase;color:var(--v2-sub);font-weight:600}body.v2 .pd-note{font-size:var(--v2-t-body);color:var(--v2-sub);line-height:1.6}body.v2 .pd-hint{font-size:var(--v2-t-label);color:var(--v2-sub);line-height:1.5}body.v2 .pd-loading{font-size:var(--v2-t-body);color:var(--v2-sub)}/* ── Detail head ──────────────────────────────────────────────────────
   Poppins on the pursuit name, and the meta line reads as a breadcrumb of
   facts rather than a run-on sentence. */body.v2 .pd-dh{background:var(--v2-panel);border-bottom:1px solid var(--v2-line)}

body.v2 .pd-dtabs{display:flex;gap:var(--v2-s0);flex-wrap:wrap;margin-top:var(--v2-s3)}body.v2 .pd-dtabs button{font:inherit;font-size:var(--v2-t-body);padding:var(--v2-s2) var(--v2-s3);
  border:0;border-bottom:2px solid transparent;background:none;color:var(--v2-sub);
  cursor:pointer;display:inline-flex;align-items:center;gap:var(--v2-s1h);transition:color var(--v2-fast)}body.v2 .pd-dtabs button:hover{color:var(--v2-ink)}body.v2 .pd-dtabs button.on{color:var(--v2-ink);font-weight:600;
  border-bottom-color:var(--v2-accent)}body.v2 .pd-tabn{font-style:normal;font-family:var(--v2-mono);font-size:var(--v2-t-label);
  font-variant-numeric:tabular-nums;color:var(--v2-sub)}body.v2 .pd-tabn.red{color:var(--v2-bad)}body.v2 .pd-stagesel{font:inherit;font-size:var(--v2-t-label);padding:var(--v2-s1) var(--v2-s2);
  border:1px solid var(--v2-line2);border-radius:var(--v2-r-full);
  background:var(--v2-panel);color:var(--v2-sub);cursor:pointer}body.v2 .pd-stagesel:focus{outline:none;border-color:var(--v2-accent)}/* ═══ D18 · MODALS, AND THE REST OF THE SHARED SET ════════════════════
   The modal is the most-seen surface in the app — intake, every gate, every
   confirm — and it was still entirely legacy: old radius, a heavy drop
   shadow, and a primary button in the old blue. */body.v2 .pd-modal-bk{background:rgba(20,24,30,.42);backdrop-filter:blur(2px)}body.v2 .pd-modal{border-radius:var(--v2-r-overlay);border:1px solid var(--v2-line);
  box-shadow:var(--v2-shadow-overlay);background:var(--v2-panel);
  width:min(660px,94vw)}body.v2 .pd-modal-h{padding:var(--v2-s4) var(--v2-s5);border-bottom:1px solid var(--v2-line)}body.v2 .pd-modal-h b{font-family:var(--v2-display);font-size:var(--v2-t-title);
  font-weight:700;letter-spacing:-.015em;color:var(--v2-ink)}body.v2 .pd-modal-b{padding:var(--v2-s5)}/* The footer is where the irreversible button lives, so it gets a surface of
   its own rather than floating on the body — it should read as a decision
   bar, not as more content. */body.v2 .pd-modal-f{padding:var(--v2-s3) var(--v2-s5);border-top:1px solid var(--v2-line);
  background:var(--v2-bg);border-radius:0 0 var(--v2-r-overlay) var(--v2-r-overlay)}body.v2 .pd-x{font-size:var(--v2-t-say);color:var(--v2-sub);border-radius:var(--v2-r-control);
  width:28px;height:28px;display:flex;align-items:center;justify-content:center;
  transition:background var(--v2-fast),color var(--v2-fast)}/* Inside an error strip the close takes the error's ink. Fixing this in
   legacy.css alone reads correct and does nothing: `body.v2 .pd-x` is
   (0,2,1) and `.pd-errstrip .pd-x` is (0,2,0), so v2 wins and the strip's
   own rule never lands. Measured 4.25:1 before, 5.7:1 after. */body.v2 .pd-errstrip .pd-x,body.v2 .pd-errstrip .pd-btn{color:var(--v2-bad)}body.v2 .pd-x:hover{color:var(--v2-ink);background:var(--v2-bg)}/* ── Messages ─────────────────────────────────────────────────────────
   A left bar rather than a filled block. A fully tinted error is loud on a
   form where three fields might each raise one. */body.v2 .pd-gerr{font-size:var(--v2-t-body);font-weight:400;color:var(--v2-bad);
  background:var(--v2-bad-soft);border-radius:var(--v2-r-control);
  border-left:3px solid var(--v2-bad);padding:var(--v2-s2) var(--v2-s3);line-height:1.55}body.v2 .pd-readonly{background:var(--v2-warn-soft);color:var(--v2-warn);
  font-size:var(--v2-t-body);border-left:3px solid var(--v2-warn)}body.v2 .pd-cite{font-family:var(--v2-mono);font-size:var(--v2-t-label);
  color:var(--v2-sub);font-style:normal}/* ── Empty states in panels ──────────────────────────────────────────── */body.v2 .pd-empty{border:1px dashed var(--v2-line2);border-radius:var(--v2-r-surface);
  padding:var(--v2-s5);background:none}body.v2 .pd-empty-t{font-family:var(--v2-display);font-size:var(--v2-t-entity);
  font-weight:600;color:var(--v2-ink);margin-bottom:var(--v2-s2)}body.v2 .pd-empty-a{font-size:var(--v2-t-body);color:var(--v2-sub);line-height:1.6}/* ── Inline link button ───────────────────────────────────────────────
   Underline on hover only. A page of permanently-underlined inline buttons
   reads as a page of broken links. */body.v2 .pd-linkbtn{color:var(--v2-accent-ink);text-decoration:none;
  font-size:var(--v2-t-body);border-bottom:1px solid
  color-mix(in srgb,var(--v2-accent) 35%,transparent)}body.v2 .pd-linkbtn:hover{border-bottom-color:var(--v2-accent)}/* ── Library / Settings document shelves ─────────────────────────────── */body.v2 .pd-docgrid{grid-template-columns:280px minmax(0,1fr);gap:var(--v2-s4)}body.v2 .pd-doclist,body.v2 .pd-docwrap{background:var(--v2-panel);
  border:1px solid var(--v2-line);border-radius:var(--v2-r-surface)}body.v2 .pd-docgroup{font-size:var(--v2-t-label);letter-spacing:.05em;
  text-transform:uppercase;color:var(--v2-sub);font-weight:600;
  padding:var(--v2-s3) var(--v2-s4) var(--v2-s1)}body.v2 .pd-docsel{display:block;width:100%;text-align:left;font:inherit;
  font-size:var(--v2-t-body);padding:var(--v2-s2) var(--v2-s4);border:0;background:none;
  color:var(--v2-sub);cursor:pointer;border-left:2px solid transparent}body.v2 .pd-docsel:hover{background:var(--v2-bg);color:var(--v2-ink)}body.v2 .pd-docsel.on{background:var(--v2-accent-soft);color:var(--v2-accent-ink);
  border-left-color:var(--v2-accent);font-weight:600}body.v2 .pd-docname{font-size:var(--v2-t-body);color:var(--v2-ink);font-weight:500}body.v2 .pd-docsize{font-family:var(--v2-mono);font-size:var(--v2-t-label);
  font-variant-numeric:tabular-nums;color:var(--v2-sub)}body.v2 .pd-docnote{font-size:var(--v2-t-body);color:var(--v2-sub);line-height:1.6}body.v2 .pd-dochead{font-family:var(--v2-display);font-size:var(--v2-t-title);
  font-weight:700;letter-spacing:-.015em;color:var(--v2-ink)}body.v2 .pd-drop{border:1px dashed var(--v2-line2);border-radius:var(--v2-r-surface);
  background:var(--v2-bg);color:var(--v2-sub);font-size:var(--v2-t-body)}body.v2 .pd-drop.over{border-color:var(--v2-accent);background:var(--v2-accent-soft);
  color:var(--v2-accent-ink)}/* ── Network: the picker and its facts ───────────────────────────────── */body.v2 .pd-pick{background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface)}body.v2 .pd-facts-act{display:flex;gap:var(--v2-s1h);flex-wrap:wrap}body.v2 .pd-actfilt{display:flex;gap:var(--v2-s1h);flex-wrap:wrap;margin-bottom:var(--v2-s3)}/* ═══ D19 · THE LAST OF IT ════════════════════════════════════════════
   Gate forms, checkboxes, the activity timeline, the document viewer and the
   past-performance record. These are the surfaces a person touches on the
   way to submitting, so they are the ones where a control that feels
   second-rate makes the whole gate feel second-rate. */
/* ── Gate forms ───────────────────────────────────────────────────────
   Two columns on a wide modal, one on a phone. A gate asked on a phone at a
   site visit is a real case, and a two-column form at 375px is unusable. */body.v2 .pd-gform{gap:var(--v2-s4)}body.v2 .pd-gf label{font-size:var(--v2-t-label);font-weight:600;letter-spacing:.03em;
  color:var(--v2-sub);margin-bottom:var(--v2-s1)}body.v2 .pd-gf input,body.v2 .pd-gf select,body.v2 .pd-gf textarea{
  width:100%;font:inherit;font-size:var(--v2-t-body);color:var(--v2-ink);
  background:var(--v2-panel);border:1px solid var(--v2-line2);
  border-radius:var(--v2-r-control);padding:var(--v2-s2) var(--v2-s3);
  transition:border-color var(--v2-fast),box-shadow var(--v2-fast)}body.v2 .pd-gf input:focus,body.v2 .pd-gf select:focus,body.v2 .pd-gf textarea:focus{
  outline:none;border-color:var(--v2-accent);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--v2-accent) 18%,transparent)}body.v2 .pd-gf .pd-hint{margin-top:var(--v2-s1)}@media (max-width:620px){body.v2 .pd-gform{grid-template-columns:minmax(0,1fr)} }/* ── Checkboxes ───────────────────────────────────────────────────────
   Accent-coloured and given a real hit target. These are SOP checklist
   items — someone ticks dozens in a sitting. */



/* ── The activity timeline ────────────────────────────────────────────
   A rail down the left with a node per entry, so a day's work reads as a
   sequence rather than as rows that happen to be near each other. */body.v2 .pd-timeline{gap:0}body.v2 .pd-tl{gap:var(--v2-s4);padding:var(--v2-s3) 0 var(--v2-s3) var(--v2-s4);
  border-bottom:1px solid var(--v2-line);position:relative;font-size:var(--v2-t-body)}body.v2 .pd-tl::before{content:"";position:absolute;left:4px;top:0;bottom:0;
  width:1px;background:var(--v2-line)}body.v2 .pd-tl::after{content:"";position:absolute;left:1px;top:17px;
  width:7px;height:7px;border-radius:50%;background:var(--v2-line2);
  border:2px solid var(--v2-panel)}body.v2 .pd-tl:first-child::before{top:17px}body.v2 .pd-tl:last-child{border-bottom:0}body.v2 .pd-tl:last-child::before{bottom:auto;height:17px}body.v2 .pd-tl-d{flex:0 0 118px;font-family:var(--v2-mono);font-size:var(--v2-t-label);
  font-variant-numeric:tabular-nums;color:var(--v2-sub)}body.v2 .pd-tl-b{color:var(--v2-sub);line-height:1.6}body.v2 .pd-tl-b b{color:var(--v2-ink);font-weight:600}/* ── Document viewer ──────────────────────────────────────────────── */body.v2 .pd-docview{background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface)}body.v2 .pd-docempty{color:var(--v2-sub);font-size:var(--v2-t-body);gap:var(--v2-s2)}body.v2 .pd-docempty b{font-family:var(--v2-display);font-size:var(--v2-t-entity);
  color:var(--v2-ink);font-weight:600}body.v2 .pd-firstmark{font-size:var(--v2-t-label);font-weight:600;
  background:var(--v2-accent-soft);color:var(--v2-accent-ink);
  border-radius:var(--v2-r-full);padding:var(--v2-s0) var(--v2-s2)}/* ── Past-performance record ──────────────────────────────────────── */

/* ═══ D20 · THE SOURCING TAB ══════════════════════════════════════════
   This was a six-column table: title, agency, place, set-aside, closes,
   action. It fitted more rows on screen and told you almost nothing about
   any of them — the description, notice type, office and posted date were
   all in the mirror and none of it was shown, so deciding whether a notice
   was worth opening meant opening it.

   It is the SamSearch shape now, which the team already reads every day. */body.v2 .pd-srclist{display:flex;flex-direction:column;gap:var(--v2-s3)}body.v2 .src-card{background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);padding:var(--v2-s4) var(--v2-s4) var(--v2-s3) var(--v2-s4);
  transition:border-color var(--v2-fast),box-shadow var(--v2-fast)}body.v2 .src-card:hover{border-color:var(--v2-line2);box-shadow:0 2px 10px rgba(31,36,43,.05)}/* Already in the pipeline: quieter, because it is no longer a decision. It
   stays in the list rather than disappearing, so the same search twice gives
   the same answer both times. */body.v2 .src-card.taken{background:var(--v2-bg);opacity:.72}body.v2 .src-card.taken:hover{opacity:1}
body.v2 .src-t{flex:1 1 auto;min-width:0}body.v2 .src-card h4{margin:0;font-family:var(--v2-display);font-size:var(--v2-t-entity);
  font-weight:600;line-height:1.3;color:var(--v2-ink);overflow-wrap:anywhere}body.v2 .src-ref{font-family:var(--v2-mono);font-size:var(--v2-t-label);
  color:var(--v2-sub);margin-top:var(--v2-s0);letter-spacing:-.01em}/* Dates in a fixed right rail, so "when is this due" is in the same place on
   every card and the eye can run straight down the column. */





body.v2 .src-desc{margin:var(--v2-s3) 0 0;font-size:var(--v2-t-body);
  color:var(--v2-sub);line-height:1.55;max-width:92ch}
body.v2 .src-sp{flex:1 1 auto}/* ── The filter bar ───────────────────────────────────────────────────
   Kept inline rather than moved to a sidebar: this screen is already inside
   a planner shell with its own left nav, and a second rail would leave the
   results in a column too narrow to read a description in. */body.v2 .pd-srcbar{display:flex;flex-wrap:wrap;gap:var(--v2-s3) var(--v2-s4);
  align-items:flex-end;padding:var(--v2-s4);background:var(--v2-panel);
  border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);
  margin-bottom:var(--v2-s4)}body.v2 .pd-srcf{display:flex;flex-direction:column;gap:var(--v2-s1);min-width:0}body.v2 .pd-srcf label{font-family:var(--v2-display);font-size:var(--v2-t-label);
  font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--v2-sub);
  /* min-width:0 and a wrap, because the label sits above its own field and
     has nothing to lose by taking two lines — measured wanting 59px in a
     56px column once the filters were narrow enough. */
  line-height:1.2;min-width:0;overflow-wrap:anywhere}body.v2 .pd-srcf input,body.v2 .pd-srcf select{font:inherit;font-size:var(--v2-t-body);
  color:var(--v2-ink);background:var(--v2-panel);border:1px solid var(--v2-line2);
  border-radius:var(--v2-r-control);padding:var(--v2-s1h) var(--v2-s2);
  /* min-width was 150px. The filter that carries `.grow` sits in a flex row
     and its parent already says min-width:0, so the field was the thing
     refusing to shrink: measured 150px of content in a 102px box at 717px
     wide. A field can be narrower than its placeholder; a row that overflows
     the card cannot. The `width:100%` that the narrow-screen rule below was
     applying is what the field wanted at every width. */
  min-width:0;width:100%;
  transition:border-color var(--v2-fast),box-shadow var(--v2-fast)}body.v2 .pd-srcf input:focus,body.v2 .pd-srcf select:focus{outline:none;
  border-color:var(--v2-accent);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--v2-accent) 18%,transparent)}/* ── Results header ───────────────────────────────────────────────── */body.v2 .pd-srchead{display:flex;align-items:baseline;gap:var(--v2-s3);flex-wrap:wrap;
  margin-bottom:var(--v2-s3)}body.v2 .pd-srchead b{font-family:var(--v2-display);font-size:var(--v2-t-title);
  font-weight:700;letter-spacing:-.015em;color:var(--v2-ink)}body.v2 .pd-srchead span{font-size:var(--v2-t-body);color:var(--v2-sub)}/* ── Source tabs ──────────────────────────────────────────────────────
   Six sources, each a different kind of promise about freshness and cost, so
   they read as a row of chips rather than as a tab bar pretending they are
   the same thing. */body.v2 .pd-srctabs{display:flex;flex-wrap:wrap;gap:var(--v2-s1h);margin-bottom:var(--v2-s4)}body.v2 .pd-srctabs button{font:inherit;font-size:var(--v2-t-body);padding:var(--v2-s1h) var(--v2-s3);
  border:1px solid var(--v2-line2);background:var(--v2-panel);color:var(--v2-sub);
  border-radius:var(--v2-r-full);cursor:pointer;transition:all var(--v2-fast);white-space:nowrap}body.v2 .pd-srctabs button:hover{border-color:var(--v2-accent);color:var(--v2-accent-ink)}body.v2 .pd-srctabs button.on{background:var(--v2-ink);border-color:var(--v2-ink);
  color:var(--v2-panel);font-weight:500}@media (max-width:680px){


body.v2 .pd-srcf{flex:1 1 100%}body.v2 .pd-srcf input,body.v2 .pd-srcf select{width:100%}
}/* ── Intake: the attachment list ──────────────────────────────────────
   The label column was a fixed 150px and the label was `white-space:nowrap`
   with no overflow rule, so "INSTRUCTIONS TO OFFERORS" — about 180px once
   uppercased with tracking — ran straight over the filename beside it.

   The column now sizes to `max-content`, which is the width of the LONGEST
   label across the rows: the labels still line up with each other, and the
   column can never be narrower than its own contents. The filename gets
   `minmax(0,1fr)` so it is the thing that truncates, which is right — a
   filename is recoverable from the link, a category label is not. */
/* The LIST owns the columns, not each row.
   With the grid on each row, `max-content` sized per row — so the labels
   lined up but the filenames started at three different places, which is
   the thing a column is for. The list is the grid now and each row is a
   subgrid spanning it, so one `max-content` measurement covers every label
   and the filenames share an edge. */body.v2 .pd-idocs{display:grid;
  grid-template-columns:minmax(0,max-content) minmax(0,1fr) auto;gap:0}body.v2 .pd-idoc{display:grid;grid-column:1/-1;
  grid-template-columns:subgrid;
  gap:var(--v2-s3);align-items:baseline;
  padding:var(--v2-s1h) var(--v2-s2);border-bottom:1px solid var(--v2-line);
  border-radius:var(--v2-r-control);text-decoration:none;
  transition:background var(--v2-fast)}body.v2 .pd-idoc:last-child{border-bottom:0}body.v2 .pd-idoc:hover{background:var(--v2-bg)}body.v2 .pd-idoc-k{font-size:var(--v2-t-label);text-transform:uppercase;
  letter-spacing:.05em;font-weight:600;color:var(--v2-sub);white-space:nowrap;
  /* A backstop: if a future label is absurd, it ellipses rather than pushing
     the filename off the row. */
  overflow:hidden;text-overflow:ellipsis;max-width:26ch}body.v2 .pd-idoc.first .pd-idoc-k{color:var(--v2-accent-ink)}body.v2 .pd-idoc-n{color:var(--v2-ink);min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-size:var(--v2-t-body)}body.v2 .pd-idoc.first .pd-idoc-n{font-weight:600}body.v2 .pd-idoc:hover .pd-idoc-n{text-decoration:underline}body.v2 .pd-idoc-s{font-family:var(--v2-mono);font-size:var(--v2-t-label);
  font-variant-numeric:tabular-nums;color:var(--v2-sub);white-space:nowrap}/* Narrow: the label goes on its own line rather than fighting for width. */
/* No subgrid: each row falls back to its own grid. The filenames stop
   sharing an edge, which is a downgrade and not a break. */@supports not (grid-template-columns:subgrid){body.v2 .pd-idocs{display:flex;flex-direction:column}body.v2 .pd-idoc{grid-template-columns:minmax(0,max-content) minmax(0,1fr) auto}
}@media (max-width:620px){body.v2 .pd-idocs{grid-template-columns:minmax(0,1fr) auto}body.v2 .pd-idoc-k{grid-column:1/-1;max-width:none}
}/* ── Notice type: what it is, and whether you can bid it ──────────────
   Ten types, and they are not variations on one idea. Four thousand of them
   are Awards — already decided. The colour answers "can I bid this" and the
   word answers "what is it", so a board reads without opening anything.

   Each is a filled pill with a border rather than colour alone, so the five
   states survive a colour-blind reader and a monochrome print. */body.v2 .v2-ntype{display:inline-block;font-size:var(--v2-t-label);font-weight:600;
  letter-spacing:.02em;padding:var(--v2-s0) var(--v2-s2);border-radius:var(--v2-r-full);
  border:1px solid currentColor;line-height:1.5;white-space:nowrap;
  max-width:100%;overflow:hidden;text-overflow:ellipsis}/* Open, and the only ones that are work you can win today. */body.v2 .v2-ntype.bid{color:var(--v2-accent-ink);background:var(--v2-accent-soft)}/* Coming — prepare, do not respond yet. */body.v2 .v2-ntype.prep{color:var(--v2-info);background:var(--v2-info-soft)}/* A capability statement, NOT a bid. Its own colour because treating one as
   a bid is the single most expensive misread on this screen. */body.v2 .v2-ntype.capab{color:var(--v2-warn);background:var(--v2-warn-soft)}/* Already gone. Deliberately the quietest thing on the card. */body.v2 .v2-ntype.closed{color:var(--v2-sub);background:var(--v2-bg);
  border-color:var(--v2-line2)}/* Sole source — usually skip. */body.v2 .v2-ntype.skip{color:var(--v2-bad);background:var(--v2-bad-soft)}/* Neither: read it and move on. */body.v2 .v2-ntype.info{color:var(--v2-sub);background:var(--v2-bg);
  border-color:var(--v2-line2)}body.v2 .pd-card .v2-ntype{align-self:flex-start}/* ── The balance plan: 60 one-time / 40 recurring ─────────────────────
   One bar, two segments, read left to right. Not a donut: the question is
   "how far off the line are we", and a straight bar against a marked target
   answers that without arithmetic. */body.v2 .bal-cols{display:grid;gap:var(--v2-s4);
  grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}body.v2 .bal-col{background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);padding:var(--v2-s4)}body.v2 .bal-col > label{display:block;font-size:var(--v2-t-label);font-weight:600;
  letter-spacing:.05em;text-transform:uppercase;color:var(--v2-sub);
  margin-bottom:var(--v2-s2)}body.v2 .bal-split{display:flex;align-items:baseline;gap:var(--v2-s1);flex-wrap:wrap;
  margin-bottom:var(--v2-s2)}body.v2 .bal-split b{font-family:var(--v2-mono);font-variant-numeric:tabular-nums;
  font-size:var(--v2-t-say);color:var(--v2-ink);letter-spacing:-.02em}body.v2 .bal-split span{font-size:var(--v2-t-label);color:var(--v2-sub);
  margin-right:var(--v2-s3)}body.v2 .bal-bar{display:flex;height:9px;border-radius:var(--v2-r-full);
  overflow:hidden;background:var(--v2-line);position:relative}body.v2 .bal-bar i{display:block;height:100%}body.v2 .bal-bar .once{background:var(--v2-ink)}body.v2 .bal-bar .recur{background:var(--v2-accent)}/* The target, marked ON the bar at 60%. The gap between the segment edge and
   this line IS the number the paragraph underneath puts into words. */body.v2 .bal-bar::after{content:"";position:absolute;left:60%;top:-3px;bottom:-3px;
  width:2px;background:var(--v2-bad);border-radius:var(--v2-r-control)}body.v2 .bal-bar.empty::after{display:none}body.v2 .bal-fig{display:flex;justify-content:space-between;gap:var(--v2-s3);
  margin-top:var(--v2-s1h);font-family:var(--v2-mono);font-variant-numeric:tabular-nums;
  font-size:var(--v2-t-label);color:var(--v2-sub)}body.v2 .bal-col .pd-hint{margin-top:var(--v2-s2)}/* ── What the board is not showing ────────────────────────────────────
   A filter that hides without saying so is indistinguishable from a mirror
   that is missing rows. This states the count and the way back, on every
   search, including when the count is zero. */


/* Showing them is the unusual state, so it is marked rather than silent. */
/* ── Pager ────────────────────────────────────────────────────────────
   Real pages. The mirror holds 11,689 open notices once the decided ones are
   hidden — 234 pages at fifty — so the numbers are a window around where you
   are with the ends always reachable, and the count says which rows these
   are rather than only how many. */

body.v2 .src-count{font-family:var(--v2-mono);font-variant-numeric:tabular-nums;
  font-size:var(--v2-t-label);color:var(--v2-sub)}body.v2 .src-pg{font:inherit;font-family:var(--v2-mono);font-variant-numeric:tabular-nums;
  font-size:var(--v2-t-label);min-width:30px;padding:var(--v2-s1) var(--v2-s1h);cursor:pointer;
  border:1px solid var(--v2-line2);background:var(--v2-panel);color:var(--v2-sub);
  border-radius:var(--v2-r-control);transition:all var(--v2-fast)}body.v2 .src-pg:hover:not(:disabled){border-color:var(--v2-accent);color:var(--v2-accent-ink)}body.v2 .src-pg.on{background:var(--v2-ink);border-color:var(--v2-ink);color:var(--v2-panel);
  font-weight:600}body.v2 .src-pg:disabled{opacity:.5;cursor:default}body.v2 .src-gap{color:var(--v2-sub);padding:0 var(--v2-s0);font-size:var(--v2-t-label)}body.v2 .src-per{display:inline-flex;align-items:center;gap:var(--v2-s1h);
  font-size:var(--v2-t-label);color:var(--v2-sub);margin-left:var(--v2-s3)}body.v2 .src-per select{font:inherit;font-size:var(--v2-t-label);padding:var(--v2-s0) var(--v2-s1h);
  border:1px solid var(--v2-line2);border-radius:var(--v2-r-control);
  background:var(--v2-panel);color:var(--v2-ink)}

/* ── Submittals against the monthly goal ──────────────────────────────
   One row per desk. The bar is progress;the tick on it is where the month
   should be by today — so "12 of 50" on the 3rd and on the 28th stop looking
   like the same number. Amber means behind the PACE,not behind the goal:
   being 45 short on the 5th is fine and colouring it red teaches people to
   ignore the colour. */
body.v2 .sub-rows{display:flex;flex-direction:column;gap:var(--v2-s1h)}body.v2 .sub-row{display:grid;grid-template-columns:minmax(0,10rem) minmax(0,1fr) auto;
  gap:var(--v2-s3);align-items:center}body.v2 .sub-who{font-size:var(--v2-t-body);color:var(--v2-ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}body.v2 .sub-n{font-family:var(--v2-mono);font-variant-numeric:tabular-nums;
  font-size:var(--v2-t-body);color:var(--v2-ink);font-weight:600}body.v2 .sub-n em{font-style:normal;color:var(--v2-sub);font-weight:400}body.v2 .sub-row .v2-bar{position:relative;overflow:visible}body.v2 .sub-row .v2-bar i{border-radius:inherit}/* The pace marker. Drawn over the bar, not inside it, so a bar at 0% still
   shows where it should have been. */body.v2 .sub-row .v2-bar u{position:absolute;top:-3px;bottom:-3px;width:2px;
  background:var(--v2-ink);opacity:.45;border-radius:var(--v2-r-control);text-decoration:none}/* ── The scoreboard table ─────────────────────────────────────────── */

/* ═══ D21 · THE SURFACES THAT NEVER GOT THE TYPEFACE ══════════════════
   The blocks above — the SOP engine's scoreboard and work list, the CFA
   surfaces, the call script — were written with literal colours and literal
   pixel sizes before the token scale existed. The colours are tokens now;this gives them the rest of the language.

   They are not scoped to body.v2 because they never were,and body.v2 is
   unconditional. Keeping the selectors as they are means these rules keep
   matching the markup exactly as before — the change is what they paint
   with,not what they paint. */


body.v2 .sope-score{border-radius:var(--v2-r-surface);overflow:hidden;
  font-size:var(--v2-t-body)}body.v2 .sope-score th{font-family:var(--v2-display);font-size:var(--v2-t-label);
  font-weight:600;letter-spacing:.04em;background:var(--v2-bg)}body.v2 .sope-score td{vertical-align:middle}/* Targets and results are compared down a column, so they are tabular. */body.v2 .sope-score td.n,body.v2 .sope-score td.t{font-family:var(--v2-mono);
  font-variant-numeric:tabular-nums;letter-spacing:-.02em}body.v2 .sope-scorewrap{border-radius:var(--v2-r-surface)}/* ── Stats, folds, work rows, notes ───────────────────────────────── */body.v2 .sope-stats b{font-family:var(--v2-mono);font-variant-numeric:tabular-nums;
  font-size:var(--v2-t-say);letter-spacing:-.02em;color:var(--v2-ink)}body.v2 .sope-stats span{font-size:var(--v2-t-label)}body.v2 .sope-note{font-size:var(--v2-t-body);color:var(--v2-sub);line-height:1.6}body.v2 .sope-fold > summary{font-family:var(--v2-display);font-weight:600;
  font-size:var(--v2-t-body);cursor:pointer;color:var(--v2-ink)}body.v2 .sope-item{font-size:var(--v2-t-body);line-height:1.5}body.v2 .sope-row-t{font-size:var(--v2-t-body);color:var(--v2-ink)}body.v2 .sope-row-m{font-size:var(--v2-t-label);color:var(--v2-sub)}/* ── Key/value, the most repeated pair in the app ─────────────────── */body.v2 .pd-kv{font-size:var(--v2-t-body);padding:var(--v2-s1h) 0;
  border-bottom:1px solid var(--v2-line);align-items:baseline}body.v2 .pd-kv:last-child{border-bottom:0}
/* The markup is <span>label</span><b>value</b>, and the value is pushed right
   by margin-left:auto. I first wrote this the other way round — styling <b>
   as the label — which would have rendered every VALUE in the app uppercase
   and grey. Rendering it is what showed that;the rule read fine. */
body.v2 .pd-kv > span{font-size:var(--v2-t-label);letter-spacing:.04em;
  text-transform:uppercase;color:var(--v2-sub);font-weight:600}body.v2 .pd-kv > b{font-size:var(--v2-t-body);font-weight:500;color:var(--v2-ink);
  text-align:right}body.v2 .pd-kv > b.ok{color:var(--v2-ok)}body.v2 .pd-kv > b.no{color:var(--v2-bad)}body.v2 .pd-fact{font-size:var(--v2-t-body);color:var(--v2-ink)}/* ── Plain list rows ──────────────────────────────────────────────── */body.v2 .pd-lines{border:1px solid var(--v2-line);border-radius:var(--v2-r-surface)}body.v2 .pd-line{font-size:var(--v2-t-body);color:var(--v2-sub);line-height:1.6}body.v2 .pd-line-m{font-size:var(--v2-t-label);color:var(--v2-sub)}/* ── Chips and the deadline pill ──────────────────────────────────── */body.v2 .pd-chip{font-size:var(--v2-t-label);font-weight:500;
  border-radius:var(--v2-r-full);padding:var(--v2-s0) var(--v2-s2);border:1px solid var(--v2-line2);
  background:var(--v2-panel);color:var(--v2-sub)}body.v2 .pd-chip.ok{color:var(--v2-ok);background:var(--v2-ok-soft);
  border-color:color-mix(in srgb,var(--v2-ok) 30%,transparent)}body.v2 .pd-chip.red,body.v2 .pd-chip.bad{color:var(--v2-bad);background:var(--v2-bad-soft);
  border-color:color-mix(in srgb,var(--v2-bad) 30%,transparent)}/* Days remaining is a figure people compare card to card. */body.v2 .pd-dl{font-family:var(--v2-mono);font-variant-numeric:tabular-nums;
  font-size:var(--v2-t-label);font-weight:600;border-radius:var(--v2-r-full);
  padding:var(--v2-s0) var(--v2-s2)}/* ── The call screen: branches, objections, script ────────────────── */body.v2 .pd-branches{display:flex;gap:var(--v2-s2);flex-wrap:wrap}body.v2 .pd-branch{font:inherit;font-size:var(--v2-t-body);font-weight:600;
  padding:var(--v2-s2) var(--v2-s4);border-radius:var(--v2-r-control);cursor:pointer;
  border:1px solid var(--v2-line2);background:var(--v2-panel);color:var(--v2-sub);
  transition:all var(--v2-fast)}body.v2 .pd-branch:hover{border-color:var(--v2-accent);color:var(--v2-accent-ink)}body.v2 .pd-branch.yes{border-color:var(--v2-ok);color:var(--v2-ok)}body.v2 .pd-branch.yes:hover{background:var(--v2-ok-soft)}body.v2 .pd-branch.no{border-color:var(--v2-line2)}body.v2 .pd-obj{margin-top:var(--v2-s5);padding-top:var(--v2-s4);
  border-top:1px solid var(--v2-line)}body.v2 .pd-obj-q{font-family:var(--v2-display);font-weight:600;
  font-size:var(--v2-t-body);color:var(--v2-ink)}body.v2 .pd-obj-a{font-size:var(--v2-t-body);color:var(--v2-sub);line-height:1.6}body.v2 .pd-obj-w{font-size:var(--v2-t-label);color:var(--v2-warn)}body.v2 .pd-why{font-size:var(--v2-t-label);color:var(--v2-sub);line-height:1.5}body.v2 .pd-say{font-size:var(--v2-t-say);line-height:1.5;color:var(--v2-ink)}/* ── Search-result rows used across several screens ───────────────── */body.v2 .pd-srlist{display:flex;flex-direction:column;gap:var(--v2-s2)}body.v2 .pd-sr{border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);
  background:var(--v2-panel);padding:var(--v2-s2) var(--v2-s3);font-size:var(--v2-t-body)}body.v2 .pd-sr:hover{border-color:var(--v2-line2)}body.v2 .pd-sr-m{font-size:var(--v2-t-label);color:var(--v2-sub)}/* ── Intake sections and warnings ─────────────────────────────────── */body.v2 .pd-isec{margin-bottom:var(--v2-s4)}body.v2 .pd-iwarn{font-size:var(--v2-t-body);color:var(--v2-warn);
  background:var(--v2-warn-soft);border-left:3px solid var(--v2-warn);
  border-radius:var(--v2-r-control);padding:var(--v2-s2) var(--v2-s3);line-height:1.55}body.v2 .pd-srcwrap{background:none;border:0;padding:0}body.v2 .pd-soplink{font-family:var(--v2-mono);font-size:var(--v2-t-label);
  color:var(--v2-sub);text-decoration:none;border-bottom:1px solid transparent}body.v2 .pd-soplink:hover{color:var(--v2-accent-ink);border-bottom-color:var(--v2-accent)}body.v2 .pd-danger{color:var(--v2-bad)}body.v2 .pd-danger:hover{border-color:var(--v2-bad);background:var(--v2-bad-soft)}/* ── P3d · the sub candidate row at phone width ──────────────────────
   legacy.css already had `@media(max-width:760px){.pd-cand{grid-template-columns:minmax(0,1fr)}}`
   and it did nothing. Its own refresh layer,440 lines further down the same
   file,re-declares `.pd-cand{grid-template-columns:auto minmax(0,1.5fr) minmax(0,1fr) auto auto}`
   unconditionally — and later wins at equal specificity,media query or not.
   Measured at 375px: the row wanted 466px inside a 343px card.

   Stated here,in the sheet that loads last,because that is the only place a
   fix survives. The action row wraps as well: five buttons in a nowrap flex
   was the other 450-into-311. */
@media (max-width:760px){
  body.v2 .pd-cand{grid-template-columns:minmax(0,1fr);gap:var(--v2-s2)}
  body.v2 .pd-cand > *{min-width:0}
  body.v2 .pd-cand-a{justify-content:flex-start;flex-wrap:wrap}
}/* ═══ P4 · CHARTS ═════════════════════════════════════════════════════
   Inline SVG, no library. Every rule here is tokens only — the charts take
   the palette from the same place everything else does, so a change to the
   accent moves them with it.

   The constraint that shapes all of it: colour is never the only signal.
   Set every slice and bar to the same grey and these still read, because the
   label and the number are text next to the mark, not inside it. A proposal
   review gets printed. */body.v2 .v2-chart{display:flex;flex-direction:column;gap:var(--v2-s2)}/* the n, on every chart, always */body.v2 .v2-chart-n{font-size:var(--v2-t-label);color:var(--v2-sub);
  font-variant-numeric:tabular-nums;letter-spacing:.02em;
  border-top:1px solid var(--v2-line2);padding-top:var(--v2-s2)}/* refusing to draw is a state with its own look, not a blank */body.v2 .v2-chart-thin{border:1px dashed var(--v2-line2);border-radius:var(--v2-r-surface);
  padding:var(--v2-s4);font-size:var(--v2-t-body);color:var(--v2-sub);
  display:flex;flex-direction:column;gap:var(--v2-s0)}body.v2 .v2-chart-thin b{color:var(--v2-ink);font-weight:600}body.v2 .v2-chart-thin span{font-size:var(--t-sm)}/* ── horizontal bars ───────────────────────────────────────────────
   subgrid would be neater but the rows are siblings, not a grid, so the
   label column is a fixed basis and the number column is tabular — which is
   what keeps the counts lined up as they change. */body.v2 .v2-cbar{display:flex;align-items:center;gap:var(--v2-s3)}body.v2 .v2-cbar-l{flex:0 0 clamp(96px,28%,180px);font-size:var(--t-sm);color:var(--v2-sub);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}body.v2 .v2-cbar-t{flex:1;min-width:0;height:10px;background:var(--v2-line2);
  border-radius:var(--v2-r-full);overflow:hidden}body.v2 .v2-cbar-t i{display:block;height:100%;background:var(--v2-accent);
  border-radius:var(--v2-r-full);min-width:2px}body.v2 .v2-cbar-n{flex:0 0 3.5ch;text-align:right;font-family:var(--v2-mono);
  font-size:var(--t-sm);font-variant-numeric:tabular-nums;color:var(--v2-ink);font-weight:600}body.v2 .v2-cbar.t-ok i{background:var(--v2-ok-dot)}body.v2 .v2-cbar.t-warn i{background:var(--v2-warn-dot)}body.v2 .v2-cbar.t-bad i{background:var(--v2-bad-dot)}/* tone also changes the LABEL weight, so the ranking survives greyscale */body.v2 .v2-cbar.t-bad .v2-cbar-l,body.v2 .v2-cbar.t-warn .v2-cbar-l{color:var(--v2-ink);font-weight:600}/* ── donut ─────────────────────────────────────────────────────────── */body.v2 .v2-donutwrap{display:grid;grid-template-columns:auto minmax(0,1fr);
  gap:var(--v2-s4);align-items:center}body.v2 .v2-donutwrap .v2-chart-n{grid-column:1/-1}body.v2 .v2-donut{width:116px;height:116px;flex:none}body.v2 .v2-slice-track{stroke:var(--v2-line2)}body.v2 .v2-donut-holder{position:relative;width:116px;height:116px;flex:none}body.v2 .v2-donut-mid{position:absolute;inset:0;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:var(--v2-s0);pointer-events:none}body.v2 .v2-donut-mid b{font-family:var(--v2-mono);font-size:var(--v2-t-title);font-weight:700;
  color:var(--v2-ink);font-variant-numeric:tabular-nums;line-height:1}body.v2 .v2-donut-mid span{font-size:var(--v2-t-label);color:var(--v2-sub);
  letter-spacing:.06em;text-transform:uppercase;line-height:1}/* Six steps down one hue rather than six hues: a stage is not a category,
   it is a POSITION, and a ramp says that where a rainbow does not. It also
   greyscales into six distinct tones, which a rainbow does not. */body.v2 .v2-slice.s0{stroke:var(--v2-accent-ink)}body.v2 .v2-slice.s1{stroke:var(--v2-accent)}body.v2 .v2-slice.s2{stroke:var(--v2-ok-dot)}body.v2 .v2-slice.s3{stroke:var(--v2-warn-dot)}body.v2 .v2-slice.s4{stroke:var(--v2-info-dot)}body.v2 .v2-slice.s5{stroke:var(--v2-faint)}body.v2 .v2-legend{list-style:none;margin:0;padding:0;display:flex;
  flex-direction:column;gap:var(--v2-s1);min-width:0}body.v2 .v2-legend li{display:flex;align-items:baseline;gap:var(--v2-s2);
  font-size:var(--t-sm);min-width:0}body.v2 .v2-legend li::before{content:"";width:9px;height:9px;border-radius:2px;
  flex:none;background:var(--v2-line);align-self:center}body.v2 .v2-legend li.s0::before{background:var(--v2-accent-ink)}body.v2 .v2-legend li.s1::before{background:var(--v2-accent)}body.v2 .v2-legend li.s2::before{background:var(--v2-ok-dot)}body.v2 .v2-legend li.s3::before{background:var(--v2-warn-dot)}body.v2 .v2-legend li.s4::before{background:var(--v2-info-dot)}body.v2 .v2-legend li.s5::before{background:var(--v2-faint)}body.v2 .v2-legend-k{flex:1;min-width:0;color:var(--v2-sub);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}body.v2 .v2-legend b{font-family:var(--v2-mono);font-variant-numeric:tabular-nums;
  color:var(--v2-ink);font-weight:600}body.v2 .v2-legend em{font-style:normal;font-size:var(--v2-t-label);color:var(--v2-sub);
  font-variant-numeric:tabular-nums;flex:0 0 3.5ch;text-align:right}/* ── sparkline ─────────────────────────────────────────────────────── */body.v2 .v2-spark{width:100%;height:56px;display:block}body.v2 .v2-spark-l{fill:none;stroke:var(--v2-accent);stroke-width:1.5;
  vector-effect:non-scaling-stroke;stroke-linejoin:round;stroke-linecap:round}body.v2 .v2-spark-a{fill:var(--v2-accent-soft);stroke:none}body.v2 .v2-spark-p{fill:var(--v2-accent-ink)}body.v2 .v2-spark-x{display:flex;align-items:baseline;gap:var(--v2-s2);
  font-size:var(--v2-t-label);color:var(--v2-sub)}body.v2 .v2-spark-x b{margin-left:auto;font-family:var(--v2-mono);font-size:var(--v2-t-entity);
  color:var(--v2-ink);font-variant-numeric:tabular-nums}body.v2 .v2-spark-x span:last-child{margin-left:0}@media (max-width:640px){body.v2 .v2-donutwrap{grid-template-columns:minmax(0,1fr);justify-items:start}body.v2 .v2-cbar-l{flex-basis:88px}
}@media (prefers-reduced-motion:reduce){body.v2 .v2-cbar-t i{transition:none}
}/* Two charts side by side above the board, one column on a phone. */body.v2 .v2-charts{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  gap:var(--v2-s4);align-items:start}@media (max-width:860px){body.v2 .v2-charts{grid-template-columns:minmax(0,1fr)} }/* A zero bar draws NO fill — a 2px stub reads as "a little", which is the one
   thing it must not say. The track and the 0 carry the row instead. */body.v2 .v2-cbar.zero .v2-cbar-l,body.v2 .v2-cbar.zero .v2-cbar-n{color:var(--v2-sub);font-weight:400}body.v2 .v2-cbar.zero .v2-cbar-t{background:var(--v2-line2);opacity:.6}/* An absence is not a time bucket: "No date" is hatched, not tinted, so it
   cannot be mistaken for "later" at a glance or in greyscale. */body.v2 .v2-cbar.t-none i{background:repeating-linear-gradient(135deg,
  var(--v2-faint) 0 3px,transparent 3px 6px)}/* ═══ P5 · FOCUS AND MOTION ═══════════════════════════════════════════
   Measured before writing this: of 56 focusable elements on the Pipeline,
   THREE showed a visible focus ring. Six :focus-visible rules existed in the
   whole app. A keyboard user could tab through the board and never be able to
   see where they were.

   One rule fixes all of it, because :focus-visible is exactly the selector
   for "the browser thinks this user needs to see focus" — it fires for
   keyboard and assistive tech and stays out of the way of a mouse click.

   outline, not box-shadow: an outline follows border-radius on every current
   browser, is not clipped by overflow:hidden the way a shadow is, and
   survives forced-colors mode, where box-shadow is dropped entirely. The
   offset keeps it off the control's own border so it reads on a chip as well
   as on a card. */body.v2 :focus-visible{outline:2px solid var(--v2-accent-ink);outline-offset:2px}/* On a dark or accent-filled surface the ink ring disappears into the fill,
   so those get the light side of the pair instead. */
/* Only surfaces that are actually FILLED dark. `.pd-card` was in this list
   on the assumption that a stage-tinted card is a tinted surface — it is not,
   the tint is a 3px bar on its left edge and the card itself is white, so the
   ring came out white on white. Measured with a real arrow-key press:
   outline was rgb(255,255,255) on a white card, which is no ring at all. */body.v2 .pd-save:focus-visible,body.v2 .pd-btn:not(.ghost):not(.sm):focus-visible,body.v2 .fab:focus-visible,body.v2 .qadd:focus-visible{
  outline-color:var(--v2-panel);outline-offset:-4px}/* Anything scrollable is focusable for keyboard scrolling, and a ring around
   a whole scrolling region is noise — it gets an inset one instead. */body.v2 .pd-board:focus-visible,body.v2 .pd-dtabs:focus-visible,body.v2 .pd-tablewrap:focus-visible{outline-offset:-2px}/* ── prefers-reduced-motion ────────────────────────────────────────
   46 transition rules and 4 animations were declared against 2 guards. This
   is the blanket: it does not delete motion, it collapses it to effectively
   instant, which is what the media query asks for. `scroll-behavior:auto`
   matters as much as the rest — a smooth programmatic scroll is the one that
   actually makes people ill. */@media (prefers-reduced-motion:reduce){body.v2 *,body.v2 *::before,body.v2 *::after{
    animation-duration:.01ms !important;animation-iteration-count:1 !important;
    transition-duration:.01ms !important;scroll-behavior:auto !important}
}/* ── P5 · the skip link ───────────────────────────────────────────────
   Off-screen rather than display:none or visibility:hidden — both of those
   take an element out of the focus order entirely, which would make a skip
   link that can never be reached. Clip-based hiding keeps it focusable.

   On focus it becomes a real control at the top-left, above everything. A
   skip link you cannot SEE once you have tabbed to it is the same as not
   having one: you press Tab, nothing appears to happen, and you conclude the
   page is broken. */.cc-skip{position:fixed;top:0;left:0;z-index:10000;
  width:1px;height:1px;margin:-var(--v2-s0);padding:0;border:0;overflow:hidden;
  clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.cc-skip:focus{width:auto;height:auto;margin:0;clip:auto;clip-path:none;
  /* R3b · `color:#fff` on an INK fill is white-on-white once --v2-ink is the
     dark theme's off-white: measured 1.14:1. And this is the skip link — the
     first thing a keyboard user touches on every page load, invisible until
     it is focused, so no resting-state sweep can see it. The ground inverts
     with the theme; white does not. */
  padding:var(--v2-s3) var(--v2-s4);background:var(--v2-ink,#171a1d);color:var(--v2-bg,#fff);
  font:600 var(--fs-body,13px)/1 Inter,system-ui,sans-serif;text-decoration:none;
  border-bottom-right-radius:var(--rad-surface,8px);
  outline:2px solid var(--v2-accent,#2eb8a8);outline-offset:-4px}/* main takes focus from the skip link and must not draw a ring for it —
   the ring belongs on the thing you tabbed TO next, not on the whole page. */body.v2 main:focus{outline:none}body.v2 main:focus-visible{outline:none}/* Visually hidden, still in the accessibility tree. display:none and
   visibility:hidden both remove an element from that tree, so a description
   written with either is a description nobody can hear. */.sr-only{position:absolute;width:1px;height:1px;margin:-var(--v2-s0);padding:0;
  overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}

/* ═══════════════════════════════════════════════════════════════════════
   R1 · THE DARK THEME — a second token scope, not a fifth cascade layer
   ═══════════════════════════════════════════════════════════════════════
   Five phases of token work are what make this small. Every colour in the
   app reaches the screen through --v2-*;--pd-*,--fs-*,--rad-* and the
   shell family are all remapped from it. So a theme is exactly this: the
   same names,different values. Nothing below overrides a RULE — it only
   redefines the source tokens,which is why it cannot drift from the light
   theme the way an override stack would.

   Scoped to html[data-theme="dark"] rather than a body class so it applies
   before first paint,including to the boot veil. The attribute is set by
   a tiny inline script from localStorage,so there is no flash of the light
   theme on load.

   ── the direction ──────────────────────────────────────────────────
   One ground,three elevations: midnight page,slate panel,a raised step
   for what is selected or active. Depth is a hairline and a change in
   value — no glass,no glow,no gradient on a resting surface. That is
   what keeps fourteen stages legible side by side.

   Cyan is a VERB: it means you can act here. Violet is only personal
   progression. Amber,red and green stay strictly semantic. Holding that
   line is what stops a dark interface becoming a light show.

   ── what inverts and what does not ─────────────────────────────────
   The semantics are identical,so the token NAMES do not move. What
   inverts is which end of each ramp they sit at: on white,-ink was the
   dark end of a hue and -soft was the pale end. On midnight,-ink is the
   LIGHT end and -soft is a dark tint of the same hue. Every pair below was
   measured against the surface it actually lands on,not assumed.
   ═══════════════════════════════════════════════════════════════════════ */

html[data-theme="dark"]{
  color-scheme:dark;              /* native scrollbars, form controls, caret */

  /* R3b · The shell ground, at the HTML level, because dark is now the
     default and something paints before body.v2 exists.
     `html.cc-booting::after` is a full-screen veil that reads `var(--bg)` —
     and --bg is remapped by `body.v2`, which does not apply to a pseudo
     element on <html>. So it resolved to :root's near-white and the dark app
     opened with a white sheet over it for up to four seconds: exactly the
     flash the inline theme script exists to prevent, moved one element up.
     body.v2's own remap still wins inside the app; this only covers what
     sits outside it. */
  --bg:hsl(215 46% 6%);
  --ink:hsl(210 20% 94%);
  --line:hsl(214 24% 24%);

  /* ── ground and elevation ──────────────────────────────────────── */
  --v2-bg:hsl(215 46% 6%);        /* #090F18 — the page */
  --v2-panel:hsl(214 39% 12%);    /* #121C29 — a resting panel */
  --v2-raised:hsl(213 39% 17%);   /* #1A293B — selected / active surface */

  /* ── text ──────────────────────────────────────────────────────── */
  --v2-ink:hsl(210 20% 94%);      /* off-white, 15.9:1 on the ground */
  --v2-sub:hsl(213 16% 72%);      /* cool grey, 8.1:1 on the ground */
  /* faint stays DECORATIVE here too. On midnight it reaches 3.9:1, which is
     better than it managed on white and still not enough for body text. The
     rule from P3 does not change because the theme did. */
  /* R31 · 52% → 58%. Measured across nine rooms on the live app: 454 text
     nodes failed WCAG AA, and 11 distinct colour/class pairs caused all of
     them. This one caused most. At 52% it is 4.58:1 on the page ground —
     a pass — but 4.15:1 on a PANEL, and almost everything in this app sits
     on a panel. The comment two hundred lines up calls this token
     "decorative only", and if that were true 4.15 would be fine; it is not
     true. It renders "Not stated", the nav section labels, the sidebar
     counts, the breadcrumb chevron and most hint text in the product.
     58% clears 4.5:1 on the ground, the panel AND the muted fill. */
  --v2-faint:hsl(215 12% 55%);   /* v3.css overrides — keep in step */

  /* ── hairlines ─────────────────────────────────────────────────── */
  --v2-line:hsl(214 24% 24%);     /* a border you can see */
  --v2-line2:hsl(214 30% 16%);    /* a muted fill, one step off the panel */

  /* ── cyan: the only colour that means "you can act here" ───────── */
  --v2-accent:hsl(190 90% 62%);       /* #45D7F5 */
  --v2-accent-ink:hsl(190 88% 74%);   /* text on the tint below */
  --v2-accent-soft:hsl(192 60% 15%);  /* the tint */
  --v2-accent-line:hsl(191 55% 28%);

  /* ── status: light ink, dark tint, dot at full strength ────────── */
  --v2-ok:hsl(160 58% 66%);   --v2-ok-soft:hsl(162 40% 13%);   --v2-ok-dot:hsl(160 55% 57%);
  --v2-warn:hsl(38 88% 70%);  --v2-warn-soft:hsl(35 45% 14%);  --v2-warn-dot:hsl(38 84% 65%);
  --v2-bad:hsl(355 90% 76%);  --v2-bad-soft:hsl(353 40% 15%);  --v2-bad-dot:hsl(355 83% 70%);
  --v2-info:hsl(210 92% 74%); --v2-info-soft:hsl(212 45% 15%); --v2-info-dot:hsl(210 90% 68%);
  --v2-ok-line:hsl(162 35% 26%);   --v2-warn-line:hsl(35 40% 26%);
  --v2-bad-line:hsl(353 38% 28%);  --v2-info-line:hsl(212 40% 28%);

  /* Reserved, and used nowhere else: personal progression only. */
  --v2-violet:hsl(247 100% 74%);      /* #8C7CFF */
  --v2-violet-soft:hsl(247 40% 18%);

  /* On midnight a shadow is nearly invisible, so elevation is carried by
     the raised surface and the hairline. These stay for overlays, where a
     shadow still separates a floating thing from the page behind it. */
  --v2-shadow-overlay:0 16px 48px hsl(215 60% 2% / .72);
  --v2-shadow-drag:0 10px 28px hsl(215 60% 2% / .6);
}/* The shell family and the three remapped families follow automatically —
   they are all var(--v2-*). Two things are not, and are stated here rather
   than left to chance. */html[data-theme="dark"] body,html[data-theme="dark"] body.v2{ background:var(--v2-bg); color:var(--v2-ink) }html[data-theme="dark"]::after{ background:var(--v2-bg) }   /* the boot veil */

/* Arena identity on midnight. The hue is the identity and does not move;what flips is which end of it is the text — the same inversion as the
   status families,for the same reason. */
html[data-theme="dark"] body{
  --govcon-ink:hsl(174 65% 62%);  --govcon-bg:hsl(174 45% 13%);
  --cfa-ink:hsl(14 80% 70%);      --cfa-bg:hsl(14 45% 15%);
  --school-ink:hsl(262 80% 78%);  --school-bg:hsl(262 40% 18%);
  --agency-ink:hsl(217 90% 74%);  --agency-bg:hsl(217 45% 16%);
  --content-ink:hsl(271 90% 78%); --content-bg:hsl(271 40% 18%);
  --product-ink:hsl(142 60% 62%); --product-bg:hsl(142 38% 13%);
  --personal-ink:hsl(350 90% 76%);--personal-bg:hsl(350 45% 16%);
  --self-ink:hsl(189 80% 62%);    --self-bg:hsl(189 45% 13%);
  --urgent:var(--v2-bad); --urgent-bg:var(--v2-bad-soft);
  --medium:var(--v2-warn); --medium-bg:var(--v2-warn-soft);
  --low:var(--v2-sub); --low-bg:var(--v2-line2);
}/* ── the one structural change the theme needs ─────────────────────
   On white, a panel is white on near-white and the hairline does the work.
   On midnight the panel is LIGHTER than the page, so the step in value is
   already doing it — and the same hairline then reads as a hard outline
   around every box. Softened, not removed: it still separates panels that
   touch. */html[data-theme="dark"] body.v2 .v2-block,html[data-theme="dark"] body.v2 .pd-panel,html[data-theme="dark"] body.v2 .stat,html[data-theme="dark"] body.v2 .card,html[data-theme="dark"] body.v2 .chartcard,html[data-theme="dark"] body.v2 .fmcard,html[data-theme="dark"] body.v2 .pd-card{ border-color:var(--v2-line2) }/* A selected or active surface steps up rather than lighting up. */html[data-theme="dark"] body.v2 .navitem.on,html[data-theme="dark"] body.v2 .pd-dtabs button.on,html[data-theme="dark"] body.v2 .tabs button.on{ background:var(--v2-raised) }/* ── level 1 · the phase strip ──────────────────────────────────────
   auto-fit rather than five fixed columns: at 1440 it is one row of five,
   at 375 it is a stack, and nothing in between needs its own breakpoint. */

/* ═══ R2 · THE LAYERED OPERATIONS BOARD ═══════════════════════════════
   Tokens only, so both themes follow without a second block. Flat resting
   surfaces, one hairline, a value step for what is selected — the same
   contract as everything else.

   The restraint here is deliberate and it is the brief's: one primary
   answer per screen. The overview answers "where is it piling up" and
   nothing else;the counts that qualify that answer are one line of small
   text{display:grid;gap:var(--v2-s3);margin-bottom:var(--v2-s5);
  grid-template-columns:repeat(auto-fit,minmax(min(100%,208px),minmax(0,1fr)))}

/* Selected is a VALUE step plus a bar, never a glow. The bar is the
   second signal, so the selection survives greyscale and a printout. */





/* Share of the queue, never green: a full bar here is a pile-up, and
   colouring it like an achievement would say the opposite of the truth. */




/* 2.72 light, 4.39 dark on --v2-faint — under AA in both. The stage list is
   the line that tells you Qualify MEANS Triage → Eligibility, which is the
   only thing on the card explaining what the phase actually contains. That is
   information, so it takes the information grey. */


body.v2 .ops-hidden{margin:-var(--v2-s2) 0 var(--v2-s3)}/* ── level 2 · one phase ────────────────────────────────────────────── */



body.v2 .ops-sub{font-size:var(--t-sm);color:var(--v2-sub)}




/* Two to four columns, never fourteen. Explicit counts rather than
   auto-fit: a phase's column count is known, and equal widths are what
   make two queues comparable at a glance. */body.v2 .ops-board{display:grid;gap:var(--v2-s3);align-items:start}


body.v2 .ops-col{min-width:0;background:var(--v2-bg);
  border:1px solid var(--v2-line2);border-radius:var(--v2-r-surface);
  padding:var(--v2-s3);display:flex;flex-direction:column;gap:var(--v2-s2)}body.v2 .ops-colh{display:flex;align-items:center;gap:var(--v2-s2);min-width:0}body.v2 .ops-colh b{font-size:var(--t-sm);font-weight:600;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}body.v2 .ops-n{margin-left:auto;font-family:var(--v2-mono);font-size:var(--v2-t-label);
  font-variant-numeric:tabular-nums;color:var(--v2-sub);
  background:var(--v2-line2);border-radius:var(--v2-r-full);padding:var(--v2-s0) var(--v2-s1h);flex:none}/* "owner only" in words. A padlock alone is a picture of a rule. */body.v2 .ops-lock{font-size:var(--v2-t-label);color:var(--v2-warn);
  background:var(--v2-warn-soft);border-radius:var(--v2-r-control);
  padding:var(--v2-s0) var(--v2-s1h);white-space:nowrap;flex:none}body.v2 .ops-sop{background:none;border:1px solid var(--v2-line2);
  border-radius:var(--v2-r-full);padding:var(--v2-s0) var(--v2-s1h);font:inherit;
  font-size:var(--v2-t-label);font-family:var(--v2-mono);color:var(--v2-sub);
  cursor:pointer;flex:none}body.v2 .ops-sop:hover{border-color:var(--v2-accent-line);color:var(--v2-accent-ink)}body.v2 .ops-cards{display:flex;flex-direction:column;gap:var(--v2-s2);min-width:0}body.v2 .ops-empty{font-size:var(--v2-t-label);color:var(--v2-faint);
  border:1px dashed var(--v2-line2);border-radius:var(--v2-r-control);
  padding:var(--v2-s3);text-align:center;margin:0}

/* ── phone: a board becomes a stack of stages ────────────────────────
   Columns side by side at 375 would be 80px wide. The stage stays a
   heading, so the grouping survives;only the geometry changes. */
@media (max-width:760px){
  body.v2 .ops-board.ops-c2,body.v2 .ops-board.ops-c3,
  body.v2 .ops-board.ops-c4{grid-template-columns:minmax(0,1fr)}
  body.v2 .ops-ph-st{display:none}
  body.v2 .ops-phasehead{gap:var(--v2-s2)}
}/* ═══ R3 · THE COMMAND CENTER ═════════════════════════════════════════
   One primary answer, three supporting panels, everything else a click
   away. The recommendation is the biggest thing on the screen because it
   is the only thing the screen is for — no profile card, no trophy, no
   stat band competing with it. */body.v2 .cc{display:flex;flex-direction:column;gap:var(--v2-s4)}/* ── the briefing: one line, never a panel ──────────────────────── */body.v2 .cc-brief{display:flex;align-items:baseline;gap:var(--v2-s3);
  flex-wrap:wrap;font-size:var(--t-sm);color:var(--v2-sub);margin:0;
  padding-bottom:var(--v2-s3);border-bottom:1px solid var(--v2-line2)}body.v2 .cc-brief b{font-family:var(--v2-display);font-size:var(--v2-t-entity);
  font-weight:600;color:var(--v2-ink);letter-spacing:-.01em}body.v2 .cc-brief .bad{color:var(--v2-bad);font-weight:600}body.v2 .cc-brieflink{margin-left:auto;color:var(--v2-accent-ink);
  font-weight:600;cursor:pointer;white-space:nowrap}body.v2 .cc-grid{display:grid;grid-template-columns:minmax(0,1fr) 300px;
  gap:var(--v2-s5);align-items:start}body.v2 .cc-main{display:flex;flex-direction:column;gap:var(--v2-s4);min-width:0}/* ── the recommendation ──────────────────────────────────────────
   The only surface in the app that takes the accent as a fill edge. It is
   allowed to be loud because there is exactly one of it. */body.v2 .cc-next{background:var(--v2-panel);border:1px solid var(--v2-line);
  border-left:3px solid var(--v2-accent);border-radius:var(--v2-r-surface);
  padding:var(--v2-s4) var(--v2-s5);display:flex;flex-direction:column;gap:var(--v2-s2)}body.v2 .cc-next-k{font-size:var(--v2-t-label);font-weight:700;letter-spacing:.09em;
  text-transform:uppercase;color:var(--v2-accent-ink)}body.v2 .cc-next h3{font-family:var(--v2-display);font-size:var(--v2-t-say);
  font-weight:700;letter-spacing:-.02em;margin:0;line-height:1.25;overflow-wrap:anywhere}body.v2 .cc-next-t{color:var(--v2-sub);font-weight:600}body.v2 .cc-next-w{font-size:var(--v2-t-body);color:var(--v2-ink);margin:0;max-width:64ch}body.v2 .cc-next-w b{color:var(--v2-sub);font-weight:600}body.v2 .cc-next-a{font-size:var(--t-sm);color:var(--v2-sub);margin:0;max-width:64ch}body.v2 .cc-next-f{display:flex;align-items:center;gap:var(--v2-s2);
  flex-wrap:wrap;margin-top:var(--v2-s2)}/* The rule that fired, always on screen. A recommendation that cannot say
   where it came from is an instruction. */body.v2 .cc-cite{font-family:var(--v2-mono);font-size:var(--v2-t-label);
  color:var(--v2-sub);border:1px solid var(--v2-line2);
  border-radius:var(--v2-r-full);padding:var(--v2-s0) var(--v2-s2);white-space:nowrap}body.v2 .cc-next-clear{border-left-color:var(--v2-ok)}body.v2 .cc-next-clear h3{font-size:var(--v2-t-title)}body.v2 .cc-next-clear p{font-size:var(--t-sm);color:var(--v2-sub);margin:0;max-width:64ch}/* ── the queue ───────────────────────────────────────────────────── */body.v2 .cc-then h4{font-family:var(--v2-display);font-size:var(--t-sm);
  font-weight:600;text-transform:uppercase;letter-spacing:.07em;
  color:var(--v2-sub);margin:0 0 var(--v2-s2);display:flex;gap:var(--v2-s2);align-items:baseline}/* --v2-faint is the decorative grey and it measures 2.72 on the light panel.
   "74 more" is not decoration — it is the size of the queue behind this list,
   and a reader who cannot make it out does not know whether they are looking
   at most of the work or a tenth of it. --v2-sub, which is the token for
   secondary INFORMATION, clears AA in both themes. */body.v2 .cc-then-n{font-family:var(--v2-mono);font-size:var(--v2-t-label);
  color:var(--v2-sub);text-transform:none;letter-spacing:0}body.v2 .cc-q{list-style:none;margin:0;padding:0;display:flex;
  flex-direction:column;gap:var(--v2-s0);background:var(--v2-line2);
  border:1px solid var(--v2-line2);border-radius:var(--v2-r-surface);overflow:hidden}body.v2 .cc-q button{display:grid;grid-template-columns:auto minmax(0,1fr);
  gap:var(--v2-s0) var(--v2-s3);width:100%;text-align:left;background:var(--v2-panel);
  border:0;padding:var(--v2-s3) var(--v2-s4);font:inherit;color:inherit;cursor:pointer}body.v2 .cc-q button:hover{background:var(--v2-raised,var(--v2-accent-soft))}body.v2 .cc-q-v{font-size:var(--t-sm);font-weight:700;color:var(--v2-accent-ink);white-space:nowrap}body.v2 .cc-q-t{font-size:var(--t-sm);font-weight:600;min-width:0;overflow-wrap:anywhere}body.v2 .cc-q-w{grid-column:2;font-size:var(--v2-t-label);color:var(--v2-sub);overflow-wrap:anywhere}/* ── the rail ────────────────────────────────────────────────────── */body.v2 .cc-rail{display:flex;flex-direction:column;gap:var(--v2-s4);min-width:0}body.v2 .cc-r{background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);padding:var(--v2-s4);min-width:0}body.v2 .cc-r h4{font-family:var(--v2-display);font-size:var(--t-sm);font-weight:600;
  margin:0 0 var(--v2-s2);display:flex;align-items:baseline;gap:var(--v2-s2)}body.v2 .cc-r-n{margin-left:auto;font-family:var(--v2-mono);
  font-variant-numeric:tabular-nums;color:var(--v2-sub)}body.v2 .cc-r-l{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--v2-s0)}body.v2 .cc-r-l button{display:block;width:100%;text-align:left;background:none;
  border:0;padding:var(--v2-s1) 0;font:inherit;font-size:var(--t-sm);color:inherit;
  cursor:pointer;min-width:0;overflow-wrap:anywhere;
  border-bottom:1px solid var(--v2-line2)}body.v2 .cc-r-l li:last-child button{border-bottom:0}body.v2 .cc-r-l button:hover{color:var(--v2-accent-ink)}body.v2 .cc-r-l em{display:block;font-style:normal;font-size:var(--v2-t-label);color:var(--v2-sub)}body.v2 .cc-more{background:none;border:0;padding:var(--v2-s1h) 0 0;font:inherit;
  font-size:var(--v2-t-label);font-weight:600;color:var(--v2-accent-ink);cursor:pointer}body.v2 .cc-none{font-size:var(--t-sm);color:var(--v2-sub);margin:0}body.v2 .cc-pace{font-size:var(--t-sm);color:var(--v2-sub);margin:0 0 var(--v2-s1h)}body.v2 .cc-pace b{font-family:var(--v2-mono);font-size:var(--v2-t-entity);
  color:var(--v2-ink);font-variant-numeric:tabular-nums}/* Where a number came from, under the number. */body.v2 .cc-src{font-size:var(--v2-t-label);color:var(--v2-sub);
  margin:var(--v2-s2) 0 0;padding-top:var(--v2-s2);border-top:1px solid var(--v2-line2)}@media (max-width:900px){body.v2 .cc-grid{grid-template-columns:minmax(0,1fr)}body.v2 .cc-next{padding:var(--v2-s4)}body.v2 .cc-q button{grid-template-columns:minmax(0,1fr)}body.v2 .cc-q-w{grid-column:1}
}/* ═══ R3b · APPEARANCE — the theme picker ══════════════════════════════
   Dark became the default in this release, so the app needs a way out of it
   that is not a URL parameter. Two options, each showing what it looks like:
   a swatch is the only honest label for a colour scheme, and the words beside
   it say WHEN you would want it rather than restating its name.

   The swatches are the real ground and panel values, hardcoded once here on
   purpose — a dark swatch has to stay dark while you are looking at it from
   the light theme, so it cannot take a token that flips with the theme. It is
   a picture OF a theme, not a thing wearing one. Every other colour in this
   block is a token. */








/* A near-white swatch on the light theme has no edge of its own. */
/* The tick is the selected state's second signal, because a border colour
   alone is colour-as-only-signal (system rule 2) and this control is a
   radiogroup where "which one is on" is the entire content. */


/* ═══ R5 · SOURCING, AS THE DESIGN DRAWS IT ════════════════════════════
   A result card in the design is three columns, not three stacked blocks:
   what it is on the left, what is known about it in the middle, when it is
   due and what you can do about it on the right. The markup already had all
   three — this is a layout change, and deliberately CSS-only, because every
   handler on this screen (srcView, srcSet, srcApply, srcIntake, srcPage) is
   load-bearing for a live SAM.gov integration and none of them should be
   touched to move a box.

   The source tabs become the design's pill row;the left edge of each card
   keeps the stage tint it already carries,which is what tells you at a
   glance that something is overdue. */
body.v2 .src-card{
  display:grid;gap:0 var(--v2-s4);
  grid-template-columns:minmax(0,1.25fr) minmax(0,1fr) auto;
  grid-template-areas:"head meta when" "desc meta when" "quote meta when" "foot foot when";
  align-items:start;padding:var(--v2-s4)}/* Priced RFQs: the sentence the government's range was read from. Its own
   row, because two paragraphs in the desc cell draw on top of each other. An
   unpriced card has no quote and the empty row takes no height. */body.v2 .src-quote{grid-area:quote;margin:var(--v2-s2) 0 0;font-size:var(--v2-t-body);
  color:var(--v2-sub);line-height:1.55;border-left:2px solid var(--v2-line2);padding-left:var(--v2-s3)}
/* The budget block: one row per claim, each labelled with what it is. The
   stated range is the accent; the forecast is info;"last paid" is quiet,because it is history and must not read as the budget. */
body.v2 .src-budget{display:grid;gap:var(--v2-s2);margin-top:var(--v2-s3)}body.v2 .bud-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--v2-s0) var(--v2-s3);min-width:0}body.v2 .bud-row.stated{border-left:2px solid var(--v2-accent);padding-left:var(--v2-s3);margin-left:calc(-1 * var(--v2-s3) - 2px)}body.v2 .bud-row.forecast{border-left:2px solid var(--v2-info);padding-left:var(--v2-s3);margin-left:calc(-1 * var(--v2-s3) - 2px)}body.v2 .bud-k{font-size:var(--v2-t-label);font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--v2-faint)}body.v2 .bud-v{font-weight:700;color:var(--v2-ink)}body.v2 .bud-row.none .bud-v{font-weight:600;color:var(--v2-sub)}body.v2 .bud-src,body.v2 .bud-note{font-size:var(--v2-t-small);color:var(--v2-faint)}body.v2 .bud-q{flex-basis:100%;font-size:var(--v2-t-small);color:var(--v2-sub);min-width:0;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}body.v2 .bud-paid{flex-basis:100%;display:grid;gap:var(--v2-s0);font-size:var(--v2-t-small);color:var(--v2-sub);min-width:0}body.v2 .bud-paid span{font-size:var(--v2-t-small);color:var(--v2-faint)}body.v2 .bud-row .pd-btn{margin-left:auto}
body.v2 .src-desc{grid-area:desc;margin:var(--v2-s2) 0 0;max-width:none;
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}body.v2 .src-card .v2-metagrid{grid-area:meta;grid-template-columns:minmax(0,1fr);
  gap:var(--v2-s2) 0;margin:0;align-self:start}
/* The deadline column: a number you can read across a page of fifty cards,
   with the date under it rather than the other way round. */



/* the meta list: label above value, one per row, as the design stacks it */body.v2 .src-card .v2-metagrid > div{display:grid;
  grid-template-columns:minmax(0,88px) minmax(0,1fr);gap:var(--v2-s3);align-items:baseline}body.v2 .src-card .v2-metagrid label{margin:0;white-space:nowrap}@media (max-width:1100px){body.v2 .src-card{grid-template-columns:minmax(0,1fr) auto;
    grid-template-areas:"head when" "desc when" "quote when" "meta when" "foot foot"}
}@media (max-width:680px){body.v2 .src-card{grid-template-columns:minmax(0,1fr);
    grid-template-areas:"head" "when" "desc" "quote" "meta" "foot"}


}/* the source row, as pills with icons */body.v2 .pd-srctabs button{display:inline-flex;align-items:center;gap:var(--v2-s2);padding:var(--v2-s2) var(--v2-s4)}body.v2 .pd-srctabs button i{display:grid;place-items:center;width:16px;height:16px;flex:0 0 16px}body.v2 .pd-srctabs button i svg{width:16px;height:16px;display:block}body.v2 .pd-srctabs button.on{background:var(--v2-accent-soft);
  border-color:var(--v2-accent);color:var(--v2-accent-ink);font-weight:600}/* R5 · The filter bar as a grid, so a field cannot be squeezed to nothing.
   As a flex row with wrap, the six fields shared whatever was left after the
   wide ones took theirs: at ~780px the keyword input measured about 30px and
   its label broke to "KEYWO / RD". Nothing flagged it, because a field
   crushed to a tenth of its width is not an overflow, is not a contrast
   failure and is not a missing name — it is just unusable.

   auto-fit with a floor means the row re-flows to fewer columns instead,
   which is what the design does at every width it shows. */body.v2 .pd-srcbar{display:grid;align-items:end;
  grid-template-columns:repeat(auto-fit,minmax(min(100%,190px),1fr));
  gap:var(--v2-s3) var(--v2-s4)}body.v2 .pd-srcf.grow{grid-column:span 2}@media (max-width:760px){body.v2 .pd-srcf.grow{grid-column:span 1} }body.v2 .pd-srcf input,body.v2 .pd-srcf select{width:100%;min-width:0}/* R5 · Operations: the section heads take a line icon and the panels take the
   design's proportions. The icon sits in a tinted square like the design's
   queue cards, which is what makes ten panels scannable rather than ten
   identical grey headings. */body.v2 .sope-sec-h{display:flex;align-items:center;gap:var(--v2-s2)}body.v2 .sope-ic{display:grid;place-items:center;width:30px;height:30px;flex:0 0 30px;
  border-radius:var(--v2-r-control);background:var(--v2-line2);color:var(--v2-accent-ink)}body.v2 .sope-ic svg{width:17px;height:17px;display:block}body.v2 .sope-sec-h b{margin-left:auto;font-family:var(--v2-display);
  font-size:var(--v2-t-say);font-weight:700;color:var(--v2-ink);line-height:1}/* ═══ R5 · PROJECTS, AS THE DESIGN DRAWS IT ════════════════════════════
   A card is a record: a logo tile and the name, then labelled rows, then one
   full-width way in. The pieces were all there and stacked as loose lines —
   a folder path, a repo link and a health bar with nothing saying which was
   which. */body.v2 .card.pj{display:flex;flex-direction:column;gap:var(--v2-s3);cursor:pointer}body.v2 .pj-head{display:flex;align-items:flex-start;gap:var(--v2-s3)}body.v2 .pj-logo{display:grid;place-items:center;width:40px;height:40px;flex:0 0 40px;
  border-radius:var(--v2-r-control);background:var(--v2-line2);color:var(--v2-accent-ink)}body.v2 .pj-logo svg{width:21px;height:21px;display:block}body.v2 .pj-name{min-width:0;flex:1 1 auto}body.v2 .pj-name h5{margin:0 0 var(--v2-s1);font-family:var(--v2-display);font-size:var(--v2-t-entity);
  font-weight:700;color:var(--v2-ink);overflow-wrap:anywhere}body.v2 .pj-rows{display:flex;flex-direction:column;gap:var(--v2-s0);
  background:var(--v2-line2);border:1px solid var(--v2-line2);
  border-radius:var(--v2-r-control);overflow:hidden}body.v2 .pj-row{display:grid;grid-template-columns:minmax(0,118px) minmax(0,1fr) auto;
  gap:var(--v2-s3);align-items:center;background:var(--v2-panel);padding:var(--v2-s2) var(--v2-s3)}body.v2 .pj-k{display:flex;align-items:center;gap:var(--v2-s2);font-size:var(--v2-t-label);
  color:var(--v2-sub);font-weight:600;white-space:nowrap}body.v2 .pj-k i{display:grid;place-items:center;width:15px;height:15px;flex:0 0 15px;color:var(--v2-faint)}body.v2 .pj-k i svg{width:15px;height:15px;display:block}body.v2 .pj-v{min-width:0;font-size:var(--v2-t-body);color:var(--v2-ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}body.v2 .pj-v .repolink{color:var(--v2-accent-ink);text-decoration:none}body.v2 .pj-v .repolink:hover{text-decoration:underline}body.v2 .pj-copy{display:grid;place-items:center;width:26px;height:26px;flex:0 0 26px;
  border:1px solid var(--v2-line);background:none;border-radius:var(--v2-r-control);
  color:var(--v2-sub);cursor:pointer}body.v2 .pj-copy:hover{border-color:var(--v2-accent);color:var(--v2-accent-ink)}body.v2 .pj-copy.ok{border-color:var(--v2-ok);color:var(--v2-ok)}body.v2 .pj-copy svg{width:14px;height:14px;display:block}/* the workload strip: a shape you read, not a number you decode */body.v2 .pj-load{display:flex;gap:var(--v2-s0);align-items:center}body.v2 .pj-load i{width:9px;height:14px;border-radius:2px;background:var(--v2-line);display:block}body.v2 .card.pj .wsbtn{width:100%;justify-content:center;margin-top:auto}/* A label column of 118px is right in the design, where a project card is
   about 420px wide in a two-column grid. Inside the three-column board it
   gets ~250px, and "myProjects/command-center" truncated to "myPr…" — which
   is not a path, it is the first four letters of one. Below that width the
   row stacks and the value takes the full card. */
/* Keyed to the CARD, not the viewport. The first version of this used a
   media query, which asks the wrong question: the value truncates because the
   card is 440px, and the card is 440px in a three-column board at 1440 just
   as it is at 1100. A container query asks about the box the text is
   actually in, which is the box that decides whether it fits. */body.v2 .card.pj{container-type:inline-size;container-name:pjcard}@container pjcard (max-width:430px){body.v2 .pj-row{grid-template-columns:minmax(0,1fr) auto;
    grid-template-areas:"k copy" "v v";row-gap:var(--v2-s0)}body.v2 .pj-k{grid-area:k}body.v2 .pj-v{grid-area:v;white-space:normal;overflow-wrap:anywhere}body.v2 .pj-copy{grid-area:copy}
}/* ═══ R6 · OPERATIONS, AS THE DESIGN DRAWS IT ══════════════════════════
   The page leads with one banner, then four counts, then four queues, then
   the detail panels. Before this it opened straight into ten grey panels of
   equal weight, which is a page with no first sentence. */
/* the featured SOP banner */body.v2 .sope-reg{display:grid;grid-template-columns:auto minmax(0,1fr) auto;
  gap:var(--v2-s4);align-items:center;padding:var(--v2-s4);
  background:var(--v2-panel);border:1px solid var(--v2-line);
  border-left:3px solid var(--v2-accent);border-radius:var(--v2-r-surface);
  margin-bottom:var(--v2-s4)}body.v2 .sope-reg-ic{display:grid;place-items:center;width:42px;height:42px;
  border-radius:var(--v2-r-control);background:var(--v2-accent-soft);color:var(--v2-accent-ink)}body.v2 .sope-reg-ic svg{width:22px;height:22px;display:block}body.v2 .sope-reg-t{min-width:0}body.v2 .sope-reg-t h3{margin:0;font-family:var(--v2-display);font-size:var(--v2-t-entity);
  font-weight:700;color:var(--v2-ink);display:flex;align-items:baseline;gap:var(--v2-s2);flex-wrap:wrap}body.v2 .sope-reg-m{font-size:var(--v2-t-label);font-weight:600;color:var(--v2-sub);
  letter-spacing:.04em}body.v2 .sope-reg-t h3 b{font-family:var(--v2-mono);font-size:var(--v2-t-body);color:var(--v2-ok)}body.v2 .sope-reg-t h3 b.warn{color:var(--v2-warn)}body.v2 .sope-reg-t p{margin:var(--v2-s1) 0 0;font-size:var(--v2-t-body);color:var(--v2-sub)}body.v2 .sope-reg-a{display:flex;gap:var(--v2-s2);flex:0 0 auto;flex-wrap:wrap}/* the four counts */body.v2 .ops-stats{display:grid;gap:var(--v2-s3);margin-bottom:var(--v2-s3);
  grid-template-columns:repeat(auto-fit,minmax(min(100%,210px),1fr))}body.v2 .ops-stat{display:grid;grid-template-columns:auto minmax(0,1fr) auto;
  grid-template-areas:"ic l go" "ic n go" "ic s go";gap:var(--v2-s0) var(--v2-s3);
  align-items:center;text-align:left;padding:var(--v2-s4);
  background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);cursor:pointer;font:inherit;color:var(--v2-ink)}body.v2 .ops-stat:hover{border-color:var(--v2-accent)}/* --v2-faint measured 2.54 on --line2. These are aria-hidden, but an icon
   nobody can see is not decoration, it is a smudge — the design shows them
   clearly. The information grey, which clears the non-text threshold in both
   themes. */body.v2 .ops-stat-ic{grid-area:ic;display:grid;place-items:center;width:38px;height:38px;
  border-radius:50%;background:var(--v2-line2);color:var(--v2-sub)}body.v2 .ops-stat-ic.live{background:var(--v2-accent-soft);color:var(--v2-accent-ink)}body.v2 .ops-stat-ic svg{width:19px;height:19px;display:block}body.v2 .ops-stat-l{grid-area:l;font-size:var(--v2-t-label);color:var(--v2-sub);font-weight:600}body.v2 .ops-stat b{grid-area:n;font-family:var(--v2-display);font-size:var(--v2-t-display);
  font-weight:800;line-height:1.05;color:var(--v2-ink)}/* A zero is good news here, not an absence — it stays legible but stops
   shouting, because four big zeros is the most common healthy state. */body.v2 .ops-stat b.zero{color:var(--v2-sub)}body.v2 .ops-stat-s{grid-area:s;font-size:var(--v2-t-label);color:var(--v2-sub)}body.v2 .ops-stat-go{grid-area:go;color:var(--v2-sub);font-size:var(--v2-t-say)}/* the four queues */body.v2 .ops-queues{display:grid;gap:var(--v2-s3);margin-bottom:var(--v2-s4);
  grid-template-columns:repeat(auto-fit,minmax(min(100%,230px),1fr))}body.v2 .ops-q{display:flex;flex-direction:column;gap:var(--v2-s2);
  padding:var(--v2-s4);background:var(--v2-panel);
  border:1px solid var(--v2-line);border-radius:var(--v2-r-surface)}body.v2 .ops-q-h{display:flex;align-items:center;gap:var(--v2-s2)}body.v2 .ops-q-ic{display:grid;place-items:center;width:30px;height:30px;flex:0 0 30px;
  border-radius:var(--v2-r-control);background:var(--v2-line2);color:var(--v2-accent-ink)}body.v2 .ops-q-ic svg{width:16px;height:16px;display:block}body.v2 .ops-q-h b{font-family:var(--v2-display);font-size:var(--v2-t-body);font-weight:700}body.v2 .ops-q-n{margin-left:auto;font-family:var(--v2-mono);font-size:var(--v2-t-body);
  color:var(--v2-sub);background:var(--v2-line2);border-radius:var(--v2-r-full);
  padding:var(--v2-s0) var(--v2-s2);font-weight:600}body.v2 .ops-q-n.live{background:var(--v2-accent-soft);color:var(--v2-accent-ink)}body.v2 .ops-q p{margin:0;font-size:var(--v2-t-label);color:var(--v2-sub);
  line-height:1.5;flex:1 1 auto}body.v2 .ops-q .pd-btn{align-self:flex-start}@media (max-width:700px){body.v2 .sope-reg{grid-template-columns:auto minmax(0,1fr);
    grid-template-areas:"ic t" "a a";row-gap:var(--v2-s3)}body.v2 .sope-reg-ic{grid-area:ic}body.v2 .sope-reg-t{grid-area:t}body.v2 .sope-reg-a{grid-area:a}
}/* ═══ R7 · HOME HEALTH, and the status dot that replaced the emoji ═════ */body.v2 .ops-health{margin-top:var(--v2-s4);padding:var(--v2-s4);
  background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface)}body.v2 .ops-health-h{display:flex;align-items:baseline;gap:var(--v2-s3);
  flex-wrap:wrap;margin-bottom:var(--v2-s3)}body.v2 .ops-health-h h3{margin:0;font-family:var(--v2-display);
  font-size:var(--v2-t-entity);font-weight:700;color:var(--v2-ink)}body.v2 .ops-health-h > span{font-size:var(--v2-t-label);color:var(--v2-sub);
  flex:1 1 220px;min-width:0}body.v2 .ops-health-g{display:grid;gap:var(--v2-s3);
  grid-template-columns:repeat(auto-fit,minmax(min(100%,190px),1fr))}body.v2 .ops-h{display:grid;grid-template-columns:auto minmax(0,1fr);
  grid-template-areas:"ic l" "ic n" "s s";gap:var(--v2-s0) var(--v2-s3);align-items:center;
  text-align:left;padding:var(--v2-s3);background:var(--v2-bg);
  border:1px solid var(--v2-line2);border-radius:var(--v2-r-control);
  cursor:pointer;font:inherit;color:var(--v2-ink)}body.v2 .ops-h:hover{border-color:var(--v2-accent)}body.v2 .ops-h-ic{grid-area:ic;display:grid;place-items:center;width:30px;height:30px;
  border-radius:var(--v2-r-control);background:var(--v2-line2);color:var(--v2-sub)}body.v2 .ops-h-ic svg{width:16px;height:16px;display:block}body.v2 .ops-h-l{grid-area:l;font-size:var(--v2-t-label);color:var(--v2-sub);font-weight:600}body.v2 .ops-h b{grid-area:n;font-family:var(--v2-display);font-size:var(--v2-t-say);
  font-weight:800;line-height:1.1;color:var(--v2-sub)}body.v2 .ops-h b.live{color:var(--v2-ink)}/* --v2-faint again, 2.72 on the light panel. This line is the DEFINITION of
   the metric above it — the whole reason the strip is readable without a
   tooltip — so it is information and takes the information grey. */body.v2 .ops-h-s{grid-area:s;font-size:var(--v2-t-label);color:var(--v2-sub);
  margin-top:var(--v2-s1);line-height:1.45}/* The RAG dot. It replaces 🟢 🟡 🔴 🔶, which ignored currentColor, printed as
   colour on a greyscale page and were read aloud as "large green circle"
   before the label that carried the meaning. Colour is never the only signal:
   every one of these sits immediately beside its own word. */body.v2 .sope-rag{display:inline-block;width:9px;height:9px;border-radius:50%;
  background:var(--v2-faint);margin-right:var(--v2-s1h);flex:0 0 9px;vertical-align:baseline}body.v2 .sope-rag.ok{background:var(--v2-ok)}body.v2 .sope-rag.warn{background:var(--v2-warn)}body.v2 .sope-rag.bad{background:var(--v2-bad)}body.v2 .tf-ico svg{width:15px;height:15px;display:block}body.v2 .tf-ico{display:grid;place-items:center;width:22px;height:22px;color:var(--v2-sub)}/* The padlock is an icon now, not a 🔒. It sits inline beside a heading or a
   stage name, so it takes the line's own colour and size rather than the
   font's idea of an emoji. */body.v2 .pd-lockdot{display:inline-grid;place-items:center;width:1em;height:1em;
  vertical-align:-.12em;color:var(--v2-sub);opacity:.85}body.v2 .pd-lockdot svg{width:1em;height:1em;display:block}/* ═══ R8 · THE PIPELINE ════════════════════════════════════════════════ */
/* the four standing indicators, wide, icon on the left */body.v2 .ops-kpis{display:grid;gap:var(--v2-s3);margin-bottom:var(--v2-s4);
  grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr))}body.v2 .ops-kpi{display:flex;align-items:center;gap:var(--v2-s3);text-align:left;
  padding:var(--v2-s4);background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);cursor:pointer;font:inherit;color:var(--v2-ink)}body.v2 .ops-kpi:hover{border-color:var(--v2-accent)}body.v2 .ops-kpi[aria-pressed="true"]{border-color:var(--v2-accent);
  box-shadow:inset 0 0 0 1px var(--v2-accent)}body.v2 .ops-kpi-ic{display:grid;place-items:center;width:44px;height:44px;flex:0 0 44px;
  border-radius:var(--v2-r-control);background:var(--v2-line2);color:var(--v2-sub)}body.v2 .ops-kpi-ic.on{background:var(--v2-accent-soft);color:var(--v2-accent-ink)}body.v2 .ops-kpi-ic svg{width:21px;height:21px;display:block}body.v2 .ops-kpi-b{min-width:0;display:flex;flex-direction:column}body.v2 .ops-kpi-l{font-size:var(--v2-t-label);letter-spacing:.09em;text-transform:uppercase;
  color:var(--v2-sub);font-weight:700}body.v2 .ops-kpi b{font-family:var(--v2-display);font-size:var(--v2-t-display);
  font-weight:800;line-height:1.05;color:var(--v2-sub)}body.v2 .ops-kpi b.live{color:var(--v2-ink)}body.v2 .ops-kpi-s{font-size:var(--v2-t-label);color:var(--v2-sub);line-height:1.4}/* the stage row */
/* min-width:0 on both, or the chip row refuses to shrink below the sum of
   its chips — measured 1541px inside a 360px phone, which html's
   overflow-x:hidden then CLIPPED, so the row was unreachable rather than
   scrollable. Fourth time a flex child without min-width:0 has done this. */body.v2 .ops-chiprow{display:flex;align-items:flex-start;gap:var(--v2-s4);
  margin:var(--v2-s3) 0 var(--v2-s4);min-width:0;max-width:100%}body.v2 .ops-chips{display:flex;gap:var(--v2-s1h);overflow-x:auto;scrollbar-width:thin;
  padding-bottom:var(--v2-s1);flex:1 1 auto;min-width:0}body.v2 .ops-chip{display:inline-flex;align-items:center;gap:var(--v2-s2);flex:0 0 auto;
  font:inherit;font-size:var(--v2-t-body);padding:var(--v2-s1h) var(--v2-s3);cursor:pointer;
  background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-full);color:var(--v2-sub);white-space:nowrap}body.v2 .ops-chip:hover{border-color:var(--v2-accent);color:var(--v2-ink)}body.v2 .ops-chip.on{border-color:var(--v2-accent);background:var(--v2-accent-soft);
  color:var(--v2-accent-ink);font-weight:600}body.v2 .ops-chip b{font-family:var(--v2-mono);font-size:var(--v2-t-label);
  background:var(--v2-line2);border-radius:var(--v2-r-full);padding:var(--v2-s0) var(--v2-s1h);color:var(--v2-ink)}/* --v2-bg on the light theme's 45% teal is 2.39. The count inside an active
   chip is the number somebody is reading, so it takes the ink that does not
   flip with the theme — the fill under it does not flip either. */body.v2 .ops-chip.on b{background:var(--v2-accent);color:var(--on-bright)}body.v2 .ops-chip-lock{display:grid;place-items:center;width:13px;height:13px;opacity:.75}body.v2 .ops-chip-lock svg{width:13px;height:13px;display:block}/* the stage dot takes the same tint the column and the card edge use, so the
   chip, the column header and the card all agree about which stage this is */body.v2 .ops-chip-dot{width:8px;height:8px;border-radius:50%;flex:0 0 8px;
  background:var(--v2-accent);display:block}body.v2 .ops-closed{flex:0 0 auto}body.v2 .ops-closed > summary{list-style:none;cursor:pointer;font-size:var(--v2-t-body);
  color:var(--v2-sub);padding:var(--v2-s1h) var(--v2-s3);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-full);background:var(--v2-panel);white-space:nowrap}body.v2 .ops-closed > summary::-webkit-details-marker{display:none}body.v2 .ops-closed > summary b{font-family:var(--v2-mono);margin-left:var(--v2-s1h);color:var(--v2-ink)}body.v2 .ops-closed-b{display:flex;gap:var(--v2-s1h);flex-wrap:wrap;margin-top:var(--v2-s2);
  max-width:min(340px,100%);justify-content:flex-end;min-width:0}body.v2 .ops-chip.sm{font-size:var(--v2-t-label);padding:var(--v2-s1) var(--v2-s2)}/* the board */body.v2 .ops-board2{display:flex;gap:var(--v2-s3);overflow-x:auto;padding-bottom:var(--v2-s3);
  scrollbar-width:thin;align-items:flex-start}body.v2 .ops-col{flex:0 0 302px;width:302px;min-width:0;background:var(--v2-bg);
  border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);
  display:flex;flex-direction:column;max-height:none}body.v2 .ops-col.on{border-color:var(--v2-accent)}body.v2 .ops-col.droptarget{border-color:var(--v2-accent);background:var(--v2-accent-soft)}body.v2 .ops-colh{display:flex;align-items:center;gap:var(--v2-s2);padding:var(--v2-s3);
  border-bottom:1px solid var(--v2-line)}body.v2 .ops-colh b{font-family:var(--v2-display);font-size:var(--v2-t-body);
  font-weight:700;color:var(--v2-ink);min-width:0;overflow:hidden;text-overflow:ellipsis}body.v2 .ops-colh .ops-n{margin-left:auto;font-family:var(--v2-mono);
  font-size:var(--v2-t-label);color:var(--v2-sub)}body.v2 .ops-cards{padding:var(--v2-s3);display:flex;flex-direction:column;gap:var(--v2-s3)}/* The board is never taller than the screen. Columns used to grow as long as
   their longest stage, which put the sideways scrollbar a few thousand pixels
   down the page — with an ordinary mouse there was no way to reach the later
   stages without scrolling to the very bottom first. Each column now scrolls
   its own cards, so the sideways bar stays in view, and the arrows work
   without a scrollbar at all. */@media (min-width:761px){body.v2 .ops-board2{max-height:calc(100vh - 88px);scrollbar-width:auto;overscroll-behavior-x:contain}body.v2 .ops-col{max-height:calc(100vh - 108px)}body.v2 .ops-cards{overflow-y:auto;min-height:0;scrollbar-width:thin}/* In a column that scrolls, a card must keep its height — left to shrink,
     ninety-six cards squeezed themselves into the space of twenty. */body.v2 .ops-cards > *{flex-shrink:0}
}body.v2 .ops-boardwrap{position:relative;min-width:0}body.v2 .ops-nudge{position:absolute;top:8px;z-index:3;width:36px;height:36px;border-radius:var(--v2-r-full);
  border:1px solid var(--v2-line);background:var(--v2-panel);color:var(--v2-ink);font-size:var(--v2-t-say);line-height:1;
  cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 10px rgba(0,0,0,.18)}body.v2 .ops-nudge:hover{border-color:var(--v2-accent);color:var(--v2-accent-ink);background:var(--v2-accent-soft)}body.v2 .ops-nudge.l{left:-6px}body.v2 .ops-nudge.r{right:-6px}body.v2 .ops-nudge[hidden]{display:none}

/* An empty column says what the stage is FOR. "No pursuits in this stage" on
   its own is a shrug;with the purpose under it,an empty column answers
   "what happens here" instead of only "nothing is here". */
body.v2 .ops-empty{display:flex;flex-direction:column;align-items:center;gap:var(--v2-s1h);
  text-align:center;padding:var(--v2-s5) var(--v2-s3);border:1px dashed var(--v2-line);
  border-radius:var(--v2-r-control);color:var(--v2-sub)}body.v2 .ops-empty i{display:grid;place-items:center;width:34px;height:34px;
  color:var(--v2-faint)}body.v2 .ops-empty i svg{width:26px;height:26px;display:block}body.v2 .ops-empty b{font-size:var(--v2-t-body);color:var(--v2-sub);font-weight:600}body.v2 .ops-empty span{font-size:var(--v2-t-label);color:var(--v2-faint);line-height:1.5}body.v2 .ops-draghint{margin:var(--v2-s3) 0 0;font-size:var(--v2-t-label);
  color:var(--v2-sub);display:flex;align-items:center;gap:var(--v2-s2)}/* the card's new rows */body.v2 .pd-card-due{display:flex;align-items:center;gap:var(--v2-s1h);margin-top:var(--v2-s1h);
  font-size:var(--v2-t-label);color:var(--v2-sub)}body.v2 .pd-card-due i{display:grid;place-items:center;width:14px;height:14px;flex:0 0 14px}body.v2 .pd-card-due i svg{width:14px;height:14px;display:block}body.v2 .pd-card-due b{font-family:var(--v2-mono);color:var(--v2-sub)}body.v2 .pd-card-due b.soon{color:var(--v2-warn)}body.v2 .pd-card-due b.late{color:var(--v2-bad)}body.v2 .pd-card-f .pd-ct{display:inline-flex;align-items:center;gap:var(--v2-s1)}body.v2 .pd-card-f .pd-ct i{display:grid;place-items:center;width:13px;height:13px}body.v2 .pd-card-f .pd-ct i svg{width:13px;height:13px;display:block}
/* Scoped to the card. `.pd-who` already meant the CONTRACTING OFFICER block
   in factsPanel, and giving the pursuit card's assignee the same bare class
   put `display:inline-flex; margin-left:auto` on a block that is a stack of
   name, tags and links — which is how it came to want 318px inside a 311px
   column. Second name collision this session, after `.dot`;a bare class is
   a name two unrelated components will both reach for. */
body.v2 .pd-card-f .pd-who{display:inline-flex;align-items:center;gap:var(--v2-s1h);
  margin-left:auto;min-width:0}body.v2 .pd-card-f .pd-who em{font-style:normal;font-size:var(--v2-t-label);
  color:var(--v2-sub);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width:760px){body.v2 .ops-chiprow{flex-direction:column;gap:var(--v2-s3)}/* The <details> is flex:0 0 auto, which in a COLUMN means it takes its
     content width — 88px, the width of the summary — while the panel inside
     it wants 156px. Stretched, it has the row to lay the chips out in. */body.v2 .ops-closed{align-self:stretch;width:100%}body.v2 .ops-closed-b{max-width:none;justify-content:flex-start}body.v2 .ops-col{flex-basis:84vw;width:84vw}
}/* --v2-faint measured 2.79 light. It is a separator, but an invisible
   separator does not separate. */body.v2 .pd-due-sep{color:var(--v2-sub);margin:0 var(--v2-s0)}/* The card footer is four things in about 254px of column. "Not stated"
   broke across two lines mid-phrase and the assignee truncated to
   "Unassig…", which is not a word. Nothing in this row may wrap, and the
   name is the only part that may shorten — it is the least load-bearing
   thing on the card, and its full value is in the title attribute. */body.v2 .pd-card-f{flex-wrap:nowrap;gap:var(--v2-s2);align-items:center}body.v2 .pd-card-f .pd-val{white-space:nowrap;flex:0 0 auto;font-variant-numeric:tabular-nums}body.v2 .pd-card-f .pd-ct{white-space:nowrap;flex:0 0 auto}body.v2 .pd-card-f .pd-who{flex:1 1 auto;justify-content:flex-end}
/* The name is read whole — a first name fits;the row wraps rather than clips it. */
body.v2 .pd-card-f .pd-who em{max-width:none;overflow:visible;text-overflow:clip;font-weight:600}body.v2 .pd-card-f .pd-who.has em{color:var(--who,var(--v2-ink))}body.v2 .pd-card-f .pd-who.has .pd-av{background:var(--who,var(--v2-line));color:var(--who-ink,#fff);border-color:transparent}body.v2 .pd-card-f{flex-wrap:wrap}body.v2 .ops-chips{min-width:0;max-width:100%}/* ═══ R11 · THE PLAN, AS THE DESIGN DRAWS IT ══════════════════════════ */body.v2 .pd-planhead{display:grid;gap:var(--v2-s4);align-items:center;
  grid-template-columns:minmax(0,1fr) auto minmax(280px,1fr);margin-bottom:var(--v2-s4)}body.v2 .pd-planhead-t h4{margin:0;font-family:var(--v2-display);
  font-size:var(--v2-t-display);font-weight:800;color:var(--v2-ink);line-height:1.1}body.v2 .pd-planhead-t p{margin:var(--v2-s1) 0 0;font-size:var(--v2-t-body);color:var(--v2-sub)}body.v2 .pd-planhead-a{display:flex;gap:var(--v2-s2);align-items:center;flex-wrap:wrap}body.v2 .pd-planhead-a .pd-btn{display:inline-flex;align-items:center;gap:var(--v2-s1h)}body.v2 .pd-planhead-a .pd-btn i{display:grid;place-items:center;width:15px;height:15px}body.v2 .pd-planhead-a .pd-btn i svg{width:15px;height:15px;display:block}/* The fit verdict sits beside the Schedule button, because that is the button
   it is a warning about. Amber when the time is tight, not red: a tight
   timeline is a decision to make, not an error to fix. */body.v2 .pd-fit{display:flex;gap:var(--v2-s3);align-items:flex-start;
  background:var(--v2-panel);border:1px solid var(--v2-warn);
  border-radius:var(--v2-r-surface);padding:var(--v2-s3) var(--v2-s4);min-width:0}body.v2 .pd-fit b{display:block;font-size:var(--v2-t-body);color:var(--v2-warn);font-weight:700}body.v2 .pd-fit span{display:block;margin-top:var(--v2-s0);font-size:var(--v2-t-label);
  color:var(--v2-sub);line-height:1.45}body.v2 .pd-fit.ok{border-color:var(--v2-line)}body.v2 .pd-fit.ok b{color:var(--v2-ok)}body.v2 .pd-fit.bad{border-color:var(--v2-bad)}body.v2 .pd-fit.bad b{color:var(--v2-bad)}body.v2 .pd-fit{position:relative}body.v2 .pd-fit-ic{display:grid;place-items:center;width:30px;height:30px;flex:0 0 30px;
  border-radius:50%;background:color-mix(in srgb,var(--v2-warn) 18%,transparent);
  color:var(--v2-warn)}body.v2 .pd-fit.ok .pd-fit-ic{background:color-mix(in srgb,var(--v2-ok) 18%,transparent)}body.v2 .pd-fit.bad .pd-fit-ic{background:color-mix(in srgb,var(--v2-bad) 18%,transparent);color:var(--v2-bad)}/* the ⓘ the design puts in the card's corner — the card's own title carries
   the explanation, so this is a marker, not a second control */body.v2 .pd-fit-i{position:absolute;top:10px;right:12px;display:grid;place-items:center;
  width:15px;height:15px;border-radius:50%;border:1px solid var(--v2-sub);
  color:var(--v2-sub);font-style:normal;font-size:var(--v2-t-label);font-weight:700;line-height:1}body.v2 .pd-fit-ic svg{width:19px;height:19px;display:block}body.v2 .pd-fit.ok .pd-fit-ic{color:var(--v2-ok)}body.v2 .pd-ms-h{font-family:var(--v2-display);font-size:var(--v2-t-body);
  font-weight:700;color:var(--v2-ink);margin:0 0 var(--v2-s3)}body.v2 .pd-mswrap,body.v2 .pd-phasewrap{background:var(--v2-bg);
  border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);
  padding:var(--v2-s3) var(--v2-s4) var(--v2-s4);margin-top:var(--v2-s4)}/* The milestone chain: a row with a connector between each, because these
   happen IN ORDER and a grid of equal cards says they do not. */body.v2 .pd-milestones{display:flex;gap:0;list-style:none;margin:0;padding:0;
  overflow-x:auto;scrollbar-width:thin;padding-bottom:var(--v2-s1)}
/* flex-basis 176 with grow let six cards expand past the row and the last one
   fell off the edge. They share the row instead and shrink together;below
   150px the row scrolls,which is the honest failure for a fixed count. */
body.v2 .pd-ms{position:relative;flex:1 1 0;min-width:150px;
  display:grid;grid-template-columns:auto minmax(0,1fr);gap:var(--v2-s3) var(--v2-s3);
  align-items:center;padding:var(--v2-s3);background:var(--v2-panel);
  border:1px solid var(--v2-line);border-radius:var(--v2-r-control);
  margin-right:var(--v2-s5)}body.v2 .pd-ms:last-child{margin-right:0}/* the connector — drawn, not typed, and aria-hidden: the order is already in
   the numbers, so a screen reader gains nothing from six arrows */body.v2 .pd-ms:not(:last-child)::after{content:"";position:absolute;
  right:-15px;top:50%;width:8px;height:8px;border-top:1.6px solid var(--v2-line);
  border-right:1.6px solid var(--v2-line);transform:translateY(-50%) rotate(45deg)}body.v2 .pd-ms-n{display:grid;place-items:center;width:30px;height:30px;
  border-radius:50%;font-family:var(--v2-mono);font-size:var(--v2-t-label);font-weight:700}body.v2 .pd-ms-d{font-family:var(--v2-mono);font-size:var(--v2-t-label);color:var(--v2-sub);
  white-space:nowrap}/* The icon was display:none — which threw away half of what the card says.
   It sits under the number, on the title's line, as the design has it. */body.v2 .pd-ms-ic{display:grid;place-items:center;width:30px;height:30px;
  color:var(--v2-sub)}body.v2 .pd-ms-ic svg{width:19px;height:19px;display:block}body.v2 .pd-ms-t{font-size:var(--v2-t-label);color:var(--v2-ink);line-height:1.4}body.v2 .pd-ms.passed{opacity:.65}body.v2 .pd-ms.passed .pd-ms-n{background:var(--v2-line2)!important;color:var(--v2-sub)!important}/* Each milestone keeps its own hue — identity down the chain, never status.
   Status is the `passed` state above, which dims the whole card. The border
   carries the same hue so the colour reads at a glance without the number. */body.v2 .pd-ms.c0{border-color:color-mix(in srgb,var(--v2-accent) 45%,var(--v2-line))}body.v2 .pd-ms.c0 .pd-ms-n{background:var(--v2-accent-soft);color:var(--v2-accent-ink)}body.v2 .pd-ms.c0 .pd-ms-ic{color:var(--v2-accent-ink)}body.v2 .pd-ms.c1{border-color:color-mix(in srgb,var(--v2-violet) 45%,var(--v2-line))}body.v2 .pd-ms.c1 .pd-ms-n{background:color-mix(in srgb,var(--v2-violet) 18%,transparent);color:var(--v2-violet)}body.v2 .pd-ms.c1 .pd-ms-ic{color:var(--v2-violet)}body.v2 .pd-ms.c2{border-color:color-mix(in srgb,var(--v2-info) 45%,var(--v2-line))}body.v2 .pd-ms.c2 .pd-ms-n{background:color-mix(in srgb,var(--v2-info) 18%,transparent);color:var(--v2-info)}body.v2 .pd-ms.c2 .pd-ms-ic{color:var(--v2-info)}body.v2 .pd-ms.c3{border-color:color-mix(in srgb,var(--v2-ok) 45%,var(--v2-line))}body.v2 .pd-ms.c3 .pd-ms-n{background:color-mix(in srgb,var(--v2-ok) 18%,transparent);color:var(--v2-ok)}body.v2 .pd-ms.c3 .pd-ms-ic{color:var(--v2-ok)}body.v2 .pd-ms.c4{border-color:color-mix(in srgb,var(--v2-violet) 45%,var(--v2-line))}body.v2 .pd-ms.c4 .pd-ms-n{background:color-mix(in srgb,var(--v2-violet) 18%,transparent);color:var(--v2-violet)}body.v2 .pd-ms.c4 .pd-ms-ic{color:var(--v2-violet)}body.v2 .pd-ms.c5{border-color:color-mix(in srgb,var(--v2-warn) 45%,var(--v2-line))}body.v2 .pd-ms.c5 .pd-ms-n{background:color-mix(in srgb,var(--v2-warn) 18%,transparent);color:var(--v2-warn)}body.v2 .pd-ms.c5 .pd-ms-ic{color:var(--v2-warn)}body.v2 .pd-ms.c6{border-color:color-mix(in srgb,var(--v2-accent) 45%,var(--v2-line))}body.v2 .pd-ms.c6 .pd-ms-n{background:var(--v2-accent-soft);color:var(--v2-accent-ink)}body.v2 .pd-ms.c6 .pd-ms-ic{color:var(--v2-accent-ink)}/* the phase table */
/* Eight columns, and the header has exactly eight cells too. It had TEN
   column definitions against nine cells, so every header label sat one
   column left of the data it named: "Phase" landed on the number badge and
   "Key instruction" on the effort. A table whose headings point at the wrong
   columns is worse than one with no headings at all. */body.v2 .pd-phase-head,body.v2 .pd-phase-h{display:grid;align-items:center;
  grid-template-columns:112px minmax(172px,1.1fr) minmax(132px,0.8fr) 68px 58px minmax(0,2.2fr) 74px 30px;
  gap:var(--v2-s3)}body.v2 .pd-phase-head{padding:0 var(--v2-s2) var(--v2-s2);font-size:var(--v2-t-label);
  color:var(--v2-sub);font-weight:700;border-bottom:1px solid var(--v2-line)}body.v2 .pd-th-inc{display:flex;align-items:center;gap:var(--v2-s2);line-height:1.2}body.v2 .pd-th-inc > span{display:flex;flex-direction:column}body.v2 .pd-th-inc i{font-style:normal;font-weight:500;color:var(--v2-sub)}body.v2 .pd-th-i{display:inline-grid;place-items:center;width:14px;height:14px;
  border-radius:50%;border:1px solid var(--v2-sub);color:var(--v2-sub);
  font-style:normal;font-size:var(--v2-t-label);font-weight:700;line-height:1;margin-left:var(--v2-s1);
  vertical-align:.05em}body.v2 .pd-phases{display:flex;flex-direction:column}body.v2 .pd-phase{border-bottom:1px solid var(--v2-line2)}body.v2 .pd-phase:last-child{border-bottom:0}body.v2 .pd-phase-h{padding:var(--v2-s2) var(--v2-s2)}body.v2 .pd-phase.off{opacity:.55}body.v2 .pd-phase.open{background:var(--v2-panel)}body.v2 .pd-phase-pick{display:grid;place-items:center;margin:0}body.v2 .pd-phase-p{display:flex;align-items:center;gap:var(--v2-s2);min-width:0}body.v2 .pd-phase-num{flex:0 0 28px;display:grid;place-items:center;width:28px;height:28px;
  border-radius:var(--v2-r-control);font-family:var(--v2-mono);
  font-size:var(--v2-t-label);font-weight:700;
  background:var(--v2-accent-soft);color:var(--v2-accent-ink)}body.v2 .pd-phase-num.c1{background:color-mix(in srgb,var(--v2-violet) 18%,transparent);color:var(--v2-violet)}body.v2 .pd-phase-num.c2{background:color-mix(in srgb,var(--v2-info) 18%,transparent);color:var(--v2-info)}body.v2 .pd-phase-num.c3{background:color-mix(in srgb,var(--v2-ok) 18%,transparent);color:var(--v2-ok)}body.v2 .pd-phase-num.c4{background:color-mix(in srgb,var(--v2-violet) 18%,transparent);color:var(--v2-violet)}body.v2 .pd-phase-num.c5{background:color-mix(in srgb,var(--v2-warn) 18%,transparent);color:var(--v2-warn)}body.v2 .pd-phase-num.c6{background:color-mix(in srgb,var(--v2-ok) 18%,transparent);color:var(--v2-ok)}body.v2 .pd-phase-name{font-size:var(--v2-t-body);font-weight:600;color:var(--v2-ink);
  min-width:0;overflow-wrap:anywhere;line-height:1.3}body.v2 .pd-phase-w{font-family:var(--v2-mono);font-size:var(--v2-t-label);color:var(--v2-sub);
  white-space:nowrap}body.v2 .pd-phase-n,body.v2 .pd-phase-e,body.v2 .pd-phase-open{font-size:var(--v2-t-label);
  color:var(--v2-sub);white-space:nowrap;font-variant-numeric:tabular-nums}body.v2 .pd-phase-open{font-family:var(--v2-mono);color:var(--v2-ink)}body.v2 .pd-phase-why{font-size:var(--v2-t-label);color:var(--v2-sub);line-height:1.45;min-width:0}body.v2 .pd-phase-go{justify-self:end;background:none;border:0;cursor:pointer;
  color:var(--v2-sub);display:grid;place-items:center;width:28px;height:28px;
  border-radius:var(--v2-r-control);font-size:var(--v2-t-say);line-height:1}body.v2 .pd-phase-go:hover{background:var(--v2-line2);color:var(--v2-ink)}body.v2 .pd-planfoot{margin-top:var(--v2-s3);display:flex;align-items:center;gap:var(--v2-s2)}body.v2 .pd-planfoot .pd-fit-ic{color:var(--v2-sub);width:18px;height:18px}body.v2 .pd-planfoot .pd-fit-ic svg{width:15px;height:15px}@media (max-width:1180px){body.v2 .pd-planhead{grid-template-columns:minmax(0,1fr);row-gap:var(--v2-s3)}body.v2 .pd-phase-head{display:none}body.v2 .pd-phase-h{grid-template-columns:32px minmax(0,1fr) auto;
    grid-template-areas:"pick phase go" ". win win" ". cnt cnt" ". why why";row-gap:var(--v2-s1h)}body.v2 .pd-phase-pick{grid-area:pick}body.v2 .pd-phase-p{grid-area:phase}body.v2 .pd-phase-go{grid-area:go}body.v2 .pd-phase-w{grid-area:win}body.v2 .pd-phase-why{grid-area:why}body.v2 .pd-phase-n{grid-area:cnt}body.v2 .pd-phase-e,body.v2 .pd-phase-open{display:none}
}/* ═══ R9 · THE PURSUIT PAGES ═══════════════════════════════════════════ */
/* To do: the work gets the width, the reference sits beside it. It used to be
   underneath, two screens from the checklist it describes. */
body.v2 .v2-todo-main{min-width:0;display:flex;flex-direction:column;gap:var(--v2-s4)}

body.v2 .pd-planacts{display:flex;gap:var(--v2-s2);flex-wrap:wrap;margin-top:var(--v2-s3)}body.v2 .pd-note.warn{color:var(--v2-warn)}/* Overview: the decision blocks share a row rather than stacking, so the
   facts, the call and what is still unknown are in one look. */

/* Two of these are long-form and want the whole row: a summary set in a 330px
   column is a column of two-word lines. */


/* ═══ R10 · THE PAGES UNDER "TO DO" ════════════════════════════════════
   A rail put four dense things beside each other;a 28-step procedure and a
   39-task schedule still competed with the work. These are pages now,under
   one row,so the page you are on is the thing you are doing. */
body.v2 .pd-subtabs2{display:flex;gap:var(--v2-s0);flex-wrap:wrap;margin:0 0 var(--v2-s4);
  border-bottom:1px solid var(--v2-line)}body.v2 .pd-subtabs2 button{font:inherit;font-size:var(--v2-t-body);font-weight:600;
  border:0;background:none;color:var(--v2-sub);padding:var(--v2-s2) var(--v2-s3);cursor:pointer;
  display:inline-flex;align-items:center;gap:var(--v2-s1h);
  border-bottom:2px solid transparent;margin-bottom:-var(--v2-s0)}body.v2 .pd-subtabs2 button:hover{color:var(--v2-ink)}body.v2 .pd-subtabs2 button.on{color:var(--v2-accent-ink);border-bottom-color:var(--v2-accent)}body.v2 .pd-subtabs2 .pd-tabn{font-style:normal;font-family:var(--v2-mono);
  font-size:var(--v2-t-label);background:var(--v2-line2);color:var(--v2-sub);
  border-radius:var(--v2-r-full);padding:var(--v2-s0) var(--v2-s1h)}body.v2 .pd-subtabs2 button.on .pd-tabn{background:var(--v2-accent-soft);color:var(--v2-accent-ink)}body.v2 .pd-substage{min-width:0}body.v2 .pd-substage > .v2-block:first-child{margin-top:0}/* ═══ R10 · COMPS ══════════════════════════════════════════════════════ */
/* the query panel — every field labelled, because a placeholder disappears
   the moment you type and then nothing says which box is the trade code */body.v2 .v2-cq{background:var(--v2-panel);border:1px solid var(--v2-line);
  border-left:3px solid var(--v2-accent);border-radius:var(--v2-r-surface);
  padding:var(--v2-s4);margin-bottom:var(--v2-s4)}body.v2 .v2-cq-row{display:flex;gap:var(--v2-s4);flex-wrap:wrap;align-items:flex-end;
  margin-bottom:var(--v2-s3)}body.v2 .v2-cq-f{display:flex;flex-direction:column;gap:var(--v2-s1h);min-width:0;flex:0 0 auto}body.v2 .v2-cq-f.grow{flex:1 1 260px}body.v2 .v2-cq-f.sm{flex:0 0 92px}body.v2 .v2-cq-f.go{align-self:flex-end}body.v2 .v2-cq-f label{font-family:var(--v2-display);font-size:var(--v2-t-label);
  font-weight:700;color:var(--v2-ink)}body.v2 .v2-cq-opt{font-weight:500;color:var(--v2-sub);margin-left:var(--v2-s1)}body.v2 .v2-cq-f input{font:inherit;font-size:var(--v2-t-body);color:var(--v2-ink);
  background:var(--v2-bg);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-control);padding:var(--v2-s2) var(--v2-s3);width:100%;min-width:0}body.v2 .v2-cq-f input:focus{outline:none;border-color:var(--v2-accent)}body.v2 .v2-cq-chips{display:flex;gap:var(--v2-s1h);flex-wrap:wrap}/* the three lookups, described before any of them has run */body.v2 .v2-centrygrid{display:grid;gap:var(--v2-s4);align-items:start;
  grid-template-columns:minmax(0,2.4fr) minmax(0,1fr)}body.v2 .v2-centrycards{display:grid;gap:var(--v2-s4);min-width:0;
  grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr))}body.v2 .v2-centry{background:var(--v2-panel);border:1px solid var(--v2-line);
  border-top:3px solid var(--v2-accent);border-radius:var(--v2-r-surface);
  padding:var(--v2-s4);display:flex;flex-direction:column;gap:var(--v2-s3);min-width:0}body.v2 .v2-centry-h{display:flex;gap:var(--v2-s3);align-items:flex-start}body.v2 .v2-centry-ic{display:grid;place-items:center;width:34px;height:34px;flex:0 0 34px;
  border-radius:var(--v2-r-control);background:var(--v2-accent-soft);color:var(--v2-accent-ink)}body.v2 .v2-centry-ic svg{width:18px;height:18px;display:block}body.v2 .v2-centry-h b{display:block;font-family:var(--v2-display);
  font-size:var(--v2-t-entity);font-weight:700;color:var(--v2-ink)}body.v2 .v2-centry-h span{display:block;margin-top:var(--v2-s0);font-size:var(--v2-t-label);
  color:var(--v2-sub);line-height:1.45}body.v2 .v2-centry-b{display:flex;flex-direction:column;gap:var(--v2-s1h);align-items:center;
  text-align:center;padding:var(--v2-s5) var(--v2-s3);border:1px dashed var(--v2-line);
  border-radius:var(--v2-r-control);margin-top:auto}body.v2 .v2-centry-b b{font-size:var(--v2-t-body);color:var(--v2-ink)}body.v2 .v2-centry-b span{font-size:var(--v2-t-label);color:var(--v2-sub);line-height:1.5}/* the evidence rail */body.v2 .v2-evrail{display:flex;flex-direction:column;gap:var(--v2-s3);min-width:0}body.v2 .v2-evnote{display:flex;gap:var(--v2-s3);align-items:flex-start;
  background:var(--v2-accent-soft);border:1px solid var(--v2-accent);
  border-radius:var(--v2-r-surface);padding:var(--v2-s3)}body.v2 .v2-evnote p{margin:0;font-size:var(--v2-t-label);color:var(--v2-ink);line-height:1.5}body.v2 .v2-evblock{background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);padding:var(--v2-s4)}body.v2 .v2-evblock h4{margin:0 0 var(--v2-s3);font-family:var(--v2-display);
  font-size:var(--v2-t-body);font-weight:700;color:var(--v2-ink)}body.v2 .v2-ev{display:flex;gap:var(--v2-s3);align-items:center;padding:var(--v2-s2) 0;
  border-top:1px solid var(--v2-line2)}body.v2 .v2-ev:first-of-type{border-top:0}body.v2 .v2-ev-ic{display:grid;place-items:center;width:26px;height:26px;flex:0 0 26px;
  border-radius:var(--v2-r-control);background:var(--v2-line2);color:var(--v2-sub)}body.v2 .v2-ev-ic svg{width:15px;height:15px;display:block}body.v2 .v2-ev-t{min-width:0;flex:1 1 auto}body.v2 .v2-ev-t b{display:block;font-size:var(--v2-t-body);color:var(--v2-ink);font-weight:600}body.v2 .v2-ev-t span{display:block;font-size:var(--v2-t-label);color:var(--v2-sub);line-height:1.4}/* A status, not a verdict: "Not loaded" is a fact about this session, and it
   stays grey rather than red because nothing has gone wrong yet. */body.v2 .v2-ev-s{flex:0 0 auto;font-size:var(--v2-t-label);font-weight:600;
  color:var(--v2-sub);background:var(--v2-line2);border-radius:var(--v2-r-full);
  padding:var(--v2-s0) var(--v2-s2);white-space:nowrap}body.v2 .v2-cwarn{display:flex;gap:var(--v2-s3);align-items:center;margin-top:var(--v2-s4);
  background:var(--v2-warn-soft);border:1px solid var(--v2-warn);
  border-radius:var(--v2-r-surface);padding:var(--v2-s3) var(--v2-s4)}body.v2 .v2-cwarn p{margin:0;font-size:var(--v2-t-body);color:var(--v2-ink)}body.v2 .v2-cwarn .v2-ev-ic{background:transparent;color:var(--v2-warn)}@media (max-width:1000px){body.v2 .v2-centrygrid{grid-template-columns:minmax(0,1fr)}
}/* R11 · Comps — the controls the design puts inside each card. */body.v2 .v2-cfields{display:grid;gap:var(--v2-s3);grid-template-columns:repeat(2,minmax(0,1fr))}body.v2 .v2-cf{display:flex;flex-direction:column;gap:var(--v2-s1h);min-width:0;position:relative}body.v2 .v2-cf.full{grid-column:1/-1}body.v2 .v2-cf label{font-size:var(--v2-t-label);font-weight:600;color:var(--v2-sub)}body.v2 .v2-cf input,body.v2 .v2-cf select,body.v2 .v2-cf textarea{
  font:inherit;font-size:var(--v2-t-body);color:var(--v2-ink);background:var(--v2-bg);
  border:1px solid var(--v2-line);border-radius:var(--v2-r-control);
  padding:var(--v2-s2) var(--v2-s3);width:100%;min-width:0}body.v2 .v2-cf textarea{resize:vertical;line-height:1.5}body.v2 .v2-cf input:focus,body.v2 .v2-cf select:focus,body.v2 .v2-cf textarea:focus{
  outline:none;border-color:var(--v2-accent)}body.v2 .v2-cf-suf{display:flex;align-items:center;gap:0;position:relative}body.v2 .v2-cf-suf input{padding-right:52px}body.v2 .v2-cf-suf span{position:absolute;right:1px;top:1px;bottom:1px;display:grid;
  place-items:center;padding:0 var(--v2-s2);font-size:var(--v2-t-label);color:var(--v2-sub);
  background:var(--v2-line2);border-radius:0 var(--v2-r-control) var(--v2-r-control) 0}/* --v2-faint again. A character counter is the one thing a person checks
   when they are near the limit, which is exactly when it must be legible. */body.v2 .v2-cf-count{position:absolute;right:10px;bottom:9px;font-size:var(--v2-t-label);
  color:var(--v2-sub);font-variant-numeric:tabular-nums;pointer-events:none}body.v2 .v2-cgo{width:100%;display:inline-flex;align-items:center;justify-content:center;gap:var(--v2-s2)}body.v2 .v2-cgo i{display:grid;place-items:center;width:16px;height:16px}body.v2 .v2-cgo i svg{width:16px;height:16px;display:block}/* each card keeps its own edge colour, as identity down the row */body.v2 .v2-centry.b{border-top-color:var(--v2-violet)}body.v2 .v2-centry.b .v2-centry-ic{background:color-mix(in srgb,var(--v2-violet) 16%,transparent);color:var(--v2-violet)}body.v2 .v2-centry-b i{display:grid;place-items:center;width:34px;height:34px;color:var(--v2-faint)}body.v2 .v2-centry-b i svg{width:26px;height:26px;display:block}/* the evidence rows are buttons now — each one goes where it is about */body.v2 .v2-ev{width:100%;text-align:left;background:none;border:0;border-top:1px solid var(--v2-line2);
  cursor:pointer;font:inherit}body.v2 .v2-ev:disabled{cursor:default}body.v2 .v2-ev:not(:disabled):hover{background:var(--v2-line2)}body.v2 .v2-ev-go{flex:0 0 auto;color:var(--v2-sub);font-size:var(--v2-t-say);line-height:1}body.v2 .v2-ev:disabled .v2-ev-go{opacity:.35}body.v2 .v2-cwarn .pd-btn{margin-left:auto;flex:0 0 auto}@media (max-width:560px){body.v2 .v2-cfields{grid-template-columns:minmax(0,1fr)} }/* ═══ R13 · THE OVERVIEW, IN THREE COLUMNS ═════════════════════════════
   What is known, the call, and the case for and against — the order the
   design reads them in. They were stacked full width, so the facts sat a
   screen and a half above the Bid button they are the argument for. */body.v2 .v2-ovcols{display:grid;gap:var(--v2-s4);align-items:start;
  grid-template-columns:minmax(0,1fr) minmax(0,1.05fr) minmax(0,1fr);
  margin-bottom:var(--v2-s4)}body.v2 .v2-ovcol{min-width:0;display:flex;flex-direction:column;gap:var(--v2-s4)}body.v2 .v2-ovcol > .v2-block,body.v2 .v2-ovcol > .pd-panel{margin:0}/* the decision column's own pieces stack rather than sitting side by side */body.v2 .v2-ovcol.b .v2-heros{display:flex;flex-direction:column;gap:var(--v2-s3)}body.v2 .v2-ovcol.b .v2-hero{min-width:0}/* The decision is the one control on this page that changes what happens
   next, so it keeps the accent edge and sits at the top of its column. */body.v2 .v2-ovcol.b .itl-decide{border-left:3px solid var(--v2-accent)}/* each gap carries its own way to ask about it */body.v2 .v2-gapl{display:flex;flex-direction:column;gap:var(--v2-s0);
  background:var(--v2-line2);border:1px solid var(--v2-line2);
  border-radius:var(--v2-r-control);overflow:hidden}body.v2 .v2-gap{display:flex;align-items:center;gap:var(--v2-s3);
  background:var(--v2-panel);padding:var(--v2-s2) var(--v2-s2)}body.v2 .v2-gap span{flex:1 1 auto;min-width:0;font-size:var(--v2-t-body);color:var(--v2-ink)}body.v2 .v2-gap .pd-btn{flex:0 0 auto}/* the signal ticks were "✓" and "!" as text — a voice read them out before
   the words that carry the meaning. Drawn now, and aria-hidden. */body.v2 .v2-sig i{position:relative;display:inline-grid;place-items:center;
  width:18px;height:18px;border-radius:50%;flex:0 0 18px;font-style:normal}body.v2 .v2-sig i.ok{background:color-mix(in srgb,var(--v2-ok) 20%,transparent)}body.v2 .v2-sig i.warn{background:color-mix(in srgb,var(--v2-warn) 20%,transparent)}body.v2 .v2-sig i.ok::after{content:"";width:8px;height:4px;border-left:1.8px solid var(--v2-ok);
  border-bottom:1.8px solid var(--v2-ok);transform:rotate(-45deg) translate(1px,-1px)}body.v2 .v2-sig i.warn::after{content:"";width:1.8px;height:9px;border-radius:1px;
  background:var(--v2-warn)}@media (max-width:1180px){body.v2 .v2-ovcols{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}body.v2 .v2-ovcol.c{grid-column:1/-1}
}@media (max-width:820px){body.v2 .v2-ovcols{grid-template-columns:minmax(0,1fr)}body.v2 .v2-ovcol.c{grid-column:auto}
}/* .pd-panel carries `grid-column: span 4` from the days it was always a child
   of .pd-dbody's grid. Inside a flex column that rule is meaningless but its
   content's min-width is not: the facts panel wanted 342px in a 309px column.
   These panels shrink to their column now. */body.v2 .v2-ovcol .pd-panel{grid-column:auto;width:100%;min-width:0}body.v2 .v2-ovcol .pd-panel > *{min-width:0}body.v2 .v2-ovcol .pd-facts-act{flex-wrap:wrap}body.v2 .v2-ovcol .pd-fact{min-width:0;overflow-wrap:anywhere}

/* The facts panel was written for the full page width — two columns of
   contact cards, side by side. In the Overview's left column it has about
   311px, so the pair wants 330 and each card's contents want 170 in 124.
   Inside a column it becomes one card per row, which is what it already does
   below 820px;it just never knew it could be narrow at a wide viewport. */
body.v2 .v2-ovcol .pd-who{grid-template-columns:minmax(0,1fr)}body.v2 .v2-ovcol .pd-whocard{min-width:0;overflow-wrap:anywhere}body.v2 .v2-ovcol .pd-wholinks{flex-wrap:wrap}/* R16 · Portals — the audit chips are the page's stat row AND its filter.
   aria-pressed says which is applied, because "this is a summary" and "this
   is the filter you are looking through" are different states and they used
   to look identical. */




body.v2 .pt-renew{display:flex;align-items:center;gap:var(--v2-s2);flex-wrap:wrap}body.v2 .pt-renew-ic{display:grid;place-items:center;width:26px;height:26px;color:var(--v2-warn)}body.v2 .pt-renew-ic svg{width:18px;height:18px;display:block}/* ═══ R17 · CALLING — the room's own front door ════════════════════════
   It answered "no call session running", which is true and useless: the way
   in was to leave, open a pursuit and press Start calling. A room reached
   from the rail needs a door of its own. */body.v2 .call-queue{background:var(--v2-panel);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);padding:var(--v2-s4)}body.v2 .call-queue-h{display:flex;align-items:baseline;gap:var(--v2-s3);
  flex-wrap:wrap;margin-bottom:var(--v2-s3)}body.v2 .call-queue-h h4{margin:0}body.v2 .call-queue-n{margin-left:auto;font-family:var(--v2-mono);
  font-size:var(--v2-t-label);color:var(--v2-sub);white-space:nowrap}body.v2 .call-list{list-style:none;margin:0;padding:0;display:flex;
  flex-direction:column;gap:var(--v2-s0);background:var(--v2-line2);
  border:1px solid var(--v2-line2);border-radius:var(--v2-r-control);overflow:hidden}body.v2 .call-row{display:flex;align-items:center;gap:var(--v2-s3);
  background:var(--v2-panel);padding:var(--v2-s3) var(--v2-s3)}body.v2 .call-row-ic{display:grid;place-items:center;width:32px;height:32px;flex:0 0 32px;
  border-radius:var(--v2-r-control);background:var(--v2-line2);color:var(--v2-accent-ink)}body.v2 .call-row-ic svg{width:17px;height:17px;display:block}body.v2 .call-row-t{flex:1 1 auto;min-width:0}body.v2 .call-row-t b{display:block;font-size:var(--v2-t-body);color:var(--v2-ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}body.v2 .call-row-t span{display:block;font-size:var(--v2-t-label);color:var(--v2-sub)}/* the count is how many calls, not how urgent — urgency is the deadline line,
   and it tints this only so the two read together at a glance */body.v2 .call-row-n{flex:0 0 auto;font-family:var(--v2-mono);font-size:var(--v2-t-body);
  font-weight:700;color:var(--v2-sub);background:var(--v2-line2);
  border-radius:var(--v2-r-full);padding:var(--v2-s0) var(--v2-s2)}body.v2 .call-row-n.soon{background:var(--v2-accent-soft);color:var(--v2-accent-ink)}body.v2 .call-row .pd-btn{flex:0 0 auto}@media (max-width:640px){body.v2 .call-row{flex-wrap:wrap}body.v2 .call-row .pd-btn{width:100%}
}/* ══ R18 · The email composer, as the design lays it out ══════════════
   Scripts left · letter centre · the facts it was merged from right, and a
   decision bar that states the Gmail connection instead of guessing it. */body.v2 .pd-modal.em-modal{width:min(1140px,96vw);max-height:92vh;display:flex;flex-direction:column;overflow:hidden}body.v2 .em-head{display:flex;align-items:flex-start;gap:var(--v2-s4);padding:var(--v2-s5) var(--v2-s5) var(--v2-s4)}body.v2 .em-head .em-hic{width:40px;height:40px;flex:none;color:var(--v2-sub)}body.v2 .em-head h3{margin:0;font-family:var(--v2-display);font-size:var(--v2-t-say);font-weight:700;color:var(--v2-ink);letter-spacing:-.015em}body.v2 .em-head p{margin:var(--v2-s1) 0 0;color:var(--v2-sub);font-size:var(--v2-t-body)}body.v2 .em-head .pd-x{margin-left:auto}body.v2 .em-body{display:grid;grid-template-columns:250px minmax(0,1fr) 200px;gap:var(--v2-s4);
  padding:0 var(--v2-s5) var(--v2-s4);overflow:auto;min-height:0}body.v2 .em-tpl h4,body.v2 .em-facts h4{margin:0 0 var(--v2-s3);font-size:var(--v2-t-entity);font-weight:700;color:var(--v2-ink)}body.v2 .em-tpl{display:flex;flex-direction:column;gap:var(--v2-s2)}body.v2 .em-tpl button{display:flex;gap:var(--v2-s3);align-items:flex-start;text-align:left;padding:var(--v2-s2) var(--v2-s3);
  border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-panel);color:var(--v2-ink);cursor:pointer}body.v2 .em-tpl button svg{width:20px;height:20px;flex:none;color:var(--v2-sub);margin-top:var(--v2-s0)}body.v2 .em-tpl button b{display:block;font-size:var(--v2-t-body);font-weight:600}body.v2 .em-tpl button b em{font-style:normal;color:var(--v2-accent)}body.v2 .em-tpl button small{display:block;color:var(--v2-faint);font-size:var(--v2-t-small);margin-top:var(--v2-s0)}body.v2 .em-tpl button:hover{border-color:var(--v2-accent-line)}body.v2 .em-tpl button.on{border-color:var(--v2-accent);background:var(--v2-accent-soft)}body.v2 .em-tpl button.on svg{color:var(--v2-accent)}body.v2 .em-form{display:flex;flex-direction:column;gap:var(--v2-s2);min-width:0}body.v2 .em-row{display:grid;grid-template-columns:96px minmax(0,1fr);gap:var(--v2-s3);align-items:center}body.v2 .em-row.top{align-items:start}body.v2 .em-row > label{font-size:var(--v2-t-body);font-weight:600;color:var(--v2-ink);display:flex;gap:var(--v2-s1h);align-items:center}body.v2 .em-row > label svg{width:16px;height:16px;color:var(--v2-sub)}body.v2 .em-row input,body.v2 .em-row textarea{width:100%;min-width:0}body.v2 .em-row textarea{min-height:220px;resize:vertical;line-height:1.55}body.v2 .em-to{display:flex;border:1px solid var(--v2-line);border-radius:var(--v2-r-control);overflow:hidden}body.v2 .em-to input{border:0;border-radius:0;flex:1}body.v2 .em-pick{display:flex;align-items:center;gap:var(--v2-s1h);padding:0 var(--v2-s3);border:0;border-left:1px solid var(--v2-line);
  background:transparent;color:var(--v2-accent);font-weight:600;font-size:var(--v2-t-small);white-space:nowrap;cursor:pointer}body.v2 .em-pick svg{width:16px;height:16px}body.v2 .em-cands{margin-left:108px;border:1px solid var(--v2-line);border-radius:var(--v2-r-control);max-height:180px;overflow:auto}body.v2 .em-cands button{display:flex;justify-content:space-between;gap:var(--v2-s3);width:100%;padding:var(--v2-s2) var(--v2-s3);border:0;
  border-bottom:1px solid var(--v2-line2);background:var(--v2-panel);color:var(--v2-ink);cursor:pointer;text-align:left}body.v2 .em-cands button span{color:var(--v2-faint);font-size:var(--v2-t-small)}body.v2 .em-cands button:hover{background:var(--v2-raised,var(--v2-line2))}body.v2 .em-cands.empty{padding:var(--v2-s2) var(--v2-s3);color:var(--v2-sub);font-size:var(--v2-t-small)}body.v2 .em-hint{margin:-var(--v2-s0) 0 var(--v2-s1) 108px;font-size:var(--v2-t-small);color:var(--v2-faint)}body.v2 .em-warn{margin-left:108px;display:flex;gap:var(--v2-s2);align-items:center;padding:var(--v2-s2) var(--v2-s3);border-radius:var(--v2-r-control);
  border:1px solid var(--v2-warn-line,var(--v2-warn));background:var(--v2-warn-soft);color:var(--v2-warn);font-weight:600;font-size:var(--v2-t-small)}body.v2 .em-files{display:flex;flex-wrap:wrap;gap:var(--v2-s2);align-items:center}body.v2 .em-files small{flex-basis:100%;color:var(--v2-faint);font-size:var(--v2-t-small)}body.v2 .em-files small.em-note{color:var(--v2-warn)}body.v2 .em-add{display:inline-flex;padding:var(--v2-s1h) var(--v2-s3);border:1px dashed var(--v2-accent-line);border-radius:var(--v2-r-control);
  color:var(--v2-accent);font-weight:600;font-size:var(--v2-t-small);cursor:pointer}body.v2 .em-file{display:inline-flex;gap:var(--v2-s1h);align-items:center;padding:var(--v2-s1) var(--v2-s2);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);font-size:var(--v2-t-small);color:var(--v2-sub)}body.v2 .em-file button{border:0;background:none;color:var(--v2-faint);cursor:pointer}body.v2 .em-facts{border:1px solid var(--v2-line);border-radius:var(--v2-r-control);padding:var(--v2-s4);align-self:start}body.v2 .em-facts h4{display:flex;gap:var(--v2-s2);align-items:flex-start;flex-wrap:wrap}body.v2 .em-facts h4 svg{width:22px;height:22px;color:var(--v2-sub)}body.v2 .em-facts h4 small{flex-basis:100%;margin-left:var(--v2-s6);font-weight:400;font-size:var(--v2-t-small);color:var(--v2-faint)}body.v2 .em-facts dl{margin:0;display:grid;gap:var(--v2-s1)}body.v2 .em-facts dt{font-size:var(--v2-t-small);color:var(--v2-faint);margin-top:var(--v2-s2)}body.v2 .em-facts dd{margin:0;font-size:var(--v2-t-body);color:var(--v2-ink);overflow-wrap:anywhere}body.v2 .em-foot{display:flex;align-items:center;gap:var(--v2-s3);padding:var(--v2-s3) var(--v2-s5);border-top:1px solid var(--v2-line);background:var(--v2-bg)}body.v2 .em-gmail{display:flex;align-items:center;gap:var(--v2-s3);padding:var(--v2-s1h) var(--v2-s2);border:1px solid var(--v2-line);border-radius:var(--v2-r-control)}body.v2 .em-gmail svg{width:26px;height:26px}body.v2 .em-gmail b{display:block;font-size:var(--v2-t-small);color:var(--v2-ink)}body.v2 .em-gmail small{display:block;font-size:var(--v2-t-small);color:var(--v2-faint)}body.v2 .em-gmail small.warn{color:var(--v2-warn)}body.v2 .em-sp{flex:1}body.v2 .em-sendcol{display:flex;flex-direction:column;align-items:flex-end;gap:var(--v2-s1)}body.v2 .em-sends{display:flex;gap:var(--v2-s2)}body.v2 .em-sendcol small{font-size:var(--v2-t-label);color:var(--v2-faint)}@media (max-width:980px){body.v2 .em-body{grid-template-columns:minmax(0,1fr)}body.v2 .em-tpl{flex-direction:row;overflow-x:auto}body.v2 .em-tpl button{min-width:190px}body.v2 .em-row{grid-template-columns:minmax(0,1fr)}body.v2 .em-hint,body.v2 .em-warn,body.v2 .em-cands{margin-left:0}body.v2 .em-foot{flex-wrap:wrap}
}/* R18 · The opportunity summary, now directly under the stat ribbon: the same
   block, held to a few lines so the decision is still one scroll away. */body.v2 .v2-ovsummary{margin-top:var(--v2-s3)}/* The composer's fields take the same form styling as every other field. */body.v2 .em-row input,body.v2 .em-row textarea{display:block;box-sizing:border-box;font:inherit;font-size:var(--v2-t-body);
  color:var(--v2-ink);background:var(--v2-panel);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);padding:var(--v2-s2) var(--v2-s3)}body.v2 .em-row textarea{font-family:inherit}body.v2 .em-row input:focus,body.v2 .em-row textarea:focus{outline:2px solid var(--v2-accent-line);outline-offset:0;border-color:var(--v2-accent)}body.v2 .em-to input{border:0;padding:var(--v2-s2) var(--v2-s3)}body.v2 .em-to:focus-within{border-color:var(--v2-accent)}

/* ══ R18 · Network, as the design lays it out ═════════════════════════
   One pill row of five, a filter bar, the table, and a detail panel beside
   it. The panel follows the selected row;the list never navigates away. */
body.v2 .net-tabs{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));border:1px solid var(--v2-line);
  border-radius:var(--v2-r-control);overflow:hidden;margin-bottom:var(--v2-s3)}body.v2 .net-tabs button{display:flex;align-items:center;justify-content:center;gap:var(--v2-s2);padding:var(--v2-s3) var(--v2-s3);border:0;
  border-right:1px solid var(--v2-line);background:transparent;color:var(--v2-sub);font-size:var(--v2-t-entity);font-weight:600;cursor:pointer}body.v2 .net-tabs button:last-child{border-right:0}body.v2 .net-tabs button.on{color:var(--v2-accent);background:var(--v2-accent-soft);box-shadow:inset 0 -2px 0 var(--v2-accent)}body.v2 .net-tabs .pd-tabn{font-style:normal;color:var(--v2-accent);font-weight:700}body.v2 .net-bar{display:flex;gap:var(--v2-s3);align-items:flex-end;padding:var(--v2-s3);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-control);margin-bottom:var(--v2-s3);background:var(--v2-panel)}body.v2 .net-f{display:flex;flex-direction:column;gap:var(--v2-s1h);min-width:190px}body.v2 .net-f.grow{flex:1}body.v2 .net-f span{font-size:var(--v2-t-small);color:var(--v2-sub)}body.v2 .net-f input,body.v2 .net-f select{font:inherit;font-size:var(--v2-t-body);color:var(--v2-ink);background:var(--v2-bg);
  border:1px solid var(--v2-line);border-radius:var(--v2-r-control);padding:var(--v2-s2) var(--v2-s2)}body.v2 .net-vet{align-self:stretch;min-width:170px;justify-content:center;font-weight:700}body.v2 .net-vet.wide{width:100%;margin-top:var(--v2-s3)}body.v2 .net-wrap{display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:var(--v2-s4);align-items:start}body.v2 .net-tablewrap{border:1px solid var(--v2-line);border-radius:var(--v2-r-control);overflow:auto;background:var(--v2-panel)}body.v2 .net-table{width:100%;border-collapse:collapse}body.v2 .net-table th{font-size:var(--v2-t-small);font-weight:600;color:var(--v2-sub);text-transform:none;letter-spacing:0;text-align:left;padding:var(--v2-s3) var(--v2-s2);border-bottom:1px solid var(--v2-line)}body.v2 .net-table td{padding:var(--v2-s3) var(--v2-s2);border-bottom:1px solid var(--v2-line2);font-size:var(--v2-t-body);vertical-align:middle}body.v2 .net-table tbody tr{cursor:pointer}body.v2 .net-table tbody tr:hover{background:var(--v2-line2)}body.v2 .net-table tbody tr.on{background:var(--v2-accent-soft);box-shadow:inset 3px 0 0 var(--v2-accent)}body.v2 .net-table td .faint{color:var(--v2-faint)}body.v2 .net-acts{white-space:nowrap}body.v2 .net-acts .pd-btn{margin-right:var(--v2-s1h)}body.v2 .pd-btn.danger{color:var(--v2-bad);border-color:var(--v2-bad-line,var(--v2-bad))}body.v2 .net-chip{display:inline-block;padding:var(--v2-s0) var(--v2-s2);border-radius:6px;border:1px solid var(--v2-line);background:var(--v2-line2);
  font-size:var(--v2-t-label);font-weight:600;color:var(--v2-sub);white-space:nowrap}body.v2 .net-chip.src,body.v2 .net-chip.violet{color:var(--v2-violet);border-color:color-mix(in srgb,var(--v2-violet) 45%,var(--v2-line));background:var(--v2-violet-soft,var(--v2-line2))}body.v2 .net-chip.ok{color:var(--v2-ok);border-color:var(--v2-ok-line,var(--v2-ok));background:var(--v2-ok-soft)}body.v2 .net-chip.warn{color:var(--v2-warn);border-color:var(--v2-warn-line,var(--v2-warn));background:var(--v2-warn-soft)}body.v2 .net-chip.bad{color:var(--v2-bad);border-color:var(--v2-bad-line,var(--v2-bad));background:var(--v2-bad-soft)}body.v2 .net-pager{display:flex;align-items:center;gap:var(--v2-s2);padding:var(--v2-s3) var(--v2-s3);color:var(--v2-sub);font-size:var(--v2-t-small)}body.v2 .net-pager .sp{flex:1}body.v2 .net-panel{border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-panel);
  position:sticky;top:12px;display:flex;flex-direction:column;max-height:calc(100vh - 40px)}body.v2 .net-ph{display:flex;gap:var(--v2-s3);align-items:flex-start;justify-content:space-between;padding:var(--v2-s4)}body.v2 .net-ph h4{margin:0;font-family:var(--v2-display);font-size:var(--v2-t-title);color:var(--v2-ink)}body.v2 .net-ph small{display:block;margin-top:var(--v2-s1);color:var(--v2-sub);font-size:var(--v2-t-small)}body.v2 .net-ptabs{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--v2-line);border-bottom:1px solid var(--v2-line)}body.v2 .net-ptabs button{padding:var(--v2-s2) var(--v2-s1h);border:0;background:transparent;color:var(--v2-sub);font-weight:600;font-size:var(--v2-t-small);cursor:pointer}body.v2 .net-ptabs button.on{color:var(--v2-accent);background:var(--v2-accent-soft);box-shadow:inset 0 -2px 0 var(--v2-accent)}body.v2 .net-pbody{padding:var(--v2-s4);overflow:auto;min-height:0}body.v2 .net-pbody h6{margin:var(--v2-s4) 0 var(--v2-s2);font-size:var(--v2-t-body);font-weight:700;color:var(--v2-ink)}body.v2 .net-card{border:1px solid var(--v2-line);border-radius:var(--v2-r-control);padding:var(--v2-s3)}body.v2 .net-card h5{margin:0 0 var(--v2-s2);font-size:var(--v2-t-body);color:var(--v2-ink)}body.v2 .net-card p{margin:var(--v2-s1h) 0 0}body.v2 .net-card b.ok{color:var(--v2-ok)}body.v2 .net-chips{display:flex;flex-wrap:wrap;gap:var(--v2-s1h)}body.v2 .net-hint{margin:var(--v2-s2) 0 0;font-size:var(--v2-t-small);color:var(--v2-faint)}body.v2 .net-kv{display:grid;grid-template-columns:110px minmax(0,1fr);gap:var(--v2-s2);padding:var(--v2-s1) 0;font-size:var(--v2-t-body)}body.v2 .net-kv span{color:var(--v2-sub)}body.v2 .net-kv b{color:var(--v2-ink);font-weight:500;overflow-wrap:anywhere}body.v2 .net-kv i{color:var(--v2-faint);font-style:normal}body.v2 .net-kv a{overflow-wrap:anywhere}body.v2 .net-link{display:block;border:0;background:none;color:var(--v2-accent);text-align:left;padding:var(--v2-s1) 0;cursor:pointer;font-weight:600}body.v2 .net-pbody textarea{width:100%;box-sizing:border-box;font:inherit;font-size:var(--v2-t-body);color:var(--v2-ink);
  background:var(--v2-bg);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);padding:var(--v2-s2) var(--v2-s2);resize:vertical}body.v2 .net-notef{display:flex;justify-content:space-between;align-items:center;margin-top:var(--v2-s1h)}body.v2 .net-notef small{color:var(--v2-faint);font-size:var(--v2-t-label)}body.v2 .net-pf{display:grid;grid-template-columns:1fr 1fr;gap:var(--v2-s2);padding:var(--v2-s3) var(--v2-s4);border-top:1px solid var(--v2-line)}body.v2 .net-pf .pd-btn{justify-content:center;text-align:center}@media (max-width:1180px){body.v2 .net-wrap{grid-template-columns:minmax(0,1fr)}body.v2 .net-panel{position:static;max-height:none}
}@media (max-width:760px){body.v2 .net-tabs{grid-template-columns:repeat(3,minmax(0,1fr))}body.v2 .net-bar{flex-direction:column;align-items:stretch}body.v2 .net-f{min-width:0}
}/* ══ R18 · Portals & readiness, as the design lays it out ════════════
   Two views (registry · health), five stat cards that are also filters, the
   registry table, and the SOP-010 panel beside it for the selected portal. */body.v2 .pt2-tabs{display:inline-flex;border:1px solid var(--v2-line);border-radius:var(--v2-r-control);overflow:hidden;margin-bottom:var(--v2-s3)}body.v2 .pt2-tabs button{padding:var(--v2-s2) var(--v2-s6);border:0;background:transparent;color:var(--v2-sub);font-weight:600;font-size:var(--v2-t-body);cursor:pointer}body.v2 .pt2-tabs button.on{background:var(--v2-accent-soft);color:var(--v2-accent);box-shadow:inset 0 0 0 1px var(--v2-accent);border-radius:var(--v2-r-control)}body.v2 .pt2-stats{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:var(--v2-s2);margin-bottom:var(--v2-s3)}body.v2 .pt2-stat{display:flex;gap:var(--v2-s3);align-items:center;padding:var(--v2-s3) var(--v2-s4);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);
  background:var(--v2-panel);color:var(--v2-ink);cursor:pointer;text-align:left}body.v2 .pt2-stat i{width:40px;height:40px;display:flex;align-items:center;justify-content:center;flex:none}body.v2 .pt2-stat i svg{width:30px;height:30px}body.v2 .pt2-stat.ACTIVE i{color:var(--v2-accent)}body.v2 .pt2-stat.PENDING i{color:var(--v2-warn)}body.v2 .pt2-stat.MISSING i{color:var(--v2-violet)}body.v2 .pt2-stat.NOT_PRIORITY i{color:var(--v2-bad)}body.v2 .pt2-stat.ALL i{color:var(--v2-sub)}body.v2 .pt2-stat b{display:block;font-family:var(--v2-display);font-size:var(--v2-t-display);line-height:1;font-weight:700}body.v2 .pt2-stat em{display:block;font-style:normal;font-size:var(--v2-t-body);font-weight:600;margin-top:var(--v2-s1)}body.v2 .pt2-stat small{display:block;font-size:var(--v2-t-small);color:var(--v2-faint)}body.v2 .pt2-stat.on{border-color:var(--v2-accent);background:var(--v2-accent-soft)}body.v2 .pt2-wrap{display:grid;grid-template-columns:minmax(0,1fr) 540px;gap:var(--v2-s4);align-items:start}body.v2 .pt2-wrap.solo{grid-template-columns:minmax(0,1fr)}body.v2 .pt2-reg{border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-panel);overflow:hidden}body.v2 .pt2-regh{display:flex;align-items:center;gap:var(--v2-s3);padding:var(--v2-s3) var(--v2-s4);border-bottom:1px solid var(--v2-line);flex-wrap:wrap}body.v2 .pt2-regh h3{margin:0;font-family:var(--v2-display);font-size:var(--v2-t-title);color:var(--v2-ink)}body.v2 .pt2-meta{color:var(--v2-sub);font-size:var(--v2-t-small)}body.v2 .pt2-regh .sp{flex:1}body.v2 .pt2-regh .pt-q{font:inherit;font-size:var(--v2-t-small);color:var(--v2-ink);background:var(--v2-bg);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-control);padding:var(--v2-s1h) var(--v2-s2);min-width:200px}body.v2 .pt2-filt{padding:var(--v2-s2) var(--v2-s4);font-size:var(--v2-t-small);color:var(--v2-sub);border-bottom:1px solid var(--v2-line2)}body.v2 .pt2-tablewrap{overflow:auto}body.v2 .pt2-table{width:100%;border-collapse:collapse}body.v2 .pt2-table th{text-align:left;font-size:var(--v2-t-small);font-weight:600;color:var(--v2-sub);padding:var(--v2-s3) var(--v2-s3);border-bottom:1px solid var(--v2-line)}body.v2 .pt2-table td{padding:var(--v2-s2) var(--v2-s3);border-bottom:1px solid var(--v2-line2);font-size:var(--v2-t-body);vertical-align:middle}body.v2 .pt2-table tbody tr{cursor:pointer}body.v2 .pt2-table tbody tr:hover{background:var(--v2-line2)}body.v2 .pt2-table tbody tr.on{background:var(--v2-accent-soft);box-shadow:inset 3px 0 0 var(--v2-accent)}body.v2 .pt2-table td .faint{color:var(--v2-faint)}body.v2 .pt2-pri{display:inline-block;min-width:64px;text-align:center;padding:var(--v2-s0) var(--v2-s2);border-radius:5px;font-size:var(--v2-t-label);font-weight:700;letter-spacing:.04em;
  border:1px solid var(--v2-line);color:var(--v2-sub)}body.v2 .pt2-pri.high{color:var(--v2-bad);border-color:var(--v2-bad-line,var(--v2-bad));background:var(--v2-bad-soft)}body.v2 .pt2-pri.medium{color:var(--v2-warn);border-color:var(--v2-warn-line,var(--v2-warn));background:var(--v2-warn-soft)}body.v2 .pt2-pri.low{color:var(--v2-sub);background:var(--v2-line2)}body.v2 .pt2-dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:var(--v2-faint);margin-right:var(--v2-s2);vertical-align:middle}body.v2 .pt2-dot.ok{background:var(--v2-ok-dot,var(--v2-ok))}body.v2 .pt2-dot.warn{background:var(--v2-warn-dot,var(--v2-warn))}body.v2 .pt2-dot.bad{background:var(--v2-bad-dot,var(--v2-bad))}body.v2 .pt2-acts{white-space:nowrap}body.v2 .pt2-acts .pd-btn{color:var(--v2-accent);border-color:var(--v2-accent-line)}body.v2 .pt2-menuw{position:relative;display:inline-block}body.v2 .pt2-kebab{border:0;background:none;color:var(--v2-sub);font-size:var(--v2-t-title);padding:0 var(--v2-s2);cursor:pointer}body.v2 .pt2-menu{position:absolute;right:0;top:100%;z-index:20;display:flex;flex-direction:column;min-width:150px;border:1px solid var(--v2-line);
  border-radius:var(--v2-r-control);background:var(--v2-panel);box-shadow:var(--v2-shadow-overlay)}body.v2 .pt2-menu button{border:0;background:none;text-align:left;padding:var(--v2-s2) var(--v2-s3);color:var(--v2-ink);cursor:pointer;font-size:var(--v2-t-small)}body.v2 .pt2-menu button:hover{background:var(--v2-line2)}body.v2 .pt2-panel{border:1px solid var(--v2-line);border-left:3px solid var(--v2-accent);border-radius:var(--v2-r-control);background:var(--v2-panel);
  padding:var(--v2-s4);position:sticky;top:12px;display:flex;flex-direction:column;gap:var(--v2-s3)}body.v2 .pt2-ph{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--v2-s3)}body.v2 .pt2-ph h4{margin:0;font-family:var(--v2-display);font-size:var(--v2-t-say);color:var(--v2-ink)}body.v2 .pt2-ph small{color:var(--v2-sub);font-size:var(--v2-t-body)}body.v2 .pt2-score{font-family:var(--v2-display);font-size:var(--v2-t-say);color:var(--v2-accent);white-space:nowrap}body.v2 .pt2-score small{font-size:var(--v2-t-body);color:var(--v2-sub);font-weight:500}body.v2 .pt2-pcard{border:1px solid var(--v2-line);border-radius:var(--v2-r-control);padding:var(--v2-s3)}body.v2 .pt2-pch{display:flex;justify-content:space-between;align-items:center;gap:var(--v2-s2)}body.v2 .pt2-pch b{font-size:var(--v2-t-entity);color:var(--v2-ink)}body.v2 .pt2-pcard p{margin:var(--v2-s1h) 0 0;color:var(--v2-sub);font-size:var(--v2-t-small)}/* the login vault card */body.v2 .pt2-vault{margin-top:var(--v2-s3);display:flex;flex-direction:column;gap:var(--v2-s2)}body.v2 .pt2-vault p{margin:0}body.v2 .pt2-vlock{font-size:var(--v2-t-small);color:var(--v2-sub);border:1px solid var(--v2-line);border-radius:var(--v2-r-full);padding:var(--v2-s0) var(--v2-s2)}body.v2 .pt2-vrow{display:flex;gap:var(--v2-s2);align-items:center;flex-wrap:wrap;min-width:0}body.v2 .pt2-vrow input{flex:1 1 140px;min-width:0}body.v2 .pt2-vault input{border:1px solid var(--v2-line);border-radius:var(--v2-r-control);padding:var(--v2-s1h) var(--v2-s2);
  background:var(--v2-panel);color:var(--v2-ink);font-size:var(--v2-t-body)}body.v2 .pt2-vl{display:flex;flex-direction:column;gap:var(--v2-s1);font-size:var(--v2-t-small);color:var(--v2-sub)}body.v2 .pt2-vkv{display:grid;grid-template-columns:76px minmax(0,1fr) auto;gap:var(--v2-s2);align-items:center}body.v2 .pt2-vkv > span:first-child{font-size:var(--v2-t-small);color:var(--v2-sub)}body.v2 .pt2-vkv b{font-size:var(--v2-t-body);color:var(--v2-ink);overflow-wrap:anywhere}body.v2 .pt2-vpw{font-family:var(--v2-mono)}body.v2 .pt2-vby{color:var(--v2-sub);font-size:var(--v2-t-small);margin-left:auto}body.v2 .pt2-verr{color:var(--v2-ink);font-weight:600}body.v2 .pt2-pkv{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--v2-s2);margin-top:var(--v2-s3);padding-top:var(--v2-s3);border-top:1px solid var(--v2-line2)}body.v2 .pt2-pkv span{display:block;font-size:var(--v2-t-small);color:var(--v2-faint)}body.v2 .pt2-pkv b{display:block;font-size:var(--v2-t-body);color:var(--v2-ink);font-weight:600;margin-top:var(--v2-s0)}body.v2 .pt2-check h5{margin:0;font-family:var(--v2-display);font-size:var(--v2-t-title);color:var(--v2-ink)}body.v2 .pt2-sub{margin:var(--v2-s1) 0 var(--v2-s2);color:var(--v2-sub);font-size:var(--v2-t-small)}body.v2 .pt2-ci{display:flex;gap:var(--v2-s3);align-items:flex-start;width:100%;text-align:left;padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);
  border-bottom:0;background:var(--v2-panel);color:var(--v2-ink);cursor:pointer;font-size:var(--v2-t-body)}body.v2 .pt2-ci:first-of-type{border-radius:var(--v2-r-control) var(--v2-r-control) 0 0}body.v2 .pt2-ci:last-of-type{border-bottom:1px solid var(--v2-line);border-radius:0 0 var(--v2-r-control) var(--v2-r-control)}body.v2 .pt2-box{width:20px;height:20px;flex:none;border:1.5px solid var(--v2-sub);border-radius:4px;display:flex;align-items:center;justify-content:center;
  font-size:var(--v2-t-body);font-weight:700}body.v2 .pt2-ci.on .pt2-box{background:var(--v2-accent);border-color:var(--v2-accent);color:var(--v2-bg)}body.v2 .pt2-warn{display:flex;gap:var(--v2-s2);padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-warn-line,var(--v2-warn));border-radius:var(--v2-r-control);
  background:var(--v2-warn-soft);color:var(--v2-warn);font-weight:600;font-size:var(--v2-t-small)}body.v2 .pt2-cad{display:grid;grid-template-columns:1fr 1fr;gap:var(--v2-s2)}body.v2 .pt2-cad div{border:1px solid var(--v2-line);border-radius:var(--v2-r-control);padding:var(--v2-s2) var(--v2-s3)}body.v2 .pt2-cad b{display:block;font-size:var(--v2-t-body);color:var(--v2-ink)}body.v2 .pt2-cad small{font-size:var(--v2-t-small);color:var(--v2-faint)}body.v2 .pt2-pf{display:grid;grid-template-columns:1.3fr 1.2fr 1fr;gap:var(--v2-s2)}body.v2 .pt2-pf .pd-btn{justify-content:center}body.v2 .pt2-healthfull{max-width:760px;margin-top:var(--v2-s3)}@media (max-width:1280px){body.v2 .pt2-wrap{grid-template-columns:minmax(0,1fr)}body.v2 .pt2-panel{position:static}
}@media (max-width:760px){body.v2 .pt2-stats{grid-template-columns:repeat(2,minmax(0,1fr))}body.v2 .pt2-pkv{grid-template-columns:1fr}body.v2 .pt2-pf{grid-template-columns:1fr}
}

/* ══ R18 · Sourcing, as the design lays it out ════════════════════════
   Full-width source tabs; one filter row; the strip; cards in three zones
   (what · the facts · when and what to do);the intake panel beside. */
body.v2 .pd-srcviews{display:block}body.v2 .pd-srcviews .pd-hint{display:block;margin:-var(--v2-s1h) 0 var(--v2-s3);font-size:var(--v2-t-small);color:var(--v2-faint)}body.v2 .pd-srctabs{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:0;border:1px solid var(--v2-line);
  border-radius:var(--v2-r-control);overflow:hidden;margin-bottom:var(--v2-s3)}body.v2 .pd-srctabs button{justify-content:center;padding:var(--v2-s3) var(--v2-s3);border:0;border-right:1px solid var(--v2-line);border-radius:0;
  background:var(--v2-panel);color:var(--v2-sub);font-size:var(--v2-t-body);font-weight:600}body.v2 .pd-srctabs button:last-child{border-right:0}body.v2 .pd-srctabs button i svg{width:22px;height:22px}body.v2 .pd-srctabs button.on{background:var(--v2-accent-soft);color:var(--v2-accent);border-color:var(--v2-line);box-shadow:inset 0 -2px 0 var(--v2-accent)}body.v2 .src2-layout{display:grid;grid-template-columns:minmax(0,1fr) 250px;gap:var(--v2-s4);align-items:start}body.v2 .src2-maincol{min-width:0}body.v2 .src2-bar{display:flex;gap:var(--v2-s3);align-items:flex-end;flex-wrap:wrap;padding:var(--v2-s3) var(--v2-s4);
  border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-panel);margin-bottom:var(--v2-s3)}body.v2 .src2-f{display:flex;flex-direction:column;gap:var(--v2-s1h);min-width:150px;flex:1 1 150px}body.v2 .src2-f.grow{flex:2 1 240px}body.v2 .src2-f > span:first-child{font-size:var(--v2-t-small);color:var(--v2-sub)}body.v2 .src2-f select,body.v2 .src2-f input,body.v2 .src2-side-panel select,body.v2 .src2-side-panel input{width:100%;box-sizing:border-box;font:inherit;
  font-size:var(--v2-t-body);color:var(--v2-ink);background:var(--v2-bg);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);padding:var(--v2-s2) var(--v2-s2)}body.v2 .src2-in{position:relative;display:block}body.v2 .src2-in svg{position:absolute;left:10px;top:50%;transform:translateY(-50%);width:16px;height:16px;color:var(--v2-faint)}body.v2 .src2-in input{padding-left:var(--v2-s6)}body.v2 .src2-go{display:flex;gap:var(--v2-s2);align-items:center}body.v2 .src2-go .pd-btn,body.v2 .src2-sidego{display:inline-flex;align-items:center;gap:var(--v2-s2);justify-content:center;padding:var(--v2-s2) var(--v2-s4);font-weight:700}body.v2 .src2-go .pd-btn svg,body.v2 .src2-sidego svg{width:17px;height:17px}body.v2 .src2-strip{display:flex;align-items:center;gap:var(--v2-s3);flex-wrap:wrap;padding:var(--v2-s2) var(--v2-s4);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-control);background:var(--v2-panel);margin-bottom:var(--v2-s2);font-size:var(--v2-t-body);color:var(--v2-sub)}body.v2 .src2-info b{color:var(--v2-ink)}body.v2 .src2-hid{border:1px solid var(--v2-warn-line,var(--v2-warn));background:var(--v2-warn-soft);color:var(--v2-warn);border-radius:var(--v2-r-control);
  padding:var(--v2-s1h) var(--v2-s3);font-size:var(--v2-t-small);font-weight:600;cursor:pointer}body.v2 .src2-hid b{margin-left:var(--v2-s2);color:var(--v2-accent)}body.v2 .src2-hid.on{border-color:var(--v2-line);background:transparent;color:var(--v2-sub)}body.v2 .src2-n{color:var(--v2-ink);font-size:var(--v2-t-entity)}body.v2 .src2-viewbar{display:flex;align-items:center;justify-content:flex-end;gap:var(--v2-s4);margin:var(--v2-s2) 0}body.v2 .src2-layoutsw{display:inline-flex;border:1px solid var(--v2-line);border-radius:var(--v2-r-control);overflow:hidden}body.v2 .src2-layoutsw button{border:0;background:transparent;color:var(--v2-sub);padding:var(--v2-s1h) var(--v2-s3);font-weight:600;font-size:var(--v2-t-small);cursor:pointer}body.v2 .src2-layoutsw button.on{background:var(--v2-accent-soft);color:var(--v2-accent)}body.v2 .src2-pager{display:flex;align-items:center;gap:var(--v2-s1h)}body.v2 .src2-pager.bottom{margin-top:var(--v2-s3);padding:var(--v2-s2) 0}body.v2 .src2-pager .src-pg{min-width:32px;height:32px;border-radius:var(--v2-r-control);border:1px solid transparent;background:transparent;color:var(--v2-sub);cursor:pointer}body.v2 .src2-pager .src-pg.on{border-color:var(--v2-accent);color:var(--v2-accent);background:var(--v2-accent-soft)}body.v2 .src2-list{display:flex;flex-direction:column;gap:var(--v2-s3)}body.v2 .src2-card{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr) 170px;gap:var(--v2-s4);padding:var(--v2-s4);
  border:1px solid var(--v2-line);border-left:3px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-panel)}body.v2 .src2-card.sought{border-left-color:var(--v2-accent)}body.v2 .src2-card.sol{border-left-color:var(--v2-violet)}body.v2 .src2-card.taken{opacity:.75}body.v2 .src2-main{min-width:0}body.v2 .src2-main h4{margin:var(--v2-s2) 0 var(--v2-s0);font-family:var(--v2-display);font-size:var(--v2-t-title);line-height:1.3;color:var(--v2-ink)}body.v2 .src2-main .src-desc{margin-top:var(--v2-s2);-webkit-line-clamp:3}body.v2 .src2-meta{display:flex;flex-direction:column;gap:var(--v2-s1h);min-width:0;padding-left:var(--v2-s3);border-left:1px solid var(--v2-line2)}body.v2 .src2-mr{display:grid;grid-template-columns:20px 120px minmax(0,1fr);gap:var(--v2-s2);align-items:center;font-size:var(--v2-t-small)}body.v2 .src2-mr i{color:var(--v2-faint);display:flex}body.v2 .src2-mr i svg{width:16px;height:16px}body.v2 .src2-mr span{color:var(--v2-sub)}body.v2 .src2-mr b{color:var(--v2-ink);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}body.v2 .src2-mr b.none{color:var(--v2-faint);font-weight:400}body.v2 .src2-mr b.accent{color:var(--v2-accent);font-weight:700}body.v2 .src2-mr b.code{font-family:var(--v2-mono)}body.v2 .src2-side{display:flex;flex-direction:column;gap:var(--v2-s2)}body.v2 .src2-due{border:1px solid var(--v2-line);border-radius:var(--v2-r-control);padding:var(--v2-s2) var(--v2-s3);display:grid;grid-template-columns:auto 1fr;column-gap:var(--v2-s1h);align-items:baseline}body.v2 .src2-due small{grid-column:1/-1;font-size:var(--v2-t-small);color:var(--v2-sub)}body.v2 .src2-due b{font-family:var(--v2-display);font-size:var(--v2-t-display);line-height:1.05;color:var(--v2-ink)}body.v2 .src2-due em{font-style:normal;font-size:var(--v2-t-body);color:var(--v2-ink)}body.v2 .src2-due strong{grid-column:1/-1;font-size:var(--v2-t-body);color:var(--v2-ink)}body.v2 .src2-due.hot b,body.v2 .src2-due.hot em{color:var(--v2-warn)}body.v2 .src2-side .pd-btn,body.v2 .src2-side .pd-chip{display:inline-flex;align-items:center;justify-content:center;gap:var(--v2-s2);width:100%;box-sizing:border-box}body.v2 .src2-side .pd-btn svg{width:16px;height:16px}body.v2 .src2-sam{color:var(--v2-accent);border-color:var(--v2-accent-line)}body.v2 .src2-intake{font-weight:700;padding:var(--v2-s2)}body.v2 .src2-flag{font-size:var(--v2-t-label);color:var(--v2-accent);border:1px solid var(--v2-accent-line);background:var(--v2-accent-soft);border-radius:var(--v2-r-control);padding:var(--v2-s1h) var(--v2-s2);line-height:1.35}body.v2 .src2-budmini{margin-top:var(--v2-s2);font-size:var(--v2-t-small);color:var(--v2-faint)}body.v2 .src2-budmini span{font-size:var(--v2-t-label);font-weight:700;letter-spacing:.06em;text-transform:uppercase;margin-right:var(--v2-s1h)}body.v2 .src2-tablewrap{overflow:auto;border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-panel)}body.v2 .src2-table{width:100%;border-collapse:collapse}body.v2 .src2-table th{text-align:left;font-size:var(--v2-t-small);font-weight:600;color:var(--v2-sub);padding:var(--v2-s2);border-bottom:1px solid var(--v2-line)}body.v2 .src2-table td{padding:var(--v2-s2);border-bottom:1px solid var(--v2-line2);font-size:var(--v2-t-body);vertical-align:top}body.v2 .src2-table td.hot{color:var(--v2-warn)}body.v2 .src2-table b.accent{color:var(--v2-accent)}body.v2 .src2-lacts{white-space:nowrap}body.v2 .src2-side-panel{border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-panel);padding:var(--v2-s4);
  display:flex;flex-direction:column;gap:var(--v2-s3);position:sticky;top:12px}body.v2 .src2-side-panel h3{display:flex;gap:var(--v2-s2);align-items:center;margin:0;font-family:var(--v2-display);font-size:var(--v2-t-title);color:var(--v2-ink)}body.v2 .src2-side-panel h3 svg{width:26px;height:26px;color:var(--v2-accent)}body.v2 .src2-side-panel > p{margin:0;font-size:var(--v2-t-small);color:var(--v2-sub)}body.v2 .src2-side-panel label{display:flex;flex-direction:column;gap:var(--v2-s1h)}body.v2 .src2-side-panel label > span:first-child{font-size:var(--v2-t-small);color:var(--v2-sub)}body.v2 .src2-or{display:flex;align-items:center;gap:var(--v2-s2);color:var(--v2-faint);font-size:var(--v2-t-small)}body.v2 .src2-or::before,body.v2 .src2-or::after{content:"";flex:1;border-top:1px solid var(--v2-line)}body.v2 .src2-sidego.ghost{color:var(--v2-accent);border-color:var(--v2-accent-line)}body.v2 .src2-note{margin:0;padding:var(--v2-s2);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);font-size:var(--v2-t-small);color:var(--v2-sub)}@media (max-width:1320px){body.v2 .src2-layout{grid-template-columns:minmax(0,1fr)}body.v2 .src2-side-panel{position:static}
}@media (max-width:1100px){body.v2 .src2-card{grid-template-columns:minmax(0,1fr) 170px}body.v2 .src2-meta{grid-column:1/-1;grid-row:2;border-left:0;padding-left:0}
}@media (max-width:680px){body.v2 .src2-card{grid-template-columns:minmax(0,1fr)}body.v2 .src2-side{grid-row:auto}body.v2 .src2-viewbar{justify-content:space-between;flex-wrap:wrap}
}body.v2 .net-table td.nw,body.v2 .pt2-table td:nth-child(4),body.v2 .pt2-table td:nth-child(5){white-space:nowrap}body.v2 .em-add input[type=file]{display:none}/* ══ R19 · The pursuit header, To do, Overview, Plan and Subs & quotes ═══ */
/* The header the designs share */body.v2 .pd-dh.dh2{display:block;padding:var(--v2-s3) 0 0}body.v2 .dh2-top{display:flex;align-items:center;gap:var(--v2-s3);flex-wrap:wrap}body.v2 .dh2-top .sp{flex:1}body.v2 .dh2-back{border:1px solid var(--v2-line);background:var(--v2-panel);color:var(--v2-ink);border-radius:var(--v2-r-control);
  padding:var(--v2-s2) var(--v2-s3);font-weight:600;font-size:var(--v2-t-body);cursor:pointer}body.v2 .dh2-back:hover{border-color:var(--v2-accent)}body.v2 .dh2-acts{display:flex;gap:var(--v2-s2);flex-wrap:wrap;align-items:center}body.v2 .dh2-acts .pd-btn{padding:var(--v2-s2) var(--v2-s4);font-weight:600}body.v2 .dh2-ai{background:var(--v2-accent);color:var(--v2-bg);border-color:var(--v2-accent)}body.v2 .dh2-menuw,body.v2 .sq-menuw{position:relative;display:inline-block}body.v2 .dh2-menu,body.v2 .sq-menu{position:absolute;right:0;top:calc(100% + 4px);z-index:30;display:flex;flex-direction:column;min-width:180px;
  border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-panel);box-shadow:var(--v2-shadow-overlay);overflow:hidden}body.v2 .dh2-menu button,body.v2 .sq-menu button{border:0;background:none;text-align:left;padding:var(--v2-s2) var(--v2-s3);color:var(--v2-ink);cursor:pointer;font-size:var(--v2-t-body)}body.v2 .dh2-menu button:hover,body.v2 .sq-menu button:hover{background:var(--v2-line2)}body.v2 .dh2-menu .danger,body.v2 .sq-menu .danger{color:var(--v2-bad)}body.v2 .dh2-title{margin:var(--v2-s3) 0 var(--v2-s0);font-family:var(--v2-display);font-size:var(--v2-t-display);line-height:1.2;color:var(--v2-ink);letter-spacing:-.015em;text-wrap:balance}body.v2 .dh2-meta{font-size:var(--v2-t-entity);color:var(--v2-sub);white-space:pre-wrap}body.v2 .dh2-chips{display:flex;flex-wrap:wrap;gap:var(--v2-s2);margin:var(--v2-s3) 0}body.v2 .dh2-chip{display:inline-flex;align-items:center;gap:var(--v2-s2);padding:var(--v2-s1h) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);
  background:var(--v2-panel);color:var(--v2-ink);font-size:var(--v2-t-body);font-weight:500}body.v2 .dh2-chip.type.sought{border-color:var(--v2-warn-line,var(--v2-warn));color:var(--v2-warn);background:var(--v2-warn-soft)}body.v2 .dh2-chip.due.warn{border-color:var(--v2-warn-line,var(--v2-warn))}body.v2 .dh2-chip.due.bad{border-color:var(--v2-bad-line,var(--v2-bad));color:var(--v2-bad)}body.v2 .dh2-chip.stage select{border:0;background:transparent;color:var(--v2-ink);font:inherit;font-weight:600;padding:0;cursor:pointer}body.v2 .dh2-dot{width:9px;height:9px;border-radius:50%;background:var(--v2-warn-dot,var(--v2-warn));display:inline-block}/* The deadline strip, what to do now, and the numbered stages */.gr{background:transparent;border:0;padding:0;display:flex;flex-direction:column;gap:var(--v2-s2)}.gr-fit{display:flex;align-items:center;gap:var(--v2-s3);margin:0;padding:var(--v2-s2) var(--v2-s3);font-size:var(--v2-t-body)}.gr-fit b{font-family:var(--v2-display);font-size:var(--v2-t-entity);white-space:nowrap}.gr-fit span{flex:1;min-width:0}.gr-fit-ic{font-style:normal;width:26px;height:26px;border-radius:50%;display:grid;place-items:center;font-weight:800;
  background:var(--v2-warn-dot,var(--v2-warn));color:var(--v2-bg);flex:none}.gr-fit.red .gr-fit-ic{background:var(--v2-bad-dot,var(--v2-bad))}.gr-fit-x{border:0;background:none;color:inherit;font-size:var(--v2-t-say);cursor:pointer;padding:0 var(--v2-s1)}.gr-now{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--v2-s1) var(--v2-s3);padding:var(--v2-s3) var(--v2-s4);
  border:1px solid var(--v2-line);border-left:3px solid var(--v2-accent);border-radius:var(--v2-r-control);background:var(--v2-panel)}.gr-now-ic{grid-row:span 2;font-style:normal;font-size:24px;color:var(--v2-accent)}.gr-now > label{grid-column:2;font-size:var(--v2-t-label);letter-spacing:.08em;color:var(--v2-faint)}.gr-now-t{grid-column:2;font-family:var(--v2-display);font-size:var(--v2-t-title);font-weight:700;color:var(--v2-ink)}.gr-now-t small{font-family:var(--v2-sans);font-size:var(--v2-t-body);font-weight:400;color:var(--v2-sub)}.gr-now .sope-ans{grid-column:2}.gr-now-a{grid-column:3;grid-row:1/span 3;display:flex;gap:var(--v2-s2);align-items:center;flex-wrap:wrap;justify-content:flex-end}.gr-now.done{grid-template-columns:minmax(0,1fr)}.gr-steps{gap:0;padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-panel)}.gr-step{flex-direction:row;align-items:center;gap:var(--v2-s2);border:0;background:transparent;padding:var(--v2-s1) var(--v2-s2);position:static}.gr-step i{position:static;width:28px;height:28px;border-radius:50%;border:1.5px solid var(--v2-line);display:grid;place-items:center;
  font-size:var(--v2-t-small);font-weight:700;color:var(--v2-sub)}.gr-step em{font-style:normal;font-size:var(--v2-t-small);line-height:1.25;max-width:110px;white-space:normal;text-align:left}.gr-step.cur i{border-color:var(--v2-accent);color:var(--v2-accent);box-shadow:0 0 0 3px var(--v2-accent-soft)}.gr-step.cur em{color:var(--v2-accent)}.gr-step.done i{border-color:var(--v2-ok);color:var(--v2-ok)}.gr-step span{display:none}.gr-sep{color:var(--v2-faint);font-weight:400;padding:0 var(--v2-s1h)}/* To do: checklist with evidence, and the side column */body.v2 .v2-todo{display:grid;grid-template-columns:minmax(0,1fr) 400px;gap:var(--v2-s4);align-items:start}body.v2 .v2-todo-side{display:flex;flex-direction:column;gap:var(--v2-s3);position:sticky;top:12px}body.v2 .v2-todo-card{margin:0}body.v2 .v2-todo-proc{display:flex;gap:var(--v2-s3);align-items:center;justify-content:space-between}body.v2 .v2-todo-proc b{display:block;color:var(--v2-ink)}body.v2 .v2-todo-proc span{font-size:var(--v2-t-small);color:var(--v2-faint)}body.v2 .sope-item.ev{display:grid;grid-template-columns:auto minmax(0,1fr) minmax(210px,300px);gap:var(--v2-s3);align-items:start}body.v2 .sope-ev{display:flex;flex-direction:column;gap:var(--v2-s1);border-left:1px solid var(--v2-line2);padding-left:var(--v2-s3);cursor:default}body.v2 .sope-evl{font-size:var(--v2-t-label);color:var(--v2-faint)}body.v2 .sope-evadd,body.v2 .sope-evv{border:0;background:none;padding:0;text-align:left;color:var(--v2-accent);font-size:var(--v2-t-small);cursor:pointer}body.v2 .sope-evv{color:var(--v2-ink)}body.v2 .sope-evf{display:flex;gap:var(--v2-s1h)}body.v2 .sope-evf input{flex:1;min-width:0;font:inherit;font-size:var(--v2-t-small);color:var(--v2-ink);background:var(--v2-bg);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-control);padding:var(--v2-s1h) var(--v2-s2)}/* Overview: Ready to send in one row */body.v2 .v2-send-h{display:flex;align-items:baseline;gap:var(--v2-s3);flex-wrap:wrap;margin-bottom:var(--v2-s2)}body.v2 .v2-send-h h4{margin:0}body.v2 .v2-send-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--v2-s2)}body.v2 .v2-sendb{display:flex;align-items:center;gap:var(--v2-s2);padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);
  background:var(--v2-panel);color:var(--v2-ink);cursor:pointer;text-align:left}body.v2 .v2-sendb:hover{border-color:var(--v2-accent)}body.v2 .v2-sendb svg{width:22px;height:22px;color:var(--v2-sub);flex:none}body.v2 .v2-sendb b{display:block;font-size:var(--v2-t-body);font-weight:600}body.v2 .v2-sendb small{display:block;font-size:var(--v2-t-small);color:var(--v2-sub)}/* Plan: one line per phase */body.v2 .pd-phases .pd-phase{border:0;border-bottom:1px solid var(--v2-line2);border-radius:0;padding:0;background:transparent}body.v2 .pd-phase-h .pd-phase-why{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}body.v2 .pd-phase-h{padding:var(--v2-s2) var(--v2-s2)}/* Subs & quotes · Candidates */body.v2 .sq-grid{display:grid;grid-template-columns:minmax(0,1fr) 370px;gap:var(--v2-s4);align-items:start}body.v2 .sq-short{margin:0}body.v2 .sq-shorth{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--v2-s3);flex-wrap:wrap}body.v2 .sq-shorth h3,body.v2 .pk-ph h3,body.v2 .gp-lh h3,body.v2 .gp-detail h3,body.v2 .pk-req h3{margin:0;font-family:var(--v2-display);font-size:var(--v2-t-title);color:var(--v2-ink)}body.v2 .sq-count{margin:var(--v2-s1) 0 0;color:var(--v2-sub)}body.v2 .sq-count b{color:var(--v2-accent);font-size:var(--v2-t-title)}body.v2 .sq-count i{font-style:normal;color:var(--v2-line);margin:0 var(--v2-s2)}body.v2 .sq-warn{padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-warn-line,var(--v2-warn));border-radius:var(--v2-r-control);background:var(--v2-warn-soft);
  color:var(--v2-warn);font-weight:600;font-size:var(--v2-t-small)}body.v2 .sq-btns{display:flex;flex-wrap:wrap;gap:var(--v2-s2);margin:var(--v2-s3) 0}body.v2 .sq-btns .pd-btn{display:inline-flex;align-items:center;gap:var(--v2-s2);padding:var(--v2-s2) var(--v2-s4);font-weight:600}body.v2 .sq-btns .pd-btn svg,body.v2 .pk-big svg,body.v2 .gp-acts svg,body.v2 .gp-banner svg,body.v2 .gp-src svg{width:17px;height:17px}body.v2 .sq-steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--v2-s2);margin-bottom:var(--v2-s3)}body.v2 .sq-step{display:flex;gap:var(--v2-s3);align-items:flex-start;padding:var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);
  background:var(--v2-panel);color:var(--v2-ink);text-align:left;font:inherit;cursor:pointer}body.v2 div.sq-step{cursor:default}body.v2 button.sq-step:hover{border-color:var(--v2-accent)}body.v2 .sq-step i{font-style:normal;width:34px;height:34px;flex:none;border-radius:50%;border:1.5px solid var(--v2-accent);color:var(--v2-accent);
  display:grid;place-items:center;font-weight:700;font-size:var(--v2-t-small)}body.v2 .sq-step b{display:block;font-size:var(--v2-t-entity)}body.v2 .sq-step small{display:block;color:var(--v2-sub);font-size:var(--v2-t-small);margin-top:var(--v2-s1)}body.v2 .sq-tablewrap{overflow:auto;border:1px solid var(--v2-line);border-radius:var(--v2-r-control)}body.v2 .sq-table{width:100%;border-collapse:collapse}body.v2 .sq-table th{text-align:left;font-size:var(--v2-t-small);font-weight:600;color:var(--v2-sub);padding:var(--v2-s2) var(--v2-s3);border-bottom:1px solid var(--v2-line)}body.v2 .sq-table td{padding:var(--v2-s2) var(--v2-s3);border-bottom:1px solid var(--v2-line2);font-size:var(--v2-t-body);vertical-align:top}body.v2 .sq-table td small{display:block;color:var(--v2-faint);font-size:var(--v2-t-small);margin-top:var(--v2-s0)}body.v2 .sq-table td i{color:var(--v2-faint);font-style:normal}body.v2 .sq-table tr.dq{opacity:.6}body.v2 .sq-acts{white-space:nowrap}body.v2 .sq-acts .pd-btn{margin-right:var(--v2-s1)}body.v2 .sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}body.v2 .sq-empty{display:flex;flex-direction:column;align-items:center;gap:var(--v2-s1h);padding:var(--v2-s5) var(--v2-s3);text-align:center}body.v2 .sq-empty.dashed{border:1px dashed var(--v2-line);border-radius:var(--v2-r-control)}body.v2 .sq-empty span{color:var(--v2-sub);font-size:var(--v2-t-small)}body.v2 .sq-side{display:flex;flex-direction:column;gap:var(--v2-s3);position:sticky;top:12px}body.v2 .sq-card{margin:0}body.v2 .sq-card h4{margin:0 0 var(--v2-s2)}body.v2 .sq-card.warn{border-color:var(--v2-warn-line,var(--v2-warn))}body.v2 .sq-card.warn h4{color:var(--v2-warn)}body.v2 .sq-card.warn em{font-style:normal;color:var(--v2-bad)}body.v2 .sq-card p{margin:0 0 var(--v2-s2);color:var(--v2-sub)}body.v2 .sq-kv{display:grid;grid-template-columns:90px minmax(0,1fr);gap:var(--v2-s2);padding:var(--v2-s2) 0;border-bottom:1px solid var(--v2-line2);font-size:var(--v2-t-body)}body.v2 .sq-kv span{color:var(--v2-sub)}body.v2 .sq-kv b{color:var(--v2-ink);font-weight:500}body.v2 .sq-kv small{display:block;color:var(--v2-faint);font-weight:400;font-size:var(--v2-t-small)}body.v2 .sq-2btn{display:grid;grid-template-columns:1fr 1fr;gap:var(--v2-s2);margin-top:var(--v2-s3)}body.v2 .pd-btn.wide{width:100%;justify-content:center}body.v2 .sq-quotes{margin-top:var(--v2-s4)}/* Subs & quotes · RFQ package */body.v2 .pk-head{display:flex;align-items:flex-end;gap:var(--v2-s3);flex-wrap:wrap;margin-bottom:var(--v2-s3)}body.v2 .pk-head .sp{flex:1}body.v2 .pk-eyebrow{font-size:var(--v2-t-small);font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--v2-sub)}body.v2 .pk-eyebrow b{color:var(--v2-accent)}body.v2 .pk-head h2{margin:var(--v2-s0) 0;font-family:var(--v2-display);font-size:var(--v2-t-display);color:var(--v2-ink)}body.v2 .pk-head p{margin:0;color:var(--v2-sub);font-size:var(--v2-t-entity)}body.v2 .pk-sop{color:var(--v2-sub);font-size:var(--v2-t-small);align-self:center}body.v2 .pk-big{display:inline-flex;align-items:center;gap:var(--v2-s2);padding:var(--v2-s3) var(--v2-s5);font-weight:700;font-size:var(--v2-t-entity)}body.v2 .pk-brief{display:flex;gap:var(--v2-s3);align-items:center;padding:var(--v2-s3) var(--v2-s4);border:1px solid var(--v2-warn-line,var(--v2-warn));border-radius:var(--v2-r-control);
  background:var(--v2-warn-soft);margin-bottom:var(--v2-s3)}body.v2 .pk-brief i{font-style:normal;font-size:24px}body.v2 .pk-brief div{flex:1}body.v2 .pk-brief b{display:block;color:var(--v2-warn);font-size:var(--v2-t-entity)}body.v2 .pk-brief span{color:var(--v2-ink);font-size:var(--v2-t-body)}body.v2 .pk-brief button{border:0;background:none;color:var(--v2-ink);font-size:var(--v2-t-say);cursor:pointer}body.v2 .pk-grid{display:grid;grid-template-columns:minmax(0,1fr) 480px;gap:var(--v2-s4);align-items:start}body.v2 .pk-preview{margin:0}body.v2 .pk-ph{display:flex;justify-content:space-between;align-items:center;gap:var(--v2-s3);flex-wrap:wrap}body.v2 .pk-chip{padding:var(--v2-s1) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);font-size:var(--v2-t-small);color:var(--v2-sub)}body.v2 .pk-title{margin:var(--v2-s2) 0 var(--v2-s0);font-family:var(--v2-display);font-size:var(--v2-t-title);color:var(--v2-ink)}body.v2 .pk-sub{margin:0 0 var(--v2-s3);color:var(--v2-sub);font-size:var(--v2-t-body)}body.v2 .pk-facts{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--v2-s2)}body.v2 .pk-fact{border:1px solid var(--v2-line);border-radius:var(--v2-r-control);padding:var(--v2-s3);display:flex;flex-direction:column;gap:var(--v2-s1h);min-width:0}body.v2 .pk-fact label{display:flex;align-items:center;gap:var(--v2-s1h);font-size:var(--v2-t-label);font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--v2-accent)}body.v2 .pk-fact.site label{color:var(--v2-violet)}body.v2 .pk-fact.price label{color:var(--v2-warn)}body.v2 .pk-fact.due label{color:var(--v2-sub)}body.v2 .pk-fact label svg{width:16px;height:16px}body.v2 .pk-fact b{font-size:var(--v2-t-entity);color:var(--v2-ink);line-height:1.35;overflow-wrap:anywhere}body.v2 .pk-fact b.sm{font-size:var(--v2-t-body);font-weight:500}body.v2 .pk-fact small{font-size:var(--v2-t-small);color:var(--v2-sub);line-height:1.4}body.v2 .pk-fact small strong{font-size:var(--v2-t-entity);color:var(--v2-ink)}body.v2 .pk-alert{display:flex;gap:var(--v2-s3);margin-top:var(--v2-s3);padding:var(--v2-s3) var(--v2-s3);border:1px solid var(--v2-bad-line,var(--v2-bad));border-radius:var(--v2-r-control);background:var(--v2-bad-soft)}body.v2 .pk-alert i{font-style:normal;color:var(--v2-bad);font-size:var(--v2-t-say)}body.v2 .pk-alert b{display:block;color:var(--v2-bad)}body.v2 .pk-alert span{color:var(--v2-ink);font-size:var(--v2-t-body)}body.v2 .pk-accs{display:flex;flex-direction:column;gap:var(--v2-s2);margin-top:var(--v2-s3)}body.v2 .pk-acc{border:1px solid var(--v2-line);border-radius:var(--v2-r-control)}body.v2 .pk-acch{display:grid;grid-template-columns:28px auto minmax(0,1fr) 20px;gap:var(--v2-s3);align-items:center;width:100%;padding:var(--v2-s2) var(--v2-s3);border:0;
  background:transparent;color:var(--v2-ink);text-align:left;cursor:pointer;font:inherit}body.v2 .pk-acch i{font-style:normal;color:var(--v2-accent);font-size:var(--v2-t-entity)}body.v2 .pk-acch b{font-size:var(--v2-t-body)}body.v2 .pk-acch span{color:var(--v2-sub);font-size:var(--v2-t-small);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}body.v2 .pk-acch em{font-style:normal;color:var(--v2-sub);transition:transform var(--v2-fast)}body.v2 .pk-acc.open .pk-acch em{transform:rotate(180deg)}body.v2 .pk-accb{padding:0 var(--v2-s3) var(--v2-s3)}body.v2 .pk-side{display:flex;flex-direction:column;gap:var(--v2-s3)}body.v2 .pk-side .v2-block{margin:0}body.v2 .pk-badge{padding:var(--v2-s1h) var(--v2-s3);border-radius:var(--v2-r-control);background:var(--v2-warn-dot,var(--v2-warn));color:var(--v2-bg);font-weight:700;font-size:var(--v2-t-small)}body.v2 .pk-badge.ok{background:var(--v2-ok-dot,var(--v2-ok))}body.v2 .pk-check{display:grid;grid-template-columns:34px minmax(0,1fr) 16px;gap:var(--v2-s3);align-items:center;width:100%;padding:var(--v2-s2) var(--v2-s1);border:0;
  border-top:1px solid var(--v2-line2);background:transparent;color:var(--v2-ink);text-align:left;cursor:pointer;font:inherit}body.v2 .pk-check i{font-style:normal;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;border:2px solid}body.v2 .pk-check i.ok{color:var(--v2-bg);background:var(--v2-ok-dot,var(--v2-ok));border-color:var(--v2-ok-dot,var(--v2-ok))}body.v2 .pk-check i.warn{color:var(--v2-warn);border-color:var(--v2-warn)}body.v2 .pk-check i.bad{color:var(--v2-bad);border-color:var(--v2-bad)}body.v2 .pk-check b{display:block;font-size:var(--v2-t-body)}body.v2 .pk-check small{display:block;color:var(--v2-sub);font-size:var(--v2-t-small)}body.v2 .pk-check em{font-style:normal;color:var(--v2-sub)}body.v2 .pk-rq{display:grid;grid-template-columns:150px minmax(0,1fr);gap:var(--v2-s2);padding:var(--v2-s2) 0;border-top:1px solid var(--v2-line2);font-size:var(--v2-t-body)}body.v2 .pk-rq span{color:var(--v2-ink);font-weight:600;font-size:var(--v2-t-small)}body.v2 .pk-rq b{font-weight:400;color:var(--v2-sub)}body.v2 .pk-q{display:flex;justify-content:space-between;align-items:center;gap:var(--v2-s3)}body.v2 .pk-q b{font-family:var(--v2-display);font-size:var(--v2-t-title)}body.v2 .pk-q em{font-style:normal;color:var(--v2-accent)}body.v2 .pk-q small{display:block;color:var(--v2-sub);font-size:var(--v2-t-small)}/* Subs & quotes · Pricing gaps */body.v2 .gp-banner{display:flex;align-items:center;gap:var(--v2-s3);padding:var(--v2-s3) var(--v2-s4);border:1px solid var(--v2-warn-line,var(--v2-warn));border-radius:var(--v2-r-control);
  background:var(--v2-warn-soft);margin-bottom:var(--v2-s3)}body.v2 .gp-banner > i{font-style:normal;font-size:26px;color:var(--v2-warn)}body.v2 .gp-banner div{flex:1}body.v2 .gp-banner b{display:block;font-family:var(--v2-display);font-size:var(--v2-t-title);color:var(--v2-ink)}body.v2 .gp-banner span{color:var(--v2-ink)}body.v2 .gp-banner .pd-btn{display:inline-flex;align-items:center;gap:var(--v2-s2)}body.v2 .gp-grid{display:grid;grid-template-columns:minmax(0,1fr) 500px;gap:var(--v2-s4);align-items:start}body.v2 .gp-list,body.v2 .gp-detail{margin:0}body.v2 .gp-lh{display:flex;justify-content:space-between;align-items:center;gap:var(--v2-s3);flex-wrap:wrap;margin-bottom:var(--v2-s3)}body.v2 .gp-seg{display:inline-flex;border:1px solid var(--v2-line);border-radius:var(--v2-r-control);overflow:hidden}body.v2 .gp-seg button{border:0;background:transparent;color:var(--v2-ink);padding:var(--v2-s2) var(--v2-s3);font-weight:600;font-size:var(--v2-t-small);cursor:pointer}body.v2 .gp-seg button.on{background:var(--v2-accent);color:var(--v2-bg)}body.v2 .gp-row{display:grid;grid-template-columns:40px minmax(0,1fr) auto 18px;gap:var(--v2-s3);align-items:center;width:100%;padding:var(--v2-s2) var(--v2-s3);
  border:1px solid transparent;border-bottom-color:var(--v2-line2);background:transparent;color:var(--v2-ink);text-align:left;cursor:pointer;font:inherit}body.v2 .gp-row.on{border:1px solid var(--v2-accent);border-radius:var(--v2-r-control);background:var(--v2-accent-soft)}body.v2 .gp-row > i{font-style:normal;width:32px;height:32px;border-radius:50%;border:2px solid var(--v2-warn);color:var(--v2-warn);display:grid;place-items:center;font-weight:800}body.v2 .gp-row b{display:block;font-size:var(--v2-t-entity);font-weight:600}body.v2 .gp-row small{display:block;color:var(--v2-sub);font-size:var(--v2-t-small)}body.v2 .gp-row em{font-style:normal;font-size:var(--v2-t-label);font-weight:700;letter-spacing:.06em;text-transform:uppercase;padding:var(--v2-s1) var(--v2-s2);border-radius:5px;
  border:1px solid var(--v2-warn);color:var(--v2-warn);white-space:nowrap}body.v2 .gp-row em.docs{border-color:var(--v2-info,var(--v2-accent));color:var(--v2-info,var(--v2-accent))}body.v2 .gp-row strong{color:var(--v2-sub)}body.v2 .gp-pager{display:flex;align-items:center;gap:var(--v2-s2);margin-top:var(--v2-s3);color:var(--v2-sub);font-size:var(--v2-t-small);flex-wrap:wrap}body.v2 .gp-pager .sp{flex:1}body.v2 .gp-detail{display:flex;flex-direction:column;gap:var(--v2-s2);position:sticky;top:12px}body.v2 .gp-detail > label{font-weight:600;color:var(--v2-ink);font-size:var(--v2-t-body);margin-top:var(--v2-s1h)}body.v2 .gp-detail > label i{font-style:normal;font-weight:400;color:var(--v2-sub)}body.v2 .gp-src{display:flex;gap:var(--v2-s3);padding:var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control)}body.v2 .gp-src svg{color:var(--v2-sub);flex:none;width:22px;height:22px}body.v2 .gp-src b{display:block}body.v2 .gp-src span{color:var(--v2-sub);font-size:var(--v2-t-small)}body.v2 .gp-detail textarea,body.v2 .gp-detail input{width:100%;box-sizing:border-box;font:inherit;font-size:var(--v2-t-body);color:var(--v2-ink);
  background:var(--v2-bg);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);padding:var(--v2-s2) var(--v2-s3);resize:vertical}body.v2 .gp-acts{display:grid;grid-template-columns:1.2fr 1fr;gap:var(--v2-s2)}body.v2 .gp-acts .pd-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--v2-s2);padding:var(--v2-s2);font-weight:600}body.v2 .gp-read{margin:0;color:var(--v2-sub)}body.v2 .gp-qna{display:flex;gap:var(--v2-s3);align-items:flex-start;padding:var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);margin-top:var(--v2-s1h);font-size:var(--v2-t-say);color:var(--v2-accent)}body.v2 .gp-qna small{display:block;font-size:var(--v2-t-small);color:var(--v2-ink)}body.v2 .gp-qna b{display:block;font-size:var(--v2-t-entity);color:var(--v2-ink)}body.v2 .gp-qna span{display:block;font-size:var(--v2-t-small);color:var(--v2-sub)}body.v2 .gp-note{margin:0;color:var(--v2-sub);font-size:var(--v2-t-small)}@media (max-width:1280px){body.v2 .v2-todo,body.v2 .sq-grid,body.v2 .pk-grid,body.v2 .gp-grid{grid-template-columns:minmax(0,1fr)}body.v2 .v2-todo-side,body.v2 .sq-side,body.v2 .gp-detail{position:static}body.v2 .pk-facts{grid-template-columns:repeat(2,minmax(0,1fr))}
}@media (max-width:760px){body.v2 .sq-steps,body.v2 .pk-facts{grid-template-columns:minmax(0,1fr)}body.v2 .sope-item.ev{grid-template-columns:auto minmax(0,1fr)}body.v2 .sope-ev{grid-column:2;border-left:0;padding-left:0}body.v2 .gr-now{grid-template-columns:minmax(0,1fr)}body.v2 .gr-now-a{grid-column:1;grid-row:auto;justify-content:flex-start}body.v2 .gr-now-ic{display:none}body.v2 .gr-now > label,body.v2 .gr-now-t,body.v2 .gr-now .sope-ans{grid-column:1}body.v2 .dh2-title{font-size:var(--v2-t-title)}
}

/* ══ R19b · Full width ═══════════════════════════════════════════════
   Every page uses the whole content area. The pursuit body stopped at
   1160px while its own header ran the full width, so the header's right
   edge and the body's never lined up;the GovCon rooms stopped at 1360px,and CFA,Integrations and Settings at 900–1080px. Readable line length is
   kept where it matters — on prose,not on the page. */
body.v2 .pd-body,body.v2 .pd-detail .pd-dbody,#cfapage,#intgpage{max-width:none}body.v2 .v2-prose,body.v2 .src-desc,body.v2 .pk-sub,body.v2 .dh2-meta{max-width:120ch}/* ══ R20 · Training: the ramp card, progress, the team line ═════════════ */body.v2 .tr-ramp{border:1px solid var(--v2-line);border-left:3px solid var(--v2-accent);border-radius:var(--v2-r-control);
  background:var(--v2-panel);padding:var(--v2-s4);margin-bottom:var(--v2-s3);display:flex;flex-direction:column;gap:var(--v2-s3)}body.v2 .tr-ramph{display:flex;align-items:baseline;gap:var(--v2-s3);flex-wrap:wrap}body.v2 .tr-ramph b{font-family:var(--v2-display);font-size:var(--v2-t-title);color:var(--v2-ink)}body.v2 .tr-ramph span{color:var(--v2-sub);flex:1;min-width:200px}body.v2 .tr-today{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr) 140px;gap:var(--v2-s3)}body.v2 .tr-today div{border:1px solid var(--v2-line);border-radius:var(--v2-r-control);padding:var(--v2-s2) var(--v2-s3)}body.v2 .tr-today label{display:block;font-size:var(--v2-t-label);font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--v2-accent);margin-bottom:var(--v2-s1)}body.v2 .tr-today b{font-weight:500;color:var(--v2-ink)}body.v2 .tr-rampall summary{cursor:pointer;color:var(--v2-accent);font-weight:600;font-size:var(--v2-t-small)}body.v2 .tr-rampall table{width:100%;border-collapse:collapse;margin-top:var(--v2-s2);font-size:var(--v2-t-small)}body.v2 .tr-rampall th{text-align:left;color:var(--v2-sub);font-weight:600;padding:var(--v2-s1h) var(--v2-s2);border-bottom:1px solid var(--v2-line)}body.v2 .tr-rampall td{padding:var(--v2-s1h) var(--v2-s2);border-bottom:1px solid var(--v2-line2);vertical-align:top;color:var(--v2-ink)}body.v2 .tr-rampall tr.on td{background:var(--v2-accent-soft)}body.v2 .tr-rampall td:first-child{white-space:nowrap;font-weight:600}body.v2 .tr-team{display:flex;flex-wrap:wrap;gap:var(--v2-s2) var(--v2-s3);align-items:center;padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-control);margin-bottom:var(--v2-s3);font-size:var(--v2-t-small);color:var(--v2-sub)}body.v2 .tr-team b{color:var(--v2-ink)}body.v2 .tr-prog{display:flex;align-items:center;gap:var(--v2-s3);margin-bottom:var(--v2-s3);font-size:var(--v2-t-small);color:var(--v2-sub)}body.v2 .tr-prog b{color:var(--v2-ink)}body.v2 .tr-prog i{flex:1;height:6px;border-radius:3px;background:var(--v2-line2);overflow:hidden}body.v2 .tr-prog em{display:block;height:100%;background:var(--v2-accent)}body.v2 .tr-done{font-size:var(--v2-t-label);font-weight:700;color:var(--v2-ok)}body.v2 .tr-acts{display:flex;align-items:center;gap:var(--v2-s2);flex-wrap:wrap}@media (max-width:760px){body.v2 .tr-today{grid-template-columns:minmax(0,1fr)} }/* R21 · work handed to me — sits above the generated queue in My Work. */.sope-mine{margin-bottom:var(--pd-s4);border-left:3px solid var(--pd-accent)}.sope-work.done{opacity:.55}/* R21 · Training: three segments — ramp, platform tours, certification. */.tr-seg{display:inline-flex;gap:var(--v2-s0);padding:var(--v2-s0);border:1px solid var(--v2-line);border-radius:10px;background:var(--v2-panel);margin-bottom:var(--v2-s3)}.tr-seg button{border:0;background:none;padding:var(--v2-s1h) var(--v2-s3);border-radius:7px;font:inherit;font-size:var(--v2-t-body);font-weight:600;color:var(--pd-sub);cursor:pointer}.tr-seg button.on{background:var(--pd-ink);color:var(--v2-bg)}/* Platform tours — the list, the spotlight and the card. */.tour-list{display:grid;gap:var(--v2-s2)}.tour-row{display:grid;grid-template-columns:28px 1fr auto auto;gap:var(--v2-s3);align-items:center;padding:var(--v2-s3) var(--v2-s3);
  border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel)}.tour-row.done{opacity:.75}.tour-row .tr-n{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;font-weight:700;font-size:var(--v2-t-small);
  background:var(--v2-bg);color:var(--pd-ink)}.tour-row.done .tr-n{background:var(--pd-good,#1a7f37);color:#fff}.tour-rt b{display:block;font-size:var(--v2-t-entity)}.tour-rt span{display:block;font-size:var(--v2-t-small);color:var(--pd-sub);margin-top:var(--v2-s0)}@media (max-width:640px){.tour-row{grid-template-columns:28px 1fr}.tour-row .tr-mins,.tour-row button{grid-column:2}}#tour-ring{position:fixed;z-index:9990;border-radius:10px;pointer-events:none;
  box-shadow:0 0 0 3px var(--pd-accent),0 0 0 9999px rgba(8,10,14,.62);transition:all var(--v2-mid) var(--v2-ease)}#tour-ring.none{inset:0;border-radius:0;box-shadow:0 0 0 9999px rgba(8,10,14,.62)}#tour-card{position:fixed;z-index:9991;background:var(--v2-panel);color:var(--pd-ink);border:1px solid var(--v2-line);
  border-radius:14px;padding:var(--v2-s4) var(--v2-s4);box-shadow:0 18px 48px rgba(0,0,0,.35);transition:top var(--v2-mid) var(--v2-ease),left var(--v2-mid) var(--v2-ease)}#tour-card .tour-k{font-size:var(--v2-t-label);letter-spacing:.06em;text-transform:uppercase;color:var(--pd-sub);font-weight:600}#tour-card h4{margin:var(--v2-s1h) 0 var(--v2-s1h);font-size:var(--v2-t-title)}#tour-card p{margin:0 0 var(--v2-s3);font-size:var(--v2-t-body);line-height:1.55;color:var(--pd-ink)}.tour-dots{display:flex;gap:var(--v2-s1);margin-bottom:var(--v2-s3)}.tour-dots i{width:18px;height:4px;border-radius:2px;background:var(--v2-line)}.tour-dots i.done{background:var(--pd-sub)}.tour-dots i.on{background:var(--pd-accent)}.tour-a{display:flex;gap:var(--v2-s2);align-items:center}/* H4 certification. */.crt-team{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:var(--v2-s2);margin-bottom:var(--v2-s3)}.crt-who{display:grid;gap:var(--v2-s0);text-align:left;padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-radius:10px;
  background:var(--v2-panel);color:var(--pd-ink);font:inherit;cursor:pointer}.crt-who.on{border-color:var(--pd-accent);box-shadow:0 0 0 1px var(--pd-accent)}.crt-who span{font-size:var(--v2-t-small);color:var(--pd-sub)}.crt-waiting{color:var(--pd-warn,#b26b00)}.crt-tracks{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:var(--v2-s2);margin:var(--v2-s3) 0}.crt-track{position:relative;padding:var(--v2-s3) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel)}.crt-track b{display:block}.crt-track span{font-size:var(--v2-t-small);color:var(--pd-sub)}.crt-track i{display:block;height:5px;border-radius:3px;background:var(--v2-bg);margin-top:var(--v2-s2);overflow:hidden}.crt-track i em{display:block;height:100%;background:var(--pd-accent)}.crt-track.done i em{background:var(--pd-good,#1a7f37)}.crt-badge{position:absolute;top:10px;right:12px;font-size:var(--v2-t-label)!important;font-weight:700;letter-spacing:.08em;color:var(--pd-good,#1a7f37)!important}.crt-pick{margin:var(--v2-s1) 0 var(--v2-s3)}.crt-pick label{display:block;font-size:var(--v2-t-small);color:var(--pd-sub);margin-bottom:var(--v2-s1h)}.crt-sec{border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel);margin-bottom:var(--v2-s2)}.crt-sec summary{padding:var(--v2-s3) var(--v2-s3);cursor:pointer;font-weight:600;display:flex;gap:var(--v2-s2);align-items:center}.crt-sk{font:var(--v2-t-small)/1 ui-monospace,Menlo,monospace;color:var(--pd-sub)}.crt-sn{margin-left:auto;font-size:var(--v2-t-small);color:var(--pd-sub)}.crt-sn.ok{color:var(--pd-good,#1a7f37)}.crt-item{padding:var(--v2-s2) var(--v2-s3);border-top:1px solid var(--v2-bg);display:grid;gap:var(--v2-s1)}.crt-ih{display:flex;gap:var(--v2-s2);align-items:baseline}.crt-id{font:var(--v2-t-small) ui-monospace,Menlo,monospace;color:var(--pd-sub);flex:0 0 auto}.crt-t{flex:1;font-size:var(--v2-t-body)}.crt-pill{font-size:var(--v2-t-label);font-weight:600;padding:var(--v2-s0) var(--v2-s2);border-radius:999px;background:var(--v2-bg);color:var(--pd-sub);white-space:nowrap}.crt-pill.ok{background:rgba(26,127,55,.14);color:var(--pd-good,#1a7f37)}.crt-pill.wait{background:rgba(178,107,0,.14);color:var(--pd-warn,#b26b00)}.crt-pill.bad{background:rgba(190,40,40,.12);color:var(--pd-bad,#be2828)}.crt-ev,.crt-said{font-size:var(--v2-t-small);color:var(--pd-sub);padding-left:62px}.crt-said.ok{color:var(--pd-good,#1a7f37)}.crt-said.bad{color:var(--pd-bad,#be2828)}.crt-a{display:flex;gap:var(--v2-s2);align-items:center;padding-left:62px}.crt-a input{flex:1;min-width:0;padding:var(--v2-s1h) var(--v2-s2);border:1px solid var(--v2-line);border-radius:8px;background:var(--v2-bg);color:var(--pd-ink);font:inherit;font-size:var(--v2-t-body)}@media (max-width:640px){.crt-ev,.crt-said,.crt-a{padding-left:0}.crt-a{flex-wrap:wrap}}/* R21 · Preview as — the owner's lens on a team member's view. */#cc-previewbar{position:fixed;left:50%;bottom:16px;transform:translateX(-50%);z-index:10001;display:flex;gap:var(--v2-s3);align-items:center;
  flex-wrap:wrap;justify-content:center;max-width:calc(100vw - 32px);padding:var(--v2-s2) var(--v2-s3) var(--v2-s2) var(--v2-s4);border-radius:999px;
  background:#1d2733;color:#fff;box-shadow:0 12px 32px rgba(0,0,0,.35);font-size:var(--v2-t-body)}#cc-previewbar .cc-pvnote{opacity:.7;font-size:var(--v2-t-small)}#cc-previewbar button{border:0;border-radius:999px;padding:var(--v2-s1h) var(--v2-s3);font:inherit;font-weight:600;background:#fff;color:#1d2733;cursor:pointer}.cc-pvtag{font-size:var(--v2-t-label);font-weight:700;letter-spacing:.06em;color:var(--pd-warn,#b26b00);background:rgba(178,107,0,.12);
  border-radius:8px;padding:var(--v2-s1h) var(--v2-s2);margin-bottom:var(--v2-s3)}/* R21 · the invite form: four numbered steps. */.cc-inv{display:grid;gap:var(--v2-s2);margin:var(--v2-s2) 0 var(--v2-s3);padding:var(--v2-s4);border:1px solid var(--pd-line);border-radius:var(--pd-r2);background:var(--pd-bg)}.cc-invstep{display:flex;gap:var(--v2-s2);align-items:baseline;flex-wrap:wrap;margin-top:var(--v2-s2)}.cc-invstep b{font-size:var(--v2-t-entity)}.cc-invstep span:not(.cc-invn){font-size:var(--v2-t-small);color:var(--pd-sub)}.cc-invn{width:22px;height:22px;border-radius:50%;display:inline-grid;place-items:center;font-size:var(--v2-t-small);font-weight:700;
  background:var(--pd-ink);color:var(--v2-bg);flex:0 0 22px}.cc-invwho{grid-template-columns:repeat(auto-fill,minmax(210px,1fr))}.cc-req{font-style:normal;font-size:var(--v2-t-label);color:var(--pd-warn,#b26b00);font-weight:600}.cc-presets{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:var(--v2-s2)}.cc-preset{display:grid;gap:var(--v2-s1);text-align:left;padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--pd-line);border-radius:10px;
  background:var(--pd-panel);color:var(--pd-ink);font:inherit;cursor:pointer}.cc-preset.on{border-color:var(--pd-accent);box-shadow:0 0 0 1px var(--pd-accent)}.cc-preset span{font-size:var(--v2-t-small);color:var(--pd-sub);line-height:1.45}.cc-preset em{font-style:normal;font-size:var(--v2-t-label);color:var(--pd-sub);text-transform:uppercase;letter-spacing:.05em}.cc-invgrid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.4fr);gap:var(--v2-s4)}@media (max-width:760px){.cc-invgrid{grid-template-columns:1fr}}.cc-invl{display:block;font-size:var(--v2-t-small);font-weight:600;color:var(--pd-sub);margin:var(--v2-s2) 0 var(--v2-s1h)}.cc-invsum{display:flex;gap:var(--v2-s4);align-items:flex-end;justify-content:space-between;flex-wrap:wrap;margin-top:var(--v2-s2);
  padding:var(--v2-s3) var(--v2-s3);border-radius:10px;background:var(--pd-panel);border:1px solid var(--pd-line)}.cc-invsum ol{margin:var(--v2-s1h) 0 0;padding-left:var(--v2-s4);font-size:var(--v2-t-body);line-height:1.6;color:var(--pd-sub)}/* R21 · a person's work side, on the owner's People page. */.ppl-work{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--v2-s2)}.ppl-work>div{display:grid;gap:var(--v2-s0);padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-radius:10px;background:var(--v2-bg)}.ppl-work label{font-size:var(--v2-t-label);text-transform:uppercase;letter-spacing:.06em;color:var(--pd-sub)}.ppl-work b{font-size:var(--v2-t-title)}.ppl-worka{margin:var(--v2-s2) 0}.ppl-tasks{display:grid;gap:var(--v2-s1h)}.ppl-tasks>div{display:grid;padding:var(--v2-s2) var(--v2-s2);border-left:3px solid var(--pd-accent);background:var(--v2-bg);border-radius:6px}/* A phase reached from the guide rail flashes once, so the eye lands on it. */.pd-phase-flash{box-shadow:0 0 0 2px var(--v2-accent);transition:box-shadow var(--v2-slow) var(--v2-ease)}/* ══════════════════════════════════════════════════════════════════════
   R23 · SETTINGS — six tabs, sub-pages, cards, and a footer that saves.
   ══════════════════════════════════════════════════════════════════════ */.st{display:grid;gap:var(--v2-s4);padding-bottom:var(--v2-s3)}.st-ic{width:18px;height:18px;flex:0 0 auto}.st-ic.big{width:28px;height:28px}.st-ic.acc{color:var(--v2-accent)}.st-ic.ok{color:var(--v2-ok-dot);width:18px}.st-ic.warn{color:var(--v2-warn-dot)}.st-ic.bad{color:var(--v2-bad-dot)}/* the tab strip: one bordered bar, the active tab underlined in cyan */.st-tabs{display:flex;border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel);overflow-x:auto}.st-tabs button{display:inline-flex;align-items:center;gap:var(--v2-s2);padding:var(--v2-s3) var(--v2-s5);border:0;background:none;font:500 var(--v2-t-entity)/1 var(--v2-sans);
  color:var(--v2-ink);cursor:pointer;position:relative;white-space:nowrap;border-right:1px solid var(--v2-line)}.st-tabs button:last-child{border-right:0}.st-tabs button .st-ic{color:var(--v2-sub)}.st-tabs button:hover{background:var(--v2-line2)}.st-tabs button.on{color:var(--v2-accent);font-weight:600}.st-tabs button.on .st-ic{color:var(--v2-accent)}.st-tabs button.on::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:3px;background:var(--v2-accent);border-radius:2px}.st-subs{display:flex;gap:var(--v2-s2);flex-wrap:wrap}.st-subs button{padding:var(--v2-s2) var(--v2-s4);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel);
  font:500 var(--v2-t-entity)/1 var(--v2-sans);color:var(--v2-ink);cursor:pointer}.st-subs button:hover{border-color:var(--v2-accent-line)}.st-subs button.on{background:var(--v2-accent);border-color:var(--v2-accent);color:var(--v2-bg);font-weight:600}.st-cs{font-style:normal;color:var(--v2-faint);margin:0 var(--v2-s1h)}.st-cc{color:var(--v2-ink)}/* cards and layout */.st-card{background:var(--v2-panel);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);padding:var(--v2-s5) var(--v2-s5);display:grid;gap:var(--v2-s3);align-content:start;min-width:0}.st-card h3{font:600 var(--v2-t-title)/1.3 var(--v2-sans);margin:0;color:var(--v2-ink)}.st-card h3.lg{font:700 24px/1.2 var(--v2-display)}.st-card h2{font:700 36px/1.12 var(--v2-display);margin:0;letter-spacing:-.4px;text-wrap:balance}.st-sub{font-size:var(--v2-t-entity);color:var(--v2-sub);margin:var(--v2-s0) 0 0;line-height:1.5}.st-sub.inl{display:inline;font-weight:400;margin-left:var(--v2-s2);font-size:var(--v2-t-body)}.st-cardh{display:flex;gap:var(--v2-s4);align-items:flex-start;justify-content:space-between;flex-wrap:wrap}.st-cardh.left{justify-content:flex-start;flex-wrap:nowrap}.st-cardh .st-note{max-width:460px;margin:0}.st-2col{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--v2-s4);align-items:start}.st-2col.wide-l{grid-template-columns:minmax(0,1.55fr) minmax(0,1fr)}.st-2col.side{grid-template-columns:minmax(0,1fr) 360px}.st-2col.one{grid-template-columns:1fr}.st-2col:not(.one):has(> .st-panel){grid-template-columns:minmax(0,1.2fr) minmax(0,1fr)}.st-2col > div{display:grid;gap:var(--v2-s4);min-width:0}.st-sidecol{display:grid;gap:var(--v2-s4)}@media (max-width:1100px){.st-2col,.st-2col.wide-l,.st-2col.side{grid-template-columns:1fr}}.st-grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--v2-s3) var(--v2-s4)}.st-grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--v2-s3) var(--v2-s4)}.st-grid4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--v2-s3) var(--v2-s4)}.st-grid-hire{display:grid;grid-template-columns:1fr 1fr 2fr;gap:var(--v2-s3) var(--v2-s4)}@media (max-width:900px){.st-grid3,.st-grid4,.st-grid-hire{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:560px){.st-grid2,.st-grid3,.st-grid4,.st-grid-hire{grid-template-columns:1fr}}.st-line{display:flex;gap:var(--v2-s2);align-items:center;flex-wrap:wrap}.st-line.end{justify-content:flex-end}.st-line.between{justify-content:space-between}.st-line.center{justify-content:center}.sp{flex:1}.st-dim{color:var(--v2-sub);font-size:var(--v2-t-body)}.st-warn{color:var(--v2-warn)}.st-ok{color:var(--v2-ok)}.st-lbl{font:500 var(--v2-t-entity)/1.3 var(--v2-sans);color:var(--v2-ink);margin-top:var(--v2-s1)}/* fields */.st-f{display:flex;flex-direction:column;gap:var(--v2-s1h);min-width:0;font:500 var(--v2-t-entity)/1.3 var(--v2-sans);color:var(--v2-ink)}.st-f.full{grid-column:1/-1}.st-f > span small{display:block;font-weight:400;font-size:var(--v2-t-small);color:var(--v2-sub);margin-top:var(--v2-s0)}.st-f input,.st-f select,.st-f textarea,.st-select,.st-copy input{font:400 var(--v2-t-entity)/1.4 var(--v2-sans);color:var(--v2-ink);background:var(--v2-bg);
  border:1px solid var(--v2-line);border-radius:var(--v2-r-control);padding:var(--v2-s2) var(--v2-s3);min-width:0;width:100%}.st-f textarea{resize:vertical;line-height:1.55}.st-f input::placeholder,.st-f textarea::placeholder{color:var(--v2-faint)}.st-f input:focus,.st-f select:focus,.st-f textarea:focus,.st-select:focus{outline:none;border-color:var(--v2-accent);box-shadow:0 0 0 3px var(--v2-accent-soft)}.st-f input[readonly]{opacity:.8}.st-select{width:auto;min-width:200px}.st-tip{display:inline-flex;vertical-align:-3px;color:var(--v2-sub);cursor:help}.st-tip .st-ic{width:15px;height:15px}.st-req{font-weight:600;font-size:var(--v2-t-small);color:var(--v2-warn-dot);margin-left:var(--v2-s1h)}.st-count{align-self:flex-end;font-size:var(--v2-t-label);color:var(--v2-sub);margin-top:-var(--v2-s6);margin-right:var(--v2-s2);position:relative}.st-check{display:flex;gap:var(--v2-s2);align-items:center;font-size:var(--v2-t-entity);cursor:pointer}.st-check input{width:18px;height:18px;accent-color:var(--v2-accent)}.st-more summary{cursor:pointer;font-size:var(--v2-t-body);color:var(--v2-sub);margin-bottom:var(--v2-s2)}/* chips (NAICS / PSC) */.st-chips{display:flex;flex-wrap:wrap;gap:var(--v2-s2);align-items:center;padding:var(--v2-s2);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-bg);min-height:46px}.st-chips input{border:0!important;box-shadow:none!important;background:none!important;flex:1;min-width:120px;padding:var(--v2-s1h)!important}.st-chip{display:inline-flex;align-items:center;gap:var(--v2-s1h);padding:var(--v2-s1) var(--v2-s2) var(--v2-s1) var(--v2-s3);border-radius:6px;background:var(--v2-line2);border:1px solid var(--v2-line);font:500 var(--v2-t-body)/1 var(--v2-mono)}.st-chip button{border:0;background:none;color:var(--v2-sub);cursor:pointer;padding:0;display:inline-flex}.st-chip button .st-ic{width:14px;height:14px}.st-add{align-self:flex-start;border:0;background:none;color:var(--v2-accent-ink);font:500 var(--v2-t-body)/1 var(--v2-sans);cursor:pointer;display:inline-flex;gap:var(--v2-s1h);align-items:center;padding:var(--v2-s1) 0}.st-add .st-ic{width:15px;height:15px}/* notes */.st-note{display:flex;gap:var(--v2-s3);align-items:flex-start;padding:var(--v2-s3) var(--v2-s4);border-radius:var(--v2-r-surface);border:1px solid var(--v2-line);
  background:var(--v2-line2);font-size:var(--v2-t-entity);line-height:1.55;color:var(--v2-ink)}.st-note > .st-ic{color:var(--v2-accent);margin-top:var(--v2-s0)}.st-note.row{align-items:center}.st-note.row > div{flex:1}.st-note.warn{background:var(--v2-warn-soft);border-color:var(--v2-warn-line);color:var(--v2-ink)}.st-note.warn > .st-ic{color:var(--v2-warn-dot);width:26px;height:26px}.st-note.warn b{color:var(--v2-warn)}/* pills, tags, links, avatars */.st-pill{display:inline-flex;align-items:center;gap:var(--v2-s1h);font:600 var(--v2-t-small)/1 var(--v2-sans);padding:var(--v2-s1h) var(--v2-s2);border-radius:6px;background:var(--v2-line2);color:var(--v2-sub);white-space:nowrap}.st-pill.ok{background:var(--v2-ok-soft);color:var(--v2-ok)}.st-pill.warn{background:var(--v2-warn-soft);color:var(--v2-warn)}.st-pill.bad{background:var(--v2-bad-soft);color:var(--v2-bad)}.st-pill.acc{background:var(--v2-accent-soft);color:var(--v2-accent-ink)}.st-pill.dot::before{content:"";width:8px;height:8px;border-radius:50%;background:currentColor}.st-tag{font:600 var(--v2-t-small)/1 var(--v2-sans);padding:var(--v2-s1h) var(--v2-s3);border-radius:6px;border:1px solid var(--v2-accent-line);color:var(--v2-accent-ink);white-space:nowrap}.st-link{border:0;background:none;color:var(--v2-accent-ink);font:600 var(--v2-t-entity)/1 var(--v2-sans);cursor:pointer;display:inline-flex;align-items:center;gap:var(--v2-s1h);padding:0;text-decoration:none}.st-link .st-ic{width:16px;height:16px}.st-av{width:44px;height:44px;border-radius:50%;flex:0 0 44px;display:grid;place-items:center;border:1.5px solid var(--v2-accent-line);
  background:var(--v2-accent-soft);color:var(--v2-accent-ink);font:600 var(--v2-t-entity)/1 var(--v2-sans)}.st-av.lg{width:54px;height:54px;flex-basis:54px;font-size:var(--v2-t-title)}.st-x{border:0;background:none;color:var(--v2-sub);cursor:pointer;padding:var(--v2-s1);display:inline-flex}.st-n{width:30px;height:30px;flex:0 0 30px;border-radius:50%;display:grid;place-items:center;background:var(--v2-ink);color:var(--v2-bg);font:700 var(--v2-t-entity)/1 var(--v2-sans)}.st-n.sm{width:26px;height:26px;flex-basis:26px;font-size:var(--v2-t-small)}.st-step{display:flex;gap:var(--v2-s3);align-items:flex-start}/* segmented controls, switches, toggles */.st-seg{display:flex;border:1px solid var(--v2-line);border-radius:var(--v2-r-control);overflow:hidden;width:max-content;max-width:100%}.st-seg.wrap{flex-wrap:wrap;width:auto;border:0;gap:var(--v2-s2)}.st-seg button{border:0;border-right:1px solid var(--v2-line);background:var(--v2-bg);padding:var(--v2-s2) var(--v2-s5);font:500 var(--v2-t-entity)/1 var(--v2-sans);color:var(--v2-ink);cursor:pointer}.st-seg.wrap button{border:1px solid var(--v2-line);border-radius:var(--v2-r-control)}.st-seg button:last-child{border-right:0}.st-seg button.on{background:var(--v2-accent);color:var(--v2-bg);font-weight:600}.st-togs{display:grid;gap:var(--v2-s2)}.st-togs.c3{grid-template-columns:repeat(3,minmax(0,1fr))}.st-togs.c4{grid-template-columns:repeat(4,minmax(0,1fr))}@media (max-width:1300px){.st-togs.c4{grid-template-columns:repeat(2,minmax(0,1fr))}.st-togs.c3{grid-template-columns:repeat(2,minmax(0,1fr))}}.st-tog{display:flex;align-items:center;gap:var(--v2-s2);padding:var(--v2-s3) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-bg);cursor:pointer;min-width:0}.st-tog b{flex:1;font:500 var(--v2-t-body)/1.25 var(--v2-sans);min-width:0}.st-tog-ic{display:inline-flex;color:var(--v2-sub)}.st-tog-ic svg{width:18px;height:18px}.st-tog input,.st-sw input{position:absolute;opacity:0;pointer-events:none}.st-tog i,.st-sw i{width:36px;height:20px;border-radius:999px;background:var(--v2-line);position:relative;flex:0 0 36px;transition:background var(--v2-fast)}.st-tog i::after,.st-sw i::after{content:"";position:absolute;top:3px;left:3px;width:14px;height:14px;border-radius:50%;background:var(--v2-sub);transition:transform var(--v2-fast),background var(--v2-fast)}.st-tog.on i,.st-sw.on i{background:var(--v2-accent)}.st-tog.on i::after,.st-sw.on i::after{transform:translateX(16px);background:#fff}.st-tog.on{border-color:var(--v2-accent-line)}.st-swgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--v2-s2)}.st-sw{display:flex;align-items:center;gap:var(--v2-s2);padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);cursor:pointer;position:relative}.st-sw span{flex:1;font-size:var(--v2-t-body)}.st-sw small{display:block;color:var(--v2-sub);font-size:var(--v2-t-label)}.st-checks{display:flex;flex-wrap:wrap;gap:var(--v2-s3)}.st-checks.five{display:grid;grid-template-columns:repeat(5,minmax(0,1fr))}@media (max-width:1100px){.st-checks.five{grid-template-columns:repeat(2,minmax(0,1fr))}}.st-checkbox{display:flex;align-items:center;gap:var(--v2-s3);padding:var(--v2-s3) var(--v2-s4);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg);cursor:pointer;font:500 var(--v2-t-entity)/1 var(--v2-sans)}.st-checkbox input{width:20px;height:20px;accent-color:var(--v2-accent)}.st-checkbox.on{border-color:var(--v2-accent);box-shadow:0 0 0 1px var(--v2-accent)}.st-radio{width:22px;height:22px;flex:0 0 22px;border-radius:50%;border:2px solid var(--v2-sub);position:relative}.on > .st-radio{border-color:var(--v2-accent)}.on > .st-radio::after{content:"";position:absolute;inset:4px;border-radius:50%;background:var(--v2-accent)}.st-radios{display:grid;grid-template-columns:1fr 1fr;gap:var(--v2-s2)}.st-radios label{display:flex;gap:var(--v2-s2);align-items:flex-start;padding:var(--v2-s3) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);cursor:pointer;background:var(--v2-bg)}.st-radios label.on{border-color:var(--v2-accent)}.st-radios input{accent-color:var(--v2-accent);margin-top:var(--v2-s0)}.st-radios b{display:block;font-size:var(--v2-t-entity)}.st-radios small{display:block;font-size:var(--v2-t-small);color:var(--v2-sub);margin-top:var(--v2-s0);line-height:1.4}/* tables */.st-table{border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);overflow:auto}.st-table table{width:100%;border-collapse:collapse;font-size:var(--v2-t-entity)}.st-table th{text-align:left;font:600 var(--v2-t-small)/1 var(--v2-sans);letter-spacing:.06em;text-transform:uppercase;color:var(--v2-sub);
  padding:var(--v2-s3) var(--v2-s4);background:var(--v2-line2);border-bottom:1px solid var(--v2-line);white-space:nowrap}.st-table td{padding:var(--v2-s3) var(--v2-s4);border-bottom:1px solid var(--v2-line2);vertical-align:middle}.st-table tr:last-child td{border-bottom:0}.st-table tr.sel td{background:var(--v2-accent-soft)}.st-table td small{display:block;color:var(--v2-sub);font-size:var(--v2-t-small);margin-top:var(--v2-s0)}.st-table .r{text-align:right}.st-table .c{width:40px;text-align:center}.st-table input[type=checkbox]{width:18px;height:18px;accent-color:var(--v2-accent)}.st-sort{border:0;background:none;font:inherit;color:inherit;letter-spacing:inherit;text-transform:inherit;cursor:pointer;display:inline-flex;align-items:center;gap:var(--v2-s1h);padding:0}.st-sort .st-ic{width:14px;height:14px;opacity:.6}.st-sort.on{color:var(--v2-ink)}.st-rowlink{border:0;background:none;padding:0;font:500 var(--v2-t-entity)/1.3 var(--v2-sans);color:var(--v2-ink);cursor:pointer;text-align:left}.st-rowlink:hover{color:var(--v2-accent-ink)}.st-who{display:flex;gap:var(--v2-s3);align-items:center}.st-who b{display:block;font-size:var(--v2-t-entity)}.st-acts{display:flex;gap:var(--v2-s2);flex-wrap:wrap}.st-act{display:inline-flex;align-items:center;gap:var(--v2-s1h);padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-bg);
  font:500 var(--v2-t-body)/1 var(--v2-sans);color:var(--v2-ink);cursor:pointer;text-decoration:none;white-space:nowrap}.st-act .st-ic{width:15px;height:15px}.st-act:hover{border-color:var(--v2-accent-line)}.st-act.bad{color:var(--v2-bad);border-color:var(--v2-bad-line)}.st-act.acc{background:var(--v2-accent);border-color:var(--v2-accent);color:var(--v2-bg)}.st-dots{border:0;background:none;color:var(--v2-sub);cursor:pointer;padding:var(--v2-s1h);display:inline-flex}.st-menuw{position:relative;display:inline-block}.st-menu{position:absolute;right:0;top:calc(100% + 4px);z-index:40;min-width:200px;padding:var(--v2-s1h);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);
  background:var(--v2-panel);box-shadow:0 14px 34px rgba(0,0,0,.35);display:grid;text-align:left}.st-menu > *{display:flex;gap:var(--v2-s2);align-items:center;padding:var(--v2-s2) var(--v2-s2);border:0;background:none;border-radius:6px;font:500 var(--v2-t-body)/1 var(--v2-sans);color:var(--v2-ink);cursor:pointer;text-decoration:none}.st-menu > *:hover{background:var(--v2-line2)}.st-menu .bad{color:var(--v2-bad)}.st-menu .st-ic{width:16px;height:16px}.st-empty{display:grid;justify-items:center;text-align:center;gap:var(--v2-s2);padding:var(--v2-s6) var(--v2-s4)}.st-empty-ic{width:92px;height:92px;border-radius:50%;border:1px dashed var(--v2-line);display:grid;place-items:center;color:var(--v2-sub)}.st-empty-ic .st-ic{width:40px;height:40px}.st-empty b{font-size:var(--v2-t-title)}.st-empty p{max-width:52ch;color:var(--v2-sub);margin:0;line-height:1.55}.st-fpills{display:flex;gap:var(--v2-s2);flex-wrap:wrap}.st-fpills button{display:inline-flex;gap:var(--v2-s2);align-items:center;padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-bg);font:500 var(--v2-t-entity)/1 var(--v2-sans);color:var(--v2-ink);cursor:pointer}.st-fpills button i{font:600 var(--v2-t-small)/1 var(--v2-mono);font-style:normal;padding:var(--v2-s1) var(--v2-s2);border-radius:5px;background:var(--v2-line2)}.st-fpills button.on{background:var(--v2-accent);border-color:var(--v2-accent);color:var(--v2-bg)}.st-fpills button.on i{background:rgba(0,0,0,.18);color:var(--v2-bg)}.st-search{display:flex;align-items:center;gap:var(--v2-s2);padding:0 var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-bg);min-width:300px;color:var(--v2-sub)}.st-search input{border:0;background:none;padding:var(--v2-s2) 0;font:400 var(--v2-t-entity)/1 var(--v2-sans);color:var(--v2-ink);flex:1;min-width:0;outline:none}.st-search button{border:0;background:none;color:var(--v2-sub);cursor:pointer;display:inline-flex}.st-bulk{display:flex;gap:var(--v2-s2);align-items:center;flex-wrap:wrap;padding:var(--v2-s2) var(--v2-s3);border-radius:var(--v2-r-control);background:var(--v2-accent-soft)}/* the footer bar under each page */.st-foot{position:sticky;bottom:0;z-index:5;display:flex;gap:var(--v2-s3);align-items:center;justify-content:space-between;flex-wrap:wrap;
  padding:var(--v2-s3) 0;margin-top:-var(--v2-s1);background:linear-gradient(to top,var(--v2-bg) 70%,transparent);border-top:1px solid var(--v2-line)}.st-foot-l,.st-foot-r{display:flex;gap:var(--v2-s2);align-items:center;flex-wrap:wrap}.st-foot .st-dim{display:inline-flex;gap:var(--v2-s2);align-items:center}/* Appearance */.st-themes{display:grid;grid-template-columns:1fr 1fr;gap:var(--v2-s4)}@media (max-width:900px){.st-themes{grid-template-columns:1fr}}.st-theme{display:grid;grid-template-columns:auto 1fr;gap:var(--v2-s2) var(--v2-s3);align-items:center;text-align:left;padding:var(--v2-s4) var(--v2-s4) var(--v2-s4);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);background:var(--v2-bg);color:var(--v2-ink);cursor:pointer;font:inherit}.st-theme.on{border:2px solid var(--v2-accent);box-shadow:0 0 24px -6px var(--v2-accent)}.st-theme-t b{display:flex;gap:var(--v2-s2);align-items:center;font:600 var(--v2-t-say)/1.2 var(--v2-sans)}.st-theme-t span{display:block;font-size:var(--v2-t-entity);color:var(--v2-sub);margin-top:var(--v2-s1)}.st-mock{grid-column:1/-1;display:grid;grid-template-columns:22% 1fr;border-radius:8px;overflow:hidden;height:280px;border:1px solid var(--v2-line);margin-top:var(--v2-s2)}.st-mock.t-dark{--m-bg:#0b1522;--m-side:#0d1928;--m-card:#12202f;--m-line:#223245;--m-bar:#2a3a4e;--m-acc:#45d7f5;--m-text:#e7eef6}.st-mock.t-light{--m-bg:#f6f8fb;--m-side:#ffffff;--m-card:#ffffff;--m-line:#e3e8ef;--m-bar:#dfe5ec;--m-acc:#3aa6c9;--m-text:#1b2430}.st-mock-side{background:var(--m-side);border-right:1px solid var(--m-line);padding:var(--v2-s3) var(--v2-s2);display:grid;align-content:start;gap:var(--v2-s2)}.st-mock-side b{font:800 var(--v2-t-entity)/1 var(--v2-display);color:var(--m-text);margin:0 0 var(--v2-s2) var(--v2-s1h)}.st-mock-side b em{font-style:normal;color:var(--m-acc)}.st-mock-side span{display:flex;gap:var(--v2-s2);align-items:center;padding:var(--v2-s1) var(--v2-s1h);border-radius:5px}.st-mock-side span.on{background:color-mix(in srgb,var(--m-acc) 22%,transparent)}.st-mock-side s{width:9px;height:9px;border-radius:3px;border:1.5px solid var(--m-bar)}.st-mock i{display:block;height:6px;border-radius:3px;background:var(--m-bar)}.st-mock-side span i{flex:1}.st-mock-main{background:var(--m-bg);padding:var(--v2-s3) var(--v2-s3);display:grid;gap:var(--v2-s3);align-content:start}.st-mock-top{display:flex;gap:var(--v2-s3);align-items:center}.st-mock-top i{width:40px}.st-mock-top u{flex:0 0 150px;height:18px;border-radius:5px;border:1px solid var(--m-line);margin-left:auto;text-decoration:none}.st-mock-top s{width:20px;height:20px;border-radius:50%;background:var(--m-acc)}.st-mock-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--v2-s2)}.st-mock-kpis div{display:flex;gap:var(--v2-s2);align-items:center;padding:var(--v2-s2);border:1px solid var(--m-line);border-radius:6px;background:var(--m-card);color:var(--m-acc)}.st-mock-kpis div .st-ic{width:16px;height:16px}.st-mock-kpis div:nth-child(3){color:#e3a93a}.st-mock-kpis div i{flex:1}.st-mock-kpis div i + i{display:none}.st-mock-pills{display:flex;gap:var(--v2-s1h)}.st-mock-pills i{width:44px;height:12px;border-radius:4px;border:1px solid var(--m-line);background:none}.st-mock-pills i.on{border-color:var(--m-acc);background:color-mix(in srgb,var(--m-acc) 22%,transparent)}.st-mock-cols{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--v2-s2)}.st-mock-cols div{border:1px solid var(--m-line);border-radius:6px;background:var(--m-card);padding:var(--v2-s2);display:grid;gap:var(--v2-s2)}.st-mock-cols b{width:9px;height:9px;border-radius:50%}.st-mock-cols b.warn{background:#e3a93a}.st-mock-cols b.info{background:#4f8df5}.st-mock-cols b.ok{background:#3ecf8e}/* Capabilities preview */.st-prev{border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);padding:var(--v2-s4);display:grid;gap:var(--v2-s3)}.st-prev-h{display:flex;gap:var(--v2-s3);align-items:flex-start;color:var(--v2-accent)}.st-prev-h .st-ic{width:30px;height:30px}.st-prev-h b{display:block;color:var(--v2-ink);font-size:var(--v2-t-title)}.st-prev-h span{display:block;color:var(--v2-sub);font-size:var(--v2-t-body)}.st-prev dl{margin:0;border:1px solid var(--v2-line);border-radius:var(--v2-r-control);padding:var(--v2-s3) var(--v2-s4);display:grid;gap:var(--v2-s1)}.st-prev dt{font:500 var(--v2-t-entity)/1.3 var(--v2-sans);color:var(--v2-ink);margin-top:var(--v2-s2)}.st-prev dt:first-child{margin-top:0}.st-prev dd{margin:0;font-size:var(--v2-t-body);color:var(--v2-sub)}.st-prev i{font-style:normal;color:var(--v2-sub)}.st-prev-sig{border:1px solid var(--v2-line);border-radius:var(--v2-r-control);padding:var(--v2-s3) var(--v2-s4);min-height:64px;font-size:var(--v2-t-body);color:var(--v2-sub)}/* thresholds */.st-th{border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);padding:var(--v2-s4);display:grid;gap:var(--v2-s3);background:var(--v2-bg)}.st-th-h{display:flex;gap:var(--v2-s3);align-items:flex-start}.st-th-h .st-ic{width:34px;height:34px;color:var(--v2-accent)}.st-th-h .st-ic.bad{color:var(--v2-accent)}.st-th-h b{display:block;font-size:var(--v2-t-title)}.st-th-h span{display:block;font-size:var(--v2-t-body);color:var(--v2-sub);margin-top:var(--v2-s1);line-height:1.45}.st-th input{width:120px;font:500 var(--v2-t-title)/1 var(--v2-sans);padding:var(--v2-s3) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-panel);color:var(--v2-ink)}.st-th-l{font-size:var(--v2-t-small);color:var(--v2-sub);border-top:1px solid var(--v2-line);padding-top:var(--v2-s3)}.st-th-p{display:flex;gap:var(--v2-s3);align-items:center;padding:var(--v2-s3) var(--v2-s3);border-radius:var(--v2-r-control);border:1px solid}.st-th-p .st-ic{width:26px;height:26px}.st-th-p b{display:block;font-size:var(--v2-t-entity)}.st-th-p small{display:block;font-size:var(--v2-t-small);color:var(--v2-ink);opacity:.85}.st-th-p.bad{background:var(--v2-bad-soft);border-color:var(--v2-bad-line);color:var(--v2-bad)}.st-th-p.warn{background:var(--v2-warn-soft);border-color:var(--v2-warn-line);color:var(--v2-warn)}/* email templates */.st-editor{border:1px solid var(--v2-line);border-radius:var(--v2-r-control);overflow:hidden;background:var(--v2-bg)}.st-tools{display:flex;gap:var(--v2-s1);align-items:center;flex-wrap:wrap;padding:var(--v2-s2) var(--v2-s2);border-bottom:1px solid var(--v2-line)}.st-tools button{border:1px solid transparent;background:none;color:var(--v2-ink);font:500 var(--v2-t-small)/1 var(--v2-mono);padding:var(--v2-s1h) var(--v2-s2);border-radius:5px;cursor:pointer;display:inline-flex}.st-tools button:hover{border-color:var(--v2-line);background:var(--v2-line2)}.st-tools i{width:1px;height:20px;background:var(--v2-line);margin:0 var(--v2-s1h)}.st-tools .st-ic{width:16px;height:16px}.st-editor textarea{border:0!important;border-radius:0!important;box-shadow:none!important;min-height:260px}/* team */.st-terms .ppl-terms{margin:0}.st-linkbox{display:flex;gap:var(--v2-s2);align-items:center;flex-wrap:wrap;padding:var(--v2-s3) var(--v2-s3);border:1px solid var(--v2-accent-line);border-radius:var(--v2-r-control);background:var(--v2-accent-soft)}.st-linkbox code{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;font:var(--v2-t-small) var(--v2-mono)}.st-presets{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:var(--v2-s2)}@media (max-width:1300px){.st-presets{grid-template-columns:repeat(3,minmax(0,1fr))}}.st-preset{position:relative;display:grid;gap:var(--v2-s2);align-content:start;text-align:left;padding:var(--v2-s4) var(--v2-s4);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);
  background:var(--v2-bg);color:var(--v2-ink);font:inherit;cursor:pointer;min-height:180px}.st-preset .st-radio{position:absolute;top:14px;right:14px}.st-preset .st-ic.big{width:32px;height:32px;color:var(--v2-ink)}.st-preset b{font-size:var(--v2-t-entity);line-height:1.25}.st-preset span:not(.st-radio){font-size:var(--v2-t-body);color:var(--v2-sub);line-height:1.45}.st-preset em{font:600 var(--v2-t-label)/1 var(--v2-sans);font-style:normal;letter-spacing:.06em;color:var(--v2-sub);margin-top:auto}.st-preset.on{border:2px solid var(--v2-accent);box-shadow:0 0 18px -6px var(--v2-accent)}.st-review{display:grid;grid-template-columns:1fr 1fr;gap:var(--v2-s4);padding:var(--v2-s3);border:1px dashed var(--v2-line);border-radius:var(--v2-r-surface)}@media (max-width:900px){.st-review{grid-template-columns:1fr}}.st-review > div{display:grid;gap:var(--v2-s2);align-content:start}.st-tl{list-style:none;margin:0;padding:0;display:grid}.st-tl li{display:grid;grid-template-columns:26px 28px 1fr;gap:var(--v2-s3);align-items:start;padding:var(--v2-s3) 0;border-bottom:1px solid var(--v2-line2);position:relative}.st-tl li:last-child{border-bottom:0}.st-tl li .st-ic{width:24px;height:24px;color:var(--v2-sub)}.st-tl b{display:block;font-size:var(--v2-t-entity)}.st-tl small{display:block;font-size:var(--v2-t-body);color:var(--v2-sub);line-height:1.45;margin-top:var(--v2-s0)}.st-copy{display:flex;gap:var(--v2-s2)}.st-copy input{flex:1}.st-memberh,.st-summary{display:flex;gap:var(--v2-s4);align-items:center;flex-wrap:wrap;grid-template-columns:none}.st-name{font-size:var(--v2-t-say)}.st-kv{display:grid;gap:var(--v2-s1h);padding-left:var(--v2-s5);border-left:1px solid var(--v2-line)}.st-kv small{font:600 var(--v2-t-label)/1 var(--v2-sans);letter-spacing:.08em;color:var(--v2-sub)}.st-kv b{font-size:var(--v2-t-entity)}.st-phone{display:flex}.st-phone select{width:92px!important;border-top-right-radius:0!important;border-bottom-right-radius:0!important;border-right:0!important}.st-phone input{border-top-left-radius:0!important;border-bottom-left-radius:0!important}.st-lockc{display:flex;gap:var(--v2-s3);align-items:center;padding:var(--v2-s3) var(--v2-s4);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg)}.st-lockc .st-ic{width:24px;height:24px}.st-lockc div{flex:1}.st-lockc b{display:block}.st-lockc small{display:block;color:var(--v2-sub);font-size:var(--v2-t-small);margin-top:var(--v2-s0)}.st-cab{border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);padding:var(--v2-s4);display:grid;gap:var(--v2-s3);align-content:start;background:var(--v2-bg)}.st-cab-h{display:flex;gap:var(--v2-s3);align-items:flex-start}.st-cab-h div{flex:1}.st-cab-h b{display:block;font-size:var(--v2-t-title)}.st-cab-h small{display:block;font-size:var(--v2-t-body);color:var(--v2-sub);margin-top:var(--v2-s0)}.st-cab-empty{display:grid;justify-items:center;text-align:center;gap:var(--v2-s2);padding:var(--v2-s6) var(--v2-s4);border:1px dashed var(--v2-line);border-radius:var(--v2-r-control);color:var(--v2-sub)}.st-cab-empty .st-ic{width:34px;height:34px}.st-cab-empty b{color:var(--v2-ink);font-size:var(--v2-t-title)}.st-cab-empty small{font-size:var(--v2-t-body);line-height:1.45;max-width:30ch}.st-cab-l{display:grid;gap:var(--v2-s2)}.st-file{display:flex;gap:var(--v2-s2);align-items:center;padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);text-decoration:none;color:var(--v2-ink)}.st-file:hover{border-color:var(--v2-accent-line)}.st-file div{flex:1;min-width:0}.st-file b{display:block;font-size:var(--v2-t-body)}.st-file small{display:block;font-size:var(--v2-t-small);color:var(--v2-sub);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}/* documents detail */.st-back{justify-self:start;border:0;background:none;color:var(--v2-accent-ink);font:600 var(--v2-t-entity)/1 var(--v2-sans);cursor:pointer;display:inline-flex;gap:var(--v2-s2);align-items:center;padding:0}.st-doch{display:flex;gap:var(--v2-s3);align-items:flex-start}.st-doch h3{font-size:var(--v2-t-say)}.st-attach{display:flex;gap:var(--v2-s2);align-items:center;padding:var(--v2-s3) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-bg);color:var(--v2-ink);text-decoration:none;font-size:var(--v2-t-entity)}.st-attach.none{color:var(--v2-sub)}.st-attach small{color:var(--v2-sub);margin-left:auto}label.pd-btn{display:inline-flex;align-items:center;gap:var(--v2-s2);cursor:pointer}.pd-btn .st-ic{width:16px;height:16px}.st-points{display:grid;gap:var(--v2-s2);padding:var(--v2-s4);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface)}.st-points > div{display:flex;gap:var(--v2-s2);align-items:flex-start;font-size:var(--v2-t-entity)}.st-related{display:grid}.st-relrow{display:grid;grid-template-columns:24px 160px minmax(0,1fr) 110px 170px auto 30px;gap:var(--v2-s3);align-items:center;padding:var(--v2-s2) var(--v2-s1);border-top:1px solid var(--v2-line2)}.st-relrow:first-child{border-top:0}.st-relrow .st-dim{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width:1100px){.st-relrow{grid-template-columns:24px 1fr auto;}.st-relrow > .st-dim{display:none}}/* connections */.st-hero{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--v2-s5) var(--v2-s6);padding:var(--v2-s6) var(--v2-s6) var(--v2-s5)}@media (max-width:1000px){.st-hero{grid-template-columns:1fr}.st-illo{display:none!important}}

.pd-btn.lg{padding:var(--v2-s4) var(--v2-s5);font-size:var(--v2-t-title);justify-self:start;display:inline-flex;gap:var(--v2-s3);align-items:center}.pd-btn.lg .st-ic{width:20px;height:20px}.st-illo{display:flex;align-items:center;gap:0;justify-content:center}














.st-hc{display:flex;gap:var(--v2-s5);align-items:flex-start;padding:var(--v2-s5) var(--v2-s5);border-radius:var(--v2-r-surface);border:1px solid}.st-hc .st-ic{width:40px;height:40px;flex:0 0 40px}.st-hc b{display:block;font-size:var(--v2-t-title)}.st-hc p{margin:var(--v2-s1h) 0 0;font-size:var(--v2-t-entity);line-height:1.6;color:var(--v2-sub)}.st-hc.warn{border-color:var(--v2-warn-line);background:var(--v2-warn-soft)}.st-hc.warn .st-ic{color:var(--v2-warn-dot)}.st-hc.info{border-color:var(--v2-info-line);background:var(--v2-info-soft)}.st-hc.info .st-ic{color:var(--v2-info-dot)}.utility .crumb[data-st]{font-size:0}.utility .crumb[data-st] > span{display:none}.utility .crumb[data-st] #crumb{font-size:var(--v2-t-body);font-weight:500;color:var(--v2-sub)}.utility .crumb[data-st] .st-cc{color:var(--v2-ink);font-weight:600}.st-cardh{flex-wrap:nowrap}.st-cardh > div:first-child{flex:1;min-width:0}@media (max-width:760px){.st-cardh{flex-wrap:wrap}}.st-more-chip{border:1px dashed var(--v2-accent-line);background:none;color:var(--v2-accent-ink);font:600 var(--v2-t-small)/1 var(--v2-sans);padding:var(--v2-s1h) var(--v2-s2);border-radius:6px;cursor:pointer}.st-foot{padding-right:64px}.st-terms .ppl-terms.done{display:flex;gap:var(--v2-s3);align-items:center;padding:var(--v2-s3) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg)}.st-terms .ppl-terms.done .ppl-dst{padding:var(--v2-s2) var(--v2-s3);border-radius:6px;border:1px solid var(--v2-ok-line);font-size:var(--v2-t-entity)}.st-terms .ppl-terms.done .pd-linkbtn{font-size:var(--v2-t-entity);color:var(--v2-accent-ink)}.st-2col.even{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.st-2col.access{grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr)}@media (max-width:1100px){.st-2col.access{grid-template-columns:1fr}}.st-togs.c3{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.st-togs.c4{grid-template-columns:repeat(auto-fill,minmax(168px,1fr))}.st-summary .st-name,.st-memberh .st-name{display:block}.st-summary > div:nth-child(2) small{display:block;margin-top:var(--v2-s0)}.st-clamp2,.st-clamp3{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}.st-clamp2{-webkit-line-clamp:2}.st-clamp3{-webkit-line-clamp:3}.st-full summary{display:flex;gap:var(--v2-s2);align-items:center;cursor:pointer;list-style:none}.st-full summary::-webkit-details-marker{display:none}.st-fulltext{margin-top:var(--v2-s3);padding:var(--v2-s3) var(--v2-s4);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);font-size:var(--v2-t-body);line-height:1.6;color:var(--v2-sub);max-height:320px;overflow:auto}
.utility .crumb[data-st] > :not(#crumb){display:none}.st-full summary .st-link,.st-line > .st-link{white-space:nowrap}/* R24 · Business goals — the same cards on the Dashboard, My Work and the Scoreboard. */.bz{display:grid;gap:var(--v2-s2);margin:0 0 var(--v2-s4)}.bz-top{display:flex;align-items:center;gap:var(--v2-s2)}.bz-top b{font:600 var(--v2-t-label)/1 var(--v2-sans);letter-spacing:.12em;text-transform:uppercase;color:var(--v2-sub)}.bz-edit{margin-left:auto;border:0;background:none;color:var(--v2-accent-ink);font:600 var(--v2-t-small)/1 var(--v2-sans);cursor:pointer}.bz-cards{display:grid;gap:var(--v2-s3);grid-template-columns:repeat(3,minmax(0,1fr))}.bz-cards.c2{grid-template-columns:repeat(2,minmax(0,1fr))}@media (max-width:900px){.bz-cards,.bz-cards.c2{grid-template-columns:1fr}}.bz-card{background:var(--v2-panel);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);padding:var(--v2-s4) var(--v2-s4);display:grid;gap:var(--v2-s2);align-content:start}.bz-h{display:flex;gap:var(--v2-s2);align-items:center}.bz-h b{font:600 var(--v2-t-entity)/1.2 var(--v2-sans)}.bz-h em{margin-left:auto;font-style:normal;font-size:var(--v2-t-small);color:var(--v2-sub);white-space:nowrap}.bz-ic{display:inline-flex;color:var(--v2-accent)}.bz-ic svg{width:18px;height:18px}.bz-n{display:flex;gap:var(--v2-s2);align-items:baseline}.bz-n b{font:700 32px/1 var(--v2-display);letter-spacing:-.5px;font-variant-numeric:tabular-nums}.bz-n span{font-size:var(--v2-t-entity);color:var(--v2-sub)}.bz-bar{position:relative;height:8px;border-radius:4px;background:var(--v2-line2);overflow:visible}.bz-bar i{display:block;height:100%;border-radius:4px;background:var(--v2-accent)}.bz-bar.ok i{background:var(--v2-ok-dot)}.bz-bar.warn i{background:var(--v2-warn-dot)}.bz-bar u{position:absolute;top:-4px;bottom:-4px;width:2px;background:var(--v2-ink);opacity:.7;text-decoration:none}.bz-card p{margin:0;font-size:var(--v2-t-body);line-height:1.5;color:var(--v2-sub)}.bz-card p b{color:var(--v2-ink)}.bz-warn{color:var(--v2-warn)!important}.bz-funnel{font-size:var(--v2-t-body);line-height:1.6;color:var(--v2-ink);padding:var(--v2-s3) var(--v2-s4);border:1px solid var(--v2-accent-line);border-radius:var(--v2-r-surface);background:var(--v2-accent-soft)}.bz-dim{display:block;color:var(--v2-sub);font-size:var(--v2-t-small);margin-top:var(--v2-s1)}.bz-in{display:flex;align-items:center;border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-bg)}.bz-in span{padding:0 0 0 var(--v2-s3);color:var(--v2-sub)}.bz-in input{border:0!important;box-shadow:none!important;background:none!important}#bizgoals:empty{display:none}#v-today #bizgoals .bz{margin-bottom:var(--v2-s4)}/* R24 · recurring work in Sourcing */.src2-recur{display:inline-flex;gap:var(--v2-s1h);align-items:center;border:1px solid var(--v2-accent-line);background:var(--v2-accent-soft);color:var(--v2-accent-ink);
  border-radius:999px;padding:var(--v2-s1h) var(--v2-s3);font:500 var(--v2-t-small)/1 var(--v2-sans);cursor:pointer}.src2-recur b{color:var(--v2-ink)}.src2-recur.on{background:var(--v2-accent);color:var(--v2-bg)}.src2-recur.on b{color:var(--v2-bg)}.src2-rbadge{display:inline-flex;align-items:center;gap:var(--v2-s1);font:600 var(--v2-t-label)/1 var(--v2-sans);padding:var(--v2-s1) var(--v2-s2);border-radius:5px;
  background:var(--v2-ok-soft);color:var(--v2-ok);margin-left:var(--v2-s1h);vertical-align:middle}/* ══ R25 · INTEGRATIONS — built on the Settings components (st-*) ══ */.ig .st-card{gap:var(--v2-s3)}.ig-tile{--tc:#475569;width:40px;height:40px;flex:0 0 40px;border-radius:9px;display:grid;place-items:center;background:var(--tc);color:#fff;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.08)}.ig-tile b{font:800 var(--v2-t-body)/1 var(--v2-display);letter-spacing:-.2px}.ig-tile svg{width:22px;height:22px}.ig-tile.sm{width:22px;height:22px;flex-basis:22px;border-radius:5px}.ig-tile.sm svg{width:14px;height:14px}.ig-tile.sm b{font-size:var(--v2-t-label)}.ig-tile.lg{width:52px;height:52px;flex-basis:52px;border-radius:11px}.ig-tile.lg svg{width:28px;height:28px}.ig-tile.lg b{font-size:var(--v2-t-title)}.ig-tile.xl{width:72px;height:72px;flex-basis:72px;border-radius:14px}.ig-tile.xl svg{width:38px;height:38px}.ig-tile.xl b{font-size:24px}.ig-svch{display:flex;gap:var(--v2-s3);align-items:flex-start}.ig-svch > div{flex:1;min-width:0;display:grid;gap:var(--v2-s0)}.ig-svch b{font:600 var(--v2-t-title)/1.25 var(--v2-sans)}.ig-svch b.lg{font-size:var(--v2-t-say)}.ig-svch b.xl{font:700 26px/1.2 var(--v2-display)}.ig-svch > div > span{font-size:var(--v2-t-body);color:var(--v2-sub);line-height:1.45}.ig-svch span.lg{font-size:var(--v2-t-title)}.ig-badge{display:inline-flex;align-items:center;gap:var(--v2-s1h);white-space:nowrap;font:600 var(--v2-t-label)/1 var(--v2-sans);letter-spacing:.06em;padding:var(--v2-s1h) var(--v2-s2);border-radius:6px;
  border:1px solid var(--v2-line);color:var(--v2-sub);background:var(--v2-bg)}.ig-badge .st-ic{width:12px;height:12px}.ig-badge.warn{color:var(--v2-warn);border-color:var(--v2-warn-line);background:var(--v2-warn-soft)}.ig-badge.warn i{width:7px;height:7px;border-radius:50%;background:var(--v2-warn-dot)}

.ig-desc{margin:0;font-size:var(--v2-t-entity);line-height:1.55;color:var(--v2-sub)}.ig-sub{margin:0;font-size:var(--v2-t-small);color:var(--v2-sub);line-height:1.5}.ig-bad{color:var(--v2-bad)}.ig-danger{color:var(--v2-bad)!important;border-color:var(--v2-bad-line)!important}.ig-h5{display:flex;align-items:center;gap:var(--v2-s2);font:600 var(--v2-t-entity)/1.3 var(--v2-sans);color:var(--v2-ink)}.ig-h5 .st-ic{width:17px;height:17px;color:var(--v2-sub)}.ig-h5 small{font-weight:400;color:var(--v2-sub)}







.ig-does ul,.ig-bul{margin:var(--v2-s1h) 0 0;padding-left:var(--v2-s4);display:grid;gap:var(--v2-s1);font-size:var(--v2-t-body);color:var(--v2-ink)}.ig-hint{display:flex;gap:var(--v2-s2);align-items:flex-start;padding-top:var(--v2-s2);border-top:1px solid var(--v2-line2)}.ig-hint .st-ic{width:20px;height:20px;color:var(--v2-sub)}.ig-hint b{font-size:var(--v2-t-entity)}.ig-hint p{margin:var(--v2-s1) 0 0;font-size:var(--v2-t-body);line-height:1.5;color:var(--v2-sub)}.ig-grid4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--v2-s3);align-items:start}@media (max-width:1400px){.ig-grid4{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:760px){.ig-grid4{grid-template-columns:1fr}}.ig-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--v2-s4);align-items:start}@media (max-width:1100px){.ig-3{grid-template-columns:1fr}}.ig-scopes{display:grid;gap:var(--v2-s2);padding-top:var(--v2-s1h)}.ig-scope{display:grid;grid-template-columns:22px 1fr auto;gap:var(--v2-s2);align-items:center}.ig-scope b{display:block;font-size:var(--v2-t-entity)}.ig-scope small{display:block;font-size:var(--v2-t-small);color:var(--v2-sub)}.ig-chk{width:20px;height:20px;border-radius:5px;border:1.5px solid var(--v2-line);display:grid;place-items:center;font-size:var(--v2-t-small);font-weight:700}.ig-chk.ok{background:var(--v2-accent);border-color:var(--v2-accent);color:var(--v2-bg)}.ig-chk.bad{border-color:var(--v2-bad-dot);color:var(--v2-bad)}.ig-pills{display:grid;gap:var(--v2-s1h);justify-items:end}.ig-state{display:inline-flex;align-items:center;gap:var(--v2-s1h);font:600 var(--v2-t-small)/1 var(--v2-sans);padding:var(--v2-s1h) var(--v2-s2);border-radius:6px;border:1px solid var(--v2-line);color:var(--v2-sub)}.ig-state i{width:8px;height:8px;border-radius:50%;background:currentColor}.ig-state.bad{color:var(--v2-bad);border-color:var(--v2-bad-line);background:var(--v2-bad-soft)}.ig-state.ok{color:var(--v2-ok);border-color:var(--v2-ok-line);background:var(--v2-ok-soft)}.ig-how{list-style:none;margin:0;padding:0;display:grid;gap:var(--v2-s2)}.ig-how li{display:flex;gap:var(--v2-s3);align-items:center;font-size:var(--v2-t-entity)}.ig-how .st-ic{color:var(--v2-sub)}.ig-conn{display:flex;gap:var(--v2-s3);align-items:center;padding:var(--v2-s3) 0;border-top:1px solid var(--v2-line2)}.ig-conn > div{flex:1}.ig-conn b{display:block;font-size:var(--v2-t-entity)}.ig-conn small{display:block;font-size:var(--v2-t-small);color:var(--v2-sub);margin-top:var(--v2-s0)}.ig-perm{display:grid;grid-template-columns:1fr 200px;gap:var(--v2-s4);padding:var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg)}.ig-perm-r{display:grid;gap:var(--v2-s1h);align-content:start;padding-left:var(--v2-s4);border-left:1px solid var(--v2-line)}.ig-perm-r small{font-size:var(--v2-t-small);color:var(--v2-sub)}.ig-pl{display:flex;gap:var(--v2-s2);align-items:center;font-size:var(--v2-t-body);margin-top:var(--v2-s1h)}.ig-pl .st-ic{width:17px;height:17px}.ig-linkrow{display:flex;gap:var(--v2-s2);align-items:center;width:100%;padding:var(--v2-s3) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-bg);
  color:var(--v2-ink);font:500 var(--v2-t-entity)/1.3 var(--v2-sans);cursor:pointer;text-align:left}.ig-linkrow:hover{border-color:var(--v2-accent-line)}.ig-linkrow small{display:block;color:var(--v2-sub);font-size:var(--v2-t-small);margin-top:var(--v2-s0)}.ig-hero2{grid-template-columns:minmax(0,1fr) minmax(0,460px);align-items:start;gap:var(--v2-s4) var(--v2-s5)}@media (max-width:1100px){.ig-hero2{grid-template-columns:1fr}}.ig-hero2 .ig-status{grid-column:2;grid-row:1 / span 2}@media (max-width:1100px){.ig-hero2 .ig-status{grid-column:1;grid-row:auto}}.ig-status{display:flex;gap:var(--v2-s3);padding:var(--v2-s4) var(--v2-s4);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg)}.ig-status > div{display:grid;gap:var(--v2-s2);flex:1}.ig-status b{font-size:var(--v2-t-title)}.ig-status p{margin:0;font-size:var(--v2-t-body);color:var(--v2-sub);line-height:1.5}.ig-status .pd-btn{justify-content:center;display:flex;gap:var(--v2-s2);align-items:center}.ig-okbox{display:flex;gap:var(--v2-s3);align-items:center;padding:var(--v2-s3) var(--v2-s4);border-radius:var(--v2-r-control);border:1px solid var(--v2-line);background:var(--v2-bg)}.ig-okbox b{display:block}.ig-okbox small{display:block;color:var(--v2-sub);font-size:var(--v2-t-small);margin-top:var(--v2-s0)}.ig-okbox.ok .st-ic{color:var(--v2-ok-dot)}.ig-okbox.warn .st-ic{color:var(--v2-warn-dot)}.ig-row{display:flex!important;gap:var(--v2-s4);align-items:flex-start}.ig-row > div{flex:1;display:grid;gap:var(--v2-s1h)}.ig-row > b,.ig-row div > b{font-size:var(--v2-t-title)}.ig-chips{display:flex;flex-wrap:wrap;gap:var(--v2-s2);margin-top:var(--v2-s2)}.ig-chips code{font:500 var(--v2-t-small)/1 var(--v2-mono);padding:var(--v2-s1h) var(--v2-s2);border:1px solid var(--v2-line);border-radius:6px;background:var(--v2-bg)}.ig-chips.big button{border:1px solid var(--v2-line);background:var(--v2-bg);color:var(--v2-ink);font:500 var(--v2-t-entity)/1 var(--v2-sans);padding:var(--v2-s2) var(--v2-s4);border-radius:var(--v2-r-control);cursor:pointer}.ig-step{display:flex;gap:var(--v2-s3);align-items:flex-start;padding:var(--v2-s3) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg)}.ig-step b{display:block;font-size:var(--v2-t-entity)}.ig-step small{display:block;color:var(--v2-sub);font-size:var(--v2-t-body);margin-top:var(--v2-s0)}.st-n.acc,.ig-step .st-n{background:var(--v2-accent);color:var(--v2-bg)}.ig-ex{display:flex;flex-wrap:wrap;gap:var(--v2-s2);align-items:center}.ig-ex > div{padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-bg)}.ig-ex b{display:block;font-size:var(--v2-t-entity)}.ig-ex small{display:block;color:var(--v2-sub);font-size:var(--v2-t-small);margin-top:var(--v2-s0)}.ig-ex .ig-sub{display:flex;gap:var(--v2-s2);align-items:center;flex:1;min-width:180px}
.ig-dl{display:grid;grid-template-columns:150px 1fr;gap:var(--v2-s2) var(--v2-s4);margin:0;padding:var(--v2-s3) 0;border-top:1px solid var(--v2-line);font-size:var(--v2-t-entity)}.ig-dl dt{color:var(--v2-ink);font-weight:500}.ig-dl dd{margin:0;color:var(--v2-sub);display:flex;gap:var(--v2-s2);align-items:center}.ig-dl dd .st-ic{width:17px;height:17px}.ig-dl dd code{font:500 var(--v2-t-body) var(--v2-mono);letter-spacing:.08em}.ig-dl.top{border-top:1px solid var(--v2-line)}
.ig-stat{display:flex!important;gap:var(--v2-s4);align-items:center}.ig-stat > div{flex:1;display:grid;gap:var(--v2-s1)}.ig-stat small{font:600 var(--v2-t-label)/1 var(--v2-sans);letter-spacing:.1em;color:var(--v2-sub)}.ig-stat b{font:700 30px/1.1 var(--v2-display)}.ig-stat span{font-size:var(--v2-t-body);color:var(--v2-sub)}.ig-stat .st-ic.big{width:40px;height:40px}.ig-bars .st-ic{width:26px;height:26px;color:var(--v2-accent)}.ig-share{display:flex;gap:var(--v2-s2);align-items:center}.ig-share .bz-bar{flex:1}.ig-share span{width:36px;text-align:right;font-size:var(--v2-t-body)}.ig-tot td{background:var(--v2-line2)}.ig-guide{display:flex;justify-content:space-between;gap:var(--v2-s3);padding:var(--v2-s3) 0;border-top:1px solid var(--v2-line2)}.ig-guide b{font-size:var(--v2-t-entity)}.ig-guide small{display:block;color:var(--v2-sub);font-size:var(--v2-t-body);margin-top:var(--v2-s0)}.ig-filters{display:flex;gap:var(--v2-s2);flex-wrap:wrap;align-items:stretch}.ig-filter{display:flex;gap:var(--v2-s2);align-items:center;padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-panel);min-width:180px}.ig-filter .st-ic{color:var(--v2-sub)}.ig-filter small{display:block;font-size:var(--v2-t-label);color:var(--v2-sub)}.ig-filter select{border:0;background:none;color:var(--v2-ink);font:500 var(--v2-t-entity)/1.2 var(--v2-sans);padding:var(--v2-s0) 0;outline:none}.st-search.grow{flex:1;min-width:220px}.ig-click{cursor:pointer}.ig-tall{max-height:560px;overflow:auto}.ig-thumbs{display:flex;gap:var(--v2-s2);flex-wrap:wrap}.ig-thumbs img{width:72px;height:72px;object-fit:cover;border-radius:6px;border:1px solid var(--v2-line)}.ig-proposed{display:inline-flex;gap:var(--v2-s2);align-items:center;font:600 var(--v2-t-label)/1 var(--v2-sans);letter-spacing:.06em;padding:var(--v2-s2) var(--v2-s3);border-radius:var(--v2-r-control);
  border:1px solid var(--v2-warn-line);color:var(--v2-warn);background:var(--v2-warn-soft)}.ig-proposed .st-ic{width:14px;height:14px}.ig-steps{display:flex;gap:var(--v2-s1h);align-items:stretch}@media (max-width:1100px){.ig-steps{flex-wrap:wrap}.ig-arrow{display:none}}.ig-mstep{flex:1;display:grid;gap:var(--v2-s2);align-content:start;padding:var(--v2-s4);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg);min-width:160px}.ig-mstep b{font-size:var(--v2-t-entity)}.ig-mstep small{font-size:var(--v2-t-small);color:var(--v2-sub);line-height:1.5}.ig-mstep > .st-n{justify-self:start}.ig-arrow{align-self:center;color:var(--v2-sub);font-size:var(--v2-t-say)}.ig-mini{padding:0!important;border:0!important;background:none!important;display:inline-flex}.ig-count{display:inline-grid;place-items:center;min-width:26px;height:26px;border-radius:50%;background:var(--v2-accent-soft);color:var(--v2-accent-ink);font:600 var(--v2-t-body)/1 var(--v2-sans);margin-left:var(--v2-s2)}.ig-type{display:flex;gap:var(--v2-s3);align-items:flex-start}.ig-type b{display:block}.ig-type small{display:block;color:var(--v2-sub);font-size:var(--v2-t-small);line-height:1.45;margin-top:var(--v2-s0)}.ig-legend{display:flex;gap:var(--v2-s3);align-items:flex-start;padding:var(--v2-s1h) 0}.ig-legend b{display:block;font-size:var(--v2-t-entity)}.ig-legend small{display:block;color:var(--v2-sub);font-size:var(--v2-t-small)}.ig-dot{width:14px;height:14px;flex:0 0 14px;border-radius:50%;border:2px solid var(--v2-sub);display:inline-block;margin-top:var(--v2-s0)}.ig-dot.warn{background:var(--v2-warn-dot);border-color:var(--v2-warn-dot)}.ig-dot.ok{background:var(--v2-ok-dot);border-color:var(--v2-ok-dot)}.ig-dot.bad{background:var(--v2-bad-dot);border-color:var(--v2-bad-dot)}.ig-dot.off{background:var(--v2-faint);border-color:var(--v2-faint)}.ig-dot.acc{background:var(--v2-accent);border-color:var(--v2-accent)}.ig-dot.big{width:44px;height:44px;flex-basis:44px;background:var(--v2-line)}.ig-new{font:600 var(--v2-t-label)/1 var(--v2-sans);letter-spacing:.1em;color:var(--v2-accent-ink)}.ig-stepper{display:flex;align-items:center;gap:var(--v2-s1h);margin:var(--v2-s1h) 0 var(--v2-s1)}.ig-stepper > div{display:grid;justify-items:center;gap:var(--v2-s1h)}.ig-stepper > div span{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;border:2px solid var(--v2-line);font-weight:700;font-size:var(--v2-t-body)}.ig-stepper > div.on span{background:var(--v2-accent);border-color:var(--v2-accent);color:var(--v2-bg)}.ig-stepper > div b{font-size:var(--v2-t-body);font-weight:500;color:var(--v2-sub)}.ig-stepper > div.on b{color:var(--v2-accent-ink)}.ig-stepper > i{flex:1;height:1px;background:var(--v2-line);margin-bottom:var(--v2-s5)}.ig-bigstatus{display:flex;gap:var(--v2-s4);align-items:center;padding:var(--v2-s4);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg)}.ig-bigstatus b{display:block;font-size:var(--v2-t-title)}.ig-bigstatus small{display:block;font-size:var(--v2-t-body);color:var(--v2-sub);margin-top:var(--v2-s0)}.ig-checks{border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg);padding:var(--v2-s1h) var(--v2-s3)}.ig-chkrow{display:flex;gap:var(--v2-s3);align-items:center;padding:var(--v2-s2) 0;border-bottom:1px solid var(--v2-line2);font-size:var(--v2-t-entity)}.ig-chkrow:last-child{border-bottom:0}.ig-chkrow .ig-chk{border-radius:50%}.ig-chkrow small{font-size:var(--v2-t-small);color:var(--v2-sub)}.ig-access{display:grid;grid-template-columns:320px minmax(0,1fr) 400px;gap:var(--v2-s4);align-items:start}@media (max-width:1400px){.ig-access{grid-template-columns:1fr}}.ig-srv{display:flex;gap:var(--v2-s3);align-items:center;width:100%;padding:var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg);color:var(--v2-ink);cursor:pointer;text-align:left;font:inherit}.ig-srv.on{border:2px solid var(--v2-accent)}.ig-srv > div{flex:1}.ig-srv b{display:block}.ig-srv small{display:flex;gap:var(--v2-s1h);align-items:center;font-size:var(--v2-t-small);color:var(--v2-sub);margin-top:var(--v2-s0)}.ig-srv small .ig-dot{width:9px;height:9px;flex-basis:9px;margin:0;border-width:1px}.ig-acc{font:700 var(--v2-t-label)/1 var(--v2-sans);letter-spacing:.06em;padding:var(--v2-s1) var(--v2-s2);border-radius:5px;border:1px solid}.ig-acc.acc{color:var(--v2-accent-ink);border-color:var(--v2-accent-line);background:var(--v2-accent-soft)}.ig-acc.warn{color:var(--v2-warn);border-color:var(--v2-warn-line);background:var(--v2-warn-soft)}.ig-acc.vio{color:#c4a1ff;border-color:rgba(167,139,250,.45);background:rgba(139,92,246,.14)}.ig-code{margin:0;padding:var(--v2-s3) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-bg);font:var(--v2-t-small)/1.55 var(--v2-mono);color:var(--v2-ink);white-space:pre-wrap;word-break:break-word;max-height:260px;overflow:auto}.ig-field{display:grid;grid-template-columns:110px 1fr 40px;gap:var(--v2-s2);padding:var(--v2-s1h) 0;border-bottom:1px solid var(--v2-line2);font-size:var(--v2-t-body)}.ig-field span{color:var(--v2-sub)}.ig-field b{text-align:right;font-weight:500}.ig-set{display:grid;grid-template-columns:130px 1fr;gap:var(--v2-s2);align-items:center;font-size:var(--v2-t-entity)}.ig-set select{font:inherit;color:var(--v2-ink);background:var(--v2-bg);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);padding:var(--v2-s2) var(--v2-s2)}.ig-policy{display:grid;grid-template-columns:1.6fr 1fr;gap:var(--v2-s4)}@media (max-width:1100px){.ig-policy{grid-template-columns:1fr}}.ig-pol{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--v2-s3);margin-top:var(--v2-s1h)}.ig-pol > div{display:flex;gap:var(--v2-s2);align-items:flex-start}.ig-pol b{display:block;font-size:var(--v2-t-entity)!important}.ig-pol small{display:block;font-size:var(--v2-t-small);color:var(--v2-sub)}.ig-actbar{display:grid!important;grid-template-columns:320px 200px 200px 1fr;gap:var(--v2-s4);align-items:end}@media (max-width:1300px){.ig-actbar{grid-template-columns:1fr 1fr}}.ig-actbar small{display:block;font-size:var(--v2-t-body);color:var(--v2-ink);font-weight:500;margin-bottom:var(--v2-s2)}.ig-health{display:flex;gap:var(--v2-s2);align-items:center;font-size:var(--v2-t-entity);padding:var(--v2-s2) 0}.ig-acts .st-line{flex-wrap:wrap}.ig-diag{display:flex;gap:var(--v2-s3);align-items:flex-start;padding:var(--v2-s4);border:1px solid var(--v2-bad-line);border-radius:var(--v2-r-surface);background:var(--v2-bad-soft)}.ig-diag > .st-ic{color:var(--v2-bad-dot)}.ig-diag b{color:var(--v2-bad);font-size:var(--v2-t-entity)}.ig-diag p{margin:var(--v2-s1h) 0 var(--v2-s2);font-size:var(--v2-t-body);color:var(--v2-ink)}.ig-svc{overflow:hidden}.ig-svc .ig-svch{flex-wrap:wrap}.ig-svc .ig-svch > .ig-badge{order:3;flex-basis:100%;justify-content:flex-start;width:max-content;flex-grow:0}

.ig-scope{grid-template-columns:22px 1fr}.ig-scope > .ig-sub{grid-column:2;margin-top:-var(--v2-s1)}
/* Settings and Integrations: the design's buttons — cyan primary, outlined ghost —
   whichever view hosts them (Integrations is outside the GovCon desk's styles). */.st .pd-btn{display:inline-flex;align-items:center;gap:var(--v2-s2);border-radius:var(--v2-r-control);font:600 var(--v2-t-body)/1 var(--v2-sans);padding:var(--v2-s2) var(--v2-s4);
  background:var(--v2-accent);color:var(--v2-bg);border:1px solid var(--v2-accent);cursor:pointer;text-decoration:none}.st .pd-btn .st-ic{width:16px;height:16px}.st .pd-btn.ghost{background:transparent;color:var(--v2-ink);border-color:var(--v2-line)}.st .pd-btn.ghost:hover{border-color:var(--v2-accent-line)}.st .pd-btn:disabled,.st .pd-btn[disabled]{opacity:.45;cursor:default}.st .pd-btn.sm{padding:var(--v2-s1h) var(--v2-s2);font-size:var(--v2-t-small)}.ig-dl dd.st-warn{color:var(--v2-warn)}.ig-dl dd.st-ok{color:var(--v2-ok)}.ig-dl dd.ig-bad{color:var(--v2-bad)}.ig-stat select{min-width:0;max-width:170px;width:auto}.ig-stat > div{min-width:0}.ig-stat:has(select) b{font-size:24px}.ig .st-table td:first-child{white-space:nowrap}body.v2 .st .pd-btn:not(.ghost),.st .pd-btn:not(.ghost){background:var(--v2-accent);color:var(--v2-bg);border-color:var(--v2-accent)}/* R26 · MCP tools in the Ask chat */.v2-ask-tools{display:flex;flex-wrap:wrap;gap:var(--v2-s1h);margin-top:var(--v2-s2)}.v2-ask-tools span{font:500 var(--v2-t-label)/1 var(--v2-mono);padding:var(--v2-s1) var(--v2-s2);border-radius:5px;border:1px solid var(--v2-line);color:var(--v2-sub)}.v2-ask-tools span.ok{color:var(--v2-accent-ink);border-color:var(--v2-accent-line)}.v2-ask-tools span.bad{color:var(--v2-bad);border-color:var(--v2-bad-line)}.v2-ask-approve{display:grid;gap:var(--v2-s2);padding:var(--v2-s3);border:1px solid var(--v2-warn-line);border-radius:var(--v2-r-surface);background:var(--v2-warn-soft)}.v2-ask-approve > b{color:var(--v2-warn)}.v2-ask-call{display:grid;gap:var(--v2-s1h);padding:var(--v2-s2);border-radius:var(--v2-r-control);background:var(--v2-panel)}.v2-ask-call small{color:var(--v2-sub);font-size:var(--v2-t-small)}.v2-ask-call pre{margin:0;padding:var(--v2-s2);border-radius:6px;background:var(--v2-bg);font:var(--v2-t-label)/1.5 var(--v2-mono);white-space:pre-wrap;max-height:160px;overflow:auto}.v2-ask-acts{display:flex;gap:var(--v2-s2)}.v2-ask-approve .ig-acc{margin-left:var(--v2-s1h)}.ig-run{display:grid;gap:var(--v2-s2);padding:var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg)}.ig-run .pd-btn{justify-self:start}/* The Ask chat belongs to a pursuit — it must not follow you to other views. */body:not(.pd-mode) .v2-ask{display:none}.ig-oauth{display:grid;gap:var(--v2-s2);padding:var(--v2-s3);border:1px solid var(--v2-accent-line);border-radius:var(--v2-r-surface);background:var(--v2-accent-soft)}.ig-oauth-h{display:flex;gap:var(--v2-s3);align-items:center}.ig-oauth-h > div{flex:1}.ig-oauth-h b{display:block}.ig-oauth-h small{display:block;font-size:var(--v2-t-small);color:var(--v2-sub);margin-top:var(--v2-s0)}/* R28 · Market → Pricing analysis */body.v2 .prc{display:flex;flex-direction:column;gap:var(--v2-s3)}body.v2 .prc-head{display:flex;align-items:center;gap:var(--v2-s3);flex-wrap:wrap}body.v2 .prc-head > div:first-child{flex:1;min-width:0}body.v2 .prc-head > div:first-child b{font-size:var(--v2-t-title);color:var(--v2-ink)}body.v2 .prc-head > div:first-child span{font-size:var(--v2-t-body);color:var(--v2-sub);margin-left:var(--v2-s1h)}body.v2 .prc-meta{font-size:var(--v2-t-label);color:var(--v2-sub)}body.v2 .prc-old{color:var(--v2-warn)}body.v2 .prc-err{color:var(--v2-bad);font-size:var(--v2-t-body)}body.v2 .prc-empty,body.v2 .prc-run{gap:var(--v2-s2);max-width:760px}body.v2 .prc-empty > span,body.v2 .prc-run > span{line-height:1.55}body.v2 .prc-bar{height:4px;border-radius:2px;background:var(--v2-line2);overflow:hidden}body.v2 .prc-bar i{display:block;height:100%;width:30%;background:var(--v2-accent);animation:prc-slide 1.6s ease-in-out infinite}@keyframes prc-slide{0%{transform:translateX(-100%)}100%{transform:translateX(340%)}}body.v2 .cbx-card > b small,body.v2 .prc-t small{font-size:var(--v2-t-body);font-weight:500;color:var(--v2-sub)}body.v2 .prc-memo{white-space:pre-wrap;font-size:var(--v2-t-entity);line-height:1.6;color:var(--v2-ink);max-width:78ch}body.v2 .prc-body{font-size:var(--v2-t-body);line-height:1.55;color:var(--v2-ink)}body.v2 .prc-conf-high > b{color:var(--v2-ok)}body.v2 .prc-conf-medium > b{color:var(--v2-warn)}body.v2 .prc-conf-low > b{color:var(--v2-bad)}body.v2 .prc-flag{background:var(--v2-warn-soft);border-color:color-mix(in srgb,var(--v2-warn) 30%,transparent)}body.v2 .prc-tw{overflow-x:auto}body.v2 .prc-t{width:100%;border-collapse:collapse;font-size:var(--v2-t-body)}body.v2 .prc-t th{text-align:left;font-size:var(--v2-t-label);text-transform:uppercase;letter-spacing:.05em;color:var(--v2-sub);
  font-weight:600;padding:var(--v2-s1h) var(--v2-s2) var(--v2-s1h) 0;border-bottom:1px solid var(--v2-line)}body.v2 .prc-t td{padding:var(--v2-s2) var(--v2-s2) var(--v2-s2) 0;border-bottom:1px solid var(--v2-line2);vertical-align:top;color:var(--v2-ink);line-height:1.45}body.v2 .prc-t .n{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}body.v2 .prc-t td:last-child{max-width:260px;word-break:break-word}body.v2 .prc-sum td{font-weight:600;border-bottom:0}body.v2 .prc-note{display:block;font-size:var(--v2-t-label);color:var(--v2-sub);margin-top:var(--v2-s0)}body.v2 .prc-src-t{font-size:var(--v2-t-label);color:var(--v2-sub)}body.v2 .prc a{color:var(--v2-accent-ink);text-decoration:none}body.v2 .prc a:hover{text-decoration:underline}body.v2 .prc-srcs{display:flex;flex-wrap:wrap;gap:var(--v2-s0) var(--v2-s2);font-size:var(--v2-t-label);line-height:1.5}body.v2 .prc-list{margin:var(--v2-s0) 0 0;padding-left:var(--v2-s4);display:flex;flex-direction:column;gap:var(--v2-s1h);font-size:var(--v2-t-body);line-height:1.5;color:var(--v2-ink)}body.v2 .prc-list b{font-weight:600}body.v2 .prc-list i{color:var(--v2-sub)}body.v2 .prc-chk.prc-ok b{color:var(--v2-ok)}body.v2 .prc-chk.prc-warn b{color:var(--v2-warn)}body.v2 .prc-none{font-size:var(--v2-t-body);color:var(--v2-sub)}body.v2 .prc-gatehint{margin:0 0 var(--v2-s3);padding:var(--v2-s2) var(--v2-s3);border-radius:var(--v2-r-surface);background:var(--v2-accent-soft);
  border:1px solid var(--v2-accent-line);font-size:var(--v2-t-body);line-height:1.5;color:var(--v2-ink)}body.v2 .prc-gatehint a{color:var(--v2-accent-ink)}body.v2 .prc-t .n small{display:block;white-space:normal;max-width:180px;margin-left:auto;font-size:var(--v2-t-label)}/* R28b · engines side by side */body.v2 .prc-eng{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--v2-s2)}body.v2 .prc-eng button{display:flex;flex-direction:column;align-items:flex-start;gap:var(--v2-s0);padding:var(--v2-s2) var(--v2-s3);cursor:pointer;
  background:var(--v2-panel);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);font:inherit;text-align:left;color:var(--v2-ink)}body.v2 .prc-eng button b{font-size:var(--v2-t-body);font-weight:600}body.v2 .prc-eng button span{font-size:var(--v2-t-label);color:var(--v2-sub);font-variant-numeric:tabular-nums}body.v2 .prc-eng button span small{font-size:inherit}body.v2 .prc-eng button:hover{border-color:var(--v2-accent-line)}body.v2 .prc-eng button.on{border-color:var(--v2-accent);background:var(--v2-accent-soft)}body.v2 .prc-eng button.on b{color:var(--v2-accent-ink)}body.v2 .prc-detail{display:flex;flex-direction:column;gap:var(--v2-s3)}body.v2 .prc-cmp{gap:var(--v2-s2)}body.v2 .prc-cmp-h{display:flex;align-items:center;justify-content:space-between;gap:var(--v2-s3);flex-wrap:wrap}body.v2 .prc-cmp-t td{width:30%}body.v2 .prc-cmp-t td.prc-cmp-l{width:10%;min-width:130px;color:var(--v2-sub);font-size:var(--v2-t-label);text-transform:uppercase;letter-spacing:.05em}body.v2 .prc-cmp-t th a{color:var(--v2-ink);font-size:var(--v2-t-body);text-transform:none;letter-spacing:0}body.v2 .prc-cmp-t b.prc-cmp-tgt{font-size:var(--v2-t-title);color:var(--v2-ok)}body.v2 .prc-c-high{color:var(--v2-ok);font-weight:600}body.v2 .prc-c-medium{color:var(--v2-warn);font-weight:600}body.v2 .prc-c-low{color:var(--v2-bad);font-weight:600}body.v2 .prc-memos{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:var(--v2-s3)}body.v2 .prc-memos .prc-memo{font-size:var(--v2-t-body)}body.v2 .prc-gatehint > div{margin-top:var(--v2-s0)}@media (max-width:760px){body.v2 .prc-eng{grid-template-columns:repeat(2,minmax(0,1fr))} }

/* ═══ R29 · CFA LaPlace — the content desk, five rooms ══════════════════
   Everything is drawn from the theme tokens;the four type hues are the only
   colours this desk adds,and each has a light and a dark value. */
.cx{--cx-blue:hsl(214 70% 42%);--cx-blue-s:hsl(214 80% 95%);
  --cx-green:hsl(152 55% 30%);--cx-green-s:hsl(150 50% 93%);
  --cx-amber:hsl(32 80% 36%);--cx-amber-s:hsl(36 90% 93%);
  --cx-violet:hsl(262 50% 48%);--cx-violet-s:hsl(262 70% 95%);
  --cx-raised:var(--v2-raised,var(--v2-line2));
  display:flex;flex-direction:column;gap:var(--v2-s3);min-width:0}html[data-theme="dark"] .cx{--cx-blue:hsl(214 85% 74%);--cx-blue-s:hsl(216 50% 24%);
  --cx-green:hsl(150 55% 66%);--cx-green-s:hsl(152 42% 17%);
  --cx-amber:hsl(34 85% 68%);--cx-amber-s:hsl(30 45% 18%);
  --cx-violet:hsl(262 80% 80%);--cx-violet-s:hsl(262 35% 24%)}.cx .cx-ic{width:16px;height:16px;flex:0 0 auto}.cx .cx-ic.lg{width:26px;height:26px}.cx b.req{color:var(--v2-bad-dot)}.cx-muted{color:var(--v2-sub);font-size:var(--v2-t-body);line-height:1.5;margin:0}.cx-muted.sm{font-size:var(--v2-t-small);display:flex;gap:var(--v2-s1h);align-items:flex-start}.cx-accent{color:var(--v2-accent-ink)}.cx-spacer{flex:1}.cx-none{padding:var(--v2-s5)!important;text-align:center;color:var(--v2-sub)}/* the two tab rows */.cx-tabs{display:inline-flex;align-self:flex-start;border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel);overflow:hidden;max-width:100%;overflow-x:auto}.cx-tabs button{min-width:150px;padding:var(--v2-s3) var(--v2-s5);border:0;border-right:1px solid var(--v2-line);background:none;font:500 var(--v2-t-entity)/1 var(--v2-sans);color:var(--v2-ink);cursor:pointer;white-space:nowrap}.cx-tabs button:last-child{border-right:0}.cx-tabs button:hover{background:var(--v2-line2)}.cx-tabs button.on{background:var(--v2-accent);color:var(--v2-bg);font-weight:600}.cx-subrow{display:flex;align-items:center;gap:var(--v2-s3);flex-wrap:wrap;justify-content:space-between}.cx-subtabs{display:inline-flex;border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel);overflow:hidden}.cx-subtabs button{padding:var(--v2-s2) var(--v2-s5);border:0;background:none;font:500 var(--v2-t-entity)/1 var(--v2-sans);color:var(--v2-ink);cursor:pointer;white-space:nowrap}.cx-subtabs button:hover{background:var(--v2-line2)}.cx-subtabs button.on{background:var(--v2-accent);color:var(--v2-bg);font-weight:600}.cx-subacts{display:flex;gap:var(--v2-s2);flex-wrap:wrap;align-items:center}/* buttons */.cx-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--v2-s1h);padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);
  background:var(--v2-panel);color:var(--v2-ink);font:500 var(--v2-t-body)/1.2 var(--v2-sans);cursor:pointer;white-space:nowrap;text-decoration:none}.cx-btn:hover:not(:disabled){border-color:var(--v2-accent-line);background:var(--v2-line2)}.cx-btn:disabled{opacity:.5;cursor:not-allowed}.cx-btn.primary{background:var(--v2-accent);border-color:var(--v2-accent);color:var(--v2-bg);font-weight:600}.cx-btn.primary:hover:not(:disabled){filter:brightness(1.08);background:var(--v2-accent)}.cx-btn.accent{border-color:var(--v2-accent);color:var(--v2-accent-ink)}.cx-btn.outline{border-color:var(--v2-accent);color:var(--v2-ink)}.cx-btn.light{background:var(--v2-ink);color:var(--v2-bg);border-color:var(--v2-ink);font-weight:600}.cx-btn.danger{color:var(--v2-bad);border-color:var(--v2-bad-line)}.cx-btn.sm{padding:var(--v2-s1h) var(--v2-s2);font-size:var(--v2-t-small)}.cx-btn.full{width:100%;padding:var(--v2-s2)}.cx-btn.grow{flex:1}.cx-btn.on{border-color:var(--v2-accent);background:var(--v2-accent-soft)}.cx-btn small{display:block;font-size:var(--v2-t-label);color:var(--v2-sub);font-weight:400}.cx-ig-btn{background:var(--v2-ink);color:var(--v2-bg);border-color:var(--v2-ink);padding:var(--v2-s1h) var(--v2-s3);text-align:left}.cx-ig-btn:hover:not(:disabled){background:var(--v2-ink)!important;filter:brightness(.95)}.cx-ig-btn b{display:block;font-size:var(--v2-t-body)}.cx-ig-btn small{color:inherit;opacity:.75}.cx-ig-btn .cx-igc{width:22px;height:22px}.cx-sq{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-panel);color:var(--v2-ink);cursor:pointer}.cx-sq:hover:not(:disabled){border-color:var(--v2-accent-line)}.cx-sq:disabled{opacity:.4;cursor:default}.cx-ib{display:inline-flex;align-items:center;justify-content:center;border:0;background:none;color:var(--v2-sub);cursor:pointer;padding:var(--v2-s1)}.cx-ib:hover{color:var(--v2-accent-ink)}.cx-link{border:0;background:none;color:var(--v2-accent-ink);font:500 var(--v2-t-body) var(--v2-sans);cursor:pointer;padding:0}.cx-link.bad{color:var(--v2-bad)}.cx-x{display:inline-flex;border:0;background:none;color:var(--v2-sub);cursor:pointer;padding:var(--v2-s1);border-radius:4px}.cx-x:hover{color:var(--v2-ink);background:var(--v2-line2)}.cx-back{display:inline-flex;align-items:center;gap:var(--v2-s1h);border:0;background:none;color:var(--v2-accent-ink);font:500 var(--v2-t-entity) var(--v2-sans);cursor:pointer;padding:0}.cx-btnrow{display:flex;gap:var(--v2-s2);flex-wrap:wrap;align-items:center}.cx-btnrow.end{justify-content:flex-end}.cx-btnrow.three{display:grid;grid-template-columns:repeat(3,1fr)}/* inputs */.cx input:not([type=checkbox]):not([type=radio]),.cx textarea,.cx select{font:var(--v2-t-entity)/1.4 var(--v2-sans);color:var(--v2-ink);background:var(--v2-bg);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);padding:var(--v2-s2) var(--v2-s2);width:100%;min-width:0}.cx textarea{resize:vertical;line-height:1.55}.cx input:focus,.cx textarea:focus,.cx select:focus{outline:2px solid var(--v2-accent-line);outline-offset:0;border-color:var(--v2-accent)}.cx input[type=checkbox],.cx input[type=radio]{accent-color:var(--v2-accent);width:17px;height:17px;cursor:pointer}.cx-sel{position:relative;display:inline-flex;align-items:center;min-width:0}.cx-sel select{appearance:none;-webkit-appearance:none;padding-right:var(--v2-s6)!important;cursor:pointer;background:var(--v2-panel)}.cx-sel > .cx-ic{position:absolute;right:10px;pointer-events:none;color:var(--v2-sub)}.cx-sel.wide{min-width:260px}.cx-sel.wide > .cx-ic:first-child{position:absolute;left:11px;right:auto}.cx-sel.wide select{padding-left:var(--v2-s6)!important}.cx-sel.full{display:flex;width:100%}.cx-sel.sm select{padding:var(--v2-s1h) var(--v2-s5) var(--v2-s1h) var(--v2-s2)!important;font-size:var(--v2-t-body)}.cx-sel.sm > .cx-ic{width:14px;height:14px;right:8px}.cx-search{position:relative;display:flex;align-items:center;min-width:200px}.cx-search > .cx-ic{position:absolute;left:11px;color:var(--v2-sub)}.cx-search input{padding-left:var(--v2-s6)!important;background:var(--v2-panel)!important}.cx-search.wide{flex:1;min-width:280px}.cx-inp{position:relative;display:flex;align-items:center}.cx-inp > .cx-ic{position:absolute;left:11px;color:var(--v2-sub);pointer-events:none}.cx-inp > input,.cx-inp > select{padding-left:var(--v2-s6)!important}.cx-inp.url{flex:1;min-width:180px}.cx-inp.url input{padding:var(--v2-s2) var(--v2-s6) var(--v2-s2) var(--v2-s3)!important;font-size:var(--v2-t-small)}.cx-inp.url .cx-ib{position:absolute;right:4px}.cx-field{display:flex;flex-direction:column;gap:var(--v2-s1h);min-width:0;position:relative}.cx-field > label{font:600 var(--v2-t-label)/1 var(--v2-sans);text-transform:uppercase;letter-spacing:.06em;color:var(--v2-sub);display:flex;gap:var(--v2-s1h);align-items:center}.cx-count{align-self:flex-end;font-size:var(--v2-t-small);color:var(--v2-sub);font-variant-numeric:tabular-nums}.cx-count.over{color:var(--v2-bad)}.cx-grid2{display:grid;grid-template-columns:1fr 1fr;gap:var(--v2-s3)}.cx-grid4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--v2-s3)}.cx-radio{display:flex;gap:var(--v2-s2);align-items:flex-start;padding:var(--v2-s1h) 0;cursor:pointer}.cx-radio b{display:block;font-size:var(--v2-t-entity);font-weight:500;color:var(--v2-ink)}.cx-radio small{display:block;font-size:var(--v2-t-small);color:var(--v2-sub);margin-top:var(--v2-s0)}.cx-radio.inline{align-items:center;font-size:var(--v2-t-body)}/* surfaces */.cx-card{background:var(--v2-panel);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);padding:var(--v2-s4) var(--v2-s4);display:flex;flex-direction:column;gap:var(--v2-s3);min-width:0}.cx-card.inner{background:var(--v2-bg);padding:var(--v2-s4)}.cx-card h2{font:700 var(--v2-t-say)/1.25 var(--v2-sans);margin:0}.cx-card h3{font:600 var(--v2-t-title)/1.3 var(--v2-sans);margin:0;display:flex;gap:var(--v2-s2);align-items:center}.cx-card h4{font:600 var(--v2-t-entity)/1.3 var(--v2-sans);margin:0}.cx-cardh{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--v2-s3);flex-wrap:wrap}.cx-hic{display:flex;gap:var(--v2-s3);align-items:flex-start}.cx-hic > .cx-ic{color:var(--v2-accent);width:34px;height:34px;margin-top:var(--v2-s0)}.cx-empty{align-items:center;text-align:center;padding:var(--v2-s7) var(--v2-s4)}.cx-empty > .cx-ic{color:var(--v2-sub)}.cx-pill{display:inline-flex;align-self:flex-start;padding:var(--v2-s1) var(--v2-s2);border-radius:var(--v2-r-full);background:var(--v2-line2);border:1px solid var(--v2-line);font-size:var(--v2-t-small);font-weight:500}/* status bars */.cx-bar{display:flex;gap:var(--v2-s3);align-items:center;padding:var(--v2-s3) var(--v2-s4);border-radius:var(--v2-r-surface);border:1px solid var(--v2-info-line);background:var(--v2-info-soft);font-size:var(--v2-t-entity);color:var(--v2-ink);line-height:1.45}.cx-bar > .cx-ic{color:var(--v2-info-dot);width:20px;height:20px}.cx-bar.warn{border-color:var(--v2-warn-line);background:var(--v2-warn-soft);color:var(--v2-warn)}.cx-bar.warn > .cx-ic{color:var(--v2-warn-dot)}.cx-bar.warn b{color:var(--v2-warn)}.cx-bar.ok{border-color:var(--v2-ok-line);background:var(--v2-ok-soft);color:var(--v2-ok)}.cx-bar.ok > .cx-ic{color:var(--v2-ok-dot)}.cx-bar > div{flex:1}.cx-bar-r{font-size:var(--v2-t-body);white-space:nowrap}.cx-bar.big{padding:var(--v2-s3) var(--v2-s4);align-items:flex-start}.cx-bar.big b{font-size:var(--v2-t-entity);display:block}.cx-bar.big span{display:block;color:var(--v2-ink);font-size:var(--v2-t-body);margin-top:var(--v2-s0)}.cx-bar.tight{padding:var(--v2-s2) var(--v2-s3);font-size:var(--v2-t-body)}.cx-bar.tight small{display:block;font-size:var(--v2-t-label);color:var(--v2-warn)}.cx-bar.split .cx-barsep{width:1px;align-self:stretch;background:var(--v2-line)}.cx-bar .cx-slack{width:18px;height:18px}/* chips */.cx-chip{display:inline-flex;align-items:center;gap:var(--v2-s1);padding:var(--v2-s1) var(--v2-s2);border-radius:var(--v2-r-control);font-size:var(--v2-t-small);font-weight:600;background:var(--v2-line2);color:var(--v2-ink);border:1px solid var(--v2-line);white-space:nowrap}.cx-chip.sm{padding:var(--v2-s0) var(--v2-s1h);font-size:var(--v2-t-label)}.cx-chip.warn,.cx-chip.st-draft{background:var(--v2-line2)}.cx-chip.warn{background:var(--v2-warn-soft);color:var(--v2-warn);border-color:var(--v2-warn-line)}.cx-chip.ok,.cx-chip.st-ok_owner,.cx-chip.st-scheduled,.cx-chip.st-posted{background:var(--v2-ok-soft);color:var(--v2-ok);border-color:var(--v2-ok-line)}.cx-chip.info,.cx-chip.st-ok_me{background:var(--v2-info-soft);color:var(--v2-info);border-color:var(--v2-info-line)}.cx-chip.ev{background:var(--v2-bg);font-weight:500;color:var(--v2-sub)}.cx-type{display:inline-flex;padding:var(--v2-s1h) var(--v2-s3);border-radius:var(--v2-r-control);font-size:var(--v2-t-body);font-weight:600;white-space:nowrap;background:var(--cx-blue-s);color:var(--cx-blue)}.cx-type.t-graphic{background:var(--cx-green-s);color:var(--cx-green)}.cx-type.t-food{background:var(--cx-amber-s);color:var(--cx-amber)}.cx-type.t-team{background:var(--cx-violet-s);color:var(--cx-violet)}.cx-type.t-monthly{background:var(--cx-blue-s);color:var(--cx-blue)}/* tables */.cx-tablecard{padding:0;overflow-x:auto}.cx-table{width:100%;border-collapse:collapse;font-size:var(--v2-t-entity)}.cx-table th{text-align:left;font:500 var(--v2-t-body)/1.2 var(--v2-sans);color:var(--v2-sub);padding:var(--v2-s3) var(--v2-s3);border-bottom:1px solid var(--v2-line);white-space:nowrap}.cx-table td{padding:var(--v2-s2) var(--v2-s3);border-bottom:1px solid var(--v2-line);vertical-align:middle}.cx-table tbody tr:last-child td{border-bottom:0}.cx-table .r{text-align:right}.cx-table.sm{font-size:var(--v2-t-body)}.cx-table.sm th,.cx-table.sm td{padding:var(--v2-s2) var(--v2-s2)}.cx-sort{color:var(--v2-faint)}.cx-tr{cursor:default}.cx-table tr.cx-tr{background:none}.cx-plan .cx-tr{cursor:pointer}.cx-plan .cx-tr td:first-child{border-left:4px solid var(--cx-blue)}.cx-plan .cx-tr.t-graphic td:first-child{border-left-color:var(--cx-green)}.cx-plan .cx-tr.t-food td:first-child{border-left-color:var(--cx-amber)}.cx-plan .cx-tr.t-team td:first-child{border-left-color:var(--cx-violet)}.cx-plan .cx-tr:hover td{background:var(--v2-line2)}.cx-when b{display:block;font-weight:600;white-space:nowrap}.cx-when span{display:block;color:var(--v2-sub);font-size:var(--v2-t-body);margin-top:var(--v2-s0)}.cx-when .cx-chip{margin-top:var(--v2-s1h)}.cx-when1{white-space:nowrap}.cx-idea{max-width:520px;line-height:1.45;color:var(--v2-ink)}.cx-plan .cx-idea{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.cx-plan td{border-bottom:1px solid var(--v2-line)}.cx-tags{display:flex;gap:var(--v2-s1h);flex-wrap:wrap}.cx-tags span{padding:var(--v2-s1) var(--v2-s2);border-radius:var(--v2-r-full);border:1px solid var(--v2-line);background:var(--v2-bg);font-size:var(--v2-t-small);white-space:nowrap}.cx-thumbs{display:flex;gap:var(--v2-s1);position:relative}.cx-thumbs img{width:44px;height:44px;object-fit:cover;border-radius:6px;background:var(--v2-line2)}.cx-thumbs img:only-child{width:92px;height:52px}.cx-thumbs i{position:absolute;right:4px;bottom:4px;font-style:normal;font-size:var(--v2-t-label);background:hsl(0 0% 0%/.6);color:#fff;padding:var(--v2-s0) var(--v2-s1);border-radius:4px}.cx-nophoto{display:inline-flex;gap:var(--v2-s1h);align-items:center;padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-radius:6px;color:var(--v2-sub);font-size:var(--v2-t-body);white-space:nowrap}.cx-tablefoot{display:flex;justify-content:space-between;align-items:center;padding:var(--v2-s3) var(--v2-s3);border-top:1px solid var(--v2-line);color:var(--v2-sub);font-size:var(--v2-t-body)}.cx-kebab{position:relative;display:inline-block}.cx-kb{border:0;background:none;color:var(--v2-sub);cursor:pointer;padding:var(--v2-s1h);border-radius:6px;display:inline-flex}.cx-kb:hover{background:var(--v2-line2);color:var(--v2-ink)}.cx-menu{position:absolute;right:0;top:100%;z-index:30;min-width:170px;background:var(--v2-panel);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);box-shadow:var(--v2-shadow-overlay,0 12px 30px rgba(0,0,0,.2));padding:var(--v2-s1);display:flex;flex-direction:column;text-align:left}.cx-menu button{border:0;background:none;text-align:left;padding:var(--v2-s2) var(--v2-s3);border-radius:6px;font:var(--v2-t-entity) var(--v2-sans);color:var(--v2-ink);cursor:pointer}.cx-menu button:hover{background:var(--v2-line2)}.cx-menu button.bad{color:var(--v2-bad)}/* toolbars */.cx-toolbar{display:flex;gap:var(--v2-s2);align-items:center;flex-wrap:wrap}.cx-mnav{display:flex;align-items:center;gap:var(--v2-s2)}.cx-mnav b{font:600 var(--v2-t-say)/1 var(--v2-sans);min-width:176px;text-align:center;white-space:nowrap}.cx-mnav.boxed b,.cx-mnav b.boxed{font-size:var(--v2-t-entity);min-width:150px;padding:var(--v2-s2) var(--v2-s4);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-panel)}.cx-stats{display:flex;gap:var(--v2-s2);flex-wrap:wrap}.cx-stat{display:grid;grid-template-columns:auto auto;grid-template-rows:auto auto;column-gap:var(--v2-s2);align-items:center;padding:var(--v2-s1h) var(--v2-s4);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel);color:var(--v2-ink);cursor:pointer;min-width:88px}.cx-stat .cx-ic{grid-row:1;color:var(--v2-sub)}.cx-stat b{font:600 var(--v2-t-title)/1 var(--v2-sans);grid-row:1}.cx-stat span{grid-column:1/-1;font-size:var(--v2-t-small);color:var(--v2-sub);text-align:center;margin-top:var(--v2-s0)}.cx-stat:hover{border-color:var(--v2-accent-line)}.cx-filters{display:flex;gap:var(--v2-s2);flex:1;justify-content:flex-end;flex-wrap:wrap}.cx-filters .cx-sel select{min-width:132px}.cx-seg{display:inline-flex;border:1px solid var(--v2-line);border-radius:var(--v2-r-control);overflow:hidden;background:var(--v2-panel)}.cx-seg button{border:0;background:none;padding:var(--v2-s2) var(--v2-s4);font:500 var(--v2-t-entity) var(--v2-sans);color:var(--v2-ink);cursor:pointer;border-right:1px solid var(--v2-line)}.cx-seg button:last-child{border-right:0}.cx-seg button.on{background:var(--v2-accent);color:var(--v2-bg);font-weight:600}.cx-seg.big button{padding:var(--v2-s2) var(--v2-s6)}.cx-legend{display:flex;gap:var(--v2-s4);align-items:center;color:var(--v2-sub);font-size:var(--v2-t-body);flex-wrap:wrap}.cx-legend > span{display:inline-flex;gap:var(--v2-s1h);align-items:center}.cx-footline{display:flex;justify-content:flex-end;gap:var(--v2-s3);color:var(--v2-sub);font-size:var(--v2-t-body)}.cx-footline span+span{border-left:1px solid var(--v2-line);padding-left:var(--v2-s3)}.cx-footline span:first-child{flex:1;border:0}/* post editor */.cx-editor{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(360px,1fr);gap:var(--v2-s4);align-items:start}.cx-ed-main{gap:var(--v2-s4)}.cx-ed-top{display:flex;justify-content:space-between;align-items:center}.cx-pager{display:flex;gap:var(--v2-s2);align-items:center;font-size:var(--v2-t-body);color:var(--v2-sub)}.cx-pager .cx-sq{width:30px;height:30px}.cx-ed-title{display:flex;gap:var(--v2-s3);align-items:center;flex-wrap:wrap;font:700 var(--v2-t-say)/1.25 var(--v2-sans)!important}.cx-ed-side{display:flex;flex-direction:column;gap:var(--v2-s3);min-width:0}.cx-preview{position:relative;border-radius:var(--v2-r-surface);overflow:hidden;background:var(--v2-bg);border:1px solid var(--v2-line);aspect-ratio:16/9;display:flex;align-items:center;justify-content:center;max-width:100%}.cx-preview img{width:100%;height:100%;object-fit:contain}.cx-drop{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--v2-s2);text-align:center;color:var(--v2-sub);padding:var(--v2-s5);font-size:var(--v2-t-body);line-height:1.5}.cx-drop b{color:var(--v2-ink);font-size:var(--v2-t-entity)}.cx-drop.dashed{border:1.5px dashed var(--v2-line);border-radius:var(--v2-r-surface);padding:var(--v2-s5)}.cx-drop.sm{padding:var(--v2-s3);height:100%}.cx-busy{position:absolute;inset:0;display:flex;flex-direction:column;gap:var(--v2-s2);align-items:center;justify-content:center;background:hsl(215 46% 6%/.6);color:#fff;font-size:var(--v2-t-body)}.cx-spin{width:26px;height:26px;border-radius:50%;border:3px solid hsl(0 0% 100%/.3);border-top-color:#fff;animation:cxspin .8s linear infinite}@keyframes cxspin{to{transform:rotate(360deg)}}.cx-slides{display:flex;gap:var(--v2-s1h);align-items:center;flex-wrap:wrap}.cx-slides span{position:relative}.cx-slides img{width:52px;height:52px;object-fit:cover;border-radius:6px}.cx-slides i{position:absolute;left:3px;top:3px;font-style:normal;font-size:var(--v2-t-label);background:hsl(0 0% 0%/.6);color:#fff;padding:0 var(--v2-s1);border-radius:3px}.cx-gens .cx-cardh{align-items:center}.cx-strip{display:flex;gap:var(--v2-s2);overflow-x:auto;padding-bottom:var(--v2-s1);align-items:center}.cx-strip img{height:86px;width:86px;object-fit:cover;border-radius:6px;border:2px solid transparent;cursor:pointer;flex:0 0 auto}.cx-strip img:hover{border-color:var(--v2-accent)}.cx-strip img.mine{border-color:var(--v2-accent-line)}.cx-genall{display:flex;flex-direction:column;gap:var(--v2-s3);max-height:420px;overflow-y:auto}.cx-genrow > span{display:block;font-size:var(--v2-t-small);color:var(--v2-sub);margin-bottom:var(--v2-s1)}/* calendar */.cx-calwrap{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:var(--v2-s3);align-items:start}.cx-cal{padding:var(--v2-s2)}.cx-calhead,.cx-calgrid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:var(--v2-s2)}.cx-calhead span{text-align:center;font:600 var(--v2-t-small) var(--v2-sans);color:var(--v2-sub);padding:var(--v2-s1h) 0;letter-spacing:.04em;text-transform:uppercase}.cx-cell{min-height:98px;border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);padding:var(--v2-s2);display:flex;flex-direction:column;gap:var(--v2-s1h);background:var(--v2-bg);cursor:pointer;min-width:0}.cx-cell:hover{border-color:var(--v2-accent-line)}.cx-cell.on{border-color:var(--v2-accent);box-shadow:0 0 0 1px var(--v2-accent)}.cx-cell.off{background:none;border:0;cursor:default}.cx-dn{font:600 var(--v2-t-entity) var(--v2-sans)}.cx-closed{display:inline-flex;gap:var(--v2-s1h);align-items:center;color:var(--v2-sub);font-size:var(--v2-t-body)}.cx-cchip{display:flex;justify-content:space-between;align-items:center;gap:var(--v2-s1h);padding:var(--v2-s1h) var(--v2-s2);border-radius:6px;font-size:var(--v2-t-small);font-weight:500;background:var(--cx-blue-s);color:var(--cx-blue);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.cx-cchip .cx-ic{width:14px;height:14px;opacity:.55}.cx-cchip .cx-ic.has{opacity:1}.cx-cchip.t-graphic{background:var(--cx-green-s);color:var(--cx-green)}.cx-cchip.t-food{background:var(--cx-amber-s);color:var(--cx-amber)}.cx-cchip.t-team{background:var(--cx-violet-s);color:var(--cx-violet)}.cx-cchip.mail{background:var(--v2-accent-soft);color:var(--v2-accent-ink)}.cx-day{gap:var(--v2-s2);position:sticky;top:12px}.cx-dayhead{display:flex;align-items:center;justify-content:space-between;gap:var(--v2-s2)}.cx-dayhead b{font-size:var(--v2-t-entity);text-align:center}.cx-dayhead .cx-sq{width:30px;height:30px}.cx-dayrow{display:flex;justify-content:space-between;align-items:center}.cx-daytabs{display:flex;gap:var(--v2-s1h);flex-wrap:wrap}.cx-daytabs button{border:1px solid var(--v2-line);background:var(--v2-bg);color:var(--v2-ink);border-radius:var(--v2-r-full);padding:var(--v2-s1) var(--v2-s2);font-size:var(--v2-t-small);cursor:pointer}.cx-daytabs button.on{border-color:var(--v2-accent);color:var(--v2-accent-ink)}.cx-dayimg{border-radius:var(--v2-r-surface);overflow:hidden;background:var(--v2-line2);aspect-ratio:16/10;max-width:100%}.cx-dayimg img{width:100%;height:100%;object-fit:cover}.cx-day h3{font-size:var(--v2-t-say)}.cx-daymeta{display:flex;gap:var(--v2-s2);align-items:center;color:var(--v2-sub);font-size:var(--v2-t-body);flex-wrap:wrap}.cx-daymeta span{display:inline-flex;gap:var(--v2-s1h);align-items:center;margin-left:var(--v2-s2)}.cx-daymeta .cx-igc{width:18px;height:18px}.cx-daycap{font-size:var(--v2-t-body);line-height:1.55;color:var(--v2-ink)}.cx-sub{display:flex;justify-content:space-between;align-items:center;font-size:var(--v2-t-body);font-weight:600;padding-top:var(--v2-s2);border-top:1px solid var(--v2-line)}.cx-assets{display:flex;gap:var(--v2-s2);flex-wrap:wrap}.cx-assets img{width:72px;height:72px;object-fit:cover;border-radius:6px}.cx-addasset{width:72px;height:72px;border:1.5px dashed var(--v2-line);border-radius:6px;display:flex;align-items:center;justify-content:center;color:var(--v2-sub);cursor:pointer}.cx-addasset:hover{border-color:var(--v2-accent);color:var(--v2-accent-ink)}.cx-dayempty{display:flex;flex-direction:column;gap:var(--v2-s2);align-items:center;text-align:center;padding:var(--v2-s6) var(--v2-s2);color:var(--v2-sub)}.cx-dayempty b{color:var(--v2-ink)}/* emails */.cx-subj{font-weight:500}.cx-evl{display:inline-flex;gap:var(--v2-s2);align-items:center;white-space:nowrap}.cx-evdot{display:inline-flex;color:var(--cx-green)}.cx-evdot.t-promo{color:var(--cx-blue)}.cx-evdot.t-lto{color:var(--v2-bad-dot)}.cx-evdot.t-holiday{color:var(--cx-violet)}.cx-evdot.t-promo .cx-ic{fill:currentColor}.cx-evdot.t-lto .cx-ic{fill:currentColor}.cx-maildetail{display:grid;grid-template-columns:320px minmax(0,1.25fr) minmax(0,1fr);gap:var(--v2-s3);align-items:start}.cx-maillist{padding:var(--v2-s3);gap:var(--v2-s2);max-height:calc(100vh - 220px);overflow-y:auto}.cx-mli{display:flex;justify-content:space-between;gap:var(--v2-s2);align-items:flex-start;text-align:left;padding:var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg);color:var(--v2-ink);cursor:pointer;font:500 var(--v2-t-body)/1.35 var(--v2-sans)}.cx-mli small{display:block;color:var(--v2-sub);font-size:var(--v2-t-small);font-weight:400;margin-bottom:var(--v2-s0)}.cx-mli.on{border-color:var(--v2-accent);background:var(--v2-accent-soft)}.cx-mailed{gap:var(--v2-s3)}.cx-mailside{display:flex;flex-direction:column;gap:var(--v2-s3);min-width:0}.cx-rich{border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-bg);overflow:hidden;display:flex;flex-direction:column;min-width:0}.cx-rtb{display:flex;align-items:center;gap:var(--v2-s1);padding:var(--v2-s1h) var(--v2-s2);border-bottom:1px solid var(--v2-line);background:var(--v2-panel);flex-wrap:wrap}.cx-rtb > button,.cx-rtbi{border:0;background:none;color:var(--v2-ink);min-width:30px;height:30px;border-radius:5px;cursor:pointer;font:var(--v2-t-entity) var(--v2-sans);display:inline-flex;align-items:center;justify-content:center}.cx-rtb > button:hover{background:var(--v2-line2)}.cx-rtbsep{width:1px;height:20px;background:var(--v2-line);margin:0 var(--v2-s1)}.cx-rtb .cx-sel select{min-width:120px;background:var(--v2-bg)}.cx-pvbtn{border:0;background:none;color:var(--v2-ink);display:inline-flex;gap:var(--v2-s1h);align-items:center;font:var(--v2-t-body) var(--v2-sans);cursor:pointer}.cx-rbody{padding:var(--v2-s3) var(--v2-s4);min-height:220px;font-size:var(--v2-t-entity);line-height:1.6;outline:none}.cx-rbody p{margin:0 0 var(--v2-s2)}.cx-mailpv{gap:var(--v2-s2)}.cx-paper{background:#fff;color:#1d2330;border-radius:6px;padding:var(--v2-s4) var(--v2-s4);font-size:var(--v2-t-entity);line-height:1.6}.cx-paper p{margin:0 0 var(--v2-s2)}.cx-pvmeta{font-size:var(--v2-t-body);margin-bottom:var(--v2-s3)}.cx-pvhero{width:100%;border-radius:4px;margin-bottom:var(--v2-s3);max-height:220px;object-fit:cover}.cx-pvbody a{color:#0b61c4}/* shot list */.cx-shotwrap{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(320px,1fr);gap:var(--v2-s3);align-items:start}.cx-shothead{display:flex;justify-content:space-between;gap:var(--v2-s4);align-items:flex-start}.cx-shothead h3{font-size:var(--v2-t-say)}.cx-prog{min-width:210px}.cx-prog > div:first-child{display:flex;justify-content:space-between;font-size:var(--v2-t-body);margin-bottom:var(--v2-s2)}.cx-progbar{height:8px;border-radius:5px;background:var(--v2-line2);overflow:hidden;border:1px solid var(--v2-line)}.cx-progbar i{display:block;height:100%;background:var(--v2-accent)}.cx-pills{display:flex;gap:var(--v2-s2)}.cx-pills button{padding:var(--v2-s2) var(--v2-s4);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-bg);color:var(--v2-ink);font:500 var(--v2-t-body) var(--v2-sans);cursor:pointer}.cx-pills button.on{background:var(--v2-accent);border-color:var(--v2-accent);color:var(--v2-bg);font-weight:600}.cx-shots{display:flex;flex-direction:column;gap:var(--v2-s2)}.cx-shot{display:flex;align-items:center;gap:var(--v2-s3);padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg);cursor:pointer}.cx-shot:hover{border-color:var(--v2-accent-line)}.cx-shot.on{border-color:var(--v2-accent);box-shadow:0 0 0 1px var(--v2-accent)}.cx-shot.done .cx-shotd{color:var(--v2-sub);text-decoration:line-through}.cx-shotn{color:var(--v2-sub);font-variant-numeric:tabular-nums;min-width:22px}.cx-shotd{flex:1;font-size:var(--v2-t-entity);line-height:1.4}.cx-shotimg{width:40px;height:40px;border-radius:5px;object-fit:cover}.cx-attach{display:inline-flex;gap:var(--v2-s1h);align-items:center;color:var(--v2-ink);font-size:var(--v2-t-body);cursor:pointer;padding:var(--v2-s1h) var(--v2-s2);border-radius:6px;white-space:nowrap}.cx-attach:hover{background:var(--v2-line2)}.cx-addwide{display:flex;gap:var(--v2-s2);align-items:center;justify-content:center;padding:var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg);color:var(--v2-ink);font:500 var(--v2-t-entity) var(--v2-sans);cursor:pointer}.cx-addwide:hover{border-color:var(--v2-accent)}.cx-addrow{display:flex;gap:var(--v2-s2)}.cx-addrow.big input{padding:var(--v2-s3) var(--v2-s3)!important;background:var(--v2-panel)!important}.cx-brief{position:sticky;top:12px}.cx-brieftext{font-size:var(--v2-t-entity);line-height:1.5;margin:0}.cx-briefimg img{width:100%;border-radius:var(--v2-r-surface)}/* tasks */.cx-taskwrap{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--v2-s3);align-items:start}.cx-taskwrap.panel{grid-template-columns:minmax(0,1fr) 280px}.cx-taskmain{display:flex;flex-direction:column;gap:var(--v2-s3);min-width:0}.cx-kanban{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:var(--v2-s2)}.cx-kcol{border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel);padding:var(--v2-s3);display:flex;flex-direction:column;gap:var(--v2-s2);min-height:420px}.cx-kcol.droptarget{border-color:var(--v2-accent);background:var(--v2-accent-soft)}.cx-kh{display:flex;justify-content:space-between;padding:var(--v2-s1) var(--v2-s1) var(--v2-s2);border-bottom:1px solid var(--v2-line);font-size:var(--v2-t-entity)}.cx-kh span{color:var(--v2-sub)}.cx-kcard{border:1px solid var(--v2-line);border-radius:6px;background:var(--v2-bg);padding:var(--v2-s2);display:flex;flex-direction:column;gap:var(--v2-s1h);cursor:grab}.cx-kcard b{font-size:var(--v2-t-body);font-weight:500;line-height:1.4}.cx-kcard p{margin:0;font-size:var(--v2-t-small);color:var(--v2-sub);line-height:1.4}.cx-kacts{display:flex;justify-content:space-between;align-items:center}.cx-kempty{flex:1;display:flex;flex-direction:column;gap:var(--v2-s2);align-items:center;justify-content:center;text-align:center;color:var(--v2-sub);font-size:var(--v2-t-body);line-height:1.45;padding:var(--v2-s2)}.cx-kempty b{color:var(--v2-ink);font-size:var(--v2-t-entity)}.cx-kempty .cx-ic.lg{width:38px;height:38px;opacity:.7}.cx-newtask{gap:var(--v2-s4)}.cx-reopen{align-self:start}/* events */.cx-evwrap{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:var(--v2-s3);align-items:start}.cx-evcols{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--v2-s3);align-items:start}.cx-evcol,.cx-evq{gap:var(--v2-s2);padding:var(--v2-s3)}.cx-evcol .cx-cardh{align-items:center;margin-bottom:var(--v2-s1)}.cx-evcard{display:flex;align-items:center;gap:var(--v2-s3);padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg);color:var(--v2-ink);cursor:pointer;text-align:left;font:inherit;width:100%}.cx-evcard:hover{border-color:var(--v2-accent-line)}.cx-evcard.on{border-color:var(--v2-accent)}.cx-evcard > .cx-ic{color:var(--v2-sub)}.cx-evdate{display:flex;flex-direction:column;align-items:center;min-width:42px;padding-right:var(--v2-s3);border-right:1px solid var(--v2-line)}.cx-evdate b{font:700 var(--v2-t-say)/1.1 var(--v2-sans)}.cx-evdate small{font-size:var(--v2-t-label);color:var(--v2-sub);letter-spacing:.04em}.cx-evbody{flex:1;display:flex;flex-direction:column;gap:var(--v2-s0);min-width:0}.cx-evt{display:flex;gap:var(--v2-s2);align-items:center;font-weight:600;font-size:var(--v2-t-entity);line-height:1.3}.cx-evbody small{color:var(--v2-sub);font-size:var(--v2-t-small);padding-left:var(--v2-s4)}.cx-dot{width:10px;height:10px;border-radius:50%;flex:0 0 auto;background:var(--v2-ok-dot);display:inline-block}.cx-dot.t-promo{background:var(--v2-info-dot)}.cx-dot.t-lto{background:var(--v2-warn-dot)}.cx-dot.t-holiday{background:var(--v2-violet,hsl(262 70% 65%))}.cx-evpanel{gap:var(--v2-s3);position:sticky;top:12px}.cx-mgrid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:var(--v2-s0)}.cx-mdow{text-align:center;font-size:var(--v2-t-label);color:var(--v2-sub)}.cx-mday{min-height:52px;border:1px solid var(--v2-line);border-radius:4px;padding:var(--v2-s0);font-size:var(--v2-t-label);display:flex;flex-direction:column;gap:var(--v2-s0);background:var(--v2-bg)}.cx-mev{border:0;border-radius:3px;padding:var(--v2-s0) var(--v2-s0);font:600 var(--v2-t-label) var(--v2-sans);text-align:left;cursor:pointer;background:var(--v2-ok-soft);color:var(--v2-ok);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.cx-mev.t-promo{background:var(--v2-info-soft);color:var(--v2-info)}.cx-mev.t-lto{background:var(--v2-warn-soft);color:var(--v2-warn)}.cx-mev.t-holiday{background:var(--cx-violet-s);color:var(--cx-violet)}/* import */.cx-imp{padding:var(--v2-s5) var(--v2-s5);gap:var(--v2-s4)}.cx-steps{display:flex;align-items:center;gap:var(--v2-s4);padding:var(--v2-s1h) 0 var(--v2-s1)}.cx-step{display:flex;gap:var(--v2-s3);align-items:center;color:var(--v2-sub)}.cx-step i{width:34px;height:34px;border-radius:50%;border:1.5px solid var(--v2-line);display:flex;align-items:center;justify-content:center;font:600 var(--v2-t-entity) var(--v2-sans);font-style:normal}.cx-step b{display:block;color:var(--v2-ink);font-size:var(--v2-t-entity)}.cx-step span{font-size:var(--v2-t-small)}.cx-step.on i{background:var(--v2-accent);border-color:var(--v2-accent);color:var(--v2-bg)}.cx-step.on b{color:var(--v2-accent-ink)}.cx-stepline{flex:1;height:1px;background:var(--v2-line)}.cx-impgrid{display:grid;grid-template-columns:1fr 1fr 1.15fr;gap:var(--v2-s3);align-items:start}.cx-dropzone{display:flex;flex-direction:column;gap:var(--v2-s2);align-items:center;justify-content:center;text-align:center;padding:var(--v2-s5) var(--v2-s4);border:1.5px dashed var(--v2-line);border-radius:var(--v2-r-surface);cursor:pointer;color:var(--v2-sub);font-size:var(--v2-t-body);line-height:1.5}.cx-dropzone b{color:var(--v2-accent-ink);font-size:var(--v2-t-entity)}.cx-dropzone:hover,.cx-dropzone.over{border-color:var(--v2-accent);background:var(--v2-accent-soft)}.cx-or{display:flex;align-items:center;gap:var(--v2-s2);color:var(--v2-sub);font-size:var(--v2-t-small)}.cx-or::before,.cx-or::after{content:"";flex:1;height:1px;background:var(--v2-line)}.cx-maptable{width:100%;border-collapse:collapse}.cx-maptable th{text-align:left;font-size:var(--v2-t-small);color:var(--v2-sub);font-weight:500;padding:var(--v2-s1h) var(--v2-s1);border-bottom:1px solid var(--v2-line)}.cx-maptable td{padding:var(--v2-s1h) var(--v2-s1);font-size:var(--v2-t-entity);font-weight:500}.cx-maptable .cx-sel{width:100%}.cx-maptable .cx-sel select{width:100%}.cx-tw{overflow-x:auto;border:1px solid var(--v2-line);border-radius:6px}.cx-bad{color:var(--v2-bad);font-weight:700}.cx-impres{display:flex;flex-wrap:wrap;gap:var(--v2-s2) var(--v2-s4);align-items:center;padding:var(--v2-s3) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg);font-size:var(--v2-t-body)}.cx-impres > span{display:inline-flex;gap:var(--v2-s1h);align-items:center;font-weight:600}.cx-impres .ok{color:var(--v2-ok)}.cx-impres .warn{color:var(--v2-warn)}.cx-impres .bad{color:var(--v2-bad)}.cx-impres ul,.cx-dups{flex-basis:100%;margin:0;padding-left:var(--v2-s4);color:var(--v2-sub);display:flex;flex-direction:column;gap:var(--v2-s1)}.cx-dups{padding:0}.cx-dups label{display:flex;gap:var(--v2-s2);align-items:center;color:var(--v2-ink)}.cx-impfoot{display:flex;gap:var(--v2-s2);align-items:center;padding-top:var(--v2-s1h)}.cx-impfoot .cx-btn{min-width:130px;padding:var(--v2-s2) var(--v2-s4)}/* approval */.cx-apwrap{display:grid;grid-template-columns:minmax(0,1fr) 250px;gap:var(--v2-s3);align-items:start}.cx-apmain{display:flex;flex-direction:column;gap:var(--v2-s3);min-width:0}.cx-apcount{display:flex;gap:var(--v2-s2);align-items:baseline;flex-wrap:wrap}.cx-apcount b{font:700 var(--v2-t-say) var(--v2-sans)}.cx-apcount span{color:var(--v2-sub);font-size:var(--v2-t-body)}.cx-reviewcards{display:grid;grid-template-columns:1fr 1fr;gap:var(--v2-s3)}.cx-rc{flex-direction:row;align-items:center;gap:var(--v2-s4)}.cx-rci{width:50px;height:50px;border-radius:50%;background:var(--v2-accent);color:var(--v2-bg);display:flex;align-items:center;justify-content:center;flex:0 0 auto}.cx-rci .cx-ic{width:24px;height:24px}.cx-rc > div{flex:1}.cx-rc b{font-size:var(--v2-t-title)}.cx-rc p{margin:var(--v2-s1) 0 0;color:var(--v2-sub);font-size:var(--v2-t-body)}.cx-rcr{display:flex;flex-direction:column;align-items:flex-end;gap:var(--v2-s2);flex:0 0 auto!important}.cx-rcr small{display:inline-flex;gap:var(--v2-s1);align-items:center;color:var(--v2-sub);font-size:var(--v2-t-small)}.cx-ap td{padding:var(--v2-s2) var(--v2-s3)}.cx-ap tr.pv td{background:var(--v2-accent-soft)}.cx-apitem{display:flex;gap:var(--v2-s3);align-items:center;max-width:430px}.cx-apitem img,.cx-noimg{width:64px;height:48px;object-fit:cover;border-radius:5px;flex:0 0 auto;background:var(--v2-line2);display:flex;align-items:center;justify-content:center;color:var(--v2-sub)}.cx-apitem b{display:block;font-size:var(--v2-t-entity)}.cx-apitem span{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-size:var(--v2-t-small);color:var(--v2-sub);line-height:1.4}.cx-apimg{width:64px;height:48px;object-fit:cover;border-radius:5px;display:inline-flex}.cx-apimg.empty{border:1.5px dashed var(--v2-line);align-items:center;justify-content:center;color:var(--v2-sub)}.cx-okline,.cx-warnline,.cx-owner,.cx-yes,.cx-no{display:inline-flex;gap:var(--v2-s1h);align-items:center;white-space:nowrap;font-size:var(--v2-t-body)}.cx-okline .cx-ic,.cx-yes .cx-ic{color:#fff;background:var(--v2-ok-dot);border-radius:50%;padding:var(--v2-s0);width:16px;height:16px}.cx-warnline{color:var(--v2-warn)}.cx-no .cx-ic{color:#fff;background:var(--v2-bad-dot);border-radius:50%;padding:var(--v2-s0);width:16px;height:16px}.cx-no{color:var(--v2-bad)}.cx-why{display:block;color:var(--v2-sub);font-size:var(--v2-t-small);margin-top:var(--v2-s0)}.cx-owner{color:var(--v2-sub)}.cx-phonecard{position:sticky;top:12px;gap:var(--v2-s3)}.cx-phone{border:8px solid #0b0d12;border-radius:32px;background:#fff;color:#111;overflow:hidden;position:relative;padding-bottom:var(--v2-s2);box-shadow:0 0 0 1px var(--v2-line)}.cx-notch{position:absolute;left:50%;top:0;transform:translateX(-50%);width:80px;height:18px;background:#0b0d12;border-radius:0 0 12px 12px}.cx-phonebar{display:flex;justify-content:space-between;font:600 var(--v2-t-label) var(--v2-sans);padding:var(--v2-s1h) var(--v2-s4) var(--v2-s1)}.cx-igh{display:flex;gap:var(--v2-s2);align-items:center;padding:var(--v2-s1h) var(--v2-s2);font-size:var(--v2-t-label);line-height:1.25}.cx-igh b{font-size:var(--v2-t-small)}.cx-igh small{color:#666}.cx-igav{width:28px;height:28px;border-radius:50%;background:#DD0031;color:#fff;display:flex;align-items:center;justify-content:center;font:700 var(--v2-t-label) var(--v2-sans);flex:0 0 auto}.cx-igimg{aspect-ratio:1;background:#eee}.cx-igimg img{width:100%;height:100%;object-fit:cover}.cx-igacts{display:flex;gap:var(--v2-s2);padding:var(--v2-s2) var(--v2-s2) var(--v2-s1);color:#111}.cx-igacts .cx-ic{width:19px;height:19px}.cx-igcap{padding:0 var(--v2-s2);font-size:var(--v2-t-label);line-height:1.35}/* instagram */.cx-igwrap{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(340px,1fr);gap:var(--v2-s3);align-items:start}.cx-igsel{padding:0}.cx-igsel > .cx-cardh{padding:var(--v2-s4) var(--v2-s4) var(--v2-s1h)}.cx-igthumb{width:84px;height:56px;object-fit:cover;border-radius:5px;display:inline-flex;background:var(--v2-line2)}.cx-igthumb.empty{align-items:center;justify-content:center;color:var(--v2-sub)}.cx-typetxt{white-space:nowrap}.cx-ig .cx-idea{max-width:280px;font-size:var(--v2-t-body)}.cx-igside{display:flex;flex-direction:column;gap:var(--v2-s3);min-width:0}.cx-checks{display:flex;flex-direction:column}.cx-chk{display:flex;gap:var(--v2-s3);align-items:flex-start;padding:var(--v2-s2) 0;border-bottom:1px solid var(--v2-line)}.cx-chk:last-child{border-bottom:0}.cx-chk > div{flex:1}.cx-chk b{display:block;font-size:var(--v2-t-entity);font-weight:500}.cx-chk small{display:block;color:var(--v2-sub);font-size:var(--v2-t-small);margin-top:var(--v2-s0)}.cx-chks{font-size:var(--v2-t-body);color:var(--v2-sub);white-space:nowrap}.cx-chk.ok .cx-chks{color:var(--v2-ok)}.cx-circ{width:22px;height:22px;border-radius:50%;border:1.5px solid var(--v2-line);display:flex;align-items:center;justify-content:center;flex:0 0 auto;color:var(--v2-sub);font-size:var(--v2-t-entity)}.cx-chk.ok .cx-circ,.cx-conn.ok .cx-circ{background:var(--v2-ok-dot);border-color:var(--v2-ok-dot);color:#fff}.cx-circ .cx-ic{width:14px;height:14px}.cx-conn{display:flex;gap:var(--v2-s3);align-items:flex-start}.cx-conn b{display:block;font-size:var(--v2-t-entity)}.cx-conn small{display:block;color:var(--v2-sub);font-size:var(--v2-t-body);line-height:1.5;margin-top:var(--v2-s0)}/* style guide */.cx-stylewrap{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(360px,1fr);gap:var(--v2-s3);align-items:start}.cx-styleed{gap:var(--v2-s3)}.cx-styleed.full{position:fixed;inset:16px;z-index:80;box-shadow:var(--v2-shadow-overlay,0 20px 60px rgba(0,0,0,.4))}.cx-styleed.full .cx-rscroll{max-height:none;flex:1}.cx-styleed.full .cx-rich{flex:1;min-height:0}.cx-rscroll{max-height:560px;overflow-y:auto}.cx-doc{font-size:var(--v2-t-entity);line-height:1.65;min-height:400px}.cx-doc h2{font:700 var(--v2-t-title)/1.3 var(--v2-sans);margin:var(--v2-s4) 0 var(--v2-s2);text-transform:none}.cx-doc h3{font:600 var(--v2-t-small)/1.3 var(--v2-sans);margin:var(--v2-s4) 0 var(--v2-s1h);text-transform:uppercase;letter-spacing:.07em;color:var(--v2-ink)}.cx-doc h4,.cx-doc h5{font:600 var(--v2-t-entity)/1.3 var(--v2-sans);margin:var(--v2-s3) 0 var(--v2-s1);color:var(--v2-sub)}.cx-doc ul,.cx-doc ol{margin:0 0 var(--v2-s2);padding-left:var(--v2-s5)}.cx-doc li{margin:var(--v2-s0) 0}.cx-doc p{margin:0 0 var(--v2-s2)}.cx-doc p.cx-blank{margin:0;height:6px;overflow:hidden}.cx-doc > h2:first-child,.cx-doc > p:first-child{margin-top:0}.cx-doc .cx-flash{background:var(--v2-accent-soft);border-radius:4px;transition:background 1s}.cx-swatches{display:flex;gap:var(--v2-s3);flex-wrap:wrap;margin:var(--v2-s1h) 0 var(--v2-s3);user-select:none}.cx-swatches span{display:flex;flex-direction:column;gap:var(--v2-s0);font-size:var(--v2-t-small);min-width:92px}.cx-swatches i{display:block;height:40px;border-radius:5px;border:1px solid var(--v2-line)}.cx-swatches b{font-weight:600}.cx-swatches small{color:var(--v2-sub)}.cx-paste{display:flex;flex-direction:column;gap:var(--v2-s2);padding:var(--v2-s3);border:1px solid var(--v2-accent-line);border-radius:var(--v2-r-surface);background:var(--v2-accent-soft)}.cx-stylecards{display:flex;flex-direction:column;gap:var(--v2-s2)}.cx-scard{flex-direction:row;gap:var(--v2-s3);align-items:flex-start;padding:var(--v2-s3) var(--v2-s4)}.cx-scic{width:48px;height:48px;border-radius:var(--v2-r-surface);border:1px solid var(--v2-line);display:flex;align-items:center;justify-content:center;color:var(--v2-accent-ink);flex:0 0 auto}.cx-scic .cx-ic{width:26px;height:26px}.cx-scb{flex:1;min-width:0}.cx-scb b{font-size:var(--v2-t-entity)}.cx-scb > p{margin:var(--v2-s0) 0 var(--v2-s1h);color:var(--v2-sub);font-size:var(--v2-t-body)}.cx-scb ul{margin:0;padding-left:var(--v2-s4);font-size:var(--v2-t-body);line-height:1.5;color:var(--v2-ink)}/* workflow */.cx-wfwrap{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.95fr);gap:var(--v2-s3);align-items:start}.cx-rhythm{gap:var(--v2-s4)}.cx-rhythm > .cx-cardh{flex-wrap:nowrap}.cx-wsteps{display:flex;flex-direction:column;gap:var(--v2-s2);position:relative}.cx-wsteps::before{content:"";position:absolute;left:21px;top:22px;bottom:22px;width:2px;background:var(--v2-accent-line)}.cx-wstep{display:flex;gap:var(--v2-s4);align-items:center;position:relative}.cx-wn{width:44px;height:44px;border-radius:50%;border:2px solid var(--v2-accent);background:var(--v2-panel);display:flex;align-items:center;justify-content:center;font:600 var(--v2-t-title) var(--v2-sans);color:var(--v2-ink);flex:0 0 auto;z-index:1}.cx-wcard{flex:1;display:flex;gap:var(--v2-s4);align-items:center;padding:var(--v2-s3) var(--v2-s4);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg)}.cx-wic{width:44px;height:44px;display:flex;align-items:center;justify-content:center;border-right:1px solid var(--v2-line);padding-right:var(--v2-s3);flex:0 0 auto}.cx-wic .cx-ic{width:26px;height:26px}.cx-wcard b{font-size:var(--v2-t-entity)}.cx-wcard p{margin:var(--v2-s0) 0 0;color:var(--v2-sub);font-size:var(--v2-t-body)}.cx-wcard .cx-bar{margin-top:var(--v2-s2)}.cx-wfside{display:flex;flex-direction:column;gap:var(--v2-s3);min-width:0}.cx-conns{display:grid;grid-template-columns:1fr 1fr;gap:var(--v2-s3)}.cx-connc{gap:var(--v2-s2)}.cx-connc p{margin:0;color:var(--v2-sub);font-size:var(--v2-t-body);line-height:1.5}.cx-cn{display:inline-flex;gap:var(--v2-s2);align-items:center;font-size:var(--v2-t-title)}.cx-cn .cx-ic{width:32px;height:32px}.cx-cl{font-size:var(--v2-t-entity)}.cx-badge{display:inline-flex;gap:var(--v2-s1h);align-items:center;padding:var(--v2-s1) var(--v2-s2);border-radius:var(--v2-r-control);border:1px solid var(--v2-warn-line);color:var(--v2-warn);font:600 var(--v2-t-label) var(--v2-sans);letter-spacing:.03em}.cx-badge i{width:8px;height:8px;border-radius:50%;background:var(--v2-warn-dot)}.cx-badge.ok{border-color:var(--v2-ok-line);color:var(--v2-ok)}.cx-badge.ok i{background:var(--v2-ok-dot)}.cx-badge.bad{border-color:var(--v2-bad-line);color:var(--v2-bad)}.cx-badge.bad i{background:var(--v2-bad-dot)}.cx-cmds{display:flex;flex-direction:column;gap:var(--v2-s2)}.cx-cmd{display:flex;gap:var(--v2-s4);align-items:center;padding:var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg)}.cx-cmd code{min-width:100px;text-align:center;padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-radius:6px;color:var(--v2-accent-ink);font:600 var(--v2-t-title) var(--v2-mono,"JetBrains Mono",monospace)}.cx-cmd b{display:block;font-size:var(--v2-t-entity);font-weight:500}.cx-cmd small{display:block;color:var(--v2-sub);font-size:var(--v2-t-small);margin-top:var(--v2-s0)}/* the head on this desk: the four planner shortcuts become a 2×2 box beside the actions */body[data-view="cfa"] .top{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:var(--v2-s3)}body[data-view="cfa"] .top > .utility{grid-column:1/-1}body[data-view="cfa"] .top > .toprow{grid-column:1;min-width:0}body[data-view="cfa"] .top > #tabs{grid-column:2;grid-row:2;align-self:start;display:grid!important;grid-template-columns:auto auto!important;grid-auto-flow:row!important;gap:var(--v2-s0) var(--v2-s1h);width:auto!important;margin:0!important;
  padding:var(--v2-s1h) var(--v2-s2);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel)}body[data-view="cfa"] .top > #tabs button{padding:var(--v2-s1h) var(--v2-s2)!important;font-size:var(--v2-t-body)!important;border:0!important;background:none!important;min-height:0;height:auto;justify-content:flex-start;gap:var(--v2-s2)}body[data-view="cfa"] .top > #tabs button:hover{background:var(--v2-line2)!important}body[data-view="cfa"] .top > #tabs button.on{box-shadow:none}/* the sidebar: CFA LaPlace sits under Delivery */aside .navitem.navchild{margin-left:var(--v2-s5);width:calc(100% - 22px);position:relative}aside .navitem.navchild::before{content:"";position:absolute;left:-12px;top:-6px;height:26px;width:10px;border-left:1.5px solid var(--v2-line);border-bottom:1.5px solid var(--v2-line);border-bottom-left-radius:6px}@media (max-width:1280px){.cx-editor,.cx-igwrap,.cx-stylewrap,.cx-wfwrap{grid-template-columns:minmax(0,1fr)}.cx-maildetail{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.cx-maillist{grid-column:1/-1;max-height:260px}.cx-impgrid{grid-template-columns:1fr 1fr}.cx-impgrid > :last-child{grid-column:1/-1}.cx-kanban{grid-template-columns:repeat(3,minmax(0,1fr))}
}@media (max-width:980px){.cx-calwrap,.cx-shotwrap,.cx-evwrap,.cx-apwrap,.cx-taskwrap.panel,.cx-maildetail,.cx-impgrid{grid-template-columns:minmax(0,1fr)}.cx-evcols,.cx-reviewcards,.cx-conns{grid-template-columns:minmax(0,1fr)}.cx-kanban{grid-template-columns:repeat(2,minmax(0,1fr))}.cx-grid4{grid-template-columns:1fr 1fr}.cx-tabs button{min-width:0;padding:var(--v2-s3) var(--v2-s4)}.cx-day,.cx-brief,.cx-evpanel,.cx-phonecard{position:static}body[data-view="cfa"] .top{display:block}
}@media (max-width:640px){.cx-kanban,.cx-grid2,.cx-grid4,.cx-btnrow.three{grid-template-columns:minmax(0,1fr)}.cx-calhead,.cx-calgrid{gap:var(--v2-s0)}.cx-cell{min-height:64px;padding:var(--v2-s1)}.cx-cchip{font-size:0;padding:var(--v2-s1)}.cx-cchip .cx-ic{width:12px;height:12px}.cx-shothead{flex-direction:column}.cx-steps{flex-wrap:wrap}.cx-stepline{display:none}
}/* R29 · first-pass fixes against the references */.cx-day > .cx-type{align-self:flex-start}.cx-field > label.cx-radio{text-transform:none;letter-spacing:0;font:inherit;align-items:flex-start}.cx-note{margin:0;font-size:var(--v2-t-small);line-height:1.5;color:var(--v2-sub)}.cx-maildetail{grid-template-columns:300px minmax(0,1.4fr) minmax(0,1fr)}.cx-rtb{flex-wrap:nowrap;overflow-x:auto}.cx-rtb .cx-sel select{min-width:104px}.cx-toolbar.nowrap{flex-wrap:nowrap}.cx-toolbar.nowrap .cx-btn{padding:var(--v2-s2) var(--v2-s3)}.cx-mnav.compact b{min-width:150px;font-size:var(--v2-t-title)}.cx-apcount{flex-direction:column;gap:var(--v2-s0);align-items:flex-start}.cx-apcount span{white-space:nowrap}@media (max-width:1500px){.cx-toolbar.nowrap{flex-wrap:wrap}}.cx-plan .cx-tags{flex-wrap:nowrap;max-width:230px}.cx-plan .cx-tags span{overflow:hidden;text-overflow:ellipsis;max-width:130px}.cx-tabs,.cx-subtabs{max-width:100%;overflow-x:auto;scrollbar-width:none}.cx-tabs::-webkit-scrollbar,.cx-subtabs::-webkit-scrollbar{display:none}.cx-tabs button,.cx-subtabs button{flex:0 0 auto}/* R29b · undo, recently deleted, remove image, re-draft one post */.cx-undo{position:fixed;left:50%;bottom:calc(24px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);z-index:120;display:flex;gap:var(--v2-s3);align-items:center;
  padding:var(--v2-s3) var(--v2-s3) var(--v2-s3) var(--v2-s4);border-radius:var(--v2-r-surface);background:var(--v2-ink);color:var(--v2-bg);font:500 var(--v2-t-entity) var(--v2-sans);box-shadow:var(--v2-shadow-overlay,0 12px 30px rgba(0,0,0,.35));max-width:calc(100vw - 32px)}.cx-undo button{border:0;background:none;color:var(--v2-accent);font:700 var(--v2-t-entity) var(--v2-sans);cursor:pointer;padding:var(--v2-s1) var(--v2-s1h)}html:not([data-theme="dark"]) .cx-undo button{color:hsl(190 90% 70%)}.cx-undo button.x{color:inherit;opacity:.6;font-size:var(--v2-t-title);font-weight:400}.cx-trash{border-color:var(--v2-accent-line)}.cx-trashlist{display:flex;flex-direction:column;gap:var(--v2-s1h);max-height:360px;overflow-y:auto}.cx-trow{display:flex;gap:var(--v2-s3);align-items:center;padding:var(--v2-s2) var(--v2-s2);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg)}.cx-trow > img,.cx-trow > .cx-noimg{width:56px;height:42px;object-fit:cover;border-radius:5px;flex:0 0 auto;display:flex;align-items:center;justify-content:center;background:var(--v2-line2);color:var(--v2-sub)}.cx-trow > div{flex:1;min-width:0}.cx-trow b{display:block;font-size:var(--v2-t-body)}.cx-trow span{display:block;font-size:var(--v2-t-body);color:var(--v2-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cx-trow small{display:block;font-size:var(--v2-t-small);color:var(--v2-sub)}.cx-link{display:inline-flex;gap:var(--v2-s1h);align-items:center}.cx-dayimg{position:relative}.cx-imgx{position:absolute;right:8px;top:8px;display:inline-flex;gap:var(--v2-s1);align-items:center;border:0;border-radius:6px;padding:var(--v2-s1) var(--v2-s2);background:hsl(215 46% 6%/.75);color:#fff;font:600 var(--v2-t-small) var(--v2-sans);cursor:pointer;opacity:0;transition:opacity var(--v2-fast)}.cx-dayimg:hover .cx-imgx,.cx-imgx:focus{opacity:1}@media (hover:none){.cx-imgx{opacity:1}}.cx-asset{position:relative;display:inline-flex}.cx-asset button{position:absolute;right:-6px;top:-6px;width:22px;height:22px;border-radius:50%;border:1px solid var(--v2-line);background:var(--v2-panel);color:var(--v2-ink);display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0}.cx-asset button .cx-ic{width:12px;height:12px}.cx-asset button:hover{background:var(--v2-bad-soft);color:var(--v2-bad);border-color:var(--v2-bad-line)}.cx-ed-titlerow{display:flex;justify-content:space-between;align-items:center;gap:var(--v2-s3);flex-wrap:wrap}.cx-redraft{display:flex;flex-direction:column;gap:var(--v2-s2);padding:var(--v2-s3) var(--v2-s3);border:1px solid var(--v2-accent-line);border-radius:var(--v2-r-surface);background:var(--v2-accent-soft)}.cx-redraft > b{display:flex;gap:var(--v2-s2);align-items:center;font-size:var(--v2-t-entity)}.cx-redraft textarea{background:var(--v2-panel)!important}/* R29b · the desk on the Projects board */.cx-back.sm{font-size:var(--v2-t-body);align-self:flex-start;margin-bottom:-var(--v2-s1)}.cx-pjsocial{display:flex;flex-direction:column;gap:var(--v2-s2);margin-top:var(--v2-s2);padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-accent-line);border-radius:var(--v2-r-surface);background:var(--v2-accent-soft)}.cx-pjs-l{display:flex;gap:var(--v2-s2);align-items:flex-start}.cx-pjs-l .cx-igc{width:22px;height:22px;flex:0 0 auto}.cx-pjs-l b{display:block;font-size:var(--v2-t-body)}.cx-pjs-l span{display:block;font-size:var(--v2-t-small);color:var(--v2-sub);line-height:1.45;margin-top:var(--v2-s0)}.cx-pjsocial .cx-btn{align-self:stretch}.cx-pjpanel{margin:var(--v2-s4) 0;padding:var(--v2-s4) var(--v2-s4);border:1px solid var(--v2-accent-line);border-radius:var(--v2-r-surface);background:var(--v2-panel);gap:var(--v2-s3)}.cx-pjpanel .cx-hic .cx-igc{width:34px;height:34px}.cx-pjtiles{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:var(--v2-s2)}.cx-pjt{display:flex;flex-direction:column;gap:var(--v2-s0);align-items:flex-start;padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg);color:var(--v2-ink);cursor:pointer;text-align:left}.cx-pjt:hover{border-color:var(--v2-accent)}.cx-pjt b{font:700 var(--v2-t-say)/1.1 var(--v2-sans)}.cx-pjt span{font-size:var(--v2-t-small);color:var(--v2-sub)}.cx-pjt.warn b{color:var(--v2-warn)}.cx-pjt.ok b{color:var(--v2-ok)}.cx-pjnext{display:flex;gap:var(--v2-s2);align-items:center;flex-wrap:wrap}.cx-sublbl{font:600 var(--v2-t-label) var(--v2-sans);text-transform:uppercase;letter-spacing:.06em;color:var(--v2-sub);margin-right:var(--v2-s1)}.cx-pjpost{display:flex;gap:var(--v2-s2);align-items:center;padding:var(--v2-s1h) var(--v2-s2) var(--v2-s1h) var(--v2-s1h);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg);color:var(--v2-ink);cursor:pointer;text-align:left}.cx-pjpost:hover{border-color:var(--v2-accent)}.cx-pjpost img,.cx-pjpost .cx-noimg{width:40px;height:40px;object-fit:cover;border-radius:5px;display:flex;align-items:center;justify-content:center;background:var(--v2-line2);color:var(--v2-sub)}.cx-pjpost b{display:block;font-size:var(--v2-t-body)}.cx-pjpost span{display:block;font-size:var(--v2-t-small);color:var(--v2-sub)}@media (max-width:1100px){.cx-pjtiles{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (max-width:560px){.cx-pjtiles{grid-template-columns:repeat(2,minmax(0,1fr))}}/* R30 · shoot photos from the phone */.cx-storebar{display:flex;gap:var(--v2-s3);align-items:center;flex-wrap:wrap;padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel);font-size:var(--v2-t-body);line-height:1.5}.cx-storebar > .cx-ic{color:var(--v2-accent-ink);width:20px;height:20px}.cx-storebar > div{flex:1;min-width:240px}.cx-storebar b{display:block;font-size:var(--v2-t-body)}.cx-storebar span{color:var(--v2-sub)}.cx-storebar a{color:var(--v2-accent-ink)}.cx-shotd small{display:flex;gap:var(--v2-s1);align-items:center;flex-wrap:wrap;margin-top:var(--v2-s0);font-size:var(--v2-t-small);color:var(--v2-sub);text-decoration:none}.cx-shotd small .cx-ic{width:13px;height:13px}.cx-shotd small .ok{color:var(--v2-ok);display:inline-flex;gap:var(--v2-s0);align-items:center}.cx-shotd small .bad{color:var(--v2-bad)}.cx-shot.done .cx-shotd{text-decoration:none}.cx-shot.done .cx-shotd > :not(small){text-decoration:line-through}.cx-briefnote{display:flex;gap:var(--v2-s1h);align-items:flex-start;margin:0;font-size:var(--v2-t-body);color:var(--v2-sub)}.cx-briefpost{display:flex;gap:var(--v2-s2);align-items:center;padding:var(--v2-s2);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg)}.cx-briefpost img,.cx-briefpost .cx-noimg{width:52px;height:52px;object-fit:cover;border-radius:6px;flex:0 0 auto;display:flex;align-items:center;justify-content:center;background:var(--v2-line2);color:var(--v2-sub)}.cx-briefpost b{display:block;font-size:var(--v2-t-body)}.cx-briefpost span{display:block;font-size:var(--v2-t-small);color:var(--v2-sub);line-height:1.4}.cx-photo{display:flex;flex-direction:column;gap:var(--v2-s2)}.cx-briefimg{width:100%;max-height:420px;object-fit:contain;border-radius:var(--v2-r-surface);background:var(--v2-bg)}.cx-shootbtns{display:grid;grid-template-columns:1fr 1fr;gap:var(--v2-s2)}.cx-btn.big{padding:var(--v2-s3) var(--v2-s3);font-size:var(--v2-t-entity);cursor:pointer}.cx-uping{display:flex;flex-direction:column;gap:var(--v2-s2)}.cx-uping img{width:100%;max-height:360px;object-fit:contain;border-radius:var(--v2-r-surface);opacity:.75}.cx-upbar{position:relative;height:30px;border-radius:6px;background:var(--v2-line2);overflow:hidden;border:1px solid var(--v2-line)}.cx-upbar i{position:absolute;inset:0 auto 0 0;background:var(--v2-accent-soft);border-right:2px solid var(--v2-accent);transition:width var(--v2-mid)}.cx-upbar span{position:relative;display:flex;align-items:center;justify-content:center;height:100%;font-size:var(--v2-t-body);font-weight:600}.cx-stored{display:flex;flex-direction:column;gap:var(--v2-s1h);font-size:var(--v2-t-body)}.cx-stored > div{display:flex;gap:var(--v2-s1h);align-items:center;flex-wrap:wrap}.cx-stored .ok{color:var(--v2-ok)}.cx-stored .warn{color:var(--v2-warn)}.cx-stored .bad{color:var(--v2-bad)}.cx-stored .info{color:var(--v2-sub)}.cx-stored a{color:var(--v2-accent-ink)}.cx-sheetx{display:none!important}@media (max-width:980px){.cx-attach span{display:none}.cx-brief.sheet{position:fixed!important;inset:0;z-index:90;border-radius:0;overflow-y:auto;padding:calc(14px + env(safe-area-inset-top,0px)) 16px calc(90px + env(safe-area-inset-bottom,0px))}.cx-brief.sheet .cx-sheetx{display:inline-flex!important}.cx-shootbtns{grid-template-columns:1fr}.cx-storebar{font-size:var(--v2-t-small)}
}/* R30b · Setup → Photo storage */.cx-storeintro h3{gap:var(--v2-s2)}.cx-storegrid{display:grid;grid-template-columns:1fr 1fr;gap:var(--v2-s3);align-items:start}.cx-store{gap:var(--v2-s3)}.cx-store.ok{border-color:var(--v2-ok-line)}.cx-store.bad{border-color:var(--v2-accent-line)}.cx-storeh{display:flex;gap:var(--v2-s3);align-items:center}.cx-storeic{width:52px;height:52px;border-radius:var(--v2-r-surface);border:1px solid var(--v2-line);display:flex;align-items:center;justify-content:center;background:var(--v2-bg);flex:0 0 auto}.cx-storeic .cx-ic{width:30px;height:30px}.cx-storeh b{display:block;font-size:var(--v2-t-title);margin-bottom:var(--v2-s1)}.cx-storeb p{margin:0 0 var(--v2-s2);font-size:var(--v2-t-entity);line-height:1.55}.cx-storeb a{color:var(--v2-accent-ink)}.cx-store .cx-btn.big .cx-ic{width:20px;height:20px}.cx-pjtiles.four{grid-template-columns:repeat(4,minmax(0,1fr))}@media (max-width:980px){.cx-storegrid{grid-template-columns:minmax(0,1fr)}.cx-pjtiles.four{grid-template-columns:1fr 1fr}}/* invite link: shown when made, and kept in the directory until used */.st-invited{border-color:var(--v2-accent-line);background:var(--v2-accent-soft);margin-bottom:var(--v2-s4)}.st-copy.big input{font-size:var(--v2-t-entity);padding:var(--v2-s3)}.st-exp{display:block;margin-top:var(--v2-s1);font-size:var(--v2-t-small)}.st-act.acc{color:var(--v2-accent-ink);border-color:var(--v2-accent-line)}.cx-work{position:fixed;right:20px;bottom:calc(84px + env(safe-area-inset-bottom,0px));z-index:120;display:flex;gap:var(--v2-s2);align-items:center;max-width:min(460px,calc(100vw - 32px));
  padding:var(--v2-s3) var(--v2-s4);border-radius:var(--v2-r-surface);background:var(--v2-panel);border:1px solid var(--v2-accent-line);color:var(--v2-ink);font:500 var(--v2-t-body)/1.4 var(--v2-sans);box-shadow:var(--v2-shadow-overlay,0 12px 30px rgba(0,0,0,.35))}.cx-work small{color:var(--v2-sub);font-variant-numeric:tabular-nums;margin-left:auto;padding-left:var(--v2-s1h)}.cx-spin.sm{width:16px;height:16px;border-width:2px;border-color:var(--v2-line);border-top-color:var(--v2-accent);flex:0 0 auto}/* R31 · the bid tracker */.bt-stats{display:flex;gap:var(--v2-s2);flex-wrap:wrap;margin:var(--v2-s1) 0 var(--v2-s3)}.bt-stats span{padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-bg);font-size:var(--v2-t-body);color:var(--v2-sub)}.bt-stats b{color:var(--v2-ink);font-size:var(--v2-t-title);margin-right:var(--v2-s1)}.bt-stats .late b{color:var(--v2-bad)}.bt-stats .ok b{color:var(--v2-ok)}.bt-prop{display:flex;gap:var(--v2-s2);align-items:center;flex-wrap:wrap;padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel);margin-bottom:var(--v2-s3);font-size:var(--v2-t-body)}.bt-seg{display:inline-flex;border:1px solid var(--v2-line);border-radius:var(--v2-r-control);overflow:hidden;flex-wrap:wrap}.bt-seg button{border:0;border-right:1px solid var(--v2-line);background:none;color:var(--v2-ink);padding:var(--v2-s1h) var(--v2-s2);font:500 var(--v2-t-small) var(--v2-sans);cursor:pointer}.bt-seg button:last-child{border-right:0}.bt-seg button.on{background:var(--v2-accent);color:var(--v2-bg);font-weight:600}.bt-seg button.on.voided{background:var(--v2-bad-dot)}.bt-seg button.on.done{background:var(--v2-ok-dot)}.bt-tw{overflow-x:auto}.bt-t{width:100%;border-collapse:collapse;font-size:var(--v2-t-body)}.bt-t th{text-align:left;font:600 var(--v2-t-label) var(--v2-sans);text-transform:uppercase;letter-spacing:.05em;color:var(--v2-sub);padding:var(--v2-s2) var(--v2-s2);border-bottom:1px solid var(--v2-line);white-space:nowrap}.bt-t td{padding:var(--v2-s2) var(--v2-s2);border-bottom:1px solid var(--v2-line2);vertical-align:top}.bt-t tr.due td{background:color-mix(in srgb,var(--v2-bad-soft) 55%,transparent)}.bt-t .r{text-align:right}.bt-t.sm td{padding:var(--v2-s1h) var(--v2-s2)}.bt-n{color:var(--v2-sub);font-variant-numeric:tabular-nums;width:24px}.bt-co{min-width:170px}.bt-co b{display:block;font-size:var(--v2-t-body)}.bt-co a{display:block;font-size:var(--v2-t-small);color:var(--v2-accent-ink);text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px}.bt-sel,.bt-note,.bt-amt,.bt-date{font:var(--v2-t-body) var(--v2-sans);color:var(--v2-ink);background:var(--v2-bg);border:1px solid var(--v2-line);border-radius:6px;padding:var(--v2-s1) var(--v2-s2);max-width:100%}.bt-note{display:block;width:100%;min-width:150px;margin-top:var(--v2-s1);font-size:var(--v2-t-small)}.bt-amt{display:block;margin-top:var(--v2-s1);width:120px}.bt-date{display:block;margin-top:var(--v2-s1)}.bt-report{min-width:190px}.bt-dim{color:var(--v2-sub);font-size:var(--v2-t-small)}.bt-late{color:var(--v2-bad);font-weight:600;font-style:normal}.bt-now{color:var(--v2-warn);font-weight:600}.bt-fu{display:flex;flex-direction:column;gap:var(--v2-s1);min-width:180px}.bt-fuchips{display:flex;gap:var(--v2-s1);flex-wrap:wrap}.bt-chip{display:inline-flex;padding:var(--v2-s0) var(--v2-s2);border-radius:5px;font-size:var(--v2-t-label);font-weight:600;white-space:nowrap}.bt-chip.fu{background:var(--v2-violet-soft,var(--v2-info-soft));color:var(--v2-violet,var(--v2-info))}.bt-fumenu{position:relative}.bt-btn{border:1px dashed var(--v2-accent-line);background:none;color:var(--v2-accent-ink);border-radius:6px;padding:var(--v2-s1) var(--v2-s2);font:600 var(--v2-t-small) var(--v2-sans);cursor:pointer}.bt-menu{position:absolute;left:0;top:100%;z-index:30;margin-top:var(--v2-s1);min-width:170px;background:var(--v2-panel);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);box-shadow:var(--v2-shadow-overlay,0 10px 30px rgba(0,0,0,.25));padding:var(--v2-s1);display:flex;flex-direction:column}.bt-menu button{border:0;background:none;text-align:left;padding:var(--v2-s2) var(--v2-s2);border-radius:5px;color:var(--v2-ink);font:var(--v2-t-body) var(--v2-sans);cursor:pointer}.bt-menu button:hover{background:var(--v2-line2)}.bt-menu button.bad{color:var(--v2-bad)}.bt-q.received .bt-sel{border-color:var(--v2-ok-line);color:var(--v2-ok);font-weight:600}.bt-q.requested .bt-sel{border-color:var(--v2-warn-line);color:var(--v2-warn);font-weight:600}.bt-q.declined .bt-sel,.bt-q.not_received .bt-sel{border-color:var(--v2-bad-line);color:var(--v2-bad)}.bt-doc{display:block;margin-top:var(--v2-s1);font-size:var(--v2-t-small);color:var(--v2-accent-ink)}.bt-roomnav{margin-bottom:var(--v2-s3)}.bt-pills{display:flex;gap:var(--v2-s1h);flex-wrap:wrap;margin-bottom:var(--v2-s2)}.bt-pills button{border:1px solid var(--v2-line);background:var(--v2-bg);color:var(--v2-ink);border-radius:var(--v2-r-control);padding:var(--v2-s1h) var(--v2-s3);font:500 var(--v2-t-body) var(--v2-sans);cursor:pointer}.bt-pills button.on{background:var(--v2-accent);border-color:var(--v2-accent);color:var(--v2-bg);font-weight:600}.bt-month{margin-top:var(--v2-s3)}.bt-month > h3{font:700 var(--v2-t-title) var(--v2-sans);margin:0 0 var(--v2-s2);display:flex;gap:var(--v2-s2);align-items:baseline}.bt-opp{border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel);margin-bottom:var(--v2-s2);overflow:hidden}.bt-opph{display:flex;gap:var(--v2-s2);align-items:center;width:100%;border:0;background:none;color:var(--v2-ink);padding:var(--v2-s2) var(--v2-s3);text-align:left;cursor:pointer;font:inherit}.bt-opph:hover{background:var(--v2-line2)}.bt-car{color:var(--v2-sub);width:12px}.bt-oppt{flex:1;min-width:0}.bt-oppt b{display:block;font-size:var(--v2-t-entity);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bt-oppt small{font-size:var(--v2-t-small);color:var(--v2-sub)}.bt-due{font-size:var(--v2-t-small);color:var(--v2-warn);white-space:nowrap}.bt-opp.open .bt-tw{border-top:1px solid var(--v2-line)}.bt-link{border:0;background:none;color:var(--v2-accent-ink);font:600 var(--v2-t-small) var(--v2-sans);cursor:pointer;padding:var(--v2-s2) var(--v2-s3)}.bt-qopp{border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);padding:var(--v2-s2) var(--v2-s3);margin-bottom:var(--v2-s2);background:var(--v2-panel)}.bt-qh{display:flex;gap:var(--v2-s2);align-items:center;flex-wrap:wrap;margin-bottom:var(--v2-s1h)}.bt-qh b{flex:1;min-width:200px}.bt-pr{font-size:var(--v2-t-label);font-weight:600;padding:var(--v2-s0) var(--v2-s2);border-radius:5px;background:var(--v2-line2)}.bt-pr.done{background:var(--v2-ok-soft);color:var(--v2-ok)}.bt-pr.voided{background:var(--v2-bad-soft);color:var(--v2-bad)}.bt-pr.draft,.bt-pr.review,.bt-pr.revision{background:var(--v2-info-soft);color:var(--v2-info)}.bt-propline{padding:var(--v2-s2) 0;border-bottom:1px solid var(--v2-line2)}/* R32 · quote requests, follow-ups to approve */.bt-auto{display:block;margin-top:var(--v2-s1);font-size:var(--v2-t-label);color:var(--v2-sub);line-height:1.4}.bt-auto.ok{color:var(--v2-ok)}.bt-auto.warn{color:var(--v2-warn)}.bt-mini{border:0;background:none;color:var(--v2-accent-ink);font:600 var(--v2-t-label) var(--v2-sans);cursor:pointer;padding:0 0 0 var(--v2-s1);text-decoration:underline}.bt-reqbar{display:flex;gap:var(--v2-s3);align-items:center;flex-wrap:wrap;margin-bottom:var(--v2-s3)}.bt-req{border:1px solid var(--v2-accent-line);border-radius:var(--v2-r-surface);background:var(--v2-accent-soft);padding:var(--v2-s3);margin-bottom:var(--v2-s3);display:flex;flex-direction:column;gap:var(--v2-s2)}.bt-reqh{display:flex;justify-content:space-between;align-items:center}.bt-reqh b{font-size:var(--v2-t-entity)}.bt-reqgrid{display:grid;grid-template-columns:1fr 1.3fr;gap:var(--v2-s3)}.bt-lbl{display:block;font:600 var(--v2-t-label) var(--v2-sans);text-transform:uppercase;letter-spacing:.05em;color:var(--v2-sub);margin:var(--v2-s2) 0 var(--v2-s1)}.bt-picks{display:flex;flex-direction:column;gap:var(--v2-s1);max-height:220px;overflow-y:auto;background:var(--v2-panel);border:1px solid var(--v2-line);border-radius:6px;padding:var(--v2-s1h)}.bt-picks label{display:flex;gap:var(--v2-s2);align-items:baseline;flex-wrap:wrap;font-size:var(--v2-t-body);padding:var(--v2-s1)}.bt-picks label.off{opacity:.55}.bt-picks small{color:var(--v2-sub);font-size:var(--v2-t-label);width:100%;padding-left:var(--v2-s5)}.bt-body{display:block;width:100%;font:var(--v2-t-body)/1.5 var(--v2-sans);color:var(--v2-ink);background:var(--v2-bg);border:1px solid var(--v2-line);border-radius:6px;padding:var(--v2-s2) var(--v2-s2);resize:vertical}.bt-reqf{display:flex;justify-content:space-between;gap:var(--v2-s3);align-items:center;flex-wrap:wrap}.bt-apall{display:flex;gap:var(--v2-s2);margin-bottom:var(--v2-s2)}.bt-apc{border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel);padding:var(--v2-s3) var(--v2-s3);margin-bottom:var(--v2-s2);display:flex;flex-direction:column;gap:var(--v2-s2)}.bt-aph{display:flex;gap:var(--v2-s2);align-items:center;flex-wrap:wrap}.bt-aph b{font-size:var(--v2-t-entity)}.bt-subj{font-weight:600;font-size:var(--v2-t-body)}.bt-prev{white-space:pre-wrap;font-size:var(--v2-t-body);line-height:1.5;color:var(--v2-ink);background:var(--v2-bg);border:1px solid var(--v2-line2);border-radius:6px;padding:var(--v2-s2) var(--v2-s2);max-height:180px;overflow-y:auto}.bt-apbtns{display:flex;gap:var(--v2-s1h);flex-wrap:wrap}.bt-tpl{margin-top:var(--v2-s3);border-top:1px solid var(--v2-line);padding-top:var(--v2-s2)}.bt-tpl summary{cursor:pointer;font-weight:600}.bt-tplrow{display:flex;flex-direction:column;gap:var(--v2-s1);margin:var(--v2-s2) 0}@media (max-width:900px){.bt-reqgrid{grid-template-columns:1fr}}.bt-from{display:flex;gap:var(--v2-s2);align-items:center;flex-wrap:wrap;padding:var(--v2-s2) var(--v2-s2);background:var(--v2-panel);border:1px solid var(--v2-line);border-radius:6px}.bt-from .bt-lbl{margin:0}.bt-seg button:disabled{opacity:.45;cursor:not-allowed}.bt-chip.gm{background:hsl(4 80% 95%);color:hsl(4 70% 40%)}.bt-chip.hl{background:var(--v2-info-soft);color:var(--v2-info)}html[data-theme="dark"] .bt-chip.gm{background:hsl(4 40% 18%);color:hsl(4 80% 78%)}/* ══ Onboarding kit (onboard-kit.js) ═════════════════════════════════
   Welcome modal, feature tour, getting-started checklist, highlights,
   setup wizard, celebration. All colours through the v2 tokens. */.ob-ic{width:18px;height:18px;flex:0 0 auto;display:block}.ob-backdrop{position:fixed;inset:0;z-index:9000;display:grid;place-items:center;padding:var(--v2-s4);
  background:color-mix(in srgb,#05080c 55%,transparent);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
  opacity:0;transition:opacity var(--v2-mid) var(--v2-ease)}.ob-backdrop.in{opacity:1}.ob-modal{width:min(440px,100%);max-height:calc(100vh - 32px);overflow:auto;background:var(--v2-panel);color:var(--v2-ink);
  border:1px solid var(--v2-line);border-radius:18px;box-shadow:0 24px 60px rgba(0,0,0,.35);
  transform:translateY(10px) scale(.98);transition:transform var(--v2-mid) cubic-bezier(.2,.9,.3,1.2)}.ob-backdrop.in .ob-modal{transform:none}.ob-modal.wide{width:min(560px,100%)}.ob-head{position:relative;height:132px;overflow:hidden;border-radius:17px 17px 0 0;display:grid;place-items:center;
  background:linear-gradient(135deg,var(--v2-accent),color-mix(in srgb,var(--v2-accent) 40%,#8C7CFF))}.ob-sh{position:absolute;border-radius:50%;background:rgba(255,255,255,.18)}.ob-sh.a{width:120px;height:120px;left:-30px;top:-40px}.ob-sh.b{width:70px;height:70px;right:30px;bottom:-24px;border-radius:18px;transform:rotate(24deg)}.ob-sh.c{width:26px;height:26px;right:90px;top:22px;background:rgba(255,255,255,.3)}.ob-headic{position:relative;width:64px;height:64px;border-radius:18px;display:grid;place-items:center;
  background:rgba(255,255,255,.95);color:#0b1720;box-shadow:0 10px 24px rgba(0,0,0,.18)}.ob-headic .ob-ic{width:30px;height:30px}.ob-close{position:absolute;top:12px;right:12px;width:32px;height:32px;border-radius:50%;border:0;cursor:pointer;
  display:grid;place-items:center;background:rgba(255,255,255,.22);color:#fff}.ob-close:hover{background:rgba(255,255,255,.35)}.ob-close.sm{width:28px;height:28px;background:transparent;color:var(--v2-sub);top:10px;right:10px}.ob-close.sm:hover{background:var(--v2-line);color:var(--v2-ink)}.ob-close .ob-ic{width:16px;height:16px}.ob-body{padding:var(--v2-s5) var(--v2-s5) var(--v2-s4);text-align:center}.ob-body h2{margin:0 0 var(--v2-s2);font:700 var(--v2-t-say)/1.25 var(--v2-display,var(--v2-sans));text-wrap:balance}.ob-body>p{margin:0 auto;color:var(--v2-sub);font-size:var(--v2-t-entity);line-height:1.55;max-width:36ch}.ob-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--v2-s2);margin:var(--v2-s4) 0}.ob-stats div{padding:var(--v2-s3) var(--v2-s1h);border-radius:12px;background:var(--v2-bg);border:1px solid var(--v2-line)}.ob-stats b{display:block;font:700 var(--v2-t-say)/1.1 var(--v2-sans);font-variant-numeric:tabular-nums;color:var(--v2-ink)}.ob-stats span{font-size:var(--v2-t-label);letter-spacing:.06em;text-transform:uppercase;color:var(--v2-sub)}.ob-cta{display:inline-flex;align-items:center;justify-content:center;gap:var(--v2-s2);width:100%;padding:var(--v2-s3) var(--v2-s4);border:0;
  border-radius:12px;cursor:pointer;font:600 var(--v2-t-entity) var(--v2-sans);background:var(--v2-accent);color:#06141b;transition:transform var(--v2-fast),filter var(--v2-fast)}.ob-cta:hover{filter:brightness(1.06)}.ob-cta:hover .ob-ic{transform:translateX(3px)}.ob-cta .ob-ic{transition:transform var(--v2-fast)}.ob-cta.sm{width:auto;padding:var(--v2-s2) var(--v2-s4);font-size:var(--v2-t-entity)}.ob-cta:disabled{opacity:.6;cursor:default}.ob-hint{margin:var(--v2-s2) 0 0!important;font-size:var(--v2-t-small)!important;color:var(--v2-faint,var(--v2-sub))!important}.ob-hint.left{text-align:left;max-width:none!important}.ob-link{display:inline-flex;align-items:center;gap:var(--v2-s1);border:0;background:none;padding:var(--v2-s1) 0;cursor:pointer;
  color:var(--v2-accent-ink,var(--v2-accent));font:600 var(--v2-t-body) var(--v2-sans)}.ob-link .ob-ic{width:14px;height:14px}/* tour */.ob-tour{position:fixed;z-index:8999;right:20px;bottom:20px;width:min(360px,calc(100vw - 32px))}.ob-tourcard{position:relative;background:var(--v2-panel);border:1px solid var(--v2-line);border-radius:16px;
  padding:var(--v2-s4);box-shadow:0 18px 44px rgba(0,0,0,.3);animation:obUp .25s ease}.ob-tourrow{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--v2-s2);margin:0 var(--v2-s6) var(--v2-s3) 0}.ob-tbtn{height:44px;border-radius:12px;border:1px solid var(--v2-line);background:var(--v2-bg);color:var(--v2-sub);
  display:grid;place-items:center;cursor:pointer;transition:transform var(--v2-mid),background var(--v2-mid),color var(--v2-mid)}.ob-tbtn.seen{color:var(--v2-ink)}.ob-tbtn.on{transform:scale(1.12);background:var(--v2-accent);color:#06141b;border-color:transparent;
  box-shadow:0 6px 16px color-mix(in srgb,var(--v2-accent) 40%,transparent)}.ob-tip{position:relative;padding:var(--v2-s3);border-radius:12px;background:var(--v2-bg);border:1px solid var(--v2-line)}.ob-arrow{position:absolute;top:-7px;left:var(--ob-arrow,12%);width:12px;height:12px;margin-left:-var(--v2-s1h);transform:rotate(45deg);
  background:var(--v2-bg);border-left:1px solid var(--v2-line);border-top:1px solid var(--v2-line);transition:left var(--v2-mid) var(--v2-ease)}.ob-tiph{display:flex;align-items:baseline;justify-content:space-between;gap:var(--v2-s2)}.ob-tiph b{font-size:var(--v2-t-entity)}.ob-prog{font-size:var(--v2-t-small);color:var(--v2-sub);font-variant-numeric:tabular-nums}.ob-tip p{margin:var(--v2-s1h) 0 var(--v2-s3);font-size:var(--v2-t-body);line-height:1.5;color:var(--v2-sub)}.ob-tip.done b{font-size:var(--v2-t-entity)}.ob-tourend{display:flex;gap:var(--v2-s4);flex-wrap:wrap}.ob-dots{display:inline-flex;gap:var(--v2-s1);vertical-align:middle}.ob-dots i{width:6px;height:6px;border-radius:50%;background:var(--v2-line)}.ob-dots i.on{background:var(--v2-accent)}.ob-next{float:right;display:inline-flex;align-items:center;gap:var(--v2-s1h);border:0;border-radius:10px;padding:var(--v2-s1h) var(--v2-s3);cursor:pointer;
  font:600 var(--v2-t-body) var(--v2-sans);background:var(--v2-accent);color:#06141b}.ob-next .ob-ic{width:14px;height:14px}.ob-tip::after{content:"";display:block;clear:both}.ob-glow{position:relative;outline:2px solid var(--v2-accent)!important;outline-offset:3px;border-radius:10px;
  animation:obGlow 1.6s ease-in-out infinite}@keyframes obGlow{50%{outline-color:transparent}}@keyframes obUp{from{opacity:0;transform:translateY(10px)}}/* checklist + highlights on the Dashboard */.ob-homegrid{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:var(--v2-s3);margin-bottom:var(--v2-s4)}.ob-homegrid:empty{display:none}.ob-homegrid>:only-child{grid-column:1/-1}@media (max-width:860px){.ob-homegrid{grid-template-columns:1fr}}.ob-check{background:var(--v2-panel);border:1px solid var(--v2-line);border-radius:16px;padding:var(--v2-s4) var(--v2-s4) var(--v2-s2)}.ob-checkh{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--v2-s3)}.ob-checkh b{display:block;font-size:var(--v2-t-title)}.ob-checkh span{font-size:var(--v2-t-body);color:var(--v2-sub)}.ob-count{font:700 var(--v2-t-entity) var(--v2-sans)!important;color:var(--v2-ink)!important;font-variant-numeric:tabular-nums;
  padding:var(--v2-s0) var(--v2-s2);border-radius:999px;background:var(--v2-bg);border:1px solid var(--v2-line)}.ob-bar{height:6px;border-radius:999px;background:var(--v2-line);margin:var(--v2-s3) 0 var(--v2-s1h);overflow:hidden}.ob-bar i{display:block;height:100%;border-radius:inherit;background:var(--v2-accent);transition:width .6s var(--v2-ease)}.ob-steps{list-style:none;margin:0;padding:0}.ob-steps li{display:flex;align-items:center;gap:var(--v2-s3);padding:var(--v2-s2) var(--v2-s1h);border-radius:10px;cursor:pointer;transition:background var(--v2-fast)}.ob-steps li+li{border-top:1px solid var(--v2-line)}.ob-steps li:hover{background:var(--v2-bg)}.ob-steps li>div{flex:1;min-width:0}.ob-steps b{display:block;font-size:var(--v2-t-entity);font-weight:600}.ob-steps small{display:block;font-size:var(--v2-t-small);color:var(--v2-sub);line-height:1.4}.ob-circ{width:24px;height:24px;border-radius:50%;flex:0 0 24px;display:grid;place-items:center;border:2px solid var(--v2-line)}.ob-circ .ob-ic{width:14px;height:14px}.ob-steps li.done .ob-circ{background:var(--v2-ok);border-color:var(--v2-ok);color:#fff}.ob-steps li.done b{text-decoration:line-through;color:var(--v2-sub)}.ob-steps li.locked{opacity:.5;cursor:not-allowed}.ob-steps li.locked:hover{background:none}.ob-steps li.locked .ob-circ{color:var(--v2-sub)}.ob-chev{color:var(--v2-sub)}.ob-chev .ob-ic{width:16px;height:16px}.ob-steps li.done .ob-chev,.ob-steps li.locked .ob-chev{visibility:hidden}.ob-success{display:flex;gap:var(--v2-s2);align-items:center;padding:var(--v2-s3);margin:var(--v2-s1h) 0;border-radius:10px;
  background:color-mix(in srgb,var(--v2-ok) 14%,transparent);color:var(--v2-ink);font-weight:600;font-size:var(--v2-t-entity)}.ob-success .ob-ic{color:var(--v2-ok)}.ob-new{position:relative;padding:var(--v2-s4) var(--v2-s4) var(--v2-s4);border-radius:16px;background:var(--v2-panel);border:1px solid var(--v2-accent-line,var(--v2-accent))}.ob-new>b{display:block;font-size:var(--v2-t-title);margin:var(--v2-s2) 0 var(--v2-s1)}.ob-new>p{margin:0 0 var(--v2-s3);font-size:var(--v2-t-body);line-height:1.5;color:var(--v2-sub)}.ob-ring{position:absolute;inset:-1px;border-radius:inherit;pointer-events:none;border:2px solid var(--v2-accent);animation:obRing 2.4s ease-out infinite}@keyframes obRing{0%{opacity:.7;transform:scale(1)}80%,100%{opacity:0;transform:scale(1.04)}}.ob-badge{display:inline-flex;align-items:center;gap:var(--v2-s1);padding:var(--v2-s0) var(--v2-s2);border-radius:999px;font:700 var(--v2-t-label) var(--v2-sans);
  letter-spacing:.05em;text-transform:uppercase;background:var(--v2-accent-soft);color:var(--v2-accent-ink,var(--v2-accent))}.ob-badge .ob-ic{width:13px;height:13px;animation:obSpark 2s ease-in-out infinite}@keyframes obSpark{50%{transform:rotate(20deg) scale(1.15)}}.ob-tipcard{position:relative;display:flex;gap:var(--v2-s3);align-items:flex-start;padding:var(--v2-s3) var(--v2-s6) var(--v2-s3) var(--v2-s3);margin:0 0 var(--v2-s3);
  border-radius:12px;border-left:4px solid var(--v2-accent);
  background:linear-gradient(90deg,var(--v2-accent-soft),color-mix(in srgb,var(--v2-accent-soft) 30%,var(--v2-panel)))}.ob-tipcard>.ob-ic{color:var(--v2-accent-ink,var(--v2-accent));margin-top:var(--v2-s0)}.ob-tipcard b{font-size:var(--v2-t-entity)}.ob-tipcard p{margin:var(--v2-s0) 0 0;font-size:var(--v2-t-body);line-height:1.45;color:var(--v2-sub)}.ob-ping{position:absolute;top:8px;right:8px;width:9px;height:9px}.ob-ping i,.ob-ping::before{position:absolute;inset:0;border-radius:50%;background:var(--v2-bad,#DD0031)}.ob-ping::before{content:"";animation:obPing 1.5s cubic-bezier(0,0,.2,1) infinite}@keyframes obPing{75%,100%{transform:scale(2.4);opacity:0}}#gc-subnav .navitem{position:relative}/* wizard */.ob-wizh{display:flex;align-items:center;padding:var(--v2-s4) var(--v2-s4) var(--v2-s1h);position:relative}.ob-wizh b{font-size:var(--v2-t-title)}.ob-wtabs{display:grid;grid-template-columns:repeat(3,1fr);border-bottom:1px solid var(--v2-line);padding:0 var(--v2-s3)}.ob-wtab{display:flex;align-items:center;justify-content:center;gap:var(--v2-s1h);padding:var(--v2-s3) var(--v2-s1);font-size:var(--v2-t-body);font-weight:600;
  color:var(--v2-sub);border-bottom:2px solid transparent;margin-bottom:-var(--v2-s0);transition:color var(--v2-mid),border-color var(--v2-mid)}.ob-wtab span{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;background:var(--v2-bg)}.ob-wtab .ob-ic{width:14px;height:14px}.ob-wtab.on{color:var(--v2-ink);border-bottom-color:var(--v2-accent)}.ob-wtab.on span{background:var(--v2-accent);color:#06141b}.ob-wtab.done span{background:var(--v2-ok);color:#fff}.ob-wbody{padding:var(--v2-s4) var(--v2-s4) var(--v2-s2);min-height:190px}.ob-wbody.fwd{animation:obIn .28s ease}.ob-wbody.back{animation:obInB .28s ease}@keyframes obIn{from{opacity:0;transform:translateX(24px)}}@keyframes obInB{from{opacity:0;transform:translateX(-24px)}}.ob-lbl{display:block;font-size:var(--v2-t-small);font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--v2-sub);margin-bottom:var(--v2-s2)}.ob-in{display:block;width:100%;box-sizing:border-box;padding:var(--v2-s3) var(--v2-s3);margin-bottom:var(--v2-s2);border-radius:10px;
  border:1px solid var(--v2-line);background:var(--v2-bg);color:var(--v2-ink);font:var(--v2-t-entity) var(--v2-sans)}.ob-in:focus{outline:2px solid var(--v2-accent);outline-offset:1px}.ob-themes{display:grid;grid-template-columns:1fr 1fr;gap:var(--v2-s3)}.ob-theme{position:relative;text-align:left;padding:var(--v2-s2);border-radius:14px;border:2px solid var(--v2-line);background:var(--v2-bg);
  color:var(--v2-ink);cursor:pointer;display:flex;flex-direction:column;gap:var(--v2-s0);font-family:var(--v2-sans)}.ob-theme.on{border-color:var(--v2-accent)}.ob-theme b{font-size:var(--v2-t-entity)}.ob-theme small{font-size:var(--v2-t-small);color:var(--v2-sub)}.ob-prev{height:70px;border-radius:9px;padding:var(--v2-s2);display:grid;grid-template-columns:24px 1fr;grid-template-rows:10px 1fr;gap:var(--v2-s1h);margin-bottom:var(--v2-s1h)}.ob-prev.light{background:#f4f7f8;border:1px solid #dfe5e8}.ob-prev.dark{background:#0d141a;border:1px solid #1f2a33}.ob-prev i{border-radius:4px}.ob-prev i:first-child{grid-row:1/3}.ob-prev.light i{background:#dde5ea}.ob-prev.dark i{background:#1e2a33}.ob-prev i:nth-child(2){background:#45D7F5}.ob-tick{position:absolute;top:8px;right:8px;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;background:var(--v2-accent);color:#06141b}.ob-tick .ob-ic{width:13px;height:13px}.ob-wfoot{display:flex;justify-content:space-between;align-items:center;padding:var(--v2-s3) var(--v2-s4) var(--v2-s4);border-top:1px solid var(--v2-line)}.ob-back{border:1px solid var(--v2-line);background:none;color:var(--v2-ink);border-radius:10px;padding:var(--v2-s2) var(--v2-s4);cursor:pointer;font:600 var(--v2-t-entity) var(--v2-sans)}.ob-back:disabled{opacity:.4;cursor:default}.ob-wdone h3{margin:0 0 var(--v2-s1h)}.ob-wdone p{margin:0 0 var(--v2-s3);font-size:var(--v2-t-body);color:var(--v2-sub);line-height:1.5}.ob-linkrow{display:flex;flex-wrap:wrap;gap:var(--v2-s1h);align-items:center;margin-bottom:var(--v2-s2)}.ob-linkrow b{flex:1 0 100%;font-size:var(--v2-t-body)}.ob-linkrow input{flex:1;min-width:0;padding:var(--v2-s2) var(--v2-s2);border-radius:8px;border:1px solid var(--v2-line);background:var(--v2-bg);color:var(--v2-ink);font:var(--v2-t-small) var(--v2-mono,monospace)}.ob-err{color:var(--v2-bad);font-size:var(--v2-t-body)}/* celebration */.ob-confetti{position:fixed;inset:0;pointer-events:none;z-index:9100;overflow:hidden}.ob-confetti i{position:absolute;top:-16px;width:9px;height:14px;border-radius:2px;animation-name:obFall;animation-timing-function:cubic-bezier(.3,.6,.5,1);animation-fill-mode:forwards}@keyframes obFall{to{transform:translate3d(var(--ob-drift,0),105vh,0) rotate(var(--ob-rot,720deg));opacity:.9}}.ob-ach{z-index:9050}.ob-achcard{position:relative;width:min(360px,100%);text-align:center;padding:var(--v2-s5) var(--v2-s5) var(--v2-s5);border-radius:20px;
  background:var(--v2-panel);border:1px solid var(--v2-line);color:var(--v2-ink);box-shadow:0 24px 60px rgba(0,0,0,.35);animation:obPop .45s cubic-bezier(.2,1.4,.4,1)}@keyframes obPop{from{opacity:0;transform:scale(.8)}}.ob-trophy{position:relative;width:92px;height:92px;margin:0 auto var(--v2-s3);border-radius:50%;display:grid;place-items:center;color:#fff;
  background:linear-gradient(135deg,#FFD166,#F59E0B 60%,#DD0031);box-shadow:0 12px 30px rgba(245,158,11,.35)}.ob-trophy>.ob-ic{width:44px;height:44px}.ob-stars i{position:absolute;color:#FFD166;animation:obBounce 1.2s ease-in-out infinite}.ob-stars i .ob-ic{width:16px;height:16px;fill:currentColor}.ob-stars i:nth-child(1){left:-14px;top:14px}.ob-stars i:nth-child(2){right:-12px;top:-4px;animation-delay:.2s}.ob-stars i:nth-child(3){right:-18px;bottom:10px;animation-delay:.4s}@keyframes obBounce{50%{transform:translateY(-7px) scale(1.15)}}.ob-unl{display:block;font-size:var(--v2-t-label);font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--v2-accent-ink,var(--v2-accent))}.ob-achcard h3{margin:var(--v2-s1h) 0 var(--v2-s1h);font-size:var(--v2-t-say);text-wrap:balance}.ob-achcard p{margin:0 0 var(--v2-s3);font-size:var(--v2-t-entity);color:var(--v2-sub);line-height:1.5}.ob-achmeta{display:flex;justify-content:center;gap:var(--v2-s2);flex-wrap:wrap;margin-bottom:var(--v2-s4)}.ob-xp{padding:var(--v2-s1) var(--v2-s2);border-radius:999px;font:800 var(--v2-t-body) var(--v2-sans);background:#FFD166;color:#3a2600;font-variant-numeric:tabular-nums}.ob-pill{display:inline-flex;align-items:center;gap:var(--v2-s1);padding:var(--v2-s1) var(--v2-s2);border-radius:999px;font-size:var(--v2-t-small);font-weight:600;
  background:var(--v2-accent-soft);color:var(--v2-accent-ink,var(--v2-accent))}.ob-pill .ob-ic{width:13px;height:13px}@media (prefers-reduced-motion:reduce){.ob-ring,.ob-ping::before,.ob-stars i,.ob-badge .ob-ic,.ob-glow{animation:none}.ob-confetti{display:none}}/* Integrations → Google: team senders */.ig-team{display:grid;gap:var(--v2-s0);margin-top:var(--v2-s2)}.ig-teamrow{display:flex;align-items:center;justify-content:space-between;gap:var(--v2-s3);padding:var(--v2-s2) var(--v2-s1);border-top:1px solid var(--v2-line)}.ig-teamrow b{display:block;font-size:var(--v2-t-entity)}.ig-teamrow small{color:var(--v2-sub);font-size:var(--v2-t-small)}.ig-pill{font-size:var(--v2-t-small);font-weight:600;padding:var(--v2-s0) var(--v2-s2);border-radius:999px;white-space:nowrap}.ig-pill.ok{background:color-mix(in srgb,var(--v2-ok) 15%,transparent);color:var(--v2-ok)}.ig-pill.warn{background:var(--v2-warn-soft);color:var(--v2-warn)}@media (max-width:600px){.ig-teamrow{flex-direction:column;align-items:flex-start;gap:var(--v2-s1h)}}.ig-teamact{display:flex;align-items:center;gap:var(--v2-s2);flex-wrap:wrap;justify-content:flex-end}.st-edit{display:grid;gap:var(--v2-s1h);min-width:220px}.st-edit input{padding:var(--v2-s1h) var(--v2-s2);border-radius:8px;border:1px solid var(--v2-line);background:var(--v2-bg);color:var(--v2-ink);font:var(--v2-t-body) var(--v2-sans)}.st-edit>div{display:flex;gap:var(--v2-s1h)}.st-edit label{display:grid;gap:var(--v2-s0);font-size:var(--v2-t-label);font-weight:600;color:var(--v2-sub);text-transform:uppercase;letter-spacing:.04em}.st-edit label small{text-transform:none;letter-spacing:0;font-weight:400}.ob-optout{display:inline-flex;align-items:center;gap:var(--v2-s1h);margin-top:var(--v2-s3);font-size:var(--v2-t-small);color:var(--v2-sub);cursor:pointer}.ob-optout.left{display:flex;margin:0 0 var(--v2-s2)}.ob-optout input{accent-color:var(--v2-accent);width:15px;height:15px}/* ══ Settings → Control system (control-page.js) ═════════════════════ */.ctl-hero{display:grid;gap:var(--v2-s3)}.ctl-heroh{display:flex;align-items:center;gap:var(--v2-s3);flex-wrap:wrap}.ctl-heroh>div{flex:1;min-width:200px}.ctl-heroh b{display:block;font-size:var(--v2-t-title)}.ctl-heroh small{color:var(--v2-sub);font-size:var(--v2-t-body)}.ctl-pulse{width:14px;height:14px;border-radius:50%;flex:0 0 14px;position:relative;background:var(--v2-ok)}.ctl-pulse.warn{background:var(--v2-warn)}.ctl-pulse.bad{background:var(--v2-bad)}.ctl-pulse::after{content:"";position:absolute;inset:0;border-radius:50%;background:inherit;animation:obPing 2s cubic-bezier(0,0,.2,1) infinite}.ctl-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--v2-s2)}.ctl-kpis div{padding:var(--v2-s3);border-radius:12px;background:var(--v2-bg);border:1px solid var(--v2-line)}.ctl-kpis b{display:block;font:700 var(--v2-t-say)/1.1 var(--v2-sans);font-variant-numeric:tabular-nums}.ctl-kpis b.bad{color:var(--v2-bad)}.ctl-kpis b.warn{color:var(--v2-warn)}.ctl-kpis span{font-size:var(--v2-t-small);color:var(--v2-sub)}@media (max-width:700px){.ctl-kpis{grid-template-columns:repeat(2,1fr)}}.ctl-how{font-size:var(--v2-t-body);line-height:1.55;color:var(--v2-sub);margin:0 0 var(--v2-s3);max-width:90ch}.ctl-h{margin:0 0 var(--v2-s2);font-size:var(--v2-t-body);letter-spacing:.06em;text-transform:uppercase;color:var(--v2-sub)}.ctl-checks{display:grid}.ctl-check{display:flex;align-items:center;gap:var(--v2-s3);padding:var(--v2-s2) var(--v2-s0);border-top:1px solid var(--v2-line)}.ctl-check:first-child{border-top:0}.ctl-check>div{flex:1;min-width:0}.ctl-check b{display:block;font-size:var(--v2-t-entity)}.ctl-check small{color:var(--v2-sub);font-size:var(--v2-t-small)}.ctl-meta{font-size:var(--v2-t-small);color:var(--v2-sub);white-space:nowrap}.ctl-dot{width:10px;height:10px;border-radius:50%;flex:0 0 10px;background:var(--v2-line)}.ctl-dot.ok{background:var(--v2-ok)}.ctl-dot.warn{background:var(--v2-warn)}.ctl-dot.bad{background:var(--v2-bad)}@media (max-width:700px){.ctl-check{flex-wrap:wrap}.ctl-meta{white-space:normal;width:100%;padding-left:var(--v2-s5)}}.ctl-filters{display:flex;gap:var(--v2-s1h);flex-wrap:wrap;margin-bottom:var(--v2-s3)}.ctl-filters button{border:1px solid var(--v2-line);background:none;color:var(--v2-ink);border-radius:999px;padding:var(--v2-s1h) var(--v2-s3);cursor:pointer;font:600 var(--v2-t-body) var(--v2-sans)}.ctl-filters button.on{background:var(--v2-accent-soft);border-color:var(--v2-accent);color:var(--v2-accent-ink,var(--v2-accent))}.ctl-filters i{font-style:normal;opacity:.7;margin-left:var(--v2-s0);font-variant-numeric:tabular-nums}.ctl-empty{padding:var(--v2-s4) var(--v2-s1)}.ctl-incs{display:grid;gap:var(--v2-s2)}.ctl-inc{border:1px solid var(--v2-line);border-radius:12px;overflow:hidden}.ctl-inch{display:flex;align-items:center;gap:var(--v2-s3);width:100%;padding:var(--v2-s3);border:0;background:none;color:var(--v2-ink);text-align:left;cursor:pointer;font-family:var(--v2-sans)}.ctl-inch:hover{background:var(--v2-bg)}.ctl-inch>div{flex:1;min-width:0}.ctl-inch b{display:block;font-size:var(--v2-t-entity);overflow-wrap:anywhere}.ctl-inch small{color:var(--v2-sub);font-size:var(--v2-t-small)}.ctl-sev{width:4px;align-self:stretch;border-radius:4px;background:var(--v2-line)}.ctl-sev.critical{background:var(--v2-bad)}.ctl-sev.error{background:var(--v2-warn)}.ctl-sev.warn{background:var(--v2-accent)}.ctl-incb{padding:var(--v2-s1) var(--v2-s3) var(--v2-s3) var(--v2-s6);display:grid;gap:var(--v2-s2)}.ctl-detail{margin:0;font-size:var(--v2-t-body);color:var(--v2-sub);overflow-wrap:anywhere}.ctl-heal,.ctl-diag{padding:var(--v2-s2) var(--v2-s3);border-radius:10px;background:var(--v2-bg);border:1px solid var(--v2-line)}.ctl-heal b,.ctl-diag b{display:block;font-size:var(--v2-t-small);letter-spacing:.05em;text-transform:uppercase;color:var(--v2-sub);margin-bottom:var(--v2-s1)}.ctl-heal pre,.ctl-stack pre{margin:0;white-space:pre-wrap;font:var(--v2-t-small)/1.5 var(--v2-mono,monospace);overflow-x:auto}.ctl-diag div{font-size:var(--v2-t-body);line-height:1.55}.ctl-stack summary{cursor:pointer;font-size:var(--v2-t-body);color:var(--v2-sub)}.ctl-stack pre{max-height:260px;overflow:auto;padding:var(--v2-s2);background:var(--v2-bg);border-radius:8px;margin-top:var(--v2-s1h)}.ctl-notes{margin:0;font-size:var(--v2-t-body)}.ctl-acts{display:flex;gap:var(--v2-s1h);flex-wrap:wrap}.ctl-log{list-style:none;margin:0;padding:0;max-height:560px;overflow:auto}.ctl-log li{display:flex;gap:var(--v2-s2);align-items:flex-start;padding:var(--v2-s2) 0;border-top:1px solid var(--v2-line);font-size:var(--v2-t-body)}.ctl-log li:first-child{border-top:0}.ctl-log li>div{flex:1;min-width:0;overflow-wrap:anywhere}.ctl-log small{display:block;color:var(--v2-sub);font-size:var(--v2-t-small);margin-top:var(--v2-s0)}.ctl-li{width:18px;text-align:center;flex:0 0 18px}.ctl-log .ctl-dot{margin-top:var(--v2-s1)}.ctl-lnk{border:0;background:none;padding:0;cursor:pointer;font-size:var(--v2-t-small)}/* ══ Guided stage move (pursuit-gates.js gateGuided) ═════════════════ */.pd-modal.gs{width:min(720px,calc(100vw - 32px));max-height:calc(100vh - 40px);display:flex;flex-direction:column}.gs-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--v2-s3);padding:var(--v2-s4) var(--v2-s5) var(--v2-s3);border-bottom:1px solid var(--v2-line)}.gs-head small{font-size:var(--v2-t-small);color:var(--v2-sub)}.gs-head h2{margin:var(--v2-s0) 0 0;font-size:var(--v2-t-say);line-height:1.2}.gs-body-wrap{padding:var(--v2-s4) var(--v2-s5);overflow:auto;flex:1}.gs-body-wrap.ro{opacity:.6;pointer-events:none}.gs-progress{display:flex;align-items:center;gap:var(--v2-s3)}.gs-bar{flex:1;height:8px;border-radius:999px;background:var(--v2-line);overflow:hidden}.gs-bar i{display:block;height:100%;background:var(--v2-ok);border-radius:inherit;transition:width var(--v2-slow) var(--v2-ease)}.gs-progress span{font-size:var(--v2-t-body);font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}.gs-intro{margin:var(--v2-s2) 0 var(--v2-s3);font-size:var(--v2-t-entity);color:var(--v2-sub);line-height:1.5}.gs-sop{border:0;background:none;padding:0;margin-left:var(--v2-s1h);color:var(--v2-accent-ink,var(--v2-accent));font:600 var(--v2-t-body) var(--v2-sans);cursor:pointer;text-decoration:underline}.gs-steps{list-style:none;margin:0;padding:0;display:grid;gap:var(--v2-s2)}.gs-step{display:flex;gap:var(--v2-s3);padding:var(--v2-s3) var(--v2-s3);border:1px solid var(--v2-line);border-radius:12px;background:var(--v2-panel);transition:border-color var(--v2-mid),background var(--v2-mid)}.gs-step.focus{border-color:var(--v2-warn);box-shadow:0 0 0 3px color-mix(in srgb,var(--v2-warn) 25%,transparent)}.gs-step.done{background:color-mix(in srgb,var(--v2-ok) 7%,var(--v2-panel));border-color:color-mix(in srgb,var(--v2-ok) 35%,var(--v2-line))}.gs-n{width:26px;height:26px;flex:0 0 26px;border-radius:50%;display:grid;place-items:center;font:700 var(--v2-t-body) var(--v2-sans);
  background:var(--v2-bg);border:1.5px solid var(--v2-line);color:var(--v2-sub)}.gs-step.done .gs-n{background:var(--v2-ok);border-color:var(--v2-ok);color:#fff}.gs-body{flex:1;min-width:0;display:grid;gap:var(--v2-s1h)}.gs-body>b{font-size:var(--v2-t-entity);line-height:1.35}.gs-step.done .gs-body>b{color:var(--v2-sub)}.gs-own{font-style:normal;font-size:var(--v2-t-label);font-weight:700;padding:var(--v2-s0) var(--v2-s1h);border-radius:999px;background:var(--v2-accent-soft);color:var(--v2-accent-ink,var(--v2-accent));margin-left:var(--v2-s1)}.gs-how{margin:0;font-size:var(--v2-t-body);line-height:1.5;color:var(--v2-sub)}.gs-by{font-size:var(--v2-t-small);color:var(--v2-ok)}.gs-found{font-size:var(--v2-t-body);padding:var(--v2-s1h) var(--v2-s2);border-radius:8px;background:var(--v2-bg);border-left:3px solid var(--v2-accent);overflow-wrap:anywhere}.gs-fields{display:grid;gap:var(--v2-s2)}.gs-fields .pd-gf{margin:0}.gs-fields:not(.multi) .pd-gf>label{display:none}.gs-tick{justify-self:start;border:1px solid var(--v2-line);background:var(--v2-bg);color:var(--v2-ink);border-radius:9px;padding:var(--v2-s1h) var(--v2-s3);font:600 var(--v2-t-body) var(--v2-sans);cursor:pointer}.gs-tick:hover{border-color:var(--v2-ok)}.gs-tick.on{background:none;color:var(--v2-sub);font-weight:500}.gs-lock{margin:0;font-size:var(--v2-t-small);color:var(--v2-sub)}.gs-extra{margin-top:var(--v2-s4)}.gs-extra h3{margin:0 0 var(--v2-s2);font-size:var(--v2-t-small);letter-spacing:.06em;text-transform:uppercase;color:var(--v2-sub)}.gs-help{margin-top:var(--v2-s3);font-size:var(--v2-t-body)}.gs-help summary{cursor:pointer;color:var(--v2-sub)}.gs-help p{margin:var(--v2-s2) 0 var(--v2-s1h);font-weight:600}.gs-help ul{margin:0;padding-left:var(--v2-s4);color:var(--v2-sub)}.gs-help .sope-esc small{color:var(--v2-sub);font-weight:400}/* Pricing analysis — verdict, justification, realism */.prc-verdict{display:grid;gap:var(--v2-s1);padding:var(--v2-s3) var(--v2-s4);border-radius:12px;margin-bottom:var(--v2-s3);border:1px solid var(--v2-line);border-left:5px solid var(--v2-ok);background:color-mix(in srgb,var(--v2-ok) 8%,var(--v2-panel))}.prc-verdict.bid_with_changes{border-left-color:var(--v2-warn);background:color-mix(in srgb,var(--v2-warn) 9%,var(--v2-panel))}.prc-verdict.no_bid{border-left-color:var(--v2-bad);background:color-mix(in srgb,var(--v2-bad) 8%,var(--v2-panel))}.prc-verdict b{font-size:var(--v2-t-title)}.prc-verdict span{font-size:var(--v2-t-body);line-height:1.5}.prc-verdict ul{margin:var(--v2-s1) 0 0;padding-left:var(--v2-s4);font-size:var(--v2-t-body)}.prc-just-h{display:flex;align-items:center;justify-content:space-between;gap:var(--v2-s2);flex-wrap:wrap}.prc-narr{white-space:pre-wrap;font-size:var(--v2-t-body);line-height:1.6;padding:var(--v2-s3) var(--v2-s3);border-radius:10px;background:var(--v2-bg);border:1px solid var(--v2-line);margin-top:var(--v2-s2)}.prc-used td{background:color-mix(in srgb,var(--v2-ok) 8%,transparent)}/* ══ Ask (help-chat.js) inside the chat bubble ═══════════════════════ */.fb-panel.ask{width:min(420px,calc(100vw - 32px))}.fb-tabs{display:flex;gap:var(--v2-s1);flex:1}.fb-tabs button{border:0;background:none;padding:var(--v2-s1h) var(--v2-s2);border-radius:8px;font:600 var(--v2-t-body) var(--v2-sans);color:var(--v2-sub);cursor:pointer}.fb-tabs button.on{background:var(--v2-accent-soft);color:var(--v2-accent-ink,var(--v2-accent))}.hc{display:flex;flex-direction:column;gap:var(--v2-s2);padding:0 var(--v2-s3) var(--v2-s3)}.hc-log{max-height:min(420px,55vh);overflow:auto;display:flex;flex-direction:column;gap:var(--v2-s2);padding:var(--v2-s1) var(--v2-s0)}.hc-hi{display:grid;gap:var(--v2-s1h);padding:var(--v2-s2) var(--v2-s0)}.hc-hi b{font-size:var(--v2-t-entity)}.hc-hi span{font-size:var(--v2-t-body);color:var(--v2-sub)}.hc-starters{display:flex;flex-wrap:wrap;gap:var(--v2-s1h);margin-top:var(--v2-s1)}.hc-starters button{border:1px solid var(--v2-line);background:var(--v2-bg);color:var(--v2-ink);border-radius:999px;padding:var(--v2-s1h) var(--v2-s2);font:var(--v2-t-small) var(--v2-sans);cursor:pointer;text-align:left}.hc-starters button:hover{border-color:var(--v2-accent)}.hc-m{max-width:92%;padding:var(--v2-s2) var(--v2-s3);border-radius:12px;font-size:var(--v2-t-body);line-height:1.5;overflow-wrap:anywhere}.hc-m.user{align-self:flex-end;background:var(--v2-accent);color:#06141b;border-bottom-right-radius:4px}.hc-m.assistant{align-self:flex-start;background:var(--v2-bg);border:1px solid var(--v2-line);border-bottom-left-radius:4px}.hc-m p{margin:0 0 var(--v2-s1h)}.hc-m p:last-child{margin:0}.hc-m ol,.hc-m ul{margin:var(--v2-s1) 0 var(--v2-s1h);padding-left:var(--v2-s4)}.hc-m li{margin:var(--v2-s0) 0}.hc-m code{font:var(--v2-t-small) var(--v2-mono,monospace);background:var(--v2-line);padding:var(--v2-s0) var(--v2-s1);border-radius:4px}.hc-typing{display:flex;gap:var(--v2-s1);padding:var(--v2-s3)}.hc-typing i{width:6px;height:6px;border-radius:50%;background:var(--v2-sub);animation:hcDot 1s infinite}.hc-typing i:nth-child(2){animation-delay:.15s}.hc-typing i:nth-child(3){animation-delay:.3s}@keyframes hcDot{50%{opacity:.25;transform:translateY(-2px)}}.hc-in{display:flex;gap:var(--v2-s1h);align-items:flex-end}.hc-in textarea{flex:1;resize:none;min-height:38px;max-height:120px;padding:var(--v2-s2) var(--v2-s2);border-radius:10px;border:1px solid var(--v2-line);background:var(--v2-bg);color:var(--v2-ink);font:var(--v2-t-entity) var(--v2-sans)}.hc-in .fb-go{width:38px;height:38px;padding:0;flex:0 0 38px}.hc-clear{align-self:flex-start;font-size:var(--v2-t-small)}/* What's new on the Dashboard */.ob-wn{display:grid;gap:var(--v2-s2)}.ob-wnh{display:flex;align-items:center;gap:var(--v2-s2)}.ob-wnh b{font-size:var(--v2-t-title)}.ob-wnh small{color:var(--v2-sub);font-size:var(--v2-t-small)}.ob-wnl{list-style:none;margin:0;padding:0;display:grid;gap:var(--v2-s2);max-height:380px;overflow:auto}.ob-wnl li{padding:var(--v2-s2) var(--v2-s3);border-radius:10px;border:1px solid var(--v2-line);background:var(--v2-bg)}.ob-wnl li.fresh{border-left:3px solid var(--v2-accent)}.ob-wnl li>div{display:flex;justify-content:space-between;gap:var(--v2-s2);align-items:baseline}.ob-wnl li b{font-size:var(--v2-t-entity)}.ob-wnl li small{color:var(--v2-sub);font-size:var(--v2-t-small);white-space:nowrap}.ob-wnl p{margin:var(--v2-s1) 0 0;font-size:var(--v2-t-body);line-height:1.5;color:var(--v2-sub)}.ob-wnl .ob-how{color:var(--v2-ink)}.ob-wnf{display:flex;gap:var(--v2-s3);align-items:center;flex-wrap:wrap}/* ══ Calling → Inbox (inbox.js) ══════════════════════════════════════ */.ibx{display:grid;grid-template-columns:minmax(260px,340px) minmax(0,1fr);gap:var(--v2-s3);min-height:520px}@media (max-width:860px){.ibx{grid-template-columns:1fr}}.ibx-list{display:flex;flex-direction:column;gap:var(--v2-s1h);border:1px solid var(--v2-line);border-radius:14px;background:var(--v2-panel);padding:var(--v2-s2);max-height:72vh;overflow:auto}.ibx-lh{display:flex;justify-content:space-between;gap:var(--v2-s2);align-items:center;flex-wrap:wrap}.ibx-chips{display:flex;gap:var(--v2-s1);flex-wrap:wrap}.ibx-chips button{border:1px solid var(--v2-line);background:none;color:var(--v2-ink);border-radius:999px;padding:var(--v2-s1) var(--v2-s2);font:600 var(--v2-t-small) var(--v2-sans);cursor:pointer}.ibx-chips button.on{background:var(--v2-accent-soft);border-color:var(--v2-accent);color:var(--v2-accent-ink,var(--v2-accent))}.ibx-chips i{font-style:normal;margin-left:var(--v2-s0);font-variant-numeric:tabular-nums}.ibx-sync{font-size:var(--v2-t-label);color:var(--v2-sub)}.ibx-empty{padding:var(--v2-s4) var(--v2-s1h);font-size:var(--v2-t-body);line-height:1.5}.ibx-item{display:grid;gap:var(--v2-s0);text-align:left;border:1px solid transparent;background:none;color:var(--v2-ink);border-radius:10px;padding:var(--v2-s2) var(--v2-s2);cursor:pointer;font-family:var(--v2-sans);position:relative}.ibx-item:hover{background:var(--v2-bg)}.ibx-item.on{background:var(--v2-accent-soft);border-color:var(--v2-accent-line,var(--v2-accent))}.ibx-ir{display:flex;justify-content:space-between;gap:var(--v2-s2)}.ibx-ir b{font-size:var(--v2-t-body);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ibx-item.unread .ibx-ir b{font-weight:800}.ibx-ir small{color:var(--v2-sub);font-size:var(--v2-t-label);white-space:nowrap}.ibx-ip{font-size:var(--v2-t-label);color:var(--v2-accent-ink,var(--v2-accent));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ibx-ip em{color:var(--v2-warn);font-style:normal}.ibx-sn{font-size:var(--v2-t-small);color:var(--v2-sub);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ibx-ic{position:absolute;right:10px;bottom:8px;font-size:var(--v2-t-label);color:var(--v2-sub);display:flex;gap:var(--v2-s1);align-items:center}.ibx-dot{width:8px;height:8px;border-radius:50%;background:var(--v2-accent);display:inline-block}.ibx-none{display:grid;place-content:center;gap:var(--v2-s1h);text-align:center;border:1px dashed var(--v2-line);border-radius:14px;color:var(--v2-sub);padding:var(--v2-s6)}.ibx-none b{color:var(--v2-ink)}.ibx-thread{display:flex;flex-direction:column;border:1px solid var(--v2-line);border-radius:14px;background:var(--v2-panel);max-height:72vh;min-height:520px}.ibx-th{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--v2-s2);padding:var(--v2-s3) var(--v2-s3);border-bottom:1px solid var(--v2-line)}.ibx-th b{display:block;font-size:var(--v2-t-entity)}.ibx-th small{color:var(--v2-sub);font-size:var(--v2-t-small)}.ibx-opp{display:flex;gap:var(--v2-s2);align-items:center;flex-wrap:wrap;padding:var(--v2-s2) var(--v2-s3);font-size:var(--v2-t-small);border-bottom:1px solid var(--v2-line);background:var(--v2-bg)}.ibx-opp select{max-width:260px;padding:var(--v2-s1) var(--v2-s2);border-radius:8px;border:1px solid var(--v2-line);background:var(--v2-panel);color:var(--v2-ink);font:var(--v2-t-small) var(--v2-sans)}.ibx-unfiled{color:var(--v2-warn);font-weight:600}.ibx-tl{flex:1;overflow:auto;padding:var(--v2-s3);display:flex;flex-direction:column;gap:var(--v2-s2)}.ibx-m{max-width:78%;padding:var(--v2-s2) var(--v2-s3);border-radius:12px;font-size:var(--v2-t-body);line-height:1.5;overflow-wrap:anywhere;display:grid;gap:var(--v2-s1)}.ibx-m.in{align-self:flex-start;background:var(--v2-bg);border:1px solid var(--v2-line);border-bottom-left-radius:4px}.ibx-m.out{align-self:flex-end;background:var(--v2-accent-soft);border:1px solid var(--v2-accent-line,var(--v2-accent));border-bottom-right-radius:4px}.ibx-m.sms.out{background:color-mix(in srgb,var(--v2-ok) 14%,var(--v2-panel));border-color:color-mix(in srgb,var(--v2-ok) 40%,var(--v2-line))}.ibx-subj{font-size:var(--v2-t-small)}.ibx-mb{white-space:normal}.ibx-m small{font-size:var(--v2-t-label);color:var(--v2-sub)}.ibx-compose{border-top:1px solid var(--v2-line);padding:var(--v2-s2) var(--v2-s3);display:grid;gap:var(--v2-s2)}.ibx-cr{display:flex;gap:var(--v2-s2);align-items:center;flex-wrap:wrap}.ibx-cr select,.ibx-cr input,.ibx-compose textarea{padding:var(--v2-s2) var(--v2-s2);border-radius:9px;border:1px solid var(--v2-line);background:var(--v2-bg);color:var(--v2-ink);font:var(--v2-t-body) var(--v2-sans)}.ibx-cr input{flex:1;min-width:180px}.ibx-compose textarea{resize:vertical;min-height:70px}.ibx-cf{display:flex;justify-content:space-between;align-items:center;gap:var(--v2-s2);flex-wrap:wrap}.ig-feed{display:inline-flex;align-items:center;gap:var(--v2-s1h);font-size:var(--v2-t-small);color:var(--v2-sub);cursor:pointer}.ig-feed input{accent-color:var(--v2-accent)}/* Account menu (shell-nav.js shellWho) — with the owner's "See the app as…" */.uav-menu{position:fixed;top:58px;right:16px;z-index:8000;width:min(300px,calc(100vw - 32px));background:var(--v2-panel);border:1px solid var(--v2-line);border-radius:14px;box-shadow:0 18px 44px rgba(0,0,0,.3);padding:var(--v2-s2);display:grid;gap:var(--v2-s0)}.uav-me{padding:var(--v2-s2) var(--v2-s2) var(--v2-s2);border-bottom:1px solid var(--v2-line);margin-bottom:var(--v2-s1)}.uav-me b{display:block;font-size:var(--v2-t-entity)}.uav-me small{color:var(--v2-sub);font-size:var(--v2-t-small)}.uav-h{padding:var(--v2-s2) var(--v2-s2) var(--v2-s0);font-size:var(--v2-t-label);font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--v2-sub)}.uav-menu button{display:flex;justify-content:space-between;align-items:center;gap:var(--v2-s2);width:100%;text-align:left;border:0;background:none;color:var(--v2-ink);padding:var(--v2-s2) var(--v2-s2);border-radius:9px;cursor:pointer;font:var(--v2-t-body) var(--v2-sans)}.uav-menu button:hover{background:var(--v2-bg)}.uav-menu button small{color:var(--v2-sub);font-size:var(--v2-t-small)}.uav-dim{display:block;padding:var(--v2-s1) var(--v2-s2) var(--v2-s1h);color:var(--v2-sub);font-size:var(--v2-t-small);line-height:1.4}.uav-out{border-top:1px solid var(--v2-line)!important;border-radius:0 0 9px 9px!important;margin-top:var(--v2-s1);color:var(--v2-bad)!important}.uav-exit{background:var(--v2-warn-soft)!important;font-weight:600}/* Integrations → AI services → free services & fallback order */.ai-order{display:grid;gap:var(--v2-s2);margin:var(--v2-s3) 0;padding:var(--v2-s3) var(--v2-s3);border-radius:12px;background:var(--v2-bg);border:1px solid var(--v2-line)}.ai-order div{display:grid;gap:var(--v2-s0);font-size:var(--v2-t-body)}.ai-order small{color:var(--v2-sub)}.ai-order span{font-size:var(--v2-t-body);color:var(--v2-ink);overflow-wrap:anywhere}.ai-sets{display:grid;gap:var(--v2-s2);margin-bottom:var(--v2-s3)}.ai-sets label{display:flex;gap:var(--v2-s2);align-items:flex-start;font-size:var(--v2-t-body);line-height:1.45;cursor:pointer}.ai-sets input{margin-top:var(--v2-s0);accent-color:var(--v2-accent)}.ai-sens{padding-top:var(--v2-s2);border-top:1px solid var(--v2-line)}







.ai-chip{font-size:var(--v2-t-label);font-weight:600;padding:var(--v2-s0) var(--v2-s2);border-radius:999px;white-space:nowrap}.ai-chip.ok{background:color-mix(in srgb,var(--v2-ok) 14%,transparent);color:var(--v2-ok)}.ai-chip.warn{background:var(--v2-warn-soft);color:var(--v2-warn)}

/* ══ Integrations redesign — status strip, one key field, LLM cards ══ */.ig-strip{display:flex;align-items:flex-start;gap:var(--v2-s3);flex-wrap:wrap;padding:var(--v2-s3) var(--v2-s4);margin-bottom:var(--v2-s3);border:1px solid var(--v2-line);border-radius:14px;background:var(--v2-panel)}.ig-strip>svg{width:20px;height:20px;flex:0 0 20px;margin-top:var(--v2-s0);color:var(--v2-sub)}.ig-strip>div:first-of-type{flex:1;min-width:240px}.ig-strip b{display:block;font-size:var(--v2-t-entity)}.ig-strip span{font-size:var(--v2-t-body);color:var(--v2-sub);line-height:1.5}.ig-chips{display:flex;gap:var(--v2-s1h);flex-wrap:wrap;align-items:center}.ig-chips span{font-size:var(--v2-t-small);font-weight:700;padding:var(--v2-s1) var(--v2-s2);border-radius:8px;border:1px solid var(--v2-line);color:var(--v2-ink);white-space:nowrap}.ig-chips .ok{background:color-mix(in srgb,var(--v2-ok) 15%,transparent);border-color:transparent;color:var(--v2-ok)}.ig-chips .bad{background:var(--v2-bad);border-color:transparent;color:#fff}.kf{display:grid;gap:var(--v2-s1h)}.kf-l{font-size:var(--v2-t-body);line-height:1.45}.kf-l b{font-weight:700}.kf-l span{color:var(--v2-sub)}.kf-l code{font:var(--v2-t-small) var(--v2-mono,monospace);color:var(--v2-ink)}.kf-in{position:relative}.kf-in input{width:100%;box-sizing:border-box;padding:var(--v2-s2) var(--v2-s6) var(--v2-s2) var(--v2-s3);border-radius:10px;border:1px solid var(--v2-line);background:var(--v2-bg);color:var(--v2-ink);font:var(--v2-t-body) var(--v2-mono,monospace)}.kf-in input::placeholder{font-family:var(--v2-mono,monospace);color:var(--v2-faint,var(--v2-sub))}.kf-in input:focus{outline:2px solid var(--v2-accent);outline-offset:1px}.kf-eye{position:absolute;right:6px;top:50%;transform:translateY(-50%);width:30px;height:30px;border:0;background:none;color:var(--v2-sub);cursor:pointer;display:grid;place-items:center;border-radius:8px}.kf-eye:hover{background:var(--v2-line);color:var(--v2-ink)}.kf-eye svg{width:17px;height:17px}.kf-row{display:flex;align-items:center;gap:var(--v2-s2)}.kf-row .sp{flex:1}.kf-rm{border:0;background:none;padding:var(--v2-s1) var(--v2-s0);cursor:pointer;color:var(--v2-bad);font:600 var(--v2-t-body) var(--v2-sans)}.kf-rm:hover{text-decoration:underline}.kf-rm.quiet{color:var(--v2-sub);font-weight:500;font-size:var(--v2-t-small)}.kf-last{font-size:var(--v2-t-small);color:var(--v2-sub);overflow-wrap:anywhere}.kf-last.ok{color:var(--v2-ok)}.kf-last.bad{color:var(--v2-bad)}.ig-sec{display:grid;gap:var(--v2-s3)}.ig-sech{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--v2-s3);flex-wrap:wrap;padding-bottom:var(--v2-s2);border-bottom:1px solid var(--v2-line)}.ig-sech h2{margin:0 0 var(--v2-s1);font-size:var(--v2-t-say)}.ig-sech p{margin:0;font-size:var(--v2-t-entity);color:var(--v2-sub);max-width:80ch;line-height:1.5}.ig-h3{margin:var(--v2-s3) 0 0;font-size:var(--v2-t-entity);display:flex;gap:var(--v2-s2);align-items:baseline;flex-wrap:wrap}.ig-h3 small{font-size:var(--v2-t-small);font-weight:400;color:var(--v2-sub)}.llm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:var(--v2-s3)}.llm{display:flex;flex-direction:column;gap:var(--v2-s2);padding:var(--v2-s4);border:1px solid var(--v2-line);border-radius:14px;background:var(--v2-panel)}.llm.ok{border-color:color-mix(in srgb,var(--v2-ok) 40%,var(--v2-line))}.llm.bad{border-color:color-mix(in srgb,var(--v2-bad) 45%,var(--v2-line))}.llm header{display:flex;align-items:center;gap:var(--v2-s2);flex-wrap:wrap}.llm header b{font-size:var(--v2-t-entity)}.llm-dot{width:8px;height:8px;border-radius:50%;background:var(--v2-line);flex:0 0 8px}.llm-dot.ok{background:var(--v2-ok)}.llm-dot.bad{background:var(--v2-bad)}.llm-dot.wait{background:var(--v2-warn)}.llm-logo{width:34px;height:34px;flex:0 0 34px;border-radius:10px;display:grid;place-items:center;font:800 var(--v2-t-entity) var(--v2-sans);color:#fff;background:var(--tc,#475569)}.llm-get{margin-left:auto;display:inline-flex;align-items:center;gap:var(--v2-s1);font-size:var(--v2-t-small);color:var(--v2-sub);text-decoration:none;white-space:nowrap}.llm-get:hover{color:var(--v2-accent-ink,var(--v2-accent))}.llm-get svg{width:13px;height:13px}.llm-note{margin:0;font-size:var(--v2-t-small);line-height:1.6;color:var(--v2-sub)}.llm-note em{font-style:normal;opacity:.85}.llm-note .ai-chip{margin-right:var(--v2-s1)}.ai-chip.free{background:var(--v2-accent-soft);color:var(--v2-accent-ink,var(--v2-accent))}.ai-chip:not(.ok):not(.warn):not(.free){background:var(--v2-line);color:var(--v2-ink)}.llm-warn{margin:0;font-size:var(--v2-t-small);padding:var(--v2-s2) var(--v2-s2);border-radius:8px;background:var(--v2-warn-soft);color:var(--v2-ink)}.llm footer{margin-top:auto;padding-top:var(--v2-s2);border-top:1px solid var(--v2-line)}.ai-chain{display:flex;gap:var(--v2-s1h);flex-wrap:wrap;margin-top:var(--v2-s1)}.ai-chain span{font-size:var(--v2-t-small);padding:var(--v2-s0) var(--v2-s2);border-radius:999px;background:var(--v2-panel);border:1px solid var(--v2-line)}.ai-tasks td:first-child b{display:block;font-size:var(--v2-t-entity)}.ai-tasks td small{display:block;color:var(--v2-sub);font-size:var(--v2-t-small)}.ai-tasks select{min-width:230px;padding:var(--v2-s2) var(--v2-s2);border-radius:9px;border:1px solid var(--v2-line);background:var(--v2-bg);color:var(--v2-ink);font:var(--v2-t-body) var(--v2-sans)}.ai-tasks tr.fixed td{opacity:.8}/* ══ User management (Settings → Team & people → Directory) ══════════ */.um{display:grid;gap:var(--v2-s3)}.um-head{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--v2-s3);flex-wrap:wrap}.um-head h2{margin:0 0 var(--v2-s0);font-size:24px}.um-head p{margin:0;color:var(--v2-sub);font-size:var(--v2-t-entity)}.um-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:var(--v2-s2)}.um-tile{padding:var(--v2-s3) var(--v2-s4);border:1px solid var(--v2-line);border-radius:12px;background:var(--v2-panel);display:grid;gap:var(--v2-s2)}.um-tile>div{display:flex;justify-content:space-between;align-items:center;gap:var(--v2-s2)}.um-tile span{font-size:var(--v2-t-body);font-weight:600}.um-tile svg{width:17px;height:17px;color:var(--v2-sub)}.um-tile b{font:700 26px/1 var(--v2-sans);font-variant-numeric:tabular-nums}.um-tile.warn{border-color:color-mix(in srgb,var(--v2-warn) 55%,var(--v2-line))}.um-tile.warn b,.um-tile.warn svg{color:var(--v2-warn)}.um-tile.acc{border-color:var(--v2-accent-line,var(--v2-accent))}.um-tile.acc svg{color:var(--v2-accent-ink,var(--v2-accent))}.um-cardh b{display:block;font-size:var(--v2-t-entity)}.um-cardh span{font-size:var(--v2-t-body);color:var(--v2-sub)}.um-filters{display:flex;gap:var(--v2-s2);margin:var(--v2-s3) 0;flex-wrap:wrap}.um-search{flex:1;min-width:220px;position:relative}.um-search svg{position:absolute;left:12px;top:50%;transform:translateY(-50%);width:16px;height:16px;color:var(--v2-sub)}.um-search input,.um-filters select,.um-acts select{width:100%;box-sizing:border-box;padding:var(--v2-s2) var(--v2-s3);border-radius:10px;border:1px solid var(--v2-line);background:var(--v2-bg);color:var(--v2-ink);font:var(--v2-t-entity) var(--v2-sans)}.um-search input{padding-left:var(--v2-s6)}.um-filters select{width:auto;min-width:170px}.um-table td{vertical-align:middle}.um-email{color:var(--v2-sub);overflow-wrap:anywhere}.um-date{color:var(--v2-sub);white-space:nowrap;font-variant-numeric:tabular-nums}.um-role{display:inline-block;font-size:var(--v2-t-small);font-weight:700;padding:var(--v2-s0) var(--v2-s2);border-radius:7px;background:var(--v2-line);color:var(--v2-ink);text-transform:lowercase}.um-role.owner{background:#7c3aed;color:#fff}.um-role.manager{background:var(--v2-ink);color:var(--v2-panel)}.um-role.member{background:color-mix(in srgb,var(--v2-accent) 80%,#0b6b63);color:#06141b}.um-acts{display:flex;gap:var(--v2-s1h);align-items:center}.um-acts select{width:auto;min-width:150px;padding:var(--v2-s2) var(--v2-s2)}.um-menu{right:0;min-width:240px}.um-menu hr{border:0;border-top:1px solid var(--v2-line);margin:var(--v2-s1) 0}.um-menu button.bad{color:var(--v2-bad)}.um-editrow td{background:var(--v2-bg)}.um-edit{display:flex;gap:var(--v2-s2);flex-wrap:wrap;align-items:flex-end;padding:var(--v2-s1) 0}.um-edit label{display:grid;gap:var(--v2-s1);font-size:var(--v2-t-label);font-weight:700;color:var(--v2-sub);text-transform:uppercase;letter-spacing:.04em;flex:1;min-width:170px}.um-edit label small{text-transform:none;letter-spacing:0;font-weight:400}.um-edit input{padding:var(--v2-s2) var(--v2-s2);border-radius:8px;border:1px solid var(--v2-line);background:var(--v2-panel);color:var(--v2-ink);font:var(--v2-t-body) var(--v2-sans)}.um-edit>div{display:flex;gap:var(--v2-s1h)}.um-none{padding:var(--v2-s4)}@media (max-width:760px){.um-table th:nth-child(5),.um-table td:nth-child(5){display:none}}.um-tile b.txt{font-size:var(--v2-t-entity);line-height:1.25;font-weight:700;overflow-wrap:anywhere}.um .um-table td small{display:block;color:var(--v2-sub);font-size:var(--v2-t-small)}/* Inbox: subjects, quote tags, attachments · Bid tracker: the email trail */.ibx-sj{font-size:var(--v2-t-small);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-right:var(--v2-s6)}.ibx-q,.ibx-qflag{font-style:normal;font-size:var(--v2-t-label);font-weight:800;letter-spacing:.04em;text-transform:uppercase;padding:var(--v2-s0) var(--v2-s1h);border-radius:5px;background:var(--v2-ok);color:#fff}.ibx-qflag{justify-self:start;font-size:var(--v2-t-label);text-transform:none;letter-spacing:0;padding:var(--v2-s0) var(--v2-s2)}.ibx-files{display:flex;gap:var(--v2-s1h);flex-wrap:wrap}.ibx-files a{display:inline-flex;align-items:center;gap:var(--v2-s1h);padding:var(--v2-s1h) var(--v2-s2);border-radius:9px;border:1px solid var(--v2-line);background:var(--v2-panel);color:var(--v2-ink);text-decoration:none;font-size:var(--v2-t-small);font-weight:600}.ibx-files a:hover{border-color:var(--v2-accent)}.ibx-files small{color:var(--v2-sub);font-weight:400}.ibx-m.new{box-shadow:0 0 0 2px var(--v2-accent)}.bt-mail{display:flex;gap:var(--v2-s2);align-items:center;flex-wrap:wrap;font-size:var(--v2-t-small);margin-bottom:var(--v2-s1h)}.bt-mail.got span:first-child{font-weight:600}.bt-ok{color:var(--v2-ok);font-weight:600}.bt-callrow{display:flex;align-items:center;gap:var(--v2-s1h)}.bt-callrow span{color:var(--v2-sub)}.bt-stats small{font-weight:400;color:var(--v2-sub);margin-left:var(--v2-s1)}/* ── Intel ─────────────────────────────────────────────────────────── */body.v2 .intel-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:var(--v2-s3);margin:var(--v2-s3) 0}body.v2 .intel-tiles > *{display:flex;flex-direction:column;gap:var(--v2-s0);padding:var(--v2-s3);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-surface);background:var(--v2-panel);color:var(--v2-ink);text-decoration:none;min-width:0}body.v2 .intel-tiles a:hover{border-color:var(--v2-accent)}body.v2 .intel-tiles b{font-family:var(--v2-display);font-size:var(--v2-t-say);line-height:1.2;overflow-wrap:anywhere}body.v2 .intel-tiles span{font-size:var(--v2-t-small);color:var(--v2-sub)}body.v2 .intel-meta{font-size:var(--v2-t-small);color:var(--v2-sub);margin:var(--v2-s2) 0 var(--v2-s3);line-height:1.5}body.v2 .intel-sec{margin:var(--v2-s4) 0 0;min-width:0}body.v2 .intel-sec > header h3{margin:0;font-family:var(--v2-display);font-size:var(--v2-t-say);color:var(--v2-ink)}body.v2 .intel-sec > header p{margin:var(--v2-s1) 0 var(--v2-s3);font-size:var(--v2-t-small);color:var(--v2-sub);max-width:78ch}/* The list runs the length of the page and the PAGE scrolls — not a 560px
   window with its own scrollbar inside it. Sideways only, for a wide table
   on a narrow screen. */body.v2 .intel-scroll{overflow-x:auto;border:1px solid var(--v2-line);border-radius:var(--v2-r-surface)}body.v2 .intel-table{min-width:760px}body.v2 .intel-table th{background:var(--v2-panel)}body.v2 .intel-table .r{text-align:right}body.v2 .intel-table .nw{white-space:nowrap}body.v2 .intel-click{cursor:pointer}body.v2 .intel-sort{border:0;background:none;color:inherit;font:inherit;cursor:pointer;padding:0}body.v2 .intel-sort.on{color:var(--v2-accent-ink);font-weight:700}body.v2 .intel-bar{height:4px;border-radius:var(--v2-r-full);background:var(--v2-line2);margin-top:var(--v2-s1h);overflow:hidden}body.v2 .intel-bar i{display:block;height:100%;background:var(--v2-accent);border-radius:var(--v2-r-full)}body.v2 .intel-cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--v2-s4)}@media (max-width:900px){body.v2 .intel-cols{grid-template-columns:1fr}}body.v2 .intel-rows{display:flex;flex-direction:column;gap:var(--v2-s3)}body.v2 .intel-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--v2-s0) var(--v2-s3);align-items:baseline}body.v2 .intel-row .intel-bar{grid-column:1 / -1;margin-top:var(--v2-s0)}body.v2 .intel-rl{display:flex;gap:var(--v2-s2);align-items:baseline;flex-wrap:wrap;min-width:0;font-size:var(--v2-t-body)}body.v2 .intel-rl b{font-weight:600;color:var(--v2-ink);overflow-wrap:anywhere}body.v2 .intel-rv{display:flex;gap:var(--v2-s2);align-items:baseline;font-family:var(--v2-mono);font-size:var(--v2-t-body);color:var(--v2-ink);white-space:nowrap}body.v2 .intel-row.hot .intel-bar i{background:var(--v2-ink)}body.v2 .intel-check{display:flex;gap:var(--v2-s1h);align-items:center;font-size:var(--v2-t-small);color:var(--v2-sub)}body.v2 .intel-table .faint,body.v2 .intel-rl .faint,body.v2 .intel-rv .faint{color:var(--v2-sub);font-size:var(--v2-t-small);font-weight:400}body.v2 .intel-tiles > button{cursor:pointer;text-align:left;font:inherit}body.v2 .intel-tiles > button strong{font-size:var(--v2-t-body);font-weight:600;color:var(--v2-ink)}body.v2 .intel-tiles > button:hover{border-color:var(--v2-accent)}body.v2 .intel-tiles > button.on{border-color:var(--v2-accent);background:var(--v2-accent-soft);box-shadow:inset 0 -3px 0 var(--v2-accent)}/* ── the company card ──────────────────────────────────────────────── */body.v2 .co-card{border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel);padding:var(--v2-s4);max-width:900px}body.v2 .co-card.compact{padding:var(--v2-s3);margin-top:var(--v2-s3);max-width:none}body.v2 .co-card > header{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--v2-s3);margin-bottom:var(--v2-s3)}body.v2 .co-card h3{margin:0;font-family:var(--v2-display);font-size:var(--v2-t-say);color:var(--v2-ink)}body.v2 .co-card.compact h3{font-size:var(--v2-t-body)}body.v2 .co-card header p{margin:var(--v2-s1) 0 0;font-size:var(--v2-t-small);color:var(--v2-sub)}body.v2 .co-card dl{margin:0;display:flex;flex-direction:column}body.v2 .co-row{display:grid;grid-template-columns:minmax(150px,220px) minmax(0,1fr);gap:var(--v2-s2) var(--v2-s3);padding:var(--v2-s2) 0;border-top:1px solid var(--v2-line2)}body.v2 .co-card.compact .co-row{grid-template-columns:minmax(110px,150px) minmax(0,1fr);padding:var(--v2-s1h) 0}body.v2 .co-row dt{font-size:var(--v2-t-small);color:var(--v2-sub);font-weight:600;display:flex;flex-direction:column;gap:var(--v2-s0)}body.v2 .co-row dt small{font-weight:400;color:var(--v2-faint);line-height:1.4}body.v2 .co-row dd{margin:0;display:flex;gap:var(--v2-s2);align-items:flex-start;justify-content:space-between;min-width:0}body.v2 .co-row dd b{font-weight:600;color:var(--v2-ink);overflow-wrap:anywhere;font-size:var(--v2-t-body)}@media (max-width:640px){body.v2 .co-row{grid-template-columns:1fr}}/* ── Capability statement on demand (pursuit-capstmt.js) ─────────────────
   Rows follow the DESIGN.md row anatomy: avatar · identity · state. The
   accent is the one next action (the step's Next / Build button). */.cs-slide .pd-subtabs2{margin-bottom:var(--v2-s3)}.cs-step{display:flex;flex-direction:column;gap:var(--v2-s1h)}.cs-row{display:flex;align-items:center;gap:var(--v2-s2);padding:var(--v2-s2) var(--v2-s2);border:1px solid var(--v2-line);border-radius:8px;background:var(--v2-panel);cursor:pointer}.cs-row.on{border-color:var(--v2-accent)}.cs-row input{flex:0 0 auto;margin:0}.cs-av{flex:0 0 28px;width:28px;height:28px;border-radius:999px;background:var(--v2-bg);border:1px solid var(--v2-line);display:grid;place-items:center;font-size:var(--v2-t-label);font-weight:700;color:var(--v2-sub)}.cs-id{display:flex;flex-direction:column;min-width:0;flex:1}.cs-id b{font-size:var(--v2-t-body);color:var(--v2-ink);font-weight:600}.cs-id small{font-size:var(--t-sm);color:var(--v2-sub);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cs-ord{display:flex;align-items:center;gap:var(--v2-s1);flex:0 0 auto}.cs-ord i{font-style:normal;font-size:var(--v2-t-label);font-weight:700;color:var(--v2-accent);min-width:14px;text-align:center}.cs-dir{display:flex;flex-wrap:wrap;gap:var(--v2-s1h);align-items:center;padding:var(--v2-s2);border:1px dashed var(--v2-line);border-radius:8px}.cs-dir input{flex-basis:100%;border:1px solid var(--v2-line);border-radius:6px;padding:var(--v2-s1h) var(--v2-s2);font:inherit;background:var(--v2-panel);color:var(--v2-ink)}.cs-sec{border:1px solid var(--v2-line);border-radius:8px;padding:var(--v2-s2) var(--v2-s2);background:var(--v2-panel)}.cs-sech{display:flex;align-items:center;justify-content:space-between;gap:var(--v2-s2);margin-bottom:var(--v2-s1h)}.cs-sech b{font-size:var(--v2-t-body);color:var(--v2-ink)}.cs-assets,.cs-kit{display:flex;flex-direction:column;gap:var(--v2-s1h)}.cs-asset{display:flex;align-items:center;gap:var(--v2-s2);padding:var(--v2-s1h) var(--v2-s2);border:1px solid var(--v2-line);border-radius:8px;background:var(--v2-panel);text-decoration:none;color:inherit}.cs-asset img{width:44px;height:32px;object-fit:contain;background:#fff;border:1px solid var(--v2-line);border-radius:4px;flex:0 0 auto}.cs-asset span{display:flex;flex-direction:column;min-width:0;flex:1}.cs-asset b{font-size:var(--t-sm);color:var(--v2-ink)}.cs-asset small{font-size:var(--v2-t-label);text-transform:none;letter-spacing:0;color:var(--v2-sub);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cs-upload{display:flex;flex-wrap:wrap;gap:var(--v2-s1h);align-items:center;margin-top:var(--v2-s1)}.cs-upload .pd-hint{flex-basis:100%;margin:0}.cs-color{display:flex;gap:var(--v2-s1h);align-items:center}.cs-color input[type=color]{width:36px;height:30px;padding:0;border:1px solid var(--v2-line);border-radius:6px;background:none}.cs-pform{display:flex;flex-direction:column;gap:var(--v2-s2);margin-top:var(--v2-s1h)}.cs-pform .st-f{display:flex;flex-direction:column;gap:var(--v2-s0)}.cs-pform .st-f>span{font-size:var(--v2-t-label);font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--v2-sub)}.cs-pform input,.cs-pform textarea{width:100%;border:1px solid var(--v2-line);border-radius:6px;padding:var(--v2-s1h) var(--v2-s2);font:inherit;font-size:var(--v2-t-body);background:var(--v2-panel);color:var(--v2-ink)}.cs-tile{border-color:var(--v2-accent)}

/* ── What's new, on the GovCon landing rooms (Action Center, My Work) ──
   Drawn only while something is unread;"Got it" takes it away. */
.ob-wn-room{margin:0 0 var(--v2-s4)}.ob-wn-room .ob-wn{border:1px solid var(--v2-line);border-radius:10px;padding:var(--v2-s3) var(--v2-s4);background:var(--v2-panel)}/* The closed-stage toggle is a chip, not a <details> — a chip that can be pressed. */body.v2 .ops-closed-t{color:var(--v2-sub)}body.v2 .ops-closed-t b{font-family:var(--v2-mono);margin-left:var(--v2-s0)}.cs-pprow{display:grid;grid-template-columns:1.2fr 1fr .8fr .8fr auto;gap:var(--v2-s1h);align-items:center;margin-bottom:var(--v2-s1h)}.cs-pprow input.wide{grid-column:1/5}.cs-pprow button{grid-column:5;grid-row:1/3}.cs-sam{display:flex;gap:var(--v2-s1h);align-items:center;flex-wrap:wrap}.cs-sam input{flex:0 1 180px;border:1px solid var(--v2-line);border-radius:6px;padding:var(--v2-s1h) var(--v2-s2);font:inherit;font-family:var(--v2-mono);background:var(--v2-panel);color:var(--v2-ink);text-transform:uppercase}.cs-sam .pd-hint{flex-basis:100%;margin:0}.cs-doc{flex:0 0 44px;height:32px;display:grid;place-items:center;border:1px solid var(--v2-line);border-radius:4px;font-size:var(--v2-t-label);font-weight:700;color:var(--v2-sub);background:var(--v2-bg)}/* ── Owner sign-off: a member moves on, the owner confirms or sends back ── */.pd-review{font-size:var(--v2-t-label);font-weight:700;padding:var(--v2-s0) var(--v2-s1h);border-radius:999px;background:var(--v2-warn-soft);color:var(--v2-warn);white-space:nowrap}.gs-confirm{display:flex;gap:var(--v2-s2);align-items:center;flex-wrap:wrap}.gs-step .gs-tick.pend{border-style:dashed;opacity:.9}.sope-reviews{margin-top:var(--v2-s2)}.sope-review{display:flex;justify-content:space-between;gap:var(--v2-s2);align-items:center;padding:var(--v2-s2) var(--v2-s2);margin:var(--v2-s1h) 0;border:1px solid var(--v2-warn,var(--v2-line));border-radius:8px;background:var(--v2-warn-soft);font-size:var(--t-sm)}.sope-review i{display:block;color:var(--v2-sub);font-style:normal;font-size:var(--v2-t-label);margin-top:var(--v2-s0)}.sope-review small{color:var(--v2-sub)}.sope-review.done{background:transparent;border-color:var(--v2-line)}/* paste-from-the-portal box (Documents) and the followers list (Subs & quotes) */body.v2 .pd-paste{display:flex;flex-direction:column;gap:var(--v2-s2);margin:var(--v2-s3) 0;padding:var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel)}body.v2 .pd-paste textarea,body.v2 .pd-paste input,body.v2 .pd-paste select{font:inherit;border:1px solid var(--v2-line);border-radius:var(--v2-r-control);padding:var(--v2-s2) var(--v2-s2);background:var(--v2-bg);color:var(--v2-ink);min-width:0}body.v2 .pd-paste-row{display:flex;gap:var(--v2-s2);align-items:center;flex-wrap:wrap}body.v2 .pd-paste-row input{flex:1 1 240px}body.v2 .pd-fol{margin-top:var(--v2-s5)}body.v2 .pd-fol-list{display:flex;flex-direction:column;border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);overflow:hidden}body.v2 .pd-fol-row{display:flex;justify-content:space-between;gap:var(--v2-s3);align-items:center;padding:var(--v2-s2) var(--v2-s3);border-top:1px solid var(--v2-line2)}body.v2 .pd-fol-row:first-child{border-top:0}body.v2 .pd-fol-row b{color:var(--v2-ink)}body.v2 .pd-fol-acts{display:flex;gap:var(--v2-s1h);align-items:center;flex-shrink:0}/* who is working it — a coloured edge and a name on the card, a picker in the header */body.v2 .pd-card[data-who]{border-left:4px solid var(--who);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--who) 35%, transparent)}body.v2 .pd-who{display:inline-flex;align-items:center;gap:var(--v2-s1);font-size:var(--v2-t-label);font-weight:700;letter-spacing:.02em;padding:var(--v2-s0) var(--v2-s2);border-radius:var(--v2-r-full);
  color:var(--who);background:color-mix(in srgb, var(--who) 14%, var(--v2-panel));border:1px solid color-mix(in srgb, var(--who) 45%, transparent);margin-left:auto}body.v2 .pd-whopick{display:inline-flex;align-items:center;gap:var(--v2-s2);padding:var(--v2-s1) var(--v2-s2) var(--v2-s1) var(--v2-s2);border:1px solid var(--v2-line);border-radius:var(--v2-r-full);background:var(--v2-panel);font-size:var(--v2-t-small);color:var(--v2-sub)}body.v2 .pd-whopick i{width:10px;height:10px;border-radius:50%;background:var(--who);flex-shrink:0}body.v2 .pd-whopick select{font:inherit;font-weight:600;color:var(--v2-ink);border:0;background:transparent;padding:0;max-width:180px}body.v2 .pd-whopick b{color:var(--v2-ink)}body.v2 .v2-fold{display:inline-flex;align-items:center;gap:var(--v2-s1h);margin:var(--v2-s1) 0 var(--v2-s2);padding:var(--v2-s1) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-full);
  background:var(--v2-panel);color:var(--v2-accent-ink);font:inherit;font-size:var(--v2-t-small);font-weight:600;cursor:pointer}body.v2 .v2-fold:hover{border-color:var(--v2-accent)}body.v2 .v2-briefing{margin-top:var(--v2-s2)}body.v2 .clip-note .pd-btn{margin-left:var(--v2-s2)}body.v2 .clip-box{display:flex;gap:var(--v2-s3);align-items:center;flex-wrap:wrap;margin-top:var(--v2-s2)}
body.v2 .clip-box span{font-size:var(--v2-t-small);color:var(--v2-sub);max-width:60ch}body.v2 .clip-steps{margin:var(--v2-s2) 0;padding-left:var(--v2-s4);display:flex;flex-direction:column;gap:var(--v2-s1h);font-size:var(--v2-t-body);color:var(--v2-ink)}body.v2 .clip-token{font-family:var(--v2-mono);background:var(--v2-bg);border:1px solid var(--v2-line);border-radius:6px;padding:var(--v2-s0) var(--v2-s1h);user-select:all;overflow-wrap:anywhere}/* ── the red card: five days or less, and not yet at Proposal Drafting ── */body.v2 .pd-card.pd-urgent{background:color-mix(in srgb, var(--v2-bad) 16%, var(--v2-panel));border-color:var(--v2-bad);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--v2-bad) 55%, transparent)}body.v2 .pd-card.pd-urgent[data-who]{border-left-color:var(--v2-bad)}body.v2 .pd-card.pd-urgent .pd-card-t{color:var(--v2-bad)}body.v2 .pd-card.pd-urgent::before{display:none}/* ── R30 · the simplified desk: Today, Find, six lanes, three card tabs ── */body.v2 .today-nums{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--v2-s2);margin:0 0 var(--v2-s4)}body.v2 .today-num{display:flex;flex-direction:column;align-items:flex-start;gap:var(--v2-s0);padding:var(--v2-s3) var(--v2-s3);border:1px solid var(--v2-line);border-radius:12px;background:var(--v2-panel);color:var(--v2-ink);cursor:pointer;text-align:left}body.v2 .today-num b{font-size:26px;line-height:1;font-variant-numeric:tabular-nums}body.v2 .today-num span{font-size:var(--v2-t-small);color:var(--v2-sub)}body.v2 .today-num.warn{border-color:var(--v2-warn)}body.v2 .today-num.hot{border-color:var(--v2-bad);background:color-mix(in srgb,var(--v2-bad) 10%,var(--v2-panel))}body.v2 .today-sec{margin:0 0 var(--v2-s4)}body.v2 .today-sec h3{font-size:var(--v2-t-entity);margin:0 0 var(--v2-s2);display:flex;gap:var(--v2-s2);align-items:baseline}body.v2 .today-row{display:flex;align-items:center;gap:var(--v2-s2);padding:var(--v2-s2) var(--v2-s2) var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-left:4px solid var(--v2-line);border-radius:10px;background:var(--v2-panel);margin:0 0 var(--v2-s1h)}body.v2 .today-row[data-stage]{border-left-color:var(--stage, var(--v2-accent))}body.v2 .today-row.red{background:color-mix(in srgb,var(--v2-bad) 12%,var(--v2-panel));border-color:var(--v2-bad)}body.v2 .today-open{flex:1;display:flex;flex-direction:column;gap:var(--v2-s0);text-align:left;background:none;border:0;color:var(--v2-ink);cursor:pointer;padding:0;min-width:0}body.v2 .today-open b{font-size:var(--v2-t-entity)}body.v2 .today-open span{font-size:var(--v2-t-small);color:var(--v2-sub)}body.v2 .today-open small{font-size:var(--v2-t-small);color:var(--v2-faint)}body.v2 .today-red{color:var(--v2-bad);font-weight:600;font-style:normal}body.v2 .today-who{font-style:normal;font-weight:600;color:color-mix(in srgb,var(--who,var(--v2-sub)) 55%,var(--v2-ink))}
/* the inline style="--who:…" on a card or row always wins;this is the no-name default */
body.v2 .pd-card,body.v2 .today-row,body.v2 .pd-whopick{--who:var(--v2-line)}body.v2 .today-zero{color:var(--v2-faint);font-size:var(--v2-t-body);margin:0}body.v2 .today-sub{margin:0 0 var(--v2-s3)}body.v2 .today-foot{margin-top:var(--v2-s4)}body.v2 .pd-roomtabs{margin:0 0 var(--v2-s3)}body.v2 .find-bar{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--v2-s3);margin:0 0 var(--v2-s2)}body.v2 .find-bar .pd-srcf.grow{flex:1 1 240px}body.v2 .find-bar .pd-srcf.grow input{width:100%}body.v2 .find-srcs{display:flex;gap:var(--v2-s1h);flex-wrap:wrap}body.v2 .find-src{cursor:pointer;opacity:.55}body.v2 .find-src.on{opacity:1;border-color:var(--v2-accent)}body.v2 .find-hint{margin:0 0 var(--v2-s3)}body.v2 .find-table{width:100%;border-collapse:collapse;font-size:var(--v2-t-body)}body.v2 .find-table th{text-align:left;font-size:var(--v2-t-label);letter-spacing:.04em;text-transform:uppercase;color:var(--v2-faint);padding:var(--v2-s1h) var(--v2-s2);border-bottom:1px solid var(--v2-line)}body.v2 .find-table td{padding:var(--v2-s2) var(--v2-s2);border-bottom:1px solid var(--v2-line);vertical-align:top}body.v2 .find-table tr.taken td{opacity:.6}body.v2 .find-table .find-due{color:var(--v2-sub);font-weight:600}body.v2 .find-table .find-due.near{color:var(--v2-ink)}body.v2 .find-table .find-due.soon{color:var(--v2-bad)}body.v2 .find-due{white-space:nowrap;font-variant-numeric:tabular-nums}body.v2 .find-due i{display:block;font-style:normal;font-size:var(--v2-t-label);color:var(--v2-faint)}body.v2 .find-srctag{display:inline-block;padding:var(--v2-s0) var(--v2-s2);border-radius:999px;font-size:var(--v2-t-label);font-weight:600;background:var(--v2-bg);border:1px solid var(--v2-line);white-space:nowrap}body.v2 .find-srctag.sam{border-color:#0f9d8a;color:#0f9d8a}body.v2 .find-srctag.tx_esbd{border-color:var(--v2-warn);color:var(--v2-warn)}body.v2 .find-srctag.opengov{border-color:#2563eb;color:#60a5fa}body.v2 .find-srctag.alerts{border-color:#7c3aed;color:#a78bfa}body.v2 .ops-boardwrap.lanes{padding:0}body.v2 .ops-lanes{display:flex;gap:var(--v2-s2);overflow-x:auto}body.v2 .ops-lanes .ops-col{flex:1 1 0;width:auto;min-width:200px}body.v2 .ops-lanestage{display:flex;align-items:center;gap:var(--v2-s1h);font-size:var(--v2-t-label);letter-spacing:.04em;text-transform:uppercase;color:var(--v2-faint);padding:var(--v2-s1h) var(--v2-s1) var(--v2-s1);border-top:1px dashed var(--v2-line);margin-top:var(--v2-s1)}body.v2 .ops-lanestage:first-child{border-top:0;margin-top:0}body.v2 .ops-lanestage b{margin-left:auto;font-variant-numeric:tabular-nums}body.v2 .ops-lanestage .ops-lock{font-size:var(--v2-t-label)}body.v2 .ops-lanefoot{display:flex;gap:var(--v2-s3);align-items:center;margin:var(--v2-s2) 0 0}body.v2 .ops-modeback{margin:0 0 var(--v2-s1h)}body.v2 .v2-five{list-style:none;margin:var(--v2-s2) 0 var(--v2-s1);padding:0;display:grid;gap:var(--v2-s1)}body.v2 .v2-five li{font-size:var(--v2-t-body);color:var(--v2-ink);display:flex;gap:var(--v2-s2);align-items:baseline}body.v2 .v2-five li span{flex:0 0 84px;font-size:var(--v2-t-label);letter-spacing:.04em;text-transform:uppercase;color:var(--v2-faint)}

/* ── R31 · put the rail away; wider lanes; slim next-step strip;crumbs ── */
.rail-tg{position:absolute;top:14px;right:8px;width:24px;height:24px;border-radius:50%;border:1px solid var(--line,#2a2f3a);background:var(--panel,#111);color:var(--sub,#aaa);font-size:var(--v2-t-entity);line-height:1;cursor:pointer;padding:0;z-index:5}aside{position:sticky}.rail-tg-open{position:fixed;top:14px;left:8px;z-index:60}body.rail-off .app{grid-template-columns:minmax(0,1fr)}body.rail-off .app>main,body.rail-off .app>.main{grid-column:1;min-width:0}body.rail-off aside{display:none}body.rail-off .utility{padding-left:var(--v2-s6)}@media(max-width:860px){.rail-tg{display:none}}body.v2 .ops-lanes .ops-col{min-width:284px}body.v2 .gr.gr-slim{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:var(--v2-s2);padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-left:3px solid var(--v2-accent);border-radius:10px;background:var(--v2-panel);margin:0 0 var(--v2-s3);font-size:var(--v2-t-body)}body.v2 .gr-slim .gr-slim-t{color:var(--v2-sub);flex:1 1 220px;min-width:0}body.v2 .gr-slim .gr-now-ic{display:inline;grid-row:auto;font-size:var(--v2-t-title);color:var(--v2-accent)}body.v2 .gr-slim .pd-btn{flex:0 0 auto;width:auto}body.v2 .gr-slim b{white-space:nowrap}body.v2 .gr-fitchip{margin-left:auto;border-radius:999px;padding:var(--v2-s0) var(--v2-s2);font-size:var(--v2-t-small);font-weight:600;cursor:pointer;border:1px solid}body.v2 .gr-fitchip.amber{color:var(--v2-warn);border-color:var(--v2-warn);background:color-mix(in srgb,var(--v2-warn) 12%,var(--v2-panel))}body.v2 .gr-fitchip.red{color:var(--v2-bad);border-color:var(--v2-bad);background:color-mix(in srgb,var(--v2-bad) 12%,var(--v2-panel))}.crumb .crumb-l{background:none;border:0;padding:0;color:var(--sub);cursor:pointer;font:inherit}.crumb .crumb-l:hover{color:var(--ink,#fff);text-decoration:underline}/* The dialer (public/phone.js): a pill bottom-right, a 340×520 panel on a
   computer, the whole screen on a phone. Left of the help bubble. */

/* ── GovCon phone line (public/phone.js) ───────────────────────────────
   The call bar sits over the page bottom while ringing or on a call;the
   Phone sub-tab is a plain row list. Missed/voicemail rows get a hairline
   bad border only (DESIGN.md: status never fills a panel). */

#ccph{position:fixed;right:calc(var(--v2-s4) + 64px);bottom:calc(var(--v2-s4) + env(safe-area-inset-bottom,0px));z-index:900}.ccph-pill{display:flex;align-items:center;gap:var(--v2-s2);padding:var(--v2-s2) var(--v2-s4);border-radius:var(--v2-r-full);border:1px solid var(--v2-line);background:var(--v2-panel);
  color:var(--v2-ink);font:600 var(--v2-t-body) var(--v2-sans);box-shadow:var(--v2-shadow-overlay);cursor:pointer}.ccph-pill svg{width:16px;height:16px;color:var(--v2-accent-ink)}.ccph-panel{display:flex;flex-direction:column;width:340px;height:520px;max-height:calc(100vh - 2*var(--v2-s4));background:var(--v2-panel);color:var(--v2-ink);
  border:1px solid var(--v2-line);border-radius:var(--v2-r-overlay);box-shadow:var(--v2-shadow-overlay);overflow:hidden;font-family:var(--v2-sans)}.ccph-top{display:flex;align-items:center;gap:var(--v2-s2);padding:var(--v2-s3);border-bottom:1px solid var(--v2-line)}.ccph-badge{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:var(--v2-r-full);background:var(--v2-accent-soft);color:var(--v2-accent-ink)}.ccph-badge svg,.ccph-avatar svg{width:15px;height:15px}.ccph-ttl{display:flex;flex-direction:column;flex:1;min-width:0}.ccph-ttl b{font-size:var(--v2-t-body)}.ccph-ttl small{font-size:var(--v2-t-label);color:var(--v2-sub)}.ccph-x{border:0;background:none;color:var(--v2-sub);font-size:var(--v2-t-say);line-height:1;cursor:pointer;padding:var(--v2-s1) var(--v2-s2)}.ccph-body{flex:1;overflow-y:auto;padding:var(--v2-s3)}.ccph-tabs{display:flex;border-top:1px solid var(--v2-line)}.ccph-tabs button{flex:1;border:0;background:none;padding:var(--v2-s3) var(--v2-s1);font:600 var(--v2-t-label) var(--v2-sans);color:var(--v2-sub);cursor:pointer;text-transform:uppercase;letter-spacing:.04em}.ccph-tabs button.on{color:var(--v2-accent-ink);box-shadow:inset 0 2px 0 var(--v2-accent)}.ccph-padwrap{display:flex;flex-direction:column;align-items:center;gap:var(--v2-s3)}.ccph-num{width:100%;padding:var(--v2-s2) var(--v2-s3);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);background:var(--v2-bg);color:var(--v2-ink);
  font:500 var(--v2-t-title) var(--v2-mono);text-align:center}.ccph-search{font:400 var(--v2-t-body) var(--v2-sans);text-align:left;margin-bottom:var(--v2-s2)}.ccph-keys{display:grid;grid-template-columns:repeat(3,56px);gap:var(--v2-s2) var(--v2-s5);justify-content:center;margin-top:var(--v2-s1)}.ccph-keys button{width:56px;height:56px;border-radius:var(--v2-r-full);border:1px solid var(--v2-line);background:var(--v2-bg);color:var(--v2-ink);cursor:pointer;
  display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1}.ccph-keys button:active{background:var(--v2-line2)}.ccph-keys b{font:500 var(--v2-t-say) var(--v2-sans)}.ccph-keys small{font-size:var(--v2-t-label);letter-spacing:.08em;color:var(--v2-sub);margin-top:var(--v2-s0)}.ccph-round{width:56px;height:56px;border-radius:var(--v2-r-full);border:1px solid transparent;display:flex;align-items:center;justify-content:center;cursor:pointer;
  font:600 var(--v2-t-label) var(--v2-sans);font-size:var(--v2-t-say)}.ccph-round svg{width:22px;height:22px}.ccph-round.go{background:var(--v2-ok-dot);color:#fff}.ccph-round.no{background:var(--v2-bad);color:#fff}.ccph-round.ghost{background:var(--v2-bg);border-color:var(--v2-line);color:var(--v2-ink);font-size:var(--v2-t-label)}.ccph-round:disabled{opacity:.4;cursor:not-allowed}.ccph-mid{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--v2-s2);padding:var(--v2-s4)}.ccph-avatar{display:flex;align-items:center;justify-content:center;width:56px;height:56px;border-radius:var(--v2-r-full);background:var(--v2-accent-soft);color:var(--v2-accent-ink);
  animation:ccph-pulse 1s ease-in-out infinite}@keyframes ccph-pulse{50%{opacity:.45}}@media (prefers-reduced-motion:reduce){.ccph-avatar{animation:none}}.ccph-who2{font-size:var(--v2-t-entity);text-align:center}.ccph-mid small{color:var(--v2-sub)}.ccph-t{font-family:var(--v2-mono);color:var(--v2-sub)}.ccph-acts{display:flex;gap:var(--v2-s5);margin-top:var(--v2-s4)}.ccph-empty{font-size:var(--v2-t-body);color:var(--v2-sub);text-align:center;margin:var(--v2-s4) 0}.ccph-rows{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}.ccph-rows li{border-bottom:1px solid var(--v2-line2);padding:var(--v2-s0) 0}.ccph-rows li > button{width:100%;display:flex;align-items:center;gap:var(--v2-s2);border:0;background:none;color:var(--v2-ink);padding:var(--v2-s2) var(--v2-s1);text-align:left;cursor:pointer}.ccph-rows li > button svg{width:15px;height:15px;color:var(--v2-accent-ink);flex:none}.ccph-rn{flex:1;min-width:0;display:flex;flex-direction:column}.ccph-rn b{font-size:var(--v2-t-body);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ccph-rn small{font-size:var(--v2-t-label);color:var(--v2-sub)}.ccph-rows audio{height:32px;width:100%}/* Phones: the panel is the whole screen, the keys get bigger. */@media (max-width:640px){#ccph{right:var(--v2-s3);bottom:calc(var(--v2-s3) + env(safe-area-inset-bottom,0px))}#ccph:has(.ccph-panel){inset:0}.ccph-panel{width:100vw;height:100dvh;max-height:none;border-radius:0;border:0;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}.ccph-keys{grid-template-columns:repeat(3,72px);gap:var(--v2-s3) var(--v2-s6)}.ccph-keys button,.ccph-round{width:72px;height:72px}.ccph-keys b{font-size:26px}.ccph-num{font-size:var(--v2-t-say)}.ccph-tabs button{padding:var(--v2-s4) var(--v2-s1)}
}.ccph-head{display:flex;flex-wrap:wrap;align-items:center;gap:var(--v2-s3);margin-bottom:var(--v2-s3)}.ccph-head > div{display:flex;flex-direction:column;flex:1;min-width:200px}.ccph-head small{font-size:var(--v2-t-body)}.ccph-list{display:flex;flex-direction:column}.ccph-row{display:flex;align-items:flex-start;gap:var(--v2-s3);padding:var(--v2-s2) var(--v2-s2);border-top:1px solid var(--v2-line2);border-left:2px solid transparent}.ccph-row.bad{border-left-color:var(--v2-bad-line)}.ccph-row.new .ccph-id b::after{content:"new";margin-left:var(--v2-s2);font-size:var(--v2-t-label);font-weight:600;color:var(--v2-bad);text-transform:uppercase}.ccph-dir{width:20px;flex:none;color:var(--v2-sub);font-size:var(--v2-t-entity);text-align:center}.ccph-id{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--v2-s0)}.ccph-id b{font-size:var(--v2-t-entity);color:var(--v2-ink)}.ccph-id small{font-size:var(--v2-t-label);color:var(--v2-sub)}.ccph-id audio{height:32px;max-width:100%;margin-top:var(--v2-s1)}.ccph-q{font-size:var(--v2-t-body);color:var(--v2-ink);font-style:italic;quotes:"“" "”"}.ccph-st{flex:none;font-size:var(--v2-t-label);color:var(--v2-sub);text-transform:uppercase;letter-spacing:.04em;padding-top:var(--v2-s0)}.ccph-h{font-size:var(--v2-t-label);text-transform:uppercase;letter-spacing:.06em;color:var(--v2-sub);margin:var(--v2-s4) 0 var(--v2-s1)}.ccph-snip{font-size:var(--v2-t-body);color:var(--v2-ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ibx-consent{display:flex;align-items:center;gap:var(--v2-s2);font-size:var(--v2-t-body);color:var(--v2-ink);margin:var(--v2-s1) 0}/* The GovCon line setup card — the CRM's "Texting approval" layout. */.ccph-setup{max-width:760px;margin:0 auto var(--v2-s5);padding:var(--v2-s5);border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);background:var(--v2-panel)}.ccph-setup-h{display:flex;align-items:center;justify-content:space-between;gap:var(--v2-s3)}.ccph-setup-h h3{margin:0;font:600 var(--v2-t-say) var(--v2-display)}.ccph-chip{display:inline-block;padding:var(--v2-s0) var(--v2-s2);border-radius:var(--v2-r-full);font-size:var(--v2-t-label);font-weight:600;border:1px solid var(--v2-line);color:var(--v2-sub)}.ccph-chip.ok{color:var(--v2-ok);border-color:var(--v2-ok-line)}.ccph-chip.warn{color:var(--v2-warn);border-color:var(--v2-warn-line)}.ccph-chip.bad{color:var(--v2-bad);border-color:var(--v2-bad-line)}.ccph-steps{list-style:none;margin:var(--v2-s4) 0;padding:0;display:flex;flex-direction:column;gap:var(--v2-s3)}.ccph-steps li{display:flex;gap:var(--v2-s3);align-items:flex-start}.ccph-steps li div{display:flex;flex-wrap:wrap;align-items:center;gap:var(--v2-s1) var(--v2-s2)}.ccph-steps li b{font-size:var(--v2-t-entity)}.ccph-steps li small{flex-basis:100%;font-size:var(--v2-t-body);color:var(--v2-sub)}.ccph-dotn{flex:none;width:28px;height:28px;border-radius:var(--v2-r-full);display:flex;align-items:center;justify-content:center;font-weight:600;font-size:var(--v2-t-body);
  border:1px solid var(--v2-line);color:var(--v2-sub)}.ccph-steps li.ok .ccph-dotn{background:var(--v2-ok-dot);border-color:var(--v2-ok-dot);color:#fff}.ccph-steps li.warn .ccph-dotn{border-color:var(--v2-warn-line);color:var(--v2-warn)}.ccph-steps li.bad .ccph-dotn{border-color:var(--v2-bad-line);color:var(--v2-bad)}.ccph-setup-f{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:var(--v2-s2);border-top:1px solid var(--v2-line2);padding-top:var(--v2-s3)}.ccph-setup-f small{margin-right:auto}/* ── iPhone look for the dialer and the call log (Phone app: Recents/Keypad) ── */.ccph-panel,.ios-log{font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text",var(--v2-sans)}.ccph-num{border:0;background:none;font:400 32px -apple-system,BlinkMacSystemFont,var(--v2-sans);letter-spacing:.02em;padding:var(--v2-s2) 0;min-height:52px}.ccph-num:focus{outline:none}.ccph-num::placeholder{font-size:var(--v2-t-entity);letter-spacing:0;color:var(--v2-faint)}.ccph-search{border:0;background:var(--v2-line2);border-radius:10px;font:400 var(--v2-t-entity) -apple-system,BlinkMacSystemFont,var(--v2-sans);padding:var(--v2-s2) var(--v2-s3);min-height:0}.ccph-keys{grid-template-columns:repeat(3,64px);gap:var(--v2-s3) var(--v2-s5)}.ccph-keys button{width:64px;height:64px;border:0;background:var(--v2-line2)}.ccph-keys button:active{background:var(--v2-line)}.ccph-keys b{font:400 28px -apple-system,BlinkMacSystemFont,var(--v2-sans)}.ccph-keys small{font-size:var(--v2-t-label);font-weight:600;letter-spacing:.14em}.ccph-callrow{display:grid;grid-template-columns:repeat(3,64px);gap:var(--v2-s5);justify-content:center;align-items:center;margin-top:var(--v2-s2)}.ccph-round{width:64px;height:64px}.ccph-round.go{background:#34c759}.ccph-round.no{background:#ff3b30}.ccph-del{border:0;background:none;color:var(--v2-sub);font-size:var(--v2-t-say);cursor:pointer;height:64px}.ccph-tabs{background:var(--v2-panel)}.ccph-tabs button{display:flex;flex-direction:column;align-items:center;gap:var(--v2-s0);padding:var(--v2-s2) var(--v2-s1) var(--v2-s2);text-transform:none;letter-spacing:0;font:500 var(--v2-t-label) -apple-system,BlinkMacSystemFont,var(--v2-sans)}.ccph-tabs button svg{width:24px;height:24px}.ccph-tabs button.on{color:#0a84ff;box-shadow:none}/* Recents */.ios-log-h{display:flex;flex-wrap:wrap;align-items:center;gap:var(--v2-s3);margin-bottom:var(--v2-s2)}.ios-log-h h3{margin:0;font:700 28px -apple-system,BlinkMacSystemFont,var(--v2-display);flex:1}.ios-seg{display:inline-flex;background:var(--v2-line2);border-radius:9px;padding:var(--v2-s0)}.ios-seg button{border:0;background:none;border-radius:7px;padding:var(--v2-s1) var(--v2-s4);font:600 var(--v2-t-body) -apple-system,BlinkMacSystemFont,var(--v2-sans);color:var(--v2-ink);cursor:pointer}.ios-seg button.on{background:var(--v2-panel);box-shadow:0 1px 3px rgba(0,0,0,.18)}.ios-list{list-style:none;margin:var(--v2-s2) 0 0;padding:0}.ios-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;border-bottom:1px solid var(--v2-line2)}.ios-main{display:flex;align-items:center;gap:var(--v2-s2);min-width:0;border:0;background:none;padding:var(--v2-s2) 0;text-align:left;color:var(--v2-ink);cursor:pointer}.ios-dir{width:16px;flex:none;color:var(--v2-faint)}.ios-dir svg{width:13px;height:13px}.ios-who{flex:1;min-width:0;display:flex;flex-direction:column}.ios-who b{font:600 var(--v2-t-title) -apple-system,BlinkMacSystemFont,var(--v2-sans);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ios-who small{font-size:var(--v2-t-body);color:var(--v2-sub)}.ios-row.miss .ios-who b{color:#ff3b30}.ios-when{flex:none;font-size:var(--v2-t-entity);color:var(--v2-sub);padding-left:var(--v2-s2)}.ios-info{width:30px;height:30px;margin-left:var(--v2-s2);border-radius:var(--v2-r-full);border:1.5px solid #0a84ff;background:none;color:#0a84ff;font:600 italic var(--v2-t-entity) Georgia,serif;cursor:pointer}.ios-detail{grid-column:1/-1;display:flex;flex-direction:column;gap:var(--v2-s1h);padding:0 0 var(--v2-s3) var(--v2-s5);font-size:var(--v2-t-entity);color:var(--v2-sub)}.ios-detail > div{display:flex;justify-content:space-between;gap:var(--v2-s3);flex-wrap:wrap}.ios-detail a{color:#0a84ff;text-decoration:none}.ios-detail audio{width:100%;height:34px}@media (max-width:860px){/* The phone button and the feedback button sit just above the bottom bar, side by side. */#ccph{right:72px;bottom:calc(90px + env(safe-area-inset-bottom,0px))}.ccph-pill{width:52px;height:52px;padding:0;justify-content:center;border-radius:var(--v2-r-full);background:#34c759;border-color:#34c759;color:#fff}.ccph-pill svg{width:22px;height:22px;color:#fff}.ccph-pill span{display:none}.ccph-pill .pd-tabn{position:absolute;top:-2px;right:-2px}.fb-fab{bottom:calc(94px + env(safe-area-inset-bottom,0px)) !important}#ccph:has(.ccph-panel){inset:0;z-index:950}.ccph-panel{width:100vw;height:100dvh;max-height:none;border-radius:0;border:0;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}.ccph-keys,.ccph-callrow{grid-template-columns:repeat(3,78px);gap:var(--v2-s3) var(--v2-s6)}.ccph-keys button,.ccph-round,.ccph-del{width:78px;height:78px}.ccph-keys b{font-size:34px}.ccph-num{font-size:36px}.ios-log-h h3{font-size:30px}.ios-log-h{position:sticky;top:0;background:var(--v2-panel);z-index:2;padding-top:var(--v2-s2)}
}@media (max-width:860px){/* Outreach's sub-pages in one swipeable row, not four wrapped lines. */.bt-roomnav{display:flex;flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.bt-roomnav::-webkit-scrollbar{display:none}.bt-roomnav button{flex:0 0 auto;white-space:nowrap}.ios-log-h .pd-btn{display:none}/* The floating buttons stay out of the way of the open menu. */body.drawer-open #ccph,body.drawer-open #fb-root{display:none}
}.ccph-rows li.miss .ccph-rn b{color:#ff3b30}.ccph-rows .ccph-rn b{font:600 var(--v2-t-title) -apple-system,BlinkMacSystemFont,var(--v2-sans)}.ccph-rows .ccph-rn small{font-size:var(--v2-t-body)}/* ── call forwarding card ── */.ccph-fwd{margin-top:var(--v2-s4)}.ccph-fwd-list{list-style:none;margin:var(--v2-s3) 0 0;padding:0;display:flex;flex-direction:column;gap:var(--v2-s2)}.ccph-fwd-row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--v2-s2)}.ccph-fwd-row b{flex:0 0 140px}.ccph-fwd-row input[type=tel]{flex:1 1 200px;min-width:160px}.ccph-fwd-on{display:flex;align-items:center;gap:var(--v2-s1);font-size:var(--v2-t-small);color:var(--v2-sub)}

/* ═══ THE TIMESHEET — hours, and what came out of them ═════════════════
   An hour with nothing attached is a number somebody has to take on trust,
   which is the thing a timesheet is meant to settle.

   A quiet session is styled as QUIET, never as a fault: no red, no warning
   icon, nothing that reads as a deduction. Reading a solicitation, a phone
   call and work in another tool all leave nothing in the activity log, so a
   row with no entries is a row we know nothing about — not a row where
   nothing happened. */
body.v2 .ts-weeks{display:inline-flex;gap:var(--v2-s0);margin-left:var(--v2-s2);vertical-align:middle}
body.v2 .ts-weeks button{font:inherit;font-size:var(--v2-t-label);font-weight:600;
  border:1px solid var(--v2-line);background:var(--v2-panel);color:var(--v2-sub);
  padding:var(--v2-s0) var(--v2-s2);cursor:pointer;border-radius:var(--v2-r-full)}
body.v2 .ts-weeks button.on{border-color:var(--v2-accent);background:var(--v2-accent-soft);
  color:var(--v2-accent-ink)}
body.v2 .ts-tot{display:flex;gap:var(--v2-s4);flex-wrap:wrap;margin:var(--v2-s3) 0;
  font-size:var(--v2-t-body);color:var(--v2-sub)}
body.v2 .ts-tot b{font-family:var(--v2-display);font-size:var(--v2-t-say);
  color:var(--v2-ink);margin-right:var(--v2-s1)}
body.v2 .ts-list{display:flex;flex-direction:column;gap:var(--v2-s0);background:var(--v2-line2);
  border:1px solid var(--v2-line2);border-radius:var(--v2-r-control);overflow:hidden}
body.v2 .ts-row{background:var(--v2-panel)}
body.v2 .ts-row.open{background:var(--v2-bg)}
body.v2 .ts-head{display:flex;align-items:center;gap:var(--v2-s3);width:100%;
  text-align:left;background:none;border:0;cursor:pointer;font:inherit;
  padding:var(--v2-s2) var(--v2-s3);color:var(--v2-ink)}
body.v2 .ts-head:hover{background:var(--v2-line2)}
body.v2 .ts-when{flex:1 1 auto;min-width:0;font-size:var(--v2-t-body);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
body.v2 .ts-when i{font-style:normal;color:var(--v2-ok)}
body.v2 .ts-dur{flex:0 0 auto;font-family:var(--v2-mono);font-size:var(--v2-t-body);
  font-weight:700;font-variant-numeric:tabular-nums}
body.v2 .ts-kinds{flex:0 0 auto;display:flex;gap:var(--v2-s1);flex-wrap:wrap}
body.v2 .ts-k{font-style:normal;font-size:var(--v2-t-label);background:var(--v2-line2);
  color:var(--v2-sub);border-radius:var(--v2-r-full);padding:var(--v2-s0) var(--v2-s2);white-space:nowrap}
body.v2 .ts-k.none{background:transparent;color:var(--v2-faint);font-style:italic}
body.v2 .ts-flag{font-style:normal;font-size:var(--v2-t-label);color:var(--v2-warn);
  border:1px solid var(--v2-warn);border-radius:var(--v2-r-full);padding:0 var(--v2-s1h);white-space:nowrap}
body.v2 .ts-go{flex:0 0 auto;color:var(--v2-sub);font-size:var(--v2-t-say);line-height:1}
body.v2 .ts-body{padding:0 var(--v2-s3) var(--v2-s3) var(--v2-s3)}
body.v2 .ts-note{margin:0 0 var(--v2-s2);font-size:var(--v2-t-body);color:var(--v2-sub)}
body.v2 .ts-acts{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--v2-s1)}
body.v2 .ts-acts li{display:flex;align-items:baseline;gap:var(--v2-s3);
  font-size:var(--v2-t-label);padding:var(--v2-s1) 0;border-top:1px solid var(--v2-line2)}
body.v2 .ts-at{flex:0 0 56px;font-family:var(--v2-mono);color:var(--v2-sub);
  font-variant-numeric:tabular-nums}
body.v2 .ts-kind{flex:0 0 auto;color:var(--v2-accent-ink);font-weight:600}
body.v2 .ts-what{flex:1 1 auto;min-width:0;color:var(--v2-ink);overflow-wrap:anywhere}
@media (max-width:760px){
  body.v2 .ts-head{flex-wrap:wrap}
  body.v2 .ts-when{flex:1 1 100%}
}

/* ── R18: the week summary — the sendable half of the timesheet ─────
   A statement somebody is paid against, so it reads as a document and not
   as another row of chrome: a bordered block, a ruled day table, and the
   caveats set as prose underneath rather than as warning pills. Nothing in
   here is coloured as a fault — see renderTimesheet's note on quiet
   sessions; a statement that flagged them in red would be an accusation. */
body.v2 .wks-wrap{border:1px solid var(--v2-line);border-radius:var(--v2-r-surface);
  padding:var(--v2-s3);background:var(--v2-panel);margin:var(--v2-s2) 0 var(--v2-s3)}
body.v2 .wks-h{display:flex;align-items:flex-start;gap:var(--v2-s3);
  flex-wrap:wrap;margin-bottom:var(--v2-s2)}
body.v2 .wks-h .sp{flex:1 1 auto}
body.v2 .wks-days{width:100%;border-collapse:collapse;margin:var(--v2-s2) 0}
body.v2 .wks-days th{text-align:left;font-size:var(--v2-t-label);letter-spacing:.05em;
  text-transform:uppercase;color:var(--v2-sub);font-weight:600;
  padding:0 var(--v2-s3) var(--v2-s1h) 0;border-bottom:1px solid var(--v2-line)}
body.v2 .wks-days td{padding:var(--v2-s1h) var(--v2-s3) var(--v2-s1h) 0;font-size:var(--v2-t-body);
  border-bottom:1px solid var(--v2-line2);vertical-align:baseline}
body.v2 .wks-days td:nth-child(2){font-family:var(--v2-mono);
  font-variant-numeric:tabular-nums;white-space:nowrap}
body.v2 .wks-days tr.wks-sum td{border-bottom:none;border-top:2px solid var(--v2-line);
  font-weight:600;padding-top:var(--v2-s2)}
body.v2 .wks-lbl{font-size:var(--v2-t-label);letter-spacing:.05em;text-transform:uppercase;
  color:var(--v2-sub);font-weight:600;margin:var(--v2-s3) 0 var(--v2-s1h)}
body.v2 .wks-pids{display:flex;gap:var(--v2-s1h);flex-wrap:wrap}
body.v2 .wks-pid{font:inherit;font-size:var(--v2-t-label);font-family:var(--v2-mono);
  background:var(--v2-line2);color:var(--v2-ink);border:1px solid var(--v2-line);
  border-radius:var(--v2-r-control);padding:var(--v2-s1) var(--v2-s2);cursor:pointer;display:inline-flex;
  align-items:center;gap:var(--v2-s1h)}
body.v2 .wks-pid:hover{border-color:var(--v2-accent)}
body.v2 .wks-pid i{font-style:normal;color:var(--v2-sub)}
body.v2 .wks-flags{margin:var(--v2-s3) 0 0;padding-left:1.1em;
  font-size:var(--v2-t-body);color:var(--v2-sub)}
body.v2 .wks-flags li{margin-bottom:var(--v2-s1)}
body.v2 .wks-text{width:100%;margin-top:var(--v2-s3);font-family:var(--v2-mono);
  font-size:var(--v2-t-label);line-height:1.55;color:var(--v2-ink);
  background:var(--v2-bg);border:1px solid var(--v2-line);border-radius:var(--v2-r-control);
  padding:var(--v2-s3);resize:vertical;white-space:pre}
@media (max-width:760px){
  body.v2 .wks-days td:nth-child(4),body.v2 .wks-days th:nth-child(4){display:none}
}

/* ── R19: the record's contents rail ────────────────────────────────
   The Jarvis language, promoted out of its panel: uppercase letterspaced
   micro-labels (.jv-stat), and a lit dot with a halo ring (.jv-orb) on the
   section you are in. It sticks under the utility bar, which is itself
   sticky at --v3-top, so the map stays with you down a 2,700px page.
   Density comes from type and spacing, not from boxes — there is one line
   under it and no border around it. */
/* top:0, not --v3-top. The utility bar above is position:sticky but its
   containing block ends partway down this page, so it scrolls away rather
   than pinning — offsetting the rail by its height left a 52px band of
   content sliding past above it. Measured on the live page, not assumed. */
body.v2 .ppl-rail{position:sticky;top:0;z-index:20;
  display:flex;gap:var(--v2-s0);align-items:center;overflow-x:auto;overflow-y:hidden;
  margin:0 0 var(--v2-s3);padding:var(--v2-s1h) 0;background:var(--v2-panel);
  border-bottom:1px solid var(--v2-line);scrollbar-width:none;
  scroll-snap-type:x proximity}
body.v2 .ppl-rail::-webkit-scrollbar{display:none}
body.v2 .ppl-rail button{flex:0 0 auto;scroll-snap-align:start;
  display:inline-flex;align-items:center;gap:var(--v2-s1h);
  font:inherit;font-size:var(--v2-t-label);font-weight:600;letter-spacing:.05em;
  text-transform:uppercase;color:var(--v2-sub);background:none;border:none;
  border-radius:var(--v2-r-control);padding:var(--v2-s1) var(--v2-s2);cursor:pointer;
  white-space:nowrap;transition:color var(--v2-fast) var(--v3-ease,var(--v2-ease)),
    background-color var(--v2-fast) var(--v3-ease,var(--v2-ease))}
body.v2 .ppl-rail button i{width:6px;height:6px;border-radius:999px;flex:0 0 auto;
  background:var(--v2-line);transition:background-color var(--v2-mid) var(--v3-ease,var(--v2-ease)),
    box-shadow var(--v2-mid) var(--v3-ease,var(--v2-ease))}
body.v2 .ppl-rail button:hover{color:var(--v2-ink);background:var(--v2-line2)}
body.v2 .ppl-rail button[aria-current="true"]{color:var(--v2-ink);
  background:var(--v2-accent-soft)}
/* The orb: lit, with the halo ring that says "this is the live one". */
body.v2 .ppl-rail button[aria-current="true"] i{background:var(--v2-accent);
  box-shadow:0 0 0 3px var(--v2-accent-soft)}
body.v2 .ppl-rail button:focus-visible{outline:2px solid var(--v2-accent);
  outline-offset:1px}
/* Headings are scroll targets now, so they must not land under the two
   sticky strips above them. */
body.v2 #ppl-record .ppl-sec{scroll-margin-top:60px}
@media (prefers-reduced-motion:reduce){
  body.v2 .ppl-rail button,body.v2 .ppl-rail button i{transition:none}
}
@media (max-width:760px){
  body.v2 .ppl-rail{margin-left:calc(var(--v2-s3) * -1);
    margin-right:calc(var(--v2-s3) * -1);padding-left:var(--v2-s3);
    padding-right:var(--v2-s3)}
}

/* ══ R30 · Reduced motion, once, for everything ═════════════════════
   There were nine scattered prefers-reduced-motion blocks against seventy
   transitions, so most of the app ignored the setting. Someone who has
   asked their operating system to stop animations has usually asked for a
   reason — vestibular disorder, migraine, or simply being unable to read a
   table that keeps sliding. Honouring it in nine places out of seventy is
   the same as not honouring it.

   Durations collapse to near-zero so state still CHANGES, it just does not
   travel. Deliberately NOT animation:none and deliberately NOT
   iteration-count:1 — the usual snippet sets both, and both are wrong here.
   A spinner stopped after one turn is a lie about whether anything is still
   happening, and Jarvis's orb frozen mid-pulse could leave it scaled to
   1.35 forever. An infinite animation at .01ms keeps looping and keeps
   meaning "working"; it simply does not move. */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    transition-duration:.01ms !important;
    animation-duration:.01ms !important;
    scroll-behavior:auto !important}
}
