/* ==================================================================
   Application definitions destination (Threshold) - ad-* / ax-* /
   adsw-* / mlist-* / cc-modal* / cc-confirm-popover / cc-provider-
   popover vocabulary.

   Lifted verbatim from the design canon's destination-specific layer
   - docs/design-references/design_handoff_application_definitions/
   styles/{appdef.css, appdef-v2.css .. appdef-v7.css} - concatenated
   in numbered cascade order (later rounds override earlier ones; see
   each round's own header comment below for what it adds). Bare
   canon tokens rewritten to the live --th-* namespace (ADR-0035),
   following the exact convention established in payment-processors.css
   and tenant-profile.css:

     --paper*    → --th-paper*        --r-3/5/pill → --th-radius-3/5/pill
     --ink*      → --th-ink*          --f-sans/serif/mono → --th-f-sans/serif/mono
     --line*     → --th-line*         --t-NN  → --th-size-NN
     --advant*   → --th-advant*       --ok*   → --th-ok*
     --marigold* → --th-marigold*     --warn-soft → --th-warn-soft
     --risk*     → --th-risk*         --subbar-h  → --th-chrome-subbar-h

   Every bare token the canon files reference already has a live
   --th-* equivalent in threshold-tokens.css - no "-sunk"/"-deep"/
   "-soft" variant needed a nearest-token substitution and no new
   :root token was declared here.

   Omitted (already present live via threshold-tokens.css +
   threshold-chrome.css, loaded by MainLayout): tokens.css, chrome.css,
   threshold-chrome.css. Also omitted: prototype.css (prototype-only,
   never intended to ship).

   Design-handoff documentation scaffolding from the canon sources is
   intentionally excluded here; this TOC lists shipped product CSS only.
   ================================================================== */

/* ==================================================================
   THRESHOLD - Application definitions destination
   ------------------------------------------------------------------
   Per-AppDef admin destination. Sibling to Application forms (form
   builder workshop) and Rules (three-pane rule editor). Hosted below
   the .adsw-bar; the chrome above is owned by the shell.

   This stylesheet adds:
     1. .adsw-bar - extracted from search-and-switcher.css for self-
        containment (this file is the only consumer here).
     2. .ad-header - destination header pattern: title + lifecycle
        badge + metadata strip + (conditional) draft-form chip.
     3. .ad-tabs - sub-navigation tab strip.
     4. .ad-page - page chrome (section grid, sub-surface chrome).
     5. .ad-cycle-* - Cycle sub-surface chrome (terms list, lifecycle
        timeline, AppDef-state badge).
     6. .ad-empty - coming-soon empty-state for unbuilt stubs.
     7. .ad-archive-* - the whole-definition Archive tab's read-only
        operator guidance, plus the preserved round-one .ad-modal-*
        generic high-risk confirmation chrome.
   ================================================================== */


/* ------------------------------------------------------------------
   adsw-bar (extracted minimal - see search-and-switcher.css for full)
   ------------------------------------------------------------------ */
.adsw-bar {
  display: flex;
  align-items: center;
  gap: 16px;
  height: var(--th-chrome-subbar-h);
  padding: 0 24px;
  background: linear-gradient(to right, var(--th-marigold-soft) 0%, var(--th-marigold-soft) 8px, var(--th-paper-sunk) 8px);
  border-bottom: 1px solid var(--th-line);
  position: relative;
}
.adsw-bar::before {
  content: "";
  position: absolute;
  left: 0; top: 0; bottom: 0;
  width: 3px;
  background: var(--th-marigold-deep);
}
.adsw-bar-label {
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: var(--th-size-13);
  color: var(--th-marigold-deep);
  font-weight: 500;
}
.adsw-anchor {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 5px 10px 5px 12px;
  border: 1px solid var(--th-line-2);
  border-radius: var(--th-radius-3);
  background: var(--th-paper);
  cursor: pointer;
  font-size: var(--th-size-14);
  min-width: 320px;
}
.adsw-anchor:hover { border-color: var(--th-ink-4); }
.adsw-anchor-body { display: flex; flex-direction: column; line-height: 1.15; flex: 1; }
.adsw-anchor-name { font-weight: 600; color: var(--th-ink); }
.adsw-anchor-meta {
  font-size: 11px;
  color: var(--th-ink-3);
  font-family: var(--th-f-mono);
  font-variant-numeric: tabular-nums;
}
.adsw-rightstat {
  margin-left: auto;
  display: flex;
  gap: 14px;
  font-size: 13px;
  color: var(--th-ink-3);
}
.adsw-rightstat .kv { display: flex; gap: 5px; align-items: baseline; }
.adsw-rightstat .k {
  color: var(--th-ink-4);
  text-transform: uppercase;
  font-size: 10px;
  letter-spacing: 0.1em;
}
.adsw-rightstat .v {
  color: var(--th-ink);
  font-weight: 500;
  font-family: var(--th-f-mono);
  font-variant-numeric: tabular-nums;
}


/* ------------------------------------------------------------------
   Destination header
   ------------------------------------------------------------------
   Sits below the .adsw-bar. Three rows of meaning:
     row 1 (eyebrow)  - Authoring · Application definitions
     row 2 (title)    - AppDef name + lifecycle-state badge + draft chip
     row 3 (metadata) - key · version · accepting · last edited
   The full lifecycle surface (timeline, term docs, deadlines) lives
   in the Cycle tab - the header carries only the badge.
   ------------------------------------------------------------------ */
.ad-header {
  padding: 22px 28px 0;
  background: var(--th-paper);
  border-bottom: 0;
}
.ad-eyebrow {
  display: flex;
  align-items: center;
  gap: 8px;
  font-family: var(--th-f-mono);
  font-size: 10.5px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--th-ink-3);
}
.ad-eyebrow .sep { color: var(--th-ink-4); }
.ad-eyebrow .leaf { color: var(--th-ink-2); }

.ad-titlerow {
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 12px;
  margin-top: 10px;
}
.ad-title {
  margin: 0;
  font-family: var(--th-f-serif);
  font-weight: 500;
  font-size: var(--th-size-32);
  letter-spacing: -0.012em;
  color: var(--th-ink);
  line-height: 1.05;
}
.ad-title .em {
  font-family: var(--th-f-serif);
  font-style: italic;
  color: var(--th-marigold-deep);
  font-weight: 500;
}

/* Lifecycle-state badge - earned, not loud. The Cycle tab carries
   the explanation; the badge is a chip with a dot. */
.ad-state {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-family: var(--th-f-sans);
  font-size: 11.5px;
  font-weight: 500;
  letter-spacing: 0.005em;
  padding: 2px 9px;
  border-radius: var(--th-radius-pill);
  border: 1px solid transparent;
  position: relative;
  top: -2px;
}
.ad-state .dot { width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.ad-state.is-open    { background: var(--th-ok-soft);   color: oklch(38% 0.10 155); }
.ad-state.is-closing { background: var(--th-warn-soft); color: oklch(42% 0.13 65); }
.ad-state.is-closed  { background: var(--th-paper-2);   color: var(--th-ink-3); border-color: var(--th-line); }
.ad-state.is-noterm  { background: var(--th-paper-2);   color: var(--th-ink-3); border-color: var(--th-line-2); border-style: dashed; }

/* Draft-form-version chip - persistent affordance to the form builder.
   This is the one piece of chrome that intentionally crosses the IA
   boundary into Application forms; per the editorial-decision panel
   it's earned because cycle-date changes intersect with the form
   draft's timing. Suppressed when DraftVersionId is null. */
.ad-draftchip {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-family: var(--th-f-sans);
  font-size: 11.5px;
  padding: 3px 9px 3px 10px;
  border-radius: var(--th-radius-pill);
  background: var(--th-marigold-soft);
  color: var(--th-marigold-deep);
  border: 1px solid color-mix(in oklch, var(--th-marigold-deep) 30%, transparent);
  cursor: pointer;
  position: relative;
  top: -2px;
}
.ad-draftchip:hover {
  background: color-mix(in oklch, var(--th-marigold-soft) 60%, var(--th-paper-sunk));
  border-color: var(--th-marigold);
}
.ad-draftchip .dot {
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--th-marigold-deep);
  flex: none;
}
.ad-draftchip .em {
  font-family: var(--th-f-serif);
  font-style: italic;
}
.ad-draftchip .arrow {
  margin-left: 2px;
  color: color-mix(in oklch, var(--th-marigold-deep) 75%, var(--th-ink-3));
}

.ad-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0;
  margin-top: 14px;
  padding-bottom: 18px;
  font-size: var(--th-size-13);
  color: var(--th-ink-3);
}
.ad-meta .kv {
  display: inline-flex;
  align-items: baseline;
  gap: 6px;
}
.ad-meta .k {
  font-family: var(--th-f-mono);
  font-size: 10px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--th-ink-4);
}
.ad-meta .v {
  color: var(--th-ink-2);
  font-family: var(--th-f-mono);
  font-variant-numeric: tabular-nums;
}
.ad-meta .v.is-name { color: var(--th-ink); }
.ad-meta .v em {
  font-family: var(--th-f-serif);
  font-style: italic;
  color: var(--th-marigold-deep);
  font-weight: 500;
}
.ad-meta .sep {
  width: 1px; height: 11px;
  background: var(--th-line-2);
  margin: 0 14px;
  display: inline-block;
}


/* ------------------------------------------------------------------
   Sub-navigation - tabs
   ------------------------------------------------------------------
   Tabs hug the bottom of the header surface and double as a hairline
   for the working surface below. Active tab carries an --advant rail
   on its bottom edge (UI accent, not copper - copper is reserved for
   the AppDef switcher above and for editorial moments inside panels).
   Archive sits at the far right with a hairline gutter - same row,
   slightly separated because its Atlas-owned lifecycle guidance is
   orthogonal to the Application Definition workspace tabs.
   ------------------------------------------------------------------ */
.ad-tabs {
  display: flex;
  align-items: stretch;
  gap: 0;
  padding: 0 28px;
  border-bottom: 1px solid var(--th-line);
  background: var(--th-paper);
}
.ad-tab {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 10px 14px 12px;
  font-family: var(--th-f-sans);
  font-size: var(--th-size-14);
  color: var(--th-ink-3);
  background: transparent;
  border: 0;
  cursor: pointer;
  position: relative;
  font-weight: 500;
}
.ad-tab:hover { color: var(--th-ink); }
.ad-tab.is-active {
  color: var(--th-ink);
  font-weight: 600;
}
.ad-tab.is-active::after {
  content: "";
  position: absolute;
  left: 10px; right: 10px;
  bottom: -1px;
  height: 2px;
  background: var(--th-advant);
  border-radius: 1.5px 1.5px 0 0;
}
.ad-tab .count {
  font-family: var(--th-f-mono);
  font-variant-numeric: tabular-nums;
  font-size: 11px;
  color: var(--th-ink-4);
  margin-left: 2px;
}
.ad-tab.is-active .count { color: var(--th-advant-deep); }
.ad-tab.is-stub {
  color: var(--th-ink-4);
}
.ad-tab.is-stub::before {
  content: "";
  width: 5px; height: 5px;
  border-radius: 50%;
  background: var(--th-line-2);
  margin-right: 2px;
}
.ad-tab.is-destructive {
  margin-left: auto;
  padding-left: 22px;
  color: var(--th-ink-3);
  position: relative;
}
.ad-tab.is-destructive::before {
  content: "";
  position: absolute;
  left: 0;
  top: 8px; bottom: 8px;
  width: 1px;
  background: var(--th-line);
}
.ad-tab.is-destructive:hover { color: oklch(45% 0.13 25); }

@media (max-width: 760px) {
  .ad-tabs {
    overflow-x: auto;
    overscroll-behavior-x: contain;
    scrollbar-width: thin;
  }
  .ad-tab {
    flex: 0 0 auto;
    white-space: nowrap;
  }
}


/* ------------------------------------------------------------------
   Page chrome
   ------------------------------------------------------------------ */
.ad-page {
  padding: 24px 28px 48px;
  background: var(--th-paper);
  display: grid;
  gap: 18px;
}

/* Two-column reading layout for the Cycle tab.
   Left rail: lifecycle state + accepting terms (the destination's
   primary read-and-link surface). Right rail: derived window,
   deadlines, soft connections out to upstream destinations.        */
.ad-cycle-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr);
  gap: 18px;
  align-items: start;
}

/* Panel - restated locally so this destination's panels can carry
   the slim editorial-eyebrow + serif-title pattern consistently. */
.ad-panel {
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-5);
}
.ad-panel-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 16px;
  padding: 14px 18px 12px;
  border-bottom: 1px solid var(--th-line);
}
.ad-panel-eyebrow {
  font-family: var(--th-f-mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--th-ink-4);
  margin-bottom: 4px;
}
.ad-panel-title {
  font-family: var(--th-f-serif);
  font-size: var(--th-size-17);
  font-weight: 500;
  color: var(--th-ink);
  letter-spacing: -0.005em;
  margin: 0;
}
.ad-panel-title .em {
  font-family: var(--th-f-serif);
  font-style: italic;
  color: var(--th-marigold-deep);
}
.ad-panel-action {
  font-size: var(--th-size-13);
  color: var(--th-ink-3);
  cursor: pointer;
  display: inline-flex; gap: 5px; align-items: center;
}
.ad-panel-action:hover { color: var(--th-advant-deep); }
.ad-panel-action .em {
  font-family: var(--th-f-serif);
  font-style: italic;
  color: var(--th-marigold-deep);
}
.ad-panel-body { padding: 16px 18px 18px; }
.ad-panel-body.is-tight { padding: 0; }
.ad-panel-foot {
  border-top: 1px solid var(--th-line);
  padding: 10px 18px;
  background: var(--th-paper-2);
  font-size: 11.5px;
  color: var(--th-ink-3);
  display: flex;
  align-items: center;
  gap: 14px;
}
.ad-panel-foot .em {
  font-family: var(--th-f-serif);
  font-style: italic;
  color: var(--th-marigold-deep);
}


/* ------------------------------------------------------------------
   Cycle - lifecycle state block
   ------------------------------------------------------------------ */
.ad-lifecycle {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 14px;
  align-items: start;
  padding: 16px 18px 18px;
  border-bottom: 1px solid var(--th-line);
}
.ad-lifecycle-glyph {
  width: 36px; height: 36px;
  border-radius: 50%;
  display: grid; place-items: center;
  background: var(--th-ok-soft);
  color: oklch(40% 0.10 155);
  font-family: var(--th-f-serif);
  font-size: 17px;
  font-weight: 600;
  margin-top: 2px;
}
/* .is-accepting / .is-idle - Task 4c.1 port. Canon (proto/cycle.jsx TermsList) applies these
   two states as INLINE styles rather than stylesheet classes (no matching rule exists in any
   appdef*.css round). Lifted here as real classes, retokenized to --th-*, so the Blazor port
   doesn't hand-roll the equivalent as component-level inline style. */
.ad-lifecycle-glyph.is-accepting {
  background: color-mix(in oklch, var(--th-ok-soft) 80%, var(--th-paper-sunk));
  color: oklch(38% 0.10 155);
  border: 1px solid color-mix(in oklch, oklch(50% 0.12 155) 30%, transparent);
}
.ad-lifecycle-glyph.is-idle {
  background: var(--th-paper-2);
  color: var(--th-ink-3);
  border: 1px solid var(--th-line-2);
}
.ad-lifecycle-body { display: flex; flex-direction: column; gap: 4px; }
.ad-lifecycle-state {
  font-family: var(--th-f-serif);
  font-size: 20px;
  font-weight: 500;
  letter-spacing: -0.005em;
  color: var(--th-ink);
}
.ad-lifecycle-state .verb { font-style: italic; color: var(--th-marigold-deep); }
.ad-lifecycle-explain {
  font-size: var(--th-size-13);
  color: var(--th-ink-2);
  line-height: 1.55;
  max-width: 56ch;
}
.ad-lifecycle-explain code {
  font-family: var(--th-f-mono);
  font-size: 11.5px;
  background: var(--th-paper-2);
  border: 1px solid var(--th-line);
  padding: 0 4px;
  border-radius: var(--th-radius-3);
  color: var(--th-ink-2);
}
.ad-lifecycle-source {
  margin-top: 4px;
  font-family: var(--th-f-mono);
  font-size: 10.5px;
  letter-spacing: 0.04em;
  color: var(--th-ink-4);
}

/* Term list - read-and-link surface, no inline editing */
.ad-terms {
  list-style: none;
  margin: 0;
  padding: 0;
}
.ad-term {
  display: grid;
  grid-template-columns: 16px 1fr auto;
  align-items: center;
  gap: 12px;
  padding: 12px 18px;
  border-bottom: 1px solid var(--th-line-soft);
  cursor: default;
}
.ad-term:last-child { border-bottom: 0; }
.ad-term:hover { background: var(--th-paper-2); }
.ad-term .stripe {
  width: 4px; height: 28px;
  border-radius: 2px;
  background: var(--th-marigold-deep);
  margin-left: 4px;
}
.ad-term.is-future .stripe { background: var(--th-line-2); }
.ad-term.is-past .stripe { background: var(--th-ink-4); opacity: 0.6; }
.ad-term-body { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.ad-term-name {
  font-size: var(--th-size-14);
  font-weight: 600;
  color: var(--th-ink);
}
.ad-term-name .keytag {
  font-family: var(--th-f-mono);
  font-weight: 400;
  font-size: 11.5px;
  color: var(--th-ink-4);
  margin-left: 8px;
}
.ad-term-window {
  font-family: var(--th-f-mono);
  font-size: 11.5px;
  font-variant-numeric: tabular-nums;
  color: var(--th-ink-3);
}
.ad-term-state {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-family: var(--th-f-sans);
  font-size: 11.5px;
  padding: 1px 8px;
  border-radius: var(--th-radius-pill);
}
.ad-term-state .dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
.ad-term-state.is-accepting { background: var(--th-ok-soft);   color: oklch(38% 0.10 155); }
.ad-term-state.is-future    { background: var(--th-paper-2);   color: var(--th-ink-3); border: 1px solid var(--th-line); }
.ad-term-state.is-past      { background: var(--th-paper-2);   color: var(--th-ink-4); border: 1px solid var(--th-line); text-decoration: line-through; text-decoration-thickness: 1px; text-decoration-color: var(--th-ink-4); }


/* Cycle - right rail: derived window, deadlines, audit footers */
.ad-keylines {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
}
.ad-keyline {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  padding: 11px 18px;
  border-bottom: 1px solid var(--th-line-soft);
  font-size: var(--th-size-13);
}
.ad-keyline:last-child { border-bottom: 0; }
.ad-keyline .k {
  color: var(--th-ink-3);
  font-family: var(--th-f-mono);
  font-size: 10.5px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}
.ad-keyline .v {
  color: var(--th-ink);
  font-family: var(--th-f-mono);
  font-variant-numeric: tabular-nums;
  font-size: 12.5px;
  text-align: right;
}
.ad-keyline .v small {
  display: block;
  font-family: var(--th-f-sans);
  font-weight: 400;
  font-size: 11px;
  color: var(--th-ink-3);
  margin-top: 1px;
  text-align: right;
}

/* Identity / basics row at the top of the page (sits before the
   Cycle grid). Carries the editable name, immutable key, application type,
   tags. Audit stamps + version IDs sit in the right column. */
.ad-identity {
  display: grid;
  grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr);
  gap: 18px;
  align-items: stretch;
}
.ad-identity .ad-panel-body { display: flex; flex-direction: column; gap: 14px; }
.ad-field {
  display: grid;
  grid-template-columns: 140px 1fr;
  align-items: center;
  gap: 14px;
}
.ad-field .lbl {
  font-family: var(--th-f-mono);
  font-size: 10.5px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--th-ink-4);
}
.ad-field .val {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  font-size: var(--th-size-14);
  color: var(--th-ink);
}
.ad-field .val .name {
  font-family: var(--th-f-serif);
  font-size: var(--th-size-17);
  letter-spacing: -0.005em;
  font-weight: 500;
}
.ad-field .val .key {
  font-family: var(--th-f-mono);
  font-size: 12.5px;
  padding: 2px 7px;
  border-radius: var(--th-radius-3);
  background: var(--th-paper-2);
  border: 1px solid var(--th-line);
  color: var(--th-ink-2);
}
.ad-field .val .key-lock {
  font-family: var(--th-f-mono);
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--th-ink-4);
}
.ad-field .val .tag {
  font-size: 11.5px;
  padding: 2px 8px;
  border-radius: var(--th-radius-pill);
  background: var(--th-advant-soft);
  color: var(--th-advant-deep);
  font-weight: 500;
}
.ad-field .val .pencil {
  margin-left: 4px;
  color: var(--th-ink-4);
  width: 18px; height: 18px;
  display: grid; place-items: center;
  border-radius: var(--th-radius-3);
  cursor: pointer;
}
.ad-field .val .pencil:hover { background: var(--th-paper-2); color: var(--th-ink); }

/* Version-ID rail - read-only awareness */
.ad-version-rail {
  display: flex;
  flex-direction: column;
  gap: 0;
}
.ad-version-rail .ad-keyline:first-child { padding-top: 12px; }
.ad-version-rail .pillrow {
  display: inline-flex; align-items: center; gap: 6px;
}
.ad-version-rail .vchip {
  font-family: var(--th-f-mono);
  font-size: 11.5px;
  padding: 1px 6px;
  border-radius: var(--th-radius-3);
  background: var(--th-advant-soft);
  color: var(--th-advant-deep);
  border: 1px solid color-mix(in oklch, var(--th-advant) 30%, transparent);
}
.ad-version-rail .vchip.is-draft {
  background: var(--th-marigold-soft);
  color: var(--th-marigold-deep);
  border-color: color-mix(in oklch, var(--th-marigold-deep) 30%, transparent);
}
.ad-version-rail .vchip.is-null {
  background: transparent;
  color: var(--th-ink-4);
  border-color: var(--th-line-2);
  border-style: dashed;
}


/* ------------------------------------------------------------------
   Permissions - fixture stub (treatment (c))
   ------------------------------------------------------------------
   Visible chrome with fixture content so the destination's tab strip
   reads honestly end-to-end. The "sourced from" footer is the IA
   contract - this is a read view; the canonical grant surface lives
   in the tenant-wide role system.
   ------------------------------------------------------------------ */
.ad-perm-table { width: 100%; border-collapse: separate; border-spacing: 0; font-size: var(--th-size-13); }
.ad-perm-table thead th {
  text-align: left;
  padding: 9px 18px;
  font-weight: 600;
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--th-ink-3);
  border-bottom: 1px solid var(--th-line);
  background: var(--th-paper-2);
}
.ad-perm-table tbody td {
  padding: 11px 18px;
  border-bottom: 1px solid var(--th-line-soft);
  color: var(--th-ink);
  vertical-align: middle;
}
.ad-perm-table tbody tr:last-child td { border-bottom: 0; }
.ad-perm-table tbody tr:hover { background: var(--th-paper-2); }
.ad-perm-role {
  display: flex; flex-direction: column; gap: 2px;
}
.ad-perm-role .name { font-weight: 600; color: var(--th-ink); }
.ad-perm-role .desc { font-size: 11.5px; color: var(--th-ink-3); }
.ad-perm-grantees {
  display: flex; flex-wrap: wrap; gap: 5px;
  font-family: var(--th-f-sans);
}
.ad-perm-grantees .who {
  font-size: 11.5px;
  padding: 1px 8px;
  border-radius: var(--th-radius-pill);
  background: var(--th-paper-2);
  border: 1px solid var(--th-line);
  color: var(--th-ink-2);
}
.ad-perm-grantees .who.is-group {
  background: var(--th-advant-soft);
  border-color: color-mix(in oklch, var(--th-advant) 30%, transparent);
  color: var(--th-advant-deep);
}
.ad-perm-grantees .more { color: var(--th-ink-3); font-size: 11.5px; padding: 1px 4px; }
.ad-perm-scope {
  font-family: var(--th-f-mono);
  font-size: 11.5px;
  color: var(--th-ink-3);
}
.ad-perm-scope.is-allappdefs { color: var(--th-ink-4); font-style: italic; font-family: var(--th-f-serif); font-size: 12.5px; }


/* ------------------------------------------------------------------
   Permissions tab - round-7 canon read-only effective-access view
   (proto/permissions.jsx, components.md §5). Ported from
   design_handoff_application_definitions/proto/prototype.css, which is
   where this block actually lives (NOT styles/appdef.css in the handoff
   bundle - same port-gap precedent as the Archive tab's .ad-archive-*).
   Retokenized to --th-* per ADR-0035. Only the read-only-view rules are
   ported: prototype.css also carries an EARLIER round's editable-grant
   treatment (.ad-perms-role role-picker button, .ad-role-menu dropdown,
   .ad-perms-row .remove) that the final canon's PermsRow does not use -
   this tab has no invite/role/remove affordances (ADR-0014), so those
   rules are deliberately not ported.
   ------------------------------------------------------------------ */
.ad-perms {
  display: grid;
  gap: 18px;
}
.ad-perms-row {
  display: grid;
  grid-template-columns: 40px 1fr 200px auto;
  align-items: center;
  gap: 14px;
  padding: 10px 16px;
  border-bottom: 1px solid var(--th-line-soft);
}
.ad-perms-row:last-child { border-bottom: 0; }
.ad-perms-row .avatar {
  width: 32px; height: 32px;
  border-radius: 50%;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 13px;
  font-weight: 600;
  color: var(--th-ink-2);
}
.ad-perms-row .body { min-width: 0; }
.ad-perms-row .name {
  font-size: 13.5px;
  font-weight: 600;
  color: var(--th-ink);
  letter-spacing: -0.005em;
}
.ad-perms-row .email {
  font-family: var(--th-f-mono);
  font-size: 10.5px;
  color: var(--th-ink-3);
}
.ad-perms-row .src {
  font-family: var(--th-f-sans);
  font-size: 10.5px;
  color: var(--th-ink-3);
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line);
  padding: 1px 7px;
  border-radius: var(--th-radius-pill);
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-weight: 500;
  justify-self: start;
}
.ad-perms-row .src .dot {
  width: 5px; height: 5px;
  border-radius: 50%;
  background: var(--th-ink-4);
}
.ad-perms-row .src.is-direct {
  color: var(--th-marigold-deep);
  background: var(--th-marigold-soft);
  border-color: color-mix(in oklch, var(--th-marigold-deep) 30%, transparent);
}
.ad-perms-row .src.is-direct .dot { background: var(--th-marigold-deep); }

/* Tenant role inheritance card */
.ad-perms-tenant-card {
  background: var(--th-advant-soft);
  border: 1px solid color-mix(in oklch, var(--th-advant) 30%, transparent);
  border-radius: var(--th-radius-5);
  padding: 13px 16px;
  display: grid;
  grid-template-columns: 18px 1fr auto;
  gap: 12px;
  align-items: center;
  margin-bottom: 14px;
}
.ad-perms-tenant-card .g {
  color: var(--th-advant-deep);
  display: inline-flex;
  margin-top: 1px;
}
.ad-perms-tenant-card .body {
  font-size: 12.5px;
  color: var(--th-ink-2);
  line-height: 1.5;
}
.ad-perms-tenant-card .body strong {
  color: var(--th-ink);
  font-weight: 600;
}
.ad-perms-tenant-card .out {
  font-family: var(--th-f-sans);
  font-size: 12px;
  color: var(--th-advant-deep);
  text-decoration: none;
  font-weight: 500;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  white-space: nowrap;
}
.ad-perms-tenant-card .out:hover { text-decoration: underline; }

[data-theme="dark"] .ad-perms-tenant-card {
  background: oklch(24% 0.06 245);
  border-color: color-mix(in oklch, oklch(70% 0.13 245) 40%, transparent);
}


/* ------------------------------------------------------------------
   Empty / coming-soon state - treatment (b) for unbuilt stubs.
   ------------------------------------------------------------------
   Used by Fees, Notifications, Exports. Honest, narrow, one-line on
   the responsible spec doc. NOT a SaaS empty-state - no illustration,
   no marketing copy.
   ------------------------------------------------------------------ */
.ad-empty {
  padding: 56px 28px 64px;
  display: grid;
  place-items: center;
  text-align: center;
  background: repeating-linear-gradient(
    45deg,
    var(--th-paper) 0,
    var(--th-paper) 8px,
    var(--th-paper-2) 8px,
    var(--th-paper-2) 16px
  );
  border-radius: var(--th-radius-5);
  border: 1px dashed var(--th-line-2);
}
.ad-empty .eyebrow {
  font-family: var(--th-f-mono);
  font-size: 10.5px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--th-ink-4);
}
.ad-empty .title {
  margin-top: 10px;
  font-family: var(--th-f-serif);
  font-size: 22px;
  font-weight: 500;
  letter-spacing: -0.005em;
  color: var(--th-ink);
}
.ad-empty .title .em {
  font-family: var(--th-f-serif);
  font-style: italic;
  color: var(--th-marigold-deep);
}
.ad-empty .desc {
  margin-top: 8px;
  font-size: var(--th-size-13);
  color: var(--th-ink-2);
  line-height: 1.55;
  max-width: 56ch;
}
.ad-empty .desc code {
  font-family: var(--th-f-mono);
  font-size: 11.5px;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line);
  padding: 0 5px;
  border-radius: var(--th-radius-3);
  color: var(--th-ink-2);
}
.ad-empty .src {
  margin-top: 16px;
  font-family: var(--th-f-mono);
  font-size: 11px;
  letter-spacing: 0.04em;
  color: var(--th-ink-4);
}
.ad-empty .src a {
  color: var(--th-advant-deep);
  text-decoration: none;
}


/* ------------------------------------------------------------------
   Archive tab - read-only operator guidance
   ------------------------------------------------------------------
   The live Threshold tab explains that Application Definition
   archive/restore operations are owned by Atlas. These classes style
   only that guidance surface; no mutation controls are rendered here.
   Token references
   retune automatically via threshold-tokens.css.

   Distinct from the .ad-modal-* block directly below: that is an
   unrelated, earlier-round (canon round 1) generic high-risk
   confirmation pattern and does not back this read-only tab.
   ------------------------------------------------------------------ */
.ad-archive {
  max-width: 760px;
  display: grid;
  gap: 18px;
}

.ad-archive-card {
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-5);
  padding: 22px 24px;
}
.ad-archive-card h3 {
  font-family: var(--th-f-serif);
  font-size: 19px;
  font-weight: 500;
  letter-spacing: -0.01em;
  color: var(--th-ink);
  margin: 0 0 8px;
}
.ad-archive-card .lead {
  font-size: 13px;
  color: var(--th-ink-2);
  line-height: 1.55;
  margin: 0 0 16px;
}

/* ------------------------------------------------------------------
   Shared confirmation modal foundation
   ------------------------------------------------------------------
   Generic high-risk confirmation surface. Uses --risk and oxblood-
   adjacent warmth, while oxblood proper (--xr-bind) stays reserved
   for brand chrome (sidenav lockup + footer endorsement) per ADR-0035.
   ------------------------------------------------------------------ */
