/* ══════════════════════════════════════════════════════════════════════════
   card-recipes.css — G1: the shared Card, on ONE PatternFly visual grammar.

   This is the SINGLE visual layer for the Report-derived Person/Organization
   Card (`_partials/person_dossier.html` + `_ent_macros`) on the authenticated
   Project surface. It replaces `dossier-card.css` + `dossier-premium.css` for
   that surface: those files are dropped from `cabinet/project_card.html`, so no
   card element can match their rules any longer.

   The rules here own only COMPOSITION (the magazine grid, the hero split, the
   section stack, the identifier table chrome). Every type, colour, weight,
   space and radius is read from a concrete PatternFly 6.6 token — never a
   homegrown `--fs-*` / `--space-*` scale and never `--font-serif`. This file
   OWNS NO theme value and overrides NO `--pf-t--global--*` token: the Bureau
   character (Geist, amber, dark) flows through `pshell.css`, which maps the
   PatternFly semantic tokens onto Probily's brand primitives, whose VALUES are
   owned by the single brand layer `brand-tokens.css`. The two Probily semantics
   PatternFly has no token for — the entity-type palette (`--et-*`) and the
   product status colours (`--success`/`--warning`/`--danger`) — are also read
   from that single owner. So the Card has no local ownership of the global theme.

   Type system — TWO weights, ONE family (+ mono on identifiers ONLY):
     entity name      heading--h1   24px   600
     section heading  heading--h3   18px   600
     reading lead     md            16px   450
     body / value     body--default 14px   450
     label            body--sm      13px   600  (sans, uppercase, tracked)
     meta / prov      xs            12px   450/600
   Geist Mono is applied ONLY to source-backed identifier VALUES (`.idl-id`).
   Every label that used to be mono is now Geist sans, tracked — mono is
   reserved for the thing a machine reads back (an identifier), per the founder.

   Scope: card component rules are nested under `.dcard` (the card article) or
   `.pcx-page` (its project page chrome) so they win over the still-loaded
   tokens-bureau component rules (`.act` / `.lnk` / `.chip` / `.muted`) without
   touching any other surface. `brand-tokens.css` loads before this file so its
   `:root` primitives win over tokens-bureau — the Card resolves entirely from
   PatternFly tokens plus that one owner.
   ══════════════════════════════════════════════════════════════════════════ */

/* ── Project page chrome (breadcrumb + back), from dossier-premium ────────── */
/* `.pcx-page` seeds family + a base colour from the Card tokens so the chrome
   (crumbs / back) inherits Geist and the Bureau palette rather than falling
   through to the app's legacy `--font-sans` / `--text-*` on `.mkt`/`body`. */
.pcx-page {
  max-width: 1280px;
  margin: 0 auto;
  padding: var(--pf-t--global--spacer--sm) 0 var(--pf-t--global--spacer--2xl);
  font-family: var(--pf-t--global--font--family--body);
  color: var(--pf-t--global--text--color--subtle);
}
.pcx-crumbs {
  display: flex; align-items: center; gap: var(--pf-t--global--spacer--xs);
  flex-wrap: wrap;
  margin: var(--pf-t--global--spacer--xs) 0 var(--pf-t--global--spacer--md);
  font-size: var(--pf-t--global--font--size--xs); letter-spacing: 0.02em;
}
.pcx-crumbs a { color: var(--pf-t--global--text--color--subtle); text-decoration: none; }
.pcx-crumbs a:hover { color: var(--pf-t--global--text--color--brand--default); }
.pcx-crumbs__sep { color: var(--pf-t--global--text--color--disabled); }
.pcx-crumbs__here { color: var(--pf-t--global--text--color--regular); }
.pcx-back {
  display: flex; justify-content: space-between; align-items: center;
  gap: var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--lg);
  flex-wrap: wrap;
  margin: var(--pf-t--global--spacer--xs) 0 var(--pf-t--global--spacer--md);
  font-size: var(--pf-t--global--font--size--xs);
}
.pcx-back a { color: var(--pf-t--global--text--color--subtle); text-decoration: none; }
.pcx-back a:hover { color: var(--pf-t--global--text--color--regular); }

/* ── The reading column ──────────────────────────────────────────────────── */
.dcard {
  max-width: 880px;
  margin: 0 auto;
  padding: var(--pf-t--global--spacer--xl) var(--pf-t--global--spacer--lg) var(--pf-t--global--spacer--3xl);
  color: var(--pf-t--global--text--color--regular);
  font-family: var(--pf-t--global--font--family--body);
  font-size: var(--pf-t--global--font--size--body--default);
  font-weight: var(--pf-t--global--font--weight--body--default);
  line-height: var(--pf-t--global--font--line-height--body);
}
/* The card renders inside `.mkt pub-shell`, whose public-document typography
   styles bare `.mkt h2 / h3 / a` (specificity 0,1,1). Every card heading and
   title link is therefore scoped under `.dcard` (0,2,0) so the Card's own type
   scale wins over the marketing document scale — the reason `.dcard-sec__h`
   otherwise measured 34px (`--pub-type-section`) instead of the h3 token. */

/* ── Shared action / link / chip language, re-owned at card scope ─────────── */
/* Primary verb of the Card — one amber action; the rest are quiet. */
/* Form-control elements do NOT inherit font-family; set it from the Card token
   so buttons/inputs render Geist, never the app's legacy `--font-sans` on
   tokens-bureau's `.act`. (`.idl-id` mono is a span, unaffected.) */
.dcard button, .dcard input, .dcard select, .dcard textarea,
.pcx-page button, .pcx-page input, .pcx-page select, .pcx-page textarea {
  font-family: var(--pf-t--global--font--family--body);
}
.dcard .act, .pcx-page .act {
  display: inline-flex; align-items: center; justify-content: center;
  gap: var(--pf-t--global--spacer--sm);
  padding: var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--md);
  border-radius: var(--pf-t--global--border--radius--small);
  border: 1px solid transparent;
  font-family: var(--pf-t--global--font--family--body);
  font-size: var(--pf-t--global--font--size--body--sm);
  font-weight: var(--pf-t--global--font--weight--body--bold);
  line-height: 1.2; text-decoration: none; cursor: pointer; white-space: nowrap;
  transition: background 120ms ease, border-color 120ms ease, color 120ms ease;
}
.dcard .act--primary {
  background: var(--pf-t--global--color--brand--default);
  color: var(--pf-t--global--text--color--on-brand--default);
}
.dcard .act--primary:hover { background: var(--pf-t--global--text--color--brand--hover); }
.dcard .act--secondary {
  background: transparent; color: var(--pf-t--global--text--color--regular);
  border-color: var(--pf-t--global--border--color--default);
}
.dcard .act--secondary:hover {
  color: var(--pf-t--global--text--color--brand--default);
  border-color: var(--pf-t--global--border--color--brand--default);
}
.dcard .act--tertiary {
  background: transparent; color: var(--pf-t--global--text--color--subtle);
  border-color: transparent; padding-inline: var(--pf-t--global--spacer--sm);
}
.dcard .act--tertiary:hover { color: var(--pf-t--global--text--color--regular); }
.dcard .act--sm { font-size: var(--pf-t--global--font--size--xs); padding: var(--pf-t--global--spacer--xs) var(--pf-t--global--spacer--sm); }
.dcard .act:focus-visible, .pcx-page .act:focus-visible {
  outline: 2px solid var(--pf-t--global--color--brand--default); outline-offset: 2px;
}

.dcard .lnk {
  color: var(--pf-t--global--text--color--brand--default);
  text-decoration: none; text-underline-offset: 2px;
}
.dcard .lnk:hover { text-decoration: underline; }
.dcard .lnk--ext::after { content: " \2197"; color: var(--pf-t--global--text--color--subtle); }

/* Chip — neutral label pill; type dot carries the entity colour (graph parity) */
.dcard .chip {
  display: inline-flex; align-items: center; gap: var(--pf-t--global--spacer--xs);
  padding: var(--pf-t--global--spacer--xs) var(--pf-t--global--spacer--sm);
  border: 1px solid var(--pf-t--global--border--color--default);
  border-radius: var(--pf-t--global--border--radius--pill);
  background: var(--pf-t--global--background--color--secondary--default);
  font-family: var(--pf-t--global--font--family--body);
  font-size: var(--pf-t--global--font--size--xs);
  color: var(--pf-t--global--text--color--regular);
  text-decoration: none; line-height: 1.3; min-width: 0;
}
.dcard a.chip:hover {
  border-color: var(--pf-t--global--border--color--brand--default);
  color: var(--pf-t--global--text--color--regular);
}
.dcard .chip.warn {
  border-color: var(--warning);
  color: var(--warning);
}
.dcard .chip-period {
  margin-inline-start: var(--pf-t--global--spacer--xs);
  font-size: var(--pf-t--global--font--size--xs);
  color: var(--pf-t--global--text--color--subtle); white-space: nowrap;
}
.dcard .chip-past { opacity: 0.78; }
.dcard .chip-past .chip-period { font-style: italic; }
.dcard .muted { color: var(--pf-t--global--text--color--subtle); }

/* Entity-type dot — the ONE place the graph's type palette appears on the card */
.dcard .etd { width: 7px; height: 7px; border-radius: 2px; display: inline-block; flex: none; }
.dcard .etd.person { background: var(--et-person); }
.dcard .etd.org, .dcard .etd.organization, .dcard .etd.company { background: var(--et-company); }
.dcard .etd.outlet { background: var(--et-outlet); }
.dcard .etd.author { background: var(--et-author); }
.dcard .etd.place { background: var(--et-place); }
.dcard .etd.crime { background: var(--et-crime); }
.dcard .etd.materiel { background: var(--et-materiel); }
.dcard .etd.statement { background: var(--et-statement); border-radius: 50%; }

/* ── Avatar (shared ent_avatar), sized up to a hero portrait in the hero ──── */
.dcard .ent-av {
  position: relative; width: 112px; min-height: 100px; flex: none; overflow: hidden;
  border-radius: var(--pf-t--global--border--radius--medium);
  background: var(--pf-t--global--background--color--secondary--default);
  border: 1px solid var(--pf-t--global--border--color--default);
  display: flex; align-items: center; justify-content: center;
}
.dcard .ent-av img { width: 100%; height: auto; object-fit: contain; display: block; }
.dcard .ent-av-fb {
  display: none; align-items: center; justify-content: center;
  font-family: var(--pf-t--global--font--family--body);
  font-size: var(--pf-t--global--font--size--4xl);
  font-weight: var(--pf-t--global--font--weight--body--bold);
  color: var(--pf-t--global--text--color--subtle);
}
.dcard .ent-av.noimg .ent-av-fb { display: flex; }
.dcard .ent-av.noimg img { display: none; }

/* ── Hero — media + identity (PatternFly split, PF-calibrated) ────────────── */
.dcard-hero.pf-v6-l-split {
  display: flex; gap: var(--pf-t--global--spacer--xl); align-items: flex-start;
  flex-wrap: wrap;
  padding-bottom: var(--pf-t--global--spacer--xl);
  border-bottom: 1px solid var(--pf-t--global--border--color--default);
}
.dcard-hero__media { flex: none; }
.dcard-hero__media .ent-av { width: 300px; max-width: 44vw; min-height: 300px; border-radius: var(--pf-t--global--border--radius--medium); }
.dcard-hero__media .ent-av img { max-height: 380px; padding: var(--pf-t--global--spacer--sm); }
.dcard-credit {
  margin-top: var(--pf-t--global--spacer--sm);
  font-size: var(--pf-t--global--font--size--xs);
  color: var(--pf-t--global--text--color--subtle); max-width: 300px;
}
.dcard-credit a { color: var(--pf-t--global--text--color--regular); text-underline-offset: 2px; }

.dcard-hero__id { flex: 1 1 320px; min-width: 0; }
.dcard-hero__chips { display: flex; flex-wrap: wrap; gap: var(--pf-t--global--spacer--sm); margin-bottom: var(--pf-t--global--spacer--md); }
.dcard-hero__name {
  font-family: var(--pf-t--global--font--family--heading);
  font-size: var(--pf-t--global--font--size--heading--h1);
  font-weight: var(--pf-t--global--font--weight--body--bold);
  line-height: var(--pf-t--global--font--line-height--heading);
  letter-spacing: -0.02em; margin: 0 0 var(--pf-t--global--spacer--sm);
  color: var(--pf-t--global--text--color--regular);
}
.dcard-hero__desc {
  font-size: var(--pf-t--global--font--size--md);
  line-height: var(--pf-t--global--font--line-height--body);
  color: var(--pf-t--global--text--color--regular);
  margin: 0 0 var(--pf-t--global--spacer--md); max-width: 60ch;
}
.dcard-hero__aka {
  font-size: var(--pf-t--global--font--size--body--default);
  color: var(--pf-t--global--text--color--subtle);
  margin: 0 0 var(--pf-t--global--spacer--lg);
}
.dcard-lbl {
  font-size: var(--pf-t--global--font--size--body--sm);
  font-weight: var(--pf-t--global--font--weight--body--bold);
  text-transform: uppercase; letter-spacing: 0.05em;
  color: var(--pf-t--global--text--color--subtle);
  margin-inline-end: var(--pf-t--global--spacer--xs);
}
.dcard-hero__sources {
  display: flex; flex-wrap: wrap;
  gap: var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--lg);
  margin: 0 0 var(--pf-t--global--spacer--md);
  font-size: var(--pf-t--global--font--size--xs);
}
.dcard-hero__note {
  margin: var(--pf-t--global--spacer--sm) 0 0;
  font-size: var(--pf-t--global--font--size--xs);
  color: var(--pf-t--global--text--color--subtle);
  line-height: var(--pf-t--global--font--line-height--body); max-width: 52ch;
}
.dcard-hero__actions { margin-top: var(--pf-t--global--spacer--lg); }
.dcard-hero__actionrow { display: flex; flex-wrap: wrap; gap: var(--pf-t--global--spacer--sm); align-items: center; }
.dcard-saved__lbl {
  margin: 0 0 var(--pf-t--global--spacer--sm);
  font-size: var(--pf-t--global--font--size--body--sm);
  font-weight: var(--pf-t--global--font--weight--body--bold);
  text-transform: uppercase; letter-spacing: 0.04em;
  color: var(--pf-t--global--text--color--subtle);
}
.dcard-saved__lbl strong { color: var(--pf-t--global--text--color--regular); font-weight: var(--pf-t--global--font--weight--body--bold); }
.dsr-proj [hidden] { display: none; }

