/* ============================================================================
   Newsroom — piattaforma inchieste (chrome generica, modules/newsroom/ui/*)
   NON è il core CSS fleet: veste dashboard + scrivania d'inchiesta. La tinta
   viene dai CSS var --client-* iniettati per-client (primo client: ef, blu
   editoriale). SCURO di default (sala di regia: l'occhio va ai verdetti), chiaro
   via :root[data-theme="light"] sulla chiave condivisa `ggt-theme`. Il default
   vive in ui/design.py::_FOUC, non qui: :root resta il set chiaro e il set scuro
   è l'override, perché è l'attributo a essere sempre stampato prima del paint.
   Regola di tono vincolante (PHILOSOPHY.md): ∅ «non trovato» è GRIGIO NEUTRO,
   mai rosso — non trovato ≠ falso.

   ⚠️ I colori EPISTEMICI (verdetti, provenienze, natura dei nodi) NON stanno in
   questo file: arrivano da `ui/tokens.py` come `--nwr-v-*` / `--nwr-p-*` /
   `--nwr-e-*`, generati dalle costanti di `casemap.py`/`board.py` che compongono
   già mappa e bacheca. Riscriverne uno qui creerebbe un secondo posto da cui la
   regola di tono può divergere.

   Tre ruoli tipografici, non tre font decorativi:
     --nwr-body      chrome e interfaccia (system-ui: nessun CDN)
     --nwr-evidence  il testo delle PROVE (quote verbatim, estratti d'archivio):
                     serif, perché è materiale citato e non voce del prodotto
     --nwr-record    identificatori verificabili (Bates, ECLI, id documento):
                     monospace, così un riferimento si riconosce a colpo d'occhio
                     invece di sciogliersi nel grigio
   ========================================================================== */

/* Chiaro = lo stesso archivio a luce piena: carta, non schermo bianco. */
:root {
  --nwr-bg:        #e6ded0;
  --nwr-surface:   #f4efe4;
  --nwr-surface-2: #ded4c2;
  --nwr-text:      #2a2419;
  --nwr-muted:     #6b5f4e;
  --nwr-faint:     #8a7d6b;
  --nwr-border:    #cabfa9;
  --nwr-border-soft: rgba(42,36,25,.10);
  --nwr-primary:   rgb(var(--client-primary, 31 111 235));
  --nwr-primary-bg: rgb(var(--client-primary, 31 111 235) / .08);
  --nwr-ok:        #1f8a4c;
  --nwr-ok-bg:     rgba(31,138,76,.10);
  --nwr-warn:      #9a6f00;
  --nwr-warn-bg:   rgba(154,111,0,.10);
  --nwr-bad:       #c0393b;
  --nwr-bad-bg:    rgba(192,57,59,.10);
  --nwr-shadow:    0 14px 34px -24px rgba(30,50,70,.35);
  --nwr-radius:    14px;
  --nwr-radius-sm: 10px;
  --nwr-body: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --nwr-evidence: Georgia, "Iowan Old Style", "Times New Roman", serif;
  --nwr-record: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
  /* Scala tipografica: la vetrina ha bisogno di un hero VERO (oggi il titolo più
     grande di tutta la pagina ospite sta a 1,15rem). Fluida, senza media query. */
  --nwr-t-hero: clamp(2.2rem, 4.4vw, 3.5rem);
  --nwr-t-h1:   clamp(1.6rem, 3.2vw, 2.4rem);
  --nwr-t-h2:   clamp(1.2rem, 2.2vw, 1.6rem);

  /* --- Materiali ------------------------------------------------------------
     Il registro del prodotto è un archivio fisico: tavolo scuro, documenti
     chiari. La leggibilità viene dal contrasto NATURALE del materiale (inchiostro
     su carta dove si legge davvero), quindi la tattilità non costa usabilità.

     ⚠️ Nessun ROSSO qui dentro, per quanto il timbro rosso sia il vezzo vintage
     più ovvio: il rosso è riservato a `smentito` (--nwr-v-smentito) e ∅ «non
     trovato» deve restare grigio. I timbri sono grafite e blu d'inchiostro. */
  --nwr-desk:      #171310;  /* il piano di lavoro */
  --nwr-cork:      #241a13;  /* sughero: fondo della tela */
  --nwr-onionskin: #f4efe4;  /* velina/fotostato — il FATTO citato */
  --nwr-newsprint: #d8d4cb;  /* carta di giornale — il RIPORTATO */
  --nwr-kraft:     #c9a878;  /* manila — l'INTERPRETAZIONE */
  --nwr-ink:       #2a2419;  /* inchiostro su carta */
  --nwr-ink-faded: #6b5f4e;  /* battitura sbiadita */
  --nwr-steel:     #9aa7b3;  /* puntine, graffette, fermagli */
  --nwr-tape:      rgba(224,208,164,.45);  /* nastro adesivo ingiallito */
  --nwr-stamp:     #3f5f7d;  /* timbro a inchiostro (MAI rosso) */
  /* retroconpatibilità: `--nwr-paper` era il nome della velina */
  --nwr-paper:     var(--nwr-onionskin);
  --nwr-paper-ink: var(--nwr-ink);
}
/* Scuro = il tavolo di lavoro a luce bassa. Toni CALDI, non petrolio: è un
   archivio di carta, e il freddo faceva sembrare la bacheca un corpo estraneo
   dentro la sua stessa applicazione. */
:root[data-theme="dark"] {
  --nwr-bg:        #171310;
  --nwr-surface:   #211a14;
  --nwr-surface-2: #2b221a;
  --nwr-text:      #ece4d8;
  --nwr-muted:     #b3a693;
  --nwr-faint:     #8a7d6b;
  --nwr-border:    #3b2f24;
  --nwr-border-soft: rgba(255,255,255,.07);
  --nwr-ok:        #3dbd7d;
  --nwr-ok-bg:     rgba(61,189,125,.14);
  --nwr-warn:      #e0b34a;
  --nwr-warn-bg:   rgba(224,179,74,.13);
  --nwr-bad:       #e56a6c;
  --nwr-bad-bg:    rgba(229,106,108,.13);
  --nwr-shadow:    0 18px 40px -22px rgba(0,0,0,.7);
}

*, *::before, *::after { box-sizing: border-box; }
/* Il piano di lavoro: grana di carta appena percepibile, luce da lampada da
   tavolo in alto a sinistra. Due gradienti, zero immagini, zero costo. */
body.nwr-ui {
  margin: 0; min-height: 100dvh;
  font-family: var(--nwr-body); color: var(--nwr-text);
  background:
    repeating-linear-gradient(97deg, rgba(255,255,255,.012) 0 1px, transparent 1px 4px),
    radial-gradient(1200px 700px at 12% -8%, rgba(255,236,200,.055), transparent 62%),
    var(--nwr-bg);
  background-attachment: fixed;
  -webkit-font-smoothing: antialiased; line-height: 1.55;
}
.nwr-ui a { color: inherit; text-decoration: none; }
.nwr-ui h1, .nwr-ui h2, .nwr-ui h3 { margin: 0; line-height: 1.2; letter-spacing: -.01em; font-weight: 700; }
.nwr-ui p { margin: 0; }
.nwr-ui button { font-family: inherit; cursor: pointer; }

/* --- Ruoli semantici del testo ---------------------------------------------
   Non sono varianti estetiche: dicono di che NATURA è ciò che si sta leggendo.
   `.nwr-quote` = parole di un documento, riportate verbatim (la pipeline scarta
   una quote che non si ritrova nel testo, quindi qui non finisce mai una
   parafrasi). `.nwr-record` = un identificatore che qualcuno può andare a
   controllare. Tenerli distinti dalla voce del prodotto è la ragione per cui
   esistono tre font invece di uno. */
.nwr-quote {
  font-family: var(--nwr-evidence); font-size: 1.02em; line-height: 1.6;
  border-left: 2px solid var(--nwr-border); padding-left: .8rem;
}
.nwr-record {
  font-family: var(--nwr-record); font-size: .82em; letter-spacing: -.01em;
  color: var(--nwr-muted);
  /* `anywhere`, non `break-all`: un Bates lungo deve poter andare a capo, una
     frase no. Con break-all «12 DATASET» diventava «12 DATASE / T». */
  overflow-wrap: anywhere;
}
.nwr-paper {
  background: var(--nwr-paper); color: var(--nwr-paper-ink);
  border-radius: var(--nwr-radius-sm);
}
/* Sulla carta l'inchiostro è inchiostro: i grigi della chrome (--nwr-muted,
   pensati per fondo scuro) qui sparirebbero. */
.nwr-paper .nwr-record, .nwr-ep .nwr-record { color: var(--nwr-ink-faded); }
.nwr-paper .nwr-quote,  .nwr-ep .nwr-quote  { border-left-color: rgba(42,36,25,.28); }

/* --- Grammatica epistemica: la porta il MATERIALE ---------------------------
   Tre nature, tre carte diverse, sempre le stesse ovunque compaiano (bacheca,
   comune, agenda, cronologia, vetrina):
     fact           velina/fotostato + puntina d'acciaio  → citazione validata
     fact_reported  ritaglio di giornale + graffetta      → fonte mediata
     interpretation kraft + nastro + timbro               → ipotesi dell'agente
   Che una cosa sia un fatto o un'ipotesi si vede PRIMA di leggerla, e non si può
   confondere per distrazione: sono oggetti fatti di materie diverse. Il colore
   dello spago arriva dai token di ui/tokens.py, mai scritto qui. */
.nwr-ep {
  position: relative; border-radius: 3px; color: var(--nwr-ink);
  background: var(--nwr-onionskin);
  box-shadow: 0 10px 22px -14px rgba(0,0,0,.75), 0 1px 0 rgba(255,255,255,.35) inset;
}
.nwr-ep--fact { background: var(--nwr-onionskin); }
/* ritaglio: carta più spenta, retino tipografico appena percepibile */
.nwr-ep--fact_reported {
  background:
    repeating-linear-gradient(0deg, rgba(42,36,25,.05) 0 1px, transparent 1px 3px),
    var(--nwr-newsprint);
}
/* kraft: fibra a due direzioni + un bordo che non finge di essere tagliato dritto */
.nwr-ep--interpretation {
  background:
    repeating-linear-gradient(64deg, rgba(42,36,25,.045) 0 1px, transparent 1px 6px),
    repeating-linear-gradient(-32deg, rgba(255,255,255,.05) 0 1px, transparent 1px 9px),
    var(--nwr-kraft);
  border-left: 3px dashed color-mix(in srgb, var(--nwr-e-interpretation) 70%, transparent);
}
/* Il fermaglio: acciaio per i fatti, graffetta per il riportato, nastro per
   l'ipotesi. Puro CSS, nessuna immagine. */