.ad-modal-scrim {
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, oklch(20% 0.01 255 / 0.22) 0%, oklch(20% 0.01 255 / 0.36) 100%);
  z-index: 50;
  backdrop-filter: blur(2px);
  -webkit-backdrop-filter: blur(2px);
}
.ad-modal {
  position: absolute;
  left: 50%; top: 50%;
  transform: translate(-50%, -50%);
  z-index: 60;
  width: 560px;
  max-width: calc(100% - 48px);
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line-2);
  border-radius: 10px;
  box-shadow:
    0 1px 0 oklch(20% 0.01 255 / 0.04),
    0 12px 36px oklch(20% 0.01 255 / 0.18),
    0 40px 80px oklch(20% 0.01 255 / 0.12);
  overflow: hidden;
}
.ad-modal-head {
  display: grid;
  grid-template-columns: 36px 1fr auto;
  gap: 14px;
  align-items: flex-start;
  padding: 18px 20px 16px;
  background: var(--th-risk-soft);
  border-bottom: 1px solid color-mix(in oklch, var(--th-risk) 30%, transparent);
}
.ad-modal-glyph {
  width: 32px; height: 32px;
  border-radius: 50%;
  background: var(--th-paper-sunk);
  border: 1px solid color-mix(in oklch, var(--th-risk) 30%, transparent);
  color: oklch(45% 0.14 25);
  display: grid; place-items: center;
  margin-top: 2px;
}
.ad-modal-titles { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.ad-modal-title {
  margin: 0;
  font-family: var(--th-f-serif);
  font-size: 18px;
  font-weight: 500;
  letter-spacing: -0.005em;
  color: var(--th-ink);
}
.ad-modal-subtitle {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 11.5px;
  color: var(--th-ink-3);
}
.ad-modal-subtitle .badge {
  font-family: var(--th-f-mono);
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 1px 7px;
  border-radius: var(--th-radius-pill);
  background: var(--th-paper-sunk);
  border: 1px solid color-mix(in oklch, var(--th-risk) 30%, transparent);
  color: oklch(45% 0.14 25);
}
.ad-modal-subtitle .name {
  font-family: var(--th-f-mono);
  font-size: 11.5px;
  color: var(--th-ink);
}
.ad-modal-close {
  width: 24px; height: 24px;
  display: grid; place-items: center;
  border-radius: var(--th-radius-3);
  cursor: pointer;
  color: var(--th-ink-3);
  background: transparent;
  border: 0;
}
.ad-modal-close:hover { background: var(--th-paper); color: var(--th-ink); }

.ad-modal-body { padding: 16px 20px 18px; }
.ad-modal-body p {
  margin: 0 0 12px;
  font-size: var(--th-size-13);
  color: var(--th-ink);
  line-height: 1.55;
}
.ad-modal-body p .em { font-weight: 600; color: var(--th-ink); }
.ad-modal-body p .muted { color: var(--th-ink-3); }
.ad-modal-impact {
  list-style: none;
  padding: 0;
  margin: 0 0 14px;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.ad-modal-impact li {
  display: grid;
  grid-template-columns: 20px 1fr;
  align-items: flex-start;
  gap: 10px;
  padding: 8px 12px;
  background: var(--th-paper);
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-3);
  font-size: 12.5px;
  color: var(--th-ink);
  line-height: 1.45;
}
.ad-modal-impact li .g {
  width: 18px; height: 18px;
  display: grid; place-items: center;
  border-radius: 3px;
  background: var(--th-risk-soft);
  color: oklch(40% 0.14 25);
  border: 1px solid color-mix(in oklch, var(--th-risk) 25%, transparent);
  font-family: var(--th-f-mono);
  font-size: 11px;
  font-weight: 700;
  margin-top: 1px;
}
.ad-modal-impact li .g.is-info {
  background: var(--th-paper-2);
  color: var(--th-ink-3);
  border-color: var(--th-line);
}

.ad-modal-confirm-row {
  margin-top: 6px;
  padding: 12px 14px 14px;
  background: var(--th-paper-2);
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-3);
}
.ad-modal-confirm-lbl {
  font-size: 12.5px;
  color: var(--th-ink-2);
  margin-bottom: 8px;
  line-height: 1.5;
}
.ad-modal-confirm-lbl code {
  font-family: var(--th-f-mono);
  font-size: 12px;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-3);
  padding: 1px 6px;
  color: var(--th-ink);
  font-weight: 600;
}
.ad-modal-input {
  width: 100%;
  font-family: var(--th-f-mono);
  font-size: 13.5px;
  padding: 8px 11px;
  border-radius: var(--th-radius-3);
  border: 1px solid var(--th-line-2);
  background: var(--th-paper-sunk);
  color: var(--th-ink);
  letter-spacing: 0.005em;
}
.ad-modal-input::placeholder { color: var(--th-ink-4); }
.ad-modal-input:focus {
  outline: none;
  border-color: oklch(50% 0.14 25);
  box-shadow: 0 0 0 3px var(--th-risk-soft);
}
.ad-modal-input.is-typing {
  color: oklch(40% 0.14 25);
}
.ad-modal-input-state {
  display: flex; align-items: center; gap: 6px;
  margin-top: 8px;
  font-size: 11.5px;
  font-family: var(--th-f-mono);
  color: var(--th-ink-4);
  letter-spacing: 0.02em;
}
.ad-modal-input-state.is-match { color: oklch(38% 0.10 155); }

.ad-modal-foot {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px 20px;
  background: var(--th-paper-2);
  border-top: 1px solid var(--th-line);
  font-size: 11.5px;
  color: var(--th-ink-3);
}
.ad-modal-foot .audit-note {
  display: inline-flex; align-items: center; gap: 6px;
  font-family: var(--th-f-serif);
  font-style: italic;
  color: var(--th-ink-3);
  font-size: 12.5px;
}
.ad-modal-foot .spacer { flex: 1; }
.ad-modal-foot .btn-cancel {
  padding: 6px 14px;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line-2);
  color: var(--th-ink);
  font-family: var(--th-f-sans);
  font-size: 12.5px;
  font-weight: 500;
  border-radius: var(--th-radius-3);
  cursor: pointer;
}
.ad-modal-foot .btn-cancel:hover { background: var(--th-paper); border-color: var(--th-ink-4); }
.ad-modal-foot .btn-archive {
  padding: 6px 14px;
  background: var(--th-paper-sunk);
  color: oklch(45% 0.14 25);
  border: 1px solid color-mix(in oklch, var(--th-risk) 40%, transparent);
  font-family: var(--th-f-sans);
  font-size: 12.5px;
  font-weight: 600;
  border-radius: var(--th-radius-3);
  cursor: pointer;
  display: inline-flex; align-items: center; gap: 5px;
}
.ad-modal-foot .btn-archive[disabled] {
  opacity: 0.55;
  cursor: not-allowed;
  background: var(--th-paper-2);
}
.ad-modal-foot .btn-archive:not([disabled]):hover {
  background: oklch(45% 0.14 25);
  color: var(--th-paper-sunk);
}


/* Inline svg icons sized via parent */
svg.ico { display: inline-block; flex: none; }


/* ------------------------------------------------------------------
   Dark-mode polish for this destination's chrome
   ------------------------------------------------------------------ */
[data-theme="dark"] .ad-lifecycle-glyph {
  background: oklch(24% 0.04 155);
  color: oklch(78% 0.12 155);
}
[data-theme="dark"] .ad-state.is-open {
  background: oklch(24% 0.04 155);
  color: oklch(82% 0.12 155);
}
[data-theme="dark"] .ad-state.is-closing {
  background: oklch(26% 0.05 75);
  color: oklch(84% 0.12 75);
}
[data-theme="dark"] .ad-term-state.is-accepting {
  background: oklch(24% 0.04 155);
  color: oklch(82% 0.12 155);
}
[data-theme="dark"] .ad-draftchip {
  background: oklch(26% 0.05 55);
  color: oklch(82% 0.13 55);
  border-color: color-mix(in oklch, oklch(70% 0.14 55) 45%, transparent);
}
[data-theme="dark"] .ad-draftchip .dot { background: oklch(78% 0.13 55); }
[data-theme="dark"] .ad-modal-head {
  background: oklch(24% 0.06 25);
  border-bottom-color: color-mix(in oklch, oklch(60% 0.14 25) 40%, transparent);
}
[data-theme="dark"] .ad-modal-glyph {
  background: var(--th-paper-sunk);
  border-color: color-mix(in oklch, oklch(70% 0.15 25) 40%, transparent);
  color: oklch(80% 0.15 25);
}
[data-theme="dark"] .ad-modal-subtitle .badge {
  background: var(--th-paper-sunk);
  color: oklch(82% 0.15 25);
  border-color: color-mix(in oklch, oklch(70% 0.15 25) 40%, transparent);
}
[data-theme="dark"] .ad-modal-impact li .g {
  background: oklch(26% 0.06 25);
  color: oklch(82% 0.15 25);
  border-color: color-mix(in oklch, oklch(70% 0.15 25) 30%, transparent);
}
[data-theme="dark"] .ad-modal-input:focus {
  border-color: oklch(70% 0.15 25);
  box-shadow: 0 0 0 3px oklch(70% 0.15 25 / 0.18);
}
[data-theme="dark"] .ad-modal-input.is-typing { color: oklch(82% 0.15 25); }
[data-theme="dark"] .ad-modal-foot .btn-archive {
  color: oklch(82% 0.15 25);
  border-color: color-mix(in oklch, oklch(70% 0.15 25) 40%, transparent);
  background: var(--th-paper-sunk);
}
[data-theme="dark"] .ad-modal-foot .btn-archive:not([disabled]):hover {
  background: oklch(60% 0.15 25);
  color: var(--th-paper);
}
[data-theme="dark"] .ad-empty {
  background: repeating-linear-gradient(
    45deg,
    var(--th-paper) 0,
    var(--th-paper) 8px,
    var(--th-paper-2) 8px,
    var(--th-paper-2) 16px
  );
}

/* Make sure inside the modal the typing state is visible on dark */
[data-theme="dark"] .ad-modal-input::placeholder { color: var(--th-ink-4); }


/* ==================================================================
   THRESHOLD - Application definitions destination · round-two
   ------------------------------------------------------------------
   Additive overlay on appdef.css. Adds:
     1. Identifiers panel - federal-identifier inheritance from tenant
     2. Term inline-edit affordances + .cc-modal.is-form (term editor)
     3. Deadlines sub-table inside the term editor
     4. Payments tab - accepted payments + fees-with-rules
     5. Activity tab - audit rows with revert/blocked-revert
     6. .cc-impact-modal - generalised destructive/impact pattern
        (replaces round-one .ad-modal in spirit; v1 styles remain
        for the round-one file's preservation)
   No round-one rules are altered; the v2 file simply layers on top.
   ================================================================== */


/* ------------------------------------------------------------------
   §A - Identifiers panel
   ------------------------------------------------------------------
   Sits adjacent to Identity at the top of Cycle. AppDef inherits
   canonical CEEB / IPEDS / OPE / FICE from the tenant by default;
   multi-campus / multi-OPE institutions override per row.
   ------------------------------------------------------------------ */
.ad-idents {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
}
.ad-ident {
  display: grid;
  grid-template-columns: 96px 1fr auto;
  align-items: center;
  gap: 12px;
  padding: 10px 18px;
  border-bottom: 1px solid var(--th-line-soft);
  font-size: var(--th-size-13);
  min-height: 44px;
}
.ad-ident:last-child { border-bottom: 0; }
.ad-ident .lbl {
  font-family: var(--th-f-mono);
  font-size: 10px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--th-ink-4);
}
.ad-ident .val {
  font-family: var(--th-f-mono);
  font-size: 13px;
  font-variant-numeric: tabular-nums;
  color: var(--th-ink);
  display: flex;
  align-items: center;
  gap: 9px;
}
.ad-ident .val .src {
  font-family: var(--th-f-sans);
  font-size: 11px;
  color: var(--th-ink-3);
  padding: 1px 7px;
  border-radius: var(--th-radius-pill);
  background: var(--th-paper-2);
  border: 1px solid var(--th-line);
  font-weight: 500;
}
.ad-ident .val .src.is-override {
  background: var(--th-marigold-soft);
  color: var(--th-marigold-deep);
  border-color: color-mix(in oklch, var(--th-marigold-deep) 30%, transparent);
}
.ad-ident .action {
  font-size: 11.5px;
  color: var(--th-advant-deep);
  cursor: pointer;
  font-weight: 500;
}
.ad-ident .action:hover { text-decoration: underline; }
.ad-ident .action.is-revert {
  color: var(--th-ink-3);
}
.ad-ident.is-override .val {
  color: var(--th-ink);
}
.ad-ident.is-override .val input {
  font-family: var(--th-f-mono);
  font-size: 13px;
  font-variant-numeric: tabular-nums;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line-2);
  border-radius: var(--th-radius-3);
  padding: 3px 8px;
  width: 140px;
  color: var(--th-ink);
}
.ad-ident.is-override .val input:focus {
  outline: none;
  border-color: var(--th-advant);
  box-shadow: 0 0 0 3px var(--th-advant-soft);
}


/* ------------------------------------------------------------------
   §B - Term row inline-edit affordances
   ------------------------------------------------------------------
   Each .ad-term grows an edit affordance on hover; "+ Add term" sits
   in the panel head's action slot.
   ------------------------------------------------------------------ */
.ad-term { position: relative; }
.ad-term .edit-affordance {
  position: absolute;
  right: 10px; top: 50%;
  transform: translateY(-50%);
  display: inline-flex;
  gap: 4px;
  opacity: 0;
  transition: opacity 80ms ease;
  pointer-events: none;
}
.ad-term:hover .edit-affordance,
.ad-term.is-editing .edit-affordance {
  opacity: 1;
  pointer-events: auto;
}
.ad-term .edit-affordance .iconbtn {
  width: 24px; height: 24px;
  display: grid; place-items: center;
  border-radius: var(--th-radius-3);
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line-2);
  color: var(--th-ink-3);
  cursor: pointer;
}
.ad-term .edit-affordance .iconbtn:hover {
  background: var(--th-paper);
  color: var(--th-ink);
  border-color: var(--th-ink-4);
}
.ad-term.is-editing {
  background: var(--th-marigold-soft);
}
.ad-term.is-editing::after {
  content: "Editing in modal";
  position: absolute;
  right: 60px; top: 50%;
  transform: translateY(-50%);
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 11.5px;
  color: var(--th-marigold-deep);
}

/* Add-term button used inside the panel head's action slot */
.ad-add-link {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 4px 10px;
  border: 1px dashed var(--th-line-2);
  background: var(--th-paper);
  border-radius: var(--th-radius-3);
  font-family: var(--th-f-sans);
  font-size: 12.5px;
  color: var(--th-advant-deep);
  cursor: pointer;
  font-weight: 500;
}
.ad-add-link:hover {
  border-style: solid;
  border-color: var(--th-advant);
  background: var(--th-advant-soft);
}
.ad-add-link .plus {
  font-family: var(--th-f-mono);
  font-size: 14px;
  line-height: 0.5;
}


/* ------------------------------------------------------------------
   §C - cc-modal base (form + impact variants share chrome)
   ------------------------------------------------------------------
   v2 generalises the round-one .ad-modal. Surfaces:
     .cc-modal-scrim    - backdrop
     .cc-modal          - surface
     .cc-modal-head     - neutral by default; .is-impact tints risk
     .cc-modal-body
     .cc-modal-foot
   ------------------------------------------------------------------ */
.cc-modal-scrim {
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, oklch(20% 0.01 255 / 0.22) 0%, oklch(20% 0.01 255 / 0.36) 100%);
  z-index: 50;
  backdrop-filter: blur(2px);
  -webkit-backdrop-filter: blur(2px);
}
.cc-modal {
  position: absolute;
  left: 50%; top: 50%;
  transform: translate(-50%, -50%);
  z-index: 60;
  width: 600px;
  max-width: calc(100% - 48px);
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line-2);
  border-radius: 10px;
  box-shadow:
    0 1px 0 oklch(20% 0.01 255 / 0.04),
    0 12px 36px oklch(20% 0.01 255 / 0.18),
    0 40px 80px oklch(20% 0.01 255 / 0.12);
  overflow: hidden;
}

.cc-modal-head {
  display: grid;
  grid-template-columns: 36px 1fr auto;
  gap: 14px;
  align-items: flex-start;
  padding: 18px 20px 16px;
  background: var(--th-paper);
  border-bottom: 1px solid var(--th-line);
}
.cc-modal-glyph {
  width: 32px; height: 32px;
  border-radius: 50%;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line-2);
  color: var(--th-ink-3);
  display: grid; place-items: center;
  margin-top: 2px;
}

/* Impact variant - risk-tinted header */
.cc-modal.is-impact .cc-modal-head {
  background: var(--th-risk-soft);
  border-bottom-color: color-mix(in oklch, var(--th-risk) 30%, transparent);
}
.cc-modal.is-impact .cc-modal-glyph {
  border-color: color-mix(in oklch, var(--th-risk) 30%, transparent);
  color: oklch(45% 0.14 25);
}
/* Caution variant - copper-tinted header (used by Revert and Application Type reassign) */
.cc-modal.is-caution .cc-modal-head {
  background: var(--th-marigold-soft);
  border-bottom-color: color-mix(in oklch, var(--th-marigold-deep) 30%, transparent);
}
.cc-modal.is-caution .cc-modal-glyph {
  border-color: color-mix(in oklch, var(--th-marigold-deep) 35%, transparent);
  color: var(--th-marigold-deep);
}
.cc-modal-titles { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.cc-modal-title {
  margin: 0;
  font-family: var(--th-f-serif);
  font-size: 18px;
  font-weight: 500;
  letter-spacing: -0.005em;
  color: var(--th-ink);
}
.cc-modal-subtitle {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  font-size: 11.5px;
  color: var(--th-ink-3);
}
.cc-modal-subtitle .badge {
  font-family: var(--th-f-mono);
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 1px 7px;
  border-radius: var(--th-radius-pill);
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line-2);
  color: var(--th-ink-3);
}
.cc-modal.is-impact .cc-modal-subtitle .badge {
  border-color: color-mix(in oklch, var(--th-risk) 30%, transparent);
  color: oklch(45% 0.14 25);
}
.cc-modal.is-caution .cc-modal-subtitle .badge {
  border-color: color-mix(in oklch, var(--th-marigold-deep) 35%, transparent);
  color: var(--th-marigold-deep);
}
.cc-modal-subtitle .name {
  font-family: var(--th-f-mono);
  font-size: 11.5px;
  color: var(--th-ink);
}
.cc-modal-close {
  width: 24px; height: 24px;
  display: grid; place-items: center;
  border-radius: var(--th-radius-3);
  cursor: pointer;
  color: var(--th-ink-3);
  background: transparent;
  border: 0;
}
.cc-modal-close:hover { background: var(--th-paper-sunk); color: var(--th-ink); }

.cc-modal-body { padding: 16px 20px 18px; }
.cc-modal-body p {
  margin: 0 0 12px;
  font-size: var(--th-size-13);
  color: var(--th-ink);
  line-height: 1.55;
}
.cc-modal-body p .em { font-weight: 600; color: var(--th-ink); }
.cc-modal-body p .muted { color: var(--th-ink-3); }

.cc-modal-impact {
  list-style: none;
  padding: 0;
  margin: 0 0 14px;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.cc-modal-impact li {
  display: grid;
  grid-template-columns: 20px 1fr;
  align-items: flex-start;
  gap: 10px;
  padding: 8px 12px;
  background: var(--th-paper);
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-3);
  font-size: 12.5px;
  color: var(--th-ink);
  line-height: 1.45;
}
.cc-modal-impact li .g {
  width: 18px; height: 18px;
  display: grid; place-items: center;
  border-radius: 3px;
  font-family: var(--th-f-mono);
  font-size: 11px;
  font-weight: 700;
  margin-top: 1px;
  background: var(--th-paper-2);
  color: var(--th-ink-3);
  border: 1px solid var(--th-line);
}
.cc-modal-impact li .g.is-risk {
  background: var(--th-risk-soft);
  color: oklch(40% 0.14 25);
  border-color: color-mix(in oklch, var(--th-risk) 25%, transparent);
}
.cc-modal-impact li .g.is-caution {
  background: var(--th-marigold-soft);
  color: var(--th-marigold-deep);
  border-color: color-mix(in oklch, var(--th-marigold-deep) 30%, transparent);
}
.cc-modal-impact li .g.is-info {
  background: var(--th-paper-2);
  color: var(--th-ink-3);
  border-color: var(--th-line);
}
.cc-modal-impact li .g.is-ok {
  background: var(--th-ok-soft);
  color: oklch(40% 0.10 155);
  border-color: color-mix(in oklch, var(--th-ok) 25%, transparent);
}

.cc-modal-confirm-row {
  margin-top: 6px;
  padding: 12px 14px 14px;
  background: var(--th-paper-2);
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-3);
}
.cc-modal-confirm-lbl {
  font-size: 12.5px;
  color: var(--th-ink-2);
  margin-bottom: 8px;
  line-height: 1.5;
}
.cc-modal-confirm-lbl code {
  font-family: var(--th-f-mono);
  font-size: 12px;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-3);
  padding: 1px 6px;
  color: var(--th-ink);
  font-weight: 600;
}
.cc-modal-input {
  width: 100%;
  font-family: var(--th-f-mono);
  font-size: 13.5px;
  padding: 8px 11px;
  border-radius: var(--th-radius-3);
  border: 1px solid var(--th-line-2);
  background: var(--th-paper-sunk);
  color: var(--th-ink);
}
.cc-modal-input::placeholder { color: var(--th-ink-4); }
.cc-modal-input:focus {
  outline: none;
  border-color: oklch(50% 0.14 25);
  box-shadow: 0 0 0 3px var(--th-risk-soft);
}
.cc-modal-input.is-typing { color: oklch(40% 0.14 25); }
.cc-modal-input-state {
  display: flex; align-items: center; gap: 6px;
  margin-top: 8px;
  font-size: 11.5px;
  font-family: var(--th-f-mono);
  color: var(--th-ink-4);
  letter-spacing: 0.02em;
}
.cc-modal-input-state.is-match { color: oklch(38% 0.10 155); }

.cc-modal-foot {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px 20px;
  background: var(--th-paper-2);
  border-top: 1px solid var(--th-line);
  font-size: 11.5px;
  color: var(--th-ink-3);
}
.cc-modal-foot .audit-note {
  display: inline-flex; align-items: center; gap: 6px;
  font-family: var(--th-f-serif);
  font-style: italic;
  color: var(--th-ink-3);
  font-size: 12.5px;
}
.cc-modal-foot .spacer { flex: 1; }
.cc-modal-foot .btn {
  padding: 6px 14px;
  border-radius: var(--th-radius-3);
  font-family: var(--th-f-sans);
  font-size: 12.5px;
  font-weight: 500;
  cursor: pointer;
  display: inline-flex; align-items: center; gap: 5px;
}
.cc-modal-foot .btn.is-cancel {
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line-2);
  color: var(--th-ink);
}
.cc-modal-foot .btn.is-cancel:hover { background: var(--th-paper); border-color: var(--th-ink-4); }
.cc-modal-foot .btn.is-destructive {
  background: var(--th-paper-sunk);
  color: oklch(45% 0.14 25);
  border: 1px solid color-mix(in oklch, var(--th-risk) 40%, transparent);
  font-weight: 600;
}
.cc-modal-foot .btn.is-destructive:not([disabled]):hover {
  background: oklch(45% 0.14 25);
  color: var(--th-paper-sunk);
}
.cc-modal-foot .btn.is-destructive[disabled] {
  opacity: 0.55;
  cursor: not-allowed;
  background: var(--th-paper-2);
}
.cc-modal-foot .btn.is-caution {
  background: var(--th-marigold-deep);
  color: var(--th-paper-sunk);
  border: 1px solid var(--th-marigold-deep);
  font-weight: 600;
}
.cc-modal-foot .btn.is-caution:hover {
  background: oklch(40% 0.13 50);
}
.cc-modal-foot .btn.is-primary {
  background: var(--th-advant-deep);
  color: var(--th-advant-fg);
  border: 1px solid var(--th-advant-deep);
  font-weight: 600;
}
.cc-modal-foot .btn.is-primary:hover { background: oklch(32% 0.09 230); }


/* ------------------------------------------------------------------
   §D - Term editor - form variant
   ------------------------------------------------------------------ */
.cc-modal.is-form { width: 640px; }
.cc-modal.is-form .cc-modal-body { padding: 18px 20px 8px; max-height: 64vh; overflow-y: auto; }

.ad-form-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px 16px;
}
.ad-form-grid .full { grid-column: 1 / -1; }

.ad-form-field {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.ad-form-field .lbl {
  font-family: var(--th-f-mono);
  font-size: 10px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--th-ink-4);
}
.ad-form-field .lbl .req { color: oklch(45% 0.14 25); margin-left: 2px; }
.ad-form-field input,
.ad-form-field select,
.ad-form-field textarea {
  font-family: var(--th-f-sans);
  font-size: var(--th-size-14);
  padding: 6px 10px;
  border: 1px solid var(--th-line-2);
  background: var(--th-paper-sunk);
  color: var(--th-ink);
  border-radius: var(--th-radius-3);
}
.ad-form-field input:focus,
.ad-form-field select:focus,
.ad-form-field textarea:focus {
  outline: none;
  border-color: var(--th-advant);
  box-shadow: 0 0 0 3px var(--th-advant-soft);
}
.ad-form-field input.is-mono {
  font-family: var(--th-f-mono);
  font-variant-numeric: tabular-nums;
  font-size: 13.5px;
}
.ad-form-field .ipt-locked {
  font-family: var(--th-f-mono);
  font-size: 13.5px;
  padding: 6px 10px;
  border: 1px solid var(--th-line);
  background: var(--th-paper-2);
  border-radius: var(--th-radius-3);
  color: var(--th-ink-2);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}
.ad-form-field .ipt-locked .lock {
  font-family: var(--th-f-mono);
  font-size: 9.5px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--th-ink-4);
  display: inline-flex; align-items: center; gap: 3px;
}
.ad-form-field .hint {
  font-size: 11px;
  color: var(--th-ink-3);
  font-style: italic;
  font-family: var(--th-f-serif);
}

.ad-form-section-rule {
  display: flex;
  align-items: center;
  gap: 12px;
  margin: 16px 0 8px;
}
.ad-form-section-rule .label {
  font-family: var(--th-f-serif);
  font-size: 14px;
  font-style: italic;
  color: var(--th-marigold-deep);
  font-weight: 500;
}
.ad-form-section-rule .rule {
  flex: 1;
  height: 1px;
  background: var(--th-line);
}
.ad-form-section-rule .meta {
  font-family: var(--th-f-mono);
  font-size: 10px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--th-ink-4);
}

.ad-toggle {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 4px 0;
}
.ad-toggle .sw {
  width: 30px; height: 17px;
  border-radius: 999px;
  background: var(--th-paper-2);
  border: 1px solid var(--th-line-2);
  position: relative;
}
.ad-toggle .sw::after {
  content: "";
  position: absolute;
  left: 2px; top: 1px;
  width: 13px; height: 13px;
  border-radius: 50%;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line-2);
  transition: left 80ms ease;
}
.ad-toggle.is-on .sw { background: var(--th-advant); border-color: var(--th-advant); }
.ad-toggle.is-on .sw::after { left: 14px; background: var(--th-paper); border-color: var(--th-paper); }
.ad-toggle.is-disabled {
  cursor: default;
  opacity: 0.72;
}
.ad-toggle.is-disabled .sw,
.ad-toggle.is-disabled.is-on .sw {
  background: var(--th-paper-2);
  border-color: var(--th-line-2);
}
.ad-toggle.is-disabled .sw::after,
.ad-toggle.is-disabled.is-on .sw::after {
  background: var(--th-paper-sunk);
  border-color: var(--th-line-2);
}
.ad-toggle .lbl-inline {
  font-size: var(--th-size-13);
  color: var(--th-ink);
}

/* Rule-reference chip - borrowed pattern from form-builder rule popovers */
.ad-rule-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 3px 10px 3px 8px;
  border-radius: var(--th-radius-pill);
  background: var(--th-advant-soft);
  border: 1px solid color-mix(in oklch, var(--th-advant) 30%, transparent);
  color: var(--th-advant-deep);
  font-size: 12px;
  font-weight: 500;
  cursor: pointer;
  font-family: var(--th-f-sans);
}
.ad-rule-chip:hover { background: color-mix(in oklch, var(--th-advant-soft) 50%, var(--th-paper-sunk)); }
.ad-rule-chip .kind {
  font-family: var(--th-f-mono);
  font-size: 9px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: color-mix(in oklch, var(--th-advant-deep) 75%, var(--th-ink-3));
}
.ad-rule-chip .out { color: color-mix(in oklch, var(--th-advant-deep) 70%, var(--th-ink-3)); }
.ad-rule-chip.is-empty {
  background: transparent;
  border-style: dashed;
  border-color: var(--th-line-2);
  color: var(--th-ink-3);
  font-style: italic;
  font-family: var(--th-f-serif);
  font-weight: 500;
}


/* ------------------------------------------------------------------
   §E - Deadlines sub-table (inside the term editor)
   ------------------------------------------------------------------ */
.ad-deadlines {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  font-size: 12.5px;
  background: var(--th-paper);
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-3);
  overflow: hidden;
}
.ad-deadlines thead th {
  text-align: left;
  padding: 7px 10px;
  font-family: var(--th-f-mono);
  font-weight: 600;
  font-size: 10px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--th-ink-3);
  background: var(--th-paper-2);
  border-bottom: 1px solid var(--th-line);
}
.ad-deadlines tbody td {
  padding: 7px 10px;
  border-bottom: 1px solid var(--th-line-soft);
  color: var(--th-ink);
}
.ad-deadlines tbody tr:last-child td { border-bottom: 0; }
.ad-deadlines tbody tr:hover td { background: var(--th-paper-2); }
.ad-deadlines td input {
  width: 100%;
  font-family: var(--th-f-mono);
  font-size: 12px;
  padding: 3px 6px;
  border: 1px solid var(--th-line);
  background: var(--th-paper-sunk);
  color: var(--th-ink);
  border-radius: var(--th-radius-3);
  font-variant-numeric: tabular-nums;
}
.ad-deadlines td input:focus {
  outline: none;
  border-color: var(--th-advant);
  box-shadow: 0 0 0 2px var(--th-advant-soft);
}
.ad-deadlines td input.is-name { font-family: var(--th-f-sans); }

/* Visibility chip - applicant / staff / both */
.ad-vis {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-family: var(--th-f-sans);
  font-size: 11px;
  font-weight: 500;
  padding: 2px 8px;
  border-radius: var(--th-radius-pill);
  border: 1px solid transparent;
  cursor: pointer;
  white-space: nowrap;
}
.ad-vis.is-applicant { background: var(--th-advant-soft); color: var(--th-advant-deep); border-color: color-mix(in oklch, var(--th-advant) 30%, transparent); }
.ad-vis.is-staff     { background: var(--th-marigold-soft); color: var(--th-marigold-deep); border-color: color-mix(in oklch, var(--th-marigold-deep) 30%, transparent); }
.ad-vis.is-both      { background: oklch(96% 0.02 200); color: oklch(38% 0.08 220); border-color: oklch(82% 0.05 220); }
.ad-vis .ico { width: 11px; height: 11px; }
.ad-deadlines td .row-del {
  display: inline-grid; place-items: center;
  width: 22px; height: 22px;
  border-radius: var(--th-radius-3);
  color: var(--th-ink-4);
  cursor: pointer;
}
.ad-deadlines td .row-del:hover { background: var(--th-risk-soft); color: oklch(45% 0.14 25); }

.ad-deadlines-foot {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 8px 4px 0;
  font-size: 11.5px;
  color: var(--th-ink-3);
}


/* ------------------------------------------------------------------
   §F - Payments tab
   ------------------------------------------------------------------ */
.ad-pay-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr);
  gap: 18px;
  align-items: start;
}

/* Accepted-payments - provider + methods + processor binding */
.ad-pay-provider {
  display: grid;
  grid-template-columns: 56px 1fr auto;
  align-items: center;
  gap: 14px;
  padding: 14px 18px;
  border-bottom: 1px solid var(--th-line);
}
.ad-pay-provider .crest {
  width: 44px; height: 44px;
  border-radius: var(--th-radius-5);
  background: linear-gradient(140deg, oklch(55% 0.14 245), oklch(40% 0.12 250));
  color: var(--th-paper);
  display: grid; place-items: center;
  font-family: var(--th-f-serif);
  font-weight: 600;
  font-size: 17px;
  letter-spacing: -0.01em;
}
.ad-pay-provider .body { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.ad-pay-provider .body .name {
  font-family: var(--th-f-serif);
  font-size: 16px;
  font-weight: 500;
  letter-spacing: -0.005em;
  color: var(--th-ink);
}
.ad-pay-provider .body .meta {
  font-family: var(--th-f-mono);
  font-size: 11.5px;
  color: var(--th-ink-3);
  font-variant-numeric: tabular-nums;
}

.ad-pay-methods {
  display: grid;
  grid-template-columns: 1fr;
}
.ad-pay-method {
  display: grid;
  grid-template-columns: 32px 1fr auto;
  align-items: center;
  gap: 12px;
  padding: 12px 18px;
  border-bottom: 1px solid var(--th-line-soft);
}
.ad-pay-method:last-child { border-bottom: 0; }
.ad-pay-method .ico-wrap {
  width: 28px; height: 28px;
  border-radius: var(--th-radius-3);
  background: var(--th-paper-2);
  border: 1px solid var(--th-line);
  display: grid; place-items: center;
  color: var(--th-ink-2);
}
.ad-pay-method .ico-wrap.is-on {
  background: var(--th-ok-soft);
  border-color: color-mix(in oklch, var(--th-ok) 30%, transparent);
  color: oklch(40% 0.10 155);
}
.ad-pay-method .body { display: flex; flex-direction: column; gap: 2px; }
.ad-pay-method .body .name {
  font-size: var(--th-size-14);
  font-weight: 600;
  color: var(--th-ink);
}
.ad-pay-method .body .desc {
  font-size: 11.5px;
  color: var(--th-ink-3);
  line-height: 1.4;
}

/* Constraint banner - state-comptroller-dictates-processor */
.ad-pay-constraint {
  margin: 14px 18px 4px;
  padding: 11px 14px;
  background: var(--th-paper-2);
  border: 1px solid var(--th-line);
  border-left: 3px solid var(--th-ink-4);
  border-radius: var(--th-radius-3);
  display: grid;
  grid-template-columns: 18px 1fr;
  gap: 10px;
  align-items: start;
  font-size: 12.5px;
  color: var(--th-ink-2);
  line-height: 1.5;
}
.ad-pay-constraint .g {
  margin-top: 1px;
  color: var(--th-ink-3);
}
.ad-pay-constraint .em {
  font-family: var(--th-f-serif);
  font-style: italic;
  color: var(--th-ink);
}
.ad-pay-constraint code {
  font-family: var(--th-f-mono);
  font-size: 11.5px;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line);
  padding: 0 4px;
  border-radius: var(--th-radius-3);
}