/* ── Sticky section nav — PatternFly jump-links, PF-calibrated ────────────── */
.dcard-jump.pf-v6-c-jump-links {
  position: sticky; top: 0; z-index: 5;
  margin: var(--pf-t--global--spacer--lg) 0 var(--pf-t--global--spacer--xl);
  padding: var(--pf-t--global--spacer--sm) 0;
  border-bottom: 1px solid var(--pf-t--global--border--color--default);
  background: color-mix(in oklch, var(--pf-t--global--background--color--primary--default) 88%, transparent);
  backdrop-filter: blur(8px);
}
.dcard-jump .pf-v6-c-jump-links__list {
  display: flex; flex-wrap: wrap;
  gap: var(--pf-t--global--spacer--xs) var(--pf-t--global--spacer--lg);
  list-style: none; margin: 0; padding: 0;
}
.dcard-jump .pf-v6-c-jump-links__link {
  font-size: var(--pf-t--global--font--size--xs);
  font-weight: var(--pf-t--global--font--weight--body--bold);
  text-transform: uppercase; letter-spacing: 0.05em;
  color: var(--pf-t--global--text--color--subtle);
  text-decoration: none; padding: 2px 0;
}
.dcard-jump .pf-v6-c-jump-links__link:hover { color: var(--pf-t--global--text--color--brand--default); }

/* ── Body — stack of bounded semantic sections ───────────────────────────── */
.dcard-body.pf-v6-l-stack { display: flex; flex-direction: column; }
.dcard-sec { padding: var(--pf-t--global--spacer--xl) 0; border-bottom: 1px solid var(--pf-t--global--border--color--default); }
.dcard-sec:last-child { border-bottom: 0; }
.dcard .dcard-sec__h {
  font-family: var(--pf-t--global--font--family--heading);
  font-size: var(--pf-t--global--font--size--heading--h3);
  font-weight: var(--pf-t--global--font--weight--body--bold);
  letter-spacing: -0.01em; margin: 0 0 var(--pf-t--global--spacer--lg);
  color: var(--pf-t--global--text--color--regular);
  display: flex; align-items: baseline; gap: var(--pf-t--global--spacer--sm);
}
.dcard-count {
  font-size: var(--pf-t--global--font--size--xs);
  font-weight: var(--pf-t--global--font--weight--body--default);
  color: var(--pf-t--global--text--color--subtle);
  padding: 1px 7px;
  border: 1px solid var(--pf-t--global--border--color--default);
  border-radius: var(--pf-t--global--border--radius--pill);
}
.dcard-sec__lede {
  font-size: var(--pf-t--global--font--size--body--default);
  color: var(--pf-t--global--text--color--subtle);
  line-height: var(--pf-t--global--font--line-height--body);
  margin: 0 0 var(--pf-t--global--spacer--lg); max-width: 60ch;
}
.dcard-muted { font-size: var(--pf-t--global--font--size--body--default); color: var(--pf-t--global--text--color--subtle); margin-top: var(--pf-t--global--spacer--md); }
.dcard-empty { font-size: var(--pf-t--global--font--size--md); color: var(--pf-t--global--text--color--subtle); padding: var(--pf-t--global--spacer--xl) 0; }
.dcard-archive { margin-top: var(--pf-t--global--spacer--lg); font-size: var(--pf-t--global--font--size--body--default); }
.dcard-archive a { color: var(--pf-t--global--text--color--brand--default); }

/* ── Key information — the .prm grid (ported, PF-calibrated) ──────────────── */
.params { border-top: 1px solid var(--pf-t--global--border--color--default); }
.prm {
  display: grid; grid-template-columns: 160px 1fr auto;
  gap: var(--pf-t--global--spacer--md); align-items: baseline; min-height: 36px;
  padding: var(--pf-t--global--spacer--sm) 0;
  border-bottom: 1px solid var(--pf-t--global--border--color--default);
}
.prm:last-child { border-bottom: 0; }
.prm-k {
  font-size: var(--pf-t--global--font--size--body--sm);
  font-weight: var(--pf-t--global--font--weight--body--bold);
  color: var(--pf-t--global--text--color--subtle);
  text-transform: uppercase; letter-spacing: 0.03em;
  display: flex; align-items: baseline; gap: var(--pf-t--global--spacer--xs);
}
.prm-v { font-size: var(--pf-t--global--font--size--body--default); color: var(--pf-t--global--text--color--regular); min-width: 0; overflow-wrap: anywhere; }
.prm-v.lk a { color: var(--pf-t--global--text--color--brand--default); text-decoration: none; }
.prm-v.lk a:hover { text-decoration: underline; }
.prm-src {
  font-size: var(--pf-t--global--font--size--xs);
  color: var(--pf-t--global--text--color--disabled);
  margin-inline-start: var(--pf-t--global--spacer--sm); white-space: nowrap;
}
.prm-src::before { content: "\00b7 "; }
.prm-chips .prm-v { display: flex; flex-wrap: wrap; gap: var(--pf-t--global--spacer--xs) var(--pf-t--global--spacer--sm); align-items: center; }
/* CONFLICT — sources disagree; each reading listed with its own evidence (amber) */
.prm-conflict .prm-flag {
  display: inline-block; margin-inline-start: var(--pf-t--global--spacer--xs);
  padding: 0 var(--pf-t--global--spacer--xs);
  border: 1px solid var(--warning);
  border-radius: var(--pf-t--global--border--radius--small);
  color: var(--warning);
  font-size: var(--pf-t--global--font--size--xs);
  font-weight: var(--pf-t--global--font--weight--body--bold);
  letter-spacing: 0.04em; text-transform: uppercase; vertical-align: middle;
}
/* The `disputed` flag lives in the fixed-width label cell; let it wrap under the
   label rather than overflow into the value column (the 160px key column is
   narrower than "HEADQUARTERS" + the flag at desktop). */
.prm-conflict .prm-k { flex-wrap: wrap; }
.prm-conflict .prm-v { display: flex; flex-direction: column; gap: var(--pf-t--global--spacer--xs); }
.prm-alt { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--pf-t--global--spacer--sm); }
.prm-alt-v { font-weight: var(--pf-t--global--font--weight--body--bold); }
.prm-alt-s { font-size: var(--pf-t--global--font--size--xs); color: var(--pf-t--global--text--color--subtle); }
.prm-alt-s::before { content: "\00b7 "; }
.prm-alt + .prm-alt { padding-top: var(--pf-t--global--spacer--xs); border-top: 1px dashed var(--pf-t--global--border--color--default); }

/* ── Connections — relationship rows (ported, PF-calibrated) ──────────────── */
.ent-rel { margin-top: var(--pf-t--global--spacer--sm); }
.rel-group { display: flex; flex-direction: column; gap: var(--pf-t--global--spacer--sm); }
.rel-group + .rel-group { margin-top: var(--pf-t--global--spacer--lg); padding-top: var(--pf-t--global--spacer--lg); border-top: 1px dashed var(--pf-t--global--border--color--default); }
.rel-grp-h {
  font-size: var(--pf-t--global--font--size--body--sm);
  font-weight: var(--pf-t--global--font--weight--body--bold);
  text-transform: uppercase; letter-spacing: 0.05em;
  color: var(--pf-t--global--text--color--subtle);
  margin: 0 0 var(--pf-t--global--spacer--xs);
  display: flex; align-items: center; gap: var(--pf-t--global--spacer--sm);
}
.rel-grp-n {
  font-weight: var(--pf-t--global--font--weight--body--default);
  color: var(--pf-t--global--text--color--regular);
  padding: 0 6px;
  border: 1px solid var(--pf-t--global--border--color--default);
  border-radius: var(--pf-t--global--border--radius--pill);
}
.rel-rows { display: flex; flex-direction: column; gap: var(--pf-t--global--spacer--sm); }
.rel-row {
  display: flex; align-items: center; gap: var(--pf-t--global--spacer--md);
  padding: var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--md);
  border: 1px solid var(--pf-t--global--border--color--default);
  border-inline-start: 3px solid var(--et-person);
  border-radius: var(--pf-t--global--border--radius--small);
  background: var(--pf-t--global--background--color--secondary--default);
  text-decoration: none; cursor: pointer;
  transition: border-color 120ms ease, background 120ms ease, transform 120ms ease;
}
.rel-row.org, .rel-row.organization, .rel-row.company { border-inline-start-color: var(--et-company); }
.rel-row.outlet { border-inline-start-color: var(--et-outlet); }
.rel-row.author { border-inline-start-color: var(--et-author); }
.rel-row.place { border-inline-start-color: var(--et-place); }
.rel-row.crime { border-inline-start-color: var(--et-crime); }
.rel-row.materiel { border-inline-start-color: var(--et-materiel); }
.rel-row:hover {
  border-color: var(--pf-t--global--border--color--brand--default);
  background: var(--pf-t--global--background--color--floating--default);
  transform: translateX(2px);
}
.rel-av-wrap {
  flex: none; position: relative; width: 40px; height: 40px; overflow: hidden;
  border-radius: var(--pf-t--global--border--radius--small);
  display: flex; align-items: center; justify-content: center;
  background: var(--pf-t--global--background--color--secondary--default);
  border: 1px solid var(--pf-t--global--border--color--default);
}
.rel-av-wrap.person { background: color-mix(in oklch, var(--et-person) 20%, var(--pf-t--global--background--color--secondary--default)); }
.rel-av-wrap.org, .rel-av-wrap.organization { background: color-mix(in oklch, var(--et-company) 20%, var(--pf-t--global--background--color--secondary--default)); }
.rel-av-wrap.outlet { background: color-mix(in oklch, var(--et-outlet) 20%, var(--pf-t--global--background--color--secondary--default)); }
.rel-av-wrap.author { background: color-mix(in oklch, var(--et-author) 20%, var(--pf-t--global--background--color--secondary--default)); }
.rel-mono {
  display: none; font-weight: var(--pf-t--global--font--weight--body--bold);
  font-size: var(--pf-t--global--font--size--body--default);
  color: var(--pf-t--global--text--color--regular);
}
.rel-av-wrap.noimg .rel-mono { display: block; }
.rel-row .rel-av { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.rel-row .rel-av.contain { object-fit: contain; background: #d4d7dd; padding: 2px; }
.rel-body { display: flex; flex-direction: column; gap: 1px; min-width: 0; flex: 1; }
.rel-name {
  font-size: var(--pf-t--global--font--size--body--default);
  font-weight: var(--pf-t--global--font--weight--body--bold);
  color: var(--pf-t--global--text--color--regular);
  letter-spacing: -0.01em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.rel-row .rt {
  font-size: var(--pf-t--global--font--size--xs);
  text-transform: uppercase; letter-spacing: 0.05em;
  color: var(--pf-t--global--text--color--subtle); flex: none;
}
.rel-row .rt.muted { color: var(--pf-t--global--text--color--disabled); }
.rel-row .rg { color: var(--pf-t--global--text--color--disabled); flex: none; }
.rel-row:hover .rg { color: var(--pf-t--global--text--color--brand--default); }
.rel-ev {
  font-size: var(--pf-t--global--font--size--body--default);
  line-height: var(--pf-t--global--font--line-height--body);
  color: var(--pf-t--global--text--color--regular);
  margin-top: var(--pf-t--global--spacer--xs);
  padding-inline-start: var(--pf-t--global--spacer--lg);
  border-inline-start: 2px solid var(--pf-t--global--border--color--brand--default);
}
.rel-ev .rel-src {
  font-size: var(--pf-t--global--font--size--xs);
  text-transform: uppercase; letter-spacing: 0.07em;
  color: var(--pf-t--global--text--color--disabled);
  margin-inline-start: var(--pf-t--global--spacer--sm); white-space: nowrap;
}

/* ── Public accounts — chip row (ported, PF-calibrated) ───────────────────── */
.ent-accounts { display: flex; flex-wrap: wrap; align-items: center; gap: var(--pf-t--global--spacer--sm); margin-top: var(--pf-t--global--spacer--sm); }
.acc-lbl {
  font-size: var(--pf-t--global--font--size--xs);
  font-weight: var(--pf-t--global--font--weight--body--bold);
  text-transform: uppercase; letter-spacing: 0.08em;
  color: var(--pf-t--global--text--color--disabled);
}
.acc {
  display: inline-flex; align-items: center; gap: var(--pf-t--global--spacer--sm);
  padding: var(--pf-t--global--spacer--xs) var(--pf-t--global--spacer--md);
  border: 1px solid var(--pf-t--global--border--color--default);
  border-radius: var(--pf-t--global--border--radius--pill);
  background: var(--pf-t--global--background--color--secondary--default);
  font-size: var(--pf-t--global--font--size--xs);
  color: var(--pf-t--global--text--color--subtle);
  text-decoration: none; max-width: 100%; min-width: 0; overflow: hidden;
}
.acc:hover { border-color: var(--pf-t--global--border--color--hover); color: var(--pf-t--global--text--color--regular); }
.acc svg { color: var(--pf-t--global--text--color--disabled); flex: none; }
/* Account-chip icon badge (brand_icon macro): a text-fallback badge, or an SVG
   that resets to currentColor. */
.acc-icon {
  display: inline-flex; align-items: center; justify-content: center;
  width: 20px; height: 20px; flex-shrink: 0;
  border-radius: var(--pf-t--global--border--radius--small);
  background: var(--pf-t--global--background--color--floating--default);
  color: var(--pf-t--global--text--color--subtle);
  font-size: var(--pf-t--global--font--size--xs);
  font-weight: var(--pf-t--global--font--weight--body--bold);
  font-style: normal; text-transform: lowercase;
}
.acc-icon.acc-icon-svg { background: transparent; color: var(--pf-t--global--text--color--subtle); }
.acc-icon.acc-icon-svg svg { width: 18px; height: 18px; display: block; }

/* ── Family & close relations — the ego graph (person cards) ──────────────────
   Person cards render `person_family_graph.html`: a Cytoscape ego-graph in
   `.famg__canvas` (which MUST carry an explicit height or the graph collapses to
   0px) with a text fallback that stays until the graph draws. */
.famg { position: relative; }
.famg__canvas {
  width: 100%; height: 420px;
  border: 1px solid var(--pf-t--global--border--color--default);
  border-radius: var(--pf-t--global--border--radius--medium);
  background: var(--pf-t--global--background--color--secondary--default);
}
.famg__fallback { margin-top: var(--pf-t--global--spacer--sm); }
.famg__frow {
  margin: 0 0 var(--pf-t--global--spacer--xs);
  display: flex; gap: var(--pf-t--global--spacer--xs) var(--pf-t--global--spacer--sm);
  flex-wrap: wrap; align-items: baseline;
  font-size: var(--pf-t--global--font--size--body--default);
}
.famg__flabel {
  font-size: var(--pf-t--global--font--size--body--sm);
  font-weight: var(--pf-t--global--font--weight--body--bold);
  letter-spacing: 0.03em; text-transform: uppercase;
  color: var(--pf-t--global--text--color--subtle); flex: 0 0 auto;
}
.famg__fnames { color: var(--pf-t--global--text--color--regular); overflow-wrap: anywhere; min-width: 0; }
.famg__fnames a { color: var(--pf-t--global--text--color--brand--default); }
.famg__fperiod { color: var(--pf-t--global--text--color--subtle); font-size: var(--pf-t--global--font--size--xs); }

/* ── Report contributions (project context) ──────────────────────────────── */
.dcard-contrib { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--pf-t--global--spacer--md); }
.dcard-contrib__row {
  padding: var(--pf-t--global--spacer--md);
  border: 1px solid var(--pf-t--global--border--color--default);
  border-radius: var(--pf-t--global--border--radius--small);
  background: var(--pf-t--global--background--color--secondary--default);
}
.dcard-contrib__head { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--pf-t--global--spacer--sm); margin-bottom: var(--pf-t--global--spacer--sm); }
.dcard .dcard-contrib__title { font-size: var(--pf-t--global--font--size--body--default); font-weight: var(--pf-t--global--font--weight--body--bold); color: var(--pf-t--global--text--color--regular); text-decoration: none; }
.dcard .dcard-contrib__title:hover { color: var(--pf-t--global--text--color--brand--default); }
.dcard-contrib__outlet, .dcard-contrib__date { font-size: var(--pf-t--global--font--size--xs); color: var(--pf-t--global--text--color--subtle); }
.dcard-contrib__role { font-size: var(--pf-t--global--font--size--body--default); color: var(--pf-t--global--text--color--regular); margin: var(--pf-t--global--spacer--xs) 0; }
.dcard-contrib__ctx { font-size: var(--pf-t--global--font--size--body--default); color: var(--pf-t--global--text--color--regular); line-height: var(--pf-t--global--font--line-height--body); margin: var(--pf-t--global--spacer--xs) 0; }
.dcard-contrib__meta { font-size: var(--pf-t--global--font--size--xs); color: var(--pf-t--global--text--color--disabled); margin: var(--pf-t--global--spacer--xs) 0 0; }

/* ── Appears in Reports — occurrences ────────────────────────────────────── */
.dcard-occ { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--pf-t--global--spacer--md); }
.dcard-occ__row { padding-bottom: var(--pf-t--global--spacer--md); border-bottom: 1px dashed var(--pf-t--global--border--color--default); }
.dcard-occ__row:last-child { border-bottom: 0; }
.dcard .dcard-occ__title { font-size: var(--pf-t--global--font--size--body--default); font-weight: var(--pf-t--global--font--weight--body--bold); color: var(--pf-t--global--text--color--regular); text-decoration: none; }
.dcard .dcard-occ__title:hover { color: var(--pf-t--global--text--color--brand--default); }
.dcard-occ__meta { display: flex; flex-wrap: wrap; gap: var(--pf-t--global--spacer--sm); margin: var(--pf-t--global--spacer--xs) 0 0; font-size: var(--pf-t--global--font--size--xs); color: var(--pf-t--global--text--color--subtle); }