.nwr-ep::before {
  content: ""; position: absolute; top: -7px; left: 50%; transform: translateX(-50%);
  width: 14px; height: 14px; border-radius: 50%;
  background: radial-gradient(circle at 35% 32%, #fff 0 12%, var(--nwr-steel) 45%, #5d6a76 100%);
  box-shadow: 0 3px 5px -1px rgba(0,0,0,.6);
}
.nwr-ep--fact_reported::before {
  width: 26px; height: 11px; border-radius: 3px 3px 8px 8px; background: none;
  border: 2px solid var(--nwr-steel); border-top-color: transparent;
  box-shadow: 0 2px 4px -1px rgba(0,0,0,.5);
}
.nwr-ep--interpretation::before {
  width: 62px; height: 17px; border-radius: 1px; top: -8px;
  background: var(--nwr-tape); border: none;
  box-shadow: 0 2px 6px -2px rgba(0,0,0,.5);
  transform: translateX(-50%) rotate(-2.5deg);
}

/* Timbro: si legge come apposto sopra la carta, non come una pastiglia di UI.
   Grafite/inchiostro — il rosso resta di `smentito`. */
.nwr-ep-tag {
  display: inline-flex; align-items: center; gap: .3rem;
  font-family: var(--nwr-record);
  font-size: .62rem; font-weight: 700; text-transform: uppercase; letter-spacing: .12em;
  padding: .16rem .5rem; border: 1.5px solid currentColor; border-radius: 2px;
  color: var(--nwr-ink-faded); opacity: .8; transform: rotate(-1.5deg);
}
.nwr-ep-tag--interpretation { color: var(--nwr-stamp); }

/* Pastiglia di verdetto. `non_trovato`/`non_verificabile` prendono il grigio dal
   token, quindi non esiste un modo di scriverli in rosso senza cambiare la SSOT. */
.nwr-verdict {
  display: inline-flex; align-items: center; gap: .3rem;
  font-size: .72rem; font-weight: 700; padding: .12rem .55rem; border-radius: 999px;
  color: var(--nwr-vc, var(--nwr-faint));
  border: 1px solid color-mix(in srgb, var(--nwr-vc, var(--nwr-faint)) 45%, transparent);
  background: color-mix(in srgb, var(--nwr-vc, var(--nwr-faint)) 12%, transparent);
}
.nwr-verdict--confermato       { --nwr-vc: var(--nwr-v-confermato); }
.nwr-verdict--parziale         { --nwr-vc: var(--nwr-v-parziale); }
.nwr-verdict--smentito         { --nwr-vc: var(--nwr-v-smentito); }
.nwr-verdict--non_trovato      { --nwr-vc: var(--nwr-v-non_trovato); }
.nwr-verdict--non_verificabile { --nwr-vc: var(--nwr-v-non_verificabile); }
.nwr-verdict--unchecked        { --nwr-vc: var(--nwr-v-unchecked); }

/* Provenienza: la separazione 📂/⚖️/🌐/📎 è una promessa del prodotto, quindi ha
   un segno costante e non solo un'emoji nel testo. */
.nwr-prov {
  display: inline-flex; align-items: center; gap: .3rem; font-size: .72rem; font-weight: 600;
  padding: .1rem .5rem; border-radius: 6px;
  color: var(--nwr-pc, var(--nwr-muted));
  background: color-mix(in srgb, var(--nwr-pc, var(--nwr-muted)) 12%, transparent);
}
.nwr-prov--archive     { --nwr-pc: var(--nwr-p-archive); }
.nwr-prov--legal       { --nwr-pc: var(--nwr-p-legal); }
.nwr-prov--web         { --nwr-pc: var(--nwr-p-web); }
.nwr-prov--own_sources { --nwr-pc: var(--nwr-p-own_sources); }

/* --- Top bar --------------------------------------------------------------- */
.nwr-topbar {
  position: sticky; top: 0; z-index: 40;
  display: flex; align-items: center; justify-content: space-between; gap: 1rem;
  padding: .55rem clamp(1rem, 3vw, 1.6rem);
  background: color-mix(in srgb, var(--nwr-bg) 86%, transparent);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--nwr-border-soft);
}
.nwr-topbar-actions { display: flex; align-items: center; gap: .6rem; }
.nwr-wordmark { display: inline-flex; align-items: center; gap: .55rem; }
.nwr-mark { width: 1.6rem; height: 1.6rem; flex: none; }
.nwr-wordmark-name { font-size: 1.15rem; font-weight: 800; letter-spacing: .01em; color: var(--nwr-text); }
/* Il badge è un timbro, non una pillola: battuto a macchina e storto. */
.nwr-wordmark-badge {
  font-family: var(--nwr-record);
  font-size: .6rem; font-weight: 700; text-transform: uppercase; letter-spacing: .14em;
  color: var(--nwr-muted); border: 1.5px solid var(--nwr-border); border-radius: 2px;
  padding: .1rem .45rem; transform: rotate(-2deg);
}
.nwr-btn {
  display: inline-flex; align-items: center; gap: .4rem;
  padding: .45rem .95rem; border-radius: 999px; border: 1px solid transparent;
  font-size: .85rem; font-weight: 600; background: none; color: var(--nwr-text);
}
/* Bottoni: squadrati e stampati, non pillole. Il raggio 999px è la firma più
   riconoscibile della UI moderna e qui lavora contro il materiale. */
.nwr-btn { border-radius: 4px; letter-spacing: .01em; }
.nwr-btn--primary {
  background: var(--nwr-primary); color: #f4efe4;
  box-shadow: 0 6px 14px -8px rgba(0,0,0,.85), 0 1px 0 rgba(255,255,255,.2) inset;
}
.nwr-btn--primary:hover { filter: brightness(1.1); }
.nwr-btn--ghost { border-color: var(--nwr-border); }
.nwr-btn--ghost:hover { background: var(--nwr-surface-2); }
.nwr-btn[disabled] { opacity: .55; cursor: default; }

/* --- Menu profilo ----------------------------------------------------------- */
.nwr-profile { position: relative; }
.nwr-profile-btn {
  display: inline-flex; align-items: center; gap: .5rem;
  background: none; border: 1px solid var(--nwr-border); border-radius: 999px;
  padding: .25rem .8rem .25rem .25rem; color: var(--nwr-text); font-size: .85rem; font-weight: 600;
}
.nwr-avatar {
  width: 1.7rem; height: 1.7rem; border-radius: 50%; display: grid; place-items: center;
  background: var(--nwr-primary); color: #fff; font-size: .85rem; font-weight: 700;
}
.nwr-menu {
  position: absolute; right: 0; top: calc(100% + .5rem); min-width: 240px;
  background: var(--nwr-surface); border: 1px solid var(--nwr-border);
  border-radius: var(--nwr-radius-sm); box-shadow: var(--nwr-shadow);
  padding: .45rem; display: none; z-index: 60;
}
.nwr-menu.open { display: block; }
.nwr-menu a { display: block; padding: .5rem .65rem; border-radius: 8px; font-size: .87rem; }
.nwr-menu a:hover { background: var(--nwr-surface-2); }
.nwr-menu-head { font-size: .7rem; font-weight: 700; text-transform: uppercase; letter-spacing: .06em; color: var(--nwr-faint); padding: .35rem .65rem; }
.nwr-menu-sep { height: 1px; background: var(--nwr-border-soft); margin: .4rem 0; }
.nwr-menu-exit { color: var(--nwr-bad); }
.nwr-theme-toggle { display: flex; align-items: center; gap: .5rem; width: 100%; background: none; border: none; padding: .5rem .65rem; border-radius: 8px; font-size: .87rem; color: var(--nwr-text); text-align: left; }
.nwr-theme-toggle:hover { background: var(--nwr-surface-2); }
.nwr-theme-cap { font-size: .72rem; color: var(--nwr-faint); padding: 0 .65rem .3rem; line-height: 1.4; }
.nwr-imp-banner { background: var(--nwr-warn-bg); color: var(--nwr-warn); font-size: .8rem; font-weight: 600; text-align: center; padding: .35rem; }

/* --- Layout: rail | tela | resizer | agente ---------------------------------
   Ribaltamento del 2026-08-02. Prima: nav 200px | colonna | dock chat vuoto da
   340-440px. Misurato a 1440px, la bacheca — l'unica superficie che MOSTRI il
   ragionamento — viveva in ~700×500 mentre un terzo dello schermo era occupato
   da un campo di testo con tre chip. Il caso è il lavoro: prende la larghezza.
   La navigazione scende a un rail di icone, e il pannello laterale smette di
   essere una chat vuota per diventare il posto in cui l'agente dice cosa ha
   fatto (agenda), con la chat sotto. */
.nwr-layout {
  display: grid; grid-template-columns: 74px minmax(0, 1fr) 0 0;
  height: calc(100dvh - 52px);
  transition: grid-template-columns .18s ease;
}
body.nwr-dash { --nwr-chat-w: clamp(320px, 26vw, 400px); }
body.nwr-dash.chat-open .nwr-layout {
  grid-template-columns: 74px minmax(0, 1fr) 5px var(--nwr-chat-w);
}
body.nwr-dash.nwr-resizing .nwr-layout { transition: none; }

.nwr-chat-resizer { display: none; }
body.nwr-dash.chat-open .nwr-chat-resizer {
  display: block; cursor: col-resize; position: relative; z-index: 30;
}
.nwr-chat-resizer::after {
  content: ""; position: absolute; inset: 0 -3px; opacity: 0; background: var(--nwr-border);
  transition: opacity .15s;
}
.nwr-chat-resizer:hover::after, .nwr-chat-resizer:focus-visible::after,
body.nwr-dash.nwr-resizing .nwr-chat-resizer::after { opacity: 1; background: var(--nwr-primary); }

/* Rail: linguette dello schedario viste di taglio. Icona + etichetta piccola —
   un rail di sole icone costringe a ricordare, e questa non è un'app che si usa
   ogni giorno. */
.nwr-nav {
  display: flex; flex-direction: column; gap: .2rem; padding: .7rem .35rem;
  border-right: 1px solid var(--nwr-border-soft); overflow-y: auto;
}
.nwr-nav-item {
  display: flex; flex-direction: column; align-items: center; gap: .25rem;
  padding: .55rem .2rem; border-radius: 3px;
  border-left: 3px solid transparent;
  color: var(--nwr-muted); font-weight: 600; text-align: center;
  transition: background .15s, color .15s, border-color .15s;
}
.nwr-nav-item svg { width: 1.25rem; height: 1.25rem; flex: none; }
.nwr-nav-item span {
  font-size: .58rem; line-height: 1.15; letter-spacing: .01em;
  /* Va a capo fra le PAROLE, mai dentro: «Inchieste» spezzato in «Inchiest / e»
     è peggio di un'etichetta lunga. */
  overflow-wrap: normal; word-break: keep-all; hyphens: none;
}
.nwr-nav-item:hover { background: var(--nwr-surface); color: var(--nwr-text); }
.nwr-nav-item.active {
  background: var(--nwr-surface-2); color: var(--nwr-text);
  border-left-color: var(--nwr-kraft);
}

.nwr-main { overflow-y: auto; padding: clamp(1.1rem, 3vw, 2rem) clamp(1rem, 3vw, 2rem) 2.5rem; }
/* Con la scrivania aperta la tela arriva ai bordi: il padding della colonna
   ridurrebbe la superficie di lavoro proprio dove serve. */