/* PaymentConfiguration null - inline empty (not stub) */
.ad-pay-null {
  margin: 14px 18px;
  padding: 24px 18px 22px;
  border: 1px dashed var(--th-line-2);
  border-radius: var(--th-radius-5);
  background: var(--th-paper);
  text-align: center;
}
.ad-pay-null .eyebrow {
  font-family: var(--th-f-mono);
  font-size: 10.5px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--th-ink-4);
}
.ad-pay-null .title {
  margin-top: 8px;
  font-family: var(--th-f-serif);
  font-size: 18px;
  font-weight: 500;
  letter-spacing: -0.005em;
  color: var(--th-ink);
}
.ad-pay-null .title .em {
  font-family: var(--th-f-serif);
  font-style: italic;
  color: var(--th-marigold-deep);
}
.ad-pay-null .desc {
  margin-top: 6px;
  font-size: 12.5px;
  color: var(--th-ink-2);
  line-height: 1.55;
  max-width: 54ch;
  margin-left: auto;
  margin-right: auto;
}
.ad-pay-null .desc code {
  font-family: var(--th-f-mono);
  font-size: 11.5px;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line);
  padding: 0 5px;
  border-radius: var(--th-radius-3);
  color: var(--th-ink-2);
}
.ad-pay-null .desc .em {
  font-family: var(--th-f-serif);
  font-style: italic;
  color: var(--th-ink);
}
.ad-pay-null .cta {
  margin-top: 14px;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 14px;
  background: var(--th-advant-deep);
  color: var(--th-advant-fg);
  border-radius: var(--th-radius-3);
  font-family: var(--th-f-sans);
  font-size: 12.5px;
  font-weight: 600;
  cursor: pointer;
  border: 1px solid var(--th-advant-deep);
}
.ad-pay-null .cta:hover { background: oklch(32% 0.09 230); }
.ad-pay-null .src {
  margin-top: 12px;
  font-family: var(--th-f-mono);
  font-size: 11px;
  letter-spacing: 0.04em;
  color: var(--th-ink-4);
}
.ad-pay-null .src a { color: var(--th-advant-deep); text-decoration: none; }

/* Fees-with-rules table */
.ad-fees {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  font-size: var(--th-size-13);
}
.ad-fees thead th {
  text-align: left;
  padding: 9px 18px;
  font-family: var(--th-f-mono);
  font-weight: 600;
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--th-ink-3);
  border-bottom: 1px solid var(--th-line);
  background: var(--th-paper-2);
}
.ad-fees tbody td {
  padding: 12px 18px;
  border-bottom: 1px solid var(--th-line-soft);
  color: var(--th-ink);
  vertical-align: middle;
}
.ad-fees tbody tr:last-child td { border-bottom: 0; }
.ad-fees tbody tr:hover { background: var(--th-paper-2); }
.ad-fees .amount {
  font-family: var(--th-f-mono);
  font-variant-numeric: tabular-nums;
  font-size: 15px;
  color: var(--th-ink);
  font-weight: 500;
}
.ad-fees .amount .cur {
  font-family: var(--th-f-mono);
  font-size: 11px;
  color: var(--th-ink-3);
  margin-left: 4px;
  letter-spacing: 0.04em;
}
.ad-fees .scope {
  font-family: var(--th-f-sans);
  font-size: 12.5px;
  color: var(--th-ink-2);
}
.ad-fees .scope .lead { font-weight: 500; color: var(--th-ink); }
.ad-fees .scope .sub { font-size: 11.5px; color: var(--th-ink-3); }
.ad-fees .actions {
  display: flex;
  gap: 4px;
  justify-content: flex-end;
}
.ad-fees .actions .iconbtn {
  width: 22px; height: 22px;
  display: grid; place-items: center;
  border-radius: var(--th-radius-3);
  color: var(--th-ink-4);
  cursor: pointer;
}
.ad-fees .actions .iconbtn:hover { background: var(--th-paper-sunk); color: var(--th-ink); }


/* ------------------------------------------------------------------
   §G - Activity tab (audit reader with revert)
   ------------------------------------------------------------------ */
.ad-activity {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  font-size: var(--th-size-13);
}
.ad-activity thead th {
  text-align: left;
  padding: 9px 18px;
  font-family: var(--th-f-mono);
  font-weight: 600;
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--th-ink-3);
  border-bottom: 1px solid var(--th-line);
  background: var(--th-paper-2);
}
.ad-activity tbody td {
  padding: 12px 18px;
  border-bottom: 1px solid var(--th-line-soft);
  color: var(--th-ink);
  vertical-align: top;
}
.ad-activity tbody tr:last-child td { border-bottom: 0; }
.ad-activity tbody tr:hover { background: var(--th-paper-2); }
.ad-activity tbody tr.is-system {
  background: var(--th-paper-2);
}
.ad-activity tbody tr.is-system td { color: var(--th-ink-3); }

.ad-act-when {
  font-family: var(--th-f-mono);
  font-variant-numeric: tabular-nums;
  font-size: 11.5px;
  color: var(--th-ink-2);
  white-space: nowrap;
}
.ad-act-when .day {
  display: block;
  font-size: 12px;
  font-weight: 500;
  color: var(--th-ink);
  letter-spacing: 0.005em;
}
.ad-act-when .ago {
  display: block;
  font-size: 10.5px;
  color: var(--th-ink-4);
  font-style: italic;
  font-family: var(--th-f-serif);
  margin-top: 2px;
}
.ad-act-actor {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12.5px;
  white-space: nowrap;
}
.ad-act-actor .avatar {
  width: 22px; height: 22px;
  border-radius: 50%;
  background: oklch(50% 0.08 220);
  color: var(--th-paper);
  display: grid; place-items: center;
  font-size: 9.5px;
  font-weight: 600;
}
.ad-act-actor .avatar.is-system {
  background: var(--th-paper-3);
  color: var(--th-ink-3);
  border: 1px solid var(--th-line);
}
.ad-act-change {
  display: flex;
  flex-direction: column;
  gap: 5px;
  min-width: 0;
}
.ad-act-change .summary {
  font-size: var(--th-size-14);
  color: var(--th-ink);
  line-height: 1.4;
}
.ad-act-change .summary code {
  font-family: var(--th-f-mono);
  font-size: 11.5px;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line);
  padding: 0 4px;
  border-radius: var(--th-radius-3);
  color: var(--th-ink);
}
.ad-act-change .summary em {
  font-family: var(--th-f-serif);
  font-style: italic;
  color: var(--th-marigold-deep);
  font-weight: 500;
}
.ad-act-change .scope-row {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 11px;
}
.ad-act-kind {
  font-family: var(--th-f-mono);
  font-size: 9.5px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 1px 7px;
  border-radius: var(--th-radius-pill);
  background: var(--th-paper-2);
  border: 1px solid var(--th-line);
  color: var(--th-ink-3);
  font-weight: 600;
}
.ad-act-kind.is-cycle { background: var(--th-marigold-soft); color: var(--th-marigold-deep); border-color: color-mix(in oklch, var(--th-marigold-deep) 30%, transparent); }
.ad-act-kind.is-payments { background: var(--th-advant-soft); color: var(--th-advant-deep); border-color: color-mix(in oklch, var(--th-advant) 30%, transparent); }
.ad-act-kind.is-identity { background: oklch(96% 0.02 200); color: oklch(38% 0.08 220); border-color: oklch(82% 0.05 220); }
.ad-act-kind.is-identifiers { background: oklch(96% 0.025 130); color: oklch(38% 0.10 145); border-color: oklch(82% 0.06 145); }
.ad-act-kind.is-system { background: var(--th-paper-3); color: var(--th-ink-3); border-color: var(--th-line); }

.ad-act-revert {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 5px 11px;
  font-family: var(--th-f-sans);
  font-size: 12px;
  font-weight: 500;
  color: var(--th-ink-2);
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line-2);
  border-radius: var(--th-radius-3);
  cursor: pointer;
  white-space: nowrap;
}
.ad-act-revert:hover {
  background: var(--th-paper);
  border-color: var(--th-ink-4);
  color: var(--th-ink);
}
.ad-act-revert.is-blocked {
  background: transparent;
  border: 1px solid color-mix(in oklch, var(--th-risk) 25%, transparent);
  color: oklch(45% 0.14 25);
  cursor: not-allowed;
  font-style: italic;
  font-family: var(--th-f-serif);
}
.ad-act-revert.is-blocked:hover { background: var(--th-risk-soft); }
.ad-act-revert.is-system {
  border-style: dashed;
  color: var(--th-ink-4);
  background: transparent;
  font-style: italic;
  font-family: var(--th-f-serif);
  cursor: default;
}
.ad-act-blocked-reason {
  margin-top: 5px;
  padding: 6px 10px;
  background: var(--th-risk-soft);
  border: 1px solid color-mix(in oklch, var(--th-risk) 25%, transparent);
  border-radius: var(--th-radius-3);
  font-size: 11.5px;
  color: oklch(40% 0.14 25);
  line-height: 1.45;
  display: flex;
  align-items: flex-start;
  gap: 8px;
  max-width: 64ch;
}
.ad-act-blocked-reason .g {
  margin-top: 1px;
  color: oklch(45% 0.14 25);
}



/* ------------------------------------------------------------------
   §I - Dark-theme polish for the new chrome
   ------------------------------------------------------------------ */
[data-theme="dark"] .ad-pay-provider .crest {
  background: linear-gradient(140deg, oklch(60% 0.13 245), oklch(45% 0.11 250));
}
[data-theme="dark"] .ad-pay-method .ico-wrap.is-on {
  background: oklch(24% 0.04 155);
  color: oklch(80% 0.12 155);
  border-color: color-mix(in oklch, oklch(70% 0.13 155) 35%, transparent);
}
[data-theme="dark"] .cc-modal.is-impact .cc-modal-head {
  background: oklch(24% 0.06 25);
  border-bottom-color: color-mix(in oklch, oklch(60% 0.14 25) 40%, transparent);
}
[data-theme="dark"] .cc-modal.is-impact .cc-modal-glyph {
  background: var(--th-paper-sunk);
  border-color: color-mix(in oklch, oklch(70% 0.15 25) 40%, transparent);
  color: oklch(80% 0.15 25);
}
[data-theme="dark"] .cc-modal.is-caution .cc-modal-head {
  background: oklch(26% 0.05 55);
  border-bottom-color: color-mix(in oklch, oklch(70% 0.14 55) 40%, transparent);
}
[data-theme="dark"] .ad-vis.is-applicant {
  background: oklch(28% 0.06 245);
  color: oklch(82% 0.10 245);
  border-color: color-mix(in oklch, oklch(70% 0.13 245) 45%, transparent);
}
[data-theme="dark"] .ad-vis.is-staff {
  background: oklch(26% 0.05 55);
  color: oklch(82% 0.13 55);
  border-color: color-mix(in oklch, oklch(70% 0.14 55) 45%, transparent);
}
[data-theme="dark"] .ad-vis.is-both {
  background: oklch(24% 0.04 220);
  color: oklch(80% 0.08 220);
  border-color: color-mix(in oklch, oklch(65% 0.10 220) 35%, transparent);
}
[data-theme="dark"] .ad-act-kind.is-cycle {
  background: oklch(26% 0.05 55);
  color: oklch(82% 0.13 55);
  border-color: color-mix(in oklch, oklch(70% 0.14 55) 45%, transparent);
}
[data-theme="dark"] .ad-act-kind.is-payments {
  background: oklch(28% 0.06 245);
  color: oklch(82% 0.10 245);
  border-color: color-mix(in oklch, oklch(70% 0.13 245) 45%, transparent);
}
[data-theme="dark"] .ad-act-kind.is-identity {
  background: oklch(24% 0.04 220);
  color: oklch(80% 0.08 220);
  border-color: color-mix(in oklch, oklch(65% 0.10 220) 35%, transparent);
}
[data-theme="dark"] .ad-act-kind.is-identifiers {
  background: oklch(24% 0.04 145);
  color: oklch(80% 0.10 145);
  border-color: color-mix(in oklch, oklch(65% 0.10 145) 35%, transparent);
}
[data-theme="dark"] .ad-act-revert.is-blocked {
  border-color: color-mix(in oklch, oklch(70% 0.15 25) 35%, transparent);
  color: oklch(82% 0.15 25);
}
[data-theme="dark"] .ad-act-blocked-reason {
  background: oklch(24% 0.06 25);
  border-color: color-mix(in oklch, oklch(70% 0.15 25) 35%, transparent);
  color: oklch(82% 0.15 25);
}
[data-theme="dark"] .ad-act-blocked-reason .g { color: oklch(80% 0.15 25); }
[data-theme="dark"] .ad-rule-chip {
  background: oklch(28% 0.06 245);
  color: oklch(82% 0.10 245);
  border-color: color-mix(in oklch, oklch(70% 0.13 245) 45%, transparent);
}
[data-theme="dark"] .ad-ident .val .src.is-override {
  background: oklch(26% 0.05 55);
  color: oklch(82% 0.13 55);
  border-color: color-mix(in oklch, oklch(70% 0.14 55) 40%, transparent);
}
[data-theme="dark"] .ad-add-link {
  background: transparent;
  color: oklch(78% 0.10 245);
}
[data-theme="dark"] .ad-add-link:hover {
  background: oklch(28% 0.06 245);
}
[data-theme="dark"] .ad-pay-null .cta {
  background: oklch(70% 0.13 245);
  border-color: oklch(70% 0.13 245);
  color: oklch(14% 0.01 60);
}


/* ==================================================================
   THRESHOLD - Application definitions · round three
   ------------------------------------------------------------------
   Additive overlay on appdef.css + appdef-v2.css. Adds:
     §A  Inline-expanded term row (Option A)
     §B  Side-rail editor (Option B)
     §C  Revert-kind chip in Activity table
     §D  Dark-mode polish for the new chrome
   No existing rules are altered.
   ================================================================== */


/* ==================================================================
   §A - Inline-expand term editing (Option A)
   ------------------------------------------------------------------
   The resting row stays as `.ad-term`. The expanded state grows the
   row vertically. Name + date stay in their resting positions and
   become inline inputs there - *no field relocation*. Accepting
   toggle replaces the right-side state chip. Eligibility-rule chip
   lives in the expanded area. Deadlines sub-table sits below.
   Save/Cancel pin to the bottom-right of the expanded block.
   ================================================================== */
.ad-term.is-expanded {
  display: grid;
  grid-template-columns: 16px 1fr auto;
  grid-template-rows: auto auto auto auto;
  grid-template-areas:
    "stripe head    state"
    "stripe meta    elig"
    "stripe deadl   deadl"
    "stripe foot    foot";
  align-items: start;
  gap: 12px;
  padding: 14px 18px 14px;
  background: var(--th-paper);
  border-bottom: 1px solid var(--th-line);
  border-left: 2px solid var(--th-marigold-deep);
  cursor: default;
}
.ad-term.is-expanded:hover { background: var(--th-paper); }
.ad-term.is-expanded .stripe {
  grid-area: stripe;
  align-self: stretch;
  width: 4px; height: auto;
  background: var(--th-marigold-deep);
  margin-left: 0;
  border-radius: 2px;
}

/* HEAD - name input replaces .ad-term-name */
.ad-term.is-expanded .ax-head {
  grid-area: head;
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
}
.ad-term.is-expanded .ax-name-input {
  font-family: var(--th-f-sans);
  font-size: var(--th-size-15);
  font-weight: 600;
  color: var(--th-ink);
  padding: 4px 8px 5px;
  border: 1px solid var(--th-line-2);
  background: var(--th-paper-sunk);
  border-radius: var(--th-radius-3);
  flex: 1;
  max-width: 360px;
  line-height: 1.2;
}
.ad-term.is-expanded .ax-name-input:focus {
  outline: none;
  border-color: var(--th-advant);
  box-shadow: 0 0 0 3px var(--th-advant-soft);
}
.ad-term.is-expanded .ax-keytag {
  font-family: var(--th-f-mono);
  font-size: 11.5px;
  color: var(--th-ink-4);
  display: inline-flex; align-items: center; gap: 4px;
}
.ad-term.is-expanded .ax-keytag svg { vertical-align: -1px; }

/* META - date range replaces .ad-term-window */
.ad-term.is-expanded .ax-meta {
  grid-area: meta;
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px 10px;
  font-family: var(--th-f-mono);
  font-size: 11.5px;
  color: var(--th-ink-3);
  font-variant-numeric: tabular-nums;
}
.ad-term.is-expanded .ax-date {
  font-family: var(--th-f-mono);
  font-size: 12.5px;
  padding: 3px 8px;
  border: 1px solid var(--th-line-2);
  background: var(--th-paper-sunk);
  border-radius: var(--th-radius-3);
  color: var(--th-ink);
  font-variant-numeric: tabular-nums;
  width: 130px;
}
.ad-term.is-expanded .ax-date:focus {
  outline: none;
  border-color: var(--th-advant);
  box-shadow: 0 0 0 3px var(--th-advant-soft);
}
.ad-term.is-expanded .ax-arrow {
  color: var(--th-ink-4);
  font-family: var(--th-f-mono);
}
.ad-term.is-expanded .ax-tz {
  font-family: var(--th-f-mono);
  font-size: 11px;
  color: var(--th-ink-3);
  padding: 2px 7px;
  border-radius: var(--th-radius-3);
  background: var(--th-paper-2);
  border: 1px solid var(--th-line);
  letter-spacing: 0.04em;
}

/* STATE - accepting toggle replaces .ad-term-state */
.ad-term.is-expanded .ax-state {
  grid-area: state;
  display: flex;
  align-items: center;
  gap: 8px;
  align-self: start;
  font-family: var(--th-f-sans);
  font-size: 12px;
  color: var(--th-ink-2);
}
.ad-term.is-expanded .ax-state .lbl {
  color: var(--th-ink-3);
  font-family: var(--th-f-mono);
  font-size: 10px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

/* ELIG - eligibility-rule chip */
.ad-term.is-expanded .ax-elig {
  grid-area: elig;
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 11.5px;
  color: var(--th-ink-3);
  align-self: center;
  justify-self: end;
}
.ad-term.is-expanded .ax-elig .lbl {
  font-family: var(--th-f-mono);
  font-size: 10px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--th-ink-4);
}

/* DEADLINES - sub-table */
.ad-term.is-expanded .ax-deadlines {
  grid-area: deadl;
  margin-top: 10px;
  padding: 12px 14px 12px;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-3);
}
.ad-term.is-expanded .ax-deadlines-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 8px;
}
.ad-term.is-expanded .ax-deadlines-head .label {
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 13px;
  color: var(--th-marigold-deep);
  font-weight: 500;
}
.ad-term.is-expanded .ax-deadlines-head .meta {
  font-family: var(--th-f-mono);
  font-size: 10px;
  letter-spacing: 0.08em;
  color: var(--th-ink-4);
}
.ad-term.is-expanded .ax-deadlines table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  font-size: 12px;
}
.ad-term.is-expanded .ax-deadlines thead th {
  text-align: left;
  padding: 5px 8px;
  font-family: var(--th-f-mono);
  font-weight: 600;
  font-size: 9.5px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--th-ink-3);
  border-bottom: 1px solid var(--th-line);
  background: transparent;
}
.ad-term.is-expanded .ax-deadlines tbody td {
  padding: 6px 8px;
  border-bottom: 1px solid var(--th-line-soft);
}
.ad-term.is-expanded .ax-deadlines tbody tr:last-child td { border-bottom: 0; }
.ad-term.is-expanded .ax-deadlines tbody td input {
  width: 100%;
  font-family: var(--th-f-mono);
  font-size: 11.5px;
  padding: 3px 6px;
  border: 1px solid var(--th-line);
  background: var(--th-paper);
  color: var(--th-ink);
  border-radius: var(--th-radius-3);
  font-variant-numeric: tabular-nums;
}
.ad-term.is-expanded .ax-deadlines tbody td input.is-name { font-family: var(--th-f-sans); }
.ad-term.is-expanded .ax-deadlines tbody td input:focus {
  outline: none;
  border-color: var(--th-advant);
  box-shadow: 0 0 0 2px var(--th-advant-soft);
}
.ad-term.is-expanded .ax-deadlines .row-del {
  display: inline-grid; place-items: center;
  width: 22px; height: 22px;
  border-radius: var(--th-radius-3);
  color: var(--th-ink-4);
  cursor: pointer;
}
.ad-term.is-expanded .ax-deadlines .row-del:hover { background: var(--th-risk-soft); color: oklch(45% 0.14 25); }
.ad-term.is-expanded .ax-deadlines-foot {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-top: 8px;
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 11.5px;
  color: var(--th-ink-3);
}

/* FOOT - Save / Cancel pinned bottom-right */
.ad-term.is-expanded .ax-foot {
  grid-area: foot;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  margin-top: 10px;
  padding-top: 10px;
  border-top: 1px dashed var(--th-line);
}
.ad-term.is-expanded .ax-foot .audit-note {
  margin-right: auto;
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 11.5px;
  color: var(--th-ink-3);
  display: inline-flex; gap: 5px; align-items: center;
}
.ad-term.is-expanded .ax-foot .btn {
  padding: 5px 13px;
  font-family: var(--th-f-sans);
  font-size: 12.5px;
  font-weight: 500;
  border-radius: var(--th-radius-3);
  cursor: pointer;
  display: inline-flex; align-items: center; gap: 5px;
}
.ad-term.is-expanded .ax-foot .btn.is-cancel {
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line-2);
  color: var(--th-ink);
}
.ad-term.is-expanded .ax-foot .btn.is-cancel:hover {
  background: var(--th-paper);
  border-color: var(--th-ink-4);
}
.ad-term.is-expanded .ax-foot .btn.is-caution {
  background: var(--th-marigold-deep);
  color: var(--th-paper-sunk);
  border: 1px solid var(--th-marigold-deep);
  font-weight: 600;
}
.ad-term.is-expanded .ax-foot .btn.is-caution:hover {
  background: oklch(40% 0.13 50);
}


/* ==================================================================
   §B - Side-rail editor (Option B)
   ------------------------------------------------------------------
   Slides in from the right edge of the page area. Full height of
   the page area. No scrim - the terms list behind stays visible
   and slightly faded. Footer sticks to the rail bottom.
   ================================================================== */
.ad-rail-host {
  position: relative;
  /* nothing - the rail anchors to .ad-page or whatever container
     carries this class. The fade-behind effect is applied to
     siblings, not to the host. */
}
.ad-rail-fade {
  /* Soft fade applied behind the rail to the terms area, not a
     full scrim. Lets the user see the list while editing. */
  position: relative;
}
.ad-rail-fade::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(to right, transparent 0%, transparent 35%, var(--th-paper) 100%);
  pointer-events: none;
  opacity: 0.4;
  z-index: 2;
}

.ad-rail {
  position: absolute;
  top: 0; right: 0; bottom: 0;
  width: 440px;
  background: var(--th-paper-sunk);
  border-left: 1px solid var(--th-line-2);
  box-shadow:
    -10px 0 28px oklch(20% 0.01 255 / 0.08),
    -2px 0 0 oklch(20% 0.01 255 / 0.02);
  display: flex;
  flex-direction: column;
  z-index: 10;
}
.ad-rail-head {
  display: grid;
  grid-template-columns: 28px 1fr auto;
  align-items: start;
  gap: 12px;
  padding: 16px 18px 14px;
  border-bottom: 1px solid var(--th-line);
  background: var(--th-marigold-soft);
}
.ad-rail-head .glyph {
  width: 26px; height: 26px;
  border-radius: 50%;
  background: var(--th-paper-sunk);
  border: 1px solid color-mix(in oklch, var(--th-marigold-deep) 35%, transparent);
  color: var(--th-marigold-deep);
  display: grid; place-items: center;
  margin-top: 1px;
}
.ad-rail-head .titles { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.ad-rail-head .title {
  margin: 0;
  font-family: var(--th-f-serif);
  font-size: 17px;
  font-weight: 500;
  letter-spacing: -0.005em;
  color: var(--th-ink);
}
.ad-rail-head .subtitle {
  display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
  font-size: 11px;
  color: var(--th-ink-3);
}
.ad-rail-head .subtitle .badge {
  font-family: var(--th-f-mono);
  font-size: 9.5px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 1px 6px;
  border-radius: var(--th-radius-pill);
  background: var(--th-paper-sunk);
  border: 1px solid color-mix(in oklch, var(--th-marigold-deep) 35%, transparent);
  color: var(--th-marigold-deep);
}
.ad-rail-head .subtitle .name {
  font-family: var(--th-f-mono);
  font-size: 11px;
  color: var(--th-ink);
}
.ad-rail-head .close {
  width: 24px; height: 24px;
  display: grid; place-items: center;
  border-radius: var(--th-radius-3);
  cursor: pointer;
  color: var(--th-ink-3);
  background: transparent;
  border: 0;
}
.ad-rail-head .close:hover { background: var(--th-paper-sunk); color: var(--th-ink); }

.ad-rail-body {
  flex: 1;
  overflow-y: auto;
  padding: 16px 18px;
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.ad-rail-section .ad-form-section-rule { margin-top: 0; margin-bottom: 10px; }
.ad-rail-section .ad-form-grid {
  grid-template-columns: 1fr 1fr;
}
.ad-rail-section .ad-form-field.full { grid-column: 1 / -1; }

/* Rail-local deadlines list - narrower than the modal version */
.ad-rail-deadlines {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.ad-rail-deadline {
  background: var(--th-paper);
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-3);
  padding: 8px 10px 9px;
  display: grid;
  grid-template-columns: 1fr auto;
  grid-template-rows: auto auto;
  gap: 6px 10px;
  align-items: center;
}
.ad-rail-deadline .name-row {
  display: flex; align-items: center; gap: 8px;
  min-width: 0;
}
.ad-rail-deadline .name-row input {
  font-family: var(--th-f-sans);
  font-size: 12.5px;
  font-weight: 500;
  color: var(--th-ink);
  padding: 3px 6px;
  border: 1px solid transparent;
  background: transparent;
  border-radius: var(--th-radius-3);
  flex: 1;
  min-width: 0;
}
.ad-rail-deadline .name-row input:focus,
.ad-rail-deadline .name-row input:hover {
  outline: none;
  border-color: var(--th-line-2);
  background: var(--th-paper-sunk);
}
.ad-rail-deadline .name-row .key {
  font-family: var(--th-f-mono);
  font-size: 10.5px;
  color: var(--th-ink-4);
  letter-spacing: 0.02em;
  flex: none;
}
.ad-rail-deadline .meta-row {
  display: flex; align-items: center; gap: 8px;
  font-family: var(--th-f-mono);
  font-size: 11px;
  color: var(--th-ink-3);
}
.ad-rail-deadline .meta-row .date-input {
  font-family: var(--th-f-mono);
  font-size: 11.5px;
  padding: 2px 6px;
  border: 1px solid transparent;
  background: transparent;
  border-radius: var(--th-radius-3);
  color: var(--th-ink);
  font-variant-numeric: tabular-nums;
  width: 100px;
}
.ad-rail-deadline .meta-row .date-input:focus,
.ad-rail-deadline .meta-row .date-input:hover {
  outline: none;
  border-color: var(--th-line-2);
  background: var(--th-paper-sunk);
}
.ad-rail-deadline .row-del {
  align-self: start;
  display: inline-grid; place-items: center;
  width: 22px; height: 22px;
  border-radius: var(--th-radius-3);
  color: var(--th-ink-4);
  cursor: pointer;
}
.ad-rail-deadline .row-del:hover { background: var(--th-risk-soft); color: oklch(45% 0.14 25); }

.ad-rail-foot {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 12px 18px;
  background: var(--th-paper-2);
  border-top: 1px solid var(--th-line);
}
.ad-rail-foot .audit-note {
  margin-right: auto;
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 11.5px;
  color: var(--th-ink-3);
  display: inline-flex; gap: 5px; align-items: center;
}
.ad-rail-foot .btn {
  padding: 5px 13px;
  font-family: var(--th-f-sans);
  font-size: 12.5px;
  font-weight: 500;
  border-radius: var(--th-radius-3);
  cursor: pointer;
  display: inline-flex; align-items: center; gap: 5px;
}
.ad-rail-foot .btn.is-cancel {
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line-2);
  color: var(--th-ink);
}
.ad-rail-foot .btn.is-cancel:hover {
  background: var(--th-paper);
  border-color: var(--th-ink-4);
}
.ad-rail-foot .btn.is-caution {
  background: var(--th-marigold-deep);
  color: var(--th-paper-sunk);
  border: 1px solid var(--th-marigold-deep);
  font-weight: 600;
}
.ad-rail-foot .btn.is-caution:hover {
  background: oklch(40% 0.13 50);
}

/* Row that opens the rail - marked active */
.ad-term.is-rail-target {
  background: var(--th-marigold-soft);
  position: relative;
}
.ad-term.is-rail-target::after {
  content: "";
  position: absolute;
  right: -1px; top: 0; bottom: 0;
  width: 3px;
  background: var(--th-marigold-deep);
}


/* ==================================================================
   §C - Activity tab - revert kind chip
   ------------------------------------------------------------------
   New event-kind chip variant: is-revert. Distinct icon glyph (the
   undo arrow) rendered inline so admins can scan for revert events
   without reading the diff.
   ================================================================== */
.ad-act-kind.is-revert {
  background: oklch(95% 0.022 75);
  color: oklch(45% 0.13 50);
  border-color: color-mix(in oklch, oklch(60% 0.14 50) 35%, transparent);
  padding-left: 5px;
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
.ad-act-kind.is-revert svg {
  width: 10px; height: 10px;
  vertical-align: -1px;
}
.ad-act-kind.is-publish {
  background: oklch(95% 0.025 200);
  color: oklch(38% 0.08 220);
  border-color: oklch(82% 0.05 220);
}




/* ==================================================================
   §E - Dark-mode polish for the new chrome
   ================================================================== */
[data-theme="dark"] .ad-term.is-expanded {
  background: var(--th-paper-sunk);
}
[data-theme="dark"] .ad-term.is-expanded .ax-name-input,
[data-theme="dark"] .ad-term.is-expanded .ax-date {
  background: var(--th-paper-2);
  border-color: var(--th-line-2);
  color: var(--th-ink);
}
[data-theme="dark"] .ad-term.is-expanded .ax-deadlines {
  background: var(--th-paper-2);
}
[data-theme="dark"] .ad-term.is-expanded .ax-deadlines tbody td input {
  background: var(--th-paper-sunk);
  border-color: var(--th-line);
  color: var(--th-ink);
}
[data-theme="dark"] .ad-term.is-expanded .ax-foot .btn.is-caution {
  background: oklch(76% 0.12 50);
  border-color: oklch(76% 0.12 50);
  color: oklch(14% 0.01 60);
}

[data-theme="dark"] .ad-rail-head { background: oklch(26% 0.05 55); }
[data-theme="dark"] .ad-rail-head .glyph,
[data-theme="dark"] .ad-rail-head .subtitle .badge {
  border-color: color-mix(in oklch, oklch(70% 0.14 55) 40%, transparent);
  color: oklch(82% 0.13 55);
  background: var(--th-paper-sunk);
}
[data-theme="dark"] .ad-rail-deadline {
  background: var(--th-paper-2);
  border-color: var(--th-line);
}
[data-theme="dark"] .ad-rail-deadline .name-row input:focus,
[data-theme="dark"] .ad-rail-deadline .name-row input:hover,
[data-theme="dark"] .ad-rail-deadline .meta-row .date-input:focus,
[data-theme="dark"] .ad-rail-deadline .meta-row .date-input:hover {
  background: var(--th-paper-3);
  border-color: var(--th-line-2);
}
[data-theme="dark"] .ad-rail-foot .btn.is-caution {
  background: oklch(76% 0.12 50);
  border-color: oklch(76% 0.12 50);
  color: oklch(14% 0.01 60);
}
[data-theme="dark"] .ad-term.is-rail-target {
  background: oklch(26% 0.05 55);
}
[data-theme="dark"] .ad-rail-fade::after {
  background: linear-gradient(to right, transparent 0%, transparent 35%, var(--th-paper) 100%);
  opacity: 0.5;
}

[data-theme="dark"] .ad-act-kind.is-revert {
  background: oklch(26% 0.05 55);
  color: oklch(82% 0.13 55);
  border-color: color-mix(in oklch, oklch(70% 0.14 55) 45%, transparent);
}
[data-theme="dark"] .ad-act-kind.is-publish {
  background: oklch(24% 0.04 220);
  color: oklch(80% 0.08 220);
  border-color: color-mix(in oklch, oklch(65% 0.10 220) 35%, transparent);
}



/* ==================================================================
   THRESHOLD - Application definitions · round four
   ------------------------------------------------------------------
   Additive overlay on appdef.css + appdef-v2.css + appdef-v3.css.
   Adds:
     §A  Rich term row (.ad-term.is-rich) - two-row layout with
         direct-manipulation date affordances + deadline pills
     §B  .ax-datechip - click-to-edit date target + active input
     §C  .ax-deadpill - deadline pill with click-target date
     §D  .ax-kebab + .ax-kebab-menu - three-dot row menu
     §E  .ad-defaults - Defaults panel
     §F  .ad-rail.is-duplicate - rail in new-term-from-duplicate mode
     §G  Activity .is-no-revert refactor (with sub-variants)
     §I  Dark-theme polish
   ================================================================== */


/* ==================================================================
   §A - Rich term row
   ------------------------------------------------------------------
   Resting row grows from one line to two so deadlines surface in
   the same horizontal band as the term-window dates. Direct-manip
   dates are the dominant click-target; everything else routes via
   the row's pencil/kebab.
   ================================================================== */
.ad-term.is-rich {
  display: grid;
  grid-template-columns: 16px 1fr auto auto auto;
  grid-template-rows: auto auto;
  grid-template-areas:
    "stripe head state actions kebab"
    "stripe meta meta meta meta";
  align-items: center;
  gap: 6px 12px;
  padding: 14px 14px 14px 18px;
  position: relative;
}
.ad-term.is-rich:hover { background: var(--th-paper-2); }
.ad-term.is-rich .stripe {
  grid-area: stripe;
  align-self: stretch;
  width: 4px;
  height: auto;
  background: var(--th-marigold-deep);
  margin-left: 0;
  border-radius: 2px;
}
.ad-term.is-rich.is-future .stripe { background: var(--th-line-2); }
.ad-term.is-rich.is-past .stripe { background: var(--th-ink-4); opacity: 0.5; }

.ad-term.is-rich .ax-head {
  grid-area: head;
  display: flex; align-items: baseline;
  gap: 10px;
  min-width: 0;
  flex-wrap: wrap;
}
.ad-term.is-rich .ax-head .name {
  font-family: var(--th-f-sans);
  font-size: var(--th-size-15);
  font-weight: 600;
  color: var(--th-ink);
  line-height: 1.25;
}
.ad-term.is-rich .ax-head .keytag {
  font-family: var(--th-f-mono);
  font-weight: 400;
  font-size: 11.5px;
  color: var(--th-ink-4);
}
.ad-term.is-rich.is-past .ax-head .name { color: var(--th-ink-2); }

.ad-term.is-rich .ax-row-state {
  grid-area: state;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-family: var(--th-f-sans);
  font-size: 11.5px;
  padding: 1px 8px;
  border-radius: var(--th-radius-pill);
  white-space: nowrap;
}
.ad-term.is-rich .ax-row-state .dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
.ad-term.is-rich .ax-row-state.is-accepting { background: var(--th-ok-soft);   color: oklch(38% 0.10 155); }
.ad-term.is-rich .ax-row-state.is-past      { background: var(--th-paper-2);   color: var(--th-ink-4); border: 1px solid var(--th-line); }

/* .ax-row-state-cluster / .ax-row-validation - Task 4c.1 port. Canon (proto/cycle.jsx
   TermRow) applies both entirely as INLINE style (no matching rule in any appdef*.css
   round - grepped, absent). Lifted here as real classes, retokenized to --th-*, values
   taken verbatim from the JSX's style objects. The cluster is the "state" grid-area's
   direct child (wraps the accepting/past pill + the issues pill); the validation pill
   opens the structural rail (Task 4c.2) on click. */
.ax-row-state-cluster {
  grid-area: state;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
  justify-content: flex-end;
}
.ax-row-validation {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 3px 9px;
  font-family: var(--th-f-mono);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--th-risk);
  background: var(--th-risk-soft);
  border: 1px solid color-mix(in oklch, var(--th-risk) 28%, transparent);
  border-radius: var(--th-radius-pill);
  cursor: pointer;
  white-space: nowrap;
}

.ad-term.is-rich .ax-row-actions {
  grid-area: actions;
  display: inline-flex;
  gap: 4px;
  opacity: 0;
  transition: opacity 80ms ease;
}
.ad-term.is-rich:hover .ax-row-actions,
.ad-term.is-rich:focus-within .ax-row-actions,
.ad-term.is-rich.is-menu-open .ax-row-actions {
  opacity: 1;
}
.ad-term.is-rich .ax-row-actions .iconbtn {
  width: 24px; height: 24px;
  display: grid; place-items: center;
  border-radius: var(--th-radius-3);
  color: var(--th-ink-3);
  border: 1px solid transparent;
  cursor: pointer;
  background: transparent;
}
.ad-term.is-rich .ax-row-actions .iconbtn:hover {
  background: var(--th-paper-sunk);
  border-color: var(--th-line-2);
  color: var(--th-ink);
}

/* META row - term window + deadlines */
.ad-term.is-rich .ax-meta {
  grid-area: meta;
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px 12px;
  font-family: var(--th-f-mono);
  font-size: 11.5px;
  color: var(--th-ink-3);
  font-variant-numeric: tabular-nums;
  min-width: 0;
}
.ad-term.is-rich .ax-window {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  white-space: nowrap;
}
.ad-term.is-rich .ax-window .arrow { color: var(--th-ink-4); }
.ad-term.is-rich .ax-window .tz {
  font-family: var(--th-f-mono);
  font-size: 10.5px;
  color: var(--th-ink-3);
  padding: 1px 6px;
  border-radius: var(--th-radius-3);
  background: var(--th-paper-2);
  border: 1px solid var(--th-line);
  letter-spacing: 0.04em;
  cursor: help;
}
.ad-term.is-rich .ax-window .tz .src {
  color: var(--th-ink-4);
  font-style: italic;
}
.ad-term.is-rich .ax-window-sep {
  width: 1px; height: 11px;
  background: var(--th-line-2);
  margin: 0 2px;
  flex: none;
}
.ad-term.is-rich .ax-deads {
  display: inline-flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px;
  min-width: 0;
}
.ad-term.is-rich .ax-deads-label {
  font-family: var(--th-f-mono);
  font-size: 9.5px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--th-ink-4);
  margin-right: 4px;
}