/* ── Source-backed identifiers — PatternFly Table, PF-calibrated ──────────── */
/* Mono is applied HERE, and only here: the identifier VALUE is the one thing a
   machine reads back. Every column label is Geist sans, tracked. */
.dtbl { display: block; }
.dtbl-toolbar { padding: 0 0 var(--pf-t--global--spacer--sm); }
.dtbl-tbc { display: flex; align-items: center; gap: var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--md); flex-wrap: wrap; }
.dtbl-search__in {
  min-width: 14rem; max-width: 22rem; font: inherit;
  font-size: var(--pf-t--global--font--size--body--default);
  background: var(--pf-t--global--background--color--secondary--default);
  color: var(--pf-t--global--text--color--regular);
  border: 1px solid var(--pf-t--global--border--color--default);
  border-radius: var(--pf-t--global--border--radius--small);
  padding: var(--pf-t--global--spacer--xs) var(--pf-t--global--spacer--sm);
}
.dtbl-search__in:focus-visible { outline: 2px solid var(--pf-t--global--color--brand--default); outline-offset: 1px; }
.dtbl-count { margin-inline-start: auto; font-size: var(--pf-t--global--font--size--xs); color: var(--pf-t--global--text--color--subtle); }
.dtbl-empty { margin: var(--pf-t--global--spacer--md) 2px; font-size: var(--pf-t--global--font--size--body--default); color: var(--pf-t--global--text--color--subtle); }

.idl-table {
  --pf-v6-c-table--BackgroundColor: transparent;
  --pf-v6-c-table--BorderColor: var(--pf-t--global--border--color--default);
  --pf-v6-c-table--cell--Color: var(--pf-t--global--text--color--regular);
  --pf-v6-c-table__thead--cell--Color: var(--pf-t--global--text--color--subtle);
  color: var(--pf-t--global--text--color--regular); width: 100%;
}
/* LABEL role — column header + the row's Type (Geist sans, tracked, tertiary) */
.idl-table thead th,
.idl-table thead th .pf-v6-c-table__text,
.idl-table .idl-sys {
  font-family: var(--pf-t--global--font--family--body);
  font-size: var(--pf-t--global--font--size--body--sm);
  font-weight: var(--pf-t--global--font--weight--body--bold);
  letter-spacing: 0.04em; text-transform: uppercase;
  color: var(--pf-t--global--text--color--subtle);
}
.idl-table tbody th, .idl-table tbody td { border-top: 1px solid var(--pf-t--global--border--color--default); vertical-align: baseline; }
.idl-table tbody th, .idl-table tbody td, .idl-table thead th { text-align: left; }
.idl-table .pf-v6-c-table__button { color: inherit; background: none; border: 0; cursor: pointer; font: inherit; display: inline-flex; align-items: center; gap: 6px; }
.idl-table .pf-v6-c-table__button:focus-visible { outline: 2px solid var(--pf-t--global--color--brand--default); outline-offset: 2px; }
.idl-table th.pf-m-selected .pf-v6-c-table__sort-indicator { color: var(--pf-t--global--text--color--brand--default); }
.idl-table .pf-v6-c-table__toggle-icon { display: inline-block; transition: transform 0.12s; color: var(--pf-t--global--text--color--subtle); }
.idl-table [aria-expanded="true"] .pf-v6-c-table__toggle-icon { transform: rotate(90deg); }
/* DATA role — the identifier value: the ONE monospace element on the card */
.idl-table .idl-id, .idl-detail dd.idl-id {
  font-family: var(--pf-t--global--font--family--mono);
  font-size: var(--pf-t--global--font--size--body--default);
  font-weight: var(--pf-t--global--font--weight--body--default);
  letter-spacing: normal; text-transform: none;
  color: var(--pf-t--global--text--color--regular);
  font-variant-numeric: tabular-nums; overflow-wrap: anywhere; min-width: 0;
}
.idl-none { color: var(--pf-t--global--text--color--disabled); }
.idl-table .idl-copy, .idl-table .idl-open {
  font-family: var(--pf-t--global--font--family--body);
  font-size: var(--pf-t--global--font--size--xs);
  font-weight: var(--pf-t--global--font--weight--body--bold);
  letter-spacing: 0.04em; text-transform: uppercase; text-decoration: none;
  color: var(--pf-t--global--text--color--subtle);
  background: none; border: 0; cursor: pointer; padding: 0 4px;
}
.idl-table .idl-copy:hover, .idl-table .idl-open:hover { color: var(--pf-t--global--text--color--brand--default); }
.idl-table .idl-copy:focus-visible, .idl-table .idl-open:focus-visible { outline: 2px solid var(--pf-t--global--color--brand--default); outline-offset: 2px; border-radius: 3px; }
.idl-table .idl-copy.is-done { color: var(--success); }
.idl-table .idl-copy.is-failed { color: var(--warning); }
.idl-detail { display: grid; grid-template-columns: max-content 1fr; gap: 4px var(--pf-t--global--spacer--md); margin: 2px 0 4px; font-size: var(--pf-t--global--font--size--xs); }
.idl-detail dt {
  font-size: var(--pf-t--global--font--size--body--sm);
  font-weight: var(--pf-t--global--font--weight--body--bold);
  text-transform: uppercase; letter-spacing: 0.03em;
  color: var(--pf-t--global--text--color--subtle);
}
.idl-detail dd { margin: 0; overflow-wrap: anywhere; color: var(--pf-t--global--text--color--regular); }
.idl-detail dd a { color: var(--pf-t--global--text--color--brand--default); }
.idl-sr { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }

/* ══ Project-private working layer (project context only) ═══════════════════ */
.pcx {
  margin: 0 0 var(--pf-t--global--spacer--lg);
  padding: var(--pf-t--global--spacer--md) var(--pf-t--global--spacer--lg) var(--pf-t--global--spacer--lg);
  border: 1px solid var(--pf-t--global--border--color--default);
  border-inline-start: 3px solid var(--pf-t--global--color--brand--default);
  border-radius: var(--pf-t--global--border--radius--medium);
  background: color-mix(in oklch, var(--pf-t--global--color--brand--default) 5%, transparent);
}
.pcx__head { display: flex; align-items: baseline; gap: var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--md); flex-wrap: wrap; }
.dcard .pcx__h { margin: 0; font-family: var(--pf-t--global--font--family--heading); font-size: var(--pf-t--global--font--size--heading--h3); font-weight: var(--pf-t--global--font--weight--body--bold); color: var(--pf-t--global--text--color--regular); }
.pcx__badge {
  font-size: var(--pf-t--global--font--size--xs);
  font-weight: var(--pf-t--global--font--weight--body--bold);
  letter-spacing: 0.04em; text-transform: uppercase;
  color: var(--pf-t--global--text--color--brand--default);
  background: color-mix(in oklch, var(--pf-t--global--color--brand--default) 16%, transparent);
  padding: 2px var(--pf-t--global--spacer--sm); border-radius: var(--pf-t--global--border--radius--pill); white-space: nowrap;
}
.pcx__lede { margin: var(--pf-t--global--spacer--xs) 0 var(--pf-t--global--spacer--md); font-size: var(--pf-t--global--font--size--body--default); line-height: var(--pf-t--global--font--line-height--body); color: var(--pf-t--global--text--color--subtle); max-width: 60ch; }
.pcx__workspace { display: flex; flex-direction: column; gap: var(--pf-t--global--spacer--sm); }
.pcx__err { margin: var(--pf-t--global--spacer--sm) 0 0; font-size: var(--pf-t--global--font--size--xs); color: var(--danger); }

/* Private value rows — the owner's accepted values with provenance, actions and
   history (label is sans, tracked; mono stays reserved for identifiers). */
.pcx__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--pf-t--global--spacer--sm); }
.pcx__row {
  display: flex; justify-content: space-between; align-items: baseline;
  gap: var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--md); flex-wrap: wrap;
  padding: var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--md);
  border-radius: var(--pf-t--global--border--radius--small);
  background: var(--pf-t--global--background--color--primary--default);
  border: 1px solid var(--pf-t--global--border--color--default);
}
.pcx__body { display: flex; gap: var(--pf-t--global--spacer--sm); align-items: baseline; flex-wrap: wrap; min-width: 0; }
.pcx__label { font-size: var(--pf-t--global--font--size--body--sm); font-weight: var(--pf-t--global--font--weight--body--bold); letter-spacing: 0.03em; text-transform: uppercase; color: var(--pf-t--global--text--color--subtle); }
.pcx__value { font-size: var(--pf-t--global--font--size--body--default); color: var(--pf-t--global--text--color--regular); overflow-wrap: anywhere; }
.pcx__value a { color: var(--pf-t--global--text--color--brand--default); }
.pcx__meta { display: flex; align-items: center; gap: var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--md); flex-wrap: wrap; }
.pcx__prov { font-size: var(--pf-t--global--font--size--xs); color: var(--pf-t--global--text--color--disabled); letter-spacing: 0.02em; }
.pcx__from { font-size: var(--pf-t--global--font--size--xs); color: var(--pf-t--global--text--color--disabled); font-style: italic; }
.pcx__empty { margin: var(--pf-t--global--spacer--sm) 0 0; font-size: var(--pf-t--global--font--size--xs); color: var(--pf-t--global--text--color--disabled); }
.pcx__add { margin-top: var(--pf-t--global--spacer--md); display: flex; flex-direction: column; gap: var(--pf-t--global--spacer--sm); align-items: flex-start; }
.pcx__acts { display: inline-flex; gap: var(--pf-t--global--spacer--xs); }
.pcx__btn, .pcx__addbtn {
  font: inherit; font-family: var(--pf-t--global--font--family--body);
  font-size: var(--pf-t--global--font--size--xs); cursor: pointer;
  padding: var(--pf-t--global--spacer--xs) var(--pf-t--global--spacer--sm);
  border-radius: var(--pf-t--global--border--radius--small);
  border: 1px solid var(--pf-t--global--border--color--hover);
  background: transparent; color: var(--pf-t--global--text--color--regular);
}
.pcx__btn:hover, .pcx__addbtn:hover { color: var(--pf-t--global--text--color--regular); border-color: var(--pf-t--global--border--color--brand--default); }
.pcx__btn--pri { background: var(--pf-t--global--color--brand--default); border-color: var(--pf-t--global--color--brand--default); color: var(--pf-t--global--text--color--on-brand--default); font-weight: var(--pf-t--global--font--weight--body--bold); }
.pcx__row.is-removed .pcx__value { text-decoration: line-through; color: var(--pf-t--global--text--color--disabled); }
.pcx__status { font-size: var(--pf-t--global--font--size--xs); font-weight: var(--pf-t--global--font--weight--body--bold); letter-spacing: 0.03em; text-transform: uppercase; padding: 1px var(--pf-t--global--spacer--xs); border-radius: var(--pf-t--global--border--radius--small); }
.pcx__status--removed { color: var(--danger); border: 1px solid var(--danger); }
.pcx__hist { margin-top: var(--pf-t--global--spacer--xs); }
.pcx__hist-sum { cursor: pointer; font-size: var(--pf-t--global--font--size--xs); letter-spacing: 0.02em; color: var(--pf-t--global--text--color--subtle); }
.pcx__hist-list { list-style: none; margin: var(--pf-t--global--spacer--xs) 0 0; padding: 0 0 0 var(--pf-t--global--spacer--sm); display: flex; flex-direction: column; gap: 3px; border-left: 2px solid var(--pf-t--global--border--color--hover); }
.pcx__hist-ev { font-size: var(--pf-t--global--font--size--xs); color: var(--pf-t--global--text--color--disabled); }
.pcx__hist-act { color: var(--pf-t--global--text--color--regular); font-weight: var(--pf-t--global--font--weight--body--bold); }
.pcx__in {
  font: inherit; font-family: var(--pf-t--global--font--family--body);
  font-size: var(--pf-t--global--font--size--body--default);
  padding: var(--pf-t--global--spacer--xs) var(--pf-t--global--spacer--sm);
  border-radius: var(--pf-t--global--border--radius--small);
  border: 1px solid var(--pf-t--global--border--color--hover);
  background: var(--pf-t--global--background--color--primary--default);
  color: var(--pf-t--global--text--color--regular);
}

