
/* ==========================================================================
   The Evicora visual system.

   **It supplies treatment for names that already exist.** `rendering/` referenced 126
   classes and 21 had a rule; the semantic vocabulary was written into the markup and
   stopped at the stylesheet. So this styles `action-destructive`, `empty-state`,
   `organisation-row` and their kin rather than introducing synonyms for them.

   ## What makes it Evicora

   A product for weighing evidence and recording decisions. So: **a deep teal-slate that
   reads as considered rather than corporate**, cool neutrals carrying a trace of the same
   hue so the greys look chosen, a tight editorial wordmark, numerals that line up in
   columns, and hairlines instead of shadows — an instrument, not a dashboard.

   The character comes from the system stack used deliberately, and **not** from a
   webfont: `document.py` widens the CSP only to what a page demonstrably requires, and a
   brand face is a want. Widening `font-src` for it would spend the policy on decoration.

   `U-2` is the constraint everything bends around: **unknowns render neutral and
   contradiction is the single cautionary state.** One hue carries alarm. The accent is
   affordance — it says *this can be followed*, never *this is good* — which is why no
   state class borrows it.
   ========================================================================== */

:root {
  /* ---- type ------------------------------------------------------------
     **A system stack, and no web font.** `Inter` is not shipped, so naming it
     would be a lottery on whether a reader's machine happens to have it — and
     `document.py` widens the CSP only to what a page demonstrably requires.
     San Francisco, Segoe UI and Roboto cost no download, no privacy
     dependency and no rendering delay. */
  --font: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
          Helvetica, Arial, sans-serif;
  /* Codes, timestamps and anything read character by character. */
  --font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;

  /* **Measured against the drawings, not chosen** ([D-1641]). Every size was a notch
     below what the designs set: a heading at `28px` against `32`, a card's body at `14`
     against `15`, a region's heading at `18` against `20`. One step up across the scale
     keeps every relationship it already had — the ladder is the same ladder — and stops
     the product reading as a denser, quieter version of its own design. */
  /* **The scale is roles, and a rule may only name a role** ([D-1644]).
     It was a ladder of rungs that said nothing about what a thing *is*, so one role took
     different rungs in different components and nobody could see it without measuring: a
     card's heading was `20px` in one column and `15px` in another, a standing **sentence**
     rendered at `20px` — heading size — and a button had four treatments across the
     planes. The rungs are gone as a vocabulary; what is left is ten roles on eight sizes,
     and the hierarchy is legible in the size alone rather than propped up by a card, a
     border or a colour.

     | role | size · weight | what wears it |
     |---|---|---|
     | `--t-arrival` | 40 · 650 | the one editorial line on the arrival canvas |
     | `--t-page` | 28 · 650 | the `h1`, once per document |
     | `--t-value` | 20 · 650 | a fact the page is **about**: a plan's name, a count |
     | `--t-card` | 18 · 600 | a card's heading, a column's own title |
     | `--t-lede` | 16 · 400 | the page's sentence, under the `h1` |
     | `--t-body` | 15 · 400 | everything a reader reads |
     | `--t-control` | 15 · 500 | what is written on a control |
     | `--t-nav` | 14 · 500 | a destination in a column or a spine |
     | `--t-label` | 14 · 500 | what names a field or a fact |
     | `--t-help` | 13 · 400 | what is read after the thing it qualifies |
     | `--t-eyebrow` | 12 · 600 | a lettered column header, and nothing else |

     **A value outranks a section and is outranked by the page.** *Professional* is not a
     second page heading and *The subscription* is not a page title; the middle of the
     ladder is where that distinction lives, and there was nothing there.
  */
  /* **The product's name, and its own role** ([D-1912]). `D-1908` ruled the wordmark is
     not content and takes one canonical treatment across the shells; it left it wearing
     `--t-card`, which is a content rung and the mismatch `D-1644` exists to remove. The
     drawings set it larger than any heading beside it — a masthead's first job is to say
     whose product this is — so it gets a rung of its own, still one treatment on all
     three planes. */
  --t-wordmark:1.375rem;
  /* **Page 1, drawn to the owner's master** (95, `sign-in-fail.png`, measured at its own
     768px width): the master sets these at its own sizes, larger than the product's
     ramp, and pixel-faithful means they are its sizes. */
  --t-signin-wordmark:40px; --t-signin-aside:18px; --t-signin-title:44px;
  --t-signin-lede:24px; --t-signin-label:20px; --t-signin-field:19px;
  --t-signin-submit:22px; --t-signin-link:18px; --t-signin-alert-title:23px;
  --t-signin-alert:19px;
  /* **`1i`, drawn to the owner's master** (96, `try_evicora.png`, measured at its own
     1536px width): its own sizes, as page 1's are. */
  --t-start-wordmark:42px; --t-start-aside:17px; --t-start-title:64px;
  --t-start-second:45px; --t-start-lede:24px; --t-start-label:16px;
  --t-start-audience:22px; --t-start-fact:16px; --t-start-small:17.5px;
  --t-start-action:22px; --t-start-note-label:15px; --t-start-note-lead:19.5px;
  --t-start-note:16.5px; --t-start-note-way:15px; --t-start-more:19px;
  /* **1a's code step and 1o, drawn to the owner's master** (97, measured at its 1416px
     width): its own sizes, one role each. */
  --t-code-wordmark:46px; --t-code-title:53px; --t-code-lede:24px; --t-code-eyebrow:17px;
  --t-code-turn:50px; --t-code-where:24px; --t-code-digit:34px; --t-code-action:24px;
  --t-code-note:17px; --t-code-resend:18px;
  /* Its phone scale (PO, 76b): wordmark 28, h1 30, the note at 14. */
  --t-code-wordmark-narrow:28px; --t-code-title-narrow:30px; --t-code-lede-narrow:16px;
  --t-code-turn-narrow:23px; --t-code-note-narrow:14px;
  /* **1p, drawn to the owner's master** (98, measured at its 1536px width). */
  --t-setup-wordmark:40px; --t-setup-title:41px; --t-setup-lede:21px; --t-setup-label:18px;
  --t-setup-hint:15.5px; --t-setup-input:17px; --t-setup-check:16px; --t-setup-action:20px;
  --t-setup-note:16px; --t-setup-step:18px; --t-setup-step-label:17px;
  /* **1c, drawn to the owner's master** (99, at its 1536px width). */
  --t-admission-title:36px; --t-admission-lede:17px; --t-admission-lead:19px;
  --t-admission-note:16px;
  /* **B3, drawn to the owner's master** (103, at its 1024px width). */
  --h-t-id-title:48px; --h-t-id-lede:18px; --h-t-id-card-title:26px; --h-t-id-sub:17px;
  --h-t-id-label:16px; --h-t-id-input:18px; --h-t-id-action:20px; --h-t-id-email:26px;
  --h-t-id-body:17px; --h-t-id-panel-title:18px; --h-t-id-panel:16px; --h-t-id-pill:14px;
  /* **The operator shell and B0, drawn to the owner's masters** (100, at 1536px). */
  --h-t-op-wordmark:30px; --h-t-op-badge:14px; --h-t-op-title:48px; --h-t-op-lede:21px;
  --h-t-op-card-title:28px; --h-t-op-body:17px; --h-t-op-th:13px; --h-t-op-name:19px;
  --h-t-op-queue-title:40px; --h-t-op-sub:15px;
  --h-t-op-desig-card:22px; --h-t-op-desig-body:16px; --h-t-op-desig-small:14px;
  /* **Avatar initials** — the one named exception to ux/123's scale (§4 (b)): the initials
     in a person's disc, sized from the disc (≈0.45 of its diameter), aria-hidden, and never
     used for text. */
  --avatar-initials:32px;         /* in the 72px disc */
  --avatar-initials-small:22px;   /* in the 48px disc at a phone */
  /* 95's field ground, field edge and hairline are `--raised`, `--rule` and `--sunken`,
     each within a few steps of the master's: no new colour. */

  /* ---- role ------------------------------------------------------------
     **What capacity a reader is operating in, reinforced and never stated by
     colour alone** ([D-1912]). The role's *word* is product vocabulary and
     comes from `model/roles.yaml`; its *accent* is this layer's and the model
     holds none.

     **A ladder of one hue, not five colours.** `U-2` — presentation may
     reinforce a meaning and never strengthen it — so the lozenge's word is the
     identification and the tint is a second, quieter channel saying roughly how
     much authority sits behind it. Four hues would make the colour the claim.

     **No state hue is spent here.** `--caution` and `--danger` are the only two
     the product alarms with, and a capacity is not a state: a role tint never
     reaches attention, refusal, completion or a destructive act.

     **`color-mix` of tokens this palette already holds**, so the audit that
     counts hex literals still counts the same eighty. */
  --role-ground: var(--selection);
  --role-ink:    var(--accent);
  /* **The arrival line is a role, not a big `--t-page`** ([D-1913]). The approved
     drawing opens the pre-authentication canvas with one editorial sentence set
     well above the page rung; `--t-page` is *the `h1`, once per document* and the
     sign-in card's own `h1` already wears it, so borrowing it here would put one
     role at two sizes on one screen — the divergence `D-1644` replaced rungs with
     roles to stop. Measured off `signon-new.png` at `1440`: `40px`. */
  --t-arrival:2.5rem;
  --t-page:1.75rem; --t-value:1.25rem; --t-card:1.125rem; --t-lede:1rem;
  --t-body:.9375rem; --t-control:.9375rem;
  --t-nav:.875rem; --t-label:.875rem; --t-help:.8125rem; --t-eyebrow:.75rem;

  /* **Hierarchy comes from weight and tone before size.** Four weights, because
     a fifth is a decision nobody can defend. */
  --w-normal:400; --w-medium:540; --w-semi:600; --w-strong:650;
  /* **Rungs the recruiter drawings use, absorbed into the one ladder** ([D-1846],
     closing `OQ-022`). The question was *converge, or re-baseline?* and the
     measurement already answered half of it: snapping the plane onto `540/650`
     lightened the wordmark visibly and moved page heights, so **the plane is not
     moved**. The other direction costs nothing — a rung no other plane uses is
     three characters, and it means the same role is no longer set at two values
     depending on which stylesheet a rule sits in. */
  /* **`--w-heavy` comes back, because the wordmark wears it again** ([D-1912]). It was
     retired on its own rule — *a rung nothing wears is a word for nothing* — when the
     wordmark stopped being sized by the plane. The drawings put the product's name at
     `800` on every shell, so the rung has a wearer and the rule returns it rather than
     the rule being bent. */
  --w-mid:500; --w-bold:700; --w-heavy:800;

  --lh-tight:1.2; --lh-snug:1.32; --lh-normal:1.55;
  /* As above: the drawings' rhythm, named here rather than in a second ladder. */
  --lh-flat:1; --lh-tighter:1.1; --lh-relaxed:1.4; --lh-card:1.45;
  --lh-body:1.5; --lh-loose:1.6;
  /* Negative tracking on display sizes only: it tightens a heading and damages
     body text. `wide` is for the uppercase eyebrows. */
  --track-tight:-.018em; --track-snug:-.011em; --track-wide:.08em;
  /* Near-identical to the two above and **not** the same value, which is why
     absorbing them is the answer and rounding them together is not. */
  --track-title:-.02em; --track-plane:-.012em;

  /* ---- space ------------------------------------------------------------ */
  --s1:.25rem; --s2:.5rem; --s3:.75rem; --s4:1rem; --s5:1.5rem;
  --s6:2rem; --s7:3rem; --s8:4rem;

  /* ---- geometry --------------------------------------------------------- */
  /* **`--wide` and `--shell` are gone** ([D-1637]). They were two more horizontal grids:
     a collection took one width, a three-track page took another, and the masthead above
     both took the viewport. One container now, and what differs between surfaces is the
     grid inside it. **`--measure`, `--narrow` and `--form` are retired too** (ux/84 §2):
     every width a page's content takes is one of the tokens below. */
  --region-mark:56px;   /* a region's tile and its gap, so a card has one text edge */
  /* **One container, shared by the masthead and the page** ([D-1637]). The product had two
     horizontal grids: a spine starting at the viewport edge and running its full width, and
     a composition centred inside it — so *Jobs*, *Settings* and the rest floated above
     columns they had no relationship with, and on a 1536px screen the useful surface was
     the middle three-quarters under a bar using all of it. This is the width both of them
     take, and page archetypes own only the grid **inside** it. */
  /* **ux/84 §2's widths, and the only ones a page may cap at.** One standard container for
     every signed-in page (the header's own box); the Details region and the focused column;
     running text at 72ch; an inline form's fields at 480px; an uploader's drop zone at
     640px. The older per-page widths below retire as each page type moves onto these. */
  --container:84rem;    /* 1344px: the masthead's contents and the page's, on one grid */
  --details:320px;      /* an object page's Details region, beside main at >= 1024 */
  --focused:640px;      /* a focused page's one centred column */
  --settings-content:1040px; /* a settings page's content column, beside the panel (ux/86 86-a) */
  --prose:72ch;         /* running text */
  --field:480px;        /* an inline form's fields */
  /* **`21rem`, because a rail now carries a sentence** ([D-1605] put panels here;
     `A1-security-new.png` puts an account's security standing in one). At `17rem`
     the standing wrapped to nine lines against a column of labels-and-values it
     was never sized for. The note it replaces stands: a rail is still not the
     place for prose — it is the place for one sentence a reader checks while
     acting, and that is what this width is for. */
  --rail:21rem;
  --aside:17rem;        /* a card's side column of icon lines (ux/87 §2) */
  --sections:16.5rem;   /* a section's own parts, each on one line — *Delete this organisation* too (ux/86 86-b) */
  --setting-label:230px; /* a settings row's name and hint (68 §6) */
  --control-h:2.5rem;   /* every control is the same height as every other */
  /* Column widths for the fixed columns of a collection, so a collection's
     shape is chosen from a named scale rather than typed. The proportions stay
     per-collection — what stops being arbitrary is the vocabulary.

     **The steps are the widths already in use, not a tidier four.** Naming them
     this way moves nothing, which matters because four of the collections sit on
     frozen reference surfaces. Reducing the vocabulary on the strength of
     arithmetic is a layout change and is not made here.

     **`--col-xs` was one of them until [D-1405]**, and it went for the opposite
     reason: `B0`'s grid row was its only user, and the Directory archetype draws
     a `table`. A step that sizes nothing is not a vocabulary, it is a leftover. */
  --col-sm:6rem; --col-md:7rem;
  --col-xl:9rem; --col-2xl:10rem; --col-3xl:11rem;

  /* **Breakpoints, named once — and read by a person, not by the stylesheet.**
     A custom property cannot appear in a media query condition, so unlike every
     other token here these two are not substituted anywhere. They are kept
     because the alternative is a bare number in a media query with nothing
     saying what it is. The literals at the two `@media` rules must match them.

     `--bp-narrow` and `--measure` are both 52rem, and that is the reason rather
     than a coincidence: the layout collapses at exactly the width where the
     viewport stops being able to hold the measure reading was tuned to. */
  --bp-wide:64rem; --bp-narrow:52rem;

  /* **The arrival composition's two minimums** (QUESTION 18a): the editorial column holds
     *Every hiring decision,* on one line at `--t-arrival`, and the card holds its form.
     Where both and their gutter cannot fit (70rem), the composition stacks. */
  --arrival-min:24rem; --card-min:360px;

  /* **Card rhythm is one gap** (`66 §5`, QUESTION 20a): between cards in the main column
     and in the rail, on both planes — a step of the scale (59 V-2), not a measured 18. */
  --card-gap:var(--s5);
  /* **The console's text edge inside a card** (`66 §2`, QUESTION 20c): the head card's
     inline padding — where the page's title starts, and so where every panel's heading,
     find field and first column start too. No tile precedes the title any more (ux/84
     ANSWER 48-f), so the gutter is the padding alone. */
  --console-gutter:var(--s5);

  /* **Softened, not rounded.** 3px reads as a browser default that nobody chose; the
     step to 8px is the smallest one that reads as a decision on a card, and it is still
     an instrument rather than a consumer app. `--radius-sm` follows it for the controls
     that sit inside one. */
  --radius:8px;
  --radius-sm:5px;
  --hair:1px;           /* every rule in the product is this */
  --edge:2px;           /* an active or emphasised edge */

  /* ---- colour -----------------------------------------------------------
     Neutrals carry a trace of the accent so the greys read as chosen rather
     than inherited. */
  /* **`--faint` is `#687174`, not `#828d90`** ([D-1644]). It carried `5.0:1` after the
     change and `3.41:1` before it — **below `AA`'s `4.5:1` for normal text** — and it
     carries exactly the roles the scale just made smaller: a lettered column header at
     `12px`, provenance at `13px`, a page's meta line. The hue is unchanged; what changes is
     that the smallest text in the product is now readable, which is the half of a type
     scale a size alone cannot deliver. */
  --ink:#12181a; --quiet:#556063; --faint:#687174;
  --rule:#e0e6e6; --rule-strong:#c6d0d0;
  --page:#fff; --raised:#f6f8f8; --sunken:#eceff0; --on-accent:#fff;
  /* **96's marks** (`1i`, the owner's master): the three inks its tiles and its people
     drawing wear beside the accent — decorative, never a state. */
  --mark-warm:#f59300; --mark-green:#07a877; --mark-violet:#4a2ff0;
  /* **97's sky** (1a's code step and 1o): the master's full-bleed ground, as a gradient —
     its blue top, the warm band behind the card, and the cloud foot. */
  --sky-top:#aaccf1; --sky-band:#e6dde4; --sky-foot:#8d9cbb;

  /* **Affordance, never status** — it says *this can be followed*, and no state
     class borrows it (`U-2`).

     **The accent is blue** (owner ruling, [D-1913]). It was `#0f5257`, a teal the
     product wore on every act, every link and every mark that sits on `--selection`.
     This is a global token migration and **not** a pre-authentication exception: the
     single-accent principle is the thing being preserved, so the hue moves everywhere
     at once or the product has two accents for as long as it takes to finish.

     The ruling names seven values; they land as five tokens, because *pressed* and
     *strong accent text* are one value in the ruling and one decision here. */
  --accent:#2563eb; --accent-hover:#1d4ed8; --accent-deep:#1e40af;
  /* **The edge an accent surface draws, which the product had no name for.** A second
     route is outlined rather than filled, and `--rule-strong` is a neutral hairline —
     it makes the alternative read as a disabled control rather than as the other door. */
  --accent-edge:#bfdbfe;
  /* The selection highlight, and nothing else. It was `--accent-wash`
     while a tertiary action tier also used it; that tier reached no page
     and went in [D-768], leaving one use and a name that described a
     tinted surface the product does not have. The value is untouched —
     the name follows the use, not the other way round ([D-769]). */
  --selection:#eff6ff;

  /* The one alarm hue. */
  --caution:#8a4b00; --caution-bg:#fdf3e7; --caution-rule:#e5c9a3;
  /* Destruction is a different *kind* of consequence, not a louder caution. */
  --danger:#8f2c2c; --danger-bg:#fcf1f1; --danger-rule:#e0b8b8;

  /* **The halo is the ruled colour; the hairline is why it can be seen** ([D-1913]).
     The ruling sets focus to `#93c5fd`, which is a ring drawn *against the control* in
     the vocabulary it comes from. On this product's white page that pale blue carries
     about `1.9:1` — below the `3:1` a non-text indicator owes — so the halo is the ruled
     value and one accent pixel closes it. Nothing about the ring's colour changes; what
     is added is the edge that makes it a ring rather than a glow. */
  --accent-focus:#93c5fd;
  --focus:0 0 0 2px var(--page), 0 0 0 4px var(--accent-focus),
          0 0 0 5px var(--accent);

  /* ---- motion -----------------------------------------------------------
     Short enough to feel like response rather than animation, and disabled
     entirely where the reader has asked for that. */
  --ease:.12s ease;

  /* ---- the recruiter plane's palette ------------------------------------
     **Measured off the drawings, and declared here because this is where
     values live** ([D-1777]). It was a second block on
     `body[data-plane="workspace"]`, which reads well — a plane's palette
     scoped to the plane — and put twenty-one decisions outside the one place
     `D-765` says to look for them. `_stylesheet_outside_root` strips `:root`
     and nothing else, so the block and the hundred literals referring to it
     were, to the rule, a hundred and twenty-one accidents.

     **They keep their own names rather than redefining the canonical ones.**
     No value here matches a canonical token, so a redefinition would be a
     second meaning for a name the rest of the product reads — and the
     operator plane's precedent is to *choose* different tokens, not to
     change what a token means underneath rules that cannot see the change.

     **Declared globally, referenced on one plane.** A token is a name for a
     decision; where it is spent is the rule's business, and every rule that
     spends these is scoped to `workspace`. */
  --h-page:        #f3f7fa;
  --h-card:        #ffffff;
  --h-line:        #e5edf3;
  --h-line-soft:   #eef3f7;
  --h-ink:         #0e1b3d;
  --h-ink-2:       #3f4d64;
  /* **Quiet text that passes on every ground it sits on** (INSTRUCTION 19e, 59 A-1). It
     was `#64748b`: 4.41:1 on the page ground and 4.43:1 on the warning tint, under AA's
     4.5:1 for body text. This is a step along the same slate that clears 4.5:1 on
     **every** ground token of this plane — 4.69:1 on the pink fill that is hardest,
     5.49:1 on the page, 5.92:1 on the card — so one quiet token still serves them all.
     `#59677c` was the lightest that passed and sat 8 from `--h-unset-ink`, which is one
     decision under two names; this is the next step, 13 away. */
  --h-muted:       #56657c;
  /* **The recruiter plane's accent moves with the product's** ([D-1913]). The owner's
     ruling is a *global* token migration preserving the single-accent principle, and this
     plane kept its own: a teal `#0f5a52` on every head tile and act, beside an
     `--h-link` blue on every link. Two hues doing affordance on one plane, and neither
     of them the accent the customer plane now wears — which is the two-accent state the
     principle exists to refuse. The values are the ruling's, mapped onto the names this
     plane already had: primary, the pressed-and-strong step, and the soft ground.

     **`--h-link` is the accent now**, rather than a fourth blue a reader is asked to
     tell apart from it. */
  --h-accent:      #2563eb;
  --h-accent-hi:   #1e40af;
  --h-accent-soft: #eff6ff;
  /* **The console's header bar** (ux/136, the owner: *Platform Admin needs to stand out in
     colour scheme*): a deep indigo ground, white type (`--on-accent`), a violet chip and
     accent. Every
     pairing clears 4.5:1 on the ground (the contrast pin in test_console_header_136). */
  --op-bar:        #1e1b4b;
  --op-bar-muted:  rgba(255, 255, 255, 0.78);
  --op-bar-line:   rgba(255, 255, 255, 0.22);
  --op-chip:       #4c1d95;
  --op-chip-ink:   #ddd6fe;
  --op-accent:     #a78bfa;
  --h-link:        var(--h-accent);
  --h-danger:      #c02a37;
  --h-danger-soft: #fdecee;
  --h-danger-line: #f6d3d8;
  --h-warn:        #92610f;
  --h-warn-soft:   #fef6e7;
  --h-warn-line:   #f7e3be;
  /* ---- the plane's surface ramp -----------------------------------------
     **A gradation, and every rung of it is a decision the drawings make**
     ([D-1777]). Collapsing these onto their nearest neighbour is invisible in
     text and **visible in a fill**: `.requirement-settled` lost a tint of
     seven units against the white card it sits on, and four and a half
     million pixels of one page changed. The check's twelve is a threshold for
     two *names* being one decision; a flat area large enough to read as a
     surface is not covered by it.

     So the ramp is named rather than reduced, and its members are exempted
     from the near-identical rule **as a ramp** — they are stacked surfaces
     told apart by adjacency and by the border between them, never by
     contrast with each other. */
  --h-fill-02:            #e2e8ef;
  --h-fill-04:            #e3f5e9;
  --h-fill-05:            #e7ecf2;
  --h-fill-06:            #e8eef7;
  --h-fill-07:            #edf1f5;
  --h-fill-08:            #eef3f8;
  --h-fill-10:            #f1f4f7;
  --h-fill-11:            #f1f5f9;
  --h-fill-12:            #f4f7fa;
  --h-fill-15:            #f7fafc;
  --h-fill-16:            #f8fafc;
  --h-fill-17:            #f8fbfd;
  --h-fill-18:            #fafcfe;
  --h-fill-19:            #fbdee2;
  --h-fill-20:            #fbfdfe;

  /* ---- the plane's type roles -------------------------------------------
     **A role, not a size** ([D-1644], applied to this plane at [D-1777]). These
     were seventeen pixel values typed into component rules, which is how *card
     heading* came to mean one thing in one column and another elsewhere. The
     names say what a thing **is**; the values are the drawings' own and none
     has moved.

     **Seventeen against the canonical ten**, which is the same divergence the
     weights and the line-heights carry and is recorded once, in `OQ-NNN`. */
  /* ux/86 ANSWER 61-a (the owner, 2026-09-27): the whole ladder is measured from the
     masters' glyphs (cap height ÷ 0.727, Inter) — title 42, region 23, card head 21, lede 18,
     rows 15, pill and hint 14 — every role in the same order. */
  /* **ux/123 §1 — the owner's one semantic scale for every application page** (INSTRUCTION
     119, 2026-09-30). A role, sized once; the weights are the rules' (`--h-w-*`). It retires
     the 42px generic H1, the 29px job H1 and every master pass's surface-specific rung. */
  --type-wordmark:        22px;   /* the product wordmark in the shell, 700 */
  --type-nav:             15px;   /* top navigation labels, 600 */
  --type-page-title:      32px;   /* every page H1, 700 */
  --type-section:         23px;   /* a card's or region's H2, 700 */
  --type-card-title:      16px;   /* component and card H3: row titles, tile heads, group heads, 600 */
  --type-body:            15px;   /* body text, table cells, form values, controls, 400 */
  --type-lede:            17px;   /* lede and introductory copy under a page title, 400 */
  --type-meta:            14px;   /* captions, sublines, times, hints, 400 */
  --type-meta-strong:     14px;   /* the same, emphasised, 500 */
  --type-meta-small:      13px;   /* the smallest supporting copy and glyphs, 400 */
  --type-pill:            13px;   /* status pills and chips, 600 */
  --type-figure:          30px;   /* a tile's figure, 30/700, tile figures only (ANSWER 118-a, ux/123 §1) */
  /* 13a, drawn to the owner's master (94), measured at 1536px. */

  /* ---- the plane's type rungs -------------------------------------------
     **Valued exactly as drawn, and prefixed for the reason the palette is**
     ([D-1777]). The drawings climb 400/500/600/700/800 and the system's
     ladder is 400/540/600/650; snapping the plane onto it lightened the
     wordmark visibly and moved every page's rhythm, so the rungs are named
     rather than approximated.

     **`OQ-022` is answered, and the sizes are the part that stays**
     ([D-1846]). Weight, rhythm and tracking are now aliases into the canonical
     ladder above — one set of rungs, declared once — which is the property the
     question was opened about: *the same role set at two values depending on
     which stylesheet a rule happens to sit in.*

     **The sizes are adopted as plane-scoped rather than converged**, for the
     reason the measurement gives and one more. The canonical scale is in `rem`
     and these are in `px`: folding them together means either mixing units in
     one ladder or converting these to `rem`, and the second changes what a
     reader's own font-size setting does to approved pages. That is a product
     change, not a vocabulary one — the palette's precedent applies, *a plane may
     legitimately be painted differently* — and it is the axis whose re-baselining
     the row said needs the owner's eye and a re-shot screenshot under a stated
     browser version. Nothing here moves a pixel. */
  /* **Aliases, not a ladder** ([D-1846]). Every value above is the canonical
     one, so there is a single set of rungs declared once and the `--h-` names
     are how the recruiter plane's ~500 rules reach them. Nothing renders
     differently — the values are identical by construction — and the property
     `OQ-022` was opened about is gone: a role is no longer set at two values
     depending on which stylesheet a rule happens to sit in.

     **The names are kept rather than swept.** Rewriting 500 call sites to prove
     a point about vocabulary would be a diff nobody can review against
     screenshots, and the alias says the same thing where a reader of either
     stylesheet will meet it. */
  --h-w-normal:    var(--w-normal);
  --h-w-mid:       var(--w-mid);
  --h-w-semi:      var(--w-semi);
  --h-w-bold:      var(--w-bold);
  --h-lh-flat:     var(--lh-flat);
  --h-lh-tight:    var(--lh-tighter);
  --h-lh-snug:     var(--lh-relaxed);
  --h-lh-card:     var(--lh-card);
  --h-lh-body:     var(--lh-body);
  --h-lh-prose:    var(--lh-normal);
  --h-lh-loose:    var(--lh-loose);
  --h-track-title: var(--track-title);
  --h-track-snug:  var(--track-plane);

  --h-radius:      14px;
  --h-radius-sm:   10px;

  /* ---- the plane's semantic colours -------------------------------------
     **One name per decision, and the name is the role** ([D-1777]). These
     were sixty literals typed into component rules — eleven near-identical
     near-whites, seven light greys, four blues for four different things —
     which is the pile `D-765` calls the difference between a system and a
     set of rules. Values that a reader cannot tell apart (the check's own
     twelve) were one decision made twice and are one token now; the rest
     are named for what they do, because a hex in a rule is a decision
     nobody can find again. Nothing here is a new colour: every value is one
     the drawings already carry. */
  --h-line-strong:        #d6e0e9;   /* a control's own border — select, cancel, decide */
  --h-line-hover:         #c3d1de;   /* the same border under the pointer, and an empty-state glyph */
  --h-line-dashed:        #cbd9e6;   /* a drop target's edge, which is dashed and therefore lighter */
  --h-mark:               #8fa6bb;   /* a quiet glyph on a pale ground */
  --h-mark-step:          #5a718c;   /* a numbered step's glyph, which carries more weight */
  --h-mark-row:           #7d8ea2;   /* a row's leading glyph */
  --h-chip-ink:           #4d5f75;   /* a neutral lozenge's word */
  --h-unset-ink:          #5a6b7f;   /* the word for a treatment nobody has chosen */
  --h-ok:                 #14663a;   /* an open job, a supporting requirement — a settled positive */
  --h-ok-2:               #1a6b3c;   /* the same positive one step lighter, on a lozenge */
  --h-ok-soft:            #e5f5ea;   /* a positive lozenge's ground */
  --h-ok-line:            #cfe8db;   /* a positive panel's edge — co-sign, readiness cleared */
  --h-info-ink:           #1a4fa0;   /* an important requirement's word */
  --h-count-ink:          #2d4f86;   /* a count lozenge's figure */
  --h-policy:             #5b3ba0;   /* must-have — the one hue nothing else in the product uses */
  --h-policy-soft:        #efe8fb;   /* its ground */
  --h-critical:           #a81f2d;   /* a critical requirement's word */
  --h-critical-soft:      #fce5e8;   /* its ground */
  --h-danger-ink:         #8f2531;   /* what a destruction says, and a rejected outcome's note */
  --h-danger-edge:        #f0c3c9;   /* a destructive control's border */
  --h-danger-wash:        #fbdade;   /* a rejected outcome's ground */
  --h-warn-wash:          #fdf1dc;   /* a draft lozenge, and a cautionary one */
  --h-warn-note:          #f9e9c9;   /* an advisory outcome's note ground */
  --h-warn-ink:           #7d520b;   /* its word */
  --h-failed-line:        #dfe7ee;   /* an infrastructure failure's edge — neutral, not alarming */
  /* **The quiet ink, by name** (INSTRUCTION 19e). `#55657a` sat 3 from the passing
     `--h-muted`, which is one decision under two names; the mark now wears that token. */
  --h-failed-ink:         var(--h-muted);
  /* **Four tints the drawings keep apart and a colour metric cannot** ([D-1777]).
     Each is within twelve of a neutral of the same lightness, so the check reads
     them as one decision; a reader does not, because they are the *hue* of a
     state — a positive wash is green, an informational one is blue, and a grey
     one would say neither. Named, valued exactly as drawn, and exempted with
     this reason rather than collapsed into the neutral beside them. */
  --h-ok-wash:            #eef8f2;   /* a cleared readiness, a countersignature */
  /* **13a's areas** (94 §6): one ink and one tint each; blues are the accent's own steps. */
  --h-area-jobs: var(--h-accent); --h-area-jobs-soft: var(--h-accent-soft);
  --h-area-people: var(--accent-hover); --h-area-people-soft: var(--h-accent-soft);
  --h-area-access: var(--h-accent-hi); --h-area-access-soft: var(--h-accent-soft);
  --h-area-candidates: #4338ca; --h-area-candidates-soft: #eef0fd;
  --h-area-plan: #0e6b85; --h-area-plan-soft: #e4f3f7;
  --h-area-requirements: var(--h-ok); --h-area-requirements-soft: #e9f6ee;
  --h-area-organisation: #0f6b62; --h-area-organisation-soft: #e3f3f0;
  --h-area-billing: #9a4a07; --h-area-billing-soft: #fcf0de;
  --h-area-documents: #6b21a8; --h-area-documents-soft: #f3ebfc;
  --h-area-questions: #9d174d; --h-area-questions-soft: #fbe9f1;
  --h-area-system: #475569; --h-area-system-soft: #eef1f5;
  /* **Role colours** (ux/87 §4): each role's tint and its ink, wherever a role is shown as
     a tile; the same pairs colour the initials discs (§3). Text on each tint is ≥ 4.5:1. */
  --role-admin:           #e8f0fe;  --role-admin-ink:           var(--accent-hover);
  --role-recruiter:       #f1ecfe;  --role-recruiter-ink:       #6d28d9;
  --role-hiring-manager:  #e6f5ec;  --role-hiring-manager-ink:  #166534;
  --role-interviewer:     var(--caution-bg);  --role-interviewer-ink:     #b4400f;
  --disc-teal:            #dcf2f4;  --disc-teal-ink:            #0f6b63;
  --disc-rose:            var(--danger-bg);  --disc-rose-ink:            #b0174f;
  --h-info-wash:          #e4edfc;   /* an important requirement's lozenge, and
                                        a note on an outcome still being read —
                                        six apart when drawn, which is one
                                        decision made twice */
  --h-chip:               #e8eef5;   /* a monogram, a count — a neutral chip */   /* its mark */

  /* ---- depth -------------------------------------------------------------
     **Six washes, and not one new colour.** Every stop is either a token this
     palette already holds or a `color-mix` of two of them, so the audit that
     counts hex literals still counts the same eighty and `PUX-9`'s *no second
     accent* is kept by construction rather than by care.

     **`U-2` is untouched, and that is a property of the list rather than a
     promise.** A wash is spent on **chrome** — the ground, the masthead, a
     mark's disc, a card's top edge, the affordance — and on no state class.
     Nothing meaning *unknown*, *cautionary* or *danger* takes one, so exactly
     one hue still carries alarm and a gradient never says a thing is good.

     **The light is above, on all six.** A page lit from one direction is the
     only convention a reader does not have to be taught, and two directions
     in one product is the kind of drift a named token exists to stop.

     `color-mix` rather than a new literal: the sheet already depends on
     `:has()` (`style_customer`'s shell-less rule), which is the later feature
     of the two, so this adds no floor it did not already have. */
  --grad-ground:    linear-gradient(180deg,
                      color-mix(in srgb, var(--page) 72%, var(--raised)) 0%,
                      var(--raised) 48%,
                      color-mix(in srgb, var(--sunken) 76%, var(--raised)) 100%);
  --grad-masthead:  linear-gradient(180deg, var(--page) 0%,
                      color-mix(in srgb, var(--page) 86%, var(--raised)) 100%);
  /* The affordance, and the one wash a reader presses. */
  /* The light stop is 94% accent (UXA-02): at 86% it was #4479ee at the top and the
     label's pixels read 4.47:1 white-on-it; at 94% the top is #326cec, 4.68:1, so every
     pixel under a label clears 4.5:1 and the wash keeps its three steps. */
  --grad-accent:    linear-gradient(180deg,
                      color-mix(in srgb, var(--accent) 94%, var(--page)) 0%,
                      var(--accent) 54%, var(--accent-deep) 100%);
  /* The wash a control wears **under the pointer**, so it starts one step in. */
  --grad-accent-hi: linear-gradient(180deg, var(--accent-hover) 0%,
                      var(--accent-deep) 100%);
  /* A mark's disc — diagonal, because a 3.5rem tile lit from straight above
     reads as a gradient and lit from the corner reads as a surface. */
  --grad-mark:      linear-gradient(145deg,
                      color-mix(in srgb, var(--selection) 40%, var(--page)) 0%,
                      var(--selection) 56%,
                      color-mix(in srgb, var(--selection) 78%, var(--accent)) 100%);
  /* A card's own top, and deliberately almost nothing: the border still draws
     the edge, exactly as `--radius`'s note says. */
  --grad-sheen:     linear-gradient(180deg,
                      color-mix(in srgb, var(--page) 90%, var(--selection)) 0%,
                      var(--page) 44%);
}

/* **The one rung that is redefined rather than overridden** ([D-1913]). A `40px`
   editorial line is a composition at a desk and four wrapped lines on a phone. The
   narrow value is set on the token, not by a second `font-size` in a layout rule,
   because a rule that sizes text by value is what the role vocabulary exists to
   stop — and it is set here, where every other visual decision is made. `64rem` is
   `--bp-wide`, which a media condition cannot read; the literal has to match. */
@media (max-width:64rem) { :root { --t-arrival:1.9rem; } }

* { box-sizing:border-box; }
html { -webkit-text-size-adjust:100%; }

body {
  margin:0; font-weight:var(--w-normal);
  font:var(--t-lede)/var(--lh-normal) var(--font);
  /* **The ground is not the surface.** `--page` is what a content surface is painted
     in; the application behind it is one step down, which is what lets a card read as a
     card without a shadow doing the work. `PUX-9` already did this for the operator
     plane (`body[data-plane="operator"]`) and the customer plane kept a white-on-white
     ground, so a section had nothing to sit on. */
  color:var(--ink); background:var(--raised);
  /* **The wash sits on the ground and never on a content surface** — `--page`
     stays flat, so nothing a reader reads against has a moving value behind it. */
  background-image:var(--grad-ground); background-attachment:fixed;
  text-underline-offset:var(--edge);
}

::selection { background:var(--selection); color:var(--accent-deep); }

:focus-visible { outline:none; box-shadow:var(--focus); border-radius:var(--radius-sm); }

.skip-link {
  position:absolute; left:var(--s2); top:calc(var(--s2) * -8);
  background:var(--page); color:var(--accent); padding:var(--s2) var(--s3);
  border:1px solid var(--rule-strong); border-radius:var(--radius); z-index:10;
}
.skip-link:focus { top:var(--s2); }

/* **Words for the accessible name only** (`63 §1.1` · QUESTION 10). A control whose visible
   text is one word — *Change* — gets the rest of its name from text inside it, so the
   visible word stays part of the name (WCAG 2.5.3) and a links list reads *Change email
   address* rather than *Change, Change*. Clipped, not removed: a screen reader still reads
   it, which is the whole point. */
.visually-hidden {
  position:absolute; width:1px; height:1px; margin:-1px; padding:0; overflow:hidden;
  clip-path:inset(50%); white-space:nowrap; border:0;
}

a { color:var(--accent); }
a:hover { color:var(--accent-hover); }

/* ---- shell -------------------------------------------------------------
   **Two levels, not one strip.** Identity and operator context on the first
   line; the spine on the second, where each group is a block with its own
   label above its destinations. The single horizontal line put group headings
   and destinations in one typographic run and ran out of room on a laptop. */
/* **The chrome is a surface, not the ground.** The masthead and the ground were the same
   value, so the bar the reader navigates from dissolved into the page behind it. `PUX-9`
   had already separated them on the operator plane; this is the same separation for the
   planes that kept a white-on-white pairing. */
/* **The bar takes the page's white and a wash of the ground beneath it** — the edge is
   still the border's work, and the gradient is what stops a white bar on a white page
   from needing one to be seen at all. */
.masthead { border-bottom:1px solid var(--rule); background:var(--page);
            background-image:var(--grad-masthead); }

/* -- PUX-9 · the Platform plane, distinguished at plane level ------------------------
   **Plane-scoped values for existing tokens, and not one new value.** `PUX-9` forbids a
   second accent and any change to the semantic palette; the plan's own answer is that the
   distinction *needs plane-scoped values for existing tokens, not new ones*. So the
   workspace's raised tone becomes the console's ground and the masthead takes the page's
   white — **the figure/ground relationship is inverted rather than recoloured.**

   A workspace is a white page under a tinted bar. The console is a tinted ground with a
   white bar and a heavier edge under it: the same two colours, saying *this is not your
   organisation's workspace* without borrowing a hue that means something else.

   Keyed on `data-plane`, which the shell now **declares** ([D-1392]). The customer plane
   is still recovered from `:has()` in `style_customer` and stays that way until it moves
   to its wrapper: an inference that works is not a defect, and replacing it is that
   plane's stage. */
body[data-plane="operator"] { background:var(--raised); }
body[data-plane="operator"] .masthead { background:var(--page);
                                        border-bottom:var(--edge) solid var(--rule-strong); }
.masthead-identity { display:flex; align-items:baseline; gap:var(--s2); }
/* **The product's name, at its own rung** ([D-1912]). `D-1908` gave the wordmark one
   treatment across the three shells and left it on `--t-card`, so the masthead said
   *Evicora* at exactly the size of a card's heading. The drawings set it larger than
   anything beside it and heavier than any heading — which is what a masthead's first
   element is for — and it stays **one treatment**: this rule is the only one that sizes
   it, on every plane. */
.wordmark {
  font-size:var(--t-wordmark); font-weight:var(--w-heavy);
  letter-spacing:var(--track-tight); color:var(--ink); text-decoration:none;
}
.wordmark:hover { color:var(--accent-hover); }
/* Which plane the reader is on. **Not a release label** — the product's internal
   scheduling vocabulary is never shown to an operator. */
.shell-badge {
  font-size:var(--t-eyebrow); text-transform:uppercase; letter-spacing:var(--track-wide);
  font-weight:var(--w-semi); color:var(--accent);
  border:1px solid var(--accent); border-radius:var(--radius);
  padding:1px var(--s2); background:var(--page);
}

/* **Identity is safety information, so it is given presence.** *Which account is this*
   and *acting as what* decide whether the next click is legitimate — most sharply for an
   operator acting across every tenant, and not only for them — and a name whispered in
   the corner makes the reader infer what the shell should assert.

   Renamed from `.operator-context` ([D-1501]'s placement): it stopped being the
   operator's the moment every authenticated plane drew one. The two line classes keep
   their names, because what they say is unchanged. */
.account-context {
  display:flex; align-items:center; gap:var(--s3);
  font-size:var(--t-help); line-height:var(--lh-snug);
  border-left:2px solid var(--accent); padding-left:var(--s3);
}
/* **The disc is one character: the name's first, else the address's** ([D-1607], ux/80
   §4c). With a name set it is the name's first grapheme; with none it stays the first
   character of the address, a landmark rather than a claim — never initials derived from an
   email. Same drawing as `.monogram` on a roster row and deliberately so — one treatment for
   *this is who* wherever it appears. */
.account-monogram {
  flex:0 0 auto; width:2rem; height:2rem; border-radius:50%;
  display:flex; align-items:center; justify-content:center;
  background:var(--selection); color:var(--accent-deep);
  /* **The size every masthead draws** (INSTRUCTION 41, S124): all three mastheads carry
     `headers-v2`, whose rule set the letter at body size, so this rung was never the one a
     reader saw and one role read as two sizes. */
  font-weight:var(--w-semi); font-size:var(--t-body);
}
.whoami { color:var(--ink); font-weight:var(--w-semi); }
/* **The second name, under the first** ([D-1881]). On the platform plane the reader has
   two: `PA-5`'s reference, which is their name in the product and the string a customer
   quotes back, and the address, which names them to Evicora. Drawn on one line the
   reference read as a qualifier on the address; a line each says which is which without a
   word. Quiet, because the address is the supporting one. */
.whoami-second { color:var(--quiet); font-size:var(--t-help); }
/* **The capacity a reader is operating in, as a lozenge** ([D-1912]). It was a quiet
   line of text because one role had one and it sat under an address. Every authenticated
   reader has one now, and the question it answers — *in what capacity am I operating* —
   is not decoration: Evicora's available acts and its authority both vary by role, so a
   reader who cannot see which one they hold cannot tell whether the act in front of them
   is one they may perform.

   **The word is the product's and the colour is this layer's.** The title comes from
   `model/roles.yaml` through a generated module; the accent is a design token and the
   model holds none. `--role-*` below is that pair kept apart.

   **It is a capacity, not a state.** `U-2` — nothing here alarms, and the role tints
   never reach attention, refusal, completion or a destructive act. */
.acting-as {
  /* **No `align-self`** ([D-1912]). It carried `flex-start`, which is right in the
     canonical column and wrong on the plane that lays these out in a row: the lozenge
     sat 9px above the address it qualifies. It takes the container's own alignment now,
     so it sits on the line it belongs to whichever way the corner is arranged. */
  display:inline-flex; align-items:center;
  padding:1px var(--s3); border-radius:999px;
  background:var(--role-ground); color:var(--role-ink);
  font-size:var(--t-help); font-weight:var(--w-semi);
  font-variant-numeric:tabular-nums; white-space:nowrap;
}
/* **The ladder** ([D-1912]) — administration at the top, the role that reads and does not
   decide at the bottom, and the platform capacity outside the tenant altogether in the
   neutral ink rather than the organisation's accent. */
.acting-as-admin { --role-ground:color-mix(in srgb, var(--accent) 15%, var(--page)); }
.acting-as-recruiter { --role-ground:color-mix(in srgb, var(--accent) 10%, var(--page)); }
.acting-as-hiring-manager { --role-ground:color-mix(in srgb, var(--accent) 6%, var(--page)); }
.acting-as-interviewer { --role-ground:var(--sunken); --role-ink:var(--ink); }
.acting-as-platform { --role-ground:color-mix(in srgb, var(--ink) 9%, var(--page));
                      --role-ink:var(--ink); }

/* **The account corner wraps before it paints outside the page**, and it is stated
   here rather than above because CSS source order decides a tie ([D-1912]). The lozenge
   and the outlined button each widened this cluster, and on the console — where the
   address is the longest string in the product and `D-1905` already measured the row past
   the viewport — that pushed *Sign out* off the right edge at `360px`. A control a reader
   cannot reach is worse than one that has moved to the next line, and the identity beside
   it is `style_shell`'s own *safety information, not a courtesy*. So the row is allowed
   to wrap and the address to break, which is what stops the width being the sum of three
   things that each refuse to. */
@media (max-width: 30rem) {
  /* **A cap, because wrapping is not enough on its own** ([D-1912]). A column flex takes
     the width of its widest child and nothing above was constraining it, so
     `white-space:normal` had nothing to wrap *against* and the longest capacity —
     `Platform Administrator` — carried the whole block past the viewport. */
  .account-context { flex-wrap:wrap; justify-content:flex-end; row-gap:var(--s2);
                     max-width:100%; }
  .whoami, .whoami-second { overflow-wrap:anywhere; }
  .acting-as { white-space:normal; }
}




/* **The account's own destinations and the act that ends the session.** A row, because
   there are at most three of them and they are the reader's own — the spine's two-level
   grouping exists for ten items of unequal weight and would be scaffolding here.

   **`Sign out` is not drawn as a primary act.** It is `.action`'s quiet relative: the
   button a person looks for deliberately and never presses by accident, beside links
   they follow often. Giving it the accent would make leaving the most prominent thing
   in the chrome. */
.account-context .account-nav ul { display:flex; gap:var(--s3); flex-wrap:wrap;
                                   list-style:none; margin:0; padding:0; }
/* **Each destination wears its mark** ([D-1912]). `topmenu.png` draws them beside the
   address at the same level, a shield on `Security` and a bell on `Notices` — the icon
   vocabulary has no bell and `MEGAPHONE` is its mark for something announced. The mark is
   what makes an account destination findable at a glance in a bar otherwise made of
   words; `U-2` — it repeats the label rather than adding a claim to it. */
.account-context .account-nav a { color:var(--quiet); text-decoration:none;
                                  white-space:nowrap; display:inline-flex;
                                  align-items:center; gap:var(--s2); }
.account-context .account-nav a .icon { width:1rem; height:1rem; flex:0 0 auto; }
.account-context .account-nav a:hover { color:var(--ink); }
.account-context .account-nav a[aria-current="page"] { color:var(--accent-deep);
                                                       font-weight:var(--w-semi); }
/* **The act is a row in the identity menu** (`63 §6`): the hairline above it separates it,
   so the form draws no rule of its own — the old left border read as a stray divider. */
.sign-out { margin:0; }
/* **Drawn as More's row, and ordinary** (`63 §6`): icon and ink label, not an accent
   button and not danger — signing out is always available and never the page's business
   (`U-2`). Still [D-1501]'s POST form; only the `<button>` is styled. */
.sign-out-action {
  display:flex; align-items:center; justify-content:flex-start; width:100%; cursor:pointer;
  white-space:nowrap; box-sizing:border-box; min-height:62px; padding:8px 16px; gap:22px; border-radius:10px;
  background:none; border:0; color:var(--ink); text-align:left;
  font:inherit; font-size:var(--t-lede); line-height:var(--lh-tight); text-decoration:none;
}
.sign-out-action .icon { width:32px; height:32px; flex:0 0 32px; color:var(--accent-deep); }
/* **The hover has to restate the shape, not just the colour** ([D-1599]).
   `.sign-out-action` clears the accent pill in its resting rule, and that rule does not
   apply on hover: `button:hover` in the primitives is `0,1,1` and beats a bare `0,1,0`
   class for `background`, so the pill came back — while this rule, at `0,2,0`, won only
   `color` and set it to `--ink`. Measured in a browser: `rgb(18,24,26)` on
   `rgb(10,57,61)`, **1.42:1**, against the `4.5:1` a reader needs. The control a person
   looks for deliberately became unreadable at exactly the moment they pointed at it.

   **It is the only button in the product that resets the accent**, so this is a fix and
   not a pattern: `.empty-state`, `.absence` and `.note` also say `background:none` and
   none of them is a `button`, so no generic hover reaches them. */
.sign-out-action:hover { background:var(--selection); box-shadow:0 0 0 5px var(--selection);
                         color:var(--ink); }


/* ==========================================================================================
   **The workspace header** (`63 §4–§5`, restoring [D-1521] and [D-562]).

   One visual row and two regions: `Evicora | Primary: the bar · More | Account: Security ·
   Notices | the reader`. The bar holds exactly the items the registry marks `header: bar`;
   everything else is in More, in registry order. **Three widths, one DOM** — focus and
   reading order stay wordmark → Primary → Account → identity at every one of them:

     ≥1280     one row; the identity shows the person and their role, and opens *Sign out*.
     769–1279  one row; the identity collapses to its avatar (the words kept for the name).
     ≤768      row 1 the wordmark and an avatar that opens the folded Account region;
               row 2 the Primary bar as up to four equal cells, icon over label.

   **The disclosures are native popovers** — Esc closes, focus returns, no script (`63 §5.5`).
   Nothing here hides `[popover]` outright: where the attribute is unsupported the content
   renders in place, visible and reachable. Each popover is placed under its trigger by
   anchor positioning, with a fixed placement where that is unsupported.
   ========================================================================================== */
.masthead.headers-v2 {
  max-width:var(--container); margin:var(--s4) auto 0; min-height:var(--s8);
  padding:0 var(--s7); border:var(--hair) solid var(--rule); border-radius:var(--radius);
  background:var(--page); background-image:none;
  box-shadow:0 8px 24px color-mix(in srgb, var(--accent) 8%, transparent);
  display:flex; align-items:center; gap:var(--s6);
}
.masthead.headers-v2 .masthead-identity {
  display:flex; align-items:center; flex:0 0 auto;
  padding-right:var(--s6); border-right:var(--hair) solid var(--rule);
}
.masthead.headers-v2 nav[aria-label="Primary"] {
  display:flex; align-items:center; gap:var(--s6); flex:1 0 auto;
  margin:0; padding:0; max-width:none;
}
.masthead.headers-v2 .header-primary {
  display:flex; align-items:center; gap:var(--s6); list-style:none; margin:0; padding:0;
}
.masthead.headers-v2 .header-primary li, .masthead.headers-v2 .account-nav li { list-style:none; }
.masthead.headers-v2 .header-primary a,
.masthead.headers-v2 .account-nav a,
.masthead.headers-v2 .masthead-more-toggle {
  display:inline-flex; align-items:center; gap:var(--s2);
  color:var(--ink); font:inherit; font-size:var(--t-lede); text-decoration:none;
  white-space:nowrap; cursor:pointer; background:none; border:0; padding:0;
}
.masthead.headers-v2 .header-primary a .icon,
.masthead.headers-v2 .account-nav a .icon,
.masthead.headers-v2 .masthead-more-toggle .icon {
  width:var(--s5); height:var(--s5); color:var(--accent-deep);
}
.masthead.headers-v2 .header-primary a:hover, .masthead.headers-v2 .account-nav a:hover,
.masthead.headers-v2 .masthead-more-toggle:hover,
.masthead.headers-v2 a[aria-current="page"],
.masthead.headers-v2 .masthead-more-toggle[aria-current="page"] { color:var(--accent); background:none; }
.masthead.headers-v2 .masthead-more { flex:0 0 auto; }
.masthead.headers-v2 .masthead-more-toggle { anchor-name:--masthead-more; }

/* ---- More ---------------------------------------------------------------------------
   The reference's geometry, unchanged: its right edge sits 168px past the toggle's, which
   puts the pointer over the toggle. */
/* **One menu surface** (`63 §6`): More, the reader's identity menu and the folded Account
   region are the same container. **Where anchor positioning is unsupported** each menu
   still opens in a sensible place rather than the viewport's centre: every placement below
   states a plain `top`/`right` first, and a browser that cannot parse `anchor()` drops the
   second declaration and keeps it. */
.masthead-more-menu, .account-who, .account-region:popover-open {
  inset:auto; margin:0; padding:10px 14px 12px; overflow:visible;
  background:var(--page); color:var(--ink);
  border:2px solid var(--rule); border-radius:16px;
  box-shadow:0 14px 30px color-mix(in srgb, var(--accent) 12%, transparent);
}
.masthead-more-menu {
  position-anchor:--masthead-more;
  top:calc(var(--s8) + var(--s5)); right:var(--s4);
  top:calc(anchor(bottom) + 12px); right:calc(anchor(right) - 168px); min-width:418px;
}
.masthead-more-menu::before {
  content:""; position:absolute; top:-11px; right:208px; width:18px; height:18px;
  background:var(--page); border-left:2px solid var(--rule); border-top:2px solid var(--rule);
  transform:rotate(45deg);
}
.masthead-more-menu ul { list-style:none; margin:0; padding:0; }
.masthead-more-menu li { margin:0; }
.masthead-more-group {
  margin:var(--s2) var(--s4) var(--s1); color:var(--quiet); font-size:var(--t-eyebrow);
  font-weight:var(--w-semi); letter-spacing:var(--track-wide); text-transform:uppercase;
}
.masthead-more-menu a {
  display:flex; align-items:center; color:var(--ink); text-decoration:none; white-space:nowrap;
  box-sizing:border-box; min-height:62px; padding:8px 16px; gap:22px; border-radius:10px;
  font-size:var(--t-lede); line-height:var(--lh-tight);
}
.masthead-more-menu a:hover { background:var(--selection); box-shadow:0 0 0 5px var(--selection); }
.masthead-more-menu a .icon { width:32px; height:32px; flex:0 0 32px; color:var(--accent-deep); }

/* ---- the Account region and the reader ------------------------------------------------ */
/* **The reader gives way, the destinations do not** (QUESTION 10k): where the row is short
   the identity's second line wraps the role under the address, and no item is overlapped. */
.masthead.headers-v2 .account-context {
  display:flex; align-items:center; gap:var(--s4); flex:0 1 auto; min-width:0;
  padding-left:var(--s6); border-left:var(--hair) solid var(--rule);
}
.masthead.headers-v2 .account-nav ul {
  display:flex; align-items:center; gap:var(--s6); margin:0; padding:0; flex-wrap:nowrap;
}
/* The Account destinations hold their width like the bar's; only the reader's summary,
   whose name can end in an ellipsis, gives way (QUESTION 10l). */
.masthead.headers-v2 .account-nav { flex:0 0 auto; }
/* **Help beside Account** (ux/74 H-3): first in the account region at desktop, the row
   after Notices in the phone avatar menu — one copy per width. */
.masthead.headers-v2 .account-help-phone { display:none; }
/* A spineless reader's destination bar (ANSWER 32-c (3)): laid out as the Primary nav is,
   without being the masthead's direct `nav` child that means *has a spine*. */
.masthead.headers-v2 .masthead-destinations { display:contents; }
/* **The phone fold's copies** (ux/74 §2b): a folded bar item's More row, and a More that
   only folded items fill, exist at phone widths only. */
.masthead.headers-v2 .more-folded,
.masthead.headers-v2 .masthead-more.more-phone-only { display:none; }
.masthead.headers-v2 .account-monogram {
  width:var(--s7); height:var(--s7); border-radius:50%; flex:0 0 auto; display:inline-flex;
  align-items:center; justify-content:center; background:var(--selection);
  color:var(--ink); font-size:var(--t-body); font-weight:var(--w-heavy);
}
.masthead.headers-v2 .account-toggle {
  min-width:0; display:inline-flex; align-items:center; gap:var(--s3); padding:0; margin:0;
  background:none; border:0; font:inherit; color:inherit; cursor:pointer; text-align:left;
}
/* Never shrinks under its avatar (ANSWER 32-c (2)): the 48px mark overflowed a 2px button. */
.masthead.headers-v2 .account-toggle-who { anchor-name:--masthead-who; flex:0 0 auto; }
.masthead.headers-v2 .account-toggle-fold { anchor-name:--masthead-account; }
.masthead.headers-v2 .account-summary { display:flex; flex-direction:column; gap:var(--s1);
                                        min-width:0; }
/* The address and the role share the second line; if they cannot, the role wraps under
   the address rather than the address breaking (QUESTION 10k). */
.masthead.headers-v2 .account-summary-second {
  display:flex; flex-wrap:wrap; align-items:center; gap:var(--s1) var(--s2);
}
.masthead.headers-v2 .account-summary-second .whoami-second { white-space:nowrap; }
/* The dot and the role are one unit (ux/74 H-6), so they wrap together. */
.masthead.headers-v2 .account-summary-role {
  display:inline-flex; align-items:center; gap:var(--s2); white-space:nowrap;
}
/* A name longer than the room left never breaks mid-token: one line, ended by an ellipsis.
   The full value is the trigger's accessible name (QUESTION 10l). */
.masthead.headers-v2 .account-summary .whoami {
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:100%;
}
/* **The menu shows the whole name** (ux/80 §4c): a person's name runs to 80 characters, in
   any script and with no spaces, so inside the identity menu it wraps rather than being cut. */
.masthead.headers-v2 .identity-block .whoami {
  white-space:normal; overflow-wrap:anywhere; max-width:100%;
}
.masthead.headers-v2 .account-summary-sep { color:var(--quiet); }
.masthead.headers-v2 .account-summary-second .acting-as { align-self:center; }
.masthead.headers-v2 .whoami { color:var(--ink); font-size:var(--t-body); font-weight:var(--w-semi); }
.masthead.headers-v2 .acting-as {
  display:inline-block; align-self:flex-start; padding:var(--s1) var(--s2);
  border-radius:var(--radius); background:var(--selection); color:var(--accent);
  font-size:var(--t-help); font-weight:var(--w-semi);
}

/* **The identity menu** (`63 §6`): under the trigger, right-aligned to it, never wider
   than the viewport. The identity block says whose menu it is at every width — repeating
   the trigger at ≥1280 on purpose — and aligns its left edge with the rows below it. */
.account-who {
  position-anchor:--masthead-who; top:calc(var(--s8) + var(--s5)); right:var(--s4);
  top:calc(anchor(bottom) + 12px); right:anchor(right);
  min-width:min(280px, calc(100vw - 32px)); max-width:calc(100vw - 32px);
}
.masthead.headers-v2 .identity-block {
  display:flex; flex-direction:column; align-items:flex-start; gap:var(--s1);
  padding:8px 16px; min-width:0;
}
.masthead.headers-v2 .identity-divider {
  width:100%; margin:var(--s1) 0; border:0; border-top:1px solid var(--rule);
}

/* ≥1024: the Account region stands in the bar, and the folded copy and its avatar are not
   drawn. Scoped to these widths so that below them the popover's own rules apply.
   (ANSWER 32-d: the one-row header begins at 1024; below it, the two-row header.) */
@media (min-width: 64rem) {
  .masthead.headers-v2 .account-region {
    position:static; inset:auto; width:auto; height:auto; margin:0; padding:0; border:0;
    overflow:visible; background:none; color:inherit;
    display:flex; align-items:center; gap:var(--s5); min-width:0;
  }
  .masthead.headers-v2 .account-toggle-fold { display:none; }
}

/* **The tab row at tablet widths** (ANSWER 32-d): the cells keep a maximum width and sit
   centred, so four cells are not stretched across a thousand pixels. */
@media (min-width: 48.0625rem) and (max-width: 63.9375rem) {
  /* `html` outranks the ≤1023 block's own rule, which comes later in this sheet — without
     it the cells stretched to ~192px at 800 (measured). */
  html .masthead.headers-v2 nav[aria-label="Primary"] {
    grid-auto-columns:minmax(0, 10rem); justify-content:center;
  }
}

/* ≤1279: the bar's spacing tightens (ANSWER 32-c (2), measured): four destinations, More,
   Help · Account · Notices and the avatar fit inside the card from 769 up only with the
   tighter gaps and padding. Labels never fold. */
@media (max-width: 79.9375rem) {
  .masthead.headers-v2 { padding:0 var(--s4); gap:var(--s3); }
  .masthead.headers-v2 nav[aria-label="Primary"],
  .masthead.headers-v2 .header-primary,
  .masthead.headers-v2 .account-nav ul { gap:var(--s3); }
  .masthead.headers-v2 .masthead-identity { padding-right:var(--s3); }
  .masthead.headers-v2 .account-context { padding-left:var(--s3); }
}

/* **The avatar alone, at every width** (ANSWER 32-c (1), measured): a truncated identity
   is worse than none, and the header's content is capped (`--container`), so no width gives
   every reader's bar room for a full 20ch name. The words stay the trigger's accessible
   name, and the identity menu it opens says whose it is in full. */
.masthead.headers-v2 .account-toggle-who .account-summary {
  position:absolute; width:1px; height:1px; margin:-1px; padding:0; overflow:hidden;
  clip-path:inset(50%); white-space:nowrap; border:0;
}

/* ≤1023: two rows (ANSWER 32-d — was ≤768; at 769–1023 the one-row header with ux/74's
   bars cannot fit). The Account region folds into the avatar's popover; Primary becomes a
   row of equal cells, one column per item present (the bar items and More), so the row
   always spans the width like a tab row (63 §5, QUESTION 10i). */
@media (max-width: 63.9375rem) {
  .masthead.headers-v2 {
    padding:var(--s2) var(--s4); margin-top:var(--s3);
    display:grid; grid-template-columns:minmax(0, 1fr) auto;
    grid-template-areas:"mark reader" "primary primary"; row-gap:var(--s1); column-gap:var(--s3);
  }
  .masthead.headers-v2 .masthead-identity { grid-area:mark; border-right:0; padding-right:0; }
  /* A target is ≥44px here (`63 §5`); the wordmark's hit area grows, its type does not. */
  .masthead.headers-v2 .wordmark { display:inline-flex; align-items:center; min-height:44px; }
  .masthead.headers-v2 .account-context { grid-area:reader; border-left:0; padding-left:0; }
  .masthead.headers-v2 nav[aria-label="Primary"] {
    grid-area:primary; display:grid; grid-auto-flow:column; grid-auto-columns:minmax(0, 1fr); gap:0;
  }
  .masthead.headers-v2 .header-primary, .masthead.headers-v2 .header-primary li { display:contents; }
  .masthead.headers-v2 .header-primary a,
  .masthead.headers-v2 .masthead-more-toggle {
    flex-direction:column; justify-content:center; gap:var(--s1); width:100%;
    min-height:48px; font-size:var(--t-help);
    /* A label may wrap to two lines — never truncate, never overflow (ANSWER 32-a (2)). */
    white-space:normal; text-align:center; overflow-wrap:break-word;
  }
  .masthead.headers-v2 .masthead-more { display:contents; }
  /* **At most four cells, More included** (ux/74 §2b): items past the third fold into
     More, whose copy of them shows here; "current" follows the visible copy. */
  .masthead.headers-v2 .header-primary li.fold-phone { display:none; }
  .masthead.headers-v2 .masthead-more.more-phone-only { display:contents; }
  .masthead.headers-v2 .more-folded { display:list-item; }
  .masthead.headers-v2 .masthead-more-toggle[data-current-folded] { color:var(--accent); }
  .masthead.headers-v2 .account-toggle-who { display:none; }
  .masthead-more-menu { right:calc(anchor(right) - var(--s2)); min-width:min(418px, calc(100vw - 32px)); }
  .masthead-more-menu::before { right:var(--s5); }
  /* **The folded region is the identity menu** (`63 §6`, QUESTION 10m-2): the menu's own
     box dissolves into it and everything reads in DOM order — Security, Notices, then who
     you are and leaving: the hairline, the identity block, *Sign out* directly under the
     identity it ends. No `order`: what a sighted reader meets first is what is read first. */
  .masthead.headers-v2 .account-region:popover-open {
    position-anchor:--masthead-account; top:calc(var(--s8) + var(--s5)); right:var(--s4);
    top:calc(anchor(bottom) + 12px); right:anchor(right);
    min-width:min(280px, calc(100vw - 32px)); max-width:calc(100vw - 32px);
    display:flex; flex-direction:column; align-items:stretch; gap:0;
  }
  .masthead.headers-v2 .account-who { display:contents; }
  /* Where destinations precede it, the hairline moves above the identity; a reader with
     none (the operator, `63 §4.2`) keeps the ≥769 menu exactly. */
  .masthead.headers-v2 .account-nav ~ .account-who .identity-divider { display:none; }
  .masthead.headers-v2 .account-nav ~ .account-who .identity-block {
    margin-top:var(--s1); padding-top:calc(8px + var(--s1)); border-top:1px solid var(--rule);
  }
  .masthead.headers-v2 .account-region .account-nav ul {
    flex-direction:column; align-items:stretch; gap:0;
  }
  .masthead.headers-v2 .account-help-wide { display:none; }
  .masthead.headers-v2 .account-help-phone { display:list-item; }
  /* Security and Notices as More's row, ≥44px at this width (62px, as More's). */
  .masthead.headers-v2 .account-region:popover-open .account-nav a {
    display:flex; align-items:center; box-sizing:border-box; min-height:62px;
    padding:8px 16px; gap:22px; border-radius:10px; color:var(--ink);
    font-size:var(--t-lede); line-height:var(--lh-tight); white-space:nowrap;
  }
  .masthead.headers-v2 .account-region:popover-open .account-nav a:hover {
    background:var(--selection); box-shadow:0 0 0 5px var(--selection); color:var(--ink);
  }
  .masthead.headers-v2 .account-region:popover-open .account-nav a .icon {
    width:32px; height:32px; flex:0 0 32px; color:var(--accent-deep);
  }
}


/* **The outer geometry is invariant** ([D-1637]): every authenticated surface is this
   container, and what differs between a report, a settings page and a workspace is the grid
   *inside* it. The page's side padding matches the masthead's, so the first column starts
   under the wordmark. */
main { max-width:var(--container); margin:0 auto; padding:var(--s6) var(--s5) var(--s8); }
/* **ux/84 §1–§2: three page types, declared in `surfaces.yaml` and drawn from `data-layout`**
   (never chosen by a renderer). A list/settings page uses the whole container; a focused
   page is one centred 640px column; an object page is the container, with a 320px Details
   region beside main at >= 1024 where it declares one (drawn with the regions, 84 §6.3). */
body[data-layout="focused"] main { max-width:var(--focused); }
/* **A focused part of a sectioned area** (13f; 84 §8b.1): the section navigation sits
   outside the content grid, so main keeps the container and the page's own column beside
   the navigation is the focused one. */
body[data-layout="focused"] main:has(.page-sections) { max-width:var(--container); }
body[data-layout="focused"] .with-sections > .rail-main { max-width:var(--focused); }
/* **List / settings** (84 §2): the page uses the whole container — tables and dense record
   lists fill it — and running text keeps its readable width. Nothing stretches only because
   the page is wide: a form's fields keep --field, and a paragraph keeps --prose. */
body[data-layout="list"] main > * { max-width:none; }
body[data-layout="list"] main p { max-width:var(--prose); }
/* **Object** (84 §2–§4): main is flexible and fills the container; where the page declares
   Details, a 320px region sits beside it (32px gap) at >= 1024, and below that it follows the
   task. The same child rules apply inside main as on a list page. */
body[data-layout="object"] main > *, body[data-layout="object"] .object-main > * { max-width:none; }
body[data-layout="object"] main p { max-width:var(--prose); }
.object-main { min-width:0; display:grid; grid-template-columns:minmax(0, 1fr);
  gap:var(--card-gap); align-content:start; }
/* **The grid's gap is the spacing** (ux/84 ANSWER 53-a §5): a card's own bottom margin added
   to it drew an object page's cards, and its foot line, 48px apart where --card-gap is 24. */
html[lang] body[data-plane] .object-main > * { margin-block:0; }
@media (min-width:64rem) {
  /* Main itself, or a sectioned page's own column beside its section navigation
     (84 §8b.1: the only permitted left column). */
  body[data-layout="object"][data-details] :is(main, .rail-main):has(> .details-region) {
    display:grid; grid-template-columns:minmax(0, 1fr) var(--details);
    column-gap:var(--s6); align-items:start;
  }
  /* What main holds above the task (a breadcrumb) spans both columns. */
  body[data-layout="object"][data-details] :is(main, .rail-main):has(> .details-region)
    > :not(.object-main):not(.details-region) { grid-column:1 / -1; }
}
.details-region { margin:0; }
.details-heading { margin:0 0 var(--s3); font-size:var(--t-card); }
.details-list { margin:0; display:grid; gap:var(--s3); }
.details-row { display:grid; gap:2px; }
.details-row dt { color:var(--quiet); font-size:var(--t-help); }
.details-row dd { margin:0; font-variant-numeric:tabular-nums; overflow-wrap:anywhere; }

/* **ux/84 ANSWER 48-f — inline forms on list and object pages.** Two or more fields lay
   out two per row at >= 1024, each at most `--field`, one per row below; the submit (and
   anything else that is not a field) takes its own row under the grid, at the text edge.
   A single-field form puts its button beside the field. Focused pages keep one column. */
@media (min-width:64rem) {
  body:is([data-layout="list"], [data-layout="object"]) main .action-form:has(> .field ~ .field) {
    display:grid; grid-template-columns:repeat(2, minmax(0, var(--field)));
    column-gap:var(--s5); row-gap:var(--s3); align-items:start; max-width:none;
  }
  /* A long answer takes the row: a textarea beside a one-line field pushed its label down. */
  body:is([data-layout="list"], [data-layout="object"]) main
    .action-form:has(> .field ~ .field) > .field:has(textarea) { grid-column:1 / -1; max-width:none; }
  body:is([data-layout="list"], [data-layout="object"]) main
    .action-form:has(> .field ~ .field) > .field > textarea { max-width:none; }
  body:is([data-layout="list"], [data-layout="object"]) main
    .action-form:has(> .field ~ .field) > :not(.field) { grid-column:1 / -1; justify-self:start; }
  body:is([data-layout="list"], [data-layout="object"]) main
    .action-form:has(> .field ~ .field) > .field { margin:0; max-width:var(--field); }
}
/* **Not a row's edit state** (68 §3; ux/84 ANSWER 51-a): an opened row keeps its chooser at
   `--field` with the act and *Cancel* under it, never beside. */
body:is([data-layout="list"], [data-layout="object"]) main
  .action-form:not(.account-edit):has(> .field):not(:has(> .field ~ .field)):not(:has(textarea)) {
  display:flex; flex-wrap:wrap; align-items:flex-end; gap:var(--s3); max-width:none;
}
body:is([data-layout="list"], [data-layout="object"]) main
  .action-form:not(.account-edit):has(> .field):not(:has(> .field ~ .field)):not(:has(textarea))
  > .field { flex:1 1 16rem; max-width:var(--field); margin:0; }
/* The attention callout above a settings card keeps the card gap below it (ux/84 48-h). */
body[data-plane="workspace"] .rail-main > .account-callout { margin:0 0 var(--card-gap); }
/* …and so does a settings card or the grave block with a card after it (ux/84 84-S: on
   13f the reach card, the grave block and the steps touched; on 13 the rows met Exports).
   The foot's provenance line keeps its own spacing. */
body[data-plane="workspace"] .rail-main > :is(.account-card, .grave):has(+ :is(div, section)) {
  margin:0 0 var(--card-gap); }
/* **ux/84 §2a — the page is not a card.** The title, its introduction and whatever the
   header carries under them sit on the page canvas on every page of every plane; a card
   is kept for a grouped record, an interactive unit or a callout. `.head-card` stays the
   header's container (its top row and what sits below it), without the box — and keeps
   its inset, so the title still starts on the one text edge every card's heading starts
   on (66 §2). */
body[data-layout][data-plane] .head-card {
  background:none; border-color:transparent; box-shadow:none;
}
/* **ux/84 ANSWER 84-H — *Learn more*, a quiet inline link** beside the concept it deepens:
   the sentence's own colour, underlined like any link, and never split across lines. */
/* Wraps at a phone's width at the larger type scale (ux/86 ANSWER 61-a). */
a.learn-more { color:inherit; text-decoration:underline; white-space:normal; }
/* **One title edge** (66 §2; ANSWER 48-e): a workspace page whose header is not in a
   `.head-card` (Account, Email address, Notices) starts its title on its canvas, where
   every other page's title and every card's text start — a card's border and `--s5` in.
   (Account's section names sit in their cards' heads since ux/121.) */
body[data-plane="workspace"] main > .page-head,
body[data-plane="workspace"] :is(main, .object-main, .rail-main) > :is(.absence, .empty-state),
/* ux/84 ANSWER 84-S §5: a focused page's stepper and caption, which are not cards, start
   there too — they sat on the card's border, 25px left of the title (13g). */
body[data-layout="focused"][data-plane="workspace"] main > :is(.flow-steps, p.quiet) {
  padding-left:calc(1px + var(--s5)); }
/* ux/84 ANSWER 53-a §5: the foot's *Read …* line, in the column it dates and on the same
   edge — it sat on the card border, or under the section navigation. */
body[data-plane="workspace"] :is(main, .rail-main, .object-main) > #computed-at {
  padding-left:calc(1px + var(--s5)); }
/* …and one card gap below the last card: a section already ends on `--card-gap`. */
body[data-plane="workspace"] :is(main, .rail-main, .object-main) > :is(.surface-section, .card-labelled) + #computed-at {
  margin-top:0; }
/* **A page that declares no layout is focused** (ux/84 §2, §8b.4: step-up and the public
   landing hold no `surfaces.yaml` row): its children keep the focused column, left-aligned
   in the container — the column is a reading rule and the container is a composition rule,
   and they are not the same rule. */
body:not([data-layout]) main:not(.wide) > * { max-width:var(--focused); }

/* Public pages only — an authenticated shell carries no footer. */
.page-footer {
  border-top:1px solid var(--rule); color:var(--faint);
  padding:var(--s4); text-align:center; font-size:var(--t-help);
}

/* ---- typography -------------------------------------------------------- */
h1 { font-size:var(--t-page); line-height:var(--lh-tight); letter-spacing:var(--track-tight);
     margin:0 0 var(--s5); font-weight:var(--w-strong); text-wrap:balance; }
h2 { font-size:var(--t-card); line-height:var(--lh-snug); margin:var(--s6) 0 var(--s3);
     font-weight:var(--w-semi); }
/* **`eyebrow` is the canonical regime's treatment for a structural region's name**
   ([D-1911]), declared once for the role rather than per plane and per primitive.

   Two adopted decisions say this and `D-1910` undid both. `D-1536` is an owner ruling in
   terms — *the eyebrow represents wayfinding/region hierarchy … apply it only to headings
   whose contract identifies them as structural regions* — and `D-1882` says the same for
   the console, from the drawings: *the part's name as an eyebrow beside it … **the name
   is an eyebrow, not a heading***. `org_recovery_case.png`, `migration.png` and
   `identity.png` all draw it: small, uppercase, muted, beside a mark in the gutter, under
   a larger document title.

   **`D-1910` read the old console test as confusing presentation with semantics.** It was
   not: it was `D-1882`'s ruling, drawn first and then written down. This is that
   correction, bound to `region-name` so neither `section()` nor `region_head()` decides
   it — which is also what repairs `D-1882`'s own reach, since the page its drawing came
   from composes `section()` and its selector only ever matched `.region-head`.

   **An eyebrow stays an `h2`.** The role is typographic; the document outline is not, and
   nothing here turns a heading into a `<p>` to obtain a size. */
/* **One section-heading style on every plane** (ux/84 ANSWER 48-g): a structural region's
   name is the panel heading's type — no eyebrow, no capitals — as D-1911's eyebrow is
   retired. */
.region-name { font-size:var(--t-card); font-weight:var(--w-semi); color:var(--ink); }
/* **And the role `D-1536` exempts, declared rather than inherited** ([D-1911]). An
   explanation's heading is *a named paragraph rather than a destination*, so it keeps
   ordinary type. The value equals the base `h2`'s on purpose and is stated anyway: a role
   that arrives by fallback is one no rule chose, and the invariant is that a treatment is
   selected by meaning. `prose_section` is `public_page`'s alone, so one declaration
   serves it. */
.explanation-name { font-size:var(--t-card); }
h3 { font-size:var(--t-lede); margin:var(--s5) 0 var(--s2); font-weight:var(--w-semi); }
p { margin:var(--s3) 0; }
.surface-section { border-top:1px solid var(--rule); padding-top:var(--s4);
                   margin-top:var(--s6); }
.surface-section:first-of-type { border-top:none; margin-top:var(--s4);
                                 padding-top:0; }
/* **A sentence is body prose** ([D-1643]) — it inherited a smaller size from whatever
   container it landed in, so the same authored sentence read at one size in a card and
   another beside a form. */
.quiet, .absence, .sentence { color:var(--quiet); font-size:var(--t-body); }

/* **What a requirement says, and whether it disqualifies** ([D-1078]). The value is
   the substance of the row and reads at full weight; `constraint` is the one word
   that changes what the row *does* to a candidate, so it is marked rather than quiet
   -- `L-2`'s rule that a disqualifying thing is visually separated from a routine one. */
/* **`.proposal`, `.treatment` and `.awaiting` went with the row that wore them**
   ([D-1780]). `RL-18`'s mark, `D-1764`'s `UI-6` rename and the disqualification/pending
   distinction are all still live product decisions — what is gone is the **cell layout**
   that carried them, superseded when `UI-1` reworked the requirement row and dead ever
   since. The live row states every one of these facts itself: `treatment_label` in a
   pill, `awaiting_a_person` in the band it sorts into, and `where_it_came_from` as its
   own line. Three classes reaching no surface is what `D-1777`'s coverage rule reports,
   and `A48` is what found the renderer beneath them. */
small { font-size:var(--t-help); color:var(--quiet); }

/* **A value the reader cannot break is still the reader's to read** ([D-1483]).
   `1fr`'s automatic minimum is `min-content`, and an email address is one unbreakable
   token — so the value track could not shrink below it, and at `360px` the whole document
   went to `400`. `D-1448`'s finding, one primitive down: a page wider than the viewport
   at the supported minimum, measured in a browser because no gate computes a box.
   `overflow-wrap:anywhere` gives the token a break point, which lowers `min-content` and
   lets the track resolve; `minmax(0,…)` is the belt to that brace, so a future value with
   no break point at all shrinks the cell instead of the page. The label track keeps
   `max-content`: labels are authored, short, and the column they set is the alignment. */
.facts { display:grid; grid-template-columns:max-content minmax(0, 1fr);
         gap:var(--s2) var(--s5); margin:var(--s4) 0; }
/* **What names a fact is a label** ([D-1644]) — the value beside it reads at body,
   and the pair is legible as a pair because the two roles differ. */
.facts dt { color:var(--quiet); font-size:var(--t-label);
            font-weight:var(--w-medium); }
.facts dd { margin:0; overflow-wrap:anywhere; }


/* **`D-1870`'s groups, kept inside More** (`63 §5`, QUESTION 10j). The group names carry
   ordinary grouping; the one rule marks consequence — `Custody` set apart *by a rule and a
   position, never by colour*, because nothing in it is a fault. A rule between every group
   would make this one mean only "next group". */
.masthead-more-menu .nav-group-custody { margin-top:var(--s2); padding-top:var(--s2);
                                         border-top:1px solid var(--rule-strong); }

/* ============================================================================
   The console's page head ([D-1881])

   **The workspace plane has had this since the design wave and the operator plane has
   not.** `style_hiring` gives a tenant page a rounded-square mark on the accent's palest
   ground, beside the name; the console drew the base treatment, so the two planes'
   head cards were different objects for no reason either of them states.

   **Uppercase here and not there**, which is the one difference the drawings do assert:
   an operator moves between fourteen surfaces that look alike, and the name of the one
   they are on is the thing they are scanning for. Same argument as the pre-auth card at
   [D-1880], reached from the other end. */
body[data-plane="operator"] .head-card-top {
  display:flex; align-items:flex-start; gap:var(--s5);
}
/* **The mark beside the name, not across the card from it** (`66 §2`): the base
   `.page-head` is `space-between`, which this never reset, so on a card with no standing
   the title stood at the far side of the card from its own mark (`B0`: the mark at 105,
   the title at 759). */
body[data-plane="operator"] .page-head {
  display:flex; align-items:flex-start; justify-content:flex-start; gap:var(--s5);
  flex:1 1 auto; border:none; padding:0; margin:0;
}
body[data-plane="operator"] .page-head-main { display:contents; }
body[data-plane="operator"] .page-head-words { min-width:0; }
/* **One title style on every plane** (ux/84 ANSWER 48-f): the console's compact uppercase
   title (`D-1881`, restored as a variant at `D-1910`) is retired, and its `h1` and lede
   are the customer plane's. */
body[data-plane="operator"] .page-head .page-lede {
  margin:var(--s2) 0 0; color:var(--quiet); font-size:var(--t-lede);
}
/* The lozenge sits with the name rather than under it — `16`'s arrangement, which the
   console drawings take. */
body[data-plane="operator"] .head-card-aside { text-align:right; flex:0 0 auto; }

/* ============================================================================
   The console's regions, as cards ([D-1882])

   `org_recovery_case.png` draws each part of a case as its own card with the region's mark
   in a left gutter and its name as an eyebrow. The console drew regions as headings on a
   flat page, so a five-part case read as one long column and the marks `D-1392` fixes sat
   inline where they could not do any work.

   **The mark takes the medallion's ground**, which is the same drawing the head card and
   the pre-auth card use — one treatment for *this is what this part is about*, wherever it
   appears. `MARK_CLASS`'s cautionary variant still reaches it, because a region that
   exists only when something is in the way may wear the caution ground.

   **The name is an eyebrow, not a heading.** A card states one thing; at heading weight
   the part's name competes with the page's, which is `D-1403`'s duplication one level
   down. */
body[data-plane="operator"] main > .surface-section {
  background:var(--page); border:var(--hair) solid var(--rule);
  border-radius:var(--radius); padding:var(--s5) var(--s6);
  margin:0 0 var(--card-gap);
}
/* **Card rhythm is one gap** (`66 §5`): the head card and a panel take it too — `B0`
   measured 90 between its cards and `B8` none. */
body[data-plane="operator"] main > .head-card,
body[data-plane="operator"] main > .panel { margin:0 0 var(--card-gap); }
/* **One title edge on every plane** (66 §2; ux/84 ANSWER 48-g): the console's page gutter
   and its cards' inset are the workspace's, so an operator page's title and every card's
   text start where a customer page's do — x=101 at 1440. */
/* `html[lang]` first: the console's nav is not a direct child of `.masthead`, so the
   no-spine rule (`body:not(:has(.masthead > nav)) main`, (0,1,3)) matches operator pages
   too, and would win at equal weight. */
html[lang] body[data-plane="operator"] main { padding-left:28px; padding-right:28px; }
body[data-plane="operator"] .head-card,
body[data-plane="operator"] main > .surface-section { padding-left:var(--s5); padding-right:var(--s5); }
@media (max-width: 720px) {
  html[lang] body[data-plane="operator"] main { padding-left:16px; padding-right:16px; }
}
/* **A panel takes the plane's gutter** (`66 §2`, QUESTION 20c): its heading, whatever
   precedes its table, and the table's first column start on `--console-gutter` — the edge
   the page's title starts on — rather than at the panel's own padding, 76px short of it.
   The table still full-bleeds, so its rows' grounds reach the panel's edges, and it keeps
   `grid-scroll`'s contained scroll where a narrow window cannot hold its columns. */
body[data-plane="operator"] main > .panel > .panel-head { padding-left:var(--console-gutter); }
body[data-plane="operator"] main > .panel > .panel-body > :not(.grid-scroll):not(table) {
  margin-left:calc(var(--console-gutter) - var(--s5));
}
body[data-plane="operator"] main > .panel .grid thead th:first-child,
body[data-plane="operator"] main > .panel .grid tbody th:first-child,
body[data-plane="operator"] main > .panel .grid tbody td:first-child {
  padding-left:var(--console-gutter);
}
body[data-plane="operator"] main > .surface-section > .region-head {
  display:flex; align-items:flex-start; gap:var(--s5); margin:0 0 var(--s4);
  border:none; padding:0;
}



/* **The other half of the inversion** ([D-1910]). This drew `region_head`'s title as an
   eyebrow while the customer plane drew `section`'s that way — the same role, opposite
   components, two planes of one regime. `section-title` takes the regime's section
   treatment now and the compact wayfinding one belongs to `eyebrow`. The colour and the
   spacing are this plane's and stay. */
body[data-plane="operator"] main > .surface-section > .region-head h2 {
  margin:0; color:var(--ink);   /* the section heading, not a quiet eyebrow (ux/84 48-g) */
}
body[data-plane="operator"] main > .surface-section > .region-head .region-lede {
  margin:var(--s2) 0 0; color:var(--ink); font-size:var(--t-body);
}
/* ---- the page behind a dialog -------------------------------------------
   `document.page(dialog=…)` wraps everything but the dialog in one `inert` element
   (`65 §3`). It is not a box: every region keeps the place in the body's layout it had. */
.page-inert { display:contents; }

/* ---- collections -------------------------------------------------------
   Rows, not a `<table>`: the markup is a list because a list is what the view
   returns. The grid gives it a table's legibility and the header row gives it
   the column semantics four unlabelled meanings were relying on the reader to
   infer. */
/* `listing-head` was here until [D-1405] — `B0` was its only emitter, and a real
   `thead` is what `data_table` gives the Directory instead. */
.listing { list-style:none; margin:0 0 var(--s4); padding:0; }
.listing > li { display:grid; gap:var(--s1) var(--s4); align-items:baseline;
                padding:var(--s3) var(--s4); border-bottom:1px solid var(--rule); }
.listing > li:hover { background:var(--raised); }

/* **A gridded collection names its columns** ([D-1447]). `listing-head` was here until
   `D-1405` deleted it with `B0`'s grid, and it comes back **smaller by everything the
   old one had to restate**: that head was a `<div>` beside the `<ul>`, so it carried its
   own `display:grid`, gap, alignment and padding, and it scrolled independently of the
   rows it labelled. This head is an `<li>` **inside** the list, so the geometry above is
   already its own and the caller's row class supplies the columns — the head and its rows
   resolve the same two rules, which is why they cannot come apart.

   Only the label treatment is left, and it is `.grid thead th`'s: a column heading is a
   **label**, so uppercase and tracked-out is what it is rather than a token worn by a
   sentence ([D-1392] · [D-1444]). The rule below it is the stronger one, because it
   separates an axis from members rather than one member from the next. */
/* **One grid for the collection, so the head and its rows resolve one set of tracks.**
   Sharing the row class was not enough: each `<li>` is its own grid container, so a
   `minmax()` or `auto` track sizes against *that* row's content and the head's short words
   came out 44px and 58px narrower across `9`'s last four columns. The template lives on
   the `<ul>` — the caller puts the row's own class there — and each row is `subgrid`, so
   there is one resolution and drift is not a thing that can happen.

   **`subgrid` is the whole mechanism and its absence is the floor**: a browser without it
   drops the declaration and the row falls back to its own class, which is what `D-1445`
   shipped. */
.listing.listing-columns { display:grid; }
.listing.listing-columns > li { grid-template-columns:subgrid; grid-column:1 / -1; }

.listing > li.listing-head {
  font-size:var(--t-eyebrow); text-transform:uppercase; letter-spacing:var(--track-wide);
  color:var(--faint); font-weight:var(--w-semi);
  padding-top:0; padding-bottom:var(--s2);
  border-bottom:1px solid var(--rule-strong);
}
/* **No hover ground.** `.listing > li:hover` lights a member; the axis is not one, and
   lighting it would say the reader could open it. */
.listing > li.listing-head:hover { background:none; }

/* `organisation-row` and `organisation-name` were here until [D-1405]. `B0` is the
   Directory archetype and draws a real `table` now, so both described markup that no
   longer exists. `org-type` stays: the cell is still a cell and still its own kind of
   value. */
.org-type { color:var(--quiet); font-variant-numeric:tabular-nums; }

/* `rights-request` was here until [D-1444]. `16` is the Queue archetype and draws a real
   `table` now, so the class described a `<li>` that no longer exists — `D-1405`'s note one
   collection over, for `organisation-row`. `deferred-erasure` stays: `DR-9a`'s region is
   still a listing, and still its own kind of row. */
.job-row, .candidate-row, .member-row,
.contract-row, .requirement-row,
.conflict-row, .attempt-row, .assignee-row,
.access-entry,
.work-row, .undecided-row {
  font-size:var(--t-body);
}

/* `row-actions` was here until [D-1397]. `B1` and `B4` were its only emitters and the
   Queue archetype gave the exits a band of their own, so the class describes markup that
   no longer exists — and a rule reaching no page is what `D-768` spent a commit removing.
   `page-navigation` keeps the treatment; it is the facet row's. */
.page-navigation { display:flex; gap:var(--s3); flex-wrap:wrap;
                                 justify-self:end; align-items:baseline; }
/* **A facet row is a region, not a row's last cell** ([D-1374], `PUX-2`).
   `justify-self:end` is right inside a collection row, where these links are the
   grid's final column and the values before them set the reading line. `B2` draws
   the same component as a **band under the standing sentence**, and there is no
   column to sit at the end of -- so it drifted to the right margin, away from the
   object it is about. Scoped by the region rather than by a new class: the treatment
   is unchanged and only the anchoring differs. */
.page-navigation a { font-size:var(--t-nav); text-decoration:none;
                                     white-space:nowrap; color:var(--quiet);
                                     border-bottom:1px solid transparent; }
.page-navigation a:hover { color:var(--accent-hover);
                                                 border-bottom-color:var(--accent); }
/* B2's facet row and its *exceptional* destination mark went with its redraw to the owner's
   master (ux/134): the doors are one quiet line of links (`.tl-doors`). */

/* ---- an adjudication case's stages -------------------------------------
   `C-2`. Nine acts in one region made advancing a case, deciding it, abandoning it
   and installing an administrator read as the same kind of move. The group is a
   **stage**, so it is separated by space and a quiet label rather than by a box:
   these are not four objects, they are one page's acts arranged by what they do. */
/* ---- neutral paging ----------------------------------------------------
   `PUX-5`. Three controls on one line, and the ordinal between them so a reader
   sees where they are rather than counting clicks. **Each step is a form**,
   because `D-575` keeps the narrowing out of the URL and a page-2 link would
   silently widen the search it was paging within -- so the buttons carry the
   prefix they page inside.

   The steps are `action-secondary`: moving through a list is not an act on
   anything, and drawing them at the weight of *Find* would make navigating the
   directory look like doing something to it. */
.paging {
  display:flex; gap:var(--s4); align-items:center; flex-wrap:wrap;
  margin:var(--s5) 0 0; padding-top:var(--s4);
  border-top:var(--hair) solid var(--rule);
}
.paging .action-form { margin:0; }
.paging .sentence { margin:0; font-variant-numeric:tabular-nums; }

.act-group { margin:0 0 var(--s6); }
.act-group:last-of-type { margin-bottom:var(--s4); }
.act-group-label {
  font-size:var(--t-eyebrow); text-transform:uppercase; letter-spacing:var(--track-wide);
  color:var(--faint); font-weight:var(--w-semi);
  margin:0 0 var(--s3); padding-bottom:var(--s2);
  border-bottom:var(--hair) solid var(--rule);
}

/* ---- empty states ------------------------------------------------------
   `U-2`. **An absence Nova has not judged must not read as a fault.** Since ux/84 ANSWER
   48-f it is a sentence on the text edge — no disc, no bordered or tinted box, no
   centring — plus the first action for holders. It replaces a collection; it never
   trails one. */
.empty-state, .absence {
  color:var(--quiet); font-size:var(--t-body);
  padding:0; border:0; border-radius:0; background:none; margin:var(--s3) 0;
  text-align:left;
}

/* ---- action hierarchy --------------------------------------------------
   `L-2`, with every state a control actually has. **Two actions do not both
   get primary styling because both are available** — availability is not
   urgency, and the page's own contract says which act its window makes
   immediate.

   One height, one padding, one radius, one weight, everywhere. A control that
   measures differently on two surfaces is two controls.
   ========================================================================== */
.actions { display:flex; flex-wrap:wrap; gap:var(--s3); margin:var(--s5) 0;
           align-items:flex-start; }

/* **An anchor drawn as a control loses the underline** ([D-1648]). `.action` has always
   been allowed on an `<a>` — the refusal card's way out is one — and the rule set every
   property of a control except the one a link brings with it, so a button-shaped thing
   came out with a line under its label. The two channels are the shape and the colour;
   the underline is what tells prose from a destination, and there is no prose here. */
a.action { text-decoration:none; }
.action, button, input[type="submit"] {
  font:var(--w-medium) var(--t-body)/1 var(--font);
  min-height:var(--control-h); padding:0 var(--s4);
  border:var(--hair) solid var(--accent); border-radius:var(--radius);
  background:var(--accent); color:var(--on-accent);
  /* **The one wash a reader presses.** `--grad-accent` is two steps of the accent
     already in the border beside it, so the control gains depth and not a colour —
     `U-2`'s *the accent is affordance* is the reason this is the primitive that may
     take one and the cautionary note is not. Stated as `background-image` on purpose:
     every variant below resets it by setting the `background` shorthand, so a
     secondary, a destructive and an irreversible control stay flat without naming
     this at all. */
  background-image:var(--grad-accent);
  cursor:pointer; display:inline-flex; align-items:center; justify-content:center;
}
/* **The colour is restated, and it is an anchor that makes that necessary** ([D-1604]).
   `a:hover` in the tokens sets `color:var(--accent-hover)` — the very colour this paints
   behind the label — and at `0,1,1` it beats a bare `.action` at `0,1,0`. A `<button>`
   never noticed, because no generic rule recolours one; the moment a control is an anchor
   the label took the background's exact value and vanished at `1.00:1`.

   This is `D-1599`'s defect in the mirror: there a generic hover supplied a `background`
   the class had cleared, here it supplies a `color` the class had set. Both come of a
   resting rule that does not apply on hover, so **a control's `:hover` states every
   property its own base rule states.** */
.action:hover, button:hover, input[type="submit"]:hover {
  background:var(--accent-hover); border-color:var(--accent-hover);
  background-image:var(--grad-accent-hi);
  color:var(--on-accent);
}
/* **Pressed is a state, not a hover.** Without it a control gives no signal that
   it received the press, which on a slow page is where a person clicks twice. */
/* **Pressed flattens the wash**, because a surface that depresses is lit less, and the
   one thing a gradient must not do is stay identical through a state change. */
.action:active, button:active { background:var(--accent-deep); background-image:none;
                                transform:translateY(1px); }
.primary-action { font-weight:var(--w-semi); }

/* Secondary is the same shape at lower contrast — **not smaller**, because size
   would say it does less rather than that it is not the expected next step.

   **And it is the accent outline, on every plane** (`65 §6`, QUESTION 19b): one secondary
   style in the product, the one the act-block tier and the homepage already draw. */
.action-secondary {
  background:var(--page); color:var(--accent); border-color:var(--accent-edge);
}
.action-secondary:hover { background:var(--selection); border-color:var(--accent);
                          color:var(--accent-deep); }
/* **The operator plane's default is the secondary too** (QUESTION 19b): a control is
   filled only where its surface names it the one act (`primary-action`), as on the
   workspace plane. The danger tiers are excluded by name, so they still win. */
body[data-plane="operator"] .action:not(.primary-action):not(.action-destructive):not(.action-irreversible),
body[data-plane="operator"] .action-form button:not(.primary-action):not(.action-destructive):not(.action-irreversible) {
  background:var(--page); background-image:none; color:var(--accent);
  border-color:var(--accent-edge);
}
body[data-plane="operator"] .action:not(.primary-action):not(.action-destructive):not(.action-irreversible):hover,
body[data-plane="operator"] .action-form button:not(.primary-action):not(.action-destructive):not(.action-irreversible):hover {
  background:var(--selection); background-image:none; color:var(--accent-deep);
  border-color:var(--accent);
}
.action-destructive, .action-irreversible {
  background:var(--page); color:var(--danger); border-color:var(--danger-rule);
  /* Pushed away from the ordinary actions, so the destructive one is not the next
     button along from the one a person meant to press. Reset at `--bp-narrow`,
     where the row is a column and there is no "away" to push it to. */
  margin-left:auto;
}
/* **Nothing to its left is not a reason to drift right** ([D-1647]). The auto margin
   separates a terminal act from the ordinary ones beside it; where it is the first control
   in the region there are none, and on a card it drifted to the far edge and read as a
   footer control rather than as the act the region is about. `.action-form` is
   `display:contents`, so the form is what holds the position in the DOM — and an anchor
   drawn as a control holds its own, which is the second pair ([D-1650]). */
.actions > .action-form:first-child > .action-irreversible,
.actions > .action-form:first-child > .action-destructive,
.actions > a.action-irreversible:first-child,
.actions > a.action-destructive:first-child { margin-left:0; }
/* **A stage's last row of controls ends the card** ([D-1647]), the same rule the card
   itself takes: `.actions` carries `--s5` under it and the section already carries its
   padding, so a card whose last line is a control ended in two gutters. */
.act-group > .actions:last-child { margin-bottom:0; }
/* **Retired at [D-1885].** `D-1878` gave an act that cannot be undone a band of its own
   behind a rule, which is `L-2`'s separation with nothing in it. `identity.png` fills the
   band — the act's mark, its name, what it does, and the control — and that is
   `notice_card`'s shape, so the band is a card now and its own rules are not needed.
   `L-2` is unchanged and still asserted: the separation is the card. */
.action-destructive:hover, .action-irreversible:hover {
  background:var(--danger-bg); border-color:var(--danger); color:var(--danger);
}
/* **Irreversible is not louder, it is heavier.** `06 §6` asks for *weighty, not
   deleted*: the double edge reads as consequence where a brighter red would read
   as an error the reader has already made. */
.action-irreversible { box-shadow:inset 0 0 0 var(--hair) var(--danger-rule); }
/* **Its edge must not take the focus ring's place** (UXA-05): the shared ring is a
   `box-shadow`, and this rule's shadow replaced it, so a focused *Reject* on `B1` changed
   no pixel. Focused, it wears both. (The workspace rings buttons with an outline.) */
/* **A scroller's ring is drawn inside it** (UXA-04/05): a table's wrapper is a tab stop,
   and the shared ring — a shadow outside the box — was clipped by the panel around it, so a
   focused table changed 19 pixels. An inset outline paints within its own edge. */
.grid-scroll[tabindex]:focus-visible { outline:2px solid var(--accent); outline-offset:-2px;
  box-shadow:none; }
.action-irreversible:focus-visible {
  box-shadow:var(--focus), inset 0 0 0 var(--hair) var(--danger-rule); }

/* Native disablement is the last resort and looks like it — Evicora knows *why*
   an act is withheld and says so instead. Where a control genuinely cannot be
   pressed, it must still not read as broken. */
.action[disabled], button[disabled], input[type="submit"][disabled] {
  background:var(--sunken); color:var(--faint); border-color:var(--rule);
  cursor:not-allowed;
}


/* **Withheld is described, never greyed** — a disabled control says *not for
   you*, *not yet* and *broken* identically, and Evicora knows which.

   **A filled card with a barred mark, not a dashed box at `26rem`** ([D-1647]). The dash
   said *provisional* where the meaning is *settled, and not yours to settle* — and the
   width made two of them sit side by side inside `.actions`'s wrapping row at half the
   measure, so three-line sentences wrapped again inside boxes a third of the card wide.
   The glyph carries what the outline was carrying, in the channel the rest of the product
   already uses for a state. */
.withheld {
  display:grid; grid-template-columns:auto minmax(0, 1fr); gap:var(--s3);
  align-items:start; border-radius:var(--radius);
  padding:var(--s4); color:var(--quiet); background:var(--sunken);
}
.withheld-mark { display:grid; place-items:center; color:var(--faint);
                 padding-top:2px; }
/* The words take the second track and may shrink inside it; without `min-width:0` a grid
   item's floor is its content, and a long remedy sentence pushed the card past its
   container instead of wrapping. */
.withheld-words { min-width:0; }
.withheld-mark .icon { width:1.25rem; height:1.25rem; }
.withheld-label { font-weight:var(--w-semi); color:var(--ink); display:block; }
.withheld-why, .withheld-who { margin:var(--s1) 0 0; font-size:var(--t-body); }

/* ---- forms -------------------------------------------------------------
   **A label is always visible.** A placeholder standing in for one disappears
   exactly when the reader needs it — mid-entry — and leaves a filled field
   nobody can identify.

   **Width reflects the expected data.** A six-digit code in a 600px box tells a
   reader the wrong thing about what is wanted from them.
   ========================================================================== */
form { margin:var(--s4) 0; }
.field { display:flex; flex-direction:column; gap:var(--s1); margin:var(--s4) 0;
         max-width:var(--field); }
label { font-size:var(--t-label); font-weight:var(--w-medium); color:var(--ink); }

input[type="text"], input[type="email"], input[type="password"],
input[type="number"], input[type="date"], input[type="search"],
select, textarea {
  font:var(--t-body)/var(--lh-normal) var(--font);
  color:var(--ink); background:var(--page);
  border:var(--hair) solid var(--rule-strong); border-radius:var(--radius);
  padding:0 var(--s3); min-height:var(--control-h); width:100%;
}
textarea { min-height:8rem; padding:var(--s2) var(--s3); resize:vertical;
           line-height:var(--lh-normal); }
select { padding-right:var(--s5); }
input:hover, select:hover, textarea:hover { border-color:var(--quiet); }
input::placeholder, textarea::placeholder { color:var(--faint); }
/* Sized to what is asked for, not to the container. */
input[name="code"], input[name="second_factor"] {
  max-width:var(--field); font-family:var(--font-mono);
  letter-spacing:var(--track-wide);
}
/* **`token` is not a short code, and grouping it with two that are was the defect**
   ([D-1604]). `second_factor` is a six-digit TOTP and `code` a six-digit verification
   code; `issue_token` produces `secrets.token_urlsafe(32)` — **43 characters** — so a
   reset token sat in a box holding roughly half of it, in a face and tracking chosen for
   digits. The rule is not being broken here, it is being applied: *sized to what is asked
   for* means one width for six characters and another for forty-three. The mono face
   stays, because what is pasted is still a machine's string and a reader checking it
   against an email needs the characters to align. */
input[name="token"] {
  max-width:var(--field); font-family:var(--font-mono);
}


/* **A field's error reads as that field's** (the PO's style, 2026-09-27): red ink and a
   small `!` directly under it, the field's own edge in the same red, and no bar or tinted
   box — a caution is about the page; this is about one input. `:not(#field-error)` so an
   invalid field's edge wins over every plane's field rule, as 86-g's acts do. */
.field-error {
  display:flex; align-items:flex-start; gap:var(--s1); margin:var(--s1) 0 0;
  color:var(--h-danger-ink); font-size:var(--t-help); line-height:var(--lh-body);
}
.field-error .icon { width:1rem; height:1rem; flex:0 0 1rem; margin-top:.15em; }
:is(input, select, textarea)[aria-invalid="true"]:not(#field-error) {
  border-color:var(--h-danger);
}

input[disabled], select[disabled], textarea[disabled] {
  background:var(--sunken); color:var(--faint); cursor:not-allowed;
}

fieldset { border:var(--hair) solid var(--rule); border-radius:var(--radius);
           padding:var(--s4); margin:var(--s5) 0; max-width:var(--field); }
legend { font-size:var(--t-body); font-weight:var(--w-semi); padding:0 var(--s2); }

/* ---- notes: the `U-2` four --------------------------------------------- */
.note { margin:var(--s3) 0; padding:var(--s3) var(--s4);
        border-left:3px solid var(--rule); font-size:var(--t-body);
        background:var(--raised); border-radius:var(--radius-sm) var(--radius)
                                                var(--radius) var(--radius-sm); }
.note-neutral { border-left-color:var(--rule-strong); color:var(--quiet); }
/* Page 17. **All three are quiet, and that is the product argument, not a palette
   choice.** `39 DI-28` forbids reading `unassigned` as `neglected`, and a rule that
   gave the accountability sentence a caution colour would perform exactly that
   reading in CSS -- below every guard the decision has. `U-2`'s shape: unknowns are
   neutral, and contradiction is the only cautionary state. */
.note-accountability { border-left-color:var(--quiet); }
/* [D-066]'s *what would change this*. Same weight as the state it answers, because a
   remedy rendered fainter than the absence invites reading the absence as final. */
.note-remedy { border-left-color:var(--quiet); }
.note-progress { border-left-color:var(--quiet); }
.note-affirmative { border-left-color:var(--quiet); }
.note-cautionary { border-left-color:var(--caution); background:var(--caution-bg);
                   color:var(--caution); }

/* ---- the enrolment dialog's acts ------------------------------------------
   The act-block family went from A1 at ux/84 §4a (one active two-factor task, and 68's row
   family for the pending address change). Only the dialog's own button row keeps its
   rule: the control right-aligns with the field it submits. */
.act-block-acts { display:flex; justify-content:flex-end; gap:var(--s3);
                  grid-column:1 / -1; margin-top:var(--s3); }
@media (max-width:48rem) {
  .act-block-acts { justify-content:flex-start; }
}

.refusal {
  border:1px solid var(--caution-rule); background:var(--caution-bg);
  border-left:3px solid var(--caution);
  padding:var(--s3) var(--s4); border-radius:var(--radius); margin:var(--s4) 0;
}

/* ---- status marks -------------------------------------------------------
   **Shape, not hue.** `U-2` forbids a palette of status colours, so standing is
   carried by a bordered mark and by its own words. */
/* `case-standing` was in this list until [D-1410], and with `B7a` it lost its last
   emitter — `B7`'s queue dropped it at [D-1392]. What the remaining names share is one
   treatment, which is the tell that they were never doing any work: each is called after
   what its value is *about* rather than after what it *is*.

   **The nine are six** ([D-1420]). `observation-standing` went the way `case-standing`
   went — it dressed `9a`'s `what_it_means`, the same clause on the same field `D-1410`
   stripped on `B7a`, and it had no other emitter. `display-label` left for the opposite
   reason and it is the more interesting one: **it was never wearing this treatment.**
   `style_workspace` cancelled every property of it — the transform, the tracking, the
   border, the padding, the background — so the name sat in this selector purely
   nominally. **It did not cancel `white-space:nowrap`**, which is the whole of what
   membership was still doing: `11`'s identity line is two links and a separator, and it
   could not wrap. */
/* **The six are five** ([D-1444]). `subject-kind` went the way `observation-standing`
   went at `D-1420` and `case-standing` at `D-1410`: `16`'s queue drew *A candidate* in
   capitals inside a box, under a column headed *Whose data* that had already named it,
   and it had no other emitter. **`case-status` and `requester-status` stay** — `16a`
   still draws both on the request, where a standing chip is what they are. */
/* **The five are four** ([D-1446]). `member-standing` went the way `subject-kind` went at
   `D-1444`: `4`'s roster dressed *invited, and has not accepted yet — the seat is not taken
   until they do* as a capitalised chip that `white-space:nowrap` drove past its column, and
   it had no other emitter. **`standing` stays** — `4a` still emits it, on the one sentence
   this increment was told to leave alone. */
/* **The four are one** ([D-1450]). `case-status`, `requester-status` and `governing-state`
   were `16a`'s alone, and `D-1444` had already taken this treatment off the first two where
   `16`'s queue drew them. On the request they dressed *Received and not yet classified. The
   response clock runs from the date it arrived, not from today.* and *This request is
   answered under UK GDPR. The other jurisdictions recorded remain on the case; they were
   considered and this one governs.* — two-sentence clauses `interpretation/data_rights`
   wrote, under headings that had already named what they were about.

   **This is where the family stopped being survivable on a detail page too.** `D-1410`
   called it *a lozenge pretending to be a sentence* and said a table is where it breaks;
   `nowrap` on 110 characters made `16a`'s document **1365px wide inside a 1280px
   viewport**, which is the same failure without a column to be pushed out of.

   **`standing` was the last one, and it is retired** ([D-1901]). The paragraph above
   ends *`4a` is its only emitter*, and what `4a` emitted through it was
   `no_longer_current` — `interpretation`'s two-clause sentence saying why the preview in
   front of the reader is out of date. Uppercased and held on one line it measured
   **684px inside a 360px viewport**, which is `D-1483`'s `16a` finding at a narrower
   width and this declaration's third. The sentence takes `TREATMENT_CLASS["cautionary"]`
   now, on `§6p`'s Absence row: *a preview that has gone stale says so and withholds its
   act.* The family the comments above describe is closed with nothing in it. */

/* ---- evidence and chronology ------------------------------------------- */
.excerpt { margin:var(--s4) 0; padding-left:var(--s3);
           border-left:3px solid var(--accent); }
.excerpt blockquote { margin:0; }
.excerpt figcaption { color:var(--quiet); font-size:var(--t-help);
                      margin-top:var(--s1); }

/* **The `Chronology` archetype's record row** ([D-1437]). The caller names it on the
   `<ol>`, which is `D-1419`'s rule -- an entry drawn as four cells needs a grid to be
   four cells, and the grid must not live on an id. `13a` and `1d` each declared their
   columns and neither declared `display`, so both rows ran together as one line: the
   defect `D-1419` fixed for page `11`, one family over and still open on these two.

   **The scaffolding is here and the columns are not.** `chronology-rows` bakes pages
   `11`/`12`'s three columns into itself, so it could not have been reused for a
   four-column record without either changing those pages or wearing columns that fit
   neither. This carries only what every chronology record shares -- the grid, the
   baseline, the rule between entries -- and each surface's own row class says how many
   cells it has and which of them span.

   **The ordinal is not authored content.** These entries carry when, who and what, and no
   view supplies a position; a rendered `1.` would be a fact about the list that nothing
   said. The element stays an `<ol>` because the order is real and assistive technology
   should hear it -- what goes is the marker, not the ordering. */
/* **Both surfaces that wore this have left it, so the rules go with them** ([D-1625]).
   `1d`'s four cells are a `listing` with named columns ([D-1623]) and `13a`'s row is no
   longer four tracks at all. A grid nothing renders is the rule `D-768` spent a commit
   deleting, and the check that names it is the one that found this. The reasoning above
   is kept because the next four-column record will want it. */

/* ---- freshness and attribution -----------------------------------------
   **Subtle, and never a content block.** Provenance about the read, not
   something the page is about. */
/* **`scope-basis` has left this group** ([D-1632]): a region's scope is its `region_head`
   sentence now, so the selector had no subject. The rest of the group is unchanged — it is
   the shared treatment, not a list of pages. */
/* **`ordering-basis` has left this group too.** Its only emitter was `A5`, and the
   ordering rule now stands in that page's rail as an `advisory` — *something true the
   reader should know and need not act on*, which is what an ordering basis is. A
   selector with no subject is the same defect `scope-basis` was removed for. */
.computed-at, .attribution, .observed-by, .written-up-by {
  color:var(--faint); font-size:var(--t-help); margin-top:var(--s5);
  font-variant-numeric:tabular-nums;
}

/* ---- responsive --------------------------------------------------------
   Nothing is hidden at any width: a fact removed on a narrow screen is a fact
   the reader cannot reach at all. */
/* ---- the refined component layer ([D-770]) -----------------------------------------
   Presentation structure above the tokens and below the page patterns. Every value here
   is a token: the point of a component is that its decisions were made once, and a
   literal in this block would be a decision made again in private.

   Only what the Platform Operators reference renders is here. The rest arrives with the
   surfaces that need it, because a treatment nothing renders is what [D-768] removed. */

.icon { width:1rem; height:1rem; flex:0 0 auto; display:block; }

/* -- page header --------------------------------------------------------------------
   The product opened every page with a bare `h1`. A title says which page; a reader
   arriving at a plane-wide surface needs the line under it more. */
/* **It wraps** ([D-1644]). The header is a row of the title and whatever stands beside
   it, and `nowrap` is what a row says when it has never been read at `430px`: the two
   children could not fall under one another, so the whole header overran its own column
   while the page itself did not scroll — an overflow with nowhere to go. */
.page-head { display:flex; justify-content:space-between; align-items:flex-start;
             gap:var(--s5); flex-wrap:wrap; padding-bottom:var(--s5);
             margin-bottom:var(--s6);
             border-bottom:var(--hair) solid var(--rule); }
.page-head-main { display:flex; align-items:flex-start; gap:var(--s4); }
.page-head-words h1 { margin:0; }
.page-lede { margin:var(--s2) 0 0; color:var(--quiet); max-width:var(--prose);
             font-size:var(--t-lede); }
.page-head-meta { margin:0; font-size:var(--t-help); color:var(--faint);
                  font-variant-numeric:tabular-nums; white-space:nowrap; }

/* -- panel --------------------------------------------------------------------------
   Content sat directly on the page, so every group read at the same level and nothing
   said where one ended. The elevation is deliberately almost nothing: one token-coloured
   hairline of shadow, enough to lift the container off the page and no further. */
.panel { border:var(--hair) solid var(--rule); border-radius:var(--radius);
         background:var(--page); box-shadow:0 1px 2px var(--rule); }
.panel-head { display:flex; justify-content:space-between; align-items:baseline;
              gap:var(--s4); padding:var(--s4) var(--s5);
              border-bottom:var(--hair) solid var(--rule); }
.panel-head h2 { margin:0; font-size:var(--t-card); }
/* Clips a row's hover ground to the panel's corner. Without it the last row paints
   over the rounded edge and the container stops looking like one. */
.panel-body { overflow:hidden; padding:var(--s4) var(--s5) var(--s5); }
.panel-body > .grid-scroll, .panel-body > .listing, .panel-body > table {
  margin:calc(var(--s4) * -1) calc(var(--s5) * -1) calc(var(--s5) * -1); }

/* -- table --------------------------------------------------------------------------
   A real `thead`, which seven of the eight collections did not have. */
.grid-scroll { overflow-x:auto; }
/* **A floor, so `grid-scroll` scrolls instead of the cells colliding** ([D-1405]).
   `cell-identity` is `nowrap` — the monogram has to stay beside the name it abbreviates —
   so when the viewport squeezes the table below what its columns need, the identity
   overran the cell beside it and *Borealis Recruitment* printed through *enterprise*.
   Overflow was already the answer the reference chose; it just had nothing to trigger it.

   `36rem` is under the prose measure, so a table only scrolls where a page would not have
   fitted it anyway. **No measure changes** — this is the table's own minimum, not the
   plane's width. */
/* **`min-width` is the table's own floor, in `rem`** — it moved with the type scale
   at [D-1641], which is the point of stating it in `rem`: `36rem` was `576px` at the
   old body size and `16`'s five prose columns now need every pixel of the column the
   shared container gives them. `34rem` is still under the prose measure, so a table
   only scrolls where a page would not have fitted it anyway. */
.grid { width:100%; min-width:34rem; border-collapse:collapse; font-size:var(--t-body); }
.grid thead th { text-align:left; padding:var(--s3) var(--s5); background:var(--raised);
                 border-bottom:var(--hair) solid var(--rule); font-size:var(--t-eyebrow);
                 text-transform:uppercase; letter-spacing:var(--track-wide);
                 color:var(--faint); font-weight:var(--w-semi); white-space:nowrap; }
.grid tbody th, .grid tbody td { padding:var(--s4) var(--s5); vertical-align:middle;
                                 border-bottom:var(--hair) solid var(--rule);
                                 text-align:left; font-weight:var(--w-normal); }
.grid tbody tr:last-child th, .grid tbody tr:last-child td { border-bottom:none; }
.grid tbody tr:hover { background:var(--raised); }

/* -- the subject of a row -----------------------------------------------------------
   A reference and an address were two cells of equal grey weight, which is why the old
   roster had no focal point at all. */
/* **A cell, and it has to stay one** ([D-1392]). This was `display:flex`, which takes the
   `th` out of the table's formatting context — the browser then wraps it in an anonymous
   cell and the column drifts out of alignment with the rest of the row. `B8` never showed
   it because every row there is one line tall; `B1`'s withheld card made one row tall and
   the applicant column visibly detached from its own row.

   So the cell stays a cell and the two children sit beside each other inline. */
.cell-identity { white-space:nowrap; }
.cell-identity > .monogram { display:inline-grid; vertical-align:middle;
                             margin-right:var(--s3); }
.cell-identity > .identity { display:inline-flex; vertical-align:middle;
                             white-space:normal; }
.monogram { display:grid; place-items:center; width:var(--s6); height:var(--s6);
            border-radius:50%; background:var(--selection); color:var(--accent-deep);
            font-size:var(--t-help); font-weight:var(--w-semi); flex:0 0 auto; }
.identity { display:flex; flex-direction:column; gap:var(--s1); min-width:0; }
.identity-name { display:flex; align-items:center; gap:var(--s2); color:var(--ink);
                 font-weight:var(--w-semi); }
.identity-detail { color:var(--quiet); font-size:var(--t-help); }

/* The reader's own row. It was a grey word at the end of five columns; it is the one
   thing on this page a person looks for first. */
.you-chip { display:inline-flex; align-items:center; gap:var(--s1);
            padding:0 var(--s2); border-radius:var(--radius-sm);
            background:var(--accent); color:var(--on-accent); font-size:var(--t-eyebrow);
            text-transform:uppercase; letter-spacing:var(--track-wide);
            font-weight:var(--w-semi); }
.you-chip .icon { width:.75rem; height:.75rem; }

/* -- status -------------------------------------------------------------------------
   **The mark is the lozenge, not the sentence.** These sentences run to a full clause —
   *Locked — cannot sign in until the lock is lifted* — and a pill drawn around one is
   neither compact nor readable. So the tinted square carries the state for a reader
   scanning the column, and the sentence stays exactly as interpretation wrote it.

   Three channels, none of them alone: the drawing, the words, the colour. */
.status { display:flex; align-items:flex-start; gap:var(--s3); }
.status-cautionary { color:var(--caution); }

/* The way out of being locked out, beside the controls it is about ([D-780]). Given room
   above it because it follows a refusal a reader has just met, and a link crowded against
   the sentence explaining the refusal reads as part of it. */
.recovery-link { margin:var(--s4) 0 var(--s1); }

/* **The way on from a page whose reader has finished with it** ([D-1874]). `1g` accepted
   says *sign in with the account you already have*, and a pre-authentication surface has
   no spine to carry the door that sentence names.

   **Room above and nothing else.** `06 §6r` fixes this archetype's primary action as
   **none**, so this may not read as a control: no `.action`, no ground, no border. It is a
   link that leads where the page has just said to go, and giving it a button's weight
   would claim an act that belongs to a different plane. Spaced like `.recovery-link` for
   the same reason — a link crowded against the sentence that explains it reads as part of
   the sentence. */
.onward { margin:var(--s4) 0 var(--s1); }

/* The escape past the way out ([D-1828]). **Quieter than `.recovery-link` and closer to
   it**, because the hierarchy is the ruling's: password recovery is primary and resolves
   most lockouts, and this is for the reader it cannot help. Given the quiet colour rather
   than a rule, because a rule here would make it a third exit of equal weight — which is
   the distinction `.exit-rule` exists to draw and this is not one of those. */
.support-link { margin:var(--s2) 0 var(--s1); color:var(--quiet); font-size:var(--t-help); }
.support-link a { color:inherit; }


/* The journey, on the page before it starts ([D-779]). Numbered because the steps are a
   sequence a reader is deciding whether to begin — the one case where a numeral carries
   something true rather than decorating a list. */
.steps { margin:0 0 var(--s4); padding-left:var(--s5); }
.steps > li { margin:0 0 var(--s3); }
.step-heading { font-weight:var(--w-semi); color:var(--ink); }

/* -- the offering, at signup ([D-784]) -----------------------------------------------
   **A statement, not a chooser.** `D-773` styled a group of radios over the catalogue's
   pairings; there is one self-service offering now, so what a reader meets is the grant
   itself. The terms carry the weight for the same reason they did as options — a plan
   name is a word, and the limits are what somebody is actually deciding about. */
.trial-terms { list-style:none; margin:0 0 var(--s4); padding:0;
               display:flex; flex-wrap:wrap; gap:var(--s2) var(--s4); }
.trial-terms > li { color:var(--ink); font-weight:var(--w-semi); }
.trial-terms > li + li { position:relative; padding-left:var(--s4); }
.trial-terms > li + li::before { content:"·"; position:absolute; left:0;
                                 color:var(--quiet); font-weight:var(--w-normal); }

@media (max-width:52rem) {
  main { padding:var(--s5) var(--s4) var(--s7); }
  /* The header describes columns that no longer exist once rows stack; the
     values stay, and the status sentence is self-describing. */
  .listing > li { grid-template-columns:1fr; }
  .page-head { flex-direction:column; gap:var(--s3); }
  .grid thead th, .grid tbody th, .grid tbody td { padding:var(--s3) var(--s4); }
  .panel-head { padding-left:var(--s4); padding-right:var(--s4); }
  /* A cell that carried a bare term gets its column heading back, because the
     heading above it is gone. Only cells the renderer labelled — a value that
     reads for itself is left alone rather than given a redundant prefix. */
  .listing > li [data-label]::before {
    content:attr(data-label) " · "; color:var(--faint); font-weight:var(--w-semi);
  }
  .page-navigation { justify-self:start; margin-top:var(--s2); }
  .action-destructive, .action-irreversible { margin-left:0; }
  h1 { font-size:var(--t-value); }

  #standing > p:first-of-type { font-size:var(--t-card); }
}

@media (prefers-reduced-motion:no-preference) {
  a, .action, button, .grid tbody tr { transition:background-color var(--ease), color var(--ease),
                                  border-color var(--ease); }
}


/* -- the Queue archetype's age ------------------------------------------------------
   `06 §3a`: a queue's attention is carried by **the age of each item, and of the oldest on
   the surface**. It is carried by **weight and alignment, never by a treatment class** —
   `waited` is a duration and no view attaches a judgement to it, so tinting it would be
   this layer deciding at what point a wait becomes a fault. `U-2`, one level below a
   colour choice.

   Tabular numerals so the column can be compared down rather than read across. */
.queue-age { color:var(--ink); font-weight:var(--w-semi);
             font-variant-numeric:tabular-nums; white-space:nowrap; display:block; }
.queue-age + .quiet { margin:var(--s1) 0 0; }

/* A cell that stacks two facts the way `identity` stacks them, where the subject of the
   column is not a person: *what they asked for* is a name and its type-and-plan.

   **Block, not flex, and the difference is a table's.** `display:flex` on a `td` takes the
   element out of the table's formatting context, and a row with **two** such cells
   fragments: `B1` rendered each row as three stacked bands with rules through the middle.
   `cell-identity` gets away with it as the row's single flex cell; a second one does not,
   so this stacks with block children instead. */
.cell-asked > span { display:block; }

/* The acts a row offers. **The cell stays a cell** and the flex container is the span
   inside it, for `cell-identity`'s reason one rule up.

   **Three regions, and the exit has its own.** `L-2`: an irreversible act is *visually
   separated from routine actions, never adjacent to a reversible one*, and `§3a` gives a
   queue **one** dominant action per row. The row's cell keeps the forward act; the exit
   takes a band beneath the subject; the withheld explanation takes a third. A separation
   drawn only in colour is one a reader can miss, and `D-1392` drew only colour — worse,
   its `justify-content:flex-end` consumed the free space `action-irreversible`'s
   `margin-left:auto` exists to absorb, so it disabled the one separation the design system
   already had.

   **`margin-left:auto` is no longer load-bearing here** now the exit has left the cell,
   and it is left alone rather than removed: it still does its work in `.actions`, which is
   every other surface in the product. */
.grid .cell-acts { text-align:right; }

/* The exit band. **No hover ground** — it is not a row of the queue, it is part of the one
   above it, and lighting it separately would say otherwise. The dashed rule carries the
   separation without reading as a row boundary, which a solid one would. */
.grid tbody tr.row-exit > .cell-exit { padding-top:var(--s3); }
.grid tbody tr.row-exit:hover, .grid tbody tr.row-explains:hover { background:none; }
.row-exit-acts { display:flex; justify-content:flex-end; gap:var(--s3); flex-wrap:wrap;
                 align-items:baseline; padding-top:var(--s3);
                 border-top:var(--hair) dashed var(--rule);
                 /* **The rule spans the acts, not the table.** Full width it read as a
                    divider between two rows of the queue, which is the one thing this
                    band is not: it belongs to the subject above it. */
                 width:fit-content; margin-left:auto; }

/* Below the breakpoint the row is a column and there is no right edge to align to, so the
   exit sits where every other stacked control does. The dashed rule still separates it. */
@media (max-width:60rem) { .row-exit-acts { justify-content:flex-start; } }

/* **The action column is sized from the scale, not from its content** ([D-1397]). Only
   `col-waited` carried a width, so `ACTIONS` was auto-sized — and once the exit left the
   cell the column narrowed to the widest single control, wrapping *Create the organisation*
   onto two lines. On `B4` it narrowed to row 1's `Withdraw` and wrapped row 2 against it.
   Naming the width fixes one column from the named steps; it widens no measure, which is
   the question `B0` and `B8` exist to answer. */
.grid .col-acts { width:var(--col-3xl); }

/* **A control's label does not wrap mid-phrase.** *Create the organisation* broke across
   two lines once the exit left the cell and the column narrowed to one control. Scoped to
   the table because that is where a control has a column rather than a page: the width
   above is the hint, this is what stops the hint being satisfied by breaking the words,
   and `grid-scroll` already carries the overflow if a label ever exceeds the column. */
.grid .action { white-space:nowrap; }

/* The explanation fills its band. `withheld` carried `max-width:26rem` until [D-1647]
   made it a full-width card, so the rule that widened it here is gone with the width it
   was undoing; what is left is the one thing a table cell still needs, which is that a
   two-track grid inside a `<td>` does not get a second tile in a row of columns. */
.grid .cell-explains .withheld { display:block; }
.grid .cell-explains .withheld-mark { display:none; }

/* Columns sized from the named scale rather than left to their content. `col-waited` is
   the Queue's age; `col-sm` is the Directory's kind, which is one short word and would
   otherwise take a share of the width the standing sentence needs. */
.grid .col-waited { width:var(--col-2xl); }
.grid .col-sm { width:var(--col-sm); }

/* -- a collection's empty state, inside its panel -----------------------------------
   `06 §3a`: a queue's empty state must say **that nobody is waiting — the operational
   claim, never *no rows***. The shared `.empty-state` / `.absence` treatment is a dashed,
   centred, tinted box, which is a **placeholder**: it says *nothing here yet* and invites
   the reader to put something in it. On a work queue the empty state is the ordinary one
   and it reports a result, so inside a panel it is stated plainly — the panel already
   draws the edge, and a dashed box inside a bordered container is a box in a box. */
.panel-body > .empty-state, .panel-body > .absence {
  border:0; background:none; border-radius:0; text-align:left; margin:0;
  padding:var(--s4) 0; color:var(--ink);   /* on the text edge (ux/84 ANSWER 48-f) */
}

/* -- a row's own explanation --------------------------------------------------------
   A withheld act carries `why_not` and `who_can_change_it`, which is a paragraph. Given a
   column, that paragraph sets the column's width for **every** row — the scan line the
   table exists for, spent on the worst case of a conditional. So it spans the table
   directly beneath the row it is about, and the two are drawn as one: the subject row
   gives up its bottom edge and the continuation carries it. */
.grid tbody tr.row-continues > th, .grid tbody tr.row-continues > td {
  border-bottom:0; padding-bottom:var(--s2);
}
.grid tbody tr.row-explains > .cell-explains { padding-top:0; }
.grid tbody tr.row-explains:hover { background:none; }

/* -- the Directory archetype -------------------------------------------------------
   `06 §3a`: the reader is finding one object among many, the list never drains, and
   **attention is carried by nothing** — `PUX-3` refused marks on `B0` specifically. So
   this block adds arrangement and no signal: there is no rule here that could make one
   row louder than another, and that absence is the archetype rather than an omission.

   The find control is a band above the collection, laid on one baseline. `§6c-vii` puts
   it first because a reader arrives with a name in their head, and search at the foot of
   an unbounded list is search nobody reaches. */



/* B6's `urgency`, `guarantee` and `col-md` went with its redraw to the owner's master
   (ux/133 §2): what remains is drawn by `.bg-*` in the hiring sheet. */
.grid .cell-acts .actions { margin:0; justify-content:flex-end; }
/* ==========================================================================
   Archetype C — the decision bands (`06 §6`).

   **Same system, different information architecture.** The operator directory is a
   collection scanned across; this is one object read down. Nothing here is a card, a
   score or a metric — the hierarchy is carried by type and by the order the contract
   fixes: *standing → basis → reversibility → history*, and it is the one surface where
   reordering under collapse would change meaning.

   **Scoped to `.decision-bands`, which only `decision_page` emits** ([D-1418]). This block
   said it was *scoped to the section ids the page already declares, so styling this
   reference propagates to nothing else*, and that was measurably untrue: `11` and `14`
   also declare `#standing` and `#actions`, `10` declares `#actions`, and all three were
   wearing the `Decision` archetype's band labels. **A section id is a local anchor and
   names no archetype** — the ruling is in `ux/06 §3a`.
   ========================================================================== */

/* `.orientation` was here until [D-1426], and it lost its last emitter the way
   `case-standing` and `observation-standing` did. It was written for `12` — *what the
   decision is about, sitting with the title rather than under it* — and `D-1422` moved
   that identity into `page_header`; `13` was the only page still drawing it, and
   `D-1426` moved its identity to the same place. **A rule whose one remaining user was
   a page it was not written for is the shape `D-1418` ruled on**, and the answer there
   was the boundary; the answer here is that there is nothing left to scope. */
.return-affordance { margin:0 0 var(--s4); font-size:var(--t-help); }
.return-affordance a { color:var(--quiet); text-decoration:none; }
.return-affordance a:hover { color:var(--accent-deep); }

/* **The bands are page 10's cards now** (ux/126, INSTRUCTION 122): their headings, the
   standing's weight and the gaps between them are the card language's, in style_hiring's
   page-12 block. Where it stands still leads (`L-1`) and history is still last — the order
   is the renderer's, and the stylesheet no longer re-states it. */

/* **Directly beneath the standing**, and joined to it: the gap between these two bands is
   what keeps the basis with the decision it explains.

   **This comment used to claim more than the rule did** ([D-1593]). It said the gap was
   what stopped a policy decision reading as an evidential one — but separating the basis
   from the *standing* is a different separation, and every layer below rendered as the
   same bare sentence. `§6` asks for the other one, and the two rules beneath are it. */
/* **The two basis layers, and they may not look alike** (`06 §6`).

   Evidence is the decision's own material and carries the band: full ink, the weight of a
   claim, flush with the heading. A constraint governs what may be decided and is **not**
   about this candidate, so it is set as an aside — indented behind its own edge, on a
   raised ground, quieter and smaller. The difference is geometry and not only colour,
   because a shade is the sort of distinction a reader can miss and then mistake a policy
   for evidence.

   **Subordinate, never hidden.** The constraint keeps `--quiet` rather than `--faint` and
   full-size line height: a reader must be able to read why a decision was constrained. */
/* **The layer's own contribution is geometry and type**, so it composes onto whatever
   treatment the surface already gave the sentence rather than replacing it. */
.basis-evidence { margin:0; font-weight:var(--w-medium); }
.basis-constraint {
  margin:0; padding:var(--s2) var(--s3); font-size:var(--t-help);
  border-left-width:var(--edge); border-left-style:solid;
}

/* **Colour and ground only where the sentence has none of its own.** Page 11's standing
   wears `note-cautionary`, whose hue is that band's answer about the application and not
   this rule's to take — writing `background` and `border-left` unscoped took it, and the
   composition the view model was built for would have been a replacement in the
   stylesheet. The two layers still differ there, by inset and by weight. */
.basis-evidence:not(.note) { color:var(--ink); }
.basis-constraint:not(.note) {
  border-left-color:var(--rule-strong); background:var(--raised); color:var(--quiet);
}
/* `evidence_basis` qualifies the basis and must not read as a second opinion about the
   person. Inset and quieter — subordinate by position and by weight, and visibly a
   different kind of statement from the basis above it. `DC-3`'s usual output is
   *evidence does not justify rejection*, which has to read as a stated ceiling. */
.evidence-ceiling {
  margin:var(--s3) 0 0; padding:var(--s2) 0 var(--s2) var(--s4);
  border-left:2px solid var(--rule-strong);
}
.evidence-ceiling p { margin:0; color:var(--quiet); font-size:var(--t-body); }




/* ==========================================================================
   Tenant collections and the external shell.

   Each row type gets the columns its own view returns — a collection is not a
   generic table, and the operator directory's four columns are not these.
   ========================================================================== */

/* **Re-measured against the shared container** ([D-1637]): `9` gets a `992px` main column
   beside a `272px` rail, and a card spends `48px` of it. The old minima were tuned to the
   `1216px` a `wide` page used to get for itself and overran by eleven pixels the moment
   every surface took one geometry. */
/* **Four tracks since ux/76 §7** (INSTRUCTION 35): who, how they arrived in a word, when,
   and where they stand in one quiet line. */
.candidate-row { grid-template-columns:minmax(9.5rem,1.6fr) minmax(6rem,0.7fr) minmax(8rem,1fr)
                                       minmax(9rem,1.1fr); }
/* Page 17's rows are read down, not across: identity leads and the states follow it,
   which is the archetype's rule against a list scannable by state. */
/* **Three tracks and the way in** ([D-1632]): the disc, what this is, what is true of it,
   and the link at the end. Five collections drew five different stacks of anonymous lines,
   so a reader moving down the page re-learned the shape at every region. */
.work-row { grid-template-columns:auto minmax(12rem, 1fr) minmax(0, 1.6fr);
            gap:var(--s4); align-items:start; }
.undecided-row { grid-template-columns:minmax(11rem,1.4fr) auto; }
.row-standing  { display:block; }
/* **Two tracks, because `JobRowView` carries two displayable fields** ([D-1444]) — the
   title and what its status means. A third `auto` track was declared and never filled, so
   every row reserved a gutter that collapsed to a sixteenth of a pixel and pushed nothing.
   `.candidate-row` had the mirror defect and was repaired the other way: its five columns
   were right and the renderer emitted four. */
.job-row       { grid-template-columns:minmax(14rem,2fr) minmax(10rem,1fr); }
/* `.application-row`, `.designation-row` and `.recovery-case` were here until [D-1392].
   `B1`, `B4` and `B7` are the Queue archetype and draw a real `table` now, so three grid
   definitions describe markup that no longer exists — and a rule reaching no page is what
   `D-768` spent a commit deleting. */
/* **Two tracks, because the `Roster` row is two regions** ([D-1446]). It declared four
   columns and the renderer emitted five to eight children, so every row wrapped into
   implicit rows and the same piece landed in a different column on each member — `Open
   jobs` in four columns across five members, measured. `D-1444` found the mirror of this on
   both Directories, where the renderer and the grid disagreed by one track; here they
   disagreed by four and the row had no shape at all.

   Who they are, then everything about them. The second track takes the larger share
   because it holds the standing sentence, the facts and the acts; `.listing > li`
   collapses both to one column at `--bp-narrow`. */
/* **Five tracks, because the row draws five cells** ([D-1630]). `D-1446` repaired a
   renderer emitting five to eight children into four declared tracks by making the row two
   regions; naming the columns (`D-1447`) is the other half of that repair, and it puts the
   count back at five — declared here and drawn there, which is `D-1449`'s rule. */
/* **Measured against the container, not guessed** ([D-1449]). The five minima sum to
   `34.5rem`; the shared workspace gives this page a `720px` middle column, a card spends
   `48px` of it on padding and four `12px` gaps another `48`, which leaves `624px` — so the
   row fits at every width the container reaches. The first cut of these tracks was measured
   against the `800px` column a three-track page used to get for itself, and the last column
   was cut off the moment the shell became one grid ([D-1637]). */
/* **Re-shared against the roles** ([D-1644]). An address is the longest unbreakable
   thing in the row and was breaking mid-word across three lines at `147px`, while the two
   columns beside it carried a clause each at `13px` and had room to spare. The identity
   takes the larger share; nothing else changed. */
/* **Four tracks, and the acts span beneath them** ([D-1792]). The fifth track held a
   whole act region and crushed it; `.member-detail` is `1 / -1` on the row's second
   line now, so the four facts stay scannable and what may be done has the row's width. */
/* **Six tracks, one row per member** (ux/79 §1, §6): person · role · standing · joined ·
   open jobs · the menu. The reasons an act is absent span beneath, one quiet line each. */
.member-row { grid-template-columns:minmax(max-content,1.6fr) minmax(min-content,auto) minmax(min-content,auto)
                                    minmax(min-content,1.4fr) minmax(min-content,auto) minmax(2.75rem,auto);
              gap:var(--s3); align-items:center; }

/* **The hiring-plan family's four rows, measured** ([D-1454]). `D-1444` found the renderer
   and the grid disagreeing by one track on both Directories and `D-1446` by four on the
   roster; these are the same defect on four more rows, and the repair is `D-1449`'s rule
   rather than a track count guessed to fit:

   > *comparable authored axes independently determine the availability of column or
   > tabular treatment.* Where a row's cells are axes the contract authors and a reader
   > compares **down**, a column head is available; where there is one axis, or none the
   > contract names, neither is.

   **`assignee-row` declared two and emits three.** Who, what they are on this job, and the
   act that takes them off — `06 §5` authors *`people_with_access` · `assignees` ·
   `no_assignees_reason`* and the removal is drawn per row because a control at the foot of
   the list acts on whoever sorts first ([D-704]). The third track is `auto`, which is what
   `.candidate-row` already ends on: the act is as wide as its own words. **This is not a
   manufactured cell** — the renderer has emitted it since `D-704` and only the grid did
   not know.

   **`task-row` declared four and emits three, four or five**, so no fixed count is true of
   it: a task nobody owns draws its absence sentence and one form, a task somebody owns
   draws two, and the acts landed in **different columns on different rows** — *Give it to
   somebody* in track 4 on one row and track 3 on the next. `unassigned_requirement_task`'s
   66-character sentence rendered inside `--col-sm`, 96px. And `§5` authors **no axes** for
   a task: it says only that requirement tasks *support the standing rather than replacing
   it* and *carry no evaluative ordering of their own*. So it reads **down**, which is
   `17`'s `.work-row` exactly and for the same stated reason.

   **`requirement-row` and `conflict-row` declared nothing**, so `.listing > li`'s bare
   `display:grid` gave them one full-measure track and every control stretched to it: two
   768px-wide buttons stacked under a conflict, which is a bar rather than a choice. `06
   §6l` declares both **entry rows** and `D-1449` confirmed an entry row keeps its shape at
   any arity — so the column stays one and the *controls* stop being the width of the
   measure. `justify-items:start` is the whole repair, and it adds no cell to any row. */
.assignee-row  { grid-template-columns:minmax(10rem,1fr) var(--col-2xl) auto; }
.requirement-row, .conflict-row, .assignee-row { justify-items:start; }

/* **What it always wanted, with nothing left to undo** ([D-1420]). This rule used to
   spend six declarations cancelling `style_primitives`' status-token treatment, which
   `display-label` was listed in and never wanted. It is out of that list, so the three
   declarations here are the whole intent — and `white-space` is now the default, which is
   the one behaviour that changes: an identity line may wrap. */

/* **`Object workspace` attention** — `06 §3a` fixes it as *the standing sentence, before
   any control*, and `D-1418` left it owed when the `Decision`'s bands were scoped away
   from `11` and `14`. **Derived from the archetype, not borrowed from `12`**: it is a
   smaller step than the `Decision`'s `--t-xl`, because a `Decision`'s standing *is* the
   page's whole answer while an `Object workspace`'s leads a page that also holds
   evidence, facets and acts. The rest of the standing region stays at reading weight —
   promoting all of it would make the band an announcement and leave nothing leading. */
/* **Prose, at body size** ([D-1644]). It rendered at a card heading's size and weight,
   which made the one authored *sentence* on a workspace the largest text under the title —
   hierarchy propped up by promoting body copy rather than by the ladder. The attention
   `§3a` asks for is full ink against the quiet facts around it, which this rule already
   carried and which is the half that survives. */
.standing-lead {
  font-size:var(--t-body); line-height:var(--lh-normal); font-weight:var(--w-medium);
  color:var(--ink); margin:0 0 var(--s2); text-wrap:balance;
}

/* **Page 18 · DI-01, the concentration lens.** A concentration row sets its label and
   its count apart, **label first**, so the list is never scannable by magnitude
   (`ux/22 §3`) and the count carries no emphasis of its own.

   `.population-basis` is retired ([D-1901]). It set the denominator at `--quiet` and help
   size — the provenance weight — and `D-1635` ruled the other way on the page it was
   written for: the population statement *is the report's subject, not a footnote about
   the read*, and it moved into `advisory` with the ordering guard. `34` was the last
   wearer and took the same repair. */
/* **Scoped past `.listing > li`** ([D-1635]), whose `display:grid` outranks a bare class
   and stacked the count under its label. */
.listing > .concentration-row { display:flex; justify-content:space-between;
                                gap:var(--s4); align-items:baseline;
                                font-size:var(--t-body); padding:var(--s3) 0; }
.listing > .concentration-row + .concentration-row {
  border-top:var(--hair) solid var(--rule); }

/* **Page 26 · DI-13, the recruiter readiness lens.** A condition row leads with its label
   and its meaning; the count trails in the quiet voice, so the list is a distribution and
   never a queue scannable by magnitude (`ux/31 §3`, `CL1`/`OQ-003`). */
/* **Scoped past `.listing > li`** ([D-1636]), whose `display:grid` outranks a bare class.
   The lozenge sits in a fixed column so three of them line up, the meaning takes the room,
   and the count ends the row. */
.listing > .readiness-row { display:grid;
                            grid-template-columns:minmax(6rem, auto) minmax(0, 1fr) auto;
                            gap:var(--s4); align-items:center; font-size:var(--t-body);
                            padding:var(--s3) 0; }
.listing > .readiness-row + .readiness-row { border-top:var(--hair) solid var(--rule); }
.readiness-row .pill { justify-self:start; }
/* **`condition-label` is gone with its subject** ([D-1636]): the label is a lozenge now,
   and a bold span is not what carries it. */
.condition-meaning { color:var(--quiet); }

/* **Page 34 · Workflow `U`, coverage across candidates.** A person's name leads and their
   status counts trail in the quiet voice, so a list of *people* is never scannable by
   magnitude — which is how a filtered list becomes a shortlist without anybody deciding to
   make one ([D-1302], `CL1`/`OQ-003`). No status is emphasised over another, because
   emphasis is an order. */
.coverage-row { display:flex; gap:var(--s3); align-items:baseline; flex-wrap:wrap; }
/* **Page 34 · the ask's entry** (ux/82 §1) — now drawn on the job page only; page 34's
   own ask is ux/115's card (`.cv-ask`, style_hiring). */
.ask-entry { margin:var(--s4) 0 0; }

/* **Page 13b · DI-08, the decision-support cost report.** One composed Finding: the claim
   leads a little larger than body, and parts 3–6 read in the same quiet voice as the rest
   — a report, never a dashboard (`26 §4`), so no number is set apart as a measure. */
.finding-claim { font-size:var(--t-body); margin:0; }
.finding-part { color:var(--quiet); margin:0; }

/* ---- a workspace surface that draws no spine ([D-1463]) --------------------------
   **Navigation presence is not the authority for reading geometry, and it had become
   the authority by accident.** `style_customer`'s four rules are scoped
   `body:not(:has(.masthead > nav))` — *this reader has no shell* recovered from the absence
   of a `<nav>`. On ten surfaces that inference is right, because absence-of-spine and
   stranger-context genuinely coincide. **On `1e` they diverge**: the reader is an
   authenticated member choosing between organisations they already hold, and the page
   draws no spine only because `§6j` refuses one — *the spine is a tenant's, and a person
   here holds no organisation context.* So it was reading at `--narrow`, the measure tuned
   for a stranger with one task.

   **`style_customer` is not touched, and that is the whole design of this block.**
   Rescoping those four rules to `[data-plane="customer"]` was measured and rejected:
   `1 · Sign in` and `1h` widen from 640px to 832px, and `public_page` and `step_up_page`
   cannot declare a plane to keep the rule — `test_planes.UNDERIVABLE` says why. Excluding
   one plane from a shared inference is a change to the inference; **restoring the plane's
   own values under a narrower selector is not**, and it cannot reach a surface that
   declares nothing.

   **The selector is the ruling.** It matches a surface that declares `workspace` *and*
   draws no spine — which is `1e` and, by construction, nothing else: every other workspace
   page has a spine and fails the second half. It is `(0,2,2)` against the inference's
   `(0,1,2)`, so it wins on specificity rather than on which module the concatenation puts
   last.

   **Only the four declarations the inference makes are unmade.** The values are the
   shell's own defaults, restated rather than invented — `main`'s measure and padding,
   `.surface-section`'s rhythm in both its forms, and the paragraph margin. Nothing here
   is a new visual rule, which is why the page ends up reading exactly as `17` and `B0` do
   rather than as a third thing. */
body[data-plane="workspace"]:not(:has(.masthead > nav)) main {
  max-width:var(--container); padding:var(--s6) var(--s5) var(--s8);
}
/* **Except a focused page** (ux/84 §1): 1m draws no spine either, and its declared
   column is `--focused`, not the container this restores for 1e. */
body[data-plane="workspace"][data-layout="focused"]:not(:has(.masthead > nav)) main {
  max-width:var(--focused);
}
/* **The band under the header was 77px on a page whose sections sit 16px apart**, and the
   cause is `padding-top` blocking margin collapse rather than a spacing decision: with it
   restored to the shell's `0`, the header's margin, the section's and the `h2`'s collapse
   to one 32px band. `D-755`'s finding, arriving as an inference's side effect. */
body[data-plane="workspace"]:not(:has(.masthead > nav)) .surface-section {
  border-top:1px solid var(--rule); padding-top:var(--s4); margin-top:var(--s6);
}
body[data-plane="workspace"]:not(:has(.masthead > nav)) .surface-section:first-of-type {
  border-top:none; margin-top:var(--s4); padding-top:0;
}
body[data-plane="workspace"]:not(:has(.masthead > nav)) h1 { margin:0 0 var(--s5); }
/* **The narrow-viewport reordering block for page 10 is gone** (ux/76, INSTRUCTION 35).
   It moved the acts above the unbounded evidence on a phone. Page 10 is one column in the
   owner's order now, and its one next action sits in the header, before the evidence, at
   every width — so document order is the reading order, which `test_narrative_narrow_viewport`
   holds. */

/* **Not on the Account family** (68 §1, 70 §1). A reader with no spine (no active
   membership, such as a suspended member) still reaches A1 and A5, and there this rule put
   12px margins back on every label, hint, lede and notice line: A1's main ran 231px taller
   than a member's at 1440. Those pages set their own rhythm and it must not depend on
   whether the reader has a spine. */
body[data-plane="workspace"]:not(:has(.masthead > nav)):not(:has(.account-column)) p {
  margin:var(--s3) 0; }

/* ---- a page body in two columns ([D-1605]) ------------------------------------------
   **What the reader acts on, beside what is true.** `13c` stacked four read-only panels
   above its acts, so a billing owner who came to change a plan read the plan, the trial,
   the allowances and the owner before reaching a control. None of the four is acted on
   and all four are checked *while* acting, which is a column rather than a stack.

   The rail is fixed and the main column takes the rest, because the rail holds labelled
   facts whose width is known and the acts hold forms whose width is the measure. */
/* **`rail-leads` is source order, not a second geometry** ([D-1784]). Where the acts
   are in the rail, the `aside` is emitted first so a keyboard, a screen reader and the
   one-column fallback all meet them before the supporting regions — `L-2`, held at every
   width. The two tracks are the same two tracks; only which child lands in which is
   stated, because a grid places by source unless told otherwise. */
.with-rail.rail-leads > .rail-main { grid-column:1; grid-row:1; }
.with-rail.rail-leads > .page-rail { grid-column:2; grid-row:1; }
.with-rail { display:grid; grid-template-columns:minmax(0, 1fr) var(--rail);
             gap:var(--s6); align-items:start; }
/* Three columns where a section names its own parts: where I am, what I came to do, what
   is true beside it. */
.with-sections { grid-template-columns:var(--sections) minmax(0, 1fr) var(--rail); }
.page-sections { min-width:0; }

/* **The section's own column.** Quiet until it is the open item, which is the same
   treatment the spine gives its current destination — the reader's position is a fact
   about the page and not an emphasis. */
/* **The items, current one included** ([D-1643]). The size was on the anchor, and the
   open item is not an anchor — a link to the page you are on is a control that does
   nothing (`UX-4`) — so the one item a reader is standing on read a size smaller than the
   rest of the column. */
.section-nav ul { list-style:none; margin:0; padding:0; display:flex;
                  flex-direction:column; gap:2px; font-size:var(--t-nav);
                  font-weight:var(--w-medium); }
.section-nav a { display:flex; align-items:center; gap:var(--s3);
                 padding:var(--s2) var(--s3); border-radius:var(--radius-sm);
                 color:var(--quiet); text-decoration:none; }
.section-nav a:hover { background:var(--sunken); color:var(--ink); }
.section-nav a[aria-current="page"] { background:var(--selection);
                                      color:var(--accent-deep);
                                      font-weight:var(--w-semi); }
/* **The column names itself once, at a card's weight** — it is the heading of the column,
   and the items under it are read at body size ([D-1643]). */
.section-nav-title { margin:0 0 var(--s1); font-weight:var(--w-semi);
                     font-size:var(--t-card); }
.section-nav-lede { margin:0 0 var(--s5); color:var(--quiet);
                    font-size:var(--t-help); }
/* The mark leads its label and takes the label's colour, so the open item's mark is open
   too — one state, stated once. */
.section-nav-mark { display:flex; color:inherit; }

/* -- the breadcrumb ------------------------------------------------------------------
   Where the page sits. `return_link` answers *how did I get here* and is the edge's;
   this answers *what is this part of*, which only a section with parts needs. */
.breadcrumb ol { list-style:none; display:flex; flex-wrap:wrap; align-items:center;
                 gap:var(--s2); margin:0 0 var(--s5); padding:0;
                 font-size:var(--t-help); color:var(--quiet); }
/* **The glyph itself, not an escape.** `content:"A"` is read as `` followed by a
   literal `A`, so every separator rendered as the letter — a CSS escape needs a
   terminating space and the character is clearer than the rule about the space. */
.breadcrumb li + li::before { content:"›"; margin-right:var(--s2);
                              color:var(--faint); }
.breadcrumb a { color:var(--quiet); }
.breadcrumb [aria-current="page"] { color:var(--ink); }


.rail-main { min-width:0; display:flex; flex-direction:column; gap:var(--s5); }
/* **A section in this body is a panel, as it is in the rail** ([D-1605]). The product
   draws `.surface-section` as a hairline rule with the content hanging off it, which
   reads as one continuous column — right on a page that *is* one collection, and wrong
   where the body is two columns of unlike things: the rail had edges and the main column
   had none, so a form and a fact sat on the same undifferentiated ground.

   **Scoped to `.with-rail` rather than changed globally.** `.surface-section` is drawn
   that way on every surface in the product; restyling it here would restyle all of them
   on the strength of two pages. */
.rail-main > section { margin:0; border:var(--hair) solid var(--rule);
                       border-radius:var(--radius); background:var(--page);
                       box-shadow:0 1px 2px var(--rule); padding:var(--s5); }
/* **And its padding back** ([D-1642]). `style_shell` zeroes `padding-top` on
   `.surface-section:first-of-type` — right where a section is a hairline rule with content
   hanging off it, and wrong where it is a card: at `(0,2,0)` it outranks
   `.rail-main > section` at `(0,1,1)`, so **the first card on every one of these pages**
   had its heading and its mark flush against the card's own edge while every card below it
   was padded. Restated here rather than weakened there, because the shell's rule is right
   for the shape it was written for. */
.rail-main > section:first-of-type { margin-top:0; padding-top:var(--s5); }
.rail-main > section > h2 { margin:0 0 var(--s4); }
/* **A card ends where its last line does** ([D-1647]). The card carries `--s5` of padding
   and its last child carries its own margin on top of that, so every card on these pages
   ended in a gutter and a half — read as *something is missing below this* on the two
   whose last child is a list. The rail has had the rule since `D-1630`; the main column
   never got it. */
.rail-main > section > :last-child { margin-bottom:0; }
/* **And a region's sentence starts where its head ends.** `.region-head` carries the
   gutter under the heading and a `<p>` carries its own on top of it, so the first line of
   a card sat almost two gutters below the heading that introduces it. */
.rail-main > section > .region-head + .sentence { margin-top:0; }
.page-rail { display:flex; flex-direction:column; gap:var(--card-gap); }

/* **Each rail region is a panel, and the rail is where that happens.** The sections were
   written for a single column and still are — putting them here changes their container
   and not their markup, so `D-529`'s emptiness rule and every id the walk follows are
   untouched. */
.page-rail > section { margin:0; border:var(--hair) solid var(--rule);
                       border-radius:var(--radius); background:var(--page);
                       box-shadow:0 1px 2px var(--rule); padding:var(--s5); }
.page-rail > section:first-of-type { padding-top:var(--s5); }
/* **A rail card's heading is a card's heading** ([D-1644]) — it was a rung below,
   so the same component read at two sizes depending on which column it sat in. */
.page-rail > section > h2 { margin:0 0 var(--s4); font-size:var(--t-card); }
/* The standing sentence is the rail's own lead and keeps its weight; it is what the plan
   and the status **mean**, which `06 §3a` fixes as this archetype's attention. */
.page-rail .sentence { font-size:var(--t-body); margin:var(--s4) 0 0; }

/* **Three tracks need more room than a collection does** ([D-1607]), which was true and
   was solved the wrong way round: the three-track page was given a container of its own,
   so the shell's geometry changed under the reader when they opened Settings.

   **`--shell` is gone with it** ([D-1637]). A three-track page took a wider container
   than every other surface, which is the second horizontal grid the shell had: the page
   moved when the reader did. The container is `--container` everywhere now, and the three
   tracks divide it — `240px` of section parts, the working surface, and a `272px` rail,
   which leaves the middle column wider than the `600px` floor at every width the container
   reaches. */
/* **Two tracks where there is no rail to draw** ([D-1607]). The section column stays and
   the page takes the width the rail was holding, rather than a third of the screen being
   reserved for an `aside` that renders nothing. */
.no-rail { display:grid; grid-template-columns:minmax(0, 1fr); gap:var(--s6); }
.no-rail.with-sections { grid-template-columns:var(--sections) minmax(0, 1fr); }
.no-rail > .rail-main { min-width:0; display:flex; flex-direction:column;
                        gap:var(--s5); }
@media (max-width: 60rem) { .no-rail.with-sections {
    grid-template-columns:minmax(0, 1fr); } }

/* -- the head card, the region head, and the parts of a long form -------------------
   ([D-1607])
   **The page header is a card in the main column**, not a band across the shell. Three
   tracks make the old arrangement wrong rather than merely plain: a title drawn above all
   three named the screen, and the column a reader was working in began with a breadcrumb.
   The mark keeps `page_header`'s treatment; only the box around it is new. */
/* **The card stacks and its top row is the flex** ([D-1630]) — `below` is a second child
   and a flex card put it in a column beside the title instead of under it. */
.head-card { border:var(--hair) solid var(--rule); border-radius:var(--radius);
             background:var(--page); background-image:var(--grad-sheen);
             padding:var(--s5) var(--s6);
             display:block; box-shadow:0 1px 2px var(--rule); }
.head-card .page-head { margin:0; padding:0; border:none; flex:1; min-width:0; }
/* **The words take the room and the standing takes what it needs.** `.page-head` is a
   space-between flex and its first child has no grow of its own, so inside a card that is
   itself a flex item the title shrank to its longest word and wrapped three times. */
.head-card .page-head-main { flex:1 1 auto; min-width:0; }
.head-card .page-head-words { min-width:0; }
/* **The standing sits with the name and does not compete with it.** Right-aligned,
   quieter, and no wider than the sentence it carries — `06 §3a` puts the standing before
   any control, and beside the title is earlier than a rail. */
.head-card-aside { text-align:right; flex:0 0 auto; max-width:var(--details); }
/* **Body, like every other authored sentence** ([D-1643]). The gutter quieted it a rung,
   so the standing sentence read smaller here than the same sentence reads in a card. */
.head-card-aside .sentence { margin:var(--s1) 0 0; color:var(--quiet);
                             font-size:var(--t-body); }
.head-card-aside .note { margin:var(--s2) 0 0; text-align:left; }

/* A region's heading with its sentence, and whatever qualifies the whole of it on the
   right. The aside wraps under at a narrow measure rather than squeezing the heading. */
.region-head { display:flex; align-items:flex-start; justify-content:space-between;
               gap:var(--s5); flex-wrap:wrap; margin:0 0 var(--s5); }
.region-head-words { min-width:0; }
.region-head h2 { margin:0; }
/* **The region's sentence reads at the card's size** ([D-1641]) — it was a
   notch below the body text it introduces, which made it a caption. */
.region-lede { margin:var(--s1) 0 0; color:var(--quiet); font-size:var(--t-body); }
.region-head .advisory { margin:0; flex:0 1 auto; max-width:var(--details); }
.region-head .action { flex:0 0 auto; }
/* **The consequence under the control, not inside it.** Quiet, small, and still full
   measure: it is a sentence, and a sentence set to the width of a text box wraps four
   times. */
.field-block { margin:var(--s4) 0; max-width:var(--field); }
.field-block > .field { margin:0; }
/* **A caption under the control it qualifies** — `meta`, which is the role for
   everything that is read after the thing it is about ([D-1643]). */
.field-help { margin:var(--s1) 0 0; color:var(--quiet); font-size:var(--t-help); }


/* **The bar a long form ends on.** A rule above it, because the reader has just come down
   a column of boxes and the acts are a different kind of thing from the last of them. */
.form-footer { display:flex; align-items:center; justify-content:space-between;
               gap:var(--s5); flex-wrap:wrap; margin:var(--s6) 0 0;
               padding:var(--s5) 0 0; border-top:var(--hair) solid var(--rule); }
.form-footer-acts { display:flex; align-items:center; gap:var(--s3);
                    margin-left:auto; }
/* **A link, and drawn as one.** Abandoning an edit performs nothing, so it carries no
   button chrome — `L-2`'s corollary that a navigation must not dress as a `POST`. */
/* **A control's label is body** ([D-1643]) — quieter in colour than the act beside it,
   and not smaller: a reader chooses between the two, so both have to be read. */
.form-cancel { color:var(--quiet); font-size:var(--t-body); }
.form-cancel:hover { color:var(--ink); }

/* **The one cautionary block on the page, and `U-2` permits it**: the consequence is real
   and it cannot be undone. Drawn as a block rather than as a `.note` because it is the
   page's claim and not an aside on somebody else's. */
.grave { display:flex; gap:var(--s4); align-items:flex-start;
         border:var(--hair) solid var(--danger-rule); border-radius:var(--radius);
         background:var(--danger-bg); padding:var(--s5); }
.grave-mark { display:flex; color:var(--danger); flex:0 0 auto; }
.grave-words { min-width:0; }
.grave-words p { margin:0 0 var(--s2); color:var(--ink); }
.grave-words p:last-child { margin-bottom:0; }
/* **Specificity, and the other way out is refused by a gate**: `.grave-words p` sets the
   ink for the two sentences, so the heading beats it by one class. `D-1599` is why the
   escape hatch is not available — a declaration nothing can override is a cascade nobody
   can reason about. */
.grave-words .grave-heading { font-weight:var(--w-semi); color:var(--danger); }

/* **The act at its own width, like every other submit** (ux/84 ANSWER 53-a §3); its
   destructive treatment is what marks it, not the measure. */
.gate-act { display:inline-flex; width:auto; margin:var(--s5) 0 0; }   /* no destructive push-right: it is the page's only act */

/* What happens next, in order. The numbers are drawn rather than listed, because the
   order is the content — a reader is being told a sequence, not given a set. */
.sequence-steps { list-style:none; margin:var(--s4) 0 0; padding:0;
                  counter-reset:step; }
.sequence-steps li { position:relative; padding:0 0 var(--s5) var(--s7); counter-increment:step; }
.sequence-steps li:last-child { padding-bottom:0; }
.sequence-steps li::before { content:counter(step); position:absolute; left:0; top:0;
                    width:1.75rem; height:1.75rem; border-radius:50%;
                    display:flex; align-items:center; justify-content:center;
                    background:var(--selection); color:var(--accent-deep);
                    font-size:var(--t-help); font-weight:var(--w-semi); }
/* The thread joining them, so three steps read as one sequence. It stops at the last. */
.sequence-steps li:not(:last-child)::after { content:""; position:absolute; left:.84rem;
                                    top:1.9rem; bottom:.4rem; width:var(--hair);
                                    background:var(--rule); }
.step-title { margin:0; font-weight:var(--w-semi); }
.step-body { margin:var(--s1) 0 0; color:var(--quiet); font-size:var(--t-help); }

/* **The part of the section that is not a sibling of the others**, below a rule. */
.section-nav-ending { list-style:none; margin:var(--s4) 0 0; padding:var(--s4) 0 0;
                      border-top:var(--hair) solid var(--rule); }
.section-nav-ending a { display:flex; align-items:center; gap:var(--s3);
                        padding:var(--s3) var(--s4); border-radius:var(--radius);
                        color:var(--danger); text-decoration:none; }
.section-nav-ending a:hover { background:var(--danger-bg); color:var(--danger); }
.section-nav-ending a[aria-current="page"] { background:var(--danger-bg);
                                             color:var(--danger);
                                             font-weight:var(--w-semi); }
.section-nav-ending .section-nav-mark { display:flex; color:inherit; }

/* -- page `28` · the catalogue --------------------------------------------- ([D-1612])
   Thirteen questions, reading down. **One cell and a way in**, and the chevron is the
   affordance rather than an ornament: every row goes somewhere and none of them does
   anything, which is `§3a`'s *no dominant action, because choosing is the act*.

   **No rule above the first row and none below the last.** The card already draws the
   boundary; separators inside it say where one question ends, which is all they say —
   there is no grouping here and nothing an ordering could be about. */
/* **ux/84 §2a (ANSWER 48-e), superseded by ux/120 (INSTRUCTION 116)**: the topic is one
   white card with a tinted head band, and its questions one per row — the rules that draw
   it are the hiring plane's (`style_hiring`, *Insights*). What stays here is the list's
   reset, which the plane's rules build on. */
.questions { list-style:none; margin:0; padding:0; display:grid;
             grid-template-columns:minmax(0, 1fr); }
.question-card { min-width:0; }
.question-row { color:var(--ink); text-decoration:none; }
.question-description { margin:0; color:var(--quiet); font-size:var(--t-help); }

/* **The withheld acts, as rows** ([D-1615]). `.withheld` keeps its dashed block where one
   or two acts stand against a region of controls; this is the other case, where the whole
   region is withheld and three stacked blocks read as three faults. The reasons are the
   quiet half — the label is what a reader scans for. */
.withheld-table { margin:var(--s4) 0 0; }
.withheld-table .withheld-why, .withheld-table .withheld-who { color:var(--quiet); }

/* **The area a resume is handed over in** ([D-1618]). A frame around the real
   `input[type=file]`, not a label standing in for a hidden one: a browser drops a file
   onto the input itself, and the version that only *looks* like a drop zone needs script
   to accept one. So the frame is drawn around the control that works. */

/* -- page `7` ---------------------------------------------------------------- ([D-1622])
   **The quota, drawn by the element that draws itself.** `<meter>` takes `value` and
   `max` as attributes, which is what makes it usable here at all: `style-src 'self'`
   carries no `'unsafe-inline'`, so the width-on-a-div version of this bar would have been
   blocked and rendered as nothing.

   Full measure and no threshold colour — the sentence above it is the claim, and a bar
   that reddened near the limit would be this layer deciding that nearly-spent is
   alarming. */
.quota-meter { display:block; width:100%; max-width:var(--field); height:var(--s2);
               margin:var(--s2) 0 0; }

/* **An empty state with parts** ([D-1624]). `.empty-state` keeps its treatment — quiet,
   bordered, not tinted — because `U-2` refuses to let an absence read as a fault and,
   equally, refuses to let this one read as an achievement. What changes is that the
   sentences are laid out as what they are: the answer, then what would have appeared,
   then what a filled log would say. */
.empty-lead { margin:0; color:var(--ink); font-weight:var(--w-semi);
              font-size:var(--t-card); }
.empty-state .empty-detail { margin:var(--s3) 0 0; color:var(--quiet);
                             font-size:var(--t-body); }


/* **One column below the two-column measure**, and the rail goes *under* the acts. That
   is the ordering the source already has, so nothing reverses: a narrow reader meets the
   controls and then the facts, which is the arrangement this page was trying to reach
   when it was one column all the way down. */
@media (max-width: 72rem) {
  .with-sections { grid-template-columns:minmax(0, 1fr) var(--rail); }
  /* The section's parts become a row above the page rather than a column beside it —
     still first, still before the content, and no longer taking a third of the width. */
  .section-nav ul { flex-direction:row; flex-wrap:wrap; gap:var(--s2); }
  .section-nav-lede { display:none; }
  .with-sections > .page-sections { grid-column:1 / -1; }
  /* **And a sectioned page with no rail is one track under its parts** (INSTRUCTION 37).
     `.no-rail.with-sections` names two tracks one class more specifically than the rule
     above, so between `60rem` and `72rem` the parts took the top row and the page landed
     in the 240px track they had left — People measured 134px wide at 1024. */
  .no-rail.with-sections { grid-template-columns:minmax(0, 1fr); }
}
@media (max-width: 60rem) {
  .with-rail, .with-sections { grid-template-columns:minmax(0, 1fr); }
  /* **And `rail-leads` gives its explicit placement back** ([D-1784]). The two-column
     rule names a column and a row for each child; the one-column rule removes the second
     track but not the children pinned to it, so `.rail-main` stayed in track 1 — which,
     with a track-2 sibling and no track 2, resolved to `48px` of card at `360px`. The
     placement is only meaningful while there are two tracks, so it is withdrawn with
     them and the two children stack in source order: the acts, then the evidence. */
  .with-rail.rail-leads > .rail-main,
  .with-rail.rail-leads > .page-rail { grid-column:auto; grid-row:auto; }
}

/* -- the card system -----------------------------------------------------------------
   **A region says what kind of region it is before it says anything else** ([D-1630]).
   Every panel in the product opened with a bare `h2`, so a page of six was six identical
   grey lines and the reader had to read each one to find the one they came for. The mark
   is the tile `page_header` has always had, at a region's size, and it is `U-2`
   reinforcement: the heading still carries the proposition in words. */
.region-head-main { display:flex; align-items:flex-start; gap:var(--s3); min-width:0; }
.rail-main > section > .region-head { margin:0 0 var(--s4); }
.rail-main > section > .region-head:only-child { margin:0; }
.page-rail > section > .region-head { margin:0 0 var(--s4); }
.page-rail .region-head h2 { font-size:var(--t-card); }

/* -- a state, as a lozenge ------------------------------------------------------------
   **The word in its colour, with a dot** — two channels, never the colour alone. */
.pill { display:inline-flex; align-items:center; gap:var(--s2);
        padding:var(--s1) var(--s3); border-radius:999px;
        font-size:var(--t-help); font-weight:var(--w-medium); white-space:nowrap; }
/* **The dot is drawn, not marked up** ([D-1631]) — an empty `<span>` is a container
   around nothing, which `D-1407`'s rule and the gate that enforces it both refuse. */
.pill::before { content:""; width:.4375rem; height:.4375rem; border-radius:50%;
                background:currentColor; flex:0 0 auto; }
.pill-affirmative { background:var(--selection); color:var(--accent-deep); }
.pill-neutral { background:var(--sunken); color:var(--quiet); }
.pill-cautionary { background:var(--caution-bg); color:var(--caution); }

/* -- a notice with something to do about it -------------------------------------------
   `advisory` is the neutral form and refuses a variant; this one carries a state and,
   where there is one, the way onward. */
.notice-card { display:flex; align-items:flex-start; gap:var(--s4);
               border:var(--hair) solid var(--rule); border-left:3px solid var(--rule);
               border-radius:var(--radius); background:var(--page);
               padding:var(--s4) var(--s5); }
/* **Inside a card, a notice is its accent rule and no box** (ux/84 ANSWER 48-f). */
.surface-section .notice-card { border-top-color:transparent; border-right-color:transparent;
                                border-bottom-color:transparent; }
.notice-mark { display:grid; place-items:center; width:var(--s6); height:var(--s6);
               border-radius:var(--radius-sm); flex:0 0 auto; }
.notice-body { flex:1; min-width:0; }
.notice-body p { margin:0; color:var(--quiet); }
.notice-body .notice-title { font-weight:var(--w-semi); color:var(--ink); }
.notice-body .notice-title + p { margin-top:var(--s2); }
.notice-card > .action, .notice-card > .action-secondary { flex:0 0 auto; }
.notice-card-cautionary { border-left-color:var(--caution-rule); }
.notice-card-cautionary .notice-mark { background:var(--caution-bg); color:var(--caution); }
.notice-card-neutral .notice-mark { background:var(--sunken); color:var(--quiet); }

/* -- the exit's own treatment ----------------------------------------------------------
   **`exit` is an `L-7` value and now has a drawing** ([D-1630]). `action_class` composes
   `destructive` and `irreversible` and left `exit` wearing the ordinary weight, so *end
   the agreement* and *change the plan* were the same filled control. This is not the
   destructive treatment: `D-1427` holds — the registry reads `terminal: no, reversible:
   yes` — and the difference is deliberate, a tinted ground rather than the danger edge
   `.action-destructive` wears. */
.action-exit { background:var(--page); color:var(--accent); border-color:var(--accent-edge); }
.action-exit:hover { background:var(--selection); border-color:var(--accent);
                     color:var(--accent-deep); }   /* ordinary, not red (ux/84 51-c) */

/* -- the rail's facts, read across ------------------------------------------------------
   **Label left, value right** ([D-1630]). They were stacked — *the column is narrow and
   the values are not*, and at `21rem` a billing owner's address wrapped mid-word beside
   its own label. Right-aligning the value keeps the pairing on one line for every short
   value and lets the long one wrap under itself, which costs it nothing and reads as the
   pair it is. **The stacked rule is gone rather than overridden**: two declarations of one
   selector is `D-1593`'s trap and the gate that catches it. */
.page-rail .facts { display:grid; grid-template-columns:minmax(0, auto) minmax(0, 1fr);
                    gap:var(--s2) var(--s4); margin:0; align-items:baseline; }
.page-rail .facts dt { margin:0; font-size:var(--t-label); color:var(--quiet); }
.page-rail .facts dd { margin:0; font-size:var(--t-body); text-align:right;
                       overflow-wrap:anywhere; }
.page-rail .facts + .facts { margin-top:var(--s3); padding-top:var(--s3);
                             border-top:var(--hair) solid var(--rule); }

/* **An empty container is not a region** ([D-1630]). `actions()` renders its own `div`
   whether or not it was given anything, and a region that offers only choosers got the
   margins of a collection that was not there. `:empty` is the honest selector: there is
   nothing inside it, so it occupies nothing. */
.actions:empty { display:none; }
/* **Who applied, and where they are** ([D-1655]). `.listing > li` is `display:grid` with
   no template, so each child claimed a row of its own and the lozenge stretched the full
   measure — the shape `D-1635` found on three other rows. Two tracks: the name takes the
   room and the stage sits at the end, which is where the eye stops. */
.listing > li.application-row { grid-template-columns:minmax(0, 1fr) auto;
                                align-items:center; }
.listing > li.application-row .pill { justify-self:end; }
/* **A withheld act is a card and not a chip** ([D-1647]). `.actions` is a wrapping row,
   which is what a set of controls is and what a described refusal is not: two withheld
   cards shared a line at half the measure while their own sentences wrapped inside them. */
.actions > .withheld { flex:1 1 100%; }
/* Inside a region head the acts are the head's own right-hand column and carry its
   spacing, not a collection's. */
.region-head .actions { margin:0; }

/* -- the header card, and the standing under it -----------------------------------------
   `head-card-top` is the header and its gutter; `head-card-below` is the standing at the
   card's own width, under a rule ([D-1630]). */
/* **It wraps, and the gutter is not immovable** ([D-1644]). `head-card-aside` is
   `flex:0 0 auto` at `16rem`, so on a `430px` screen it held its full width and left the
   title `52px` — the header overflowed inside a grid that had correctly collapsed to one
   column. The standing falls under the name instead. */
.head-card-top { display:flex; align-items:flex-start; justify-content:space-between;
                 gap:var(--s5); flex-wrap:wrap; }
@media (max-width: 52rem) {
  .head-card-aside { max-width:none; flex:1 1 100%; text-align:left; }
}
.head-card-below { margin-top:var(--s5); padding-top:var(--s5);
                   border-top:var(--hair) solid var(--rule); }
.head-card-below > .sentence { margin:var(--s3) 0 0; }
.head-card-below > .standing-lead { color:var(--quiet); font-weight:var(--w-normal); }
.head-card-below > .advisory { margin-top:var(--s4); }


/* -- a notice is its own card, so the panel around it is not a second one ---------------- */
/* Scoped to the column it sits in, which is how it wins over `.rail-main > section` by
   specificity alone — the stylesheet forces no declaration anywhere, and a notice inside a
   panel is not the place to start. */
/* Wherever the page puts it — the rail's column or an object page's main (D-2182). */
section#quota-notices { border:none; box-shadow:none; padding:0; background:none; }
#quota-notices .notice-card + .notice-card { margin-top:var(--s3); }

/* -- the rail's second pairing ------------------------------------------------------------
   *Who pays* sits under the allowances in the same card, in the rhythm of the rows above
   it rather than as a panel of its own ([D-1630]). */
/* **A third level inside a rail panel**, because *who pays* is a claim about the pairing
   under it and not a second panel: `D-529`'s heading asserts a proposition and this one is
   *this is who the bill goes to*. **One rule, not two** ([D-1630]) — there was an earlier
   `.rail-subhead` above this and a second, later one would have won silently, which is
   `D-1593`'s trap. Quiet, small and lettered, so it reads as a label for a list. */
/* ux/80 §4b: Billing's owner, the name over its quiet address, in its Details (84 §3). */
.rail-subhead { margin:var(--s4) 0 var(--s3); padding-top:var(--s4);
                border-top:var(--hair) solid var(--rule);
                /* the section-heading style, not an eyebrow (ux/84 ANSWER 48-g) */
                font-size:var(--t-card); font-weight:var(--w-semi); color:var(--ink); }

/* -- a directory row, by the column ------------------------------------------------------ */
.member-person { display:flex; align-items:flex-start; gap:var(--s3); min-width:0; }
/* **Two letters of the label the row shows** ([D-1630], ux/80 §4b) — the person's name
   where they have set one, else the address it sits beside. It abbreviates what is shown and
   claims nothing more. */
.member-identity { display:flex; flex-direction:column; align-items:flex-start;
                   gap:var(--s1); min-width:0; }
.member-email { overflow-wrap:anywhere; }
/* **The name first, the address quiet beneath it** (ux/80 §4b). A name is free text in any
   script, so it may break anywhere rather than push the row wider (80 §8: 80 characters with
   no spaces at `320px`). */
.member-name { font-weight:var(--w-medium); overflow-wrap:anywhere; min-width:0; max-width:100%; }
/* The reader's own row, marked once. It is a fact about who is reading, not about them. */
.member-you-pill { font-size:var(--t-eyebrow); font-weight:var(--w-medium); color:var(--quiet);
              background:var(--sunken); border-radius:999px; padding:0 var(--s2); }
/* `min-width:0` lets the column shrink; `overflow-wrap` lets its longest word do the
   same, which is what a role's clause needs at `430px` ([D-1644]). */
.member-role { font-weight:var(--w-medium); }
/* **The column fits the widest lozenge** ([D-1644]). *Offboarded* is `nowrap` — a
   lozenge that wraps is not a lozenge — so the track's floor has to clear it; it was three
   pixels short and the sentence under it wraps anywhere. */
.member-state { display:flex; flex-direction:column; align-items:flex-start;
                gap:var(--s2); min-width:0; overflow-wrap:anywhere; }
/* The date holds one line where there is room for one ([D-1644]);
   at a phone's width the column is narrower than the date. */
.member-joined { color:var(--quiet); font-variant-numeric:tabular-nums;
                 white-space:nowrap; }
@media (max-width: 52rem) { .member-joined { white-space:normal; } }
/* **How many this answer contains** — the collection's own fact, under its last row. */
.collection-count { margin:var(--s4) 0 0; padding-top:var(--s4);
                    border-top:var(--hair) solid var(--rule);
                    color:var(--quiet); font-size:var(--t-help); }

/* **The seat tallies are one line now** (ux/79 §1): `seats-line`, in `style_hiring`. */


/* **The chooser's label sits above it** (UXA-03, QUESTION 22c), as a field's label does
   (`59 A-8`) — inside the row menu now (ux/79 §6), where the chooser and its act share the
   line below. */
.row-menu-panel .action-form:has(> .reassign-label) {
  display:flex; flex-wrap:wrap; align-items:center; gap:var(--s2) var(--s3); width:100%; }
.row-menu-panel .reassign-label { flex:1 0 100%; font-weight:var(--w-medium); }
.row-menu-panel .action-form:has(> .reassign-label) select { flex:1 1 12em; min-width:0; }

/* **`D-1631`'s two read-across columns are gone** ([D-1821]). They grouped six questions
   as three-and-three, which said *these belong together* about fields that do not, and put
   each label on a baseline with its control at the far end of a wide card. `16`'s form is
   three panels now — the person, the requester, the request — and the panel is the
   grouping, so the field stacks and needs no column rule of its own. */

/* -- a legend, drawn the way the thing it explains is drawn ------------------------------ */

/* **Page 16's columns, as shares rather than widths** ([D-1631]). Five columns of prose
   share one shell column, and fixed widths on four of them left the fifth — the case
   sentence, the longest thing in the table — with 110px and seven lines. Shares divide
   what there is; the two sentence columns take the most of it. */
/* **Tighter cells on this table alone** ([D-1641]). Five columns of prose in one shell
   column, and at the type scale the drawings set, the sum of the cells' own minimums ran
   eight pixels past the card. Padding is the honest place to find them: `--s5` each side
   is right where a table has room, and this one does not. */
/* Re-scoped from the retired `#rights-queue` card to the table itself at ux/118, whose
   master sets the shares (style_hiring's `.rights-table th.col-*`). */
.grid.rights-table thead th, .grid.rights-table tbody th,
.grid.rights-table tbody td { padding-left:var(--s4); padding-right:var(--s4); }

/* -- the strip that takes a reader to a region already on the page -----------------------
   **Anchors, not tabs** ([D-1632]). The other drawing of `17` puts a tab bar here with one
   collection showing and `Next 10` under it; a tab that filters is a different read, there
   is no JavaScript on any surface, and neither a page size nor a total is a fact this read
   carries. */
/* **One line, and it scrolls rather than wraps** (ux/77 §3): the strip fits at 1024px and
   above; below that it scrolls sideways inside itself, with `tabindex="0"` so a keyboard
   can scroll it, and the page never does. */
.tab-strip { display:flex; align-items:stretch; overflow-x:auto; max-width:100%; }
/* The card's own rule separates it; a second above the strip drew an empty band. */
.head-card-below > .tab-strip { margin:0; }
.tab-list { list-style:none; margin:0; padding:0; display:flex; flex-wrap:nowrap;
            gap:var(--s5); }
.tab-list > li { flex:0 0 auto; white-space:nowrap; }
/* **The open tab is underlined, and the underline is the one on the document.**
   `aria-current="page"` is the fact; this is the same fact drawn, which is what the
   spine does for the destination a reader is on. */
.tab { display:inline-block; padding:var(--s2) 0; color:var(--quiet);
       text-decoration:none; font-size:var(--t-body); font-weight:var(--w-medium);
       border-bottom:var(--edge) solid transparent; }
.tab:hover { color:var(--ink); border-bottom-color:var(--rule-strong); }
.tab-current, .tab-current:hover { color:var(--accent-deep);
                                   border-bottom-color:var(--accent); }

/* -- one piece of unresolved work ---------------------------------------------------------- */
.work-disc { display:grid; place-items:center; width:var(--s6); height:var(--s6);
             border-radius:50%; background:var(--selection); color:var(--accent-deep);
             font-size:var(--t-eyebrow); font-weight:var(--w-semi); flex:0 0 auto;
             letter-spacing:var(--track-wide); }
.work-lead { display:flex; flex-direction:column; align-items:flex-start; gap:var(--s2);
             min-width:0; }
.work-detail { color:var(--quiet); font-size:var(--t-help); }
.work-said { display:flex; flex-direction:column; gap:var(--s2); min-width:0; }
/* **A note inside a row is a sentence, not a panel** ([D-1632]). `.note`'s block is for
   one standing alone under a heading; a row carries three or four of them, and each in its
   own bordered ground made a list of boxes out of a list of work. The treatment that
   distinguishes them — colour on the left edge — is kept as the text's own colour. */
.work-said .note { margin:0; background:none; border:none; padding:0; }
.work-said .row-standing { display:flex; flex-direction:column; gap:var(--s2); }
/* The way in: a link, at the end of the row, with the arrow reinforcing the word. */
/* **The door wraps** — it carries the subject's name, and a name is as long as it is;
   `nowrap` ran *Priya Nair · Senior Product Manager* straight through the column beside
   it. The arrow stays with the last word rather than on a line of its own. */
.work-open { display:inline; color:var(--accent-deep); font-size:var(--t-body);
             font-weight:var(--w-medium); overflow-wrap:anywhere; }
.work-open .icon { display:inline-block; vertical-align:-.1em;
                   margin-left:var(--s1); }
@media (max-width: 60rem) {
  .work-row { grid-template-columns:auto minmax(0, 1fr); }
  .work-said { grid-column:2; }
}

/* -- one set, counted four ways ------------------------------------------------------------
   The count is not what the row is about — `ux/22 §4` refused ranking by size — so it
   takes weight for legibility and no colour. */
.concentration-count { font-size:var(--t-value); font-weight:var(--w-strong);
                       font-variant-numeric:tabular-nums; }
.rail-main > section > .advisory:last-child { margin-bottom:0; }

/* **The subject cell wraps on `16`** ([D-1637]). `cell-identity` is `nowrap` everywhere —
   the monogram has to stay beside the name it abbreviates — and on a queue whose subject
   reference is free text somebody typed, a long one held the whole table wider than the
   column the shared container gives it. The monogram still leads; only the words wrap. */
.rights-table .cell-identity { white-space:normal; }

/* -- the comparison, drawn once and read twice -------------------------------------------
   `06 §6z-i`: **one reading over two inputs**, and it is a state rather than a page. Two
   columns of equal weight, because one drawn heavier than the other would be the
   recommendation `RC-6` refuses — *we suggest confirming* said in css.

   **No colour separates them.** Eligibility carries the same `.standing-lead` treatment in
   both columns, so a must-be-met failure in the right-hand one reads as the conclusion it
   is rather than as a warning the page has attached to it. */
.comparison-columns { display:grid; grid-template-columns:repeat(2, minmax(0, 1fr));
                      gap:var(--s4); margin:0 0 var(--s4); }
.comparison-column { min-width:0; }

/* **Claims about the plan, in a definition list** — *changed* and *unchanged* are facts
   about the policy's own movement, never a delta between the two conclusions. They sit
   below both columns because they belong to neither. */
.comparison-account { display:grid; grid-template-columns:minmax(0, 8rem) minmax(0, 1fr);
                      gap:var(--s2) var(--s4); margin:0 0 var(--s3); }
.comparison-account dt { color:var(--quiet); font-size:var(--t-eyebrow);
                         letter-spacing:var(--track-wide); text-transform:uppercase; }
.comparison-account dd { margin:0; }

/* **One column at phone width, and the labels are what keep it legible** — a reader who
   scrolls from one conclusion to the other must still be able to say which input each
   answers. */
@media (max-width: 40rem) {
  .comparison-columns { grid-template-columns:minmax(0, 1fr); }
  .comparison-account { grid-template-columns:minmax(0, 1fr); gap:0 0; }
}

/* ---- the external shell (page 15, and the public pages) ---------------
   **Not a reduced tenant shell.** The candidate is the one reader in Nova who holds no
   membership; their authority is possession of a link. So there is no spine, no
   organisation, no role — and the wordmark is attribution rather than a door, because a
   linked mark would offer exactly the way in that page 15's contract refuses.

   Lighter than Decision on purpose: one column, a narrower measure than the tenant
   surfaces use, and the order carries the argument — *who is asking* before *what they
   asked* before the box, so nobody starts composing before they know where it goes.
   ========================================================================== */

/* The shell-less masthead is a rule and a name, not a bar of navigation. */
.masthead:not(:has(> nav)) { background:var(--page); padding:var(--s5) var(--s5) 0; }
/* **Before sign-in, the wordmark alone** (ux/86 ANSWER 86-h, the owner): no bar, no rule,
   no ground of its own — the name on the page's content edge. The header takes the box
   `main` takes below it (the container, or the declared focused width, with the same
   inline padding), so the name and the content start on one line; page 1's arrival, whose
   `main` is placed by fractions, is mirrored after its own rules. */
body:not(:has(.masthead > nav)) .masthead.masthead-wordmark {
  border:0; background:none; box-shadow:none; min-height:0; width:100%;
  max-width:var(--container); margin:0 auto; padding:var(--s5) var(--s4) 0;
}
/* A focused gate, and a refusal (which declares no layout and draws at the focused
   width), unless the page is a wide one. */
body:not(:has(.masthead > nav)):is([data-layout="focused"], :not([data-layout])):not(:has(main.wide)):not(:has(main > .arrival)):not(:has(.rp-left)) .masthead.masthead-wordmark {
  max-width:var(--focused);
}
.masthead.masthead-wordmark .wordmark { display:inline-flex; align-items:center; min-height:44px; }

/* A stranger reads at a narrower measure than an operator scans at — but not so narrow
   that explanatory prose wraps into extra lines and the task grows a page. 40rem keeps
   *Northwind Talent is reviewing your application and has asked you to clarify one
   thing.* on two lines rather than three. */
/* **The card's own proportions** ([D-1913]). Edge-scanned off the reference and stated
   at `1440`: the card runs `483..1128`, its head rule sits at `240`, the primary action
   is `50px` tall, and the form column is inset `34`. The reference draws the mark tile
   `5px` further out than the fields; one inset is used for both, because an inset that
   differs by five pixels reads as a mistake rather than as a decision. The old `36rem`
   cap and `--s7` padding were the centred Gate card's; this composition gives the card
   its width and it no longer has to invent one. */
body:not(:has(.masthead > nav)) main:has(.arrival) > .gate-card {
  padding: 24px 34px 24px;
}
/* **The head is set apart by a hairline** ([D-1913]). The reference draws a rule at
   `240` — the head's own floor — and the card's first section drew none, because
   `.surface-section:first-of-type` exists to suppress exactly that line where a section
   is the first thing on a page. Here the head is above it, so there is something to
   separate from, and the rule is the head's rather than the section's. */
main:has(.arrival) > .gate-card > .gate-head {
  margin-bottom: 0;
  border-bottom: var(--hair) solid var(--rule);
}
main:has(.arrival) > .gate-card .surface-section:first-of-type {
  margin-top: 0; padding-top: var(--s5);
}
/* **The other route wears the accent's edge, not a neutral one** ([D-1913]). The
   reference draws *Try Evicora* in the accent with a tinted border — it is the second
   way in, not a cancel — and `--rule-strong` made it read as a disabled control. Scoped
   to this composition rather than changed on `.action-secondary`, because that primitive
   is every plane's *not the expected next step* and recolouring it product-wide is a
   design change the accent ruling did not ask for. */
main:has(.arrival) .gate-card .action-secondary {
  color: var(--accent); border-color: var(--accent-edge);
}
main:has(.arrival) .gate-card .action-secondary:hover {
  background: var(--selection); border-color: var(--accent);
  color: var(--accent-hover);
}
/* The reference leaves `20px` between the last field and the act; `12px` was the
   centred card's, where the act followed a shorter column. */
main:has(.arrival) .gate-card .action { margin-top: 20px; }
/* Measured off the reference at `1536`: the mark is an `88px` tile, the fields are `47px`
   tall and the act is `50px`. The mark is the archetype's (`D-1392`) and only its ground
   grows — the glyph inside keeps its proportion to the tile. */
main:has(.arrival) .gate-card .page-head-mark { width: 82px; height: 82px;
                                                border-radius: 14px; }
main:has(.arrival) .gate-card .page-head-mark .icon { width: 2.25rem; height: 2.25rem; }
main:has(.arrival) .gate-card .field input { min-height: 43px; }
main:has(.arrival) .gate-card .action { min-height: 50px; }
main:has(.arrival) .gate-card .action-secondary { min-height: 50px; }
/* **The act spans the card.** `.action-form` caps itself at `--form` for a page that is
   mostly form; here the card *is* the measure, and a button ending short of the fields
   above it reads as a mistake. */
main:has(.arrival) .gate-card .action-form,
/* **`20px` between the fields, and it is a measured value rather than a step**
   ([D-1913]). The scale goes `16` then `24`; at `16` the labels crowd their fields and
   at `24` the card ran past the fold on a laptop. The owner ruled the number. */
main:has(.arrival) .gate-card .field { max-width: none; margin-top: 20px; }
main:has(.arrival) .gate-card .field + .field { margin-top: 20px; }

/* **The shell sits on the canvas rather than boxing it in** ([D-1913]). The masthead and
   the footer carry their own grounds on every other plane, which is right where a page is
   a document in a frame; on the arrival they cut two opaque bands across a composition
   whose whole subject is one continuous field. The hairlines stay — they are what says
   where the page's furniture ends — and the fills go. */
body:not(:has(.masthead > nav)) .masthead { background: none; background-image: none; }
body:not(:has(.masthead > nav)) .page-footer { background: none; }
/* **Anchored, and reading across** ([D-1913]): the mark at the left and the one place a
   stranger can be helped at the right, on the line the reference puts them on. */
body:not(:has(.masthead > nav)) .page-footer {
  display: flex; align-items: center; justify-content: space-between;
  gap: var(--s5); padding: var(--s5) var(--s6);
  max-width: none; text-align: left;
}
body:not(:has(.masthead > nav)) .page-footer p { margin: 0; }
.page-footer-mark, .page-footer-links a { color: var(--quiet); font-size: var(--t-help); }
.page-footer-links a { text-decoration: none; }
.page-footer-links a:hover { text-decoration: underline; }

/* **The pre-auth masthead is one row** ([D-1913]). The reference puts the product's name
   at the left and the one question a stranger may ask at the right, on a single quiet
   line; stacked, they read as a two-line heading the page does not have.

   **The row is `.masthead` itself, not `.masthead-bar`.** A stranger's masthead has no
   bar — `_masthead` returns the identity and the help link as direct children, because
   there is nothing about the reader to group — so a rule written against the bar is a
   rule against nothing. Measured: the help link sat under the wordmark with that rule
   live ([D-1913]). */
/* …except a reader's destination bar (ANSWER 32-c (3)): a masthead carrying one takes the
   header's own layout, one row from 1024 and two below, as every signed-in header does. */
body:not(:has(.masthead > nav)) .masthead:not(:has(.masthead-destinations)) {
  display: flex; align-items: center; justify-content: space-between; gap: var(--s5);
}
body:not(:has(.masthead > nav)) .masthead { padding: 0 var(--s6); min-height: 64px; }

/* ==========================================================================
   The arrival canvas — [D-1913], `signon-new.png`

   **The page is not a white background containing a form.** The approved redesign is a
   composition: a cool tonal field, one quiet diagonal of light from the upper left, a
   great deal of open space, and the landscape sitting low on the left where it reads as
   atmosphere rather than as a picture the reader is meant to look at.

   **Three layers, and the order is the composition.** The diagonal is drawn over the
   field so the light appears to fall across it; the landscape is a separate fixed layer
   beneath the content so a card that grows does not drag it. Everything is `color-mix` of
   tokens the palette already holds — the audit still counts the same eighty colours, and
   `PUX-9`'s *no second accent* is kept by construction.
   ========================================================================== */
[data-plane="customer"] {
  background-color: color-mix(in srgb, var(--accent) 5%, var(--page));
  background-image:
    linear-gradient(118deg,
      color-mix(in srgb, var(--page) 92%, transparent) 0%,
      color-mix(in srgb, var(--page) 55%, transparent) 26%,
      transparent 52%),
    linear-gradient(170deg,
      color-mix(in srgb, var(--page) 70%, transparent) 0%,
      transparent 45%,
      color-mix(in srgb, var(--accent) 7%, transparent) 100%);
  background-attachment: fixed;
}

/* **The landscape, low and left, dissolving into the field.** Two gradients over the
   image do the dissolving rather than a `mask`: the same effect, one property, and no
   `-webkit-` pair to keep in step. `pointer-events:none` because atmosphere must never
   be in the way of a control, and `z-index:-1` keeps it under the card without the card
   needing a stacking context of its own. */
body[data-plane="customer"]::before {
  content: ""; position: fixed; inset: 0; z-index: -1; pointer-events: none;
  background:
    /* **The dissolve, and it covers the whole viewport.** A layer that started part way
       up left a seam across the page where its own top edge met the field behind it —
       visible at `1440` as a horizontal line through the editorial column. Full-bleed
       with the fading done by the gradients has no edge to show. */
    /* **Where the dissolve completes decides how much landscape there is** ([D-1913]).
       At `52%`/`46%` the massif was gone by a third of the way up and a third of the way
       across, which is a watermark: present enough to notice, not enough to hold a
       corner of the composition. Carried further, the ridge reads as the lower-left of
       the page — and still finishes well below the editorial's last line, which is the
       constraint that sets these two numbers rather than taste. */
    linear-gradient(to top,
      transparent 0%,
      color-mix(in srgb, var(--accent) 5%, var(--page)) 62%),
    linear-gradient(to right,
      transparent 8%,
      color-mix(in srgb, var(--accent) 5%, var(--page)) 54%),
    url("/static/background.webp") left bottom / auto 118% no-repeat;
}


/* **The page is the viewport, and the footer stands on its floor** ([D-1913]).
   A route choice is a short document: `main` ended a third of the way down, the footer
   followed it there, and the landscape — a fixed full-bleed layer — filled everything
   under the rule. That reads as a watermark on an empty page rather than as the lower
   half of a composition. Given a floor, the same image sits beneath the editorial column
   where the reference puts it, and the card keeps its own top edge rather than being
   centred into the middle of the screen. */
/* **Every wordmark-only page, since 73-f's approved fix** (the owner, 2026-09-27): a short
   page (a throttle page, a refusal, a gate) ended a third of the way down and the fixed
   landscape showed under its footer. The shell is the viewport's height and `main` takes
   the slack, so the footer rests on the viewport's floor when the content is short and
   follows it when it is tall — flow, not fixed positioning. `width:100%` because a flex
   item with auto side margins would otherwise shrink to its content. */
body:not(:has(.masthead > nav)):has(> .masthead-wordmark) {
  min-height: 100vh; min-height: 100dvh; display: flex; flex-direction: column;
}
body:not(:has(.masthead > nav)):has(> .masthead-wordmark) > main {
  flex: 1 0 auto; width: 100%;
}
body:not(:has(.masthead > nav)):has(.arrival) {
  min-height: 100vh; min-height: 100dvh; display: flex; flex-direction: column;
}
body:not(:has(.masthead > nav)) main:has(.arrival) { flex: 1 0 auto; }

/* ==========================================================================
   The arrival composition — two columns, asymmetric ([D-1913])

   **Measured off `signon-new.png` at 1536 and expressed as fractions**, so the geometry
   holds at every width rather than at the one the reference was drawn at: the card is
   `687/1536` of the viewport and its left edge sits at `515/1536`. That places it
   **right of centre**, which is the composition's whole asymmetry — an editorial column
   with room to breathe, and the task where the eye lands second.

   `:has()` scopes this to the surface that carries an arrival column, so the other
   pre-authentication pages keep the centred card they were drawn with. `D-1913` makes
   `1` excellent first; the family follows when it is ruled to.
   ========================================================================== */
/* Page 1's wordmark on its arrival's left edge (86-h 1): the same fractions as `main`. */
body:not(:has(.masthead > nav)):has(main > .arrival) .masthead.masthead-wordmark {
  max-width:none; width:69.4%; margin:0 auto 0 8.85%; padding-inline:0;
}
body:not(:has(.masthead > nav)) main:has(.arrival) {
  /* Reference at 1536: editorial left edge `136`, card `515..1202`. As fractions the
     block runs `8.85%` to `78.25%` and the card is `64.4%` of it — which puts the card
     right of centre at every width instead of only at the one it was drawn at. */
  max-width: none; width: 69.4%; margin: 0 auto 0 8.85%;
  display: grid;
  /* **Neither column is squeezed below its minimum** (QUESTION 18a): the editorial keeps
     `24rem`, which holds *Every hiring decision,* on one line at `--t-arrival`, and the card
     keeps `360px`, with a `--s6` gutter so the headline's longest line never touches the
     card. The card gives up width to the editorial first; where the two minimums and the
     gutter no longer fit, the composition stacks (below). */
  grid-template-columns: minmax(var(--arrival-min), 1fr)
                         max(var(--card-min), min(64.4%, 100% - var(--arrival-min) - var(--s6)));
  column-gap: var(--s6);
  align-items: start;
  /* **The row is the content's height, and the space left over is below it** ([D-1913]).
     Once `main` was given a floor the single row stretched to it, and `.arrival`'s
     `align-self:center` centred the editorial against the *viewport* rather than against
     the card it stands beside — headline at `376` on a page whose card starts at `102`.
     `start` hands the slack back to the page, where the landscape uses it. */
  align-content: start;
  padding: 24px 0 var(--s7);
}
/* **A card with no form in it is a choice, not a task** ([D-1913]). The credential
   card's column is set by the widest thing in it — a field a person types an address
   into — and at that width a card holding one sentence and two routes reads as empty
   rather than as composed. The owner's ruling is that each state keeps the visual system
   and takes the dimensions of its own content.

   **Selected by what is on the page, not by which page it is.** `#entry` would work and
   would be a page identifier wearing a class's clothes; the next choice card would have
   to be remembered. A surface carrying a `form` is a task at every width.

   **`:not(:has())` and not `:has(:not(:has()))`** — `:has()` may not be nested inside
   `:has()`, and a browser drops the whole invalid selector in silence. Measured: the
   card stayed `644` wide with the rule served and parsed away. */
/* **Guarded to the two-column composition**, because it is a statement about columns
   and there is one column below `--bp-wide`. The collapse lives in a media rule and this
   one is more specific than it, so unguarded it survived the collapse and left a `174px`
   card on a `360px` screen. */
@media (min-width: 70rem) {
  body:not(:has(.masthead > nav)) main:has(.arrival):not(:has(form)) {
    grid-template-columns: minmax(var(--arrival-min), 1fr)
                           max(var(--card-min), min(47%, 100% - var(--arrival-min) - var(--s6)));
  }
}
body:not(:has(.masthead > nav)) main:has(.arrival) > .arrival {
  grid-column: 1; align-self: center;
  /* **The measure is the composition's, not the column's** ([D-1913]). `.arrival`'s own
     `17.5rem` never applied — a broader rule on this plane sets every block in `main` to
     `--measure`, and at `0,1,0` the class lost to it. Left free, the headline balances
     onto two lines beside a narrow card and three beside a wide one, so the same three
     words change shape between two pages a reader sees one after the other.
     `24rem` since QUESTION 18a: *Every hiring decision, accounted for.* breaks at its
     comma, on two lines, on both pages. */
  max-width: var(--arrival-min); }
body:not(:has(.masthead > nav)) main:has(.arrival) > .gate-card {
  grid-column: 2; max-width: none; margin: 0; width: 100%; }

/* **The editorial column** — a headline that establishes the hierarchy and one sentence
   under an accent rule. Large enough to be the first thing read and restrained enough to
   be an enterprise product rather than a campaign: one weight above the body, the
   product's own ink, and no colour of its own. */
.arrival { max-width: 17.5rem; }
/* `balance` so the three lines stay even as the type scales, rather than leaving one
   word stranded on the last line at a width nobody tested. */
.arrival-headline {
  margin: 0; text-wrap: balance;
  font-size: var(--t-arrival); line-height: var(--lh-tighter);
  letter-spacing: var(--track-title);
  font-weight: var(--w-strong); color: var(--ink);
}
.arrival-headline + .arrival-sentence { margin-top: var(--s6); }
/* The rule is the accent's one appearance on this page outside the act itself. */
.arrival-sentence::before {
  content: ""; display: block; width: 2.5rem; height: 3px; border-radius: 2px;
  background: var(--accent); margin-bottom: var(--s5);
}
.arrival-sentence {
  margin: 0; font-size: var(--t-lede); line-height: var(--lh-normal);
  color: var(--quiet); max-width: 20rem;
}

/* **Stacked below 70rem** (QUESTION 18a). The two columns and their gutter need
   `24rem + 2rem + 360px` (776px) of a `main` that is `69.4%` of the viewport, which is
   1118px; the breakpoint is the next half-rem, 1120px. It was `64rem`, and at exactly 1024px both it and the choice card's
   `min-width:64rem` columns matched: two tracks with both children put in the first,
   which squeezed `1l`'s card to 270px and broke *organisation* inside the word. */
@media (max-width: 69.9375rem) {
  /* **One column, and the editorial leads.** Below this width the two columns would each
     be too narrow to be either, so the arrival reads as a page: orientation, then task. */
  body:not(:has(.masthead > nav)) main:has(.arrival) {
                       /* **The composition rule's `width` and `margin` have to be undone
                          here too**, not only its columns: `69.4%` offset `8.85%` from the
                          left is a composition at 1440 and a 250px column at 360. */
                       width: auto; margin: 0 auto;
                       grid-template-columns: minmax(0, 1fr); row-gap: var(--s7);
                       max-width: 34rem; padding: var(--s6) var(--s4) var(--s7); }
  /* The card's desktop breathing room is two thirds of a phone's width. */
  body:not(:has(.masthead > nav)) main:has(.arrival) > .gate-card { padding: var(--s5) var(--s5) var(--s6); }
  main:has(.arrival) .gate-card .page-head-mark { width: 56px; height: 56px; border-radius: 12px; }
  body:not(:has(.masthead > nav)) main:has(.arrival) > .arrival,
  body:not(:has(.masthead > nav)) main:has(.arrival) > .gate-card { grid-column: 1; }
  .arrival { max-width: none; }
  body:not(:has(.masthead > nav)):has(main > .arrival) .masthead.masthead-wordmark {
    width:100%; max-width:34rem; margin:0 auto; padding-inline:var(--s4); }
}

body:not(:has(.masthead > nav)) main { padding:var(--s4) var(--s4) var(--s6); }
/* **The width is the page's declared layout** (ux/84 §1), not the absence of a spine: a
   focused gate is --focused and a list is the container, spine or none. Only a page the
   registry declares nothing for keeps the stranger's narrow column. */
body:not([data-layout]):not(:has(.masthead > nav)) main { max-width:var(--focused); }

/* **Tightened rhythm, not smaller type** ([D-755]). This task is one question and one
   box; at the tenant surfaces' spacing it became a document. The typography is unchanged
   — only the space between the bands. */
body:not(:has(.masthead > nav)) .surface-section { margin-top:var(--s4);
                                                 padding-top:var(--s3); }
body:not(:has(.masthead > nav)) h1 { margin-bottom:var(--s3); }
/* Not on the Account family (68 §1, 70 §1), for `style_workspace`'s reason: a spine-less
   reader of A1 or A5 gets the page a member gets. */
body:not(:has(.masthead > nav)):not(:has(.account-column)) p { margin:var(--s2) 0; }

/* ---- the page header, at this plane's own rhythm ([D-1453]) ---------------------
   **`D-770`'s component, adopted unchanged.** The mark tile, the title, the lede and the
   rule under them are `style_refined`'s, and drawing a second header here would be a
   second design system for the reader who sees the fewest pages.

   **What changes is one thing: the spacing under it.** The component's `--s5` padding and
   `--s6` margin are the tenant measure's, and they put 56px between the lede and the first
   region on a page whose own sections are 28px apart — `D-755`'s finding, arriving one
   band higher: *at the tenant surfaces' spacing it became a document.* **Tightened rhythm,
   not smaller type** — the type, the mark and the rule are untouched.

   Scoped to `[data-plane]` rather than to `:has()`, because this is the declaration `RF-3`
   made available and the treatment is the plane's rather than the shell's absence. */
[data-plane="customer"] .page-head { padding-bottom:var(--s4); margin-bottom:var(--s4); }

/* Who is asking comes first and is the trust cue: a request a candidate cannot
   attribute is indistinguishable from a phishing email. */
#who-is-asking { border-top:none; margin-top:0; padding-top:0; }
/* **The region heading is an eyebrow on this plane, and the rule is the plane's rather
   than four ids'** ([D-1453]). It named page `15`'s four sections one at a time, which is
   `D-1418`'s defect exactly: *a section id is a local anchor and names no archetype*, and
   the next customer surface to grow a region would have been a fifth id or an untreated
   heading — which is what `1a`, `A3`, `B4a` and `B5a` met the moment they arrived.

   **The claim is the plane's.** These pages are one task read by a stranger; the region
   names are wayfinding and the sentence beneath is what they came for, so the heading steps
   back and the content carries the weight — `style_workspace`'s reasoning for the decision
   bands, on the plane at the other end of the product. **Page `15` renders identically**:
   its four ids were exactly its four sections.

   **And the subject is wayfinding rather than every `h2` here** ([D-1536]). The plane was
   the right owner and the tag was the wrong subject: a section a contract places *inside*
   another region is a named paragraph rather than a destination, and giving it the eyebrow
   tells a reader they can navigate by it. `.prose-section` is that opt-out and
   `components.prose_section` carries it. **Nothing that had this treatment loses it** —
   `section` still means region, so `15`'s four and `1`'s two are untouched. */
/* **A section title is not an eyebrow, and this rule made it one** ([D-1910]). The owner's
   ruling: *`section-title` and `eyebrow` are distinct* — `18px/600`/sentence case for the
   first, `12px/600`/uppercase for the second — and both **bind by semantic role, not by
   whether `section()` or `region_head()` happened to render them.**

   That is what this rule could not do. It selects on the tag inside a region, so on this
   plane `section()` drew the compact wayfinding treatment while `region_head()` drew the
   ordinary one — and on the console the **same two components drew the opposite way
   round**. One role, two treatments, chosen by which primitive a renderer reached for.
   The size and the case go; `eyebrow` keeps its own treatment on `.gate-eyebrow`, which
   is the role, and the colour and spacing this plane wants stay. */
[data-plane="customer"] .surface-section:not(.prose-section) > h2 {
  color:var(--faint); margin:0 0 var(--s2);
}
#who-is-asking p:first-of-type { color:var(--ink); font-weight:var(--w-medium);
                                 font-size:var(--t-card); line-height:var(--lh-snug);
                                 margin:0 0 var(--s2); }

/* **The organisation's own words, rendered as they were authored.** The rule marks it as
   a quotation so the candidate can see where Evicora stops and the recruiter begins.
   Prominence comes from the rule and the type size, so the padding can be modest. */
.question { margin:0; padding:var(--s2) 0 var(--s2) var(--s4);
            border-left:3px solid var(--accent); }
.question p { margin:0; font-size:var(--t-value); line-height:var(--lh-snug);
              letter-spacing:var(--track-snug); color:var(--ink); text-wrap:balance; }

#answer .field { max-width:none; margin:var(--s3) 0; }
/* ~128px: enough for *the month it ended*, and resizable for anyone with more to say.
   It was eight rows, which asked a one-line question with a page-sized box. */
#answer textarea { font-size:var(--t-control); min-height:8rem; }
#answer .action { font-size:var(--t-control); padding:var(--s3) var(--s5); }
/* A constraint, not a panel: every word kept, the territory halved. */
#answer .note { margin:var(--s3) 0; padding:var(--s2) var(--s3);
                line-height:var(--lh-normal); }
#answer > p:first-of-type { margin-top:0; }

/* ---- the pre-authentication card ([D-1600]) ----------------------------------------
   **A card is a boundary, and these pages are the one place the product has one.** Every
   authenticated surface is held by the shell — a spine one side, an account corner the
   other — so a box around it would be a second edge saying what the first already said. A
   stranger's page has no shell, and without this the content floats against the full
   width of a window with nothing saying it is one thing.

   **The hairline is the boundary and the lift is `.panel`'s**, which is the owner's ruling
   and not a compromise reached here: *keep the hairline as the card boundary, with only
   the minimal existing lift*. `--radius`'s own comment reads *hairlines instead of
   shadows — an instrument, not a dashboard*, and the ground note says a card should read
   as a card **without a shadow doing the work**; both stay true because the border draws
   the edge and the raised ground does the separating. A two-layer shadow was written here
   first and replaced: the system already had exactly one non-inset elevation, described
   in its own words as *deliberately almost nothing … enough to lift the container off the
   page and no further*, and a second one would have been a new elevation vocabulary for
   one surface. */
.gate-card {
  max-width:var(--focused); margin:var(--s7) auto; background:var(--page);
  /* **Almost nothing, and that is the whole specification.** The border still draws the
     edge and the raised ground still does the separating — the note above this rule is
     unchanged by the wash. What it adds is that the card's top is lit, so the object
     reads as a surface at a glance rather than as a rectangle of the same white. */
  background-image:var(--grad-sheen);
  border:var(--hair) solid var(--rule); border-radius:var(--radius);
  padding:var(--s7) var(--s7) var(--s6);
  box-shadow:0 1px 2px var(--rule);
}
/* **The archetype's header, drawn the card's way.** `page_header` keeps carrying the mark
   and the lede — `D-1392` fixes *which* mark and this fixes only where it sits. Stacked
   and centred, with the mark given the medallion's disc, so an acknowledgement reads as
   one column instead of a mark beside a paragraph. */
.gate-card .page-head { display:flex; align-items:flex-start; gap:var(--s5);
                        border:none; padding:0; margin:0; }
.gate-card .page-head-main { display:contents; }
/* **Gate cards only** draw a title tile (ux/84 ANSWER 48-f). */
.gate-card .page-head-mark { display:grid; place-items:center;
                             width:3.5rem; height:3.5rem; border-radius:var(--radius);
                             background:var(--selection);
                             background-image:var(--grad-mark);
                             color:var(--accent);
                             margin:0; flex:0 0 auto; }
.gate-card .page-head-mark .icon { width:1.75rem; height:1.75rem; stroke-width:1.4; }
.gate-card .page-head-words { min-width:0; }
/* **`overflow-wrap`, because uppercase and tracking make a word wider than anybody
   measured** ([D-1903]). `1l`'s heading is *Sign in or create an organisation*; set in
   capitals at `--track-wide` its longest word is **153px inside a 150px box** at a 360px
   viewport, so the `h1`, its words wrapper and the head all became scrollers. `min-width:0`
   lets the column shrink and does nothing about a single token that cannot.
   `body[data-plane="workspace"] .region-head h2` took this for the same reason one plane
   over; it is the same finding as the `.standing` lozenge, one element up. */
/* **Sentence case, and at the page rung** ([D-1913], `signon-new.png`). `D-1880` set
   the card's name apart *by case rather than size* and the owner preserved that at
   `D-1910` as an authorized variant; the new drawing of this card does the opposite —
   `Sign in` reads as a sentence at the size of a page title, and the lede beneath it does
   the separating that the capitals were doing. **This supersedes the compact variant for
   every gate card**, which is six surfaces and not one: a stranger walking `1` → `1o` →
   `1p` must not meet the same card titled two ways. */
/* **No heading breaks inside a word** (QUESTION 18a). `overflow-wrap:anywhere` was
   `D-1903`'s answer to a capitalised title at 360px; the titles are sentence case since
   `D-1913`, and it let a squeezed card print *organisatio / n*. A card too narrow for its
   title is a layout fault, and the composition now stacks before that happens. */
.gate-card .page-head .page-lede { margin:var(--s2) 0 0; color:var(--quiet);
                                   font-size:var(--t-lede); }
/* **The head written out by hand is gone, and so is the type it fell to** ([D-1906]).
   Three rules here served a `gate_card` whose `h1` was a *direct child* — six states
   composed one out of `gate_head`'s own parts instead of calling it. `--t-page` in
   sentence case at `--track-tight` is what those states drew, against `--t-card` in
   capitals at `--track-wide` on every card that asked for its head; `1`'s form and `1`'s
   refusal are the same card one click apart and drew the page name both ways.
   `S123` now refuses the call shape, so nothing can match these again. */

/* ---- `1l`'s two doors ([D-1908]) ------------------------------------------------
   **The front door offered two bulleted links and nothing else.** Measured: of the whole
   page, `63%` is `--raised`, `24%` is `--page`, and the accent appears on **thirty-five
   characters of text and no surface at all** — the product's most-read page paints no
   affordance. `1l`'s own docstring is *two doors and nothing else*, which is an argument
   about **what is offered**, not about whether either can be seen; a list marker is what
   the region fell to for want of a rule, never what anybody drew.

   **No new vocabulary, and no markup.** These are `.action` and `.action-secondary` —
   the plane's existing control pair, `L-2`'s *the expected next step, and the one that is
   not* — reached through the region's own id, the way `#who-is-asking` and `#answer` are
   already reached on this plane. Sign in is the expected step because the page a stranger
   is sent here *from* is a session that ended; looking at what Evicora is is the other
   kind of person, and it takes the quieter of the two shapes rather than a smaller one. */
#entry ul { list-style:none; margin:0; padding:0; display:grid; gap:var(--s3); }
#entry li { margin:0; }
#entry li > a {
  display:flex; align-items:center; justify-content:center;
  min-height:var(--control-h); padding:0 var(--s4);
  border:var(--hair) solid var(--accent); border-radius:var(--radius);
  background:var(--accent); background-image:var(--grad-accent);
  color:var(--on-accent); text-decoration:none;
  /* **The control role, because this rule's own argument is that these are controls**
     ([D-1908]). The depth pass wrote `--t-body` here; `D-1644` fixed *one control role*
     after finding four button treatments across the planes, and the typography half of
     this commit puts `.gate-card .action` back on it for the same reason. Both rungs are
     `.9375rem`, so **not a pixel moves** — what changes is that the door names what it is.

     **Stated as a `font` shorthand, which is why nothing caught it.** `S124` reads a
     `font-size` declaration and `D-1644`'s census reads the same word, so a role named
     inside a shorthand is invisible to both. Reported rather than gated: widening those
     rules is a typography ruling and this commit is not the place to take one. */
  font:var(--w-medium) var(--t-control)/1 var(--font);
}
#entry li > a:hover { background:var(--accent-hover);
                      background-image:var(--grad-accent-hi); color:var(--on-accent); }
/* **Available, and not equal** ([D-1913]). Both routes were controls of the same size,
   one filled and one outlined, which on a page whose whole job is *which of these two
   are you* reads as a fifty-fifty choice. It is not one: the reader sent here is nearly
   always somebody whose session ended. The second route keeps its ground and its word
   and gives up its edge and its height — clearly there, plainly the other one. */
#entry li + li > a {
  background:none; background-image:none; border-color:transparent;
  color:var(--accent); min-height:auto; padding:var(--s2) var(--s4);
  font-weight:var(--w-medium);
}
#entry li + li > a:hover { background:var(--selection); background-image:none;
                           border-color:var(--accent-edge); color:var(--accent-hover); }

/* **The mark is the only thing above the heading, so it is given a ground.** At `16px` on
   white it reads as punctuation rather than as the page's sign; the disc is what makes it
   a subject. The tint is the accent's palest step and carries no meaning of its own —
   `U-2`, so every one of these cards uses the same one whatever the mark. */
.medallion { display:inline-flex; align-items:center; justify-content:center;
             width:3.5rem; height:3.5rem; border-radius:var(--radius);
             background:var(--selection); background-image:var(--grad-mark);
             color:var(--accent); margin-bottom:var(--s5);
             flex:0 0 auto; }
.medallion .icon { width:1.75rem; height:1.75rem; stroke-width:1.4; }
/* **The one tone a medallion may take** — `U-2` names the cautionary state as the only
   one that carries alarm, and `.refusal` is already drawn in these colours, so the mark
   matches the block it heads rather than introducing a status palette. */
.medallion-caution { background:var(--caution-bg); color:var(--caution); }

/* **The head reads across** ([D-1880]): the mark beside the name, not above it. A card
   with the medallion stacked over a centred heading reads as three objects; beside them it
   is one, which is what every other head in the product already does.

   **The rule closes the head**, because everything above it is what the reader is looking
   at and everything below is what they do. */
.gate-head { display:flex; align-items:flex-start; gap:var(--s5);
             padding-bottom:var(--s5); margin-bottom:var(--s5);
             border-bottom:var(--hair) solid var(--rule); }
.gate-head .medallion { margin-bottom:0; }
.gate-head-words { min-width:0; }
/* **`D-1880`'s compact variant of `document-title`, and it is a variant rather than a
   role** ([D-1910]). `D-1909` read that decision as ruling case alone and moved the rung
   to `--t-page`; the browser then priced it — **`+115px` on `1l` and `+124px` on `B5a` at
   360px**, and the card `D-1880` describes as *one screen with one thing on it* stopped
   being one screen. The owner's revision: the regime supplies the base treatment and an
   **explicitly authorized presentation variant may modify it** without minting a second
   role.

   So this is `document-title` — the same role, the same semantics, `S124`'s own
   `DOCUMENT_TITLE_VARIANTS` naming the decision that authorizes it. What `D-1909` keeps
   is the part that had no authority behind it: a **page id** choosing the rung for the
   report family, and a bare `h1` falling through to another regime's. */
/* The unheaded arm takes the same treatment, for `D-1906`'s reason: `1`'s form and `1`'s
   refusal are one card a click apart and may not title themselves two ways ([D-1913]). */
.gate-head-words h1 { margin:0; }
/* 95 ruling 2: A3 step 1's second line — the first-time case, quiet, under the head. */
.gate-first-password { margin:var(--s3) 0 0; color:var(--quiet); font-size:var(--t-help); }

/* **A3, to the owner's master** (INSTRUCTION 135, `reset_password_form.png`): one white card
   on the container measure, the step at the left, a hairline, and the art — with *A few
   things to know* under it on step 1 and *link sent* — at the right. One column, no art,
   at 768 and below. */
/* **At sign-in's scale** (the owner, 135's review): the left column is sign-in's card — its
   padding, its 510px form, its title, field and button sizes and its rhythm — and the right
   column adds only what the scaled art and the panel need. */
main:has(> .gate-card > .rp-left),
body:not(:has(.masthead > nav)):has(.rp-left) .masthead.masthead-wordmark { max-width: 1032px; }
body:has(.rp-left) .masthead-wordmark .wordmark {
  font-size: var(--t-signin-wordmark); letter-spacing: var(--track-title); }
body .gate-card:has(> .rp-left):not(#rp-x) {
  display: grid; grid-template-columns: 596px minmax(0, 1fr); gap: 0;
  max-width: none; padding: 0; border-radius: 14px; }
.rp-left { display: grid; gap: 26px; align-content: start; padding: 36px 41px 48px 45px;
  border-right: 1px solid var(--h-line); }
.rp-right { display: grid; gap: 22px; align-content: start; padding: 36px 32px 40px; }
.rp-left .gate-head h1:not(#rp-x) { font-size: var(--t-signin-title); }
.rp-left .action-form input:not(#rp-x) { height: 56px; font-size: var(--t-signin-field); }
.rp-left .action-form button[type="submit"]:not(#rp-x) { width: 100%; justify-content: center;
  height: 70px; font-size: var(--t-signin-submit); }
.rp-art { justify-self: center; width: 100%; max-width: 280px; height: auto;
  -webkit-mask-image: radial-gradient(ellipse 72% 76% at 50% 50%, black 58%, transparent 100%);
  mask-image: radial-gradient(ellipse 72% 76% at 50% 50%, black 58%, transparent 100%); }
.rp-info.gate-first-password { display: flex; gap: 16px; align-items: flex-start; margin: 0;
  padding: 18px 20px; border-radius: 12px; background: var(--h-accent-soft);
  color: var(--h-ink); font-size: var(--t-body); }
.rp-info-mark { display: inline-flex; color: var(--h-accent); }
.rp-info-mark .icon { width: 24px; height: 24px; margin: 0; }
.rp-info-words { display: grid; gap: 4px; }
.rp-info-words span { color: var(--h-muted); }
.rp-left .action-form:not(#rp-x) { display: grid; gap: 16px; margin: 0; max-width: none; }
/* The master's head has no rule under it, and the field and act fill the column. */
.rp-left .gate-head:not(#rp-x) { margin: 0; padding: 0; border: 0; }
.rp-left .action-form :is(.field, .field-block, input):not(#rp-x) { max-width: none; width: 100%; margin: 0; }
.rp-left .rp-submit:not(#rp-x) { max-width: none; }
.rp-thing-words > *:not(#rp-x) { margin: 0; }
.rp-panel .support-link a:not(#rp-x) { display: inline-flex; gap: 4px; align-items: center; white-space: nowrap; }

.rp-left .gate-exit { margin: 0; padding-top: 24px; border-top: 1px solid var(--h-line); }
.rp-things-title { margin: 0 0 14px; font-size: var(--t-card); color: var(--h-ink); }
.rp-things { list-style: none; margin: 0; padding: 0; display: grid; gap: 16px; }
.rp-thing { display: flex; gap: 14px; align-items: flex-start; }
.rp-thing-mark { flex: none; display: inline-grid; place-items: center; width: 44px;
  height: 44px; border-radius: 10px; background: var(--h-accent-soft); color: var(--h-accent); }
.rp-thing-mark .icon { width: 20px; height: 20px; margin: 0; }
.rp-thing-words { display: grid; gap: 4px; }
.rp-thing-words b { color: var(--h-ink); }
.rp-thing-line, .rp-panel .support-link { margin: 0; color: var(--h-muted); font-size: var(--t-body); }
.rp-panel .support-link a { color: var(--h-accent); }
.rp-panel .support-link a .icon { width: 14px; height: 14px; margin: 0 0 0 4px; }
@media (max-width: 48rem) {
  main:has(> .gate-card > .rp-left),
  body:not(:has(.masthead > nav)):has(.rp-left) .masthead.masthead-wordmark { max-width: 632px; }
  body .gate-card:has(> .rp-left):not(#rp-x) { grid-template-columns: minmax(0, 1fr); }
  .rp-left { padding: 24px 20px; border-right: 0; }
  .rp-right { padding: 24px 20px; border-top: 1px solid var(--h-line); }
  .rp-art { display: none; }
  .rp-right:not(:has(.rp-panel)) { display: none; }
}
.gate-head-words .gate-lede { margin:var(--s2) 0 0; color:var(--quiet);
                              font-size:var(--t-lede); }
/* **A part's name is an eyebrow** — a card holds one thing, and a label at heading weight
   competes with the card's own name. */
/* **A region inside this card is drawn as a heading** ([D-1913], `signon-new.png`).
   `D-1536`'s predicate makes a structural region's name an eyebrow on this plane, and
   `D-1911` bound that to the role. The drawing of this card does not: *Your credentials*
   and *New to Evicora?* are set as ordinary headings in the reader's own weight, above
   the thing they name.

   **The card is why.** An eyebrow is a quiet label in a page of many regions; a gate card
   holds one screen with two parts, and at `12px` grey the part names read as captions on
   the fields rather than as the structure of the card. Registered against this decision
   in `S124`'s table, which is the mechanism for a treatment a drawing rules — not a
   container helping itself to one. */
/* **A chevron on the two links, an arrow on the act** ([D-1913], `signon-new.png`). The
   drawing is consistent about the pair and the distinction is the product's own: the
   button *performs* the act and takes `ARROW_FORWARD`, which `A3` already reads as *this
   continues somewhere else*; the two links only *go* somewhere, and a chevron is
   navigation — which is exactly why `D-1422` refused it as a `Gate`'s mark.

   **A glyph rather than an eighteenth icon.** `.disclosure` already draws its marker this
   way; the icon family is argued mark by mark and adding one for a link affordance would
   be this layer widening a vocabulary it does not own. */
.recovery-link a::after,
/* The second route on `1l` takes the same marker, because it is the same kind of
   thing: a way out of this page rather than the act the page is for ([D-1913]).

   **And the escape is written `\u203a`, doubled.** These stylesheets are Python
   strings, so a single backslash is read by Python before CSS ever sees it: a rule
   written `content:"\2009\203a"` in this file reached the browser as
   `U+0080 9 U+0083 a` and drew *Try Evicora€9 a*. */
#entry li + li > a::after,
.gate-card .action-secondary::after { content:"›"; margin-left:var(--s2);
                                      font-size:var(--t-lede); line-height:var(--lh-flat); }

/* **Scoped through the plane and the section**, because the rule that greys a region
   name on this plane is `[data-plane] .surface-section:not(...) > h2` — an attribute, two
   classes and an element — and a bare `.gate-card .region-name` loses to it on
   specificity while appearing to win on source order. Measured: the heading stayed
   `--faint` with this rule live ([D-1913]). */
[data-plane="customer"] .gate-card .surface-section > .region-name {
  font-size:var(--t-card); font-weight:var(--w-semi); color:var(--ink);
  text-transform:none; letter-spacing:normal; margin:0 0 var(--s3); }

.gate-eyebrow { margin:0 0 var(--s4); color:var(--quiet);
                font-size:var(--t-eyebrow); font-weight:var(--w-semi);
                text-transform:uppercase; letter-spacing:var(--track-wide); }
/* **The act fills the card's measure.** One control, one way past it: a button sized to
   its label leaves a pre-auth card looking like a form somebody has not finished. */
.gate-card .action-form > .action { width:100%; justify-content:center; }
/* **The guidance is a panel, above the control** ([D-1869] for the order, the drawings for
   the shape). `advisory` is neutral by construction, which is what a sentence telling a
   reader where their code is should be. */
.gate-card .advisory { margin:0 0 var(--s5); }

/* **A fact that needs a clause carries it in the pair** ([D-1880]) — the value, then what
   it means, under it and quieter. A sentence after the list would be about the list. */
.fact-clause { display:block; color:var(--quiet); font-size:var(--t-help);
               margin-top:2px; }
/* **The facts a gate card states are given a ground**, because on a card with no other
   furniture a bare `dl` reads as loose lines rather than as the thing the card is about. */
.facts-panel, .gate-card .facts { background:var(--raised);
                                  border-radius:var(--radius);
                                  padding:var(--s4) var(--s5); margin:0 0 var(--s5); }
/* **The way on from a terminal card, drawn with the act's weight and none of its
   authority** ([D-1880]). The drawings give this a filled button; `06 §6r` fixes this
   archetype's primary action as **none**, and the act it leads to belongs to another
   plane. So it takes the shape — full measure, the arrow, the centred label — and stays a
   link: no ground, a bordered edge, and the accent in the text rather than behind it. */
.onward-act { display:flex; align-items:center; justify-content:center; gap:var(--s3);
              width:100%; padding:var(--s3) var(--s5); text-decoration:none;
              color:var(--accent-deep); font-weight:var(--w-semi);
              border:var(--hair) solid var(--accent); border-radius:var(--radius-sm); }
.onward-act:hover { background:var(--selection); color:var(--accent-hover); }

/* **A named part of an explainer, with its mark beside the name** ([D-1899]). `1i` and
   `1n` are pages whose whole body is named regions, and the plane already draws each as a
   card; what they had no way to carry was what the part is about. Read across, as every
   other head in the product does. */
.prose-head { display:flex; align-items:center; gap:var(--s4); margin:0 0 var(--s4); }
.prose-head .medallion { width:2.75rem; height:2.75rem; margin:0; }
.prose-head .medallion .icon { width:1.375rem; height:1.375rem; }
.prose-head h2 { margin:0; }

/* Inside the card the refusal keeps its words and loses its box: the card already draws
   the edge, and a bordered block within a bordered block states the boundary twice. */
.gate-card .refusal { border:none; background:none; padding:0; margin:0; }
.gate-card .refusal .sentence, .gate-card .refusal .remedy { margin:var(--s3) 0 0; }

/* Something true the reader should know and need not act on. Quiet ground, no border and
   no variant: there is no way to reach for this shape to say something alarming. */
.advisory { display:flex; gap:var(--s3); align-items:flex-start;
            background:var(--sunken); border-radius:10px;
            padding:var(--s4) var(--s4); margin:var(--s5) 0; }
.advisory-mark { display:flex; color:var(--quiet); padding-top:2px; }
.advisory-body p { margin:0; color:var(--ink); font-size:var(--t-body);
                   line-height:var(--lh-normal); }
.advisory-body p + p { margin-top:var(--s2); }

/* **Full measure, because there is nothing to weigh it against.** The card holds one act
   and the reader reached it by being unable to do something else; a button sized to its
   label would read as one option among several that are not there. */
.gate-card .action-form { display:block; }
/* **Any act on the card, not just the form's.** The acknowledgement's one control is an
   anchor — nothing is submitted by going back to sign in — and an anchor carries a link
   underline a `<button>` has none of. Naming both by `.action` is what stops the two
   drifting apart, which is the shape `D-1599` repaired on the masthead sign-out. */
.gate-card .action {
  display:flex; width:100%; margin-top:var(--s5);
  padding:var(--s3) var(--s5); font-size:var(--t-control); text-decoration:none;
}
.field-marked { display:flex; align-items:center; gap:var(--s3);
                border:var(--hair) solid var(--rule-strong); border-radius:var(--radius);
                padding-left:var(--s3); background:var(--page); }
.field-marked:focus-within { box-shadow:var(--focus); }
.field-marked .icon { color:var(--quiet); flex:none; }
.field-marked input { border:none; border-radius:0; background:none; flex:1;
                      min-width:0; }
.field-marked input:focus, .field-marked input:focus-visible { box-shadow:none;
                                                               outline:none; }
/* **The box takes the constraint the input was carrying.** `input[name="token"]` is capped
   at `14rem` and set in the mono face by `style_primitives`, whose own words are *sized to
   what is asked for, not to the container* — a six-digit code does not need the measure of
   a password. Wrapping the input put a full-width border around a `14rem` control, so the
   box carries the same cap the input does. It was `14rem` — the width for a six-digit
   code — until a reader pasted a real reset token and found a box holding half of it;
   `style_primitives` now sizes `token` to `--form` on its own evidence. */
.field-marked:has(input[name="token"]) { max-width:var(--field); }

/* The card gives its fields more air than a dense form wants: there are two of them, a
   person is reading each label before typing, and nothing else competes for the space. */
.gate-card .field { max-width:none; margin:var(--s5) 0 0; }
.gate-card .field + .field { margin-top:var(--s5); }

/* Two ways on, and the rule says they are not the same kind of thing — `sign_in`'s
   `exit-rule` reasoning, with the word drawn in the gap rather than the space left to
   imply it. */
.gate-or { display:flex; align-items:center; gap:var(--s4); margin:var(--s5) 0 var(--s3);
           color:var(--quiet); font-size:var(--t-help); }
/* 73-g's one static line under *Didn't get it?*: quiet, centred under the words it
   qualifies, and nothing a reader has to act on. */
.gate-card .gate-hint { margin:0 0 var(--s3); color:var(--quiet); font-size:var(--t-help);
                        text-align:center; }
.gate-or::before, .gate-or::after { content:""; flex:1; height:var(--hair);
                                    background:var(--rule); }
.gate-exit { margin:var(--s5) 0 0; padding-top:var(--s5);
             border-top:var(--hair) solid var(--rule); }
/* **Except where nothing separates it.** On the acknowledgement the exit follows the `or`
   rule, which has already opened the gap; after a refusal it follows the code chip
   directly, and zero margin puts the way out against the thing a reader is still
   reading. */
.gate-card .refusal + .gate-exit { margin-top:var(--s6); }
/* **And where the head is all there is** (73-f's throttle pages): the head already draws
   its floor, so the exit takes that line rather than a second one a hair below it. */
.gate-card .gate-head + .gate-exit { border-top:0; }
.gate-back { display:inline-flex; align-items:center; gap:var(--s2);
             color:var(--accent); }
/* The mark trails its label rather than sitting against it. Scoped to the arrow pair so
   no other control changes shape: `.icon` inside a button is otherwise a prefix. */
.action .icon-arrow { margin-left:var(--s2); }


/* ---- a card per region, and a mark on each ([D-1790]) ----------------------------
   **`portal.png`'s arrangement, and the argument is one this file already makes.** The
   pre-authentication card exists because *a stranger's page has no shell* — every
   authenticated surface is held by a spine one side and an account corner the other, and
   without that the content floats against the full width of a window with nothing saying
   it is one thing. Page `15` has four regions and no shell, so that holds four times.

   **The eyebrow goes with it, and the reasoning survives.** It was *the region names are
   wayfinding and the sentence beneath is what they came for, so the heading steps back*.
   The heading still steps back — `region_head` asserts nothing `section` does not already
   assert — and what a reader gains is the mark, which is scanned before any word on the
   page and is the same mark this product gives a region everywhere else. `Who is asking`
   is the one that matters: a request a candidate cannot attribute is indistinguishable
   from a phishing email, and it now carries a glyph as well as a heading.

   **No tick in the `Gate` shield** (the drawing's second delta). The mark says *one
   control, and one way past it*; a tick inside it reads as **verified**, which is a claim
   about the link or the sender that nothing on this page makes — and the closest thing to
   a trust signal a phishing page would also draw.
   ========================================================================== */
[data-plane="customer"] main > .surface-section {
  margin:0 0 var(--s4); padding:var(--s5);
  background:var(--page); border:var(--hair) solid var(--rule);
  border-radius:var(--radius); box-shadow:0 1px 2px var(--rule);
}
[data-plane="customer"] main > .surface-section:last-of-type { margin-bottom:0; }
/* **Scoped through `main >`, and not only for tidiness.**
   `test_the_customer_region_heading_is_the_planes_treatment_and_not_four_ids` counts
   `[data-plane="customer"] .surface-section` and holds it at **one** — the plane's single
   region-*heading* claim, which is the eyebrow above. These two are spacing and the card,
   and writing them through the child combinator keeps that count honest rather than
   defeating it: the heading rule is still the only rule making a claim about headings.

   **`15`'s headings are the exception and it is the drawing's.** Its regions go through
   `region_head`, so the `> h2` the eyebrow selects is nested and the eyebrow does not
   reach them — they take the mark and the title case every region elsewhere in the
   product wears. The other customer surfaces keep the eyebrow until a drawing says
   otherwise; inventing a mark for seven undrawn pages would be this layer choosing
   iconography nobody asked for. */
[data-plane="customer"] main > .surface-section > .region-head { margin:0 0 var(--s4); }
[data-plane="customer"] main > .surface-section > :last-child { margin-bottom:0; }
/* The header is a card in the column it heads, as it is on every other plane. */
[data-plane="customer"] .page-head {
  padding:var(--s5); margin:0 0 var(--s4);
  background:var(--page); border:var(--hair) solid var(--rule);
  border-radius:var(--radius); box-shadow:0 1px 2px var(--rule);
}
/* **Except inside a card, where it was drawing a second one** ([D-1908]).
   `.gate-card .page-head` already said `border:none; padding:0` — two class selectors,
   `0,2,0` — and the rule above is an attribute and a class, **also `0,2,0`**, so the tie
   broke on source order and the later one won. Every carded surface whose head comes from
   `page_header` rendered a white bordered box inside a white bordered box: `1`'s form and
   `1k` are the two a stranger meets, and `1l` escaped only because it passes
   `headed=False`. Specificity is the fix rather than reordering, because the two files
   are concatenated and an order dependency between them is not a thing a reader of either
   one can see. */
[data-plane="customer"] .gate-card .page-head {
  padding:0; margin:0; background:none; border:0; border-radius:0; box-shadow:none;
}
/* The quotation is the organisation's own words and takes a ground of its own, so the
   candidate can see where Evicora stops and the recruiter begins. */
[data-plane="customer"] .question {
  padding:var(--s4); background:var(--raised); border-radius:var(--radius-sm);
  border-left:3px solid var(--accent);
}

/* **Whose move it is** ([D-1865]) — the one question `1a` is scanned for, and it led the
   region because a reader who cannot answer it either does nothing or writes in.

   **No colour.** Whether an ending the reader cannot change should be drawn differently
   from one they can is a `U-2` question nobody has ruled; this says whose turn it is and
   asserts nothing about whether that is good news. */
.whose-move { margin:0 0 var(--s3); font-weight:var(--w-semi); color:var(--ink); }

/* ==========================================================================
   Page 1, drawn to the owner's master (95, `sign-in-fail.png`: resting | failed)

   Measured at the master's own width (each panel 768px): the landscape full-bleed behind
   everything; the wordmark and *New to Evicora? Try Evicora ›* on one line across a 632px
   column; the card 592px wide in it, 136px from the top. The head sits 35px further in
   than the fields, as drawn. Failed is the same card with the alert in the head's place.
   ========================================================================== */
/* **The owner's landscape, full height on the left and fading into the page ground on its
   right edge** (96 ANSWER 96-a, closing 73-a): shown at its own aspect — never stretched —
   and the soft fade is what carries it to full bleed. */
body[data-plane="customer"]:has(main > .signin-card)::before {
  right: auto; width: calc(100vh * 560 / 941); width: calc(100dvh * 560 / 941);
  background: url("/static/landscape-16c57fafa22d.webp") left top / auto 100% no-repeat;
  /* The right edge fades into the ground, and so does the top: the header's links sit over
     the sky, and there they read at 4.13:1 on a phone — under 4.5 — without it. */
  -webkit-mask-image: linear-gradient(to right, black 62%, transparent 100%),
                      linear-gradient(to bottom, transparent 0, black 120px);
  -webkit-mask-composite: source-in;
  mask-image: linear-gradient(to right, black 62%, transparent 100%),
              linear-gradient(to bottom, transparent 0, black 120px);
  mask-composite: intersect;
}
body:not(:has(.masthead > nav)):has(main > .signin-card) .masthead.masthead-wordmark {
  display: flex; align-items: center; justify-content: space-between;
  max-width: 632px; width: 100%; margin: 0 auto; padding: 26px 0 0; min-height: 0;
}
body:has(main > .signin-card) .masthead-wordmark .wordmark {
  font-size: var(--t-signin-wordmark); letter-spacing: var(--track-title); min-height: 0;
}
.masthead-aside { margin: 10px 0 0; font-size: var(--t-signin-aside); color: var(--ink); }
.masthead-aside a { margin-left: 14px; color: var(--accent); text-decoration: none; }
.masthead-aside a::after { content: "›"; margin-left: 12px; }
body:not(:has(.masthead > nav)):has(main > .signin-card) main {
  max-width: 632px; width: 100%; margin: 0 auto; padding: 0 0 var(--s8);
}
.signin-card {
  margin: 46px 18px 0; padding: 36px 41px 56px 45px; background: var(--page);
  border-radius: 14px; box-shadow: 0 10px 30px color-mix(in srgb, var(--ink) 8%, transparent);
}
.signin-head { padding: 0 0 0 35px; margin: 0 0 53px; }
.signin-head h1 { margin: 0; font-size: var(--t-signin-title); line-height: var(--lh-tight);
                  letter-spacing: var(--track-title); font-weight: var(--w-strong); color: var(--ink); }
.signin-lede { margin: 0; font-size: var(--t-signin-lede); line-height: var(--lh-tight); color: var(--quiet); }
.signin-card .signin-form:not(#sign-in) { display: block; max-width: none; width: 100%; }
.signin-card .signin-form .field:not(#sign-in) { max-width: none; margin: 0 0 26px; display: block; }
.signin-card .signin-form .field:not(#sign-in) label { display: block; margin: 0 0 12px; font-size: var(--t-signin-label);
                            font-weight: var(--w-semi); color: var(--ink); }
.signin-form .field input {
  width: 100%; max-width: none; height: 56px; box-sizing: border-box; padding: 0 20px;
  font-size: var(--t-signin-field); background: var(--raised); border: 1px solid var(--rule);
  border-radius: 8px;
}
.signin-form .field input:focus-visible { border: 2px solid var(--accent); outline: none;
                                          box-shadow: none; padding: 0 19px; }
.signin-form .signin-submit {
  display: flex; width: 100%; max-width: none; height: 70px; justify-content: center;
  align-items: center;
  gap: 14px; margin: 29px 0 0; border-radius: 8px; font-size: var(--t-signin-submit);
}
/* The arrow at the master's size, beside its word. */
.signin-form .signin-submit .icon { width: 24px; height: 24px; }
.signin-links {
  display: flex; justify-content: space-between; gap: var(--s4); margin: 26px 0 0;
  padding: 26px 0 0; border-top: 1px solid var(--sunken); font-size: var(--t-signin-link);
}
.signin-links a { color: var(--accent); text-decoration: none; }
.signin-links a::after { content: "›"; margin-left: 10px; }
/* **One inner width** (CONFIRMED 73): the alert, the fields, the button and the hairline
   all end on the card's inner edge.
   **Failed: the alert takes the head's place** (the master's right panel). The heading
   stays in the document for a screen reader; the alert is what a sighted reader meets. */
.signin-card:has(.signin-alert) .signin-head {
  position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0);
  white-space: nowrap; margin: 0; padding: 0; }
.signin-alert {
  display: flex; gap: 26px; align-items: flex-start; margin: 0 0 35px;
  padding: 22px 24px 22px 26px; border-radius: 10px;
  background: var(--h-danger-soft, var(--danger-bg));
}
.signin-alert-mark { flex: 0 0 38px; width: 38px; height: 38px; border-radius: 50%;
                     margin-top: 2px; display: inline-flex; align-items: center;
                     justify-content: center; background: var(--h-danger, var(--danger));
                     color: var(--page); font-size: var(--t-signin-alert-title);
                     font-weight: var(--w-strong); line-height: var(--lh-flat); }
.signin-card .signin-alert-words p:not(#sign-in) { margin: 0; }
.signin-card .signin-alert-words .signin-alert-title {
  font-size: var(--t-signin-alert-title); line-height: var(--lh-tight); font-weight: var(--w-semi);
  color: var(--h-danger, var(--danger)); }
.signin-card .signin-alert-words .signin-alert-body:not(#sign-in) {
  margin-top: 6px; font-size: var(--t-signin-alert); line-height: var(--lh-body); color: var(--ink); }
/* **No footer on page 1**: the owner's master draws none; the landscape runs to the floor. */
body:has(main > .signin-card) > .page-footer { display: none; }
/* ==========================================================================
   `1i`, drawn to the owner's master (96, `try_evicora.png`, INSTRUCTION 74)

   Measured at the master's own 1536px: a 1420px column from x 60; the wordmark once, with
   *Already have an account? Sign in ›* on its right; the hero; then two columns 735 | 671
   with a 16px gutter, the right one starting 27px lower (the art's place above it is held,
   96). Solo and After the trial on the left; Team, Your candidates' data and Questions on
   the right. **No landscape**: the master draws none, and its own art is held.
   ========================================================================== */
body[data-plane="customer"]:has(main > .start-hero) {
  background: color-mix(in srgb, var(--accent) 2%, var(--page));
}
/* **The owner's landscape where 96's art sat** (ANSWER 96-a): behind the header and hero on
   the right, faded into the ground on its left edge and above the Team card at its foot.
   Anchored to the page, not the viewport, so it scrolls away with the hero. Hidden at
   ≤ 768 (below). */
body[data-plane="customer"]:has(main > .start-hero) { position: relative; }
body[data-plane="customer"]:has(main > .start-hero)::before {
  position: absolute; inset: 0 0 auto auto; width: min(600px, 42%); height: 470px;
  background: url("/static/landscape-16c57fafa22d.webp") center 42% / cover no-repeat;
  /* Faded in from the top as well: *Already have an account? Sign in* sits over the sky
     and read 4.12:1 there without it. */
  -webkit-mask-image: linear-gradient(to right, transparent 0%, black 38%),
                      linear-gradient(to bottom, transparent 0, black 110px, black 62%, transparent 100%);
  -webkit-mask-composite: source-in;
  mask-image: linear-gradient(to right, transparent 0%, black 38%),
              linear-gradient(to bottom, transparent 0, black 110px, black 62%, transparent 100%);
  mask-composite: intersect;
}
/* **32 each side above 48rem, 20 on a phone** (the owner, after 146): the masthead and the
   main take the same gutter, so the wordmark stays on the hero's left edge. */
body:not(:has(.masthead > nav)):has(main > .start-hero) .masthead.masthead-wordmark:not(#start) {
  display: flex; align-items: center; justify-content: space-between;
  max-width: 1420px; width: calc(100% - 2 * var(--s6)); margin: 0 auto;
  padding: 8px 0 0; min-height: 0;
}
body:has(main > .start-hero) .masthead-wordmark .wordmark {
  font-size: var(--t-start-wordmark); letter-spacing: var(--track-title); min-height: 0;
}
body:has(main > .start-hero) .masthead-aside { margin: 0; font-size: var(--t-start-aside); color: var(--quiet); }
body:has(main > .start-hero) .masthead-aside a { font-weight: var(--w-semi); }
body:not(:has(.masthead > nav)):has(main > .start-hero) main {
  max-width: 1420px; width: calc(100% - 2 * var(--s6)); margin: 0 auto; padding: 0 0 var(--s7);
}
.start-hero { margin: 32px 0 0; }
.start-hero h1 {
  margin: 0; font-size: var(--t-start-title); line-height: var(--lh-tighter);
  letter-spacing: var(--track-title); font-weight: var(--w-strong); color: var(--ink);
}
.start-hero .start-second {
  display: block; margin-top: 4px; font-size: var(--t-start-second); font-weight: var(--w-medium);
  letter-spacing: var(--track-snug); color: var(--quiet);
}
.start-hero .start-lede {
  max-width: 730px; margin: 20px 0 0; font-size: var(--t-start-lede); line-height: var(--lh-snug);
  color: var(--quiet);
}
.start-grid {
  display: grid; grid-template-columns: minmax(0, 735fr) minmax(0, 671fr); column-gap: 16px;
  align-items: start; margin-top: 113px;
}
.start-column { display: grid; gap: 17px; min-width: 0; }
.start-column + .start-column { margin-top: 27px; }
.start-solo {
  padding: 22px 27px 25px; border: 1px solid color-mix(in srgb, var(--accent) 12%, var(--page));
  border-radius: 12px; background: color-mix(in srgb, var(--accent) 6%, var(--page));
}
.start-solo .start-label {
  margin: 0; font-size: var(--t-start-label); font-weight: var(--w-semi);
  letter-spacing: var(--track-wide); text-transform: uppercase; color: var(--accent);
}
.start-audience:not(#start) {
  max-width: 560px; margin: 10px 0 0; font-size: var(--t-start-audience);
  line-height: var(--lh-tight); color: var(--ink);
}
.start-facts {
  display: flex; flex-wrap: wrap; gap: 12px 28px; margin: 18px 0 0; padding: 0; list-style: none;
}
.start-fact { display: flex; align-items: center; gap: 12px; }
.start-fact-tile {
  display: inline-flex; align-items: center; justify-content: center; width: 64px; height: 64px;
  border-radius: 50%;
}
.start-fact-tile .icon { width: 28px; height: 28px; }
.start-fact-words { font-size: var(--t-start-fact); font-weight: var(--w-semi); color: var(--ink); }
.start-fact-days .start-fact-tile, .start-fact-users .start-fact-tile {
  background: var(--role-admin); color: var(--accent); }
.start-fact-jobs .start-fact-tile { background: var(--disc-teal); color: var(--mark-green); }
.start-fact-evaluations .start-fact-tile {
  background: color-mix(in srgb, var(--h-area-candidates) 14%, var(--page)); color: var(--mark-violet); }
.start-solo .start-small:not(#start) {
  max-width: 600px; margin: 13px 0 0; font-size: var(--t-start-small); line-height: var(--lh-snug);
  color: var(--quiet);
}
.start-form .start-action:not(#start) {
  display: flex; width: 100%; max-width: none; height: 55px; margin: 21px 0 0; justify-content: center;
  align-items: center; border-radius: 8px; font-size: var(--t-start-action);
}
.start-solo .start-form + .start-small:not(#start) { margin-top: 15px; }
.start-note {
  display: flex; gap: 24px; align-items: flex-start; padding: 23px 26px 24px 26px;
  border: 1px solid color-mix(in srgb, var(--accent) 8%, var(--rule)); border-radius: 12px;
  background: color-mix(in srgb, var(--accent) 2%, var(--page));
}
.start-note-tile {
  flex: 0 0 72px; display: inline-flex; align-items: center; justify-content: center;
  width: 72px; height: 72px; border-radius: 50%;
  background: color-mix(in srgb, var(--accent) 9%, var(--page)); color: var(--h-area-system);
}
.start-note-tile .icon { width: 34px; height: 34px; }
.start-note-body { min-width: 0; padding-top: 5px; }
.start-note-label {
  margin: 0; font-size: var(--t-start-note-label); font-weight: var(--w-semi);
  letter-spacing: var(--track-snug); text-transform: uppercase; color: var(--ink);
}
.start-note-line:not(#start) {
  margin: 0; font-size: var(--t-start-note); line-height: var(--lh-relaxed); color: var(--quiet);
}
.start-note-label + .start-note-line:not(#start) { margin-top: 12px; }
.start-note-plain .start-note-line { font-size: var(--t-start-small); }
.start-note-warm .start-note-line { font-size: var(--t-start-note-way); }
.start-note-lead:not(#start) {
  margin: 12px 0 6px; font-size: var(--t-start-note-lead); line-height: var(--lh-snug); color: var(--ink);
}
.start-more {
  display: inline-block; margin-top: 4px; font-size: var(--t-start-more); font-weight: var(--w-semi);
  color: var(--accent); text-decoration: none;
}
.start-more::after { content: "›"; margin-left: 10px; }
.start-more:hover { text-decoration: underline; }
.start-team { position: relative; }
.start-note-warm {
  border-color: var(--h-warn-line); background: var(--h-warn-soft);
}
.start-note-warm .start-note-tile { background: var(--h-warn-note); color: var(--mark-warm); }
.start-note-warm .start-note-body { max-width: 378px; }
.start-people { position: absolute; right: 26px; top: 56px; width: 144px; height: 120px; }
.start-people::before {
  content: ""; position: absolute; left: 25px; top: 27px; width: 94px; height: 94px;
  box-sizing: border-box; border: 3px solid color-mix(in srgb, var(--accent) 10%, var(--page));
  border-radius: 50%;
}
.start-person {
  position: absolute; display: inline-flex; align-items: center; justify-content: center;
  width: 54px; height: 54px; border-radius: 50%;
}
.start-person .icon { width: 26px; height: 26px; }
.start-person-one { left: 45px; top: 0; background: var(--role-admin); color: var(--accent); }
.start-person-two { left: 0; top: 66px; background: var(--disc-teal); color: var(--mark-green); }
.start-person-three { left: 90px; top: 66px; background: var(--role-recruiter); color: var(--mark-violet); }
.start-note-green {
  border-color: color-mix(in srgb, var(--h-area-organisation) 15%, var(--page));
  background: color-mix(in srgb, var(--h-area-organisation) 5%, var(--page));
}
.start-note-green .start-note-tile { background: var(--disc-teal); color: var(--mark-green); }
.start-note-green .start-note-label { color: var(--h-area-organisation); }
.start-data-lines {
  max-width: 480px; margin: 9px 0 0; padding-left: 22px; font-size: var(--t-start-note);
  line-height: var(--lh-relaxed); color: var(--quiet);
}
.start-questions:not(#start) {
  display: flex; align-items: center; gap: 12px; margin: 12px 0 0 26px;
  font-size: var(--t-start-small); color: var(--quiet);
}
.start-questions .start-more { margin: 0; }
.start-questions-mark { display: inline-flex; color: var(--h-area-system); margin-right: 8px; }
.start-questions-mark .icon { width: 28px; height: 28px; }
/* **At ≤ 768 everything stacks** (96): hero, Solo, After the trial, Team, your data,
   Questions — the two columns in order, one under the other. */
@media (max-width: 48rem) {
  body:not(:has(.masthead > nav)):has(main > .start-hero) .masthead.masthead-wordmark {
    flex-wrap: wrap; row-gap: 8px; }
  body:not(:has(.masthead > nav)):has(main > .start-hero) .masthead.masthead-wordmark:not(#start),
  body:not(:has(.masthead > nav)):has(main > .start-hero) main { width: calc(100% - 40px); }
  body:has(main > .start-hero) .masthead-wordmark .wordmark { font-size: var(--t-signin-wordmark); }
  .start-hero { margin-top: 28px; }
  .start-hero h1 { font-size: var(--t-signin-title); }
  .start-hero .start-second { font-size: var(--t-signin-alert-title); }
  .start-hero .start-lede { font-size: var(--t-start-small); }
  .start-grid { grid-template-columns: minmax(0, 1fr); row-gap: 17px; margin-top: 32px; }
  .start-column + .start-column { margin-top: 0; }
  .start-solo { padding: 22px 20px; }
  .start-note { padding: 20px; gap: 16px; }
  .start-note-tile { flex-basis: 56px; width: 56px; height: 56px; }
  .start-people { display: none; }
  body[data-plane="customer"]:has(main > .start-hero)::before { content: none; }
  .start-questions:not(#start) { margin-left: 0; }
}
/* ==========================================================================
   1a's code step and 1o, drawn to the owner's master (97, `solo_signup_enter_code.png`)

   Measured at the master's 1416px: the sky full bleed; one card 1266 wide and 974 tall,
   68 from the top, radius 24; its content column 597 wide, 87 in; the summit filling the
   right half. Six boxes 88 × 88 on a 101.8px pitch, Continue 71 tall, the note 144.
   ========================================================================== */
/* The sky fills the viewport at every height and follows the document when it is taller
   (76b): on the root, so nothing below the body shows the page white. */
html:has(.code-card) {
  min-height: 100%;
  background: linear-gradient(180deg, var(--sky-top) 0%, var(--sky-band) 48%,
                              var(--sky-band) 70%, var(--sky-foot) 100%);
}
body[data-plane="customer"]:has(.code-card) { min-height: 100vh; min-height: 100dvh; background: none; }
body[data-plane="customer"]:has(.code-card)::before { background: none; }
body:has(.code-card) > .page-footer:not(#code-card) { display: none; }
body:not(:has(.masthead > nav)):has(main > .code-card) main {
  max-width: 1266px; width: calc(100% - 2 * var(--s4)); margin: 68px auto 68px; padding: 0;
}
.code-card {
  /* `clip`, not `hidden`: a hidden box is a scroll container, and focusing the wide code
     field scrolled the whole card 19px sideways on a phone (76b). */
  display: grid; grid-template-columns: minmax(0, 684px) minmax(0, 1fr); overflow: clip;
  min-height: 974px; box-sizing: border-box;
  border: 1px solid color-mix(in srgb, var(--accent) 10%, var(--rule));
  border-radius: 24px; background: color-mix(in srgb, var(--accent) 3%, var(--page));
  box-shadow: 0 18px 50px color-mix(in srgb, var(--ink) 10%, transparent);
}
.code-main { padding: 30px 0 40px 87px; min-width: 0; }
/* The master's own fade into the card is in the pixels; a short mask softens the column
   edge where the card's ground and the art's first column differ by a shade. */
.code-art {
  background: url("/static/summit-b6726e563901.webp") left top / cover no-repeat;
  -webkit-mask-image: linear-gradient(to right, transparent 0, black 64px);
  mask-image: linear-gradient(to right, transparent 0, black 64px);
}
.code-wordmark:not(#code-card) {
  display: inline-block; font-size: var(--t-code-wordmark); font-weight: var(--w-strong);
  letter-spacing: var(--track-title); color: var(--accent-hover); text-decoration: none;
}
.code-head { display: flex; gap: 44px; align-items: flex-start; margin-top: 62px; }
.code-tile {
  flex: 0 0 96px; display: inline-flex; align-items: center; justify-content: center;
  width: 96px; height: 96px; border-radius: 16px;
  background: linear-gradient(160deg, var(--role-admin), color-mix(in srgb, var(--accent) 14%, var(--page)));
  color: var(--accent);
}
.code-tile .icon { width: 52px; height: 52px; }
.code-head h1 {
  margin: -6px 0 0; font-size: var(--t-code-title); line-height: var(--lh-tight);
  letter-spacing: var(--track-title); font-weight: var(--w-strong); color: var(--ink);
}
.code-lede:not(#code-card) {
  max-width: 380px; margin: 14px 0 0; font-size: var(--t-code-lede); line-height: var(--lh-snug); color: var(--quiet);
}
.code-standing { margin-top: 36px; padding-top: 38px; border-top: 1px solid var(--sunken); }
.code-eyebrow:not(#code-card) {
  margin: 0; font-size: var(--t-code-eyebrow); font-weight: var(--w-semi);
  letter-spacing: var(--track-wide); text-transform: uppercase; color: var(--quiet);
}
.code-turn:not(#code-card) {
  margin: 10px 0 0; font-size: var(--t-code-turn); line-height: var(--lh-tight);
  letter-spacing: var(--track-title); font-weight: var(--w-strong); color: var(--ink);
}
.code-where:not(#code-card) {
  max-width: 440px; margin: 4px 0 0; font-size: var(--t-code-where); line-height: var(--lh-snug);
  color: var(--quiet);
}
/* The registry's sentence is lower case and unstopped; the master draws it as a sentence. */
.code-where::first-letter { text-transform: uppercase; }
.code-where::after { content: "."; }
.code-form { display: block; max-width: 597px; margin: 25px 0 0; }
.code-email-field:not(#code-card) { display: block; max-width: none; margin: 0 0 22px; }
.code-email-field label { display: block; margin: 0 0 10px; font-weight: var(--w-semi); color: var(--ink); }
.code-email-field .code-email:not(#code-card) {
  width: 100%; max-width: none; height: 56px; box-sizing: border-box; padding: 0 20px;
  border: 1px solid var(--rule); border-radius: 10px; background: var(--page);
}
/* **Six boxes, one input** (97): the boxes are drawn behind a transparent monospace input
   whose letters sit one to a box — the pitch is the box plus its gap. */
.code-boxes { position: relative; height: 88px; container-type: inline-size; overflow: clip; }
.code-box {
  position: absolute; top: 0; width: 88px; height: 88px; box-sizing: border-box;
  border: 1.5px solid color-mix(in srgb, var(--accent) 8%, var(--rule-strong));
  border-radius: 10px; background: var(--page); pointer-events: none;
}
.code-box:nth-of-type(1) { left: 0; }
.code-box:nth-of-type(2) { left: 101.8px; }
.code-box:nth-of-type(3) { left: 203.6px; }
.code-box:nth-of-type(4) { left: 305.4px; }
.code-box:nth-of-type(5) { left: 407.2px; }
.code-box:nth-of-type(6) { left: 509px; }
.code-boxes .code-input:not(#code-card) {
  /* Wider than the six boxes by one pitch: the spacing after the sixth digit would
     otherwise overflow the field, and a field that overflows scrolls its first digit away. */
  position: absolute; inset: 0 auto 0 0; z-index: 1; width: calc(100% + 110px); max-width: none; height: 88px;
  box-sizing: border-box; margin: 0; padding: 0 0 0 calc(44px - 0.5ch); border: 0;
  background: transparent; font-family: var(--font-mono); font-size: var(--t-code-digit);
  letter-spacing: calc(101.8px - 1ch); color: var(--ink); caret-color: var(--accent);
  outline: none; box-shadow: none;
}
/* Focus: the first box is drawn active, as the master draws it; the caret stands in the
   next empty box. A refused code turns every border red. */
.code-boxes:has(.code-input:focus) .code-box:nth-of-type(1) { border: 2px solid var(--accent); }
.code-boxes:has(.code-input:focus:valid) .code-box { border: 2px solid var(--accent); }
.code-boxes:has(.code-input[aria-invalid="true"]) .code-box:nth-of-type(n) { border: 2px solid var(--danger); }
.code-form .field-error { margin: 12px 0 0; }
.code-form .code-continue:not(#code-card) {
  display: flex; width: 100%; max-width: none; height: 71px; margin: 23px 0 0;
  justify-content: center; align-items: center; gap: 16px; border-radius: 10px;
  font-size: var(--t-code-action);
}
.code-form .code-continue .icon { width: 26px; height: 26px; }
.code-note:not(#code-card) {
  display: flex; gap: 22px; align-items: flex-start; margin: 30px 0 0;
  padding: 30px 43px 28px 22px; border-radius: 12px;
  background: color-mix(in srgb, var(--role-admin) 80%, var(--page));
  font-size: var(--t-code-note); line-height: var(--lh-card); color: var(--ink);
}
.code-note-mark { display: inline-flex; flex: 0 0 30px; color: var(--accent); }
.code-note-mark .icon { width: 30px; height: 30px; margin: 0; }
.code-form .code-resend:not(#code-card) {
  display: inline-block; margin: 18px 0 0; padding: 0; border: 0; background: none;
  font: inherit; font-size: var(--t-code-resend); color: var(--accent); cursor: pointer;
}
.code-form .code-resend:hover { text-decoration: underline; }
/* **≤ 768: the art column goes** (97): the card is full width over the sky, content only. */
@media (max-width: 48rem) {
  body:not(:has(.masthead > nav)):has(main > .code-card) main { margin: 20px auto; }
  .code-card { grid-template-columns: minmax(0, 1fr); min-height: 0; }
  .code-art { display: none; }
  .code-main { padding: 26px 20px 32px; }
  .code-head { gap: 18px; margin-top: 32px; }
  .code-tile { flex-basis: 64px; width: 64px; height: 64px; }
  .code-tile .icon { width: 32px; height: 32px; }
  .code-wordmark:not(#code-card) { font-size: var(--t-code-wordmark-narrow); }
  .code-head h1 { font-size: var(--t-code-title-narrow); margin-top: 0; }
  .code-lede:not(#code-card) { font-size: var(--t-code-lede-narrow); }
  .code-turn:not(#code-card) { font-size: var(--t-code-turn-narrow); }
  .code-where:not(#code-card) { font-size: var(--t-code-lede-narrow); }
  /* The pitch follows the width: six boxes across the column with a 6px gap. */
  /* In container units, so the pitch resolves the same in `left` and in `letter-spacing`. */
  /* The pitch is ((100cqw + 6px) / 6), written out: a custom property must be declared
     in :root, and this one is local to the six boxes. */
  .code-boxes { height: 56px; }
  .code-box { width: calc(((100cqw + 6px) / 6) - 6px); height: 56px; }
  .code-box:nth-of-type(2) { left: calc((100cqw + 6px) / 6); }
  .code-box:nth-of-type(3) { left: calc(2 * ((100cqw + 6px) / 6)); }
  .code-box:nth-of-type(4) { left: calc(3 * ((100cqw + 6px) / 6)); }
  .code-box:nth-of-type(5) { left: calc(4 * ((100cqw + 6px) / 6)); }
  .code-box:nth-of-type(6) { left: calc(5 * ((100cqw + 6px) / 6)); }
  .code-boxes .code-input:not(#code-card) {
    height: 56px; font-size: var(--t-signin-alert-title);
    padding-left: calc((((100cqw + 6px) / 6) - 6px) / 2 - 0.5ch); letter-spacing: calc(((100cqw + 6px) / 6) - 1ch); }
  .code-form .code-continue:not(#code-card) { height: 56px; font-size: var(--t-signin-link); }
  .code-note:not(#code-card) { padding: 18px; gap: 14px; font-size: var(--t-code-note-narrow); }
  .code-note-mark .icon { width: 24px; height: 24px; }
  .code-form .code-resend:not(#code-card) { font-size: var(--t-code-note-narrow); }
}
/* ==========================================================================
   1p, drawn to the owner's master (98, `sign_in_org_setup.png`, INSTRUCTION 77)

   Measured at the master's 1536px: the summit full bleed on the right (its own 693×889,
   anchored to the viewport's foot) over 97's sky; a translucent card 775 wide, 46 from
   the top and 69 in, radius 20; its column 647 wide, 63 in; the stepper at the top right.
   ========================================================================== */
html:has(.setup-card) {
  min-height: 100%;
  background: linear-gradient(180deg, var(--sky-top) 0%, var(--sky-band) 40%,
                              var(--sky-band) 72%, var(--sky-foot) 100%);
}
body[data-plane="customer"]:has(.setup-card) {
  position: relative; min-height: 100vh; min-height: 100dvh; background: none;
}
/* The art: at its own pixels, anchored to the viewport's foot on the right; its top and
   left edges fade into the sky, since the cut stops below the master's own stepper. */
body[data-plane="customer"]:has(.setup-card)::before {
  inset: auto 0 0 auto; width: 693px; height: 889px;
  background: url("/static/ascent-469eaa198af3.webp") right bottom / 693px 889px no-repeat;
  -webkit-mask-image: linear-gradient(to bottom, transparent 0, black 110px),
                      linear-gradient(to right, transparent 0, black 60px);
  -webkit-mask-composite: source-in;
  mask-image: linear-gradient(to bottom, transparent 0, black 110px),
              linear-gradient(to right, transparent 0, black 60px);
  mask-composite: intersect;
}
body:has(.setup-card) > .page-footer:not(#setup-card) { display: none; }
body:not(:has(.masthead > nav)):has(main > .setup-card) main {
  max-width: none; width: auto; margin: 0; padding: 46px 16px 40px clamp(16px, 4.5vw, 69px);
}
.setup-card {
  width: 775px; max-width: 100%; box-sizing: border-box; padding: 20px 64px 33px 63px;
  border: 1px solid color-mix(in srgb, var(--page) 70%, transparent); border-radius: 20px;
  background: color-mix(in srgb, var(--page) 88%, transparent);
  -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
  box-shadow: 0 18px 50px color-mix(in srgb, var(--ink) 10%, transparent);
}
.setup-card .code-wordmark:not(#setup-card) { font-size: var(--t-setup-wordmark); }
.setup-card .setup-head { gap: 40px; margin-top: 50px; padding-bottom: 20px; border-bottom: 1px solid var(--sunken); }
.setup-card .code-tile { flex-basis: 92px; width: 92px; height: 92px; }
.setup-card .code-tile .icon { width: 50px; height: 50px; }
.setup-card .code-head h1 { margin-top: -2px; font-size: var(--t-setup-title); }
.setup-card .code-lede:not(#setup-card) { max-width: 480px; margin-top: 10px; font-size: var(--t-setup-lede); }
.setup-form:not(#setup-card) { display: block; max-width: none; margin: 20px 0 0; }
.setup-field { margin: 0 0 28px; }
.setup-field > label { display: block; font-size: var(--t-setup-label); font-weight: var(--w-semi); color: var(--ink); }
.setup-hint:not(#setup-card) { margin: 1px 0 0; font-size: var(--t-setup-hint); color: var(--quiet); }
.setup-input { position: relative; display: block; margin-top: 8px; }
.setup-input-mark {
  position: absolute; left: 18px; top: 50%; transform: translateY(-50%);
  display: inline-flex; color: var(--quiet); pointer-events: none;
}
.setup-input-mark .icon { width: 22px; height: 22px; }
.setup-input input:not(#setup-card) {
  display: block; width: 100%; max-width: none; height: 49px; box-sizing: border-box;
  padding: 0 18px 0 60px; font-size: var(--t-setup-input);
  border: 1px solid var(--rule-strong); border-radius: 8px;
  background: color-mix(in srgb, var(--page) 92%, transparent);
}
.setup-input.has-reveal input:not(#setup-card) { padding-right: 60px; }
.setup-input .reveal {
  position: absolute; right: 12px; top: 50%; transform: translateY(-50%);
  display: inline-flex; padding: 6px; border: 0; background: none; color: var(--quiet); cursor: pointer;
}
.setup-input .reveal .icon { width: 24px; height: 24px; }
.setup-input .reveal[aria-pressed="true"] { color: var(--accent); }
.setup-established:not(#setup-card) { margin: 0; color: var(--quiet); }
/* **98-a: one live line.** The circle ticks once the field holds the policy's length —
   `minlength` makes the field valid there, so no script decides it. */
.setup-check:not(#setup-card) {
  display: flex; align-items: center; gap: 12px; margin: -18px 0 24px;
  font-size: var(--t-setup-check); color: var(--quiet);
}
.setup-check-mark {
  display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px;
  box-sizing: border-box; border: 1.5px solid var(--rule-strong); border-radius: 50%; color: transparent;
}
.setup-check-mark .icon { width: 12px; height: 12px; margin: 0; }
.setup-form:has(#credential_secret:valid) .setup-check-mark {
  border-color: var(--accent); background: var(--accent); color: var(--page); }
.setup-form:has(#credential_secret:valid) .setup-check { color: var(--ink); }
.setup-form .setup-submit:not(#setup-card) {
  display: flex; width: 100%; max-width: none; height: 60px; margin: 0;
  justify-content: center; align-items: center; gap: 14px; border-radius: 8px;
  font-size: var(--t-setup-action);
}
.setup-form .setup-submit .icon { width: 24px; height: 24px; }
.setup-note {
  display: flex; gap: 30px; align-items: center; margin: 15px 0 0; padding: 20px 28px;
  border-radius: 10px; background: color-mix(in srgb, var(--role-admin) 80%, transparent);
}
.setup-note-mark { display: inline-flex; color: var(--accent); }
.setup-note-mark .icon { width: 34px; height: 34px; }
.setup-note p:not(#setup-card) { margin: 0; font-size: var(--t-setup-note); line-height: var(--lh-card); color: var(--quiet); }
.setup-note b { color: var(--ink); font-weight: var(--w-semi); }
/* **The stepper** (98): top right over the art. A done step is a filled circle with a
   tick, the current a filled circle with its number, the next an outlined number. */
.setup-steps {
  position: absolute; top: 54px; right: 96px; display: flex; gap: 0; margin: 0; padding: 0;
  list-style: none;
}
.setup-step { position: relative; display: grid; justify-items: center; gap: 8px; width: 132px; }
.setup-step + .setup-step::before {
  content: ""; position: absolute; top: 20px; right: calc(50% + 32px); width: 70px; height: 2px;
  background: var(--accent);
}
.setup-step-next::before { background: color-mix(in srgb, var(--accent) 45%, var(--page)); }
.setup-step-mark {
  display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px;
  box-sizing: border-box; border-radius: 50%; font-size: var(--t-setup-step); font-weight: var(--w-semi);
}
.setup-step-mark .icon { width: 20px; height: 20px; margin: 0; }
.setup-step-done .setup-step-mark { background: color-mix(in srgb, var(--accent) 70%, var(--page)); color: var(--page);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--page) 70%, transparent); }
.setup-step-current .setup-step-mark { background: var(--accent); color: var(--page);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--page) 70%, transparent); }
.setup-step-next .setup-step-mark { border: 2px solid color-mix(in srgb, var(--accent) 30%, var(--page));
  background: color-mix(in srgb, var(--page) 85%, transparent); color: var(--quiet); }
/* Over the sky, so a shade deeper than the master's blues and grey: at those values the
   labels measured 3.3–4.3:1, and every text block keeps 4.5 (98). */
.setup-step-label { font-size: var(--t-setup-step-label); color: var(--accent-deep); }
.setup-step-current .setup-step-label { font-weight: var(--w-semi); color: var(--accent-deep); }
.setup-step-next .setup-step-label { color: var(--ink); }
/* **≤ 768**: the stepper sits above the card, the art stays as the ground behind a
   full-width card. */
@media (max-width: 48rem) {
  body:not(:has(.masthead > nav)):has(main > .setup-card) main { padding: 20px 16px 32px; }
  /* **The ground reaches the document's foot** (PO on 77): the art leaves the viewport
     and anchors to the page's foot at its own size, fading into the sky above. */
  body[data-plane="customer"]:has(.setup-card)::before {
    position: absolute; inset: auto 0 0 0; width: 100%; height: 889px;
    background: url("/static/ascent-469eaa198af3.webp") center bottom / auto 889px no-repeat; }
  /* Over the art on a phone, so the stepper stands on its own pale ground to keep its
     labels legible. */
  .setup-steps { position: static; justify-content: center; margin: 0 0 18px; padding: 10px 6px;
                 border-radius: 16px; background: color-mix(in srgb, var(--page) 86%, transparent); }
  .setup-step { width: 104px; }
  .setup-step + .setup-step::before { width: 48px; right: calc(50% + 28px); }
  .setup-card { width: 100%; padding: 24px 20px; }
  .setup-card .code-wordmark:not(#setup-card) { font-size: var(--t-code-wordmark-narrow); }
  .setup-card .setup-head { gap: 16px; margin-top: 24px; }
  .setup-card .code-tile { flex-basis: 60px; width: 60px; height: 60px; }
  .setup-card .code-tile .icon { width: 32px; height: 32px; }
  .setup-card .code-head h1 { font-size: var(--t-code-title-narrow); }
  .setup-card .code-lede:not(#setup-card) { font-size: var(--t-code-lede-narrow); }
  .setup-note { gap: 16px; padding: 16px; }
}
/* ==========================================================================
   1c, drawn to the owner's master (99, `signon_org_setup_info.png`, INSTRUCTION 78)

   98's shell and art, reused: the wordmark outside the card at the top left, the stepper
   at Approval (99-a). The card is white, 735 wide, 111 from the top, radius 16.
   ========================================================================== */
body:not(:has(.masthead > nav)):has(main > .admission-card) main { padding-top: 26px; }
/* **1c's ground is its master's own art** (PO on READY 78): 98's layer, 99's picture. */
body[data-plane="customer"]:has(.admission-card)::before {
  width: 704px; height: 904px; background: url("/static/peak-4dcfaad7962a.webp") right bottom / 704px 904px no-repeat;
}
.admission-wordmark:not(#setup-card) {
  display: inline-block; margin: 0 0 22px 6px; font-size: var(--t-setup-wordmark);
}
.admission-card:not(#setup-card) {
  width: 735px; padding: 48px 55px 50px 65px; border-radius: 16px;
  background: color-mix(in srgb, var(--page) 96%, transparent);
}
.admission-card .code-tile { flex-basis: 76px; width: 76px; height: 76px; border-radius: 14px; }
.admission-card .code-tile .icon { width: 38px; height: 38px; }
.admission-card.setup-card .setup-head { gap: 44px; margin-top: 0; padding-bottom: 34px; }
.admission-card .code-head h1:not(#setup-card) { text-wrap: wrap; max-width: 360px; font-size: var(--t-admission-title); line-height: var(--lh-tight); }
.admission-card .code-lede:not(#setup-card) { max-width: none; font-size: var(--t-admission-lede); }
.admission-wait { display: flex; gap: 31px; align-items: flex-start; margin-top: 28px; }
.admission-wait-mark {
  flex: 0 0 76px; display: inline-flex; align-items: center; justify-content: center;
  width: 76px; height: 76px; border-radius: 50%;
  background: color-mix(in srgb, var(--accent) 9%, var(--page)); color: var(--accent);
}
.admission-wait-mark .icon { width: 36px; height: 36px; }
.admission-card .code-eyebrow:not(#setup-card) { font-size: var(--t-code-eyebrow); }
.admission-lead:not(#setup-card) {
  max-width: 480px; margin: 12px 0 0; font-size: var(--t-admission-lead); font-weight: var(--w-medium);
  line-height: var(--lh-snug); color: var(--ink);
}
.admission-rest:not(#setup-card) { max-width: 430px; margin: 6px 0 0; font-size: var(--t-admission-lede); color: var(--quiet); }
.admission-note {
  display: flex; gap: 42px; align-items: flex-start; margin: 22px 0 0; padding: 20px 26px;
  border-left: 3px solid var(--accent); border-radius: 8px;
  background: color-mix(in srgb, var(--role-admin) 80%, var(--page));
}
.admission-note-mark { display: inline-flex; color: var(--accent); }
.admission-note-mark .icon { width: 30px; height: 30px; }
.admission-note p:not(#setup-card) { margin: 0; font-size: var(--t-admission-note); line-height: var(--lh-snug); color: var(--quiet); }
.admission-note b { color: var(--ink); font-weight: var(--w-semi); font-size: var(--t-admission-lede); }
.admission-next:not(#setup-card) {
  margin: 22px 0 0; padding-bottom: 26px; border-bottom: 1px solid var(--sunken);
  font-size: var(--t-admission-lede); line-height: var(--lh-snug); color: var(--quiet);
}
.admission-asked { margin-top: 26px; }
.admission-rows {
  display: grid; gap: 14px; margin: 14px 0 0; padding: 20px 26px; border-radius: 10px;
  background: color-mix(in srgb, var(--sunken) 55%, var(--page));
}
.admission-row { display: grid; grid-template-columns: 190px minmax(0, 1fr); align-items: center; }
.admission-row dt { display: flex; align-items: center; gap: 18px; margin: 0; color: var(--quiet); font-size: var(--t-admission-lede); }
.admission-row dt .icon { width: 24px; height: 24px; color: var(--accent); }
.admission-row dd { margin: 0; color: var(--ink); font-size: var(--t-admission-lede); text-transform: capitalize; }
@media (max-width: 48rem) {
  .admission-wordmark:not(#setup-card) { margin-bottom: 16px; font-size: var(--t-code-wordmark-narrow); }
  body[data-plane="customer"]:has(.admission-card)::before {
    width: 100%; height: 904px; background: url("/static/peak-4dcfaad7962a.webp") center bottom / auto 904px no-repeat; }
  .admission-card:not(#setup-card) { width: 100%; padding: 24px 20px; }
  .admission-card .code-tile { flex-basis: 56px; width: 56px; height: 56px; }
  .admission-card .code-head h1 { font-size: var(--t-code-title-narrow); }
  .admission-wait { gap: 16px; }
  .admission-wait-mark { flex-basis: 52px; width: 52px; height: 52px; }
  .admission-note { gap: 16px; padding: 16px; }
  .admission-rows { padding: 16px; }
  .admission-row { grid-template-columns: 150px minmax(0, 1fr); }
  .admission-row dt { gap: 10px; font-size: var(--t-admission-note); }
  .admission-row dt .icon { width: 20px; height: 20px; }
  .admission-row dd { font-size: var(--t-admission-note); }
}
@media (max-width: 40rem) {
  body:not(:has(.masthead > nav)):has(main > .signin-card) .masthead.masthead-wordmark {
    flex-wrap: wrap; row-gap: 8px; padding: 20px var(--s4) 0; }
  .signin-card { margin: 32px var(--s4) 0; padding: 28px 22px 32px; }
  .signin-head { padding: 0; margin-bottom: 32px; }
  .signin-links { flex-direction: column; }
  /* The header wraps to two lines here, so the sky fades out further down (96-a). */
  body[data-plane="customer"]:has(main > .signin-card)::before {
    -webkit-mask-image: linear-gradient(to right, black 62%, transparent 100%),
                        linear-gradient(to bottom, transparent 0, transparent 60px, black 170px);
    mask-image: linear-gradient(to right, black 62%, transparent 100%),
                linear-gradient(to bottom, transparent 0, transparent 60px, black 170px);
  }
}
/* ==========================================================================
   BATCH 1 — forms, across every family.

   `action-form` wraps **every** act in the product: `L-2` renders each as a real `POST`
   form, so a region of three actions is three `<form>` elements. Unstyled they are
   blocks, and the action hierarchy the three references froze arrives stacked.

   The named variants — `reject-form`, `hold-form`, `close-job-form`, `governing-form`
   and the rest —
   are the same wrapper carrying which act it submits. They are **not twenty components**;
   they take the shared treatment and exist so a surface can address one of them.
   ========================================================================== */

.action-form { display:contents; }
/* A form that carries its own fields is a block again: `display:contents` would drop the
   grouping the fields need. These are the acts that ask something before they run. */
.action-form:has(.field), .action-form:has(textarea), .action-form:has(select) {
  display:block; margin:var(--s4) 0; max-width:var(--field);
}
.action-form:has(.field) .action { margin-top:var(--s3); }

/* Forms that are the surface's whole purpose rather than one act among several.

   **`.brief-form` left this family with the surface it named** ([D-1779]). `WF-36` drew
   the brief upload as its own `#source-brief` section, which is exactly what this rule is
   for; `UI-1` put the brief in the rail panel, where replacing it is one act among several
   and sits behind a disclosure. The class went when the section did — the live form wears
   `action-form action-secondary`, which is what it now is. */
.create-job-form, .edit-job-form, .record-request-form,
.step-up-form, .break-glass-form, .write-up-form, .instruction-form,
.add-document-form, .classify-form, .authenticity-form,
.governing-form, .close-form, .promote-form, .transfer-form, .withdraw-form,
.reject-form, .hold-form, .close-job-form, .decision-owner-form,
.client-form {
  display:block; margin:var(--s4) 0; max-width:var(--field);
}

/* **The act and the way out, one row apart by the page's button gap** (`65 §2`) — `--s3`,
   what `.act-block-acts` puts between *Cancel* and a credential row's submit on `A1`. */
.step-up-acts { display:flex; flex-wrap:wrap; align-items:center; gap:var(--s3); }


/* ==========================================================================
   BATCH 2 — row fields and inline marks.

   Each of these already names what it protects. Nothing here is a new concept; the
   treatment follows the family the surface belongs to: **Platform** rows scan across,
   **Tenant** content reads down, and marks carry standing by shape rather than by hue
   (`U-2`).
   ========================================================================== */

/* Platform · the access log a customer reads about their own tenant (`PA-5`). Four
   columns, because *when · who · why · what* is the whole answer and merging any two
   would be the single-"who"-column defect `06 §6c-i` names.

   **And four columns that fit the measure they are read at** ([D-1811]). The tracks
   floored at `11 + 9 + 10 + 10 = 40rem`, and the main column beside a rail is 596px —
   so `.listing`'s `overflow-x:auto` turned the row into a contained scroller and *What*,
   the cell naming what Evicora opened, was reachable only by dragging a list sideways
   on the surface whose whole purpose is saying what Evicora opened. `D-1447` made the
   listing the scroll container deliberately and that stays; what was wrong is a row
   authored wider than anywhere it is drawn. Narrower tracks, same four axes, nothing
   merged. The small-viewport scroller is unchanged and is `listing-columns`' adopted
   behaviour — at 360px there is no honest four-column reading of this row. */
.access-entry { grid-template-columns:var(--col-2xl) var(--col-xl) minmax(var(--col-md),1fr) minmax(var(--col-md),1fr); }
.access-when { font-variant-numeric:tabular-nums; color:var(--quiet); }
/* **Two facts, stacked** ([D-1809]). The reference is evidentiary and leads; the capacity
   is interpretation and sits under it in the quiet weight the other two columns use. A
   parenthetical put them on one line and made the column the hardest of the four to
   scan. */
.access-who  { display:flex; flex-direction:column; gap:var(--s1); }
.access-who-ref  { font-weight:var(--w-medium); }
.access-who-role { color:var(--quiet); }
.access-why, .access-what { color:var(--quiet); }

/* Tenant · the organisation's own audit trail (`13a`). **Four cells and then the
   refusal**, which is `06 §6b`'s small-viewport order made the row order: when → who →
   what → whether it happened. The two refusal sentences are not a fifth and sixth column;
   they qualify the row above them, so they take the width of the whole entry. `1d`'s
   sentences *are* cells, which is why this rule names `activity-entry` rather than
   reaching for `p` on the shared primitive.

   **`13a`'s four tracks are gone and this rule went with them** ([D-1625]). The row is no
   longer four columns a reader infers from contents: the command is the line, the instant
   sits over it, the actor under it, and the outcome is a scannable state beside it. The
   rule that remains is `1d`'s, whose cells genuinely are cells and which `D-1623` named.
   Leaving this one behind would have been the more dangerous half of the change: it is
   **later in source order** than `style_workspace`, so it silently won — the trap
   `D-1593` recorded. */

/* Account · a notice the reader was sent (`A5`). **A record, not a note** ([D-1437]).
   Every notice wore `note` — the `U-2` treatment for a sentence set *apart from*
   something, whose whole modifier vocabulary is a standing: cautionary, affirmative,
   accountability, remedy. On every other surface that emits it there is a neighbouring
   fact it qualifies. Here the notices **are** the page, so three ordinary records —
   a renewal, an admission, an unanswered question — each arrived wearing the apparatus
   of an alarm, which is presentation strengthening meaning and exactly what `U-2`
   forbids. The remedy line keeps its own class and its own weight: `D-066` requires it
   to read no fainter than the thing it answers. */
/* **Retired at [D-1884], and `D-1437`'s reasoning is what retired it.** Its concern was
   that a notice wearing `note` arrived with *the apparatus of an alarm*; `notice_card`'s
   neutral form is a plain bordered record with a mark, which is what `A5` was reaching for
   and what the drawings draw. The mechanism goes and the rule it enforced holds. */

/* -- Tenant · the roster ------------------------------------------------------------
   **The `Roster` archetype's row, and it is five named columns** ([D-1446], [D-1630]).
   `06 §3a`: *many members, each individually actionable*, with attention carried by *each
   member's standing, per row, and **not an ordering***. `D-1446` made the row two regions
   because five loose children were landing in four declared tracks; naming the columns
   (`D-1447`) is the other half of that repair, and what it fixes is the half that was left:
   a reader inferring which of the things inside *everything about them* was the standing,
   which was the role and which was a date. Identity leads, every act scoped to that member
   is still one place at the end of the row, and the count declared here and the count drawn
   there are both five. */
/* **ux/79 retired the row's detail region** (INSTRUCTION 37): the facts became columns, the
   acts a row menu, and the reasons one quiet line each (`style_hiring`). */

/* Inline marks. **Shape and weight, never a palette** — the accent stays affordance and
   `cautionary` stays the one alarm. */
/* `reason` was in this list until [D-1407]. `B6`'s justification is a clause somebody
   typed and an inline mark is for a token, so it renders as a sentence now and the class
   has no emitter left. */
/* `requester-relationship` and `release-condition` were in this list until [D-1444], and
   both were `16`'s alone. *They are asking about their own data* and *Held until the
   retention obligation expires on …* are clauses `interpretation/` writes; an inline mark
   is for a token, which is `D-1407`'s reading of `reason` one page over. `urgency` stays
   for `B6`, and the four the request page draws stay with it. */
/* **Four of the request page's became three** ([D-1450]), and the two that left are the
   two ends of what an inline mark is not.

   `subject-resolution` dressed a **paragraph** — *Evicora holds no record for this subject.
   That was established rather than assumed, and it means there is nothing here to act on.*
   — which is `D-1444`'s removal on the same page's queue and `D-1407`'s on `B6`.

   `jurisdiction` dressed a **`<fieldset>`**, so the classification form's repeated pair
   was `display:inline-block` and `white-space:nowrap` with a border, and its legend and
   both labels rendered *JURISDICTION 1*, *JURISDICTION* and *WHY IT APPLIES* in capitals.
   That is further out than the sentence case: a form is not a value at all. The
   governing-jurisdiction fieldset four functions away has always carried no class.

   **What stays are marks.** `governs this request` and `third-party data` are fixed
   phrases the renderer writes about a row, and a disposition is one domain word from
   `disposition_rules.yaml`'s closed set — `erase`, `redact_in_place`,
   `retain_under_exception`. Each is a token, and each is now inside a grid cell that lets
   it be one. */
/* **Three of the four became three, and `obstacle` was never one of them** ([D-1454]).
   It was `3b`'s alone, and what it dressed was `OBSTACLE_MEANINGS` — *the brief this was
   derived from has changed; rebase it*, *some proposals have not been accepted or
   rejected* — clauses `interpretation/hiring_plan` wrote, under a heading reading *What
   stands in the way* that had already named what they were. That is `D-1444`'s reading on
   `16`, `D-1446`'s on `4` and `D-1450`'s on `16a`, met on the last surface outside `B6`
   that still wore this rule.

   **The measurement is the narrow one this family had not produced before.** `D-1450`'s
   was a desktop defect — 1365px inside a 1280px viewport. Here `white-space:nowrap` on a
   53-character clause made the obstacle list scroll **sideways inside `.listing`'s own
   container**, 451px of content in a 388px row at 420 and in a 328px row at 360, so the
   reader dragged a sentence horizontally to finish reading it and no document-width check
   could see it.

   **The name goes with the rule.** `06 §6l` declares `blocking` an **entry row** and
   `D-1449` confirmed it keeps that shape at one axis, so what is left after the chip is
   `.listing > li`'s own treatment — which is what an entry row is. `urgency` stays for
   `B6`, where a duration is a token. */
/* **And the entry row became a bullet** ([D-1647]). `D-1454` left these clauses on
   `.listing > li`, which is right for a collection of subjects and wrong for three
   one-line clauses: ruled, padded and hoverable says *these are rows you can open*, and
   there is nothing behind them. A bullet is less than an entry row, not more — it says
   *these are several of one kind* and claims nothing else, which is all `06 §6l`'s one
   axis ever needed.

   **Named `blocking` after the region rather than after the retired rule**: `D-1454`
   deleted the token rule and a gate asserts its selector is absent from the stylesheet,
   so a row class spelled that way would resurrect the name the deletion was about — in a
   comment as readily as in a selector, which is how a gate came to read a value out of its
   own explanation once already. `06 §6l` calls the region `blocking`. */
.listing > li.blocking-row {
  display:list-item; list-style:disc outside; margin-left:var(--s5);
  padding:var(--s1) 0; border-bottom:none;
}
.listing > li.blocking-row:hover { background:none; }

.third-party {
  display:inline-block; font-size:var(--t-eyebrow); letter-spacing:var(--track-wide);
  text-transform:uppercase; font-weight:var(--w-semi); color:var(--quiet);
  border:1px solid var(--rule-strong); border-radius:var(--radius);
  padding:1px var(--s2); background:var(--page); white-space:nowrap;
}
/* A condition already met, and the tick is the word rather than an icon: `A4`'s reader is
   being told which of `SR-10`'s conditions still withhold their authority. */
.trust-condition { display:flex; gap:var(--s4); align-items:flex-start;
                   padding:var(--s3) 0; border-bottom:1px solid var(--rule); }
.condition-body { min-width:0; }
.condition-done  { color:var(--accent); font-weight:var(--w-semi); }
/* **The disc a step's state is read from** ([D-1886]). A tick where it is done and an
   empty ring where it is not — the ring is drawn rather than left blank so four
   conditions read as a column of steps rather than as four paragraphs that start in
   different places.

   **The accent, not a green.** The drawing fills the disc green; this palette has no
   affirmative colour — `note-affirmative` is drawn in `--quiet` — and minting one for a
   tick would be a new tone in the system for one page. `.condition-done` already sets the
   word in the accent, so the disc says the same thing in the same colour. `not yet` takes
   the ring and no glyph, because it is not a fault either. */
.condition-mark { flex:0 0 auto; width:1.375rem; height:1.375rem; border-radius:50%;
                  display:inline-flex; align-items:center; justify-content:center;
                  border:2px solid var(--rule-strong); color:var(--page);
                  margin-top:2px; }
.condition-mark-done { background:var(--accent); border-color:var(--accent); }
.condition-mark .icon { width:.875rem; height:.875rem; stroke-width:2.5; }

/* Withheld detail, subordinate to the `withheld` block it sits inside. */
.withheld-owner, .withheld-subjects, .withheld-capabilities {
  margin:var(--s1) 0 0; font-size:var(--t-body); color:var(--quiet);
}

/* A return affordance rendered as a bare word rather than the `‹ label` paragraph. */
.return { font-size:var(--t-help); color:var(--quiet); }
.related-surface { font-size:var(--t-help); }

/* ==========================================================================
   BATCH 3 — evidence, testimony and the sentences that qualify a conclusion.

   This is the Tenant family's core content, and the treatments follow the Decision
   reference: **a claim is what the candidate asserted, evidence is what supports it, and
   a remedy is what would change an absence.** They must not share one weight, because
   flattening them is how an unknown starts reading as a fault.
   ========================================================================== */

/* A claim is the candidate's own assertion, not Evicora's conclusion (`interpretation/
   candidate`). It leads its block; the evidence beneath it is support. */
.claim { font-weight:var(--w-medium); color:var(--ink); margin:0 0 var(--s2); }
.evidence { margin:0 0 var(--s4); padding-left:var(--s4);
            border-left:2px solid var(--rule); }

/* **What would change this**, and it appears under both absence and refusal — the design
   system's `remedy_statement` primitive, forced by two obligations. Quiet, because a
   remedy is an offer rather than a fault. */
.remedy { color:var(--quiet); font-size:var(--t-body); margin:var(--s1) 0 0; }

/* Interview testimony (`9a`). **Who is answerable for it** is the point of the surface, so
   the note and the recommendation are kept apart: one is what was observed, the other is
   what the observer concluded from it, and merging them would let a recommendation borrow
   the standing of an observation. */
.observation { margin:0 0 var(--s2); }
.observation-note { color:var(--quiet); margin:var(--s1) 0; }
.observation-recommendation { margin:var(--s2) 0 0; padding-left:var(--s4);
                              border-left:2px solid var(--rule-strong); }
/* `RL-18`: criteria describe the role, never a person. */
.fairness { color:var(--quiet); font-size:var(--t-body); margin:var(--s3) 0; }

/* Text a redaction has emptied. **Named, never a blank** — `DR-15` removes the words and
   the reader must be able to tell that from *nothing was written*. */
.stripped-text { color:var(--faint); font-style:italic; }

.answer { margin:var(--s3) 0; }
.outcome { font-weight:var(--w-medium); }
/* `break-glass-session` was here until [D-1407]. `B6` is the Monitor archetype and draws
   a real `table`, so the class described the list item it no longer renders. `urgency` and
   `reason` stay: both are `B6`'s own facts and both still reach a cell. */
/* **The row sizes its own controls** ([D-1434]). `.action-form` is `display:contents`, so
   the lift button became a direct child of this block — and `.action` is `display:flex`,
   which is block-level, so it stretched the full measure. A hold's release drawn as a
   full-width bar read as the region's primary act while the act the standing admits sat
   two sections above at intrinsic width. `align-items:start` is the whole fix: every
   control here now sizes as it does everywhere else. */
/* **`1e`'s record row — the two columns it always authored** ([D-1442]). Every row carries
   the organisation and the role held in it: no conditional cell, no nested block, no
   control, which `CR-R7` makes a **record row**, and `Q-8` closes on that test rather than
   on taste — *a header row is a claim that the columns are comparable*, and these are.

   **The stack was accidental, and the cause is one missing declaration.** `.listing > li`
   is already `display:grid` with the padding, the gap and the rule — and **no
   `grid-template-columns`**, so every listing row is a one-column grid and two cells fall
   under each other. `1e` is the page where that reads as a defect rather than as a shape,
   because the role is a *fact about the row* and stacked it reads as a caption on the link.

   **So this adds the columns and overrides nothing.** `.listing > li` is `0-1-1` and a bare
   class would have lost to it — which is why the first attempt drew no columns at all. */
.listing > li.organisation-row { grid-template-columns:1fr auto; }

/* **The recorded jurisdictions, and which of them governs** ([D-1450]). Same shape and
   same reason as the row above: `.listing > li` is `display:grid` with no template, so a
   row's second child is a second *row* and `governs this request` drew as a bordered block
   the full width of the measure. A mark occupies its own width or it is not a mark. The
   basis takes the rest, because `D-673` keeps the whole recorded set on the page — *a
   reader six years later must be able to see the contest, not just its result* — and the
   basis is the half of a row that cannot be reconstructed. */
.listing > li.jurisdiction-row { grid-template-columns:1fr auto; }


/* The operator roster ([D-761]) — reference, account, standing, dual-control, and the
   reader's own row marked. **No action column**, because the surface offers none. */

/* ==========================================================================
   Layout primitives, states and feedback — requirements 5, 8, 9 and 11.

   **Pages stop inventing widths and rhythm.** Everything below is expressed in
   the token layer, so a surface composes from a small set rather than deciding
   again what a section gap is.
   ========================================================================== */

/* The four measures, as classes a page selects rather than a value it types. */
/* ---- accessibility -----------------------------------------------------
   `:focus-visible` is defined once in the foundations and never removed. What
   is added here is the rest of requirement 11. */

/* **Target size.** A control below roughly 44px is hard to hit accurately;
   `--control-h` is 36px, so inline controls in dense rows get their reach from
   padding rather than from height they cannot spare. */

/* A reader who has asked for less motion gets none — the transition is added
   under `prefers-reduced-motion: no-preference` rather than removed here. */

/* Anything wide enough to overflow scrolls inside its own container, so the
   page body never scrolls sideways. */
/* `plan-table` was here until [D-1450]. The plan is a `listing` now, so `.listing` is
   already the container that scrolls it — one region rather than one per row. */
.listing, pre { overflow-x:auto; }

/* ==========================================================================
   Disclosure, and the plan's standing ([D-806]).

   **`<details>` because the policy is `default-src 'none'`.** Folding away an
   exceptional act is a thing HTML does on its own, and a page that needed a script to
   hide a form would be spending the CSP on furniture.

   The summary is a control, so it takes the accent that means *this can be followed* --
   and nothing more: closing a job is not a primary act and must not be dressed as one.
   The disclosure body sits inside a hairline so the boundary between the working page
   and its administration is perceptible without a heading shouting it.
   ========================================================================== */
.disclosure > summary {
  cursor:pointer; color:var(--accent); font-size:var(--t-body);
  font-weight:var(--w-medium); padding:var(--s2) 0; list-style:none;
}
.disclosure > summary::-webkit-details-marker { display:none; }
.disclosure > summary::before { content:"9  "; display:inline-block;
  transition:transform 120ms ease; transform:rotate(-90deg); }
.disclosure[open] > summary::before { transform:rotate(-270deg); }
.disclosure[open] { border-left:1px solid var(--rule); padding-left:var(--s4);
  margin:var(--s3) 0 var(--s5); }
@media (prefers-reduced-motion:reduce) {
  .disclosure > summary::before { transition:none; }
}

/* The plan in one line: a standing and two counts, set as data rather than prose, with
   the numerals aligned the way every other count in the product is. */
/* A checkbox and its label read as one line, not as a field with a caption. The label
   is the control's target, so it takes the pointer the box does ([D-809]). */
/* The way onward from a refusal ([D-811]). It takes the accent because it is a link and
   the accent means *this can be followed* — and no more than that: a refusal is not a
   place to put a primary action, since what to do about the condition is a judgement the
   reader makes on the page this leads to. */
.refusal-route { margin:var(--s3) 0 0; font-size:var(--t-body); }

.field-choice { flex-direction:row; align-items:baseline; gap:var(--s2);
  max-width:var(--prose); }
.field-choice label { font-weight:var(--w-normal); cursor:pointer; }
.field-choice input[type="checkbox"] { width:auto; height:auto; margin:0; }

/* **The four magnitudes, as named rows rather than tiles** ([D-1765] `R1`). A tile grid
   invites comparison between them, and `47 §4.1` refuses the composite precisely because
   they are different epistemic conditions and not magnitudes on one axis. The reading sits
   beside its label at the same weight as the sentences under it: nothing here is a
   headline. */
.magnitude-row { display:flex; flex-direction:column; gap:var(--s1);
  padding:var(--s3) 0; border-bottom:1px solid var(--rule); }
.magnitude-reading { color:var(--ink); font-weight:var(--w-medium);
  font-variant-numeric:tabular-nums; }

/* **What the evidence did not establish** ([D-1777] · `06 6z-ii`). The candidate's own
   assertion leads at lede size and the registry's word for the state sits under it at
   ordinary weight: the reverse -- which is what reusing `.magnitude-row` produced -- put
   Evicora's vocabulary above the person's own words, which is the attribution `U-3`
   forbids. **No treatment**: every state here is neutral, and `U-2` keeps contradiction
   the only cautionary one. */
.absence-row { display:flex; flex-direction:column; gap:var(--s1);
  padding:var(--s3) 0; border-bottom:1px solid var(--rule); }
.absence-row:last-child { border-bottom:0; }
.absence-assertion { margin:0; font-size:var(--t-lede);
  font-weight:var(--w-medium); color:var(--ink); }
.absence-tier { margin:0; color:var(--ink); font-weight:var(--w-normal); }


/* **The roles this evidence can be read against** ([D-1765] `R2`). A list of links and
   deliberately not a chooser: the recruiter picks the role by its name, and the version
   travels in the href. */
.roles-to-match { list-style:none; margin:0; padding:0;
  display:flex; flex-direction:column; gap:var(--s2); align-items:flex-start; }
/* **The qualifier sits under its control, not inside it** ([D-1777]) -- two roles may
   share a title, and the department is what says which one rather than part of the name. */
.roles-to-match li { display:flex; flex-direction:column; gap:var(--s1);
  align-items:flex-start; }

/* **Why the act that finishes this version is not drawn** ([D-1765] `R5`). Reading
   weight, not alarm: `ux/01` refuses manufactured urgency, and what is owed on a plan
   nobody has finished is ordinary work rather than a warning. Each item is an anchor, so
   it takes the link treatment and nothing more. */

/* **Which version this band is the standing of** ([D-1765] `R6`). Quieter than the
   standing it labels and above it: it answers *which subject* rather than *how does it
   stand*, and a reader who cannot tell the two bands apart is the defect it exists for. */


/* **The role reads, so it is measured for reading.** `description` is the one free-text
   field on the page and the only one a person writes in sentences. */
#role .facts dd { max-width:var(--prose); }

/* ==========================================================================
   1 · Tokens — **declared in `style_tokens`** ([D-1777])

   The palette measured off the drawings lives in the one `:root` the system
   keeps values in. What stays here is what spends them.
   ========================================================================== */

body[data-plane="workspace"] { background: var(--h-page); color: var(--h-ink); }

/* ==========================================================================
   1a · The plane's roles, declared once — **a role with no rung is not a role**
   ([D-1908])

   `.sentence`, `.quiet`, `.note` and `.remedy` had **no rule on this plane at
   all**: every declaration was scoped to a container — `.requirement-acts`,
   `.page-rail > section`, `.claim-row` — so a sentence in a container nobody
   had listed fell through to the canonical `--t-body` and rendered at `15px`
   beside its neighbours at `14px`. Nothing could see it: each rule named a
   role, so `D-1644`'s check passed, and the divergence only exists in a
   browser, on a page whose markup happens to sit outside the list.

   **So the rung is declared once, here, and the container rules keep only what
   is about the container** — its colour, its rhythm, its margins. Two second
   meanings survive with a reason and are recorded in `S124`'s own table: the
   lede line under a head card, and an empty state's answering first sentence.
   ========================================================================== */
/* **`document-title` is the regime's page rung, declared once** ([D-1909]). A surface
   that draws a bare `h1` — no `page_header`, no head card — fell through to the base
   `h1` and rendered the page's own name at the **canonical** regime's `28px` on a plane
   whose page rung is `34px`. Declaring the role here is what stops a container or its
   absence choosing the size. */
body[data-plane="workspace"] h1 { font-size: var(--type-page-title); }
/* **The same role, this regime's rung** ([D-1911]). `region-name` is a structural
   region's name wherever it is drawn; the canonical regime draws it as an eyebrow and
   this one draws it at `--h-t-region`, which is the ladder's own *a region's heading*.
   The uppercase the canonical treatment carries is undone here — the drawing-authorized
   caps on `17`/`18`'s five collections are set by their own rule and outrank this. */
body[data-plane="workspace"] .region-name { font-size: var(--type-section);
                                            text-transform: none;
                                            letter-spacing: var(--h-track-title); }
body[data-plane="workspace"] .sentence { font-size: var(--type-body); }
body[data-plane="workspace"] .quiet    { font-size: var(--type-meta); }
body[data-plane="workspace"] .note     { font-size: var(--type-meta); }
body[data-plane="workspace"] .remedy   { font-size: var(--type-meta); }
body[data-plane="workspace"] .status   { font-size: var(--type-pill); }

/* ==========================================================================
   2 · The shell — the plane's ink only

   The header's layout is `style_shell`'s, one header for every plane (`63 §4–§5`); the
   spine-era row this section built — `display:contents` on the bar, `order` on each part —
   went with the spine. What stays is colour.
   ========================================================================== */

/* **The wordmark is not content, so it does not take a content scale** ([D-1908]).
   It said `Evicora` at `18px/650` on a stranger's page and `22px/800` one click later on
   `1e`, because the shell that changed also carried the type ladder. The owner's ruling:
   **one canonical wordmark typography across the existing shells.** The size, the weight
   and the tracking are `style_shell`'s for all three planes now; what stays here is the
   plane's **ink**, which is the palette `D-1846` already rules a plane may hold, and the
   border reset the single-row bar needs. `--h-t-wordmark` is retired with the switch:
   a role the ladder no longer wears is a word for nothing (`D-1644`). */
body[data-plane="workspace"] .wordmark {
  color: var(--h-ink); text-decoration: none; border: 0;
  font-size: var(--type-wordmark); font-weight: var(--h-w-bold);   /* ux/123 §1: 22/700 */
}
body[data-plane="workspace"] .shell-badge { display: none; }
/* **The capacity is shown on this plane too** ([D-1912]). This hid it because
   `WORKSPACE` carried none — the rule hid an element that was never emitted. Both halves
   are gone: the shell reads the title from `model/roles.yaml`, and the drawing puts the
   lozenge beside the address. */

body[data-plane="workspace"] .account-context .account-nav a { color: var(--h-link); }
body[data-plane="workspace"] .account-context .account-nav a:hover { color: var(--h-link); }
/* *Sign out* is More's row on every plane (`63 §6`), so the plane restates nothing here:
   the link-coloured outline this carried was the button the identity menu retired. */

/* ==========================================================================
   3 · The page frame and the card
   ========================================================================== */
body[data-plane="workspace"] main { padding: 22px 28px 56px; }
/* **The suspension notice** (ux/130): the shell's, between the masthead and the page —
   the attention (amber) family the waiting states use, ux/123's card-title over body. No
   close control and no stored state: it is there while the organisation is suspended. */
body[data-plane="workspace"] > .org-suspended,
body[data-plane="workspace"] > [inert] > .org-suspended {
  display: flex; align-items: flex-start; gap: 12px; padding: 14px 18px;
  /* the masthead's measure (`--container`), so the notice lines up under it */
  box-sizing: border-box; width: calc(100% - 56px); max-width: var(--container);
  margin: 22px auto 0;
  background: var(--h-warn-soft); border: 1px solid var(--h-warn-line);
  border-left: 4px solid var(--mark-warm); border-radius: var(--h-radius-sm); }
body[data-plane="workspace"] .org-suspended-mark { flex: 0 0 auto; display: inline-flex;
  color: var(--h-warn); margin-top: 1px; }
body[data-plane="workspace"] .org-suspended-mark .icon { width: 20px; height: 20px; }
body[data-plane="workspace"] .org-suspended-text { min-width: 0; }
/* ANSWER 128-a: a word-only standing pill's explanation, quiet and wrapping */
body[data-plane="workspace"] .settings-standing-note { margin: 6px 0 0; font-size: var(--type-meta);
  color: var(--h-muted); overflow-wrap: anywhere; }
body[data-plane="workspace"] .org-suspended-title { margin: 0; font-size: var(--type-card-title);
  font-weight: var(--h-w-semi); color: var(--h-warn-ink); }
body[data-plane="workspace"] .org-suspended-body { margin: 2px 0 0; font-size: var(--type-body);
  color: var(--h-ink); }
body[data-plane="workspace"]:has(.org-suspended) main { padding-top: 18px; }
body[data-plane="workspace"] .page-footer { display: none; }

body[data-plane="workspace"] .return-affordance { margin: 0 0 16px; }
body[data-plane="workspace"] .return-affordance a {
  font-size: var(--type-body); color: var(--h-link); text-decoration: none; border: 0;
}
body[data-plane="workspace"] .return-affordance a:hover { text-decoration: underline; }

body[data-plane="workspace"] .surface-section,
body[data-plane="workspace"] .panel,
body[data-plane="workspace"] .head-card {
  background: var(--h-card); border: 1px solid var(--h-line);
  border-radius: var(--h-radius); padding: 22px 24px; margin: 0 0 var(--card-gap);
  box-shadow: 0 1px 2px rgba(16, 33, 62, 0.04);
}
/* **`minmax(0, 1fr)`, at every width and not only the narrow one** ([D-1793]). This was
   `display: grid` with no template, so the column is `auto` — which floors at its widest
   child rather than at its track. `16`'s requests table asks for `1030px` inside a
   `648px` track and got it: the document measured `1380px` in `1280px`, and the head card
   above it was dragged out to `1080px` with the standing lozenge painted off the page.
   The narrow-width block below has carried this exact declaration since it was written,
   for the same reason stated one breakpoint down — *a grid track sized `1fr` still floors
   at the content's min-content width*. It was never the narrow width that needed it. */
body[data-plane="workspace"] .rail-main {
  display: grid; grid-template-columns: minmax(0, 1fr); gap: 0 22px; align-items: start;
}
body[data-plane="workspace"] .rail-main > * { min-width: 0; }
/* The rail's cards are spaced by the rail's own gap (`--card-gap`), not by a margin as
   well — the two added up to 42 (`66 §5`). */
body[data-plane="workspace"] .page-rail > * { margin-bottom: 0; }

/* The head card: icon tile, title, lede, and the page's one act on the right. */
/* **The head card is a card like the others** (`66 §2`, QUESTION 20b): the same inline
   padding, and its mark takes the region mark's geometry — a 40px tile and the gap that
   makes `--region-mark` — so the page's title starts on the one text edge every card's
   heading and body start on, and the marks stand in one column. The page mark keeps its
   accent (`D-1795`); its hierarchy is the `h1`'s size, not a bigger tile. */
body[data-plane="workspace"] .head-card { padding: 24px var(--s5); }
body[data-plane="workspace"] .head-card .page-head { gap: calc(var(--region-mark) - 2.5rem); }


/* **No mark, no indent for one** (`65 §2`): the step-up region is drawn without a region
   head, so it takes the head card's inline padding — beside it here so the two move
   together — and its form starts on the head card's text edge. */
body[data-plane="workspace"] #step-up { padding-left: var(--s5); }
body[data-plane="workspace"] .head-card-top {
  display: flex; align-items: flex-start; gap: 18px;
}
body[data-plane="workspace"] .page-head { display: flex; align-items: flex-start; gap: 18px; flex: 1 1 auto; }


body[data-plane="workspace"] .page-head h1 {
  font-weight: var(--h-w-bold); letter-spacing: var(--h-track-title);
  color: var(--h-ink); margin: 0 0 6px; line-height: var(--h-lh-tight);
}
body[data-plane="workspace"] .page-lede {
  font-size: var(--type-lede); color: var(--h-muted); margin: 0; line-height: var(--h-lh-prose);
}
body[data-plane="workspace"] .head-card-aside { text-align: right; }
/* The capacity line is a second lede line, not a band under a rule: it is true of the
   same collection the line above it describes. */
body[data-plane="workspace"] .head-card-below {
  border: 0; padding: 0; margin: 0;
}
body[data-plane="workspace"] .head-card-below .sentence,
body[data-plane="workspace"] .head-card-below .status {
  color: var(--h-muted); margin: 0; line-height: var(--h-lh-prose);
}
/* ux/123 §4 (a): the standing line under the title is lede copy, on its own class. */
body[data-plane="workspace"] .head-card-below .standing-band { font-size: var(--type-lede); }
body[data-plane="workspace"] .head-card-top { margin-bottom: 4px; }
/* Region heads: the small tile, the heading, the qualifying pill. */
body[data-plane="workspace"] .region-head {
  display: flex; align-items: flex-start; gap: 14px; margin: 0 0 16px;
}
body[data-plane="workspace"] .region-head-main { display: flex; align-items: flex-start; gap: 14px; flex: 1 1 auto; }
body[data-plane="workspace"] .region-head h2,
body[data-plane="workspace"] .panel-head h2,
body[data-plane="workspace"] .surface-section > h2 {
  font-size: var(--type-section); font-weight: var(--h-w-bold); letter-spacing: var(--h-track-snug);
  color: var(--h-ink); margin: 0;
}
/* **One left edge per card** ([D-1880]'s consequence, settled by ux/84 ANSWER 48-f): no
   heading draws a tile any more, so there is no mark to hang outside the card — the
   heading, the sentence under it and every control start at the card's own padding. */
body[data-plane="workspace"] { --region-mark: 56px; }
body[data-plane="workspace"] .surface-section { padding-left: var(--s5); }

body[data-plane="workspace"] .region-lede {
  font-size: var(--type-body); color: var(--h-muted); margin: 5px 0 0; line-height: var(--h-lh-loose);
}
/* **The two navigation glyph families, on the ladder with everything else**
   ([D-1795]). A page head's mark is `24px`, a region's is `20px`, and the column that
   names the section and the rail's onward moves were both left on the base `.icon`
   size of `16px` — so the one part of a Settings page a reader navigates by carried
   the smallest glyphs on it. They take the step between, and they keep
   `color: inherit`: the mark's state is the item's, stated once. */
body[data-plane="workspace"] .section-nav-mark svg { width: 18px; height: 18px; }

/* ==========================================================================
   4 · Controls
   ========================================================================== */
/* **Ordinary is outlined and primary is filled** ([D-1861], owner ruling). The plane drew
   every control filled, so *at most one dominant action* was a sentence in a contract with
   nothing enforcing it — three acts on a candidate read as three equally expected next
   steps. `D-1785` made the demotion conditional on a group having named its act, because
   142 of 151 surfaces had not; the ruling drops that condition, and a surface with no
   declared dominant act now draws every control outlined until `§6n` names one.

   **The weight classes are on the `button`**, never on the `action-form` — `action()`
   composes them from `action_class` — so one selector reaches the form-wrapped acts and
   the bare ones alike. */
/* **One secondary, and it is the accent outline** (`65 §6`, QUESTION 19b, product-wide):
   white ground, `--accent-edge` border, `--accent` ink — what the act-block tier and the
   public homepage's secondary door already draw, and `U-2`'s *the accent says this can be
   followed*, which every button is. The neutral ink outline is no longer a button. */
body[data-plane="workspace"] .action,
body[data-plane="workspace"] button.action,
body[data-plane="workspace"] .action-form button {
  display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  background: var(--h-card); color: var(--accent); border: 1px solid var(--accent-edge);
  border-radius: var(--h-radius-sm); padding: 11px 20px;
  font-size: var(--type-body); font-weight: var(--h-w-semi); line-height: var(--h-lh-tight); cursor: pointer;
  text-decoration: none; box-shadow: none;
}
/* **The hover states say what colour sits on the ground they paint** ([D-1777]).
   Each of these set a `background` and no `color`, which is the pair `D-1599` broke
   apart: the rest rule decided that this ink goes on that ground, and a hover repainting
   the ground inherits neither half. `.action` is not hypothetical here — `job_page` puts
   it on an `<a>` for *Discard draft*, and the canonical sheet's generic `a:hover` is what
   supplies the colour nobody wrote down. Every value below is the rest rule's own, so
   nothing a reader sees moves; what moves is that the cascade can no longer answer. */
body[data-plane="workspace"] .action:hover,
body[data-plane="workspace"] .action-form button:hover {
  background: var(--selection); border-color: var(--accent); color: var(--accent-deep);
}
/* **The one the object's standing admits** — `§6n`, and the only filled control in a
   group. `.action-form button` is `(0,2,2)`, so the class alone would lose to it; the
   qualified form is `(0,3,2)` and wins, which is the same trap `D-1821` found for
   `action-destructive` and the reason both arms are written out. */
body[data-plane="workspace"] .action.primary-action,
body[data-plane="workspace"] button.action.primary-action,
body[data-plane="workspace"] .action-form button.primary-action {
  background: var(--h-accent); color: var(--h-card); border-color: var(--h-accent);
}
body[data-plane="workspace"] .action.primary-action:hover,
body[data-plane="workspace"] .action-form button.primary-action:hover {
  background: var(--h-accent-hi); border-color: var(--h-accent-hi); color: var(--h-card);
}
body[data-plane="workspace"] .action-secondary,
body[data-plane="workspace"] .action-form.action-secondary button,
body[data-plane="workspace"] .form-cancel {
  background: var(--h-card); color: var(--accent); border: 1px solid var(--accent-edge);
}
body[data-plane="workspace"] .action-secondary:hover,
body[data-plane="workspace"] .action-form.action-secondary button:hover,
body[data-plane="workspace"] .form-cancel:hover {
  background: var(--selection); border-color: var(--accent); color: var(--accent-deep);
}

/* **The modifier is on the control, and the selector was looking at its form** ([D-1821]).
   `.action-form.action-destructive button` asks for a *form* carrying the class; every
   renderer puts it on the **button** — `job_page` writes `class_="action
   action-destructive"` inside a plain `action-form`. So that arm matched nothing, and the
   surviving arm `.action-destructive` (0,2,1) lost to `.action-form button` (0,2,2).

   **What a reader met:** page `3`'s *offer* to discard a draft is an `<a>` and drew the
   red outline correctly; the **confirmation** — the button that actually destroys it —
   came out filled accent green, the same drawing as `Publish`. The ceremony inverted at
   the one press that cannot be undone, and `13f`'s *Delete this organisation* did the
   same. `.action.action-destructive` is (0,3,1) and clears the base rule; every
   destructive control carries `action` beside the modifier, which is what makes the pair
   safe to rely on. */
/* **The `what happens next` panel has a head like every other grouping** ([D-1821]). */
body[data-plane="workspace"] .how-it-goes-head {
  display: flex; align-items: center; gap: 11px; margin-bottom: 10px;
}
body[data-plane="workspace"] .how-it-goes-head .rail-subhead { margin: 0; }

/* -- a report's evidence rows -------------------------------------------------------
   **Label, count, and the note beneath both** ([D-1821], `decision_support_cose.png`).
   `.concentration-row` is `justify-content:space-between` over however many children it
   is given; a line with a note has three, so the note took the right-hand end and the
   count was squeezed into the middle — the number a reader came for sitting between a
   wrapped label and a wrapped sentence. The two facts are a row and the note is a second
   line about them, which is what a grid says and a flex row cannot. */
body[data-plane="workspace"] .listing > .concentration-row {
  display: grid; grid-template-columns: 1fr auto; column-gap: 20px;
  align-items: baseline;
}
body[data-plane="workspace"] .listing > .concentration-row > .note {
  grid-column: 1 / -1; margin: 6px 0 0;
}


body[data-plane="workspace"] .action.action-destructive,
body[data-plane="workspace"] .action-form button.action-destructive {
  background: var(--h-card); color: var(--h-danger); border: 1px solid var(--h-danger-edge);
}
body[data-plane="workspace"] .action.action-destructive:hover,
body[data-plane="workspace"] .action-form button.action-destructive:hover {
  background: var(--h-danger-soft); border-color: var(--h-danger); color: var(--h-danger);
}

/* **Taking away a way in is cautionary, not dangerous** (ANSWER 37-a; 75 keeps danger for
   destruction). The warning edge and word, on the card's ground — and it outranks
   `.action-irreversible`'s danger edge, because irreversibility is friction and not what
   the act does to the subject (`L-7`). */
body[data-plane="workspace"] .action.action-access-reduction,
body[data-plane="workspace"] .action-form button.action-access-reduction {
  background: var(--h-card); color: var(--h-warn-ink); border: 1px solid var(--h-warn);
  box-shadow: none;
}
body[data-plane="workspace"] .action.action-access-reduction:hover,
body[data-plane="workspace"] .action-form button.action-access-reduction:hover {
  background: var(--h-warn-soft); border-color: var(--h-warn); color: var(--h-warn-ink);
}

/* **An exit is not a primary act, and it was wearing one's clothes** ([D-1821]).
   `.action-exit` had no treatment on this plane, so `Cancel the subscription` fell
   through to the filled accent — the same weight as `Change the plan`, on the one control
   that ends the agreement. `U-2` lets presentation reinforce and never strengthen, and
   this is the de-escalation: the outline `.action-destructive` already uses, which is
   weaker than a filled control rather than louder.

   **The ordinary secondary control, not red** (ux/84 ANSWER 51-c; L-5, 75): an exit is
   reversible — *Keep the plan* undoes a cancellation, and a co-sign declined is ordinary
   disagreement — so it wears the outline every ordinary act wears. Red stays with what
   destroys (*Delete this organisation*). */
body[data-plane="workspace"] .action.action-exit,
body[data-plane="workspace"] .action-form button.action-exit {
  background: var(--h-card); color: var(--accent); border: 1px solid var(--accent-edge);
}
body[data-plane="workspace"] .action.action-exit:hover,
body[data-plane="workspace"] .action-form button.action-exit:hover {
  background: var(--selection); border-color: var(--accent); color: var(--accent-deep);
}
/* **Full measure, because it is the region's whole content** — the exit card carries a
   sentence and this control, and a button sized to its words under a full-width sentence
   reads as one option among several that are not there. */
body[data-plane="workspace"] #exit .actions,
body[data-plane="workspace"] #exit .action-form { width: 100%; }
body[data-plane="workspace"] #exit .action.action-exit,
body[data-plane="workspace"] #exit .action-form button.action-exit {
  width: 100%; justify-content: center;
}

/* ==========================================================================
   The work column: an Insights report's one column of regions. **No width of its own**
   since ux/84 §2 — the reports are list pages and use the whole container, and `3b`, the
   last object page that wore it, is the object layout's (INSTRUCTION 48).
   ========================================================================== */
body[data-plane="workspace"] .work-column { display: grid; gap: var(--card-gap); min-width: 0; }
body[data-plane="workspace"] .decision-card { display: grid; gap: 14px; }
body[data-plane="workspace"] .decision-card .action-form { margin: 0; }
body[data-plane="workspace"] .decision-card .field textarea { max-width: none; width: 100%; }
body[data-plane="workspace"] .requirement-legend { margin: 10px 0 0; }
body[data-plane="workspace"] .object-main > .no-act { margin: 0; }
body[data-plane="workspace"] .object-main > .blocking { margin: 0; }
/* **ux/81 §1 — page 11's header**: the standing as the lede (as page 10's), its one
   supporting line, the waiting line, then the one next action. The orientation and assessed
   lines are Details since ux/84 §3. */
body[data-plane="workspace"] .standing-support,
body[data-plane="workspace"] .header-waiting { margin: 4px 0 0; font-size: var(--type-meta); }
/* **ux/81 §3 — Requirement readings, one table** (71 §4c's treatment). The requirement
   wraps and may shrink (`min-width: 0`); the pills never break. At <= 768px each row
   stacks: the requirement, then the pills, then the evidence (C-11: nothing clips at 320). */
body[data-plane="workspace"] .readings-table { width: 100%; min-width: 0; border-collapse: collapse; }
body[data-plane="workspace"] .readings-table th,
body[data-plane="workspace"] .readings-table td {
  text-align: left; vertical-align: top; padding: 10px 12px 10px 0;
  border-bottom: 1px solid var(--h-line);
}
body[data-plane="workspace"] .readings-table thead th {
  font-size: var(--type-meta); font-weight: var(--h-w-semi); color: var(--h-muted);
}
body[data-plane="workspace"] .readings-table .reading-requirement {
  color: var(--h-ink); overflow-wrap: anywhere;
}
body[data-plane="workspace"] .readings-table .pill { white-space: nowrap; }
body[data-plane="workspace"] .reading-evidence > summary { cursor: pointer; }
body[data-plane="workspace"] .reading-evidence .excerpt { margin: 8px 0 0; }
@media (max-width: 48rem) {
  body[data-plane="workspace"] .readings-table thead {
    position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0);
  }
  body[data-plane="workspace"] .readings-table,
  body[data-plane="workspace"] .readings-table tbody,
  body[data-plane="workspace"] .readings-table tr { display: block; }
  body[data-plane="workspace"] .readings-table .reading-row {
    display: flex; flex-wrap: wrap; gap: 6px 8px; padding: 10px 0;
    border-bottom: 1px solid var(--h-line);
  }
  body[data-plane="workspace"] .readings-table td {
    display: block; padding: 0; border: 0; min-width: 0;
  }
  body[data-plane="workspace"] .readings-table .reading-row > td:first-child,
  body[data-plane="workspace"] .readings-table .reading-row > td:last-child { flex-basis: 100%; }
  body[data-plane="workspace"] .readings-table .reading-row > td:empty { display: none; }
}
/* **Page 3's head** (71 §2): the one next step and the secondaries beside it, then what
   is owed under it and, quietly, what is recommended. No checkboxes: nothing here is a
   gate the reader ticks. */
body[data-plane="workspace"] .next-step {
  display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-top: 14px;
}
body[data-plane="workspace"] .next-step .action-form,
body[data-plane="workspace"] .next-step .actions { margin: 0; }
body[data-plane="workspace"] .head-card .no-act { margin: 10px 0 0; }
/* **Page 3's layout is the object page's since ux/84 §1–§3**: the page's own content fills
   main, and the job's facts are its Details. The 71 side column (the team and the brief)
   joined main between the role and administration, which is where 71 put it on a narrower
   screen. */
/* **The compact plan** (71 §4): one section. The signatures are data rows, the parts
   (tasks, proposals, the table) follow without cards of their own, and each row's acts sit
   in a ⋯ menu that opens in place. */
body[data-plane="workspace"] .plan-part { margin: 16px 0 0; min-width: 0; }

/* ==========================================================================
   Page 3 · the hiring_plan master (ux/110 §1a, INSTRUCTION 103), at the proportional
   scale 102 (a) ruled. Measured off the 1536px master: the title on the canvas with
   outlined acts top-right; a four-tile card (a 58px tinted mark, an uppercase label, the
   value, a caption, hairlines between); the requirements card (~70%) beside the readiness
   rail (~30%); rows ~115 tall — a numbered square, the words over a small pill, the origin
   chip over its phrase, the row's act, a bordered ⋯ — suggestions on an amber wash with an
   amber edge; the bottom bar. Cards white, radius 12, hairline border, soft shadow.
   ========================================================================== */
body[data-plane="workspace"] .object-main:has(> .hp-title-row) { display: grid; gap: 16px; }
body[data-plane="workspace"] .hp-title-row {
  display: flex; align-items: flex-start; justify-content: space-between; gap: 16px 24px;
  flex-wrap: wrap; margin: 0 0 4px; }
body[data-plane="workspace"] .hp-title-row .page-head { margin: 0; padding: 0; background: none; border: 0; box-shadow: none; }
body[data-plane="workspace"] .hp-title-row h1 { margin: 0; font-size: var(--type-page-title); line-height: var(--h-lh-card); }
/* ANSWER 112-e: a name that is still Evicora's reads as the Jobs list draws it — italic —
   with the quiet link to *The role* under the subline. */
body[data-plane="workspace"] .hp-title-main { min-width: 0; }
body[data-plane="workspace"] .hp-title-unconfirmed h1 { font-style: italic; color: var(--h-ink-2); }
body[data-plane="workspace"] .hp-title-row .hp-title-link:not(#hp-x) { margin: 8px 0 0; font-size: var(--type-meta); line-height: var(--h-lh-body); }
body[data-plane="workspace"] .hp-title-link a { color: var(--h-muted); text-decoration: underline; }
body[data-plane="workspace"] .hp-title-link a:hover { color: var(--h-accent-hi); }
body[data-plane="workspace"] .hp-title-row .page-lede:not(#hp-x) { margin: 8px 0 0; color: var(--h-muted); }
body[data-plane="workspace"] .hp-title-acts { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; }
body[data-plane="workspace"] .hp-title-acts :is(.actions, .action-form) { display: contents; }
/* **Outlined, as the master draws them** (ANSWER 103-a 3), where 86-g fills every act: two
   ids nobody wears outweigh 86-g's one, on this row only. */
body[data-plane="workspace"] .hp-title-row .hp-title-acts :is(a, button).action:not(#hp-x):not(#hp-y),
body[data-plane="workspace"] .hp-title-row .hp-title-acts :is(a, button).action:not(#hp-x):not(#hp-y):hover {
  min-height: 40px; padding: 0 16px; border: 1px solid var(--h-line); border-radius: 8px;
  background: var(--h-card); color: var(--h-accent); font-size: var(--type-body); }
body[data-plane="workspace"] .hp-card,
body[data-plane="workspace"] .hp-summary {
  margin: 0; padding: 20px 22px; background: var(--h-card); border: 1px solid var(--h-line);
  border-radius: 12px; box-shadow: 0 6px 22px color-mix(in srgb, var(--h-ink) 4%, transparent); min-width: 0; }
body[data-plane="workspace"] .hp-sep { color: var(--h-muted); }
/* The requirements card beside the rail. */
body[data-plane="workspace"] .hp-card-head { display: flex; align-items: flex-start; gap: 14px; margin: 0 0 14px; }
body[data-plane="workspace"] .hp-card-head .region-head-words { flex: 1 1 auto; min-width: 0; }
body[data-plane="workspace"] .hp-card-head .region-lede:not(#hp-x) { margin: 4px 0 0; font-size: var(--type-body); color: var(--h-muted); }
/* **Three running-text roles in the card** (71 §9): the heading, the row text, and one meta
   size for the lede, the notes, the origin phrase and the legend. */
body[data-plane="workspace"] .hp-requirements :is(p.quiet, .sentence, .requirement-legend, .note):not(#hp-x) {
  font-weight: var(--h-w-normal); }
body[data-plane="workspace"] .hp-card-head .add-requirement { position: relative; }
body[data-plane="workspace"] .hp-card-head .add-requirement > summary.action {
  min-height: 40px; padding: 0 18px; border: 0; border-radius: 8px; background: var(--h-accent);
  color: var(--h-card); font-weight: var(--h-w-semi); list-style: none; cursor: pointer; }
body[data-plane="workspace"] .hp-card-head .add-requirement > summary.action::before { content: "+"; margin-right: 10px; font-size: var(--type-lede); }
body[data-plane="workspace"] .hp-card-head .add-requirement > summary::-webkit-details-marker { display: none; }
body[data-plane="workspace"] .hp-card-head .add-requirement[open] > :not(summary) {
  position: absolute; right: 0; z-index: 5; width: min(22rem, 80vw); margin-top: 8px; padding: 14px;
  background: var(--h-card); border: 1px solid var(--h-line); border-radius: 10px; box-shadow: 0 8px 24px var(--h-line); }
body[data-plane="workspace"] .hp-rows { margin: 0; padding: 0; list-style: none; border-top: 1px solid var(--h-line); }
body[data-plane="workspace"] .hp-row {
  display: grid; grid-template-columns: 44px minmax(0, 1fr) minmax(9rem, 12rem) auto 44px 28px;
  gap: 8px 18px; align-items: center; min-height: 96px; box-sizing: border-box;
  padding: 14px 14px; border-bottom: 1px solid var(--h-line); }
body[data-plane="workspace"] .hp-row.proposal-row {
  margin: 8px 0; border: 0; border-left: 2px solid var(--mark-warm); border-radius: 10px;
  background: var(--h-warn-soft); }
body[data-plane="workspace"] .hp-num {
  display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px;
  border-radius: 10px; background: var(--h-fill-08); font-size: var(--type-body);
  font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .proposal-row .hp-num { background: var(--h-card); }
body[data-plane="workspace"] .hp-row-words { min-width: 0; }
body[data-plane="workspace"] .hp-row .requirement-text:not(#hp-x) {
  margin: 0; font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); overflow-wrap: anywhere; }
body[data-plane="workspace"] .hp-row-words .pill { margin-top: 8px; font-size: var(--type-meta-small);
  font-weight: var(--h-w-bold); text-transform: uppercase; }
body[data-plane="workspace"] .hp-row-act { grid-column: 4; }
/* ==========================================================================
   ux/112 · a requirement questioned on its own row (the owner's two masters, at 110 §1a's
   proportional scale): the chevron slot, the ask panel under the row (`:target`), the thread.
   ========================================================================== */
/* The chevron points down while the row is closed and up while it is open. A questioned
   row's thread is open when exactly one of *the row is the target* (an ask returns there)
   and *its switch is checked* holds, so a thread opened by returning from an ask still
   closes on the chevron. */
/* A row whose only expansion is its ask panel shows the chevron only while the panel is open. */
/* The ask panel (master 1): a pale blue panel joined under the row, a disc, the heading and
   lede, then a white card holding the field and the footer. */
body[data-plane="workspace"] .hp-thread-mark {
  flex: 0 0 48px; display: inline-flex; align-items: center; justify-content: center;
  width: 48px; height: 48px; border-radius: 50%; background: color-mix(in srgb, var(--h-accent) 12%, var(--h-card)); color: var(--h-accent); }
body[data-plane="workspace"] .hp-thread-mark .icon { width: 22px; height: 22px; margin: 0; }
/* The thread card (master 2): the pale green banner, then the asker, the question and its
   meta, and the task's acts behind disclosures. */
body[data-plane="workspace"] .hp-thread-card { border: 1px solid var(--h-line); border-radius: 12px; background: var(--h-card); overflow: hidden; }
body[data-plane="workspace"] .hp-thread-banner {
  display: flex; align-items: center; gap: 16px; padding: 14px 20px; background: var(--h-ok-wash); flex-wrap: wrap; }
body[data-plane="workspace"] .hp-thread-banner .hp-thread-mark { background: color-mix(in srgb, var(--h-ok) 14%, var(--h-card)); color: var(--h-ok); }
body[data-plane="workspace"] .hp-thread-banner > div { flex: 1 1 16rem; min-width: 0; }
body[data-plane="workspace"] .hp-thread-banner h4 { margin: 0; font-size: var(--type-card-title); font-weight: var(--h-w-bold); }
body[data-plane="workspace"] .hp-thread-lede:not(#hp-x) { margin: 4px 0 0; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .hp-thread-link {
  display: inline-flex; align-items: center; gap: 8px; min-height: 40px; padding: 0 16px; border: 1px solid var(--h-line);
  border-radius: 8px; background: var(--h-card); color: var(--h-ink); font-size: var(--type-body); text-decoration: none; }
body[data-plane="workspace"] .hp-thread-link .icon { width: 16px; height: 16px; margin: 0; }
body[data-plane="workspace"] .hp-thread-body { display: grid; grid-template-columns: 48px minmax(0, 1fr); gap: 16px; padding: 16px 20px 18px; }
body[data-plane="workspace"] .hp-asker-disc {
  display: inline-flex; align-items: center; justify-content: center; width: 48px; height: 48px; border-radius: 50%;
  background: color-mix(in srgb, var(--mark-violet) 12%, var(--h-card)); color: var(--mark-violet); font-weight: var(--h-w-semi); }
body[data-plane="workspace"] .hp-thread-top { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
body[data-plane="workspace"] .hp-asker:not(#hp-x) { margin: 0; font-size: var(--type-meta); color: var(--h-muted); overflow-wrap: anywhere; }
body[data-plane="workspace"] :is(.hp-asker, .hp-thread-meta) .hp-sep { margin: 0 6px; }
body[data-plane="workspace"] .hp-waiting {
  display: inline-flex; align-items: center; gap: 8px; padding: 4px 12px; border-radius: 8px;
  background: var(--h-warn-wash); color: var(--h-warn-ink); font-size: var(--type-meta); }
body[data-plane="workspace"] .hp-waiting .icon { width: 15px; height: 15px; margin: 0; }
body[data-plane="workspace"] .hp-thread-question:not(#hp-x) {
  max-width: none; margin: 10px 0 0; padding: 12px 16px; border: 1px solid var(--h-line); border-radius: 10px; background: var(--h-fill-08);
  font-size: var(--type-body); color: var(--h-ink); white-space: pre-line; overflow-wrap: anywhere; }
body[data-plane="workspace"] .hp-thread-meta:not(#hp-x) {
  display: flex; align-items: center; flex-wrap: wrap; gap: 6px 8px; margin: 12px 0 0; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .hp-thread-meta .icon { width: 15px; height: 15px; margin: 0; }
body[data-plane="workspace"] .hp-thread-acts { display: flex; flex-wrap: wrap; gap: 10px; margin: 14px 0 0; }
body[data-plane="workspace"] .hp-thread-act {
  display: inline-flex; align-items: center; min-height: 38px; padding: 0 16px; border: 1px solid var(--h-line); border-radius: 8px;
  background: var(--h-card); color: var(--h-accent); font-size: var(--type-body); list-style: none; cursor: pointer; }
body[data-plane="workspace"] .hp-thread-act::-webkit-details-marker { display: none; }
body[data-plane="workspace"] .hp-thread-act-panel[open] { flex-basis: 100%; }
body[data-plane="workspace"] .hp-thread-act-panel[open] > form { margin: 10px 0 0; padding: 14px; border: 1px solid var(--h-line); border-radius: 10px; }
body[data-plane="workspace"] .hp-removed-questions { display: grid; gap: 12px; margin: 16px 0 0; }
body[data-plane="workspace"] .hp-thread-words { min-width: 0; }
body[data-plane="workspace"] .hp-thread-retired .sentence { margin: 8px 0 0; }
body[data-plane="workspace"] .hp-row-act { display: flex; justify-content: flex-end; min-width: max-content; }
body[data-plane="workspace"] .hp-row-act .action-form { margin: 0; }
/* The rail. */
body[data-plane="workspace"] .hp-requirements { min-width: 0; }
/* ANSWER 123-c: the quiet door to the record of signatures, under them. */
body[data-plane="workspace"] .hp-signed-link {
  display: inline-flex; align-items: center; gap: 6px; margin: 10px 0 0; color: var(--h-accent); font-size: var(--type-meta); text-decoration: none; }
body[data-plane="workspace"] .hp-signed-link .icon { width: 14px; height: 14px; margin: 0; }
/* **ux/116 §13: This version, its own card** — the document tile, then one row per
   signature with its mark (a person on grey, the shield on green). */
body[data-plane="workspace"] .hp-version-rows { display: grid; gap: 14px; margin: 18px 0 0; }
body[data-plane="workspace"] .hp-version-row { display: grid; grid-template-columns: 44px 180px minmax(0, 1fr); gap: 16px; align-items: center; }
body[data-plane="workspace"] .hp-version-row dt { font-size: var(--type-body); color: var(--h-muted); }
body[data-plane="workspace"] .hp-version-row dd { margin: 0; font-size: var(--type-body); color: var(--h-ink); overflow-wrap: anywhere; }
body[data-plane="workspace"] .hp-vmark {
  display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; border-radius: 50%; }
body[data-plane="workspace"] .hp-vmark .icon { width: 20px; height: 20px; margin: 0; }
body[data-plane="workspace"] .hp-vmark-grey { background: var(--h-fill-11); color: var(--h-ink-2); }
body[data-plane="workspace"] .hp-vmark-green { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="workspace"] .hp-version .hp-signed-link { margin: 16px 0 0; }
/* The bottom bar. */
body[data-plane="workspace"] .hp-bar { display: flex; align-items: center; justify-content: space-between; gap: 12px 24px; flex-wrap: wrap; }
body[data-plane="workspace"] .hp-bar-facts { min-width: 0; flex: 1 1 18rem; }
body[data-plane="workspace"] .hp-bar-facts .sentence { margin: 0; }
/* ANSWER 103-d: the step sits on the right in every state, facts or none. */
body[data-plane="workspace"] .hp-bar-act { display: grid; justify-items: end; gap: 8px; min-width: 0; margin-left: auto; }
body[data-plane="workspace"] .hp-bar-act .next-step :is(a.action, button.action) { min-height: 44px; padding: 0 22px; border-radius: 8px; }
@media (max-width: 1100px) {
}
@media (max-width: 48rem) {
  body[data-plane="workspace"] :is(.hp-card, .hp-summary) { padding: 16px; }
  body[data-plane="workspace"] .hp-card-head { flex-wrap: wrap; }
  /* A row at a phone: the number and the words, the ⋯ at the end; the origin and the act
     under the words. */
  body[data-plane="workspace"] .hp-row {
    grid-template-columns: 36px minmax(0, 1fr) 44px; gap: 10px 12px; align-items: start; padding: 12px 10px; }
  body[data-plane="workspace"] .hp-thread-body { grid-template-columns: 36px minmax(0, 1fr); gap: 12px; padding: 14px; }
  body[data-plane="workspace"] :is(.hp-asker-disc, .hp-thread-mark) { width: 36px; height: 36px; flex-basis: 36px; }
  body[data-plane="workspace"] .hp-num { width: 36px; height: 36px; }
  body[data-plane="workspace"] .hp-row-words { grid-column: 2; grid-row: 1; }
  body[data-plane="workspace"] .hp-row-act { grid-column: 2 / 4; grid-row: 3; justify-content: flex-start; }
  body[data-plane="workspace"] .hp-bar-act { justify-items: stretch; width: 100%; }
}
/* ==========================================================================
   ux/113 · page 3's requirements grouped by status, with the Choose-treatment and help
   drawers (the owner's hiring_plan_requirements_treatment / _help masters, at 110 §1a's
   scale). The title row carries Finish (locked while owed) and *What's left*; four tile
   cards; the card head with the help link and Add requirement; the filter band; three
   collapsible groups; rows with a left edge — amber for pending, green in the plan — chips
   under the title and the acts at the right, *Ask a question* under them; the drawers are
   `:target` sheets on the right. No readiness card, no rail, no bar on a draft.
   ========================================================================== */
/* The title row: the status pill closes the subline; Finish is filled, with its lock. */
body[data-plane="workspace"] .hp-title-row .page-lede:not(#hp-x) { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 12px; }
body[data-plane="workspace"] .hp-title-pill { padding: 3px 12px; font-size: var(--type-pill); font-weight: var(--h-w-semi); }
/* ux/116 item 2: the contextual pill names the approver by email, so it may wrap at a phone. */
body[data-plane="workspace"] .hp-title-pill.cl-pill:not(#hp-x) { max-width: 100%; white-space: normal; overflow-wrap: anywhere; }
body[data-plane="workspace"] .hp-finish { display: grid; justify-items: end; gap: 6px; }
body[data-plane="workspace"] .hp-finish :is(.action-form, .actions) { display: contents; }
body[data-plane="workspace"] .hp-title-row .hp-title-acts .hp-finish :is(a, button).action:not(#hp-x):not(#hp-y),
body[data-plane="workspace"] .hp-title-row .hp-title-acts .hp-finish :is(a, button).action:not(#hp-x):not(#hp-y):hover {
  display: inline-flex; align-items: center; gap: 10px; min-height: 40px; padding: 0 20px; border: 0; border-radius: 8px;
  background: var(--h-accent); color: var(--h-card); font-size: var(--type-body); font-weight: var(--h-w-semi); }
body[data-plane="workspace"] .hp-title-row .hp-title-acts .hp-finish button.hp-finish-locked:not(#hp-x):not(#hp-y) { cursor: not-allowed; }
body[data-plane="workspace"] .hp-finish .icon { width: 16px; height: 16px; margin: 0; }
body[data-plane="workspace"] .hp-left { position: relative; }
body[data-plane="workspace"] .hp-left-summary {
  display: inline-flex; align-items: center; gap: 6px; list-style: none; cursor: pointer;
  font-size: var(--type-meta); color: var(--h-accent); }
body[data-plane="workspace"] .hp-left-summary::-webkit-details-marker { display: none; }
body[data-plane="workspace"] .hp-left-summary .icon { width: 14px; height: 14px; margin: 0; transform: rotate(90deg); }
body[data-plane="workspace"] .hp-left[open] .hp-left-summary .icon { transform: rotate(-90deg); }
body[data-plane="workspace"] .hp-left-list {
  position: absolute; right: 0; z-index: 6; display: grid; gap: 8px; width: min(22rem, 86vw); margin: 8px 0 0; padding: 14px;
  list-style: none; background: var(--h-card); border: 1px solid var(--h-line); border-radius: 10px;
  box-shadow: 0 8px 24px color-mix(in srgb, var(--h-ink) 10%, transparent); }
body[data-plane="workspace"] .hp-left-item { display: grid; grid-template-columns: 26px minmax(0, 1fr); gap: 10px; align-items: center; }
body[data-plane="workspace"] .hp-left-num {
  display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: 50%;
  background: var(--h-warn-soft); color: var(--h-warn); font-size: var(--type-pill); font-weight: var(--h-w-bold); }
body[data-plane="workspace"] .hp-left-link { color: var(--h-accent); font-size: var(--type-body); text-decoration: none; overflow-wrap: anywhere; }
body[data-plane="workspace"] .hp-left-link:hover { text-decoration: underline; }
/* **Where a *What's left* link lands** (112-i): the row and its thread, or the role form's
   first unconfirmed field, marked in the attention tokens. */
body[data-plane="workspace"] .field:has(> :is(input, textarea):target) :is(input, textarea) {
  outline: 2px solid var(--mark-warm); outline-offset: 2px; background: var(--h-warn-soft); }
/* The card head's title and help link (the panels are ux/116 §12's, below). */
body[data-plane="workspace"] .hp-requirements .hp-card-head .region-name:not(#hp-x) { margin: 0; font-size: var(--type-section); font-weight: var(--h-w-bold); }
body[data-plane="workspace"] .hp-help-link {
  display: inline-flex; align-items: center; gap: 8px; color: var(--h-accent); font-size: var(--type-body); text-decoration: none; white-space: nowrap; }
body[data-plane="workspace"] .hp-help-link .icon { width: 18px; height: 18px; margin: 0; }
/* **ux/116 §12: two panels in one card, a hairline between them** (the owner's master,
   INSTRUCTION 123; it supersedes item 3's one-row head and 112-b). Left: the list tile, the
   title, the lede, then *Add requirement*. Right: three labelled selects, each with its
   tinted tile inside, then Apply (filled), Clear (outlined) and the help link at the row's
   right. Side by side while the card has room (a container query: the drawer narrows the
   page at ≥1440); the left panel above the right below that; every select full width on a
   phone. */
body[data-plane="workspace"] .hp-requirements { container: reqs / inline-size; }
body[data-plane="workspace"] .hp-requirements .hp-card-head:not(#hp-x) {
  display: grid; grid-template-columns: minmax(240px, 31fr) minmax(0, 69fr); gap: 0; align-items: stretch; }
body[data-plane="workspace"] .hp-head-left { display: grid; align-content: start; justify-items: start; gap: 12px; padding: 0 32px 0 0; min-width: 0; }
body[data-plane="workspace"] .hp-head-left > .cand-tile { flex: none; }
body[data-plane="workspace"] .hp-head-left .region-lede:not(#hp-x) { margin: 6px 0 0; color: var(--h-muted); }
body[data-plane="workspace"] .hp-head-left > .add-requirement { margin: 4px 0 0; }
body[data-plane="workspace"] .hp-head-right { display: grid; align-content: start; padding: 0 0 0 32px; border-left: 1px solid var(--h-line); min-width: 0; }
body[data-plane="workspace"] .hp-filters { display: grid; gap: 20px; max-width: none; margin: 0; padding: 0; }
body[data-plane="workspace"] .hp-filter-fields { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px; }
body[data-plane="workspace"] .hp-filter:not(#hp-x) { display: grid; gap: 8px; margin: 0; max-width: none; min-width: 0; }
body[data-plane="workspace"] .hp-filter label { font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .hp-filter-control { position: relative; display: block; }
body[data-plane="workspace"] .hp-filter-tile {
  position: absolute; left: 8px; top: 50%; transform: translateY(-50%); pointer-events: none;
  display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; border-radius: 50%; }
body[data-plane="workspace"] .hp-filter-tile .icon { width: 18px; height: 18px; margin: 0; }
body[data-plane="workspace"] .hp-filter-tile-blue { background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .hp-filter-tile-violet { background: var(--h-policy-soft); color: var(--h-policy); }
body[data-plane="workspace"] .hp-filter-tile-green { background: var(--h-ok-soft); color: var(--h-ok); }
/* ANSWER 123-b (owner, Safari): WebKit ignores a native select's left padding, so the tile
   covered the words ("tatuses") beside native arrows. The select draws no chrome of its own;
   the product's chevron sits at its right, and the padding clears the tile on the left. */
body[data-plane="workspace"] .hp-filter select {
  -webkit-appearance: none; appearance: none;
  box-sizing: border-box; width: 100%; height: 48px; padding: 0 40px 0 50px; border: 1px solid var(--h-line-strong);
  border-radius: 8px; background: var(--h-card); color: var(--h-ink); font: inherit; font-size: var(--type-body); }
body[data-plane="workspace"] .hp-filter-chev {
  position: absolute; right: 14px; top: 50%; transform: translateY(-50%) rotate(90deg); pointer-events: none;
  display: inline-flex; color: var(--h-ink); }
body[data-plane="workspace"] .hp-filter-chev .icon { width: 16px; height: 16px; margin: 0; }
body[data-plane="workspace"] .hp-filter-acts { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; }
body[data-plane="workspace"] .hp-filter-acts > .hp-help-link { margin-left: auto; }
body[data-plane="workspace"] .hp-head-right > .hp-help-link { justify-self: end; }
body[data-plane="workspace"] .hp-requirements .hp-apply:not(#hp-x) { min-height: 44px; padding: 0 22px; }
body[data-plane="workspace"] .hp-requirements a.action.hp-clear.hp-act-line:not(#hp-x):not(#hp-y),
body[data-plane="workspace"] .hp-requirements a.action.hp-clear.hp-act-line:not(#hp-x):not(#hp-y):hover {
  min-height: 44px; color: var(--h-accent); border-color: var(--h-line-strong); }
@container reqs (max-width: 899px) {
  body[data-plane="workspace"] .hp-requirements .hp-card-head:not(#hp-x) { grid-template-columns: minmax(0, 1fr); gap: 20px; }
  body[data-plane="workspace"] .hp-head-left { padding: 0; }
  body[data-plane="workspace"] .hp-head-right { padding: 20px 0 0; border-left: 0; border-top: 1px solid var(--h-line); }
}
@container reqs (max-width: 599px) {
  body[data-plane="workspace"] .hp-filter-fields { grid-template-columns: minmax(0, 1fr); gap: 14px; }
  body[data-plane="workspace"] .hp-filter-acts > .hp-help-link { margin-left: 0; flex: 1 0 100%; }
  body[data-plane="workspace"] .hp-head-left > .add-requirement,
  body[data-plane="workspace"] .hp-card-head .add-requirement > summary.action { width: 100%; box-sizing: border-box; justify-content: center; }
}
body[data-plane="workspace"] .hp-no-match { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; padding: 18px 4px; }
body[data-plane="workspace"] .hp-no-match .sentence { margin: 0; }
/* Buttons in the card: filled and outlined, as drawn (86-g fills every act; two unworn ids
   outweigh it on the outlined ones). */
body[data-plane="workspace"] .hp-requirements :is(a, button).action.hp-act-line:not(#hp-x):not(#hp-y),
body[data-plane="workspace"] .hp-requirements :is(a, button).action.hp-act-line:not(#hp-x):not(#hp-y):hover {
  display: inline-flex; align-items: center; justify-content: center; min-height: 38px; padding: 0 22px;
  border: 1px solid var(--h-line-strong); border-radius: 6px; background: var(--h-card); color: var(--h-ink);
  font-size: var(--type-body); font-weight: var(--h-w-normal); white-space: nowrap; }
/* The groups. */
body[data-plane="workspace"] .hp-rgroup { margin: 0 0 14px; }
body[data-plane="workspace"] .hp-group-summary {
  display: flex; align-items: center; flex-wrap: wrap; gap: 6px 12px; padding: 6px 0; list-style: none; cursor: pointer; }
body[data-plane="workspace"] .hp-group-summary::-webkit-details-marker { display: none; }
body[data-plane="workspace"] .hp-group-chev { display: inline-flex; color: var(--h-ink); }
body[data-plane="workspace"] .hp-group-chev .icon { width: 16px; height: 16px; margin: 0; transform: rotate(0deg); }
body[data-plane="workspace"] .hp-rgroup[open] > .hp-group-summary .hp-group-chev .icon { transform: rotate(90deg); }
body[data-plane="workspace"] .hp-gmark {
  display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; border-radius: 50%;
  color: var(--h-card); font-size: var(--type-pill); font-weight: var(--h-w-bold); }
body[data-plane="workspace"] .hp-gmark .icon { width: 14px; height: 14px; margin: 0; }
body[data-plane="workspace"] .hp-gmark-pending { background: var(--mark-warm); }
body[data-plane="workspace"] .hp-gmark-treatment { background: var(--h-accent); }
body[data-plane="workspace"] .hp-gmark-complete { background: var(--mark-green); }
body[data-plane="workspace"] .hp-group-name:not(#hp-x) { margin: 0; font-size: var(--type-card-title); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .hp-group-lede { font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .hp-bulk:not(#hp-x) { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 14px; margin: 2px 0 10px 64px; }
body[data-plane="workspace"] .hp-requirements .hp-bulk .action.hp-act-line:not(#hp-x):not(#hp-y) { min-height: 34px; padding: 0 14px; font-size: var(--type-meta); }
/* The rows: the number disc, the title over its chips, the acts at the right. */
body[data-plane="workspace"] .hp-rgroup .hp-rows { display: grid; gap: 10px; border-top: 0; }
body[data-plane="workspace"] .hp-row.hp-row-pending,
body[data-plane="workspace"] .hp-row.hp-row-treatment,
body[data-plane="workspace"] .hp-row.hp-row-complete {
  grid-template-columns: 44px minmax(0, 1fr) auto; gap: 8px 20px; align-items: center; min-height: 86px;
  margin: 0; padding: 12px 16px 12px 18px; border: 1px solid var(--h-line); border-left: 3px solid var(--mark-green);
  border-radius: 6px; background: var(--h-card); }
body[data-plane="workspace"] .hp-row.hp-row-pending { border-color: var(--h-warn-line); border-left-color: var(--mark-warm); background: var(--h-warn-soft); }
body[data-plane="workspace"] :is(.hp-row-pending, .hp-row-treatment, .hp-row-complete) .hp-num { border-radius: 50%; }
body[data-plane="workspace"] .hp-row-pending .hp-num { background: var(--h-card); }
body[data-plane="workspace"] :is(.hp-row-pending, .hp-row-treatment, .hp-row-complete) .hp-row-words { grid-column: 2; }
body[data-plane="workspace"] :is(.hp-row-pending, .hp-row-treatment, .hp-row-complete, .hp-row-excluded) .hp-row-act {
  grid-column: 3; display: flex; justify-content: flex-end; min-width: 0; }
/* The chips. */
body[data-plane="workspace"] .hp-chips { display: flex; flex-wrap: wrap; gap: 8px; margin: 8px 0 0; }
body[data-plane="workspace"] .hp-chip {
  display: inline-flex; align-items: center; gap: 6px; padding: 3px 12px; border-radius: 999px;
  border: 1px solid transparent; font-size: var(--type-pill); font-weight: var(--h-w-semi); color: var(--h-ink-2); white-space: nowrap; }
body[data-plane="workspace"] .hp-chip .icon { width: 14px; height: 14px; margin: 0; }
body[data-plane="workspace"] .hp-chip-origin { border-color: var(--h-line-strong); background: var(--h-card); color: var(--h-ink-2); }
body[data-plane="workspace"] .hp-chip-origin .icon { display: none; }
body[data-plane="workspace"] .hp-chip-pending { background: var(--h-warn-wash); color: var(--h-warn-ink); }
body[data-plane="workspace"] .hp-chip-dot {
  display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px; border-radius: 50%;
  background: var(--mark-warm); color: var(--h-card); font-size: var(--type-pill); font-weight: var(--h-w-semi); }
body[data-plane="workspace"] .hp-chip-suggests { background: color-mix(in srgb, var(--mark-violet) 12%, var(--h-card)); color: var(--mark-violet); cursor: help; }
body[data-plane="workspace"] .hp-chip-in-plan { background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .hp-chip-must { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="workspace"] .hp-chip-critical { background: var(--h-danger-soft); color: var(--h-danger); }
body[data-plane="workspace"] .hp-chip-important { background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .hp-chip-supporting { background: var(--h-fill-08); color: var(--h-ink-2); }
body[data-plane="workspace"] .hp-chip-supporting .icon { width: 12px; height: 12px; }
/* Edit, in place: the text edit, Change treatment, Take it out. */
body[data-plane="workspace"] .hp-take-out {
  padding: 0; border: 0; background: none; color: var(--h-danger); font: inherit; font-size: var(--type-body); cursor: pointer; }
/* The drawers (113 §5–§6): a sheet on the right, revealed by `:target`, over the page. */
body[data-plane="workspace"] .hp-drawer { display: none; }
body[data-plane="workspace"] .hp-drawer:is(:target, :has(:target), .hp-drawer-open) {
  position: fixed; inset: 0; z-index: 40; display: flex; justify-content: flex-end;
  background: color-mix(in srgb, var(--h-ink) 6%, transparent); }
body[data-plane="workspace"] .hp-drawer-panel {
  position: relative; box-sizing: border-box; width: min(430px, 100%); height: 100%; overflow-y: auto;
  display: flex; flex-direction: column; gap: 14px; padding: 56px 22px 24px; background: var(--h-card);
  border-left: 1px solid var(--h-line); box-shadow: -12px 0 32px color-mix(in srgb, var(--h-ink) 10%, transparent); }
body[data-plane="workspace"] .hp-drawer-close {
  position: absolute; top: 12px; right: 14px; display: inline-flex; align-items: center; justify-content: center;
  width: 36px; height: 36px; color: var(--h-muted); }
body[data-plane="workspace"] .hp-drawer-close .icon { width: 18px; height: 18px; margin: 0; }
body[data-plane="workspace"] .hp-drawer-title:not(#hp-x) { margin: 0; font-size: var(--type-section); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="workspace"] .hp-drawer-lede:not(#hp-x) { margin: -6px 0 0; font-size: var(--type-body); color: var(--h-muted); }
body[data-plane="workspace"] .hp-drawer-card {
  display: grid; grid-template-columns: 40px minmax(0, 1fr); gap: 12px; align-items: start; padding: 14px;
  border: 1px solid var(--h-line); border-radius: 8px; background: var(--h-fill-16); }
body[data-plane="workspace"] .hp-drawer-card .hp-num { width: 40px; height: 40px; border-radius: 50%; background: var(--h-warn-wash); }
body[data-plane="workspace"] .hp-drawer-card .requirement-text:not(#hp-x) { margin: 0; font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .hp-drawer form:not(#hp-x) { display: flex; flex-direction: column; gap: 14px; flex: 1 1 auto; max-width: none; margin: 0; }
body[data-plane="workspace"] .hp-choices { display: grid; gap: 12px; margin: 0; padding: 0; border: 0; }
body[data-plane="workspace"] .hp-choice {
  display: grid; grid-template-columns: 24px minmax(0, 1fr); gap: 14px; align-items: start; padding: 16px;
  border: 1px solid var(--h-line); border-radius: 8px; background: var(--h-card); cursor: pointer; }
body[data-plane="workspace"] .hp-choice:has(input:checked) { border-color: var(--h-accent); background: var(--h-accent-soft); }
body[data-plane="workspace"] .hp-choice input { width: 22px; height: 22px; margin: 0; accent-color: var(--h-accent); }
body[data-plane="workspace"] .hp-choice-words { display: grid; gap: 4px; min-width: 0; }
body[data-plane="workspace"] .hp-choice-label { font-size: var(--type-body); color: var(--h-ink); }
body[data-plane="workspace"] .hp-choice-meaning { font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .hp-drawer-note {
  display: grid; grid-template-columns: 24px minmax(0, 1fr); gap: 12px; align-items: start; padding: 14px 16px;
  border-radius: 8px; background: var(--h-accent-soft); }
body[data-plane="workspace"] .hp-drawer-note p { margin: 0; font-size: var(--type-meta); color: var(--h-ink-2); }
body[data-plane="workspace"] .hp-drawer-note .hp-note-title:not(#hp-x) { font-weight: var(--h-w-semi); color: var(--h-accent); }
body[data-plane="workspace"] .hp-note-mark { display: inline-flex; color: var(--h-accent); }
body[data-plane="workspace"] .hp-note-mark .icon { width: 20px; height: 20px; margin: 0; }
body[data-plane="workspace"] .hp-drawer-foot { display: flex; justify-content: flex-end; gap: 12px; margin-top: auto; padding-top: 12px; }
body[data-plane="workspace"] .hp-drawer-cancel {
  display: inline-flex; align-items: center; min-height: 44px; padding: 0 26px; border: 1px solid var(--h-line-strong);
  border-radius: 6px; background: var(--h-card); color: var(--h-ink); text-decoration: none; }
body[data-plane="workspace"] .hp-drawer-foot button.action { min-height: 44px; padding: 0 26px; border-radius: 6px; }
/* **ux/116 item 4: the help drawer as the six-step guide** (the owner's `hiring_plan_help`
   master, in the requirement drawers' frame): the book tile beside the title; six numbered
   steps in their master tints; step 1's three choices on a tinted card; step 2's four
   treatments as bordered cards with the product's marks and tags in the agreed treatment
   colours; step 5's chips as real links; the foot as the tinted *You remain in control*. */
body[data-plane="workspace"] .hp-help-panel:not(#hp-x) { gap: 20px; }
body[data-plane="workspace"] .hp-help-head { display: grid; grid-template-columns: 52px minmax(0, 1fr); gap: 16px; align-items: start; padding-right: 28px; }
body[data-plane="workspace"] .hp-help-head .hp-drawer-lede:not(#hp-x) { margin: 4px 0 0; }
body[data-plane="workspace"] .hp-help-tile {
  display: inline-flex; align-items: center; justify-content: center; width: 52px; height: 52px;
  border-radius: 12px; background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .hp-help-tile .icon { width: 26px; height: 26px; margin: 0; }
body[data-plane="workspace"] .hp-hsteps { display: grid; gap: 22px; margin: 0; padding: 0; list-style: none; }
body[data-plane="workspace"] .hp-hstep { display: grid; grid-template-columns: 36px minmax(0, 1fr); gap: 14px; align-items: start; }
body[data-plane="workspace"] .hp-hstep-num {
  display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px;
  border-radius: 50%; font-size: var(--type-lede); font-weight: var(--h-w-bold); }
body[data-plane="workspace"] .hp-hstep-num-1, body[data-plane="workspace"] .hp-hstep-num-4 { background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .hp-hstep-num-2 { background: var(--h-warn-soft); color: var(--h-warn); }
body[data-plane="workspace"] .hp-hstep-num-3 { background: color-mix(in srgb, var(--mark-violet) 12%, var(--h-card)); color: var(--mark-violet); }
body[data-plane="workspace"] .hp-hstep-num-5 { background: color-mix(in srgb, var(--h-accent) 8%, var(--h-card)); color: var(--h-accent); }
body[data-plane="workspace"] .hp-hstep-num-6 { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="workspace"] .hp-hstep-body { display: grid; gap: 10px; min-width: 0; }
body[data-plane="workspace"] .hp-hstep-title:not(#hp-x) { margin: 6px 0 0; font-size: var(--type-lede); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .hp-hstep-text:not(#hp-x) { margin: -6px 0 0; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .hp-hstep-text b { font-weight: var(--h-w-semi); color: var(--h-ink-2); }
body[data-plane="workspace"] .hp-hchoices {
  display: grid; gap: 12px; margin: 0; padding: 14px 16px; list-style: none; border-radius: 10px;
  background: color-mix(in srgb, var(--h-accent) 6%, var(--h-card)); }
body[data-plane="workspace"] .hp-hchoice { display: grid; grid-template-columns: 30px minmax(0, 1fr); gap: 12px; align-items: center; }
body[data-plane="workspace"] .hp-hmark {
  display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 50%; }
body[data-plane="workspace"] .hp-hmark .icon { width: 16px; height: 16px; margin: 0; }
body[data-plane="workspace"] .hp-hmark-add { background: var(--h-accent); color: var(--h-card); }
body[data-plane="workspace"] .hp-hmark-exclude { background: var(--h-ink-2); color: var(--h-card); }
body[data-plane="workspace"] .hp-hmark-ask { background: var(--h-card); color: var(--h-ink); border: 1px solid var(--h-line-strong); }
body[data-plane="workspace"] .hp-hchoice-words, body[data-plane="workspace"] .hp-htreat-words { display: grid; gap: 2px; min-width: 0; }
body[data-plane="workspace"] .hp-hchoice-label { font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .hp-hchoice-meaning, body[data-plane="workspace"] .hp-htreat-meaning { font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .hp-hchoice-meaning b { font-weight: var(--h-w-semi); color: var(--h-ink-2); }
body[data-plane="workspace"] .hp-htreats { display: grid; gap: 8px; margin: 0; padding: 0; list-style: none; }
body[data-plane="workspace"] .hp-htreat {
  display: grid; grid-template-columns: 38px minmax(0, 1fr); gap: 12px; align-items: center; padding: 10px 12px;
  border: 1px solid var(--h-line); border-radius: 8px; background: var(--h-card); }
body[data-plane="workspace"] .hp-htile { display: inline-flex; align-items: center; justify-content: center; width: 38px; height: 38px; border-radius: 8px; }
body[data-plane="workspace"] .hp-htile .icon { width: 20px; height: 20px; margin: 0; }
body[data-plane="workspace"] .hp-htile-must-have { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="workspace"] .hp-htile-critical { background: var(--h-danger-soft); color: var(--h-danger); }
body[data-plane="workspace"] .hp-htile-important { background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .hp-htile-supporting { background: var(--h-fill-08); color: var(--h-ink-2); }
body[data-plane="workspace"] .hp-htreat-head { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; }
body[data-plane="workspace"] .hp-htreat-label { font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .hp-htag { display: inline-flex; padding: 1px 8px; border-radius: 6px; font-size: var(--type-pill); white-space: nowrap; }
body[data-plane="workspace"] .hp-htag-must-have { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="workspace"] .hp-htag-critical { background: var(--h-danger-soft); color: var(--h-danger); }
body[data-plane="workspace"] .hp-htag-important { background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .hp-htag-supporting { background: var(--h-fill-08); color: var(--h-ink-2); }
body[data-plane="workspace"] .hp-hchips { display: flex; flex-wrap: wrap; gap: 6px; margin: 0; padding: 0; list-style: none; }
body[data-plane="workspace"] .hp-hchip {
  display: inline-flex; align-items: center; gap: 6px; min-height: 30px; padding: 0 10px; border: 1px solid var(--h-line-strong);
  border-radius: 6px; background: var(--h-card); color: var(--h-ink); font-size: var(--type-pill); text-decoration: none; }
body[data-plane="workspace"] .hp-hchip-current { border-color: var(--h-accent); background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .hp-hchip-dot { font-size: var(--type-meta-small); line-height: var(--h-lh-flat); }
body[data-plane="workspace"] .hp-hchip-dot-pending { color: var(--mark-warm); }
body[data-plane="workspace"] .hp-hchip-dot-treatment { color: var(--h-danger); }
body[data-plane="workspace"] .hp-hchip-dot-not-set { color: var(--h-ink-2); }
body[data-plane="workspace"] .hp-help-foot { margin-top: 4px; }
body[data-plane="workspace"] .hp-tmark { display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; }
body[data-plane="workspace"] .hp-tmark .icon { width: 22px; height: 22px; margin: 0; }
body[data-plane="workspace"] .hp-tmark-must { color: var(--h-ok); }
body[data-plane="workspace"] .hp-tmark-critical { color: var(--h-danger); }
body[data-plane="workspace"] .hp-tmark-important { color: var(--h-accent); }
body[data-plane="workspace"] .hp-tmark-supporting { color: var(--h-ink-2); }
/* **ANSWER 108-b: the drawer beside the page at the master's width** (ux/113 §10): at
   ≥ 1280 the open drawer is a side panel, and the page reflows into what is left of the
   width — nothing it holds is covered. Below that it is the full-width sheet. */
/* **ux/116 item 7 (superseding 108-b's start under the masthead): the drawer runs the full
   window height from the top**, as the masters draw it, and at ≥1280 the whole page —
   masthead included — reflows into the remaining width, so no masthead item slides under
   it. The masthead's design is untouched; only its width changes. */
/* QUESTION 112-a (a): the reflow starts at 1440 — the width at which the masthead, with the
   shell's own tighter ≤1279 spacing (the rule it already uses at the page's new width),
   still fits beside the drawer. Below that the drawer is the full-height sheet. */
@media (min-width: 1440px) {
  body[data-plane="workspace"]:has(.hp-drawer:is(:target, :has(:target), .hp-drawer-open)) { margin-right: 430px; }
  body[data-plane="workspace"]:has(.hp-drawer:is(:target, :has(:target), .hp-drawer-open)) > main { max-width: none; }
  body[data-plane="workspace"] .hp-drawer:is(:target, :has(:target), .hp-drawer-open) { left: auto; width: 430px; background: none; }
  body[data-plane="workspace"] .hp-drawer:is(:target, :has(:target), .hp-drawer-open) .hp-drawer-panel { width: 430px; }
  body[data-plane="workspace"]:has(.hp-drawer:is(:target, :has(:target), .hp-drawer-open)) .masthead.headers-v2 { padding: 0 var(--s4); gap: var(--s3); }
  body[data-plane="workspace"]:has(.hp-drawer:is(:target, :has(:target), .hp-drawer-open)) .masthead.headers-v2 nav[aria-label="Primary"],
  body[data-plane="workspace"]:has(.hp-drawer:is(:target, :has(:target), .hp-drawer-open)) .masthead.headers-v2 .header-primary,
  body[data-plane="workspace"]:has(.hp-drawer:is(:target, :has(:target), .hp-drawer-open)) .masthead.headers-v2 .account-nav ul { gap: var(--s3); }
  body[data-plane="workspace"]:has(.hp-drawer:is(:target, :has(:target), .hp-drawer-open)) .masthead.headers-v2 .masthead-identity { padding-right: var(--s3); }
  body[data-plane="workspace"]:has(.hp-drawer:is(:target, :has(:target), .hp-drawer-open)) .masthead.headers-v2 .account-context { padding-left: var(--s3); }
}
/* **Symmetric inner padding** (item 7): the same on the right as the left — 24px, 16px at a
   phone — with the scrollbar inside the drawer's edge; the head stays pinned while the
   body scrolls, and the foot keeps the same inset. */
body[data-plane="workspace"] .hp-drawer-panel:not(#hp-x) { padding: 0 24px 24px; scrollbar-gutter: stable both-edges; }
body[data-plane="workspace"] .hp-drawer-pinned {
  position: sticky; top: 0; z-index: 2; margin: 0 -24px; padding: 24px 24px 12px; background: var(--h-card); }
body[data-plane="workspace"] .hp-drawer-pinned .hp-drawer-close { position: static; flex: 0 0 auto; }
body[data-plane="workspace"] .hp-help-head.hp-drawer-pinned { grid-template-columns: 52px minmax(0, 1fr) 36px; padding-right: 24px; }
/* **Save lands on the row** (item 7): below the masthead, briefly highlighted. */
body[data-plane="workspace"] .hp-row-review[id^="row-"] { scroll-margin-top: 120px; scroll-margin-bottom: 120px; }
body[data-plane="workspace"] .hp-row:has(.hp-row-review:target) { outline: 2px solid var(--h-accent); outline-offset: 2px; animation: hp-landed 1.6s ease-out; }
@keyframes hp-landed { from { box-shadow: 0 0 0 6px var(--h-accent-soft); } to { box-shadow: 0 0 0 0 transparent; } }
@media (prefers-reduced-motion: reduce) { body[data-plane="workspace"] .hp-row:has(.hp-row-review:target) { animation: none; } }
@media (min-width: 1440px) and (max-width: 1599px) {
  body[data-plane="workspace"]:has(.hp-drawer:is(:target, :has(:target), .hp-drawer-open)) .hp-tiles:not(#hp-x) { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
body[data-plane="workspace"] .hp-card-head .add-requirement > summary.action { white-space: nowrap; }
@media (max-width: 48rem) {
  body[data-plane="workspace"] .hp-finish { justify-items: start; }
  body[data-plane="workspace"] .hp-left-list { left: 0; right: auto; }
  body[data-plane="workspace"] .hp-bulk:not(#hp-x) { margin-left: 0; }
  body[data-plane="workspace"] .hp-row.hp-row-pending,
  body[data-plane="workspace"] .hp-row.hp-row-treatment,
  body[data-plane="workspace"] .hp-row.hp-row-complete {
    grid-template-columns: 36px minmax(0, 1fr) 28px; gap: 10px 12px; align-items: start; padding: 12px 10px 12px 12px; }
  body[data-plane="workspace"] :is(.hp-row-pending, .hp-row-treatment, .hp-row-complete) .hp-row-act { grid-column: 2 / 4; grid-row: 2; }
  body[data-plane="workspace"] .hp-drawer-panel:not(#hp-x) { width: 100%; padding: 0 16px 16px; }
  body[data-plane="workspace"] .hp-drawer-pinned { margin: 0 -16px; padding: 16px 16px 10px; }
  body[data-plane="workspace"] .hp-card-head { align-items: flex-start; }
}
/* ==========================================================================
   ux/113 §11 · one *Review requirement* drawer per requirement (the owner's
   hiring_plan_edit_drawer master governs): each row carries one outlined pencil button; the
   drawer holds the summary card, the text (in the plan), *1. Include in hiring plan?* (a
   suggestion), *2. How should this requirement be used?* (hidden while *Don't include* is
   chosen), *Questions & conversation*, and the foot — *Take it out* left, *Cancel* and
   *Save requirement* right. 113-g's *Not included* group is grey and collapsed.
   ========================================================================== */
body[data-plane="workspace"] .hp-group-block { position: relative; margin: 0; }
body[data-plane="workspace"] .hp-drawers { display: contents; }
body[data-plane="workspace"] .hp-step-include .hp-choices { gap: 10px; }
body[data-plane="workspace"] .hp-questions-summary .hp-step-title:not(#hp-x) { margin: 0; }
body[data-plane="workspace"] .hp-q-summary .hp-q-words { display: grid; gap: 2px; }
body[data-plane="workspace"] .hp-review .form-note:not(#hp-x) { margin: 0; padding: 10px 12px; border-radius: 8px; background: var(--h-danger-soft); }
/* *Add remaining to plan ⓘ* at the Pending head's right, as drawn (§11). */
body[data-plane="workspace"] .hp-group-block .hp-bulk:not(#hp-x) { position: absolute; top: 0; right: 0; margin: 0; }
body[data-plane="workspace"] .hp-bulk-info { display: inline-flex; color: var(--h-accent); cursor: help; }
body[data-plane="workspace"] .hp-bulk-info .icon { width: 20px; height: 20px; margin: 0; }
body[data-plane="workspace"] .hp-rgroup-pending:has(.hp-bulk) > .hp-group-summary { margin-right: 17rem; }
body[data-plane="workspace"] .hp-row-act { display: flex; justify-content: flex-end; min-width: 0; }
body[data-plane="workspace"] .hp-requirements .action.hp-row-review:not(#hp-x):not(#hp-y) { gap: 12px; padding: 0 22px 0 18px; }
body[data-plane="workspace"] .hp-row-review .icon { width: 17px; height: 17px; margin: 0; }
body[data-plane="workspace"] .hp-row-review .hp-review-word { padding-left: 12px; border-left: 1px solid var(--h-line); }
body[data-plane="workspace"] .hp-row.hp-row-excluded {
  grid-template-columns: 44px minmax(0, 1fr) auto; gap: 8px 20px; align-items: center; min-height: 76px; margin: 0;
  padding: 12px 16px 12px 18px; border: 1px solid var(--h-line); border-left: 3px solid var(--h-line-strong);
  border-radius: 6px; background: var(--h-fill-16); }
body[data-plane="workspace"] .hp-gmark-excluded { background: var(--h-muted); }
body[data-plane="workspace"] .hp-chip-excluded { background: var(--h-fill-08); color: var(--h-ink-2); }
/* The drawer: a head with the ✕ beside the title, the steps, the foot. */
body[data-plane="workspace"] .hp-review .hp-drawer-panel { padding-top: 24px; gap: 18px; }
body[data-plane="workspace"] .hp-drawer-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
body[data-plane="workspace"] .hp-review .hp-drawer-close { position: static; }
body[data-plane="workspace"] .hp-review .hp-drawer-card { border: 0; background: none; padding: 0; }
body[data-plane="workspace"] .hp-review form.hp-review-form:not(#hp-x) { display: grid; gap: 18px; flex: 0 0 auto; }
body[data-plane="workspace"] .hp-step { display: grid; gap: 8px; margin: 0; padding: 0 0 18px; border-bottom: 1px solid var(--h-line); scroll-margin-top: 16px; }
body[data-plane="workspace"] .hp-step:focus { outline: none; }
body[data-plane="workspace"] .hp-step:target { box-shadow: -4px 0 0 var(--mark-warm); }
body[data-plane="workspace"] .hp-step-title:not(#hp-x) { margin: 0; font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .hp-step-lede:not(#hp-x) { margin: 0 0 4px; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .hp-step-text textarea {
  box-sizing: border-box; width: 100%; max-width: none; min-height: 60px; padding: 12px 14px; resize: vertical;
  border: 1px solid var(--h-line); border-radius: 8px; background: var(--h-fill-16); font: inherit; color: var(--h-ink); }
body[data-plane="workspace"] .hp-step .field-error { margin: 0; }
/* The treatments, one card with hairlines between, as drawn. */
body[data-plane="workspace"] .hp-step-treat .hp-choices { gap: 0; border: 1px solid var(--h-line); border-radius: 8px; overflow: hidden; }
body[data-plane="workspace"] .hp-step-treat .hp-choice { grid-template-columns: 24px 28px minmax(0, 1fr); border: 0; border-radius: 0; }
body[data-plane="workspace"] .hp-step-treat .hp-choice + .hp-choice { border-top: 1px solid var(--h-line); }
body[data-plane="workspace"] .hp-choice-marked .hp-tmark { width: 28px; height: 28px; }
body[data-plane="workspace"] .hp-review:has(input[name="decision"][value="exclude"]:checked) .hp-step-treat { display: none; }
/* Questions & conversation. */
body[data-plane="workspace"] .hp-questions > details > summary {
  display: flex; align-items: center; flex-wrap: wrap; gap: 8px 10px; list-style: none; cursor: pointer; }
body[data-plane="workspace"] .hp-questions > details > summary::-webkit-details-marker { display: none; }
body[data-plane="workspace"] .hp-questions .hp-step-title:not(#hp-x) { white-space: nowrap; }
body[data-plane="workspace"] .hp-questions-chev { margin-left: auto; display: inline-flex; color: var(--h-ink); }
body[data-plane="workspace"] .hp-questions-chev .icon { width: 16px; height: 16px; margin: 0; transform: rotate(90deg); }
body[data-plane="workspace"] .hp-questions > details[open] .hp-questions-chev .icon { transform: rotate(-90deg); }
body[data-plane="workspace"] .hp-awaiting {
  display: inline-flex; align-items: center; gap: 6px; padding: 3px 12px; border-radius: 999px;
  background: var(--h-warn-wash); color: var(--h-warn-ink); font-size: var(--type-meta); white-space: nowrap; }
body[data-plane="workspace"] .hp-awaiting .icon { width: 14px; height: 14px; margin: 0; }
body[data-plane="workspace"] .hp-question-list { display: grid; margin: 12px 0 0; border: 1px solid var(--h-line); border-radius: 8px; overflow: visible; }
body[data-plane="workspace"] .hp-q { padding: 12px 14px; }
body[data-plane="workspace"] .hp-q + .hp-q { border-top: 1px solid var(--h-line); }
body[data-plane="workspace"] .hp-q-open { display: grid; grid-template-columns: 24px minmax(0, 1fr) auto; gap: 10px; align-items: start; }
body[data-plane="workspace"] .hp-q-mark {
  display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; border-radius: 50%;
  background: var(--h-warn-wash); color: var(--mark-warm); }
body[data-plane="workspace"] .hp-q-mark .icon { width: 13px; height: 13px; margin: 0; }
body[data-plane="workspace"] .hp-q-words { display: grid; gap: 2px; min-width: 0; }
body[data-plane="workspace"] .hp-q-text:not(#hp-x) { margin: 0; font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); overflow-wrap: anywhere; }
body[data-plane="workspace"] .hp-q-meta:not(#hp-x) { display: flex; align-items: center; flex-wrap: wrap; gap: 0 6px; margin: 0; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .hp-q-waiting { display: inline-flex; align-items: center; gap: 4px; color: var(--mark-warm); }
body[data-plane="workspace"] .hp-q-waiting .icon { width: 13px; height: 13px; margin: 0; }
body[data-plane="workspace"] .hp-q-menu { position: relative; }
body[data-plane="workspace"] .hp-q-menu-toggle {
  display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; border-radius: 6px;
  list-style: none; cursor: pointer; color: var(--h-ink); }
body[data-plane="workspace"] .hp-q-menu-toggle::-webkit-details-marker { display: none; }
body[data-plane="workspace"] .hp-q-menu-body {
  position: absolute; right: 0; z-index: 6; display: grid; gap: 8px; width: min(18rem, 70vw); margin-top: 6px; padding: 12px;
  background: var(--h-card); border: 1px solid var(--h-line); border-radius: 10px; box-shadow: 0 8px 24px var(--h-line); }
body[data-plane="workspace"] .hp-q-closed > summary { display: grid; grid-template-columns: 18px 22px minmax(0, 1fr); gap: 8px; align-items: start; list-style: none; cursor: pointer; }
body[data-plane="workspace"] .hp-q-closed > summary::-webkit-details-marker { display: none; }
body[data-plane="workspace"] .hp-q-chev { display: inline-flex; color: var(--h-muted); }
body[data-plane="workspace"] .hp-q-chev .icon { width: 14px; height: 14px; margin: 0; transform: rotate(0deg); }
body[data-plane="workspace"] .hp-q-closed[open] .hp-q-chev .icon { transform: rotate(90deg); }
body[data-plane="workspace"] .hp-q-done {
  display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; border-radius: 50%; color: var(--h-card); }
body[data-plane="workspace"] .hp-q-done .icon { width: 12px; height: 12px; margin: 0; }
body[data-plane="workspace"] .hp-q-resolved { background: var(--mark-green); }
body[data-plane="workspace"] .hp-q-dismissed { background: var(--h-muted); }
body[data-plane="workspace"] .hp-q-action:not(#hp-x) { margin: 8px 0 0 48px; font-size: var(--type-meta); color: var(--h-ink-2); overflow-wrap: anywhere; }
/* Ask another question: its own form, in the master's grey band. */
body[data-plane="workspace"] .hp-review form.hp-ask-form:not(#hp-x) {
  display: grid; grid-template-columns: minmax(0, 1fr); gap: 8px; max-width: none; min-width: 0; margin: 12px 0 0; padding: 10px 8px;
  border-radius: 8px; background: var(--h-fill-12); }
body[data-plane="workspace"] .hp-ask-label { font-size: var(--type-meta); font-weight: var(--h-w-semi); color: var(--h-ink); }
/* ANSWER 109-a: the input takes the row's free width, as drawn; the two buttons keep only
   their own. */
body[data-plane="workspace"] .hp-ask-row { display: flex; gap: 6px; align-items: center; }
body[data-plane="workspace"] .hp-ask-row input[type="text"]:not(#hp-x) {
  flex: 1 1 0; width: 0; max-width: none; min-width: 0; box-sizing: border-box; min-height: 40px; padding: 0 8px; border: 1px solid var(--h-line-strong);
  border-radius: 6px; background: var(--h-card); font: inherit; color: var(--h-ink); }
body[data-plane="workspace"] .hp-ask-row button.action { order: 3; flex: 0 0 auto; min-height: 40px; padding: 0 10px; border-radius: 6px; white-space: nowrap; }
body[data-plane="workspace"] .hp-ask-reset {
  order: 2; flex: 0 0 auto; min-height: 40px; padding: 0 10px; border: 1px solid var(--h-line-strong); border-radius: 6px;
  background: var(--h-card); color: var(--h-ink); font: inherit; font-size: var(--type-meta); cursor: pointer; }
/* The foot: *Take it out* left, *Cancel* and *Save requirement* right, under a rule. */
body[data-plane="workspace"] .hp-review .hp-drawer-foot {
  display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: auto; padding-top: 16px;
  border-top: 1px solid var(--h-line); }
body[data-plane="workspace"] .hp-drawer-foot-acts { display: flex; align-items: center; gap: 12px; margin-left: auto; }
body[data-plane="workspace"] .hp-review .hp-drawer-cancel:not(#hp-x) { border: 0; padding: 0 12px; text-decoration: underline; color: var(--h-accent); }
body[data-plane="workspace"] .hp-remove-form { margin: 0; }
@media (max-width: 48rem) {
  body[data-plane="workspace"] .hp-row.hp-row-excluded { grid-template-columns: 36px minmax(0, 1fr); padding: 12px 10px 12px 12px; }
  body[data-plane="workspace"] :is(.hp-row-pending, .hp-row-treatment, .hp-row-complete, .hp-row-excluded) .hp-row-act { grid-column: 2 / -1; justify-content: flex-start; }
  body[data-plane="workspace"] .hp-ask-row { flex-wrap: wrap; }
  body[data-plane="workspace"] .hp-ask-row input[type="text"]:not(#hp-x) { flex-basis: 100%; }
}
/* ==========================================================================
   ux/114 · page 3b "Co-sign the hiring plan", to the owner's hiring_plan_cosign master (at
   110 §1a's scale): the clipboard tile and title with the meta and its amber standing pill,
   the one rule line, the *Next step* card at the right behind a hairline; the requirements
   card (# · Requirement · How it affects hiring, page 3's treatment chips, an ⓘ with the
   meaning); the legend band; the evidence card with an outlined *Open →*; *Read {time}*.
   ========================================================================== */
body[data-plane="workspace"] .object-main:has(.cs-card) { display: grid; gap: 18px; }
body[data-plane="workspace"] .head-card:has(.cs-next) { padding: 0; background: none; border: 0; box-shadow: none; }
body[data-plane="workspace"] .head-card:has(.cs-next) .head-card-top {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(22rem, 27rem); gap: 24px 32px; align-items: center; }
body[data-plane="workspace"] .head-card:has(.cs-next) .head-card-aside {
  align-self: stretch; display: flex; max-width: none; padding-left: 32px; border-left: 1px solid var(--h-line); text-align: left; }
/* ANSWER 110-a: the clipboard in the master's tinted rounded tile, ~64px, top-aligned with
   the title — page 3's tile tokens, tinted enough to read on the canvas. */
body[data-plane="workspace"] .head-card:has(.cs-next) .page-head-main { display: flex; align-items: flex-start; gap: 22px; }
body[data-plane="workspace"] .head-card:has(.cs-next) .page-head-mark:not(#hp-x) {
  flex: 0 0 64px; display: inline-flex; align-items: center; justify-content: center; width: 64px; height: 64px;
  margin: 4px 0 0; border-radius: 12px; background: color-mix(in srgb, var(--h-accent) 12%, var(--h-card)); color: var(--h-accent); }
body[data-plane="workspace"] .head-card:has(.cs-next) .page-head-mark .icon { width: 32px; height: 32px; margin: 0; }
body[data-plane="workspace"] .head-card:has(.cs-next) h1:not(#hp-x) { margin: 0; font-size: var(--type-page-title); line-height: var(--h-lh-card); }
body[data-plane="workspace"] .head-card:has(.cs-next) .page-lede:not(#hp-x) {
  display: flex; align-items: center; flex-wrap: wrap; gap: 8px 20px; margin: 10px 0 0; color: var(--h-muted); }
body[data-plane="workspace"] .cs-pill {
  display: inline-flex; align-items: center; gap: 8px; padding: 6px 16px; border-radius: 999px;
  font-size: var(--type-pill); font-weight: var(--h-w-semi); }
body[data-plane="workspace"] .cs-pill .icon { width: 17px; height: 17px; margin: 0; }
body[data-plane="workspace"] .cs-pill-warn { background: var(--h-warn-wash); color: var(--h-warn-ink); }
body[data-plane="workspace"] .cs-pill-warn .icon { color: var(--mark-warm); }
body[data-plane="workspace"] .cs-pill-ok { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="workspace"] .cs-pill-neutral { background: var(--h-fill-08); color: var(--h-ink-2); }
body[data-plane="workspace"] .cs-next {
  display: grid; grid-template-columns: 58px minmax(0, 1fr); gap: 20px; align-items: start; width: 100%;
  padding: 20px 22px; border-radius: 12px; background: var(--h-accent-soft); }
body[data-plane="workspace"] .cs-next-mark {
  display: inline-flex; align-items: center; justify-content: center; width: 58px; height: 58px; border-radius: 12px;
  background: var(--h-card); color: var(--h-accent); }
body[data-plane="workspace"] .cs-next-mark .icon { width: 28px; height: 28px; margin: 0; }
body[data-plane="workspace"] .cs-next-title:not(#hp-x) { margin: 0 0 4px; font-size: var(--type-section); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="workspace"] .cs-next-text:not(#hp-x) { margin: 0; font-size: var(--type-body); color: var(--h-ink-2); }
body[data-plane="workspace"] .head-card:has(.cs-next) .head-card-below { margin: 12px 0 0; padding: 0; border: 0; }
body[data-plane="workspace"] .cs-rule:not(#hp-x) { margin: 0; font-size: var(--type-body); color: var(--h-ink-2); }
/* The cards. */
body[data-plane="workspace"] .cs-card {
  margin: 0; padding: 22px 22px 18px; background: var(--h-card); border: 1px solid var(--h-line); border-radius: 12px;
  box-shadow: 0 6px 22px color-mix(in srgb, var(--h-ink) 4%, transparent); min-width: 0; }
body[data-plane="workspace"] .cs-card-head { margin: 0 0 16px; }
body[data-plane="workspace"] .cs-card-head .region-name:not(#hp-x) { margin: 0; font-size: var(--type-section); font-weight: var(--h-w-bold); }
body[data-plane="workspace"] .cs-card-head .region-lede:not(#hp-x) { margin: 6px 0 0; font-size: var(--type-body); color: var(--h-muted); }
body[data-plane="workspace"] .cs-card .grid-scroll { overflow-x: auto; max-width: 100%; }
body[data-plane="workspace"] .cs-table:not(#hp-x) { width: 100%; border-collapse: collapse; }
body[data-plane="workspace"] .cs-table thead th {
  padding: 12px 16px; background: var(--h-fill-12); font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); text-align: left; }
body[data-plane="workspace"] .cs-table tbody :is(td, th) { padding: 14px 16px; border-bottom: 1px solid var(--h-line); vertical-align: middle; }
body[data-plane="workspace"] .cs-table .cs-num { width: 3.5rem; color: var(--h-ink-2); font-variant-numeric: tabular-nums; }
body[data-plane="workspace"] .cs-table th.cs-req { font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); text-align: left; }
body[data-plane="workspace"] .cs-table :is(th, td):last-child { width: 16rem; }
body[data-plane="workspace"] .cs-treatment { display: flex; align-items: center; gap: 14px; }
body[data-plane="workspace"] .cs-meaning { display: inline-flex; color: var(--h-muted); cursor: help; }
body[data-plane="workspace"] .cs-meaning .icon { width: 20px; height: 20px; margin: 0; }
body[data-plane="workspace"] .cs-legend {
  display: flex; align-items: center; gap: 16px; flex-wrap: wrap; margin: 14px 0 0; padding: 12px 18px; border-radius: 8px;
  background: var(--h-accent-soft); }
body[data-plane="workspace"] .cs-legend-mark { display: inline-flex; color: var(--h-accent); }
body[data-plane="workspace"] .cs-legend-mark .icon { width: 24px; height: 24px; margin: 0; }
body[data-plane="workspace"] .cs-legend .requirement-legend:not(#hp-x) { flex: 1 1 18rem; margin: 0; font-size: var(--type-body); color: var(--h-ink-2); }
body[data-plane="workspace"] .cs-learn { display: inline-flex; align-items: center; gap: 8px; color: var(--h-accent); font-size: var(--type-body); text-decoration: none; white-space: nowrap; }
body[data-plane="workspace"] .cs-learn .icon { width: 16px; height: 16px; margin: 0; }
body[data-plane="workspace"] .cs-evidence { display: grid; grid-template-columns: 70px minmax(0, 1fr) auto; gap: 22px; align-items: center; padding: 20px 24px; }
body[data-plane="workspace"] .cs-evidence-mark {
  display: inline-flex; align-items: center; justify-content: center; width: 70px; height: 70px; border-radius: 12px;
  background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .cs-evidence-mark .icon { width: 34px; height: 34px; margin: 0; }
body[data-plane="workspace"] .cs-evidence-title:not(#hp-x) { margin: 0; font-size: var(--type-section); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="workspace"] .cs-evidence-lede:not(#hp-x) { margin: 6px 0 0; font-size: var(--type-body); color: var(--h-muted); }
body[data-plane="workspace"] .cs-evidence .action.cs-open:not(#hp-x):not(#hp-y),
body[data-plane="workspace"] .cs-evidence .action.cs-open:not(#hp-x):not(#hp-y):hover {
  display: inline-flex; align-items: center; gap: 10px; min-height: 52px; padding: 0 28px; border: 1px solid var(--h-line-strong);
  border-radius: 8px; background: var(--h-card); color: var(--h-accent); font-weight: var(--h-w-semi); text-decoration: none; }
body[data-plane="workspace"] .cs-evidence .cs-open .icon { width: 18px; height: 18px; margin: 0; }
@media (max-width: 1100px) {
  body[data-plane="workspace"] .head-card:has(.cs-next) .head-card-top { grid-template-columns: minmax(0, 1fr); }
  body[data-plane="workspace"] .head-card:has(.cs-next) .head-card-aside { padding-left: 0; border-left: 0; }
}
@media (max-width: 48rem) {
  body[data-plane="workspace"] .head-card:has(.cs-next) .page-head-main { align-items: flex-start; gap: 14px; }
  body[data-plane="workspace"] .head-card:has(.cs-next) .page-head-mark:not(#hp-x) { flex-basis: 48px; width: 48px; height: 48px; }
  body[data-plane="workspace"] .head-card:has(.cs-next) .page-head-mark .icon { width: 28px; height: 28px; }
  body[data-plane="workspace"] .head-card:has(.cs-next) h1:not(#hp-x) { font-size: var(--type-page-title); }
  body[data-plane="workspace"] .cs-card { padding: 16px; }
  body[data-plane="workspace"] .cs-table :is(th, td):last-child { width: auto; }
  body[data-plane="workspace"] .cs-table :is(thead th, tbody td, tbody th) { padding: 12px 8px; }
  body[data-plane="workspace"] .cs-table .cs-num { width: 1.75rem; }
  body[data-plane="workspace"] .cs-treatment { flex-wrap: wrap; gap: 6px 10px; }
  body[data-plane="workspace"] .cs-learn { white-space: normal; }
  body[data-plane="workspace"] .cs-evidence { grid-template-columns: 52px minmax(0, 1fr); }
  body[data-plane="workspace"] .cs-evidence-mark { width: 52px; height: 52px; }
  body[data-plane="workspace"] .cs-evidence .cs-open { grid-column: 1 / -1; justify-self: start; }
}
/* ==========================================================================
   ux/115 · page 34 "Candidate evidence against this version", to the owner's
   how_candidates_put_forward master (at 110 §1a's scale): the title, lede and two quiet
   notes; one card per requirement — the number disc, the words and page 3's treatment chip,
   *Shown by* | *Partly shown by* behind a hairline with monogram names, *None* quietly, the
   info band where nobody's reading shows it; the not-read card with *Expand ▾* and its
   reason groups side by side; the earlier ask as one card. No counts anywhere (M-3).
   ========================================================================== */
body[data-plane="workspace"] main:has(.cv-ask, .cv-cards) .head-card { padding: 0; background: none; border: 0; box-shadow: none; }
body[data-plane="workspace"] .cv-note:not(#hp-x) { margin: 6px 0 0; font-size: var(--type-body); color: var(--h-muted); }
body[data-plane="workspace"] .cv-heading:not(#hp-x) { margin: 26px 0 12px; font-size: var(--type-section); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="workspace"] .cv-legend:not(#hp-x) { margin: 0 0 12px; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .cv-cards { display: grid; gap: 14px; margin: 0; padding: 0; list-style: none; }
body[data-plane="workspace"] :is(.cv-card, .cv-unread, .cv-ask) {
  margin: 0; background: var(--h-card); border: 1px solid var(--h-line); border-radius: 12px;
  box-shadow: 0 6px 22px color-mix(in srgb, var(--h-ink) 4%, transparent); min-width: 0; }
body[data-plane="workspace"] .cv-card { display: grid; grid-template-columns: 50px minmax(0, 1fr); gap: 22px; padding: 18px 24px 20px; }
body[data-plane="workspace"] .cv-num {
  display: inline-flex; align-items: center; justify-content: center; width: 50px; height: 50px; border-radius: 50%;
  background: var(--h-accent-soft); color: var(--h-ink); font-size: var(--type-body); font-weight: var(--h-w-semi); }
body[data-plane="workspace"] .cv-card-body { display: grid; gap: 12px; min-width: 0; }
body[data-plane="workspace"] .cv-card-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
body[data-plane="workspace"] .cv-title:not(#hp-x) { margin: 0; font-size: var(--type-card-title); font-weight: var(--h-w-semi); color: var(--h-ink); overflow-wrap: anywhere; }
body[data-plane="workspace"] .cv-cols { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
body[data-plane="workspace"] .cv-col { display: grid; gap: 10px; align-content: start; min-width: 0; padding-right: 24px; }
body[data-plane="workspace"] .cv-col + .cv-col { padding: 0 0 0 28px; border-left: 1px solid var(--h-line); }
body[data-plane="workspace"] .cv-col-label:not(#hp-x) { margin: 0; font-size: var(--type-body); color: var(--h-muted); }
body[data-plane="workspace"] .cv-people { display: flex; flex-wrap: wrap; gap: 10px 28px; margin: 0; padding: 0; list-style: none; }
body[data-plane="workspace"] .cv-person { display: inline-flex; align-items: center; gap: 12px; min-width: 0; }
body[data-plane="workspace"] .cv-person .initials-disc { width: 38px; height: 38px; flex: 0 0 38px; font-size: var(--type-pill); }
body[data-plane="workspace"] .cv-name { color: var(--h-ink); font-size: var(--type-body); text-decoration: none; overflow-wrap: anywhere; }
body[data-plane="workspace"] a.cv-name:hover { text-decoration: underline; }
body[data-plane="workspace"] .cv-suffix { color: var(--h-muted); font-size: var(--type-body); }
body[data-plane="workspace"] .cv-none:not(#hp-x) { margin: 0; color: var(--h-muted); font-size: var(--type-body); }
body[data-plane="workspace"] .cv-band {
  display: flex; align-items: center; gap: 14px; padding: 14px 18px; border: 1px solid var(--h-line); border-radius: 8px;
  background: var(--h-accent-soft); }
body[data-plane="workspace"] .cv-band p { margin: 0; font-size: var(--type-body); color: var(--h-ink-2); }
body[data-plane="workspace"] .cv-band-mark { display: inline-flex; color: var(--h-accent); }
body[data-plane="workspace"] .cv-band-mark .icon { width: 22px; height: 22px; margin: 0; }
/* Candidates not read against this job. */
body[data-plane="workspace"] .cv-unread { margin: 14px 0 0; padding: 18px 22px; }
body[data-plane="workspace"] .cv-unread-summary { display: flex; align-items: center; justify-content: space-between; gap: 12px; list-style: none; cursor: pointer; }
body[data-plane="workspace"] .cv-unread-summary::-webkit-details-marker { display: none; }
body[data-plane="workspace"] .cv-unread-title:not(#hp-x) { margin: 0; font-size: var(--type-section); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="workspace"] .cv-expand { display: inline-flex; align-items: center; gap: 8px; color: var(--h-accent); font-size: var(--type-body); }
body[data-plane="workspace"] .cv-expand .icon { width: 14px; height: 14px; margin: 0; transform: rotate(90deg); }
body[data-plane="workspace"] .cv-unread details[open] .cv-expand .icon { transform: rotate(-90deg); }
body[data-plane="workspace"] .cv-expand-open { display: none; }
body[data-plane="workspace"] .cv-unread details[open] .cv-expand-open { display: inline; }
body[data-plane="workspace"] .cv-unread details[open] .cv-expand-closed { display: none; }
body[data-plane="workspace"] .cv-groups { display: grid; grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); gap: 16px 0; margin: 18px 0 0; }
body[data-plane="workspace"] .cv-group { display: grid; grid-template-columns: 36px minmax(0, 1fr); gap: 12px; padding: 0 20px; min-width: 0; }
body[data-plane="workspace"] .cv-group + .cv-group { border-left: 1px solid var(--h-line); }
body[data-plane="workspace"] .cv-group:first-child { padding-left: 0; }
body[data-plane="workspace"] .cv-group-mark {
  display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px; border-radius: 50%;
  background: var(--h-fill-08); color: var(--h-ink-2); }
body[data-plane="workspace"] .cv-group-mark .icon { width: 18px; height: 18px; margin: 0; }
body[data-plane="workspace"] .cv-group-title:not(#hp-x) { margin: 6px 0 10px; font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .cv-group-line:not(#hp-x) { margin: 0 0 10px; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .cv-archived:not(#hp-x) { margin: 16px 0 0; font-size: var(--type-body); color: var(--h-muted); }
/* The earlier ask, as one card. */
body[data-plane="workspace"] .cv-ask { display: grid; grid-template-columns: 64px minmax(0, 1fr); gap: 22px; margin: 18px 0 0; padding: 22px 24px; }
body[data-plane="workspace"] .cv-ask-mark {
  display: inline-flex; align-items: center; justify-content: center; width: 64px; height: 64px; border-radius: 50%;
  background: color-mix(in srgb, var(--h-accent) 12%, var(--h-card)); color: var(--h-accent); }
body[data-plane="workspace"] .cv-ask-mark .icon { width: 30px; height: 30px; margin: 0; }
body[data-plane="workspace"] .cv-ask-words { display: grid; gap: 4px; min-width: 0; }
body[data-plane="workspace"] .cv-ask-title:not(#hp-x) { margin: 0; font-size: var(--type-card-title); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="workspace"] .cv-ask-version:not(#hp-x) { margin: 0 0 8px; font-size: var(--type-body); color: var(--h-muted); }
body[data-plane="workspace"] .cv-ask-body:not(#hp-x) { margin: 0; font-size: var(--type-body); color: var(--h-muted); }
body[data-plane="workspace"] .cv-ask-sent:not(#hp-x) { margin: 4px 0 0; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .cv-ask form.action-form:not(#hp-x) {
  display: flex; align-items: center; flex-wrap: wrap; gap: 12px 28px; max-width: none; margin: 18px 0 0; }
body[data-plane="workspace"] .cv-window-label { font-size: var(--type-body); color: var(--h-ink); }
body[data-plane="workspace"] .cv-ask form select {
  flex: 0 0 17rem; width: 17rem; max-width: 100%; min-height: 46px; padding: 0 14px; border: 1px solid var(--h-line-strong); border-radius: 8px;
  background: var(--h-card); color: var(--h-ink); font: inherit; }
body[data-plane="workspace"] .cv-ask form button.action { margin-left: auto; min-height: 46px; padding: 0 30px; border-radius: 8px; }
body[data-plane="workspace"] .cv-nobody:not(#hp-x) { margin: 14px 0 0; font-size: var(--type-body); color: var(--h-ink-2); }
@media (max-width: 48rem) {
  body[data-plane="workspace"] .cv-card { grid-template-columns: 40px minmax(0, 1fr); gap: 14px; padding: 16px; }
  body[data-plane="workspace"] .cv-num { width: 40px; height: 40px; }
  body[data-plane="workspace"] .cv-cols { grid-template-columns: minmax(0, 1fr); gap: 14px; }
  body[data-plane="workspace"] .cv-col { padding-right: 0; }
  body[data-plane="workspace"] .cv-col + .cv-col { padding: 14px 0 0; border-left: 0; border-top: 1px solid var(--h-line); }
  body[data-plane="workspace"] .cv-group { padding: 0; }
  body[data-plane="workspace"] .cv-group + .cv-group { padding-top: 14px; border-left: 0; border-top: 1px solid var(--h-line); }
  body[data-plane="workspace"] .cv-ask { grid-template-columns: minmax(0, 1fr); gap: 12px; padding: 18px 16px; }
  body[data-plane="workspace"] .cv-ask-mark { width: 48px; height: 48px; }
  body[data-plane="workspace"] .cv-ask form select { flex: 1 1 100%; width: 100%; }
  body[data-plane="workspace"] .cv-ask form button.action { margin-left: 0; width: 100%; }
}
/* **Three type roles per section** (71 §9, as ruled at ANSWER 29e): the region heading,
   row text (`--h-t-control`, as the plan's lede and facts already are) and meta
   (`--h-t-help`). The plan's part headings read as meta captions, the proposal's wording as
   row text and its origin as meta, and the Job team's name as row text; they had been a
   fourth to seventh role. Components (buttons, action links, pills, table headers,
   summaries, labels, withheld acts) keep their shared styles. Amended at D-2039. */
body[data-plane="workspace"] .plan-part-heading {
  margin: 0 0 8px; font-size: var(--type-meta); font-weight: var(--h-w-normal); color: var(--h-muted);
}
body[data-plane="workspace"] .proposal-row {
  display: grid; gap: 4px; padding: 12px 0; border-top: 1px solid var(--h-line); min-width: 0;
}
body[data-plane="workspace"] .proposal-row .requirement-text { margin: 0; overflow-wrap: anywhere; }
body[data-plane="workspace"] .row-menu { position: relative; }
body[data-plane="workspace"] .add-requirement { margin: 12px 0 0; }
body[data-plane="workspace"] .add-requirement > summary { display: inline-flex; list-style: none; }
/* Applications (71 §3): the stage as a quiet pill, its meaning a hint on wider screens. */
body[data-plane="workspace"] .application-record > td { vertical-align: middle; }
body[data-plane="workspace"] .application-table .stage-hint {
  margin-left: 8px; font-size: var(--type-meta);
}
@media (max-width: 40rem) {
  body[data-plane="workspace"] .application-table .stage-hint { display: none; }
}


body[data-plane="workspace"] .actions { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; }

/* **`inline-flex` is for a form that is only a button**, which most acts are: a hidden
   token and a submit, sitting in a row of its peers.
   **A form that asks something is a block.** `action-form` was inline-flex for every
   form, so `CloseJob` -- a sentence, a reason chooser, a summary field and a submit --
   laid its four children out as four flex items on one line, each squeezed to a few
   characters. This is stated once, by shape rather than by class, so the next form that
   acquires a field does not have to be found by looking at it. */
body[data-plane="workspace"] .action-form { display: inline-flex; margin: 0; }
body[data-plane="workspace"] .action-form:has(.field),
body[data-plane="workspace"] .action-form:has(p.sentence),
body[data-plane="workspace"] .action-form:has(textarea),
body[data-plane="workspace"] .action-form:has(fieldset),
body[data-plane="workspace"] .action-form:has(input[type="file"]) {
  display: block; width: 100%; max-width: none;
}
body[data-plane="workspace"] .action-form:has(.field) > .sentence,
body[data-plane="workspace"] .action-form:has(.field) > p.sentence {
  margin: 0 0 16px; max-width: var(--prose); color: var(--h-muted);
  line-height: var(--h-lh-prose);
}
body[data-plane="workspace"] .action-form:has(.field) > .action,
body[data-plane="workspace"] .action-form:has(textarea) > .action,
body[data-plane="workspace"] .action-form:has(fieldset) > .action { margin-top: 16px; }
body[data-plane="workspace"] .action-form select {
  width: 100%; max-width: var(--field); box-sizing: border-box;
  border: 1px solid var(--h-line-strong); border-radius: var(--h-radius-sm);
  padding: 11px 13px; font: inherit; font-size: var(--type-body); color: var(--h-ink);
  background: var(--h-card);
}

/* **A folded region, and the stray `9`.**
   `style_surfaces` records a defect it could not fix at the time: `.disclosure >
   summary::before` writes `content:"9  "` meaning the CSS escape for a left-pointing
   angle quote, and Python reads `` as an **octal** escape -- so the served rule is a
   C1 control character followed by the digit nine, which is the mark a reader sees beside
   *Closing and discarding*. It was left alone because that stage could not change served
   bytes.
   **A later layer can, and that is what a later layer is for.** The marker is replaced
   rather than repaired in place: the rule that produces it is untouched, and the one that
   wins says what the affordance should look like. Same trap as `be` two regions up --
   an escape inside an ordinary Python string is Python's, not CSS's. */
body[data-plane="workspace"] .disclosure > summary::before { content: none; }
body[data-plane="workspace"] .disclosure[open] {
  border-left: 0; padding-left: 0;
}
body[data-plane="workspace"] .disclosure { margin: 0; }
body[data-plane="workspace"] .disclosure > summary {
  list-style: none; cursor: pointer; display: inline-flex; align-items: center; gap: 9px;
  font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-accent);
  padding: 8px 0; background: none;
}
body[data-plane="workspace"] .disclosure > summary::-webkit-details-marker { display: none; }
body[data-plane="workspace"] .disclosure > summary::after { content: "▾"; font-size: var(--type-meta-small); }
body[data-plane="workspace"] .disclosure[open] > summary::after { content: "▴"; }
body[data-plane="workspace"] .disclosure[open] > summary { margin-bottom: 8px; }
body[data-plane="workspace"] .disclosure > *:not(summary) {
  border-top: 1px solid var(--h-line); padding-top: 18px; margin-top: 4px;
}

body[data-plane="workspace"] .field { margin: 0 0 14px; }
body[data-plane="workspace"] .field label,
body[data-plane="workspace"] fieldset.field legend {
  display: block; font-size: var(--type-body); font-weight: var(--h-w-mid); color: var(--h-ink-2); margin: 0 0 6px;
}
body[data-plane="workspace"] .field-marked { color: var(--h-danger); }
body[data-plane="workspace"] input[type="text"],
body[data-plane="workspace"] input[type="email"],
body[data-plane="workspace"] input[type="password"],
body[data-plane="workspace"] input[type="search"],
body[data-plane="workspace"] textarea,
body[data-plane="workspace"] select {
  width: 100%; max-width: var(--field); box-sizing: border-box;
  border: 1px solid var(--h-line-strong); border-radius: var(--h-radius-sm);
  padding: 11px 13px; font: inherit; font-size: var(--type-body); color: var(--h-ink);
  background: var(--h-card);
}
body[data-plane="workspace"] input:focus-visible,
body[data-plane="workspace"] textarea:focus-visible {
  outline: 2px solid var(--h-accent); outline-offset: 1px; border-color: var(--h-accent);
}
body[data-plane="workspace"] .field-help {
  font-size: var(--type-meta); color: var(--h-muted); margin: 6px 0 0; line-height: var(--h-lh-prose);
}
body[data-plane="workspace"] .form-footer {
  display: flex; justify-content: flex-end; align-items: center; gap: 12px; margin-top: 18px;
}
body[data-plane="workspace"] .form-footer-acts { display: flex; gap: 12px; }
body[data-plane="workspace"] .form-cancel {
  display: inline-flex; align-items: center; border-radius: var(--h-radius-sm);
  padding: 11px 20px; font-size: var(--type-body); font-weight: var(--h-w-semi); text-decoration: none;
}

/* The role's fields read as a labelled list, not as a row of boxes: the label names the
   field and the control sits beside it at a width the value actually needs. */
body[data-plane="workspace"] .edit-job-form { display: block; width: 100%; max-width: none; }
body[data-plane="workspace"] .edit-job-form .field {
  display: grid; grid-template-columns: 148px minmax(0, 1fr);
  align-items: center; gap: 0 18px; margin: 0 0 12px; max-width: var(--field);
}
body[data-plane="workspace"] .edit-job-form .field label { margin: 0; }
body[data-plane="workspace"] .edit-job-form .field input,
body[data-plane="workspace"] .edit-job-form .field textarea { max-width: none; width: 100%; }
body[data-plane="workspace"] .edit-job-form .field-help { max-width: var(--prose); margin-top: 16px; }
/* **ANSWER 112-d (ux/116 §11): the Title on its own full-width line**, so a long title is
   never cut off; Department and Location share the next line equally; a phone stacks them.
   The labels sit above their inputs. */
body[data-plane="workspace"] .edit-job-form:not(#hp-x) { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 18px; }
body[data-plane="workspace"] .edit-job-form > :not(.field) { grid-column: 1 / -1; }
body[data-plane="workspace"] .edit-job-form > .form-footer { justify-self: stretch; width: 100%; box-sizing: border-box; }
body[data-plane="workspace"] .edit-job-form .field:not(#hp-x) { grid-template-columns: minmax(0, 1fr); gap: 6px 0; max-width: none; margin: 0 0 14px; }
body[data-plane="workspace"] .edit-job-form .field:has(> #title) { grid-column: 1 / -1; }
@media (max-width: 48rem) {
  body[data-plane="workspace"] .edit-job-form:not(#hp-x) { grid-template-columns: minmax(0, 1fr); }
}

/* ==========================================================================
   5 · Standing — one word in its colour, per `U-2`'s two channels
   ========================================================================== */
body[data-plane="workspace"] .pill {
  display: inline-flex; align-items: center; gap: 7px;
  border-radius: 999px; padding: 4px 12px;
  font-size: var(--type-pill); font-weight: var(--h-w-semi); line-height: var(--h-lh-snug); white-space: nowrap;
  background: var(--h-fill-07); color: var(--h-chip-ink);
}
body[data-plane="workspace"] .pill-neutral    { background: var(--h-fill-07); color: var(--h-chip-ink); }
body[data-plane="workspace"] .pill-affirmative { background: var(--h-fill-04); color: var(--h-ok); }
body[data-plane="workspace"] .pill-cautionary { background: var(--h-warn-wash); color: var(--h-warn); }
body[data-plane="workspace"] .pill-critical   { background: var(--h-critical-soft); color: var(--h-critical); }
body[data-plane="workspace"] .pill-important  { background: var(--h-info-wash); color: var(--h-info-ink); }
body[data-plane="workspace"] .pill-supporting { background: var(--h-ok-soft); color: var(--h-ok-2); }
body[data-plane="workspace"] .pill-must-have  { background: var(--h-policy-soft); color: var(--h-policy); }
body[data-plane="workspace"] .pill-unset      { background: var(--h-fill-07); color: var(--h-unset-ink); }
body[data-plane="workspace"] .pill-count      { background: var(--h-fill-06); color: var(--h-count-ink); }

/* ==========================================================================
   6 · Start a role — the brief control and its four outcomes
   ========================================================================== */

body[data-plane="workspace"] .outcome {
  border-radius: 12px; border: 1px solid; padding: 26px 24px; text-align: center; margin: 0 0 6px;
}
/* **Inside a card, the outcome is its tint and no second edge** (ux/84 ANSWER 48-f). */
body[data-plane="workspace"] .surface-section .outcome { border-color: transparent; }
body[data-plane="workspace"] .outcome-mark {
  width: 56px; height: 56px; border-radius: 50%; margin: 0 auto 14px;
  display: inline-flex; align-items: center; justify-content: center;
}
body[data-plane="workspace"] .outcome-title {
  font-size: var(--type-section); font-weight: var(--h-w-bold); color: var(--h-ink); margin: 0 0 6px;
}
body[data-plane="workspace"] .outcome-body { font-size: var(--type-body); color: var(--h-ink-2); margin: 0 0 4px; line-height: var(--h-lh-prose); }
body[data-plane="workspace"] .outcome-note {
  display: flex; gap: 11px; text-align: left; border-radius: var(--h-radius-sm);
  padding: 13px 15px; margin: 18px 0 0; font-size: var(--type-meta); line-height: var(--h-lh-prose);
}
body[data-plane="workspace"] .outcome-note strong { display: block; font-weight: var(--h-w-semi); }
body[data-plane="workspace"] .outcome .actions { justify-content: flex-end; margin-top: 16px; }


body[data-plane="workspace"] .outcome-rejected { background: var(--h-danger-soft); border-color: var(--h-danger-line); }
body[data-plane="workspace"] .outcome-rejected .outcome-mark { background: var(--h-danger-wash); color: var(--h-danger); }
body[data-plane="workspace"] .outcome-rejected .outcome-note { background: var(--h-fill-19); color: var(--h-danger-ink); }

body[data-plane="workspace"] .outcome-advisory { background: var(--h-warn-soft); border-color: var(--h-warn-line); }
body[data-plane="workspace"] .outcome-advisory .outcome-mark { background: var(--h-warn-line); color: var(--h-warn); }
body[data-plane="workspace"] .outcome-advisory .outcome-note { background: var(--h-warn-note); color: var(--h-warn-ink); }

body[data-plane="workspace"] .outcome-failed { background: var(--h-fill-10); border-color: var(--h-failed-line); }
body[data-plane="workspace"] .outcome-failed .outcome-mark { background: var(--h-fill-02); color: var(--h-failed-ink); }
body[data-plane="workspace"] .outcome-failed .outcome-note { background: var(--h-fill-05); color: var(--h-chip-ink); }

/* An empty state, on the text edge (ux/84 48-f); the lists' teaching one is below (85 §3). */
body[data-plane="workspace"] .empty-state {
  text-align: left; padding: 0; color: var(--h-muted); font-size: var(--type-lede);
}
body[data-plane="workspace"] .empty-state p { margin: 0; max-width: var(--prose); line-height: var(--h-lh-prose); }
body[data-plane="workspace"] .empty-state .actions { justify-content: flex-start; margin-top: 16px; }

/* **ux/85 §1 — the top-level lists' hero band** (Jobs, Candidates, Insights, Unresolved
   work): the site's mountain art behind the header only, anchored right and faded into the
   page toward the text and the list below, so the title, lede and fact line sit on the
   page colour (contrast measured, ≥ 4.5:1). Decorative by construction: a pseudo-element,
   nothing a reader can reach. No card and no border; the list card starts below it. */
body[data-plane="workspace"] .head-card.hero-band { position: relative; isolation: isolate;
  padding-top: 28px; padding-bottom: 24px; }
body[data-plane="workspace"] .head-card.hero-band::before {
  /* Out to the viewport's right edge and a little above the title. The art itself is
     masked — transparent toward the text, the top and the list — so no edge of the image
     is ever drawn; any opaque colour works as a mask, and the ink token is one. */
  content: ""; position: absolute; z-index: -1; pointer-events: none;
  top: -24px; bottom: 0; left: 0; right: calc(50% - 50vw);
  background: url("/static/hero.webp") right top 62% / 64% auto no-repeat;
  opacity: 0.85;
  -webkit-mask-image: linear-gradient(90deg, transparent 48%, var(--h-ink) 80%),
                      linear-gradient(180deg, transparent 0%, var(--h-ink) 24%,
                                      var(--h-ink) 62%, transparent 100%);
  -webkit-mask-composite: source-in;
  mask-image: linear-gradient(90deg, transparent 48%, var(--h-ink) 80%),
              linear-gradient(180deg, transparent 0%, var(--h-ink) 24%,
                              var(--h-ink) 62%, transparent 100%);
  mask-composite: intersect;
}
@media (max-width: 768px) {
  body[data-plane="workspace"] .head-card.hero-band::before { display: none; }
}

/* **ux/85 §3 — the teaching empty state** (Jobs, Candidates): the heading and one line on
   the text edge, the illustration right, then — for a holder — a rule and three steps. The
   step's number and icon are illustrations of the step, not heading tiles (the owner's
   ruling): the step titles are not headings. */
body[data-plane="workspace"] .teaching-empty { overflow: hidden; }
body[data-plane="workspace"] .teaching-top { display: flex; align-items: center;
  justify-content: space-between; gap: 24px; }
body[data-plane="workspace"] .teaching-top h2 { margin: 0; }
body[data-plane="workspace"] .teaching-line { margin: 6px 0 0; color: var(--h-muted);
  font-size: var(--type-body); max-width: var(--prose); }
body[data-plane="workspace"] .teaching-art { flex: 0 0 auto; width: 200px; height: auto; }
body[data-plane="workspace"] .teaching-art.jobs-empty-art { width: 360px; }
body[data-plane="workspace"] .teaching-steps { list-style: none; margin: 20px 0 0;
  padding: 20px 0 0; border-top: 1px solid var(--h-line);
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0; }
body[data-plane="workspace"] .teaching-step { position: relative; display: flex; gap: 12px;
  align-items: flex-start; padding: 0 36px 0 0; }
body[data-plane="workspace"] .teaching-step + .teaching-step { padding-left: 20px;
  border-left: 1px solid var(--h-line); }
body[data-plane="workspace"] .teaching-number { flex: 0 0 auto; width: 28px; height: 28px;
  border-radius: 50%; background: var(--h-fill-08); color: var(--h-accent);
  font-size: var(--type-meta); font-weight: var(--h-w-semi);
  display: inline-flex; align-items: center; justify-content: center; }
body[data-plane="workspace"] .teaching-icon { flex: 0 0 auto; width: 40px; height: 40px;
  border-radius: 10px; background: var(--h-fill-08); color: var(--h-accent);
  display: inline-flex; align-items: center; justify-content: center; }
body[data-plane="workspace"] .teaching-icon svg { width: 20px; height: 20px; }
body[data-plane="workspace"] .teaching-step .teaching-words { min-width: 0; }
body[data-plane="workspace"] .teaching-title { display: block; font-size: var(--type-body);
  font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .teaching-sub { display: block; margin-top: 4px;
  font-size: var(--type-meta); color: var(--h-muted); line-height: var(--h-lh-prose); }
body[data-plane="workspace"] .teaching-chevron { position: absolute; right: 10px; top: 6px;
  color: var(--h-muted); }
@media (max-width: 1023px) {
  body[data-plane="workspace"] .teaching-steps { grid-template-columns: minmax(0, 1fr);
    gap: 16px; }
  body[data-plane="workspace"] .teaching-step,
  body[data-plane="workspace"] .teaching-step + .teaching-step { padding: 0; border-left: 0; }
  body[data-plane="workspace"] .teaching-chevron { display: none; }
}
@media (max-width: 768px) {
  body[data-plane="workspace"] .teaching-art { display: none; }
}

/* The panel is a state of page 2 and lives in the fragment, so two controls in two
   regions open one panel with no script. `.start-role-open` follows `:target` in source
   order, which is how a refusal forces it open without a second mechanism. */
body[data-plane="workspace"] .start-role { display: none; }
body[data-plane="workspace"] .start-role:target { display: block; }
body[data-plane="workspace"] .start-role-open { display: block; }
body[data-plane="workspace"] .action-plus { font-size: var(--type-lede); line-height: var(--h-lh-flat); font-weight: var(--h-w-mid); }
body[data-plane="workspace"] .action svg { width: 16px; height: 16px; }
body[data-plane="workspace"] .region-head-words { flex: 1 1 auto; }
body[data-plane="workspace"] .outcome-acts { justify-content: center; }
body[data-plane="workspace"] .outcome .action-form { flex-direction: column; }
/* The section's prose measure is right for sentences and wrong for a drop target: the
   control is the region, so it takes the region's width. */
body[data-plane="workspace"] .create-job-form { display: block; width: 100%; max-width: none; }
body[data-plane="workspace"] .create-job-form > * { max-width: none; }
body[data-plane="workspace"] .start-role .field-help { max-width: var(--prose); }

/* **The override asks for the document too** ([D-1777]). *Use it anyway* had no file
   control at all, so the one way past an advisory posted nothing; it now carries a plain
   input rather than a second drop target, because two large targets under one outcome ask
   the reader to tell two identical affordances apart. Bordered like the act beside it and
   left-aligned inside, since `.outcome` centres its prose and a label centred over a
   left-aligned input reads as two elements. */
body[data-plane="workspace"] .outcome-acts .create-job-form:last-child {
  border: 1px solid var(--h-line); border-radius: 12px; padding: 16px 18px;
  text-align: left; background: var(--h-card);
}
body[data-plane="workspace"] .outcome-acts .create-job-form:last-child .field label {
  display: block; margin-bottom: 6px; font-weight: var(--h-w-semi);
}

/* An untitled draft is named by its absence: the title in italic while it is Evicora's. */
body[data-plane="workspace"] .job-untitled { color: var(--h-ink-2); font-style: italic; }

/* ==========================================================================
   7 · Readiness — the rail's checklist
   ========================================================================== */

body[data-plane="workspace"] .brief-name {
  font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); margin: 0 0 2px;
  word-break: break-word;
}
body[data-plane="workspace"] .brief-detail { font-size: var(--type-body); color: var(--h-muted); margin: 0; }
/* **A three-track row needs a measure the rail does not have.** `.assignee-row` is
   `minmax(10rem,1fr) var(--col-2xl) auto` -- 442px -- because `06 §5` authors three axes a
   reader compares **down**, and that is right in the main column. Page `3` draws `#access`
   in the rail, 222px, where the row overflowed and `.listing`'s `overflow-x:auto` turned
   it into a **contained scroller**: the name and the role were reachable and the act that
   takes somebody off the job was reachable by dragging a list sideways.

   Comparing down is what the tracks buy, and at this measure there is nothing to compare
   across -- so in the rail the row is one column and reads as a stack. The main column
   keeps its three, which is where the axes were authored to be read.

   **And in page 3's side column** (D-2031 moved `#access` from the rail into `.job-side`,
   320px): the rule stayed on `.page-rail`, so the three tracks overflowed there again and a
   reader with no act in the row met a scroller the keyboard could not reach (axe
   `scrollable-region-focusable`, found by the 29e evidence walk). Amended at D-2038. */
body[data-plane="workspace"] .page-rail .assignee-row,
body[data-plane="workspace"] #access .assignee-row {
  grid-template-columns: minmax(0, 1fr); row-gap: 4px;
}
body[data-plane="workspace"] #access .assignee-row > span:first-child { font-size: var(--type-body); }
body[data-plane="workspace"] #brief-panel .ask { margin-top: 14px; }
body[data-plane="workspace"] #brief-panel .ask-summary { text-align: left; padding: 0; }
/* **`[open]`, because `display` on a closed disclosure's child un-collapses it.**
   A browser hides a closed `details`' non-summary content through the UA sheet, and an
   author rule setting `display` on that content **wins** -- so this form, 160px of it,
   rendered under a 21px summary on every read. `#brief-panel` clips at `overflow:hidden`,
   so what a reader saw was a cut-off form and a `Replace the brief` button painted over
   by the next rail card, unclickable. The rule wanted a block-level form *once opened*,
   which is what it now says. */
body[data-plane="workspace"] #brief-panel .ask[open] .action-form { display: block; margin-top: 10px; }

/* The role as a record: label left, value right, an unset field stated rather than
   dropped. `.role-editor` is revealed by `:target` -- the same mechanism page 2's create
   panel uses, so one `Edit` opens it with no script and no second route. */
body[data-plane="workspace"] .role-facts {
  display: grid; grid-template-columns: 148px minmax(0, 1fr);
  gap: 12px 18px; margin: 0; align-items: baseline;
}
body[data-plane="workspace"] .role-facts dt {
  font-size: var(--type-body); color: var(--h-muted); margin: 0;
}
body[data-plane="workspace"] .role-facts dd {
  font-size: var(--type-lede); color: var(--h-ink); margin: 0;
}
body[data-plane="workspace"] .fact-unset { color: var(--h-muted); font-style: normal; }

/* **Every control a pointer can reach answers the pointer.** These were the four with no
   hover state: a reader could not tell an affordance from a label without pressing it. */
body[data-plane="workspace"] .listing a:hover,
body[data-plane="workspace"] .job-untitled:hover { color: var(--h-accent-hi); }
body[data-plane="workspace"] .brief-name:hover { color: inherit; }
body[data-plane="workspace"] a:focus-visible,
body[data-plane="workspace"] summary:focus-visible,
body[data-plane="workspace"] button:focus-visible {
  outline: 2px solid var(--h-accent); outline-offset: 2px; border-radius: 6px;
}
body[data-plane="workspace"] .role-editor { display: none; }
body[data-plane="workspace"] .role-editor:target { display: block; margin-top: 20px;
  border-top: 1px solid var(--h-line); padding-top: 20px; }

/* ==========================================================================
   8 · Requirements — one collection, two bands
   ========================================================================== */

/* **The row reads, then it acts.** The controls were a right-hand column beside the
   wording, so a long requirement and a short one gave their buttons different widths and
   the eye crossed the row to find them. They sit on their own line under the text now,
   left-aligned on the same edge the wording starts from, so a column of rows offers a
   column of acts. */
body[data-plane="workspace"] .requirement-text {
  font-size: var(--type-body); font-weight: var(--h-w-normal); color: var(--h-ink); margin: 0 0 4px; line-height: var(--h-lh-body);
}

/* One line of acts, aligned to the wording's edge and wrapping rather than shrinking. */
/* An opened disclosure takes the whole line, so its form is not squeezed into a chip. */



/* The settled plan, as a table — **the state where nobody is deciding anything.**

   `published.png` draws the in-force plan as a numbered table rather than as the column
   of cards `working.png` draws, and the difference is the acts: a card is a container for
   the three controls a reader opens a row to reach, and where none is offered it is a
   96px box around one sentence. Eight of those is the screen.

   **No number** (ANSWER 29e-2 (2), amended at D-2042): the headings are D-1841's,
   *Requirement · How it affects hiring · Actions*. The CSS counter drew a number assistive
   technology does not reliably read, and a position in the plan is not a fact a reader
   refers to — order implies no priority — so it is not drawn rather than promoted to a
   cell. */
body[data-plane="workspace"] .requirement-table { min-width: 0; }
body[data-plane="workspace"] .requirement-table tbody th {
  font-weight: var(--h-w-semi); color: var(--h-ink); overflow-wrap: anywhere;
}
/* The treatment column is sized for its widest answer — *Supporting* — and no wider, so
   the wording keeps the measure it is read at. */
body[data-plane="workspace"] .requirement-table tbody td { white-space: nowrap; }
/* **A record is not a list of things to open**, so the row does not light up under the
   pointer the way a directory's does. Nothing here is a destination. */
body[data-plane="workspace"] .requirement-record:hover { background: none; }

@media (max-width: 640px) {
  /* **The head is what would not fit.** `.grid thead th` is `nowrap`, sized for the
     one-word labels the registers it was written for use, and *How it affects hiring*
     held the table 53px wider than the column at 360 — a sideways drag on a record, and
     contained inside `.grid-scroll` where no document-width check sees it. */
  body[data-plane="workspace"] .requirement-table thead th { white-space: normal; }
  /* The number rejoins the wording rather than holding a column of its own at a width
     where the wording has none to spare. */
  body[data-plane="workspace"] .requirement-table tbody th { padding-left: var(--s5); }
  body[data-plane="workspace"] .requirement-table tbody th::before {
    position: static; transform: none; display: inline; margin-right: 8px;
  }
}

/* A count carries no dot, because it is not a standing. */
body[data-plane="workspace"] .pill-count::before,
body[data-plane="workspace"] .pill-count::after { content: none; display: none; }

/* Row acts share one width so the column reads as a stack of choices rather than as
   buttons of arbitrary length. */
/* **Superseded by the row layout above**, which puts the acts on their own line: these
   sized them for the right-hand column they used to sit in, and won on source order. */

/* **Asking is folded away.** The summary is a quiet affordance, never a fourth act at
   the weight of the three that dispose of the row. */
body[data-plane="workspace"] .ask-summary {
  list-style: none; cursor: pointer;
  font-size: var(--type-meta); font-weight: var(--h-w-mid); color: var(--h-accent);
  padding: 8px 2px; text-decoration: underline; text-underline-offset: 3px;
  border-radius: 6px;
}
body[data-plane="workspace"] .ask-summary:hover { color: var(--h-accent-hi); }
body[data-plane="workspace"] .ask-summary { text-decoration: underline; }

/* **The treatment control: one question, five answers.** Each answer is a row — the
   label, then what the treatment *does* on its own line. They ran together as
   `Must haveThe candidate must satisfy this requirement.` because the meaning is a
   `<small>` immediately after the label text with nothing between them. */
body[data-plane="workspace"] .field label:has(input[type="radio"]) {
  display: grid; grid-template-columns: 18px minmax(0, 1fr);
  gap: 2px 9px; align-items: start;
  margin: 0 0 9px; font-weight: var(--h-w-mid); color: var(--h-ink); cursor: pointer;
}
body[data-plane="workspace"] .field label:has(input[type="radio"]) input {
  margin: 3px 0 0; grid-row: 1; grid-column: 1; width: auto;
}
body[data-plane="workspace"] .field label:has(input[type="radio"]) small {
  grid-column: 2; font-size: var(--type-pill); color: var(--h-muted);
  font-weight: var(--h-w-normal); line-height: var(--h-lh-body);
}

/* Forms in a row's act column stack; `action-form` is inline-flex, which put a text

/* A settled requirement is one line until asked. The panel is revealed by `:target`, so

/* An act, at the size of an act -- not a full-width bar, which is the treatment a
   primary control wears and made every settled row look like it was asking for one. */

/* The authoring form is a labelled field and an act, not a field with a button jammed
   against it: `action-form` is inline-flex, so the control and the submit sat on one
   line and the submit overlapped the input at any width the field actually needs. */
body[data-plane="workspace"] #authoring .action-form { display: block; }
body[data-plane="workspace"] #authoring .field { margin-bottom: 0; max-width: var(--field); }
body[data-plane="workspace"] #authoring input[type="text"] { max-width: var(--field); }
body[data-plane="workspace"] #authoring .action { margin-top: 14px; }


/* ==========================================================================
   9 · Advisory findings — Plan review
   ========================================================================== */

/* ==========================================================================
   10 · Job administration, and the rail's own panels
   ========================================================================== */

body[data-plane="workspace"] .facts { margin: 0; }
body[data-plane="workspace"] .facts dt {
  font-size: var(--type-meta); color: var(--h-muted); margin: 0;
}
body[data-plane="workspace"] .facts dd {
  font-size: var(--type-body); color: var(--h-ink); margin: 0 0 10px;
}
body[data-plane="workspace"] .identity { display: flex; align-items: center; gap: 11px; }
body[data-plane="workspace"] .monogram {
  width: 36px; height: 36px; border-radius: 50%; background: var(--h-chip); color: var(--h-ink-2);
  font-size: var(--type-pill); font-weight: var(--h-w-semi);
  display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto;
}
body[data-plane="workspace"] .identity-name { font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); display: block; }
body[data-plane="workspace"] .identity-detail { font-size: var(--type-meta); color: var(--h-muted); }

/* **Neutral, because `advisory` is not `cautionary`.** It carries something true the
   reader should know and need not act on; `U-2` reserves the one alarm hue for
   contradiction, and an ordering caveat tinted amber spends it on a sort order. */
body[data-plane="workspace"] .advisory {
  display: flex; gap: 11px; align-items: flex-start;
  background: var(--h-fill-12); border: 1px solid var(--h-line);
  border-radius: var(--h-radius-sm); padding: 12px 14px; margin: 0 0 14px;
  font-size: var(--type-meta); color: var(--h-muted); line-height: var(--h-lh-loose);
}
body[data-plane="workspace"] .advisory-mark { color: var(--h-mark); flex: 0 0 auto; }
body[data-plane="workspace"] .advisory-body p { margin: 0; }


/* ==========================================================================
   11 · The publish confirmation — a dialog with no script

   `:target` is the whole mechanism. The control is an `<a href="#publish-job">` and the
   way out is an `<a href="#">`, so the state lives in the URL fragment and the page needs
   neither JavaScript nor a second route.
   ========================================================================== */

/* ==========================================================================
   12 · Approval — the signature, and the exit that is separated from it
   ========================================================================== */

/* ==========================================================================
   14 · The collection, as the candidate drawings arrange it — [D-1782]

   `candidates_1.png` and `start_job.png` draw one collection twice: a bordered,
   rounded container with a labelled head row and hairline-separated members, the
   member's name carrying the door and every other cell set quiet beside it.

   **Everything here is geometry.** `9`'s five tracks, `2`'s two and the sentences
   in both are the renderers' and the views'; what the drawings decide is that a
   collection has an edge, that its axis is a **label** rather than a shouted one,
   and that the row a reader opens looks like a door.
   ========================================================================== */

/* **The edge, and the scroller inside it.** `.listing` is the `overflow-x`
   container ([D-1447]) — a border on it therefore frames what scrolls rather than
   cropping it, which is exactly the relationship a contained scroller wants. */
body[data-plane="workspace"] .listing.listing-columns {
  border: 1px solid var(--h-line); border-radius: var(--h-radius-sm);
  background: var(--h-card); margin: 0;
}
body[data-plane="workspace"] .listing.listing-columns > li {
  padding: 16px 18px; border-bottom: 1px solid var(--h-line-soft);
  align-items: start;
}
body[data-plane="workspace"] .listing.listing-columns > li:last-child { border-bottom: 0; }
body[data-plane="workspace"] .listing.listing-columns > li:hover { background: var(--h-fill-20); }

/* **A column heading is a label, and a label is not a shout.** `style_primitives`
   sets these uppercase and tracked out, which is the treatment an eyebrow wears on
   a page that has one. Over a collection of people it competes with the names
   beneath it — the drawings set them in the same case as the cells they head and
   separate them by weight and colour instead. */
body[data-plane="workspace"] .listing > li.listing-head {
  text-transform: none; letter-spacing: normal;
  font-size: var(--type-meta); font-weight: var(--h-w-semi); color: var(--h-muted);
  padding: 13px 18px; border-bottom: 1px solid var(--h-line);
  background: var(--h-fill-18);
}

/* **The name is the door, and it is drawn as one.** Underlined link text through a
   column of names reads as a list of references; the drawings give the name the
   page's own ink and put the affordance in a chevron at the end of the cell, which
   is where a reader's eye already is when they have finished reading it. */
body[data-plane="workspace"] .listing.listing-columns > li > a:first-child {
  display: inline-flex; align-items: baseline; gap: 9px;
  color: var(--h-ink); font-weight: var(--h-w-semi); font-size: var(--type-body);
  text-decoration: none; border: 0;
}
body[data-plane="workspace"] .listing.listing-columns > li > a:first-child::after {
  content: "›"; color: var(--h-mark-row); font-weight: var(--h-w-normal);
  font-size: var(--type-lede); line-height: var(--h-lh-flat);
}
body[data-plane="workspace"] .listing.listing-columns > li > a:first-child:hover {
  color: var(--h-accent); text-decoration: none;
}
body[data-plane="workspace"] .listing.listing-columns > li > a:first-child:hover::after {
  color: var(--h-accent);
}

/* A proposal is not a name, and italic is the one channel a list has left once weight
   and colour are spent — the standing beside it says the same thing in words. */
body[data-plane="workspace"] .job-untitled { font-style: italic; }

/* The cells beside it: one measure, quiet, and wrapping rather than pushing. */
body[data-plane="workspace"] .listing.listing-columns > li > .quiet {
  color: var(--h-muted); line-height: var(--h-lh-body);
  min-width: 0; overflow-wrap: anywhere;
}
body[data-plane="workspace"] .listing.listing-columns > li > .pill { align-self: start; }

/* **An ordering caveat is not a warning.** The drawings tint it the palest blue in
   the system and give it no edge: it is a property of the rows below it rather than
   a card of its own, and a border round it made it the second framed thing inside a
   frame. */
body[data-plane="workspace"] .advisory {
  background: var(--h-fill-08); border-color: transparent;
}
/* **A page-level note stands in the column like a card** (`66 §2`): its words on the one
   text edge, its mark in the mark column — the geometry of every card around it — rather
   than 40px in from both. A note inside a card keeps its own inset. */
body[data-plane="workspace"] .rail-main > .advisory {
  position: relative; margin: 0 0 var(--card-gap);
  padding-left: calc(var(--s5) + var(--region-mark));
}
body[data-plane="workspace"] .rail-main > .advisory > .advisory-mark {
  position: absolute; left: var(--s5);
}
/* **A page-level empty state is spaced like a card** (`66 §5`): `17`'s *Nothing is
   unresolved* kept its own 16px margins, so it sat 40 below the head card and 16 above the
   next region. */
body[data-plane="workspace"] .rail-main > .empty-state { margin: 0 0 var(--card-gap); }

/* --------------------------------------------------------------------------
   The drop target — the frame round the real input, styled

   `D-1618` refused the label-and-hidden-input version: it looks like a drop target
   and accepts a drop only with script, and `default-src 'none'` means there is
   none. So the frame goes round the control that genuinely takes the file, and
   everything below is that control wearing the drawing's clothes.
   -------------------------------------------------------------------------- */
/* **ux/85 ANSWER 54-d — the one uploader** (the owner's master; superseding 48-f's strip):
   9's panel, 2's brief, 10's *Add a document* and 3's replacement all draw this zone. A
   dashed, tinted, full-width target, its contents stacked and centred: the cloud, the
   prompt (the input's label), the native control, and two facts. */
body[data-plane="workspace"] .uploader-zone {
  display: flex; flex-direction: column; align-items: center; gap: 10px;
  box-sizing: border-box; width: 100%; max-width: none; margin: 18px 0;
  padding: 28px var(--s5) 24px; text-align: center;
  border: 1.5px dashed var(--h-line-dashed); border-radius: 12px; background: var(--h-fill-17);
}
body[data-plane="workspace"] .uploader-cloud { display: inline-flex; color: var(--h-accent); }
body[data-plane="workspace"] .uploader-cloud svg { width: 38px; height: 38px; }
body[data-plane="workspace"] .uploader-prompt {
  display: block; margin: 0; cursor: pointer; font-size: var(--type-lede);
  font-weight: var(--h-w-semi); color: var(--h-ink);
}
/* **No drag where nothing can be dragged** (`66 §6`): touch, or a phone's width. */
body[data-plane="workspace"] .uploader-prompt .prompt-touch { display: none; }
@media (max-width: 48rem), (pointer: coarse) {
  body[data-plane="workspace"] .uploader-prompt .prompt-pointer { display: none; }
  body[data-plane="workspace"] .uploader-prompt .prompt-touch { display: inline; }
}
/* **The chosen file's name, beside its button** (the owner's findings: *product_…_joshi.pdf*,
   then a name too small and too far to read): the control is **sized to its content**
   (`field-sizing`) and centred in the zone, so *[Choose file] {name}* reads as one unit on
   one line, the name at body size in ink. A long name **wraps rather than being cut**,
   beneath the button — at the start edge, where Chromium's own sheet pins a file input's
   text beyond an author's reach. */
body[data-plane="workspace"] .uploader-control {
  display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 8px 12px;
  max-width: 100%;
}
/* **A drop anywhere in the zone is a real drop** (107, INSTRUCTION 90): the input covers the
   whole zone — anchored to its foot with a tall top padding, clipped by the zone — so a file
   dropped anywhere lands in it natively and never opens in the browser. Its own text, the
   chosen name, sits centred on the zone's last line; nothing is drawn there until a file is
   chosen (the required input is `:invalid`). */
body[data-plane="workspace"] .uploader-zone { position: relative; overflow: hidden; padding-bottom: 52px; }
body[data-plane="workspace"] .uploader-zone input[type="file"] {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 1;
  display: block; width: 100%; max-width: none; height: auto; box-sizing: border-box;
  margin: 0; border: 0; padding: 1000px 16px 16px; background: transparent; cursor: pointer;
  text-align: center; text-align-last: center;
  /* **The chosen name, clearly** (the owner, 2026-09-27): semibold ink one step above body,
     so the file a reader picked is the thing they see. */
  font-size: var(--type-card-title); font-weight: var(--h-w-semi); color: var(--h-ink);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
body[data-plane="workspace"] .uploader-zone input[type="file"]:invalid { color: transparent; }
/* The ring is the zone's, and only for a keyboard. */
body[data-plane="workspace"] .uploader-zone:has(input[type="file"]:focus-visible) { box-shadow: var(--focus); }
/* **107: page 3's compact zone** — the cloud, the prompt with its link, one facts line. */
body[data-plane="workspace"] .uploader-compact { gap: 6px; padding-top: 18px; }
body[data-plane="workspace"] .uploader-prompt-compact { font-size: var(--type-meta); font-weight: var(--h-w-semi); }
body[data-plane="workspace"] .uploader-link { color: var(--h-accent); }
body[data-plane="workspace"] .uploader-link .choose-again { display: none; }
body[data-plane="workspace"] .uploader-zone:has(input[type="file"]:valid) .uploader-link .choose-first { display: none; }
body[data-plane="workspace"] .uploader-zone:has(input[type="file"]:valid) .uploader-link .choose-again { display: inline; }
body[data-plane="workspace"] .uploader-facts-line:not(#cand-x) { margin: 0; font-size: var(--type-meta); color: var(--h-muted); }
/* **86 ANSWER 86-i: the selector is the label, not the browser's button** — whose words
   no stylesheet can change. The native button is hidden; the label opens the same picker. */
body[data-plane="workspace"] .uploader-zone input[type="file"]::file-selector-button { display: none; }
body[data-plane="workspace"] .uploader-zone input[type="file"]:focus-visible {
  outline: none; border-color: transparent; box-shadow: none; }
body[data-plane="workspace"] .uploader-choose {
  display: inline-flex; align-items: center; padding: 10px 22px; cursor: pointer;
  border: 1px solid var(--h-accent); border-radius: var(--h-radius-sm);
  font-size: var(--type-body); font-weight: var(--h-w-semi); white-space: nowrap;
}
/* The ring is the selector's, and only for a keyboard. */
body[data-plane="workspace"] .uploader-control:has(input[type="file"]:focus-visible) .uploader-choose {
  box-shadow: var(--focus); }
/* **One filled button at a time, by the input's own validity** — no script, and the one
   named exception to 86-g's filled blue (86-i). Nothing chosen (the required input is
   `:invalid`): *Choose file*, filled, and the submit held back. A file chosen: *Choose
   another file* in a blue outline, and the submit the only filled button. */
body[data-plane="workspace"] .uploader-choose .choose-again { display: none; }
body[data-plane="workspace"] .uploader-control:has(input[type="file"]:valid) .choose-first { display: none; }
body[data-plane="workspace"] .uploader-control:has(input[type="file"]:valid) .choose-again { display: inline; }
body[data-plane="workspace"] .uploader-control:has(input[type="file"]:invalid) .uploader-choose {
  background: var(--h-accent); color: var(--h-card);
}
body[data-plane="workspace"] .uploader-control:has(input[type="file"]:invalid) .uploader-choose:hover {
  border-color: var(--accent-hover); background: var(--accent-hover); color: var(--h-card);
}
body[data-plane="workspace"] .uploader-control:has(input[type="file"]:valid) .uploader-choose {
  background: var(--h-card); color: var(--h-accent);
}
body[data-plane="workspace"] .uploader-control:has(input[type="file"]:valid) .uploader-choose:hover {
  background: var(--h-accent-soft); color: var(--h-accent-hi);
}
/* **Held back, and still legible**: a faded button fails contrast, and this one is not a
   disabled control (that needs script) — so it is drawn quiet, in the muted ink on a tint
   (≥ 4.5:1), and ignores the pointer. */
body[data-plane="workspace"] form:has(.uploader-zone input[type="file"]:invalid)
  button[type="submit"] {
  background: var(--h-fill-08); border-color: var(--h-fill-08); color: var(--h-muted);
  pointer-events: none; cursor: default; box-shadow: none;
}
body[data-plane="workspace"] form:has(.uploader-zone input[type="file"]:valid)
  button[type="submit"] {
  background: var(--h-accent); border-color: var(--h-accent); color: var(--h-card);
}
body[data-plane="workspace"] .uploader-facts {
  display: flex; justify-content: center; gap: 0; margin: 8px 0 0;
}
body[data-plane="workspace"] .uploader-fact {
  display: flex; align-items: flex-start; gap: 10px; padding: 0 28px; text-align: left;
}
body[data-plane="workspace"] .uploader-fact + .uploader-fact { border-left: 1px solid var(--h-line); }
body[data-plane="workspace"] .uploader-fact-mark { display: inline-flex; color: var(--h-muted); }
body[data-plane="workspace"] .uploader-fact-mark svg { width: 18px; height: 18px; }
body[data-plane="workspace"] .uploader-fact b {
  display: block; font-size: var(--type-meta); font-weight: var(--h-w-semi); color: var(--h-ink);
}
body[data-plane="workspace"] .uploader-fact b + span {
  display: block; font-size: var(--type-meta); color: var(--h-muted);
}
@media (max-width: 48rem) {
  body[data-plane="workspace"] .uploader-zone { padding: var(--s5) var(--s3); }
  body[data-plane="workspace"] .uploader-facts { flex-direction: column; gap: 10px; }
  body[data-plane="workspace"] .uploader-fact { padding: 0; }
  body[data-plane="workspace"] .uploader-fact + .uploader-fact { border-left: 0; }
}
/* **The uploader card's illustration**, top-right of the card it heads, clear of the
   heading's words; decorative, and gone at a phone's width. */
body[data-plane="workspace"] section:has(> .uploader-art) { position: relative; }
body[data-plane="workspace"] section:has(> .uploader-art) > .region-head {
  padding-right: 230px; min-height: 108px; box-sizing: border-box; }
body[data-plane="workspace"] .uploader-art {
  position: absolute; top: 14px; right: 20px; width: 180px; height: auto; pointer-events: none;
}
@media (max-width: 48rem) {
  body[data-plane="workspace"] .uploader-art { display: none; }
  body[data-plane="workspace"] section:has(> .uploader-art) > .region-head {
    padding-right: 0; min-height: 0; }
}

/* **The standing band, and its glyph.** The band states what the collection below costs;
   the glyph is what separates it from the lede above it without giving it a ground, a
   rule or a colour of its own — none of which it has earned, because nothing about a
   budget with headroom is an event. */
body[data-plane="workspace"] .head-card-below .standing-band {
  display: flex; align-items: baseline; gap: 11px;
}
body[data-plane="workspace"] .band-mark { color: var(--h-mark); flex: 0 0 auto; }
/* The words are one flex item, so the bold figure sits in the sentence (ux/85 §1). */
body[data-plane="workspace"] .band-words { min-width: 0; }
body[data-plane="workspace"] .band-figure { font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .band-mark svg { width: 17px; height: 17px; }

/* **`9`'s five tracks, re-measured for the drawing's proportions** ([D-1782]).
   `style_workspace` sizes them for a row whose longest cell is a short phrase; the
   authored `archived` sentence is 137 characters, and at `var(--col-md)` the Status
   column set it eleven lines deep beside a one-line Evaluation cell. The measure is the
   thing being balanced here — every track takes a floor wide enough to hold the longest
   authored sentence that can land in it, and the fractions divide what is left. */
body[data-plane="workspace"] .listing.listing-columns.candidate-row {
  grid-template-columns: minmax(8.5rem, 1.6fr) minmax(6rem, 0.7fr) minmax(8.5rem, 1fr)
                         minmax(9rem, 1.1fr);
}

/* ==========================================================================
   15 · The object workspace, as `candidate_detail.png` arranges it — [D-1784]

   Eleven regions in two columns: the evidence narrative down the left, what the
   reader does about it beside them. Everything here is geometry — the sentences,
   the order and the rail's membership are the renderer's and `06 §6d`'s.
   ========================================================================== */

/* **A fact is a row, and rows are separated.** `style_shell` draws `.facts` as a
   two-track grid with no rule between entries, which reads as one block of text
   the moment a value wraps — and on this page every value is a sentence. The
   drawing gives each pair its own line with a hairline under it, so *Status* and
   its meaning cannot be read as belonging to the pair below. */
body[data-plane="workspace"] :not(.page-rail) > .surface-section > .facts {
  /* **No column gap, because the gap is where the rule breaks.** A `20px` gutter
     between two bordered cells draws two underlines with a hole between them; the
     separation a reader needs is between *rows*, and the space between label and
     value is the label's own padding. */
  display: grid; grid-template-columns: minmax(9rem, 0.32fr) minmax(0, 1fr);
  column-gap: 0; row-gap: 0;
}
body[data-plane="workspace"] :not(.page-rail) > .surface-section > .facts > dt,
body[data-plane="workspace"] :not(.page-rail) > .surface-section > .facts > dd {
  padding: 11px 0; border-top: 1px solid var(--h-line-soft); margin: 0;
  line-height: var(--h-lh-body);
}
body[data-plane="workspace"] :not(.page-rail) > .surface-section > .facts > dt {
  color: var(--h-muted); font-weight: var(--h-w-normal); padding-right: 20px;
}
body[data-plane="workspace"] :not(.page-rail) > .surface-section > .facts > dd { color: var(--h-ink); }

/* **An absence is not a fault, and not a gap either**: Evicora has not reached this
   conclusion, and that is a fact about the release rather than about the person. A
   sentence in the card, with no box of its own (ux/84 ANSWER 48-f: cards don't nest). */
body[data-plane="workspace"] .surface-section > .absence,
body[data-plane="workspace"] .surface-section > .empty-state {
  background: none; border: 0; padding: 0; margin: 0;
  color: var(--h-muted); line-height: var(--h-lh-loose);
  text-align: left;
}

/* The claims region's audit layer — the whole population, each with its excerpt. */
body[data-plane="workspace"] #claims article.claim {
  padding: 14px 0; border-top: 1px solid var(--h-line-soft);
}
body[data-plane="workspace"] #claims article.claim:first-of-type { border-top: 0; padding-top: 0; }
body[data-plane="workspace"] #claims article.claim:last-of-type { padding-bottom: 0; }

/* Applications: the job is the door, the stage is a lozenge beside it. */
body[data-plane="workspace"] .listing > li.application-row {
  grid-template-columns: minmax(0, 1fr) auto auto; gap: 0 14px;
  padding: 13px 0; border-bottom: 1px solid var(--h-line-soft); align-items: center;
}
body[data-plane="workspace"] .listing > li.application-row:last-child { border-bottom: 0; }
body[data-plane="workspace"] .listing > li.application-row:hover { background: none; }
body[data-plane="workspace"] .listing > li.application-row > a {
  display: inline-flex; align-items: baseline; gap: 9px;
  color: var(--h-ink); font-weight: var(--h-w-semi); font-size: var(--type-body);
  text-decoration: none; border: 0;
}
body[data-plane="workspace"] .listing > li.application-row > a::after {
  content: "›"; color: var(--h-mark-row); font-weight: var(--h-w-normal);
  font-size: var(--type-lede); line-height: var(--h-lh-flat);
}
body[data-plane="workspace"] .listing > li.application-row > a:hover { color: var(--h-accent); }

/* **One link per role, and each carries the version** ([D-1765] `R2`). The drawing
   asks for a `<select>` of roles and a button, which is the control that ruling
   removed: one press committed two durable pins from a chooser naming neither. A
   row per role is what replaced it, and it is drawn as a row. */
body[data-plane="workspace"] .roles-to-match { display: flex; flex-direction: column; gap: 8px; }
body[data-plane="workspace"] .roles-to-match > li {
  display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap;
  border: 0; border-radius: 0; padding: var(--s3) 0; background: none;
}
/* Rows, not cards in a card (ux/84 ANSWER 48-f). */
body[data-plane="workspace"] .roles-to-match > li + li { border-top: 1px solid var(--h-line); }
body[data-plane="workspace"] .roles-to-match > li > a {
  color: var(--h-ink); font-weight: var(--h-w-semi); font-size: var(--type-body);
  text-decoration: none; border: 0;
}
body[data-plane="workspace"] .roles-to-match > li > a:hover { color: var(--h-accent); }
body[data-plane="workspace"] .roles-to-match .quiet { color: var(--h-muted); margin: 0;
}

/* **ux/76 §1: the candidate's one next action, under the standing sentence.** One filled
   control, or a disclosure of *Check fit* links where several roles could be read; the
   sentence under it is the act's reason (ANSWER 35-a (1)). Left-aligned at its own width:
   a filled bar across the header would read as a banner rather than a control. */
body[data-plane="workspace"] .next-action {
  display: grid; gap: 8px; justify-items: start; margin-top: 16px; min-width: 0;
}
body[data-plane="workspace"] .next-action > .action-form { margin: 0; }
body[data-plane="workspace"] .next-action > .quiet { color: var(--h-muted); margin: 0; }
body[data-plane="workspace"] .fit-chooser { display: grid; gap: 8px; min-width: 0; }
body[data-plane="workspace"] .fit-chooser > summary { list-style: none; cursor: pointer;
  justify-self: start; }
body[data-plane="workspace"] .fit-chooser > summary::-webkit-details-marker { display: none; }

/* --------------------------------------------------------------------------
   The rail, where the acts are

   Three shapes share it — a stack of acts, a form that asks for one thing, and a
   form that asks for two. All three are full-measure, because a control that is
   narrower than the card it sits in reads as the lesser of a pair that is not there.
   -------------------------------------------------------------------------- */
body[data-plane="workspace"] .page-rail .actions {
  display: flex; flex-direction: column; align-items: stretch; gap: 9px;
}
body[data-plane="workspace"] .page-rail .actions > form,
body[data-plane="workspace"] .page-rail .action-form { display: block; width: 100%; }
body[data-plane="workspace"] .page-rail .actions .action,
body[data-plane="workspace"] .page-rail .action-form button { width: 100%; }

body[data-plane="workspace"] .page-rail form { margin: 0; }
body[data-plane="workspace"] .page-rail form + form { margin-top: 10px; }
body[data-plane="workspace"] .page-rail label {
  display: block; font-size: var(--type-meta); color: var(--h-ink-2);
  font-weight: var(--h-w-mid); margin: 14px 0 6px;
}
body[data-plane="workspace"] .page-rail input[type="text"],
body[data-plane="workspace"] .page-rail input[type="email"],
body[data-plane="workspace"] .page-rail input[type="date"],
body[data-plane="workspace"] .page-rail input[type="file"],
body[data-plane="workspace"] .page-rail select,
body[data-plane="workspace"] .page-rail textarea {
  width: 100%; box-sizing: border-box;
  border: 1px solid var(--h-line-strong); border-radius: var(--h-radius-sm);
  padding: 10px 12px; font-size: var(--type-body); font-family: inherit;
  color: var(--h-ink); background: var(--h-card);
}
body[data-plane="workspace"] .page-rail .field-help,
body[data-plane="workspace"] .page-rail .quiet { font-size: var(--type-meta); color: var(--h-muted); }
/* A card's own sentence, before anything it asks for. */
body[data-plane="workspace"] .page-rail > section > .sentence,
body[data-plane="workspace"] .page-rail > section > .remedy {
  color: var(--h-muted); line-height: var(--h-lh-loose); margin: 0 0 4px;
}
/* **A remedy is a remedy wherever it is read** ([D-1908]). `.claim-row .remedy` draws it
   at `--h-t-help` and this drew it at `--h-t-body`, which made *what would change this*
   a different size in the rail from the one it is in the column. */
body[data-plane="workspace"] .page-rail > section > .remedy { font-size: var(--type-meta); }



/* --------------------------------------------------------------------------
   `article.claim` — one card shape for two regions

   `11` draws its requirement coverage and its evidence through the same element,
   and `application_processed.png` draws both as bordered cards. The requirement's
   weight sits on the title's line as a lozenge, because *Must have* is a property
   of the **role** and the hiring plan has drawn it that way since it was built.
   -------------------------------------------------------------------------- */
body[data-plane="workspace"] .surface-section article.claim {
  background: var(--h-fill-16); border: 1px solid var(--h-line);
  border-radius: var(--h-radius-sm); padding: 15px 17px; margin: 0 0 12px;
}
body[data-plane="workspace"] .surface-section article.claim:last-child { margin-bottom: 0; }
body[data-plane="workspace"] .surface-section article.claim > h3 {
  font-size: var(--type-card-title); font-weight: var(--h-w-semi); color: var(--h-ink);
  margin: 0 0 4px; line-height: var(--h-lh-snug);
}
body[data-plane="workspace"] .claim-head {
  display: flex; align-items: flex-start; justify-content: space-between; gap: 16px;
}
body[data-plane="workspace"] .claim-head > h3 { margin: 0; }
body[data-plane="workspace"] .surface-section article.claim > p {
  margin: 4px 0 0; font-size: var(--type-body); color: var(--h-ink-2);
  line-height: var(--h-lh-body);
}
body[data-plane="workspace"] .surface-section article.claim > .quiet {
  color: var(--h-muted);
}
body[data-plane="workspace"] .surface-section article.claim > .claim-ask {
  display: inline-block; margin-top: 7px; color: var(--h-link);
  font-size: var(--type-body); text-decoration: none;
}
body[data-plane="workspace"] .surface-section article.claim > .claim-ask:hover {
  text-decoration: underline; color: var(--h-link);
}
/* Page 11's clarifications (E-151, ANSWER 24): the question is the link, clamped to two
   lines on screen only — the markup keeps the whole question, so its accessible name does. */
body[data-plane="workspace"] .clarification-list {
  list-style: none; margin: 0; padding: 0;
}
body[data-plane="workspace"] .clarification-row + .clarification-row {
  margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--h-line);
}
body[data-plane="workspace"] .clarification-question {
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2;
  line-clamp: 2; overflow: hidden; overflow-wrap: anywhere;
  color: var(--h-link); font-size: var(--type-body); line-height: var(--h-lh-body);
}
body[data-plane="workspace"] .clarification-meta {
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
  margin: 6px 0 0; font-size: var(--type-body);
}
/* The quotation the claim rests on, and the one thing on the card with a rule of its
   own — because it is not the product's sentence, it is the candidate's document's. */
body[data-plane="workspace"] .claim .excerpt {
  margin: 10px 0 0; padding: 0 0 0 13px; border-left: 2px solid var(--h-accent-soft);
}
body[data-plane="workspace"] .claim .excerpt blockquote {
  margin: 0; font-size: var(--type-body); color: var(--h-ink); line-height: var(--h-lh-body);
}
body[data-plane="workspace"] .claim .excerpt figcaption {
  margin-top: 3px; font-size: var(--type-meta); color: var(--h-muted);
}
body[data-plane="workspace"] .claim .evidence > .absence {
  margin: 10px 0 0; background: none; border: 0; padding: 0;
  font-size: var(--type-body); color: var(--h-muted); text-align: left;
}

/* **ux/76 §3: the compact evidence** — one row per claim, grouped by where it stands, the
   state meanings once in a legend. The group head is a quiet sub-heading, not a card: the
   rows are one list read top to bottom, and the pills are the only per-row state. */
body[data-plane="workspace"] .evidence-row { padding: 12px 0; border-top: 1px solid var(--h-line); min-width: 0; }
body[data-plane="workspace"] .evidence-claim {
  margin: 0; font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink);
  line-height: var(--h-lh-body); overflow-wrap: anywhere;
}
body[data-plane="workspace"] .evidence-pills {
  display: flex; flex-wrap: wrap; gap: 6px; margin: 6px 0 0;
}
body[data-plane="workspace"] .evidence-source { margin: 6px 0 0; }
body[data-plane="workspace"] .evidence-source > summary {
  cursor: pointer; color: var(--h-link); font-size: var(--type-meta); overflow-wrap: anywhere;
}
body[data-plane="workspace"] .evidence-source .evidence { margin: 0; padding: 0; }
body[data-plane="workspace"] .evidence-source .excerpt {
  margin: 8px 0 0; padding: 0 0 0 13px; border-left: 2px solid var(--h-accent-soft);
}
body[data-plane="workspace"] .evidence-source .excerpt blockquote {
  margin: 0; font-size: var(--type-body); color: var(--h-ink); line-height: var(--h-lh-body);
}
body[data-plane="workspace"] .evidence-source .excerpt figcaption {
  margin-top: 3px; font-size: var(--type-meta); color: var(--h-muted);
}
body[data-plane="workspace"] .evidence-row > .quiet,
body[data-plane="workspace"] .evidence-row > .remedy {
  margin: 6px 0 0; font-size: var(--type-meta); color: var(--h-muted);
}
body[data-plane="workspace"] .evidence-onward { margin: 12px 0 0; font-size: var(--type-meta); }
body[data-plane="workspace"] .evidence-onward a { display: inline-flex; align-items: center; gap: 4px; }

/* The address's absence, said as the row's value, in quiet ink. */
body[data-plane="workspace"] .contact-absent { color: var(--h-muted); }
body[data-plane="workspace"] .contact-act { margin: 8px 0 0; }
body[data-plane="workspace"] .contact-act > summary,
body[data-plane="workspace"] .contact-earlier > summary {
  cursor: pointer; color: var(--h-link); font-size: var(--type-meta);
}
body[data-plane="workspace"] .contact-act > .action-form { margin: 8px 0 0; }
/* **106-e: the intake's two quiet acts under page 3's subline** — Contact's disclosure, side
   by side; an opened one takes the row. */
body[data-plane="workspace"] .intake-acts { display: flex; flex-wrap: wrap; gap: 0 24px; }
body[data-plane="workspace"] .intake-acts > .contact-act[open] { flex-basis: 100%; }
/* **106-g: the evaluation's progress card** — quiet: a static mark, the words, and *Check
   again* as a blue outline (a plain GET). */
body[data-plane="workspace"] .eval-progress {
  display: flex; align-items: center; gap: 16px; margin: 14px 0 0; padding: 14px 18px;
  border: 1px solid var(--h-line); border-radius: 12px; background: var(--h-card);
}
body[data-plane="workspace"] .eval-progress-mark {
  flex: 0 0 40px; display: inline-flex; align-items: center; justify-content: center;
  width: 40px; height: 40px; border-radius: 50%; background: var(--h-accent-soft); color: var(--h-accent);
}
body[data-plane="workspace"] .eval-progress-mark .icon { width: 20px; height: 20px; }
body[data-plane="workspace"] .eval-progress-words { flex: 1; min-width: 0; margin: 0; font-size: var(--type-body); color: var(--h-muted); }
body[data-plane="workspace"] .eval-progress-words b { color: var(--h-ink); font-weight: var(--h-w-semi); margin-right: 6px; }
body[data-plane="workspace"] .eval-check {
  display: inline-flex; align-items: center; height: 40px; padding: 0 18px; box-sizing: border-box;
  border: 1.5px solid var(--h-accent); border-radius: 8px; color: var(--h-accent);
  font-weight: var(--h-w-semi); text-decoration: none; white-space: nowrap;
}
body[data-plane="workspace"] .eval-check:hover { background: var(--h-accent-soft); color: var(--h-accent-hi); }
@media (max-width: 48rem) {
  body[data-plane="workspace"] .eval-progress { flex-wrap: wrap; }
}
/* **106-c: *Already added as {name}.*** — carried on every page 3, shown only where a stale
   page 7's second press lands (`#already-added`). A neutral notice: no tone, no act. */
body[data-plane="workspace"] .already-added { display: none; }
body[data-plane="workspace"] .already-added:target {
  display: block; margin: 12px 0 0; padding: 10px 14px; border-radius: var(--h-radius-sm);
  background: var(--h-accent-soft); color: var(--h-ink); font-size: var(--type-body);
}

body[data-plane="workspace"] .contact-earlier { border-top: 1px solid var(--h-line); padding: 12px 0 0; }
body[data-plane="workspace"] .instruction-choice-label { margin: 8px 0 4px; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .instruction-choice { display: flex; flex-wrap: wrap; gap: 8px; }

/* **ux/76 §4: a Requirement reading per application, closed until asked for.** The summary
   names the job; opened, it holds page 11's rows for that application's pinned pair. */
body[data-plane="workspace"] .reading-disclosure { border-top: 1px solid var(--h-line); padding: 12px 0; min-width: 0; }
body[data-plane="workspace"] .reading-disclosure > summary {
  cursor: pointer; font-weight: var(--h-w-semi); color: var(--h-ink); overflow-wrap: anywhere;
}
body[data-plane="workspace"] .reading-disclosure[open] > summary { margin-bottom: 8px; }

/* **A reversibility window is a fact, not a warning** — the drawing sets it as one
   quiet line under the standing it qualifies, and a bordered tinted block round it
   spends `U-2`'s alarm on a deadline that has not arrived. */
body[data-plane="workspace"] .reversibility {
  display: flex; align-items: center; gap: 9px; margin: 10px 0 0;
  font-size: var(--type-meta); color: var(--h-muted);
}
body[data-plane="workspace"] .reversibility-mark { color: var(--h-mark); flex: 0 0 auto; }
body[data-plane="workspace"] .reversibility-mark svg { width: 15px; height: 15px; }

/* The withheld card: what you cannot do, why, and who can change it. It is rendered
   rather than greyed out (`RF-2`), so it takes a ground of its own and no edge — an
   edge would make it look like a control. */
body[data-plane="workspace"] .withheld {
  display: flex; align-items: flex-start; gap: 11px;
  background: var(--h-fill-11); border-radius: var(--h-radius-sm);
  padding: 13px 15px; margin: 0 0 9px;
}
body[data-plane="workspace"] .withheld:last-child { margin-bottom: 0; }
body[data-plane="workspace"] .withheld-mark { color: var(--h-mark); flex: 0 0 auto; }
body[data-plane="workspace"] .withheld-label {
  display: block; font-size: var(--type-body); font-weight: var(--h-w-semi);
  color: var(--h-ink-2);
}
body[data-plane="workspace"] .withheld-why,
body[data-plane="workspace"] .withheld-who {
  margin: 3px 0 0; font-size: var(--type-meta); color: var(--h-muted);
  line-height: var(--h-lh-body);
}


/* --------------------------------------------------------------------------
   `12` · the Decision — a card per act, and no colour on any of them — [D-1787]

   `decision.png` draws each act that reads fields as its own panel, which is right:
   five forms stacked on one ground read as one long form with five buttons in it.
   It also colours them **by how serious the word sounds** — rejection red, hold
   amber, withdrawal blue, transfer purple, owner green — and that is the one thing
   `L-5` settles: consequence vocabulary follows **operation semantics, not
   severity**. `RejectApplication` is `reversible: yes` while its undo window stands,
   and five hues rank five acts against each other on an axis nothing computed.

   So every act card takes **one** ground, and the licensed colour on this page stays
   where `D-1593` put it: on the **basis layer**, which separates evidence from
   constraint rather than danger from safety.

   No mark and no title per card either. `decision.png` gives each one both, and the
   act's authored label **is** its name — a title in one voice over a button in
   another states the act twice, differently.
   -------------------------------------------------------------------------- */
body[data-plane="workspace"] .decision-bands .action-form.reject-form,
body[data-plane="workspace"] .decision-bands .action-form.hold-form,
body[data-plane="workspace"] .decision-bands .action-form.withdraw-form,
body[data-plane="workspace"] .decision-bands .action-form.transfer-form,
body[data-plane="workspace"] .decision-bands .action-form.decision-owner-form {
  display: block; background: var(--h-fill-16); border: 1px solid var(--h-line);
  border-radius: var(--h-radius-sm); padding: 16px 18px; margin: 12px 0 0;
}
body[data-plane="workspace"] .decision-bands .action-form .field { margin: 0 0 12px; }
body[data-plane="workspace"] .decision-bands .action-form .field:last-of-type { margin-bottom: 14px; }
body[data-plane="workspace"] .decision-bands .action-form label {
  display: block; font-size: var(--type-meta); color: var(--h-ink-2);
  font-weight: var(--h-w-mid); margin: 0 0 6px;
}
body[data-plane="workspace"] .decision-bands .action-form select,
body[data-plane="workspace"] .decision-bands .action-form input[type="text"],
body[data-plane="workspace"] .decision-bands .action-form textarea {
  box-sizing: border-box; max-width: var(--field); width: 100%;
  border: 1px solid var(--h-line-strong); border-radius: var(--h-radius-sm);
  padding: 10px 12px; font-family: inherit;
  color: var(--h-ink); background: var(--h-card);
}
body[data-plane="workspace"] .decision-bands .action-form > .sentence {
  margin: 0 0 12px; color: var(--h-muted);
  line-height: var(--h-lh-loose);
}
/* The acts with no fields keep their row above the cards. */


/* --------------------------------------------------------------------------
   `14` · the clarification — the attempts as a timeline — [D-1788]

   The drawing draws the delivery log as a sequence: when it was tried on the left,
   what happened on the right. This page can afford that, and `11` and `12` cannot —
   `attempts[].attempted_at_text` is a **real field** here, where their drawings'
   date columns were invented plumbing.

   **No green dot on `delivered`.** `DL-1` exists so that delivered is never read as
   answered, and the greenest thing on this screen must not be the delivery. The
   authored sentences already tell the two apart.
   -------------------------------------------------------------------------- */
body[data-plane="workspace"] .listing > li.attempt-row {
  grid-template-columns: minmax(8rem, 0.28fr) minmax(0, 1fr);
  gap: 2px 20px; padding: 14px 0; align-items: baseline;
  border-bottom: 1px solid var(--h-line-soft);
}
body[data-plane="workspace"] .listing > li.attempt-row:last-of-type { border-bottom: 0; }
body[data-plane="workspace"] .listing > li.attempt-row:hover { background: none; }
body[data-plane="workspace"] .attempt-row > span:first-child {
  grid-row: 1 / span 2; font-size: var(--type-body); color: var(--h-muted);
  font-weight: var(--h-w-semi);
}
body[data-plane="workspace"] .attempt-row > span:nth-child(2) {
  font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink);
}
body[data-plane="workspace"] .attempt-row > .quiet { color: var(--h-muted);
}

/* The chase is a panel inside the log, because it is what a reader does about it. */
body[data-plane="workspace"] .resend-form {
  display: block; background: var(--h-fill-16); border: 1px solid var(--h-line);
  border-radius: var(--h-radius-sm); padding: 16px 18px; margin: 16px 0 0;
}
body[data-plane="workspace"] .resend-form .field { margin: 0 0 12px; }
body[data-plane="workspace"] .resend-form label {
  display: block; font-size: var(--type-meta); color: var(--h-ink-2);
  font-weight: var(--h-w-mid); margin: 0 0 6px;
}
body[data-plane="workspace"] .resend-form input[type="email"] {
  box-sizing: border-box; max-width: var(--field); width: 100%;
  border: 1px solid var(--h-line-strong); border-radius: var(--h-radius-sm);
  padding: 10px 12px; font-size: var(--type-body); font-family: inherit;
  color: var(--h-ink); background: var(--h-card);
}
body[data-plane="workspace"] .field-choice {
  display: flex; align-items: center; gap: 9px; margin: 0 0 14px;
}
body[data-plane="workspace"] .field-choice label {
  margin: 0; font-size: var(--type-body); color: var(--h-ink-2); font-weight: var(--h-w-normal);
}

/* **A quotation is somebody else's words and is set as a card of them.** The question
   is the organisation's own and the answer is the candidate's; a left rule on the
   page's own ground read as an aside the page was making. */
body[data-plane="workspace"] blockquote.question,
body[data-plane="workspace"] blockquote.answer {
  margin: 0; background: var(--h-fill-16); border: 1px solid var(--h-line);
  border-left: 3px solid var(--h-accent-soft); border-radius: var(--h-radius-sm);
  padding: 15px 17px;
}
body[data-plane="workspace"] blockquote.question p,
body[data-plane="workspace"] blockquote.answer p {
  margin: 0; font-size: var(--type-body); color: var(--h-ink);
  line-height: var(--h-lh-body);
}


/* --------------------------------------------------------------------------
   `9a` · the write-up — one card per account, and two attribution rows — [D-1788]

   **This is the one page where mis-attributing the content is worse than omitting
   it**, and the geometry is arranged against exactly that: the interviewer's own
   words are set as a quotation, the qualification that they are *an account, not a
   finding* sits under them rather than over them, and the attribution is **two
   labelled rows** — never joined, never suppressed when they agree, because *the
   observer wrote this up themselves* and *nobody recorded who wrote it up* must not
   render alike ([D-623]).
   -------------------------------------------------------------------------- */
/* **Rows of the region's card, not cards inside it** (ux/84 ANSWER 48-f: cards don't
   nest): each write-up is separated by a rule; its quoted note keeps its quote. */
body[data-plane="workspace"] .listing > li.observation {
  display: block; background: none; border: 0; border-radius: 0;
  padding: var(--s4) 0; margin: 0;
}
body[data-plane="workspace"] .listing > li.observation + li.observation {
  border-top: 1px solid var(--h-line);
}
body[data-plane="workspace"] .listing > li.observation:last-child { margin-bottom: 0; }
body[data-plane="workspace"] .listing > li.observation:hover { background: var(--h-fill-16); }
body[data-plane="workspace"] .observation > .facts {
  display: grid; grid-template-columns: minmax(9rem, 0.3fr) minmax(0, 1fr);
  column-gap: 0; row-gap: 0; margin: 0;
}
body[data-plane="workspace"] .observation > .facts > dt {
  margin: 0; padding: 7px 20px 7px 0; color: var(--h-muted);
}
body[data-plane="workspace"] .observation > .facts > dd {
  margin: 0; padding: 7px 0; font-size: var(--type-body); color: var(--h-ink);
}
/* The caveat under the date it qualifies, never elsewhere. */
body[data-plane="workspace"] .observation > .quiet {
  display: block; margin: 0 0 14px; font-size: var(--type-meta); color: var(--h-muted);
  line-height: var(--h-lh-body);
}
body[data-plane="workspace"] blockquote.observation-note {
  margin: 0 0 12px; background: var(--h-card); border: 1px solid var(--h-line);
  border-left: 3px solid var(--h-accent-soft); border-radius: var(--h-radius-sm);
  padding: 15px 17px; font-size: var(--type-body); color: var(--h-ink);
  line-height: var(--h-lh-body);
}
body[data-plane="workspace"] .observation > .sentence {
  margin: 0 0 12px; padding: 11px 14px; background: var(--h-fill-08);
  border-radius: var(--h-radius-sm); color: var(--h-ink-2);
}
body[data-plane="workspace"] .attribution {
  display: grid; gap: 4px; margin: 0 0 12px; padding: 0;
  background: none; border: 0; border-radius: 0;
}
body[data-plane="workspace"] .attribution > p {
  margin: 0; font-size: var(--type-body); color: var(--h-ink);
}
body[data-plane="workspace"] .fairness {
  margin: 0 0 12px; padding: 13px 15px; background: var(--h-fill-11);
  border-radius: var(--h-radius-sm);
}
body[data-plane="workspace"] .fairness > .note {
  margin: 0; padding: 0; border: 0; background: none; color: var(--h-muted); line-height: var(--h-lh-body);
}
/* **What was removed, not a description of it.** `stripped_note` is the removed text
   itself, shown so the submitter can check it — so it is set as text rather than
   paraphrased, which is what the drawing does and what the fairness pass does not
   produce. */
body[data-plane="workspace"] .stripped-text {
  margin: 9px 0 0; padding: 0; background: none; border: 0; border-radius: 0;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: var(--type-meta); color: var(--h-ink-2);
}
body[data-plane="workspace"] .observation-recommendation {
  margin: 0 0 12px; font-size: var(--type-body); color: var(--h-ink);
}
body[data-plane="workspace"] .observation > .actions { margin-top: 14px; }

/* The write-up form: labels above their controls, at the measure a form is filled at. */
body[data-plane="workspace"] .write-up-form .field { margin: 0 0 14px; }
body[data-plane="workspace"] .write-up-form label {
  display: block; font-size: var(--type-meta); color: var(--h-ink-2);
  font-weight: var(--h-w-mid); margin: 0 0 6px;
}
body[data-plane="workspace"] .write-up-form select,
body[data-plane="workspace"] .write-up-form input[type="text"],
body[data-plane="workspace"] .write-up-form textarea {
  box-sizing: border-box; max-width: var(--field); width: 100%;
  border: 1px solid var(--h-line-strong); border-radius: var(--h-radius-sm);
  padding: 10px 12px; font-size: var(--type-body); font-family: inherit;
  color: var(--h-ink); background: var(--h-card);
}


/* --------------------------------------------------------------------------
   `8` · the intake — the label, the deferred names, and the two acts — [D-1789]

   `intake.png` draws the label twice on purpose: as the fact the record currently
   holds, and as the value of the input that changes it. That is what the renderer
   does, and the geometry here is what makes the pair legible rather than cramped.
   -------------------------------------------------------------------------- */
body[data-plane="workspace"] #identity > .facts {
  display: grid; grid-template-columns: minmax(9rem, 0.3fr) minmax(0, 1fr);
  column-gap: 0; row-gap: 0; margin: 0 0 14px;
}
body[data-plane="workspace"] #identity > .facts > dt {
  margin: 0; padding: 0 20px 0 0; font-weight: var(--h-w-semi); color: var(--h-ink);
}
body[data-plane="workspace"] #identity > .facts > dd {
  margin: 0; font-size: var(--type-body); color: var(--h-ink-2);
}
/* **Scoped by the region, not by a class on the form** ([D-1789]). `8`'s two forms post
   to operations their surface's contract names, and `D-1552` holds that **none of that
   population carries a historical class alias** — which is what makes deleting an alias
   unable to move membership. A styling class added to one of those forms is exactly such
   an alias, and the check caught it on the first run. The region already has an id. */
body[data-plane="workspace"] #identity .action-form {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin: 0 0 16px;
}
body[data-plane="workspace"] #identity .action-form input[type="text"] {
  flex: 1 1 22rem; min-width: 0; box-sizing: border-box;
  border: 1px solid var(--h-line-strong); border-radius: var(--h-radius-sm);
  padding: 10px 12px; font-size: var(--type-body); font-family: inherit;
  color: var(--h-ink); background: var(--h-card);
}

/* **Names, and visibly not values** ([D-1789]). `CL-2`'s deferred set is *named and
   not valued*: R1 stores none of them and no input exists for any. Set as rows with
   a rule under each they read as a table of blanks — a reader is entitled to think
   the product lost four values. Set as a row of quiet tokens they read as what they
   are, which is a list of names. */
body[data-plane="workspace"] #identity .listing {
  display: flex; flex-wrap: wrap; gap: 8px; margin: 0;
  border: 0; background: none;
}
body[data-plane="workspace"] .listing > li.deferred-field {
  display: inline-block; padding: 5px 11px; border: 0; border-radius: 999px;
  background: var(--h-fill-07); color: var(--h-muted);
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: var(--type-meta);
}
body[data-plane="workspace"] .listing > li.deferred-field:hover {
  background: var(--h-fill-07); color: var(--h-muted);
}

/* **Two submits, and the arrangement is the rule** ([D-1789] — F-5). `intake.png`
   draws two radios and **one** button under the chooser, which restores exactly the
   arrangeable contradiction `HD-1` was built to prevent — select *standalone*, press
   *Link to this job* — and leaves the standalone row with no submit at all, so half
   of `HD-1` is unpressable. Each act is its own form and its own press; what the
   geometry adds is that they sit on one line, as alternatives rather than as a
   sequence. */
body[data-plane="workspace"] #intent .action-form {
  display: inline-flex; align-items: center; gap: 10px; flex-wrap: nowrap;
  vertical-align: top;
}
body[data-plane="workspace"] #intent .action-form + .action-form { margin-left: 14px; }
body[data-plane="workspace"] #intent .action-form button { white-space: nowrap; }
body[data-plane="workspace"] #intent select {
  max-width: var(--field);
  box-sizing: border-box; border: 1px solid var(--h-line-strong);
  border-radius: var(--h-radius-sm); padding: 10px 12px;
  font-size: var(--type-body); font-family: inherit; color: var(--h-ink);
  background: var(--h-card);
}

/* The way out, as a card — it is the reader's next move and was the one thing on the
   page with no ground under it. */
body[data-plane="workspace"] .intake-exit {
  /* `.page-navigation` is a right-aligned inline row of facet links; this one is the
     page's single exit and takes the width of the cards it follows. */
  /* **A link, not a card** (ux/84 ANSWER 48-f): the exit on the text edge, no box. */
  display: block; margin: 0; padding: 0 0 0 calc(1px + var(--s5));
}
body[data-plane="workspace"] .intake-exit a {
  color: var(--h-link); font-size: var(--type-body); font-weight: var(--h-w-semi);
  text-decoration: none;
}
body[data-plane="workspace"] .intake-exit a::after {
  content: "→"; margin-left: 10px; color: var(--h-accent);
}
body[data-plane="workspace"] .intake-exit a:hover { color: var(--h-accent); }


/* **A consequence is numbered, never ticked** ([D-1789]). `7`'s *What happens next* is
   what pressing the one act will do; a box beside each line says *outstanding*, and a
   filled one says *already done*. Numerals say order and nothing else. */
body[data-plane="workspace"] .consequence-steps {
  list-style: none; counter-reset: consequence; margin: 0; padding: 0;
}
body[data-plane="workspace"] .consequence-steps > li {
  counter-increment: consequence; position: relative;
  padding: 0 0 14px 34px; font-size: var(--type-body); color: var(--h-ink-2);
  line-height: var(--h-lh-body);
}
body[data-plane="workspace"] .consequence-steps > li:last-child { padding-bottom: 0; }
body[data-plane="workspace"] .consequence-steps > li::before {
  content: counter(consequence); position: absolute; left: 0; top: 0;
  width: 23px; height: 23px; border-radius: 50%;
  background: var(--h-fill-07); color: var(--h-mark-step);
  font-size: var(--type-meta-small); font-weight: var(--h-w-semi);
  display: inline-flex; align-items: center; justify-content: center;
}
/* The rule between them, which is what makes them a sequence rather than a stack. */
body[data-plane="workspace"] .consequence-steps > li:not(:last-child)::after {
  content: ""; position: absolute; left: 11px; top: 27px; bottom: 5px;
  width: 1px; background: var(--h-line);
}
body[data-plane="workspace"] .quota-meter { width: 100%; height: 8px; margin-top: 10px; }


/* --------------------------------------------------------------------------
   `10a` · Job Fit — a card per requirement, and no colour on any of them — [D-1791]

   `jobfit.png` draws each requirement as a card with three lozenges on the title's
   line, and then colours them: `Must have` pink, `Critical` blue, `justified` green,
   `not_yet_justified` amber, with a green tick or a grey `?` beside each row. Every
   one of those is a **status colour**, and a status colour on this page is a ranking
   it has not established — the archetype fixes attention on the **evidence**, and a
   mark repeats the status a size larger.

   So: the card, the lozenges, and one treatment across them. `kind` keeps the
   `must-have` lozenge the hiring plan has drawn it in since it was built, because
   that is a property of the **role**; `importance` and `status` are neutral. The
   finding stays the dominant ink, which is what the archetype fixes attention on.
   -------------------------------------------------------------------------- */
body[data-plane="workspace"] .listing > li.requirement-row {
  display: block; background: var(--h-fill-16); border: 1px solid var(--h-line);
  border-radius: var(--h-radius-sm); padding: 15px 17px; margin: 0 0 12px;
}
body[data-plane="workspace"] .listing > li.requirement-row:last-child { margin-bottom: 0; }
body[data-plane="workspace"] .listing > li.requirement-row:hover { background: var(--h-fill-16); }
body[data-plane="workspace"] .requirement-name {
  display: block; font-size: var(--type-card-title); font-weight: var(--h-w-semi);
  color: var(--h-ink); margin: 0 0 9px; line-height: var(--h-lh-snug);
}
body[data-plane="workspace"] .requirement-row > .pill { margin: 0 7px 10px 0; }
body[data-plane="workspace"] .requirement-row > .sentence {
  margin: 4px 0 0; color: var(--h-ink-2);
  line-height: var(--h-lh-body);
}
body[data-plane="workspace"] .requirement-row > .note {
  margin: 5px 0 0; padding: 0; border: 0; background: none; color: var(--h-muted);
}

/* **The pair, on one line** — the plan version at one end, the moment it was read at
   the other. `RC-5` makes them two halves of one subject. */
body[data-plane="workspace"] .pair-row {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 20px; flex-wrap: wrap;
}
body[data-plane="workspace"] .pair-row > .sentence { margin: 0; color: var(--h-ink); }
body[data-plane="workspace"] .pair-row > .computed-at { margin: 0; }




/* **A heading wraps rather than pushing** ([D-1791]). `region-head` is a flex row and
   its words track has no floor, so a single long token — a filename, an address, a
   placeholder in a synthesised view — painted outside the card at `360px` instead of
   breaking. `D-1448`'s shape one component down: a `1fr`-ish track still floors at
   min-content unless it is told not to. */
body[data-plane="workspace"] .region-head-words,
body[data-plane="workspace"] .region-head-main { min-width: 0; }
/* **And the head card, which is the same row one size up** ([D-1793]). `.page-head` is
   `flex: 1 1 auto` with no floor and the aside does not shrink, so a page whose title
   and standing lozenge together exceed the card overflowed rather than wrapping — `16`
   measured a `1380px` document in `1280px` on *Data rights requests* beside
   *1 open request*. */
body[data-plane="workspace"] .page-head,
body[data-plane="workspace"] .page-head-words { min-width: 0; }
body[data-plane="workspace"] .head-card-top { flex-wrap: wrap; }
body[data-plane="workspace"] .head-card-aside { min-width: 0; }
body[data-plane="workspace"] .region-head h2 { overflow-wrap: anywhere; }
/* The same floor inside a claim card: an assertion is somebody's own words and may be
   one long token — a URL, a certificate name, a placeholder. */
body[data-plane="workspace"] .surface-section article.claim { min-width: 0; }
body[data-plane="workspace"] .surface-section article.claim > h3,
body[data-plane="workspace"] .surface-section article.claim > p,
body[data-plane="workspace"] .requirement-name { overflow-wrap: anywhere; }
body[data-plane="workspace"] :not(.page-rail) > .surface-section > .facts > dt,
body[data-plane="workspace"] :not(.page-rail) > .surface-section > .facts > dd {
  min-width: 0; overflow-wrap: anywhere;
}


/* --------------------------------------------------------------------------
   Settings · the section's regions wear the plane's head — [D-1792]

   `panel` drew its header as an `h2` and nothing else, so a rail holding a `panel`
   beside a `region_head` card showed the same component twice, drawn two ways. That
   is `D-1642`'s finding on `help_card` one container over, and it is why the mark is
   on the container rather than sprinkled at the call sites.
   -------------------------------------------------------------------------- */
body[data-plane="workspace"] .panel-head {
  display: flex; align-items: center; gap: 14px; justify-content: flex-start;
}

/* A rail card's heading is a card's heading ([D-1644]) — the same size the rail's
   `region_head` cards use, so `Quick actions` does not wrap beside its own mark. */
body[data-plane="workspace"] .page-rail .panel-head h2 { font-size: var(--type-section); }
/* The standing band under the lede, wherever a page puts one there. */
body[data-plane="workspace"] .head-card-below .status { align-items: center; }
body[data-plane="workspace"] .head-card-below .status + .sentence { margin-top: 6px; }



/* --------------------------------------------------------------------------
   The colour picker, and the tick that carries *not set* — [D-1794]

   `input[type=color]` is the one control the CSP leaves available for choosing a
   colour: no script, and no inline `style` on a swatch. The browser draws the well
   and opens its own dialog, so all that is wanted here is for the well to look like
   every other control on the form rather than like a native button.
   -------------------------------------------------------------------------- */
/* **Every part of the row is stated, because `.field` is a column elsewhere.** Setting
   `display:flex` alone inherited `flex-direction:column` from the shared field rule, and
   in a column container `align-items:center` centres each child horizontally — the label,
   the well and the tick each landed on their own centred line. Measured, not guessed:
   the label computed `96px` wide against a `flex-basis:100%`, which is what a basis does
   when it is sizing height. */
body[data-plane="workspace"] .field-colour {
  display: flex; flex-direction: row; flex-wrap: wrap;
  align-items: center; justify-content: flex-start; gap: 10px 14px;
}
body[data-plane="workspace"] .field-colour > label { width: 100%; margin: 0 0 6px; }
body[data-plane="workspace"] input[type="color"] {
  width: 64px; height: 42px; padding: 4px; box-sizing: border-box;
  border: 1px solid var(--h-line-strong); border-radius: var(--h-radius-sm);
  background: var(--h-card); cursor: pointer;
}
body[data-plane="workspace"] input[type="color"]::-webkit-color-swatch-wrapper { padding: 0; }
body[data-plane="workspace"] input[type="color"]::-webkit-color-swatch {
  border: 0; border-radius: 6px;
}
body[data-plane="workspace"] input[type="color"]::-moz-color-swatch {
  border: 0; border-radius: 6px;
}
/* The tick sits beside the well, because it qualifies that one control and not the
   form — a checkbox on its own line reads as a seventh field. */
body[data-plane="workspace"] .field-choice-inline {
  display: inline-flex; align-items: center; gap: 9px; margin: 0;
}
body[data-plane="workspace"] .field-choice-inline label {
  margin: 0; font-size: var(--type-body); color: var(--h-ink-2);
  font-weight: var(--h-w-normal);
}


/* --------------------------------------------------------------------------
   `13d` · what becoming a Team does — five cards, two treatments — [D-1796]

   `become_team_1.png` draws the five consequences as five cards with their own
   glyphs rather than five stacked bands, and it is right about why: they are five
   different kinds of fact, and a reader deciding whether to press an irreversible
   button has to tell *you lose this* from *here is how you get it back*.

   **What is not taken from the drawing is the palette.** It gives each card its own
   hue — green, blue, purple, amber, grey — which is a five-hue axis nothing
   computed. `U-2` keeps exactly one variant that may alarm; the glyph is what tells
   the five apart, and the tint says only whether this one is a warning.
   -------------------------------------------------------------------------- */
body[data-plane="workspace"] .consequence {
  display: flex; align-items: flex-start; gap: 14px;
  /* A tinted callout row, with no edge of its own inside its card (ux/84 48-f). */
  background: var(--h-fill-16); border: 1px solid transparent;
  border-radius: var(--h-radius-sm); padding: 15px 17px; margin: 0 0 10px;
}
body[data-plane="workspace"] .consequence:last-of-type { margin-bottom: 0; }
body[data-plane="workspace"] .consequence > .sentence {
  margin: 0; color: var(--h-ink-2);
  line-height: var(--h-lh-loose);
}
body[data-plane="workspace"] .consequence-mark {
  width: 38px; height: 38px; border-radius: 11px; flex: 0 0 auto;
  background: var(--h-info-wash); color: var(--h-info-ink);
  display: inline-flex; align-items: center; justify-content: center;
}
body[data-plane="workspace"] .consequence-mark svg { width: 19px; height: 19px; }
/* The one that alarms, and `U-2` permits the hue because the loss is real and the
   act is irreversible. */
body[data-plane="workspace"] .consequence-cautionary {
  background: var(--h-warn-soft); border-color: transparent;
}
body[data-plane="workspace"] .consequence-cautionary .consequence-mark {
  background: var(--h-card); color: var(--h-warn);
}
body[data-plane="workspace"] .consequence-cautionary > .sentence { color: var(--h-warn); }

/* The two facts above them read as one line, not as a two-row table. */
body[data-plane="workspace"] #consequences > .facts {
  display: flex; flex-wrap: wrap; gap: 6px 26px; margin: 0 0 16px;
}
/* **No rule between them, because they are not rows.** `D-1784` gave a section's facts
   a hairline per entry, which is right for a column of pairs and wrong for two facts
   read across one line. */
body[data-plane="workspace"] #consequences > .facts > dt {
  margin: 0; padding: 0; border: 0;
  letter-spacing: var(--track-wide); text-transform: uppercase; color: var(--h-muted);
  align-self: center;
}
body[data-plane="workspace"] #consequences > .facts > dd {
  margin: 0 18px 0 0; padding: 0; border: 0; font-size: var(--type-body);
  font-weight: var(--h-w-semi); color: var(--h-ink);
}
body[data-plane="workspace"] #consequences > .sentence {
  margin: 0 0 12px; color: var(--h-ink-2); line-height: var(--h-lh-prose);
}


/* **`13`'s becoming-a-Team form, as `become_team_2.png` lays it out** ([D-1796]) — the
   fields at the measure a form is filled at, and the three consequences beneath the
   control that sets them in motion rather than beside it. */
body[data-plane="workspace"] #type-migration .action-form .field { margin: 0 0 6px; }
body[data-plane="workspace"] #type-migration select,
body[data-plane="workspace"] #type-migration input[type="email"] {
  box-sizing: border-box; max-width: var(--field); width: 100%;
  border: 1px solid var(--h-line-strong); border-radius: var(--h-radius-sm);
  padding: 10px 12px; font-size: var(--type-body); font-family: inherit;
  color: var(--h-ink); background: var(--h-card);
}
body[data-plane="workspace"] #type-migration .field-help { margin: 0 0 16px; }
body[data-plane="workspace"] .how-it-goes {
  margin: 18px 0 0; padding: 16px 18px; background: var(--h-fill-16);
  border: 1px solid transparent; border-radius: var(--h-radius-sm);
}
/* `.rail-subhead` carries a rule above it where it divides a rail card; inside a panel
   of its own it would be a second edge a hairline from the first. */
body[data-plane="workspace"] .how-it-goes .rail-subhead {
  margin: 0 0 12px; padding-top: 0; border-top: 0;
}


/* --------------------------------------------------------------------------
   `13g` · the flow's three steps — [D-1797]

   `become_team_2.png` draws a stepper, and a two-page flow owes a reader one. What
   the drawing had wrong was the order; what it draws that is **also** refused is a
   **filled** first dot, which says *done* about a step nobody has taken — the same
   thing `7`'s *What happens next* refuses one page over. The current step is marked
   by weight and ground, never by completion.
   -------------------------------------------------------------------------- */
body[data-plane="workspace"] .flow-steps {
  display: flex; align-items: center; gap: 0; list-style: none;
  flex-wrap: wrap; row-gap: 10px; margin: 0 0 18px; padding: 0;
}
body[data-plane="workspace"] .flow-step {
  display: flex; align-items: center; gap: 10px; flex: 0 1 auto;
}
body[data-plane="workspace"] .flow-step + .flow-step { margin-left: 14px; }
body[data-plane="workspace"] .flow-step + .flow-step::before {
  content: ""; width: 34px; height: 1px; background: var(--h-line-strong);
  margin-right: 14px; flex: 0 0 auto;
}
body[data-plane="workspace"] .flow-step-number {
  width: 26px; height: 26px; border-radius: 50%; flex: 0 0 auto;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--h-fill-07); color: var(--h-mark-step);
  font-size: var(--type-meta-small); font-weight: var(--h-w-semi);
}
body[data-plane="workspace"] .flow-step-label {
  font-size: var(--type-meta); color: var(--h-muted);
}
body[data-plane="workspace"] .flow-step-current .flow-step-number {
  background: var(--h-accent); color: var(--h-card);
}
body[data-plane="workspace"] .flow-step-current .flow-step-label {
  color: var(--h-ink); font-weight: var(--h-w-semi);
}
body[data-plane="workspace"] #team-migration .action-form .field { margin: 0 0 6px; }
body[data-plane="workspace"] #team-migration select,
body[data-plane="workspace"] #team-migration input[type="email"] {
  box-sizing: border-box; max-width: var(--field); width: 100%;
  border: 1px solid var(--h-line-strong); border-radius: var(--h-radius-sm);
  padding: 10px 12px; font-size: var(--type-body); font-family: inherit;
  color: var(--h-ink); background: var(--h-card);
}
body[data-plane="workspace"] #team-migration .field-help { margin: 0 0 16px; }


/* **One blocker, stated once, with the acts it withholds** ([D-1800]). The heading is
   the condition's name; the list is what cannot be done until it clears. It is the
   withheld card's own treatment — same ground, same glyph — because it *is* one, and a
   second drawing would say a grouped refusal is a different kind of thing. */
body[data-plane="workspace"] .blocker-lede {
  margin: 10px 0 4px; font-size: var(--type-meta); color: var(--h-muted);
}
body[data-plane="workspace"] .blocker-acts {
  margin: 0; padding: 0 0 0 18px; list-style: disc;
}
body[data-plane="workspace"] .blocker-acts > li {
  font-size: var(--type-body); color: var(--h-ink-2); line-height: var(--h-lh-body);
}
body[data-plane="workspace"] .withheld-blocker .withheld-label {
  font-size: var(--type-body);
}

/* --------------------------------------------------------------------------
   `§6n`'s dominant act, in the channel that carries it — [D-1785]

   Every drawing in both design directories shows the same thing: one filled control
   in a group, and the rest bordered. The plane drew **all** of them filled, so *at
   most one dominant action* was a sentence in a contract with nothing enforcing it
   — three acts on a candidate read as three equally expected next steps.

   **Scoped to a group that has said which one it is, and that is the whole care
   taken here.** 142 of the 151 workspace surfaces declare no dominant act; making
   `.action` bordered by default would take the filled control off all of them and
   call it a fix. `:has(.primary-action)` means the rule applies only where a view
   has named the act the object's standing admits — so a page that has not thought
   about it is unchanged, and a page that has is drawn the way it was argued.

   **The weight classes are on the `button`, never on the `action-form`** — `action()`
   composes them from `action_class` and puts them on the control — so one selector
   reaches both the form-wrapped acts and the bare ones.

   Nothing here touches `.action-destructive`, `.action-exit` or `.action-quiet`:
   those are `L-7` consequences with their own treatments, and a group's dominant act
   is a prominence question, which `L-7` settles is independent of them.
   -------------------------------------------------------------------------- */
/* **Retired by [D-1861]**, which is what the rule above now does unconditionally. Kept as
   a note because the reasoning is not retired with it: `D-1785` scoped the demotion to a
   group that had named its act, on the ground that taking the filled control off 142
   surfaces would be calling a regression a fix. The owner has ruled the other way, and
   those surfaces draw every control outlined until `§6n` names one. */

/* ==========================================================================
   13 · Narrow widths — the rail goes under the work
   ========================================================================== */
@media (max-width: 1080px) {
  /* **`minmax(0, 1fr)` and not `1fr`.** A grid track sized `1fr` still floors at the
     content's min-content width, so a long unbroken filename in the header pushed the
     whole column — and the card in it — past the viewport at phone width. */
  body[data-plane="workspace"] .rail-main { grid-template-columns: minmax(0, 1fr); }
  body[data-plane="workspace"] .rail-main > * { min-width: 0; }
}
@media (max-width: 52rem) {
  /* **The roster stacks, because its rows hold controls** ([D-1792]).
     `.listing.listing-columns > li` is `subgrid` at `(0,2,1)` and `style_refined`'s
     collapse rule is a bare `.listing > li` at `(0,1,1)`, so a labelled collection has
     never stacked — it became a contained scroller instead, which `D-1447` rules
     acceptable **for cells that are read**. `4`'s cells are acted on: at `360px` the
     row measured `532px` in `276px` and a `button.action` sat off-viewport, which is a
     control a reader cannot reach rather than content they can scroll to.

     **Scoped to this row and not to the mechanism.** `2` and `9` keep their head and
     their scroller: their cells carry no controls, and hiding the head to stack them
     would take away column labels that `9` deliberately has no `data-label` to replace. */
  body[data-plane="workspace"] .listing.listing-columns.member-row { display: block; }
  body[data-plane="workspace"] .listing.listing-columns.member-row > li {
    grid-template-columns: 1fr;
  }
  body[data-plane="workspace"] .listing > li.listing-head.member-row { display: none; }
}
@media (max-width: 720px) {
  /* **The connectors go and the steps wrap** ([D-1797]). Three labels plus two 34px
     rules measured `413px` in `360px`; a stepper that paints outside the page has
     stopped saying where the reader is. The numerals keep the order. */
  body[data-plane="workspace"] .flow-step + .flow-step { margin-left: 0; }
  body[data-plane="workspace"] .flow-step + .flow-step::before { display: none; }
  body[data-plane="workspace"] .flow-steps { gap: 8px 18px; }
  body[data-plane="workspace"] main { padding: 16px 16px 48px; }
  body[data-plane="workspace"] > .org-suspended,
  body[data-plane="workspace"] > [inert] > .org-suspended { width: calc(100% - 32px); margin: 16px auto 0; padding: 12px 14px; }
  body[data-plane="workspace"]:has(.org-suspended) main { padding-top: 14px; }
  /* The header and its act stack, and a long filename wraps rather than pushing the
     card past the viewport -- both pages overflowed at 390px on the title alone. */
  body[data-plane="workspace"] .head-card-top { flex-direction: column; gap: 14px; }
  body[data-plane="workspace"] .head-card-aside { text-align: left; }
  body[data-plane="workspace"] .page-head { flex-wrap: wrap; }
  body[data-plane="workspace"] .page-head-words { min-width: 0; }
  body[data-plane="workspace"] .page-head h1 { overflow-wrap: anywhere; }
  body[data-plane="workspace"] .head-card-below .sentence { padding-left: 0; }
  body[data-plane="workspace"] .edit-job-form .field,
  body[data-plane="workspace"] .role-facts { grid-template-columns: 1fr; gap: 4px; }
  body[data-plane="workspace"] .role-facts dd { margin-bottom: 10px; }
  body[data-plane="workspace"] h1 { font-size: var(--type-page-title); }
  /* **The lozenge drops under the wording.** This was `flex-wrap: wrap` on a `grid`
     container — an inert declaration, so the narrow case it was written for never
     happened: the `auto` aside track kept the treatment on the same line and squeezed
     `.requirement-text` to 81px, where a two-word requirement scrolled sideways inside
     its own row. Contained, and therefore invisible to a document-width check — the same
     shape `D-1454` measured on `3b`'s obstacles. */
}

/* **A closed disclosure stays closed, whatever else the sheet says about its contents.**

   A browser hides a closed `details`' non-summary children through the UA sheet, which any
   author rule setting `display` on them **overrides**. Two rules here did: `#brief-panel
   .ask .action-form` and the broad `.page-rail .action-form`. The result on page `3c` was
   160px of *Replace the brief* form rendered under a 21px summary, clipped by
   `#brief-panel`'s `overflow:hidden` and painted over by the next rail card -- a control
   that was drawn, described and **not clickable**.

   That is a class of defect and not one rule's mistake: every future rule that styles a
   form in a rail or a panel can reintroduce it, and none of them is wrong to. So the
   collapse is restored once, last, at a specificity that clears the broad rules -- the
   `.action-form` arm is (0,3,2) against `.page-rail .action-form`'s (0,3,1). A rule
   carrying an **id** still outranks this, which is why `.ask` keeps its own `[open]`
   qualifier rather than relying on the guard. */
body[data-plane="workspace"] details:not([open]) > *:not(summary) { display: none; }
body[data-plane="workspace"] details:not([open]) .action-form { display: none; }

/* -- page `13a`, drawn to the owner's master (94, `activity_history.png`) ---------------
   One card: a top bar (the *Activity type* filter; *Showing …* / *Most recent first.*; ‹ ›),
   then each day as a tinted band with a pill counting its rows, and the rows — time over
   zone · the area's round tile · what happened (bold) · a hairline · who · the area pill ·
   the outcome pill. A refused row is tinted red with a red bar at its start and *why* in
   red under the act. Measured at the master's 1536px width. No row ⋯ (no act exists). */
body[data-plane="workspace"] .activity-card {
  margin: 0; padding: 0; overflow: hidden; background: var(--h-card);
  border: 1px solid var(--h-line); border-radius: 14px;
}
body[data-plane="workspace"] .activity-bar {
  display: flex; align-items: center; justify-content: space-between; gap: 16px;
  padding: 20px 26px 22px;
}
body[data-plane="workspace"] .activity-filter { display: block; margin: 0; }
body[data-plane="workspace"] .activity-type-control > .activity-type-summary {
  display: inline-flex; align-items: center; gap: 12px; cursor: pointer; list-style: none;
  min-width: 243px; height: 48px; box-sizing: border-box; padding: 0 16px;
  border: 1px solid var(--h-line); border-radius: 10px; background: var(--h-card);
  color: var(--h-ink); font-weight: var(--h-w-semi); font-size: var(--type-body);
}
body[data-plane="workspace"] .activity-type-summary::-webkit-details-marker { display: none; }
body[data-plane="workspace"] .activity-type-mark { display: inline-flex; color: var(--h-ink); }
body[data-plane="workspace"] .activity-type-mark .icon { width: 20px; height: 20px; }
body[data-plane="workspace"] .activity-type-word { flex: 1; }
body[data-plane="workspace"] .activity-type-chevron { display: inline-flex; transform: rotate(90deg); }
body[data-plane="workspace"] .activity-selected-count {
  margin: 0; font-size: var(--type-meta); color: var(--h-muted); font-weight: var(--h-w-normal);
}
body[data-plane="workspace"] .activity-type-panel { display: grid; gap: 12px; margin-top: 12px; }
body[data-plane="workspace"] .activity-types {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(min(15rem, 100%), 1fr));
  gap: 6px 20px; list-style: none; margin: 0; padding: 0;
}
body[data-plane="workspace"] .activity-type {
  display: flex; align-items: center; gap: 8px; cursor: pointer;
  font-size: var(--type-body); color: var(--h-ink);
}
body[data-plane="workspace"] .activity-type.quiet { color: var(--h-muted); }
body[data-plane="workspace"] .activity-type input {
  width: 18px; height: 18px; margin: 0; flex: none; accent-color: var(--h-accent-hi);
}
body[data-plane="workspace"] .activity-type-label { flex: 1; min-width: 0; }
body[data-plane="workspace"] .activity-type-count {
  flex: none; font-variant-numeric: tabular-nums; color: var(--h-muted); font-size: var(--type-meta);
}
body[data-plane="workspace"] .activity-filter-acts { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; }
body[data-plane="workspace"] .activity-clear { font-size: var(--type-body); color: var(--h-link); }
body[data-plane="workspace"] .activity-position { display: flex; align-items: center; gap: 24px; }
body[data-plane="workspace"] .activity-showing {
  margin: 0; font-size: var(--type-meta); line-height: var(--lh-relaxed);
  color: var(--h-muted);
}
body[data-plane="workspace"] .activity-pager { display: flex; gap: 10px; }
body[data-plane="workspace"] .activity-arrow {
  display: inline-flex; align-items: center; justify-content: center; width: 48px;
  height: 48px; box-sizing: border-box; border: 1px solid var(--h-line); border-radius: 10px;
  background: var(--h-card); color: var(--h-accent);
}
body[data-plane="workspace"] .activity-arrow .icon { width: 20px; height: 20px; }
body[data-plane="workspace"] .activity-pager > :first-child .icon { transform: rotate(180deg); }
body[data-plane="workspace"] .activity-arrow:hover { border-color: var(--h-accent); color: var(--h-accent); }
/* An end is reached: drawn, and not pressable (86-g's inactive look). */
body[data-plane="workspace"] .activity-arrow.action-inactive {
  color: var(--h-line); background: var(--h-card); pointer-events: none; cursor: default;
}
body[data-plane="workspace"] .activity-band {
  display: flex; align-items: center; gap: 30px; min-height: 55px; box-sizing: border-box;
  padding: 0 26px; background: var(--h-page);
  border-top: 1px solid var(--h-line); border-bottom: 1px solid var(--h-line);
}
body[data-plane="workspace"] .activity-day {
  margin: 0; font-size: var(--type-card-title); font-weight: var(--h-w-semi); color: var(--h-ink);
}
body[data-plane="workspace"] .activity-day-count {
  padding: 4px 12px; border-radius: 999px; background: var(--h-line);
  font-size: var(--type-meta); color: var(--h-muted);
}
body[data-plane="workspace"] .activity-rows { list-style: none; margin: 0; padding: 0; }
body[data-plane="workspace"] .activity-row {
  position: relative; display: grid; align-items: center;
  /* **The act has priority** (72): the main column here is narrower than the master's
     (the header and Settings panel stay, 86-f), so the act takes the larger share and at
     least 300px, and who-and-area gives way first — its pill wraps under the actor. */
  grid-template-columns: 48px 50px minmax(300px, 1.5fr) minmax(180px, 1fr) 124px;
  column-gap: 20px; min-height: 68px; box-sizing: border-box; padding: 8px 26px;
}
body[data-plane="workspace"] .activity-row + .activity-row { border-top: 1px solid var(--h-line); }
body[data-plane="workspace"] .activity-time { margin: 0; display: grid; font-variant-numeric: tabular-nums; }
body[data-plane="workspace"] .activity-time b { font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .activity-time span { font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .activity-tile {
  display: inline-flex; align-items: center; justify-content: center; width: 50px;
  height: 50px; border-radius: 50%;
}
body[data-plane="workspace"] .activity-tile .icon { width: 22px; height: 22px; }
body[data-plane="workspace"] .activity-what { min-width: 0; }
body[data-plane="workspace"] .activity-act {
  margin: 0; font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink);
}
body[data-plane="workspace"] .activity-detail { margin: 2px 0 0; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .activity-why { margin: 4px 0 0; font-size: var(--type-meta); color: var(--h-danger); }
body[data-plane="workspace"] .activity-who {
  display: flex; flex-wrap: wrap; align-items: center; gap: 6px 20px; min-width: 0;
  padding-left: 22px; border-left: 1px solid var(--h-line);
}
body[data-plane="workspace"] .activity-actor {
  margin: 0; min-width: 0; overflow-wrap: anywhere; font-size: var(--type-body); color: var(--h-muted);
}
body[data-plane="workspace"] .activity-area {
  display: inline-flex; align-items: center; gap: 8px; justify-self: start;
  padding: 6px 14px; border-radius: 10px; font-size: var(--type-meta); white-space: nowrap;
}
body[data-plane="workspace"] .activity-area-dot { width: 8px; height: 8px; border-radius: 50%; background: currentColor; }
body[data-plane="workspace"] .activity-outcome {
  display: inline-flex; align-items: center; gap: 8px; justify-self: start;
  padding: 6px 14px 6px 10px; border-radius: 10px; font-size: var(--type-meta);
  font-weight: var(--h-w-semi); white-space: nowrap;
}
body[data-plane="workspace"] .activity-outcome-mark { display: inline-flex; align-items: center; justify-content: center; }
body[data-plane="workspace"] .activity-outcome-mark .icon { width: 18px; height: 18px; margin: 0; vertical-align: 0; }
/* **A pill is its own size**: never stretched to its track, centred in its row. */
body[data-plane="workspace"] .activity-who > .activity-area, body[data-plane="workspace"] .activity-row > .activity-outcome {
  align-self: center; justify-self: start; height: auto; line-height: var(--lh-tight); }
body[data-plane="workspace"] .activity-outcome-succeeded { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="workspace"] .activity-outcome-succeeded .activity-outcome-mark {
  width: 20px; height: 20px; border-radius: 50%; align-items: center; justify-content: center;
  background: var(--h-ok); color: var(--h-card); }
body[data-plane="workspace"] .activity-outcome-succeeded .activity-outcome-mark .icon { width: 13px; height: 13px; }
body[data-plane="workspace"] .activity-outcome-refused { background: var(--h-danger-soft); color: var(--h-danger); }
/* A refused row: a red tint and a red bar at its start (the master). */
body[data-plane="workspace"] .activity-row.activity-refused { background: var(--h-danger-soft); }
body[data-plane="workspace"] .activity-row.activity-refused::before {
  content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px;
  background: var(--h-danger);
}
/* The refused pill a step deeper than the row it sits on, so the two read apart. */
body[data-plane="workspace"] .activity-row.activity-refused .activity-outcome-refused {
  background: var(--h-danger-wash); }
body[data-plane="workspace"] .activity-row.activity-refused .activity-tile {
  background: var(--h-danger-wash); color: var(--h-danger); }
/* **Each area's colour** (94 §6): the tile's ground and mark, and the pill's tint, dot and
   words — text ≥ 4.5:1 on its own tint. */
body[data-plane="workspace"] .activity-area-jobs { background: var(--h-area-jobs-soft); color: var(--h-area-jobs); }
body[data-plane="workspace"] .activity-area-candidates { background: var(--h-area-candidates-soft); color: var(--h-area-candidates); }
body[data-plane="workspace"] .activity-area-plan { background: var(--h-area-plan-soft); color: var(--h-area-plan); }
body[data-plane="workspace"] .activity-area-requirements { background: var(--h-area-requirements-soft); color: var(--h-area-requirements); }
body[data-plane="workspace"] .activity-area-people { background: var(--h-area-people-soft); color: var(--h-area-people); }
body[data-plane="workspace"] .activity-area-organisation { background: var(--h-area-organisation-soft); color: var(--h-area-organisation); }
body[data-plane="workspace"] .activity-area-access { background: var(--h-area-access-soft); color: var(--h-area-access); }
body[data-plane="workspace"] .activity-area-billing { background: var(--h-area-billing-soft); color: var(--h-area-billing); }
body[data-plane="workspace"] .activity-area-documents { background: var(--h-area-documents-soft); color: var(--h-area-documents); }
body[data-plane="workspace"] .activity-area-questions { background: var(--h-area-questions-soft); color: var(--h-area-questions); }
body[data-plane="workspace"] .activity-area-system { background: var(--h-area-system-soft); color: var(--h-area-system); }
body[data-plane="workspace"] .activity-empty { padding: 20px 26px; }
/* **≤768: each row stacks** (94 §7): time and outcome on one line, then the act, the actor
   and the area pill. The band stays. */
@media (max-width: 48rem) {
  body[data-plane="workspace"] .activity-bar { flex-wrap: wrap; padding: 16px; }
  body[data-plane="workspace"] .activity-row {
    grid-template-columns: 50px minmax(0, 1fr) auto; row-gap: 6px; padding: 12px 16px; }
  body[data-plane="workspace"] .activity-row > .activity-time { grid-column: 1 / 3; grid-row: 1; display: flex; gap: 8px; }
  body[data-plane="workspace"] .activity-row > .activity-outcome { grid-column: 3; grid-row: 1; }
  body[data-plane="workspace"] .activity-row > .activity-tile { grid-column: 1; grid-row: 2 / 4; align-self: start; }
  body[data-plane="workspace"] .activity-row > .activity-what { grid-column: 2 / 4; grid-row: 2; }
  body[data-plane="workspace"] .activity-row > .activity-who {
    grid-column: 2 / 4; grid-row: 3; flex-direction: column; align-items: flex-start; padding-left: 0; border-left: 0; }
  body[data-plane="workspace"] .activity-band { padding: 0 16px; }
}

/* -- page `13e` · Machines, drawn as the design draws it ---------------- ([D-1855])
   **One machine, one card**, which is the same move `13a`'s log made at `D-1850`: the
   rows were hairline-ruled inside a single surface, and a machine carries two acts and
   three sentences of its own — inside one surface those read as notes about the *list*.

   **Purely a visual pass.** No read changed, no control was added, and the two the drawing
   shows and the product has not — a `···` overflow with no third act behind it, and a
   `Select a question…` with no list of questions to fill it — are deliberately absent.

   **Scoped to this plane**, on `D-1850`'s reasoning: `.client-row` is shared, and a rule
   on the primitive would move a surface this drawing says nothing about. */
body[data-plane="workspace"] #machines .listing { display: grid; gap: 0; }
/* **One line per machine** (ux/88 ANSWER 88-a): the tile, the name and its pill, what the
   standing means, and *Stop this machine* at the right — wrapping below 1024. Rows of the
   region's card (ux/84 ANSWER 48-f: cards don't nest). */
body[data-plane="workspace"] .machine-card {
  display: flex; align-items: center; flex-wrap: wrap; gap: 10px 16px;
  background: none; border: 0; border-radius: 0; padding: 16px 18px; margin: 0;
}
body[data-plane="workspace"] .machine-card + .machine-card { border-top: 1px solid var(--h-line); }
/* **A stopped machine keeps its row and loses its ground** — a record, not something to
   act on. */
body[data-plane="workspace"] .machine-card-stopped { background: var(--h-fill-15); }
body[data-plane="workspace"] .machine-mark {
  display: grid; place-items: center; flex: none;
  width: 40px; height: 40px; border-radius: 10px;
  background: var(--h-info-wash); color: var(--h-info-ink);
}
body[data-plane="workspace"] .machine-card-stopped .machine-mark {
  background: var(--h-chip); color: var(--h-chip-ink);
}
body[data-plane="workspace"] .machine-mark .icon { width: 20px; height: 20px; }
body[data-plane="workspace"] .machine-named {
  display: flex; align-items: center; gap: 10px; min-width: 0; }
body[data-plane="workspace"] .machine-label {
  margin: 0; font-size: var(--type-card-title); font-weight: var(--h-w-semi);
  color: var(--h-ink); overflow-wrap: anywhere;
}
/* **The standing is a pill.** */
body[data-plane="workspace"] .machine-standing {
  display: inline-flex; align-items: center; flex: none;
  padding: 3px 11px; border-radius: 999px;
  background: var(--h-ok-soft); color: var(--h-ok);
  font-size: var(--type-pill); font-weight: var(--h-w-semi);
}
body[data-plane="workspace"] .machine-standing-stopped {
  background: var(--h-danger-soft); color: var(--h-danger);
}
body[data-plane="workspace"] .machine-note {
  flex: 1 1 14rem; margin: 0; font-size: var(--type-body); color: var(--h-muted);
}
body[data-plane="workspace"] .machine-card > .client-form { margin: 0 0 0 auto; }
body[data-plane="workspace"] .machine-card .action-mark { display: flex; }
body[data-plane="workspace"] .machine-card .action-mark .icon { width: 16px; height: 16px; }
@media (max-width: 1023px) {
  body[data-plane="workspace"] .machine-note { flex-basis: 100%; }
  body[data-plane="workspace"] .machine-card > .client-form { margin: 0; }
}


/* -- page `1d` · Evicora access, drawn as the design draws it ----------- ([D-1856])
   **A visual pass.** The read is untouched: four columns, their labels and every sentence
   were already here, and what the drawing adds that the page cannot say is left out.

   **Scoped to this plane**, on `D-1850`'s reasoning: `.access-entry` is shared with the
   operator plane's own reading of this log, and a rule on the primitive would move a
   surface this drawing says nothing about. */
/* **Stacked, as the drawing sets them.** Side by side, *Most recent first.* read as a
   qualifier on the number rather than as a statement about the list below. */
body[data-plane="workspace"] .access-summary {
  display: flex; flex-direction: column; gap: 3px; margin: 0 0 14px;
}
body[data-plane="workspace"] .access-count {
  margin: 0; font-size: var(--type-card-title); font-weight: var(--h-w-semi);
  color: var(--h-ink);
}
body[data-plane="workspace"] .access-ordering {
  margin: 0; font-size: var(--type-meta); color: var(--h-muted);
}
/* **The mark leads the column and the two facts stack beside it** — `D-1809`'s stacking
   is unchanged; what moves is that the column now says *this names somebody* before a
   reader has read the pseudonym and wondered what kind of string it is. */
body[data-plane="workspace"] #access-log .access-who {
  display: flex; flex-direction: row; align-items: flex-start; gap: 10px;
}
body[data-plane="workspace"] .access-who-mark {
  display: grid; place-items: center; flex: none;
  width: 28px; height: 28px; border-radius: 999px;
  background: var(--h-info-wash); color: var(--h-info-ink);
}
body[data-plane="workspace"] .access-who-mark .icon { width: 15px; height: 15px; }
body[data-plane="workspace"] .access-who-words {
  display: flex; flex-direction: column; gap: 2px; min-width: 0;
}
body[data-plane="workspace"] .access-who-ref {
  font-weight: var(--h-w-semi); color: var(--h-ink); word-break: break-word;
}
body[data-plane="workspace"] .access-who-role {
  font-size: var(--type-meta); color: var(--h-muted);
}
/* **A rule between sessions and room to breathe.** Each row is four cells of prose, and
   the drawing gives them the spacing a paragraph needs rather than a table's. */
body[data-plane="workspace"] #access-log .listing > li.access-entry {
  padding: 16px 18px; align-items: start;
}
body[data-plane="workspace"] #access-log .listing > li.access-entry + li.access-entry {
  border-top: 1px solid var(--h-line-soft);
}
body[data-plane="workspace"] .access-when {
  color: var(--h-muted); font-size: var(--type-body);
}
body[data-plane="workspace"] .access-why,
body[data-plane="workspace"] .access-what {
  margin: 0; color: var(--h-muted); font-size: var(--type-body);
}

/* -- page `16`, from the later drawing -------------------------------- ([D-1859])
   **The queue's absence is the page's own weight, not a note's.** `D-1858` made it the
   `ⓘ` panel on one drawing; the next one gives it `13e`'s empty-state shape — the answer
   centred under a mark, because a blank on a compliance queue reads as *the page did not
   load* and the statutory clock runs either way. */
/* On the text edge, with no mark (ux/84 ANSWER 48-f). */
body[data-plane="workspace"] .rights-none {
  display: flex; flex-direction: column; align-items: flex-start; text-align: left;
  gap: 8px; padding: 0;
}
body[data-plane="workspace"] .rights-none-lead {
  margin: 0; font-size: var(--type-card-title); font-weight: var(--h-w-semi);
  color: var(--h-ink);
}
body[data-plane="workspace"] .rights-none-detail {
  margin: 0; max-width: var(--prose); color: var(--h-muted);
}
/* -- page `A1` · Your account, from the drawing ------------------------ ([D-1860])
   **Two notes the drawing colours and this page drew grey.** `U-2` reserves alarm for
   `cautionary` and allows it where the sentence already says the thing: *changing how this
   account is protected asks you to confirm it is you* is an interruption stated before it
   happens. It is colour reinforcing a meaning already written.

   **The withheld half is gone** (ux/126, ANSWER 122-a (5)). `#actions .withheld` claimed
   to be scoped to A1, but a region id names no page: A1 lost its `#actions`, and the rule
   went on drawing pages 12, 14 and intake's withheld acts as red alarm cards. A withheld
   act is not a danger (U-2), so every withheld act takes the shared neutral card. */
body[data-plane="workspace"] #actions .note-cautionary {
  background: var(--h-warn-soft); border: 1px solid var(--h-warn-line);
  border-radius: var(--h-radius-sm); padding: 14px 16px; color: var(--h-warn-ink);
}
/* A single blue icon tile leads every card, with the same edge and radius as the
   reference image. */
/* The header is not a card any more (ux/84 §2a), so it takes no card edge here. */
body[data-plane="workspace"]:has(#actions) .surface-section {
  border-color: var(--h-line);
  border-radius: var(--h-radius-sm);
}
/* **The two-factor dialogs keep this treatment** (68: their design is unchanged). It
   reached them through the account page's old `#actions` region, which 68's column no
   longer has, so the dialog names itself beside it. */
/* **The dialogs only** (ANSWER 37-b (4)): `:has(#actions)` also caught Settings'
   *Organisation details* and Billing's acts, padding every section on those two pages 4px
   further in than the rest of the family. */
body[data-plane="workspace"] .security-modal .surface-section {
  padding: 16px 28px;
}
body[data-plane="workspace"]:has(#actions) .surface-section > .region-head,
body[data-plane="workspace"] .security-modal .surface-section > .region-head {
  margin-bottom: 14px;
  gap: 22px;
}
/* A1 v4 is a deliberate two-column card layout. The generic hiring treatment below
   used to collapse `.rail-main` to one track, which made the rail boxes exist in HTML
   but render underneath the main column. Keep this override scoped to this screen. */
body[data-plane="workspace"]:not(:has(.page-sections)):has(#actions) main > .with-rail {
  display: grid;
  grid-template-columns: minmax(0, 2fr) minmax(300px, 1fr);
  gap: var(--card-gap);
  align-items: start;
}
body[data-plane="workspace"]:has(#actions) main > .page-head {
  margin: 0 0 18px;
  padding: 0;
  border: 0;
  background: transparent;
}

body[data-plane="workspace"]:has(#actions) main > .page-head h1 {
  margin: 0 0 4px;
}
/* **Every main-column card is the column's width** (`65 §6`). The flex column inherited
   `align-items: start` from the generic `.rail-main` grid, so each card shrank to its
   content — measured 859, 896 and 413px wide in one 820px column at 1440, and 176px at
   390. `stretch` is what makes one grid of equal cards. */
body[data-plane="workspace"]:not(:has(.page-sections)):has(#actions) main > .with-rail .rail-main {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: var(--card-gap);
}
/* The flex gap is the card rhythm here (`66 §5`), so a card's own margin must not add to it. */
body[data-plane="workspace"]:not(:has(.page-sections)):has(#actions) main > .with-rail .rail-main > * {
  margin: 0;
}
body[data-plane="workspace"]:not(:has(.page-sections)):has(#actions) main > .with-rail .page-rail {
  display: flex;
  flex-direction: column;
  gap: var(--card-gap);
}
body[data-plane="workspace"]:not(:has(.page-sections)):has(#actions) main > .with-rail .page-rail > section {
  margin: 0;
}
/* **The label gives way before the value does** (`65 §6`): a fixed 180px left the value
   10px in a 242px rail at 390 and the page scrolled sideways (409px). */

/* `break-word`, not `anywhere` (62 A1 containment): `anywhere` also shrinks the value's
   min-content width, so the grid gave it 25px at 1024 and it broke letter by letter.
   `break-word` still wraps an address too long for the whole line, and nothing sooner. */

body[data-plane="workspace"]:has(#actions) .page-head h1 {
  text-transform: none;
  letter-spacing: normal;
  font-size: var(--type-page-title);
}
body[data-plane="workspace"]:has(#actions) .region-head {
  margin-bottom: 18px;
}
body[data-plane="workspace"]:has(#actions) .region-head h2 {
  font-size: var(--type-section);
}
body[data-plane="workspace"]:has(#actions) #actions { container-type: inline-size; }
/* The edit state's acts wrap before either one's words do (A1 containment): at 320 the
   footer is 230px and *Update password* was squeezed to two lines beside *Cancel*. */
body[data-plane="workspace"]:has(#actions) #actions .act-block-acts { flex-wrap: wrap; }
body[data-plane="workspace"]:has(#actions) .region-head-main {
  align-items: center;
}
/* The warning's sentence spans the panel under its mark once beside it would leave it
   under 12em (a 300px rail at 1024 left it 179px across six lines). */
@container (max-width: 22em) {
}
/* **A1's containment floor** (62, the A1 addendum to INSTRUCTION 22): a status row's label
   sits above its value once the list is under the mark, the 180px label and a 24em value
   (38.5em) — a container query, because the column is what narrows, not the viewport. */
@container (max-width: 38.5em) {
}
/* **One column where two will not fit, and it has to win** (`65 §6`). The two-column rule
   above is qualified by `:not(:has(.page-sections))`, one class more specific than this was,
   so at 390 A1 kept `minmax(0,2fr) minmax(300px,1fr)` — a 40px main track beside a 300px
   rail — and the cards overflowed it: the page measured 407px wide. Same selector, so the
   media rule wins where it applies. */
@media (max-width: 60rem) {
  body[data-plane="workspace"]:not(:has(.page-sections)):has(#actions) main > .with-rail {
    grid-template-columns: minmax(0, 1fr);
  }
}
/* Every security CTA uses the same control voice and minimum target, whether it
   submits a field-bearing form or is the one-button form in an action group. */
body[data-plane="workspace"] #actions .action {
  min-height: var(--control-h);
  font-size: var(--type-body);
  font-weight: var(--h-w-semi);
}
body[data-plane="workspace"] #actions .actions {
  gap: var(--s3);
}

/* -- the `Report` family, drawn as the insight drawings draw it -------- ([D-1862])
   **Eleven reports, one document, one treatment.** `finding.py` composes them all and
   `26 §2` fixes the same six parts on every one — so a rule here reaches the family and
   cannot reach anything else.

   **The title is set in caps.** Every insight drawing does it, and the reason is legible:
   a report's title *is* its question (`§6h`, `QUESTION_IS_THE_TITLE`), so it is a sentence
   standing where a page name goes. Caps stop it reading as the first line of the report. */
/* **The caps are the ruling and the rung was not** ([D-1909]). `D-1862` argues the
   case: *a report's title **is** its question, so it is a sentence standing where a page
   name goes; caps stop it reading as the first line of the report.* What came with it was
   `--h-t-emphasis`, which put **document-title at 16px on a page whose section-titles are
   19px** — a page name outranked by every heading beneath it. The caps and the tracking
   stay; the rung is the regime's page rung, from the role. */
/* **Superseded for the insights by ux/77** (INSTRUCTION 36; D-1862 and D-1863 narrowed):
   an insight's title is its question in **sentence case**, never capitals. The caps stay
   on 13b alone, which 77 §7 leaves unchanged and which keeps the classic document. */
/* **Sentence case on 13b too** (ux/84 ANSWER 48-g: no capitalised heading anywhere). */
body[data-plane="workspace"] #classic-finding-head h1 {
  letter-spacing: var(--h-track-snug); line-height: var(--h-lh-tight);
}
/* **A hue per part, and `26 §2` is what makes that safe to fix here** — the same argument
   `_part`'s own docstring makes for the marks. The six parts are the same six on all
   eleven reports, so the hue names the *part* and never the report. The assignment is the
   drawings': what was found and what would help are affirmative, what was counted and
   where it came from are informational, what it cannot tell you is the one that may
   alarm — `U-2`, and it is the part that exists to stop a reader concluding too much. */
/* **The note under an evidence line is a second line, not a panel.** The drawings set the
   remedy quietly beneath its row — *run an evaluation*, *waiting — the answer is being
   produced* — and a bordered box made each one an aside about the row above it. */
body[data-plane="workspace"]:has(#classic-finding-head) #evidence .concentration-row > .note {
  background: none; border: 0; padding: 0; margin-top: 3px;
  font-size: var(--type-meta); color: var(--h-muted);
}

/* -- an insight, as ux/77 draws it -------------------------- (INSTRUCTION 36; 77 §2, §7)
   **One surface**: the finding first, the counts one line per row, the comparison, *About
   this count* closed, and *What this cannot tell you* open and quiet — never red (U-2).
   No tile on any part; the parts are small labels inside the one card. */
body[data-plane="workspace"] .finding { display: grid; gap: 16px; min-width: 0; }
body[data-plane="workspace"] .finding > .finding-heading {
  margin: 0; font-size: var(--type-section); font-weight: var(--h-w-semi); color: var(--h-ink);
}
body[data-plane="workspace"] .finding > .finding-claim { margin: 0; color: var(--h-ink); }
body[data-plane="workspace"] .finding .finding-subheading {
  margin: 0 0 6px; font-size: var(--type-meta); font-weight: var(--h-w-semi);
  color: var(--h-muted);
}
body[data-plane="workspace"] .finding .listing > .finding-row {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px;
  padding: 8px 0; border-top: 1px solid var(--h-line); min-width: 0;
}
body[data-plane="workspace"] .finding .finding-row > .finding-label { flex: 1 1 12rem; min-width: 0; }
body[data-plane="workspace"] .finding .finding-row > .finding-count {
  font-variant-numeric: tabular-nums; color: var(--h-ink);
}
body[data-plane="workspace"] .finding .finding-row > .note {
  flex-basis: 100%; margin: 0; background: none; border: 0; padding: 0;
  font-size: var(--type-meta); color: var(--h-muted);
}
body[data-plane="workspace"] .finding .finding-row-zero,
body[data-plane="workspace"] .finding .finding-row-zero > .finding-count { color: var(--h-muted); }
body[data-plane="workspace"] .finding .finding-said > .finding-part { margin: 0; }
body[data-plane="workspace"] .finding .finding-said > .finding-part.quiet { color: var(--h-muted); }
body[data-plane="workspace"] .finding > .about-this-count > summary {
  cursor: pointer; color: var(--h-link); font-size: var(--type-meta);
}
body[data-plane="workspace"] .finding > .about-this-count[open] { display: grid; gap: 12px; }
/* **Declared once, unconditionally** (INSTRUCTION 41, S124): it was sized only inside
   `.finding`, so the role anywhere else fell through to a rung no rule on this plane chose. */
body[data-plane="workspace"] .finding-guard { margin: 0; color: var(--h-muted); font-size: var(--type-meta); }

/* **The two distribution pages' hues are retired by ux/77** (INSTRUCTION 36; D-1863
   narrowed): 18 and 26 are one surface with no tile on any heading, so there is no mark to
   colour. */
/* **The empty collections, one line each** (ux/77 §3, §7; `06 §6i` as amended): a heading
   and a plain list, no card per collection and no check. */
body[data-plane="workspace"] #nothing-open .nothing-open-list {
  list-style: none; margin: 0; padding: 0; display: grid; gap: 4px;
}
body[data-plane="workspace"] #nothing-open .nothing-open-list > li { color: var(--h-muted); }
body[data-plane="workspace"] .nothing-open-scope { display: block; font-size: var(--type-meta); }
body[data-plane="workspace"] #work-head .work-caption {
  margin: 12px 0 0; font-size: var(--type-meta); color: var(--h-muted);
}

/* **A column heading is drawn once, and it was drawn twice** ([D-1863]).
   `listing` and `data_table` are two primitives for one job, and this plane overrode only
   the first: `.listing > li.listing-head` was set back to sentence case, while
   `.grid thead th` kept `style_refined`'s uppercase-and-tracked eyebrow. So `16`'s queue
   headed its five columns `WHOSE DATA · WAITED · ASKING FOR` and `4`'s roster headed its
   own in sentence case, on the same plane, for no reason a reader could see.

   **The drawing is what found it** — `data_access_rights_recruiter.png` sets them in
   sentence case — and the fix is the treatment the sibling primitive already has, applied
   to the eight surfaces that draw a `data_table` here. */
body[data-plane="workspace"] .grid thead th {
  text-transform: none; letter-spacing: normal;
  font-size: var(--type-meta); font-weight: var(--h-w-semi); color: var(--h-muted);
  background: var(--h-fill-18); border-bottom: 1px solid var(--h-line);
}

/* -- page `4` · People, as a compact table (ux/79 §1, §6) ----------------------------------
   **A role name never breaks inside a word** (*Administrato / r* was the defect): it keeps
   one line where the row has room and wraps only between words where it has not. */
body[data-plane="workspace"] .member-row .member-role {
  font-weight: var(--h-w-normal); white-space: nowrap; overflow-wrap: normal;
  word-break: keep-all; hyphens: none;
}
body[data-plane="workspace"] .member-row .member-open-jobs { font-variant-numeric: tabular-nums; }
/* **An address never breaks inside a token** (ANSWER 37-b (1)): one line wherever the
   table has columns, and below `48rem` only at the `<wbr>` after `@` or `.`. */
body[data-plane="workspace"] .member-row .member-email { overflow-wrap: normal; word-break: normal; white-space: nowrap; }
body[data-plane="workspace"] .member-row .member-email .address-part { white-space: nowrap; }
@media (max-width: 48rem) {
  body[data-plane="workspace"] .member-row .member-email { white-space: normal; }
}
/* **The Joined cell wraps** — an invited row says *Invited {date} · expires in {n} days*,
   and held on one line it ran into the columns beside it. */
body[data-plane="workspace"] .member-row .member-joined { white-space: normal; min-width: 0; }
body[data-plane="workspace"] .seats-exhausted { margin: 0; font-size: var(--type-meta); color: var(--h-muted); }
/* **The menu opens over the rows below, anchored to its button** — one `<details>` per
   row and no script. Right-aligned where the row has columns; left-aligned once it stacks,
   so it never paints past the viewport. */
/* **The menu floats over the table** (ux/87 ANSWER 87-a): right-aligned under its button,
   above the rows after it, and the row's height never changes when it opens. The roster
   fits its column at every width (it stacks from `60rem`), so it is not a scroller
   ([D-1447]'s reason for opening in the flow) and nothing may cut the panel off. */
body[data-plane="workspace"] .listing.listing-columns.member-row { overflow: visible; }
body[data-plane="workspace"] .member-menu-cell { justify-self: end; }
body[data-plane="workspace"] .member-row .row-menu { position: relative; }
body[data-plane="workspace"] .member-row .row-menu-panel {
  position: absolute; top: 100%; right: 0; z-index: 5; max-width: none;
}
body[data-plane="workspace"] .row-menu { display: flex; flex-direction: column; align-items: flex-end; }
body[data-plane="workspace"] .row-menu > summary.row-menu-button {
  list-style: none; cursor: pointer; display: inline-grid; place-items: center;
  min-width: 2.25rem; min-height: 2.25rem; border-radius: 8px; color: var(--h-ink);
}
body[data-plane="workspace"] .row-menu > summary::-webkit-details-marker { display: none; }
body[data-plane="workspace"] .row-menu > summary:hover,
body[data-plane="workspace"] .row-menu[open] > summary { background: var(--h-fill-18); }
body[data-plane="workspace"] .row-menu-panel {
  margin-top: 4px; display: grid; gap: 4px;
  width: max-content; min-width: 14rem; max-width: 100%;
  padding: 8px; background: var(--h-card); border: 1px solid var(--h-line);
  border-radius: 10px; box-shadow: 0 8px 24px rgba(15, 23, 42, 0.12);
}
body[data-plane="workspace"] .row-menu-panel > .action-form { margin: 0; display: grid; gap: 6px; }
body[data-plane="workspace"] .row-menu-panel .action { width: 100%; justify-content: flex-start; }
body[data-plane="workspace"] .row-menu-rule { border: 0; border-top: 1px solid var(--h-line); margin: 4px 0; }
/* **Six columns stack from `60rem`**, where the page goes to one track (ux/79): between there
   and `52rem` the table was wider than its column, and a roster whose menus open out of
   view is the acted-on-cell case [D-1447] rules out for a contained scroller. */
@media (max-width: 60rem) {
  body[data-plane="workspace"] .listing.listing-columns.member-row { display: block; }
  body[data-plane="workspace"] .listing.listing-columns.member-row > li {
    grid-template-columns: 1fr;
  }
  body[data-plane="workspace"] .listing > li.listing-head.member-row { display: none; }
  body[data-plane="workspace"] .member-menu-cell { justify-self: stretch; }
  body[data-plane="workspace"] .row-menu { align-items: flex-start; }
  body[data-plane="workspace"] .row-menu-panel { min-width: 0; width: 100%; box-sizing: border-box; }
  /* Stacked, the panel spans the row's card under its ⋯, still floating. */
  body[data-plane="workspace"] .listing.listing-columns.member-row > li { position: relative; }
  body[data-plane="workspace"] .member-row .row-menu { position: static; }
  body[data-plane="workspace"] .member-row .row-menu-panel { top: auto; left: 16px; right: 16px; width: auto; max-width: none; }
  body[data-plane="workspace"] .row-menu-panel .action { text-align: left; }
  body[data-plane="workspace"] .member-row .member-role { white-space: normal; }
}

/* -- what capacity a reader holds, where it is stated ------------------ ([D-1864])
   **Title then clause**, which is how page `4` has drawn a role since `D-1630` and the
   shape this borrows rather than invents. The title carries the weight because it is the
   word; the clause is what makes the word resolvable, which is the whole point. */
body[data-plane="workspace"] .your-role {
  margin: 8px 0 0; font-size: var(--type-body); color: var(--h-muted);
}
body[data-plane="workspace"] .your-role-title {
  display: block; font-weight: var(--h-w-semi); color: var(--h-ink);
}
/* **Where the capacity is the page's answer, it is given a panel** ([D-1883]).
   `org_entry.png` draws `1m`'s role as a tinted block with a mark in a left gutter, and
   that is the reader the page exists for: the sentence above says *Evicora chooses no
   first page for **your role***, so the role is what the whole screen turns on. Beside a
   paragraph it read as a footnote to the sentence that named it.

   **The same pair and the same order**, title then clause — page `4`'s shape since
   `D-1630`. Only the container changes, and only where the capacity is the subject: on
   `1e`'s rows and on `A1` it qualifies something else and stays a line. */
body[data-plane="workspace"] .your-role-panel {
  display: flex; align-items: flex-start; gap: 16px;
  margin: 20px 0 0; padding: 16px 18px;
  background: var(--h-accent-soft); border-radius: 10px;
}
body[data-plane="workspace"] .your-role-panel .your-role { margin: 0; }
body[data-plane="workspace"] .your-role-mark {
  flex: 0 0 auto; color: var(--h-accent); display: inline-flex;
}
body[data-plane="workspace"] .your-role-mark svg { width: 22px; height: 22px; }

/* **The workspace plane's own tokens on the shared header** (`63 §4–§5`). Layout is
   `style_shell`'s, one header for every plane; what differs here is only the recruiter
   plane's ink, ground, line and chip — so the 1440 rendering keeps the plane's look while
   the structure underneath it is the conformance one. */
body[data-plane="workspace"] .masthead.headers-v2 {
  border-color:var(--h-line); border-radius:var(--h-radius-sm); background:var(--h-card);
  box-shadow:0 8px 24px color-mix(in srgb, var(--h-accent) 8%, transparent);
}
body[data-plane="workspace"] .masthead.headers-v2 .header-primary a,
body[data-plane="workspace"] .masthead.headers-v2 .account-nav a,
body[data-plane="workspace"] .masthead.headers-v2 .masthead-more-toggle { color:var(--h-ink); }
/* The plane's lede size in the one-row bar; at ≤1023 the shell's cell label size stands. */
@media (min-width: 64rem) {
  body[data-plane="workspace"] .masthead.headers-v2 .header-primary a,
  body[data-plane="workspace"] .masthead.headers-v2 .account-nav a,
  body[data-plane="workspace"] .masthead.headers-v2 .masthead-more-toggle {
    font-size:var(--type-nav); font-weight:var(--h-w-semi);
  }
  /* ux/123 §1: the navigation's icons at 20×20px (desktop, ≥1024: §4 (d)). */
  body[data-plane="workspace"] .masthead.headers-v2 .header-primary a .icon,
  body[data-plane="workspace"] .masthead.headers-v2 .account-nav a .icon,
  body[data-plane="workspace"] .masthead.headers-v2 .masthead-more-toggle .icon { width:20px; height:20px; }
}
body[data-plane="workspace"] .masthead.headers-v2 .header-primary a:hover,
body[data-plane="workspace"] .masthead.headers-v2 .account-nav a:hover,
body[data-plane="workspace"] .masthead.headers-v2 .masthead-more-toggle:hover,
body[data-plane="workspace"] .masthead.headers-v2 a[aria-current="page"],
body[data-plane="workspace"] .masthead.headers-v2 .masthead-more-toggle[aria-current="page"] { color:var(--h-accent); }
/* ux/123 §4 (d): at a phone the nav keeps its compact cells, their labels on the meta-small
   role. */
@media (max-width: 63.9375rem) {
  body[data-plane="workspace"] .masthead.headers-v2 .header-primary a,
  body[data-plane="workspace"] .masthead.headers-v2 .account-nav a,
  body[data-plane="workspace"] .masthead.headers-v2 .masthead-more-toggle { font-size: var(--type-meta-small); }
}
@media (max-width: 63.9375rem) {
  body[data-plane="workspace"] .masthead.headers-v2 .masthead-more-toggle[data-current-folded] {
    color:var(--h-accent);
  }
}
body[data-plane="workspace"] .masthead.headers-v2 .account-monogram {
  background:var(--h-chip); color:var(--h-ink); font-size:var(--type-meta-strong);
  font-weight:var(--h-w-bold);
}
body[data-plane="workspace"] .masthead.headers-v2 .whoami {
  color:var(--h-ink); font-size:var(--type-meta-strong); font-weight:var(--h-w-semi);
}
body[data-plane="workspace"] .masthead.headers-v2 .acting-as {
  border-radius:var(--h-radius-sm); background:var(--h-accent-soft); color:var(--h-accent);
  font-size:var(--type-meta-small); font-weight:var(--h-w-semi);
}

/* Settings pages retain the section-navigation column, so they must not inherit
   the two-column account-security layout above. */
body[data-plane="workspace"]:has(.page-sections) main > .with-rail {
  display:grid;
  grid-template-columns:var(--sections) minmax(0, 1fr) var(--rail);
  gap:var(--s6);
  align-items:start;
}
body[data-plane="workspace"]:has(.page-sections) main > .with-rail > .page-sections {
  grid-column:auto;
}
/* **And it narrows the way `.with-sections` always did** (UXA-01). The rule above restates
   the three columns one class more specific than `style_workspace`'s responsive pair, so
   the pair stopped applying: at 320 the section nav kept its 240px, the rail its 336px, and
   the page between them was 50px wide inside a 656px document. The same two steps, at the
   same widths, on the selector that now carries the grid. */
@media (max-width: 72rem) {
  body[data-plane="workspace"]:has(.page-sections) main > .with-rail {
    grid-template-columns:minmax(0, 1fr) var(--rail);
  }
  body[data-plane="workspace"]:has(.page-sections) main > .with-rail > .page-sections {
    grid-column:1 / -1;
  }
}
@media (max-width: 60rem) {
  body[data-plane="workspace"]:has(.page-sections) main > .with-rail {
    grid-template-columns:minmax(0, 1fr);
  }
}

/* A1's one-time MFA and recovery responses are dialogs over the canonical A1 document.
   The PNGs never replace the page with a second document: the page remains visible,
   the whole viewport is dimmed, and the one-time material sits in a centered dialog.

   **A real `<dialog>`, modal without script** (`65 §3`, QUESTION 19a). It is rendered
   open and the page behind it is `inert` (`document.page`); this makes the element itself
   the fixed layer over the **whole document** — its own ground is the backdrop, since a
   parser-opened dialog has no `::backdrop` — and undoes the UA's centred-box defaults. */
body[data-plane="workspace"] .security-dialog {
  position:fixed; inset:0; z-index:100; width:auto; height:auto;
  max-width:none; max-height:none; margin:0; border:0;
  display:flex; align-items:center; justify-content:center; padding:var(--s6);
  color:inherit; background:color-mix(in srgb, var(--h-ink) 52%, transparent);
  overflow:auto;
}
body[data-plane="workspace"] .security-modal {
  position:relative; width:min(52rem, 100%); max-height:calc(100vh - 3rem); overflow:auto;
  margin:0; padding:var(--s7);
  background:var(--h-card); border:1px solid var(--h-line); border-radius:var(--h-radius);
  box-shadow:0 24px 64px color-mix(in srgb, var(--h-ink) 24%, transparent);
}
body[data-plane="workspace"] .security-modal-top {
  display:flex; align-items:flex-start; justify-content:space-between; gap:var(--s5);
  margin-bottom:var(--s6);
}
body[data-plane="workspace"] .security-modal-title {
  margin:0; color:var(--h-ink); font-size:var(--type-page-title); line-height:var(--h-lh-tight);
}
body[data-plane="workspace"] .security-modal-lede {
  margin:var(--s1) 0 0; color:var(--h-muted); font-size:var(--type-lede);
}
body[data-plane="workspace"] .security-modal-close {
  color:var(--h-muted); font-size:var(--type-page-title); line-height:var(--lh-flat);
  text-decoration:none;
}
body[data-plane="workspace"] .security-modal .surface-section {
  margin:0 0 var(--s4); border:1px solid var(--h-line); border-radius:var(--h-radius-sm);
  background:var(--h-fill-18);
}
body[data-plane="workspace"] .security-modal .surface-section:last-of-type { margin-bottom:0; }
body[data-plane="workspace"] .security-modal .region-head { margin-bottom:var(--s3); }
body[data-plane="workspace"] .security-modal-done {
  display:flex; flex-wrap:wrap; justify-content:flex-end; gap:var(--s3);
  width:auto; margin:var(--s5) 0 0;
}
/* **Treatments for what the modals draw** — the setup key, the `otpauth://` link, the
   heading beside the close control and the recovery grid. An earlier pass styled a
   three-step modal with copy buttons and a QR panel that no renderer draws (a copy button
   needs script, and the page runs none), and left these five without a rule: the link is
   one unbroken token and overflowed the dialog. */
body[data-plane="workspace"] .security-modal-heading { min-width:0; }
body[data-plane="workspace"] .totp-secret,
body[data-plane="workspace"] .totp-uri {
  margin:var(--s3) 0; padding:var(--s3); border:1px solid var(--h-line);
  border-radius:var(--h-radius-sm); background:var(--h-card);
}
body[data-plane="workspace"] .totp-secret code { overflow-wrap:anywhere; }
/* **The QR code: dark on white whatever the theme, and at a size a phone reads** (`65 §4`).
   The SVG carries its own white ground and quiet zone; the box only sizes it. The link
   under the key is a link, not a boxed token, now that it no longer prints the URI. */
body[data-plane="workspace"] .totp-qr { margin:var(--s3) 0; }
body[data-plane="workspace"] .totp-qr .qr-code {
  display:block; width:min(12rem, 100%); height:auto; border-radius:var(--h-radius-sm);
}
body[data-plane="workspace"] .totp-uri { border:0; padding:0; background:none; }
/* **One code per line** (69 §4): `XXXX-XXXX-XXXX` in the monospace face, its groups set
   apart by their hyphens, never wrapped and never over one another (UXA-28). */
body[data-plane="workspace"] .security-modal-recovery .recovery-codes {
  display:grid; grid-template-columns:minmax(0, 1fr);
  gap:var(--s3); font-family:var(--font-mono);
  margin:var(--s4) 0 0; padding:var(--s4); list-style:none; border:1px solid var(--h-line);
  border-radius:var(--h-radius-sm); background:var(--h-card);
}
body[data-plane="workspace"] .security-modal-recovery .recovery-codes code {
  white-space:nowrap; font-family:inherit; }
@media (max-width: 42rem) {
  body[data-plane="workspace"] .security-dialog { padding:var(--s3); }
  body[data-plane="workspace"] .security-modal { padding:var(--s4); }
}

/* ==========================================================================
   A1 · Account — one calm settings column (68, owner-approved 2026-09-24).
   Three sections, each a heading and a white card of rows: label (hint beneath) | value |
   one action. No rail, no icon tiles, no shadow; three type sizes per section.
   ========================================================================== */
/* **The account's pages are list/settings pages** (ux/84 §1): the column is the container,
   68's structure at container width, and the title's rule ends where the cards do. */
body[data-plane="workspace"] .account-column { display: grid; gap: var(--card-gap); }
body[data-plane="workspace"] .account-section { display: grid; gap: 10px; min-width: 0; }
body[data-plane="workspace"] .account-section-name {
  /* ux/121 §1: a card head's heading, measured at 23px against the shell. */
  margin: 0; font-size: var(--type-section); font-weight: var(--h-w-bold); color: var(--h-ink);
  line-height: var(--lh-snug);
}
body[data-plane="workspace"] .account-card {
  background: var(--h-card); border: 1px solid var(--h-line); border-radius: 10px;
  min-width: 0;
}
body[data-plane="workspace"] .account-row {
  display: grid; grid-template-columns: var(--setting-label) minmax(0, 1fr) auto;
  gap: 20px; align-items: center; padding: 16px var(--s5);
}
body[data-plane="workspace"] .account-card > * + * { border-top: 1px solid var(--h-line); }
body[data-plane="workspace"] .account-row-label {
  margin: 0; font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink);
  line-height: var(--h-lh-body);
}
body[data-plane="workspace"] .account-row-hint,
body[data-plane="workspace"] .account-row-value .account-quiet {
  margin: 3px 0 0; font-size: var(--type-meta); color: var(--h-muted); line-height: var(--h-lh-snug);
}
body[data-plane="workspace"] .account-row-value {
  min-width: 0; font-size: var(--type-body); color: var(--h-ink); line-height: var(--h-lh-body);
  overflow-wrap: break-word;
}
body[data-plane="workspace"] .account-row-value .account-quiet { display: inline; margin: 0; }
body[data-plane="workspace"] .account-row-value p.account-quiet { display: block; }
body[data-plane="workspace"] .account-value { font-weight: var(--h-w-mid); }
/* ux/80 §8: an 80-character name, in a script without spaces, wraps inside its row at 320. */
body[data-plane="workspace"] .account-name { overflow-wrap: anywhere; }
body[data-plane="workspace"] .account-dots { color: var(--h-ink); }
body[data-plane="workspace"] .account-nobreak { white-space: nowrap; }
body[data-plane="workspace"] .account-when,
body[data-plane="workspace"] .account-value { font-variant-numeric: tabular-nums; }
body[data-plane="workspace"] .account-state {
  display: inline-flex; align-items: center; gap: 7px; font-weight: var(--h-w-mid);
}
body[data-plane="workspace"] .account-dot {
  width: 8px; height: 8px; border-radius: 50%; background: var(--h-muted); flex: none;
}
body[data-plane="workspace"] .account-dot-on { background: var(--h-ok); }
body[data-plane="workspace"] .account-row-act { justify-self: end; }
body[data-plane="workspace"] .account-row-name,
body[data-plane="workspace"] .account-callout-words { min-width: 0; }
/* **Three sizes per section** (68 §6): the product's two button styles, at the body size. */
body[data-plane="workspace"] .account-column .action { font-size: var(--type-body); }
body[data-plane="workspace"] .account-row-act .action-form { margin: 0; }
body[data-plane="workspace"] .account-row-value .advisory { margin: 8px 0 0; }
/* The recommendation (68 §2): caution or good, never danger; its button is the page's one
   filled primary unless an open edit state carries it. */
body[data-plane="workspace"] .account-callout {
  display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 14px;
  align-items: start; padding: 16px 18px; border-radius: 10px; border: 1px solid;
}
body[data-plane="workspace"] .account-callout-attention {
  background: var(--caution-bg); border-color: var(--caution-rule);
}
body[data-plane="workspace"] .account-callout-attention .account-callout-mark {
  color: var(--caution);
}
body[data-plane="workspace"] .account-callout-good {
  grid-template-columns: auto minmax(0, 1fr); padding: 12px 16px;
  background: var(--h-ok-wash); border-color: var(--h-ok-line);
}
body[data-plane="workspace"] .account-callout-good .account-callout-mark { color: var(--h-ok); }
body[data-plane="workspace"] .account-callout-mark { display: inline-flex; margin-top: 2px; }
body[data-plane="workspace"] .account-callout-heading {
  margin: 0 0 2px; font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink);
}
body[data-plane="workspace"] .account-callout-body {
  margin: 0; font-size: var(--type-body); color: var(--h-ink-2); line-height: var(--h-lh-body);
}
body[data-plane="workspace"] .account-callout-act { align-self: center; }
body[data-plane="workspace"] .account-callout-act .action-form { margin: 0; }
/* **ux/84 §4a — Setting up**: the code field and *Finish setup* inside the callout, the
   field at 480px and the button beside it, stacking on a phone; then the quiet *Start again*
   as a link-weight button. */
body[data-plane="workspace"] .account-callout-form {
  display: flex; flex-wrap: wrap; align-items: flex-end; gap: 8px 12px; margin: 12px 0 0;
}
body[data-plane="workspace"] .account-callout-field { flex: 1 1 240px; max-width: var(--field); margin: 0; }
body[data-plane="workspace"] .account-callout-again { margin: 8px 0 0; }
/* A wrong code's sentence, on its own line under the field and *Finish setup*. */
body[data-plane="workspace"] .account-callout-error { flex: 1 0 100%; max-width: none; margin: 0; order: 1; }
@media (max-width: 48rem) {
  /* Stacked, the source order is the reading order: field, its error, then the button. */
  body[data-plane="workspace"] .account-callout-error { order: 0; }
}
/* A pending address change's two acts, under the email row (ux/84 §4a; 68's row family). */
body[data-plane="workspace"] .account-inline-act {
  display: flex; flex-wrap: wrap; align-items: flex-end; gap: 8px 12px;
  padding: 12px 20px; border-top: 1px solid var(--h-line);
}
body[data-plane="workspace"] .account-inline-act .field { flex: 1 1 240px; max-width: var(--field); margin: 0; }
body[data-plane="workspace"] .link-button {
  background: none; border: 0; padding: 0; font: inherit; color: var(--h-link);
  text-decoration: underline; cursor: pointer;
}
/* **84 §4a's one quiet *Start again***: the prompt and its link on one line, quiet,
   under *Finish setup* — a link, not a second button beside the task's own. */
body[data-plane="workspace"] .account-callout .account-callout-again {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 8px; margin: 10px 0 0;
}
/* **The quiet role, sized once on this plane** (S124): a row's hint and the callout's
   prompt are the same role. */
body[data-plane="workspace"] .account-quiet { font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .account-callout .account-callout-again .link-button {
  background: none; border: 0; padding: 0; min-height: 0; box-shadow: none; font: inherit;
  font-size: var(--type-meta); color: var(--h-link); text-decoration: underline;
}
/* An edit state, open in place under its row — its fields on the row's text edge (`--s5`, one
   title edge: ux/84 84-S; it sat 4px left of the row above it). */
body[data-plane="workspace"] .account-edit {
  display: grid; gap: 14px; padding: 18px var(--s5) 20px; background: var(--h-page); margin: 0;
}
body[data-plane="workspace"] .account-edit .field { display: grid; gap: 6px; max-width: var(--field); margin: 0; }
/* The credential forms' shared evidence sentence (SEC-25), one field gap above the fields it
   concerns — the form's own 14px, as the other inline errors sit (the PO, after D-2686). */
body[data-plane="workspace"] .account-edit-alert { margin: 0 0 14px; }
body[data-plane="workspace"] .account-edit-fields { display: grid; gap: 14px; }
body[data-plane="workspace"] .account-edit label,
body[data-plane="workspace"] .account-edit input,
body[data-plane="workspace"] .account-edit select { font-size: var(--type-body); }
body[data-plane="workspace"] .account-edit-acts { display: flex; flex-wrap: wrap; gap: 10px; }
body[data-plane="workspace"] .account-cancel {
  background: transparent; border-color: transparent; color: var(--h-muted);
}
/* ==========================================================================
   A5 · Notices — the Account family's column (70 §1–§2, §6). A caption, then one white
   card of rows split by hairlines: whose · when, what, what to do. No shadow, no mark, no
   caution; the accent only on a link.
   ========================================================================== */
body[data-plane="workspace"] .notices { display: grid; gap: 8px; min-width: 0; }
/* **ux/119 · Notices, to the owner's `notices_design_changes` master**: the header in one white
   card with the list — the bell tile, the title and lede, a hairline, *Most recent first*
   (119-a: no filter); each notice its own bordered card, a thin connector joining the discs
   (a timeline); the disc per the view's kind map; *whose · about* quietly, the time at the
   top right, **what** bold, the remedy linked where it is the action.
   `.notices` stays in the paragraph rules for specificity: a reader with no spine matches
   `:not(:has(.masthead > nav)) p`, which outranks a two-class rule. */
body[data-plane="workspace"] .head-card:has(.nt-head):not(#hp-x) {
  padding: 30px 32px; background: var(--h-card); border: 1px solid var(--h-line); border-radius: 16px;
  box-shadow: 0 6px 22px color-mix(in srgb, var(--h-ink) 4%, transparent); }
body[data-plane="workspace"] .nt-head:not(#hp-x) { display: grid; grid-template-columns: 72px minmax(0, 1fr); gap: 0 26px; align-items: center;
  padding: 0 0 26px; border-bottom: 1px solid var(--h-line); }
body[data-plane="workspace"] .nt-tile {
  display: inline-flex; align-items: center; justify-content: center; width: 72px; height: 72px; border-radius: 14px;
  background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .nt-tile .icon { width: 32px; height: 32px; margin: 0; }
body[data-plane="workspace"] .notices { display: grid; gap: 16px; margin: 22px 0 0; }
body[data-plane="workspace"] .notices .notices-order:not(#hp-x) { margin: 0; font-size: var(--type-body); color: var(--h-muted); }
body[data-plane="workspace"] .notices-list { display: grid; gap: 14px; margin: 0; padding: 0; list-style: none; }
body[data-plane="workspace"] .notice-row.nt-card {
  position: relative; display: grid; grid-template-columns: 64px minmax(0, 1fr) auto; gap: 0 24px; align-items: start;
  padding: 20px 24px 20px 26px; border: 1px solid var(--h-line); border-radius: 12px; background: var(--h-card);
  min-width: 0; overflow-wrap: break-word; }
/* The connector: from under one disc to the next card's disc. */
body[data-plane="workspace"] .notice-row.nt-card + .notice-row.nt-card::before {
  content: ""; position: absolute; left: 57px; top: -52px; height: 58px; width: 2px; background: var(--h-line); }
body[data-plane="workspace"] .nt-disc {
  position: relative; z-index: 1; display: inline-flex; align-items: center; justify-content: center; width: 64px;
  height: 64px; border-radius: 50%; }
body[data-plane="workspace"] .nt-disc .icon { width: 26px; height: 26px; margin: 0; }
body[data-plane="workspace"] .nt-disc-approved { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="workspace"] .nt-disc-security { background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .nt-disc-other { background: var(--h-fill-08); color: var(--h-ink-2); }
body[data-plane="workspace"] .nt-body { display: grid; gap: 6px; min-width: 0; padding-top: 2px; }
body[data-plane="workspace"] .notices .nt-body p:not(#hp-x), body[data-plane="workspace"] .notices .notices-empty p:not(#hp-x) { margin: 0; }
body[data-plane="workspace"] .notice-meta { font-size: var(--type-meta); color: var(--h-muted); line-height: var(--h-lh-snug); }
body[data-plane="workspace"] .notice-owner { color: var(--h-ink-2); }
body[data-plane="workspace"] .notice-about { color: var(--h-muted); }
body[data-plane="workspace"] .nt-sep { margin: 0 10px; color: var(--h-muted); }
body[data-plane="workspace"] .notice-what, body[data-plane="workspace"] .notices-empty-title {
  font-size: var(--type-lede); font-weight: var(--h-w-bold); color: var(--h-ink); line-height: var(--h-lh-body); }
/* **Never fainter than the time** (70 §2, N-1; `D-066`): ink, at the control size. */
body[data-plane="workspace"] .notice-do, body[data-plane="workspace"] .notices-empty-detail { font-size: var(--type-body); color: var(--h-ink); line-height: var(--h-lh-body); }
body[data-plane="workspace"] .notices-empty-detail, body[data-plane="workspace"] .notice-unavailable { color: var(--h-muted); }
body[data-plane="workspace"] .notice-do a { color: var(--h-link); text-decoration: underline; display: inline-block; padding: 4px 0; margin: -4px 0; }
body[data-plane="workspace"] .notice-do a.nt-go { display: inline-flex; align-items: center; gap: 12px; }
body[data-plane="workspace"] .nt-go .icon { width: 20px; height: 20px; margin: 0; }
body[data-plane="workspace"] .notices .nt-when:not(#hp-x) { margin: 4px 0 0; font-size: var(--type-meta); color: var(--h-muted); white-space: nowrap;
  font-variant-numeric: tabular-nums; }
body[data-plane="workspace"] .notices-empty { display: grid; gap: 4px; padding: 20px 24px; border: 1px solid var(--h-line); border-radius: 12px; }
@media (max-width: 40rem) {
  body[data-plane="workspace"] .head-card:has(.nt-head):not(#hp-x) { padding: 20px 16px; }
  body[data-plane="workspace"] .nt-head:not(#hp-x) { grid-template-columns: 52px minmax(0, 1fr); gap: 0 14px; padding-bottom: 18px; }
  body[data-plane="workspace"] .nt-tile { width: 52px; height: 52px; }
  body[data-plane="workspace"] .notice-row.nt-card { grid-template-columns: 44px minmax(0, 1fr); gap: 4px 14px; padding: 16px; }
  body[data-plane="workspace"] .nt-disc { width: 44px; height: 44px; }
  body[data-plane="workspace"] .notices .nt-when:not(#hp-x) { grid-column: 2; grid-row: 1; margin: 0; white-space: normal; }
  body[data-plane="workspace"] .nt-body { grid-column: 2; }
  body[data-plane="workspace"] .notice-row.nt-card + .notice-row.nt-card::before { left: 37px; top: -34px; height: 50px; }
  body[data-plane="workspace"] .notices-empty { padding: 14px 16px; }
  body[data-plane="workspace"] .notice-do a { padding: 14px 0; margin: -14px 0; }
}

/* A phone: each row stacks label, hint, value, then action; the callout's button drops
   below its words; 44px targets (68 §6). */
@media (max-width: 48rem) {
  body[data-plane="workspace"] .account-row {
    grid-template-columns: minmax(0, 1fr); gap: 6px; padding: 14px 16px;
  }
  body[data-plane="workspace"] .account-row-act { justify-self: start; }
  body[data-plane="workspace"] .account-row-act:empty { display: none; }
  body[data-plane="workspace"] .account-callout { grid-template-columns: auto minmax(0, 1fr); }
  body[data-plane="workspace"] .account-callout-act { grid-column: 1 / -1; justify-self: start; }
  body[data-plane="workspace"] .account-column .action { min-height: 44px; }
  body[data-plane="workspace"] .account-edit { padding: 16px; }
}
/* ==========================================================================
   ux/86 · visual language v2 — the components every master is built from
   (`components.labelled_card`, `hero_card`, `stat_tiles`, `person_line`, `state_card`,
   `confirm_panel`; the Settings panel is `settings_section`'s nav, dressed here).
   ========================================================================== */
/* **The labelled card**: white, rounded, a soft shadow; its small uppercase label is its
   `h2` — the one place 48-g's rule against capitalised headings is narrowed. */
body[data-plane="workspace"] .card-labelled {
  position: relative; box-sizing: border-box; min-width: 0; margin: 0 0 var(--card-gap);
  padding: 22px 24px; background: var(--h-card); border: 1px solid var(--h-line);
  border-radius: var(--h-radius); box-shadow: 0 1px 3px var(--h-line);
}
body[data-plane="workspace"] .card-label {
  margin: 0 0 14px; font-size: var(--type-meta-strong); font-weight: var(--h-w-mid);
  letter-spacing: var(--track-wide); text-transform: uppercase; color: var(--h-muted);
}
body[data-plane="workspace"] .card-pair {
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--card-gap);
  margin: 0 0 var(--card-gap);
}
body[data-plane="workspace"] .card-pair > .card-labelled { margin: 0; }
@media (max-width: 1023px) {
  body[data-plane="workspace"] .card-pair { grid-template-columns: minmax(0, 1fr); }
}
body[data-plane="workspace"] .card-acts { display: flex; flex-wrap: wrap; gap: 12px; margin: 20px 0 0; }

/* **The hero card**: a soft blue gradient toward its illustration on the right; the name
   large with its pill. The words keep to the left, clear of the drawing. */
body[data-plane="workspace"] .card-hero {
  overflow: hidden;
  background: linear-gradient(100deg, var(--h-card) 40%,
              color-mix(in srgb, var(--h-accent) 9%, var(--h-card)) 100%);
}
body[data-plane="workspace"] .card-hero { padding-right: calc(30% + 24px); }
body[data-plane="workspace"] .card-hero > :not(.hero-art-frame) { position: relative; z-index: 1; }
body[data-plane="workspace"] .hero-art-frame {
  position: absolute; top: 0; right: 0; bottom: 0; width: 32%; z-index: 0;
  display: flex; align-items: center; justify-content: center; pointer-events: none;
}
body[data-plane="workspace"] .hero-art { width: min(100%, 320px); height: auto; }
body[data-plane="workspace"] .hero-art .art-peak {
  fill: color-mix(in srgb, var(--h-accent) 14%, var(--h-card)); }
body[data-plane="workspace"] .hero-art .art-back { fill: var(--h-fill-08); stroke: var(--h-line); }
body[data-plane="workspace"] .hero-art .art-paper { fill: var(--h-card); stroke: var(--h-line); }
body[data-plane="workspace"] .hero-art .art-line { fill: var(--h-fill-08); }
body[data-plane="workspace"] .hero-art .art-line-strong,
body[data-plane="workspace"] .hero-art .art-crown {
  fill: color-mix(in srgb, var(--h-accent) 45%, var(--h-card)); }
body[data-plane="workspace"] .hero-art .art-spark { fill: var(--h-accent); opacity: 0.55; }
body[data-plane="workspace"] .hero-title {
  display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin: 0 0 18px;
}
body[data-plane="workspace"] .hero-name {
  font-size: var(--type-section); font-weight: var(--h-w-bold); color: var(--h-ink);
  line-height: var(--h-lh-flat);
}
@media (max-width: 768px) {
  body[data-plane="workspace"] .hero-art-frame { display: none; }
  body[data-plane="workspace"] .card-hero { padding-right: 24px; }
}

/* **Stat tiles**: facts only — a tinted icon tile, the number large and tabular, its
   caption; hairlines between; two-up on a phone. */
body[data-plane="workspace"] .stat-tiles {
  list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 14px 0;
}
body[data-plane="workspace"] .stat-tile {
  display: flex; align-items: flex-start; gap: 12px; padding: 0 20px;
}
body[data-plane="workspace"] .stat-tile:first-child { padding-left: 0; }
body[data-plane="workspace"] .stat-tile + .stat-tile { border-left: 1px solid var(--h-line); }
body[data-plane="workspace"] .stat-mark {
  flex: 0 0 auto; width: 44px; height: 44px; border-radius: var(--h-radius-sm);
  background: var(--h-fill-08); color: var(--h-accent);
  display: inline-flex; align-items: center; justify-content: center;
}
body[data-plane="workspace"] .stat-mark svg { width: 20px; height: 20px; }
body[data-plane="workspace"] .stat-words { display: flex; flex-direction: column; min-width: 0; }
body[data-plane="workspace"] .stat-value {
  font-size: var(--type-figure); font-weight: var(--h-w-bold); color: var(--h-ink);
  font-variant-numeric: tabular-nums; line-height: var(--h-lh-flat);
}
body[data-plane="workspace"] .stat-caption {
  font-size: var(--type-meta); color: var(--h-muted);
}
body[data-plane="workspace"] .stat-learn { margin: 14px 0 0; font-size: var(--type-meta); }
/* **At ≤480 the tiles are one row of three** (86-b §3): the number over its short caption,
   the icon tiles not drawn. */
@media (max-width: 480px) {
  body[data-plane="workspace"] .stat-tiles.stat-tiles {
    grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px;
  }
  body[data-plane="workspace"] .stat-tile .stat-mark { display: none; }
}
body[data-plane="workspace"] .card-link-words { white-space: nowrap; overflow-wrap: normal; }
/* One line where it fits (86-b); at the larger scale (ux/86 ANSWER 61-a) a 320 screen
   cannot hold it beside its mark, so there it wraps rather than scroll sideways. */
@media (max-width: 380px) {
  body[data-plane="workspace"] .card-link-words { white-space: normal; }
}
@media (max-width: 768px) {
  body[data-plane="workspace"] .stat-tiles {
    display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px;
  }
  body[data-plane="workspace"] .stat-tile,
  body[data-plane="workspace"] .stat-tile:first-child { padding: 0; }
  body[data-plane="workspace"] .stat-tile + .stat-tile { border-left: 0; }
}

/* **The person line**: the monogram disc, the person in 80's label form, the role. */
body[data-plane="workspace"] .person-line { display: flex; align-items: center; gap: 14px; }
body[data-plane="workspace"] .person-disc {
  flex: 0 0 auto; width: 48px; height: 48px; border-radius: 50%;
  background: var(--h-fill-08); color: var(--h-accent); font-weight: var(--h-w-semi);
  font-size: var(--type-pill); display: inline-flex; align-items: center; justify-content: center;
}
body[data-plane="workspace"] .person-words { min-width: 0; }
body[data-plane="workspace"] .person-words p { margin: 0; overflow-wrap: anywhere; }
body[data-plane="workspace"] .person-name {
  font-size: var(--type-card-title); font-weight: var(--h-w-semi); color: var(--h-ink);
}
body[data-plane="workspace"] .person-address,
body[data-plane="workspace"] .person-role { font-size: var(--type-meta); color: var(--h-muted); }

/* **State cards**: the tint states the standing and never decorates — neutral white,
   caution amber, good green. Red is only ever a destructive act's (86 §5). */
body[data-plane="workspace"] .state-row { display: flex; align-items: center; gap: 16px; }
body[data-plane="workspace"] .state-mark {
  flex: 0 0 auto; width: 44px; height: 44px; border-radius: var(--h-radius-sm);
  background: var(--h-fill-08); color: var(--h-accent);
  display: inline-flex; align-items: center; justify-content: center;
}
body[data-plane="workspace"] .state-mark svg { width: 20px; height: 20px; }
body[data-plane="workspace"] .state-words { flex: 1 1 0; min-width: 0; }
body[data-plane="workspace"] .state-heading {
  margin: 0; font-size: var(--type-card-title); font-weight: var(--h-w-semi); color: var(--h-ink);
}
body[data-plane="workspace"] .state-line {
  margin: 4px 0 0; font-size: var(--type-body); color: var(--h-muted);
}
body[data-plane="workspace"] .state-act { flex: 0 0 auto; display: flex; gap: 12px; }
body[data-plane="workspace"] .card-caution { background: var(--h-warn-soft); border-color: var(--h-warn-line); }
body[data-plane="workspace"] .card-caution .state-mark { background: var(--h-warn-wash); color: var(--h-warn-ink); }
body[data-plane="workspace"] .card-good { background: var(--h-ok-wash); border-color: var(--h-ok-line); }
body[data-plane="workspace"] .card-good .state-mark { background: var(--h-ok-soft); color: var(--h-ok); }
@media (max-width: 768px) {
  body[data-plane="workspace"] .state-row { flex-wrap: wrap; }
  body[data-plane="workspace"] .state-act { flex-basis: 100%; }
}

/* **Confirm in place**: an inset panel inside the card that owns the act; the chevron on
   the card says it is open. */
body[data-plane="workspace"] .confirm-panel {
  display: flex; gap: 14px; align-items: flex-start; margin: 18px 0 0; padding: 18px 20px;
  background: var(--h-page); border: 1px solid var(--h-line); border-radius: var(--h-radius-sm);
}
body[data-plane="workspace"] .confirm-mark { flex: 0 0 auto; color: var(--h-warn-ink); }
body[data-plane="workspace"] .confirm-mark svg { width: 22px; height: 22px; }
body[data-plane="workspace"] .confirm-words { flex: 1 1 0; min-width: 0; }
body[data-plane="workspace"] .confirm-question {
  margin: 0; font-size: var(--type-card-title); font-weight: var(--h-w-semi); color: var(--h-ink);
}
body[data-plane="workspace"] .confirm-line {
  margin: 6px 0 0; font-size: var(--type-body); color: var(--h-muted); max-width: var(--prose);
}
body[data-plane="workspace"] .confirm-acts { display: flex; flex-wrap: wrap; gap: 12px; margin: 14px 0 0; }
body[data-plane="workspace"] .confirm-acts .action-form { margin: 0; }
body[data-plane="workspace"] .card-open-mark { display: inline-flex; color: var(--h-muted); }
body[data-plane="workspace"] .card-open-mark svg { transform: rotate(-90deg); }

/* **The Settings panel**: the section menu as a white, full-height rounded panel; the
   open item tinted with a 3px accent bar at its left edge. */
body[data-plane="workspace"] .section-nav {
  /* The top inset puts *Settings* on the 32px title's first baseline (86-f; ux/123). */
  align-self: stretch; box-sizing: border-box; padding: 10px 10px 20px;
  background: var(--h-card); border: 1px solid var(--h-line); border-radius: 16px;
  box-shadow: 0 1px 3px var(--h-line);
}
body[data-plane="workspace"] .section-nav a[aria-current="page"] {
  box-shadow: inset 3px 0 0 var(--h-accent);
}
/* **At a phone's width the panel is one line** (86-b §2): *Settings: {section} ▾*, a
   closed disclosure between the breadcrumb and the title; the panel itself is not drawn.
   Above it, the disclosure is not drawn. */
body[data-plane="workspace"] .section-disclosure { display: none; }
@media (max-width: 768px) {
  body[data-plane="workspace"] .section-nav { display: none; }
  body[data-plane="workspace"] .section-disclosure {
    display: block; margin: 0 0 var(--s4); background: var(--h-card);
    border: 1px solid var(--h-line); border-radius: var(--h-radius-sm);
  }
  body[data-plane="workspace"] .section-disclosure-summary {
    padding: 12px 16px; cursor: pointer; font-size: var(--type-body);
    font-weight: var(--h-w-semi); color: var(--h-ink);
  }
  body[data-plane="workspace"] .section-disclosure-nav { padding: 0 8px 10px; }
  body[data-plane="workspace"] .section-disclosure-nav ul {
    list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2px;
  }
  body[data-plane="workspace"] .section-disclosure-nav a {
    display: flex; align-items: center; gap: 10px; padding: 9px 8px;
    border-radius: var(--h-radius-sm); color: var(--h-ink); text-decoration: none;
  }
  body[data-plane="workspace"] .section-disclosure-nav a[aria-current="page"] {
    background: var(--h-fill-08); box-shadow: inset 3px 0 0 var(--h-accent);
  }
  body[data-plane="workspace"] .section-disclosure-nav .section-nav-ending {
    margin: 6px 0 0; padding: 6px 0 0; border-top: 1px solid var(--h-line);
  }
  body[data-plane="workspace"] .section-disclosure-nav .section-nav-ending a { color: var(--h-danger); }
}
/* **A settings page's content column** (86-a §1): at most `--settings-content`, left beside
   the panel; the cards fill it and the extra width of a wider screen falls to its right. */
body[data-plane="workspace"] .with-sections > .rail-main { max-width: var(--settings-content); }

/* **A quiet act** (86-a §2): a text link with an arrow — never an outlined button. The ink
   variant is the quietest act on a page: the body colour, underlined only on hover. */
body[data-plane="workspace"] .quiet-link {
  display: inline-flex; align-items: center; flex-wrap: wrap; gap: 6px; color: var(--h-link);
  font-size: var(--type-body); font-weight: var(--h-w-semi); text-decoration: none;
}
body[data-plane="workspace"] .quiet-link:hover { color: var(--h-link); text-decoration: underline; }
body[data-plane="workspace"] .quiet-link svg { width: 14px; height: 14px; }
body[data-plane="workspace"] .quiet-link.quiet-ink { color: var(--h-ink); font-weight: var(--h-w-mid); }
body[data-plane="workspace"] .quiet-link.quiet-ink:hover { color: var(--h-ink); }
body[data-plane="workspace"] .card-link-line { margin: 12px 0 0; padding-left: 62px; }

/* **A whole-card link** (86-a §4): the card is one destination — its row is the link and
   its box is the target; a hover lifts the edge. */
body[data-plane="workspace"] .card-link {
  display: flex; align-items: center; gap: 16px; color: var(--h-ink); text-decoration: none;
}
body[data-plane="workspace"] .card-link::after {
  content: ""; position: absolute; inset: 0; border-radius: var(--h-radius);
}
body[data-plane="workspace"] .card-whole-link:hover { border-color: var(--h-line-hover); }
body[data-plane="workspace"] .card-link:hover { color: var(--h-ink); }
body[data-plane="workspace"] .card-link-words {
  flex: 1 1 0; min-width: 0; font-size: var(--type-card-title); font-weight: var(--h-w-semi);
}
body[data-plane="workspace"] .card-link-chevron { display: inline-flex; color: var(--h-muted); }

/* **SUBSCRIPTION sits last, apart, on a neutral tint** (86-a §3); its confirming act is a
   secondary button in neutral ink, and the way back a quiet link. */
body[data-plane="workspace"] .card-neutral { background: var(--h-fill-17); }
body[data-plane="workspace"] #subscription { margin-top: 20px; }
body[data-plane="workspace"] .confirm-acts button[type="submit"] {
  background: var(--h-card); color: var(--h-ink); border: 1px solid var(--h-line-strong);
  box-shadow: none;
}
body[data-plane="workspace"] .confirm-acts button[type="submit"]:hover {
  background: var(--h-fill-20); color: var(--h-ink); border-color: var(--h-line-hover);
}
/* **ux/86 ANSWER 86-c — the cancel as the master draws it** (the owner's ruling): the
   SUBSCRIPTION card in a soft red tint and border; *Cancel the subscription* a red outlined
   button; inside the open panel the confirming act filled red — that state's one filled
   primary — and *Keep the plan* an outlined button beside it. */
body[data-plane="workspace"] .card-danger {
  background: var(--h-danger-soft); border-color: var(--h-danger-line);
}
body[data-plane="workspace"] .card-danger .state-mark { background: var(--h-card); color: var(--h-danger); }
body[data-plane="workspace"] .action.cancel-outline {
  background: var(--h-card); color: var(--h-danger-ink); border: 1px solid var(--h-danger-edge);
}
body[data-plane="workspace"] .action.cancel-outline:hover {
  background: var(--h-danger-soft); color: var(--h-danger-ink); border-color: var(--h-danger);
}
body[data-plane="workspace"] .card-danger .confirm-panel {
  background: var(--h-card); border-color: var(--h-danger-line);
}
body[data-plane="workspace"] .card-danger .confirm-mark { color: var(--h-danger); }
body[data-plane="workspace"] .confirm-back { flex: 0 0 auto; }
body[data-plane="workspace"] .card-danger .confirm-acts button[type="submit"] {
  background: var(--h-danger); color: var(--h-card); border-color: var(--h-danger);
}
body[data-plane="workspace"] .card-danger .confirm-acts button[type="submit"]:hover {
  background: var(--h-danger-ink); color: var(--h-card); border-color: var(--h-danger-ink);
}

/* ==========================================================================
   ux/87 · People, drawn to the owner's master — new pieces of the kit
   (`components.card_head`, `seat_bar`, `icon_field`, `icon_lines`, `initials_disc`,
   `note_band`, `role_tiles`; the role colours are the `--role-*` tokens).
   ========================================================================== */
/* The header's illustration, top-right, clear of the words; gone on a phone. */
body[data-plane="workspace"] .head-card:has(.head-art-frame) { position: relative; padding-right: 320px; }
body[data-plane="workspace"] .head-art-frame {
  position: absolute; top: -8px; right: 0; width: 300px; pointer-events: none;
}
body[data-plane="workspace"] .head-art { width: 100%; height: auto; }
@media (max-width: 768px) {
  body[data-plane="workspace"] .head-art-frame { display: none; }
  body[data-plane="workspace"] .head-card:has(.head-art-frame) { padding-right: var(--s5); }
}
/* **The seat line and its bar.** */
body[data-plane="workspace"] .seat-bar { display: flex; align-items: flex-start; gap: 14px; margin: 14px 0 0; }
body[data-plane="workspace"] .seat-mark { display: inline-flex; color: var(--h-muted); padding-top: 2px; }
body[data-plane="workspace"] .seat-mark svg { width: 22px; height: 22px; }
body[data-plane="workspace"] .seat-words { min-width: 0; flex: 1 1 auto; }
body[data-plane="workspace"] .seat-line { margin: 0; font-size: var(--type-lede); color: var(--h-ink-2); }
body[data-plane="workspace"] .seat-bar-row { display: flex; align-items: center; gap: 16px; margin: 10px 0 0; flex-wrap: wrap; }
body[data-plane="workspace"] .seat-progress {
  appearance: none; -webkit-appearance: none; width: 23rem; height: 8px; border: 0;
  border-radius: 999px; background: var(--h-fill-08); overflow: hidden;
}
body[data-plane="workspace"] .seat-progress::-webkit-progress-bar { background: var(--h-fill-08); border-radius: 999px; }
body[data-plane="workspace"] .seat-progress::-webkit-progress-value { background: var(--h-accent); border-radius: 999px; }
body[data-plane="workspace"] .seat-progress::-moz-progress-bar { background: var(--h-accent); border-radius: 999px; }
body[data-plane="workspace"] .seat-available { font-size: var(--type-meta); color: var(--h-muted); }
@media (max-width: 480px) {
  body[data-plane="workspace"] .seat-progress { width: 100%; }
}
/* **A card's head as drawn**: a round tinted tile beside the card's heading and line. */
body[data-plane="workspace"] .card-head { display: flex; align-items: center; gap: 16px; margin: 0 0 22px; }
body[data-plane="workspace"] .card-head-tile {
  flex: 0 0 auto; width: 56px; height: 56px; border-radius: 50%;
  background: var(--role-admin); color: var(--h-accent);
  display: inline-flex; align-items: center; justify-content: center;
}
body[data-plane="workspace"] .card-head-tile svg { width: 24px; height: 24px; }
body[data-plane="workspace"] .card-head-words { min-width: 0; }
body[data-plane="workspace"] .card-head h2 {
  margin: 0; font-size: var(--type-section); font-weight: var(--h-w-bold); color: var(--h-ink);
}
body[data-plane="workspace"] .card-head-lede { margin: 4px 0 0; font-size: var(--type-body); color: var(--h-muted); }
/* **The invite card**: the form, then a hairline column of what an invitation means. */
body[data-plane="workspace"] .invite-grid {
  display: grid; grid-template-columns: minmax(0, 1fr) var(--aside); gap: 32px; align-items: start;
}
body[data-plane="workspace"] .invite-card { padding: 26px 28px; }
body[data-plane="workspace"] .invite-main { min-width: 0; }
body[data-plane="workspace"] .icon-lines {
  list-style: none; margin: 0; padding: 4px 0 4px 28px; border-left: 1px solid var(--h-line);
  display: flex; flex-direction: column; gap: 20px;
}
body[data-plane="workspace"] .icon-line { display: flex; align-items: flex-start; gap: 12px; }
body[data-plane="workspace"] .icon-line-mark {
  flex: 0 0 auto; width: 36px; height: 36px; border-radius: 50%; background: var(--h-fill-08);
  color: var(--h-accent); display: inline-flex; align-items: center; justify-content: center;
}
body[data-plane="workspace"] .icon-line-mark svg { width: 17px; height: 17px; }
body[data-plane="workspace"] .icon-line-words b {
  display: block; font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink);
}
body[data-plane="workspace"] .icon-line-words b + span {
  display: block; font-size: var(--type-meta); color: var(--h-muted);
}
@media (max-width: 1023px) {
  body[data-plane="workspace"] .invite-grid { grid-template-columns: minmax(0, 1fr); gap: 20px; }
  body[data-plane="workspace"] .icon-lines {
    border-left: 0; border-top: 1px solid var(--h-line); padding: 20px 0 0;
  }
}
/* **A field with its icon inside.** */
body[data-plane="workspace"] .field-with-icon { position: relative; display: block; }
body[data-plane="workspace"] .field-icon {
  position: absolute; left: 14px; top: 50%; transform: translateY(-50%);
  display: inline-flex; color: var(--h-muted); pointer-events: none;
}
body[data-plane="workspace"] .field-icon svg { width: 16px; height: 16px; }
body[data-plane="workspace"] .field-with-icon > input,
body[data-plane="workspace"] .field-with-icon > select {
  width: 100%; box-sizing: border-box; padding-left: 42px;
}
/* **Initials discs, one stable colour per person.** */
body[data-plane="workspace"] .initials-disc {
  flex: 0 0 auto; width: 40px; height: 40px; border-radius: 50%;
  font-size: var(--type-pill); font-weight: var(--h-w-semi);
  display: inline-flex; align-items: center; justify-content: center;
}
body[data-plane="workspace"] .disc-blue { background: var(--role-admin); color: var(--role-admin-ink); }
body[data-plane="workspace"] .disc-purple { background: var(--role-recruiter); color: var(--role-recruiter-ink); }
body[data-plane="workspace"] .disc-green { background: var(--role-hiring-manager); color: var(--role-hiring-manager-ink); }
body[data-plane="workspace"] .disc-orange { background: var(--role-interviewer); color: var(--role-interviewer-ink); }
body[data-plane="workspace"] .disc-teal { background: var(--disc-teal); color: var(--disc-teal-ink); }
body[data-plane="workspace"] .disc-rose { background: var(--disc-rose); color: var(--disc-rose-ink); }
/* **A row's note band**, spanning the row, tinted, with its ⓘ. */
/* **The roster's rows as drawn**: the person, the cells and the ⋯ centred on one line;
   the ⋯ in a soft rounded square. (At a phone's width the rows stack, unchanged.) */
@media (min-width: 769px) {
  body[data-plane="workspace"] li.member-row:not(.listing-head) { align-items: center; }
  body[data-plane="workspace"] li.member-row .member-person { align-items: center; }
}
body[data-plane="workspace"] .member-row .row-menu > summary.row-menu-button {
  width: 44px; height: 36px; border-radius: var(--h-radius-sm); background: var(--h-fill-08);
  display: inline-flex; align-items: center; justify-content: center;
}
body[data-plane="workspace"] .member-row > .note-band { grid-column: 1 / -1; }
body[data-plane="workspace"] .note-band {
  display: flex; align-items: flex-start; gap: 12px;
  margin: 2px 0 6px; padding: 12px 16px; border-radius: var(--h-radius-sm);
  background: var(--role-admin);
}
body[data-plane="workspace"] .note-band-mark { display: inline-flex; color: var(--role-admin-ink); padding-top: 2px; }
body[data-plane="workspace"] .note-band-mark svg { width: 18px; height: 18px; }
body[data-plane="workspace"] .note-band-words p { margin: 0; font-size: var(--type-body); color: var(--h-ink-2); }
/* **About roles**: the card's head beside four tinted role tiles. */
body[data-plane="workspace"] .about-roles {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 4fr); gap: 16px; align-items: start;
}
body[data-plane="workspace"] .about-roles > .card-head { flex-direction: column; align-items: flex-start; margin: 0; }
body[data-plane="workspace"] .about-roles > .card-head .card-head-tile { width: 44px; height: 44px; }
body[data-plane="workspace"] .role-tiles {
  list-style: none; margin: 0; padding: 0; display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px;
}
body[data-plane="workspace"] .role-tile { padding: 16px; border-radius: var(--h-radius-sm); }
body[data-plane="workspace"] .role-tile-mark {
  width: 34px; height: 34px; border-radius: 50%; background: var(--h-card);
  display: inline-flex; align-items: center; justify-content: center;
}
body[data-plane="workspace"] .role-tile-mark svg { width: 17px; height: 17px; }
body[data-plane="workspace"] .role-tile b {
  display: block; margin: 10px 0 4px; font-size: var(--type-body); font-weight: var(--h-w-semi);
  color: var(--h-ink);
}
body[data-plane="workspace"] .role-tile b + span { display: block; font-size: var(--type-meta); color: var(--h-ink-2); }
body[data-plane="workspace"] .role-admin { background: var(--role-admin); }
body[data-plane="workspace"] .role-admin .role-tile-mark { color: var(--role-admin-ink); }
body[data-plane="workspace"] .role-recruiter { background: var(--role-recruiter); }
body[data-plane="workspace"] .role-recruiter .role-tile-mark { color: var(--role-recruiter-ink); }
body[data-plane="workspace"] .role-hiring-manager { background: var(--role-hiring-manager); }
body[data-plane="workspace"] .role-hiring-manager .role-tile-mark { color: var(--role-hiring-manager-ink); }
body[data-plane="workspace"] .role-interviewer { background: var(--role-interviewer); }
body[data-plane="workspace"] .role-interviewer .role-tile-mark { color: var(--role-interviewer-ink); }
@media (max-width: 1023px) {
  body[data-plane="workspace"] .about-roles { grid-template-columns: minmax(0, 1fr); }
  body[data-plane="workspace"] .about-roles > .card-head { flex-direction: row; align-items: center; }
  body[data-plane="workspace"] .role-tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 480px) {
  body[data-plane="workspace"] .role-tiles { grid-template-columns: minmax(0, 1fr); }
}

/* ==========================================================================
   ux/88 · Machines, drawn to the owner's master — new pieces of the kit
   (`components.two_pane_card`, `about_pane`, `dashed_empty`; `icons.MACHINE_ART`).
   ========================================================================== */
/* **One card, two panes**: the act, then a tinted pane of what it means. */
body[data-plane="workspace"] .card-two-pane {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  margin: 0 0 var(--card-gap); background: var(--h-card); border: 1px solid var(--h-line);
  border-radius: var(--h-radius); box-shadow: 0 1px 3px var(--h-line); overflow: hidden;
}
body[data-plane="workspace"] .card-two-pane:not(:has(> .pane-main)) {
  grid-template-columns: minmax(0, 1fr); }
body[data-plane="workspace"] .pane-main { min-width: 0; padding: 30px 30px 28px; }
body[data-plane="workspace"] .action-form.client-form.register-form {
  display: grid; gap: 18px; justify-items: start; margin: 0; max-width: none;
}
body[data-plane="workspace"] .register-form .field { width: 100%; margin: 0; }
body[data-plane="workspace"] .register-form .field input { width: 100%; box-sizing: border-box; }
body[data-plane="workspace"] .lock-line {
  display: flex; align-items: center; gap: 10px; margin: 18px 0 0;
  font-size: var(--type-body); color: var(--h-muted);
}
body[data-plane="workspace"] .lock-mark { display: inline-flex; color: var(--h-muted); }
body[data-plane="workspace"] .lock-mark svg { width: 16px; height: 16px; }
/* **The About pane**: tinted, the words clear of the illustration at its right. */
body[data-plane="workspace"] .pane-about {
  position: relative; min-width: 0; padding: 30px 30px 28px;
  background: linear-gradient(135deg, var(--h-card) 0%, var(--role-admin) 100%);
  border-left: 1px solid var(--h-line);
}
body[data-plane="workspace"] .card-two-pane:not(:has(> .pane-main)) > .pane-about { border-left: 0; }
body[data-plane="workspace"] .pane-about .card-label { margin: 0 0 10px; }
/* Only the words beside the illustration keep clear of it; the lines run beneath it. */
body[data-plane="workspace"] .pane-about > :is(.card-label, .pane-title, .pane-lede) {
  padding-right: 180px; }
body[data-plane="workspace"] .pane-title {
  margin: 0; font-size: var(--type-card-title); font-weight: var(--h-w-semi); color: var(--h-ink);
}
body[data-plane="workspace"] .pane-lede { margin: 6px 0 0; font-size: var(--type-body); color: var(--h-muted); }
body[data-plane="workspace"] .pane-about .icon-lines {
  border: 0; padding: 0; margin: 20px 0 0; gap: 14px;
}
body[data-plane="workspace"] .pane-about .icon-line { align-items: center; }
body[data-plane="workspace"] .pane-about .icon-line-mark { background: var(--h-card); }
body[data-plane="workspace"] .icon-line-text {
  display: block; font-size: var(--type-body); color: var(--h-ink-2);
}
body[data-plane="workspace"] .pane-art-frame {
  position: absolute; top: 18px; right: 10px; width: 180px; pointer-events: none;
}
body[data-plane="workspace"] .pane-art { width: 100%; height: auto; display: block;
  -webkit-mask-image: linear-gradient(90deg, transparent 0%, var(--h-ink) 22%);
  mask-image: linear-gradient(90deg, transparent 0%, var(--h-ink) 22%); }
/* The cut art is opaque, so the pane's lines stop short of it, as the master sets them. */
@media (min-width: 769px) {
  body[data-plane="workspace"] .pane-about:has(> .pane-art-frame) .icon-lines { padding-right: 180px; }
}
@media (max-width: 1023px) {
  body[data-plane="workspace"] .card-two-pane { grid-template-columns: minmax(0, 1fr); }
  body[data-plane="workspace"] .pane-about { border-left: 0; border-top: 1px solid var(--h-line); }
}
@media (max-width: 768px) {
  body[data-plane="workspace"] .pane-art-frame { display: none; }
  body[data-plane="workspace"] .pane-about > :is(.card-label, .pane-title, .pane-lede) {
    padding-right: 0; }
  body[data-plane="workspace"] .pane-main,
  body[data-plane="workspace"] .pane-about { padding: 22px 20px; }
}
/* **The count at the heading's right.** */
body[data-plane="workspace"] .region-count {
  flex: 0 0 auto; font-size: var(--type-body); color: var(--h-muted); white-space: nowrap;
}
/* **An empty collection as drawn**: a dashed box, a centred disc, the answer, the act. */
body[data-plane="workspace"] .empty-dashed {
  display: flex; flex-direction: column; align-items: center; text-align: center; gap: 8px;
  margin: 0; padding: 28px 20px 30px; border: 1.5px dashed var(--h-line);
  border-radius: var(--h-radius-sm);
}
body[data-plane="workspace"] .empty-disc {
  width: 64px; height: 64px; border-radius: 50%; background: var(--role-admin);
  color: var(--h-accent); display: inline-flex; align-items: center; justify-content: center;
  margin: 0 0 6px;
}
body[data-plane="workspace"] .empty-disc svg { width: 26px; height: 26px; }
/* ux/123 §1 on the canonical components this plane shows: the empty state's lead is a card
   H3's size, and *You* is a pill. */
body[data-plane="workspace"] .empty-lead { font-size: var(--type-card-title); font-weight: var(--h-w-semi); }
body[data-plane="workspace"] .member-you-pill { font-size: var(--type-pill); font-weight: var(--h-w-semi); }
body[data-plane="workspace"] .empty-heading {
  margin: 0; font-size: var(--type-card-title); font-weight: var(--h-w-semi); color: var(--h-ink);
}
body[data-plane="workspace"] .empty-line {
  margin: 0; max-width: var(--prose); font-size: var(--type-body); color: var(--h-muted);
}
body[data-plane="workspace"] .empty-act { margin: 12px 0 0; }

/* ==========================================================================
   ux/89 · Data rights requests (16), drawn to the owner's masters (ANSWER 89-a)
   ========================================================================== */
body[data-plane="workspace"] .rights-title-row { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
body[data-plane="workspace"] .rights-title-row h1 { margin: 0; }
/* **One hue per status** (the owner's ruling 5), and the header's red count. */
body[data-plane="workspace"] .pill-hue-blue { background: var(--role-admin); color: var(--role-admin-ink); }
body[data-plane="workspace"] .pill-hue-amber { background: var(--h-warn-wash); color: var(--h-warn-ink); }
body[data-plane="workspace"] .pill-hue-violet { background: var(--role-recruiter); color: var(--role-recruiter-ink); }
body[data-plane="workspace"] .pill-hue-green { background: var(--role-hiring-manager); color: var(--role-hiring-manager-ink); }
body[data-plane="workspace"] .pill-hue-red { background: var(--h-danger-soft); color: var(--h-danger-ink); }
body[data-plane="workspace"] .status-dot {
  flex: 0 0 auto; width: 10px; height: 10px; border-radius: 50%; margin-top: 5px; }
body[data-plane="workspace"] .dot-blue { background: var(--role-admin-ink); }
body[data-plane="workspace"] .dot-amber { background: var(--h-warn); }
body[data-plane="workspace"] .dot-violet { background: var(--role-recruiter-ink); }
body[data-plane="workspace"] .dot-green { background: var(--role-hiring-manager-ink); }
/* **The page's cards**: a card head with its tile, anything at its right, the body. */
body[data-plane="workspace"] .rights-card { padding: 26px 28px; }
body[data-plane="workspace"] .rights-card-head {
  display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; }
body[data-plane="workspace"] .rights-card-head .collection-count {
  margin: 6px 0 0; padding: 0; border: 0; font-size: var(--type-body); color: var(--h-muted);
  white-space: nowrap; }
/* The table's cells, as drawn: a value, and a quiet detail under it. */
body[data-plane="workspace"] .subject-cell { display: flex; align-items: center; gap: 12px; }
body[data-plane="workspace"] .subject-cell .identity {
  display: flex; flex-direction: column; align-items: flex-start; min-width: 0; text-align: left; }
body[data-plane="workspace"] .subject-link {
  display: inline-flex; align-items: center; gap: 4px; font-weight: var(--h-w-semi);
  color: var(--h-ink); text-decoration: none; }
body[data-plane="workspace"] .subject-link:hover { text-decoration: underline; }
body[data-plane="workspace"] .subject-link svg { width: 14px; height: 14px; }
body[data-plane="workspace"] .cell-value { display: block; color: var(--h-ink); }
body[data-plane="workspace"] .cell-strong {
  display: block; margin: 0 0 4px; font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .cell-detail {
  display: block; margin: 2px 0 0; font-size: var(--type-meta); color: var(--h-muted); }
/* **Held erasures**: the caution card; one held is a sentence, several are rows. */
body[data-plane="workspace"] .held-item {
  margin: 14px 0 0; padding: 16px 20px; background: var(--h-card);
  border: 1px solid var(--h-warn-line); border-radius: var(--h-radius-sm); }
body[data-plane="workspace"] .held-item-single {
  margin: -8px 0 0 72px; padding: 0; background: none; border: 0; }
body[data-plane="workspace"] .held-row {
  display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
body[data-plane="workspace"] .held-words { min-width: 0; }
body[data-plane="workspace"] .held-reference {
  margin: 0; font-size: var(--type-card-title); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .held-line,
body[data-plane="workspace"] .held-sentence {
  margin: 2px 0 0; font-size: var(--type-body); color: var(--h-ink-2); }
body[data-plane="workspace"] .held-sentence { max-width: var(--prose); flex: 1 1 20rem; }
@media (min-width: 769px) {
  body[data-plane="workspace"] .held-item-single .held-row { flex-wrap: nowrap; }
}
body[data-plane="workspace"] .held-act { flex: 0 0 auto; gap: 8px; }
body[data-plane="workspace"] .held-act svg { width: 16px; height: 16px; }
body[data-plane="workspace"] .held-cancel { display: inline-flex; align-items: center; gap: 6px; }
body[data-plane="workspace"] .held-cancel svg { width: 14px; height: 14px; transform: rotate(-90deg); }
/* **The confirmation**: red-tinted, typed, then pressed; inactive until it matches. */
body[data-plane="workspace"] .action-form.erase-panel {
  display: flex; align-items: flex-start; gap: 16px; margin: 16px 0 0; padding: 20px 22px;
  background: var(--h-danger-soft); border: 1px solid var(--h-danger-line);
  border-radius: var(--h-radius-sm); max-width: none; }
body[data-plane="workspace"] .erase-glyph { display: inline-flex; color: var(--h-danger); padding-top: 2px; }
body[data-plane="workspace"] .erase-glyph svg { width: 24px; height: 24px; }
body[data-plane="workspace"] .erase-words { min-width: 0; flex: 1 1 auto; }
body[data-plane="workspace"] .erase-question {
  margin: 0; font-size: var(--type-card-title); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .erase-line { margin: 4px 0 12px; font-size: var(--type-body); color: var(--h-ink-2); }
body[data-plane="workspace"] .erase-panel .field { margin: 0; }
body[data-plane="workspace"] .erase-panel .field input {
  width: min(100%, 16rem); box-sizing: border-box; border-color: var(--h-danger-edge); }
body[data-plane="workspace"] .erase-acts {
  display: flex; align-items: center; gap: 20px; flex-wrap: wrap; margin: 14px 0 0; }
body[data-plane="workspace"] .action-form.erase-panel button.erase-submit {
  background: var(--h-danger); color: var(--h-card); border-color: var(--h-danger); }
body[data-plane="workspace"] .action-form.erase-panel button.erase-submit:hover {
  background: var(--h-danger-ink); border-color: var(--h-danger-ink); color: var(--h-card); }
/* Inactive until the reference matches: pale, its ink still legible, and not pressable. */
body[data-plane="workspace"] .action-form.erase-panel:has(input:invalid) button.erase-submit {
  background: var(--h-danger-wash); color: var(--h-danger-ink); border-color: var(--h-danger-edge);
  pointer-events: none; }
body[data-plane="workspace"] .erase-refused {
  display: flex; align-items: flex-start; gap: 14px; margin: 14px 0 0; padding: 16px 18px;
  background: var(--h-warn-soft); border: 1px solid var(--h-warn-line);
  border-radius: var(--h-radius-sm); }
body[data-plane="workspace"] .erase-refused .erase-glyph { color: var(--h-warn); }
body[data-plane="workspace"] .refused-heading {
  margin: 0; font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .refused-line { margin: 2px 0 0; font-size: var(--type-body); color: var(--h-ink-2); }
/* **Record a request**: three tinted panels side by side, stacked below 1024. */
body[data-plane="workspace"] .action-form.record-request-form { display: block; max-width: none; margin: 0; }
body[data-plane="workspace"] .record-panels {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; margin: 0 0 20px; }
body[data-plane="workspace"] .record-panel {
  min-width: 0; padding: 16px 18px; border: 1px solid var(--h-line-soft);
  border-radius: var(--h-radius-sm); }
body[data-plane="workspace"] .record-panel-blue { background: color-mix(in srgb, var(--role-admin) 55%, var(--h-card)); }
body[data-plane="workspace"] .record-panel-violet { background: color-mix(in srgb, var(--role-recruiter) 55%, var(--h-card)); }
body[data-plane="workspace"] .record-panel-green { background: color-mix(in srgb, var(--role-hiring-manager) 55%, var(--h-card)); }
body[data-plane="workspace"] .record-step {
  margin: 0 0 12px; font-size: var(--type-meta-small); font-weight: var(--h-w-semi); color: var(--h-muted);
  letter-spacing: var(--track-wide); text-transform: uppercase; }
body[data-plane="workspace"] .record-panel .field { margin: 0 0 12px; }
body[data-plane="workspace"] .record-panel .field:last-child { margin: 0; }
body[data-plane="workspace"] .record-panel .field input,
body[data-plane="workspace"] .record-panel .field select { width: 100%; box-sizing: border-box; }
/* **What each status means**: four columns with hairlines between. */
body[data-plane="workspace"] .legend-columns {
  list-style: none; margin: 0; padding: 0 0 0 72px;
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); }
body[data-plane="workspace"] .legend-entry { display: flex; gap: 10px; padding: 0 18px 0 0; }
body[data-plane="workspace"] .legend-entry + .legend-entry { border-left: 1px solid var(--h-line); padding-left: 20px; }
body[data-plane="workspace"] .legend-words b {
  display: block; font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .legend-words > span {
  display: block; margin: 2px 0 0; font-size: var(--type-meta); color: var(--h-muted); }
@media (max-width: 1023px) {
  body[data-plane="workspace"] .record-panels { grid-template-columns: minmax(0, 1fr); }
  body[data-plane="workspace"] .legend-columns { grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: 16px; }
  body[data-plane="workspace"] .legend-entry:nth-child(odd) { border-left: 0; padding-left: 0; }
}
@media (max-width: 768px) {
  body[data-plane="workspace"] .rights-card { padding: 22px 20px; }
  body[data-plane="workspace"] .rights-card-head { flex-direction: column; gap: 4px; }
  body[data-plane="workspace"] .rights-card-head .collection-count { margin: 0 0 14px; }
  body[data-plane="workspace"] .held-item-single { margin: 0; }
  body[data-plane="workspace"] .legend-columns { padding: 0; }
}
@media (max-width: 480px) {
  body[data-plane="workspace"] .legend-columns { grid-template-columns: minmax(0, 1fr); }
  body[data-plane="workspace"] .legend-entry,
  body[data-plane="workspace"] .legend-entry + .legend-entry { border-left: 0; padding-left: 0; }
}

/* ux/89 ANSWER 58-a — closed requests collapsed under the table; an erased person's disc. */
body[data-plane="workspace"] .disc-neutral { background: var(--h-fill-08); color: var(--h-muted); }
body[data-plane="workspace"] .disc-neutral svg { width: 16px; height: 16px; }
body[data-plane="workspace"] .rights-no-open { margin: 0; font-size: var(--type-body); color: var(--h-ink-2); }
/* ==========================================================================
   ux/90 · Organisation (13), drawn to the owner's master — Organisation data as a tinted
   row whose value is a white expandable panel (`<details>`, no script).
   ========================================================================== */
body[data-plane="workspace"] .account-row.account-row-data {
  align-items: start; border-radius: 0 0 10px 10px;
  background: color-mix(in srgb, var(--role-admin) 45%, var(--h-card));
}
body[data-plane="workspace"] .account-row-data > .account-row-value { grid-column: 2 / -1; }
body[data-plane="workspace"] .export-panel {
  background: var(--h-card); border: 1px solid var(--h-line-soft);
  border-radius: var(--h-radius-sm); box-shadow: 0 1px 3px var(--h-line); padding: 18px 20px;
}
body[data-plane="workspace"] .export-summary {
  list-style: none; display: flex; align-items: flex-start; gap: 16px; cursor: pointer; }
body[data-plane="workspace"] .export-summary::-webkit-details-marker { display: none; }
body[data-plane="workspace"] .export-tile {
  flex: none; width: 48px; height: 48px; border-radius: 50%; background: var(--role-admin);
  color: var(--h-accent); display: inline-flex; align-items: center; justify-content: center; }
body[data-plane="workspace"] .export-tile svg { width: 22px; height: 22px; }
body[data-plane="workspace"] .export-head {
  flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 3px; padding-top: 3px; }
body[data-plane="workspace"] .export-title {
  font-size: var(--type-card-title); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .export-meta { font-size: var(--type-meta); color: var(--h-muted); }
/* **The chevron says which way the panel will go**: up while it is open, down when it is
   closed. */
body[data-plane="workspace"] .export-chevron {
  flex: none; width: 40px; height: 36px; border-radius: var(--h-radius-sm);
  background: var(--h-fill-08); color: var(--h-accent);
  display: inline-flex; align-items: center; justify-content: center; }
body[data-plane="workspace"] .export-chevron svg { width: 16px; height: 16px; transform: rotate(90deg); }
body[data-plane="workspace"] .export-panel[open] .export-chevron svg { transform: rotate(-90deg); }
body[data-plane="workspace"] .export-body { padding-left: 64px; }
body[data-plane="workspace"] .export-line {
  margin: 10px 0 0; font-size: var(--type-body); color: var(--h-ink-2); }
body[data-plane="workspace"] .export-facts {
  list-style: none; display: flex; flex-wrap: wrap; gap: 12px 0; margin: 16px 0 0;
  padding: 14px 0 0; border-top: 1px solid var(--h-line-soft); }
body[data-plane="workspace"] .export-fact {
  display: grid; grid-template-columns: auto auto; column-gap: 12px; align-items: center;
  padding: 0 28px 0 0; }
body[data-plane="workspace"] .export-fact + .export-fact {
  border-left: 1px solid var(--h-line-soft); padding-left: 28px; }
body[data-plane="workspace"] .export-fact-mark { grid-row: 1 / span 2; display: inline-flex; color: var(--h-muted); }
body[data-plane="workspace"] .export-fact-mark svg { width: 20px; height: 20px; }
body[data-plane="workspace"] .export-fact-label { font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .export-fact-value {
  font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .export-body .note-band { margin: 16px 0 0; }
body[data-plane="workspace"] .export-acts {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin: 16px 0 0; }
body[data-plane="workspace"] .export-acts .action-form { margin: 0; }
@media (max-width: 48rem) {
  body[data-plane="workspace"] .account-row-data > .account-row-value { grid-column: auto; }
  body[data-plane="workspace"] .export-panel { padding: 16px; }
  body[data-plane="workspace"] .export-body { padding-left: 0; }
}

/* ==========================================================================
   ux/91 · A data rights request (16a), drawn to the owner's masters (ANSWER 60-c).
   The masters are the 1440 layout set at 1024; every length here is theirs × 1.406.
   ========================================================================== */
/* **The proportions**: the title spans the page, then the case (about 2.3×) beside a
   bordered *Details* card, level with the first card. */
@media (min-width: 64rem) {
  body[data-plane="workspace"] main:has(#subject-resolution) {
    grid-template-columns: minmax(0, 2.3fr) minmax(0, 1fr); column-gap: 21px; }
}
body[data-plane="workspace"] main:has(#subject-resolution) .object-main { gap: 21px; }
/* The title sits on the cards' left edge, as drawn. */
body[data-plane="workspace"] main:has(#subject-resolution) > .head-card { padding: 8px 0 18px; }
body[data-plane="workspace"] main:has(#subject-resolution) > .details-region {
  background: var(--h-card); border: 1px solid var(--h-line); border-radius: var(--h-radius);
  padding: 22px 28px 12px; }
body[data-plane="workspace"] main:has(#subject-resolution) .details-heading { margin: 0 0 16px; }
@media (max-width: 63.99rem) {
  body[data-plane="workspace"] main:has(#subject-resolution) > .details-region { margin-top: 21px; }
}
body[data-plane="workspace"] main:has(#subject-resolution) .details-list { gap: 0; }
body[data-plane="workspace"] main:has(#subject-resolution) .details-row {
  gap: 4px; padding: 14px 0 16px; border-top: 1px solid var(--h-line-soft); }
body[data-plane="workspace"] main:has(#subject-resolution) .details-row dt {
  color: var(--h-ink); font-weight: var(--h-w-semi); }
body[data-plane="workspace"] main:has(#subject-resolution) .details-row dd { color: var(--h-ink-2); }
/* **A card as drawn**: the round tile in its own column, the heading beside it, and the
   body under the heading — never under the tile. */
body[data-plane="workspace"] .request-card {
  display: grid; grid-template-columns: 60px minmax(0, 1fr); column-gap: 30px;
  align-content: start; padding: 20px 24px 22px; margin: 0; }
body[data-plane="workspace"] .request-card > .card-head { display: contents; }
body[data-plane="workspace"] .request-card .card-head-tile {
  grid-column: 1; grid-row: 1 / span 2; align-self: start; width: 60px; height: 60px; }
body[data-plane="workspace"] .request-card .card-head-tile svg { width: 26px; height: 26px; }
body[data-plane="workspace"] .request-card .card-head-words {
  grid-column: 2; grid-row: 1; align-self: center; padding: 0 0 12px; }
body[data-plane="workspace"] .request-card > :not(.card-head) { grid-column: 2; }
body[data-plane="workspace"] .request-quiet { margin: 10px 0 0; font-size: var(--type-body); color: var(--h-muted); }
/* **Rows, a hairline above each** (item 2): the label column, then the value. */
body[data-plane="workspace"] .request-rows { margin: 0; }
body[data-plane="workspace"] .request-row {
  display: grid; grid-template-columns: minmax(0, 190px) minmax(0, 1fr); column-gap: 16px;
  align-items: center; min-height: 44px; border-top: 1px solid var(--h-line-soft);
  font-size: var(--type-body); }
body[data-plane="workspace"] .request-row dt { color: var(--h-ink-2); }
body[data-plane="workspace"] .request-row dd { margin: 0; color: var(--h-ink); overflow-wrap: anywhere; }
body[data-plane="workspace"] .record-link {
  display: inline-flex; align-items: center; gap: 14px; color: var(--h-link);
  font-weight: var(--h-w-semi); text-decoration: none; }
body[data-plane="workspace"] .record-link:hover { color: var(--h-accent-hi); text-decoration: underline; }
body[data-plane="workspace"] .record-link-mark { font-size: var(--type-lede); line-height: var(--h-lh-flat); }
/* **Where this stands**: the pill · days, then Next. */
body[data-plane="workspace"] .standing-line {
  display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin: 0; }
body[data-plane="workspace"] .standing-days { font-size: var(--type-body); color: var(--h-ink-2); }
body[data-plane="workspace"] .standing-days::before { content: "· "; color: var(--h-muted); }
body[data-plane="workspace"] .standing-outcome { margin: 12px 0 0; font-size: var(--type-body); color: var(--h-ink); }
body[data-plane="workspace"] .standing-next { margin: 12px 0 0; font-size: var(--type-body); color: var(--h-ink-2); }
/* **What governs it**: a radio row per law, *Governs this* at its end, the standard, then
   *Record it* at the card's right. */
body[data-plane="workspace"] .jurisdiction-list { list-style: none; margin: 0; padding: 0; }
body[data-plane="workspace"] .jurisdiction-list .jurisdiction-row {
  display: flex; align-items: center; gap: 14px; min-height: 44px; padding: 0 4px;
  border-top: 1px solid var(--h-line-soft); font-size: var(--type-body); }
body[data-plane="workspace"] .jurisdiction-row input[type="radio"] { width: 20px; height: 20px; margin: 0; accent-color: var(--h-accent); }
body[data-plane="workspace"] .jurisdiction-row label,
body[data-plane="workspace"] .jurisdiction-row > span:first-child { flex: 1 1 auto; }
body[data-plane="workspace"] .governing-form fieldset { border: 0; margin: 0; padding: 0; }
body[data-plane="workspace"] .request-act-end { display: flex; justify-content: flex-end; margin: 12px 0 0; }
body[data-plane="workspace"] .request-act-end .action { min-width: 122px; justify-content: center; }
/* **The finder** (ux/91 ANSWER 91-b): the search on the steps' grid, the matches as rows
   with their act at the end, and *Record no match* on its own row beneath — never implied. */
body[data-plane="workspace"] .finder-form,
body[data-plane="workspace"] .no-record-form,
body[data-plane="workspace"] .change-form { display: block; margin: 0; max-width: none; }
body[data-plane="workspace"] .finder-row > .step-control { grid-column: 1 / 3; }
body[data-plane="workspace"] .finder-row input[type="search"] { width: 100%; box-sizing: border-box; }
body[data-plane="workspace"] .finder-results { list-style: none; margin: 14px 0 0; padding: 0; }
body[data-plane="workspace"] .finder-result {
  display: flex; align-items: center; justify-content: space-between; gap: 16px;
  min-height: 56px; padding: 8px 0; border-top: 1px solid var(--h-line-soft); }
body[data-plane="workspace"] .finder-result:last-child { border-bottom: 1px solid var(--h-line-soft); }
body[data-plane="workspace"] .finder-who { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px; min-width: 0; }
body[data-plane="workspace"] .finder-name { font-size: var(--type-body); color: var(--h-ink); }
body[data-plane="workspace"] .finder-facts { font-size: var(--type-body); color: var(--h-ink-2); overflow-wrap: anywhere; }
body[data-plane="workspace"] .finder-result > .action-form { flex: none; margin: 0; }
body[data-plane="workspace"] .finder-none { margin: 14px 0 0; }
body[data-plane="workspace"] .no-record-row { margin: 18px 0 0; padding: 14px 0 0; border-top: 1px solid var(--h-line-soft); }
body[data-plane="workspace"] .no-record-row > .step-label { grid-column: 1 / 3; color: var(--h-ink-2); }
body[data-plane="workspace"] .change-form { margin: 12px 0 0; }
/* **What would happen**: the table across the card's full width, bordered, a tinted head,
   a rule between columns, and each category led by its mark on one line. */
body[data-plane="workspace"] #plan > :not(.card-head) { grid-column: 1 / -1; }
body[data-plane="workspace"] #plan .card-head-tile { grid-row: 1; }
body[data-plane="workspace"] #plan .card-head-words { padding: 0; }
body[data-plane="workspace"] #plan .plan-table {
  margin: 14px 0 0; border: 1px solid var(--h-line-soft); border-radius: var(--h-radius-sm);
  border-collapse: separate; border-spacing: 0; overflow: hidden; }
body[data-plane="workspace"] #plan .plan-table thead th {
  background: var(--h-page); color: var(--h-ink-2); font-weight: var(--h-w-normal);
  text-transform: none; letter-spacing: normal; font-size: var(--type-body); }
body[data-plane="workspace"] #plan .plan-table th,
body[data-plane="workspace"] #plan .plan-table td {
  padding: 12px 18px; border-top: 1px solid var(--h-line-soft); vertical-align: middle;
  font-size: var(--type-body); color: var(--h-ink); }
body[data-plane="workspace"] #plan .plan-table thead th { border-top: 0; }
body[data-plane="workspace"] #plan .plan-table :is(th, td) + :is(th, td) { border-left: 1px solid var(--h-line-soft); }
body[data-plane="workspace"] #plan .plan-table thead th:first-child { width: 42%; }
body[data-plane="workspace"] #plan .plan-table thead th:nth-child(2) { width: 32%; }
body[data-plane="workspace"] .plan-object { display: flex; align-items: center; gap: 16px; }
body[data-plane="workspace"] .plan-mark { display: inline-flex; flex: none; color: var(--h-ink-2); }
body[data-plane="workspace"] .plan-mark svg { width: 22px; height: 22px; }
body[data-plane="workspace"] .plan-name { min-width: 0; }
body[data-plane="workspace"] .plan-count { color: var(--h-muted); }
body[data-plane="workspace"] #plan .third-party {
  display: inline; margin: 0; padding: 0; border: 0; background: none; color: var(--h-muted);
  font-size: var(--type-body); font-weight: var(--h-w-normal); text-transform: none; letter-spacing: normal; }
body[data-plane="workspace"] #plan .third-party::before { content: " · "; }
body[data-plane="workspace"] .plan-line { display: block; }
body[data-plane="workspace"] .plan-line + .plan-line { margin-top: 6px; }
body[data-plane="workspace"] .grid.plan-table { table-layout: fixed; width: 100%; }
body[data-plane="workspace"] .plan-table td, body[data-plane="workspace"] .plan-table th { overflow-wrap: break-word; }
body[data-plane="workspace"] #plan > .request-quiet { margin: 14px 0 0; }
body[data-plane="workspace"] .request-card .note-band { margin: 14px 0 0; }
/* **What you can do**: numbered discs, a hairline between steps, and every step's rows on
   one three-column grid — the question, its control, its act. */
body[data-plane="workspace"] .act-steps { list-style: none; margin: 0; padding: 0; display: grid; }
body[data-plane="workspace"] .act-step { display: flex; align-items: flex-start; gap: 20px; padding: 14px 0; }
body[data-plane="workspace"] .act-step:first-child { padding-top: 4px; }
body[data-plane="workspace"] .act-step + .act-step { border-top: 1px solid var(--h-line-soft); }
body[data-plane="workspace"] .step-disc {
  flex: none; width: 38px; height: 38px; border-radius: 50%; background: var(--role-admin);
  color: var(--h-accent); font-weight: var(--h-w-semi); font-size: var(--type-body);
  display: inline-flex; align-items: center; justify-content: center; }
body[data-plane="workspace"] .step-body { flex: 1 1 auto; min-width: 0; }
/* The stage's title as the masters set it: a bold line, not the group label's caps. */
body[data-plane="workspace"] .step-body .act-group-label {
  margin: 0 0 8px; padding: 0; border: 0; text-transform: none; letter-spacing: normal;
  font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .step-grid,
body[data-plane="workspace"] .action-form.step-grid { display: grid; gap: 10px; margin: 0; max-width: none; }
body[data-plane="workspace"] .step-grid + .step-grid { margin-top: 10px; }
body[data-plane="workspace"] .step-row {
  display: grid; grid-template-columns: minmax(0, 32fr) minmax(0, 33fr) minmax(0, 21fr);
  column-gap: 18px; align-items: center; margin: 0; font-size: var(--type-body); }
body[data-plane="workspace"] .step-row > label,
body[data-plane="workspace"] .step-row > .step-label {
  color: var(--h-ink-2); font-weight: var(--h-w-normal); font-size: var(--type-body); margin: 0; }
body[data-plane="workspace"] .step-control { min-width: 0; }
body[data-plane="workspace"] .step-control :is(select, input[type="text"]) { width: 100%; box-sizing: border-box; }
body[data-plane="workspace"] .step-row > .step-act .action,
body[data-plane="workspace"] .step-pair > .step-cell .action {
  width: 100%; max-width: none; justify-content: center; box-sizing: border-box; margin: 0; }
body[data-plane="workspace"] .step-pair > .step-cell > .action-form { display: block; margin: 0; }
/* *Who asked?* as drawn: two conclusions on the first line (running under the act's
   column), the third below, and *Record* at the row's foot. */
/* **A determination field** (ux/91 ANSWER 91-c): the adjudicator's own words, the control
   the width of its column and the hint beneath saying what to write. */
body[data-plane="workspace"] .determination-field { margin: 0; min-width: 0; }
body[data-plane="workspace"] .determination-field :is(input[type="text"], textarea, select) {
  width: 100%; box-sizing: border-box; }
body[data-plane="workspace"] .determination-field textarea { resize: vertical; font: inherit; }
body[data-plane="workspace"] .determination-field .field-help { margin: 6px 0 0; }
body[data-plane="workspace"] .step-row:not(:has(> .step-act)) > .step-control { grid-column: 2 / 4; }
/* The submit after its fields, right-aligned in the act column (PO, CONFIRMED 68). */
body[data-plane="workspace"] .step-submit > .step-act { grid-column: 3; }
body[data-plane="workspace"] .step-row:has(> .step-control .determination-field) { align-items: start; }
body[data-plane="workspace"] .step-row:has(> .step-control .determination-field) > :is(label, .step-label) { padding-top: 11px; }
body[data-plane="workspace"] .radio-row {
  display: grid; grid-template-columns: max-content max-content; gap: 22px 28px;
  width: max-content; margin: 0; }
body[data-plane="workspace"] .step-row[role="radiogroup"] { align-items: start; }
body[data-plane="workspace"] .step-row[role="radiogroup"] > .step-act { align-self: end; }
body[data-plane="workspace"] .radio-field { display: inline-flex; align-items: center; gap: 8px; margin: 0; }
body[data-plane="workspace"] .radio-field input { width: 20px; height: 20px; margin: 0; accent-color: var(--h-accent); }
/* Two acts side by side, each filling its half. */
body[data-plane="workspace"] .step-pair { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 16px; }
body[data-plane="workspace"] .resolve-cell .action {
  background: var(--role-admin); color: var(--h-accent); border-color: var(--h-accent-soft); }
body[data-plane="workspace"] .resolve-cell .action:hover {
  background: var(--h-accent-soft); color: var(--h-accent); border-color: var(--h-accent); }
/* *Carry it out*, on an erasure: filled red — it opens the confirmation. */
body[data-plane="workspace"] .action.carry-erase {
  background: var(--h-danger); color: var(--h-card); border-color: var(--h-danger); }
body[data-plane="workspace"] .action.carry-erase:hover {
  background: var(--h-danger-ink); color: var(--h-card); border-color: var(--h-danger-ink); }
/* **Inactive, as drawn** (rules A, B): pale, its words still legible, not pressable. */
body[data-plane="workspace"] .action.action-inactive,
body[data-plane="workspace"] .action.action-inactive:hover {
  background: var(--h-accent-soft); color: var(--h-muted); border-color: var(--h-line);
  cursor: not-allowed; }
body[data-plane="workspace"] .action.carry-erase.action-inactive,
body[data-plane="workspace"] .action.carry-erase.action-inactive:hover {
  background: var(--h-danger-wash); color: var(--h-danger-ink); border-color: var(--h-danger-edge);
  cursor: default; pointer-events: none; }
body[data-plane="workspace"] .step-row :is(select, input):disabled { background: var(--h-page); color: var(--h-ink-2); }
body[data-plane="workspace"] .step-body > .actions { margin: 10px 0 0; }
@media (max-width: 48rem) {
  body[data-plane="workspace"] .request-card { grid-template-columns: 44px minmax(0, 1fr); column-gap: 14px; padding: 18px 16px; }
  body[data-plane="workspace"] .request-card .card-head-tile { width: 44px; height: 44px; grid-row: 1; }
  body[data-plane="workspace"] .request-card > :not(.card-head) { grid-column: 1 / -1; }
  body[data-plane="workspace"] .request-row { grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); }
  body[data-plane="workspace"] .step-row { grid-template-columns: minmax(0, 1fr); row-gap: 6px; }
  body[data-plane="workspace"] .radio-row { grid-template-columns: max-content; width: auto; }
  body[data-plane="workspace"] .step-pair,
    body[data-plane="workspace"] #plan .plan-table :is(th, td) + :is(th, td) { border-left: 0; }
}

/* ==========================================================================
   ux/90 ANSWER 90-b · Organisation, two more owner masters
   ========================================================================== */
/* **The Settings panel** (ux/86 ANSWER 86-f): the small *Settings* heading starts it, on the
   baseline of the page title's first line, and the panel's top is the title's top. */
body[data-plane="workspace"] .section-nav-title {
  padding: 0 8px; font-weight: var(--h-w-semi); color: var(--h-ink-2); }
@media (min-width: 769px) {
  /* The header's own top padding goes, so the title's top is the panel's (86-f 2). */
  body[data-plane="workspace"] .with-sections .rail-main > .head-card:first-child { padding-top: 0; }
}
/* **A row's edit, in the row**: tinted, the control in the value column, then *Save*
   (filled) and *Cancel* (a link). */
body[data-plane="workspace"] .account-row.account-row-editing {
  background: color-mix(in srgb, var(--role-admin) 40%, var(--h-card)); }
body[data-plane="workspace"] .account-row-editing .account-edit {
  padding: 0; background: none; gap: 12px; justify-items: start; }
body[data-plane="workspace"] .account-row-editing .account-edit .field { width: min(100%, 16rem); }
body[data-plane="workspace"] .account-row-editing .account-edit select,
body[data-plane="workspace"] .account-row-editing .account-edit input:not([type="checkbox"]) {
  width: 100%; box-sizing: border-box; }
body[data-plane="workspace"] .account-row-editing .field > label:first-child {
  position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0);
  white-space: nowrap; }
body[data-plane="workspace"] .account-row-editing .account-edit-acts { align-items: center; gap: 22px; }
/* **The panel runs the page's height**, as the master draws it. */
body[data-plane="workspace"] .with-sections > .page-sections { align-self: stretch; }
body[data-plane="workspace"] .with-sections > .page-sections > .section-nav { min-height: 100%; }
/* *Organisation data*'s label is the row's heading, one size up (the master). */
body[data-plane="workspace"] .account-row-data .account-row-label { font-size: var(--type-body); }
/* **No export yet, on one line.** */
body[data-plane="workspace"] .export-compact {
  display: flex; align-items: center; gap: 16px; padding: 16px 20px;
  background: var(--h-card); border: 1px solid var(--h-line-soft);
  border-radius: var(--h-radius-sm); box-shadow: 0 1px 3px var(--h-line); }
body[data-plane="workspace"] .export-compact .export-head { padding-top: 0; }
body[data-plane="workspace"] .export-compact-act { margin-left: auto; flex: none; }
body[data-plane="workspace"] .export-compact-act .action-form { margin: 0; }
@media (max-width: 48rem) {
  body[data-plane="workspace"] .export-compact { flex-wrap: wrap; }
  body[data-plane="workspace"] .export-compact-act { margin-left: 64px; }
}

/* ==========================================================================
   ux/92 · Jobs for an administrator, drawn to the owner's masters
   ========================================================================== */
/* **The hero is the shared band** (ux/111 ANSWER 102-b): Candidates' `head_card(hero=True)`
   treatment and art, unchanged — no Jobs-only card, gradient or illustration. */
/* -- Page 2 · Jobs, drawn to the owner's master (111, `jobs_list.png`, 1536px) ------------
   Measured off the master: the standing line's ring and green count; one white card, radius
   16, *All jobs* 30 bold over its caption; a tinted column head 55 tall with *Status* at 52%;
   rows ~120 tall — a 68px briefcase tile (violet, blue, amber by row), the title 25 bold over
   *Department · Location*, the pill over its one line, the chevron, and a bordered 56px ⋯.
   The card's table reuses 9's `cl-table`/`cl-pill`; what differs is here. */
body[data-plane="workspace"] #jobs-hero .jl-standing { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 12px; }
body[data-plane="workspace"] #jobs-hero .jl-ring { flex: 0 0 auto; width: 28px; height: 28px; color: var(--h-ok); }
body[data-plane="workspace"] #jobs-hero .jl-of { font-size: var(--type-lede); color: var(--h-ink); }
body[data-plane="workspace"] #jobs-hero .jl-count { font-weight: var(--h-w-normal); color: var(--h-ok); }
body[data-plane="workspace"] #jobs-hero .jl-clause { font-size: var(--type-lede); color: var(--h-muted); }
/* One text edge with the hero (84): *All jobs* sits on the title's edge. */
body[data-plane="workspace"] .cl-card.jl-card { padding: 30px 24px; }
body[data-plane="workspace"] .jl-head { margin: 0 0 22px; }
body[data-plane="workspace"] .jl-head h2 {
  margin: 0; font-size: var(--type-section); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="workspace"] .jl-caption:not(#jobs-x) { margin: 6px 0 0; font-size: var(--type-lede); color: var(--h-muted); }
body[data-plane="workspace"] .cl-table.jl-table { border: 0; border-radius: 0; overflow: visible; table-layout: fixed; }
body[data-plane="workspace"] .cl-table.jl-table thead :is(th, td) {
  box-sizing: border-box; height: 48px; padding: 0 24px; background: var(--h-fill-08); border-bottom: 1px solid var(--h-line);
  font-size: var(--type-lede); font-weight: var(--h-w-normal); color: var(--h-ink-2); }
body[data-plane="workspace"] .cl-table.jl-table thead th:first-child { width: 52%; }
body[data-plane="workspace"] .cl-table.jl-table :is(th, td).jl-go { width: 64px; padding-left: 0; padding-right: 0; }
body[data-plane="workspace"] .cl-table.jl-table :is(th, td).jl-menu { width: 72px; padding-left: 0; padding-right: 12px; }
/* **The row link's box is the name cell's, stretched across the row** (INSTRUCTION 112 item 8).
   WebKit ignores `position: relative` on a `<tr>` as a containing block, so the stretched
   `::after` fell through to the viewport and took every masthead click to the last row's job
   (`?via=E-020`). The cell is the containing block instead; the overlay runs right across the
   row and the card clips it sideways. No stacking context per row, so the ⋯ panel still sits
   over the next row (WebKit ignores `z-index` on a `<tr>` too). */
body[data-plane="workspace"] .cl-table.jl-table tbody th { position: relative; }
body[data-plane="workspace"] .cl-card.jl-card { overflow-x: clip; }
body[data-plane="workspace"] .cl-table.jl-table tbody :is(th, td) {
  height: 104px; box-sizing: border-box; padding: 14px 24px 14px 20px; border-top: 0;
  border-bottom: 1px solid var(--h-line); }
body[data-plane="workspace"] .jl-cell { display: flex; align-items: center; gap: 36px; min-width: 0; }
body[data-plane="workspace"] .jl-words { min-width: 0; }
body[data-plane="workspace"] .jl-tile {
  flex: 0 0 60px; display: inline-flex; align-items: center; justify-content: center;
  width: 60px; height: 60px; border-radius: 14px; }
body[data-plane="workspace"] .jl-tile .icon { width: 28px; height: 28px; margin: 0; }
body[data-plane="workspace"] .jl-tile-violet { background: color-mix(in srgb, var(--mark-violet) 10%, var(--h-card)); color: var(--mark-violet); }
body[data-plane="workspace"] .jl-tile-blue { background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .jl-tile-amber { background: var(--h-warn-soft); color: var(--h-warn); }
/* **The title is the row's one link, and its box is the row's** (D-591): the chevron is its
   mark, so the whole row goes to 3; the ⋯ sits above it. */
body[data-plane="workspace"] .jl-name {
  font-size: var(--type-card-title); font-weight: var(--h-w-bold); color: var(--h-ink);
  text-decoration: none; overflow-wrap: anywhere; }
body[data-plane="workspace"] .jl-name::after { content: ""; position: absolute; inset: 0 -100vw 0 0; }
body[data-plane="workspace"] .cl-table.jl-table tbody tr:hover .jl-name { color: var(--h-accent); }
body[data-plane="workspace"] .jl-name.job-untitled { font-style: italic; color: var(--h-ink-2); }
body[data-plane="workspace"] .jl-meta:not(#jobs-x) {
  margin: 6px 0 0; font-size: var(--type-lede); color: var(--h-muted); overflow-wrap: anywhere; }
/* ANSWER 102-c: each `·` travels with the part after it, spaced ~0.5em each side as drawn. */
body[data-plane="workspace"] .jl-meta-part { white-space: nowrap; }
body[data-plane="workspace"] .jl-sep { margin: 0 0.5em 0 0.25em; }
body[data-plane="workspace"] .cl-table.jl-table .cl-pill { padding: 6px 18px 6px 16px; gap: 12px; font-size: var(--type-pill); white-space: nowrap; }
body[data-plane="workspace"] .cl-table.jl-table .cl-pill-dot { width: 13px; height: 13px; }
body[data-plane="workspace"] .cl-pill-amber { background: var(--h-warn-soft); color: var(--h-warn); }
body[data-plane="workspace"] .jl-line:not(#jobs-x) {
  margin: 8px 0 0 20px; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .cl-table.jl-table td.jl-go { text-align: center; color: var(--h-muted); }
body[data-plane="workspace"] .cl-table.jl-table td.jl-go .icon { width: 22px; height: 22px; margin: 0; }
body[data-plane="workspace"] .cl-table.jl-table td.jl-menu { text-align: right; }
body[data-plane="workspace"] .cl-table.jl-table .job-row-menu { position: relative; z-index: 1; display: inline-block; }
@media (max-width: 48rem) {
  body[data-plane="workspace"] .cl-card.jl-card { padding: 20px 24px; }
  body[data-plane="workspace"] .cl-table.jl-table, body[data-plane="workspace"] .cl-table.jl-table tbody { display: block; }
  body[data-plane="workspace"] .cl-table.jl-table thead { display: none; }
  /* 111 at a phone: the tile and the words, the pill and its line under them, the ⋯ at the
     row's end; the chevron goes, since the whole row is the link. */
  body[data-plane="workspace"] .cl-table.jl-table tbody tr.job-row > th { position: static; }
  body[data-plane="workspace"] .jl-name::after { inset: 0; }
  body[data-plane="workspace"] .cl-table.jl-table tbody tr.job-row {
    position: relative; display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 12px 12px; align-items: start;
    padding: 16px 0; border-bottom: 1px solid var(--h-line); }
  body[data-plane="workspace"] .cl-table.jl-table tbody tr.job-row > :is(th, td) {
    display: block; height: auto; width: auto; padding: 0; border: 0; }
  body[data-plane="workspace"] .cl-table.jl-table tbody tr.job-row > th { grid-column: 1; grid-row: 1; }
  body[data-plane="workspace"] .cl-table.jl-table tbody tr.job-row > td:nth-child(2) { grid-column: 1; grid-row: 2; padding-left: 64px; }
  body[data-plane="workspace"] .cl-table.jl-table tbody tr.job-row > td.jl-go { display: none; }
  body[data-plane="workspace"] .cl-table.jl-table tbody tr.job-row > td.jl-menu { grid-column: 2; grid-row: 1; }
  body[data-plane="workspace"] .jl-cell { gap: 16px; }
  body[data-plane="workspace"] .jl-tile { flex-basis: 48px; width: 48px; height: 48px; border-radius: 12px; }
  body[data-plane="workspace"] .jl-tile .icon { width: 24px; height: 24px; }
  body[data-plane="workspace"] .jl-name { font-size: var(--type-lede); }
  body[data-plane="workspace"] .jl-meta:not(#jobs-x) { font-size: var(--type-body); }
  body[data-plane="workspace"] .jl-line:not(#jobs-x) { margin-left: 0; font-size: var(--type-body); }
  body[data-plane="workspace"] .cl-table.jl-table .cl-pill { padding: 5px 14px 5px 12px; }
  body[data-plane="workspace"] .job-row-menu .row-menu-panel { min-width: 0; max-width: 100%; }
}
body[data-plane="workspace"] #jobs-hero .standing-band svg { color: var(--h-accent); }
/* ANSWER 102-c: the ring's arc in the master's bright green, over its pale track. */
body[data-plane="workspace"] #jobs-hero .jl-standing svg.jl-ring { color: var(--mark-green); }
body[data-plane="workspace"] .job-row-menu > summary.row-menu-button {
  list-style: none; cursor: pointer; display: inline-flex; align-items: center;
  justify-content: center; width: 56px; height: 56px; box-sizing: border-box;
  border: 1px solid var(--h-line); border-radius: 10px; background: var(--h-card); color: var(--h-ink); }
@media (max-width: 48rem) {
  body[data-plane="workspace"] .job-row-menu > summary.row-menu-button { width: 44px; height: 44px; }
}
body[data-plane="workspace"] .job-row-menu > summary.row-menu-button svg { width: 22px; height: 22px; }
@media (max-width: 360px) {
  body[data-plane="workspace"] .cl-table.jl-table tbody tr.job-row > td:nth-child(2) { padding-left: 0; }
}
body[data-plane="workspace"] .job-row-menu > summary::-webkit-details-marker { display: none; }
body[data-plane="workspace"] .job-row-menu[open] > summary { background: var(--h-fill-18); }
body[data-plane="workspace"] .job-row-menu .row-menu-panel {
  position: absolute; right: 0; top: 100%; z-index: 5; margin-top: 4px; display: grid; gap: 2px;
  min-width: 15rem; padding: 6px; background: var(--h-card); border: 1px solid var(--h-line);
  border-radius: 10px; box-shadow: 0 8px 24px var(--h-line); }
body[data-plane="workspace"] .row-menu-link {
  display: block; padding: 8px 12px; border-radius: 8px; color: var(--h-ink);
  font-size: var(--type-body); text-decoration: none; white-space: nowrap; }
body[data-plane="workspace"] .row-menu-link:hover { background: var(--h-fill-08); }
/* **The empty state as drawn**: the document in a large disc above the words, the list art. */
body[data-plane="workspace"] .teaching-disc {
  display: inline-flex; align-items: center; justify-content: center; width: 90px; height: 90px;
  margin: 0 0 22px; border-radius: 50%; background: var(--role-admin); color: var(--h-ink-2); }
body[data-plane="workspace"] .teaching-disc svg { width: 40px; height: 40px; }
/* The master's words beside the disc (measured, ux/92 §5): the heading 32 bold, the line 18. */
body[data-plane="workspace"] .teaching-empty:has(.teaching-disc) .teaching-top h2 {
  font-size: var(--type-section); font-weight: var(--h-w-bold); }
body[data-plane="workspace"] .teaching-empty:has(.teaching-disc) .teaching-line {
  margin-top: 10px; }

/* ux/86 ANSWER 61-a, 63-b: a top-level list card's heading is the Jobs master's size, and
   the dates a master shows on one line stay on one line. */
body[data-plane="workspace"] .population-section > .region-head .region-name { font-size: var(--type-section); }
body[data-plane="workspace"] .member-row .member-joined .joined-part:only-child { white-space: nowrap; }
body[data-plane="workspace"] .rights-table td[data-label="Waited"] .cell-detail { white-space: nowrap; }

/* ux/86 ANSWER 61-a (CONFIRMED 63's fix): the Settings panel on the new ladder — its items
   at the row size (15), its *Settings* heading one step up (16), rows at the master's
   height. */
body[data-plane="workspace"] .section-nav ul { font-size: var(--type-body); }
body[data-plane="workspace"] .section-nav a,
body[data-plane="workspace"] .section-nav-ending a { padding: 11px 12px; }
body[data-plane="workspace"] .section-nav-title { font-size: var(--type-card-title); }

/* ==========================================================================
   ux/93 · After upload (7), drawn to the owner's master (INSTRUCTION 65).
   The master is the 1440 layout set at 1536; lengths are its ÷ 1.067.
   ========================================================================== */
@media (min-width: 64rem) {
  body[data-layout="object"][data-details] main:has(> .details-region > .result-card) {
    grid-template-columns: minmax(0, 1.85fr) minmax(0, 1fr); column-gap: 21px; }
}
body[data-plane="workspace"] main:has(> .details-region > .result-card) .object-main { gap: 21px; }
body[data-plane="workspace"] .details-region:has(> .result-card) { display: grid; gap: 21px; align-content: start; }
/* **A card as drawn**: the round tile, then the eyebrow label and the body beside it. */
body[data-plane="workspace"] .result-card {
  display: grid; grid-template-columns: 64px minmax(0, 1fr); column-gap: 26px;
  align-items: start; margin: 0; padding: 22px 26px 24px;
  background: var(--h-card); border: 1px solid var(--h-line); border-radius: var(--h-radius); }
body[data-plane="workspace"] .result-tile {
  display: inline-flex; align-items: center; justify-content: center;
  width: 64px; height: 64px; border-radius: 50%; background: var(--role-admin); color: var(--h-accent); }
body[data-plane="workspace"] .result-tile svg { width: 26px; height: 26px; }
body[data-plane="workspace"] .result-body { min-width: 0; padding-top: 12px; }
body[data-plane="workspace"] .result-body > .card-label { margin: 0 0 14px; }
body[data-plane="workspace"] .result-card.result-good { background: var(--h-ok-wash); border-color: var(--h-ok-line); }
body[data-plane="workspace"] .result-card.result-good .result-tile { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="workspace"] .result-card.result-caution { background: var(--h-warn-soft); border-color: var(--h-warn-line); }
body[data-plane="workspace"] .result-card.result-caution .result-tile { background: var(--h-warn-wash); color: var(--h-warn-ink); }
/* ● {word} · {line} */
body[data-plane="workspace"] .result-status {
  display: flex; align-items: center; flex-wrap: wrap; gap: 8px 10px; margin: 0;
  font-size: var(--type-lede); color: var(--h-ink); }
/* The status dot is the word's own mark — drawn, not an empty element (a hollow region). */
body[data-plane="workspace"] .result-word::before {
  content: ""; display: inline-block; width: 12px; height: 12px; margin-right: 10px;
  border-radius: 50%; background: var(--h-muted); vertical-align: 1px; }
body[data-plane="workspace"] .result-good .result-word::before { background: var(--h-ok); }
body[data-plane="workspace"] .result-caution .result-word::before { background: var(--h-warn-ink); }
body[data-plane="workspace"] .result-word { font-weight: var(--h-w-semi); }
body[data-plane="workspace"] .result-good .result-word { color: var(--h-ok); }
body[data-plane="workspace"] .result-caution .result-word { color: var(--h-warn-ink); }
body[data-plane="workspace"] .result-sep { color: var(--h-muted); }
body[data-plane="workspace"] .result-joined { color: var(--h-link); font-weight: var(--h-w-semi); text-decoration: none; }
body[data-plane="workspace"] .result-joined:hover { color: var(--h-accent-hi); text-decoration: underline; }
body[data-plane="workspace"] .result-reason { margin: 10px 0 0; font-size: var(--type-body); color: var(--h-ink-2); }
body[data-plane="workspace"] .result-again { margin: 14px 0 0; }
/* **Confirm the candidate**: the label, a full-width field, two notes, the filled act. */
body[data-plane="workspace"] #confirm-candidate .action-form { display: block; margin: 0; max-width: none; }
body[data-plane="workspace"] .result-field { margin: 0; }
body[data-plane="workspace"] #confirm-candidate .action-form .field { margin: 0; }
body[data-plane="workspace"] #confirm-candidate .action-form .field label {
  display: block; margin: 0 0 10px; font-size: var(--type-body); font-weight: var(--h-w-semi);
  color: var(--h-ink); text-transform: none; letter-spacing: normal; }
body[data-plane="workspace"] #confirm-candidate .action-form input[type="text"] {
  width: 100%; max-width: none; box-sizing: border-box; padding: 14px 18px; font-size: var(--type-body); }
body[data-plane="workspace"] .result-note { margin: 10px 0 0; font-size: var(--type-body); color: var(--h-muted); }
body[data-plane="workspace"] .result-note + .result-note { margin-top: 2px; }
body[data-plane="workspace"] #confirm-candidate .action-form .primary-action { margin-top: 22px; }
/* **What happens next**: numbered discs, none marked done. */
body[data-plane="workspace"] .result-steps { list-style: none; margin: 0; padding: 0; counter-reset: next; display: grid; gap: 12px; }
body[data-plane="workspace"] .result-steps > li {
  counter-increment: next; display: flex; align-items: center; gap: 26px;
  font-size: var(--type-lede); color: var(--h-ink-2); }
body[data-plane="workspace"] .result-steps > li::before {
  content: counter(next); flex: none; display: inline-flex; align-items: center; justify-content: center;
  width: 40px; height: 40px; border-radius: 50%; background: var(--role-admin);
  color: var(--h-accent); font-weight: var(--h-w-semi); font-size: var(--type-body); }
/* **The side cards**: a tile beside a bold title, the body beneath both. */
body[data-plane="workspace"] .result-card.result-side {
  grid-template-columns: 48px minmax(0, 1fr); column-gap: 18px; row-gap: 14px; padding: 22px 26px; }
body[data-plane="workspace"] .result-side .result-tile { width: 48px; height: 48px; }
body[data-plane="workspace"] .result-side .result-tile svg { width: 22px; height: 22px; }
body[data-plane="workspace"] .result-side .result-body { display: contents; }
body[data-plane="workspace"] .result-side .result-title {
  grid-column: 2; grid-row: 1; align-self: center; margin: 0;
  font-size: var(--type-card-title); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="workspace"] .result-side .result-body > :not(.result-title) { grid-column: 1 / -1; }
body[data-plane="workspace"] .result-side .request-row { grid-template-columns: minmax(0, 125px) minmax(0, 1fr); }
body[data-plane="workspace"] .result-remaining { margin: 0; font-size: var(--type-lede); color: var(--h-ink); }
/* A segmented bar of the spent share, as drawn — a <meter>, cut by a mask. */
body[data-plane="workspace"] .quota-meter.result-meter {
  display: block; width: 100%; height: 24px; margin: 4px 0 0;
  -webkit-mask-image: repeating-linear-gradient(90deg, var(--h-ink) 0 8px, transparent 8px 11px);
  mask-image: repeating-linear-gradient(90deg, var(--h-ink) 0 8px, transparent 8px 11px); }
body[data-plane="workspace"] .result-meter::-webkit-meter-bar { background: var(--role-admin); border: 0; border-radius: 0; }
body[data-plane="workspace"] .result-meter::-webkit-meter-optimum-value { background: var(--h-accent); }
body[data-plane="workspace"] .result-spend { margin: 0; font-size: var(--type-body); color: var(--h-muted); }
@media (max-width: 48rem) {
  body[data-plane="workspace"] .result-card { grid-template-columns: 44px minmax(0, 1fr); column-gap: 14px; padding: 18px 16px; }
  body[data-plane="workspace"] .result-tile { width: 44px; height: 44px; }
  body[data-plane="workspace"] main:has(> .details-region > .result-card) > .details-region { margin-top: 21px; }
}

/* ==========================================================================
   ux/86 ANSWER 86-g (owner): **one act button, and it is inactive until its data exists.**
   Every non-destructive act button, on every plane, is filled blue with white text; a
   form's submit is inactive while any required input is missing or invalid (CSS only —
   native `required` still refuses the submit, and the server's checks are unchanged).
   Destructive and exit acts keep their red treatments (13c's *Cancel the subscription* is the
   master's red outline), and text links stay links (*Cancel*, *Not now*).

   **Weighted by an id nobody wears** (`:not(#act-86g)`): the variant rules this ruling
   retires (secondary, outlined, quiet, per-region fills) carry ids and long class chains,
   and a ruling that applies everywhere must not lose to one of them by specificity.
   The important-flag stays refused. Each selector is one compound per line — a line break inside
   one would be a descendant combinator.
   ========================================================================== */
body[data-plane] :is(main, dialog) :is(button, input[type="submit"], a.action):not(#act-86g):not(.action-destructive):not(.erase-submit):not(.carry-erase):not(.quiet-link):not(.link-button):not(.cancel-outline):not(.action-exit):not(.account-cancel):not(.confirm-back):not(.code-resend):not(.reveal) {
  background: var(--accent); border-color: var(--accent); color: var(--page);
}
body[data-plane] :is(main, dialog) :is(button, input[type="submit"], a.action):not(#act-86g):not(.action-destructive):not(.erase-submit):not(.carry-erase):not(.quiet-link):not(.link-button):not(.cancel-outline):not(.action-exit):not(.account-cancel):not(.confirm-back):not(.code-resend):not(.reveal):hover {
  background: var(--accent-deep); border-color: var(--accent-deep); color: var(--page);
  cursor: pointer;
}
/* **Inactive**: pale blue, white text, no hover — a disabled control, a drawn inactive act,
   or the submit of a form whose required data is missing (86-g 1). */
body[data-plane] :is(main, dialog) :is(button, input[type="submit"], a.action):not(#act-86g):not(.action-destructive):not(.erase-submit):not(.carry-erase):not(.quiet-link):not(.link-button):not(.cancel-outline):not(.action-exit):not(.account-cancel):not(.confirm-back):not(.code-resend):not(.reveal):is(:disabled, .action-inactive),
body[data-plane] :is(main, dialog) :is(button, input[type="submit"], a.action):not(#act-86g):not(.action-destructive):not(.erase-submit):not(.carry-erase):not(.quiet-link):not(.link-button):not(.cancel-outline):not(.action-exit):not(.account-cancel):not(.confirm-back):not(.code-resend):not(.reveal):is(:disabled, .action-inactive):hover,
body[data-plane]:not([data-plane="operator"]):not(:has(.account-column)) :is(main, dialog) form:not(:is(.gate-card, .signin-card, .code-main, #signup, .security-dialog) form):has(:invalid) :is(button[type="submit"], button:not([type]), input[type="submit"]):not(#act-86g):not(.action-destructive):not(.erase-submit):not(.carry-erase):not(.quiet-link):not(.link-button):not(.cancel-outline):not(.action-exit):not(.account-cancel):not(.confirm-back):not(.code-resend):not(.reveal),
body[data-plane]:not([data-plane="operator"]):not(:has(.account-column)) :is(main, dialog) form:not(:is(.gate-card, .signin-card, .code-main, #signup, .security-dialog) form):has(:invalid) :is(button[type="submit"], button:not([type]), input[type="submit"]):not(#act-86g):not(.action-destructive):not(.erase-submit):not(.carry-erase):not(.quiet-link):not(.link-button):not(.cancel-outline):not(.action-exit):not(.account-cancel):not(.confirm-back):not(.code-resend):not(.reveal):hover {
  background: var(--accent-focus); border-color: var(--accent-focus); color: var(--page);
  box-shadow: none; transform: none; cursor: default; pointer-events: none;
}
body[data-plane]:not([data-plane="operator"]):not(:has(.account-column)) :is(main, dialog) form:not(:is(.gate-card, .signin-card, .code-main, #signup, .security-dialog) form):has(:invalid) :is(button[type="submit"], button:not([type]), input[type="submit"]):not(#act-86g):not(.action-destructive):not(.erase-submit):not(.carry-erase):not(.quiet-link):not(.link-button):not(.cancel-outline):not(.action-exit):not(.account-cancel):not(.confirm-back):not(.code-resend):not(.reveal) { pointer-events: none; }
/* **Not on the operator plane, the account page, or a pre-authentication gate**
   (INSTRUCTION 133, after B8a's and B2's instances; widened at 135's review to sign-in, the
   signup gates, A3's steps and the designated persons' gates — `.gate-card`, `.signin-card`,
   `.code-main`, `#signup`): there a primary act stays solid and pressable over an empty
   field, and the form's own validation names what is missing. A drawn-inactive or disabled act
   keeps 86-g's treatment everywhere; only the missing-data paling is withdrawn. */
/* **86-g amended: a hover that can be seen** (the owner: `--accent` to `--accent-hover` and
   a 1px shadow was too subtle). A blue act darkens to `--accent-deep` (white text 8.72:1)
   above; a filled red darkens and a red outline fills red (70-a). Where motion is
   welcome, both lift 1px with a shadow in their own hue, over 120ms, and settle when
   pressed. Under `prefers-reduced-motion: reduce` only the colour changes. An inactive act
   has no hover: it ignores the pointer and its rules above set no shadow and no lift. */
/* **A red outline hovers to a filled red** (QUESTION 70-a, the PO's answer): white on
   `--h-danger` is 5.79:1. On 13c the pink tint was the danger card's own ground,
   so the hover could not be seen; a fill is unmistakable, and it is what the blue acts do. */
body[data-plane] :is(main, dialog) :is(.action-destructive, .cancel-outline):not(:disabled):not(.action-inactive):hover {
  background: var(--h-danger, var(--danger)); border-color: var(--h-danger, var(--danger));
  color: var(--page);
}
@media (prefers-reduced-motion: no-preference) {
  body[data-plane] :is(main, dialog) :is(button, input[type="submit"], a.action):not(#act-86g):not(.action-destructive):not(.erase-submit):not(.carry-erase):not(.quiet-link):not(.link-button):not(.cancel-outline):not(.action-exit):not(.account-cancel):not(.confirm-back):not(.code-resend):not(.reveal),
  body[data-plane] :is(main, dialog) :is(.action-destructive, .erase-submit, .carry-erase, .cancel-outline):not(:disabled):not(.action-inactive) {
    transition: background-color 120ms ease-out, box-shadow 120ms ease-out, transform 120ms ease-out;
  }
  body[data-plane] :is(main, dialog) :is(button, input[type="submit"], a.action):not(#act-86g):not(.action-destructive):not(.erase-submit):not(.carry-erase):not(.quiet-link):not(.link-button):not(.cancel-outline):not(.action-exit):not(.account-cancel):not(.confirm-back):not(.code-resend):not(.reveal):hover {
    transform: translateY(-1px); box-shadow: 0 4px 10px color-mix(in srgb, var(--accent-deep) 28%, transparent);
  }
  body[data-plane] :is(main, dialog) :is(button, input[type="submit"], a.action):not(#act-86g):not(.action-destructive):not(.erase-submit):not(.carry-erase):not(.quiet-link):not(.link-button):not(.cancel-outline):not(.action-exit):not(.account-cancel):not(.confirm-back):not(.code-resend):not(.reveal):active {
    transform: none; box-shadow: 0 1px 3px color-mix(in srgb, var(--accent-deep) 28%, transparent);
  }
  body[data-plane] :is(main, dialog) :is(.action-destructive, .erase-submit, .carry-erase, .cancel-outline):not(:disabled):not(.action-inactive):hover {
    transform: translateY(-1px);
    box-shadow: 0 4px 10px color-mix(in srgb, var(--h-danger, var(--danger)) 28%, transparent);
  }
  body[data-plane] :is(main, dialog) :is(.action-destructive, .erase-submit, .carry-erase, .cancel-outline):not(:disabled):not(.action-inactive):active {
    transform: none;
    box-shadow: 0 1px 3px color-mix(in srgb, var(--h-danger, var(--danger)) 28%, transparent);
  }
}

/* -- B3 · Identity, drawn to the owner's master (103, `ops_identity_manager.png`) --------
   Measured at the master's 1024px: one 892px column; the head with the ID-card art; two
   cards, radius 16; in the account card, facts with icon tiles and one panel per act —
   pale blue (an act), grey (withheld), amber with a left rule (the lock). */
/* **The master's 892px column** (103, ANSWER 82-b): B3 keeps its declared `focused`
   layout and takes its operator siblings' measure — the centred container, as B8 and B9
   (INSTRUCTION 133: lifting the cap entirely stranded the column at the window's left
   edge on a wide screen). Inside that measure the column starts at the content edge, as
   the master draws it, never centred. */
body[data-layout="focused"][data-plane="operator"] main:has(> .identity-head) { max-width: var(--container); }
/* **B3's own inset, and only B3's** (INSTRUCTION 129, the PO's review): `#computed-at` took
   it on every operator page, which put B8's and B8a's *Read …* 69px in from their cards. */
/* **B3 renders as its siblings do** (INSTRUCTION 133, the owner's intent): the head and
   every card span the content measure with B8's and B9's edges, the art anchored at the
   head's right. 103's 892px column is withdrawn; the field keeps its readable measure. */
body[data-plane="operator"] :is(.identity-head, .identity-card),
body[data-plane="operator"] main:has(> .identity-head) > #computed-at {
  margin-left: 0; margin-right: 0; box-sizing: border-box;
}
@media (max-width: 48rem) {
  body[data-plane="operator"] :is(.identity-head, .identity-card),
  body[data-plane="operator"] main:has(> .identity-head) > #computed-at { margin-left: 0; }
}
body[data-plane="operator"] .identity-head {
  display: flex; align-items: flex-end; justify-content: space-between; gap: 24px;
  min-height: 190px; padding: 0 10px 0 4px;
}
body[data-plane="operator"] .identity-head-words { flex: 1 0 540px; min-width: 0; }
body[data-plane="operator"] .identity-head h1 {
  margin: 0; font-size: var(--h-t-id-title); line-height: var(--lh-tight);
  letter-spacing: var(--track-title); font-weight: var(--h-w-bold); color: var(--h-ink);
}
body[data-plane="operator"] .identity-lede:not(#id-x):not(#act-86g) {
  margin: 14px 0 60px; font-size: var(--h-t-id-lede); color: var(--h-muted);
}
/* The cut carries the master's tinted band behind it, so its edges fade into the page. */
body[data-plane="operator"] .identity-art {
  flex: 0 1 370px; width: 370px; min-width: 0; height: auto; align-self: flex-start;
  -webkit-mask-image: radial-gradient(ellipse 70% 72% at 58% 52%, black 55%, transparent 100%);
  mask-image: radial-gradient(ellipse 70% 72% at 58% 52%, black 55%, transparent 100%);
}
body[data-plane="operator"] .identity-card {
  display: flex; gap: 33px; margin-top: 0; margin-bottom: 18px; padding: 34px 34px 30px;
  border: 1px solid var(--h-line); border-radius: 16px; background: var(--h-card);
  box-shadow: 0 8px 28px color-mix(in srgb, var(--h-ink) 6%, transparent);
}
body[data-plane="operator"] .identity-card-body { flex: 1; min-width: 0; }
body[data-plane="operator"] .identity-tile {
  flex: 0 0 60px; display: inline-flex; align-items: center; justify-content: center;
  width: 60px; height: 60px; border-radius: 12px;
  background: var(--h-accent-soft); color: var(--h-accent);
}
body[data-plane="operator"] .identity-tile .icon { width: 30px; height: 30px; }
body[data-plane="operator"] .identity-lookup h2 {
  margin: 0; font-size: var(--h-t-id-card-title); font-weight: var(--h-w-bold); color: var(--h-ink);
}
body[data-plane="operator"] .identity-sub:not(#id-x):not(#act-86g) { margin: 8px 0 0; font-size: var(--h-t-id-sub); color: var(--h-muted); }
body[data-plane="operator"] .identity-lookup .action-form:not(#id-x):not(#act-86g) { display: block; max-width: none; margin: 32px 0 0; }
body[data-plane="operator"] .identity-lookup .action-form label {
  display: block; margin: 0 0 10px; font-size: var(--h-t-id-label); font-weight: var(--h-w-semi); color: var(--h-ink);
}
body[data-plane="operator"] .identity-input { position: relative; display: block; max-width: 644px; }
body[data-plane="operator"] .identity-input-mark {
  position: absolute; left: 10px; top: 50%; transform: translateY(-50%);
  display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px;
  border-radius: 8px; background: var(--h-accent-soft); color: var(--h-muted); pointer-events: none;
}
body[data-plane="operator"] .identity-input-mark .icon { width: 18px; height: 18px; }
body[data-plane="operator"] .identity-input input:not(#id-x):not(#act-86g) {
  display: block; width: 100%; max-width: none; height: 50px; box-sizing: border-box;
  padding: 0 16px 0 56px; border: 1px solid var(--h-line-strong); border-radius: 8px;
  font-size: var(--h-t-id-input); background: var(--h-card);
}
body[data-plane="operator"] .identity-lookup .action-form .identity-find:not(#id-x):not(#act-86g) {
  display: inline-flex; align-items: center; gap: 14px; height: 58px; margin: 22px 0 0;
  padding: 0 40px; border-radius: 8px; font-size: var(--h-t-id-action);
}
body[data-plane="operator"] .identity-find .icon { width: 22px; height: 22px; }
body[data-plane="operator"] .identity-account { display: block; padding: 36px 26px 26px 34px; }
body[data-plane="operator"] .identity-who {
  display: flex; gap: 22px; align-items: flex-start; padding-bottom: 26px;
  border-bottom: 1px solid var(--h-line);
}
body[data-plane="operator"] .identity-monogram {
  flex: 0 0 84px; display: inline-flex; align-items: center; justify-content: center;
  width: 84px; height: 84px; border-radius: 50%; background: var(--h-accent-soft);
  font-size: var(--h-t-id-card-title); font-weight: var(--h-w-bold); color: var(--h-ink);
}
body[data-plane="operator"] .identity-pill {
  display: inline-flex; align-items: center; gap: 8px; padding: 4px 12px; border-radius: 8px;
  background: var(--h-ok-soft); color: var(--h-ok); font-size: var(--h-t-id-pill); font-weight: var(--h-w-semi);
}
body[data-plane="operator"] .identity-pill-dot { width: 10px; height: 10px; border-radius: 50%; background: currentColor; }
body[data-plane="operator"] .identity-pill-locked { background: var(--h-warn-soft); color: var(--h-warn); }
body[data-plane="operator"] .identity-email:not(#id-x):not(#act-86g) {
  margin: 10px 0 0; font-size: var(--h-t-id-email); font-weight: var(--h-w-bold); color: var(--h-ink);
  overflow-wrap: anywhere;
}
body[data-plane="operator"] .identity-standing:not(#id-x):not(#act-86g) { margin: 8px 0 0; font-size: var(--h-t-id-body); color: var(--h-muted); }
body[data-plane="operator"] .identity-facts {
  display: grid; gap: 14px; margin: 0; padding: 22px 0 26px 10px; border-bottom: 1px solid var(--h-line);
}
body[data-plane="operator"] .identity-fact { display: grid; grid-template-columns: 237px minmax(0, 1fr); align-items: center; }
body[data-plane="operator"] .identity-fact dt {
  display: flex; align-items: center; gap: 24px; margin: 0; font-size: var(--h-t-id-body); color: var(--h-muted);
}
body[data-plane="operator"] .identity-fact dd { margin: 0; font-size: var(--h-t-id-body); color: var(--h-ink); overflow-wrap: anywhere; }
body[data-plane="operator"] .identity-fact-mark {
  display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px;
  border-radius: 10px; background: var(--h-fill-08); color: var(--h-ink);
}
body[data-plane="operator"] .identity-fact-mark .icon { width: 20px; height: 20px; }
body[data-plane="operator"] .identity-panels { display: grid; gap: 16px; margin-top: 18px; }
body[data-plane="operator"] .identity-panel {
  display: flex; gap: 26px; align-items: center; padding: 22px 22px 22px 18px; border-radius: 12px;
}
body[data-plane="operator"] .identity-panel-act { background: color-mix(in srgb, var(--h-accent-soft) 85%, var(--h-card)); }
body[data-plane="operator"] .identity-panel-withheld { background: var(--h-chip); }
body[data-plane="operator"] .identity-panel-lock {
  border-left: 4px solid var(--h-warn); background: var(--h-warn-soft);
}
body[data-plane="operator"] .identity-panel-mark {
  flex: 0 0 60px; display: inline-flex; align-items: center; justify-content: center;
  width: 60px; height: 60px; border-radius: 12px; background: var(--h-accent-soft); color: var(--h-accent);
}
body[data-plane="operator"] .identity-panel-withheld .identity-panel-mark { background: var(--h-line); color: var(--h-muted); }
body[data-plane="operator"] .identity-panel-lock .identity-panel-mark { background: var(--h-warn-note); color: var(--mark-warm); }
body[data-plane="operator"] .identity-panel-mark .icon { width: 28px; height: 28px; }
body[data-plane="operator"] .identity-panel-words { flex: 1; min-width: 0; }
body[data-plane="operator"] .identity-panel-title:not(#id-x):not(#act-86g) {
  margin: 0; font-size: var(--h-t-id-panel-title); font-weight: var(--h-w-bold); color: var(--h-ink);
}
body[data-plane="operator"] .identity-panel-says:not(#id-x):not(#act-86g) {
  max-width: 420px; margin: 6px 0 0; font-size: var(--h-t-id-panel); line-height: var(--lh-snug); color: var(--h-muted);
}
body[data-plane="operator"] .identity-panel-act-slot form { margin: 0; }
body[data-plane="operator"] .identity-panel-button { gap: 10px; }
body[data-plane="operator"] .identity-panel-button .icon { width: 18px; height: 18px; margin: 0; }
body[data-plane="operator"] .identity-panel-act-slot .action:not(#id-x):not(#act-86g) {
  min-width: 212px; height: 46px; justify-content: center; border-radius: 8px; font-size: var(--h-t-id-sub);
}
/* The lock: a red outline, filling red on hover (86-g terminal weight). */
body[data-plane="operator"] .identity-panel-lock .identity-panel-act-slot .action:not(#id-x):not(#act-86g) {
  background: var(--h-card); border: 1.5px solid var(--h-danger); color: var(--h-danger);
}
body[data-plane="operator"] .identity-panel-lock .identity-panel-act-slot .action:not(#id-x):not(#act-86g):hover {
  background: var(--h-danger); color: var(--h-card);
}
body[data-plane="operator"] .identity-empty { display: block; }
@media (max-width: 48rem) {
  body[data-plane="operator"] .identity-art { display: none; }
  body[data-plane="operator"] .identity-head { min-height: 0; }
  /* ux/133 §3's audit: a 540px basis pushed a 390px page to 560. */
  body[data-plane="operator"] .identity-head-words { flex: 1 1 auto; }
  /* ux/133 §3's audit: B5's select sized itself to its longest option and pushed a 390px
     page to 560 — a control takes its field's width. */
  body[data-plane="operator"] .object-main .field select { width: 100%; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
  body[data-plane="operator"] .identity-lede:not(#id-x):not(#act-86g) { margin-bottom: 24px; }
  body[data-plane="operator"] .identity-card { gap: 16px; padding: 20px; }
  body[data-plane="operator"] .identity-tile { flex-basis: 44px; width: 44px; height: 44px; }
  body[data-plane="operator"] .identity-fact { grid-template-columns: 150px minmax(0, 1fr); }
  body[data-plane="operator"] .identity-fact dt { gap: 12px; }
  body[data-plane="operator"] .identity-fact-mark { width: 36px; height: 36px; }
  body[data-plane="operator"] .identity-email:not(#id-x):not(#act-86g) { font-size: var(--h-t-id-panel-title); }
  body[data-plane="operator"] .identity-panel { flex-wrap: wrap; }
  body[data-plane="operator"] .identity-panel-act-slot { flex-basis: 100%; }
  body[data-plane="operator"] .identity-panel-act-slot .action:not(#id-x):not(#act-86g) { width: 100%; }
}

/* -- The operator shell, drawn to the owner's masters (100; 101, 103, 104 share it) ------
   The page on a pale blue ground; the masthead a white rounded bar with the blue wordmark,
   a filled PLATFORM pill, the spine with its marks (the current item blue and underlined),
   and the monogram at the right. */
body[data-plane="operator"] {
  background: linear-gradient(180deg, color-mix(in srgb, var(--h-accent) 7%, var(--h-card)) 0,
                              color-mix(in srgb, var(--h-accent) 3%, var(--h-card)) 520px,
                              color-mix(in srgb, var(--h-accent) 2%, var(--h-card)) 100%);
}
body .masthead.masthead-operator:has(> nav):not(#op-x) { min-height: 80px; border-radius: 18px; }
body .masthead.masthead-operator > nav a:not(#op-x) { position: relative; }
body[data-plane="operator"] .masthead > nav a:not(#op-x) { font-size: var(--h-t-op-body); }
/* The current spine item: blue, and underlined at the bar's foot — the bar's links only,
   never a row in More's menu, which sits inside the same nav. */
body .masthead.masthead-operator > nav .header-primary a[aria-current="page"]::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: -22px; height: 3px;
  border-radius: 2px; background: var(--h-accent);
}
/* **ANSWER 105-c: between 1024 and 1439 the bar's fourth item folds into More** (32-b's
   rule) — the four operator destinations, More and the reader do not fit inside the
   header's padding until the header reaches its full width, and the nav never gives way.
   The phone fold's own copies serve: the bar item hides, its More row shows, and where it
   is the current page More is drawn current — blue, underlined — while the row inside the
   menu carries `aria-current`. From 1440 the bar was 105-a's four, 30px apart.
   **ANSWER 136-c extends the fold to every width from 1024**: the console header's (?) and
   *Platform operator ▾* take the room, so the bar is master 104's three and More, 24px
   apart, with *Sales-led creation* first in More. */
@media (min-width: 64rem) {
  body .masthead.masthead-operator.headers-v2 nav[aria-label="Primary"],
  body .masthead.masthead-operator.headers-v2 .header-primary { gap: 24px; }
}
@media (min-width: 64rem) {
  body .masthead.masthead-operator.headers-v2 .header-primary li.fold-phone { display: none; }
  body .masthead.masthead-operator.headers-v2 .more-folded { display: list-item; }
  body .masthead.masthead-operator.headers-v2 .masthead-more-toggle[data-current-folded] {
    position: relative; color: var(--h-accent);
  }
  body .masthead.masthead-operator.headers-v2 .masthead-more-toggle[data-current-folded]::after {
    content: ""; position: absolute; left: 0; right: 0; bottom: -22px; height: 3px;
    border-radius: 2px; background: var(--h-accent);
  }
}
body[data-plane="operator"] .masthead:has(> nav) .wordmark:not(#op-x) {
  color: var(--h-accent-hi); font-size: var(--h-t-op-wordmark); letter-spacing: var(--track-title);
}
body[data-plane="operator"] .masthead:has(> nav) .shell-badge:not(#op-x) {
  border: 0; border-radius: 999px; padding: 6px 16px; background: var(--h-accent-soft);
  color: var(--h-accent-hi); font-size: var(--h-t-op-badge); letter-spacing: var(--track-wide);
}

/* -- 136 · The console header: dark, and naming the role (owner, 2026-10-01) -------------
   Every page an operator reads — the console, the landing, and A1 while their second factor
   is owed — draws its bar on `--op-bar`, keyed on the masthead's own `masthead-operator`
   (the role's, not the plane's, so the gated A1 is covered). The menus it opens stay white
   panels; page content and status colours are untouched. */
html body .masthead.masthead-operator.headers-v2:not(#op-x) {
  background: var(--op-bar); border-color: var(--op-bar); color: var(--on-accent);
  box-shadow: 0 10px 28px color-mix(in srgb, var(--op-bar) 28%, transparent);
}
html body .masthead.masthead-operator .masthead-identity:not(#op-x),
html body .masthead.masthead-operator .account-context:not(#op-x) { border-color: var(--op-bar-line); }
html body .masthead.masthead-operator .wordmark:not(#op-x) { color: var(--on-accent); }
html body .masthead.masthead-operator .shell-badge:not(#op-x) {
  display: inline-flex; align-items: center; border: 0; border-radius: 999px; padding: 6px 16px; background: var(--op-chip);
  color: var(--op-chip-ink); letter-spacing: var(--track-wide);
}
html body .masthead.masthead-operator .header-primary > li > a:not(#op-x),
html body .masthead.masthead-operator .masthead-more-toggle:not(#op-x) { color: var(--op-bar-muted); }
html body .masthead.masthead-operator .header-primary > li > a .icon:not(#op-x),
html body .masthead.masthead-operator .masthead-more-toggle .icon:not(#op-x) { color: currentColor; }
html body .masthead.masthead-operator .header-primary > li > a:is(:hover, :focus-visible, [aria-current="page"]):not(#op-x),
html body .masthead.masthead-operator .masthead-more-toggle:is(:hover, :focus-visible, [aria-current="page"], [data-current-folded]):not(#op-x) {
  color: var(--on-accent);
}
html body .masthead.masthead-operator .header-primary a[aria-current="page"]::after,
html body .masthead.masthead-operator .masthead-more-toggle[data-current-folded]::after { background: var(--op-accent); }
/* Focus stays visible on the dark ground: a white ring outside an indigo gap. */
html body .masthead.masthead-operator :is(a, button):focus-visible:not(#op-x) {
  outline: none; box-shadow: 0 0 0 2px var(--op-bar), 0 0 0 4px var(--on-accent);
  border-radius: var(--radius-sm);
}
html body .masthead.masthead-operator :is(.account-who, .masthead-more-menu, .account-region:popover-open) :is(a, button):focus-visible:not(#op-x) {
  box-shadow: var(--focus);
}
/* (?), a hairline, then the account menu — `ops_landing_page.png`'s right edge. */
.masthead-operator .console-help {
  display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto;
  width: 44px; height: 44px; border-radius: 50%; color: var(--on-accent);
}
.masthead-operator .console-help .icon { width: 26px; height: 26px; }
.masthead-operator .console-help:hover { background: var(--op-bar-line); }
.masthead-operator .console-divider { flex: 0 0 1px; width: 1px; height: 32px; background: var(--op-bar-line); }
html body .masthead.masthead-operator .account-toggle:not(#op-x) { color: var(--on-accent); gap: 8px; }
html body .masthead.masthead-operator .account-context:not(#op-x) { gap: 12px; }
html body .masthead.masthead-operator .account-monogram:not(#op-x) {
  background: var(--op-chip); color: var(--op-chip-ink); letter-spacing: var(--track-wide);
}
.masthead-operator .account-role-label { font-size: var(--t-body); white-space: nowrap; }
.masthead-operator .account-caret { display: inline-flex; }
.masthead-operator .account-caret .icon { width: 16px; height: 16px; transform: rotate(90deg); }
/* The menu: who it is, a hairline, *Account*, *Sign out* — rows drawn as *Sign out* is. */
.masthead-operator .account-who .identity-block .whoami-name {
  color: var(--ink); font-size: var(--t-body); font-weight: var(--w-semi);
}
.masthead-operator .account-menu-rows { list-style: none; margin: 0; padding: 0; }
.masthead-operator .account-menu-rows li { margin: 0; list-style: none; }
.masthead-operator .account-menu-rows a {
  display: flex; align-items: center; box-sizing: border-box; min-height: 62px;
  padding: 8px 16px; gap: 22px; border-radius: 10px; color: var(--ink);
  font-size: var(--t-lede); line-height: var(--lh-tight); text-decoration: none; white-space: nowrap;
}
.masthead-operator .account-menu-rows a:hover { background: var(--selection); box-shadow: 0 0 0 5px var(--selection); }
.masthead-operator .account-menu-rows a .icon { width: 32px; height: 32px; flex: 0 0 32px; color: var(--accent-deep); }
/* **Below 1366 the role label gives way to the avatar** (measured: with it the bar overflows
   from 1280 down), clipped rather than removed so it stays the trigger's accessible name;
   the menu's identity block says it in full. 1024–1279 also tightens the bar's gaps. */
@media (max-width: 85.3125rem) {
  .masthead-operator .account-role-label {
    position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden;
    clip-path: inset(50%); white-space: nowrap; border: 0;
  }
}
@media (min-width: 64rem) and (max-width: 79.9375rem) {
  html body .masthead.masthead-operator nav[aria-label="Primary"]:not(#op-x),
  html body .masthead.masthead-operator .header-primary:not(#op-x) { gap: 12px; }
  html body .masthead.masthead-operator .account-context:not(#op-x) { gap: var(--s2); }
  .masthead-operator .console-help { width: 40px; height: 40px; }
}
/* ≤1023: the two-row header; the avatar opens the folded region. */
@media (max-width: 63.9375rem) {
  .masthead-operator .console-divider { height: 24px; }
  html body .masthead.masthead-operator .account-context:not(#op-x) { gap: var(--s2); }
}

/* -- B0 · Organisations, drawn to the owner's master (100, `ops_org_view.png`) ------------
   Measured at the master's 1536px: the head band (a 48px title and the lede, the building
   art at the right), then one card — the title and subline with the create link, the find
   with its count, the table, the paging and the read line. */
body[data-plane="operator"] .org-dir-head {
  position: relative; display: flex; justify-content: space-between; align-items: flex-start;
  min-height: 300px; padding: 44px 0 0 46px;
}
body[data-plane="operator"] .org-dir-head h1 {
  margin: 0; font-size: var(--h-t-op-title); line-height: var(--lh-tight);
  letter-spacing: var(--track-title); font-weight: var(--h-w-bold); color: var(--h-ink);
}
body[data-plane="operator"] .org-dir-lede:not(#op-x) {
  max-width: 500px; margin: 14px 0 0; font-size: var(--h-t-op-lede); line-height: var(--lh-card);
  color: var(--h-muted);
}
body[data-plane="operator"] .org-dir-art {
  position: absolute; right: -24px; top: 0; width: 601px; height: auto; z-index: 0;
  -webkit-mask-image: linear-gradient(to right, transparent 0, black 30%);
  mask-image: linear-gradient(to right, transparent 0, black 30%);
}
body[data-plane="operator"] .org-dir-head-words { position: relative; z-index: 1; }
body[data-plane="operator"] .org-dir-card {
  position: relative; z-index: 1; margin: 0; padding: 30px 28px 26px 37px;
  border: 1px solid var(--h-line); border-radius: 18px; background: var(--h-card);
  box-shadow: 0 10px 34px color-mix(in srgb, var(--h-ink) 6%, transparent);
}
body[data-plane="operator"] .org-dir-card-head { display: flex; justify-content: space-between; gap: 24px; align-items: flex-start; }
body[data-plane="operator"] .org-dir-card-words { margin-left: 22px; }
body[data-plane="operator"] .org-dir-card-head h2 {
  margin: 0; font-size: var(--h-t-op-card-title); font-weight: var(--h-w-bold); color: var(--h-ink);
}
body[data-plane="operator"] .org-dir-sub:not(#op-x) { margin: 6px 0 0; font-size: var(--h-t-op-body); color: var(--h-muted); }
body[data-plane="operator"] .org-dir-create:not(#op-x):not(#act-86g) {
  display: inline-flex; align-items: center; gap: 12px; height: 50px; padding: 0 24px;
  border-radius: 8px; font-size: var(--h-t-op-body); white-space: nowrap;
}
body[data-plane="operator"] .org-find:not(#op-x) {
  display: flex; align-items: center; gap: 16px; max-width: none; margin: 46px 0 22px;
}
body[data-plane="operator"] .org-find-input { position: relative; flex: 0 1 600px; }
body[data-plane="operator"] .org-find-mark {
  position: absolute; left: 16px; top: 50%; transform: translateY(-50%); display: inline-flex;
  color: var(--h-muted); pointer-events: none;
}
body[data-plane="operator"] .org-find-mark .icon { width: 22px; height: 22px; }
body[data-plane="operator"] .org-find-input input:not(#op-x) {
  width: 100%; max-width: none; height: 50px; box-sizing: border-box; padding: 0 16px 0 54px;
  border: 1px solid var(--h-line-strong); border-radius: 8px; font-size: var(--h-t-op-body);
}
body[data-plane="operator"] .org-find .org-find-button:not(#op-x):not(#act-86g) {
  height: 50px; min-width: 112px; justify-content: center; border-radius: 8px; font-size: var(--h-t-op-body);
}
body[data-plane="operator"] .org-find-count { margin-left: auto; font-size: var(--h-t-op-body); color: var(--h-muted); }
body[data-plane="operator"] .grid.org-directory {
  min-width: 0; width: 100%; border: 1px solid var(--h-line); border-radius: 12px; border-collapse: separate;
  border-spacing: 0; overflow: hidden;
}
body[data-plane="operator"] .grid.org-directory thead th {
  padding: 16px 22px; background: var(--h-chip); font-size: var(--h-t-op-th); letter-spacing: var(--track-wide);
  text-transform: uppercase; color: var(--h-muted); font-weight: var(--h-w-semi);
}
body[data-plane="operator"] .grid.org-directory tbody :is(th, td) {
  padding: 18px 22px; border-top: 1px solid var(--h-line); vertical-align: middle;
}
body[data-plane="operator"] .grid.org-directory .monogram {
  width: 58px; height: 58px; font-size: var(--h-t-op-card-title); background: var(--h-accent-soft);
  color: var(--h-accent);
}
body[data-plane="operator"] .grid.org-directory .identity-name { font-size: var(--h-t-op-name); font-weight: var(--h-w-bold); color: var(--h-ink); }
/* A long organisation name wraps inside its cell (ux/133 §3's audit): the identity is the
   cell's width less its monogram, not its own max-content beside a `nowrap` cell. */
body[data-plane="operator"] .grid.org-directory th.cell-identity > .identity { width: calc(100% - 58px - var(--s3)); }
body[data-plane="operator"] .org-chip {
  display: inline-flex; align-items: center; gap: 10px; padding: 8px 14px; border-radius: 8px;
  background: var(--h-accent-soft); color: var(--h-accent-hi); font-size: var(--h-t-op-body); font-weight: var(--h-w-semi);
}
body[data-plane="operator"] .org-chip .icon { width: 20px; height: 20px; margin: 0; }
body[data-plane="operator"] .org-chip-solo { background: var(--role-recruiter); color: var(--role-recruiter-ink); }
body[data-plane="operator"] .org-status {
  display: inline-flex; align-items: center; gap: 12px; padding: 9px 14px; border-radius: 8px;
  background: var(--h-chip); color: var(--h-ink); font-size: var(--h-t-op-body);
}
body[data-plane="operator"] .org-status-words { display: inline-block; }
body[data-plane="operator"] .org-status-words::first-letter { text-transform: uppercase; }
body[data-plane="operator"] .org-status-dot { width: 10px; height: 10px; border-radius: 50%; background: currentColor; }
body[data-plane="operator"] .org-status-affirmative { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="operator"] .org-status-cautionary { background: var(--h-warn-soft); color: var(--h-warn); }
body[data-plane="operator"] .org-open {
  display: inline-flex; align-items: center; gap: 12px; height: 46px; padding: 0 22px; box-sizing: border-box;
  border: 1.5px solid var(--h-accent); border-radius: 8px; color: var(--h-accent);
  font-size: var(--h-t-op-body); font-weight: var(--h-w-semi); text-decoration: none; white-space: nowrap;
}
body[data-plane="operator"] .org-open:hover { background: var(--h-accent-soft); color: var(--h-accent-hi); }
body[data-plane="operator"] .org-open .icon { width: 20px; height: 20px; margin: 0; }
body[data-plane="operator"] .org-dir-card #computed-at { margin: 22px 0 0; }
@media (max-width: 48rem) {
  body[data-plane="operator"] .org-dir-art { display: none; }
  body[data-plane="operator"] .org-dir-head { min-height: 0; padding: 20px 4px 24px; }
  body[data-plane="operator"] .org-dir-head h1 { font-size: var(--type-page-title); }
  body[data-plane="operator"] .org-dir-card { padding: 20px 16px; }
  body[data-plane="operator"] .org-dir-card-head { flex-direction: column; }
  body[data-plane="operator"] .org-dir-card-words { margin-left: 14px; }
  body[data-plane="operator"] .org-find:not(#op-x) { flex-wrap: wrap; margin-top: 24px; }
  body[data-plane="operator"] .org-find-input { flex: 1 1 100%; }
  body[data-plane="operator"] .org-find-count { margin-left: 0; }
  /* The rows stack (100): name across, then the chips and the door. */
  body[data-plane="operator"] .grid.org-directory thead { display: none; }
  body[data-plane="operator"] .grid.org-directory, body[data-plane="operator"] .grid.org-directory tbody { display: block; }
  body[data-plane="operator"] .grid.org-directory tr {
    display: flex; flex-wrap: wrap; align-items: center; gap: 10px; padding: 14px;
    border-top: 1px solid var(--h-line); }
  body[data-plane="operator"] .grid.org-directory tbody :is(th, td) { display: block; padding: 0; border: 0; }
  body[data-plane="operator"] .grid.org-directory tbody th { flex: 1 1 100%; }
  body[data-plane="operator"] .grid.org-directory tbody td:last-child { margin-left: auto; }
}

/* -- B1 · Signups awaiting admission, drawn to the owner's master (101) -------------------
   Measured at the master's 1536px: the head (a people tile, the title and lede, the art
   with the oldest pill at its foot), three tiles, and the card — the table, the oldest row
   tinted peach, Admit filled blue over Reject in red outline (101-b). */
body[data-plane="operator"] .queue-head {
  position: relative; display: flex; align-items: flex-start; gap: 30px; min-height: 150px;
  padding: 44px 0 0 12px;
}
body[data-plane="operator"] .queue-head-tile {
  flex: 0 0 86px; display: inline-flex; align-items: center; justify-content: center;
  width: 86px; height: 86px; border-radius: 16px; background: var(--h-accent-soft); color: var(--h-accent);
}
body[data-plane="operator"] .queue-head-tile .icon { width: 40px; height: 40px; }
body[data-plane="operator"] .queue-head h1 {
  margin: 8px 0 0; font-size: var(--h-t-op-queue-title); line-height: var(--lh-tight);
  letter-spacing: var(--track-title); font-weight: var(--h-w-bold); color: var(--h-ink);
}
body[data-plane="operator"] .queue-lede:not(#op-x) { margin: 12px 0 0; font-size: var(--h-t-op-lede); color: var(--h-muted); }
body[data-plane="operator"] .queue-art-slot { position: absolute; right: 16px; top: 10px; width: 510px; }
body[data-plane="operator"] .queue-art {
  display: block; width: 510px; height: auto;
  -webkit-mask-image: linear-gradient(to right, transparent 0, black 25%);
  mask-image: linear-gradient(to right, transparent 0, black 25%);
}
body[data-plane="operator"] .queue-oldest {
  position: absolute; right: 12px; bottom: -48px; display: inline-flex; align-items: center; gap: 12px;
  padding: 11px 18px; border-radius: 999px; background: var(--h-warn-soft); color: var(--h-warn);
  font-size: var(--h-t-op-body);
}
body[data-plane="operator"] .queue-oldest-dot { width: 12px; height: 12px; border-radius: 50%; background: currentColor; }
body[data-plane="operator"] .queue-tiles {
  position: relative; z-index: 1; display: grid; grid-template-columns: repeat(3, minmax(0, 300px));
  gap: 22px; margin: 44px 0 22px;
}
body[data-plane="operator"] .queue-tile {
  display: flex; gap: 24px; align-items: flex-start; padding: 22px 24px; border-radius: 14px;
  border: 1px solid var(--h-line); background: var(--h-card);
}
body[data-plane="operator"] .queue-tile-mark {
  flex: 0 0 60px; display: inline-flex; align-items: center; justify-content: center;
  width: 60px; height: 60px; border-radius: 50%;
}
body[data-plane="operator"] .queue-tile-mark .icon { width: 28px; height: 28px; }
body[data-plane="operator"] .queue-tile-amber .queue-tile-mark { background: var(--h-warn-soft); color: var(--mark-warm); }
body[data-plane="operator"] .queue-tile-blue .queue-tile-mark { background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="operator"] .queue-tile-green .queue-tile-mark { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="operator"] .queue-tile-number:not(#op-x) {
  margin: 4px 0 0; font-size: var(--h-t-op-card-title); font-weight: var(--h-w-bold); color: var(--h-ink);
}
body[data-plane="operator"] .queue-tile-label:not(#op-x) { margin: 8px 0 0; font-size: var(--h-t-op-body); color: var(--h-ink); }
body[data-plane="operator"] .queue-tile-sub:not(#op-x) { margin: 6px 0 0; font-size: var(--h-t-op-sub); color: var(--h-muted); }
body[data-plane="operator"] .queue-card {
  padding: 26px 14px 14px; border: 1px solid var(--h-line); border-radius: 18px; background: var(--h-card);
  box-shadow: 0 10px 34px color-mix(in srgb, var(--h-ink) 6%, transparent);
}
body[data-plane="operator"] .queue-card > h2 {
  margin: 0 0 0 20px; font-size: var(--h-t-op-card-title); font-weight: var(--h-w-bold); color: var(--h-ink);
}
body[data-plane="operator"] .queue-sub:not(#op-x) { margin: 6px 0 22px 20px; font-size: var(--h-t-op-body); color: var(--h-muted); }
body[data-plane="operator"] .grid.queue-table { min-width: 0; width: 100%; border-collapse: collapse; table-layout: fixed; }
/* The master's column split: applicant, what they asked for, waited, acts. */
body[data-plane="operator"] .grid.queue-table thead th:nth-child(1) { width: 38%; }
body[data-plane="operator"] .grid.queue-table thead th:nth-child(2) { width: 25%; }
body[data-plane="operator"] .grid.queue-table thead th:nth-child(3) { width: 18%; }
body[data-plane="operator"] .grid.queue-table thead th {
  padding: 16px 24px; background: var(--h-chip); font-size: var(--h-t-op-sub);
  text-transform: uppercase; letter-spacing: var(--track-wide); color: var(--h-muted); font-weight: var(--h-w-semi);
}
body[data-plane="operator"] .grid.queue-table tbody :is(th, td) { padding: 22px 24px; border-top: 1px solid var(--h-line); vertical-align: middle; }
body[data-plane="operator"] .grid.queue-table .cell-identity .queue-cell { display: flex; gap: 24px; align-items: flex-start; }
body[data-plane="operator"] .grid.queue-table .monogram {
  width: 62px; height: 62px; font-size: var(--h-t-op-card-title); background: var(--h-accent-soft); color: var(--h-accent-hi);
}
body[data-plane="operator"] .grid.queue-table .identity { display: grid; gap: 6px; justify-items: start; }
body[data-plane="operator"] .grid.queue-table .identity-name { font-size: var(--h-t-op-name); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="operator"] .grid.queue-table .identity-detail { font-size: var(--h-t-op-body); color: var(--h-muted); }
body[data-plane="operator"] .queue-chip {
  display: inline-flex; align-items: center; gap: 8px; margin-top: 6px; padding: 5px 12px;
  border-radius: 999px; border: 1px solid var(--h-line); background: var(--h-card);
  font-size: var(--h-t-op-sub); color: var(--h-ink);
}
body[data-plane="operator"] .queue-chip .icon { width: 16px; height: 16px; margin: 0; }
body[data-plane="operator"] .grid.queue-table .cell-asked .queue-cell { display: flex; gap: 18px; align-items: flex-start; }
body[data-plane="operator"] .queue-org-tile {
  flex: 0 0 54px; display: inline-flex; align-items: center; justify-content: center;
  width: 54px; height: 54px; border-radius: 10px; background: var(--h-accent-soft); color: var(--h-accent);
}
body[data-plane="operator"] .queue-org-tile .icon { width: 26px; height: 26px; }
/* **Alternating tints, as drawn** (the PO on READY 80): odd rows blue, even rows violet,
   on the monogram and the organisation tile alike. */
body[data-plane="operator"] .grid.queue-table tbody tr:not(.row-explains):nth-of-type(even) :is(.monogram, .queue-org-tile) {
  background: var(--role-recruiter); color: var(--role-recruiter-ink);
}
body[data-plane="operator"] .queue-asked-words, body[data-plane="operator"] .queue-waited-words { display: grid; gap: 6px; }
body[data-plane="operator"] .grid.queue-table .cell-waited .queue-cell { display: flex; gap: 16px; align-items: flex-start; }
body[data-plane="operator"] .queue-clock { display: inline-flex; color: var(--h-muted); }
body[data-plane="operator"] .queue-clock .icon { width: 24px; height: 24px; }
body[data-plane="operator"] .grid.queue-table .queue-age { font-size: var(--h-t-op-name); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="operator"] .queue-oldest-row > :is(th, td) { background: color-mix(in srgb, var(--h-warn-soft) 55%, var(--h-card)); }
body[data-plane="operator"] .queue-oldest-row :is(.queue-clock, .queue-age) { color: var(--h-warn); }
body[data-plane="operator"] .queue-acts { display: grid; gap: 10px; justify-items: stretch; width: 148px; }
body[data-plane="operator"] .queue-acts form { margin: 0; }
body[data-plane="operator"] .queue-acts .action:not(#op-x):not(#act-86g) {
  width: 100%; height: 48px; justify-content: center; border-radius: 8px; font-size: var(--h-t-op-body);
  /* The master's weight for both acts; `primary-action` marks Admit's prominence (D-1392)
     without making it heavier than 101 draws it. */
  font-weight: var(--w-medium);
}
/* **101-b**: Reject is terminal — a red outline, filling red on hover. */
body[data-plane="operator"] .queue-acts .queue-reject:not(#op-x):not(#act-86g) {
  background: var(--h-card); border: 1.5px solid var(--h-danger); color: var(--h-danger);
}
body[data-plane="operator"] .queue-acts .queue-reject:not(#op-x):not(#act-86g):hover {
  background: var(--h-danger); color: var(--h-card);
}
body[data-plane="operator"] .queue-acts .icon { width: 18px; height: 18px; margin: 0 10px 0 0; }
@media (max-width: 48rem) {
  body[data-plane="operator"] .queue-art-slot { position: static; width: auto; }
  body[data-plane="operator"] .queue-art { display: none; }
  body[data-plane="operator"] .queue-oldest { position: static; margin-top: 12px; }
  body[data-plane="operator"] .queue-head { flex-wrap: wrap; gap: 16px; padding: 20px 4px 0; }
  body[data-plane="operator"] .queue-head-tile { flex-basis: 56px; width: 56px; height: 56px; }
  body[data-plane="operator"] .queue-head h1 { font-size: var(--type-page-title); }
  body[data-plane="operator"] .queue-tiles { grid-template-columns: 1fr; margin-top: 20px; }
  body[data-plane="operator"] .grid.queue-table thead { display: none; }
  body[data-plane="operator"] .grid.queue-table, body[data-plane="operator"] .grid.queue-table tbody { display: block; }
  body[data-plane="operator"] .grid.queue-table tr {
    display: grid; grid-template-columns: minmax(0, 1fr); gap: 14px; padding: 16px;
    border-top: 1px solid var(--h-line); }
  body[data-plane="operator"] .grid.queue-table .identity-detail { white-space: normal; overflow-wrap: anywhere; }
  body[data-plane="operator"] .grid.queue-table .queue-cell > :last-child { min-width: 0; }
  body[data-plane="operator"] .queue-oldest-row { background: color-mix(in srgb, var(--h-warn-soft) 55%, var(--h-card)); }
  body[data-plane="operator"] .queue-oldest-row > :is(th, td) { background: none; }
  body[data-plane="operator"] .grid.queue-table tbody :is(th, td) { padding: 0; border: 0; }
  body[data-plane="operator"] .queue-acts { width: 100%; }
}

/* -- B8 · Platform operators, drawn to the owner's master (104) --------------------------
   The head (title, lede, the shield art, a green count pill), the amber only-operator
   banner, and the card: the table read-only — monogram, reference and YOU, address; the
   account's tile and meaning; the key and the recovery authority. */
/* **The art stays in the head, clear of the card** (master 104; INSTRUCTION 129): the shield
   is 235px tall at the head's top, so the head is at least that and a gap. */
body[data-plane="operator"] .ops-head { position: relative; min-height: 262px; padding: 52px 0 0 12px; }
body[data-plane="operator"] .ops-head h1 {
  margin: 0; font-size: var(--h-t-op-title); line-height: var(--lh-tight);
  letter-spacing: var(--track-title); font-weight: var(--h-w-bold); color: var(--h-ink);
}
body[data-plane="operator"] .ops-lede:not(#op-x) { margin: 14px 0 0; font-size: var(--h-t-op-lede); color: var(--h-muted); }
body[data-plane="operator"] .ops-head-words { position: relative; z-index: 1; }
body[data-plane="operator"] .ops-art {
  position: absolute; right: 150px; top: 0; width: 380px; height: auto;
  -webkit-mask-image: radial-gradient(ellipse 70% 75% at 50% 50%, black 55%, transparent 100%);
  mask-image: radial-gradient(ellipse 70% 75% at 50% 50%, black 55%, transparent 100%);
}
/* Below 80rem the shield crossed the lede (ux/131 129-f2, the PO's review): the art goes, as 104
   already has it at 768px and below; the count keeps its place. */
@media (max-width: 79.9375rem) { body[data-plane="operator"] .ops-art { display: none; } }
/* The words wrap clear of what stands to their right: the art's visible edge (its mask is
   transparent over the image's outer 57px) at 80rem and wider, so 1440 keeps its one-line lede
   and 1280 wraps it; the count pill (8px in, ~153px wide) from 769px to 80rem. */
@media (min-width: 80rem) { body[data-plane="operator"] .ops-head-words { padding-right: calc(150px + 380px - 57px); } }
@media (min-width: 769px) and (max-width: 79.9375rem) { body[data-plane="operator"] .ops-head-words { padding-right: 176px; } }
body[data-plane="operator"] .ops-count {
  position: absolute; right: 8px; top: 86px; display: inline-flex; align-items: center; gap: 12px;
  padding: 10px 18px; border-radius: 999px; background: var(--h-ok-soft); color: var(--h-ok);
  font-size: var(--h-t-op-body); font-weight: var(--h-w-semi);
}
body[data-plane="operator"] .ops-count-dot { width: 12px; height: 12px; border-radius: 50%; background: currentColor; }
body[data-plane="operator"] .ops-alone {
  position: relative; z-index: 1; display: flex; gap: 26px; align-items: center; margin: 28px 0 22px;
  padding: 14px 22px 14px 14px; border: 12px solid var(--h-card); border-radius: 18px;
  background: var(--h-warn-soft);
}
body[data-plane="operator"] .ops-alone-mark {
  flex: 0 0 72px; display: inline-flex; align-items: center; justify-content: center;
  width: 72px; height: 72px; border-radius: 12px; background: var(--h-warn-note); color: var(--h-warn);
}
body[data-plane="operator"] .ops-alone-mark .icon { width: 34px; height: 34px; }
body[data-plane="operator"] .ops-alone p:not(#op-x) { margin: 0; font-size: var(--h-t-op-body); line-height: var(--lh-card); color: var(--h-muted); }
body[data-plane="operator"] .ops-alone b { font-size: var(--h-t-op-name); color: var(--h-warn-ink); font-weight: var(--h-w-semi); }
body[data-plane="operator"] .ops-card {
  padding: 28px 0 16px; border: 1px solid var(--h-line); border-radius: 18px; background: var(--h-card);
  box-shadow: 0 10px 34px color-mix(in srgb, var(--h-ink) 6%, transparent);
}
body[data-plane="operator"] .ops-card > h2 { margin: 0 0 0 34px; font-size: var(--h-t-op-card-title); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="operator"] .ops-sub:not(#op-x) { margin: 6px 0 22px 34px; font-size: var(--h-t-op-body); color: var(--h-muted); }
body[data-plane="operator"] .grid.ops-table { min-width: 0; width: 100%; border-collapse: collapse; }
body[data-plane="operator"] .grid.ops-table thead th {
  padding: 16px 34px; border-top: 1px solid var(--h-line); border-bottom: 1px solid var(--h-line);
  background: var(--h-chip); font-size: var(--h-t-op-sub); text-transform: uppercase;
  letter-spacing: var(--track-wide); color: var(--h-muted); font-weight: var(--h-w-semi);
}
body[data-plane="operator"] .grid.ops-table tbody :is(th, td) { padding: 20px 34px; border-bottom: 1px solid var(--h-line); vertical-align: middle; }
body[data-plane="operator"] .ops-cell { display: flex; gap: 22px; align-items: center; }
body[data-plane="operator"] .grid.ops-table .monogram {
  width: 66px; height: 66px; font-size: var(--h-t-op-name); background: var(--h-accent-soft); color: var(--h-accent-hi);
}
body[data-plane="operator"] .ops-who-line { display: inline-flex; align-items: center; gap: 12px; }
body[data-plane="operator"] .grid.ops-table .identity { display: grid; gap: 6px; }
body[data-plane="operator"] .grid.ops-table .identity-name { font-size: var(--h-t-op-name); font-weight: var(--h-w-bold); color: var(--h-ink); }
/* **16px cell text on B8's two tables** (owner ruling 2026-10-01, ux/131 129-f; master v2): the
   address, the account and authority sentences, the dates and the reason; 104's sizes stand for
   the head, title, lede, card title, subline, banner, monogram, the reference and the pills. */
body[data-plane="operator"] .grid.ops-table .identity-detail { font-size: var(--h-t-op-desig-body); color: var(--h-muted); }
body[data-plane="operator"] .grid.ops-table .you-chip:not(#op-x) {
  display: inline-flex; align-items: center; gap: 6px; padding: 4px 12px; border-radius: 8px;
  background: var(--h-accent); color: var(--h-card); font-size: var(--h-t-op-sub); font-weight: var(--h-w-semi);
  text-transform: uppercase; letter-spacing: var(--track-wide);
}
body[data-plane="operator"] .grid.ops-table .you-chip .icon { width: 14px; height: 14px; margin: 0; }
body[data-plane="operator"] .ops-tile {
  flex: 0 0 46px; display: inline-flex; align-items: center; justify-content: center;
  width: 46px; height: 46px; border-radius: 10px; background: var(--h-chip); color: var(--h-muted);
}
body[data-plane="operator"] .ops-tile .icon { width: 22px; height: 22px; margin: 0; }
body[data-plane="operator"] .ops-tile-ok { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="operator"] .ops-tile-warn { background: var(--h-warn-soft); color: var(--h-warn); }
body[data-plane="operator"] .ops-tile-key { background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="operator"] .ops-cell > span:last-child { font-size: var(--h-t-op-desig-body); color: var(--h-ink); }
body[data-plane="operator"] .ops-authority { max-width: 280px; }
/* **ux/131 §1: the row's ⋮** — the master's own ACTIONS column, a native `<details>` menu
   holding one irreversible item; absent on the reader's own row, never disabled. */
body[data-plane="operator"] .grid.ops-table thead th.ops-actions-head { text-align: right; }
body[data-plane="operator"] .grid.ops-table td.ops-actions { text-align: right; width: 1%; }
body[data-plane="operator"] .ops-menu { position: relative; display: inline-block; }
body[data-plane="operator"] .ops-menu > summary.ops-menu-toggle {
  list-style: none; display: inline-grid; place-items: center; width: 44px; height: 44px;
  border: 1px solid var(--h-line); border-radius: 10px; background: var(--h-card);
  color: var(--h-ink); cursor: pointer; }
body[data-plane="operator"] .ops-menu > summary::-webkit-details-marker { display: none; }
body[data-plane="operator"] .ops-menu > summary .icon { width: 20px; height: 20px; margin: 0; }
body[data-plane="operator"] .ops-menu[open] > summary {
  border-color: var(--h-accent); box-shadow: 0 0 0 3px var(--h-accent-soft); }
body[data-plane="operator"] .ops-menu-pop {
  position: absolute; right: 0; top: 52px; z-index: 5; min-width: 250px; padding: 6px;
  border: 1px solid var(--h-line); border-radius: 12px; background: var(--h-card);
  box-shadow: 0 12px 30px color-mix(in srgb, var(--h-ink) 14%, transparent); text-align: left; }
body[data-plane="operator"] .ops-menu-revoke {
  display: flex; gap: 10px; align-items: center; padding: 10px 12px; border-radius: 8px;
  color: var(--h-danger); text-decoration: none; font-weight: var(--h-w-semi);
  font-size: var(--h-t-op-sub); }
body[data-plane="operator"] .ops-menu-revoke:hover { background: var(--h-danger-soft); }
body[data-plane="operator"] .ops-menu-revoke .icon { width: 18px; height: 18px; margin: 0; }

/* **ux/131 §1 · B8's access review** (INSTRUCTION 129 part 2; the visual master): the card's
   head with *Security events →*, the two-factor and access cells with their quiet notes, the
   success notice (state F), and *Revoked access* — absent when empty. */
body[data-plane="operator"] .ops-card-head {
  display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; padding-right: 34px; }
body[data-plane="operator"] .ops-card-head h2 { margin: 0 0 0 34px; font-size: var(--h-t-op-card-title); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="operator"] .ops-events-link {
  display: inline-flex; gap: 6px; align-items: center; white-space: nowrap; color: var(--h-accent);
  font-weight: var(--h-w-semi); font-size: var(--h-t-op-desig-body); text-decoration: none; }
body[data-plane="operator"] .ops-events-link:hover { text-decoration: underline; }
body[data-plane="operator"] .ops-events-link .icon { width: 18px; height: 18px; margin: 0; }
body[data-plane="operator"] .ops-stack .ops-quiet { display: block; margin-top: 6px; color: var(--h-muted); font-size: var(--h-t-op-sub); }
body[data-plane="operator"] .ops-date { font-variant-numeric: tabular-nums; font-size: var(--h-t-op-desig-body); color: var(--h-ink); }
/* **The master's cell rhythm** (ux/131 §1): 34px only at the table's outer edges — six columns
   at 104's 34px a side ran past the card. Between columns 16px a side, a departure from 104's
   20px (**owner ruling 2026-10-01, ux/131 129-f**; the PO's 129-f2). */
body[data-plane="operator"] .grid.ops-table :is(thead th, tbody th, tbody td) { padding-left: 16px; padding-right: 16px; }
body[data-plane="operator"] .grid.ops-table :is(thead th, tbody th, tbody td):first-child { padding-left: 34px; }
body[data-plane="operator"] .grid.ops-table :is(thead th, tbody th, tbody td):last-child { padding-right: 34px; }
/* The account's sentence keeps a readable measure (a lock's runs to ten words). */

/* **Each cell two lines at most at 1440** (the PO's review): recovery authority keeps its
   280px measure, the date breaks only after its comma, the reason reads at body size. */

body[data-plane="operator"] .grid.ops-table td.ops-account { vertical-align: middle; }
/* **Nothing identifying clips** (ux/131 129-f2, the PO's answer): the table sizes itself to its
   content. The operator's reference, *YOU* and address hold one line and take the width they
   need; the ⋮ column is its button's width with the header clear of the card; the account and
   authority sentences wrap (three lines at 1440 is accepted). Where six columns do not fit,
   `data_table`'s own named scroller carries them inside the card. */
@media (min-width: 769px) {
  body[data-plane="operator"] .grid.ops-table th.cell-identity :is(.ops-who-line, .identity-name, .identity-detail) { white-space: nowrap; }
  body[data-plane="operator"] .grid.ops-table th.cell-identity .monogram { flex: none; }
  /* The scroller takes the width, so the date keeps its one line and the lock sentence its
     three lines rather than the columns crushing to fit the card. */
  body[data-plane="operator"] .ops-nobreak { white-space: nowrap; }
  body[data-plane="operator"] .grid.ops-table td.ops-account .ops-cell > span:last-child { min-width: 9.5em; }
}
body[data-plane="operator"] .ops-card > .grid-scroll { overflow-x: auto; max-width: 100%; }
/* Master v2's cell furniture on the roster's tables: a 42px tile 12px from its sentence, the
   quiet notes at 14px. */
body[data-plane="operator"] .grid.ops-table td .ops-cell { gap: 12px; }
body[data-plane="operator"] .grid.ops-table td .ops-tile { flex-basis: 42px; width: 42px; height: 42px; }
body[data-plane="operator"] .grid.ops-table .ops-stack .ops-quiet { font-size: var(--type-meta); }
}

body[data-plane="operator"] .grid.ops-table td.ops-reason { font-size: var(--h-t-op-desig-body); color: var(--h-ink); }
/* *Not enrolled* is attention (ux/131 §1, the one map's amber): 104's locked-tile family. */
body[data-plane="operator"] .ops-card .pill-hue-amber { background: var(--h-warn-soft); color: var(--h-warn-ink); }
/* The date wraps with the column: an unresolved zone shows the whole instant (L9), and held
   on one line it pushed six columns past the card. */
body[data-plane="operator"] .ops-card .pill-affirmative { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="operator"] .ops-notice {
  position: relative; z-index: 1; display: flex; gap: 26px; align-items: center; margin: 28px 0 22px;
  padding: 14px 22px 14px 14px; border: 12px solid var(--h-card); border-radius: 18px; background: var(--h-ok-soft); }
body[data-plane="operator"] .ops-notice-mark {
  flex: 0 0 72px; display: inline-flex; align-items: center; justify-content: center;
  width: 72px; height: 72px; border-radius: 12px; background: var(--h-ok-line); color: var(--h-ok); }
body[data-plane="operator"] .ops-notice-mark .icon { width: 34px; height: 34px; }
body[data-plane="operator"] .ops-notice p:not(#op-x) { margin: 0; font-size: var(--h-t-op-body); line-height: var(--lh-card); color: var(--h-muted); }
body[data-plane="operator"] .ops-notice b { font-size: var(--h-t-op-name); color: var(--h-ok); font-weight: var(--h-w-semi); }
body[data-plane="operator"] .ops-revoked { margin-top: 24px; }
body[data-plane="operator"] .ops-count-pill { display: inline-flex; }
body[data-plane="operator"] .sev-apply { height: 48px; }
body[data-plane="operator"] .ops-revoked > h2 { display: flex; gap: 12px; align-items: center; margin: 0 0 0 34px; font-size: var(--h-t-op-card-title); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="operator"] .grid.ops-table .ops-monogram-muted:not(#op-x) { background: var(--h-chip); color: var(--h-chip-ink); }

/* **ux/131 §3 · B9 Security events** (06 §6c-xviii; master 94's row grammar in the operator
   shell): one card — the filters and paging bar, day bands, the rows, *Details* as a native
   disclosure. Category tints are existing area tokens; failed and refused rows take 94's red. */
body[data-plane="operator"] .sev-head { padding: 52px 12px 24px; }
body[data-plane="operator"] .sev-head h1 {
  margin: 0; font-size: var(--h-t-op-title); line-height: var(--lh-tight);
  letter-spacing: var(--track-title); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="operator"] .sev-card {
  border: 1px solid var(--h-line); border-radius: 18px; background: var(--h-card); overflow: hidden;
  box-shadow: 0 10px 34px color-mix(in srgb, var(--h-ink) 6%, transparent); }
body[data-plane="operator"] .sev-bar { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 16px; padding: 20px 24px; }
body[data-plane="operator"] .sev-filters { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; margin: 0; }
body[data-plane="operator"] .sev-sel {
  display: inline-flex; gap: 10px; align-items: center; height: 48px; padding: 0 12px;
  border: 1px solid var(--h-line-strong); border-radius: 10px; background: var(--h-card); }
body[data-plane="operator"] .sev-sel select { height: 100%; border: 0; background: transparent; font-size: var(--h-t-op-desig-body); color: var(--h-ink); }
body[data-plane="operator"] .sev-sel-mark .icon { width: 18px; height: 18px; margin: 0; color: var(--h-muted); }
body[data-plane="operator"] .sev-paging { display: flex; gap: 14px; align-items: center; }
body[data-plane="operator"] .sev-showing:not(#op-x) { margin: 0; text-align: right; color: var(--h-muted); font-size: var(--h-t-op-sub); }
body[data-plane="operator"] .sev-page {
  display: inline-grid; place-items: center; width: 46px; height: 46px; border: 1px solid var(--h-line-strong);
  border-radius: 10px; background: var(--h-card); color: var(--h-accent); }
body[data-plane="operator"] .sev-page .icon { width: 20px; height: 20px; margin: 0; }
body[data-plane="operator"] .sev-page-off:not(#op-x) { color: var(--h-line-strong); background: var(--h-chip); }
body[data-plane="operator"] .sev-band { display: flex; gap: 16px; align-items: center; padding: 12px 24px; border-top: 1px solid var(--h-line); background: var(--h-chip); }
body[data-plane="operator"] .sev-band h2 { margin: 0; font-size: var(--h-t-op-name); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="operator"] .sev-band-count { padding: 4px 11px; border-radius: 999px; background: var(--h-line); color: var(--h-ink); font-size: var(--type-pill); }
body[data-plane="operator"] .sev-c-access :is(.sev-tile, .sev-cat) { background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="operator"] .sev-c-signin :is(.sev-tile, .sev-cat) { background: var(--h-area-system-soft); color: var(--h-area-system); }
body[data-plane="operator"] .sev-c-org :is(.sev-tile, .sev-cat) { background: var(--h-area-billing-soft); color: var(--h-area-billing); }
body[data-plane="operator"] .sev-c-lock :is(.sev-tile, .sev-cat) { background: var(--h-area-documents-soft); color: var(--h-area-documents); }
body[data-plane="operator"] .sev-c-bg :is(.sev-tile, .sev-cat) { background: var(--h-critical-soft); color: var(--h-critical); }
body[data-plane="operator"] .sev-c-ref :is(.sev-tile, .sev-cat) { background: var(--h-danger-soft); color: var(--h-danger); }
body[data-plane="operator"] .sev-row { border-top: 1px solid var(--h-line); }
body[data-plane="operator"] .sev-row > summary { list-style: none; cursor: pointer; }
body[data-plane="operator"] .sev-row > summary::-webkit-details-marker { display: none; }
body[data-plane="operator"] .sev-summary {
  display: grid; grid-template-columns: max-content 52px minmax(0, 1.6fr) minmax(0, 1fr) 190px 120px 44px;
  gap: 16px; align-items: center; padding: 14px 24px; }
body[data-plane="operator"] .sev-row.sev-bad { background: var(--h-danger-soft); box-shadow: inset 4px 0 0 var(--h-danger); }
body[data-plane="operator"] .sev-time b { display: block; font-size: var(--h-t-op-desig-body); font-variant-numeric: tabular-nums; color: var(--h-ink); }
body[data-plane="operator"] .sev-time span { color: var(--h-muted); font-size: var(--type-meta-small); }
body[data-plane="operator"] .sev-tile { display: inline-grid; place-items: center; width: 46px; height: 46px; border-radius: 50%;}
body[data-plane="operator"] .sev-tile .icon { width: 21px; height: 21px; margin: 0; }
body[data-plane="operator"] .sev-what { min-width: 0; }
body[data-plane="operator"] .sev-what > b { display: block; font-size: var(--h-t-op-desig-body); color: var(--h-ink); }
body[data-plane="operator"] .sev-what > span { display: block; color: var(--h-muted); font-size: var(--h-t-op-sub); overflow-wrap: anywhere; }
body[data-plane="operator"] .sev-what > .sev-why:not(#op-x) { color: var(--h-danger); margin-top: 2px; }
body[data-plane="operator"] .sev-who { padding-left: 16px; border-left: 1px solid var(--h-line); color: var(--h-ink); font-size: var(--h-t-op-sub); overflow-wrap: anywhere; }
body[data-plane="operator"] .sev-cat {
  display: inline-flex; gap: 7px; align-items: center; justify-self: start; padding: 4px 11px; border-radius: 999px;
  font-size: var(--type-pill); white-space: nowrap; }
body[data-plane="operator"] .sev-dot { width: 8px; height: 8px; border-radius: 50%; background: currentColor; }
body[data-plane="operator"] .sev-outcome { display: inline-flex; gap: 6px; align-items: center; justify-self: start; padding: 4px 11px; border-radius: 999px; font-size: var(--type-pill); font-weight: var(--h-w-semi); }
body[data-plane="operator"] .sev-outcome .icon { width: 15px; height: 15px; margin: 0; }
body[data-plane="operator"] .sev-outcome-ok { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="operator"] .sev-outcome-bad { background: var(--h-danger-wash); color: var(--h-danger-ink); }
body[data-plane="operator"] .sev-chev { display: inline-grid; place-items: center; width: 40px; height: 40px; color: var(--h-muted); }
/* The product's chevron points right: down when shut, up when open, as the master draws it. */
body[data-plane="operator"] .sev-chev .icon { width: 20px; height: 20px; margin: 0; transform: rotate(90deg); transition: transform .15s; }
body[data-plane="operator"] .sev-row[open] .sev-chev .icon { transform: rotate(-90deg); }
body[data-plane="operator"] .sev-details {
  display: grid; margin: 0 24px 16px 156px; padding: 6px 18px; border: 1px solid var(--h-line);
  border-radius: 10px; background: var(--h-chip); }
body[data-plane="operator"] .sev-detail { display: grid; grid-template-columns: 150px minmax(0, 1fr); border-bottom: 1px solid var(--h-line); }
body[data-plane="operator"] .sev-detail:last-child { border-bottom: 0; }
body[data-plane="operator"] .sev-detail > * { margin: 0; padding: 8px 0; font-size: var(--h-t-op-sub); }
body[data-plane="operator"] .sev-detail dt { color: var(--h-muted); }
body[data-plane="operator"] .sev-detail dd { font-family: var(--font-mono); font-size: var(--type-meta-small); overflow-wrap: anywhere; color: var(--h-ink); }
body[data-plane="operator"] .sev-empty { display: grid; justify-items: center; gap: 10px; padding: 56px 24px; border-top: 1px solid var(--h-line); text-align: center; }
body[data-plane="operator"] .sev-empty-mark { display: inline-grid; place-items: center; width: 64px; height: 64px; border-radius: 50%; background: var(--h-area-system-soft); color: var(--h-area-system); }
body[data-plane="operator"] .sev-empty-mark .icon { width: 28px; height: 28px; margin: 0; }
body[data-plane="operator"] .sev-empty b { font-size: var(--h-t-op-name); color: var(--h-ink); }
body[data-plane="operator"] .sev-empty p:not(#op-x) { margin: 0; max-width: var(--prose); color: var(--h-muted); }

/* **The operator's landing, to the owner's master** (ux/133 §1, INSTRUCTION 131): B8's head
   with an eyebrow and the master's art at the right (hidden below 80rem), then the doors —
   three in a row at 80rem and wider, stacked below; fewer hold their place, left-aligned. */
body[data-plane="operator"] .opl-eyebrow:not(#op-x) {
  margin: 0 0 14px; font-size: var(--h-t-op-sub); letter-spacing: var(--track-wide);
  text-transform: uppercase; color: var(--h-muted); font-weight: var(--h-w-semi); }
body[data-plane="operator"] .opl-art {
  position: absolute; right: 0; top: 0; width: 480px; height: auto;
  -webkit-mask-image: radial-gradient(ellipse 70% 75% at 50% 50%, black 55%, transparent 100%);
  mask-image: radial-gradient(ellipse 70% 75% at 50% 50%, black 55%, transparent 100%); }
/* The art is 298px tall at the head's top; the head is at least that and a gap, so the
   cards start clear of it at every width it shows (the PO's review of 131). */
@media (min-width: 80rem) { body[data-plane="operator"] .opl-head { min-height: 330px; } }
body[data-plane="operator"] .opl-cards { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 24px; margin: 8px 0 32px; }
body[data-plane="operator"] .opl-card {
  display: flex; flex-direction: column; justify-content: space-between; gap: 28px; padding: 26px;
  border: 1px solid var(--h-line); border-radius: 18px; background: var(--h-card);
  box-shadow: 0 10px 34px color-mix(in srgb, var(--h-ink) 6%, transparent); }
body[data-plane="operator"] .opl-card-head { display: flex; gap: 24px; align-items: flex-start; }
body[data-plane="operator"] .opl-tile {
  flex: none; display: inline-grid; place-items: center; width: 80px; height: 80px;
  border-radius: 16px; background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="operator"] .opl-tile .icon { width: 34px; height: 34px; margin: 0; }
body[data-plane="operator"] .opl-tile-green { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="operator"] .opl-tile-violet { background: var(--h-policy-soft); color: var(--h-policy); }
body[data-plane="operator"] .opl-card-words h2 { margin: 6px 0 10px; font-size: var(--h-t-op-card-title); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="operator"] .opl-card-words p:not(#op-x) { margin: 0; font-size: var(--h-t-op-body); line-height: var(--lh-card); color: var(--h-muted); }
body[data-plane="operator"] .opl-link {
  display: flex; gap: 16px; align-items: center; padding: 24px 28px; border-radius: 12px;
  background: var(--h-chip); color: var(--h-ink); font-size: var(--h-t-op-desig-body);
  font-weight: var(--h-w-mid); text-decoration: none; }
body[data-plane="operator"] .opl-link:hover { text-decoration: underline; color: var(--h-ink); }
body[data-plane="operator"] .opl-link .icon { width: 22px; height: 22px; margin: 0; color: var(--h-accent); }
body[data-plane="operator"] .opl-link-mark { display: inline-flex; }
@media (max-width: 79.9375rem) {
  body[data-plane="operator"] .opl-art { display: none; }
  body[data-plane="operator"] .opl-head .ops-head-words { padding-right: 0; }
  body[data-plane="operator"] .opl-cards { grid-template-columns: minmax(0, 1fr); }
}

/* **B2 Tenant lifecycle, to the owner's master** (ux/134, INSTRUCTION 132): the head —
   monogram tile, name, lede, standing pill — then white cards with icon tiles in the left
   column, and the right rail (*About*, *Recent activity*) as the page's Details. The rail
   sits beside the cards above 1024px and stacks under them at 1024 and below. */
body[data-plane="operator"] .tl-head { display: flex; gap: 22px; align-items: flex-start; padding: 8px 0 4px; }
body[data-plane="operator"] .tl-mono {
  flex: none; display: inline-grid; place-items: center; width: 78px; height: 78px;
  border-radius: 16px; background: var(--h-accent-soft); color: var(--h-accent-hi);
  font-size: var(--h-t-op-card-title); font-weight: var(--h-w-bold); }
body[data-plane="operator"] .tl-head-words h1 {
  margin: 0; font-size: var(--h-t-op-title); line-height: var(--lh-tight);
  letter-spacing: var(--track-title); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="operator"] .tl-lede:not(#op-x) { margin: 6px 0 10px; font-size: var(--h-t-op-body); color: var(--h-muted); }
body[data-plane="operator"] .tl-pill {
  display: inline-flex; gap: 8px; align-items: center; padding: 5px 12px; border-radius: 999px;
  background: var(--h-chip); color: var(--h-ink); font-size: var(--h-t-op-sub); font-weight: var(--h-w-semi); }
body[data-plane="operator"] .tl-dot { width: 9px; height: 9px; border-radius: 50%; background: currentColor; }
body[data-plane="operator"] .tl-pill-ok { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="operator"] .tl-pill-warn { background: var(--h-warn-soft); color: var(--h-warn-ink); }
body[data-plane="operator"] .tl-card {
  display: grid; gap: 18px; padding: 22px 22px 24px; border: 1px solid var(--h-line);
  border-radius: 16px; background: var(--h-card);
  box-shadow: 0 8px 28px color-mix(in srgb, var(--h-ink) 5%, transparent); }
body[data-plane="operator"] .tl-card-head { display: flex; gap: 18px; align-items: flex-start; }
body[data-plane="operator"] .tl-tile {
  flex: none; display: inline-grid; place-items: center; width: 44px; height: 44px;
  border-radius: 12px; background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="operator"] .tl-tile .icon { width: 22px; height: 22px; margin: 0; }
body[data-plane="operator"] .tl-tile-danger { background: var(--h-danger-soft); color: var(--h-danger); }
body[data-plane="operator"] .tl-card-words h2,
body[data-plane="operator"] .tl-card-head > h2 { margin: 4px 0 2px; font-size: var(--h-t-op-name); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="operator"] .tl-card-lede:not(#op-x) { margin: 0; font-size: var(--h-t-op-sub); color: var(--h-muted); }
body[data-plane="operator"] .tl-rows { display: grid; margin: 0; padding: 4px 18px; border-radius: 12px; background: var(--h-chip); }
body[data-plane="operator"] .tl-row { display: grid; grid-template-columns: 160px minmax(0, 1fr); gap: 16px; padding: 12px 0; border-top: 1px solid var(--h-line); }
body[data-plane="operator"] .tl-row:first-child { border-top: 0; }
body[data-plane="operator"] .tl-row dt { color: var(--h-ink); font-size: var(--h-t-op-sub); font-weight: var(--h-w-mid); }
body[data-plane="operator"] .tl-row dd { margin: 0; min-width: 0; color: var(--h-ink); font-size: var(--h-t-op-sub); overflow-wrap: anywhere; }
body[data-plane="operator"] .tl-note:not(#op-x) { margin: 4px 0 0; color: var(--h-muted); font-size: var(--type-meta); }
body[data-plane="operator"] .tl-owner { display: inline-flex; gap: 6px; align-items: center; padding: 3px 10px; border-radius: 8px; background: var(--h-ok-soft); color: var(--h-ok); font-weight: var(--h-w-semi); }
body[data-plane="operator"] .tl-owner .icon { width: 15px; height: 15px; margin: 0; }
body[data-plane="operator"] .tl-owner-attention { background: var(--h-warn-soft); color: var(--h-warn-ink); }
body[data-plane="operator"] .tl-link { display: inline-flex; gap: 8px; align-items: center; color: var(--h-accent); font-weight: var(--h-w-semi); text-decoration: none; }
body[data-plane="operator"] .tl-link:hover { text-decoration: underline; color: var(--h-accent); }
body[data-plane="operator"] .tl-link .icon { width: 16px; height: 16px; margin: 0; }
body[data-plane="operator"] .tl-contact { display: block; }
/* *Recent activity*'s rail: a dot per act on a vertical line, the newest first. */
body[data-plane="operator"] .tl-acts { list-style: none; margin: 0; padding: 0; display: grid; gap: 18px; }
body[data-plane="operator"] .tl-act { position: relative; display: grid; gap: 2px; padding-left: 30px; color: var(--h-ink); font-size: var(--h-t-op-sub); }
body[data-plane="operator"] .tl-act::before { content: ""; position: absolute; left: 4px; top: 5px; width: 11px; height: 11px; border-radius: 50%; background: var(--h-line-strong); }
body[data-plane="operator"] .tl-act:first-child::before { background: var(--h-accent); }
body[data-plane="operator"] .tl-act:not(:last-child)::after { content: ""; position: absolute; left: 9px; top: 20px; bottom: -16px; width: 1px; background: var(--h-line); }
body[data-plane="operator"] .details-region:has(.tl-about) { display: grid; gap: 20px; align-content: start; }
body[data-plane="operator"] .details-region .tl-row { grid-template-columns: 84px minmax(0, 1fr); }
/* A withheld act in the master's two treatments: the info card in Lifecycle, attention
   (amber, its edge) for a refused purge. The component's own glyph and words stand. */
body[data-plane="operator"] .tl-card .withheld { padding: 16px 18px; border-radius: 12px; background: var(--h-accent-soft); }
body[data-plane="operator"] .tl-card .withheld-mark { color: var(--h-accent); }
body[data-plane="operator"] #destructive .withheld { background: var(--h-warn-soft); box-shadow: inset 4px 0 0 var(--h-warn); }
body[data-plane="operator"] #destructive .withheld-mark { color: var(--h-warn); }
body[data-plane="operator"] .tl-card .action-form :is(select, input[type="text"], input[type="email"]) { width: 100%; box-sizing: border-box; }
body[data-plane="operator"] .tl-card .action-form > label { display: grid; gap: 6px; }
body[data-plane="operator"] .tl-doors:not(#op-x) { max-width: none; display: flex; flex-wrap: wrap; gap: 8px 22px; margin: 0; padding-top: 14px; border-top: 1px solid var(--h-line); font-size: var(--h-t-op-sub); }
body[data-plane="operator"] .tl-card .tl-place:not(#op-x) { max-width: none; }
body[data-plane="operator"] .tl-card .tl-place > label { width: 100%; }
/* **B2's acts and forms** (INSTRUCTION 134): B3's act rows (`.identity-panel*`, one grammar
   for both pages) sit flush in the cards; the deletion-requested sentence on a tinted row;
   the forms in a tinted inner panel — 16px between fields, 24px before the button, fields
   at most 640px, two columns only where both fit; each hold a row with *Lift* (outline) at
   its right edge. */
body[data-plane="operator"] .tl-card .identity-panels { margin-top: 0; }
body[data-plane="operator"] .tl-note-line:not(#op-x) { margin: 0; max-width: none; padding: 16px 18px; border-radius: 12px; background: var(--h-chip); color: var(--h-ink); font-size: var(--h-t-op-sub); line-height: var(--lh-card); }
body[data-plane="operator"] .tl-panel { display: grid; gap: 16px; padding: 20px 22px; border-radius: 12px; background: var(--h-chip); }
body[data-plane="operator"] .tl-panel .note:not(#op-x) { margin: 0; max-width: none; }
/* The migration facet's sentence spans its card, as the act rows' lines do (the owner): the
   object layout's prose cap wrapped it at 1440. */
body[data-plane="operator"] #type-migration .note:not(#op-x) { max-width: none; }
body[data-plane="operator"] .tl-card .tl-panel .action-form:not(#op-x):not(#act-86g) {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 640px));
  gap: 16px; align-items: start; margin: 0; max-width: none; }
body[data-plane="operator"] .tl-card .tl-panel .action-form > :is(.field, label) { display: grid; gap: 6px; margin: 0; }
body[data-plane="operator"] .tl-card .tl-panel .action-form > :is(button, .action) { grid-column: 1 / -1; justify-self: start; margin-top: 8px; }
body[data-plane="operator"] .tl-card .tl-panel :is(select, input[type="text"], input[type="email"]) { width: 100%; box-sizing: border-box; }
body[data-plane="operator"] .tl-card .tl-lift .action:not(#op-x):not(#act-86g):not(#id-x) {
  flex: none; background: var(--h-card); color: var(--h-accent); border: 1.5px solid var(--h-accent); }
body[data-plane="operator"] .tl-card .tl-lift .action:not(#op-x):not(#act-86g):not(#id-x):hover { background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="operator"] .identity-panel-says.tl-quiet:not(#id-x):not(#act-86g) { color: var(--h-muted); font-size: var(--type-meta); }
body[data-plane="operator"] .tl-subhead:not(#op-x) { margin: 6px 0 0; font-size: var(--h-t-op-sub); font-weight: var(--h-w-semi); color: var(--h-ink); }

@media (min-width: 64.0625rem) {
  body[data-layout="object"][data-details] main:has(> .details-region .tl-about) {
    grid-template-columns: minmax(0, 1fr) clamp(320px, 31%, 400px); }
}
@media (max-width: 64rem) {
  body[data-layout="object"][data-details] main:has(> .details-region .tl-about) { display: block; }
  body[data-plane="operator"] .details-region:has(.tl-about) { margin-top: var(--card-gap); }
}
@media (max-width: 48rem) {
  body[data-plane="operator"] .tl-row { grid-template-columns: minmax(0, 1fr); gap: 4px; }
  body[data-plane="operator"] .tl-mono { width: 56px; height: 56px; }
  body[data-plane="operator"] .tl-head-words h1 { font-size: var(--type-page-title); }
  body[data-plane="operator"] .tl-card { padding: 18px; }
}

/* **B6 Break-glass, to the owner's master** (ux/133 §2, INSTRUCTION 131): the head — tile,
   title and lede, the art at the right (hidden below 80rem), the customer's-view panel —
   then *Open sessions (n)*: B8's table grammar, a green bar for what remains, the act in the
   master's red outline, and the read in the card's footer band. */
body[data-plane="operator"] .bg-head { position: relative; padding: 40px 0 28px 12px; }
body[data-plane="operator"] .bg-head-main { display: flex; gap: 28px; align-items: flex-start; }
body[data-plane="operator"] .bg-tile {
  flex: none; display: inline-grid; place-items: center; width: 78px; height: 78px;
  border-radius: 16px; background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="operator"] .bg-tile .icon { width: 34px; height: 34px; margin: 0; }
body[data-plane="operator"] .bg-tile { box-shadow: 0 8px 24px color-mix(in srgb, var(--h-accent) 14%, transparent); }
/* *End this session* in the master's red outline with its red stop mark (ux/133 §2): its
   weight is still `action_class`'s; the drawing is the master's, registered in 86-g's
   exemptions as B8a's *Revoke access* is. */
body[data-plane="operator"] .bg-act .action:not(#bg-x):not(#bg-y) {
  display: inline-flex; gap: 10px; align-items: center; padding: 12px 22px; white-space: nowrap;
  border: 1.5px solid var(--h-danger); border-radius: 10px; background: var(--h-card);
  color: var(--h-danger); font-weight: var(--h-w-semi); box-shadow: none; }
body[data-plane="operator"] .bg-act .action:not(#bg-x):not(#bg-y)::before {
  content: ""; flex: none; width: 14px; height: 14px; border-radius: 3px; background: var(--h-danger); }
body[data-plane="operator"] .bg-act .action:not(#bg-x):not(#bg-y):hover { background: var(--h-danger-soft); color: var(--h-danger); }
body[data-plane="operator"] .bg-head-words h1 {
  margin: 0; font-size: var(--h-t-op-title); line-height: var(--lh-tight);
  letter-spacing: var(--track-title); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="operator"] .bg-art {
  position: absolute; right: 40px; top: 12px; width: 320px; height: auto;
  -webkit-mask-image: radial-gradient(ellipse 70% 75% at 50% 50%, black 55%, transparent 100%);
  mask-image: radial-gradient(ellipse 70% 75% at 50% 50%, black 55%, transparent 100%); }
body[data-plane="operator"] .bg-info {
  position: relative; z-index: 1; display: flex; gap: 20px; align-items: center; margin-top: 28px;
  padding: 20px 24px; border-radius: 14px; background: var(--h-accent-soft); }
body[data-plane="operator"] .bg-info p:not(#op-x) { margin: 0; font-size: var(--h-t-op-sub); line-height: var(--lh-card); color: var(--h-ink-2); }
body[data-plane="operator"] .bg-info-mark .icon { width: 26px; height: 26px; margin: 0; color: var(--h-accent); }
body[data-plane="operator"] .bg-org { display: flex; gap: 22px; align-items: flex-start; }
body[data-plane="operator"] .grid.bg-table th.cell-identity { text-align: left; }
body[data-plane="operator"] .bg-mono {
  flex: none; display: inline-grid; place-items: center; width: 64px; height: 64px;
  border-radius: 14px; background: var(--h-accent-soft); color: var(--h-accent-hi);
  font-size: var(--h-t-op-name); font-weight: var(--h-w-bold); }
body[data-plane="operator"] .bg-org-words { display: grid; gap: 2px; }
body[data-plane="operator"] .bg-org-name { margin-bottom: 4px; font-size: var(--h-t-op-name); color: var(--h-ink); }
body[data-plane="operator"] .bg-quiet { color: var(--h-muted); font-size: var(--h-t-op-desig-body); }
@media (min-width: 769px) {
  body[data-plane="operator"] :is(.bg-org-name, .bg-org-words .bg-quiet) { white-space: nowrap; }
}
body[data-plane="operator"] .bg-left { display: flex; gap: 12px; align-items: flex-start; }
body[data-plane="operator"] .bg-clock .icon { width: 24px; height: 24px; margin: 2px 0 0; color: var(--h-ok); }
body[data-plane="operator"] .bg-minutes { display: block; font-size: var(--h-t-op-name); color: var(--h-ok); white-space: nowrap; }
body[data-plane="operator"] .bg-bar {
  display: block; width: 220px; height: 12px; margin-top: 14px; border: 0; border-radius: 999px;
  overflow: hidden; background: var(--h-fill-08); -webkit-appearance: none; appearance: none; }
body[data-plane="operator"] .bg-bar::-webkit-progress-bar { background: var(--h-fill-08); border-radius: 999px; }
body[data-plane="operator"] .bg-bar::-webkit-progress-value { background: var(--h-ok); border-radius: 999px; }
body[data-plane="operator"] .bg-bar::-moz-progress-bar { background: var(--h-ok); border-radius: 999px; }
body[data-plane="operator"] .bg-why { display: block; font-size: var(--h-t-op-desig-body); color: var(--h-ink); }
body[data-plane="operator"] .bg-means:not(#op-x) { margin: 8px 0 0; }
body[data-plane="operator"] .bg-foot {
  display: flex; gap: 14px; align-items: center; margin: 16px 16px 0; padding: 18px 26px;
  border-radius: 12px; background: var(--h-chip); }
body[data-plane="operator"] .bg-foot .computed-at:not(#op-x) { margin: 0; }
body[data-plane="operator"] .bg-foot-mark .icon { width: 22px; height: 22px; margin: 0; color: var(--h-muted); }
@media (min-width: 80rem) {
  body[data-plane="operator"] .bg-head-main { padding-right: 380px; }
  body[data-plane="operator"] .bg-info { margin-right: 380px; }
}
@media (max-width: 79.9375rem) {
  body[data-plane="operator"] .bg-art { display: none; }
  /* Below 80rem the row's furniture tightens so the four columns fit the card. */
  body[data-plane="operator"] .bg-org { gap: 14px; }
  body[data-plane="operator"] .bg-mono { width: 52px; height: 52px; }
  body[data-plane="operator"] .bg-bar { width: 150px; }
}
@media (max-width: 48rem) {
  body[data-plane="operator"] .bg-head { padding: 20px 4px 12px; }
  body[data-plane="operator"] .bg-head-main { gap: 16px; }
  body[data-plane="operator"] .bg-tile { width: 56px; height: 56px; }
  body[data-plane="operator"] .bg-head-words h1 { font-size: var(--type-page-title); }
  body[data-plane="operator"] .bg-info { gap: 14px; padding: 16px; }
  body[data-plane="operator"] .bg-bar { width: 100%; }
  body[data-plane="operator"] .bg-foot { margin: 12px 12px 0; padding: 14px 16px; }
  body[data-plane="operator"] .grid.bg-table td.cell-acts { text-align: left; }
  body[data-plane="operator"] .opl-card { padding: 20px; gap: 20px; }
  body[data-plane="operator"] .opl-card-head { gap: 16px; }
  body[data-plane="operator"] .opl-tile { width: 56px; height: 56px; border-radius: 14px; }
  body[data-plane="operator"] .opl-tile .icon { width: 26px; height: 26px; }
  body[data-plane="operator"] .opl-link { padding: 18px 20px; }
}

/* **B9 below 80rem, two lines a row** (ux/133 §3): the time never wraps and takes its own
   width at every size; between the phone and 80rem Who and the category move under the
   sentence, so no column stands empty beside a four-line one. */
body[data-plane="operator"] .sev-time { white-space: nowrap; }
@media (min-width: 769px) and (max-width: 79.9375rem) {
  body[data-plane="operator"] .sev-summary {
    grid-template-columns: max-content 46px max-content minmax(0, 1fr) max-content 40px;
    grid-template-areas: "time tile what what out chev" ". . who cat . ."; gap: 6px 16px; }
  body[data-plane="operator"] .sev-time { grid-area: time; }
  body[data-plane="operator"] .sev-tile { grid-area: tile; }
  body[data-plane="operator"] .sev-what { grid-area: what; }
  body[data-plane="operator"] .sev-who { grid-area: who; border: 0; padding: 0; }
  body[data-plane="operator"] .sev-cat { grid-area: cat; justify-self: start; }
  body[data-plane="operator"] .sev-outcome { grid-area: out; }
  body[data-plane="operator"] .sev-chev { grid-area: chev; }
}
@media (max-width: 48rem) {
  body[data-plane="operator"] .ops-card-head { flex-direction: column; padding-right: 20px; }
  body[data-plane="operator"] .ops-card-head h2,
  body[data-plane="operator"] .ops-revoked > h2 { margin-left: 20px; }
  body[data-plane="operator"] .ops-card-head .ops-events-link { margin-left: 20px; }
  body[data-plane="operator"] .grid.ops-table td[data-label]::before {
    content: attr(data-label); display: block; margin-bottom: 4px; font-size: var(--type-meta-small);
    text-transform: uppercase; letter-spacing: var(--track-wide); color: var(--h-muted); font-weight: var(--h-w-semi); }
  body[data-plane="operator"] .ops-notice { gap: 14px; }
  body[data-plane="operator"] .ops-notice-mark { flex-basis: 48px; width: 48px; height: 48px; }
  body[data-plane="operator"] .sev-head { padding: 20px 4px 12px; }
  body[data-plane="operator"] .sev-head h1 { font-size: var(--type-page-title); }
  body[data-plane="operator"] .sev-bar { padding: 14px; }
  body[data-plane="operator"] .sev-filters { width: 100%; }
  body[data-plane="operator"] .sev-sel { flex: 1 1 100%; }
  body[data-plane="operator"] .sev-paging { width: 100%; justify-content: space-between; }
  body[data-plane="operator"] .sev-showing:not(#op-x) { text-align: left; margin-right: auto; }
  body[data-plane="operator"] .sev-band { padding: 10px 14px; }
  body[data-plane="operator"] .sev-summary {
    grid-template-columns: 46px minmax(0, 1fr) auto;
    grid-template-areas: "time time out" "tile what what" ". who who" ". cat chev"; gap: 8px 12px; padding: 14px; }
  body[data-plane="operator"] .sev-time { grid-area: time; display: flex; gap: 6px; align-items: baseline; }
  body[data-plane="operator"] .sev-time b { display: inline; }
  body[data-plane="operator"] .sev-tile { grid-area: tile; width: 40px; height: 40px; }
  body[data-plane="operator"] .sev-what { grid-area: what; }
  body[data-plane="operator"] .sev-who { grid-area: who; border: 0; padding: 0; }
  body[data-plane="operator"] .sev-cat { grid-area: cat; }
  body[data-plane="operator"] .sev-outcome { grid-area: out; justify-self: end; }
  body[data-plane="operator"] .sev-chev { grid-area: chev; justify-self: end; }
  body[data-plane="operator"] .sev-details { margin: 0 14px 14px; }
  body[data-plane="operator"] .sev-detail { grid-template-columns: minmax(0, 1fr); }
  body[data-plane="operator"] .sev-detail dd { padding-top: 0; }
}

/* **ux/131 §2 · B8a Revoke operator access** (06 §6c-xvii; the visual master): one
   focused column — the identity card, *What happens*, the caution, and the act card in
   master 103's irreversible grammar (a red edge, the red outlined lock). */
body[data-plane="operator"] .rev-back {
  display: inline-flex; gap: 8px; align-items: center; margin: 20px 0 0 12px;
  color: var(--h-ink); text-decoration: none; font-size: var(--h-t-op-sub); }
body[data-plane="operator"] .rev-back .icon { width: 18px; height: 18px; margin: 0; }
body[data-plane="operator"] .rev-head { padding: 12px 12px 4px; }
body[data-plane="operator"] .rev-head h1 {
  margin: 0; font-size: var(--h-t-op-title); line-height: var(--lh-tight);
  letter-spacing: var(--track-title); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="operator"] .rev-focus {
  display: grid; grid-template-columns: minmax(0, 1fr); gap: 20px; margin-top: 24px; }
body[data-plane="operator"] .rev-focus > * { min-width: 0; }
body[data-plane="operator"] .rev-card {
  border: 1px solid var(--h-line); border-radius: 16px; background: var(--h-card);
  box-shadow: 0 1px 2px color-mix(in srgb, var(--h-ink) 5%, transparent); }
body[data-plane="operator"] .rev-identity {
  display: grid; grid-template-columns: minmax(0, 1fr); gap: 20px; padding: 28px 34px; }
body[data-plane="operator"] .rev-who { display: flex; flex-wrap: wrap; gap: 12px 18px; align-items: center; min-width: 0; }
body[data-plane="operator"] .rev-who > div { min-width: 0; overflow-wrap: anywhere; }
/* The master's green for an affirmative standing (*Can sign in*, *Enrolled*): the shared
   `.pill-affirmative` is blue off the workspace plane, so B8a's cards say it here. */
body[data-plane="operator"] .rev-card .pill-affirmative { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="operator"] .rev-monogram:not(#op-x) {
  flex: 0 0 60px; width: 60px; height: 60px; font-size: var(--h-t-op-name);
  background: var(--h-accent-soft); color: var(--h-accent-hi); }
body[data-plane="operator"] .rev-ref { display: block; font-size: var(--h-t-op-card-title); color: var(--h-ink); }
body[data-plane="operator"] .rev-email { display: block; color: var(--h-muted); font-size: var(--h-t-op-body); }
body[data-plane="operator"] .rev-standing { margin-left: auto; }
body[data-plane="operator"] .rev-facts { display: grid; margin: 0; border-top: 1px solid var(--h-line); }
body[data-plane="operator"] .rev-fact {
  display: grid; grid-template-columns: 200px minmax(0, 1fr); align-items: center;
  border-bottom: 1px solid var(--h-line); }
body[data-plane="operator"] .rev-fact > * { padding: 14px 0; margin: 0; font-size: var(--h-t-op-body); }
body[data-plane="operator"] .rev-fact dt { display: flex; gap: 12px; align-items: center; color: var(--h-muted); }
body[data-plane="operator"] .rev-fact dd { color: var(--h-ink); }
body[data-plane="operator"] .rev-fact-mark,
body[data-plane="operator"] .rev-mark {
  flex: 0 0 36px; display: inline-grid; place-items: center; width: 36px; height: 36px;
  border-radius: 9px; background: var(--h-area-system-soft); color: var(--h-area-system); }
body[data-plane="operator"] .rev-fact-mark .icon,
body[data-plane="operator"] .rev-mark .icon { width: 18px; height: 18px; margin: 0; }
body[data-plane="operator"] .rev-mark-critical:not(#op-x) { background: var(--h-critical-soft); color: var(--h-critical); }
body[data-plane="operator"] .rev-quiet { color: var(--h-muted); }
body[data-plane="operator"] .rev-happens { display: grid; gap: 14px; padding: 26px 34px; }
body[data-plane="operator"] .rev-happens h2 { margin: 0; font-size: var(--h-t-op-desig-card); color: var(--h-ink); }
body[data-plane="operator"] .rev-list { display: grid; gap: 12px; margin: 0; padding: 0; list-style: none; }
body[data-plane="operator"] .rev-list li {
  display: flex; gap: 14px; align-items: flex-start; font-size: var(--h-t-op-desig-body); color: var(--h-ink); }
body[data-plane="operator"] .rev-list .rev-mark { flex-basis: 32px; width: 32px; height: 32px; border-radius: 8px; }
body[data-plane="operator"] .rev-alone:not(#op-x) { margin: 0; }
body[data-plane="operator"] .rev-act {
  display: grid; gap: 18px; padding: 24px 28px; border: 1px solid var(--h-danger-edge);
  border-left: 4px solid var(--h-danger); border-radius: 14px;
  background: linear-gradient(90deg, var(--h-danger-wash), var(--h-card)); }
body[data-plane="operator"] .rev-act > .action-form { display: grid; gap: 18px; margin: 0; }
body[data-plane="operator"] .rev-act-head { display: flex; gap: 16px; align-items: flex-start; }
body[data-plane="operator"] .rev-act-mark {
  flex: 0 0 42px; display: inline-grid; place-items: center; width: 42px; height: 42px;
  border: 1.5px solid var(--h-danger-edge); border-radius: 10px; background: var(--h-card);
  color: var(--h-danger); }
body[data-plane="operator"] .rev-act-mark .icon { width: 22px; height: 22px; margin: 0; }
body[data-plane="operator"] .rev-act h2 { margin: 0; font-size: var(--h-t-op-desig-card); color: var(--h-ink); }
body[data-plane="operator"] .rev-act-head p:not(#op-x) { margin: 4px 0 0; color: var(--h-muted); font-size: var(--h-t-op-desig-body); }
body[data-plane="operator"] .rev-why { display: grid; gap: 10px; margin: 0; padding: 0; border: 0; min-width: 0; }
body[data-plane="operator"] .rev-why legend { margin-bottom: 8px; padding: 0; font-weight: var(--h-w-semi); font-size: var(--h-t-op-desig-body); color: var(--h-ink); }
body[data-plane="operator"] .rev-why legend span { color: var(--h-muted); font-weight: var(--h-w-normal); }
body[data-plane="operator"] .rev-reasons { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
body[data-plane="operator"] .rev-reason {
  display: flex; gap: 12px; align-items: center; padding: 12px 14px; border: 1px solid var(--h-line);
  border-radius: 10px; background: var(--h-card); cursor: pointer; font-size: var(--h-t-op-desig-body); color: var(--h-ink); }
body[data-plane="operator"] .rev-reason input { width: 18px; height: 18px; margin: 0; accent-color: var(--h-danger); }
body[data-plane="operator"] .rev-reason:has(input:checked) { border-color: var(--h-danger); box-shadow: 0 0 0 3px var(--h-danger-soft); }
body[data-plane="operator"] .rev-why-invalid .rev-reason { border-color: var(--h-danger-line); }
body[data-plane="operator"] .rev-buttons { display: flex; flex-wrap: wrap; gap: 18px; align-items: center; }
body[data-plane="operator"] .rev-buttons .action .icon { width: 18px; height: 18px; }
/* **The master's red outline for *Revoke access*** (ux/131 §2: `action_class`'s irreversible
   weight, a lock icon), scoped by two unworn ids past 86-g's blue fill — **in every state**:
   an irreversible act never wears the primary blue, and it is never drawn inactive (the PO's
   review, UX-4); with no reason chosen it submits and is refused under *Why*. Hover fills
   red, as 70-a's red outline does. */
body[data-plane="operator"] .rev-act .action-irreversible:not(#rev-x):not(#rev-y) {
  display: inline-flex; gap: 10px; align-items: center; background: var(--h-card);
  color: var(--h-danger); border: 1.5px solid var(--h-danger); }
body[data-plane="operator"] .rev-act .action-irreversible:not(#rev-x):not(#rev-y):hover {
  background: var(--h-danger); border-color: var(--h-danger); color: var(--h-card); }
body[data-plane="operator"] .rev-cancel { color: var(--h-ink); text-decoration: underline; text-underline-offset: 3px; font-size: var(--h-t-op-sub); }
body[data-plane="operator"] .rev-stale {
  display: flex; gap: 16px; align-items: flex-start; padding: 24px 28px; border-radius: 14px;
  background: var(--h-area-system-soft); color: var(--h-ink); }
body[data-plane="operator"] .rev-stale .rev-mark:not(#op-x) { background: var(--h-card); }
body[data-plane="operator"] .rev-stale p:not(#op-x) { margin: 4px 0 0; color: var(--h-muted); }
@media (max-width: 48rem) {
  body[data-plane="operator"] .ops-art { display: none; }
  body[data-plane="operator"] .ops-head { min-height: 0; padding: 20px 4px 0; }
  body[data-plane="operator"] .ops-count { position: static; margin-top: 16px; }
  body[data-plane="operator"] .ops-head h1 { font-size: var(--type-page-title); }
  body[data-plane="operator"] .ops-card > h2,
  body[data-plane="operator"] .ops-sub:not(#op-x) { margin-left: 20px; }
  body[data-plane="operator"] .ops-alone { gap: 14px; }
  body[data-plane="operator"] .ops-alone-mark { flex-basis: 48px; width: 48px; height: 48px; }
  /* ux/131 §1: the ⋮ at the stacked row's top right — in the row's own grid, beside the
     operator, never positioned outside it; the reader's own row has no cell to draw. */
  body[data-plane="operator"] .grid.ops-table tbody th.cell-identity { grid-row: 1; grid-column: 1; padding-right: 56px; }
  body[data-plane="operator"] .grid.ops-table tbody td.ops-actions {
    grid-row: 1; grid-column: 1; justify-self: end; align-self: start; width: auto; }
  body[data-plane="operator"] .grid.ops-table tbody td.ops-actions:empty { display: none; }
  body[data-plane="operator"] .rev-head h1 { font-size: var(--type-page-title); }
  body[data-plane="operator"] :is(.rev-identity, .rev-happens) { padding: 18px; }
  body[data-plane="operator"] .rev-act { padding: 18px; }
  body[data-plane="operator"] .rev-fact { grid-template-columns: minmax(0, 1fr); }
  body[data-plane="operator"] .rev-fact dd { padding-top: 0; }
  body[data-plane="operator"] .rev-reasons { grid-template-columns: minmax(0, 1fr); }
  body[data-plane="operator"] .grid.ops-table thead { display: none; }
  body[data-plane="operator"] .grid.ops-table, body[data-plane="operator"] .grid.ops-table tbody { display: block; }
  body[data-plane="operator"] .grid.ops-table tr {
    display: grid; grid-template-columns: minmax(0, 1fr); gap: 14px; padding: 16px 20px;
    border-bottom: 1px solid var(--h-line); }
  body[data-plane="operator"] .grid.ops-table tbody :is(th, td) { padding: 0; border: 0; }
  /* The table's 34px outer edges (D-2614) are the desktop row's; a stacked row takes the
     row's own padding, so the identity starts under the card's heading (ux/133 §3). */
  body[data-plane="operator"] .grid.ops-table tbody :is(th, td):first-child { padding-left: 0; }
  body[data-plane="operator"] .grid.ops-table tbody td:last-child { padding-right: 0; }
  body[data-plane="operator"] .ops-cell > span:last-child { font-size: var(--h-t-op-body); }
  /* ux/133 §3's audit: a long address overhung its stacked cell (129's noted 10px) —
     the identity cell's `nowrap` (the monogram beside its name) does not hold once the
     row stacks, so B6's and B8's stacked identities wrap. */
  body[data-plane="operator"] .grid.ops-table tbody th.cell-identity { white-space: normal; }
  body[data-plane="operator"] .grid.ops-table .identity { min-width: 0; }
  body[data-plane="operator"] .grid.ops-table .identity-detail { overflow-wrap: anywhere; }
}

/* -- B4 · Sales-led creation, drawn to the owner's master (105, `ops_sales_led_creation.png`)
   Measured at the master's 1536px: the head (a people tile, the title and lede, the
   person-card-plus art at the right); *Outstanding* (title, subline, the amber count at the
   corner, the pale-blue lapse note, the rows or the empty state); *Designate a founding
   administrator* (two typed fields side by side, *Type and plan* below, *+ Designate*) with
   *What happens next?* in a pale panel beside it. */
body[data-plane="operator"] .desig-head {
  position: relative; display: flex; align-items: center; gap: 30px; min-height: 190px;
  padding: 0 0 0 18px; box-sizing: border-box;
}
body[data-plane="operator"] .desig-head-tile {
  flex: 0 0 78px; display: inline-flex; align-items: center; justify-content: center;
  width: 78px; height: 78px; border-radius: 14px; background: var(--h-accent-soft); color: var(--h-accent);
}
body[data-plane="operator"] .desig-head-tile .icon { width: 38px; height: 38px; }
body[data-plane="operator"] .desig-head-words { position: relative; z-index: 1; }
body[data-plane="operator"] .desig-head h1 {
  margin: 0; font-size: var(--h-t-op-queue-title); line-height: var(--lh-tight);
  letter-spacing: var(--track-title); font-weight: var(--h-w-bold); color: var(--h-ink);
}
body[data-plane="operator"] .desig-lede:not(#op-x) { margin: 10px 0 0; font-size: var(--h-t-op-lede); color: var(--h-muted); }
body[data-plane="operator"] .desig-art {
  position: absolute; right: 112px; bottom: 0; width: 310px; height: auto; z-index: 0;
  -webkit-mask-image: linear-gradient(to right, transparent 0, black 30%);
  mask-image: linear-gradient(to right, transparent 0, black 30%);
}
body[data-plane="operator"] .desig-card {
  position: relative; z-index: 1; margin: 0 0 26px; padding: 26px 24px 24px;
  border: 1px solid var(--h-line); border-radius: 16px; background: var(--h-card);
  box-shadow: 0 10px 34px color-mix(in srgb, var(--h-ink) 6%, transparent);
}
body[data-plane="operator"] .desig-card h2 {
  margin: 0; font-size: var(--h-t-op-desig-card); font-weight: var(--h-w-bold); color: var(--h-ink);
}
body[data-plane="operator"] .desig-sub:not(#op-x) { margin: 6px 0 0; font-size: var(--h-t-op-desig-body); color: var(--h-muted); }
body[data-plane="operator"] .desig-card-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; }
body[data-plane="operator"] .desig-count {
  display: inline-flex; align-items: center; gap: 10px; padding: 8px 14px; border-radius: 999px;
  background: var(--h-warn-soft); color: var(--h-warn); font-size: var(--h-t-op-desig-small);
  white-space: nowrap;
}
body[data-plane="operator"] .desig-count-dot { width: 10px; height: 10px; border-radius: 50%; background: var(--mark-warm); }
body[data-plane="operator"] .desig-note {
  display: flex; align-items: center; gap: 28px; margin: 20px 0 0; padding: 16px 18px;
  border: 1px solid color-mix(in srgb, var(--h-accent) 18%, var(--h-card)); border-radius: 10px;
  background: color-mix(in srgb, var(--h-accent-soft) 80%, var(--h-card));
}
body[data-plane="operator"] .desig-note-mark {
  flex: 0 0 52px; display: inline-flex; align-items: center; justify-content: center;
  width: 52px; height: 52px; border-radius: 50%; background: var(--h-accent-soft);
}
/* The master's ⓘ is a filled disk: the outline icon's circle filled, its strokes in white. */
body[data-plane="operator"] .desig-note-mark .icon { width: 28px; height: 28px; }
body[data-plane="operator"] .desig-note-mark .icon circle { fill: var(--h-accent); stroke: var(--h-accent); }
body[data-plane="operator"] .desig-note-mark .icon path { stroke: var(--h-card); }
body[data-plane="operator"] .desig-note p { margin: 0; }
body[data-plane="operator"] .desig-note b { display: block; font-size: var(--h-t-op-desig-body); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="operator"] .desig-note-rest { display: block; margin-top: 4px; font-size: var(--h-t-op-desig-small); color: var(--h-muted); }
body[data-plane="operator"] .desig-empty {
  display: flex; justify-content: center; align-items: center; gap: 24px; padding: 30px 0 8px;
}
body[data-plane="operator"] .desig-empty-mark {
  flex: 0 0 58px; display: inline-flex; align-items: center; justify-content: center;
  width: 58px; height: 58px; border-radius: 50%; background: var(--h-accent-soft); color: var(--h-muted);
}
body[data-plane="operator"] .desig-empty-mark .icon { width: 26px; height: 26px; }
body[data-plane="operator"] .desig-empty-title:not(#op-x) {
  margin: 0; font-size: var(--h-t-op-desig-body); font-weight: var(--h-w-semi); color: var(--h-ink);
}
body[data-plane="operator"] .desig-empty-line:not(#op-x) { margin: 6px 0 0; font-size: var(--h-t-op-desig-small); color: var(--h-muted); }
body[data-plane="operator"] .grid.desig-table { margin-top: 20px; }
/* The forward act sized to its words (B1's 148px fits *Admit*, not *Create the
   organisation*); the exit — *Withdraw*, irreversible — B1's red outline (101-b). */
body[data-plane="operator"] .grid.desig-table { table-layout: auto; }
body[data-plane="operator"] .grid.desig-table .cell-acts { width: 1%; white-space: nowrap; }
body[data-plane="operator"] .grid.desig-table .queue-acts { width: max-content; }
body[data-plane="operator"] .grid.desig-table .queue-acts .action:not(#op-x):not(#act-86g) {
  width: auto; padding: 0 20px; white-space: nowrap;
}
body[data-plane="operator"] .grid.desig-table .row-exit-acts .action:not(#op-x):not(#act-86g) {
  height: 44px; padding: 0 20px; border-radius: 8px;
  background: var(--h-card); border: 1.5px solid var(--h-danger); color: var(--h-danger);
}
body[data-plane="operator"] .grid.desig-table .row-exit-acts .action:not(#op-x):not(#act-86g):hover {
  background: var(--h-danger); color: var(--h-card);
}
body[data-plane="operator"] .desig-move:not(#op-x) { margin: 0; font-size: var(--h-t-op-desig-body); color: var(--h-ink); }
body[data-plane="operator"] .desig-designate { display: flex; gap: 28px; align-items: flex-start; padding: 30px 24px 24px; }
body[data-plane="operator"] .desig-form-side { flex: 1; min-width: 0; }
body[data-plane="operator"] .desig-form:not(#op-x) {
  display: grid; grid-template-columns: minmax(0, 466fr) minmax(0, 422fr); gap: 20px 20px;
  max-width: none; margin: 22px 0 0;
}
body[data-plane="operator"] .desig-field:not(#op-x) { display: block; max-width: none; margin: 0; }
body[data-plane="operator"] .desig-field label {
  display: block; margin: 0 0 10px; font-size: var(--h-t-op-sub); font-weight: var(--h-w-semi); color: var(--h-ink);
}
body[data-plane="operator"] .desig-field-pairing { grid-column: 1; }
body[data-plane="operator"] .desig-input { position: relative; display: block; }
body[data-plane="operator"] .desig-input-mark {
  position: absolute; left: 16px; top: 50%; transform: translateY(-50%); display: inline-flex;
  color: var(--h-muted); pointer-events: none;
}
body[data-plane="operator"] .desig-input-mark .icon { width: 20px; height: 20px; }
body[data-plane="operator"] .desig-input :is(input, select):not(#op-x) {
  display: block; width: 100%; max-width: none; height: 46px; box-sizing: border-box;
  padding: 0 16px 0 52px; border: 1px solid var(--h-line-strong); border-radius: 8px;
  background: var(--h-card); font-size: var(--h-t-op-sub); color: var(--h-ink);
}
body[data-plane="operator"] .desig-form .desig-submit:not(#op-x):not(#act-86g) {
  grid-column: 1; justify-self: start; display: inline-flex; align-items: center; gap: 12px;
  height: 48px; padding: 0 24px; margin-top: 6px; border-radius: 8px;
  font-size: var(--h-t-op-desig-body);
}
body[data-plane="operator"] .desig-submit .icon { width: 20px; height: 20px; margin: 0; }
body[data-plane="operator"] .desig-next {
  flex: 0 0 402px; box-sizing: border-box; padding: 22px 28px 30px; border-radius: 12px;
  background: color-mix(in srgb, var(--h-accent-soft) 70%, var(--h-card));
}
body[data-plane="operator"] .desig-next-tile {
  display: inline-flex; align-items: center; justify-content: center; width: 56px; height: 56px;
  border-radius: 10px; background: var(--h-accent-soft); color: var(--h-accent);
}
body[data-plane="operator"] .desig-next-tile .icon { width: 28px; height: 28px; }
body[data-plane="operator"] .desig-next h3 {
  margin: 26px 0 18px; font-size: var(--h-t-op-name); font-weight: var(--h-w-bold); color: var(--h-ink);
}
body[data-plane="operator"] .desig-steps { display: grid; gap: 14px; margin: 0; padding: 0; list-style: none; }
body[data-plane="operator"] .desig-steps li {
  display: flex; align-items: center; gap: 16px; font-size: var(--h-t-op-desig-small); color: var(--h-muted);
}
body[data-plane="operator"] .desig-step-number {
  flex: 0 0 32px; display: inline-flex; align-items: center; justify-content: center;
  width: 32px; height: 32px; border-radius: 50%; background: var(--h-accent-soft);
  color: var(--h-accent); font-size: var(--h-t-op-sub); font-weight: var(--h-w-bold);
}
@media (max-width: 48rem) {
  body[data-plane="operator"] .desig-art { display: none; }
  body[data-plane="operator"] .desig-head { min-height: 0; gap: 16px; padding: 20px 4px 24px; }
  body[data-plane="operator"] .desig-head-tile { flex-basis: 56px; width: 56px; height: 56px; }
  body[data-plane="operator"] .desig-head h1 { font-size: var(--type-page-title); }
  body[data-plane="operator"] .desig-card { padding: 20px 16px; }
  body[data-plane="operator"] .desig-card-head { flex-direction: column; }
  body[data-plane="operator"] .desig-note { gap: 16px; }
  body[data-plane="operator"] .desig-empty { justify-content: flex-start; }
  body[data-plane="operator"] .desig-designate { flex-direction: column; }
  body[data-plane="operator"] .desig-form:not(#op-x) { grid-template-columns: minmax(0, 1fr); }
  body[data-plane="operator"] .desig-next { flex-basis: auto; width: 100%; }
  body[data-plane="operator"] .grid.desig-table thead { display: none; }
  body[data-plane="operator"] .grid.desig-table, body[data-plane="operator"] .grid.desig-table tbody { display: block; }
  body[data-plane="operator"] .grid.desig-table tr { display: grid; gap: 12px; padding: 16px 0; border-top: 1px solid var(--h-line); }
  body[data-plane="operator"] .grid.desig-table tbody :is(th, td) { padding: 0; border: 0; }
}

/* -- Page 3 · Candidate, drawn to the owner's master (107, `candidate_detail_page.png`) ---
   Measured at the master's 1448px: the head (an 88px monogram, the name, the standing, the
   chips; *Ask for clarification* at the right); two columns, 812 and 492 wide with a 16px
   gap — the claims, Contact & consent and administration on the left, Key details,
   Documents, Status & timeline and Future consideration on the right. Cards radius 14. */
body[data-plane="workspace"] .cand-head {
  display: flex; align-items: center; gap: 22px; margin: 6px 0 20px; padding: 0 10px;
}
/* **107-f: the name and its chips on one row**, wrapping only when full. */
body[data-plane="workspace"] .cand-title-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 18px; }
body[data-plane="workspace"] .cand-chip-dark { background: var(--h-ink); color: var(--h-card); }
body[data-plane="workspace"] .cand-monogram {
  flex: 0 0 72px; display: inline-flex; align-items: center; justify-content: center;
  width: 72px; height: 72px; border-radius: 50%;
  font-size: var(--avatar-initials); font-weight: var(--h-w-bold);
}
/* ux/124 §4 (c): the tinted circle is 87's disc, filling the avatar box. */
body[data-plane="workspace"] .cand-monogram > .initials-disc {
  width: 100%; height: 100%; flex: none; font-size: var(--avatar-initials); font-weight: var(--h-w-bold); }
body[data-plane="workspace"] .cand-head-words { flex: 1; min-width: 0; }
body[data-plane="workspace"] .cand-head h1 {
  margin: 4px 0 0; font-size: var(--type-page-title); line-height: var(--lh-tight);
  letter-spacing: var(--track-title); font-weight: var(--h-w-bold); color: var(--h-ink);
}
body[data-plane="workspace"] .cand-standing:not(#cand-x) { margin: 6px 0 0; font-size: var(--type-lede); color: var(--h-muted); }
body[data-plane="workspace"] .cand-chips:not(#cand-x) { display: flex; flex-wrap: wrap; gap: 10px; margin: 0; }
body[data-plane="workspace"] .cand-chip {
  display: inline-flex; align-items: center; gap: 8px; padding: 6px 14px; border-radius: 999px;
  font-size: var(--type-pill); font-weight: var(--h-w-semi);
}
body[data-plane="workspace"] .cand-chip-dot { width: 8px; height: 8px; border-radius: 50%; background: currentColor; }
body[data-plane="workspace"] .cand-chip-blue {
  background: color-mix(in srgb, var(--h-accent) 13%, var(--h-card)); color: var(--h-accent-hi); }
body[data-plane="workspace"] .cand-chip-green { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="workspace"] .cand-chip-amber { background: var(--h-warn-soft); color: var(--h-warn); }
body[data-plane="workspace"] .cand-chip-red { background: var(--h-danger-soft, var(--h-warn-soft)); color: var(--h-danger); }
body[data-plane="workspace"] .cand-chip-grey { background: var(--h-chip); color: var(--h-muted); }
body[data-plane="workspace"] .cand-ask {
  display: inline-flex; align-items: center; gap: 10px; height: 44px; padding: 0 16px;
  box-sizing: border-box; border: 1.5px solid var(--h-accent); border-radius: 8px;
  background: var(--h-card); color: var(--h-accent); font-weight: var(--h-w-semi);
  text-decoration: none; white-space: nowrap;
}
body[data-plane="workspace"] .cand-ask:hover { background: var(--h-accent-soft); color: var(--h-accent-hi); }
body[data-plane="workspace"] .cand-ask .icon { width: 18px; height: 18px; margin: 0; }
body[data-plane="workspace"] .cand-grid {
  display: grid; grid-template-columns: minmax(0, 812fr) minmax(0, 492fr);
  grid-template-areas: "main side" "admin side"; grid-template-rows: auto 1fr;
  gap: 16px; align-items: start;
}
body[data-plane="workspace"] .cand-main { grid-area: main; display: grid; gap: 16px; min-width: 0; }
body[data-plane="workspace"] .cand-side { grid-area: side; display: grid; gap: 16px; min-width: 0; }
body[data-plane="workspace"] .cand-grid > .no-act { grid-area: admin; }
body[data-plane="workspace"] .cand-grid > .no-act { margin: 0; }
body[data-plane="workspace"] .cand-card {
  margin: 0; padding: 20px 22px; border: 1px solid var(--h-line); border-radius: 14px;
  background: var(--h-card); box-shadow: 0 6px 24px color-mix(in srgb, var(--h-ink) 5%, transparent);
}
body[data-plane="workspace"] .cand-card-head { display: flex; align-items: flex-start; gap: 16px; }
body[data-plane="workspace"] .cand-tile {
  flex: 0 0 40px; display: inline-flex; align-items: center; justify-content: center;
  width: 40px; height: 40px; border-radius: 10px; background: var(--h-accent-soft); color: var(--h-accent);
}
body[data-plane="workspace"] .cand-tile .icon { width: 22px; height: 22px; }
body[data-plane="workspace"] .cand-card-words { flex: 1; min-width: 0; }
body[data-plane="workspace"] .cand-card h2 {
  margin: 6px 0 0; font-size: var(--type-section); font-weight: var(--h-w-bold); color: var(--h-ink);
}
body[data-plane="workspace"] .cand-sub:not(#cand-x) { margin: 4px 0 0; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .cand-count {
  display: inline-flex; align-items: center; gap: 6px; padding: 5px 10px; border-radius: 8px;
  background: var(--h-accent-soft); color: var(--h-accent-hi); font-size: var(--type-meta);
  font-weight: var(--h-w-semi); white-space: nowrap;
}
body[data-plane="workspace"] .cand-count .icon { width: 15px; height: 15px; margin: 0; }
/* The claims: a mark, the claim, pills as dotted chips, the source, the remedy panel. */
body[data-plane="workspace"] .cand-claims { margin: 0; padding: 0; list-style: none; }
body[data-plane="workspace"] .cand-claim {
  display: flex; gap: 18px; padding: 18px 0; border-top: 1px solid var(--h-line);
}
body[data-plane="workspace"] .cand-claim-group:first-of-type .cand-claim:first-child { margin-top: 16px; }
body[data-plane="workspace"] .cand-claim-mark {
  flex: 0 0 40px; display: inline-flex; align-items: center; justify-content: center;
  width: 40px; height: 40px; border-radius: 50%; background: var(--h-chip); color: var(--h-ink);
}
body[data-plane="workspace"] .cand-claim-mark .icon { width: 20px; height: 20px; }
body[data-plane="workspace"] .cand-claim-words { flex: 1; min-width: 0; }
body[data-plane="workspace"] .cand-claim .evidence-claim {
  margin: 6px 0 10px; font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink);
}
body[data-plane="workspace"] .cand-claim .evidence-source > summary {
  display: inline-flex; align-items: center; gap: 8px; margin-top: 10px; color: var(--h-link);
  cursor: pointer; font-size: var(--type-meta);
}
body[data-plane="workspace"] .cand-claim .evidence-source > summary .icon { width: 16px; height: 16px; margin: 0; }
body[data-plane="workspace"] .cand-remedy {
  display: flex; align-items: center; gap: 16px; margin: 12px 0 0; padding: 12px 16px;
  border-left: 3px solid color-mix(in srgb, var(--h-accent) 45%, var(--h-card));
  border-radius: 8px; background: color-mix(in srgb, var(--h-accent-soft) 80%, var(--h-card));
}
body[data-plane="workspace"] .cand-remedy-mark { display: inline-flex; }
body[data-plane="workspace"] .cand-remedy-mark .icon { width: 28px; height: 28px; }
body[data-plane="workspace"] .cand-remedy-mark .icon circle { fill: var(--h-accent); stroke: var(--h-accent); }
body[data-plane="workspace"] .cand-remedy-mark .icon path { stroke: var(--h-card); }
body[data-plane="workspace"] .cand-remedy p { margin: 0; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .cand-remedy b { display: block; color: var(--h-ink); font-weight: var(--h-w-semi); }
body[data-plane="workspace"] .cand-legend-block { padding: 14px 0 0; border-top: 1px solid var(--h-line); }
body[data-plane="workspace"] .cand-legend { margin: 0; padding: 0; list-style: none; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .cand-limit:not(#cand-x) { margin: 0; font-size: var(--type-meta); }
body[data-plane="workspace"] .cand-card .evidence-onward { margin: 16px 0 0; }
body[data-plane="workspace"] .cand-card .evidence-onward a {
  display: inline-flex; align-items: center; gap: 10px; height: 44px; padding: 0 20px;
  box-sizing: border-box; border: 1.5px solid var(--h-accent); border-radius: 8px;
  color: var(--h-accent); font-weight: var(--h-w-semi); text-decoration: none;
}
body[data-plane="workspace"] .cand-card .evidence-onward a:hover { background: var(--h-accent-soft); }
/* Contact & consent: tile · label · value · act, each row ruled. */
body[data-plane="workspace"] .cand-contact { margin: 14px 0 0; }
body[data-plane="workspace"] .cand-contact-row {
  display: grid; grid-template-columns: 40px 140px minmax(0, 1fr) auto; align-items: center;
  gap: 8px 16px; padding: 12px 0; border-top: 1px solid var(--h-line);
}
body[data-plane="workspace"] .cand-row-mark {
  display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px;
  border-radius: 10px; background: var(--h-chip); color: var(--h-ink);
}
body[data-plane="workspace"] .cand-row-mark .icon { width: 20px; height: 20px; }
body[data-plane="workspace"] .cand-contact-row dt { font-size: var(--type-meta); color: var(--h-ink); }
body[data-plane="workspace"] .cand-contact-row dd { margin: 0; min-width: 0; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .cand-contact-row dd p { margin: 0; }
body[data-plane="workspace"] .cand-contact-row > details { justify-self: end; }
body[data-plane="workspace"] .cand-contact-row > details[open] { grid-column: 1 / -1; justify-self: stretch; }
/* **107-j**: a withheld instruction reads under the row it would change, full width. */
body[data-plane="workspace"] .cand-contact-row > .withheld { grid-column: 1 / -1; margin: 0; }
body[data-plane="workspace"] .cand-row-act {
  display: inline-flex; align-items: center; gap: 10px; height: 40px; padding: 0 16px;
  box-sizing: border-box; border: 1.5px solid var(--h-accent); border-radius: 8px;
  color: var(--h-accent); font-size: var(--type-meta); font-weight: var(--h-w-semi);
  cursor: pointer; list-style: none; white-space: nowrap;
}
body[data-plane="workspace"] .cand-row-act::-webkit-details-marker { display: none; }
body[data-plane="workspace"] .cand-row-act:hover { background: var(--h-accent-soft); }
body[data-plane="workspace"] .cand-row-act .icon { width: 16px; height: 16px; margin: 0; }
/* The right column's cards. */
body[data-plane="workspace"] .cand-facts { display: grid; gap: 10px; margin: 16px 0 0; }
body[data-plane="workspace"] .cand-fact { display: grid; grid-template-columns: 160px minmax(0, 1fr); gap: 12px; }
body[data-plane="workspace"] .cand-fact dt { font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .cand-fact dd { margin: 0; font-size: var(--type-meta); color: var(--h-ink); overflow-wrap: anywhere; }
body[data-plane="workspace"] .cand-docs { margin: 14px 0 0; padding: 0; list-style: none; display: grid; gap: 12px; }
body[data-plane="workspace"] .cand-doc { display: flex; gap: 16px; align-items: flex-start; }
body[data-plane="workspace"] .cand-doc-tile {
  flex: 0 0 44px; display: inline-flex; align-items: flex-end; justify-content: center;
  width: 44px; height: 52px; padding-bottom: 8px; box-sizing: border-box; border-radius: 8px;
  background: var(--h-danger-soft, var(--h-warn-soft)); color: var(--h-danger);
  font-size: var(--h-t-op-th); font-weight: var(--h-w-bold);
}
body[data-plane="workspace"] .cand-doc-name:not(#cand-x) { margin: 2px 0 0; font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); overflow-wrap: anywhere; }
body[data-plane="workspace"] .cand-doc-meta:not(#cand-x) { margin: 2px 0 0; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .cand-timeline { position: relative; margin: 16px 0 0; padding: 0; list-style: none; display: grid; gap: 14px; }
body[data-plane="workspace"] .cand-timeline li { position: relative; display: flex; gap: 20px; }
body[data-plane="workspace"] .cand-timeline li:not(:last-child)::before {
  content: ""; position: absolute; left: 6px; top: 16px; bottom: -14px; width: 2px;
  background: var(--h-line);
}
body[data-plane="workspace"] .cand-dot {
  position: relative; z-index: 1; flex: 0 0 14px; width: 14px; height: 14px; margin-top: 3px;
  box-sizing: border-box; border-radius: 50%; border: 2px solid var(--h-line-strong); background: var(--h-card);
}
body[data-plane="workspace"] .cand-dot-on { border-color: var(--h-accent); background: var(--h-accent); }
body[data-plane="workspace"] .cand-event:not(#cand-x) { margin: 0; font-size: var(--type-meta); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .cand-event-meta:not(#cand-x) { margin: 2px 0 0; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .cand-excluded { margin: 14px 0 0; }
body[data-plane="workspace"] .cand-excluded p { margin: 0; }
body[data-plane="workspace"] .cand-future-form:not(#cand-x) { display: block; max-width: none; margin: 14px 0 0; }
body[data-plane="workspace"] .cand-future-fields { display: grid; grid-template-columns: minmax(0, 1fr) 180px; gap: 14px; }
body[data-plane="workspace"] .cand-future-fields .field:not(#cand-x) { display: block; max-width: none; margin: 0; }
body[data-plane="workspace"] .cand-future-fields label { display: block; margin: 0 0 8px; font-size: var(--type-meta); color: var(--h-ink); }
body[data-plane="workspace"] .cand-future-fields input:not(#cand-x) { width: 100%; max-width: none; box-sizing: border-box; height: 40px; }
body[data-plane="workspace"] .cand-future-acts { display: flex; flex-wrap: wrap; gap: 12px; margin: 14px 0 0; }
body[data-plane="workspace"] .cand-future-acts form { margin: 0; }
/* ux/124 §5: *Do not consider* as the master's row (mark, title, line) with an outlined
   button at its right — pale while *Why?* is empty (86-g), never a checkbox. */
body[data-plane="workspace"] .cand-exclude-row {
  display: grid; grid-template-columns: 24px minmax(0, 1fr) auto; gap: 14px; align-items: center; margin: 14px 0 0;
  padding: 14px 16px; border: 1px solid var(--h-line); border-radius: 10px; background: var(--h-fill-11); }
body[data-plane="workspace"] .cand-exclude-mark { display: inline-flex; color: var(--h-muted); }
body[data-plane="workspace"] .cand-exclude-mark .icon { width: 22px; height: 22px; margin: 0; }
body[data-plane="workspace"] .cand-exclude-title:not(#cand-x) { margin: 0; font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .cand-exclude-line:not(#cand-x) { margin: 2px 0 0; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .cand-future-form .cand-exclude:not(#cand-x):not(#act-86g) {
  display: inline-flex; align-items: center; height: 40px; margin: 0; padding: 0 16px;
  border: 1px solid var(--h-line-strong); border-radius: 8px; background: var(--h-card); color: var(--h-ink); }
body[data-plane="workspace"] .cand-future-form:has(:invalid) .cand-exclude:not(#cand-x):not(#act-86g) {
  background: var(--h-card); border-color: var(--h-line); color: var(--h-muted); }
body[data-plane="workspace"] :is(.cand-exclude, .cand-archive, .cand-again) .icon { width: 18px; height: 18px; margin: 0; }
body[data-plane="workspace"] .cand-future-acts .cand-archive:not(#cand-x) { display: inline-flex; align-items: center; gap: 10px; }
/* ux/124 §5 (ANSWER 126-a (1)): *Evaluate again* in the claims card's foot, beside the
   Intelligence door, its freshness line under it; the uploader opens in Documents. */
body[data-plane="workspace"] .cand-claims-foot { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 12px 20px; margin: 16px 0 0; }
body[data-plane="workspace"] .cand-claims-foot .evidence-onward { margin: 0; }
body[data-plane="workspace"] .cand-admin-again { display: grid; gap: 6px; }
body[data-plane="workspace"] .cand-admin-again .action-form { margin: 0; }
body[data-plane="workspace"] .cand-upload { display: none; margin: 14px 0 0; }
body[data-plane="workspace"] .cand-upload:target { display: block; }
body[data-plane="workspace"] .cand-upload .uploader-zone { margin: 0 0 14px; padding: 18px var(--s4) 48px; }
/* The master outlines *Upload document*; 86-g fills every act, so two unworn ids. */
body[data-plane="workspace"] a.action.cand-upload-act:not(#cand-x):not(#cand-y) {
  display: inline-flex; align-items: center; gap: 8px; margin-left: auto; min-height: 40px; padding: 0 14px;
  border: 1px solid var(--h-line); border-radius: 10px; background: var(--h-card); color: var(--h-accent); }
body[data-plane="workspace"] .cand-upload-act .icon { width: 18px; height: 18px; margin: 0; }
/* The Evaluation row's state dot, before an evaluation (ux/124 §5). */
body[data-plane="workspace"] .cand-state-dot {
  display: inline-block; width: 10px; height: 10px; margin: 0 10px 0 0; border-radius: 50%; background: var(--h-line-strong); vertical-align: middle; }
/* ux/124 §5: the claims card before an evaluation — two panels, a hairline between. */
body[data-plane="workspace"] .cand-claims-split { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); gap: 0; }
body[data-plane="workspace"] .cand-claims-left { display: grid; align-content: start; gap: 18px; padding: 0 28px 0 0; min-width: 0; }
body[data-plane="workspace"] .cand-claims-single > .cand-claims-left { padding: 0; }
body[data-plane="workspace"] .cand-noeval {
  display: flex; align-items: center; gap: 18px; padding: 18px 20px; border-radius: 12px; background: var(--h-accent-soft); }
body[data-plane="workspace"] .cand-noeval-mark {
  display: inline-flex; flex: none; align-items: center; justify-content: center; width: 56px; height: 56px;
  border: 1.5px dashed var(--h-line-strong); border-radius: 50%; color: var(--h-muted); }
body[data-plane="workspace"] .cand-noeval-mark .icon { width: 24px; height: 24px; margin: 0; }
body[data-plane="workspace"] .cand-noeval-title:not(#cand-x) { margin: 0; font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .cand-noeval-line:not(#cand-x) { margin: 4px 0 0; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .cand-evaluate { margin: 0; }
body[data-plane="workspace"] .cand-evaluate button .icon { width: 18px; height: 18px; margin: 0 0 0 10px; }
body[data-plane="workspace"] .cand-explain {
  display: grid; align-content: start; gap: 22px; margin: 0; padding: 4px 0 0 28px; list-style: none; border-left: 1px solid var(--h-line); }
body[data-plane="workspace"] .cand-explain-row { display: grid; grid-template-columns: 44px minmax(0, 1fr); gap: 16px; align-items: start; }
body[data-plane="workspace"] .cand-explain-mark {
  display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; border-radius: 12px; }
body[data-plane="workspace"] .cand-explain-mark .icon { width: 22px; height: 22px; margin: 0; }
body[data-plane="workspace"] .cand-explain-green { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="workspace"] .cand-explain-violet { background: var(--h-policy-soft); color: var(--h-policy); }
body[data-plane="workspace"] .cand-explain-teal { background: var(--h-area-organisation-soft); color: var(--h-area-organisation); }
body[data-plane="workspace"] .cand-explain-title:not(#cand-x) { margin: 0; font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .cand-explain-line:not(#cand-x) { margin: 4px 0 0; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .cand-again:not(#cand-x) { display: inline-flex; align-items: center; gap: 10px; }
@media (max-width: 48rem) {
  body[data-plane="workspace"] .cand-head { align-items: flex-start; gap: 14px; padding: 0; }
  body[data-plane="workspace"] .cand-monogram { flex-basis: 48px; width: 48px; height: 48px; font-size: var(--avatar-initials-small); }
  body[data-plane="workspace"] .cand-monogram > .initials-disc { font-size: var(--avatar-initials-small); }
  body[data-plane="workspace"] .cand-title-row h1 { flex-basis: 100%; }
  body[data-plane="workspace"] .cand-grid { grid-template-columns: minmax(0, 1fr); grid-template-areas: "main" "side" "admin"; }
  body[data-plane="workspace"] .cand-contact-row { grid-template-columns: 40px minmax(0, 1fr); }
  body[data-plane="workspace"] .cand-contact-row dd, body[data-plane="workspace"] .cand-contact-row > details { grid-column: 1 / -1; justify-self: start; }
  body[data-plane="workspace"] .cand-fact { grid-template-columns: 1fr; gap: 2px; }
  body[data-plane="workspace"] .cand-future-fields { grid-template-columns: minmax(0, 1fr); }
  body[data-plane="workspace"] .cand-claims-split { grid-template-columns: minmax(0, 1fr); gap: 20px; }
  body[data-plane="workspace"] .cand-claims-left { padding: 0; }
  body[data-plane="workspace"] .cand-explain { padding: 20px 0 0; border-left: 0; border-top: 1px solid var(--h-line); }
  body[data-plane="workspace"] .cand-exclude-row { grid-template-columns: 24px minmax(0, 1fr); }
  body[data-plane="workspace"] .cand-exclude-row > .cand-exclude:not(#cand-x):not(#act-86g) { grid-column: 2; justify-self: start; }
}

/* -- 10b · Candidate Intelligence, drawn to the owner's master (108) ----------------------
   Measured at the master's 1222px: the head (back link, a 40px title, the lede; the
   candidate block at the right), then two columns 746 and 400 wide with a 20px gap. Cards
   share page 3's chrome (`.cand-card`). */
body[data-plane="workspace"] .ci-head { display: flex; justify-content: space-between; gap: 24px; margin: 4px 0 20px; }
body[data-plane="workspace"] .ci-head h1 {
  margin: 10px 0 0; font-size: var(--type-page-title); line-height: var(--lh-tight);
  letter-spacing: var(--track-title); font-weight: var(--h-w-bold); color: var(--h-ink);
}
body[data-plane="workspace"] .ci-lede:not(#cand-x) { margin: 8px 0 0; font-size: var(--type-lede); color: var(--h-muted); }
body[data-plane="workspace"] .ci-person { display: flex; align-items: flex-start; gap: 18px; padding-top: 20px; }
body[data-plane="workspace"] .ci-monogram { flex-basis: 68px; width: 68px; height: 68px; }
body[data-plane="workspace"] .ci-person-name:not(#cand-x) { margin: 4px 0 0; font-size: var(--type-card-title); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="workspace"] .ci-person-standing:not(#cand-x) { margin: 2px 0 8px; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .ci-grid {
  display: grid; grid-template-columns: minmax(0, 746fr) minmax(0, 400fr);
  grid-template-areas: "reading side" "main side"; grid-template-rows: auto 1fr;
  gap: 20px; align-items: start;
}
body[data-plane="workspace"] .ci-reading { grid-area: reading; }
body[data-plane="workspace"] .ci-main { grid-area: main; display: grid; gap: 20px; min-width: 0; }
body[data-plane="workspace"] .ci-side { grid-area: side; display: grid; gap: 20px; min-width: 0; }
body[data-plane="workspace"] .ci-standing:not(#cand-x) { margin: 12px 0 0 56px; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .ci-read-at:not(#cand-x) {
  display: flex; align-items: center; gap: 14px; margin: 16px 0 0; padding: 14px 0 0 14px;
  border-top: 1px solid var(--h-line); font-size: var(--type-meta); color: var(--h-muted);
}
body[data-plane="workspace"] .ci-read-at .icon { width: 16px; height: 16px; margin: 0; }
body[data-plane="workspace"] .ci-advisory {
  display: flex; align-items: center; gap: 16px; margin: 16px 0 0; padding: 14px 16px;
  border-radius: 10px; background: color-mix(in srgb, var(--h-accent-soft) 80%, var(--h-card));
}
body[data-plane="workspace"] .ci-advisory p { margin: 0; font-size: var(--type-meta); color: var(--h-ink); }
body[data-plane="workspace"] .ci-advisory-mark {
  flex: 0 0 36px; display: inline-flex; align-items: center; justify-content: center;
  width: 36px; height: 36px; border-radius: 50%; background: var(--h-accent-soft); color: var(--h-accent);
}
body[data-plane="workspace"] .ci-advisory-mark .icon { width: 18px; height: 18px; }
body[data-plane="workspace"] .ci-rows { margin: 8px 0 0; padding: 0; list-style: none; }
body[data-plane="workspace"] .ci-row {
  display: grid; grid-template-columns: 46px minmax(0, 1fr) minmax(0, 1fr); gap: 18px;
  align-items: start; padding: 14px 0; border-top: 1px solid var(--h-line);
}
body[data-plane="workspace"] .ci-mark {
  display: inline-flex; align-items: center; justify-content: center; width: 46px; height: 46px;
  border-radius: 50%;
}
body[data-plane="workspace"] .ci-mark .icon { width: 22px; height: 22px; }
body[data-plane="workspace"] .ci-mark-green { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="workspace"] .ci-mark-red { background: var(--h-danger-soft); color: var(--h-danger); }
body[data-plane="workspace"] .ci-mark-blue { background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .ci-label:not(#cand-x) { margin: 2px 0 0; font-size: var(--type-meta); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .ci-reading-figure:not(#cand-x) { margin: 4px 0 0; font-size: var(--type-card-title); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="workspace"] .ci-meaning:not(#cand-x) { margin: 4px 0 0; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .ci-note:not(#cand-x) {
  margin: 0; padding: 12px 16px; border-left: 3px solid; border-radius: 6px;
  font-size: var(--type-meta); line-height: var(--lh-card); color: var(--h-muted);
}
body[data-plane="workspace"] .ci-note-green { border-color: var(--h-ok); background: color-mix(in srgb, var(--h-ok-soft) 60%, var(--h-card)); }
body[data-plane="workspace"] .ci-note-red { border-color: var(--h-danger); background: color-mix(in srgb, var(--h-danger-soft) 70%, var(--h-card)); }
body[data-plane="workspace"] .ci-note-blue { border-color: color-mix(in srgb, var(--h-accent) 40%, var(--h-card)); background: color-mix(in srgb, var(--h-accent-soft) 70%, var(--h-card)); }
body[data-plane="workspace"] .ci-note-grey { border-color: var(--h-line-strong); background: var(--h-fill-08); }
body[data-plane="workspace"] .cand-card .actions { margin: 16px 0 0; }
body[data-plane="workspace"] .ci-absences { margin: 12px 0 0; padding: 0; list-style: none; }
body[data-plane="workspace"] .ci-source { align-items: center; padding: 14px; border: 1px solid var(--h-line); border-radius: 10px; }
body[data-plane="workspace"] .ci-about {
  display: flex; gap: 16px; padding: 20px; border: 1px solid color-mix(in srgb, var(--h-accent) 15%, var(--h-card));
  border-radius: 14px; background: color-mix(in srgb, var(--h-accent-soft) 85%, var(--h-card));
}
body[data-plane="workspace"] .ci-about-mark { display: inline-flex; }
body[data-plane="workspace"] .ci-about-mark .icon { width: 28px; height: 28px; }
body[data-plane="workspace"] .ci-about-mark .icon circle { fill: var(--h-accent); stroke: var(--h-accent); }
body[data-plane="workspace"] .ci-about-mark .icon path { stroke: var(--h-card); }
body[data-plane="workspace"] .ci-about h2 { margin: 2px 0 6px; font-size: var(--type-meta); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="workspace"] .ci-about .note:not(#cand-x) {
  margin: 0; padding: 0; border: 0; background: none; font-size: var(--type-meta); color: var(--h-muted);
}
@media (max-width: 48rem) {
  body[data-plane="workspace"] .ci-head { flex-direction: column; gap: 12px; }
  body[data-plane="workspace"] .ci-person { padding-top: 0; }
  body[data-plane="workspace"] .ci-grid { grid-template-columns: minmax(0, 1fr); grid-template-areas: "reading" "side" "main"; }
  body[data-plane="workspace"] .ci-row { grid-template-columns: 46px minmax(0, 1fr); }
  body[data-plane="workspace"] .ci-row > .ci-note { grid-column: 1 / -1; }
  body[data-plane="workspace"] .ci-standing:not(#cand-x) { margin-left: 0; }
}

/* -- Page 9 · Candidates, drawn to the owner's master (109, `candidates_list.png`) --------
   Measured at the master's 1774px: one white card, radius 16; a pale header row; rows 110
   tall with a 66px monogram (blue, violet, amber by row), the name bold with its chevron,
   the grey subline; *Uploaded* with its mark; the date and how long ago; the standing pill;
   and *Showing N of N candidates* at the foot. */
body[data-plane="workspace"] .cl-card {
  margin: 0; padding: 28px; border: 1px solid var(--h-line); border-radius: 16px;
  background: var(--h-card); box-shadow: 0 10px 34px color-mix(in srgb, var(--h-ink) 6%, transparent);
}
body[data-plane="workspace"] .cl-table {
  width: 100%; border: 1px solid var(--h-line); border-radius: 12px; border-collapse: separate;
  border-spacing: 0; overflow: hidden;
}
body[data-plane="workspace"] .cl-table thead th {
  padding: 18px 24px; background: var(--h-fill-08); text-align: left;
  font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-muted);
}
body[data-plane="workspace"] .cl-table thead th .icon { width: 18px; height: 18px; margin: 0 0 0 8px; vertical-align: -3px; }
body[data-plane="workspace"] :is(.cl-info, .cl-order) { display: inline-flex; vertical-align: middle; }
body[data-plane="workspace"] .cl-table thead th :is(.cl-info, .cl-order) .icon { display: inline-block; }
body[data-plane="workspace"] .cl-order { color: var(--h-accent); }
body[data-plane="workspace"] .cl-table thead th:nth-child(3) { color: var(--h-ink); }
body[data-plane="workspace"] .cl-table tbody :is(th, td) {
  padding: 18px 24px; border-top: 1px solid var(--h-line); text-align: left; vertical-align: middle;
  font-weight: var(--h-w-normal);
}
body[data-plane="workspace"] .cl-cell { display: flex; align-items: center; gap: 18px; }
body[data-plane="workspace"] .cl-mono {
  flex: 0 0 60px; display: inline-flex; align-items: center; justify-content: center;
  width: 60px; height: 60px; border-radius: 50%; font-size: var(--type-lede); font-weight: var(--h-w-semi);
}
body[data-plane="workspace"] .cl-mono-blue { background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .cl-mono-violet { background: color-mix(in srgb, var(--mark-violet) 12%, var(--h-card)); color: var(--mark-violet); }
body[data-plane="workspace"] .cl-mono-amber { background: var(--h-warn-soft); color: var(--h-warn); }
body[data-plane="workspace"] .cl-name {
  display: inline-flex; align-items: center; gap: 12px; font-size: var(--type-lede);
  font-weight: var(--h-w-bold); color: var(--h-ink); text-decoration: none;
}
body[data-plane="workspace"] .cl-name:hover { color: var(--h-accent); }
body[data-plane="workspace"] .cl-name .icon { width: 16px; height: 16px; margin: 0; color: var(--h-muted); }
body[data-plane="workspace"] .cl-sub:not(#cand-x) { margin: 4px 0 0; font-size: var(--type-body); color: var(--h-muted); }
body[data-plane="workspace"] .cl-arrived { gap: 14px; font-size: var(--type-body); color: var(--h-ink); }
body[data-plane="workspace"] .cl-arrived .icon { width: 22px; height: 22px; margin: 0; color: var(--h-muted); }
body[data-plane="workspace"] .cl-date:not(#cand-x) { margin: 0; font-size: var(--type-body); color: var(--h-ink); }
body[data-plane="workspace"] .cl-pill {
  display: inline-flex; align-items: center; gap: 10px; padding: 8px 18px; border-radius: 999px;
  font-size: var(--type-pill); font-weight: var(--h-w-semi);
}
body[data-plane="workspace"] .cl-pill-dot { width: 10px; height: 10px; border-radius: 50%; background: currentColor; }
body[data-plane="workspace"] .cl-pill-green { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="workspace"] .cl-pill-blue { background: var(--h-accent-soft); color: var(--h-accent-hi); }
body[data-plane="workspace"] .cl-pill-grey { background: var(--h-chip); color: var(--h-ink); }
body[data-plane="workspace"] .cl-pill-grey .cl-pill-dot { background: var(--h-muted); }
body[data-plane="workspace"] .cl-pill-red { background: var(--h-danger-soft); color: var(--h-danger); }
body[data-plane="workspace"] .cl-foot:not(#cand-x) { margin: 22px 0 0; font-size: var(--type-body); color: var(--h-muted); }
@media (max-width: 48rem) {
  body[data-plane="workspace"] .cl-card { padding: 16px; }
  body[data-plane="workspace"] .cl-table thead { display: none; }
  body[data-plane="workspace"] .cl-table, body[data-plane="workspace"] .cl-table tbody { display: block; border: 0; }
  body[data-plane="workspace"] .cl-table tbody tr.candidate-row:not(#cand-x) {
    display: grid; grid-template-columns: minmax(0, 1fr); gap: 10px; padding: 14px 0;
    border-top: 1px solid var(--h-line); }
  body[data-plane="workspace"] .cl-table tbody tr.candidate-row:not(#cand-x) > :is(th, td) {
    display: block; width: auto; padding: 0; border: 0; }
  body[data-plane="workspace"] .cl-mono { flex-basis: 48px; width: 48px; height: 48px; }
  /* 109: name, the standing, then how and when they arrived. */
  body[data-plane="workspace"] .cl-table tr > td:nth-child(4) { order: 2; }
  body[data-plane="workspace"] .cl-table tr > td:nth-child(2) { order: 3; }
  body[data-plane="workspace"] .cl-table tr > td:nth-child(3) { order: 4; }
}

/* -- 108-b: 10b's *The claims these are counted over* — the master's filled blue control as
   a closed disclosure; opened, page 3's claim list. The chevron turns when open. */
body[data-plane="workspace"] .ci-counted-disclosure { margin: 16px 0 0; }
body[data-plane="workspace"] .ci-counted-summary {
  display: inline-flex; align-items: center; gap: 12px; height: 44px; padding: 0 20px;
  box-sizing: border-box; border-radius: 8px; background: var(--h-accent); color: var(--h-card);
  font-weight: var(--h-w-semi); cursor: pointer; list-style: none;
}
body[data-plane="workspace"] .ci-counted-summary::-webkit-details-marker { display: none; }
body[data-plane="workspace"] .ci-counted-summary:hover { background: var(--accent-deep); color: var(--h-card); }
body[data-plane="workspace"] .ci-counted-summary .icon { width: 16px; height: 16px; margin: 0; transition: transform 120ms; }
body[data-plane="workspace"] .ci-counted-disclosure[open] .ci-counted-summary .icon { transform: rotate(90deg); }
body[data-plane="workspace"] .ci-counted { margin: 8px 0 0; }
@media (prefers-reduced-motion: reduce) {
  body[data-plane="workspace"] .ci-counted-summary .icon { transition: none; }
}

/* -- 107-g: the Timeline's *Show all ({N})* — a quiet disclosure above the recent eight. */
body[data-plane="workspace"] .cand-timeline-earlier { margin: 14px 0 0; }
body[data-plane="workspace"] .cand-timeline-earlier > summary {
  cursor: pointer; color: var(--h-link); font-size: var(--type-meta);
}
body[data-plane="workspace"] .cand-timeline-earlier[open] > summary { margin-bottom: 4px; }

/* -- 108-c: 10b's *This reading*, redrawn to the owner's new master — one head row: the
   tile, the bold title, a thin divider, a pale-blue pill, a dot and the made instant. */
body[data-plane="workspace"] .ci-reading-head { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 18px; }
body[data-plane="workspace"] .ci-reading-head h2 {
  margin: 0; font-size: var(--type-card-title); font-weight: var(--h-w-bold); color: var(--h-ink);
}
body[data-plane="workspace"] .ci-reading-divider { width: 1px; height: 26px; background: var(--h-line); }
body[data-plane="workspace"] .ci-reading-pill {
  display: inline-flex; align-items: center; padding: 6px 16px; border-radius: 999px;
  background: color-mix(in srgb, var(--h-accent) 13%, var(--h-card)); color: var(--h-accent);
  font-size: var(--type-meta); font-weight: var(--h-w-semi);
}
body[data-plane="workspace"] .ci-reading-dot { width: 5px; height: 5px; border-radius: 50%;
  background: color-mix(in srgb, var(--h-accent) 45%, var(--h-card)); }
body[data-plane="workspace"] .ci-reading-made { font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .ci-reading-meta { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 8px 18px; }
body[data-plane="workspace"] :is(.ci-reading-pill, .ci-reading-made) { white-space: nowrap; }
body[data-plane="workspace"] .ci-reading :is(.ci-standing, .ci-read-at):not(#cand-x) { max-width: none; }
body[data-plane="workspace"] .ci-reading .ci-standing:not(#cand-x) { margin: 16px 0 0; }
@media (max-width: 48rem) {
  body[data-plane="workspace"] :is(.ci-reading-divider, .ci-reading-dot) { display: none; }
  body[data-plane="workspace"] .ci-reading-head h2 { flex-basis: calc(100% - 58px); }
}
/* ==========================================================================
   ux/116 items 5–6 · page 3's lower cards, to the owner's `hiring_plan_design_2` and
   `_design_3` masters: the tile mark, the title over its lede, the card's one outlined act
   at the right; the role's facts and the brief's file row in tinted insets; the Job team's
   band and person rows; Job administration's neutral inner cards with the red on the button.
   Agreed colours win over the masters: 9's disc tints, the product's pill tokens, and a
   neutral region (U-2). The three outlined acts go on 86-g's list.
   ========================================================================== */
body[data-plane="workspace"] .hp-region:not(#hp-x) { display: grid; gap: 18px; }
body[data-plane="workspace"] .hp-chead { display: grid; grid-template-columns: 56px minmax(0, 1fr) auto; gap: 18px; align-items: start; }
body[data-plane="workspace"] .hp-chead-words { min-width: 0; padding-top: 4px; }
body[data-plane="workspace"] .hp-chead .region-name:not(#hp-x) { margin: 0; font-size: var(--type-section); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="workspace"] .hp-chead .region-lede:not(#hp-x) { margin: 4px 0 0; font-size: var(--type-body); color: var(--h-muted); }
body[data-plane="workspace"] .hp-ctile { display: inline-flex; align-items: center; justify-content: center; width: 56px; height: 56px; border-radius: 12px; }
body[data-plane="workspace"] .hp-ctile .icon { width: 26px; height: 26px; margin: 0; }
body[data-plane="workspace"] .hp-ctile-blue { background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .hp-ctile-danger { background: var(--h-fill-08); color: var(--h-danger); }
body[data-plane="workspace"] .hp-region :is(a, button).action.hp-card-act:not(#hp-x):not(#hp-y),
body[data-plane="workspace"] .hp-region :is(a, button).action.hp-card-act:not(#hp-x):not(#hp-y):hover {
  display: inline-flex; align-items: center; gap: 10px; min-height: 44px; padding: 0 20px; border: 1px solid var(--h-line);
  border-radius: 8px; background: var(--h-card); color: var(--h-accent); font-size: var(--type-body);
  font-weight: var(--h-w-semi); text-decoration: none; white-space: nowrap; box-shadow: none; transform: none; }
body[data-plane="workspace"] .hp-card-act .icon { width: 20px; height: 20px; margin: 0; }
body[data-plane="workspace"] .hp-take-off:not(#hp-x) { flex: 0 0 auto; }
/* The role's facts: one row each with its mark; the label quiet, the value bold. */
body[data-plane="workspace"] .hp-role-facts:not(#hp-x) {
  display: grid; grid-template-columns: minmax(0, 1fr); gap: 0; margin: 0; padding: 4px 24px;
  border: 1px solid var(--h-line); border-radius: 10px; background: var(--h-fill-12); }
body[data-plane="workspace"] .hp-fact-row { display: grid; grid-template-columns: 40px 220px minmax(0, 1fr); gap: 16px; align-items: center; min-height: 64px; }
body[data-plane="workspace"] .hp-fact-row + .hp-fact-row { border-top: 1px solid var(--h-line); }
body[data-plane="workspace"] .hp-fact-mark { display: inline-flex; color: var(--h-muted); }
body[data-plane="workspace"] .hp-fact-mark .icon { width: 22px; height: 22px; margin: 0; }
body[data-plane="workspace"] .hp-role-facts dt:not(#hp-x) { margin: 0; font-size: var(--type-body); color: var(--h-muted); }
body[data-plane="workspace"] .hp-role-facts dd:not(#hp-x) { margin: 0; font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); overflow-wrap: anywhere; }
body[data-plane="workspace"] .hp-role-facts dd.fact-unset:not(#hp-x) { font-weight: var(--h-w-normal); color: var(--h-muted); }
/* The Job team. */
body[data-plane="workspace"] .hp-team-band {
  display: flex; align-items: center; gap: 14px; min-height: 56px; padding: 0 24px; border-radius: 10px;
  background: var(--h-fill-12); }
body[data-plane="workspace"] .hp-band-mark { display: inline-flex; color: var(--h-accent); }
body[data-plane="workspace"] .hp-band-mark .icon { width: 24px; height: 24px; margin: 0; }
body[data-plane="workspace"] .hp-band-label { font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .hp-band-count {
  display: inline-flex; align-items: center; justify-content: center; min-width: 32px; height: 32px; border-radius: 50%;
  background: var(--h-fill-08); color: var(--h-ink); font-size: var(--type-body); font-weight: var(--h-w-semi); }
body[data-plane="workspace"] .hp-people { display: grid; margin: 0; padding: 0; list-style: none; }
/* **ux/116 §13, the owner's master**: the disc, the name over the email (the email once where
   no name is set), the role pill with its icon, a hairline and the role's line, Take off. */
body[data-plane="workspace"] #access .assignee-row.hp-person:not(#hp-x) {
  display: grid; grid-template-columns: 56px minmax(0, 1fr) 190px minmax(0, 1.5fr) auto; gap: 18px 24px; align-items: center;
  padding: 16px 0; border-bottom: 1px solid var(--h-line); }
body[data-plane="workspace"] .hp-person-disc { display: inline-flex; }
body[data-plane="workspace"] .hp-person-disc > span:not(#hp-x) { width: 56px; height: 56px; font-size: var(--avatar-initials-small); }
body[data-plane="workspace"] .hp-person-words { display: grid; gap: 4px; justify-items: start; min-width: 0; }
body[data-plane="workspace"] .hp-person-name { font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); overflow-wrap: anywhere; }
body[data-plane="workspace"] .hp-person-email { font-size: var(--type-meta); color: var(--h-muted); overflow-wrap: anywhere; }
body[data-plane="workspace"] .hp-role-pill {
  display: inline-flex; align-items: center; gap: 8px; justify-self: start; padding: 6px 14px; border-radius: 8px;
  font-size: var(--type-pill); font-weight: var(--h-w-semi); }
body[data-plane="workspace"] .hp-role-pill .icon { width: 16px; height: 16px; margin: 0; }
body[data-plane="workspace"] .hp-role-pill-green { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="workspace"] .hp-role-pill-blue { background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .hp-role-pill-violet { background: var(--h-policy-soft); color: var(--h-policy); }
body[data-plane="workspace"] .hp-role-pill-grey { background: var(--h-fill-11); color: var(--h-ink-2); }
body[data-plane="workspace"] .hp-person-role-line {
  padding-left: 24px; border-left: 1px solid var(--h-line); font-size: var(--type-body); color: var(--h-muted); }
body[data-plane="workspace"] .hp-person .action-form { margin: 0; }
body[data-plane="workspace"] .hp-drawer .hp-people-panel form.action-form:not(#hp-x):not(#hp-y) { display: grid; gap: 10px; flex: 0 0 auto; }
body[data-plane="workspace"] .hp-people-panel .action-form .field { margin: 0; }
body[data-plane="workspace"] .hp-people-panel .action-form button.action { justify-self: start; }
/* The source brief. */
body[data-plane="workspace"] .hp-file-row {
  display: grid; grid-template-columns: 56px minmax(0, 1fr); gap: 18px; align-items: center; padding: 16px 20px;
  border-radius: 10px; background: var(--h-fill-12); }
body[data-plane="workspace"] .hp-file-mark {
  display: inline-flex; align-items: center; justify-content: center; width: 56px; height: 56px; border-radius: 8px;
  border: 1px solid var(--h-line); background: var(--h-card); color: var(--h-muted); }
body[data-plane="workspace"] .hp-file-mark .icon { width: 24px; height: 24px; margin: 0; }
body[data-plane="workspace"] .hp-file-badge {
  display: inline-flex; align-items: center; justify-content: center; min-width: 26px; height: 24px; padding: 0 4px;
  border-radius: 4px; color: var(--h-card); font-size: var(--type-body); font-weight: var(--h-w-semi); }
body[data-plane="workspace"] .hp-file-badge-word { background: var(--h-accent); }
body[data-plane="workspace"] .hp-file-badge-pdf { background: var(--h-danger); }
body[data-plane="workspace"] .hp-file-words { min-width: 0; }
body[data-plane="workspace"] #brief-panel .brief-name:not(#hp-x) { margin: 0; font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); overflow-wrap: anywhere; }
body[data-plane="workspace"] #brief-panel .brief-detail:not(#hp-x) { margin: 4px 0 0; font-size: var(--type-body); color: var(--h-muted); }
body[data-plane="workspace"] #brief-panel .ask:not(#hp-x) { margin: 0; }
body[data-plane="workspace"] #brief-panel .hp-replace-summary:not(#hp-x) {
  display: grid; grid-template-columns: 28px minmax(0, 1fr); gap: 12px; align-items: start; padding: 0 4px;
  list-style: none; cursor: pointer; }
body[data-plane="workspace"] .hp-replace-summary::-webkit-details-marker { display: none; }
body[data-plane="workspace"] .hp-replace-mark { display: inline-flex; color: var(--h-accent); }
body[data-plane="workspace"] .hp-replace-mark .icon { width: 24px; height: 24px; margin: 0; }
body[data-plane="workspace"] .hp-replace-words { display: grid; gap: 8px; }
body[data-plane="workspace"] #brief-panel .hp-replace-summary:not(#hp-x):not(#hp-y) { text-decoration: none; }
body[data-plane="workspace"] .hp-replace-link { color: var(--h-accent); font-size: var(--type-body); text-decoration: underline; }
body[data-plane="workspace"] .hp-replace-line { color: var(--h-muted); font-size: var(--type-meta); }
/* Job administration: the region neutral, the inner card an inset with a hairline. */
body[data-plane="workspace"] .hp-inner { padding: 22px 24px; border: 1px solid var(--h-line); border-radius: 10px; background: var(--h-fill-12); }
body[data-plane="workspace"] .hp-inner-discard { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 18px 24px; align-items: center; }
body[data-plane="workspace"] .hp-inner-title:not(#hp-x) { margin: 0 0 8px; font-size: var(--type-card-title); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .hp-inner-words .sentence:not(#hp-x) { margin: 0 0 8px; font-size: var(--type-body); color: var(--h-ink-2); max-width: none; }
body[data-plane="workspace"] #administration #destruction:not(#hp-x) { margin: 0; padding: 0; border: 0; background: none; box-shadow: none; }
body[data-plane="workspace"] .hp-region a.action.action-destructive.hp-discard:not(#hp-x):not(#hp-y),
body[data-plane="workspace"] .hp-region a.action.action-destructive.hp-discard:not(#hp-x):not(#hp-y):hover {
  display: inline-flex; align-items: center; gap: 10px; min-height: 48px; padding: 0 24px; border: 1px solid var(--h-danger);
  border-radius: 8px; background: var(--h-card); color: var(--h-danger); font-size: var(--type-body);
  font-weight: var(--h-w-semi); text-decoration: none; white-space: nowrap; }
body[data-plane="workspace"] .hp-discard .icon { width: 20px; height: 20px; margin: 0; }
body[data-plane="workspace"] details.hp-inner > summary { font-size: var(--type-lede); font-weight: var(--h-w-semi); color: var(--h-ink); cursor: pointer; }
@media (max-width: 48rem) {
  body[data-plane="workspace"] .hp-chead { grid-template-columns: 44px minmax(0, 1fr); gap: 12px 14px; }
  body[data-plane="workspace"] .hp-ctile { width: 44px; height: 44px; }
  body[data-plane="workspace"] .hp-chead > .hp-card-act { grid-column: 1 / -1; justify-self: start; }
  body[data-plane="workspace"] .hp-role-facts:not(#hp-x) { padding: 4px 14px; }
  body[data-plane="workspace"] .hp-fact-row { grid-template-columns: 28px minmax(0, 1fr); gap: 2px 12px; padding: 12px 0; min-height: 0; }
  body[data-plane="workspace"] .hp-fact-row dd { grid-column: 2; }
  body[data-plane="workspace"] .hp-team-band { padding: 0 14px; }
  body[data-plane="workspace"] #access .assignee-row.hp-person:not(#hp-x) { grid-template-columns: 44px minmax(0, 1fr); gap: 8px 12px; }
  body[data-plane="workspace"] .hp-person-disc > span:not(#hp-x) { width: 44px; height: 44px; }
  body[data-plane="workspace"] .hp-person > :not(.hp-person-disc):not(.hp-person-words) { grid-column: 2; }
  body[data-plane="workspace"] .hp-person-role-line { padding-left: 0; border-left: 0; }
  body[data-plane="workspace"] .hp-file-row { grid-template-columns: 44px minmax(0, 1fr); gap: 12px; padding: 14px; }
  body[data-plane="workspace"] .hp-file-mark { width: 44px; height: 44px; }
  body[data-plane="workspace"] .hp-inner { padding: 16px; }
  body[data-plane="workspace"] .hp-inner-discard { grid-template-columns: minmax(0, 1fr); }
}
/* ==========================================================================
   ux/117 §1 · Unresolved work, to the owner's `recruiter_unresolved_work` master: each
   populated region a card (tile, heading, scope); one row shape — the disc, the action as
   the link with its → and the subject quiet under it, a hairline, the standing pill and
   what is said, a hairline, the stored provenance, and the round › inside the one row link
   (the row's own box contains it, never a <tr>: 112 item 8); alternate rows tinted.
   ========================================================================== */
body[data-plane="workspace"] .hp-ctile-grey { background: var(--h-fill-08); color: var(--h-ink); }
body[data-plane="workspace"] .uw-card + .uw-card { margin-top: 24px; }
body[data-plane="workspace"] .hp-card.uw-card:not(#hp-x) { padding-left: 24px; padding-right: 24px; }
body[data-plane="workspace"] .uw-card .hp-chead .region-lede:not(#hp-x), body[data-plane="workspace"] #nothing-open .nothing-open-scope:not(#hp-x) { max-width: none; }
body[data-plane="workspace"] .uw-card .listing:not(#hp-x) { margin: 0; padding: 0; border: 0; list-style: none; display: grid; gap: 0; }
body[data-plane="workspace"] .uw-card .work-row.uw-row:not(#hp-x) {
  position: relative; display: grid; grid-template-columns: 60px minmax(0, 1.05fr) minmax(0, 1.3fr) minmax(0, 0.8fr) 52px;
  gap: 0 24px; align-items: center; min-height: 104px; margin: 0; padding: 14px 12px; border: 0; border-radius: 0;
  background: none; box-shadow: none; }
body[data-plane="workspace"] .uw-card .work-row.uw-row:not(#hp-x):nth-child(even) { background: color-mix(in srgb, var(--h-accent) 4%, var(--h-card)); }
body[data-plane="workspace"] .uw-card .work-row.uw-row:not(#hp-x):hover .work-open { color: var(--h-accent); }
body[data-plane="workspace"] .uw-card .work-row.uw-row .work-disc,
body[data-plane="workspace"] .uw-card .work-row.uw-row .initials-disc { width: 60px; height: 60px; font-size: var(--type-pill); }
body[data-plane="workspace"] .uw-card .work-row.uw-row .work-disc {
  display: inline-flex; align-items: center; justify-content: center; border-radius: 50%;
  background: var(--h-accent-soft); color: var(--h-ink); font-weight: var(--h-w-semi); }
body[data-plane="workspace"] .uw-card .work-lead:not(#hp-x) { display: grid; gap: 6px; justify-items: start; min-width: 0; }
body[data-plane="workspace"] .uw-card .work-open:not(#hp-x) {
  display: inline-flex; align-items: center; gap: 12px; color: var(--h-accent); font-size: var(--type-body);
  font-weight: var(--h-w-semi); text-decoration: underline; text-underline-offset: 3px; }
body[data-plane="workspace"] .uw-card .work-open .icon { width: 20px; height: 20px; margin: 0; }
body[data-plane="workspace"] .uw-card a.work-open::after { content: ""; position: absolute; inset: 0; }
body[data-plane="workspace"] .work-detail { font-size: var(--type-body); }
body[data-plane="workspace"] .uw-card .work-lead .work-detail:not(#hp-x) { color: var(--h-muted); }
body[data-plane="workspace"] .uw-card .work-said:not(#hp-x) {
  display: grid; gap: 4px; justify-items: start; align-self: stretch; align-content: center; min-width: 0;
  padding-left: 24px; border-left: 1px solid var(--h-line); }
body[data-plane="workspace"] .uw-card .work-said .work-detail:not(#hp-x) { color: var(--h-muted); }
body[data-plane="workspace"] .uw-card .work-said :is(a, button) { position: relative; z-index: 1; }
body[data-plane="workspace"] .uw-settle { color: var(--h-ink); font-size: var(--type-body); }
body[data-plane="workspace"] .uw-pill {
  display: inline-flex; align-items: center; gap: 8px; margin: 0 0 4px; padding: 4px 14px; border-radius: 999px;
  font-size: var(--type-pill); font-weight: var(--h-w-semi); }
body[data-plane="workspace"] .uw-pill .icon { width: 16px; height: 16px; margin: 0; }
/* ANSWER 118-b: the pill's hue is the one state-colour map's (122-a), never fixed here. */
body[data-plane="workspace"] .uw-pill-amber { background: var(--h-warn-soft); color: var(--h-warn-ink); }
body[data-plane="workspace"] .uw-pill-amber .icon { color: var(--h-warn); }
body[data-plane="workspace"] .uw-pill-green { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="workspace"] .uw-pill-grey { background: var(--h-fill-08); color: var(--h-ink-2); }
body[data-plane="workspace"] .uw-pill-red { background: var(--h-danger-soft); color: var(--h-danger); }
body[data-plane="workspace"] .uw-right {
  display: grid; gap: 4px; align-self: stretch; align-content: center; min-width: 0; padding-left: 24px;
  border-left: 1px solid var(--h-line); }
body[data-plane="workspace"] .uw-prov { color: var(--h-muted); font-size: var(--type-body); overflow-wrap: anywhere; }
body[data-plane="workspace"] .uw-chev {
  grid-column: 5; display: inline-flex; align-items: center; justify-content: center; width: 52px; height: 52px; border-radius: 50%;
  background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .uw-chev .icon { width: 20px; height: 20px; margin: 0; }
body[data-plane="workspace"] #nothing-open .nothing-open-list:not(#hp-x) { display: grid; gap: 10px; margin: 0 0 0 74px; padding: 0; list-style: none; }
body[data-plane="workspace"] #nothing-open .nothing-open-list > li:not(#hp-x) { display: flex; align-items: center; gap: 14px; color: var(--h-muted); font-size: var(--type-body); }
body[data-plane="workspace"] .uw-tick { display: inline-flex; color: var(--h-muted); }
body[data-plane="workspace"] .uw-tick .icon { width: 18px; height: 18px; margin: 0; }
body[data-plane="workspace"] #nothing-open .nothing-open-scope:not(#hp-x) { margin: 0 0 0 74px; color: var(--h-muted); }
@media (max-width: 64rem) {
  body[data-plane="workspace"] .uw-card .work-row.uw-row:not(#hp-x) { grid-template-columns: 48px minmax(0, 1fr) 44px; gap: 10px 14px; padding: 14px 8px; }
  body[data-plane="workspace"] .uw-card .work-row.uw-row .work-disc,
  body[data-plane="workspace"] .uw-card .work-row.uw-row .initials-disc { width: 48px; height: 48px; }
  body[data-plane="workspace"] .uw-card .work-said:not(#hp-x), body[data-plane="workspace"] .uw-right { grid-column: 2 / 3; padding-left: 0; border-left: 0; }
  body[data-plane="workspace"] .uw-chev { grid-column: 3; grid-row: 1; width: 44px; height: 44px; }
  body[data-plane="workspace"] #nothing-open :is(.nothing-open-list, .nothing-open-scope):not(#hp-x) { margin-left: 0; }
}
/* ==========================================================================
   ux/117 §2 · 3b's decision card for the named hiring manager, to the owner's
   `hm_approve_job` master: one white card, two parts with a hairline between, each a round
   tile beside its heading, lede and act — the filled *Approve hiring plan*, then the reason
   and the outlined *Send back for changes*.
   ========================================================================== */
body[data-plane="workspace"] .decision-card.cs-decision:not(#hp-x) {
  display: grid; gap: 0; margin: 0; padding: 8px 32px; border: 1px solid var(--h-line); border-radius: 14px;
  background: var(--h-card); box-shadow: 0 6px 22px color-mix(in srgb, var(--h-ink) 4%, transparent); }
body[data-plane="workspace"] .cs-dpart { display: grid; grid-template-columns: 64px minmax(0, 1fr); gap: 0 34px; padding: 24px 0; }
body[data-plane="workspace"] .cs-dpart + .cs-dpart { border-top: 1px solid var(--h-line); }
body[data-plane="workspace"] .cs-dmark {
  display: inline-flex; align-items: center; justify-content: center; width: 64px; height: 64px; border-radius: 50%;
  background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .cs-dpart + .cs-dpart .cs-dmark { background: var(--h-fill-08); color: var(--h-ink-2); }
body[data-plane="workspace"] .cs-dmark .icon { width: 28px; height: 28px; margin: 0; }
body[data-plane="workspace"] .cs-dbody { display: grid; gap: 10px; justify-items: start; min-width: 0; }
body[data-plane="workspace"] .cs-dtitle:not(#hp-x) { margin: 6px 0 0; font-size: var(--type-section); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="workspace"] .cs-dlede:not(#hp-x) { margin: 0; font-size: var(--type-body); color: var(--h-muted); }
body[data-plane="workspace"] .cs-dbody .action-form:not(#hp-x) { display: grid; gap: 12px; justify-items: start; width: 100%; max-width: none; margin: 4px 0 0; }
body[data-plane="workspace"] .cs-dbody .field:not(#hp-x) { width: 100%; max-width: none; margin: 0; }
body[data-plane="workspace"] .cs-dbody textarea:not(#hp-x) {
  box-sizing: border-box; width: 100%; max-width: none; min-height: 104px; padding: 14px 18px; border: 1px solid var(--h-line-strong);
  border-radius: 10px; font: inherit; font-size: var(--type-body); color: var(--h-ink); }
body[data-plane="workspace"] .cs-dbody button.action.primary-action:not(#hp-x),
body[data-plane="workspace"] .cs-dbody button.action.primary-action:not(#hp-x):hover { min-height: 56px; padding: 0 56px; border-radius: 8px; }
body[data-plane="workspace"] .cs-dbody button.action.cs-send-back:not(#hp-x):not(#hp-y),
body[data-plane="workspace"] .cs-dbody button.action.cs-send-back:not(#hp-x):not(#hp-y):hover {
  min-height: 56px; padding: 0 34px; border: 1px solid var(--h-line-strong); border-radius: 8px;
  background: var(--h-card); color: var(--h-ink-2); font-size: var(--type-body); font-weight: var(--h-w-semi); }
body[data-plane="workspace"] .cs-self:not(#hp-x) { margin: 0; }
@media (max-width: 48rem) {
  body[data-plane="workspace"] .decision-card.cs-decision:not(#hp-x) { padding: 4px 16px; }
  body[data-plane="workspace"] .cs-dpart { grid-template-columns: 44px minmax(0, 1fr); gap: 0 14px; padding: 18px 0; }
  body[data-plane="workspace"] .cs-dmark { width: 44px; height: 44px; }
  body[data-plane="workspace"] .cs-dbody button.action:not(#hp-x):not(#hp-y) { width: 100%; padding: 0 16px; }
}
/* ==========================================================================
   ux/118 · page 16's queue, to the owner's `data_access_requests_section` master: one card —
   the tile beside the title and its count pill, the lede; the tabs (links) with the quiet
   *Oldest first*; the table in its own bordered box with a pale head row; *Showing N …*.
   Agreed rules win: Waiting is never red (the neutral clock pill), no row ⋯, no search,
   sort control, pager or guide. The reference is the one row link, stretched from its cell
   and clipped by the table's box — never contained by the <tr> (112 item 8).
   ========================================================================== */
body[data-plane="workspace"] .rq-head:not(#hp-x) { display: grid; grid-template-columns: 72px minmax(0, 1fr); gap: 0 26px; align-items: start; }
body[data-plane="workspace"] .head-card:has(.rq-head):not(#hp-x) {
  padding: 30px 32px; background: var(--h-card); border: 1px solid var(--h-line); border-radius: 16px;
  box-shadow: 0 6px 22px color-mix(in srgb, var(--h-ink) 4%, transparent); }
body[data-plane="workspace"] .head-card .rights-table th.col-subject { width: 28%; }
body[data-plane="workspace"] .head-card .rights-table th.col-waited { width: 17%; }
body[data-plane="workspace"] .head-card .rights-table th.col-asking { width: 17%; }
body[data-plane="workspace"] .head-card .rights-table th.col-case { width: 17%; }
body[data-plane="workspace"] .rq-tile {
  display: inline-flex; align-items: center; justify-content: center; width: 72px; height: 72px; border-radius: 14px;
  background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .rq-tile .icon { width: 32px; height: 32px; margin: 0; }
body[data-plane="workspace"] .rq-tabs {
  display: flex; align-items: center; justify-content: space-between; gap: 16px; margin: 26px 0 0; padding: 0 0 16px;
  border-bottom: 1px solid var(--h-line); }
body[data-plane="workspace"] .rq-tab-list { display: flex; gap: 4px; margin: 0; padding: 0; list-style: none; }
body[data-plane="workspace"] .rq-tab {
  display: inline-flex; align-items: center; min-height: 48px; padding: 0 24px; border-radius: 8px;
  background: var(--h-fill-12); color: var(--h-ink-2); font-size: var(--type-body); text-decoration: none; }
body[data-plane="workspace"] .rq-tab-current { background: var(--h-accent-soft); color: var(--h-accent); font-weight: var(--h-w-semi); }
body[data-plane="workspace"] .rq-order:not(#hp-x) { margin: 0; color: var(--h-muted); font-size: var(--type-body); }
body[data-plane="workspace"] .head-card .grid-scroll:has(.rights-table) {
  margin: 24px 0 0; border: 1px solid var(--h-line); border-radius: 12px; }
body[data-plane="workspace"] .head-card .grid.rights-table:not(#hp-x) { min-width: 0; }
body[data-plane="workspace"] .head-card .rights-table thead th { background: var(--h-fill-12); color: var(--h-ink-2); font-weight: var(--h-w-normal); }
body[data-plane="workspace"] .rights-table tbody th.cell-identity { position: relative; }
body[data-plane="workspace"] .rights-table .subject-link::after { content: ""; position: absolute; inset: 0 -100vw 0 0; }
body[data-plane="workspace"] .rights-table tbody tr:hover .subject-link { text-decoration: underline; }
body[data-plane="workspace"] .rq-wait {
  display: inline-flex; align-items: center; gap: 8px; padding: 4px 14px; border-radius: 8px;
  background: var(--h-fill-08); color: var(--h-ink); font-size: var(--type-body); font-weight: var(--h-w-semi); }
body[data-plane="workspace"] .rq-wait .icon { width: 18px; height: 18px; margin: 0; }
body[data-plane="workspace"] .rq-chip {
  display: inline-flex; margin: 8px 0 0; padding: 2px 10px; border-radius: 6px; background: var(--h-fill-08);
  color: var(--h-ink-2); font-size: var(--type-meta); }
body[data-plane="workspace"] .rq-view {
  display: flex; width: max-content; align-items: center; gap: 8px; margin: 10px 0 0; color: var(--h-accent); font-size: var(--type-body); }
body[data-plane="workspace"] .rq-view .icon { width: 18px; height: 18px; margin: 0; }
body[data-plane="workspace"] .rq-foot:not(#hp-x) { margin: 20px 0 0; padding: 0; border: 0; color: var(--h-ink-2); font-size: var(--type-body); }
@media (min-width: 1024px) {
  body[data-plane="workspace"] .head-card .grid-scroll:has(.rights-table) { overflow-x: clip; }
  body[data-plane="workspace"] .head-card .rights-table :is(thead th, tbody th, tbody td):not(#hp-x) { padding-left: 16px; padding-right: 16px; }
}
/* 118: five columns need the width of a laptop; below it each request stacks. */
@media (max-width: 1023px) {
  /* **The table, stacked**: each request a block of label/value lines (62 item 50). */
  body[data-plane="workspace"] .grid.rights-table { min-width: 0; width: 100%; }
  body[data-plane="workspace"] .rights-table thead { display: none; }
  body[data-plane="workspace"] .rights-table tbody,
  body[data-plane="workspace"] .rights-table tr,
  body[data-plane="workspace"] .rights-table th { display: block; }
  body[data-plane="workspace"] .rights-table tr { padding: 14px 0; border-bottom: 1px solid var(--h-line-soft); }
  body[data-plane="workspace"] .rights-table th { padding: 0 0 8px; border: 0; }
  body[data-plane="workspace"] .rights-table td {
    display: grid; grid-template-columns: minmax(6.5rem, auto) minmax(0, 1fr); column-gap: 12px;
    align-items: start; padding: 4px 0; border: 0; }
  body[data-plane="workspace"] .rights-table td::before {
    content: attr(data-label); grid-row: 1 / span 3; font-size: var(--type-meta); color: var(--h-muted); }
  body[data-plane="workspace"] .rights-table td > * { grid-column: 2; justify-self: start; }
  body[data-plane="workspace"] .rights-table tbody tr { position: relative; }
  body[data-plane="workspace"] .rights-table tbody th.cell-identity { position: static; }
  body[data-plane="workspace"] .rights-table .subject-link::after { inset: 0; }
  body[data-plane="workspace"] .head-card .grid-scroll:has(.rights-table) { border: 0; padding: 0; }
}
@media (max-width: 480px) {
  body[data-plane="workspace"] .rights-table td:not(#hp-x) { display: block; }
  body[data-plane="workspace"] .rights-table td::before { display: block; margin: 0 0 2px; }
}
@media (max-width: 768px) {
  body[data-plane="workspace"] .head-card:has(.rq-head):not(#hp-x) { padding: 20px 16px; }
  body[data-plane="workspace"] .rq-head:not(#hp-x) { grid-template-columns: 52px minmax(0, 1fr); gap: 0 14px; }
  body[data-plane="workspace"] .rq-tile { width: 52px; height: 52px; }
  body[data-plane="workspace"] .rq-tabs { flex-direction: column; align-items: flex-start; }
  body[data-plane="workspace"] .rq-tab { padding: 0 16px; min-height: 44px; }
}
/* ==========================================================================
   28 · Insights, to the owner's `insights_redesign` master (ux/120, INSTRUCTION 116). The
   hero keeps its lightbulb tile; the role line and caption are one quiet line. Each group
   is one white card: a tinted head band (the mark, the heading and lede, the count pill),
   then one question per row — the bubble disc, the question bold, its description, the
   chevron. The whole row is the question's one link: the link's `::after` fills the `li`,
   which is its containing block (never a `<tr>`, 112 item 8). No read state (116: no
   *Not opened* pill). The Decisions tint is the coder's call (the master draws only
   Evidence and Work in progress).
   ========================================================================== */
/* The master's lightbulb tile, ~72px beside the title (a named 48-f exception); the quiet
   line sits on the lede's edge, past the tile. */
body[data-plane="workspace"] .head-card:has(.in-quiet) .page-head-main { display: flex; align-items: flex-start; gap: 24px; }
body[data-plane="workspace"] .head-card:has(.in-quiet) .page-head-mark:not(#hp-x) {
  flex: 0 0 72px; display: inline-flex; align-items: center; justify-content: center; width: 72px; height: 72px;
  margin: 4px 0 0; border-radius: 14px; background: color-mix(in srgb, var(--h-accent) 12%, var(--h-card)); color: var(--h-accent); }
body[data-plane="workspace"] .head-card:has(.in-quiet) .page-head-mark .icon { width: 34px; height: 34px; margin: 0; }
body[data-plane="workspace"] .in-quiet:not(#hp-x) { max-width: none; margin: 10px 0 0 96px; font-size: var(--type-body); color: var(--h-muted);
  line-height: var(--h-lh-body); }
body[data-plane="workspace"] .in-group {
  margin: 0; padding: 14px; background: var(--h-card);
  border: 1px solid var(--h-line); border-radius: 16px; min-width: 0;
  box-shadow: 0 6px 22px color-mix(in srgb, var(--h-ink) 4%, transparent); }
body[data-plane="workspace"] .in-head {
  display: grid; grid-template-columns: 62px minmax(0, 1fr) auto; gap: 0 28px; align-items: center;
  padding: 16px 14px; border: 1px solid var(--h-line); border-bottom: 0; border-radius: 12px 12px 0 0; }
body[data-plane="workspace"] .in-tile {
  display: inline-flex; align-items: center; justify-content: center; width: 62px; height: 62px;
  border-radius: 12px; }
body[data-plane="workspace"] .in-tile .icon { width: 30px; height: 30px; margin: 0; }
body[data-plane="workspace"] .in-head-words { display: grid; gap: 4px; min-width: 0; }
body[data-plane="workspace"] .in-group .question-group-heading:not(#hp-x) {
  margin: 0; padding: 0; font-size: var(--type-section); font-weight: var(--h-w-bold); color: var(--h-ink);
  line-height: var(--h-lh-tight); }
body[data-plane="workspace"] .in-group .in-lede:not(#hp-x) { margin: 0; font-size: var(--type-lede); color: var(--h-ink-2);
  line-height: var(--h-lh-body); }
body[data-plane="workspace"] .in-count {
  justify-self: end; padding: 6px 14px; border-radius: 999px; white-space: nowrap;
  color: var(--h-ink);
  font-size: var(--type-pill); font-weight: var(--h-w-semi); line-height: var(--h-lh-snug); }
body[data-plane="workspace"] .questions.in-rows { gap: 0; border: 1px solid var(--h-line); border-radius: 0 0 12px 12px; }
body[data-plane="workspace"] .question-card.in-row {
  position: relative; display: grid; grid-template-columns: 52px minmax(0, 1fr) auto; gap: 0 28px; align-items: center;
  padding: 16px 44px 16px 26px; overflow-wrap: break-word; }
body[data-plane="workspace"] .question-card.in-row + .question-card.in-row { border-top: 1px solid var(--h-line); }
body[data-plane="workspace"] .question-card.in-row:last-child { border-radius: 0 0 12px 12px; }
body[data-plane="workspace"] .question-card.in-row:has(.question-row:hover) { background: var(--h-fill-16); }
body[data-plane="workspace"] .in-disc {
  display: inline-flex; align-items: center; justify-content: center; width: 52px; height: 52px; border-radius: 50%; }
body[data-plane="workspace"] .in-disc .icon { width: 24px; height: 24px; margin: 0; }
body[data-plane="workspace"] .in-words { display: grid; gap: 4px; min-width: 0; }
body[data-plane="workspace"] .in-row .question-row { font-size: var(--type-lede); font-weight: var(--h-w-bold); color: var(--h-ink);
  line-height: var(--h-lh-body); text-decoration: none; }
body[data-plane="workspace"] .in-row .question-row::after { content: ""; position: absolute; inset: 0; border-radius: inherit; }
body[data-plane="workspace"] .in-row .question-row:focus-visible { outline: none; }
body[data-plane="workspace"] .in-row .question-row:focus-visible::after { outline: 2px solid var(--h-accent); outline-offset: -2px; }
body[data-plane="workspace"] .in-row:has(.question-row:hover) .question-row { color: var(--h-accent-hi); }
body[data-plane="workspace"] .in-group .in-row .question-description:not(#hp-x) { margin: 0; padding: 0; font-size: var(--type-body);
  color: var(--h-ink-2); line-height: var(--h-lh-body); }
body[data-plane="workspace"] .in-chev { display: inline-flex; color: var(--h-ink-2); }
body[data-plane="workspace"] .in-chev .icon { width: 22px; height: 22px; margin: 0; }
body[data-plane="workspace"] .in-empty { padding: 20px 24px; }
/* Each group's tint: the band 6%, the tile and count 12%, the disc 9%; the mark in the hue. */
body[data-plane="workspace"] .in-group-decisions .in-head { background: color-mix(in srgb, var(--mark-green) 6%, var(--h-card)); }
body[data-plane="workspace"] .in-group-decisions .in-tile, body[data-plane="workspace"] .in-group-decisions .in-count { background: color-mix(in srgb, var(--mark-green) 12%, var(--h-card)); }
body[data-plane="workspace"] .in-group-decisions .in-tile, body[data-plane="workspace"] .in-group-decisions .in-disc { color: var(--mark-green); }
body[data-plane="workspace"] .in-group-decisions .in-disc { background: color-mix(in srgb, var(--mark-green) 9%, var(--h-card)); }
body[data-plane="workspace"] .in-group-evidence .in-head { background: color-mix(in srgb, var(--mark-violet) 6%, var(--h-card)); }
body[data-plane="workspace"] .in-group-evidence .in-tile, body[data-plane="workspace"] .in-group-evidence .in-count { background: color-mix(in srgb, var(--mark-violet) 12%, var(--h-card)); }
body[data-plane="workspace"] .in-group-evidence .in-tile, body[data-plane="workspace"] .in-group-evidence .in-disc { color: var(--mark-violet); }
body[data-plane="workspace"] .in-group-evidence .in-disc { background: color-mix(in srgb, var(--mark-violet) 9%, var(--h-card)); }
body[data-plane="workspace"] .in-group-work .in-head { background: color-mix(in srgb, var(--h-accent) 6%, var(--h-card)); }
body[data-plane="workspace"] .in-group-work .in-tile, body[data-plane="workspace"] .in-group-work .in-count { background: color-mix(in srgb, var(--h-accent) 12%, var(--h-card)); }
body[data-plane="workspace"] .in-group-work .in-tile, body[data-plane="workspace"] .in-group-work .in-disc { color: var(--h-accent); }
body[data-plane="workspace"] .in-group-work .in-disc { background: color-mix(in srgb, var(--h-accent) 9%, var(--h-card)); }
@media (max-width: 40rem) {
  body[data-plane="workspace"] .in-group { padding: 10px; border-radius: 14px; }
  body[data-plane="workspace"] .head-card:has(.in-quiet) .page-head-main { gap: 14px; }
  body[data-plane="workspace"] .head-card:has(.in-quiet) .page-head-mark:not(#hp-x) { flex-basis: 48px; width: 48px; height: 48px; }
  body[data-plane="workspace"] .head-card:has(.in-quiet) .page-head-mark .icon { width: 26px; height: 26px; }
  body[data-plane="workspace"] .in-quiet:not(#hp-x) { margin-left: 0; }
  body[data-plane="workspace"] .in-head { grid-template-columns: 44px minmax(0, 1fr); gap: 10px 14px; padding: 14px 12px; align-items: start; }
  body[data-plane="workspace"] .in-tile { width: 44px; height: 44px; }
  body[data-plane="workspace"] .in-tile .icon { width: 24px; height: 24px; }
  body[data-plane="workspace"] .in-count { grid-column: 2; justify-self: start; }
  body[data-plane="workspace"] .question-card.in-row { grid-template-columns: 40px minmax(0, 1fr) auto; gap: 0 12px; padding: 14px 12px; }
  body[data-plane="workspace"] .in-disc { width: 40px; height: 40px; }
  body[data-plane="workspace"] .in-disc .icon { width: 20px; height: 20px; }
  body[data-plane="workspace"] .in-row .question-row { font-size: var(--type-card-title); }
  body[data-plane="workspace"] .in-group .in-row .question-description:not(#hp-x) { font-size: var(--type-meta); }
  body[data-plane="workspace"] .in-empty { padding: 14px 16px; }
}
/* ==========================================================================
   A1 · Account, to the owner's `account_redesign` master (ux/121 §1, INSTRUCTION 117).
   Four white cards, each a head (tile mark, heading, one-line lede, and the card's act at
   the right) over its rows. Profile and Preferences: one bordered row. Sign-in & security:
   the amber setup callout, then four rows split by hairlines, each with its mark tile.
   Sessions: a tinted fact table. *Change* is the outlined pencil button (86-g's named
   list). Every act, form and state is the page's own.
   ========================================================================== */
/* The master draws no rule under the page's title: the cards follow the lede. */
body[data-plane="workspace"]:has(.account-column) main > .page-head { border-bottom: 0; padding-bottom: 0; margin-bottom: 24px; }
body[data-plane="workspace"] .account-section {
  gap: 16px; padding: 18px 20px 20px; background: var(--h-card); border: 1px solid var(--h-line);
  border-radius: 14px; box-shadow: 0 6px 22px color-mix(in srgb, var(--h-ink) 4%, transparent); }
/* Measured against the shell (110 §1a's proportional scale, ×1.11): heads 23px, ledes 15px,
   tiles 56px, row marks 52px. */
body[data-plane="workspace"] .ac-head {
  display: grid; grid-template-columns: 56px minmax(0, 1fr) auto; gap: 0 22px; align-items: center; }
body[data-plane="workspace"] .ac-tile {
  display: inline-flex; align-items: center; justify-content: center; width: 56px; height: 56px;
  border-radius: 12px; background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .ac-tile .icon { width: 28px; height: 28px; margin: 0; }
body[data-plane="workspace"] .ac-tile-amber { background: var(--h-warn-soft); color: var(--h-warn); }
body[data-plane="workspace"] .ac-head-words { display: grid; gap: 4px; min-width: 0; }
body[data-plane="workspace"] .account-section .ac-lede:not(#hp-x) { margin: 0; font-size: var(--type-body); color: var(--h-muted);
  line-height: var(--h-lh-body); }
body[data-plane="workspace"] .ac-head-act .action-form { margin: 0; }
body[data-plane="workspace"] .ac-head-act .action .icon { width: 20px; height: 20px; margin: 0 10px 0 0; }
body[data-plane="workspace"] .account-section .account-row { grid-template-columns: 330px minmax(0, 1fr) auto; }
/* Sign-in & security: rows on hairlines, each led by its mark tile. */
body[data-plane="workspace"] .account-card.ac-rows { border-width: 1px 0; border-radius: 0; }
body[data-plane="workspace"] .account-section .account-row.ac-row-marked {
  grid-template-columns: 52px 350px minmax(0, 1fr) auto; padding-left: 10px; }
body[data-plane="workspace"] .ac-row-mark {
  display: inline-flex; align-items: center; justify-content: center; width: 52px; height: 52px;
  border-radius: 10px; background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .ac-row-mark .icon { width: 26px; height: 26px; margin: 0; }
body[data-plane="workspace"] .ac-dots-line { display: block; letter-spacing: 1px; }
/* The setup callout's shield in its own tile, as drawn. */
body[data-plane="workspace"] .account-section .account-callout-attention .account-callout-mark {
  width: 52px; height: 52px; margin: 0; align-items: center; justify-content: center; border-radius: 10px;
  background: color-mix(in srgb, var(--h-warn) 12%, var(--h-card)); color: var(--h-warn); }
body[data-plane="workspace"] .account-section .account-callout-attention .account-callout-mark .icon { width: 26px; height: 26px; }
/* Sessions: the facts in a tinted table. */
body[data-plane="workspace"] .account-card.ac-facts { background: var(--h-fill-16); }
body[data-plane="workspace"] .account-section .ac-facts .account-row { grid-template-columns: 430px minmax(0, 1fr); padding-top: 12px; padding-bottom: 12px; }
body[data-plane="workspace"] .ac-facts .account-row-act:empty { display: none; }
/* *Change*: outlined, the pencil before the word (86-g's named list, cited to ux/121). The
   account dialogs' secondary act (*Download as a text file*) takes the same outline, so the
   dialog's primary is its only filled button (the PO, after SEC-25). */
body[data-plane="workspace"] :is(.account-column, dialog) a.action.ac-change:not(#hp-x):not(#hp-y),
body[data-plane="workspace"] :is(.account-column, dialog) a.action.ac-change:not(#hp-x):not(#hp-y):hover {
  display: inline-flex; align-items: center; gap: 10px; min-height: 44px; padding: 0 20px;
  border: 1px solid color-mix(in srgb, var(--h-accent) 45%, var(--h-card)); border-radius: 8px;
  background: var(--h-card); color: var(--h-accent); font-size: var(--type-body);
  font-weight: var(--h-w-semi); text-decoration: none; white-space: nowrap; box-shadow: none; transform: none; }
body[data-plane="workspace"] .ac-change .icon { width: 20px; height: 20px; margin: 0; }
@media (max-width: 48rem) {
  body[data-plane="workspace"] .account-section { padding: 16px 14px; }
  body[data-plane="workspace"] .ac-head { grid-template-columns: 44px minmax(0, 1fr); gap: 12px 14px; align-items: start; }
  body[data-plane="workspace"] .ac-tile { width: 44px; height: 44px; }
  body[data-plane="workspace"] .ac-head-act { grid-column: 1 / -1; }
  body[data-plane="workspace"] .account-section .account-row,
  body[data-plane="workspace"] .account-section .ac-facts .account-row { grid-template-columns: minmax(0, 1fr); }
  body[data-plane="workspace"] .account-section .account-row.ac-row-marked { grid-template-columns: 40px minmax(0, 1fr); padding-left: 12px; }
  body[data-plane="workspace"] .ac-row-marked > :not(.ac-row-mark) { grid-column: 2; }
  body[data-plane="workspace"] .ac-row-marked > .ac-row-mark { grid-row: 1 / span 3; align-self: start; width: 40px; height: 40px; }
  body[data-plane="workspace"] .account-section .account-callout-attention .account-callout-mark { width: 40px; height: 40px; }
}
/* **320: the containment floor** (68 §6: no text box under 12em that wraps): the card's
   inset, the marks and the gaps give their width back to the words. */
@media (max-width: 30rem) {
  body[data-plane="workspace"] .account-section { padding: 14px 10px; }
  body[data-plane="workspace"] .account-section .account-row.ac-row-marked { grid-template-columns: 32px minmax(0, 1fr); gap: 8px 10px; padding: 12px 8px; }
  body[data-plane="workspace"] .ac-row-marked > .ac-row-mark { width: 32px; height: 32px; border-radius: 8px; }
  body[data-plane="workspace"] .ac-row-mark .icon { width: 20px; height: 20px; }
  body[data-plane="workspace"] .account-section .account-row { padding-left: 12px; padding-right: 12px; }
  body[data-plane="workspace"] .account-section .account-callout { grid-template-columns: minmax(0, 1fr); padding: 14px 12px; }
}
/* ==========================================================================
   Page 3's four tiles, to the owner's `hiring_plan_top_section_redesign` master (ux/122 §2,
   INSTRUCTION 118), measured at 110 §1a's proportional scale (×0.66 against the shell).
   Four white cards of equal height: the round mark beside the label and its value; then,
   full width, the card's lines. *Plan status* is tinted in its state's colour (the one map,
   122-a) with the pill, the ⓘ standing and What's left's first item as the filled act;
   *Requirements* the green complete bar and the group rows; *Must-have* the dot strip (a
   thin bar past twelve) and the green note; *Source brief* the file and *View brief*.
   ========================================================================== */
body[data-plane="workspace"] .hp-summary:not(#hp-x) { margin: 0; padding: 0; background: none; border: 0; box-shadow: none; min-width: 0; }
body[data-plane="workspace"] .hp-tiles {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; margin: 0; padding: 0; list-style: none; }
body[data-plane="workspace"] .hp-tile {
  display: flex; flex-direction: column; gap: 16px; min-width: 0; padding: 20px; background: var(--h-card);
  border: 1px solid var(--h-line); border-radius: 12px; box-shadow: 0 4px 16px color-mix(in srgb, var(--h-ink) 4%, transparent); }
body[data-plane="workspace"] .hp-tile-amber { background: color-mix(in srgb, var(--h-warn-soft) 70%, var(--h-card)); border-color: var(--h-warn-line); }
body[data-plane="workspace"] .hp-tile-green { background: color-mix(in srgb, var(--h-ok-soft) 60%, var(--h-card)); }
body[data-plane="workspace"] .hp-tile-red { background: color-mix(in srgb, var(--h-danger-soft) 60%, var(--h-card)); border-color: var(--h-danger-line); }
body[data-plane="workspace"] .hp-tile-top { display: flex; gap: 16px; align-items: flex-start; min-width: 0; }
body[data-plane="workspace"] .hp-tile-mark {
  flex: 0 0 56px; display: inline-flex; align-items: center; justify-content: center;
  width: 56px; height: 56px; border-radius: 50%; background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .hp-tile-mark .icon { width: 26px; height: 26px; margin: 0; }
body[data-plane="workspace"] .hp-tile-mark-ok { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="workspace"] .hp-tile-mark-warn { background: var(--h-warn-soft); color: var(--h-warn); }
body[data-plane="workspace"] .hp-tile-mark-danger { background: var(--h-danger-soft); color: var(--h-danger); }
body[data-plane="workspace"] .hp-tile-words { min-width: 0; flex: 1 1 auto; padding-top: 4px; }
body[data-plane="workspace"] .hp-tile-label:not(#hp-x) {
  margin: 0; font-size: var(--type-card-title); font-weight: var(--h-w-semi); color: var(--h-ink); line-height: var(--h-lh-snug); }
body[data-plane="workspace"] .hp-tile-value { margin: 8px 0 0; min-width: 0; color: var(--h-ink); }
body[data-plane="workspace"] .hp-tile-value b { font-size: var(--type-figure); font-weight: var(--h-w-bold); line-height: var(--h-lh-tight); }
body[data-plane="workspace"] .hp-tile-caption:not(#hp-x) { margin: 8px 0 0; font-size: var(--type-body); color: var(--h-muted); line-height: var(--h-lh-body); }
body[data-plane="workspace"] .hp-tile-body { display: grid; gap: 14px; min-width: 0; }
body[data-plane="workspace"] .hp-tile .hp-tile-info:not(#hp-x) {
  display: flex; align-items: center; gap: 10px; margin: 0; padding-bottom: 16px; border-bottom: 1px solid var(--h-line);
  font-size: var(--type-body); color: var(--h-ink-2); }
body[data-plane="workspace"] .hp-tile-amber .hp-tile-info:not(#hp-x) { border-bottom-color: var(--h-warn-line); }
body[data-plane="workspace"] .hp-tile-info .icon { width: 20px; height: 20px; margin: 0; flex: none; color: var(--h-muted); }
body[data-plane="workspace"] .hp-tile .hp-tile-act:not(#hp-x) {
  display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 48px; padding: 0 20px; border-radius: 8px; }
body[data-plane="workspace"] .hp-tile-act .icon { width: 20px; height: 20px; margin: 0; }
body[data-plane="workspace"] .hp-progress {
  display: block; width: 100%; height: 10px; border: 0; border-radius: 999px; overflow: hidden;
  background: var(--h-fill-06); color: var(--h-ok); appearance: none; -webkit-appearance: none; }
body[data-plane="workspace"] .hp-progress::-webkit-progress-bar { background: var(--h-fill-06); border-radius: 999px; }
body[data-plane="workspace"] .hp-progress::-webkit-progress-value { background: var(--h-ok); border-radius: 999px; }
body[data-plane="workspace"] .hp-progress::-moz-progress-bar { background: var(--h-ok); border-radius: 999px; }
body[data-plane="workspace"] .hp-count-rows { display: grid; margin: 0; padding: 0; list-style: none; border-top: 1px solid var(--h-line); }
body[data-plane="workspace"] .hp-count-rows > li + li { border-top: 1px solid var(--h-line); }
body[data-plane="workspace"] .hp-count-row {
  display: grid; grid-template-columns: 28px minmax(0, 1fr) auto; gap: 12px; align-items: center; min-height: 48px;
  color: var(--h-ink-2); font-size: var(--type-body); text-decoration: none; }
body[data-plane="workspace"] a.hp-count-row:hover { color: var(--h-accent-hi); }
body[data-plane="workspace"] .hp-count-mark {
  display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 50%; }
body[data-plane="workspace"] .hp-count-mark .icon { width: 16px; height: 16px; margin: 0; }
body[data-plane="workspace"] .hp-count-done { background: var(--h-ok-soft); color: var(--h-ok); }
body[data-plane="workspace"] .hp-count-open { background: var(--h-fill-06); color: var(--h-muted); }
body[data-plane="workspace"] .hp-count-owed { background: var(--h-warn-soft); color: var(--h-warn); }
body[data-plane="workspace"] .hp-count-chev { display: inline-flex; color: var(--h-muted); }
body[data-plane="workspace"] .hp-count-chev .icon { width: 18px; height: 18px; margin: 0; }
/* A row at 0 keeps its chevron, as drawn; the row itself is inert (no link). */
body[data-plane="workspace"] .hp-count-inert { cursor: default; }
body[data-plane="workspace"] .hp-dots { display: flex; flex-wrap: wrap; gap: 9px; }
body[data-plane="workspace"] .hp-dot { width: 16px; height: 16px; border-radius: 50%; background: var(--h-fill-06); }
body[data-plane="workspace"] .hp-dot-on { background: var(--h-ok); }
body[data-plane="workspace"] .hp-must-bar {
  display: block; width: 100%; height: 6px; border: 0; border-radius: 999px; overflow: hidden;
  background: var(--h-fill-06); appearance: none; -webkit-appearance: none; }
body[data-plane="workspace"] .hp-must-bar::-webkit-progress-bar { background: var(--h-fill-06); }
body[data-plane="workspace"] .hp-must-bar::-webkit-progress-value { background: var(--h-ok); }
body[data-plane="workspace"] .hp-must-bar::-moz-progress-bar { background: var(--h-ok); }
body[data-plane="workspace"] .hp-tile .hp-must-note:not(#hp-x) {
  display: flex; align-items: flex-start; gap: 10px; margin: 0; padding: 12px 14px; border-radius: 10px;
  background: color-mix(in srgb, var(--h-ok-soft) 70%, var(--h-card)); color: var(--h-ok); font-size: var(--type-body); line-height: var(--h-lh-body); }
body[data-plane="workspace"] .hp-must-note .icon { width: 20px; height: 20px; margin: 1px 0 0; flex: none; }
body[data-plane="workspace"] .hp-nowrap { white-space: nowrap; }
/* The master's Draft pill on its amber card: a deeper amber tint, amber-dark words. */
body[data-plane="workspace"] .hp-tile-amber .hp-tile-pill.cl-pill-amber:not(#hp-x) {
  background: color-mix(in srgb, var(--mark-warm) 20%, var(--h-card)); color: var(--h-warn); }
body[data-plane="workspace"] .hp-tile-amber .hp-tile-mark-warn { background: color-mix(in srgb, var(--mark-warm) 16%, var(--h-card)); }
body[data-plane="workspace"] .hp-brief-name {
  display: block; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;
  font-size: var(--type-body); font-weight: var(--h-w-semi); }
body[data-plane="workspace"] .hp-tile-link {
  display: inline-flex; align-items: center; gap: 8px; padding-top: 16px; border-top: 1px solid var(--h-line);
  color: var(--h-accent); font-size: var(--type-body); font-weight: var(--h-w-semi); text-decoration: none; }
body[data-plane="workspace"] .hp-tile-link .icon { width: 18px; height: 18px; margin: 0; }
@media (max-width: 1279px) {
  body[data-plane="workspace"] .hp-tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 40rem) {
  body[data-plane="workspace"] .hp-tiles { grid-template-columns: minmax(0, 1fr); }
  body[data-plane="workspace"] .hp-tile { padding: 16px; }
  body[data-plane="workspace"] .hp-tile-mark { flex-basis: 48px; width: 48px; height: 48px; }
}
/* ==========================================================================
   Page 10, to the owner's `candidate_detail_ux_updates` master (ux/124, INSTRUCTION 120), in
   ux/123's tokens: the page-kind line under the name; *Open the application →* only with
   exactly one application; Applications and Requirement readings as tiled cards with ledes,
   each application row one link (its `li` the box); Key details with a mark per row and
   the *Edit name* pencil in its head; documents' *type · time* on one line; two columns
   from 1280, the rail under the main column below that.
   ========================================================================== */
body[data-plane="workspace"] .cand-head-words .cand-kind:not(#cand-x) {
  margin: 4px 0 0; font-size: var(--type-meta-strong); font-weight: var(--h-w-mid); color: var(--h-muted); }
body[data-plane="workspace"] .cand-head .next-action a.action .icon { width: 18px; height: 18px; margin: 0 0 0 10px; }
body[data-plane="workspace"] .listing > li.cand-app-row { position: relative; }
body[data-plane="workspace"] .listing > li.cand-app-row > a.cand-app-link { display: inline-flex; align-items: center; gap: 8px; }
body[data-plane="workspace"] .listing > li.cand-app-row > a.cand-app-link::after {
  content: ""; position: absolute; inset: 0; }
body[data-plane="workspace"] .cand-app-link .icon { width: 16px; height: 16px; margin: 0; color: var(--h-muted); }
body[data-plane="workspace"] .listing > li.cand-app-row:has(.cand-app-link:hover) .cand-app-link { color: var(--h-accent); }
body[data-plane="workspace"] .cand-fact { grid-template-columns: 22px 150px minmax(0, 1fr); align-items: center; }
body[data-plane="workspace"] .cand-fact-mark { display: inline-flex; color: var(--h-muted); }
body[data-plane="workspace"] .cand-fact-mark .icon { width: 18px; height: 18px; margin: 0; }
body[data-plane="workspace"] .cand-card-head { flex-wrap: wrap; }
body[data-plane="workspace"] .cand-edit-name-act { margin-left: auto; }
body[data-plane="workspace"] .cand-edit-name-act[open] { flex: 1 0 100%; order: 3; margin: 12px 0 0; }
/* ux/124 §5: the master's outlined *Edit*, the pencil and the word. */
body[data-plane="workspace"] .cand-edit-name {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px; height: 40px; padding: 0 14px; margin-left: auto;
  border: 1px solid var(--h-line); border-radius: 10px; color: var(--h-ink); font-size: var(--type-body); font-weight: var(--h-w-mid);
  cursor: pointer; list-style: none; }
body[data-plane="workspace"] .cand-edit-name::-webkit-details-marker { display: none; }
body[data-plane="workspace"] .cand-edit-name .icon { width: 18px; height: 18px; margin: 0; }
body[data-plane="workspace"] .cand-edit-name-act[open] > .cand-edit-name { margin: 0 0 10px auto; }
body[data-plane="workspace"] .reading-disclosure > summary { display: flex; align-items: center; gap: 10px; list-style: none; }
body[data-plane="workspace"] .reading-disclosure > summary::-webkit-details-marker { display: none; }
body[data-plane="workspace"] .reading-disclosure > summary .icon { width: 16px; height: 16px; margin: 0; flex: none; transition: transform .15s; }
body[data-plane="workspace"] .reading-disclosure[open] > summary .icon { transform: rotate(90deg); }
@media (max-width: 1279px) {
  body[data-plane="workspace"] .cand-grid { grid-template-columns: minmax(0, 1fr); grid-template-areas: "main" "side" "admin"; grid-template-rows: auto; }
}
@media (max-width: 48rem) {
  body[data-plane="workspace"] .cand-fact { grid-template-columns: 22px minmax(0, 1fr); }
  body[data-plane="workspace"] .cand-fact dd { grid-column: 2; }
}
/* ==========================================================================
   Page 11, in page 10's frame (ux/125, INSTRUCTION 121): the same head and two columns,
   page 11's own cards. A requirement's remedy sits under its words in the first cell; an
   empty cell reads *—*; the ask's question is the Clarifications card's lede, so the field's
   own label is kept for assistive technology only; Interviews carries its chevron.
   ========================================================================== */
body[data-plane="workspace"] .readings-table .reading-row td > :is(.claim-ask, p.quiet) {
  display: block; margin: 4px 0 0; }
body[data-plane="workspace"] .reading-none { color: var(--h-muted); }
/* Page 11 has no administration card: its grid is the main column and the rail. */
body[data-plane="workspace"] .cand-grid.app-grid { grid-template-areas: "main side"; grid-template-rows: auto; }
body[data-plane="workspace"] .app-ask:not(#hp-x) { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px 12px; margin: 14px 0 0; }
body[data-plane="workspace"] .app-ask .field { flex: 1 1 280px; margin: 0; }
body[data-plane="workspace"] .app-ask .field > label {
  position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
body[data-plane="workspace"] .app-interviews-chev { display: inline-flex; margin-left: auto; align-self: center; color: var(--h-muted); }
body[data-plane="workspace"] .app-interviews-chev .icon { width: 18px; height: 18px; margin: 0; }
body[data-plane="workspace"] #interviews .related-surface:not(#hp-x) { margin: 8px 0 0 56px; font-size: var(--type-body); color: var(--h-muted); }
/* ux/125 §4: the page-kind line under a family page's H1 — quiet, meta-strong. */
body[data-plane="workspace"] .page-head-words .page-kind:not(#hp-x) {
  margin: 4px 0 0; font-size: var(--type-meta-strong); font-weight: var(--h-w-mid); color: var(--h-muted); }
/* ==========================================================================
   The act cards (ux/126 §2.4): one act with fields as its own inset card on the brand tile,
   with the owner fact as an info note. Page 11 draws them since ux/126 §6 (INSTRUCTION 124:
   withdrawal, transfer, promote and the decision-owner chooser); page 12's own 122 layout
   is superseded by ux/128, below.
   ========================================================================== */
body[data-plane="workspace"] .dec-act {
  display: grid; grid-template-columns: 36px minmax(0, 1fr); gap: 12px; margin: 12px 0 0; padding: 16px;
  border: 1px solid var(--h-line); border-radius: 12px; background: var(--h-fill-11); }
body[data-plane="workspace"] .dec-act-mark {
  display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px;
  border: 1px solid var(--h-line); border-radius: 10px; background: var(--h-card); color: var(--h-accent); }
body[data-plane="workspace"] .dec-act-mark .icon { width: 20px; height: 20px; margin: 0; }
body[data-plane="workspace"] .dec-act-body { min-width: 0; }
body[data-plane="workspace"] .dec-act-body > h3 { margin: 7px 0 8px; }
body[data-plane="workspace"] .dec-act .action-form:not(#hp-x) {
  margin: 0; padding: 0; border: 0; background: none; box-shadow: none; }
body[data-plane="workspace"] .dec-act .absence { margin: 0; color: var(--h-muted); }
body[data-plane="workspace"] .dec-info {
  display: flex; align-items: flex-start; gap: 10px; margin: 0; padding: 12px 14px;
  border-left: 3px solid var(--h-accent); border-radius: 8px; background: var(--h-accent-soft); }
body[data-plane="workspace"] .dec-info-mark { display: inline-flex; color: var(--h-accent); }
body[data-plane="workspace"] .dec-info-mark .icon { width: 20px; height: 20px; margin: 0; }
body[data-plane="workspace"] .dec-info > p { margin: 0; font-size: var(--type-meta); color: var(--h-ink); }
@media (max-width: 48rem) {
  body[data-plane="workspace"] .dec-act { grid-template-columns: minmax(0, 1fr); }
}
/* ==========================================================================
   Page 12, redesigned to the owner's master (ux/128, INSTRUCTION 124): the header on the
   band (back link, *Decision*, *Application for {job}*) with the candidate's card at the
   right; the bands as plain cards in the master's order; *Where it stands* as a two-half
   inset; the acts in one row, the primary filled and the rest outlined, each with its line
   of meaning, a withheld act as text in its slot; Reject and Hold opening their form in
   place (`:target`); the timeline last. One column; stacked on a phone.
   ========================================================================== */
body[data-plane="workspace"] .dec2-head {
  display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 16px 24px; align-items: start; margin: 0 0 20px; }
body[data-plane="workspace"] .dec2-back {
  display: inline-flex; align-items: center; gap: 6px; color: var(--h-muted); font-size: var(--type-meta); text-decoration: none; }
body[data-plane="workspace"] .dec2-back .icon { width: 16px; height: 16px; margin: 0; }
body[data-plane="workspace"] .dec2-head-words h1 { margin: 10px 0 0; }
body[data-plane="workspace"] .dec2-sub:not(#hp-x) { margin: 6px 0 0; font-size: var(--type-lede); color: var(--h-muted); }
body[data-plane="workspace"] .dec2-who {
  display: flex; align-items: center; gap: 16px; min-width: 300px; padding: 16px 22px;
  border: 1px solid var(--h-line); border-radius: 14px; background: var(--h-card); }
body[data-plane="workspace"] .dec2-disc { display: inline-flex; }
body[data-plane="workspace"] .dec2-disc > span:not(#hp-x) { width: 48px; height: 48px; font-size: var(--type-meta-strong); }
body[data-plane="workspace"] .dec2-name:not(#hp-x) { margin: 0; font-size: var(--type-card-title); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .dec2-view { display: inline-flex; align-items: center; gap: 6px; margin: 6px 0 0; color: var(--h-accent); font-size: var(--type-meta); text-decoration: none; }
body[data-plane="workspace"] .dec2-view .icon { width: 16px; height: 16px; margin: 0; }
body[data-plane="workspace"] .decision-bands { display: grid; gap: 16px; }
body[data-plane="workspace"] .dec2-card h2 { margin: 0; }
body[data-plane="workspace"] .dec2-lede:not(#hp-x) { margin: 4px 0 16px; font-size: var(--type-body); color: var(--h-muted); }
body[data-plane="workspace"] .dec2-inset { padding: 18px 22px; border-radius: 12px; background: var(--h-accent-soft); }
body[data-plane="workspace"] .dec2-split { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0; }
body[data-plane="workspace"] .dec2-half + .dec2-half { padding-left: 32px; border-left: 1px solid var(--h-line); }
body[data-plane="workspace"] .dec2-half:first-child { padding-right: 32px; }
body[data-plane="workspace"] .dec2-eyebrow:not(#hp-x) {
  margin: 0 0 10px; font-size: var(--type-meta-small); font-weight: var(--h-w-semi); color: var(--h-muted); text-transform: uppercase; }
body[data-plane="workspace"] .dec2-stage { margin: 0 0 10px; }
/* ANSWER 124-b: the stage pill in the one state map's hue; in progress with its clock. */
body[data-plane="workspace"] .dec2-stage-pill {
  display: inline-flex; align-items: center; gap: 8px; padding: 6px 14px 6px 8px; border-radius: 999px;
  font-size: var(--type-pill); font-weight: var(--h-w-semi); }
body[data-plane="workspace"] .dec2-stage-blue { background: var(--h-accent-soft); color: var(--h-accent); }
body[data-plane="workspace"] .dec2-stage-green { background: var(--h-ok-soft); color: var(--h-ok); padding-left: 14px; }
body[data-plane="workspace"] .dec2-stage-amber { background: var(--h-warn-soft); color: var(--h-warn-ink); padding-left: 14px; }
body[data-plane="workspace"] .dec2-stage-red { background: var(--h-danger-soft); color: var(--h-danger-ink); padding-left: 14px; }
body[data-plane="workspace"] .dec2-stage-grey { background: var(--h-fill-11); color: var(--h-ink-2); padding-left: 14px; }
body[data-plane="workspace"] .dec2-stage-mark {
  display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px;
  border-radius: 50%; background: var(--h-accent); color: var(--h-card); }
body[data-plane="workspace"] .dec2-stage-mark .icon { width: 14px; height: 14px; margin: 0; }
body[data-plane="workspace"] .dec2-decision:not(#hp-x) { margin: 0 0 6px; font-size: var(--type-lede); font-weight: var(--h-w-bold); color: var(--h-ink); }
body[data-plane="workspace"] .dec2-quiet:not(#hp-x) { margin: 0 0 4px; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .dec2-owner:not(#hp-x) { margin-top: 10px; }
body[data-plane="workspace"] .dec2-note { display: flex; align-items: flex-start; gap: 16px; }
body[data-plane="workspace"] .dec2-inset-mark {
  display: inline-flex; flex: none; align-items: center; justify-content: center; width: 40px; height: 40px;
  border-radius: 50%; background: var(--h-card); color: var(--h-ink); }
body[data-plane="workspace"] .dec2-info-mark { color: var(--h-accent); }
body[data-plane="workspace"] .dec2-inset-mark .icon { width: 20px; height: 20px; margin: 0; }
body[data-plane="workspace"] .dec2-inset-title:not(#hp-x) { margin: 0 0 2px; font-size: var(--type-body); font-weight: var(--h-w-semi); color: var(--h-ink); }
body[data-plane="workspace"] .dec2-row { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 16px 18px; }
body[data-plane="workspace"] .dec2-act { display: grid; gap: 8px; flex: 0 0 168px; min-width: 0; }
body[data-plane="workspace"] .dec2-act .action-form { margin: 0; }
body[data-plane="workspace"] .decision-bands .dec2-act :is(a, button).action:not(#dec-x):not(#dec-y) {
  display: flex; align-items: center; justify-content: center; width: 100%; box-sizing: border-box; min-height: 44px; padding: 0 16px;
  border-radius: 8px; font-size: var(--type-body); font-weight: var(--h-w-mid); text-decoration: none; }
/* The master outlines every act but the view's primary; 86-g fills every act, so two
   unworn ids outweigh it on this row only. */
body[data-plane="workspace"] .decision-bands .dec2-act :is(a.dec2-outline, button.action:not(.primary-action)):not(#dec-x):not(#dec-y) {
  background: var(--h-card); color: var(--h-ink); border: 1px solid var(--h-line-strong); }
body[data-plane="workspace"] .decision-bands:has(#reject-act:target, #reject-act.dec2-panel-open) .dec2-act a[href="#reject-act"].dec2-outline:not(#dec-x):not(#dec-y),
body[data-plane="workspace"] .decision-bands:has(#hold-act:target, #hold-act.dec2-panel-open) .dec2-act a[href="#hold-act"].dec2-outline:not(#dec-x):not(#dec-y) {
  background: var(--h-accent-soft); color: var(--h-accent); border-color: var(--h-accent); }
body[data-plane="workspace"] .dec2-meaning:not(#hp-x) { margin: 0; font-size: var(--type-meta); color: var(--h-muted); }
body[data-plane="workspace"] .dec2-act.dec2-withheld { flex: 1 1 220px; }
body[data-plane="workspace"] .dec2-who-words { min-width: 0; }
body[data-plane="workspace"] .dec2-open { cursor: pointer; }
body[data-plane="workspace"] .dec2-caption:not(#hp-x) {
  margin: 12px 0 0; font-size: var(--type-meta-small); font-weight: var(--h-w-semi); color: var(--h-muted); text-transform: uppercase; }
body[data-plane="workspace"] .dec2-divider { align-self: stretch; width: 1px; background: var(--h-line); }
body[data-plane="workspace"] .dec2-panel { display: none; margin: 20px 0 0; padding: 20px 22px; border-radius: 12px; background: var(--h-accent-soft); }
body[data-plane="workspace"] .dec2-panel:is(:target, .dec2-panel-open) { display: block; }
body[data-plane="workspace"] .dec2-panel-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 0 0 12px; }
body[data-plane="workspace"] .dec2-panel-head h3 { margin: 0; }
body[data-plane="workspace"] .dec2-cancel { color: var(--h-accent); font-size: var(--type-meta); text-decoration: none; }
body[data-plane="workspace"] .decision-bands .dec2-panel .action-form:not(#hp-x) {
  margin: 0; padding: 0; border: 0; background: none; box-shadow: none; }
body[data-plane="workspace"] .dec2-panel-acts { display: flex; flex-wrap: wrap; gap: 12px; }
body[data-plane="workspace"] .decision-bands .dec2-panel-acts a.dec2-outline:not(#dec-x):not(#dec-y) {
  display: inline-flex; align-items: center; min-height: 40px; padding: 0 18px; border-radius: 8px;
  background: var(--h-card); color: var(--h-ink); border: 1px solid var(--h-line-strong); text-decoration: none; }
/* After an act the page returns to *Where it stands*, briefly marked (ux/128 §4). */
body[data-plane="workspace"] .decision-bands #standing:target { border-color: var(--h-accent); box-shadow: 0 0 0 3px var(--h-accent-soft); }
@media (max-width: 48rem) {
  body[data-plane="workspace"] .dec2-head { grid-template-columns: minmax(0, 1fr); }
  body[data-plane="workspace"] .dec2-who { min-width: 0; }
  body[data-plane="workspace"] .dec2-split { grid-template-columns: minmax(0, 1fr); gap: 16px; }
  body[data-plane="workspace"] .dec2-half + .dec2-half { padding: 16px 0 0; border-left: 0; border-top: 1px solid var(--h-line); }
  body[data-plane="workspace"] .dec2-half:first-child { padding-right: 0; }
  body[data-plane="workspace"] .dec2-act { flex: 1 1 100%; }
  body[data-plane="workspace"] .dec2-divider { display: none; }
}
/* Page 11 (ux/125 §6): *Change* / *Assign a decision-maker* opens the chooser in place. */
body[data-plane="workspace"] .app-assign { display: none; margin: 14px 0 0; }
body[data-plane="workspace"] .app-assign:target { display: block; }
body[data-plane="workspace"] .app-assign-link { color: var(--h-accent); text-decoration: none; }
/* ux/129 (ANSWER 127-b, owner): pages 10 and 11 state their purpose under the kind line. */
body[data-plane="workspace"] .cand-page-lede:not(#cand-x) { margin: 4px 0 0; font-size: var(--type-body); color: var(--h-muted); }