/* Kebab cell (just spacing - actions cell already includes the kebab) */
.ad-term.is-rich .ax-kebab-cell { grid-area: kebab; }


/* ==================================================================
   §B - .ax-datechip - click-to-edit date target
   ------------------------------------------------------------------
   Rest: monospace text, no chrome.
   Hover: dotted underline + paper-2 background.
   Active (in-edit): input replaces the display in-place.
   ================================================================== */
.ax-datechip {
  display: inline-flex;
  align-items: baseline;
  gap: 4px;
  font-family: var(--th-f-mono);
  font-size: 12px;
  font-variant-numeric: tabular-nums;
  color: var(--th-ink);
  padding: 1px 5px;
  border-radius: var(--th-radius-3);
  cursor: text;
  position: relative;
  border-bottom: 1px dotted transparent;
  transition: background 80ms ease, border-color 80ms ease;
  user-select: none;
}
.ax-datechip:hover {
  background: var(--th-paper-sunk);
  border-bottom-color: var(--th-ink-4);
}
.ax-datechip:focus,
.ax-datechip.is-focused {
  outline: none;
  background: var(--th-paper-sunk);
  border-bottom-color: var(--th-advant);
}

.ax-datechip.is-disabled {
  cursor: default;
  color: var(--th-ink-3);
  border-bottom-color: transparent;
}
.ax-datechip.is-disabled:hover,
.ax-datechip.is-disabled:focus,
.ax-datechip.is-disabled.is-focused {
  background: transparent;
  border-bottom-color: transparent;
}
.ax-datechip.is-disabled .caret-cue,
.ax-datechip.is-disabled:hover .caret-cue,
.ax-datechip.is-disabled:focus .caret-cue {
  display: none;
}

/* Active state - input replaces text in-place */
.ax-datechip.is-active {
  padding: 0;
  border-bottom: 0;
  background: transparent;
}
.ax-datechip.is-active input {
  font-family: var(--th-f-mono);
  font-size: 12px;
  font-variant-numeric: tabular-nums;
  color: var(--th-ink);
  padding: 2px 6px;
  background: var(--th-paper);
  border: 1px solid var(--th-advant);
  border-radius: var(--th-radius-3);
  outline: none;
  box-shadow: 0 0 0 3px var(--th-advant-soft);
  width: 112px;
}
.ax-datechip.is-active input.is-wide { width: 140px; }
.ax-datechip.is-active .caret-cue {
  display: none;
}

/* Caret cue - sub-glyph that hints at editability on hover/focus */
.ax-datechip .caret-cue {
  width: 9px;
  color: var(--th-ink-4);
  display: none;
  align-items: center;
  font-family: var(--th-f-mono);
  font-size: 9.5px;
}
.ax-datechip:hover .caret-cue,
.ax-datechip:focus .caret-cue { display: inline-flex; }


/* ==================================================================
   §B2 - .ax-date-popover + .ax-popover-backdrop (added Task 0.2 -
   shared atoms)
   ------------------------------------------------------------------
   NOT part of any canon appdef*.css round. The canon's DateChip popover
   chrome lived in prototype.css (`.proto-date-popover`), which is
   prototype-only scaffolding excluded from this file (see the file-
   header comment's "Omitted" list). Ported here verbatim - visual
   values unchanged, tokens rewritten to --th-* - renamed off the
   `proto-` prefix (reserved for prototype-only scaffolding elsewhere
   in this file) to the `.ax-*` atom-chip naming convention already
   used by `.ax-datechip` / `.ax-moneychip` / `.ax-deadpill`.

   `.ax-popover-backdrop` is the shared invisible click-outside-closes
   layer for the destination's generic <Popover> atom (mirrors the
   `.bf-picker-backdrop` pattern already established in
   Features/Admin/Branding/branding.css).
   ================================================================== */
.ax-popover-backdrop {
  position: fixed;
  inset: 0;
  z-index: 69;
  background: transparent;
}
.ax-date-popover {
  position: absolute;
  z-index: 70;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line-2);
  border-radius: var(--th-radius-5);
  box-shadow:
    0 1px 2px color-mix(in oklch, var(--th-ink) 6%, transparent),
    0 14px 30px color-mix(in oklch, var(--th-ink) 14%, transparent);
  padding: 12px;
  width: 240px;
}
.ax-date-popover input[type="date"] {
  width: 100%;
  font-family: var(--th-f-mono);
  font-size: 13px;
  padding: 7px 10px;
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-3);
  background: var(--th-paper);
  color: var(--th-ink);
  box-sizing: border-box;
}
.ax-date-popover .foot {
  display: flex;
  justify-content: space-between;
  gap: 8px;
  margin-top: 10px;
}
.ax-date-popover .clear {
  font-family: var(--th-f-sans);
  font-size: 11px;
  color: var(--th-ink-3);
  cursor: pointer;
  padding: 4px 8px;
  border-radius: var(--th-radius-3);
}
.ax-date-popover .clear:hover { color: var(--th-risk); background: var(--th-risk-soft); }
.ax-date-popover .save {
  background: var(--th-advant);
  color: var(--th-advant-fg);
  border: 1px solid var(--th-advant);
  font-family: var(--th-f-sans);
  font-size: 11.5px;
  padding: 5px 12px;
  border-radius: var(--th-radius-3);
  cursor: pointer;
  font-weight: 600;
}
.ax-date-popover .save:hover { background: var(--th-advant-deep); }


/* ==================================================================
   §C - .ax-deadpill - deadline pill
   ------------------------------------------------------------------
   [name · date] - date is an .ax-datechip; name is read-only.
   ================================================================== */
.ax-deadpill {
  display: inline-flex;
  align-items: baseline;
  gap: 7px;
  padding: 2px 4px 2px 10px;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-pill);
  font-family: var(--th-f-sans);
  font-size: 11.5px;
  color: var(--th-ink-2);
  line-height: 1.5;
  max-width: 100%;
}
.ax-deadpill:hover { border-color: var(--th-line-2); }
.ax-deadpill .name {
  font-weight: 500;
  color: var(--th-ink);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 26ch;
}
.ax-deadpill .vis {
  display: inline-grid;
  place-items: center;
  width: 14px; height: 14px;
  border-radius: 50%;
  flex: none;
  margin-right: -2px;
  border: 1px solid transparent;
}
.ax-deadpill .vis svg { width: 9px; height: 9px; }
.ax-deadpill .vis.is-applicant { background: var(--th-advant-soft); color: var(--th-advant-deep); border-color: color-mix(in oklch, var(--th-advant) 30%, transparent); }
.ax-deadpill .vis.is-staff     { background: var(--th-marigold-soft); color: var(--th-marigold-deep); border-color: color-mix(in oklch, var(--th-marigold-deep) 30%, transparent); }
.ax-deadpill .vis.is-both      { background: oklch(96% 0.02 200); color: oklch(38% 0.08 220); border-color: oklch(82% 0.05 220); }

.ax-deadpill .ax-datechip {
  background: var(--th-paper);
  border: 1px solid var(--th-line);
  padding: 1px 8px;
  border-radius: var(--th-radius-pill);
  font-size: 11px;
}
.ax-deadpill .ax-datechip:hover {
  background: var(--th-paper-2);
  border-color: var(--th-ink-4);
  border-bottom-color: var(--th-ink-4);
}
.ax-deadpill .ax-datechip.is-active {
  padding: 0;
  background: transparent;
  border: 0;
}
.ax-deadpill .ax-datechip.is-active input {
  width: 110px;
  font-size: 11px;
  padding: 1px 6px;
}


/* ==================================================================
   §D - .ax-kebab + popover menu
   ================================================================== */
.ax-kebab {
  position: relative;
}
.ax-kebab-menu {
  position: absolute;
  right: 0; top: calc(100% + 4px);
  /* Must render above .ax-popover-backdrop (z-index 69, §B2) - this menu is a
     Popover surface, so a lower z-index leaves the invisible backdrop
     intercepting every item click (menu renders visually but nothing is
     clickable). Same fix already applied to the sibling Popover surfaces
     .ax-date-popover and the Activity tab's kind-filter dropdown (both z-index 70). */
  z-index: 70;
  width: 220px;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line-2);
  border-radius: var(--th-radius-5);
  box-shadow: 0 8px 28px oklch(20% 0.01 255 / 0.14), 0 1px 0 oklch(20% 0.01 255 / 0.04);
  padding: 4px;
  display: flex;
  flex-direction: column;
}
.ax-kebab-menu .item {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 6px 9px;
  font-family: var(--th-f-sans);
  font-size: 12.5px;
  color: var(--th-ink);
  border-radius: var(--th-radius-3);
  cursor: pointer;
}
.ax-kebab-menu button.item {
  width: 100%;
  margin: 0;
  border: 0;
  background: transparent;
  text-align: left;
}
.ax-kebab-menu button.item:focus-visible {
  outline: 2px solid var(--th-advant);
  outline-offset: -2px;
}
.ax-kebab-menu .item:hover { background: var(--th-paper-2); }
.ax-kebab-menu .item .glyph {
  width: 14px; height: 14px;
  display: grid; place-items: center;
  color: var(--th-ink-3);
}
.ax-kebab-menu .item:hover .glyph { color: var(--th-ink); }
.ax-kebab-menu .sep {
  height: 1px;
  background: var(--th-line);
  margin: 4px 8px;
}
.ax-kebab-menu .item.is-danger {
  color: oklch(45% 0.14 25);
}
.ax-kebab-menu .item.is-danger .glyph { color: oklch(45% 0.14 25); }
.ax-kebab-menu .item.is-danger:hover {
  background: var(--th-risk-soft);
}
.ax-kebab-menu .item .keys {
  margin-left: auto;
  font-family: var(--th-f-mono);
  font-size: 10px;
  color: var(--th-ink-4);
  letter-spacing: 0.04em;
}
.ax-kebab-menu .head {
  padding: 6px 9px 4px;
  font-family: var(--th-f-mono);
  font-size: 9.5px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--th-ink-4);
}


/* ==================================================================
   §E - .ad-defaults - Defaults panel
   ------------------------------------------------------------------
   Sits in the top row alongside Identity + Identifiers. Shape
   matches Identifiers (inherit / override / revert) since the
   inheritance semantics are identical.
   ================================================================== */
.ad-defaults {
  /* nothing - uses .ad-panel + .ad-idents-derived rows */
}

/* The same .ad-idents row shape works; .ad-defaults uses identical
   chrome internally so it composes cleanly. Keep .ad-idents rules. */

/* Identity-row layout grows from 2 columns to 3 to accommodate */
.ad-identity.is-three {
  grid-template-columns:
    minmax(0, 1.4fr)
    minmax(0, 1fr)
    minmax(0, 1fr);
}

/* In the three-column row the Identifiers + Defaults panels get
   narrower; the ad-ident row chrome compacts so the override input,
   inherited chip, and action link all stay inside their column. */
.ad-identity.is-three .ad-ident {
  grid-template-columns: 76px 1fr auto;
  gap: 8px;
  padding: 9px 14px;
}
.ad-identity.is-three .ad-ident .lbl {
  font-size: 9.5px;
  letter-spacing: 0.1em;
}
.ad-identity.is-three .ad-ident .val {
  gap: 6px;
  min-width: 0;
  flex-wrap: wrap;
}
.ad-identity.is-three .ad-ident .val input {
  width: 100px;
  font-size: 12px;
  padding: 2px 6px;
}
.ad-identity.is-three .ad-ident .val .src {
  font-size: 10px;
  padding: 1px 6px;
}
.ad-identity.is-three .ad-ident .action {
  font-size: 11px;
  white-space: nowrap;
}
/* "Revert to inherited" is too long for the narrow column -
   the visible label collapses to just "Revert" and the longer form
   stays as a tooltip via title attribute. */
.ad-identity.is-three .ad-ident .action.is-revert {
  font-size: 11px;
}

.ad-defaults-foot-extras {
  /* Reserved-space note about future defaults */
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 11.5px;
  color: var(--th-ink-3);
  line-height: 1.5;
}


/* ==================================================================
   §F - Duplicate-mode rail head
   ------------------------------------------------------------------
   Same chrome as the edit-term rail, but the head reads "Duplicate
   term · from {source}" and the badge swaps to "New term".
   ================================================================== */
.ad-rail.is-duplicate .ad-rail-head {
  background: var(--th-advant-soft);
  border-bottom-color: color-mix(in oklch, var(--th-advant) 30%, transparent);
}
.ad-rail.is-duplicate .ad-rail-head .glyph {
  background: var(--th-paper-sunk);
  border-color: color-mix(in oklch, var(--th-advant) 35%, transparent);
  color: var(--th-advant-deep);
}
.ad-rail.is-duplicate .ad-rail-head .subtitle .badge {
  border-color: color-mix(in oklch, var(--th-advant) 35%, transparent);
  color: var(--th-advant-deep);
  background: var(--th-paper-sunk);
}
.ad-rail.is-duplicate .ad-rail-foot .btn.is-caution {
  /* primary action in duplicate-mode is the create - advant primary */
  background: var(--th-advant-deep);
  border-color: var(--th-advant-deep);
  color: var(--th-advant-fg);
}
.ad-rail.is-duplicate .ad-rail-foot .btn.is-caution:hover {
  background: oklch(32% 0.09 230);
}

/* Carry-over chip - visualisation for "copied from source" */
.ad-field-carry {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-family: var(--th-f-mono);
  font-size: 9.5px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--th-advant-deep);
  background: var(--th-advant-soft);
  border: 1px solid color-mix(in oklch, var(--th-advant) 30%, transparent);
  padding: 1px 6px;
  border-radius: var(--th-radius-pill);
}
.ad-field-carry svg { width: 10px; height: 10px; }
.ad-field-required-empty {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-family: var(--th-f-mono);
  font-size: 9.5px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: oklch(45% 0.14 25);
  background: var(--th-risk-soft);
  border: 1px solid color-mix(in oklch, var(--th-risk) 30%, transparent);
  padding: 1px 6px;
  border-radius: var(--th-radius-pill);
}

/* Empty-required field in duplicate-mode reads with a risk hint */
.ad-form-field.is-empty-required input,
.ad-form-field.is-empty-required .ipt-locked {
  border-color: color-mix(in oklch, var(--th-risk) 30%, transparent);
  background: var(--th-risk-soft);
}
.ad-form-field.is-empty-required input::placeholder { color: oklch(45% 0.14 25); opacity: 0.7; }
.ad-form-field .lbl-row {
  display: flex;
  align-items: center;
  gap: 6px;
}
.ad-form-field .lbl-row .lbl { margin-right: auto; }


/* ==================================================================
   §G - Activity .is-no-revert refactor
   ------------------------------------------------------------------
   .is-system is renamed to .is-no-revert with sub-variants:
     (default)             - generic "No revert"
     .is-no-revert-recall  - points at version-recall (publish)
   Existing .is-system rules are retained for backwards compat with
   v3 fixture rendering but new fixture uses .is-no-revert.
   ================================================================== */
.ad-act-revert.is-no-revert {
  border-style: dashed;
  color: var(--th-ink-4);
  background: transparent;
  font-style: italic;
  font-family: var(--th-f-serif);
  cursor: default;
  border-color: var(--th-line-2);
  font-size: 11.5px;
}
.ad-act-revert.is-no-revert.is-no-revert-recall {
  /* Publish events - the "use version-recall" sub-variant */
  color: oklch(38% 0.08 220);
  border-color: oklch(82% 0.05 220);
}
.ad-act-revert.is-no-revert.is-no-revert-recall::before {
  content: "";
  width: 5px; height: 5px;
  border-radius: 50%;
  background: oklch(38% 0.08 220);
  display: inline-block;
  margin-right: 6px;
}




/* ==================================================================
   §I - Dark-theme polish
   ================================================================== */
[data-theme="dark"] .ax-datechip:hover {
  background: var(--th-paper-2);
  border-bottom-color: var(--th-ink-3);
}
[data-theme="dark"] .ax-datechip:focus,
[data-theme="dark"] .ax-datechip.is-focused {
  background: var(--th-paper-2);
}
[data-theme="dark"] .ax-datechip.is-active input {
  background: var(--th-paper);
  border-color: oklch(70% 0.13 245);
  box-shadow: 0 0 0 3px oklch(70% 0.13 245 / 0.20);
}
[data-theme="dark"] .ax-deadpill {
  background: var(--th-paper-2);
  border-color: var(--th-line);
}
[data-theme="dark"] .ax-deadpill .ax-datechip {
  background: var(--th-paper-sunk);
  border-color: var(--th-line-2);
}
[data-theme="dark"] .ax-kebab-menu {
  background: var(--th-paper-sunk);
  border-color: var(--th-line-2);
  box-shadow: 0 8px 28px oklch(5% 0.01 60 / 0.4);
}
[data-theme="dark"] .ax-kebab-menu .item.is-danger { color: oklch(80% 0.15 25); }
[data-theme="dark"] .ax-kebab-menu .item.is-danger .glyph { color: oklch(80% 0.15 25); }
[data-theme="dark"] .ad-rail.is-duplicate .ad-rail-head {
  background: oklch(28% 0.06 245);
  border-bottom-color: color-mix(in oklch, oklch(70% 0.13 245) 40%, transparent);
}
[data-theme="dark"] .ad-rail.is-duplicate .ad-rail-head .glyph,
[data-theme="dark"] .ad-rail.is-duplicate .ad-rail-head .subtitle .badge {
  color: oklch(82% 0.10 245);
  border-color: color-mix(in oklch, oklch(70% 0.13 245) 40%, transparent);
}
[data-theme="dark"] .ad-rail.is-duplicate .ad-rail-foot .btn.is-caution {
  background: oklch(70% 0.13 245);
  border-color: oklch(70% 0.13 245);
  color: oklch(14% 0.01 60);
}
[data-theme="dark"] .ad-field-carry {
  background: oklch(28% 0.06 245);
  color: oklch(82% 0.10 245);
  border-color: color-mix(in oklch, oklch(70% 0.13 245) 40%, transparent);
}
[data-theme="dark"] .ad-field-required-empty {
  background: oklch(24% 0.06 25);
  color: oklch(82% 0.15 25);
  border-color: color-mix(in oklch, oklch(70% 0.15 25) 40%, transparent);
}
[data-theme="dark"] .ad-form-field.is-empty-required input,
[data-theme="dark"] .ad-form-field.is-empty-required .ipt-locked {
  background: oklch(22% 0.05 25);
  border-color: color-mix(in oklch, oklch(70% 0.15 25) 40%, transparent);
}
[data-theme="dark"] .ad-act-revert.is-no-revert.is-no-revert-recall {
  color: oklch(80% 0.08 220);
  border-color: color-mix(in oklch, oklch(65% 0.10 220) 35%, transparent);
}
[data-theme="dark"] .ad-act-revert.is-no-revert.is-no-revert-recall::before {
  background: oklch(80% 0.08 220);
}


/* ==================================================================
   THRESHOLD - Application definitions · round five (Payments)
   ------------------------------------------------------------------
   Additive overlay on the earlier v2/v3/v4 sheets. Adds:
     §A  Methods panel (4 methods + shared processor sub-config)
     §B  Method sub-config (expanded edit surface per method)
     §C  .ax-moneychip - inline-editable money primitive
     §D  Fees panel (priority-ordered list with drag + default row)
     §E  Setup flow chrome
     §F  Method-toggle-off confirm popover (cc-confirm-popover)
     §G  TouchNet provider crest treatment
     §H  Dark-theme polish
   ================================================================== */


/* ==================================================================
   §A - Methods panel
   ------------------------------------------------------------------
   List of four methods. Each row: name + glyph, optional rule chip
   ("Available if"), enable toggle, edit affordance. Processor
   sub-config sits inside the methods panel as a ruled sub-region
   visually scoped to Card + ACH.
   ================================================================== */
.ad-methods {
  display: flex;
  flex-direction: column;
  gap: 0;
}
.ad-method {
  display: grid;
  grid-template-columns: 32px 1fr auto auto auto;
  align-items: center;
  gap: 14px;
  padding: 12px 18px 12px 14px;
  border-bottom: 1px solid var(--th-line-soft);
  background: var(--th-paper-sunk);
}
.ad-method:last-child { border-bottom: 0; }
.ad-method:hover { background: var(--th-paper); }
.ad-method.is-off { opacity: 0.78; }
.ad-method.is-off:hover { opacity: 1; }

.ad-method .glyph {
  width: 28px; height: 28px;
  border-radius: var(--th-radius-3);
  background: var(--th-paper-2);
  border: 1px solid var(--th-line);
  display: grid; place-items: center;
  color: var(--th-ink-2);
}
.ad-method.is-on .glyph {
  background: var(--th-ok-soft);
  border-color: color-mix(in oklch, var(--th-ok) 30%, transparent);
  color: oklch(40% 0.10 155);
}

.ad-method .body {
  display: flex; flex-direction: column; gap: 2px; min-width: 0;
}
.ad-method .body .name {
  font-size: var(--th-size-14);
  font-weight: 600;
  color: var(--th-ink);
  display: inline-flex; align-items: baseline; gap: 8px;
}
.ad-method .body .name .keytag {
  font-family: var(--th-f-mono);
  font-weight: 400;
  font-size: 11px;
  color: var(--th-ink-4);
}
.ad-method .body .hint {
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 11.5px;
  color: var(--th-ink-3);
  line-height: 1.45;
  max-width: 64ch;
}

.ad-method .available {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 11.5px;
  color: var(--th-ink-3);
}
.ad-method .available .lbl {
  font-family: var(--th-f-mono);
  font-size: 9.5px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--th-ink-4);
}

.ad-method .toggle-cell {
  display: inline-flex;
  align-items: center;
  gap: 10px;
}
.ad-method .toggle-cell .state {
  font-family: var(--th-f-mono);
  font-size: 10px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--th-ink-4);
  min-width: 22px;
  text-align: right;
}
.ad-method.is-on .toggle-cell .state {
  color: oklch(40% 0.10 155);
}

.ad-method .actions {
  display: inline-flex;
  gap: 4px;
}
.ad-method .actions .iconbtn {
  width: 24px; height: 24px;
  display: grid; place-items: center;
  border-radius: var(--th-radius-3);
  color: var(--th-ink-3);
  background: transparent;
  border: 1px solid transparent;
  cursor: pointer;
}
.ad-method .actions .iconbtn:hover {
  background: var(--th-paper);
  border-color: var(--th-line-2);
  color: var(--th-ink);
}

/* Processor sub-config - ruled region scoped to Card + ACH */
.ad-processor {
  display: grid;
  grid-template-columns: 56px 1fr auto;
  gap: 14px;
  align-items: center;
  padding: 14px 18px 14px 18px;
  background: var(--th-paper);
  border-top: 1px solid var(--th-line);
  border-bottom: 1px solid var(--th-line);
  position: relative;
}
.ad-processor .scope-rail {
  position: absolute;
  left: 0; top: 0; bottom: 0;
  width: 3px;
  background: var(--th-advant);
  opacity: 0.45;
  border-radius: 0;
}
.ad-processor .scope-tag {
  position: absolute;
  left: 12px; top: -7px;
  font-family: var(--th-f-mono);
  font-size: 9.5px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--th-advant-deep);
  background: var(--th-paper-sunk);
  padding: 1px 7px;
  border-radius: var(--th-radius-pill);
  border: 1px solid color-mix(in oklch, var(--th-advant) 30%, transparent);
}
.ad-processor .provider-crest {
  width: 44px; height: 44px;
  border-radius: var(--th-radius-5);
  display: grid; place-items: center;
  font-family: var(--th-f-serif);
  font-weight: 600;
  font-size: 15px;
  color: var(--th-paper);
  letter-spacing: -0.01em;
}
.ad-processor .provider-crest.is-stripe {
  background: linear-gradient(140deg, oklch(58% 0.18 280), oklch(38% 0.14 270));
}
.ad-processor .provider-crest.is-touchnet {
  background: linear-gradient(140deg, oklch(54% 0.16 200), oklch(36% 0.13 215));
}
.ad-processor .provider-body { display: flex; flex-direction: column; gap: 3px; }
.ad-processor .provider-name {
  font-family: var(--th-f-serif);
  font-size: 16px;
  font-weight: 500;
  letter-spacing: -0.005em;
  color: var(--th-ink);
}
.ad-processor .provider-meta {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-family: var(--th-f-mono);
  font-size: 11px;
  color: var(--th-ink-3);
  font-variant-numeric: tabular-nums;
}
.ad-processor .actions {
  display: inline-flex;
  gap: 6px;
  align-items: center;
}
.ad-processor .actions a {
  font-family: var(--th-f-sans);
  font-size: 12.5px;
  color: var(--th-advant-deep);
  text-decoration: none;
  cursor: pointer;
  display: inline-flex; align-items: center; gap: 4px;
}
.ad-processor .actions a:hover { text-decoration: underline; }

/* Hint line in methods panel head - affects-new-applicants-only context */
.ad-methods-head-hint {
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 12px;
  color: var(--th-ink-3);
  line-height: 1.45;
}


/* ==================================================================
   §B - Method sub-config (expanded edit surface)
   ------------------------------------------------------------------
   When admin clicks the edit (pencil) affordance on a method row,
   the row expands beneath itself to show the method's sub-config:
   shared processor binding (read-only for Card/ACH), Instructions
   field, and an "Applicant sees:" preview rendering.
   ================================================================== */
.ad-method-sub {
  padding: 14px 18px 14px 60px;
  background: var(--th-paper);
  border-bottom: 1px solid var(--th-line-soft);
  display: grid;
  grid-template-columns: 1fr;
  gap: 12px;
}
.ad-method-sub-section {
  display: grid;
  gap: 6px;
}
.ad-method-sub-section .lbl {
  font-family: var(--th-f-mono);
  font-size: 10px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--th-ink-4);
  display: flex;
  align-items: center;
  gap: 8px;
}
.ad-method-sub-section .lbl-meta {
  font-family: var(--th-f-mono);
  font-size: 9.5px;
  letter-spacing: 0.1em;
  color: var(--th-ink-4);
  font-style: normal;
}
.ad-method-sub .ad-processor-ref {
  display: grid;
  grid-template-columns: 32px 1fr auto;
  gap: 10px;
  align-items: center;
  padding: 8px 12px;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-3);
}
.ad-method-sub .ad-processor-ref .crest {
  width: 28px; height: 28px;
  border-radius: var(--th-radius-3);
  display: grid; place-items: center;
  font-family: var(--th-f-serif);
  font-weight: 600;
  font-size: 11.5px;
  color: var(--th-paper);
}
.ad-method-sub .ad-processor-ref .crest.is-stripe {
  background: linear-gradient(140deg, oklch(58% 0.18 280), oklch(38% 0.14 270));
}
.ad-method-sub .ad-processor-ref .crest.is-touchnet {
  background: linear-gradient(140deg, oklch(54% 0.16 200), oklch(36% 0.13 215));
}
.ad-method-sub .ad-processor-ref .name { font-size: var(--th-size-13); font-weight: 600; color: var(--th-ink); }
.ad-method-sub .ad-processor-ref .meta {
  font-family: var(--th-f-mono);
  font-size: 10.5px;
  color: var(--th-ink-3);
  font-variant-numeric: tabular-nums;
}
.ad-method-sub .ad-processor-ref a {
  font-family: var(--th-f-sans);
  font-size: 11.5px;
  color: var(--th-advant-deep);
  text-decoration: none;
  display: inline-flex; align-items: center; gap: 4px;
}
.ad-method-sub .ad-processor-ref a:hover { text-decoration: underline; }