/* Candidate source records — the queue's rules live in the Phase 3 block at the
   end of this file, next to the template that emits them. The earlier block
   here styled a DIFFERENT markup shape (`__accepted` / `__arow` / `__cand` /
   `__fields`) for a partial that was never deployed; no template in the tree
   emitted a single one of those classes. Two rule sets for one class family
   is how a component starts rendering half in each. */

/* Add-to-Project panel */
.dsr-proj__ready { position: relative; }
.dsr-proj__panel {
  margin-top: var(--pf-t--global--spacer--md); display: flex; flex-direction: column; gap: var(--pf-t--global--spacer--sm);
  padding: var(--pf-t--global--spacer--md);
  border: 1px solid var(--pf-t--global--border--color--default);
  border-radius: var(--pf-t--global--border--radius--medium);
  background: var(--pf-t--global--background--color--secondary--default); max-width: 420px;
}
.dsr-proj__status { margin: 0; font-size: var(--pf-t--global--font--size--body--default); color: var(--pf-t--global--text--color--subtle); }
.dsr-proj__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.dsr-proj__row { display: flex; gap: var(--pf-t--global--spacer--md); align-items: baseline; padding: var(--pf-t--global--spacer--xs) 0; cursor: pointer; }
.dsr-proj__name { flex: 1 1 auto; min-width: 0; overflow-wrap: anywhere; font-size: var(--pf-t--global--font--size--body--default); }
.dsr-proj__label { display: block; font-size: var(--pf-t--global--font--size--xs); color: var(--pf-t--global--text--color--subtle); }
.dsr-proj__createrow { display: flex; gap: var(--pf-t--global--spacer--sm); margin-top: var(--pf-t--global--spacer--xs); }
.dsr-proj__in {
  font: inherit; font-size: var(--pf-t--global--font--size--body--default);
  padding: var(--pf-t--global--spacer--xs) var(--pf-t--global--spacer--sm);
  border-radius: var(--pf-t--global--border--radius--small);
  border: 1px solid var(--pf-t--global--border--color--default);
  background: var(--pf-t--global--background--color--primary--default);
  color: var(--pf-t--global--text--color--regular); flex: 1 1 auto;
}
.dsr-proj__err { margin: 0; font-size: var(--pf-t--global--font--size--xs); color: var(--danger); }

/* Drawer forms (note / typed value) — content only; Unpoly owns the overlay */
.pcx-noteform, .pcx-fieldform { display: flex; flex-direction: column; gap: var(--pf-t--global--spacer--sm); padding: 4px 2px; min-width: min(92vw, 30rem); }
.pcx-noteform__h, .pcx-fieldform__h { margin: 0; font-family: var(--pf-t--global--font--family--heading); font-size: var(--pf-t--global--font--size--heading--h3); font-weight: var(--pf-t--global--font--weight--body--bold); color: var(--pf-t--global--text--color--regular); }
.pcx-noteform__lede, .pcx-fieldform__lede { margin: 0; font-size: var(--pf-t--global--font--size--body--default); line-height: var(--pf-t--global--font--line-height--body); color: var(--pf-t--global--text--color--subtle); max-width: 48ch; }
.pcx-noteform__label, .pcx-fieldform__label { font-size: var(--pf-t--global--font--size--body--sm); font-weight: var(--pf-t--global--font--weight--body--bold); letter-spacing: 0.03em; text-transform: uppercase; color: var(--pf-t--global--text--color--subtle); }
.pcx-fieldform__fixed { margin: 0; font-size: var(--pf-t--global--font--size--body--default); color: var(--pf-t--global--text--color--regular); }
.pcx-fieldform__valuewrap { display: flex; flex-direction: column; gap: var(--pf-t--global--spacer--xs); }
.pcx-noteform__ta, .pcx-fieldform__sel, .pcx-fieldform__in {
  font: inherit; font-size: var(--pf-t--global--font--size--body--default); line-height: var(--pf-t--global--font--line-height--body);
  background: var(--pf-t--global--background--color--primary--default);
  color: var(--pf-t--global--text--color--regular);
  border: 1px solid var(--pf-t--global--border--color--default);
  border-radius: var(--pf-t--global--border--radius--small);
  padding: var(--pf-t--global--spacer--sm);
}
.pcx-noteform__ta { resize: vertical; }
.pcx-noteform__ta:focus-visible, .pcx-fieldform__sel:focus-visible, .pcx-fieldform__in:focus-visible { outline: 2px solid var(--pf-t--global--color--brand--default); outline-offset: 1px; }
.pcx-noteform__err:empty, .pcx-fieldform__err:empty { display: none; }
.pcx-noteform__err, .pcx-fieldform__err { margin: 0; font-size: var(--pf-t--global--font--size--xs); color: var(--danger); }
.pcx-noteform__actions, .pcx-fieldform__actions { display: flex; gap: var(--pf-t--global--spacer--sm); align-items: center; margin-top: 4px; }

/* ── Responsive ──────────────────────────────────────────────────────────── */
@media (max-width: 720px) {
  .dcard { padding: var(--pf-t--global--spacer--lg) var(--pf-t--global--spacer--md) var(--pf-t--global--spacer--2xl); }
  .dcard-hero.pf-v6-l-split { gap: var(--pf-t--global--spacer--lg); }
  .dcard-hero__media .ent-av { width: 180px; min-height: 180px; max-width: 50vw; }
  .prm { grid-template-columns: 1fr; gap: 2px; }
}
@media (max-width: 640px) {
  .pcx-page { padding-inline: var(--pf-t--global--spacer--sm); }
  .famg__canvas { height: 300px; }
  .dsr-proj__createrow { flex-direction: column; }
  /* Narrow identifiers table — PatternFly folds columns to stacked label/value */
  .idl-table, .idl-table tbody, .idl-table tr { display: block; width: 100%; }
  .idl-table thead { display: none; }
  .idl-table tbody td, .idl-table tbody th { display: flex; justify-content: space-between; gap: var(--pf-t--global--spacer--md); border: 0; padding: 3px 0; }
  .idl-table tbody td::before, .idl-table tbody th::before {
    content: attr(data-label);
    font-size: var(--pf-t--global--font--size--body--sm); font-weight: var(--pf-t--global--font--weight--body--bold);
    text-transform: uppercase; color: var(--pf-t--global--text--color--subtle);
  }
  .dtbl-group { display: block; border-top: 1px solid var(--pf-t--global--border--color--default); padding: var(--pf-t--global--spacer--sm) 0; }
  .dtbl-count { margin-inline-start: 0; }
}


/* ══════════════════════════════════════════════════════════════════════════
   G2b — COMPACT REPORT CARD CONTEXT.
   The HTML Report's entity cards (.ent / .stmt / .sref / mention chips / the
   statement, source-ref and article widgets) are the SAME shared Card, rendered
   compactly. This section is a scoped VARIANT of the recipes above — it reuses
   the same PatternFly token grammar and the shared _ent_macros components
   (.prm/.chip/.rel/.idl/.acc), only tightening density for the article-
   embedded context. Ported from report-bureau.css (deleted) and re-tokenized:
   every font-size and family reads a PatternFly global token; colours resolve
   through brand-tokens.css; no homegrown Bureau font-scale or serif remains.
   ══════════════════════════════════════════════════════════════════════════ */

/* Dedup compact overrides — the shared .prm grid is calibrated for the expanded
   .dcard (160px key column, 36px rows); the article-embedded card is denser. */
.ent .prm, .stmt .prm {
  grid-template-columns: 110px 1fr auto;
  gap: 12px; min-height: 27px; padding: 2px 0;
}

/* Linked-entity orientation — hover any reference to an entity and all
   its appearances light up together (prose marks, its card, its graph
   node), so the eye traces one entity across the whole report. */