body.nwr-desk-open .nwr-main { padding: 0; overflow: hidden; }
body.nwr-desk-open .nwr-main > .nwr-section:not(#sec-desk) { display: none; }
.nwr-section > * + * { margin-top: 1rem; }
.nwr-sec-head h1 { font-family: var(--nwr-evidence); font-weight: 700; font-size: var(--nwr-t-h1); }
.nwr-sec-head--sub { margin-top: 2rem; }
.nwr-sec-head--sub h2 { font-size: 1.05rem; color: var(--nwr-muted); text-transform: uppercase; letter-spacing: .05em; }
.nwr-lede { color: var(--nwr-muted); font-size: .92rem; max-width: 68ch; margin-top: .4rem; }
.nwr-loading { color: var(--nwr-faint); font-size: .9rem; padding: 1.2rem 0; }
.nwr-note { font-size: .8rem; color: var(--nwr-muted); line-height: 1.5; max-width: 70ch; }
.nwr-note--rule { background: var(--nwr-surface); border: 1px dashed var(--nwr-border); border-radius: var(--nwr-radius-sm); padding: .7rem .9rem; }
.nwr-error { background: var(--nwr-bad-bg); color: var(--nwr-bad); font-size: .85rem; border-radius: var(--nwr-radius-sm); padding: .6rem .9rem; }

/* --- Pannello dell'agente: agenda + chat ------------------------------------
   L'agenda sta in alto e la chat sotto. È l'inversione che dà un senso al
   pannello: prima era un campo di testo vuoto largo un terzo dello schermo. */
.nwr-agenda {
  flex: none; max-height: 42%; overflow-y: auto;
  padding: .7rem .8rem; border-bottom: 1px solid var(--nwr-border-soft);
}
.nwr-agenda[hidden] { display: none; }
.nwr-agenda-head {
  font-family: var(--nwr-record); font-size: .62rem; font-weight: 700;
  text-transform: uppercase; letter-spacing: .14em; color: var(--nwr-faint);
  margin-bottom: .55rem;
}
.nwr-agenda-item {
  display: flex; gap: .5rem; align-items: flex-start;
  padding: .45rem .5rem; border-radius: 3px;
  border-left: 2px solid var(--nwr-border);
}
.nwr-agenda-item + .nwr-agenda-item { margin-top: .3rem; }
/* Tre livelli, tre segni. L'«azione» è l'unica che si accende: se si accendesse
   tutto, non si accenderebbe niente. */
.nwr-agenda-item--azione { border-left-color: var(--nwr-kraft); background: var(--nwr-surface-2); }
.nwr-agenda-item--attenzione { border-left-color: var(--nwr-steel); }
.nwr-agenda-item--informazione { border-left-color: transparent; opacity: .82; }
.nwr-agenda-item--go { cursor: pointer; }
.nwr-agenda-item--go:hover { background: var(--nwr-surface); }
.nwr-agenda-ico { color: var(--nwr-faint); font-size: .7rem; line-height: 1.5; flex: none; }
.nwr-agenda-t { font-size: .82rem; font-weight: 600; line-height: 1.35; }
.nwr-agenda-d { font-size: .74rem; color: var(--nwr-muted); line-height: 1.45; margin-top: .15rem; }

/* --- Dock chat --------------------------------------------------------------- */
.nwr-chat { overflow: hidden; border-left: 1px solid var(--nwr-border-soft); min-width: 0; }
/* Il thread deve poter rimpicciolire per far posto all'agenda: senza `min-height:0`
   un figlio flex in overflow non scende sotto il proprio contenuto. */
.nwr-chat .message-thread { min-height: 0; }
body.nwr-dash:not(.chat-open) .nwr-chat { visibility: hidden; }
body.nwr-dash .nwr-chat-shell { height: 100%; min-height: 0; }
.nwr-chat .message-thread, .nwr-chat .chat-input-area { max-width: none; }
.nwr-chat-close { display: none; }
.nwr-dock-welcome { padding: 1rem .4rem; }
/* Le chip del dock arrivano dal core CSS della flotta (pillole blu-app) e nel
   registro dei materiali erano l'ultimo pezzo di un'altra applicazione rimasto
   in pagina. Qui diventano etichette da raccoglitore come le altre. */
.nwr-chat .ai-chip {
  background: var(--nwr-newsprint); color: var(--nwr-ink);
  border: 1px solid rgba(42,36,25,.25); border-left: 3px solid var(--nwr-steel);
  border-radius: 2px;
}
.nwr-chat .ai-chip:hover { border-left-color: var(--nwr-stamp); filter: brightness(1.04); }
.nwr-dock-hello { font-family: var(--nwr-evidence); font-weight: 700; font-size: 1rem; }
.nwr-dock-sub { color: var(--nwr-muted); font-size: .82rem; margin: .35rem 0 .7rem; line-height: 1.5; }

/* --- Hub: card inchieste ------------------------------------------------------ */
/* Un'inchiesta È un fascicolo: cartellina di manila con la linguetta, appoggiata
   sul tavolo. Il titolo è battuto a macchina sulla linguetta.

   Il trucco che tiene insieme materiale e leggibilità: dentro la cartellina si
   RIDEFINISCONO i token di testo (inchiostro su carta). Così ogni discendente —
   compresi quelli scritti prima che questa direzione esistesse — resta leggibile
   in entrambi i temi senza una sola regola per figlio. */
.nwr-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: .9rem; align-items: start; }
.nwr-card {
  --nwr-text:   var(--nwr-ink);
  --nwr-muted:  var(--nwr-ink-faded);
  --nwr-faint:  color-mix(in srgb, var(--nwr-ink) 45%, transparent);
  --nwr-border: rgba(42,36,25,.22);
  --nwr-surface-2: rgba(42,36,25,.12);
  --nwr-primary: var(--nwr-stamp);   /* l'inchiostro del timbro, non il blu app */
  position: relative; margin-top: 15px; color: var(--nwr-text);
  background:
    repeating-linear-gradient(64deg, rgba(42,36,25,.045) 0 1px, transparent 1px 6px),
    repeating-linear-gradient(-32deg, rgba(255,255,255,.05) 0 1px, transparent 1px 9px),
    var(--nwr-kraft);
  border: none; border-radius: 3px 8px 3px 3px;
  padding: .9rem; display: flex; flex-direction: column; gap: .5rem;
  box-shadow: 0 12px 26px -18px rgba(0,0,0,.85), 0 1px 0 rgba(255,255,255,.28) inset;
  transition: box-shadow .15s, transform .15s;
}
/* la linguetta della cartellina */
.nwr-card::before {
  content: ""; position: absolute; top: -13px; left: 0; width: 46%; height: 14px;
  background: inherit; border-radius: 6px 10px 0 0;
  box-shadow: 0 -6px 14px -10px rgba(0,0,0,.8);
}
.nwr-card:hover { transform: translateY(-2px) rotate(-.25deg); box-shadow: 0 20px 34px -20px rgba(0,0,0,.9); }
.nwr-card-title { font-family: var(--nwr-evidence); font-weight: 700; font-size: 1.02rem; line-height: 1.28; }
.nwr-card-status { display: inline-flex; align-items: center; gap: .35rem; font-family: var(--nwr-record); font-size: .64rem; font-weight: 700; text-transform: uppercase; letter-spacing: .12em; color: var(--nwr-muted); }
.nwr-card-status::before { content: ""; width: .5rem; height: .5rem; border-radius: 50%; background: var(--nwr-faint); }
.nwr-card-status[data-status="in_verifica"]::before { background: var(--nwr-warn); }
.nwr-card-status[data-status="pronta"]::before, .nwr-card-status[data-status="pubblicata"]::before { background: var(--nwr-ok); }
.nwr-card-verdicts { display: flex; gap: .55rem; font-size: .78rem; font-weight: 600; }
.nwr-card-verdicts .v-ok { color: var(--nwr-ok); }
.nwr-card-verdicts .v-part { color: var(--nwr-warn); }
.nwr-card-verdicts .v-none { color: var(--nwr-muted); }
.nwr-card-verdicts .v-bad { color: var(--nwr-bad); }
.nwr-card-progress { height: 5px; border-radius: 999px; background: var(--nwr-surface-2); overflow: hidden; }
.nwr-card-progress span { display: block; height: 100%; background: var(--nwr-primary); border-radius: 999px; }
.nwr-card-meta { font-family: var(--nwr-record); font-size: .68rem; color: var(--nwr-faint); }
.nwr-card-run { font-size: .76rem; color: #8a5a00; font-weight: 600; }
.nwr-card-actions { display: flex; gap: .5rem; margin-top: auto; }
/* La cartellina ancora da riempire: nessun materiale, solo il posto dove andrà.
   Torna ai token della chrome — non è carta, è un vuoto sul tavolo. */
.nwr-card--new {
  --nwr-text: var(--nwr-muted); --nwr-primary: rgb(var(--client-primary, 31 111 235));
  background: none; box-shadow: none;
  border: 1px dashed var(--nwr-border); border-radius: var(--nwr-radius);
  align-items: center; justify-content: center; text-align: center;
  color: var(--nwr-muted); min-height: 150px; gap: .3rem;
}
.nwr-card--new::before { content: none; }
.nwr-card--new:hover { transform: none; color: var(--nwr-text); border-color: var(--nwr-steel); box-shadow: none; }
.nwr-card--new .nwr-card-plus { font-size: 1.6rem; line-height: 1; }

/* --- Hub: KPI + chip tematici ------------------------------------------------- */
/* I numeri dell'archivio sono schede dattiloscritte, non widget: velina rigata,
   cifre battute a macchina. L'opulenza del corpus si legge meglio su una scheda
   d'inventario che dentro una card di dashboard. */
.nwr-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: .6rem; }
.nwr-kpi {
  --nwr-muted: var(--nwr-ink-faded);
  position: relative; color: var(--nwr-ink);
  background:
    repeating-linear-gradient(0deg, transparent 0 21px, rgba(63,95,125,.13) 21px 22px),
    var(--nwr-onionskin);
  border: none; border-left: 3px solid rgba(42,36,25,.18);
  border-radius: 2px; padding: .7rem .8rem;
  box-shadow: 0 8px 18px -14px rgba(0,0,0,.8);
}
.nwr-kpi-v {
  font-family: var(--nwr-record); font-size: 1.3rem; font-weight: 700;
  color: var(--nwr-ink); font-variant-numeric: tabular-nums; letter-spacing: -.02em;
}
.nwr-kpi-l { font-size: .7rem; color: var(--nwr-ink-faded); }
/* I filoni sono etichette da raccoglitore: squadrate, non pillole. */
.nwr-theme-chips { display: flex; flex-wrap: wrap; gap: .5rem; }
.nwr-theme-chip {
  display: inline-flex; align-items: center; gap: .4rem;
  border: 1px solid rgba(42,36,25,.25); border-left: 3px solid var(--nwr-steel);
  background: var(--nwr-newsprint); color: var(--nwr-ink);
  border-radius: 2px; padding: .4rem .8rem; font-size: .82rem;
}
.nwr-theme-chip:hover { border-left-color: var(--nwr-stamp); filter: brightness(1.04); }
.nwr-theme-chip strong { font-family: var(--nwr-record); font-variant-numeric: tabular-nums; }
/* Le scorciatoie restano chrome: sono navigazione, non materiale d'archivio. */
.nwr-shortcuts { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: .6rem; }
.nwr-shortcut { background: var(--nwr-surface); border: 1px solid var(--nwr-border); border-radius: var(--nwr-radius-sm); padding: .7rem .9rem; display: flex; flex-direction: column; gap: .15rem; font-size: .85rem; }
.nwr-shortcut span { color: var(--nwr-muted); font-size: .78rem; }
.nwr-shortcut:hover { border-color: var(--nwr-steel); background: var(--nwr-surface-2); }

/* --- Form nuova inchiesta ------------------------------------------------------ */
.nwr-new-form { max-width: 560px; display: flex; flex-direction: column; gap: .9rem; }
.nwr-field { display: flex; flex-direction: column; gap: .3rem; font-size: .85rem; font-weight: 600; }
.nwr-field input, .nwr-field textarea {
  font: inherit; font-weight: 400; color: var(--nwr-text);
  background: var(--nwr-surface); border: 1px solid var(--nwr-border);
  border-radius: var(--nwr-radius-sm); padding: .55rem .7rem;
}
.nwr-field input:focus, .nwr-field textarea:focus { outline: 2px solid var(--nwr-primary); outline-offset: 1px; }
.nwr-form-actions { display: flex; gap: .6rem; }
.nwr-form-err { color: var(--nwr-bad); font-size: .82rem; }

/* --- Scrivania d'inchiesta ---------------------------------------------------
   Due nature, due posti. I MODI DELLA TELA (bacheca, mappa) stanno in alto e
   riempiono lo schermo: sono modi di guardare lo stesso caso. I PANNELLI DEL
   DOCUMENTO (articolo, verifica, fonti, radar, dossier) stanno in una barra in
   basso e si aprono sopra la tela: sono cose che si aprono, si usano e si
   richiudono. Prima erano sette schede in fila che a 1440px andavano già a capo,
   e mettevano «Board» e «Dossier» sullo stesso piano. */
#sec-desk { display: flex; flex-direction: column; height: 100%; min-height: 0; }
/* Il contenitore riempito dal JS: senza questa riga la catena di altezze si
   interrompe qui (block, altezza da contenuto) e `.nwr-canvas { flex: 1 }` non
   riceve niente — la tela collassa all'altezza della sua barra. Prima non si
   vedeva perché la bacheca aveva un'altezza propria di 560px. */
#nwr-desk { flex: 1; min-height: 0; display: flex; flex-direction: column; }
/* ⚠️ `display:flex` vince sull'attributo `hidden` — è la stessa trappola già
   pagata sul pannello dettaglio della bacheca. Senza questa riga la scrivania
   resta stampata sopra ogni altra sezione. */
#sec-desk[hidden] { display: none; }
.nwr-desk-head {
  display: flex; align-items: center; gap: .8rem; flex-wrap: wrap;
  padding: .6rem clamp(.8rem, 2vw, 1.2rem); flex: none;
  border-bottom: 1px solid var(--nwr-border-soft);
}
.nwr-desk-back { color: var(--nwr-muted); font-size: .85rem; font-weight: 600; }
.nwr-desk-back:hover { color: var(--nwr-text); }
.nwr-desk-title {
  font-family: var(--nwr-evidence); font-size: 1.15rem; font-weight: 700;
  flex: 1; min-width: 200px;
}
.nwr-desk-status select {
  font: inherit; font-size: .78rem; color: var(--nwr-text); background: var(--nwr-surface);
  border: 1px solid var(--nwr-border); border-radius: 3px; padding: .3rem .55rem;
}

/* --- Cronologia: un ASSE DEL TEMPO ------------------------------------------
   Due corsie affiancate e visivamente DIVERSE: il caso è carta (viene dai
   documenti), il lavoro è un registro (viene da noi, ed è la storia
   dell'inchiesta, non del caso). Se avessero lo stesso aspetto, tenerle
   separate non servirebbe a niente.
   Il tempo qui è una COORDINATA: le posizioni le calcola newsroom-timeline.js,
   e la larghezza della staffa di un evento è la sua incertezza dichiarata —
   «2002» è un anno intero, non un punto. */
.nwr-view--desk {
  background:
    repeating-linear-gradient(97deg, rgba(255,255,255,.012) 0 1px, transparent 1px 5px),
    radial-gradient(1200px 700px at 14% -10%, rgba(255,236,200,.06), transparent 62%),
    var(--nwr-bg);
  overflow-x: hidden; overflow-y: auto;
}
.nwr-tl-view { display: flex; flex-direction: column; }
.nwr-tl-ruler {
  position: sticky; top: 0; z-index: 4; flex: none; height: 2.1rem;
  border-bottom: 1px solid var(--nwr-border);
  background: color-mix(in srgb, var(--nwr-surface) 92%, transparent);
}
.nwr-tl-tick { position: absolute; top: 0; bottom: 0; border-left: 1px solid var(--nwr-border-soft); }
.nwr-tl-ticklabel {
  position: absolute; left: .3rem; top: .35rem; white-space: nowrap;
  font-family: var(--nwr-record); font-size: calc(.66rem * var(--nwr-read, 1));
  color: var(--nwr-faint); letter-spacing: .06em;
}
.nwr-tl-lanes { flex: 1; min-height: 0; }
.nwr-tl-lane + .nwr-tl-lane { border-top: 2px solid var(--nwr-border); }
/* L'etichetta della corsia è un cartellino su UNA riga, appiccicato a sinistra:
   scritta su più righe rubava all'asse la metà dell'altezza, cioè proprio la
   cosa che questa vista esiste per mostrare. La nota per esteso resta nel
   `title` e nello stato vuoto, dove serve davvero. */