.ad-method-sub textarea {
  font-family: var(--th-f-sans);
  font-size: var(--th-size-13);
  line-height: 1.5;
  padding: 8px 11px;
  border: 1px solid var(--th-line-2);
  background: var(--th-paper-sunk);
  color: var(--th-ink);
  border-radius: var(--th-radius-3);
  resize: vertical;
  min-height: 64px;
  width: 100%;
}
.ad-method-sub textarea:focus {
  outline: none;
  border-color: var(--th-advant);
  box-shadow: 0 0 0 3px var(--th-advant-soft);
}
.ad-method-sub textarea::placeholder {
  color: var(--th-ink-4);
  font-style: italic;
}

/* Applicant preview - Compass-styled tile */
.ad-method-preview {
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-5);
  padding: 12px 14px;
  display: grid;
  grid-template-columns: 1fr;
  gap: 6px;
  position: relative;
}
.ad-method-preview::before {
  content: "Applicant sees";
  position: absolute;
  top: -7px;
  left: 14px;
  font-family: var(--th-f-mono);
  font-size: 9.5px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--th-marigold-deep);
  background: var(--th-paper);
  padding: 1px 7px;
  border-radius: var(--th-radius-pill);
  border: 1px solid color-mix(in oklch, var(--th-marigold-deep) 30%, transparent);
}
.ad-method-preview .opt {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 8px 4px;
}
.ad-method-preview .opt .radio {
  width: 14px; height: 14px;
  border-radius: 50%;
  border: 1.5px solid var(--th-ink-3);
  margin-top: 2px;
  flex: none;
  position: relative;
}
.ad-method-preview .opt.is-selected .radio { border-color: var(--th-advant); }
.ad-method-preview .opt.is-selected .radio::after {
  content: "";
  width: 7px; height: 7px;
  border-radius: 50%;
  background: var(--th-advant);
  position: absolute;
  left: 50%; top: 50%;
  transform: translate(-50%, -50%);
}
.ad-method-preview .opt .body { display: flex; flex-direction: column; gap: 3px; }
.ad-method-preview .opt .name {
  font-size: var(--th-size-14);
  font-weight: 500;
  color: var(--th-ink);
}
.ad-method-preview .opt .ins {
  font-size: 12.5px;
  color: var(--th-ink-2);
  line-height: 1.55;
  white-space: pre-wrap;
}
.ad-method-preview .opt .ins.is-empty {
  font-family: var(--th-f-serif);
  font-style: italic;
  color: var(--th-ink-4);
}


/* ==================================================================
   §C - .ax-moneychip
   ------------------------------------------------------------------
   Sibling primitive to .ax-datechip. Renders an amount + currency
   at rest; click to edit. ISO-formatted (75.00 USD).
   ================================================================== */
.ax-moneychip {
  display: inline-flex;
  align-items: baseline;
  gap: 5px;
  font-family: var(--th-f-mono);
  font-size: 13.5px;
  font-variant-numeric: tabular-nums;
  color: var(--th-ink);
  padding: 2px 7px;
  border-radius: var(--th-radius-3);
  cursor: text;
  border-bottom: 1px dotted transparent;
  transition: background 80ms ease, border-color 80ms ease;
  font-weight: 500;
}
.ax-moneychip:hover {
  background: var(--th-paper-sunk);
  border-bottom-color: var(--th-ink-4);
}
.ax-moneychip:focus,
.ax-moneychip.is-focused {
  outline: none;
  background: var(--th-paper-sunk);
  border-bottom-color: var(--th-advant);
}
.ax-moneychip .cur {
  font-family: var(--th-f-mono);
  font-size: 10.5px;
  color: var(--th-ink-3);
  font-weight: 400;
  letter-spacing: 0.04em;
}

/* Active edit - input replaces text */
.ax-moneychip.is-active {
  padding: 0;
  border-bottom: 0;
  background: transparent;
}
.ax-moneychip.is-active input {
  font-family: var(--th-f-mono);
  font-size: 13.5px;
  font-variant-numeric: tabular-nums;
  color: var(--th-ink);
  padding: 3px 8px;
  background: var(--th-paper);
  border: 1px solid var(--th-advant);
  border-radius: var(--th-radius-3);
  outline: none;
  box-shadow: 0 0 0 3px var(--th-advant-soft);
  width: 80px;
  font-weight: 500;
  text-align: right;
}
.ax-moneychip.is-active .cur {
  margin-left: 6px;
  align-self: center;
}


/* ==================================================================
   §D - Fees panel - priority-ordered list
   ================================================================== */
.ad-fees-list {
  display: flex;
  flex-direction: column;
  gap: 0;
}
.ad-fee-row {
  display: grid;
  grid-template-columns: 22px 36px 130px 1fr 28px;
  align-items: center;
  gap: 12px;
  padding: 11px 14px 11px 12px;
  border-bottom: 1px solid var(--th-line-soft);
  background: var(--th-paper-sunk);
  cursor: default;
}
.ad-fee-row:last-child { border-bottom: 0; }
.ad-fee-row:hover { background: var(--th-paper); }
.ad-fee-row.is-dragging {
  background: var(--th-marigold-soft);
  opacity: 0.85;
}

.ad-fee-row .drag {
  display: grid; place-items: center;
  width: 22px; height: 22px;
  color: var(--th-ink-4);
  cursor: grab;
  border-radius: var(--th-radius-3);
}
.ad-fee-row:hover .drag { color: var(--th-ink-2); }
.ad-fee-row .drag:hover { background: var(--th-paper-2); color: var(--th-ink); }
.ad-fee-row .drag:active { cursor: grabbing; }
.ad-fee-row .priority {
  font-family: var(--th-f-mono);
  font-size: 13px;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  color: var(--th-ink);
  text-align: center;
  width: 36px;
}
.ad-fee-row .amount-cell {
  display: inline-flex;
  align-items: baseline;
  gap: 4px;
}
.ad-fee-row .applies {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 12.5px;
  color: var(--th-ink-2);
}
.ad-fee-row .applies .lead {
  font-family: var(--th-f-mono);
  font-size: 9.5px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--th-ink-4);
}
.ad-fee-row .trash {
  display: grid; place-items: center;
  width: 22px; height: 22px;
  color: var(--th-ink-4);
  cursor: pointer;
  border-radius: var(--th-radius-3);
}
.ad-fee-row .trash:hover { background: var(--th-risk-soft); color: oklch(45% 0.14 25); }

/* DEFAULT row - italic-serif system-slot register */
.ad-fee-row.is-default {
  background: var(--th-paper-2);
  border-top: 1px solid var(--th-line);
}
.ad-fee-row.is-default .drag {
  cursor: default;
  opacity: 0;
  pointer-events: none;
}
.ad-fee-row.is-default .priority {
  font-family: var(--th-f-serif);
  font-style: italic;
  color: var(--th-ink-4);
  font-size: 14px;
  font-weight: 500;
}
.ad-fee-row.is-default .applies {
  font-family: var(--th-f-serif);
  font-style: italic;
  color: var(--th-marigold-deep);
  font-size: 13.5px;
  font-weight: 500;
  letter-spacing: -0.005em;
}
/* Task 5c.2 canon-fidelity fix: the appdef-v5 port carried an `.applies::after { content:
   "always applies" }` pseudo-element forward from an earlier design iteration where the row's
   own text was just "Default". The current canon markup (proto/payments.jsx FeeRow) renders the
   FULL sentence "Default · always applies" as literal text plus the ".ad-default-required" hint
   span - leaving the ::after in place duplicates the tail ("...always applies ... always
   applies"), confirmed by rendering the actual bundled canon prototype
   (appdef.css+v2..v7+prototype.css) in a browser. Removed rather than ported; the FeeRow.razor
   port renders the equivalent text directly in markup. */
.ad-fee-row.is-default .trash {
  opacity: 0;
  pointer-events: none;
}

/* Empty rule chip - "No rule - convert to default?" */
.ad-rule-chip.is-empty-need {
  background: var(--th-risk-soft);
  border-color: color-mix(in oklch, var(--th-risk) 25%, transparent);
  color: oklch(45% 0.14 25);
  font-family: var(--th-f-serif);
  font-style: italic;
  font-weight: 500;
}

/* Fee-due policy region - its own labeled row between the fees list and
   the caption foot. Encodes WHEN the fee is due (definition-wide),
   distinct from the priority list's WHICH-amount resolution. */
.ad-fee-duedate {
  padding: 14px 18px 15px;
  border-top: 1px solid var(--th-line);
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.ad-fee-duedate .head {
  display: flex;
  align-items: baseline;
  gap: 10px;
  flex-wrap: wrap;
}
.ad-fee-duedate .head .lbl {
  font-family: var(--th-f-mono);
  font-size: 10px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--th-ink-3);
  font-weight: 600;
}
.ad-fee-duedate .head .sub {
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 12px;
  color: var(--th-ink-3);
}
.ad-fee-duedate .control {
  display: flex;
  align-items: flex-start;
  gap: 14px;
  flex-wrap: wrap;
}
.ad-fee-duedate .control .ad-form-field { margin: 0; }

/* Native select keeps the shared .ad-form-field look (border / padding
   from appdef-v2) - just make room for the OS chevron. */
.ad-fee-duedate .control select { padding-right: 26px; cursor: pointer; }

/* Days-after-submission sub-field: number input + read-back suffix. */
.ad-fee-days {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  flex-wrap: wrap;
  padding-top: 1px;
}
.ad-fee-days input {
  width: 62px;
  padding: 7px 9px;
  font-family: var(--th-f-mono);
  font-variant-numeric: tabular-nums;
  font-size: 13px;
  text-align: right;
  color: var(--th-ink);
  background: var(--th-paper);
  border: 1px solid var(--th-line-2);
  border-radius: var(--th-radius-3);
}
.ad-fee-days input:focus {
  outline: none;
  border-color: var(--th-advant);
  box-shadow: 0 0 0 3px var(--th-advant-soft);
}
.ad-fee-days.is-invalid input {
  border-color: color-mix(in oklch, var(--th-risk) 30%, transparent);
  background: var(--th-risk-soft);
}
.ad-fee-days .suffix {
  font-family: var(--th-f-sans);
  font-size: 12.5px;
  color: var(--th-ink-2);
}

/* Non-blocking caution - one muted line per active term missing a fee
   due date under a TermDate policy. Warn-toned; never alarm chrome. */
.ad-fee-caution {
  display: flex;
  flex-direction: column;
  gap: 5px;
  padding: 9px 11px;
  background: color-mix(in oklch, var(--th-warn-soft) 55%, var(--th-paper-sunk));
  border: 1px solid color-mix(in oklch, var(--th-warn) 22%, transparent);
  border-radius: var(--th-radius-3);
}
.ad-fee-caution .line {
  display: flex;
  align-items: center;
  gap: 7px;
  font-family: var(--th-f-sans);
  font-size: 12px;
  color: var(--th-ink-2);
}
.ad-fee-caution .line .ico { color: var(--th-warn); flex: none; }

/* Dormancy disclosure - the policy is authored but not yet enforced. */
.ad-fee-dormant {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 11.5px;
  color: var(--th-ink-4);
}
.ad-fee-dormant .ico { color: var(--th-ink-4); flex: none; }

/* Accessibility follow-up: Round 8's tertiary foregrounds are too muted for
   this 10-12px supporting copy on warm-dark. Preserve the exact canon rules
   above and raise only these fee-due text nodes to an existing safe token. */
.payment-fee-due-policy .head .fee-due-accessible-copy,
.payment-fee-due-policy > .fee-due-accessible-copy {
  color: var(--th-ink-2);
}


/* ==================================================================
   §E - Setup flow first stage
   ------------------------------------------------------------------
   First-time setup carves out a centered card inside the Payments
   tab. Steps left, current form right. The default-fee field is
   marked required and visible from step one.
   ================================================================== */
.ad-pay-setup {
  display: grid;
  grid-template-columns: 220px 1fr;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-5);
  overflow: hidden;
}
.ad-pay-setup-rail {
  background: var(--th-paper-2);
  border-right: 1px solid var(--th-line);
  padding: 18px 18px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.ad-pay-setup-rail .step {
  display: grid;
  grid-template-columns: 22px 1fr;
  gap: 10px;
  align-items: start;
  font-size: 12.5px;
  color: var(--th-ink-3);
  padding: 5px 0;
}
.ad-pay-setup-rail .step .marker {
  width: 22px; height: 22px;
  border-radius: 50%;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line-2);
  color: var(--th-ink-3);
  font-family: var(--th-f-mono);
  font-size: 11px;
  display: grid; place-items: center;
  flex: none;
}
.ad-pay-setup-rail .step.is-active {
  color: var(--th-ink);
  font-weight: 600;
}
.ad-pay-setup-rail .step.is-active .marker {
  background: var(--th-marigold-deep);
  color: var(--th-paper-sunk);
  border-color: var(--th-marigold-deep);
}
.ad-pay-setup-rail .step.is-done .marker {
  background: var(--th-ok-soft);
  color: oklch(40% 0.10 155);
  border-color: color-mix(in oklch, var(--th-ok) 30%, transparent);
}
.ad-pay-setup-rail .step .body { display: flex; flex-direction: column; gap: 2px; }
.ad-pay-setup-rail .step .body .sub {
  font-size: 11.5px;
  color: var(--th-ink-4);
  font-weight: 400;
}
.ad-pay-setup-rail .connector {
  width: 1px;
  height: 14px;
  background: var(--th-line-2);
  margin-left: 11px;
}
.ad-pay-setup-form {
  padding: 22px 26px;
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.ad-pay-setup-form h3 {
  margin: 0;
  font-family: var(--th-f-serif);
  font-size: 20px;
  font-weight: 500;
  letter-spacing: -0.005em;
  color: var(--th-ink);
}
.ad-pay-setup-form .lead {
  margin: 0;
  font-size: 13px;
  color: var(--th-ink-2);
  line-height: 1.55;
  max-width: 68ch;
}
.ad-pay-setup-form .field-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
}
.ad-pay-setup-form .invariant-card {
  background: var(--th-marigold-soft);
  border: 1px solid color-mix(in oklch, var(--th-marigold-deep) 30%, transparent);
  border-radius: var(--th-radius-3);
  padding: 12px 14px;
  display: grid;
  grid-template-columns: 18px 1fr;
  gap: 10px;
  align-items: start;
  font-size: 12.5px;
  color: var(--th-ink-2);
  line-height: 1.5;
}
.ad-pay-setup-form .invariant-card .g { color: var(--th-marigold-deep); margin-top: 1px; }
.ad-pay-setup-form .invariant-card em {
  font-family: var(--th-f-serif);
  font-style: italic;
  color: var(--th-marigold-deep);
}
.ad-pay-setup-form .invariant-card code {
  font-family: var(--th-f-mono);
  font-size: 11.5px;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line);
  padding: 0 4px;
  border-radius: var(--th-radius-3);
}
.ad-pay-setup-foot {
  grid-column: 1 / -1;
  padding: 12px 22px;
  background: var(--th-paper-2);
  border-top: 1px solid var(--th-line);
  display: flex;
  align-items: center;
  gap: 10px;
}
.ad-pay-setup-foot .audit-note {
  margin-right: auto;
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 11.5px;
  color: var(--th-ink-3);
  display: inline-flex; gap: 5px; align-items: center;
}


/* ==================================================================
   §F - Method-toggle-off confirm popover
   ------------------------------------------------------------------
   Lighter cousin of cc-impact-modal. Pops adjacent to the toggle
   that was clicked. Single decision; names the affected count;
   audit-note in the foot.
   ================================================================== */
.cc-confirm-popover {
  position: absolute;
  z-index: 70;
  width: 360px;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line-2);
  border-radius: var(--th-radius-5);
  box-shadow:
    0 12px 36px oklch(20% 0.01 255 / 0.16),
    0 1px 0 oklch(20% 0.01 255 / 0.04);
  overflow: hidden;
}
.cc-confirm-popover .head {
  display: grid;
  grid-template-columns: 28px 1fr;
  gap: 10px;
  align-items: start;
  padding: 14px 16px 10px;
  background: var(--th-marigold-soft);
  border-bottom: 1px solid color-mix(in oklch, var(--th-marigold-deep) 30%, transparent);
}
.cc-confirm-popover .head .glyph {
  width: 24px; height: 24px;
  border-radius: 50%;
  background: var(--th-paper-sunk);
  border: 1px solid color-mix(in oklch, var(--th-marigold-deep) 35%, transparent);
  color: var(--th-marigold-deep);
  display: grid; place-items: center;
  margin-top: 1px;
}
.cc-confirm-popover .head .title {
  font-family: var(--th-f-serif);
  font-size: 14.5px;
  font-weight: 500;
  letter-spacing: -0.005em;
  color: var(--th-ink);
}
.cc-confirm-popover .body {
  padding: 12px 16px 14px;
  font-size: 12.5px;
  color: var(--th-ink);
  line-height: 1.5;
}
.cc-confirm-popover .body p { margin: 0 0 8px; }
.cc-confirm-popover .body p:last-child { margin-bottom: 0; }
.cc-confirm-popover .body .count {
  font-weight: 600;
  color: var(--th-ink);
}
.cc-confirm-popover .body .muted { color: var(--th-ink-3); }
.cc-confirm-popover .foot {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 14px;
  background: var(--th-paper-2);
  border-top: 1px solid var(--th-line);
}
.cc-confirm-popover .foot .audit-note {
  margin-right: auto;
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 11px;
  color: var(--th-ink-3);
  display: inline-flex; gap: 5px; align-items: center;
}
.cc-confirm-popover .foot .btn {
  padding: 4px 11px;
  font-family: var(--th-f-sans);
  font-size: 12px;
  font-weight: 500;
  border-radius: var(--th-radius-3);
  cursor: pointer;
  border: 1px solid var(--th-line-2);
  background: var(--th-paper-sunk);
  color: var(--th-ink);
}
.cc-confirm-popover .foot .btn:hover {
  background: var(--th-paper);
  border-color: var(--th-ink-4);
}
.cc-confirm-popover .foot .btn.is-caution {
  background: var(--th-marigold-deep);
  color: var(--th-paper-sunk);
  border-color: var(--th-marigold-deep);
  font-weight: 600;
}
.cc-confirm-popover .foot .btn.is-caution:hover {
  background: oklch(40% 0.13 50);
}

/* Pointer caret on the popover */
.cc-confirm-popover.points-right::before {
  content: "";
  position: absolute;
  right: -7px; top: 18px;
  width: 12px; height: 12px;
  background: var(--th-marigold-soft);
  border-top: 1px solid color-mix(in oklch, var(--th-marigold-deep) 30%, transparent);
  border-right: 1px solid color-mix(in oklch, var(--th-marigold-deep) 30%, transparent);
  transform: rotate(45deg);
}


/* ==================================================================
   §G - Six-dot drag glyph (CSS-only, no icon symbol needed)
   ================================================================== */
.ico-drag {
  display: inline-block;
  width: 8px;
  height: 14px;
  background-image:
    radial-gradient(circle at 2px 2px, currentColor 1.2px, transparent 1.6px),
    radial-gradient(circle at 6px 2px, currentColor 1.2px, transparent 1.6px),
    radial-gradient(circle at 2px 7px, currentColor 1.2px, transparent 1.6px),
    radial-gradient(circle at 6px 7px, currentColor 1.2px, transparent 1.6px),
    radial-gradient(circle at 2px 12px, currentColor 1.2px, transparent 1.6px),
    radial-gradient(circle at 6px 12px, currentColor 1.2px, transparent 1.6px);
  background-repeat: no-repeat;
  background-size: 8px 14px;
}


/* ==================================================================
   §H - Dark-theme polish
   ================================================================== */
[data-theme="dark"] .ad-method .glyph {
  background: var(--th-paper-3);
  border-color: var(--th-line);
  color: var(--th-ink-2);
}
[data-theme="dark"] .ad-method.is-on .glyph {
  background: oklch(24% 0.04 155);
  color: oklch(80% 0.12 155);
  border-color: color-mix(in oklch, oklch(65% 0.13 155) 35%, transparent);
}
[data-theme="dark"] .ad-method.is-on .toggle-cell .state {
  color: oklch(80% 0.12 155);
}
[data-theme="dark"] .ad-processor {
  background: var(--th-paper-2);
}
[data-theme="dark"] .ad-processor .scope-tag {
  background: var(--th-paper-sunk);
  border-color: color-mix(in oklch, oklch(70% 0.13 245) 40%, transparent);
  color: oklch(82% 0.10 245);
}
[data-theme="dark"] .ad-processor .scope-rail {
  background: oklch(70% 0.13 245);
}
[data-theme="dark"] .ad-method-sub {
  background: var(--th-paper-2);
}
[data-theme="dark"] .ad-method-sub textarea {
  background: var(--th-paper-sunk);
  border-color: var(--th-line-2);
  color: var(--th-ink);
}
[data-theme="dark"] .ad-method-preview {
  background: var(--th-paper-2);
  border-color: var(--th-line);
}
[data-theme="dark"] .ad-method-preview::before {
  background: var(--th-paper-sunk);
  color: oklch(82% 0.13 55);
  border-color: color-mix(in oklch, oklch(70% 0.14 55) 40%, transparent);
}
[data-theme="dark"] .ad-method-preview .opt.is-selected .radio { border-color: oklch(70% 0.13 245); }
[data-theme="dark"] .ad-method-preview .opt.is-selected .radio::after { background: oklch(70% 0.13 245); }
[data-theme="dark"] .ax-moneychip:hover { background: var(--th-paper-2); }
[data-theme="dark"] .ax-moneychip.is-active input {
  background: var(--th-paper);
  border-color: oklch(70% 0.13 245);
  box-shadow: 0 0 0 3px oklch(70% 0.13 245 / 0.18);
}
[data-theme="dark"] .ad-fee-row { background: var(--th-paper-2); }
[data-theme="dark"] .ad-fee-row:hover { background: var(--th-paper-sunk); }
[data-theme="dark"] .ad-fee-row.is-default { background: var(--th-paper-3); }
[data-theme="dark"] .ad-rule-chip.is-empty-need {
  background: oklch(24% 0.06 25);
  border-color: color-mix(in oklch, oklch(70% 0.15 25) 35%, transparent);
  color: oklch(82% 0.15 25);
}
[data-theme="dark"] .ad-fee-days input { background: var(--th-paper-2); border-color: var(--th-line-2); }
[data-theme="dark"] .ad-fee-days.is-invalid input {
  background: oklch(22% 0.05 25);
  border-color: color-mix(in oklch, oklch(70% 0.15 25) 40%, transparent);
}
[data-theme="dark"] .ad-fee-caution {
  background: color-mix(in oklch, var(--th-warn-soft) 70%, var(--th-paper-sunk));
  border-color: color-mix(in oklch, var(--th-warn) 35%, transparent);
}
[data-theme="dark"] .cc-confirm-popover .head {
  background: oklch(26% 0.05 55);
  border-bottom-color: color-mix(in oklch, oklch(70% 0.14 55) 40%, transparent);
}
[data-theme="dark"] .cc-confirm-popover .head .glyph {
  background: var(--th-paper-sunk);
  color: oklch(82% 0.13 55);
  border-color: color-mix(in oklch, oklch(70% 0.14 55) 40%, transparent);
}
[data-theme="dark"] .cc-confirm-popover.points-right::before {
  background: oklch(26% 0.05 55);
  border-top-color: color-mix(in oklch, oklch(70% 0.14 55) 40%, transparent);
  border-right-color: color-mix(in oklch, oklch(70% 0.14 55) 40%, transparent);
}
[data-theme="dark"] .cc-confirm-popover .foot .btn.is-caution {
  background: oklch(76% 0.12 50);
  border-color: oklch(76% 0.12 50);
  color: oklch(14% 0.01 60);
}
[data-theme="dark"] .ad-pay-setup-rail .step.is-active .marker {
  background: oklch(76% 0.12 50);
  color: oklch(14% 0.01 60);
  border-color: oklch(76% 0.12 50);
}
[data-theme="dark"] .ad-pay-setup-form .invariant-card {
  background: oklch(26% 0.05 55);
  border-color: color-mix(in oklch, oklch(70% 0.14 55) 40%, transparent);
}


/* ==================================================================
   appdef-v6.css - round six (Payments follow-on)
   Patches v5 chrome with:
     §A  Processor inheritance sub-panel (.ad-inherit)
     §B  Fees · date-range column states (no range / active / inactive)
     §C  Default-row "Required" hint
     §D  Change-provider popover (.cc-provider-popover)
     §E  Setup gate state - no tenant processors
     §F  Dark-theme polish for the above
   ================================================================== */


/* ==================================================================
   §A - Processor inheritance sub-panel
   ------------------------------------------------------------------
   Lives BENEATH .ad-processor inside the methods panel. Collapsed
   by default; admins see resolved values inline. Expanded - each
   provider-config field renders as an inheritance row matching
   the Identifiers panel pattern.
   ================================================================== */
.ad-inherit {
  background: var(--th-paper-2);
  border-bottom: 1px solid var(--th-line);
  border-top: 1px dashed color-mix(in oklch, var(--th-advant) 30%, transparent);
  position: relative;
}
.ad-inherit::before {
  /* continues the scope-rail vertical line down through the panel */
  content: "";
  position: absolute;
  left: 0; top: 0; bottom: 0;
  width: 2px;
  background: color-mix(in oklch, var(--th-advant) 50%, transparent);
}

.ad-inherit-head {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 16px 9px 18px;
  background: color-mix(in oklch, var(--th-advant) 4%, var(--th-paper-2));
  border-bottom: 1px dashed color-mix(in oklch, var(--th-advant) 25%, transparent);
}
.ad-inherit-head .lbl {
  font-family: var(--th-f-mono);
  font-size: 10px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--th-advant-deep);
  font-weight: 600;
}
.ad-inherit-head .count {
  font-family: var(--th-f-mono);
  font-size: 10.5px;
  color: var(--th-ink-3);
  margin-left: 2px;
}
.ad-inherit-head .toggle {
  margin-left: auto;
  font-family: var(--th-f-sans);
  font-size: 11.5px;
  color: var(--th-advant-deep);
  display: inline-flex;
  align-items: center;
  gap: 4px;
  text-decoration: none;
  cursor: pointer;
}
.ad-inherit-head .toggle:hover { text-decoration: underline; }
.ad-inherit-head .toggle .chev {
  display: inline-flex;
  transform: rotate(180deg);
  transition: transform 120ms ease;
}

.ad-inherit-rows {
  display: grid;
  grid-template-columns: 1fr;
}

.ad-inherit-row {
  display: grid;
  grid-template-columns: 200px 1fr 140px 92px;
  align-items: center;
  gap: 12px;
  padding: 9px 16px 9px 18px;
  border-top: 1px solid var(--th-line-soft);
  min-height: 38px;
}
.ad-inherit-row:first-child { border-top: 0; }

.ad-inherit-row .lbl {
  font-family: var(--th-f-mono);
  font-size: 10px;
  letter-spacing: 0.11em;
  text-transform: uppercase;
  color: var(--th-ink-3);
  font-weight: 500;
}

.ad-inherit-row .val {
  font-family: var(--th-f-mono);
  font-size: 12px;
  color: var(--th-ink);
  font-variant-numeric: tabular-nums;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ad-inherit-row .val.is-serif {
  font-family: var(--th-f-sans);
  font-size: 12.5px;
  color: var(--th-ink);
}
.ad-inherit-row .val.is-muted {
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 12.5px;
  color: var(--th-ink-3);
  text-transform: none;
  letter-spacing: 0;
}
.ad-inherit-row .val .dim {
  color: var(--th-ink-3);
}

/* Source / inheritance chip */
.ad-inherit-row .src {
  font-family: var(--th-f-sans);
  font-size: 10.5px;
  letter-spacing: 0;
  text-transform: none;
  color: var(--th-ink-3);
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line);
  padding: 1px 7px;
  border-radius: var(--th-radius-pill);
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-weight: 500;
  justify-self: start;
}
.ad-inherit-row .src .dot {
  width: 5px; height: 5px;
  border-radius: 50%;
  background: var(--th-ink-4);
}
.ad-inherit-row .src.is-vault {
  color: oklch(38% 0.10 280);
  background: color-mix(in oklch, oklch(58% 0.18 280) 8%, var(--th-paper-sunk));
  border-color: color-mix(in oklch, oklch(58% 0.18 280) 30%, transparent);
}
.ad-inherit-row .src.is-vault .dot { background: oklch(55% 0.18 280); }
.ad-inherit-row .src.is-override {
  color: var(--th-marigold-deep);
  background: var(--th-marigold-soft);
  border-color: color-mix(in oklch, var(--th-marigold-deep) 30%, transparent);
}
.ad-inherit-row .src.is-override .dot { background: var(--th-marigold-deep); }

/* Action column - Override link / em-dash for non-overridable */
.ad-inherit-row .action {
  justify-self: end;
  font-family: var(--th-f-sans);
  font-size: 11px;
  color: var(--th-advant-deep);
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-weight: 500;
  white-space: nowrap;
}
.ad-inherit-row .action:hover { text-decoration: underline; }
.ad-inherit-row .action.is-disabled {
  color: var(--th-ink-4);
  cursor: default;
  pointer-events: none;
}
.ad-inherit-row .action.is-dash {
  color: var(--th-ink-4);
  font-family: var(--th-f-mono);
  font-size: 13px;
  cursor: default;
  pointer-events: none;
}

/* "Managed in Settings" row - italic-serif hint replaces the value */
.ad-inherit-row.is-secret .val {
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 12.5px;
  color: var(--th-ink-3);
}
.ad-inherit-row.is-secret .val .lock-glyph {
  display: inline-flex;
  align-items: center;
  color: var(--th-ink-4);
  margin-right: 5px;
  vertical-align: -1px;
}
.ad-inherit-row.is-secret .val a {
  color: var(--th-advant-deep);
  text-decoration: none;
  font-style: normal;
  font-family: var(--th-f-sans);
  font-size: 12px;
  font-weight: 500;
  margin-left: 4px;
}
.ad-inherit-row.is-secret .val a:hover { text-decoration: underline; }

/* Override-engaged row - value is editable, copper accent */
.ad-inherit-row.is-override-on {
  background: color-mix(in oklch, var(--th-marigold-soft) 60%, var(--th-paper-2));
}
.ad-inherit-row.is-override-on .val input {
  font-family: var(--th-f-mono);
  font-size: 12px;
  padding: 3px 7px;
  border: 1px solid color-mix(in oklch, var(--th-marigold-deep) 35%, var(--th-line));
  background: var(--th-paper-sunk);
  border-radius: var(--th-radius-3);
  color: var(--th-ink);
  width: 100%;
  font-variant-numeric: tabular-nums;
}

/* Inherited-not-overridable rows surface a small italic-serif hint
   in place of the action affordance. */
.ad-inherit-row .non-overridable-hint {
  justify-self: end;
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 11.5px;
  color: var(--th-ink-3);
  white-space: nowrap;
}

/* Foot link - "Configure processor credentials in Settings →" */
.ad-inherit-foot {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 9px 16px 10px 18px;
  border-top: 1px solid var(--th-line-soft);
  background: color-mix(in oklch, var(--th-advant) 3%, var(--th-paper-2));
}
.ad-inherit-foot a {
  font-family: var(--th-f-sans);
  font-size: 11.5px;
  color: var(--th-advant-deep);
  text-decoration: none;
  font-weight: 500;
  display: inline-flex;
  align-items: center;
  gap: 5px;
}
.ad-inherit-foot a:hover { text-decoration: underline; }
.ad-inherit-foot .lead {
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 11.5px;
  color: var(--th-ink-3);
}


/* ==================================================================
   §B - Fees · date-range column states
   ------------------------------------------------------------------
   Each conditional row now gets:
     Drag · Priority · Amount · Date range · AppliesIfRule · Trash
   Default row excludes date range entirely.
   ================================================================== */