.ent-linked { outline: 1.5px solid color-mix(in oklch, var(--brand-400, #f0b85a) 55%, transparent);
  outline-offset: 1px; border-radius: 4px; transition: outline-color .1s ease; }

/* ════ COMPACT ENTITY CARD ════ */
.ent { position: relative; background: var(--bg-1); border: 1px solid var(--border-subtle); border-radius: 6px; margin-bottom: 12px; transition: border-color 130ms ease, box-shadow 130ms ease, opacity 200ms ease; }
.ent:hover { border-color: var(--border-default); }
.ent.dragging { opacity: 0.4; }
.ent.selected { border-color: color-mix(in oklch,var(--brand-500) 50%,transparent); box-shadow: inset 0 0 0 1px color-mix(in oklch,var(--brand-500) 30%,transparent); }
.ent.flash { animation: cflash 640ms ease; }

/* alpha879 — per-type card backgrounds + left accent, so cards of
   different entity types are visually distinct and don't blend
   (founder). Tints mirror the graph palette (blue person / red org /
   amber outlet / green author / teal place). Subtle wash (no gray) +
   a 3px left accent bar. */
/* alpha1180 — card type colours now reference the SYSTEM --et-* tokens (= GRAPH_COLOR),
   not hardcoded hex, so the card / graph / mention-highlight colour is ONE automatic system
   (founder: «цвета системные, не выбираются»; org was hardcoded #e0564f red — now white via
   --et-company). place/materiel fall back to the graph hue until they get their own token. */
.ent { border-left: 3px solid transparent; }
.ent.person { background: color-mix(in oklch, var(--et-person) 6%, var(--bg-1));
  border-left-color: color-mix(in oklch, var(--et-person) 62%, transparent); }
.ent.org { background: color-mix(in oklch, var(--et-company) 8%, var(--bg-1));
  border-left-color: color-mix(in oklch, var(--et-company) 62%, transparent); }
.ent.outlet { background: color-mix(in oklch, var(--et-outlet) 7%, var(--bg-1));
  border-left-color: color-mix(in oklch, var(--et-outlet) 62%, transparent); }
.ent.author { background: color-mix(in oklch, var(--et-author) 6%, var(--bg-1));
  border-left-color: color-mix(in oklch, var(--et-author) 62%, transparent); }
.ent.place { background: color-mix(in oklch, var(--et-place, #22d3ee) 6%, var(--bg-1));
  border-left-color: color-mix(in oklch, var(--et-place, #22d3ee) 62%, transparent); }
.ent.materiel { background: color-mix(in oklch, var(--et-materiel, #c9a227) 7%, var(--bg-1));
  border-left-color: color-mix(in oklch, var(--et-materiel, #c9a227) 64%, transparent); }
/* crime card — type-tinted plate + left border, same axis as place/materiel
   (founder 2026-06-12: crime must read as typed, not the neutral default). */
.ent.crime { background: color-mix(in oklch, var(--et-crime, #ff5b5b) 6%, var(--bg-1));
  border-left-color: color-mix(in oklch, var(--et-crime, #ff5b5b) 62%, transparent); }

/* alpha883 — materiel (weapon/vehicle) card: type dot + tracking link row. */
.etd.materiel { background: var(--et-materiel); }  /* alpha1184 — token, =graph */
.mm-track { display: flex; flex-wrap: wrap; gap: 12px; align-items: center;
  margin: 4px 0 2px; font-size: var(--pf-t--global--font--size--xs); }

/* alpha881 — PLACE / geo card: embedded Wikimedia static map + coat-of-arms. */
.etd.place { background: var(--et-place); }  /* alpha1184 — token, =graph */
.etd.crime { background: var(--et-crime); }  /* type-chip dot = graph colour */

.ent-head { display: flex; gap: 24px; padding: 24px 24px; align-items: flex-start; }
/* alpha911 — photos inserted AS-IS, not hard-cropped (founder 2026-06-03):
   the image keeps its NATURAL aspect (object-fit: contain), width-fixed +
   height-auto, so a portrait headshot / a wide logo / a square all sit
   naturally in a frame that grows to fit — nothing cut, nothing overlapping.
   alpha909 enlarged the photos; this un-crops them. Wikimedia-sourced. */
.ent-av { position: relative; width: 112px; min-height: 100px; border-radius: 6px; flex: none; overflow: hidden; background: var(--bg-2); border: 1px solid var(--border-default); display: flex; align-items: center; justify-content: center; }
.ent-av img { width: 100%; height: auto; max-height: 184px; object-fit: contain; display: block; }
/* Org / outlet logos are usually wide marks, not square portraits — give them
   a wider frame, trim the padding and lift the cap so the logo reads BIGGER,
   while object-fit:contain keeps the whole mark visible (never cropped).
   Founder 2026-06-12: logos were sitting small, boxed inside a square. */
.ent.org .ent-av, .ent.outlet .ent-av { width: 156px; }
.ent.org .ent-av img, .ent.outlet .ent-av img { padding: 8px; max-height: 144px; }
.ent-av.noimg { height: 100px; }
.ent-av.noimg img { display: none; }
.ent-av-fb { display: none; align-items: center; justify-content: center; font-family: var(--pf-t--global--font--family--body); font-weight: 600; font-size: var(--pf-t--global--font--size--2xl); color: var(--text-secondary); }
.ent-av.noimg .ent-av-fb { display: flex; }
.ent.author .ent-av { background: linear-gradient(135deg, color-mix(in oklch,var(--et-author) 32%,var(--bg-2)), var(--bg-2)); }
.ent.author .ent-av-fb { color: var(--et-author); }
.ent-cam { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; background: color-mix(in oklch,var(--bg-0) 58%,transparent); color: #fff; opacity: 0; transition: opacity 110ms ease; cursor: pointer; border: 0; }
.ent.person .ent-av:hover .ent-cam { opacity: 1; }

.ent-idc { flex: 1; min-width: 0; }
.ent-nameline { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ent-name { font-size: var(--pf-t--global--font--size--body--default); font-weight: 600; color: var(--text-primary); letter-spacing: -0.01em; }
.ent-tag { font-size: var(--pf-t--global--font--size--xs); color: var(--text-tertiary); margin-top: 2px; }
.ent-tag .mono { color: var(--text-disabled); font-size: var(--pf-t--global--font--size--xs); }

/* action cluster */
.acts { display: flex; gap: 2px; flex: none; opacity: 0; transition: opacity 110ms ease; }
.ent:hover .acts, .stmt:hover .acts, .acts.keep { opacity: 1; }
/* alpha733 — was `transition: all` (compositor-unfriendly per Vercel
   guideline). Listed the properties that actually change on :hover. */
.iact { width: 23px; height: 23px; display: flex; align-items: center; justify-content: center; border-radius: 4px; border: 1px solid var(--border-default); background: var(--bg-2); color: var(--text-tertiary); cursor: pointer; transition: color 110ms ease, background-color 110ms ease, border-color 110ms ease; }
.iact:hover { color: var(--text-primary); background: var(--bg-3); }
.iact.a-attach:hover { color: var(--brand-500); border-color: color-mix(in oklch,var(--brand-500) 45%,transparent); }
.iact.a-verify:hover { color: var(--info); border-color: color-mix(in oklch,var(--info) 45%,transparent); }
.iact.a-note:hover { color: var(--warning); border-color: color-mix(in oklch,var(--warning) 45%,transparent); }
.iact.a-dismiss:hover { color: var(--danger); border-color: color-mix(in oklch,var(--danger) 45%,transparent); }
.iact.on { color: var(--warning); border-color: color-mix(in oklch,var(--warning) 40%,transparent); background: color-mix(in oklch,var(--warning) 10%,var(--bg-2)); }
.iact.done { color: var(--success); border-color: color-mix(in oklch,var(--success) 35%,transparent); background: color-mix(in oklch,var(--success) 10%,var(--bg-2)); cursor: default; }

.card-select { position: absolute; left: -7px; top: -7px; z-index: 4; width: 17px; height: 17px; border-radius: 50%; border: 1px solid var(--border-strong); background: var(--bg-2); display: flex; align-items: center; justify-content: center; cursor: pointer; opacity: 0; transition: opacity 110ms ease, transform 110ms ease; }
.ent:hover .card-select, .stmt:hover .card-select, .card-select.ck { opacity: 1; }
.card-select svg { opacity: 0; color: var(--gray-1000); }
.card-select.ck { background: var(--brand-500); border-color: var(--brand-500); transform: scale(1.05); }
.card-select.ck svg { opacity: 1; }

.ent-body { padding: 0 16px 16px; }
.ent-mem { display: flex; align-items: center; gap: 8px; padding: 8px 12px; border-radius: 4px; font-size: var(--pf-t--global--font--size--xs); cursor: pointer; margin-bottom: 12px; }
.ent-mem svg { flex: none; }
.ent-mem.on { background: color-mix(in oklch,var(--brand-500) 9%,var(--bg-1)); border: 1px solid color-mix(in oklch,var(--brand-500) 26%,transparent); color: var(--text-secondary); }
.ent-mem.on b { color: var(--brand-400); font-weight: 600; }
.ent-mem.on svg { color: var(--brand-500); }
.ent-mem.new { background: var(--bg-2); border: 1px solid var(--border-subtle); color: var(--text-tertiary); }
.ent-mem .ar { margin-left: auto; }

.ent-intro { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--body--sm); line-height: 1.5; color: var(--text-tertiary); margin: 0 0 12px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; cursor: pointer; }
.ent-intro.expanded { -webkit-line-clamp: unset; }
.pa { width: 20px; height: 20px; display: flex; align-items: center; justify-content: center; border-radius: 2px; color: var(--text-disabled); cursor: pointer; transition: opacity 120ms ease, background 100ms ease, color 100ms ease; opacity: 0; }
.pa.p-human { opacity: 0.55; }
/* edit-mode reveals the full action triplet */
.ent.editing .prm-act .pa, .stmt.editing .prm-act .pa { opacity: 1; }
.pa:hover { background: var(--bg-3); }
.pa.p-pin:hover { color: var(--brand-500); }
.pa.p-pin.on { color: var(--brand-500); opacity: 1; }
.pa.p-verify:hover { color: var(--info); }
.pa.p-remove:hover { color: var(--danger); }
/* .a-edit on-state + editing card glow */
.iact.a-edit.on { background: color-mix(in oklch, var(--brand-500) 18%, transparent); color: var(--brand-500); }
.ent.editing, .stmt.editing { box-shadow: 0 0 0 1px color-mix(in oklch, var(--brand-500) 45%, transparent), 0 0 0 4px color-mix(in oklch, var(--brand-500) 8%, transparent); border-radius: 4px; transition: box-shadow 140ms ease; }

/* ── lock guard (slice 1, card-level): wordless padlock that protects a
   card from accidental edits. Closed = locked → the change-actions dim and
   go inert; the padlock + project-attach stay live. Reverse on re-click. */
.iact.a-lock:hover { color: var(--brand-500); border-color: color-mix(in oklch, var(--brand-500) 45%, transparent); }
.iact.a-lock.on { color: var(--brand-500); border-color: color-mix(in oklch, var(--brand-500) 48%, transparent); background: color-mix(in oklch, var(--brand-500) 12%, var(--bg-2)); }
.ent.locked, .stmt.locked { border-color: color-mix(in oklch, var(--brand-500) 42%, transparent); box-shadow: 0 0 0 1px color-mix(in oklch, var(--brand-500) 22%, transparent); border-radius: 4px; transition: box-shadow 160ms ease, border-color 160ms ease; }
/* locked → keep the cluster revealed (overriding the hover-gate) and collapse
   it to a single always-visible padlock badge; the protected actions hide. */
.ent.locked .acts, .stmt.locked .acts { opacity: 1; }
.ent.locked .acts .iact:not(.a-lock):not(.done),
.stmt.locked .acts .iact:not(.a-lock):not(.done) { display: none; }
.ent.locked .prm-act, .stmt.locked .prm-act { opacity: .28; pointer-events: none; }
/* row-level lock (slice 2): the same wordless padlock on a single row. Closed =
   protect that row; show only the padlock as a persistent badge. Reverse on click. */
.pa.p-lock:hover { color: var(--brand-500); }
.pa.p-lock.on { color: var(--brand-500); opacity: 1; }
/* section-level lock (slice 3): wordless padlock in the section header that
   locks/unlocks every card in the section at once. */
.seclock { margin-left: 12px; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; border-radius: 4px; border: 1px solid var(--border-default); background: var(--bg-2); color: var(--text-tertiary); cursor: pointer; opacity: 0; flex: none; transition: opacity 120ms ease, color 110ms ease, border-color 110ms ease, background-color 110ms ease; }
.seclock:hover { color: var(--brand-500); border-color: color-mix(in oklch, var(--brand-500) 45%, transparent); }
.seclock.on { color: var(--brand-500); border-color: color-mix(in oklch, var(--brand-500) 48%, transparent); background: color-mix(in oklch, var(--brand-500) 12%, var(--bg-2)); }

/* verify result */
.vslot:empty { display: none; }
.vrow { margin: 12px 0; border: 1px solid var(--border-subtle); border-left: 2px solid var(--info); border-radius: 4px; background: var(--bg-0); overflow: hidden; }
.vrow.is-ok { border-left-color: var(--success); }
.vrow.is-warn { border-left-color: var(--warning); }
.vload { padding: 12px 16px; }
.vload .vq { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); color: var(--text-tertiary); margin-bottom: 8px; display: flex; align-items: center; gap: 8px; }
.vbar { height: 3px; border-radius: 999px; background: var(--bg-3); background-image: linear-gradient(90deg, transparent, color-mix(in oklch,var(--info) 75%,transparent), transparent); background-size: 110px 100%; background-repeat: no-repeat; animation: vscan 880ms linear infinite; }
.vres { padding: 12px 16px; }
.vres .vtop { display: flex; align-items: center; gap: 8px; }
.vres .vtext { font-size: var(--pf-t--global--font--size--xs); color: var(--text-secondary); line-height: 1.5; margin-top: 8px; }
.vres .vtext b { color: var(--text-primary); }
.vres .vfoot { display: flex; align-items: center; gap: 12px; margin-top: 12px; font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); color: var(--text-disabled); }
.vres .vfoot a { color: var(--brand-500); margin-left: auto; }
.vkeep { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); color: var(--text-tertiary); border: 1px solid var(--border-default); border-radius: 2px; padding: 2px 8px; cursor: pointer; }
.vkeep:hover { color: var(--brand-500); border-color: color-mix(in oklch,var(--brand-500) 40%,transparent); }

/* alpha617 — pending-module verify state. Replaces the fake
   ok/warn results with a clean amber «in development» panel so the
   user understands fact-check is a Pro tier capability not yet
   wired, while the loading shimmer above still plays. */
.vrow.is-pending { border-left-color: var(--brand-500); }
.vres-pending { background: color-mix(in oklch, var(--brand-500) 4%, transparent); }
.vres-pending .vtop .chip { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); padding: 2px 12px; border-radius: 999px; }
.vres-pending .vtext { font-style: italic; }
.vres-pending .vfoot a { display: inline-flex; align-items: center; gap: 4px; padding: 2px 12px; border-radius: 2px; transition: background 120ms ease; }
.vres-pending .vfoot a:hover { background: color-mix(in oklch, var(--brand-500) 14%, transparent); }
.vkeep.kept { color: var(--success); border-color: color-mix(in oklch,var(--success) 35%,transparent); cursor: default; }

/* said-in-article */
.ent-said { display: flex; align-items: center; gap: 12px; margin-top: 12px; padding: 8px 16px; background: var(--bg-0); border: 1px solid var(--border-subtle); border-radius: 4px; cursor: pointer; }
.ent-said:hover { border-color: color-mix(in oklch,var(--et-statement) 40%,transparent); }
/* statement widget — DASHED quote-insert inside the card (founder widget system): the quote is the
   hero + a verify-at-source link (text-fragment). On-palette, no negative margin, spine-safe. */
/* founder 2026-06-24: a statement is a WIDGET-card — render it like the main
   entity cards (.ent): solid chrome + the statement-colour left accent, not a
   faint dashed quote box. */
.said-w { margin-top: 12px; margin-left: 16px; padding: 16px 24px; border: 1px solid var(--border-subtle); border-left: 3px solid var(--et-statement); border-radius: 6px; background: var(--bg-1); }
.said-q { display: block; font-family: var(--pf-t--global--font--family--body); font-style: italic; font-size: var(--pf-t--global--font--size--body--default); line-height: 1.5; color: var(--text-primary); }
.said-meta { display: flex; align-items: center; flex-wrap: wrap; gap: 12px; margin-top: 8px; font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); }
.said-jump { color: var(--text-secondary); text-decoration: none; }
.said-jump:hover { color: var(--brand-500); }
.said-sep { color: var(--text-secondary); }
/* founder 2026-06-24: «verify at source» is a real BUTTON (like elsewhere) — it
   opens the article at the quote via text-fragment, which highlights it. */
.said-verify { display: inline-flex; align-items: center; gap: 4px; padding: 3px 10px; border: 1px solid color-mix(in oklch, var(--success) 42%, transparent); border-radius: 999px; color: var(--success); background: color-mix(in oklch, var(--success) 9%, transparent); text-decoration: none; font-weight: 600; }
.said-verify:hover { background: color-mix(in oklch, var(--success) 18%, transparent); }
/* founder 2026-06-24 provenance: «✓ databases» labels the signal chips as our
   DB-probed moat layer (distinct from article claims). Same green as the panel zone. */
.dbsig-lbl { display: inline-flex; align-items: center; gap: 3px; font-size: var(--pf-t--global--font--size--xs); font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--success); white-space: nowrap; }
.said-verify svg { color: var(--success); flex: none; }
/* pageviews chart — REAL 12-mo Wikipedia pageviews series as an amber area sparkline (inside the
   «Wikipedia» continuation). preserveAspectRatio=none stretches the 100×30 viewBox to full width;
   the line uses non-scaling-stroke so it stays crisp. */
.pvc { margin-top: 12px; }
.pvc-k { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); text-transform: uppercase; letter-spacing: 0.06em; color: var(--brand-500); margin-bottom: 4px; }
.pvc-svg { display: block; width: 100%; height: 46px; overflow: visible; }
.pvc-area { fill: color-mix(in oklch, var(--brand-500) 18%, transparent); stroke: none; }
.pvc-line { fill: none; stroke: var(--brand-500); stroke-width: 1.6px; stroke-linejoin: round; stroke-linecap: round; }
.pvc-axis { display: flex; justify-content: space-between; font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); color: var(--text-secondary); margin-top: 3px; }
/* «Wikipedia» accordion — card continuation (founder §3): the heavy Wikidata reference parked
   collapsed so the verified widget stays clean; pageviews chart lives inside. On-palette, no-gray. */
.wiki-acc { margin-top: 16px; border: 1px solid var(--border-subtle); border-radius: 4px; background: color-mix(in oklch, var(--bg-1) 50%, transparent); }
.wiki-acc-sum { list-style: none; cursor: pointer; display: flex; align-items: center; gap: 12px; padding: 12px 16px; font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); text-transform: uppercase; letter-spacing: 0.06em; }
.wiki-acc-sum::-webkit-details-marker { display: none; }
.wiki-acc-sum::marker { content: ''; }
.wiki-acc-ttl { color: var(--text-primary); font-weight: 600; }
.wiki-acc-hint { color: var(--text-secondary); text-transform: none; letter-spacing: 0; margin-left: auto; }
.wiki-acc-chev { color: var(--brand-500); flex: none; transition: transform 150ms ease; }
.wiki-acc[open] .wiki-acc-chev { transform: rotate(90deg); }
.wiki-acc[open] .wiki-acc-sum { border-bottom: 1px solid var(--border-subtle); }
.wiki-acc .params { padding: 12px 16px; margin: 0; }
.ent-said .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--et-statement); flex: none; }
.ent-said .sq { font-family: var(--pf-t--global--font--family--body); font-style: italic; font-size: var(--pf-t--global--font--size--body--sm); color: var(--text-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ent-said .sid { font-family: var(--pf-t--global--font--family--mono); font-size: var(--pf-t--global--font--size--xs); color: var(--text-disabled); margin-left: auto; flex: none; }

/* note */
.note-slot:empty { display: none; }
.note-ed { margin-top: 12px; border: 1px solid color-mix(in oklch,var(--warning) 30%,transparent); border-radius: 4px; background: color-mix(in oklch,var(--warning) 5%,var(--bg-0)); padding: 12px 12px; }
.note-ed .nl { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); text-transform: uppercase; letter-spacing: 0.06em; color: var(--warning); margin-bottom: 8px; }
.note-ed textarea { width: 100%; background: var(--bg-0); border: 1px solid var(--border-subtle); border-radius: 2px; color: var(--text-primary); font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--body--sm); padding: 8px 12px; resize: vertical; min-height: 46px; outline: none; }
/* alpha733 — keyboard focus ring (was missing). Mouse-click stays clean via :focus-visible vs :focus. */
.note-ed textarea:focus-visible { outline: 2px solid var(--brand-500); outline-offset: 1px; border-color: color-mix(in oklch, var(--brand-500) 40%, var(--border-subtle)); }
.note-ed textarea:focus { border-color: color-mix(in oklch,var(--warning) 45%,transparent); }
.note-ed .nb { display: flex; gap: 8px; margin-top: 8px; }
.note-shown { margin-top: 12px; display: flex; gap: 12px; padding: 12px 16px; background: color-mix(in oklch,var(--warning) 7%,var(--bg-0)); border: 1px solid color-mix(in oklch,var(--warning) 24%,transparent); border-radius: 4px; font-size: var(--pf-t--global--font--size--body--sm); color: var(--text-secondary); line-height: 1.5; }
.note-shown svg { color: var(--warning); flex: none; margin-top: 1px; }
.note-shown .ne { margin-left: auto; flex: none; color: var(--text-disabled); cursor: pointer; font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); }
.note-shown .ne:hover { color: var(--warning); }

.ent-foot { margin-top: 12px; font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); color: var(--text-disabled); }
.ent-foot .pv { color: var(--text-tertiary); }
/* article-source widget (outlet+author = the ARTICLE) — composed into every entity card. no-gray. */
.src-w { display: flex; gap: 8px; align-items: baseline; margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--border-subtle); font-size: var(--pf-t--global--font--size--xs); line-height: 1.5; }
.src-w-k { display: inline-flex; align-items: center; gap: 4px; flex: none; font-family: var(--pf-t--global--font--family--body); text-transform: uppercase; letter-spacing: 0.06em; color: var(--brand-500); }
.src-w-b { color: var(--text-secondary); min-width: 0; }
.src-w-t { color: var(--text-primary); text-decoration: none; font-weight: 500; }
.src-w-t:hover { color: var(--brand-500); text-decoration: underline; }
.src-w-sep { color: var(--text-secondary); }
/* ── article widget — DASHED graphic insert composed INSIDE each entity card (founder:
   «виджеты вставляются только в карточки других сущностей · пунктирной, частью оси-системы,
   не перекрывать ось»). NO negative margin → stays inside the card, never touches the spine. */
.awid { display: flex; gap: 12px; align-items: flex-start; margin-top: 16px; padding: 12px 16px; border: 1px dashed var(--border-strong); border-radius: 4px; background: color-mix(in oklch, var(--bg-1) 55%, transparent); }
.awid-logo { width: 30px; height: 30px; border-radius: 4px; object-fit: contain; background: #d4d7dd; flex: none; }
.awid-body { min-width: 0; }
.awid-k { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); text-transform: uppercase; letter-spacing: 0.06em; color: var(--brand-500); }
.awid-title { font-size: var(--pf-t--global--font--size--body--sm); font-weight: 500; line-height: 1.3; margin-top: 1px; }
.awid-title a { color: var(--text-primary); text-decoration: none; }
.awid-title a:hover { color: var(--brand-500); text-decoration: underline; }
.awid-meta { font-size: var(--pf-t--global--font--size--xs); color: var(--text-secondary); margin-top: 3px; }
.awid-verify { color: var(--brand-500); text-decoration: none; }
.awid-verify:hover { text-decoration: underline; }

/* ════ STATEMENT HUB CARD ════ */
.stmt { position: relative; background: var(--bg-1); border: 1px solid var(--border-subtle); border-left: 2px solid var(--et-statement); border-radius: 6px; padding: 16px 24px 16px; margin-bottom: 12px; transition: border-color 130ms ease, box-shadow 130ms ease, opacity 200ms ease; }
.stmt:hover { border-color: var(--border-default); border-left-color: var(--et-statement); }
.stmt.dragging { opacity: 0.4; }
.stmt.selected { box-shadow: inset 0 0 0 1px color-mix(in oklch,var(--brand-500) 30%,transparent); border-color: color-mix(in oklch,var(--brand-500) 48%,transparent); }
.stmt.flash { animation: cflash 640ms ease; }
.stmt-top { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; }
.sid-chip { display: inline-flex; align-items: center; gap: 8px; font-family: var(--pf-t--global--font--family--mono); font-size: var(--pf-t--global--font--size--xs); color: var(--et-statement); border: 1px solid color-mix(in oklch,var(--et-statement) 30%,transparent); background: color-mix(in oklch,var(--et-statement) 9%,var(--bg-1)); padding: 1px 8px; border-radius: 2px; }
.sid-chip .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--et-statement); }
.stmt-top .acts { margin-left: auto; }
.stmt-q { font-family: var(--pf-t--global--font--family--body); font-style: italic; font-size: var(--pf-t--global--font--size--body--default); line-height: 1.48; color: var(--text-primary); margin: 0; }
/* content-driven, NOT a fixed `repeat(3,1fr)`: a 3-up grid in the narrow reading
   column (~280–420px) crushed each ref to ~120px and ellipsized real names, and a
   single self-statement ref locked to 1/3 width with 2 phantom empty columns.
   auto-fit minmax reflows 3→2→1 with NO @media and fills the row for any ref count.
   (founder «виджет фактчекинга — два узких столба»; element-spec LAYER 2 .l-autogrid) */
.stmt-refs { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 8px; margin-top: 16px; }
.sref { display: flex; align-items: center; gap: 8px; padding: 8px 12px; border: 1px solid var(--border-subtle); border-radius: 4px; background: var(--bg-0); cursor: pointer; min-width: 0; transition: border-color 110ms ease; }
.sref:hover { border-color: var(--border-strong); }
.sref-av { width: 22px; height: 22px; border-radius: 50%; flex: none; object-fit: cover; background: var(--bg-2); border: 1px solid var(--border-default); display: flex; align-items: center; justify-content: center; overflow: hidden; }
.sref-av img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.sref-av.noimg img { display: none; }
/* the monogram fallback must be HIDDEN when a photo is present — without
   display:none it rendered ON TOP OF the photo (founder 2026-06-12: «буквенная
   и фото спорят»), unlike every other avatar widget (.ent-av-fb / .ment-av-fb
   / .rel-mono all hide by default and show only on .noimg). */
.sref-av { position: relative; }
.sref-av-fb { display: none; font-family: var(--pf-t--global--font--family--body); font-weight: 600; font-size: var(--pf-t--global--font--size--xs); color: var(--text-secondary); }
.sref-av.noimg .sref-av-fb { display: flex; }
.sref-tx { min-width: 0; flex: 1; }
.sref-role { display: block; font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-disabled); margin-bottom: 1px; }
.sref-nm { display: block; font-size: var(--pf-t--global--font--size--xs); color: var(--text-primary); white-space: normal; overflow-wrap: anywhere; }
.sref-nm .sub { color: var(--text-tertiary); }
.sref .go { color: var(--text-disabled); flex: none; }
.sref:hover .go { color: var(--brand-500); }
.sref.create .go { color: var(--text-disabled); }
.sref.create:hover { border-color: color-mix(in oklch,var(--brand-500) 40%,transparent); }

.stmt-ctx { margin-top: 16px; padding: 12px 16px; background: var(--bg-0); border: 1px solid var(--border-subtle); border-radius: 4px; }
.stmt-ctx .cl { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); text-transform: uppercase; letter-spacing: 0.07em; color: var(--text-disabled); margin-bottom: 4px; }
.stmt-ctx .ct { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--body--sm); line-height: 1.55; color: var(--text-tertiary); }
.stmt-ctx .ct mark { background: color-mix(in oklch,var(--et-statement) 22%,transparent); color: var(--text-primary); border-radius: 2px; padding: 0 1px; }
.stmt-ment { display: flex; align-items: center; gap: 8px; margin-top: 12px; flex-wrap: wrap; }
.stmt-ment .ml { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); text-transform: uppercase; letter-spacing: 0.06em; color: var(--text-disabled); }
.chip.lk { cursor: pointer; }
.chip.lk:hover { border-color: var(--border-strong); color: var(--text-primary); }
.chip.lk svg { color: var(--text-disabled); }