.nwr-tl-lanehead {
  position: sticky; left: .5rem; z-index: 3; display: flex; align-items: baseline;
  gap: .5rem; padding: .35rem .6rem; margin: .35rem 0 .1rem;
  width: max-content; max-width: calc(100% - 1rem); pointer-events: none;
  background: color-mix(in srgb, var(--nwr-bg) 82%, transparent);
  border-radius: 999px;
}
.nwr-tl-lanet { font-family: var(--nwr-evidence); font-size: calc(.9rem * var(--nwr-read, 1)); font-weight: 700; white-space: nowrap; }
.nwr-tl-lanen {
  font-size: calc(.68rem * var(--nwr-read, 1)); color: var(--nwr-faint);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 44ch;
}
.nwr-tl-track { position: relative; min-height: 6rem; }
.nwr-tl-empty {
  position: sticky; left: .8rem; display: block; width: max-content;
  max-width: min(60ch, calc(100% - 1.6rem)); white-space: normal;
  font-size: calc(.78rem * var(--nwr-read, 1)); color: var(--nwr-muted); line-height: 1.5;
}

.nwr-tl-ev {
  position: absolute; width: calc(150px * var(--nwr-read, 1));
  display: flex; flex-direction: column; gap: .15rem; text-align: left;
  border: 0; border-radius: 2px; padding: calc(9px * var(--nwr-read, 1)) .55rem .5rem;
  font-family: var(--nwr-body); cursor: pointer;
}
/* il caso: velina appuntata, come i fatti sulla bacheca */
.nwr-tl-ev--caso {
  background: var(--nwr-onionskin); color: var(--nwr-ink);
  box-shadow: 0 8px 18px -8px rgba(0,0,0,.55), 0 1px 3px rgba(0,0,0,.3);
}
.nwr-tl-ev--caso .nwr-bcard-pin { --pin: var(--nwr-steel); left: .8rem; translate: 0 0; }
/* il lavoro: un registro, deliberatamente NON un materiale d'archivio — non è
   una prova, ed è l'unico modo per non lasciarlo scambiare per una */
.nwr-tl-ev--lavoro {
  background: var(--nwr-surface); color: var(--nwr-text);
  border-left: 3px solid var(--nwr-steel);
  box-shadow: 0 1px 0 var(--nwr-border-soft);
}
.nwr-tl-ev:hover { z-index: 3; }
.nwr-tl-ev:focus-visible { outline: 3px solid var(--nwr-primary); outline-offset: 2px; z-index: 5; }
.nwr-tl-ev.sel { outline: 3px solid var(--nwr-primary); outline-offset: 2px; z-index: 5; }
.nwr-tl-when { font-size: calc(.72rem * var(--nwr-read, 1)); font-weight: 700; }
.nwr-tl-prec { font-weight: 400; opacity: .75; }
.nwr-tl-what {
  font-size: calc(.8rem * var(--nwr-read, 1)); line-height: 1.35;
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical;
  line-clamp: 3; overflow: hidden;
}
/* la staffa dell'incertezza: larga quanto il periodo che la data AFFERMA */
.nwr-tl-span {
  position: absolute; left: 0; top: calc(-6px * var(--nwr-read, 1));
  width: var(--span, 0); height: calc(5px * var(--nwr-read, 1));
  border: 1px solid var(--nwr-steel); border-bottom: none;
  opacity: .7; pointer-events: none;
}

/* Triage di un ritrovamento: il testo estratto è MATERIALE, quindi carta. */
.nwr-hit-peek { margin-top: .6rem; }
.nwr-hit-peek[hidden] { display: none; }
.nwr-hit-peek-via { font-size: .66rem; color: var(--nwr-faint); margin-bottom: .3rem; }
.nwr-hit-peek-text {
  margin: 0; max-height: 260px; overflow: auto; white-space: pre-wrap;
  font-family: var(--nwr-evidence); font-size: .82rem; line-height: 1.55;
  background: var(--nwr-onionskin); color: var(--nwr-ink);
  border-radius: 2px; padding: .7rem .8rem;
  box-shadow: 0 8px 18px -14px rgba(0,0,0,.8);
}

/* Condivisione: acceso = la redazione ci lavora dentro. Lo stato viene dalla
   colonna `_owner_group_id` della riga, cioè da chi decide davvero — il DB. */
.nwr-share { flex: none; font-size: .8rem; }
.nwr-share.is-on { border-color: var(--nwr-kraft); color: var(--nwr-kraft); }

/* Redazione */
.nwr-member {
  display: flex; align-items: center; gap: .8rem;
  background: var(--nwr-surface); border: 1px solid var(--nwr-border);
  border-left: 3px solid var(--nwr-steel); border-radius: 2px;
  padding: .6rem .8rem;
}
.nwr-member + .nwr-member { margin-top: .4rem; }
.nwr-member-who { flex: 1; min-width: 0; }
.nwr-member-mail { font-size: .88rem; font-weight: 600; overflow-wrap: anywhere; }
.nwr-member-meta { font-size: .68rem; color: var(--nwr-faint); margin-top: .1rem; }

/* Modi della tela: un selettore segmentato, non delle schede */
.nwr-modes {
  display: flex; gap: .2rem; flex: none; align-self: center;
  background: var(--nwr-surface); border: 1px solid var(--nwr-border);
  border-radius: 4px; padding: .18rem;
}
.nwr-mode {
  background: none; border: none; border-radius: 3px;
  padding: .35rem .8rem; font-size: .84rem; font-weight: 600; color: var(--nwr-muted);
}
.nwr-mode:hover { color: var(--nwr-text); }
.nwr-mode.active { background: var(--nwr-surface-2); color: var(--nwr-text); box-shadow: 0 1px 0 rgba(0,0,0,.3); }

/* La tela: prende tutto lo spazio che avanza */
.nwr-canvas { flex: 1; min-height: 0; position: relative; overflow: auto; padding: .8rem clamp(.8rem, 2vw, 1.2rem); }

/* Barra dei pannelli documento, in basso */
.nwr-docbar {
  flex: none; display: flex; gap: .25rem; flex-wrap: wrap; align-items: center;
  padding: .4rem clamp(.8rem, 2vw, 1.2rem);
  border-top: 1px solid var(--nwr-border-soft); background: var(--nwr-surface);
}
.nwr-tabs { display: flex; gap: .25rem; border-bottom: 1px solid var(--nwr-border); margin-top: 1rem; flex-wrap: wrap; }
.nwr-tab {
  background: none; border: none; border-bottom: 2px solid transparent;
  padding: .55rem .9rem; font-size: .88rem; font-weight: 600; color: var(--nwr-muted);
}
.nwr-tab:hover { color: var(--nwr-text); }
.nwr-tab.active { color: var(--nwr-text); border-bottom-color: var(--nwr-kraft); }
.nwr-tab-badge { font-size: .72rem; color: var(--nwr-faint); margin-left: .3rem; }
/* Nella docbar le schede sono squadrate e si accendono verso l'alto (il pannello
   si apre da lì) */
.nwr-docbar .nwr-tab {
  border-bottom: none; border-top: 2px solid transparent;
  border-radius: 0 0 3px 3px; padding: .45rem .8rem; font-size: .84rem;
}
.nwr-docbar .nwr-tab.active { border-top-color: var(--nwr-kraft); background: var(--nwr-surface-2); color: var(--nwr-text); }

/* Il pannello documento: un cassetto sopra la tela, mai una pagina che la
   sostituisce — così non si perde di vista il caso mentre si scrive. */
.nwr-drawer {
  position: absolute; left: 0; right: 0; bottom: 0; max-height: 72%;
  display: flex; flex-direction: column; min-height: 0; z-index: 20;
  background: var(--nwr-bg); border-top: 1px solid var(--nwr-border);
  box-shadow: 0 -22px 44px -26px rgba(0,0,0,.9);
}
.nwr-drawer-head {
  display: flex; align-items: center; gap: .6rem; flex: none;
  padding: .5rem clamp(.8rem, 2vw, 1.2rem); border-bottom: 1px solid var(--nwr-border-soft);
}
.nwr-drawer-title { font-weight: 700; font-size: .92rem; flex: 1; }
.nwr-drawer-close { background: none; border: none; color: var(--nwr-muted); font-size: 1rem; padding: .2rem .4rem; }
.nwr-drawer-close:hover { color: var(--nwr-text); }
.nwr-tabpane { overflow-y: auto; padding: 1rem clamp(.8rem, 2vw, 1.2rem) 1.4rem; min-height: 0; }
.nwr-save-state { font-size: .76rem; color: var(--nwr-faint); }
.nwr-save-state[data-state="saved"] { color: var(--nwr-ok); }
.nwr-save-state[data-state="error"] { color: var(--nwr-bad); }

/* Editor a blocchi (Articolo) */
.nwr-blocks { max-width: 760px; display: flex; flex-direction: column; gap: .35rem; }
.nwr-block { position: relative; border-radius: var(--nwr-radius-sm); padding: .45rem .6rem; }
.nwr-block:hover { background: var(--nwr-surface); outline: 1px solid var(--nwr-border-soft); }
.nwr-block-view { min-height: 1.4rem; cursor: text; }
.nwr-block-view :first-child { margin-top: 0; }
.nwr-block-view :last-child { margin-bottom: 0; }
.nwr-block-edit {
  width: 100%; font: inherit; font-size: .92rem; color: var(--nwr-text); line-height: 1.55;
  background: var(--nwr-surface); border: 1px solid var(--nwr-primary);
  border-radius: var(--nwr-radius-sm); padding: .5rem .65rem; resize: vertical; min-height: 3.2rem;
}
.nwr-block-tools {
  position: absolute; right: .3rem; top: .3rem; display: none; gap: .25rem;
}
.nwr-block:hover .nwr-block-tools { display: inline-flex; }
.nwr-block-tool {
  border: 1px solid var(--nwr-border); background: var(--nwr-surface); color: var(--nwr-muted);
  border-radius: 7px; font-size: .72rem; padding: .15rem .45rem;
}
.nwr-block-tool:hover { color: var(--nwr-primary); border-color: var(--nwr-primary); }
.nwr-block-empty { color: var(--nwr-faint); font-style: italic; }
.nwr-blocks-add { align-self: flex-start; }

/* Card claim (tab Verifica — F5, stili pronti) */
.nwr-claims { display: flex; flex-direction: column; gap: .7rem; max-width: 760px; }
.nwr-claim {
  background: var(--nwr-surface); border: 1px solid var(--nwr-border);
  border-left: 3px solid var(--nwr-border); border-radius: var(--nwr-radius-sm);
  padding: .7rem .85rem; display: flex; flex-direction: column; gap: .45rem;
}
.nwr-claim-head { display: flex; align-items: baseline; gap: .6rem; flex-wrap: wrap; }
.nwr-claim-badge { font-size: .7rem; font-weight: 800; text-transform: uppercase; letter-spacing: .04em; }
.nwr-claim--ok { border-left-color: var(--nwr-ok); }   .nwr-claim--ok .nwr-claim-badge { color: var(--nwr-ok); }
.nwr-claim--part { border-left-color: var(--nwr-warn); } .nwr-claim--part .nwr-claim-badge { color: var(--nwr-warn); }
.nwr-claim--none .nwr-claim-badge { color: var(--nwr-muted); }
.nwr-claim--bad { border-left-color: var(--nwr-bad); } .nwr-claim--bad .nwr-claim-badge { color: var(--nwr-bad); }
.nwr-claim-decision { margin-left: auto; font-size: .72rem; font-weight: 700; color: var(--nwr-primary); }
.nwr-claim-text { font-size: .9rem; font-style: italic; }
.nwr-claim-prov { display: flex; flex-direction: column; gap: .3rem; }
.nwr-prov { font-size: .8rem; color: var(--nwr-muted); line-height: 1.5; padding-left: .6rem; border-left: 2px solid var(--nwr-border-soft); }
.nwr-prov--arch { border-left-color: var(--nwr-primary); }
.nwr-prov--legal { border-left-color: var(--nwr-warn); }
.nwr-prov--web { border-left-color: var(--nwr-faint); }
.nwr-claim-actions { display: flex; gap: .45rem; flex-wrap: wrap; }
.nwr-claim-actions .nwr-btn { font-size: .76rem; padding: .3rem .7rem; }

/* Fonti (tab — F4, stili pronti) */
.nwr-src-list { display: flex; flex-direction: column; gap: .45rem; max-width: 680px; }
.nwr-src-row {
  display: flex; align-items: center; gap: .55rem; font-size: .85rem;
  background: var(--nwr-surface); border: 1px solid var(--nwr-border);
  border-radius: var(--nwr-radius-sm); padding: .5rem .7rem;
}
.nwr-src-state { margin-left: auto; font-size: .72rem; color: var(--nwr-faint); white-space: nowrap; }

/* Mappa 3D archivio (sezione #archivio — riusa welcome_map.js per id) */
.nwr-map-canvas {
  height: 480px; border-radius: var(--nwr-radius); overflow: hidden;
  background: #0b1620; border: 1px solid var(--nwr-border);
}
.nwr-map-search input {
  width: 100%; max-width: 420px; font: inherit; color: var(--nwr-text);
  background: var(--nwr-surface); border: 1px solid var(--nwr-border);
  border-radius: 999px; padding: .5rem .9rem; margin-bottom: .6rem;
}