.ad-fees-list .ad-fee-row {
  /* Override v5 grid to add the date-range column */
  grid-template-columns: 22px 26px 144px 188px 1fr 28px !important;
}
.ad-fees-list .ad-fee-row.is-default {
  grid-template-columns: 22px 26px 144px 188px 1fr 28px !important;
}

.ad-fees-list .daterange-cell {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-family: var(--th-f-mono);
  font-size: 11px;
  color: var(--th-ink);
  min-height: 22px;
}

/* No range - empty affordance */
.ad-fees-list .daterange-cell.is-empty {
  color: var(--th-ink-4);
  cursor: pointer;
}
.ad-fees-list .daterange-cell.is-empty .add {
  font-family: var(--th-f-mono);
  font-size: 13px;
  color: var(--th-ink-4);
  border-bottom: 1px dotted var(--th-ink-4);
  padding-bottom: 1px;
}
.ad-fees-list .daterange-cell.is-empty:hover .add {
  color: var(--th-advant-deep);
  border-bottom-color: var(--th-advant-deep);
}
.ad-fees-list .daterange-cell.is-empty .lbl {
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 11px;
  color: var(--th-ink-4);
  margin-left: 2px;
}

/* Active range - two .ax-datechip with arrow */
.ad-fees-list .daterange-cell .arrow {
  color: var(--th-ink-4);
  font-size: 10px;
  font-family: var(--th-f-mono);
}

/* TZ caption - small mono lozenge "CT · resolved" */
.ad-fees-list .daterange-cell .tz {
  font-family: var(--th-f-mono);
  font-size: 9.5px;
  color: var(--th-ink-4);
  letter-spacing: 0.06em;
  margin-left: 4px;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line-soft);
  padding: 1px 5px;
  border-radius: var(--th-radius-3);
}

/* Drop-indicator for drag-reorder: a thick advant rule above the drop-target row (Task 5c.2 -
   ported from proto/prototype.css's `.ad-fee-row.is-drop-target` rule, retokenized to --th-*;
   the canon file scopes the SAME rule to `.ad-term.is-rich.is-drop-target` too, but TermRow's
   own port uses an inline outline instead - that divergence predates this task and is out of
   scope here; this rule only applies where FeeRow actually emits the `is-drop-target` class). */
.ad-fee-row.is-drop-target {
  position: relative;
}
.ad-fee-row.is-drop-target::before {
  content: "";
  position: absolute;
  left: 0; right: 0; top: -2px;
  height: 3px;
  background: var(--th-advant);
  border-radius: 2px;
  z-index: 5;
  pointer-events: none;
  box-shadow: 0 0 0 1px color-mix(in oklch, var(--th-advant) 35%, transparent);
}
.ad-fee-row.is-drop-target::after {
  content: "";
  position: absolute;
  left: -3px; top: -5px;
  width: 7px; height: 7px;
  border-radius: 50%;
  background: var(--th-advant);
  z-index: 6;
  pointer-events: none;
}

/* Inactive - dimmed chips + inline hint */
.ad-fee-row.is-inactive {
  background: color-mix(in oklch, var(--th-paper-2) 70%, var(--th-paper));
}
.ad-fee-row.is-inactive .amount-cell,
.ad-fee-row.is-inactive .applies,
.ad-fee-row.is-inactive .daterange-cell,
.ad-fee-row.is-inactive .priority {
  opacity: 0.62;
}
.ad-fee-row.is-inactive .ax-moneychip,
.ad-fee-row.is-inactive .ad-rule-chip,
.ad-fee-row.is-inactive .ax-datechip {
  color: var(--th-ink-3);
}
/* Fee-row internal layout fix - inactive date ranges stack the date row
   and shipped .hint text inside the daterange column. */
.ad-fees-list .daterange-cell.is-inactive {
  flex-direction: column;
  align-items: flex-start;
  gap: 2px;
}
.ad-fees-list .daterange-cell.is-inactive .row {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.ad-fees-list .daterange-cell.is-inactive .hint {
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 10.5px;
  color: var(--th-marigold-deep);
  opacity: 1;
  white-space: nowrap;
}

/* Local datechip styling for fee rows (smaller than v4 default) */
.ad-fees-list .ax-datechip {
  font-family: var(--th-f-mono);
  font-size: 11px;
  padding: 1px 4px;
  border-radius: var(--th-radius-3);
}

/* Default-row dash in the date column */
.ad-fees-list .ad-fee-row.is-default .daterange-cell {
  color: var(--th-ink-4);
  font-family: var(--th-f-mono);
  font-size: 12px;
}
.ad-fees-list .ad-fee-row.is-default .daterange-cell .lock {
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 11px;
  color: var(--th-ink-4);
  margin-left: 4px;
}

/* ==================================================================
   §C - Default-row "Required" hint
   ------------------------------------------------------------------ */
.ad-default-required {
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 11.5px;
  color: var(--th-marigold-deep);
  margin-left: 6px;
  font-weight: 500;
}
.ad-default-required .em {
  color: var(--th-marigold-deep);
  font-weight: 600;
}

.ad-fees-list .ad-fee-row.is-default .applies {
  display: inline-flex;
  align-items: baseline;
  gap: 0;
  flex-wrap: wrap;
  row-gap: 1px;
}


/* ==================================================================
   §D - Change-provider popover (multi-processor picker)
   ------------------------------------------------------------------
   Small inline popover anchored on the "Change provider" link.
   Lists tenant processors with a select-and-bind affordance.
   Sibling to .cc-confirm-popover but structurally a picker, not
   a decision.
   ================================================================== */
.cc-provider-popover {
  position: absolute;
  /* Must render above .ax-popover-backdrop (z-index 69, §B2) - this is a
     Popover surface, so a lower z-index leaves the invisible backdrop
     intercepting every option click. Same fix already applied to
     .ax-date-popover / .ax-kebab-menu / .cc-confirm-popover (all z-index 70). */
  z-index: 70;
  width: 320px;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line-2);
  border-radius: var(--th-radius-5);
  box-shadow:
    0 1px 2px color-mix(in oklch, var(--th-ink) 6%, transparent),
    0 12px 28px color-mix(in oklch, var(--th-ink) 12%, transparent);
  overflow: hidden;
}
.cc-provider-popover .head {
  padding: 10px 14px 8px;
  border-bottom: 1px solid var(--th-line);
  background: var(--th-paper-2);
}
.cc-provider-popover .head .eyebrow {
  font-family: var(--th-f-mono);
  font-size: 9.5px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--th-ink-3);
  margin-bottom: 2px;
}
.cc-provider-popover .head .title {
  font-family: var(--th-f-serif);
  font-size: 13.5px;
  font-weight: 500;
  color: var(--th-ink);
  letter-spacing: -0.005em;
}
.cc-provider-popover .opts {
  display: grid;
  grid-template-columns: 1fr;
}
.cc-provider-popover .opt {
  display: grid;
  grid-template-columns: 28px 1fr auto;
  align-items: center;
  gap: 10px;
  padding: 10px 14px;
  border-bottom: 1px solid var(--th-line-soft);
  cursor: pointer;
  transition: background 80ms ease;
}
.cc-provider-popover .opt:last-child { border-bottom: 0; }
.cc-provider-popover .opt:hover { background: var(--th-paper-2); }
.cc-provider-popover .opt .crest {
  width: 26px; height: 26px;
  border-radius: var(--th-radius-3);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--th-paper);
  font-family: var(--th-f-serif);
  font-style: italic;
  font-weight: 600;
  font-size: 12px;
}
.cc-provider-popover .opt .crest.is-stripe {
  background: linear-gradient(140deg, oklch(58% 0.18 280), oklch(38% 0.14 270));
}
.cc-provider-popover .opt .crest.is-touchnet {
  background: linear-gradient(140deg, oklch(54% 0.16 200), oklch(36% 0.13 215));
}
.cc-provider-popover .opt .body { min-width: 0; }
.cc-provider-popover .opt .name {
  font-family: var(--th-f-sans);
  font-size: 13px;
  color: var(--th-ink);
  font-weight: 600;
  letter-spacing: -0.005em;
  display: flex;
  align-items: center;
  gap: 8px;
}
.cc-provider-popover .opt .meta {
  font-family: var(--th-f-mono);
  font-size: 10.5px;
  color: var(--th-ink-3);
  font-variant-numeric: tabular-nums;
  margin-top: 1px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.cc-provider-popover .opt .bound {
  font-family: var(--th-f-mono);
  font-size: 9.5px;
  letter-spacing: 0.10em;
  text-transform: uppercase;
  color: var(--th-advant-deep);
  background: var(--th-advant-soft);
  border: 1px solid color-mix(in oklch, var(--th-advant) 40%, transparent);
  padding: 1px 6px;
  border-radius: var(--th-radius-pill);
}
.cc-provider-popover .opt .bind {
  font-family: var(--th-f-sans);
  font-size: 11px;
  color: var(--th-advant-deep);
  font-weight: 500;
  display: inline-flex;
  align-items: center;
  gap: 3px;
}
.cc-provider-popover .opt:hover .bind { text-decoration: underline; }
.cc-provider-popover .foot {
  padding: 8px 14px 10px;
  border-top: 1px solid var(--th-line);
  background: var(--th-paper-2);
}
.cc-provider-popover .foot a {
  font-family: var(--th-f-sans);
  font-size: 11px;
  color: var(--th-advant-deep);
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-weight: 500;
}
.cc-provider-popover .foot a:hover { text-decoration: underline; }

/* Caret */
.cc-provider-popover.points-up::before {
  content: "";
  position: absolute;
  top: -7px;
  right: 28px;
  width: 12px; height: 12px;
  background: var(--th-paper-2);
  border-left: 1px solid var(--th-line-2);
  border-top: 1px solid var(--th-line-2);
  transform: rotate(45deg);
}


/* ==================================================================
   §E - Setup gate · no tenant processors configured
   ------------------------------------------------------------------ */
.ad-setup-gate {
  display: grid;
  grid-template-columns: 56px 1fr auto;
  align-items: center;
  gap: 18px;
  padding: 26px 26px;
  background: color-mix(in oklch, var(--th-marigold-soft) 60%, var(--th-paper-sunk));
  border: 1px solid color-mix(in oklch, var(--th-marigold-deep) 22%, transparent);
  border-radius: var(--th-radius-5);
  margin: 18px 0 4px;
  position: relative;
}
.ad-setup-gate .glyph {
  width: 44px; height: 44px;
  border-radius: var(--th-radius-5);
  background: var(--th-paper-sunk);
  border: 1px solid color-mix(in oklch, var(--th-marigold-deep) 35%, transparent);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--th-marigold-deep);
}
.ad-setup-gate .body { min-width: 0; }
.ad-setup-gate .eyebrow {
  font-family: var(--th-f-mono);
  font-size: 9.5px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--th-marigold-deep);
  font-weight: 600;
  margin-bottom: 4px;
}
.ad-setup-gate .title {
  font-family: var(--th-f-serif);
  font-size: 17px;
  font-weight: 500;
  color: var(--th-ink);
  letter-spacing: -0.01em;
  margin-bottom: 5px;
}
.ad-setup-gate .title em {
  font-style: italic;
  color: var(--th-marigold-deep);
  font-weight: 500;
}
.ad-setup-gate .desc {
  font-size: 12.5px;
  color: var(--th-ink-2);
  line-height: 1.5;
  max-width: 56ch;
}
.ad-setup-gate .cta {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 8px 14px;
  font-family: var(--th-f-sans);
  font-size: 12.5px;
  font-weight: 600;
  background: var(--th-advant);
  color: var(--th-advant-fg);
  border: 1px solid var(--th-advant);
  border-radius: var(--th-radius-3);
  cursor: pointer;
  white-space: nowrap;
  text-decoration: none;
}
.ad-setup-gate .cta:hover {
  background: var(--th-advant-deep);
  border-color: var(--th-advant-deep);
}

/* Wizard-stage compact frame for the gate */
.ad-pay-setup.is-gated .ad-pay-setup-form {
  padding: 0;
}


/* ==================================================================
   §F - Dark-theme polish
   ================================================================== */
[data-theme="dark"] .ad-inherit {
  background: var(--th-paper-3);
  border-top-color: color-mix(in oklch, oklch(70% 0.13 245) 35%, transparent);
}
[data-theme="dark"] .ad-inherit::before {
  background: color-mix(in oklch, oklch(70% 0.13 245) 60%, transparent);
}
[data-theme="dark"] .ad-inherit-head {
  background: color-mix(in oklch, oklch(70% 0.13 245) 8%, var(--th-paper-3));
  border-bottom-color: color-mix(in oklch, oklch(70% 0.13 245) 35%, transparent);
}
[data-theme="dark"] .ad-inherit-head .lbl {
  color: oklch(82% 0.10 245);
}
[data-theme="dark"] .ad-inherit-head .toggle {
  color: oklch(82% 0.10 245);
}
[data-theme="dark"] .ad-inherit-row {
  border-top-color: var(--th-line);
}
[data-theme="dark"] .ad-inherit-row .src {
  background: var(--th-paper-2);
  border-color: var(--th-line-2);
}
[data-theme="dark"] .ad-inherit-row .src.is-vault {
  color: oklch(82% 0.10 280);
  background: oklch(26% 0.06 280);
  border-color: color-mix(in oklch, oklch(70% 0.13 280) 40%, transparent);
}
[data-theme="dark"] .ad-inherit-row .src.is-override {
  color: oklch(82% 0.13 55);
  background: oklch(26% 0.05 55);
  border-color: color-mix(in oklch, oklch(70% 0.14 55) 45%, transparent);
}
[data-theme="dark"] .ad-inherit-row .action {
  color: oklch(82% 0.10 245);
}
[data-theme="dark"] .ad-inherit-row.is-secret .val a {
  color: oklch(82% 0.10 245);
}
[data-theme="dark"] .ad-inherit-row.is-override-on {
  background: color-mix(in oklch, oklch(26% 0.05 55) 80%, var(--th-paper-3));
}
[data-theme="dark"] .ad-inherit-row.is-override-on .val input {
  background: var(--th-paper-2);
  border-color: oklch(76% 0.12 50);
  color: var(--th-ink);
}
[data-theme="dark"] .ad-inherit-foot {
  background: color-mix(in oklch, oklch(70% 0.13 245) 6%, var(--th-paper-3));
  border-top-color: var(--th-line);
}
[data-theme="dark"] .ad-inherit-foot a {
  color: oklch(82% 0.10 245);
}

[data-theme="dark"] .ad-fee-row.is-inactive {
  background: color-mix(in oklch, var(--th-paper-2) 70%, var(--th-paper));
}
[data-theme="dark"] .ad-fees-list .ax-datechip {
  color: var(--th-ink-2);
}
[data-theme="dark"] .ad-fees-list .daterange-cell .tz {
  background: var(--th-paper-3);
  border-color: var(--th-line);
  color: var(--th-ink-3);
}
[data-theme="dark"] .ad-default-required {
  color: oklch(82% 0.13 55);
}

[data-theme="dark"] .cc-provider-popover {
  background: var(--th-paper-sunk);
  border-color: var(--th-line-2);
  box-shadow:
    0 1px 2px color-mix(in oklch, black 30%, transparent),
    0 18px 32px color-mix(in oklch, black 45%, transparent);
}
[data-theme="dark"] .cc-provider-popover .head,
[data-theme="dark"] .cc-provider-popover .foot {
  background: var(--th-paper-2);
}
[data-theme="dark"] .cc-provider-popover .opt:hover {
  background: var(--th-paper-2);
}
[data-theme="dark"] .cc-provider-popover .opt .bound {
  background: oklch(24% 0.06 245);
  color: oklch(82% 0.10 245);
  border-color: color-mix(in oklch, oklch(70% 0.13 245) 45%, transparent);
}
[data-theme="dark"] .cc-provider-popover.points-up::before {
  background: var(--th-paper-2);
  border-color: var(--th-line-2);
}

[data-theme="dark"] .ad-setup-gate {
  background: color-mix(in oklch, oklch(26% 0.05 55) 60%, var(--th-paper-sunk));
  border-color: color-mix(in oklch, oklch(76% 0.12 50) 35%, transparent);
}
[data-theme="dark"] .ad-setup-gate .glyph {
  background: var(--th-paper-2);
  color: oklch(82% 0.13 55);
  border-color: color-mix(in oklch, oklch(76% 0.12 50) 45%, transparent);
}
[data-theme="dark"] .ad-setup-gate .eyebrow {
  color: oklch(82% 0.13 55);
}
[data-theme="dark"] .ad-setup-gate .title em {
  color: oklch(82% 0.13 55);
}


/* ==================================================================
   appdef-v7.css - Programs of study: associating Major lists with Terms
   ------------------------------------------------------------------
   Per ADR-0025: a Term unlocks a *set* of Major lists (permission set,
   order non-significant). Lists are AppDef-scoped authored content
   managed in the Majors workspace; here we only bind which lists a
   term unlocks. Three surfaces:
     §A  .ax-programs       - read-only summary on the term row
     §B  .ad-mlist-pick     - the selector inside the term edit rail
     §C  .ad-mlists-panel   - the right-column catalog panel
   ================================================================== */

/* Shared atom - a single Major-list chip (gate glyph + short name).
   .is-gated = the list carries an eligibility rule (filtered for some
   applicants). .is-open = always available. */
.mlist-chip {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 2px 8px 2px 6px;
  border-radius: var(--th-radius-pill);
  background: var(--th-paper-2);
  border: 1px solid var(--th-line);
  font-family: var(--th-f-sans);
  font-size: 11px;
  font-weight: 500;
  color: var(--th-ink-2);
  white-space: nowrap;
  line-height: 1.5;
}
.mlist-chip .dot {
  width: 6px; height: 6px; border-radius: 50%;
  background: oklch(58% 0.11 155);
  flex: none;
}
.mlist-chip .gate {
  display: inline-grid; place-items: center;
  width: 11px; height: 11px; flex: none;
  color: var(--th-marigold-deep);
}
.mlist-chip .gate svg { width: 11px; height: 11px; }
.mlist-chip.is-gated {
  border-color: color-mix(in oklch, var(--th-marigold-deep) 30%, var(--th-line));
  background: color-mix(in oklch, var(--th-marigold-soft) 45%, var(--th-paper-2));
  color: var(--th-marigold-deep);
}

/* ==================================================================
   §A - term-row programs summary (lives in .ax-meta)
   ================================================================== */
.ad-term.is-rich .ax-programs {
  display: inline-flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px;
  min-width: 0;
}
.ad-term.is-rich .ax-programs .lbl {
  font-family: var(--th-f-mono);
  font-size: 9.5px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--th-ink-4);
  margin-right: 1px;
}
.ad-term.is-rich .ax-programs .mlist-chip { font-size: 10.5px; padding: 1px 7px 1px 6px; }
.ad-term.is-rich .ax-programs .none {
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 11px;
  color: var(--th-ink-4);
}
.ad-term.is-past .ax-programs .mlist-chip { opacity: 0.72; }

/* ==================================================================
   §B - rail selector: pick which lists this term unlocks
   ================================================================== */
.ad-mlist-pick {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.ad-mlist-row {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 10px;
  padding: 9px 11px;
  background: var(--th-paper);
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-3);
  cursor: pointer;
  transition: border-color 90ms ease, background 90ms ease;
}
.ad-mlist-row:hover { border-color: var(--th-line-2); background: var(--th-paper-sunk); }
.ad-mlist-row.is-on {
  border-color: color-mix(in oklch, var(--th-advant) 38%, var(--th-line));
  background: color-mix(in oklch, var(--th-advant-soft) 40%, var(--th-paper));
}
.ad-mlist-row .body { min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.ad-mlist-row .nm {
  font-family: var(--th-f-sans);
  font-size: 12.5px;
  font-weight: 600;
  color: var(--th-ink);
  display: inline-flex; align-items: center; gap: 7px;
}
.ad-mlist-row .nm .grad { color: var(--th-ink-3); display: inline-grid; place-items: center; }
.ad-mlist-row .nm .grad svg { width: 13px; height: 13px; }
.ad-mlist-row .sub {
  display: inline-flex; align-items: center; gap: 7px;
  font-family: var(--th-f-mono);
  font-size: 10.5px;
  color: var(--th-ink-3);
}
.ad-mlist-row .sub .ct { font-variant-numeric: tabular-nums; }
.ad-mlist-row .sub .sep { width: 1px; height: 9px; background: var(--th-line-2); }
.ad-mlist-row .sub .elig {
  display: inline-flex; align-items: center; gap: 4px;
  color: var(--th-marigold-deep);
}
.ad-mlist-row .sub .elig svg { width: 10px; height: 10px; }
.ad-mlist-row .sub .elig.is-open { color: oklch(46% 0.09 155); }
.ad-mlist-row .check {
  width: 18px; height: 18px; flex: none;
  border-radius: 5px;
  border: 1.5px solid var(--th-line-2);
  display: inline-grid; place-items: center;
  color: transparent;
  background: var(--th-paper);
  transition: all 90ms ease;
}
.ad-mlist-row.is-on .check {
  border-color: var(--th-advant);
  background: var(--th-advant);
  color: #fff;
}
.ad-mlist-row.is-on .check svg { width: 11px; height: 11px; }

.ad-mlist-empty {
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 12px;
  color: var(--th-ink-3);
  padding: 2px 2px 0;
}
.ad-mlist-foot {
  display: flex; align-items: center; gap: 6px;
  margin-top: 4px;
  font-family: var(--th-f-sans);
  font-size: 11.5px;
  color: var(--th-ink-3);
}
.ad-mlist-foot a { color: var(--th-advant-deep); text-decoration: none; font-weight: 500; }
.ad-mlist-foot a:hover { text-decoration: underline; }

/* ==================================================================
   §C - right-column catalog panel (Major lists on this definition)
   ================================================================== */
.ad-mlists-panel .ad-mlists {
  display: flex;
  flex-direction: column;
}
.ad-mlist-cat {
  display: grid;
  grid-template-columns: 1fr auto;
  grid-template-rows: auto auto;
  gap: 3px 12px;
  align-items: center;
  padding: 11px 18px;
  border-bottom: 1px solid var(--th-line);
}
.ad-mlist-cat:last-child { border-bottom: 0; }
.ad-mlist-cat .nm {
  grid-column: 1; grid-row: 1;
  font-family: var(--th-f-sans);
  font-size: 12.5px;
  font-weight: 600;
  color: var(--th-ink);
}
.ad-mlist-cat .used {
  grid-column: 2; grid-row: 1;
  justify-self: end;
  font-family: var(--th-f-mono);
  font-size: 10.5px;
  color: var(--th-ink-3);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.ad-mlist-cat .used.is-zero { color: var(--th-risk); }
.ad-mlist-cat .meta {
  grid-column: 1 / -1; grid-row: 2;
  display: inline-flex; align-items: center; gap: 8px;
  font-family: var(--th-f-mono);
  font-size: 10.5px;
  color: var(--th-ink-3);
}
.ad-mlist-cat .meta .sep { width: 1px; height: 9px; background: var(--th-line-2); }
.ad-mlist-cat .meta .elig { display: inline-flex; align-items: center; gap: 4px; color: var(--th-marigold-deep); }
.ad-mlist-cat .meta .elig svg { width: 10px; height: 10px; }
.ad-mlist-cat .meta .elig.is-open { color: oklch(46% 0.09 155); }

/* ==================================================================
   Dark theme
   ================================================================== */
[data-theme="dark"] .mlist-chip { background: var(--th-paper-2); border-color: var(--th-line); }
[data-theme="dark"] .mlist-chip.is-gated {
  background: oklch(28% 0.05 75);
  border-color: color-mix(in oklch, var(--th-marigold-deep) 45%, transparent);
  color: oklch(82% 0.11 80);
}
[data-theme="dark"] .ad-mlist-row { background: var(--th-paper-sunk); border-color: var(--th-line); }
[data-theme="dark"] .ad-mlist-row:hover { background: var(--th-paper-2); }
[data-theme="dark"] .ad-mlist-row.is-on {
  background: oklch(28% 0.05 245);
  border-color: color-mix(in oklch, var(--th-advant) 45%, transparent);
}
[data-theme="dark"] .ad-mlist-row .check { background: var(--th-paper-2); }

/* ==================================================================
   Lift the term-edit drawer out of the column - full-height floating
   drawer with a backdrop scrim and more room than the old 440px rail.
   ================================================================== */
.ad-rail-scrim {
  position: fixed;
  inset: 0;
  background: oklch(20% 0.02 255 / 0.34);
  backdrop-filter: blur(1.5px);
  z-index: 190;
}
@media (prefers-reduced-motion: no-preference) {
  .ad-rail-scrim { animation: ad-scrim-in 140ms ease; }
}
@keyframes ad-scrim-in { from { opacity: 0; } to { opacity: 1; } }

/* Override the in-column absolute rail → fixed viewport drawer.
   Base state IS the final visible state (no transform / full opacity) so
   it never gets stuck off-screen if rAF pauses or on reduced-motion. */
.ad-page .ad-rail {
  position: fixed;
  top: 0; right: 0; bottom: 0;
  height: 100vh;
  width: clamp(480px, 40vw, 640px);
  z-index: 200;
  box-shadow:
    -24px 0 60px oklch(20% 0.02 255 / 0.22),
    -1px 0 0 var(--th-line-2);
}
@media (prefers-reduced-motion: no-preference) {
  .ad-page .ad-rail { animation: ad-drawer-in 200ms cubic-bezier(0.22, 0.61, 0.36, 1); }
}
@keyframes ad-drawer-in {
  from { transform: translateX(32px); opacity: 0; }
  to   { transform: translateX(0);    opacity: 1; }
}

/* The scrim now does the dimming - drop the in-page fade so the
   background doesn't get double-treated. */
.ad-rail-fade::after { display: none; }

/* Roomier body + a two-column rhythm now that there's width to spare. */
.ad-page .ad-rail .ad-rail-body { padding: 20px 22px; gap: 20px; }
.ad-page .ad-rail .ad-rail-head { padding: 18px 22px 15px; }
.ad-page .ad-rail .ad-rail-foot { padding: 14px 22px; }

@media (max-width: 720px) {
  .ad-page .ad-rail { width: 100vw; }
}

/* Term activity reuses the Cycle rail's lifted-drawer shell. Its interior is a
   deliberately small typed-diff surface: one authored event, then field-grain
   before/after rows per ADR-0037. */
.term-audit-rail .ad-rail-body { background: var(--th-paper-sunk); }
.term-audit-state {
  min-height: 120px;
  border: 1px dashed var(--th-line-2);
  border-radius: var(--th-radius-4);
  color: var(--th-ink-3);
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 24px;
  text-align: center;
  font-family: var(--th-f-serif);
  font-style: italic;
}
.term-audit-state.is-error {
  border-style: solid;
  border-color: color-mix(in oklch, var(--th-risk) 30%, var(--th-line));
  background: var(--th-risk-soft);
  color: var(--th-risk);
}
.term-audit-byline {
  color: var(--th-ink-3);
  font-family: var(--th-f-serif);
  font-size: 11.5px;
  font-style: italic;
}
.term-audit-changes {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.term-audit-change {
  display: grid;
  grid-template-columns: minmax(100px, .42fr) minmax(0, 1fr);
  align-items: center;
  gap: 12px;
  padding: 10px 12px;
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-3);
  background: var(--th-paper);
}
.term-audit-change > .label {
  color: var(--th-ink-2);
  font-family: var(--th-f-sans);
  font-size: 12px;
  font-weight: 600;
}
.term-audit-change .values {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
  align-items: center;
  gap: 8px;
  color: var(--th-ink-3);
  font-family: var(--th-f-mono);
  font-size: 11px;
  font-variant-numeric: tabular-nums;
}
.term-audit-change .values .before,
.term-audit-change .values .after { overflow-wrap: anywhere; }
.term-audit-change .values .after { color: var(--th-ink); font-weight: 600; }
.term-audit-change .values .arrow { color: var(--th-ink-4); }

@media (max-width: 520px) {
  .term-audit-change { grid-template-columns: 1fr; gap: 6px; }
}

/* ------------------------------------------------------------------
   Activity tab - round-7 canon audit feed (proto/activity.jsx,
   components.md §6). Ported from
   design_handoff_application_definitions/proto/prototype.css, which is
   where these two blocks actually live (NOT styles/appdef.css in the
   handoff bundle - same port-gap precedent as the Archive tab's
   .ad-archive-* and the Permissions tab's .ad-perms-*). Retokenized to
   --th-* per ADR-0035.

   .ad-role-menu itself was flagged but deliberately NOT ported by the
   Permissions tab (Task 2.2) - that tab has no invite/role/remove
   affordances, so it had nothing to open the menu for. Task 3.1 is the
   first real consumer: the kind-filter dropdown reuses this exact
   chrome (the Popover atom supplies the click-outside backdrop; this
   supplies the menu surface + item rows).

   Only the day-grouped-feed rules Task 3.1's markup actually renders
   are ported from the Activity block - prototype.css also carries an
   EARLIER round's pill-filter-bar treatment (.ad-activity-filters,
   .ad-activity-filter, .ad-activity-search) that activity.jsx's final
   markup does not use (superseded by the .ad-role-menu dropdown
   pattern); those three rules are deliberately not ported, matching
   the Permissions tab's own precedent for skipping superseded-round
   CSS.
   ------------------------------------------------------------------ */

/* Kind-filter dropdown (shared chrome; also documented at the
   Permissions tab's port-gap comment above). */
.ad-role-menu {
  position: absolute;
  /* Must sit ABOVE the generic <Popover> atom's click-outside backdrop
     (.ax-popover-backdrop, z-index 69) - this menu is a Popover surface, so a
     lower z-index leaves the invisible backdrop intercepting every option
     click (the kind-filter would render but be unselectable). Matches the
     sibling Popover surface .ax-date-popover (z-index 70). */
  z-index: 70;
  width: 280px;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line-2);
  border-radius: var(--th-radius-5);
  box-shadow:
    0 1px 2px color-mix(in oklch, var(--th-ink) 6%, transparent),
    0 12px 28px color-mix(in oklch, var(--th-ink) 12%, transparent);
  overflow: hidden;
  padding: 5px 0;
}
.ad-role-menu .item {
  display: grid;
  grid-template-columns: 18px 1fr;
  gap: 10px;
  padding: 8px 14px;
  cursor: pointer;
  align-items: start;
}
.ad-role-menu .item:hover { background: var(--th-paper-2); }
.ad-role-menu .item .mk {
  margin-top: 3px;
  width: 14px; height: 14px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--th-advant);
}
.ad-role-menu .item .role-name {
  font-size: 12.5px;
  font-weight: 600;
  color: var(--th-ink);
}
.ad-role-menu .item .role-desc {
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 11.5px;
  color: var(--th-ink-3);
  margin-top: 1px;
  line-height: 1.4;
}

.ad-activity {
  display: grid;
  gap: 0;
}

.ad-activity-day {
  font-family: var(--th-f-mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--th-ink-3);
  font-weight: 600;
  padding: 14px 18px 6px;
  background: var(--th-paper-2);
  border-bottom: 1px solid var(--th-line-soft);
}

.ad-activity-row {
  display: grid;
  grid-template-columns: 64px 28px 1fr auto;
  gap: 14px;
  padding: 10px 18px;
  align-items: start;
  border-bottom: 1px solid var(--th-line-soft);
}
.ad-activity-row .time {
  font-family: var(--th-f-mono);
  font-size: 10.5px;
  color: var(--th-ink-3);
  font-variant-numeric: tabular-nums;
  padding-top: 3px;
}
.ad-activity-row .kind-glyph {
  width: 22px; height: 22px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line);
  color: var(--th-ink-3);
  margin-top: 1px;
}
.ad-activity-row.kind-payment .kind-glyph {
  color: oklch(45% 0.13 50);
  background: var(--th-marigold-soft);
  border-color: color-mix(in oklch, var(--th-marigold-deep) 25%, transparent);
}
.ad-activity-row.kind-cycle .kind-glyph {
  color: var(--th-advant-deep);
  background: var(--th-advant-soft);
  border-color: color-mix(in oklch, var(--th-advant) 30%, transparent);
}
.ad-activity-row.kind-permissions .kind-glyph {
  color: oklch(40% 0.13 155);
  background: oklch(94% 0.05 155);
  border-color: oklch(82% 0.07 155);
}
.ad-activity-row.kind-secret .kind-glyph {
  color: oklch(40% 0.13 280);
  background: color-mix(in oklch, oklch(58% 0.18 280) 8%, var(--th-paper-sunk));
  border-color: color-mix(in oklch, oklch(58% 0.18 280) 30%, transparent);
}
.ad-activity-row .body {
  font-size: 13px;
  color: var(--th-ink);
  line-height: 1.5;
  min-width: 0;
}
.ad-activity-row .body .actor {
  font-weight: 600;
}
.ad-activity-row .body .em {
  font-family: var(--th-f-serif);
  font-style: italic;
  color: var(--th-marigold-deep);
}
.ad-activity-row .body code {
  font-family: var(--th-f-mono);
  font-size: 11.5px;
  background: var(--th-paper-2);
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-3);
  padding: 0 5px;
  color: var(--th-ink-2);
}
.ad-activity-row .body .meta {
  font-family: var(--th-f-mono);
  font-size: 10.5px;
  color: var(--th-ink-3);
  margin-top: 3px;
  font-variant-numeric: tabular-nums;
}
.ad-activity-row .actions {
  font-family: var(--th-f-sans);
  font-size: 11px;
  color: var(--th-advant-deep);
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  white-space: nowrap;
  padding-top: 4px;
  cursor: pointer;
}
.ad-activity-row .actions:hover { text-decoration: underline; }