/* entity-type dot */
.etd { width: 7px; height: 7px; border-radius: 2px; display: inline-block; flex: none; }
.etd.person { background: var(--et-person); }
.etd.org { background: var(--et-company); }
.etd.statement { background: var(--et-statement); border-radius: 50%; }
.etd.outlet { background: var(--et-outlet); }
.etd.author { background: var(--et-author); }
/* alpha912 — mention chips carry the connected entity's FACE + per-type colour
   ring (founder /frontend-design: highlight related-entity avatars right in the
   statement card). */
.chip.ment { display: inline-flex; align-items: center; gap: 8px; padding-left: 4px; }
.ment-av { width: 21px; height: 21px; border-radius: 50%; overflow: hidden; flex: none; background: var(--bg-3); display: inline-flex; align-items: center; justify-content: center; border: 1.5px solid var(--border-default); }
.ment-av img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ment-av.noimg img { display: none; }
.ment-av-fb { display: none; font-size: var(--pf-t--global--font--size--xs); font-weight: 700; color: var(--text-secondary); line-height: 1; }
.ment-av.noimg .ment-av-fb { display: inline-flex; }
.chip.ment.person .ment-av { border-color: var(--et-person); }
.chip.ment.org .ment-av { border-color: var(--et-company); }
.chip.ment.outlet .ment-av { border-color: var(--et-outlet); }
.chip.ment.author .ment-av { border-color: var(--et-author); }

/* ── alpha930 — vivid chip accents (founder: «яркие цвета на бейджах и тонких
   линиях, не уныло»). Functional colour by entity-type / category, never
   decoration. Tint = semantic colour + ~14% bg + ~42% border. ── */
.chip.k-person { color: var(--et-person); border-color: color-mix(in oklch,var(--et-person) 42%,transparent); background: color-mix(in oklch,var(--et-person) 14%,var(--bg-1)); }
.chip.k-org, .chip.k-organization, .chip.k-company { color: var(--et-company); border-color: color-mix(in oklch,var(--et-company) 42%,transparent); background: color-mix(in oklch,var(--et-company) 14%,var(--bg-1)); }
.chip.k-outlet { color: var(--et-outlet); border-color: color-mix(in oklch,var(--et-outlet) 44%,transparent); background: color-mix(in oklch,var(--et-outlet) 13%,var(--bg-1)); }
.chip.k-author { color: var(--et-author); border-color: color-mix(in oklch,var(--et-author) 42%,transparent); background: color-mix(in oklch,var(--et-author) 13%,var(--bg-1)); }
.chip.k-person .etd { background: var(--et-person); }
.chip.k-org .etd, .chip.k-organization .etd, .chip.k-company .etd { background: var(--et-company); }
.chip.k-outlet .etd { background: var(--et-outlet); }
.chip.k-author .etd { background: var(--et-author); }

/* category-leader chip — a thin colour accent + coloured label, not flat grey */
.eh-tags .chip.lead { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); letter-spacing: .04em;
  background: transparent; border-color: var(--border-subtle); border-left: 2px solid var(--border-strong);
  padding-left: 12px; color: var(--text-secondary); }
.eh-tags .chip.lead.c-source    { border-left-color: var(--et-outlet); color: var(--et-outlet); }
.eh-tags .chip.lead.c-authority { border-left-color: var(--info);      color: var(--info); }
.eh-tags .chip.lead.c-verified  { border-left-color: var(--success);   color: var(--success); }
.eh-tags .chip.lead.c-risk      { border-left-color: var(--danger);    color: var(--danger); }
/* branch from each card to the spine, in the card's TYPE colour */
.stmt::before { content:''; position:absolute; top: 48px; left: -24px; width: 24px; height: 2.5px; border-radius: 2px; background: var(--et-statement); opacity: 0.82; pointer-events: none; z-index: 0; }
.stmt {  }   /* branch = the statement card's left-edge colour */
.stmt.money::before { background: var(--money); }   /* money branch = dollar-green (founder) */
/* entity cards — more air */
.ent { margin-bottom: 32px; }
.ent-head { padding: 32px 32px 24px; gap: 24px; }
.ent-name { font-size: var(--pf-t--global--font--size--body--default); }
.ent-tag { font-size: var(--pf-t--global--font--size--body--sm); margin-top: 4px; }
.ent-body { padding: 0 32px 32px; }
.ent-mem { padding: 12px 24px; font-size: var(--pf-t--global--font--size--body--sm); margin-bottom: 24px; }
.ent-intro { font-size: var(--pf-t--global--font--size--body--sm); line-height: 1.58; margin: 0 0 24px; }
.ent-said { margin-top: 24px; padding: 24px 24px; gap: 16px; }
.ent-said .sq { font-size: var(--pf-t--global--font--size--body--default); }
.ent-said .sid { font-size: var(--pf-t--global--font--size--xs); }
.ent-foot { margin-top: 24px; font-size: var(--pf-t--global--font--size--xs); }
.vres .vtext { font-size: var(--pf-t--global--font--size--body--sm); }
.vload .vq { font-size: var(--pf-t--global--font--size--xs); }
/* statements — large & prominent */
.stmt { padding: 48px 48px 32px; margin-bottom: 32px; }
.stmt-top { margin-bottom: 24px; gap: 12px; }
.sid-chip { font-size: var(--pf-t--global--font--size--xs); padding: 2px 12px; }
.stmt-q { font-size: var(--pf-t--global--font--size--lg); line-height: 1.5; }
.stmt-refs { gap: 12px; margin-top: 32px; }
.sref { padding: 12px 16px; gap: 12px; }
.sref-av { width: 26px; height: 26px; }
.sref-role { font-size: var(--pf-t--global--font--size--xs); }
.sref-nm { font-size: var(--pf-t--global--font--size--body--sm); }
.stmt-ctx { margin-top: 32px; padding: 24px 32px; }
.stmt-ctx .cl { font-size: var(--pf-t--global--font--size--xs); margin-bottom: 12px; }
.stmt-ctx .ct { font-size: var(--pf-t--global--font--size--body--default); line-height: 1.62; color: var(--text-secondary); }
.stmt-ctx .ct mark { background: transparent; color: var(--text-primary); padding: 0; box-shadow: inset 0 -1px 0 color-mix(in oklch,var(--et-statement) 45%,transparent); }
.stmt-ment { margin-top: 24px; gap: 8px; }
.stmt-ment .ml { font-size: var(--pf-t--global--font--size--xs); }