/* --- Mappa del caso (modo Mappa della tela) ----------------------------------- */
/* Il canvas è scuro in ENTRAMBI i temi: i colori dei verdetti arrivano dal
   server già calibrati su questo fondo (casemap.py::VERDICT_COLOR).
   Dal revamp prende l'ALTEZZA INTERA della tela: i 460px fissi erano lo stesso
   difetto della bacheca, un francobollo su uno schermo da parete. */
.nwr-view--map { background: #0b1620; }
.nwr-view--map .nwr-map-canvas {
  position: absolute; inset: 0; height: auto; width: auto;
  border: 0; border-radius: 0;
}
/* la lib rende le etichette come tooltip HTML: seguono la distanza di lettura */
.nwr-view--map .scene-tooltip { font-size: calc(.82rem * var(--nwr-read, 1)); }
/* «Da accrescere» come rail sul bordo: per leggerlo non si perde la mappa */
.nwr-weak-rail {
  position: absolute; left: .6rem; top: .6rem; bottom: 4rem; z-index: 6;
  width: min(310px, 42%); overflow-y: auto;
  display: flex; flex-direction: column; gap: .45rem;
  padding: .7rem .75rem; border-radius: var(--nwr-radius-sm);
  background: color-mix(in srgb, var(--nwr-bg) 86%, transparent);
  border: 1px solid var(--nwr-border-soft);
}
.nwr-weak-rail[hidden] { display: none; }
.nwr-weak-railhead {
  font-family: var(--nwr-record); font-size: calc(.62rem * var(--nwr-read, 1));
  text-transform: uppercase; letter-spacing: .14em; color: var(--nwr-faint);
}
@media (max-width: 720px) { .nwr-weak-rail { display: none; } }
.nwr-map-legend { display: flex; flex-wrap: wrap; gap: .3rem 1.3rem; }
.nwr-map-legend-group { display: flex; flex-wrap: wrap; align-items: center; gap: .55rem; }
.nwr-map-legend-title {
  font-size: .68rem; font-weight: 700; text-transform: uppercase;
  letter-spacing: .06em; color: var(--nwr-faint);
}
.nwr-map-legend-item {
  display: inline-flex; align-items: center; gap: .32rem;
  font-size: .74rem; color: var(--nwr-muted);
}
.nwr-map-legend-dot {
  width: .6rem; height: .6rem; border-radius: 50%; flex: none;
  box-shadow: 0 0 0 1px var(--nwr-border-soft);
}

/* «Da accrescere»: è un invito a lavorare, non un elenco di errori — nessun
   rosso, nessuna icona d'allarme (∅ non trovato ≠ falso). */
.nwr-weak-list { display: flex; flex-direction: column; gap: .35rem; }
.nwr-weak-row {
  display: flex; flex-direction: column; gap: .3rem; text-align: left; width: 100%;
  background: var(--nwr-surface); border: 1px solid var(--nwr-border);
  border-left: 3px solid var(--nwr-faint);
  border-radius: var(--nwr-radius-sm); padding: .55rem .7rem;
  font: inherit; color: var(--nwr-text); cursor: pointer;
}
.nwr-weak-row:hover { border-color: var(--nwr-primary); background: var(--nwr-surface-2); }
.nwr-weak-text { font-size: .85rem; line-height: 1.45; }
.nwr-weak-why { display: flex; flex-wrap: wrap; gap: .3rem; }
.nwr-weak-tag {
  font-size: .68rem; color: var(--nwr-muted);
  background: var(--nwr-surface-2); border: 1px solid var(--nwr-border-soft);
  border-radius: 999px; padding: .1rem .5rem;
}
/* --- Radar (tab 📡) ----------------------------------------------------------- */
.nwr-radar { display: flex; flex-direction: column; gap: .9rem; }
.nwr-watch {
  background: var(--nwr-surface); border: 1px solid var(--nwr-border);
  border-radius: var(--nwr-radius); padding: .8rem .9rem;
  display: flex; flex-direction: column; gap: .55rem;
}
.nwr-watch-head { display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; }
.nwr-watch-topic { font-size: .95rem; }
.nwr-watch-state { margin-left: auto; font-size: .72rem; color: var(--nwr-faint); }
.nwr-watch-legs { display: flex; flex-wrap: wrap; gap: .3rem; }

.nwr-hits { display: flex; flex-direction: column; gap: .5rem; }
.nwr-hit {
  background: var(--nwr-surface); border: 1px solid var(--nwr-border);
  border-radius: var(--nwr-radius-sm); padding: .6rem .75rem;
  display: flex; flex-direction: column; gap: .35rem;
}
.nwr-hit--used { opacity: .72; }
.nwr-hit-head { display: flex; align-items: center; gap: .45rem; flex-wrap: wrap; }
.nwr-hit-src { font-size: .72rem; color: var(--nwr-faint); }
/* Il grado di fiducia sta SULLA scheda: «riportato» non deve mai somigliare a
   «documento», e una nota a piè di pagina non lo impedirebbe. */
.nwr-hit-trust {
  margin-left: auto; font-size: .68rem; font-style: italic; color: var(--nwr-faint);
}
.nwr-hit-title {
  font-size: .88rem; font-weight: 600; color: var(--nwr-text); text-decoration: none;
  line-height: 1.4;
}
.nwr-hit-title:hover { color: var(--nwr-primary); text-decoration: underline; }
.nwr-hit-snippet { margin: 0; font-size: .8rem; color: var(--nwr-muted); line-height: 1.5; }

.nwr-check-row { display: flex; flex-wrap: wrap; gap: .3rem .9rem; }
.nwr-check-col { display: flex; flex-direction: column; gap: .35rem; }
.nwr-check {
  display: flex; align-items: baseline; gap: .35rem;
  font-size: .84rem; font-weight: 400; color: var(--nwr-text);
}
.nwr-check-hint {
  display: block; font-size: .7rem; color: var(--nwr-faint);
  margin-top: .1rem; line-height: 1.4;
}

/* Lampeggio del claim raggiunto dalla mappa: orienta, non allarma. */
@keyframes nwr-claim-flash {
  from { box-shadow: 0 0 0 3px var(--nwr-primary-bg); }
  to   { box-shadow: 0 0 0 0 transparent; }
}
.nwr-claim--flash { animation: nwr-claim-flash 1.6s ease-out; }
@media (prefers-reduced-motion: reduce) {
  .nwr-claim--flash { animation: none; outline: 2px solid var(--nwr-primary); }
}

/* --- Footer ------------------------------------------------------------------- */
.nwr-foot { text-align: center; font-size: .74rem; color: var(--nwr-faint); padding: 1.2rem; }

/* --- Responsive ---------------------------------------------------------------- */
@media (max-width: 980px) {
  .nwr-layout, body.nwr-dash.chat-open .nwr-layout { grid-template-columns: 64px minmax(0, 1fr) 0 0; }
  .nwr-nav { padding: .8rem .45rem; }
  .nwr-nav-item span { display: none; }
  .nwr-nav-item { justify-content: center; padding: .65rem; }
  body.nwr-dash.chat-open .nwr-chat-resizer { display: none; }
  /* Il pannello dell'agente su schermo stretto è un FOGLIO DAL BASSO, non un
     overlay a schermo pieno: prima copriva per intero il lavoro, cioè proprio
     la cosa di cui l'agente sta parlando. Restare sopra la tela — anche solo
     per un terzo di schermo — è ciò che rende leggibile «apri il claim che
     regge su una fonte sola» mentre lo si guarda sulla bacheca. */
  body.nwr-dash.chat-open .nwr-chat {
    position: fixed; left: 0; right: 0; bottom: 0; top: auto; height: 62dvh;
    z-index: 50; visibility: visible;
    background: var(--nwr-bg); border-left: none;
    border-top: 1px solid var(--nwr-border);
    border-radius: 10px 10px 0 0;
    box-shadow: 0 -24px 50px -28px rgba(0,0,0,.95);
  }
  body.nwr-dash.chat-open .nwr-chat-close {
    display: grid; place-items: center; position: absolute; right: .7rem; top: .5rem; z-index: 5;
    width: 2rem; height: 2rem; border-radius: 50%; border: 1px solid var(--nwr-border);
    background: var(--nwr-surface); color: var(--nwr-muted); font-size: .9rem;
  }
  body.nwr-dash.chat-open .nwr-chat-shell { position: relative; }
  /* Il cassetto documento non compete col foglio: si ferma sopra di esso. */
  body.nwr-dash.chat-open .nwr-drawer { max-height: 100%; }
}
@media (max-width: 720px) {
  .nwr-layout, body.nwr-dash.chat-open .nwr-layout {
    grid-template-columns: 1fr; grid-template-rows: auto 1fr;
    height: calc(100dvh - 52px);
  }
  .nwr-nav {
    flex-direction: row; overflow-x: auto; border-right: none;
    border-bottom: 1px solid var(--nwr-border-soft); padding: .45rem .6rem;
  }
  .nwr-nav-item { flex: none; flex-direction: row; gap: .45rem; padding: .5rem .7rem; }
  .nwr-nav-item span { display: inline; font-size: .78rem; }
  .nwr-main { grid-column: 1 / -1; grid-row: 2; }
  /* A colonna singola il dock CHIUSO prendeva comunque una riga implicita della
     griglia — `visibility: hidden` nasconde ma non toglie dal flusso — e la
     colonna di lavoro si riduceva a un centinaio di pixel. Non si vedeva finché
     il contenuto aveva un'altezza propria e scrollava; con la tela a piena
     altezza il difetto diventa una schermata vuota. Aperto torna in scena come
     foglio dal basso (`position: fixed`, regola dei 980px). */
  body.nwr-dash:not(.chat-open) .nwr-chat { display: none; }
  /* Il pannello dell'agente resta un FOGLIO DAL BASSO anche qui: metterlo nella
     stessa cella della colonna (`grid-row: 2`) lo faceva tornare a coprire tutto
     il lavoro, che è il difetto che questo ribaltamento doveva togliere. */
  body.nwr-dash.chat-open .nwr-chat { height: 66dvh; }
  .nwr-profile-name { display: none; }
}

/* ============================================================================
   LA TELA — superficie condivisa dei tre modi (bacheca · cronologia · mappa)

   Due assi indipendenti, ed è tutto il disegno del revamp:
     ZOOM (`--k`, dalla camera)  = quanta tela vedi.
     DISTANZA DI LETTURA (`--nwr-read`, da newsroom-stage.js) = quanto sei
     lontano dallo schermo. Moltiplica corpo del testo, puntine, spessori e
     aree di tocco; NON cambia quanta tela è inquadrata.
   Il terzo meccanismo li lega: `data-lod` (far|mid|near) sullo stage. A `far`
   le card smettono di rimpicciolire (`--cardk`) e diventano cartellini a
   grandezza di SCHERMO costante — è il comportamento dei segnaposto su una
   mappa, e l'unico modo onesto di mostrare sessanta nodi insieme.
   ========================================================================== */
.nwr-canvas--bleed { padding: 0; overflow: hidden; }
/* contenitore del modo dentro la tela: i moduli montano qui e prendono tutto */
.nwr-mode-host { height: 100%; min-height: 0; }

.nwr-tela {
  position: relative; height: 100%; min-height: 0;
  display: grid;
  grid-template-columns: minmax(0, 1fr) 0;
  grid-template-rows: auto minmax(0, 1fr);
  transition: grid-template-columns .18s ease;
}
.nwr-tela > .nwr-stagebar { grid-column: 1 / -1; grid-row: 1; }
.nwr-tela > .nwr-view     { grid-column: 1; grid-row: 2; }
.nwr-tela > .nwr-sheet    { grid-column: 2; grid-row: 2; }
/* La scheda è una COLONNA, non un overlay: il dettaglio non deve mai coprire
   l'oggetto di cui parla (era il difetto del vecchio pannello a 340px). */
@media (min-width: 1100px) {
  .nwr-tela.sheet-open { grid-template-columns: minmax(0, 1fr) var(--nwr-sheet-w, clamp(330px, 25vw, 460px)); }
}

/* Barra della tela: strumenti, distanza di lettura, modalità redazione.
   Su una riga sola che SCORRE, mai a capo: andando a capo si mangiava un
   centinaio di pixel di altezza alla tela ogni volta che la colonna si
   stringeva — cioè proprio quando la tela ne aveva più bisogno. */
.nwr-stagebar {
  display: flex; align-items: center; gap: .4rem; flex-wrap: nowrap;
  overflow-x: auto; overflow-y: hidden; scrollbar-width: thin;
  padding: .45rem clamp(.6rem, 2vw, 1rem);
  border-bottom: 1px solid var(--nwr-border-soft);
}
.nwr-stagebar > * { flex: none; }
.nwr-stagebar .nwr-btn { padding: .35rem .6rem; font-size: calc(.8rem * var(--nwr-read, 1)); white-space: nowrap; }
/* display:inline-flex sui bottoni vincerebbe sull'attributo hidden */
.nwr-stagebar .nwr-btn[hidden] { display: none; }
.nwr-stagebar-spacer { flex: 1 1 auto; min-width: .5rem; }
.nwr-board-zbtn { min-width: 2.2rem; font-size: calc(1rem * var(--nwr-read, 1)); }
.nwr-board-hint { font-size: calc(.76rem * var(--nwr-read, 1)); color: var(--nwr-faint); }
/* superstite del vecchio markup (cronologia): stessa forma della stagebar */
.nwr-board-toolbar { display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; margin: .8rem 0 .6rem; }

/* Distanza di lettura: un segmentato, non una manopola. Tre valori con un nome
   che dice DOVE sei, non quanto è grande il carattere. */
.nwr-read {
  display: flex; gap: .1rem; padding: .15rem;
  background: var(--nwr-surface); border: 1px solid var(--nwr-border); border-radius: 4px;
}
.nwr-read-btn {
  background: none; border: none; border-radius: 3px;
  padding: .25rem .55rem; font-size: calc(.74rem * var(--nwr-read, 1)); font-weight: 600;
  color: var(--nwr-muted);
}
.nwr-read-btn:hover { color: var(--nwr-text); }
.nwr-read-btn.active { background: var(--nwr-surface-2); color: var(--nwr-text); }

/* Il riquadro: prende TUTTA l'altezza che la tela gli lascia. Il vecchio
   `height: 560px` era il difetto centrale — una bacheca dentro un francobollo
   su uno schermo da parete. */
.nwr-view {
  position: relative; overflow: hidden; min-height: 0;
  touch-action: none; user-select: none; -webkit-user-select: none;
  cursor: grab;
}
.nwr-view.panning { cursor: grabbing; }
.nwr-stage { position: absolute; left: 0; top: 0; transform-origin: 0 0; }
.nwr-view-status {
  position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
  max-width: min(46ch, 82%); text-align: center; z-index: 5;
  padding: 1rem 1.2rem; border-radius: var(--nwr-radius-sm);
  background: color-mix(in srgb, var(--nwr-surface) 88%, transparent);
  border: 1px solid var(--nwr-border);
  font-size: calc(.86rem * var(--nwr-read, 1)); color: var(--nwr-muted); line-height: 1.55;
}
.nwr-view-status[hidden] { display: none; }

/* Il sughero, e la lampada sopra. Zero immagini: gradienti + UNA grana in SVG
   inline, applicata al FONDO e mai per card (per card è morte in frame rate). */
.nwr-view--cork {
  background:
    repeating-linear-gradient(83deg, rgba(255,255,255,.016) 0 2px, transparent 2px 7px),
    repeating-linear-gradient(-7deg, rgba(0,0,0,.10) 0 3px, transparent 3px 11px),
    radial-gradient(1200px 620px at 22% -6%, rgba(140,98,58,.30), transparent 62%),
    radial-gradient(900px 600px at 85% 100%, rgba(96,64,38,.22), transparent 55%),
    linear-gradient(160deg, #2b2018, var(--nwr-cork) 55%, #1e1610);
  box-shadow: inset 0 0 120px rgba(0,0,0,.6);
}
:root[data-theme="light"] .nwr-view--cork {
  background:
    repeating-linear-gradient(83deg, rgba(255,255,255,.05) 0 2px, transparent 2px 7px),
    repeating-linear-gradient(-7deg, rgba(90,55,25,.08) 0 3px, transparent 3px 11px),
    radial-gradient(1100px 500px at 20% 0%, rgba(190,148,105,.5), transparent 60%),
    linear-gradient(160deg, #c9a276, #b9905f 55%, #a97f4f);
  box-shadow: inset 0 0 70px rgba(80,50,20,.35);
}
/* grana (feTurbulence in un data-URI: nessun file, nessuna richiesta) */
.nwr-view--cork::before {
  content: ""; position: absolute; inset: 0; pointer-events: none; z-index: 0;
  opacity: .5; mix-blend-mode: overlay;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)' opacity='.34'/%3E%3C/svg%3E");
}
/* la pozza di luce della lampada da tavolo, in alto a sinistra */
.nwr-view--cork::after {
  content: ""; position: absolute; inset: 0; pointer-events: none; z-index: 1;
  background: radial-gradient(58% 60% at 26% 4%, rgba(255,226,170,.13), transparent 68%);
}
/* A panoramica, con movimento ridotto o su touch, grana e lampada si spengono:
   sono texture, e una texture illeggibile è solo rumore che costa GPU. */
.nwr-view[data-lod="far"]::before,
.nwr-view[data-lod="far"]::after { opacity: 0; }
@media (prefers-reduced-motion: reduce), (pointer: coarse) {
  .nwr-view--cork::before { display: none; }
}

/* --- Fili di lana ------------------------------------------------------------
   `non-scaling-stroke`: lo spessore resta in pixel di SCHERMO qualunque sia lo
   zoom — un filo di 2px a k=0,3 sparirebbe, e la struttura del caso è
   esattamente ciò che una panoramica deve mostrare. */
.nwr-threads { position: absolute; left: 0; top: 0; overflow: visible; pointer-events: none; z-index: 2; }
.nwr-yarn-shadow {
  fill: none; stroke: rgba(0,0,0,.5); stroke-width: calc(3.4px * var(--nwr-read, 1));
  vector-effect: non-scaling-stroke; transform: translate(1.5px, 3px);
}
.nwr-yarn {
  fill: none; stroke-width: calc(2.4px * var(--nwr-read, 1));
  stroke-linecap: round; vector-effect: non-scaling-stroke;
}
.nwr-yarn-hit {
  fill: none; stroke: transparent; stroke-width: calc(18px * var(--nwr-read, 1));
  vector-effect: non-scaling-stroke; pointer-events: stroke; cursor: pointer;
}
.nwr-board-cards { position: absolute; left: 0; top: 0; z-index: 3; }

/* --- Le card: il MATERIALE porta l'epistemologia ----------------------------
   Si vede di che natura è una cosa PRIMA di leggerla:
     fact           → velina + puntina d'acciaio (testa del colore-verdetto)
     fact_reported  → ritaglio di giornale + graffetta + bordo strappato
     interpretation → kraft + nastro + timbro a inchiostro blu
   ⚠️ Nessun rosso fra i materiali: il rosso è di `smentito` e di nient'altro.
   Nessun esadecimale epistemico qui dentro — i colori arrivano da ui/tokens.py
   (`--nwr-v-*`, `--nwr-p-*`, `--nwr-e-*`) e i materiali da :root. */
.nwr-bcard {
  position: absolute;
  width: calc(var(--bw, 190px) * var(--nwr-read, 1));
  transform: translate(-50%, 0) rotate(var(--rot, 0deg)) scale(var(--cardk, 1));
  transform-origin: 50% 0;
  display: block; text-align: left; appearance: none; border: 0;
  background: var(--nwr-onionskin); color: var(--nwr-ink);
  border-radius: 2px;
  padding: calc(16px * var(--nwr-read, 1)) calc(11px * var(--nwr-read, 1)) calc(11px * var(--nwr-read, 1));
  box-shadow: 0 10px 22px -8px rgba(0,0,0,.65), 0 2px 4px rgba(0,0,0,.35);
  cursor: pointer;
  font-family: var(--nwr-body);
  font-size: calc(.8rem * var(--nwr-read, 1)); line-height: 1.35;
  transition: opacity .16s ease, filter .16s ease;
}
.nwr-bcard:hover { box-shadow: 0 14px 30px -8px rgba(0,0,0,.72), 0 2px 4px rgba(0,0,0,.4); }
.nwr-bcard:focus-visible { outline: 3px solid var(--nwr-primary); outline-offset: 3px; z-index: 22; }
.nwr-bcard.dragging {
  cursor: grabbing; z-index: 30;
  transform: translate(-50%, 0) rotate(0deg) scale(calc(var(--cardk, 1) * 1.04));
  box-shadow: 0 26px 48px -14px rgba(0,0,0,.8);
}
.nwr-bcard.sel { outline: 3px solid var(--nwr-primary); outline-offset: 3px; z-index: 20; }
.nwr-bcard--dim { opacity: .62; }

/* puntina d'acciaio: testa del colore-verdetto, gambo che proietta ombra */
.nwr-bcard-pin {
  position: absolute; top: calc(-9px * var(--nwr-read, 1)); left: 50%;
  translate: -50% 0;
  width: calc(17px * var(--nwr-read, 1)); height: calc(17px * var(--nwr-read, 1));
  border-radius: 50%; z-index: 4;
  background:
    radial-gradient(circle at 34% 26%, rgba(255,255,255,.9), transparent 46%),
    conic-gradient(from 205deg,
      color-mix(in srgb, var(--pin, var(--nwr-steel)) 55%, #000),
      var(--pin, var(--nwr-steel)) 130deg,
      color-mix(in srgb, var(--pin, var(--nwr-steel)) 62%, #000) 300deg,
      color-mix(in srgb, var(--pin, var(--nwr-steel)) 55%, #000));
  box-shadow: 0 3px 6px rgba(0,0,0,.6), inset 0 0 0 1px rgba(0,0,0,.28);
}

/* graffetta: due pieghe di filo d'acciaio sul bordo del ritaglio */
.nwr-bcard-clip {
  position: absolute; top: calc(-11px * var(--nwr-read, 1)); left: calc(14px * var(--nwr-read, 1));
  width: calc(15px * var(--nwr-read, 1)); height: calc(33px * var(--nwr-read, 1));
  border: calc(2.4px * var(--nwr-read, 1)) solid var(--nwr-steel);
  border-radius: 999px; rotate: -7deg; z-index: 4;
  background: linear-gradient(102deg, rgba(255,255,255,.55), transparent 42%);
  box-shadow: 0 2px 4px rgba(0,0,0,.45);
}
.nwr-bcard-clip::after {
  content: ""; position: absolute; inset: calc(5px * var(--nwr-read, 1)) calc(3px * var(--nwr-read, 1)) calc(11px * var(--nwr-read, 1));
  border: calc(2px * var(--nwr-read, 1)) solid var(--nwr-steel); border-bottom: none;
  border-radius: 999px 999px 0 0; opacity: .85;
}

/* nastro adesivo ingiallito: sta a cavallo del bordo, come nella realtà */
.nwr-bcard-tape {
  position: absolute; top: calc(-10px * var(--nwr-read, 1)); left: 50%;
  translate: -50% 0; rotate: -1.6deg; z-index: 4;
  width: 56%; height: calc(21px * var(--nwr-read, 1));
  background: var(--nwr-tape); mix-blend-mode: overlay;
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.22);
}

/* timbro a inchiostro: MAI rosso — il rosso è di `smentito` */
.nwr-bcard-stamp {
  position: absolute; right: calc(7px * var(--nwr-read, 1)); bottom: calc(6px * var(--nwr-read, 1));
  z-index: 3; rotate: -11deg;
  padding: calc(1px * var(--nwr-read, 1)) calc(5px * var(--nwr-read, 1));
  font-family: var(--nwr-record); font-size: calc(.54rem * var(--nwr-read, 1));
  font-weight: 700; letter-spacing: .12em; text-transform: uppercase;
  color: var(--nwr-stamp); border: calc(2px * var(--nwr-read, 1)) solid var(--nwr-stamp);
  border-radius: 2px; opacity: .72; mix-blend-mode: multiply;
}

.nwr-bcard-title { font-weight: 700; margin-top: .3rem; overflow-wrap: anywhere; }
.nwr-bcard-title--claim { font-family: var(--nwr-evidence); font-weight: 400; font-style: italic; }
.nwr-bcard-sub {
  font-size: calc(.66rem * var(--nwr-read, 1)); text-transform: uppercase;
  letter-spacing: .05em; color: var(--nwr-ink-faded);
}
.nwr-bcard-meta { font-size: calc(.68rem * var(--nwr-read, 1)); color: var(--nwr-ink-faded); margin-top: .25rem; }
.nwr-bcard-bates {
  font-family: var(--nwr-record); font-size: calc(.62rem * var(--nwr-read, 1));
  color: var(--nwr-ink-faded); margin-top: .2rem; overflow-wrap: anywhere;
}
.nwr-bcard-verdict {
  display: inline-block; margin-top: .45rem; padding: .1rem .45rem;
  border-radius: 999px; font-size: calc(.66rem * var(--nwr-read, 1)); font-weight: 700;
  background: color-mix(in srgb, var(--pin, var(--nwr-steel)) 22%, var(--nwr-onionskin));
  border: 1px solid color-mix(in srgb, var(--pin, var(--nwr-steel)) 55%, var(--nwr-onionskin));
}
/* l'estratto compare solo da vicino: è il livello di dettaglio più profondo che
   una card possa portare prima che si apra la scheda */
.nwr-bcard-excerpt {
  display: none; margin: .4rem 0 0; padding-left: .5rem;
  border-left: 2px solid color-mix(in srgb, var(--nwr-ink) 22%, transparent);
  font-family: var(--nwr-evidence); font-size: calc(.72rem * var(--nwr-read, 1));
  color: var(--nwr-ink-faded); line-height: 1.4;
}
.nwr-bcard-media { position: relative; margin: .25rem -4px 0; background: color-mix(in srgb, var(--nwr-ink) 12%, var(--nwr-onionskin)); border-radius: 2px; overflow: hidden; }
.nwr-bcard-img { display: block; width: 100%; height: calc(108px * var(--nwr-read, 1)); object-fit: cover; }
.nwr-bcard-mono {
  display: flex; align-items: center; justify-content: center;
  height: calc(108px * var(--nwr-read, 1));
  font-family: var(--nwr-evidence); font-size: calc(2.4rem * var(--nwr-read, 1));
  font-weight: 700; color: color-mix(in srgb, var(--nwr-ink) 45%, transparent);
}
.nwr-bcard-badge {
  position: absolute; left: 4px; bottom: 4px; z-index: 2;
  padding: .12rem .4rem; border-radius: 3px;
  background: rgba(20,16,10,.85); color: #ffd98a;
  font-size: calc(.62rem * var(--nwr-read, 1)); font-weight: 700; letter-spacing: .02em;
}
.nwr-bcard-badge--inline { position: static; display: inline-block; margin: .3rem 0; }

/* --- i tre materiali --------------------------------------------------------- */
/* fact: velina. Resta il default della card. */
.nwr-bcard--source { background: color-mix(in srgb, var(--nwr-onionskin) 88%, var(--nwr-kraft)); }
.nwr-bcard--dossier_page { --bw: 150px; }

/* fact_reported: ritaglio di giornale, bordo strappato in basso, colonnina */
.nwr-bcard--hit {
  --tooth: calc(10px * var(--nwr-read, 1));
  background: var(--nwr-newsprint);
  font-family: var(--nwr-body);
  padding-bottom: calc(14px * var(--nwr-read, 1));
  -webkit-mask:
    conic-gradient(from -45deg at bottom, #0000, #000 1deg 89deg, #0000 90deg)
      0 100% / var(--tooth) calc(var(--tooth) / 2) repeat-x,
    linear-gradient(#000 0 0) 0 0 / 100% calc(100% - var(--tooth) / 2) no-repeat;
  mask:
    conic-gradient(from -45deg at bottom, #0000, #000 1deg 89deg, #0000 90deg)
      0 100% / var(--tooth) calc(var(--tooth) / 2) repeat-x,
    linear-gradient(#000 0 0) 0 0 / 100% calc(100% - var(--tooth) / 2) no-repeat;
}
.nwr-bcard--hit .nwr-bcard-title { font-family: var(--nwr-evidence); font-weight: 700; }
.nwr-bcard--hit .ai-video-embed { margin: 0; border-radius: 2px; }

/* interpretation: kraft. Il nastro e il timbro li aggiunge il JS. */
.nwr-bcard--entity {
  background:
    repeating-linear-gradient(94deg, rgba(0,0,0,.022) 0 2px, transparent 2px 6px),
    var(--nwr-kraft);
  color: var(--nwr-ink);
  overflow: hidden;
}

/* --- LOD: cosa mostra una card a ciascuna distanza apparente ---------------- */
/* far — cartellino a grandezza di schermo costante: puntina, poche parole. */
.nwr-stage[data-lod="far"] .nwr-bcard {
  --bw: 118px;
  font-size: calc(.7rem * var(--nwr-read, 1));
  padding: calc(11px * var(--nwr-read, 1)) calc(8px * var(--nwr-read, 1)) calc(8px * var(--nwr-read, 1));
}
.nwr-stage[data-lod="far"] .nwr-bcard-media,
.nwr-stage[data-lod="far"] .nwr-bcard-meta,
.nwr-stage[data-lod="far"] .nwr-bcard-bates,
.nwr-stage[data-lod="far"] .nwr-bcard-verdict,
.nwr-stage[data-lod="far"] .nwr-bcard-stamp,
.nwr-stage[data-lod="far"] .nwr-bcard-tape { display: none; }
.nwr-stage[data-lod="far"] .nwr-bcard-title {
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
  line-clamp: 2; overflow: hidden;
}
/* near — la card si apre sull'estratto */
.nwr-stage[data-lod="near"] .nwr-bcard-excerpt { display: block; }

/* --- Focus: un click accende ciò che regge il nodo, spegne il resto --------- */
.nwr-stage--focus .nwr-bcard:not(.is-lit) { opacity: .18; filter: saturate(.3); }
.nwr-stage--focus .nwr-yarn:not(.is-lit),
.nwr-stage--focus .nwr-yarn-shadow:not(.is-lit) { opacity: .1; }

/* --- Export PNG: html2canvas non rasterizza maschere né blend --------------
   Senza questa classe l'export (che oggi funziona) tornerebbe con i ritagli
   invisibili. Vive per la durata di uno scatto. */
.nwr-exporting::before, .nwr-exporting::after { display: none !important; }
.nwr-exporting .nwr-bcard--hit { -webkit-mask: none !important; mask: none !important; }
.nwr-exporting .nwr-bcard-tape,
.nwr-exporting .nwr-bcard-stamp { mix-blend-mode: normal !important; }

/* ============================================================================
   LA SCHEDA DEL NODO (newsroom-sheet.js) — un click, e vedi cosa lo regge.
   Colonna dentro la tela sopra i 1100px; foglio dal basso a tre fermate sotto.
   Non è mai un overlay sopra la tela: il dettaglio non deve coprire l'oggetto
   di cui parla.
   ========================================================================== */
.nwr-sheet {
  position: relative; min-width: 0; min-height: 0; overflow: hidden;
  display: flex; flex-direction: column;
  background: var(--nwr-surface); color: var(--nwr-text);
  border-left: 1px solid var(--nwr-border);
  box-shadow: -24px 0 48px -32px rgba(0,0,0,.9);
  cursor: auto; user-select: text; -webkit-user-select: text;
}
/* display:flex sopra vincerebbe sull'attributo hidden: va ribadito (stessa
   trappola già pagata dal pannello dettaglio e dalla scrivania) */
.nwr-sheet[hidden] { display: none; }
.nwr-sheet-grip { display: none; }
.nwr-sheet-head {
  display: flex; gap: .6rem; align-items: flex-start; flex: none;
  padding: .8rem .9rem .55rem; border-bottom: 1px solid var(--nwr-border-soft);
}
.nwr-sheet-headtext { flex: 1; min-width: 0; }
.nwr-sheet-sub {
  font-family: var(--nwr-record); font-size: calc(.6rem * var(--nwr-read, 1));
  text-transform: uppercase; letter-spacing: .12em; color: var(--nwr-faint);
}
.nwr-sheet-sub[hidden] { display: none; }
.nwr-sheet-title {
  font-family: var(--nwr-evidence); font-weight: 700;
  font-size: calc(1rem * var(--nwr-read, 1)); line-height: 1.3; margin-top: .22rem;
  overflow-wrap: anywhere;
}
.nwr-sheet-close {
  flex: none; border: 0; background: none; color: var(--nwr-muted);
  font-size: calc(1rem * var(--nwr-read, 1)); padding: .2rem .35rem; border-radius: 3px;
}
.nwr-sheet-close:hover { color: var(--nwr-text); background: var(--nwr-surface-2); }
.nwr-sheet-body {
  flex: 1; min-height: 0; overflow-y: auto;
  padding: .8rem .9rem 1.6rem;
  display: flex; flex-direction: column; gap: .6rem; align-items: stretch;
  font-size: calc(.86rem * var(--nwr-read, 1));
}

/* natura del nodo: la prima cosa che la scheda dice */
.nwr-sheet-epi {
  font-size: calc(.74rem * var(--nwr-read, 1)); padding: .45rem .65rem;
  border-radius: var(--nwr-radius-sm); border: 1px solid var(--nwr-border);
  color: var(--nwr-muted); background: var(--nwr-surface-2);
}
.nwr-sheet-epi--interpretation {
  border-color: var(--nwr-e-interpretation); color: var(--nwr-e-interpretation);
  background: color-mix(in srgb, var(--nwr-e-interpretation) 12%, transparent);
}
.nwr-sheet-epi--fact_reported {
  border-color: var(--nwr-e-fact_reported); color: var(--nwr-e-fact_reported);
  background: color-mix(in srgb, var(--nwr-e-fact_reported) 12%, transparent);
}

.nwr-sheet-p { line-height: 1.55; }
.nwr-sheet-meta { font-size: calc(.76rem * var(--nwr-read, 1)); color: var(--nwr-muted); }
.nwr-sheet-record { display: flex; gap: .4rem; align-items: baseline; flex-wrap: wrap; font-size: calc(.76rem * var(--nwr-read, 1)); }
.nwr-sheet-reclabel { color: var(--nwr-faint); text-transform: uppercase; letter-spacing: .08em; font-size: calc(.62rem * var(--nwr-read, 1)); }
.nwr-sheet-quote { margin: 0; }
.nwr-sheet-quote .nwr-quote {
  margin: 0; padding: .5rem .7rem;
  border-left: 3px solid var(--nwr-border);
  background: var(--nwr-surface-2); border-radius: 0 var(--nwr-radius-sm) var(--nwr-radius-sm) 0;
  font-family: var(--nwr-evidence); line-height: 1.5;
}
.nwr-sheet-cite { font-family: var(--nwr-record); font-size: calc(.66rem * var(--nwr-read, 1)); color: var(--nwr-faint); margin-top: .25rem; }
.nwr-sheet-link { color: var(--nwr-primary); text-decoration: underline; font-size: calc(.82rem * var(--nwr-read, 1)); align-self: flex-start; }
.nwr-sheet-img { position: relative; border-radius: var(--nwr-radius-sm); overflow: hidden; background: var(--nwr-surface-2); }
.nwr-sheet-img img { display: block; width: 100%; height: auto; }
.nwr-sheet-badge {
  position: absolute; left: 6px; bottom: 6px;
  padding: .12rem .4rem; border-radius: 3px;
  background: rgba(20,16,10,.85); color: #ffd98a;
  font-size: calc(.64rem * var(--nwr-read, 1)); font-weight: 700;
}
.nwr-sheet-sep { border: none; border-top: 1px dashed var(--nwr-border); margin: .2rem 0; width: 100%; }

.nwr-sheet-group { display: flex; flex-direction: column; gap: .3rem; }
.nwr-sheet-grouphead {
  font-family: var(--nwr-record); font-size: calc(.6rem * var(--nwr-read, 1));
  text-transform: uppercase; letter-spacing: .12em; color: var(--nwr-faint);
}
.nwr-sheet-chips { display: flex; flex-wrap: wrap; gap: .3rem; }
.nwr-sheet-chip {
  border: 1px solid var(--nwr-border); background: var(--nwr-surface-2); color: var(--nwr-text);
  border-radius: 3px; padding: .2rem .5rem; font-size: calc(.74rem * var(--nwr-read, 1));
  text-align: left;
}
.nwr-sheet-chip:not(.is-static):hover { border-color: var(--nwr-primary); color: var(--nwr-primary); }
.nwr-sheet-chip.is-static { color: var(--nwr-muted); }

/* le righe navigabili sono ciò che rende l'approfondimento un PERCORSO: da un
   punto alle fonti che lo reggono, da una fonte agli altri punti che tiene su */
.nwr-sheet-row {
  display: flex; gap: .5rem; align-items: flex-start; width: 100%; text-align: left;
  border: 1px solid var(--nwr-border-soft); background: var(--nwr-surface-2);
  border-radius: 3px; padding: .4rem .55rem; color: var(--nwr-text);
}
.nwr-sheet-row:not(.is-static):hover { border-color: var(--nwr-primary); }
.nwr-sheet-rowdot {
  flex: none; width: .55rem; height: .55rem; border-radius: 50%; margin-top: .35rem;
  background: var(--dot, var(--nwr-steel));
}
.nwr-sheet-rowtext { display: flex; flex-direction: column; gap: .1rem; min-width: 0; }
.nwr-sheet-rowlabel { font-size: calc(.8rem * var(--nwr-read, 1)); line-height: 1.35; overflow-wrap: anywhere; }
.nwr-sheet-rowsub { font-size: calc(.68rem * var(--nwr-read, 1)); color: var(--nwr-faint); }
.nwr-sheet-ask { align-self: stretch; }
.nwr-sheet-danger { color: var(--nwr-bad); border-color: color-mix(in srgb, var(--nwr-bad) 45%, transparent); }

/* Foglio dal basso: stesso idioma del dock chat a schermo stretto. Tre fermate
   (sbircia / metà / intero) perché la tela deve restare visibile SOPRA la
   scheda mentre la si legge. */
@media (max-width: 1099px) {
  .nwr-sheet {
    position: fixed; left: 0; right: 0; bottom: 0; top: auto; z-index: 60;
    height: calc(var(--detent, .62) * 100dvh);
    border-left: none; border-top: 1px solid var(--nwr-border);
    border-radius: 12px 12px 0 0;
    box-shadow: 0 -26px 54px -28px rgba(0,0,0,.95);
    transition: height .18s ease;
  }
  .nwr-sheet.is-dragging { transition: none; }
  .nwr-sheet-grip {
    display: block; flex: none; height: 1.4rem; position: relative;
    cursor: grab; touch-action: none;
  }
  .nwr-sheet-grip::after {
    content: ""; position: absolute; left: 50%; top: .55rem; translate: -50% 0;
    width: 2.8rem; height: 4px; border-radius: 999px; background: var(--nwr-border);
  }
  .nwr-sheet-head { padding-top: .2rem; }
}

/* Legenda: una fascia sul bordo della tela, non un blocco sotto la piega —
   serve mentre si guarda, non dopo aver scrollato. */
.nwr-board-legend {
  position: absolute; left: .6rem; right: .6rem; bottom: .5rem; z-index: 6;
  display: flex; flex-wrap: wrap; gap: .8rem; align-items: center;
  padding: .4rem .7rem; border-radius: var(--nwr-radius-sm);
  background: color-mix(in srgb, var(--nwr-bg) 78%, transparent);
  border: 1px solid var(--nwr-border-soft);
  font-size: calc(.72rem * var(--nwr-read, 1));
  pointer-events: none;
}
.nwr-board-legend-yarn {
  display: inline-block; width: calc(26px * var(--nwr-read, 1)); border-top: 3px solid;
  vertical-align: middle; margin-right: .35rem;
}
/* il timbro di stato della modalità redazione: cosa mostra la tela, e da quando */
.nwr-board-stampstate {
  margin-left: auto; display: flex; gap: .5rem; align-items: center;
  font-family: var(--nwr-record); font-size: calc(.66rem * var(--nwr-read, 1));
  color: var(--nwr-faint); letter-spacing: .06em; text-transform: uppercase;
}
.nwr-board-live {
  width: .5rem; height: .5rem; border-radius: 50%; background: var(--nwr-ok);
  box-shadow: 0 0 0 0 color-mix(in srgb, var(--nwr-ok) 60%, transparent);
}
.nwr-board-live.is-pulse { animation: nwr-live 1.6s ease-out; }
@keyframes nwr-live {
  from { box-shadow: 0 0 0 0 color-mix(in srgb, var(--nwr-ok) 70%, transparent); }
  to   { box-shadow: 0 0 0 12px transparent; }
}
@media (prefers-reduced-motion: reduce) { .nwr-board-live.is-pulse { animation: none; } }

/* lightbox minima (GLightbox è CDN-only nella pagina classica: qui niente CDN) */
.nwr-board-lightbox {
  position: fixed; inset: 0; z-index: 1000;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: .6rem; padding: 2rem; background: rgba(6,10,14,.9); cursor: zoom-out;
}
.nwr-board-lightbox img {
  max-width: min(92vw, 1100px); max-height: 84vh;
  border-radius: 6px; box-shadow: 0 30px 80px rgba(0,0,0,.8);
}
.nwr-board-lightbox-cap { color: #cfdae4; font-size: .85rem; }

/* Modalità redazione: a schermo pieno restano la tela e la barra, niente altro. */
.nwr-tela:fullscreen { background: var(--nwr-bg); }
.nwr-tela:fullscreen .nwr-stagebar { padding: .5rem 1rem; }

/* Su schermo stretto la legenda intera coprirebbe metà tela. Resta il timbro di
   stato (nodi, fili, ultimo aggiornamento); la grammatica dei materiali e dei
   fili la spiega il «?» della barra, e ogni scheda dichiara la natura del nodo
   che apre — nasconderla qui non toglie nessuna informazione necessaria. */
@media (max-width: 760px) {
  .nwr-board-legend { left: .4rem; right: .4rem; bottom: .35rem; padding: .3rem .5rem; }
  .nwr-board-legend .nwr-map-legend-group { display: none; }
  .nwr-board-stampstate { margin-left: 0; }
  .nwr-desk-head { gap: .5rem; padding: .45rem .8rem; }
  /* riga propria: con `min-width: 0` accanto al selettore di stato il titolo
     andava a capo una PAROLA per riga */
  .nwr-desk-title { font-size: 1rem; flex: 1 0 100%; min-width: 0; order: -1; }
  .nwr-modes { width: 100%; overflow-x: auto; }
}

/* filtro epistemico: «Solo fatti» nasconde interpretazioni (card entità e fili
   tratteggiati) — nasconderle è lecito, spacciarle mai */
.nwr-board--facts-only .nwr-bcard--entity,
.nwr-board--facts-only .nwr-yarn--interp { display: none; }
.nwr-btn.active { border-color: var(--nwr-primary); color: var(--nwr-primary); }

/* ============================================================================
   Il caso comune — feed condiviso dei contributi (modules/newsroom/commons.py)
   Regola di tono, ereditata dalla board: la NATURA di un contributo si vede
   prima del contenuto. `interpretation` porta il color spago dei fili
   interpretativi (--nwr-e-interpretation) — lo stesso segno visivo, così «ipotesi» significa
   la stessa cosa in tutta la piattaforma. Nessun colore-verdetto qui: un
   contributo non è un verdetto, e il rosso resta a `smentito` e a nient'altro.
   ========================================================================== */
.nwr-comune-bar {
  display: flex; flex-wrap: wrap; gap: .6rem; align-items: center;
  margin: 1rem 0 1.2rem;
}
.nwr-select, .nwr-input, .nwr-textarea {
  font: inherit; font-size: .88rem; color: var(--nwr-text);
  background: var(--nwr-surface); border: 1px solid var(--nwr-border);
  border-radius: var(--nwr-radius-sm); padding: .45rem .6rem;
}
.nwr-input, .nwr-textarea { width: 100%; }
.nwr-textarea { resize: vertical; line-height: 1.5; }
.nwr-select:focus, .nwr-input:focus, .nwr-textarea:focus {
  outline: 2px solid var(--nwr-primary); outline-offset: 1px;
}
.nwr-check {
  display: inline-flex; align-items: center; gap: .35rem;
  font-size: .85rem; color: var(--nwr-muted);
}

.nwr-comune-form {
  display: flex; flex-direction: column; gap: .7rem;
  background: var(--nwr-surface); border: 1px solid var(--nwr-border);
  border-radius: var(--nwr-radius); padding: 1rem; margin-bottom: 1.2rem;
  box-shadow: var(--nwr-shadow);
}

.nwr-comune-feed { display: flex; flex-direction: column; gap: .9rem; }
.nwr-comune-card {
  background: var(--nwr-surface); border: 1px solid var(--nwr-border);
  border-left: 4px solid var(--nwr-border);
  border-radius: var(--nwr-radius); padding: .9rem 1rem;
}
/* il bordo sinistro È la natura: documentato / riportato / interpretazione */
.nwr-comune-card--fact   { border-left-color: var(--nwr-ok); }
.nwr-comune-card--rep    { border-left-color: var(--nwr-warn); }
.nwr-comune-card--interp { border-left-color: var(--nwr-e-interpretation); }

.nwr-comune-head {
  display: flex; flex-wrap: wrap; gap: .5rem; align-items: center;
  font-size: .78rem; color: var(--nwr-muted); margin-bottom: .45rem;
}
.nwr-epi-badge {
  font-weight: 700; padding: .12rem .5rem; border-radius: 999px;
  border: 1px solid currentColor;
}
.nwr-epi-badge--fact   { color: var(--nwr-ok); background: var(--nwr-ok-bg); }
.nwr-epi-badge--rep    { color: var(--nwr-warn); background: var(--nwr-warn-bg); }
.nwr-epi-badge--interp { color: #b8863a; background: rgba(215,165,86,.14); }
:root[data-theme="dark"] .nwr-epi-badge--interp { color: var(--nwr-e-interpretation); }
.nwr-comune-kind {
  padding: .12rem .45rem; border-radius: 999px;
  background: var(--nwr-surface-2);
}
.nwr-comune-author { font-weight: 600; color: var(--nwr-text); }
.nwr-comune-when { margin-left: auto; color: var(--nwr-faint); }

.nwr-comune-title { margin: .2rem 0 .35rem; font-size: 1.02rem; }
.nwr-comune-body { font-size: .92rem; line-height: 1.6; }
.nwr-comune-body > :first-child { margin-top: 0; }
.nwr-comune-body > :last-child { margin-bottom: 0; }
.nwr-comune-anchor {
  margin-top: .5rem; font-size: .78rem; color: var(--nwr-muted);
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
}

/* Citazione: lo STATO è parte dell'informazione. Una citazione non risolta non
   si nasconde e non si colora di errore — si dichiara, perché il contributo
   resta leggibile e il lettore deve sapere su cosa NON poggia. */
.nwr-cite {
  display: flex; flex-wrap: wrap; gap: .4rem; align-items: baseline;
  margin-top: .5rem; padding: .4rem .55rem; font-size: .8rem;
  background: var(--nwr-surface-2); border-radius: var(--nwr-radius-sm);
}
.nwr-cite--ok  { border-left: 2px solid var(--nwr-ok); }
.nwr-cite--raw { border-left: 2px solid var(--nwr-faint); }
.nwr-cite-ref {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-weight: 600;
}
.nwr-cite-state { color: var(--nwr-muted); }
.nwr-cite--raw .nwr-cite-state { font-style: italic; }
.nwr-cite-ex {
  flex-basis: 100%; margin: .3rem 0 0; padding-left: .6rem;
  border-left: 2px solid var(--nwr-border); color: var(--nwr-muted);
}
/* Catena Bates: sta SOTTO la citazione e su tutta la riga, perché è un
   approfondimento di quella fonte — non un secondo dato accanto a essa. */
.nwr-cite-family { flex-basis: 100%; align-self: flex-start; font-size: .75rem; }
.nwr-cite-chain {
  flex-basis: 100%; margin-top: .4rem; padding: .4rem .55rem;
  border-left: 2px solid var(--nwr-border); background: var(--nwr-surface);
  border-radius: var(--nwr-radius-sm);
}
.nwr-cite-chain-row {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: .75rem;
}

.nwr-comune-actions { display: flex; gap: .5rem; margin-top: .7rem; }
.nwr-comune-more { display: flex; justify-content: center; margin: 1.2rem 0; }

/* ------------------------------------------------- Banco delle simulazioni */
.nwr-comune-views { margin-bottom: 1rem; }
.nwr-sim-list { display: flex; flex-direction: column; gap: .9rem; }
.nwr-sim-card {
  background: var(--nwr-surface); border: 1px solid var(--nwr-border);
  border-radius: var(--nwr-radius); padding: .9rem 1rem;
}
.nwr-sim-question {
  margin: .2rem 0 .5rem; font-size: .9rem; color: var(--nwr-muted);
  line-height: 1.5;
}
.nwr-sim-meta {
  display: flex; flex-wrap: wrap; gap: .8rem; font-size: .75rem;
  color: var(--nwr-faint); font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
}
.nwr-sim-status { padding: .12rem .45rem; border-radius: 999px; background: var(--nwr-surface-2); }
.nwr-sim-status--in_corso { color: var(--nwr-warn); background: var(--nwr-warn-bg); }
.nwr-sim-status--pronta   { color: var(--nwr-ok);   background: var(--nwr-ok-bg); }
.nwr-sim-status--errore   { color: var(--nwr-bad);  background: var(--nwr-bad-bg); }
.nwr-sim-progress {
  margin-top: .6rem; font-size: .82rem; color: var(--nwr-muted);
  padding: .4rem .6rem; background: var(--nwr-surface-2);
  border-radius: var(--nwr-radius-sm);
}
/* Il verdetto d'insieme: «non verificabile» è GRIGIO NEUTRO come ∅ altrove —
   il rosso resta a ciò che l'archivio contraddice davvero, e a nient'altro. */
.nwr-sim-verdict {
  margin: .7rem 0; padding: .5rem .75rem; font-weight: 700;
  border-radius: var(--nwr-radius-sm); border-left: 4px solid currentColor;
}
.nwr-sim-verdict--ok   { color: var(--nwr-ok);   background: var(--nwr-ok-bg); }
.nwr-sim-verdict--part { color: var(--nwr-warn); background: var(--nwr-warn-bg); }
.nwr-sim-verdict--bad  { color: var(--nwr-bad);  background: var(--nwr-bad-bg); }
.nwr-sim-verdict--none { color: var(--nwr-muted); background: var(--nwr-surface-2); }

.nwr-sim-chart { margin: .7rem 0; overflow-x: auto; }
.nwr-sim-bars { width: 100%; min-width: 420px; height: auto; }
.nwr-sim-bar { fill: var(--nwr-primary); }
.nwr-sim-bar-l { fill: var(--nwr-muted); font-size: 11px; font-family: var(--nwr-body); }
.nwr-sim-bar-v { fill: var(--nwr-faint); font-size: 11px; font-family: var(--nwr-body); }