/* Dark-theme companions for the two kind-glyph tints authored as raw oklch
   literals rather than through --th-* tokens (permissions=green, secret=purple
   - neither hue is part of the ADR-0035 locked-accent inventory, so there's no
   living dark-aware token to fall back on the way kind-payment/kind-cycle do
   via --th-marigold-soft/--th-advant-soft). Canon (prototype.css) has no
   [data-theme="dark"] block for these - silent on dark mode entirely - so
   these darken the same light pastel-badge → dark saturated-badge way this
   file already darkens its OTHER raw-oklch badges (e.g. .ad-mlist-row.is-on,
   .ad-perms-tenant-card above), rather than leaving a light pastel badge
   sitting on a dark panel. */
[data-theme="dark"] .ad-activity-row.kind-permissions .kind-glyph {
  color: oklch(78% 0.13 155);
  background: oklch(26% 0.05 155);
  border-color: color-mix(in oklch, oklch(70% 0.13 155) 40%, transparent);
}
[data-theme="dark"] .ad-activity-row.kind-secret .kind-glyph {
  color: oklch(80% 0.13 280);
  background: color-mix(in oklch, oklch(58% 0.18 280) 16%, var(--th-paper-sunk));
  border-color: color-mix(in oklch, oklch(70% 0.18 280) 40%, transparent);
}

/* ------------------------------------------------------------------
   Cycle tab (Task 4c.2) - archived terms panel + term-action confirm
   modal (Archive/Delete). Ported from
   design_handoff_application_definitions/proto/prototype.css, which is
   where these two blocks actually live (NOT styles/appdef*.css in the
   handoff bundle - same port-gap precedent this file already documents
   for the Archive tab's .ad-archive-*, the Permissions tab's
   .ad-perms-*, and the Activity tab's day-grouped-feed rules above).
   Retokenized to --th-* per ADR-0035.

   One deliberate departure from canon: .term-confirm-scrim's z-index is
   210, not canon's literal 200. Canon's TermActionConfirm always renders
   as a sibling of a row with no other overlay open (a row's own local
   confirm state), so 200 never collides there. This destination centralizes
   the confirm modal at the CycleTab level instead (one instance for both
   the kebab's Archive/Delete and the archived panel's Delete), and the
   rail drawer (.ad-page .ad-rail) already occupies z-index 200 - bumping
   the confirm scrim/modal to 210 keeps it correctly on top in the (rare,
   currently UI-prevented-by-the-rail-scrim-being-inert) case both are
   requested in the same render.
   ------------------------------------------------------------------ */
.ad-archived-panel {
  background: var(--th-paper-2);
  border-color: var(--th-line);
}
.ad-archived-head {
  user-select: none;
}
.ad-archived-head:hover {
  background: color-mix(in oklch, var(--th-paper-sunk) 50%, var(--th-paper-2));
}
.ad-archived-glyph {
  width: 32px; height: 32px;
  border-radius: 50%;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--th-ink-3);
  flex: none;
}

.ad-archived-list {
  list-style: none;
  margin: 0;
  padding: 0;
}
.ad-archived-row {
  display: grid;
  grid-template-columns:
    minmax(180px, 1.4fr)    /* name */
    minmax(120px, 0.9fr)    /* key */
    minmax(160px, 1.1fr)    /* window */
    minmax(120px, 0.8fr)    /* stamp */
    auto;                   /* actions */
  align-items: center;
  gap: 14px;
  padding: 10px 18px;
  border-top: 1px solid var(--th-line-soft);
  background: var(--th-paper-2);
  font-size: 12.5px;
}
.ad-archived-row:hover {
  background: color-mix(in oklch, var(--th-paper-sunk) 30%, var(--th-paper-2));
}
.ad-archived-row-name {
  font-family: var(--th-f-sans);
  font-size: 13px;
  font-weight: 500;
  color: var(--th-ink-2);
  letter-spacing: -0.005em;
}
.ad-archived-row-key {
  font-family: var(--th-f-mono);
  font-size: 10.5px;
  color: var(--th-ink-4);
  letter-spacing: 0.02em;
}
.ad-archived-row-window {
  font-family: var(--th-f-mono);
  font-size: 11px;
  color: var(--th-ink-3);
  font-variant-numeric: tabular-nums;
}
.ad-archived-row-stamp {
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 11.5px;
  color: var(--th-ink-3);
}
.ad-archived-row-actions {
  display: inline-flex;
  gap: 6px;
  justify-self: end;
}
.ad-archived-action {
  font-family: var(--th-f-sans);
  font-size: 11.5px;
  font-weight: 500;
  color: var(--th-ink-2);
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-3);
  padding: 4px 10px;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  white-space: nowrap;
}
.ad-archived-action:hover {
  border-color: var(--th-ink-4);
  color: var(--th-ink);
}
.ad-archived-action.is-danger {
  color: var(--th-ink-3);
}
.ad-archived-action.is-danger:hover {
  color: var(--th-risk);
  border-color: color-mix(in oklch, var(--th-risk) 30%, transparent);
  background: var(--th-risk-soft);
}

[data-theme="dark"] .ad-archived-panel {
  background: var(--th-paper-3);
  border-color: var(--th-line);
}
[data-theme="dark"] .ad-archived-row {
  background: var(--th-paper-3);
  border-top-color: var(--th-line-soft);
}
[data-theme="dark"] .ad-archived-row:hover {
  background: var(--th-paper-2);
}
[data-theme="dark"] .ad-archived-action.is-danger:hover {
  background: oklch(22% 0.05 25);
  color: oklch(82% 0.15 25);
  border-color: color-mix(in oklch, oklch(70% 0.15 25) 40%, transparent);
}

/* ==================================================================
   Term-action confirm modal (Archive / Delete)
   Sibling of cc-impact-modal but small + single-decision.
   ================================================================== */
.proto-modal-scrim {
  position: fixed;
  inset: 0;
  background: color-mix(in oklch, var(--th-ink) 38%, transparent);
  z-index: 210;
  display: grid;
  place-items: center;
}
@media (prefers-reduced-motion: no-preference) {
  .proto-modal-scrim { animation: proto-scrim-in 140ms ease; }
}
@keyframes proto-scrim-in {
  from { opacity: 0; }
  to   { opacity: 1; }
}

.proto-confirm-modal {
  width: 460px;
  max-width: calc(100vw - 32px);
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line-2);
  border-radius: var(--th-radius-5);
  overflow: hidden;
  box-shadow:
    0 1px 2px color-mix(in oklch, var(--th-ink) 8%, transparent),
    0 24px 60px color-mix(in oklch, var(--th-ink) 20%, transparent);
}
@media (prefers-reduced-motion: no-preference) {
  .proto-confirm-modal { animation: proto-modal-in 180ms cubic-bezier(0.22, 1, 0.36, 1); }
}
@keyframes proto-modal-in {
  from { opacity: 0; transform: translateY(-6px) scale(0.985); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}

.proto-confirm-modal .head {
  display: grid;
  grid-template-columns: 28px 1fr auto;
  align-items: center;
  gap: 10px;
  padding: 14px 18px;
  border-bottom: 1px solid var(--th-line);
}
.proto-confirm-modal.is-caution .head {
  background: color-mix(in oklch, var(--th-marigold-soft) 90%, var(--th-paper-sunk));
  border-bottom-color: color-mix(in oklch, var(--th-marigold-deep) 25%, transparent);
}
.proto-confirm-modal.is-risk .head {
  background: color-mix(in oklch, var(--th-risk-soft) 90%, var(--th-paper-sunk));
  border-bottom-color: color-mix(in oklch, var(--th-risk) 30%, transparent);
}
.proto-confirm-modal .head .glyph {
  width: 26px; height: 26px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--th-paper-sunk);
  border: 1px solid var(--th-line);
}
.proto-confirm-modal.is-caution .head .glyph {
  color: var(--th-marigold-deep);
  border-color: color-mix(in oklch, var(--th-marigold-deep) 35%, transparent);
}
.proto-confirm-modal.is-risk .head .glyph {
  color: var(--th-risk);
  border-color: color-mix(in oklch, var(--th-risk) 35%, transparent);
}
.proto-confirm-modal .head .title {
  font-family: var(--th-f-serif);
  font-size: 15.5px;
  font-weight: 500;
  color: var(--th-ink);
  letter-spacing: -0.005em;
}
.proto-confirm-modal .head .tag {
  font-family: var(--th-f-mono);
  font-size: 9.5px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  font-weight: 600;
}
.proto-confirm-modal.is-caution .head .tag { color: var(--th-marigold-deep); }
.proto-confirm-modal.is-risk    .head .tag { color: var(--th-risk); }

.proto-confirm-modal .body {
  padding: 16px 18px 4px;
  font-size: 13px;
  color: var(--th-ink-2);
  line-height: 1.5;
}
.proto-confirm-modal .body p { margin: 0 0 10px; }
.proto-confirm-modal .body p:last-child { margin-bottom: 0; }
.proto-confirm-modal .body strong { color: var(--th-ink); font-weight: 600; }
.proto-confirm-modal .body .em {
  font-family: var(--th-f-serif);
  font-style: italic;
  color: var(--th-marigold-deep);
}
.proto-confirm-modal .body code {
  font-family: var(--th-f-mono);
  font-size: 11.5px;
  background: var(--th-paper-2);
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-3);
  padding: 0 5px;
  color: var(--th-ink);
}

.proto-confirm-modal .impact {
  margin: 10px 0 6px;
  display: grid;
  gap: 6px;
  background: var(--th-paper-2);
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-3);
  padding: 10px 12px;
}
.proto-confirm-modal .impact-row {
  display: grid;
  grid-template-columns: 20px 1fr auto;
  gap: 10px;
  align-items: center;
  font-size: 12px;
  color: var(--th-ink-2);
}
.proto-confirm-modal .impact-row .g {
  color: var(--th-ink-3);
  display: inline-flex;
}
.proto-confirm-modal .impact-row .count {
  font-family: var(--th-f-mono);
  font-size: 11.5px;
  font-weight: 600;
  color: var(--th-ink);
  font-variant-numeric: tabular-nums;
}

.proto-confirm-modal .foot {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  gap: 8px;
  padding: 12px 18px;
  border-top: 1px solid var(--th-line);
  background: var(--th-paper-2);
}
.proto-confirm-modal .foot .audit-note {
  margin-right: auto;
  font-family: var(--th-f-serif);
  font-style: italic;
  font-size: 11.5px;
  color: var(--th-ink-3);
  display: inline-flex;
  align-items: center;
  gap: 5px;
}
.proto-confirm-modal .foot .btn {
  padding: 6px 14px;
  font-family: var(--th-f-sans);
  font-size: 12.5px;
  font-weight: 500;
  border-radius: var(--th-radius-3);
  border: 1px solid var(--th-line-2);
  background: var(--th-paper-sunk);
  color: var(--th-ink);
  cursor: pointer;
}
.proto-confirm-modal .foot .btn:hover {
  background: var(--th-paper);
  border-color: var(--th-ink-4);
}
.proto-confirm-modal .foot .btn.is-caution {
  background: var(--th-marigold-deep);
  border-color: var(--th-marigold-deep);
  color: var(--th-paper-sunk);
  font-weight: 600;
}
.proto-confirm-modal .foot .btn.is-caution:hover {
  background: oklch(40% 0.13 50);
}
.proto-confirm-modal .foot .btn.is-risk {
  background: var(--th-risk);
  border-color: var(--th-risk);
  color: var(--th-paper-sunk);
  font-weight: 600;
}
.proto-confirm-modal .foot .btn.is-risk:hover {
  background: oklch(48% 0.14 25);
}

[data-theme="dark"] .proto-confirm-modal {
  background: var(--th-paper-sunk);
  border-color: var(--th-line-2);
  box-shadow:
    0 1px 2px color-mix(in oklch, black 40%, transparent),
    0 28px 60px color-mix(in oklch, black 55%, transparent);
}
[data-theme="dark"] .proto-confirm-modal.is-caution .head {
  background: oklch(26% 0.05 55);
  border-bottom-color: color-mix(in oklch, oklch(70% 0.14 55) 40%, transparent);
}
[data-theme="dark"] .proto-confirm-modal.is-caution .head .glyph {
  color: oklch(82% 0.13 55);
  border-color: color-mix(in oklch, oklch(70% 0.14 55) 40%, transparent);
}
[data-theme="dark"] .proto-confirm-modal.is-caution .head .tag {
  color: oklch(82% 0.13 55);
}
[data-theme="dark"] .proto-confirm-modal.is-risk .head {
  background: oklch(24% 0.06 25);
  border-bottom-color: color-mix(in oklch, oklch(70% 0.15 25) 40%, transparent);
}
[data-theme="dark"] .proto-confirm-modal.is-risk .head .glyph,
[data-theme="dark"] .proto-confirm-modal.is-risk .head .tag {
  color: oklch(82% 0.15 25);
  border-color: color-mix(in oklch, oklch(70% 0.15 25) 40%, transparent);
}
[data-theme="dark"] .proto-confirm-modal .foot .btn.is-risk {
  background: oklch(70% 0.15 25);
  border-color: oklch(70% 0.15 25);
  color: var(--th-paper);
}

/* ==================================================================
   Messages from Campus — per-application overrides
   Canon: design_handoff_application_definitions/appdef-messages.css.
   Inherited rows remain neutral, application-authored rows use the
   editorial copper accent, and Hidden is rendered as deliberate absence.
   ================================================================== */

.mfc-head-right {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 5px;
  text-align: right;
}
.mfc-head-summary { font-size: var(--th-size-13); color: var(--th-ink-3); }
.mfc-head-summary b { color: var(--th-ink); font-weight: 600; font-variant-numeric: tabular-nums; }
.mfc-head-dot { margin: 0 8px; color: var(--th-ink-4); }
.mfc-head-link {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: var(--th-size-13);
  color: var(--th-advant-deep);
  text-decoration: none;
}
.mfc-head-link:hover { text-decoration: underline; text-underline-offset: 2px; }

.mfc-viewbar,
.mfc-conflict-banner {
  display: flex;
  align-items: center;
  gap: 9px;
  margin-bottom: 12px;
  padding: 10px 14px;
  border: 1px solid var(--th-line-2);
  border-radius: var(--th-radius-5);
  background: var(--th-paper-sunk);
  color: var(--th-ink-2);
  font-size: var(--th-size-13);
}
.mfc-viewbar > svg,
.mfc-viewbar > i { color: var(--th-ink-3); flex: none; }
.mfc-viewbar-tag {
  margin-left: auto;
  padding: 2px 7px;
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-pill);
  color: var(--th-ink-3);
  font-family: var(--th-f-mono);
  font-size: 10px;
  white-space: nowrap;
}
.mfc-conflict-banner {
  margin: 0;
  border-width: 0 0 1px;
  border-radius: 0;
  border-color: color-mix(in oklch, var(--th-marigold-deep) 25%, transparent);
  background: var(--th-marigold-soft);
  color: var(--th-marigold-deep);
}

.mfc-intro {
  max-width: 96ch;
  padding: 14px 18px 16px;
  border-bottom: 1px solid var(--th-line);
  color: var(--th-ink-2);
  font-size: var(--th-size-14);
  line-height: 1.6;
}
.mfc-intro .em { color: var(--th-marigold-deep); font-family: var(--th-f-serif); font-style: italic; }
.mfc-intro b { color: var(--th-ink); font-weight: 600; }

.mfc-savebar {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 10px 18px;
  border-bottom: 1px solid color-mix(in oklch, var(--th-marigold-deep) 22%, transparent);
  background: var(--th-marigold-soft);
  color: var(--th-marigold-deep);
  font-size: var(--th-size-13);
}
.mfc-savebar-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--th-marigold-deep); flex: none; }
.mfc-savebar-lead { color: var(--th-ink); font-weight: 600; }
.mfc-savebar-sep { color: var(--th-ink-4); }
.mfc-savebar-count { color: var(--th-ink-2); }
.mfc-savebar-note { color: var(--th-marigold-deep); font-family: var(--th-f-serif); font-size: 12px; font-style: italic; }
.mfc-savebar-actions { display: flex; align-items: center; gap: 8px; margin-left: auto; }
.mfc-savebar-actions .mfc-btn { padding-top: 6px; padding-bottom: 6px; }

.mfc-confirm-audience { color: var(--th-ink-2); font-size: var(--th-size-13); line-height: 1.55; }
.mfc-confirm-audience b { color: var(--th-ink); font-weight: 600; }
.mfc-confirm-list {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin: 12px 0 2px;
  padding: 0;
  list-style: none;
}
.mfc-confirm-list li {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 12px;
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-3);
  background: var(--th-paper);
  color: var(--th-ink);
  font-size: 12.5px;
}
.mfc-confirm-list li .nm { font-weight: 600; }
.mfc-confirm-list li .arw { color: var(--th-ink-4); }
.mfc-confirm-list li .to { display: inline-flex; align-items: center; gap: 6px; margin-left: auto; font-size: 11.5px; }
.mfc-confirm-list li .to .c-dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
.mfc-confirm-list li .to.is-custom { color: var(--th-marigold-deep); }
.mfc-confirm-list li .to.is-hidden { color: var(--th-ink-3); }
.mfc-confirm-list li .to.is-inherit { color: oklch(45% 0.10 155); }

.mfc-list { margin: 0; padding: 0; list-style: none; }
.mfc-row { border-bottom: 1px solid var(--th-line-soft); }
.mfc-row:last-child { border-bottom: 0; }
.mfc-row.is-open { background: var(--th-paper); }
.mfc-row.is-conflict { box-shadow: inset 0 0 0 1px color-mix(in oklch, var(--th-marigold) 42%, transparent); }
.mfc-row-main {
  position: relative;
  display: grid;
  grid-template-columns: 3px 26px minmax(0, 1fr) auto auto;
  align-items: center;
  gap: 14px;
  padding: 13px 18px 13px 0;
  cursor: pointer;
}
.mfc-row-main:hover { background: var(--th-paper-2); }
.mfc-row.is-open .mfc-row-main:hover { background: transparent; }
.mfc-row-stripe { align-self: stretch; width: 3px; border-radius: 0 2px 2px 0; background: transparent; }
.mfc-row.is-custom .mfc-row-stripe { background: var(--th-marigold-deep); }
.mfc-row.is-hidden .mfc-row-stripe {
  background: repeating-linear-gradient(180deg, var(--th-ink-4) 0 4px, transparent 4px 8px);
}
.mfc-row-num { color: var(--th-ink-4); font-size: 11px; font-variant-numeric: tabular-nums; text-align: right; }
.mfc-row.is-custom .mfc-row-num { color: var(--th-marigold-deep); }
.mfc-row-body { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.mfc-row-name {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
  color: var(--th-ink);
  font-size: var(--th-size-14);
  font-weight: 600;
}
.mfc-row-caption { color: var(--th-ink-3); font-size: 12px; line-height: 1.45; }
.mfc-differs {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  color: var(--th-marigold-deep);
  font-family: var(--th-f-serif);
  font-size: 11.5px;
  font-style: italic;
  font-weight: 400;
}
.mfc-differs .d { width: 5px; height: 5px; border-radius: 50%; background: currentColor; }
.mfc-row-status { display: flex; align-items: center; justify-content: flex-end; }
.mfc-status-custom { display: inline-flex; align-items: center; gap: 10px; }
.mfc-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 2px 9px;
  border: 1px solid transparent;
  border-radius: var(--th-radius-pill);
  font-size: 11.5px;
  font-weight: 500;
  white-space: nowrap;
}
.mfc-chip .c-dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
.mfc-chip.is-inherit { border-color: var(--th-line); background: var(--th-paper-2); color: var(--th-ink-3); }
.mfc-chip.is-custom {
  border-color: color-mix(in oklch, var(--th-marigold-deep) 28%, transparent);
  background: var(--th-marigold-soft);
  color: var(--th-marigold-deep);
}
.mfc-chip.is-hidden { border: 1px dashed var(--th-line-2); background: var(--th-paper-2); color: var(--th-ink-3); }
.mfc-chip-edited { color: var(--th-ink-4); font-size: 11px; font-variant-numeric: tabular-nums; }
.mfc-row-tail { display: flex; align-items: center; gap: 12px; padding-right: 4px; }
.mfc-row-override {
  padding: 4px 8px;
  border: 0;
  border-radius: var(--th-radius-3);
  background: transparent;
  color: var(--th-advant-deep);
  font-family: var(--th-f-sans);
  font-size: 12px;
  font-weight: 500;
  cursor: pointer;
  opacity: 0;
  transition: opacity 90ms ease;
}
.mfc-row-main:hover .mfc-row-override,
.mfc-row-main:focus-within .mfc-row-override { opacity: 1; }
.mfc-row-override:hover { background: var(--th-advant-soft); }
.mfc-row-toggle {
  display: inline-grid;
  width: 28px;
  height: 28px;
  padding: 0;
  place-items: center;
  border: 0;
  border-radius: var(--th-radius-3);
  background: transparent;
  color: inherit;
  cursor: pointer;
}
.mfc-row-toggle:hover { background: var(--th-paper-2); }
.mfc-row-toggle:focus-visible { outline: 2px solid var(--th-advant); outline-offset: 1px; }
.mfc-row-chev { color: var(--th-ink-4); flex: none; transition: transform 140ms ease; }
.mfc-row-chev.is-open { color: var(--th-ink-2); transform: rotate(180deg); }

.mfc-expand {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 392px;
  border-top: 1px solid var(--th-line);
  background: var(--th-paper-sunk);
  animation: mfc-open 160ms ease;
}
@keyframes mfc-open {
  from { opacity: 0; transform: translateY(-3px); }
  to { opacity: 1; transform: none; }
}
.mfc-expand-editor { min-width: 0; padding: 20px 22px 22px 35px; }
.mfc-expand-preview { padding: 16px 20px 22px; border-left: 1px solid var(--th-line); background: var(--th-paper-2); }
.mfc-preview-lbl {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
  margin-bottom: 12px;
  color: var(--th-ink-3);
  font-family: var(--th-f-mono);
  font-size: 10.5px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}
.mfc-preview-resolved { color: var(--th-ink-4); letter-spacing: 0.06em; }
.mfc-editor { display: flex; flex-direction: column; gap: 14px; }
.mfc-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; }
.mfc-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 7px 13px;
  border: 1px solid var(--th-line-2);
  border-radius: var(--th-radius-3);
  background: var(--th-paper-sunk);
  color: var(--th-ink);
  font-family: var(--th-f-sans);
  font-size: 12.5px;
  font-weight: 500;
  cursor: pointer;
}
.mfc-btn:hover { border-color: var(--th-ink-4); background: var(--th-paper-2); }
.mfc-btn.is-primary { border-color: var(--th-marigold-deep); background: var(--th-marigold-deep); color: var(--th-paper-sunk); }
.mfc-btn.is-primary:hover { border-color: oklch(40% 0.12 50); background: oklch(40% 0.12 50); }
.mfc-btn.is-ghost { padding-right: 8px; padding-left: 8px; border-color: transparent; background: transparent; color: var(--th-ink-2); }
.mfc-btn.is-ghost:hover { border-color: transparent; background: var(--th-paper-2); color: var(--th-ink); }
.mfc-btn:disabled,
.mfc-row-override:disabled,
.mfc-row-toggle:disabled,
.proto-confirm-modal .btn:disabled { cursor: not-allowed; opacity: 0.55; }

.mfc-inherit-banner,
.mfc-hidden-banner {
  display: grid;
  grid-template-columns: 24px 1fr;
  align-items: start;
  gap: 12px;
  padding: 12px 14px;
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-5);
  background: var(--th-paper-2);
}
.mfc-inherit-banner > svg { margin-top: 2px; color: oklch(50% 0.10 155); }
.mfc-hidden-banner > svg,
.mfc-hidden-banner > i { margin-top: 2px; color: var(--th-ink-3); }
.mfc-inherit-lead { color: var(--th-ink); font-size: var(--th-size-14); font-weight: 600; }
.mfc-inherit-sub { margin-top: 2px; color: var(--th-ink-3); font-size: 12px; line-height: 1.5; }
.mfc-editorial { padding-top: 12px; border-top: 1px dashed var(--th-line-2); color: var(--th-ink-3); font-size: 12px; line-height: 1.55; }
.mfc-editorial .link {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  color: var(--th-advant-deep);
  font-weight: 500;
  cursor: pointer;
}
.mfc-editorial .link:hover { text-decoration: underline; text-underline-offset: 2px; }
.mfc-editor-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.mfc-ov-tag {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  color: var(--th-marigold-deep);
  font-family: var(--th-f-serif);
  font-size: var(--th-size-14);
  font-style: italic;
}
.mfc-ov-tag .dot { width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.mfc-edited { color: var(--th-ink-4); font-size: 11px; font-variant-numeric: tabular-nums; }

.mfc-field { display: flex; flex-direction: column; gap: 6px; }
.mfc-field-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.mfc-field-count { color: var(--th-ink-4); font-size: 11px; font-variant-numeric: tabular-nums; letter-spacing: 0.02em; }
.mfc-field-count b { color: var(--th-ink-3); font-weight: 500; }
.mfc-field-lbl { color: var(--th-ink-4); font-family: var(--th-f-mono); font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase; }
.mfc-in {
  box-sizing: border-box;
  width: 100%;
  padding: 8px 11px;
  border: 1px solid var(--th-line-2);
  border-radius: var(--th-radius-3);
  background: var(--th-paper);
  color: var(--th-ink);
  font-family: var(--th-f-sans);
  font-size: 13.5px;
}
.mfc-in:focus { border-color: var(--th-marigold); outline: none; box-shadow: 0 0 0 3px var(--th-marigold-soft); }
.mfc-in[aria-invalid="true"] { border-color: var(--th-risk); }
.mfc-in::placeholder { color: var(--th-ink-4); }
.mfc-in-title { font-family: var(--th-f-serif); font-size: 17px; font-weight: 500; letter-spacing: -0.005em; }
.mfc-in-md { min-height: 180px; overflow: auto; resize: vertical; font-size: 13px; line-height: 1.6; white-space: pre-wrap; }
.mfc-field-errors { display: flex; flex-direction: column; gap: 3px; margin-top: -8px; }
.mfc-field-error { color: var(--th-risk); font-size: 12px; }
.mfc-allowlist { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; color: var(--th-ink-4); font-family: var(--th-f-serif); font-size: 11.5px; font-style: italic; }
.mfc-md-syntax { display: inline-flex; align-items: center; flex-wrap: wrap; gap: 6px; }
.mfc-md-syntax code {
  padding: 1px 6px;
  border: 1px solid var(--th-line);
  border-radius: var(--th-radius-3);
  background: var(--th-paper-2);
  color: var(--th-ink-3);
  font-family: var(--th-f-mono);
  font-size: 10.5px;
  font-style: normal;
}
.mfc-editor-foot { display: flex; align-items: center; gap: 8px; padding-top: 10px; border-top: 1px solid var(--th-line); }
.mfc-compare {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-right: auto;
  padding: 6px 11px;
  border: 1px solid var(--th-line-2);
  border-radius: var(--th-radius-3);
  background: transparent;
  color: var(--th-ink-2);
  font-family: var(--th-f-sans);
  font-size: 12px;
  cursor: pointer;
}
.mfc-compare:hover { border-color: var(--th-ink-4); color: var(--th-ink); }
.mfc-compare.is-on { border-color: color-mix(in oklch, var(--th-advant) 30%, transparent); background: var(--th-advant-soft); color: var(--th-advant-deep); }
.mfc-compare-panel { overflow: hidden; border: 1px solid var(--th-line); border-radius: var(--th-radius-5); background: var(--th-paper-2); }
.mfc-compare-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 8px 13px;
  border-bottom: 1px solid var(--th-line);
  color: var(--th-ink-3);
  font-family: var(--th-f-mono);
  font-size: 10px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}
.mfc-compare-diff,
.mfc-compare-same { font-family: var(--th-f-serif); font-size: 12px; font-style: italic; letter-spacing: 0; text-transform: none; }
.mfc-compare-diff { color: var(--th-marigold-deep); }
.mfc-compare-same { color: var(--th-ink-4); }
.mfc-compare-panel .mfc-prose { padding: 12px 14px; }

.mfc-prose { display: flex; flex-direction: column; gap: 8px; padding: 2px; }
.mfc-prose.is-muted { opacity: 0.85; }
.mfc-prose-title { color: var(--th-ink); font-family: var(--th-f-serif); font-size: 16px; font-weight: 500; letter-spacing: -0.005em; }
.mfc-prose.is-muted .mfc-prose-title { color: var(--th-ink-2); }
.mfc-prose-body { display: flex; flex-direction: column; gap: 8px; }
.mfc-prose-body p { margin: 0; color: var(--th-ink-2); font-size: 13px; line-height: 1.55; }
.mfc-prose-body h1,
.mfc-prose-body h2,
.mfc-prose-body h3,
.mfc-prose-body h4,
.mfc-prose-body h5,
.mfc-prose-body h6 { margin: 4px 0 0; color: var(--th-ink); font-size: 13.5px; font-weight: 700; }
.mfc-prose-body ul,
.mfc-prose-body ol { display: flex; flex-direction: column; gap: 3px; margin: 0; padding-left: 20px; }
.mfc-prose-body li { color: var(--th-ink-2); font-size: 13px; line-height: 1.5; }
.mfc-prose-body strong { color: var(--th-ink); font-weight: 700; }
.mfc-prose-body a { color: var(--th-advant-deep); font-weight: 500; text-decoration: underline; text-underline-offset: 2px; }
.mfc-prose-body img { max-width: 100%; height: auto; }
.mfc-slot-conflict {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 9px 11px;
  border: 1px solid color-mix(in oklch, var(--th-marigold-deep) 28%, transparent);
  border-radius: var(--th-radius-3);
  background: var(--th-marigold-soft);
  color: var(--th-marigold-deep);
  font-size: 12px;
}

.mfcpv-frame {
  overflow: hidden;
  border: 1px solid var(--th-line-2);
  border-radius: var(--th-radius-8);
  background: var(--th-paper-sunk);
  box-shadow: 0 1px 2px oklch(20% 0.01 255 / 0.05);
}
.mfcpv-chrome { display: flex; align-items: center; gap: 6px; padding: 8px 12px; border-bottom: 1px solid var(--th-line); background: var(--th-paper); }
.mfcpv-chrome-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--th-line-2); }
.mfcpv-chrome-label { margin-left: 6px; color: var(--th-ink-4); font-family: var(--th-f-mono); font-size: 10px; letter-spacing: 0.04em; }
.mfcpv-stage { overflow: hidden; }
.mfcpv-stage .cmp { min-width: 0; height: auto; background: transparent; }
.mfcpv-stage .cmp .cmp-mfc--panel {
  position: static;
  max-height: none;
  margin: 0;
  overflow: visible;
  border-radius: 0;
}
.mfcpv-stage .cm-preview-hidden { padding: 40px 24px; border: 0; border-radius: 0; }
.mfc-foot-summary { margin-left: auto; color: var(--th-ink-3); font-size: 11px; white-space: nowrap; }

@media (max-width: 1180px) {
  .mfc-expand { grid-template-columns: 1fr; }
  .mfc-expand-preview { border-top: 1px solid var(--th-line); border-left: 0; }
}

@media (max-width: 760px) {
  .mfc-head-right { align-items: flex-start; text-align: left; }
  .mfc-head-summary { line-height: 1.5; }
  .mfc-savebar { align-items: flex-start; flex-wrap: wrap; }
  .mfc-savebar-note { flex-basis: 100%; }
  .mfc-savebar-actions { width: 100%; margin-left: 0; }
  .mfc-savebar-actions .mfc-btn { justify-content: center; flex: 1; }
  .mfc-row-main {
    grid-template-columns: 3px 24px minmax(0, 1fr) auto;
    gap: 9px;
    padding-right: 10px;
  }
  .mfc-row-stripe,
  .mfc-row-num { grid-row: 1 / span 2; }
  .mfc-row-body { grid-row: 1; grid-column: 3; }
  .mfc-row-status { grid-row: 2; grid-column: 3; justify-content: flex-start; }
  .mfc-row-tail { grid-row: 1 / span 2; grid-column: 4; }
  .mfc-row-override { display: none; }
  .mfc-status-custom { align-items: flex-start; flex-direction: column; gap: 3px; }
  .mfc-expand-editor { padding: 18px; }
  .mfc-expand-preview { padding: 16px; }
  .mfc-editor-head,
  .mfc-editor-foot { align-items: flex-start; flex-direction: column; }
  .mfc-compare { margin-right: 0; }
  .mfc-viewbar { align-items: flex-start; flex-wrap: wrap; }
  .mfc-viewbar-tag { margin-left: 0; }
  .mfc-confirm-list li { align-items: flex-start; flex-wrap: wrap; }
  .mfc-confirm-list li .to { width: 100%; margin-left: 0; }
  .mfc-foot-summary { white-space: normal; }
}