/* ── "in this article" context note ── */
/* Layout redesign (founder 2026-07-10): the first meaningful article
   sentence is the CORE of the card — serif article voice, body-size type,
   a brand accent edge. Root cause of the old look: the quote box used
   fs-xs (smaller than card body) + flat bg-2, so the card's most important
   content read as a minor technical inset. */
.ent-context { display: flex; gap: 12px; margin: 0 0 16px; padding: 12px 16px; background: var(--bg-2);
  border: 1px solid var(--border-subtle); border-left: 3px solid var(--brand-500); border-radius: 4px;
  font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--body--default); line-height: 1.6; color: var(--text-primary); }
.ent-context svg { color: var(--brand-500); flex: none; margin-top: 2px; }
.ent-context b { display: block; font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); font-weight: 600; letter-spacing: 0.07em;
  text-transform: uppercase; color: var(--brand-400); margin: 0 0 4px; }

/* alpha768 — Wikipedia categories disclosure on entity cards.
   Categories drive the legal-flag chips above; surfacing the full
   list lets the reader audit the editorial signal. Collapsed by
   default to keep the card compact; expands to show 60 chips with
   a «+ N more» tail if larger. */
.ent-categories { margin: 16px 0 4px; }
.ent-categories-summary { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); letter-spacing: 0.06em;
  text-transform: uppercase; color: var(--text-tertiary); cursor: pointer; padding: 2px 0; }
.ent-categories-summary::marker { color: var(--text-disabled); }
.ent-categories-summary:hover { color: var(--text-secondary); }
.ent-categories-count { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); color: var(--brand-500); margin-left: 4px; }
.ent-categories-body { display: flex; flex-wrap: wrap; gap: 4px 8px; margin-top: 8px;
  padding: 12px 16px; background: var(--bg-2); border: 1px solid var(--border-subtle); border-radius: 4px; }
.ent-categories-body .chip { font-size: var(--pf-t--global--font--size--xs); padding: 1px 8px; }

/* alpha772 — EUvsDisinfo documented disinformation cases disclosure.
   Outlet-only. High weight (warning-tinted) since every row is a
   peer-reviewed disinformation incident. */
.ent-disinfo { margin: 16px 0 4px; }
.ent-disinfo-summary { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); letter-spacing: 0.06em;
  text-transform: uppercase; color: var(--warning, var(--text-tertiary)); cursor: pointer; padding: 2px 0; }
.ent-disinfo-summary::marker { color: var(--text-disabled); }
.ent-disinfo-summary:hover { filter: brightness(1.1); }
.ent-disinfo-count { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs);
  color: var(--warning, var(--brand-500)); margin-left: 4px; }
.ent-disinfo-body { margin-top: 8px; padding: 12px 16px; background: var(--bg-2);
  border: 1px solid color-mix(in oklch, var(--warning, var(--border-default)) 18%, var(--border-subtle));
  border-radius: 4px; }
.ent-disinfo-row { padding: 12px 0; border-bottom: 1px solid var(--border-subtle); }
.ent-disinfo-row:last-child { border-bottom: 0; }
.ent-disinfo-date { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); color: var(--text-tertiary); margin-right: 8px; }
.ent-disinfo-title { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--body--sm); line-height: 1.4; color: var(--text-primary); }
.ent-disinfo-title.wiki-link { color: var(--brand-500); text-decoration: none; }
.ent-disinfo-title.wiki-link:hover { text-decoration: underline; }
.ent-disinfo-summary-text { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--body--sm); line-height: 1.48;
  color: var(--text-secondary); margin-top: 4px; }

/* alpha770 — Wikipedia «See also» disclosure: editorially-curated
   related Wikipedia articles. Bureau styling parallel to
   ent_categories but the chips are brand-coloured (a-tags) since
   they navigate to other Wikipedia articles, not category pages. */
.ent-see-also { margin: 16px 0 4px; }
.ent-see-also-summary { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); letter-spacing: 0.06em;
  text-transform: uppercase; color: var(--text-tertiary); cursor: pointer; padding: 2px 0; }
.ent-see-also-summary::marker { color: var(--text-disabled); }
.ent-see-also-summary:hover { color: var(--text-secondary); }
.ent-see-also-count { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); color: var(--brand-500); margin-left: 4px; }
.ent-see-also-body { display: flex; flex-wrap: wrap; gap: 4px 8px; margin-top: 8px;
  padding: 12px 16px; background: var(--bg-2); border: 1px solid var(--border-subtle); border-radius: 4px; }
.ent-see-also-body .chip { font-size: var(--pf-t--global--font--size--xs); padding: 1px 8px; }

/* alpha769 — Wikipedia Criticism / Controversies section excerpts.
   High-signal surface for entity vetting. Slightly more prominent
   than ent-categories — the section header uses brand colour, the
   snippet body uses serif at slightly larger font. */
.ent-critique { margin: 16px 0 4px; }
.ent-critique-summary { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); letter-spacing: 0.06em;
  text-transform: uppercase; color: var(--warning, var(--text-tertiary)); cursor: pointer; padding: 2px 0; }
.ent-critique-summary::marker { color: var(--text-disabled); }
.ent-critique-summary:hover { filter: brightness(1.1); }
.ent-critique-count { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs);
  color: var(--warning, var(--brand-500)); margin-left: 4px; }
.ent-critique-body { margin-top: 8px; padding: 12px 16px; background: var(--bg-2);
  border: 1px solid color-mix(in oklch, var(--warning, var(--border-default)) 18%, var(--border-subtle));
  border-radius: 4px; }
.ent-critique-row { padding: 8px 0; border-bottom: 1px solid var(--border-subtle); }
.ent-critique-row:last-child { border-bottom: 0; }
.ent-critique-section { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); letter-spacing: 0.06em;
  text-transform: uppercase; color: var(--text-secondary); margin-bottom: 4px; }
.ent-critique-section a { color: var(--brand-500); text-decoration: none; }
.ent-critique-section a:hover { text-decoration: underline; }
.ent-critique-snippet { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--body--sm); line-height: 1.52;
  color: var(--text-primary); }

/* ── per-quote verify-at-source link ── */
.stmt-src { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 12px; margin-top: 16px;
  font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); color: var(--text-tertiary); }
.stmt-src svg { color: var(--success); flex: none; }
.stmt-src .ssep { color: var(--text-disabled); }
.stmt-src a { color: var(--brand-500); text-decoration: none; }
.stmt-src a:hover { text-decoration: underline; }
/* flex-wrap + buttons-on-their-own-row by default: the reading column is ALWAYS
   ~545px, where the 2 CTAs (~364px) starved the text to 86px → one word per line.
   Buttons drop below the text (sfc-btns flex-basis:100%), text takes full width.
   (founder «виджет фактчекинга — два узких столба»; element-spec LAYER 2/3) */
.stmt-fc { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 16px; margin-top: 24px; padding: 16px 24px;
  background: var(--bg-2); border: 1px dashed color-mix(in oklch,var(--text-disabled) 55%,transparent); border-radius: 4px; }
.stmt-fc > svg { color: var(--text-tertiary); flex: none; margin-top: 1px; }
.ent:hover .nm-acts, .stmt:hover .nm-acts { opacity: 1; }

/* ── human-review marks ── */
.pa.p-human:hover { color: var(--success); border-color: color-mix(in oklch,var(--success) 45%,transparent); }

/* alpha858 — authoritative name variants (GND) shown compactly after the
   entity name. Milky, not gray. */
.ent-aka { font-family:var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs);
  color:color-mix(in oklch, var(--text-primary) 58%, transparent);
  margin-left:4px; letter-spacing:0.01em; }

/* alpha878 — Google Books shelf on author/person cards. Our palette
   (amber accent, no gray); covers in a small horizontal shelf. */
.ent-books { margin:16px 0 8px; }

/* alpha1080 — #2 SYNCED branch-flow (founder): a light runs OUT along each branch the
   moment the spine-light passes its intersection. Per-branch --flow-delay (set by JS in
   report-bureau.js from offsetTop) phases each pulse to the spine. ::before stays the
   static coloured branch; ::after is the moving light, same position. */
.stmt::after { content:''; position:absolute; left:-24px; width:24px; height:3px; border-radius:2px; background:linear-gradient(to right, transparent, color-mix(in oklch, var(--brand-400) 96%, white) 50%, transparent); background-size:260% 100%; background-repeat:no-repeat; opacity:0; pointer-events:none; z-index:2; animation:branchFlow 2s linear infinite; animation-delay:0s; }
.stmt::after { top:48px; }
/* VC-2 (2026-07-10) — compact card variant for carded-but-thin entities:
   no empty body chrome, height follows content («no huge empty cards»). */
.ent.ent--compact {
  padding: 32px 24px
  }
.ent.ent--compact .ent-head--compact {
  margin-bottom: 0
  }
.ent.ent--compact .ent-context--compact {
  font-family: var(--pf-t--global--font--family--body);
  font-size: var(--pf-t--global--font--size--body--sm);
  line-height: 1.4;
  color: var(--text-tertiary);
  margin-top: 12px;
  padding-left: 24px;
  border-left: 2px solid var(--border-subtle)
  }
/* Context card head — a compact monogram, not the full-card 112px photo
   box (root cause of the void: ent_avatar's full-card .ent-av dimensions
   applied unchanged inside the compact variant). */
.ent.ent--compact .ent-av,
.ent.ent--compact.org .ent-av { width: 44px; min-height: 44px; height: 44px; border-radius: 4px; }
.ent.ent--compact .ent-av.noimg { height: 44px; }
.ent.ent--compact .ent-av .ent-av-fb { font-size: var(--pf-t--global--font--size--body--default); }
.ent.ent--compact .ent-head--compact { display: flex; align-items: center; gap: 12px; }
/* A–F IA (2026-07-10) — the context card's graph context: one quiet
   «Related in this article» line, names separated by middle dots. */
.ent.ent--compact .ent-related {
  margin-top: 12px;
  font-family: var(--pf-t--global--font--family--body);
  font-size: var(--pf-t--global--font--size--xs);
  color: var(--text-tertiary);
  }
.ent.ent--compact .ent-related .er-k {
  font-weight: 600; letter-spacing: .08em; text-transform: uppercase;
  margin-right: 8px;
  }
.ent.ent--compact .ent-related .er-n { color: var(--text-secondary); }
.ent.ent--compact .ent-related .er-n + .er-n::before,
.ent.ent--compact .ent-related .er-n + .er-more::before,
.ent.ent--compact .ent-related .er-more::before {
  content: "·"; margin: 0 4px; color: var(--text-disabled);
  }

/* ═════════ STAGE 1 — CARD VISUAL RHYTHM (founder 2026-07-09) ═════════
   One appended, self-contained block (cascade-final → wins ties; one-block
   revert). Report-card-scoped selectors ONLY — the shared base .chip/.btn in
   tokens-bureau are untouched, --space-3 and every legacy token untouched
   (global cleanup is post-alpha per founder). Consumes the additive
   the additive card-size tokens. Goal: restore the small register cards lost in
   alpha1097 — title > body > meta > label, hierarchy by weight/case like the
   sidebar, no size improvisation. */

/* One micro-label voice — kickers and in-card section labels. Previously
   14px with three letter-spacings (0.56/0.98/1.68) and two weights. Colors
   stay per-component (they encode grouping). */
.ent-context b, .rel-lbl, .fam-lbl, .vbox-t,
.np-row-k, .np-k {
  font-size: var(--pf-t--global--font--size--xs);
  font-weight: 600;
  letter-spacing: .12em;
}

/* Meta register — params, identifier rows, tag line, provenance foot,
   verify pills, counters. Previously a 14/15px mix. */
.ent-tag, .ent-tag .mono,
.prm-k, .prm-v,
.vbox-tab td, .vbox-s, .vbox-c, .vbox-vrf,
.ent-foot {
  font-size: var(--pf-t--global--font--size--body--sm);
}
.wiki-acc-sum { font-size: var(--pf-t--global--font--size--body--sm); }

/* Chips inside report cards only (.ent/.stmt scope — base .chip elsewhere is
   shared with search/dossiers/project and stays as-is). Compact height and
   the 4px control radius; 11px lets chips finally read as chips. */
.ent .chip, .stmt .chip {
  font-size: var(--pf-t--global--font--size--xs);
  height: 18px;
  padding: 0 6px;
  border-radius: 4px;
}

/* The one calm reading line-height for card body copy (was 1.45–1.62). */
.ent-intro, .ent-context, .art-excerpt, .stmt-q, .stmt-ctx .ct {
  line-height: 1.55;
}