[data-theme="dark"] .mfc-savebar,
[data-theme="dark"] .mfc-conflict-banner,
[data-theme="dark"] .mfc-slot-conflict {
  border-color: color-mix(in oklch, oklch(70% 0.14 55) 35%, transparent);
  background: oklch(26% 0.05 55);
  color: oklch(84% 0.13 55);
}
[data-theme="dark"] .mfc-savebar-dot { background: oklch(78% 0.13 55); }
[data-theme="dark"] .mfc-chip.is-custom {
  border-color: color-mix(in oklch, oklch(70% 0.14 55) 40%, transparent);
  background: oklch(26% 0.05 55);
  color: oklch(82% 0.13 55);
}
[data-theme="dark"] .mfc-btn.is-primary { border-color: var(--th-marigold); background: var(--th-marigold); color: oklch(16% 0.01 60); }
[data-theme="dark"] .mfc-btn.is-primary:hover { border-color: oklch(76% 0.13 50); background: oklch(76% 0.13 50); }
[data-theme="dark"] .mfc-inherit-banner > svg,
[data-theme="dark"] .mfc-confirm-list li .to.is-inherit { color: oklch(74% 0.12 155); }
[data-theme="dark"] .mfc-in:focus { border-color: var(--th-marigold); box-shadow: 0 0 0 3px oklch(70% 0.14 55 / 0.16); }
[data-theme="dark"] .mfcpv-frame { border-color: var(--th-line-2); }

/* ==================================================================
   Requirement catalog — per-definition requirement templates
   Canon: design_handoff_application_definitions/appdef-requirements.css.
   Structural sibling of the Payments fees panel — an ordered,
   drag-reorder list of rule-gated rows with audited edits. Blocking
   is the consequential axis (gates ReadyForReview), so it earns the
   copper editorial accent + a row stripe. No new tokens.
   ================================================================== */

/* -------- Panel head extras --------------------------------------- */
.req-head-right { display: flex; flex-direction: column; align-items: flex-end; gap: 5px; text-align: right; }
.req-head-summary { font-size: var(--th-size-13); color: var(--th-ink-3); }
.req-head-summary b { color: var(--th-ink); font-weight: 600; font-variant-numeric: tabular-nums; }
.req-head-dot { margin: 0 7px; color: var(--th-ink-4); }

/* "Applies to future submissions only" — a persistent, calm awareness
   strip. Not caution chrome; this is a standing fact of the model. */
.req-scope-note {
  display: grid; grid-template-columns: 22px 1fr; gap: 11px; align-items: start;
  margin: 0; padding: 12px 18px;
  background: var(--th-paper-2);
  border-bottom: 1px solid var(--th-line);
  font-size: 12.5px; color: var(--th-ink-2); line-height: 1.55;
}
.req-scope-note > svg { color: var(--th-advant-deep); margin-top: 1px; }
.req-scope-note b { color: var(--th-ink); font-weight: 600; }
.req-scope-note .em { font-family: var(--th-f-serif); font-style: italic; color: var(--th-ink-2); }

/* -------- Catalog list -------------------------------------------- */
.req-list { list-style: none; margin: 0; padding: 0; }
.req-row { border-bottom: 1px solid var(--th-line-soft); position: relative; }
.req-row:last-child { border-bottom: 0; }
.req-row.is-open { background: var(--th-paper); }
.req-row.is-drop-target { box-shadow: inset 0 2px 0 var(--th-advant); }

.req-row-main {
  display: grid;
  grid-template-columns: 22px 22px 138px minmax(0, 1fr) auto;
  align-items: center;
  gap: 12px;
  padding: 12px 16px 12px 4px;
  cursor: pointer;
  position: relative;
}
.req-row-main:hover { background: var(--th-paper-2); }
.req-row.is-open .req-row-main:hover { background: transparent; }

/* Copper stripe marks a blocking template — the gating, consequential kind. */
.req-row-stripe { position: absolute; left: 0; top: 0; bottom: 0; width: 3px; border-radius: 0 2px 2px 0; background: transparent; }
.req-row.is-blocking .req-row-stripe { background: var(--th-marigold-deep); }

.req-drag { display: inline-flex; justify-content: center; color: var(--th-ink-4); cursor: grab; }
.req-drag:active { cursor: grabbing; }
.req-num { font-family: var(--th-f-mono); font-size: 11px; color: var(--th-ink-4); font-variant-numeric: tabular-nums; text-align: right; }

/* Kind cell — glyph + word, quiet. */
.req-kind { display: inline-flex; align-items: center; gap: 8px; min-width: 0; }
.req-kind .g {
  width: 26px; height: 26px; flex: none; border-radius: var(--th-radius-5);
  display: grid; place-items: center;
  background: var(--th-paper-2); border: 1px solid var(--th-line);
  color: var(--th-ink-2);
}
.req-row.is-blocking .req-kind .g { color: var(--th-marigold-deep); border-color: color-mix(in oklch, var(--th-marigold-deep) 24%, transparent); background: var(--th-marigold-soft); }
.req-kind .kn { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.req-kind .kn .k { font-family: var(--th-f-mono); font-size: 9px; letter-spacing: 0.11em; text-transform: uppercase; color: var(--th-ink-4); }
.req-kind .kn .v { font-size: 12px; font-weight: 600; color: var(--th-ink-2); white-space: nowrap; }

/* Label + meta chips column. */
.req-body { min-width: 0; display: flex; flex-direction: column; gap: 5px; }
.req-label { font-size: var(--th-size-14); font-weight: 600; color: var(--th-ink); line-height: 1.35; }
.req-label.is-empty { color: var(--th-ink-4); font-weight: 400; font-family: var(--th-f-serif); font-style: italic; }
.req-meta { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; }

/* Shared meta chip base. */
.req-chip {
  display: inline-flex; align-items: center; gap: 5px;
  font-size: 11px; font-weight: 500; padding: 2px 8px;
  border-radius: var(--th-radius-pill); border: 1px solid transparent; white-space: nowrap;
}
.req-chip svg { flex: none; }
.req-chip .c-dot { width: 5px; height: 5px; border-radius: 50%; background: currentColor; }

/* Conditional — advant/blue: "Only when {rule}". */
.req-chip.is-cond { background: var(--th-advant-soft); color: var(--th-advant-deep); border-color: color-mix(in oklch, var(--th-advant) 26%, transparent); }
.req-chip.is-cond .lead { color: color-mix(in oklch, var(--th-advant-deep) 72%, var(--th-ink-3)); }
.req-chip.is-cond .rn { font-weight: 600; }
/* Broken condition reference — risk. */
.req-chip.is-broken { background: var(--th-risk-soft); color: var(--th-risk); border-color: color-mix(in oklch, var(--th-risk) 30%, transparent); }
.req-chip.is-broken .rn { font-family: var(--th-f-mono); font-size: 10px; }

/* Due read-back — neutral mono. */
.req-chip.is-due { background: var(--th-paper-2); color: var(--th-ink-2); border-color: var(--th-line); font-family: var(--th-f-mono); font-size: 10.5px; }
.req-chip.is-due.is-warn { background: color-mix(in oklch, var(--th-warn-soft) 55%, var(--th-paper-sunk)); color: oklch(45% 0.12 65); border-color: color-mix(in oklch, var(--th-warn) 26%, transparent); }

/* Pre-satisfied binding — green: seeds received if already uploaded. */
.req-chip.is-bound { background: var(--th-ok-soft); color: oklch(42% 0.10 155); border-color: color-mix(in oklch, oklch(52% 0.11 155) 28%, transparent); }
.req-chip.is-bound.is-broken { background: var(--th-risk-soft); color: var(--th-risk); border-color: color-mix(in oklch, var(--th-risk) 30%, transparent); }

/* Instructions present — quiet neutral hint (secondary to the other axes). */
.req-chip.is-note { background: var(--th-paper-2); color: var(--th-ink-3); border-color: var(--th-line); }

/* Row tail — blocking chip + lint + chevron + kebab. */
.req-tail { display: inline-flex; align-items: center; gap: 10px; justify-self: end; }
.req-block-chip {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 11.5px; font-weight: 600; padding: 3px 10px;
  border-radius: var(--th-radius-pill); white-space: nowrap;
}
.req-block-chip.is-blocking { background: var(--th-marigold-deep); color: var(--th-paper); }
.req-block-chip.is-blocking .c-dot { width: 5px; height: 5px; border-radius: 50%; background: var(--th-paper); opacity: 0.85; }
.req-block-chip.is-info { background: transparent; color: var(--th-ink-3); border: 1px solid var(--th-line-2); font-weight: 500; }
.req-block-chip.is-info .c-dot { width: 5px; height: 5px; border-radius: 50%; background: var(--th-ink-4); }

.req-lint {
  display: inline-flex; align-items: center; gap: 5px;
  font-family: var(--th-f-mono); font-size: 10px; font-weight: 600;
  letter-spacing: 0.06em; text-transform: uppercase;
  padding: 3px 8px; border-radius: var(--th-radius-pill); cursor: pointer; white-space: nowrap;
  color: var(--th-risk); background: var(--th-risk-soft);
  border: 1px solid color-mix(in oklch, var(--th-risk) 28%, transparent);
}
.req-lint.is-warn { color: oklch(45% 0.12 65); background: color-mix(in oklch, var(--th-warn-soft) 60%, var(--th-paper-sunk)); border-color: color-mix(in oklch, var(--th-warn) 26%, transparent); }

.req-row-chev { color: var(--th-ink-4); transition: transform 140ms ease; flex: none; }
.req-row-chev.is-open { transform: rotate(180deg); color: var(--th-ink-2); }
.req-kebab-btn { color: var(--th-ink-4); }

/* -------- Expanded region: editor + preview ----------------------- */
.req-expand {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 340px;
  gap: 0;
  border-top: 1px solid var(--th-line);
  background: var(--th-paper-sunk);
  animation: req-open 150ms ease;
}
@keyframes req-open { from { opacity: 0; transform: translateY(-3px); } to { opacity: 1; transform: none; } }
.req-expand-editor { padding: 20px 22px 20px 29px; min-width: 0; display: flex; flex-direction: column; gap: 16px; }
.req-expand-preview { padding: 20px 22px 24px; background: var(--th-paper-2); border-left: 1px solid var(--th-line); }
@media (max-width: 1180px) { .req-expand { grid-template-columns: 1fr; } .req-expand-preview { border-left: 0; border-top: 1px solid var(--th-line); } }

/* Editor field block. */
.req-field { display: flex; flex-direction: column; gap: 7px; }
.req-field-lbl { font-family: var(--th-f-mono); font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--th-ink-4); }
.req-field-lbl .opt { color: var(--th-ink-4); text-transform: none; letter-spacing: 0; font-family: var(--th-f-serif); font-style: italic; font-size: 11px; margin-left: 7px; }
.req-field-hint { font-size: 11.5px; color: var(--th-ink-3); line-height: 1.5; }
.req-field-hint .em { font-family: var(--th-f-serif); font-style: italic; color: var(--th-marigold-deep); }

.req-in {
  font-family: var(--th-f-sans); font-size: 13.5px; color: var(--th-ink);
  background: var(--th-paper); border: 1px solid var(--th-line-2); border-radius: var(--th-radius-3);
  padding: 8px 11px; width: 100%; box-sizing: border-box;
}
.req-in:focus { outline: none; border-color: var(--th-marigold); box-shadow: 0 0 0 3px var(--th-marigold-soft); }
.req-in::placeholder { color: var(--th-ink-4); }
.req-in-md { min-height: 104px; line-height: 1.6; font-size: 13px; resize: vertical; white-space: pre-wrap; }
.req-allowlist { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; font-family: var(--th-f-serif); font-style: italic; font-size: 11.5px; color: var(--th-ink-4); }
.req-md-syntax { display: inline-flex; align-items: center; flex-wrap: wrap; gap: 6px; }
.req-md-syntax code { font-family: var(--th-f-mono); font-style: normal; font-size: 10.5px; color: var(--th-ink-3); background: var(--th-paper-2); border: 1px solid var(--th-line); border-radius: var(--th-radius-3); padding: 1px 6px; }

/* Kind picker — 4 segmented cards + a ghost "later" affordance so the
   kind vocabulary never reads as closed-ended (Recommendation lands later). */
.req-kindpick { display: flex; flex-wrap: wrap; gap: 8px; }
.req-kindpick .kp {
  display: inline-flex; align-items: center; gap: 8px; white-space: nowrap;
  padding: 8px 12px; border-radius: var(--th-radius-5); cursor: pointer;
  background: var(--th-paper); border: 1px solid var(--th-line-2); color: var(--th-ink-2);
  font-size: 12.5px; font-weight: 500;
}
.req-kindpick .kp svg { color: var(--th-ink-3); flex: none; }
.req-kindpick .kp:hover { border-color: var(--th-ink-4); }
.req-kindpick .kp.is-on { background: var(--th-advant-soft); border-color: color-mix(in oklch, var(--th-advant) 40%, transparent); color: var(--th-advant-deep); }
.req-kindpick .kp.is-on svg { color: var(--th-advant-deep); }
.req-kindpick .kp.is-ghost { cursor: default; border-style: dashed; color: var(--th-ink-4); background: transparent; }
.req-kindpick .kp.is-ghost .soon { font-family: var(--th-f-serif); font-style: italic; font-size: 11px; color: var(--th-ink-4); }

/* Blocking picker — two radio cards; blocking reads consequential. */
.req-blockpick { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
@media (max-width: 640px) { .req-blockpick { grid-template-columns: 1fr; } }
.req-bp {
  display: grid; grid-template-columns: 16px 1fr; gap: 9px; align-items: start;
  padding: 11px 13px; border-radius: var(--th-radius-5); cursor: pointer;
  background: var(--th-paper); border: 1px solid var(--th-line-2);
}
.req-bp .mk { width: 15px; height: 15px; border-radius: 50%; border: 1.5px solid var(--th-line-2); margin-top: 1px; display: grid; place-items: center; }
.req-bp .mk .dot { width: 7px; height: 7px; border-radius: 50%; background: transparent; }
.req-bp.is-on { border-color: color-mix(in oklch, var(--th-marigold-deep) 45%, transparent); background: var(--th-marigold-soft); }
.req-bp.is-on.is-info { border-color: var(--th-ink-4); background: var(--th-paper-2); }
.req-bp.is-on .mk { border-color: var(--th-marigold-deep); }
.req-bp.is-on.is-info .mk { border-color: var(--th-ink-3); }
.req-bp.is-on .mk .dot { background: var(--th-marigold-deep); }
.req-bp.is-on.is-info .mk .dot { background: var(--th-ink-3); }
.req-bp .bt { display: block; font-size: 12.5px; font-weight: 600; color: var(--th-ink); }
.req-bp .bs { display: block; font-size: 11.5px; color: var(--th-ink-3); line-height: 1.45; margin-top: 3px; }
.req-bp .bs .em { font-family: var(--th-f-serif); font-style: italic; color: var(--th-marigold-deep); }

/* Condition + due + binding sub-controls share the select look with the
   fee-due policy control (appdef-v8). */
.req-control { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.req-select {
  font-family: var(--th-f-sans); font-size: 13px; color: var(--th-ink);
  background: var(--th-paper); border: 1px solid var(--th-line-2); border-radius: var(--th-radius-3);
  padding: 8px 30px 8px 11px; cursor: pointer; max-width: 100%;
  appearance: none;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'><path fill='%2394a0b0' d='M0 0h10L5 6z'/></svg>");
  background-repeat: no-repeat; background-position: right 11px center;
}
.req-select:focus { outline: none; border-color: var(--th-marigold); box-shadow: 0 0 0 3px var(--th-marigold-soft); }
.req-days {
  display: inline-flex; align-items: center; gap: 9px; flex-wrap: wrap;
}
.req-days input {
  width: 62px; padding: 7px 9px; text-align: right;
  font-family: var(--th-f-mono); font-variant-numeric: tabular-nums; font-size: 13px;
  color: var(--th-ink); background: var(--th-paper); border: 1px solid var(--th-line-2); border-radius: var(--th-radius-3);
}
.req-days input:focus { outline: none; border-color: var(--th-marigold); box-shadow: 0 0 0 3px var(--th-marigold-soft); }
.req-days.is-invalid input { border-color: color-mix(in oklch, var(--th-risk) 32%, transparent); background: var(--th-risk-soft); }
.req-days .suffix { font-size: 12.5px; color: var(--th-ink-2); }
.req-anchor {
  display: inline-flex; align-items: center; gap: 7px;
  font-size: 12px; color: var(--th-ink-2);
  background: var(--th-paper-2); border: 1px solid var(--th-line); border-radius: var(--th-radius-3);
  padding: 7px 11px;
}
.req-anchor svg { color: var(--th-ink-3); flex: none; }
.req-anchor .lock { font-family: var(--th-f-serif); font-style: italic; font-size: 11px; color: var(--th-ink-4); }

/* Condition — chosen rule chip + clear, or an "add condition" affordance. */
.req-cond-picker { display: inline-flex; align-items: center; gap: 10px; flex-wrap: wrap; position: relative; }
.req-cond-add {
  display: inline-flex; align-items: center; gap: 6px; cursor: pointer;
  font-size: 12.5px; font-weight: 500; color: var(--th-advant-deep);
  background: var(--th-advant-soft); border: 1px solid color-mix(in oklch, var(--th-advant) 26%, transparent);
  border-radius: var(--th-radius-3); padding: 7px 12px;
}
.req-cond-add:hover { background: color-mix(in oklch, var(--th-advant-soft) 70%, var(--th-paper)); }
.req-cond-clear { font-size: 12px; color: var(--th-ink-3); cursor: pointer; }
.req-cond-clear:hover { color: var(--th-ink); text-decoration: underline; text-underline-offset: 2px; }

/* Rule picker popover (reuses ad-role-menu placement idiom). Hosted in the shared <Popover>
   atom (Task 13's ReqEditor condition picker), so - same documented fix as .ax-kebab-menu /
   .cc-provider-popover / .ad-role-menu above - it must sit ABOVE the atom's click-outside
   backdrop (.ax-popover-backdrop, z-index 69) or the invisible backdrop intercepts every item
   click. z-index 40 (this task's initial Task 8 port, written before Popover-hosting was
   decided) is bumped to 70 to match every other Popover-hosted menu in this file. */
.req-rule-menu {
  position: absolute; top: calc(100% + 6px); left: 0; z-index: 70; width: 288px;
  background: var(--th-paper-sunk); border: 1px solid var(--th-line-2); border-radius: var(--th-radius-5);
  box-shadow: 0 10px 30px oklch(20% 0.02 255 / 0.14); padding: 5px; max-height: 300px; overflow: auto;
}
.req-rule-item { display: grid; grid-template-columns: 16px 1fr; gap: 9px; align-items: start; padding: 8px 9px; border-radius: var(--th-radius-3); cursor: pointer; }
.req-rule-item:hover { background: var(--th-advant-soft); }
.req-rule-item .mk { color: var(--th-advant-deep); margin-top: 2px; }
.req-rule-item .rn { font-size: 13px; font-weight: 600; color: var(--th-ink); }
.req-rule-item .rs { font-family: var(--th-f-mono); font-size: 10.5px; color: var(--th-ink-3); margin-top: 2px; }
.req-rule-menu .req-rule-none { padding: 8px 9px; font-family: var(--th-f-serif); font-style: italic; font-size: 12px; color: var(--th-ink-3); border-top: 1px solid var(--th-line); margin-top: 4px; cursor: pointer; }
.req-rule-menu .req-rule-none:hover { color: var(--th-ink); }
/* Rules-list load failure (P2-a) - informational, not selectable; no border-top/cursor since it
   isn't paired with an option the way .req-rule-none is. */
.req-rule-menu .req-rule-unavailable { padding: 8px 9px; font-family: var(--th-f-serif); font-style: italic; font-size: 12px; color: var(--th-ink-3); }

.req-editor-foot {
  display: flex; align-items: center; gap: 10px; padding-top: 12px; border-top: 1px solid var(--th-line);
  font-size: 12px; color: var(--th-ink-3);
}
.req-editor-foot .audit-note { display: inline-flex; align-items: center; gap: 6px; font-family: var(--th-f-serif); font-style: italic; }
.req-editor-foot .audit-note svg { color: var(--th-ink-4); }
.req-editor-foot .req-collapse {
  margin-left: auto; display: inline-flex; align-items: center; gap: 6px; cursor: pointer;
  font-family: var(--th-f-sans); font-size: 12px; font-weight: 500; color: var(--th-ink-2);
  background: var(--th-paper-sunk); border: 1px solid var(--th-line-2); border-radius: var(--th-radius-3); padding: 6px 12px;
}
.req-editor-foot .req-collapse:hover { border-color: var(--th-ink-4); color: var(--th-ink); }

/* -------- Applicant checklist preview ----------------------------- */
.req-preview-lbl {
  display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin-bottom: 12px;
  font-family: var(--th-f-mono); font-size: 10.5px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--th-ink-3);
}
.req-preview-lbl .r { color: var(--th-ink-4); letter-spacing: 0.06em; }
.req-checklist {
  border: 1px solid var(--th-line-2); border-radius: var(--th-radius-8); overflow: hidden; background: var(--th-paper-sunk);
  box-shadow: 0 1px 2px oklch(20% 0.01 255 / 0.05);
}
.req-checklist-head { padding: 10px 18px; border-bottom: 1px solid var(--th-line); background: var(--th-paper); }
.req-checklist-head .t { font-family: var(--th-f-serif); font-size: 14px; font-weight: 600; color: var(--th-ink); }
.req-checklist-head .s { font-size: 11px; color: var(--th-ink-3); margin-top: 1px; }
.req-checklist-item { display: grid; grid-template-columns: 22px 1fr; gap: 14px; align-items: start; padding: 15px 22px; }
.req-checklist-item + .req-checklist-item { border-top: 1px solid var(--th-line-soft); }
.req-ck-state { width: 17px; height: 17px; border-radius: 50%; margin-top: 1px; display: grid; place-items: center; flex: none; }
.req-ck-state.is-pending { border: 1.6px solid var(--th-ink-4); }
.req-ck-state.is-received { background: oklch(52% 0.11 155); color: var(--th-paper); }
.req-ck-body .l { font-size: 13px; font-weight: 600; color: var(--th-ink); line-height: 1.35; }
.req-ck-body .sub { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 10px; margin-top: 4px; font-size: 11.5px; color: var(--th-ink-3); }
.req-ck-body .sub .st { font-weight: 600; }
.req-ck-body .sub .st.is-pending { color: var(--th-ink-2); }
.req-ck-body .sub .st.is-received { color: oklch(45% 0.10 155); }
.req-ck-body .sub .due { font-family: var(--th-f-mono); font-size: 10.5px; color: var(--th-ink-3); }
.req-ck-note {
  margin-top: 12px; display: grid; grid-template-columns: 16px 1fr; gap: 8px; align-items: start;
  font-size: 11.5px; color: var(--th-ink-3); line-height: 1.5;
}
.req-ck-note svg { color: var(--th-ink-4); margin-top: 2px; }
.req-ck-note b { color: var(--th-ink-2); font-weight: 600; }
.req-ck-note.is-cond svg { color: var(--th-advant-deep); }
/* Broken-reference / term-decision-date-missing note icons (Task 13 ReqChecklistPreview) - canon
   sets these two inline (`style={{ color: 'var(--risk)' }}` / `'oklch(50% 0.13 65)'`); ported as
   named classes instead of an inline style attribute on AppDefIcon (which has no Style param). */
.req-ck-note .ico-risk { color: var(--th-risk); }
.req-ck-note .ico-term-warn { color: oklch(50% 0.13 65); }
.req-ck-variants { display: flex; flex-direction: column; gap: 14px; margin-top: 12px; }
.req-ck-variant { display: flex; flex-direction: column; gap: 8px; padding: 12px 14px; border: 1px solid var(--th-line); border-radius: var(--th-radius-5); background: var(--th-paper); }
.req-ck-variant .cond { font-family: var(--th-f-mono); font-size: 9.5px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--th-ink-4); }
.req-ck-variant .req-checklist-item { padding: 0; border-top: 0; }
.req-ck-variant + .req-ck-variant { border-top: 1px solid var(--th-line); }

/* Applicant-facing instructions, rendered beneath the item on the checklist. */
.req-ck-instructions { margin-top: 12px; padding: 12px 14px; border: 1px solid var(--th-line); border-radius: var(--th-radius-5); background: var(--th-paper); }
.req-ck-instructions-lbl { font-family: var(--th-f-mono); font-size: 9.5px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--th-ink-4); margin-bottom: 8px; }
.req-ck-instructions .mfc-prose-body { display: flex; flex-direction: column; gap: 7px; }

/* -------- Automatic fee "ghost" row ------------------------------- */
.req-fee-ghost {
  display: grid; grid-template-columns: 22px 26px 138px minmax(0,1fr) auto; gap: 12px; align-items: center;
  padding: 12px 16px 12px 4px;
  border-top: 1px dashed var(--th-line-2);
  background: repeating-linear-gradient(135deg, transparent 0 9px, color-mix(in oklch, var(--th-paper-2) 60%, transparent) 9px 18px);
}
.req-fee-ghost .lead { grid-column: 1 / 2; display: inline-flex; justify-content: center; color: var(--th-ink-4); }
.req-fee-ghost .g { width: 26px; height: 26px; border-radius: var(--th-radius-5); display: grid; place-items: center; background: var(--th-paper-2); border: 1px solid var(--th-line); color: var(--th-ink-3); grid-column: 3 / 4; }
.req-fee-ghost .body { grid-column: 4 / 5; min-width: 0; }
.req-fee-ghost .body .l { font-size: var(--th-size-14); font-weight: 600; color: var(--th-ink-2); }
.req-fee-ghost .body .sub { font-size: 11.5px; color: var(--th-ink-3); margin-top: 2px; line-height: 1.45; }
.req-fee-ghost .body .sub a { color: var(--th-advant-deep); }
.req-fee-ghost .tail { grid-column: 5 / 6; justify-self: end; display: inline-flex; align-items: center; gap: 9px; }
.req-fee-ghost .auto-chip {
  display: inline-flex; align-items: center; gap: 5px; font-family: var(--th-f-mono);
  font-size: 9.5px; letter-spacing: 0.1em; text-transform: uppercase; font-weight: 600;
  color: var(--th-ink-3); background: var(--th-paper-2); border: 1px solid var(--th-line-2);
  border-radius: var(--th-radius-pill); padding: 3px 9px;
}
.req-fee-ghost.is-none { opacity: 0.85; }
.req-fee-ghost.is-none .body .sub { font-family: var(--th-f-serif); font-style: italic; }
/* Payment-configuration read FAILED (P2-a) - status genuinely unknown, not confirmed absent.
   Mirrors .is-none's exact muted treatment; distinct class so the two states aren't conflated. */
.req-fee-ghost.is-unknown { opacity: 0.85; }
.req-fee-ghost.is-unknown .body .sub { font-family: var(--th-f-serif); font-style: italic; }

/* -------- Empty state (day one) ----------------------------------- */
.req-empty { padding: 40px 28px 30px; text-align: center; display: flex; flex-direction: column; align-items: center; }
.req-empty .medallion {
  width: 52px; height: 52px; border-radius: 50%; display: grid; place-items: center;
  background: var(--th-marigold-soft); color: var(--th-marigold-deep);
  border: 1px solid color-mix(in oklch, var(--th-marigold-deep) 22%, transparent); margin-bottom: 16px;
}
.req-empty .t { font-family: var(--th-f-serif); font-size: 21px; font-weight: 500; color: var(--th-ink); letter-spacing: -0.01em; }
.req-empty .t .em { font-style: italic; color: var(--th-marigold-deep); }
.req-empty .d { font-size: 13px; color: var(--th-ink-2); line-height: 1.65; max-width: 62ch; margin: 10px 0 20px; }
.req-empty .d b { color: var(--th-ink); font-weight: 600; }
.req-empty .cta {
  display: inline-flex; align-items: center; gap: 7px; cursor: pointer;
  font-family: var(--th-f-sans); font-size: 13px; font-weight: 600; color: var(--th-paper);
  background: var(--th-marigold-deep); border: 1px solid var(--th-marigold-deep); border-radius: var(--th-radius-3);
  padding: 9px 16px;
}
.req-empty .cta:hover { background: oklch(40% 0.12 50); }

/* -------- Panel foot legend --------------------------------------- */
.req-foot-legend { margin-left: auto; display: inline-flex; align-items: center; gap: 14px; font-family: var(--th-f-mono); font-size: 10px; color: var(--th-ink-4); }
.req-foot-legend .lg { display: inline-flex; align-items: center; gap: 5px; }
.req-foot-legend .lg .sw { width: 8px; height: 8px; border-radius: 2px; }
.req-foot-legend .lg .sw.blk { background: var(--th-marigold-deep); }
.req-foot-legend .lg .sw.cnd { background: var(--th-advant); }
.req-foot-legend .lg .sw.bnd { background: oklch(52% 0.11 155); }

/* ==================================================================
   Dark theme
   ================================================================== */
[data-theme="dark"] .req-row.is-blocking .req-kind .g { background: oklch(26% 0.05 55); border-color: color-mix(in oklch, oklch(70% 0.14 55) 34%, transparent); color: oklch(82% 0.13 55); }
[data-theme="dark"] .req-block-chip.is-blocking { background: var(--th-marigold); color: oklch(16% 0.01 60); }
[data-theme="dark"] .req-block-chip.is-blocking .c-dot { background: oklch(16% 0.01 60); }
[data-theme="dark"] .req-chip.is-cond { background: color-mix(in oklch, var(--th-advant) 22%, var(--th-paper-sunk)); color: oklch(82% 0.11 245); border-color: color-mix(in oklch, var(--th-advant) 40%, transparent); }
[data-theme="dark"] .req-chip.is-bound { background: oklch(26% 0.05 155); color: oklch(80% 0.12 155); border-color: color-mix(in oklch, oklch(60% 0.12 155) 40%, transparent); }
/* Task 12: .is-bound.is-broken (the "Bound field removed" chip) has the SAME class-count
   specificity as the plain .is-bound rule above, so without its own dark override it fell
   back to inheriting that rule's green retint by source order (the compound selector never
   won the tie) - the "field is gone, this is broken" state rendered as a success-green chip
   in dark mode. Re-applies the same --th-risk/--th-risk-soft tokens .req-chip.is-broken
   already uses (those tokens flip for dark at the root - see threshold-tokens.css - so this
   rule just needs to win the specificity tie, not invent new colors). */
[data-theme="dark"] .req-chip.is-bound.is-broken { background: var(--th-risk-soft); color: var(--th-risk); border-color: color-mix(in oklch, var(--th-risk) 30%, transparent); }
[data-theme="dark"] .req-kindpick .kp.is-on { background: color-mix(in oklch, var(--th-advant) 24%, var(--th-paper-sunk)); color: oklch(84% 0.10 245); }
[data-theme="dark"] .req-bp.is-on { background: oklch(26% 0.05 55); }
[data-theme="dark"] .req-empty .medallion { background: oklch(26% 0.05 55); color: oklch(82% 0.13 55); border-color: color-mix(in oklch, oklch(70% 0.14 55) 34%, transparent); }
[data-theme="dark"] .req-empty .cta { background: var(--th-marigold); color: oklch(16% 0.01 60); border-color: var(--th-marigold); }
[data-theme="dark"] .req-in:focus, [data-theme="dark"] .req-select:focus, [data-theme="dark"] .req-days input:focus { border-color: var(--th-marigold); box-shadow: 0 0 0 3px oklch(70% 0.14 55 / 0.16); }
[data-theme="dark"] .req-ck-state.is-received { background: oklch(60% 0.12 155); color: oklch(18% 0.02 155); }

/* Activity-feed tint for the new `requirement` audit kind — advant/blue, to
   sit apart from the copper cycle/payment events. */
.ad-activity-row.kind-requirement .kind-glyph { background: var(--th-advant-soft); color: var(--th-advant-deep); }
[data-theme="dark"] .ad-activity-row.kind-requirement .kind-glyph { background: color-mix(in oklch, var(--th-advant) 24%, var(--th-paper-sunk)); color: oklch(84% 0.10 245); }