/* Stage 2 (founder 2026-07-09) — .ent-news-topics had NO rule anywhere: its
   chips are whitespace-trimmed in the template, so «News coverage» rendered as
   one run-on string (THE GUARDIANBBC NEWSFRANCE 24). Root cause = missing
   component rule, fixed with the same flex/gap the sibling .ent-accounts
   already uses. Used only inside report cards (person/org/outlet/author/place). */
.ent-news-topics { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 16px; }


/* ════════════════════════════════════════════════════════════════════
   AD-1 — GOLDEN REPORT VISUAL SYSTEM (founder-approved direction,
   2026-07-10): «analytical bureau, not terminal». One rhythm (8px),
   card ZONES instead of stacks, ONE records panel, designed preview
   rail, designed low-yield state, quiet technical tail.
   ════════════════════════════════════════════════════════════════════ */

/* — card zones: ×2 unit inside a zone, ×3 between zones, one divider — */
.ent-body > .czone + .czone,
.ent-body > .wiki-acc + .czone,
.ent-body > .czone + .wiki-acc { margin-top: 24px; }

/* — context card: its OWN species (inset + rail), not a reduced full card — */
.ent.ent--compact {
  border: 0;
  border-left: 2px solid var(--border-default);
  border-radius: 0 6px 6px 0;
  background: color-mix(in oklch, var(--bg-1) 55%, transparent);
  padding: 16px 20px;
}
.ent.ent--compact .ent-context--compact { border-left-color: var(--brand-500); }
/* related-line: quiet elegance — the cross-link jump stays, the box goes */
.ent-related .entmark, .ent-related .entmark:hover {
  background: transparent; border: 0; box-shadow: none; padding: 0;
  color: var(--text-secondary); text-decoration: none;
}
.ent-related .entmark:hover { color: var(--brand-400); }
.ent.ent--compact .chip { height: 18px; font-size: var(--pf-t--global--font--size--xs); }

/* AD-1 anti-pattern: entity highlight ONLY inside quotes — the intro/bio
   reads as text, not a marked-up index. */
.ent-intro mark.mention, .rep .ent-intro mark {
  background: transparent; border: 0; padding: 0; color: inherit; font-weight: inherit;
}
/* «Related mentions» — the sanctioned compact secondary fallback (shared by
   context cards and the full card's demoted co-mentions). */
.ent-related { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; margin-top: 12px; }
.ent-related .er-k { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); text-transform: uppercase; letter-spacing: .07em; color: var(--text-disabled); margin-right: 4px; }
.ent-related .er-n { font-size: var(--pf-t--global--font--size--body--sm); color: var(--text-tertiary); }
/* POLISH — er-more is a real disclosure button now (see .dm-btn); it keeps the
   compact mono voice but reads interactive, not disabled. */
.ent-related .er-more { font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--xs); color: var(--text-tertiary); }
.ent-related .er-more:hover { color: var(--brand-400); }

/* ── GOLDEN CARD (founder-approved 2026-07-10) — one calm editorial surface.
   Deterministic presentation rules only; no data changes. The card reads
   top-down: identity → why → one key connection → identity facts → records
   line → depth disclosures. Fewer boxes, fewer uppercase labels, fewer
   accents; whitespace and type carry the hierarchy. ── */

/* identity header: name leads, role breathes */
.ent .ent-name, .ent .ent-name a { font-size: var(--pf-t--global--font--size--2xl); line-height: 1.15; letter-spacing: -0.01em; }
.ent .ent-tag { font-size: var(--pf-t--global--font--size--body--default); line-height: 1.45; }

/* why in this report: the boxed panel becomes a serif lead with one thin
   evidence rule — the strongest sentence, not a widget */
.ent .ent-context { background: transparent; border: 0; padding: 0 0 0 24px;
  border-left: 2px solid color-mix(in oklch, var(--brand-500) 55%, transparent);
  font-family: var(--pf-t--global--font--family--body); font-size: var(--pf-t--global--font--size--body--default); line-height: 1.6; color: var(--text-primary); }
.ent .ent-context > svg { display: none; }
.ent .ent-context b { display: block; font-family: var(--pf-t--global--font--family--body); font-weight: 500;
  font-size: var(--pf-t--global--font--size--xs); letter-spacing: .06em; text-transform: uppercase;
  color: var(--text-tertiary); margin-bottom: 4px; }

/* key connection: quiet rows, evidence as serif excerpt — no panel-in-panel */
.ent .rel-lbl { text-transform: none; letter-spacing: .02em; font-size: var(--pf-t--global--font--size--body--sm);
  color: var(--text-tertiary); font-family: var(--pf-t--global--font--family--body); font-weight: 600; }
.ent .rel-row { background: transparent; border: 0; border-left: 2px solid var(--border-subtle);
  border-radius: 0; padding: 4px 16px; }
.ent .rel-row:hover { background: var(--bg-2); transform: none; border-left-color: var(--brand-500); }
.ent .rel-ev { font-size: var(--pf-t--global--font--size--md); }

/* disclosures: ONE quiet style everywhere (records / identity depth / tech) */
.ent details.probily-accordion > summary, .ent details.records-panel > summary,
.ent .wiki-acc-sum { border: 0; background: transparent; }

/* §10 — visible keyboard focus on the drawer trigger (card header) */
.ent-head:focus-visible, .ent-head--compact:focus-visible {
  outline: 2px solid var(--brand-500); outline-offset: 3px; border-radius: 2px; }
.ent-head, .ent-head--compact { cursor: pointer; }
/* mention-line buttons stay on the compact type scale */
.ent-related .dm-btn, .minicard .mc-related .dm-btn { padding: 0; font-size: var(--pf-t--global--font--size--xs); }


/* ══ Phase 3 — the Card's private Candidate review queue ═══════════════════
   Composition only. Every value is a PatternFly 6.6 token or one of the two
   Probily semantics that PatternFly has no token for (status colour, entity
   palette), read from the single brand owner — this block owns no theme value
   and overrides no `--pf-t--global--*` token, exactly like the rest of the file.
   The PatternFly Data List, Label, Button and Toolbar chrome comes from the
   vendored component build; what is here is the queue's own layout, the states
   only this product has, and the 12px floor on every meta line. ══════════ */
.dcard .pcand { margin-top: var(--pf-t--global--spacer--xl); }
.dcard .pcand__head {
  display: flex; align-items: baseline; flex-wrap: wrap;
  gap: var(--pf-t--global--spacer--sm); margin-bottom: var(--pf-t--global--spacer--xs); }
.dcard .pcand__h {
  font-family: var(--pf-t--global--font--family--heading);
  font-size: var(--pf-t--global--font--size--heading--h3);
  font-weight: 600; line-height: 1.25; margin: 0; color: var(--text-primary); }
.dcard .pcand__lede {
  font-size: var(--pf-t--global--font--size--md); line-height: 1.6;
  color: var(--text-secondary); margin: 0 0 var(--pf-t--global--spacer--md); max-width: 62ch; }

/* The outcome of the last action, as the server recorded it. */
.dcard .pcand__notice {
  font-size: var(--pf-t--global--font--size--body--default); line-height: 1.5;
  padding: var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--md);
  border-left: 3px solid var(--border-strong); background: var(--bg-2);
  margin: 0 0 var(--pf-t--global--spacer--md); color: var(--text-primary); }
.dcard .pcand__notice--success { border-left-color: var(--success); }
.dcard .pcand__notice--warning { border-left-color: var(--warning); }
.dcard .pcand__notice--danger { border-left-color: var(--danger); }

/* Toolbar — filters carry their own truthful count. */
.dcard .pcand__toolbar { padding: 0; background: transparent; margin-bottom: var(--pf-t--global--spacer--sm); }
.dcard .pcand__toolbar .pf-v6-c-toolbar__content { padding: 0; }
.dcard .pcand__toolbar .pf-v6-c-toolbar__content-section {
  display: flex; flex-wrap: wrap; align-items: center;
  gap: var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--md); }
.dcard .pcand__toolbar .pf-v6-c-toolbar__group {
  display: flex; flex-wrap: wrap; gap: var(--pf-t--global--spacer--xs); }
.dcard .pcand__filter {
  display: inline-flex; align-items: center; gap: 6px; text-decoration: none;
  font-size: var(--pf-t--global--font--size--body--sm); font-weight: 600;
  color: var(--text-secondary); padding: 4px 10px; border-radius: 3px;
  border: 1px solid var(--border-subtle); background: transparent; }
.dcard .pcand__filter:hover { color: var(--text-primary); border-color: var(--border-strong); }
.dcard .pcand__filter.is-on {
  color: var(--text-primary); border-color: var(--brand-500); background: var(--bg-2); }
.dcard .pcand__fcount {
  font-size: var(--pf-t--global--font--size--xs); font-weight: 600; color: var(--text-tertiary); }
.dcard .pcand__srcform {
  display: flex; align-items: center; gap: var(--pf-t--global--spacer--xs); flex-wrap: wrap; }
.dcard .pcand__srclbl {
  font-size: var(--pf-t--global--font--size--xs); font-weight: 600;
  letter-spacing: .06em; text-transform: uppercase; color: var(--text-tertiary); }
.dcard .pcand__srcsel { font-size: var(--pf-t--global--font--size--body--sm); max-width: 240px; }

/* Rows — the record itself, then its meta line, then its evidence. */
.dcard .pcand__list { border-top: 1px solid var(--border-subtle); }
.dcard .pcand__item { border-bottom: 1px solid var(--border-subtle); }
/* Alignment and the gap between the record and its actions — the row's own
   vertical rhythm is PatternFly's (`__cell` padding-top + `__item-content`
   padding-bottom). Re-declaring padding here stacked a second 32px onto it and
   left a visible hole under every row. */
.dcard .pcand__item .pf-v6-c-data-list__item-row {
  display: flex; align-items: flex-start; gap: var(--pf-t--global--spacer--md); }
.dcard .pcand__cell { min-width: 0; }
.dcard .pcand__title {
  font-size: var(--pf-t--global--font--size--body--default); font-weight: 600;
  line-height: 1.45; color: var(--text-primary); margin: 0;
  word-break: break-word; overflow-wrap: anywhere; }
.dcard .pcand__snip {
  font-size: var(--pf-t--global--font--size--body--default); line-height: 1.55;
  color: var(--text-secondary); margin: 4px 0 0; max-width: 68ch;
  word-break: break-word; overflow-wrap: anywhere; }
.dcard .pcand__meta {
  display: flex; flex-wrap: wrap; align-items: center;
  gap: 6px var(--pf-t--global--spacer--sm); margin: 8px 0 0;
  /* 12px is the accepted floor for any intended UI text on this Card. */
  font-size: var(--pf-t--global--font--size--xs); color: var(--text-tertiary); }
.dcard .pcand__ident { color: var(--warning); font-weight: 600; }
.dcard .pcand__ident.is-ok { color: var(--success); }
.dcard .pcand__review { margin-top: 8px; }
.dcard .pcand__revsum {
  cursor: pointer; font-size: var(--pf-t--global--font--size--body--sm); font-weight: 600;
  color: var(--text-secondary); list-style: none; }
.dcard .pcand__revsum::-webkit-details-marker { display: none; }
.dcard .pcand__revsum::before { content: "▸ "; color: var(--text-tertiary); }
.dcard .pcand__review[open] > .pcand__revsum::before { content: "▾ "; }
.dcard .pcand__revsum:hover { color: var(--text-primary); }
.dcard .pcand__revbody {
  margin-top: 6px; padding: var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--md);
  background: var(--bg-2); border-left: 2px solid var(--border-subtle); }
.dcard .pcand__ev { display: grid; grid-template-columns: minmax(0, 180px) minmax(0, 1fr);
  gap: 4px var(--pf-t--global--spacer--md); margin: 0; }
.dcard .pcand__evk {
  font-size: var(--pf-t--global--font--size--xs); font-weight: 600;
  letter-spacing: .04em; text-transform: uppercase; color: var(--text-tertiary); }
.dcard .pcand__evv {
  font-size: var(--pf-t--global--font--size--body--sm); color: var(--text-primary);
  margin: 0; min-width: 0; word-break: break-word; overflow-wrap: anywhere; }
.dcard .pcand__evv code { font-family: var(--pf-t--global--font--family--mono); }
.dcard .pcand__evlink, .dcard .pcand__evnone {
  margin: var(--pf-t--global--spacer--sm) 0 0;
  font-size: var(--pf-t--global--font--size--body--sm); color: var(--text-secondary); }

/* Actions — a column on desktop, a wrapping row once the card narrows. */
.dcard .pcand__acts {
  display: flex; flex-direction: column; align-items: stretch;
  gap: 6px; flex: 0 0 auto;
  /* match the cell's own top padding so the primary action sits on the
     record title's baseline row, not 8px above it */
  padding-top: var(--pf-t--global--spacer--lg); }
.dcard .pcand__acts form { margin: 0; }
.dcard .pcand__acts button { width: 100%; white-space: nowrap; }

.dcard .pcand__pager {
  display: flex; flex-wrap: wrap; align-items: center;
  gap: var(--pf-t--global--spacer--sm); margin-top: var(--pf-t--global--spacer--md); }
.dcard .pcand__pagecount {
  font-size: var(--pf-t--global--font--size--xs); color: var(--text-tertiary); margin-right: auto; }

.dcard .pcand__empty {
  padding: var(--pf-t--global--spacer--lg) 0; border-top: 1px solid var(--border-subtle); }
.dcard .pcand__emptyh {
  font-size: var(--pf-t--global--font--size--md); font-weight: 600;
  color: var(--text-primary); margin: 0; }
.dcard .pcand__emptyb {
  font-size: var(--pf-t--global--font--size--body--default); color: var(--text-secondary);
  margin: 6px 0 0; max-width: 62ch; }

@media (max-width: 700px) {
  .dcard .pcand__item .pf-v6-c-data-list__item-row { flex-direction: column; gap: 0; }
  .dcard .pcand__cell { padding-bottom: var(--pf-t--global--spacer--sm); }
  /* Stacked, the actions follow the record instead of sitting beside it, so
     PatternFly's side-by-side offsets (a 24px top pad and a 16px inline start
     margin) become a hole between the two. */
  .dcard .pcand__acts {
    flex-direction: row; flex-wrap: wrap;
    padding-top: 0; margin-inline-start: 0; }
  .dcard .pcand__acts button { width: auto; }
  .dcard .pcand__ev { grid-template-columns: minmax(0, 1fr); gap: 2px; }
  .dcard .pcand__evk { margin-top: 6px; }
}
